En esta guía vamos a aprender técnicas y métodos de exploración de redes y sistemas. Veremos métodos para identificar estaciones de trabajo de una red, métodos de rastreo estándar como vainilla conect() y SYN medio abierto, métodos sigilosos de rastreo (indicador de TCP inverso, indicador ACK), métodos anónimos (rastreo de rebote FTP, rastreo de rebote en Proxy) y rastreo de puertos UDP. Pensaba incluir también una técnica silenciosa para enumerar servicios utilizando zombies, pero debido a la extensión y a las posibilidades que ofrece, se dejará para más adelante, ya que no daría tiempo a explicarla como se merece en este how-to.
SONDEO ICMP:
Un sondeo ICMP revelaría en redes potencialmente débiles y poco protegidas, información sobre sus equipos. Existen varios tipos de mensajes ICMP, pero a nosotros nos interesan especialmente cuatro de ellos, que son los que resultan verdaderamente últimes para rastrear una red.
Barrido ICMP con Nmap:
$ sudo nmap -sP 192.168.2.0/24 Starting Nmap 4.62 ( http://nmap.org ) at 2008-12-22 01:46 CET n hostname -- replacing with '*' Host (192.168.2.1) appears to be up. MAC Address: 00:XX:XX:XX:XX:XX Host 192.168.2.100 appears to be up. Host 192.168.2.103 appears to be up. Host 192.168.2.114 appears to be up. Host 192.168.2.116 appears to be up. Host 192.168.2.117 appears to be up. Host 192.168.2.124 appears to be up. Nmap done: 256 IP addresses (7 hosts up) scanned in 2.142 seconds
Con el argumento -sP, estamos indicando a Nmap que realice un barrido ping en la red. Un administrador competente, habrá filtrado el tráfico ICMP en los firewalls y en el router, por ello esta técnica quedaría obsoleta y habría que condimentarla con algo más. Podríamos añadir al comando el argumento "-PI", que enviará paquetes de sondeo TCP ACK y SYN al puerto 80 de cada equipo:
$ sudo nmap -sP -PI 192.168.2.0/24 Starting Nmap 4.62 ( http://nmap.org ) at 2008-12-22 01:46 CET n hostname -- replacing with '*' Host (192.168.2.1) appears to be up. MAC Address: 00:XX:XX:XX:XX:XX Host 192.168.2.100 appears to be up. Host 192.168.2.103 appears to be up. Host 192.168.2.107 appears to be up. Host 192.168.2.114 appears to be up. Host 192.168.2.116 appears to be up. Host 192.168.2.117 appears to be up. Host 192.168.2.124 appears to be up. Host 192.168.2.136 appears to be up. Host 192.168.2.141 appears to be up. Nmap done: 256 IP addresses (7 hosts up) scanned in 6.053 seconds
Como podéis apreciar, hemos obtenido más información con este comando que con el anterior.
SING:
$ sing -echo 192.168.2.255
Vamos a usar ahora SING para enviar mensajes ICMP de solicitud de tiempo (timestamp request):
$ sing -tstamp 192.168.2.103
Ahora enviaremos mensajes ICMP de solicitud de información (information request):
$ sing -info 192.168.2.107
Por último veamos cono utilizar SING para enviar mensajes ICMP de solicitud de mascara de direcciones (subnet address mask request):
$ sing -mask 192.168.2.136
ICMPScan:
Para instalarlo necesitaréis tener instalado libcap y libdnet. Para instalarlo lo haremos del siguiente modo:
$ tar zxvf icmpscan.tgz $ cd icmpscan $ ./configure $ make $ sudo make install
Las funciones de ICMPScan son las siguiente:
Usage icmpscan [ -EPTSNMAIRcvbn ] [ -A address ] [ -f filename ] [ -i interface ] [ -r retries ] [ -t timeout ] target [...] Options -i, --interface Listen on the specified interface. If unspecified, icmpscan will examine the routing table and select the most appropriate interface for each target address. -c, --promisc Put in interface into promiscuous mode. As this option increases the load on the system in general, it should only be used if spoofing of source packets address is enabled with the "-A" option. -A, --address Specify the source IP address of generated packets. -t, --timeout Specify the timeout, in milli-seconds, before retrying. -r, --retries Specify the number of attempts to elicit a particular ICMP response. -f, --file Read target list from the specified file. -E, -P, --echo, --ping Check of ICMP Echo responses. -T, -S, --timestamp Check for ICMP Timestamp responses. -N, -M, --netmask Check for ICMP Netmask responses. -I, --info Check for ICMP Info responses. -R, --router Check for ICMP Router Solicitation responses. -v, --verbose Increase the output verbosity. -B, --debug
Un ejemplo de uso podría ser este:
icmpscan -c -t 500 -r 1 192.168.2.0/24
En este comando estamos especificando a ICMPScan que active el modo promiscuo (-c), que ajuste el tiempo de desconexión a 500 milisegundos (-t 500) y que reenvía como mucho una vez cada sondeo (-r 1).
Métodos de rastreo estándar:
Rastreo Vainilla connect():
Sin embargo, si el cliente envía un paquete con flag SYN a un puerto que se encuentra cerrado o filtrado, el servidor responderá con un paquete con flag RST. Véase el siguiente diagrama:
Nmap nos permite realizar este tipo de rastreos con el argumento (-sT).
$ nmap -sT 192.168.167
Rastreo de flag SYN medio abierto:
Por desgracia o por fortuna, estos dos métodos son fácilmente detectados por los IDS (Intrussions Detection System), así que no son aconsejables en caso de querer realizar un análisis sigiloso.
En la primera imagen podemos ver como se el servidor responde al SYN enviado por el cliente con un RST, indicando que el puerto está filtrado o cerrado. En la imagen 2, el cliente envía un RST como tercera parte de la comunicación TCP.
Para realizar estos rastreos podemos utilizar Nmap con el argumento -sS:
$ nmap -sS 192.168.2.156
En Nmap se puede ajustar la política de tiempos con el argumento "-T". Con el argumento "-T sneaky" se puede llegar a burlar la seguridad de los firewalls. Esto consiste en enviar muy rápidamente paquetes SYN a diferentes puertos, lo que provocará un desbordamiento de SYN (un tipo de DoS).
Una herramienta muy eficaz es Scanrand, producto de Paketto Keiretsu de Dan Kaminsky. En http://doxpara.com/read.php/code/paketto.html podéis encontrar información relevante sobre el proyecto así como utilidades interesantes. Las opciones del programa son las siguientes:
scanrand 1.10: Stateless TCP Scanner w/ Inverse SYN Cookies(HMAC-SHA1/32 in SEQ) Component of: Paketto Keiretsu 1.10; Dan Kaminsky (dan@doxpara.com) Example: scanrand -b10M 10.0.1.1-254:80,20-25,139 Def. Ports: Use [quick/squick/known/all] instead of explicitly naming ports Options: -S/-L: Only send requests / Only listen for responses -e/-E: Show negative responses / Only show negative responses -t [timeout]: Wait n full seconds for the last response (10s) -b[bandwidth]: Limit bandwidth consumption to n b/k/m/g bytes(0) (0 supresses timeouts or maximizes bw utilization) -N/-NN : Enable name resolution (Prefer Source/Dest) -v : Mark packets being sent, as well as received -vv : Output full packet traces to stderr Addressing: -d [device]: Send requests from this L2 hardware device -i [source]: Send requests from this L3 IP address -p [ port]: Send requests from this L4 TCP Port -s [ seed]: Use prespecified seed for scan verification -f [ file]: Read list of targets from file Experiments: -l [ttl-ttl]: Statelessly TCP Traceroute -D : Distco (Distance Discover) via forced RSTs -c : Try checking Inverse SYN Cookie on Traceroute Notes: Use Control-C to exit before scanrand times out. Be sure to use a longer timeout for slow scans! [n]: estimated network distance from target host. Be careful about available bandwidth -- use -b!
Veamos un ejemplo de uso (para ejecutarlo deberéis tener permisos root):
$ scanrand 192.168.2.1-254:20-25,80,443
Métodos de rastreo sigilosos:
Rastreo TCP con indicador inverso:
Cuando enviemos uno de estos indicadores, si el puerto se encuentra abierto, no se obtendrá respuesta alguna. sin embargo, si el puerto se encuentra cerrado, recibiremos un paquete RST. Esto viene definido por el estander RCF 793, que como ya he dicho, indica que si no se percibe ninguna respuesta del puerto analizado, significa que el puerto está abierto o que el equipo se encuentra apagado. Lo que estamos haciendo es enviar paquetes "basura" que dificilmente van a ser detectados por los IDS.
Sin embargo he de deciros que Microsoft (para variar) no respeta este estándar, por lo que no se recbe respuesta alguna cuando se intenta conectar a un puerto cerrado. Por eso esta técnica sólo es eficaz con plataformas UNIX.
Para realizar uno de estos sondeos podemos utilizar Nmap con sus respectivos argumentos:
Rastreo con indicador ACK:
Métodos de rastreo con suplantación de terceros:
Rastreo de rebote FTP (FTP bounce):
La siguiente imagen muestra la estructura del ataque:
Esto es lo que sucede cuando se lleva a cabo este ataque:
1.- El atacante conecta con el puerto del servidor FTP (por defecto el 21). Introduce el modo pasivo, el servidor por tanto es forzado a enviar datos utilizando DTP al puerto espezificado por el atacante en un objetivo. 2.- El atacante intenta conectar con un puerto específico TCP del servidor objetivo mediante el comando PORT. 3.- Se crea una conexión con el equipo objetivo especificado por el comando PORT anterior, mediante el comando LIST. Si se observa una repuesta 226, el puerto está abierto, si la repuesta es 425, el puerto está cerrado o filtrado.
Todo esto lo podemos hacer con Nmap mediante el siguiente comando:
$ nmap -P0 -b usuario:contraseña@servidor:puerto ipvictima
En realidad el argumento que realiza el escaneo FTP bounce es el "-b". El "-P0" sirve para especificar a Nmap que no queremos que realice un ping ya que no tendría sentido poner tanto empeño en camuflarnos si vamos a revelar nuestra verdadera IP.
Rastreo de rebote con proxy:
$ ./ppscan Proxy Port Scanner v1.2 by Bronc Buster of LoU Usage: ./ppscan
Fuente: http://n3t-datagrams.net/guias/rastreo.html
0 comentarios:
Publicar un comentario