|

ESCANEANDO CON NMAP.
Técnicas de scan de puertos.
Capítulo 1. Introducción a nmap y tipos de escaneo más frecuentes.
Indice Capítulo I
Introducción
-
Las tres formas principales de escaneo con nmap
-
Las otras formas de escanear con nmap
-
Algunas opciones importantes
-
Sólo para Windows
-
Guía rápida escaneo Nmap
-
TCP/IP para comprender nmap:
-
APÉNDICE 1.1 Establecimientos de conexiones TCP.
1.1- Introducción
Fundamentalmente los scanners de red son herramientas esenciales para
aquellos que desean explorar o auditar un sistema o red analizando su seguridad .
Por ello, para un administrador preocupado por la seguridad de su sistema, es importante realizar un barrido de su
red, y buscar vulnerabilidades antes que lo hagan otros con no muy buenas intenciones
Para esta tarea disponemos de Nmap ( http://www.insecure.org/nmap/ ) que permite a los administradores de sistemas
el escaneo de grandes redes para determinar qué servidores se encuentran activos, qué servicios ofrecen y determinar
con cierta exactitud qué sistema operativo corre por en dicho host.
Nmap es una herramienta para el escaneo de puertos, probablemente de las mejores que existen siendo software
libre. Su autor, Fyodor, ha utilizado varias técnicas para realizar el escaneo de estos puertos tanto para
TCP como para UDP, usando diferentes protocolos. Corre bajo
LINUX.

Interface Gráfica de la versión Nmap para Windows.
Algunas características que podemos destacar de Nmap:
Flexible:
Soporta técnicas avanzadas para el scanneado de sistemas y redes que estén
detrás de firewalls y otros obstáculos. Escanea puertos (tanto TCP como UDP),
detección del sistema operativo, previsibilidad de la secuencia de los paquetes TCP, UDP o
ICMP utilizados para hacer el barrido, gran cantidad de técnicas de escaneo, posibilidad de salida de
datos en formato XML.
Potente: Con Nmap se pueden escanear sistemas con cientos de
hosts. También es posible combinar gran cantidad de opciones que no sean incompatibles entre sí.
Portable a varios sistemas: Existen versiones para la gran mayoría de los sistemas
operativos modernos, entre ellos: Linux, Open/Free/Net BSD, Solaris, IRIX, Mac OS X, HP-UX, Sun OS,
Windows.
Código libre: Se distribuye con licencia GPL, por lo que el
código fuente está disponible para su descarga libremente.
Buena Documentación: De fácil asimilación intuitiva y siempre actualizada.
Popular: Es un software muy conocido en el mundo de la administración/auditoría de
redes en todos sus sistemas operativos con amplia documentación en la red Internet.
Fácil uso: Su manejo es sencillo y se puede operar con él en modo
comando como interface gráfico, esto último implementado para sistemas Windows
desde la versión 3.
Algunas técnicas utilizadas por Nmap:
-
Vanilla TCP connect() scanning
-
TCP SYN (half open) scanning
-
TCP FIN, Xmas, or NULL (stealth) scanning
-
TCP ftp proxy (bounce attack) scanning
-
SYN/FIN scanning using IP fragments (bypasses some packet filters)
-
TCP ACK and Window scanning
-
UDP raw ICMP port unreachable scanning
-
ICMP scanning (ping-sweep)
-
TCP Ping scanning
-
Direct (non portmapper) RPC scanning
-
Remote OS Identification by TCP/IP Fingerprinting, and
-
Reverse-ident scanning.
-
Escaneo por fragmentación
-
Especificación de destino y puerto.
-
Retraso dinámico...
Y otras muchas más que se implementan en la versión 3
1.2.- Las tres formas principales de escaneo con nmap.
La sintaxis general para el uso de Nmap es la siguiente:
nmap [Tipos(s)de escaneo] [Opciones] ... [#N]>
Veremos en esta primera entrega los principales Tipos de escaneo y
opciones.
-sT: Escaneo usando paquetes TCP. Tipo de escaneo TCP Conect(). El destino puede logear nuestra IP ya
que se realiza una conexión completa con la máquina destino.
NOTA: Para saber más sobre como se realiza una conexión TCP
completa y otras cuestiones sobre TCP ir al APÉNDICE 1.1: Establecimiento de conexiones TCP.
Se le llama TCP Conect() porque se implementa haciendo una llamada
al sistema conect() y permite saber rápidamente si el puerto está o no abierto en la máquina destino.
- si recibe un RST/ACK el puerto está
cerrado.
- si recibe un SYN/ACK el puerto está
abierto --> envia un ACK estableciendo conexión.
Todos los cortafuegos e IDS como Snort o el IDS implementado en
Kerio 3.0 detectan este tipo de escaneo y muchos pueden bloquearlos, en cambio, es una técnica que nos
proporciona gran fiabilidad. Es pues una técnica muy fiable para realizar auditoría de nuestro sistema, pero no para
sistemas remotos ni no queremos ser detectados tan fácilmente. No se necesita ningún tipo de privilegio de
administrador o root en linux.
Podríamos probar como funciona esta técnica de la siguiente forma:
Escanear un host remoto en el cual corremos TCPDump /
Windump u otro sniffer como Ethreal. Observamos las trazas dejadas por el snifer apreciando si el puerto
está abierto el "diálogo" establecido en la conexión.
Llamemos al host origen que lanza nmap (A) y al host destino que
corre el sniffer (B).
A muy grandes rasgos pasa:
(A) lanza una conexión, llamada a conect() en la cual envía
un segmento SYN para informar a (B) del inicio de la conexión.
(B) está de acuerdo y devuelve un SYN+ACK aceptando
la conexión.
(A) recibe la notificación e informa mediante un ACK que
podemos iniciar la conexión. Conexión establecida.
Esto es muy superficial, en este proceso pasan muchas otras cosas.
Ejemplo:
C:\nmap1>nmap -sT 192.168.4.5 -p
130-140 -P0
Starting nmap V. 2.54BETA37 ( www.insecure.org/nmap )
Interesting ports on INFOGRAFIA5 (192.168.4.5):
Port State Service
130/tcp filtered cisco-fna
131/tcp filtered cisco-tna
132/tcp filtered cisco-sys
133/tcp filtered statsrv
134/tcp filtered ingres-net
135/tcp open loc-srv
136/tcp filtered profile
137/tcp filtered netbios-ns
138/tcp filtered netbios-dgm
139/tcp open netbios-ssn
140/tcp filtered emfis-data
Nmap run completed -- 1 IP address (1 host up)
scanned in 4 seconds
NOTA: Con –P0 desactivamos el ping antes
del escaneado para evitar el filtrado de pings por algunos cortafuegos.
-sS: Modo oculto usando TCP SYN. Envía un paquete SYN
y espera la contestación, en funcion de la respuesta ( un ACK o un RST ). Así pues, consiste en
terminar la conexión antes de que el “diálogo” con el host destino esté completo.
Sólo se permite como root o administrador. Es más difícil la
identificación por parte de algunos cortafuegos e IDS y es más rápido que el escaneo TCP.
-si recibe un RST/ACK el puerto está
cerrado.
-si recibe un SYN/ACK el puerto está abierto --> envia un RST rompiendo
conexión.
Los buenos IDS como Snort tienen reglas que identifican este tipo
de escaneo de puertos ya que los ataques de Denegación de Servicio (DoS) se basan en esta técnica.
Tal como indicamos en la técnica de TCP conect(), podemos comprobar
esta técnica analizando las trazas con TCPdump / Windump o Ethreal al escanear un determinado host.
-sU: Escaneo tipo UDP. Escanea los servicios que permiten
tráfico UDP. Se envían paquetes UDP de 0 bytes a cada puerto del host destino.
-si se recibe un mensaje ICMP de puerto no
alcanzable: puerto cerrado o no alcanzable, caso contrario se asume que está abierto.
Evidentemente no es nada fiable. Sólo se permite en modo root o
administrador ya que usa los socket raw. Como ventaja podemos destacar que
algunos IDS no lo detectan. Escanear algunos sistemas con este método puede ser muy lento. El IDS de Kerio 3.0
identifica este tipo de scan.
1.3.- Las otras formas de escanear con nmap.
-sF, -sX, -sN o Stealth FIN, Xmas o
Scan Nulo (sólo trabaja contra UNIX). Este tipo de scan se le llama nulo porque intenta
molestar lo menos posible al "inetd" o demonio de servicios para evitar caer en el en el log del
sistema.
Ademas existen muchos host con firewall que poseen filtrado para
paquetes del tipo SYN por lo que quedaríamos automáticamente grabados en el log del sistema , para esos
casos es necesario utilizar el sF, sX, sN o el Xmas en vez de el sS.
-sP ping "scan". Este es utilizado solo para saber si determinado(s) host(s) estan en ese
momento vivos o conectados. Normalmente ésto lo realiza Nmap enviando paquetes al puerto 80 de un
host pero si éste tiene un filtrado de ese puerto podrá ser detectado de todas formas.
Se puede utilizar esta opcion en combinacion con -PI para cambiar
ese puerto 80 por uno mucho mayor preferiblemente .
-sU. Este es un Scan de Puertos abiertos con protocolo
UDP, solo como root o Administrador de puede ejecutar.
(Hay otras pero de momento nos quedamos con estas
formas.)
1.4.- Algunas opciones importantes.
Alguna vez os habrá pasado que escaneando con Nmap parece que el host no
está accesible o simplemente no existe. Puede ser que tenga filtrado los pings y como ésto es lo primero que hace Nmap,
hay que desactivarlo:
-P0 No hace "ping" al host en cuestion. Necesario para el
scan o "barrido" a hosts con sistemas de deteccion de ataques o firewalls de filtrado.
-PI Utiliza paquetes ICMP para determinar que hosts están
conectados y en especial si deseamos hacer un scan a travez de un firewall.
-O Utiliza el TCP/IP "fingerprinting" para determinar
qué Sistema Operativo está corriendo en un host remoto.
El "fingerprinting" lo veremos en un
capítulo dedicado a la detección del sistema operativo remoto.
Utilización de Decoys (-D)
Se trata de usar host señuelos con el fin de confundir al host el
cual escaneamos haciéndole creer que el scan se realiza desde un host diferente al nuestro.
Evidentemente, los host que usemos como señuelos, deben estar activos.
Se usa de esta manera:
-Dhost1,host2,ME,host3[,...]
Donde ME es nuestro propio host.
Ejemplo:
C:\nmap1>nmap -OsS -P0
-D192.168.4.5,192.168.4.8,192.168.4.3 -p139 192.168.4.1
Starting nmap V. 2.54BETA35 ( www.insecure.org/nmap )
Warning: OS detection will be MUCH less
reliable because we did not find at least 1 open and 1 closed TCP port
Insufficient responses for TCP sequencing (3), OS detection may be less accurate
Interesting ports on ABANCE-2
(192.168.4.1):
Port State Service
139/tcp open netbios-ssn
Remote OS guesses: Windows NT4 / Win95 / Win98, Windows NT 4 SP3, Microsoft NT 4.0 SP5-SP6
Nmap run completed -- 1 IP address (1 host up)
scanned in 1 second
1.5.- Sólo para Windows.
C:\nmap1>nmap --win_help
Windows-specific options:
--win_list_interfaces : list all network
interfaces
--win_norawsock : disable raw socket support (para evirar modo root)
--win_forcerawsock : try raw sockets even on non-W2K syst
--win_nopcap : disable winpcap support
--win_nt4route : test nt4 route code
--win_noiphlpapi : test response to lack of iphlpapi.dl
--win_trace : trace through raw IP initialization (aquí veremos si está todo correcto, version del
wincap, etc.)
Ejemplo:
C:\nmap1>nmap
--win_list_interfaces
Available interfaces:
Name Raw send Raw recieve IP
loopback0 SOCK_RAW SOCK_RAW 127.0.0.1
eth0 SOCK_RAW SOCK_RAW 192.168.10.3 (éste soy yo)
1.6.- Guía rápida escaneo nmap.
En los siguientes capítulos explicaremos otras técnicas de escaneo con
Nmap y más funcionalidades. De momento una guia rápida.
nmap [–s<tipo paquete>] [–p
<puertos>] [–<otras opciones>] <dirección destino>
TCP connect scan: nmap –sT <destino>
TCP SYN scan: nmap –sS <destino>
TCP ACK scan: nmap –sA <destino> y nmap –sW <destino>
TCP FIN scan: nmap –sF <destino>
TCP Null scan: nmap –sN <destino>
TCP Xmas scan: nmap –sX <destino>
UDP scan: nmap –sU <destino>
RPC scan: nmap –sR <destino>
TCP reverse ident scan: nmap –I <destino>
ICMP echo scan: nmap –sP <destino>
IP protocol scan: nmap –sO <destino>
Operative System scan: nmap –O <destino>
Slow scan: nmap --scan_delay <milisegundos> <destino>
Fragmentation scan: nmap –f <destino>
FTP bounce scan: nmap –b <[usuario:contraseña@]direcciónFTP[:puerto]>
<destino>
Spoofed scan: nmap -S <origen> <destino>
Decoy scan: nmap -D <señuelo1 [,señuelo2][,ME],...> <destino>
Dumb host scan: nmap –sI <intermedio[:puerto]> <destino>
Random scan: nmap --randomize_hosts <destino> (por defecto, los puertos destino ya están en
orden aleatorio)
APÉNDICE 1.1.- Establecimientos de conexiones TCP.

Veremos en este apéndice cómo se realiza una conexión TCP.
Nos ayudará a interpretar logs, trazas y técnicas de escaneo. Veremos también algunos
componentes de los paquetes TCP aparte de los puertos de la máquina origen y destino. Estos componentes
importantes son los números de secuencia y de confirmación (SEQ y ACK) que se utilizan para
asegurar la integridad de la conexión y los flags o banderas que son los encargados de indicar la finalidad
del paquete (para iniciar o finalizar una conexión, para transmitir datos, etc).
Una conexión TCP se realiza en tres pasos. Es lo que
técnicamente se llama three-way handshake:
-
En el sistema / host que inicia la conexión o cliente (TCP A), envía un paquete de SYN con un número de secuencia inicial
asociado a esta conexión al sistema / host destinatario o servidor (TCP
B).
-
Este responde con un paquete SYN-ACK (acuse de
recibo) confirmando la recepción del SYN inicial enviado por (TCP A) y
enviándole a su vez su propio número de secuencia.
-
Para finalizar, el cliente (TCP
A) reconoce la recepción del SYN del servidor (TCP B)
mediante el envío de un ACK. Este es el momento en que queda establecida la conexión. Ya se puede iniciar la
transferencia de datos entre (TCP A) y (TCP
B).
Vamos a avanzar un poco más ya que ocurren algunas otras cosas. Lo vemos
gráficamente:
Sean dos hosts pretenden inciciar una conexión TCP. TCP A y TCP
B, siguiendo la analogía de la explicación anterior.
-
TCP A _SYN( SEQ=x ) -> y TCP
B
-
TCP B _SYN( SEQ=y, ACK=x+1 ) -> TCP
A,
-
TCP A _SYN( SEQ=x+1, ACK=y+1 ) -> TCP
B.
Vemos como TCP A envía un paquete
SYN con un número de secuencia inicial x que además es aleatorio
a TCP B. El resto es fácil deducir.
Las letras x e y son los números de secuencia (SEQ). Se utilizan números de secuencia
distintos para cada sentido de la comunicación. El primer número para cada sentido se acuerda al establecer
la comunicación. Cada extremo se inventa un número aleatorio y envía éste como inicio de secuencia.
Un paso más para terminar de comprender la conexión TCP totalmente imprescindible para entender muchas técnicas
de escaneo.
Ejemplo:
Sean dos hosts (TCP A) y (TCP B) que pretenden iniciar una conexión. Veremos también que pasa con los números de
secuencia (SEQ):
TCP
A
TCP B
1. SYN-SENT --> <SEQ=100><CTL=SYN> --> SYN-RECEIVED
2. ESTABLISHED <-- <SEQ=300><ACK=101><CTL=SYN,ACK> <-- SYN-RECEIVED
ESTABLISHED --> <SEQ=101><ACK=301><CTL=ACK> --> ESTABLISHED
3. ESTABLISHED --> <SEQ=101><ACK=301><CTL=ACK><DATOS> --> ESTABLISHED
Todo esto es lo que ocurre cuando realizamos un escaneado de puerto TCP
conect ().
Si la opción elegida es TCP SYN no dejamos que se establezca
totalmente la conexión, esto significaría el envío por parte de TCP A de un
RST (reset) cerrando así la conexión.
Ejercicios y ejemplos
1.- Como ejercicio podríamos descifrar esta traza capturada por Ethereal.
Se trata de un escan Nmap TCP conect() al puerto 25.
La orden para escanear sería:
C:\nmap –sT –v 192.168.4.15 –p25
La traza resultante:
INFOGRAFIA3 ABANCECOMU TCP 1125 > smtp [SYN]
Seq=13766490 Ack=0 Win=16384 Len=0
ABANCECOMU INFOGRAFIA3 TCP
smtp > 1125 [SYN, ACK] Seq=472370892 Ack=13766491 Win=8736 Len=0
INFOGRAFIA3 ABANCECOMU TCP
1125 > smtp [ACK] Seq=13766491 Ack=472370893 Win=17472 Len=0
2.- Ahora vamos a ver un escaneo nmap tipo –sS al puerto 25 (smtp)
desactivando el ping.
La orden para escanear sería:
C:\nmap –sS –P0 IFOGRAFIA3 –p 25
La traza resultante:
ABANCECOMU INFOGRAFIA3 TCP
38428 > smtp [SYN] Seq=2093898103 Ack=0 Win=2048 Len=0
INFOGRAFIA3 ABANCECOMU TCP
smtp > 38428 [SYN, ACK] Seq=3462674933
Ack=2093898104 Win=16616 Len=0
ABANCECOMU INFOGRAFIA3 TCP
8428 > smtp [RST] Seq=2093898104 Ack=2093898104
Win=0 Len=0
Vemos claramente el RST (reset)
enviado en la última línea de la traza, no completando o estableciendo la conexión.
NOTA: Observemos en ambos casos los incrementos y
valores de números de secuencias, los indicadores o flags TCP que se
intercambian en el diálogo, etc.
|