Nmap
El software de los servicios de red es especialmente delicado. Debemos vigilar qué software tenemos activo y qué actualizaciones tiene pendientes (haciendo conexiones o esperándolas). Para conocer el software de red activo, podemos utilizar un par de herramientas sencillas: Nmap y netstat.
La herramienta Nmap, disponible para sistemas Linux y Windows (descargar desde nmap.org), además del escaneo de puertos para determinar los servicios disponibles en una máquina, nos permite conectarnos a cada uno de ellos. Después analiza los mensajes que generan estos servidores para identificar la versión concreta del sistema operativo y la versión concreta del software de servidor (server fingerprint) que está escuchando en cada puerto.
Es decir, aunque intentemos despistar arrancando servicios en puertos que no son los esperados (80 para HTTP y otros), la herramienta reconoce el puerto como abierto y consigue identificar el servicio.
La información de versión es muy útil para un atacante porque puede consultar en su base de datos las vulnerabilidades de cada versión de un servicio y así elegir mejor el tipo de ataque que puede lanzar contra la máquina.
Para cada puerto, la herramienta ofrece cuatro posibles estados:
- open (abierto): la máquina acepta paquetes dirigidos a ese puerto, donde algún servidor está escuchando y los procesará adecuadamente.
- closed (cerrado): no hay ningún servidor escuchando.
- filtered: Nmap no puede decir si ese puerto está abierto o cerrado porque alguien está bloqueando el intento de conexión (router, firewall).
- unfiltered: el puerto no está bloqueado, pero no se puede concluir si está abierto o cerrado.
Comando nmap sobre la ip del router que hace de puerta de enlace en una máquina Windows.
C:\Program Files (x86)\Nmap>nmap -F --system-dns 192.168.1.1
Starting Nmap 7.12 ( https://nmap.org ) at 2016-07-31 10:34 Hora de verano romance
Nmap scan report for SMBSHARE (192.168.1.1)
Host is up (0.041s latency).
Not shown: 96 closed ports
PORT STATE SERVICE
23/tcp open telnet
80/tcp open http
139/tcp open netbios-ssn
445/tcp open microsoft-ds
MAC Address: 88:A8:2C:21:53:18 (zte)
Nmap done: 1 IP address (1 host up) scanned in 4.89 seconds
Comando nmap sobre la ip de la máquina virtual donde está corriendo el servidor web Apache.
C:\Program Files (x86)\Nmap>nmap -F --system-dns 192.168.1.10
Starting Nmap 7.12 ( https://nmap.org ) at 2016-07-31 10:38 Hora de verano romance
Nmap scan report for 192.168.1.10
Host is up (0.00s latency).
Not shown: 95 closed ports
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
80/tcp open http
443/tcp open https
3306/tcp open mysql
MAC Address: 08:00:27:2C:8B:77 (Oracle VirtualBox virtual NIC)
Nmap done: 1 IP address (1 host up) scanned in 4.71 seconds
NetStat
Netstat (network statistics) es una herramienta que se ejecuta desde la línea de comandos que nos muestra un listado de las conexiones activas de nuestro equipo, tanto entrantes como salientes.
Existen versiones de este comando en varios sistemas como Unix, GNU/Linux, Mac OS X, Windows y BeOS.
La información que obtenemos con este comando incluye el protocolo en uso, las tablas de ruteo, las estadísticas de las interfaces y el estado de la conexión. Existen, además de la versión para línea de comandos, herramientas con interfaz gráfica (GUI) en casi todos los sistemas operativos desarrollados por terceros.
Para cada puerto, la herramienta ofrece los estados:
- ESTABLISHED El socket tiene una conexión establecida
- SYN_SENT El socket está intentando iniciar una conexión
- SYN_RECV Una petición de conexión fue recibida por la red
- FIN_WAIT1 El socket está cerrado, y la conexión está finalizándose
- FIN_WAIT2 La conexión está cerrada, y el socket está esperando que finalice la conexión remota
- TIME_WAIT El socket está esperando después de cerrarse que concluyan los paquetes que siguen en la red
- CLOSED El socket no está siendo usado
- CLOSE_WAIT La conexión remota ha finalizado, y se espera que se cierre el socket
- LAST_ACK La conexión remota ha finalizado, y se espera que se cierre el socket. Esperando el acknowledgement.
- LISTEN El socket está esperando posibles conexiones entrantes
- CLOSING Ambos sockets han finalizado pero aún no fueron enviados todos los datos
- UNKNOWN El estado del socket no se conoce
- DELETE_TCB Se está eliminando el búfer del control de transmisión (TCB) para la conexión TCP.
Comando netstat en un equipo de sobremesa con Windows.
C:\WINDOWS\system32>netstat
Conexiones activas
Proto Dirección local Dirección remota Estado
TCP 127.0.0.1:1559 lmlicenses:5939 ESTABLISHED
TCP 127.0.0.1:1611 lmlicenses:1612 ESTABLISHED
TCP 127.0.0.1:1612 lmlicenses:1611 ESTABLISHED
TCP 127.0.0.1:5939 lmlicenses:1559 ESTABLISHED
TCP 192.168.1.5:1556 server24002:5938 ESTABLISHED
TCP 192.168.1.5:1793 wo-in-f188:5228 ESTABLISHED
TCP 192.168.1.5:1918 123:https TIME_WAIT
TCP 192.168.1.5:1936 198.41.214.68:https ESTABLISHED
TCP 192.168.1.5:1937 wo-in-f95:https ESTABLISHED
TCP 192.168.1.5:1938 82:https ESTABLISHED
TCP 192.168.1.5:1956 ec2-52-28-2-204:https ESTABLISHED
TCP [::1]:80 i5-luis:1940 TIME_WAIT
TCP [::1]:80 i5-luis:close-combat TIME_WAIT
TCP [::1]:80 i5-luis:1945 TIME_WAIT
TCP [::1]:80 i5-luis:1946 TIME_WAIT
TCP [::1]:80 i5-luis:1949 TIME_WAIT
TCP [::1]:1584 i5-luis:1586 ESTABLISHED
TCP [::1]:1586 i5-luis:1584 ESTABLISHED
TCP [::1]:1950 i5-luis:http TIME_WAIT
Comando netstat en una sesión de telnet con el servidor web Apache.
root@srvweb:/ # netstat
Active Internet connections
Proto Recv-Q Send-Q Local Address Foreign Address (state)
tcp4 0 0 192.168.1.10.http 192.168.1.5.1984 ESTABLISHED
tcp4 0 64 192.168.1.10.ssh 192.168.1.5.1977 ESTABLISHED
Active UNIX domain sockets
Address Type Recv-Q Send-Q Inode Conn Refs Nextref Addr
fffff8000936d1e0 stream 0 0 0 fffff8000936d690 0 0
fffff8000936d690 stream 0 0 0 fffff8000936d1e0 0 0
fffff8000936d3c0 stream 0 0 fffff800095fcce8 0 0 0 /var/run/clamav/clamd.sock
fffff8000936d4b0 stream 0 0 fffff8000999fce8 0 0 0 /tmp/mysql.sock
fffff800095c3b40 stream 0 0 fffff800095dd3b0 0 0 0 /var/run/devd.pipe
fffff8000936d0f0 dgram 0 0 0 fffff800095c3960 0 fffff8000936d2d0
fffff8000936d5a0 dgram 0 0 0 fffff800095c3a50 0 0
fffff8000936d2d0 dgram 0 0 0 fffff800095c3960 0 0
fffff800095c3960 dgram 0 0 fffff800092bfb10 0 fffff8000936d0f0 0 /var/run/logpriv
fffff800095c3a50 dgram 0 0 fffff800092bfce8 0 fffff8000936d5a0 0 /var/run/log
fffff8000936d870 seqpac 0 0 fffff800095dd1d8 0 0 0 /var/run/devd.seqpacket.pipe