Home Hacking y Seguridad Escaneos Tecnicas de escaneo
Tecnicas de escaneo Imprimir E-mail
Hacking y Seguridad - Escaneos
Escrito por hd   

Todos los días se puede ver gente en cualquier parte de Internet con la misma pregunta de siempre... ¿Como me inicio en el mundo del hack? ¿Como comienzo?, ¿Que debo leer? , antes que nada cabe aclarar de una vez que no soy hacker ni mucho menos, simplemente algo curioso. Y más de alguno ha leido que hay que bajarse un programa llamado 'scaneador de puertos' con el que te dice los "servicios", que está corriendo el host que nos interesa, así que lo primero... 



Texto Completo:
=[Tecnicas de Escaneo]=

-[hd <
  Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
 >]-

=[Introducción]=

 Todos los días se puede ver gente en cualquier parte de Internet con
la misma pregunta de siempre... ¿Como me inicio en el mundo del hack?
¿Como comienzo?, ¿Que debo leer? , antes que nada cabe aclarar de una
vez que no soy hacker ni mucho menos, simplemente algo curioso. Y más
de alguno ha leido que hay que bajarse un programa llamado 'scaneador
de puertos' con el que te dice los "servicios", que está corriendo el
host que nos interesa, así que lo primero que hacen es ir en busca de
un programita de estos que nos de esa información tan valiosa...

 Bueno, algo así le pasó a el amigo de un amigo, pero en la actualidad
hay herramientas tan 'sofisticadas' ante esas 'amenazas', ya cualquier
administrador decente cuenta en su red con un IDS, y si lo ponemos a
punto, pues es una magnifica herramienta para detectar este tipo de a-
taques a nuestros servidores. Así que, el punto era que no debemos de
usar los scaneadores de puertos?, no, solo explicaré un poco más a fon-
do algunos métodos de escaneo más discretos y que podamos pasar un poco
más desapercibidos.

 Dividiré el txt en dos secciones, en la primera mostraré algunos tipos
de escaneos para ver si un puerto está abierto o no. La segunda parte
tratará un par de opciones para saber si un host existe o no en internet
pero esta vez solo con tcp y no ICMP como estamos acostumbrados.

Nota: supongo que para este punto tienes una leve idea de lo que es el
      tcp/ip, cierto?


 [Extracto de Flags en tcp/ip]

Nota: este pequeño extracto salio del texto escrito por Guybrush para
      RazaMexicana...

<++>
...
- FLAGS : Hay seis banderas de 1 bit:

  1. URG : Se establece en 1 si esta en uso el apuntador urgente.
           El apuntador urgente  sirve para indicar un  desplazamiento en
           bytes a  partir  del numero actual  de secuencia  en el que se
           encuentran datos urgentes. Este recurso sustituye los mensajes
           de interrupcion.

  2. ACK : Se establece en 1 para indicar que el numero de acuse de recibo
           es valido.  Si el ACK es 0, el segmento no contiene un acuse de
           recibo,por lo que se ignora el campo de numero de acuse de recibo.

  3. PSH : Indica datos empujados  (con PUSH).  Por este medio se solicita
           atentamente al receptor entregar los datos a la aplicacion a su
           llegada y no  ponerlos  en el  buffer  hasta la recepcion de un
           buffer completo.

  4. RST : Se usa para restablecer una conexion que se ha confundido debido
           a una caida de host u otra razon; tambien sirve para rechazar un
           segmento no valido o un intento de abrir una conexion.

  5. SYN : Se usa para restablecer conexiones.  La solicitud de conexiones
           tiene SYN = 1  y  ACK = 0 para indicar que el campo de acuse de
           recibo incorporado no esta en uso.  La respuesta de conexion si
           lleva un reconocimiento, por lo que tiene SYN = 1 y ACK = 1.

  6. FIN : Se usa para liberar una conexion;  especifica  que el transmisor
           no tiene mas datos que transmitir.  Sin embargo, tras cerrar una
           conexion, un proceso puede continuar recibiendo datos
           indefinidamente.
...
<-->


---------------
>PRIMERA PARTE.
===============




----------------------
=[Seción TCP típica]=
----------------------

 Cuando queremos comenzar una conexión común y corriente deacuerdo al
protocolo se usa de la siguiente manera:

*Nuestro host manda un paquete tcp, con los flags SYN en 1 (o prendido
como quieran llamarle), y el ACK en 0 y esperamos una respuesta.

*Si el puerto al que queremos alcanzar está en LISTEN (escucha) el host
puede aceptar o rechazar la conexión, aquí hay dos caminos:

 A) Acepta: el host nos responde con un paquete con los flags SYN y ACK
            prendidos, nosotros al final mandamos su ACK.
  
 B) Niega: el host nos responde con un paquete con los flags RST y ACK
           prendidos.

 Así que como podemos ver, se hace una conexión completa con este medio
por lo que los IDS nos agarran al hacer demasiadas conexiones que duran
tan poco tiempo, e intentar muchas otras.

 Ahora ya sabes un poco como trabaja un scaneador de puertos tradicional
si logra conectar con el puerto, nos lo informa. Pero esto hoy en día es
logueado al 100% y no queremos embarrar nuestra IP en montones de archi-
vos de logs, cierto?

 Ahora pasaremos a ver otras tecnicas de escaneo donde no presisamos co-
menzar una seción tcp tradicional para conocer el estado del puerto, en
estos casos siguiente no se habre una conexión completa, por decirlo de
alguna manera.

NOTA: Para los logs estaremos en una shell linux, usando hping, ya que
      este nos proporciona las estadísticas de envío, cosa que algunas
      herramientas bajo windows no dan, o al menos las que he probado.

 [Log]

 Probaremos toda la teoría que veamos en pequeños registros, a continu-
ación el primero de ellos mostrando una seción tcp típica.
 No veo la necesidad de esconder las IP, ya que la mía es dínamica y es
la primera vez que me saca de los rangos "comunes", así que no hay mucho
problema.

CASO A: El puerto está abierto

   [root@bsdmex crypkey]# hping -S -p 80 200.64.170.73 
   HPING 200.64.170.73 (ppp0 200.64.170.73): S set, 40 headers + 0 data bytes
   len=44 ip=200.64.170.73 flags=SA DF seq=150 ttl=119 id=7017 win=8760 rtt=153.4 ms
   len=44 ip=200.64.170.73 flags=SA DF seq=166 ttl=119 id=7025 win=8760 rtt=177.0 ms
   len=44 ip=200.64.170.73 flags=SA DF seq=217 ttl=119 id=7026 win=8760 rtt=196.7 ms
   len=44 ip=200.64.170.73 flags=SA DF seq=219 ttl=119 id=7030 win=8760 rtt=238.4 ms

* Como podemos ver mi PC responde con las flags Syn y Ack prendidas (flags=SA)
 lo que nos indica el estado de disponibilidad de nuestro puerto.

CASO B: El puerto está cerrado

   [root@bsdmex crypkey]# hping -S -p 80 200.64.170.73 
   HPING 200.64.170.73 (ppp0 200.64.170.73): S set, 40 headers + 0 data bytes
   len=40 ip=200.64.170.73 flags=RA seq=125 ttl=119 id=7007 win=0 rtt=254.8 ms
   len=40 ip=200.64.170.73 flags=RA seq=127 ttl=119 id=7009 win=0 rtt=254.8 ms
   len=40 ip=200.64.170.73 flags=RA seq=130 ttl=119 id=7013 win=0 rtt=254.8 ms
   len=40 ip=200.64.170.73 flags=RA seq=135 ttl=119 id=7015 win=0 rtt=254.8 ms

* Esta vez mi PC responde con los flags Rst y Ack prendidos (flags=RA).

 Ahora que ya tenemos bien fundamentada la teoría podemos pasar con más tecni-
cas.

NoTA: Gracias a crypkey por rolar shell para loguear este apartado.




------------
=[DumbScan]=
------------

 [Historia]

 Aparecio por primera vez según tengo entendido en un post de BUGTRAQ el
18 de Diciembre de 1998. Se le llamó de este modo gracias a que es necesario
contar con un host 'silencioso', al que embarraremos en los logs del host
que queremos scanear (si es que alcanza a logear...).

 Su 'descubridor' por así decirlo fue 'antirez'.

 [Teoría]

 Primero que nada necesitamos contar con un host que practicamente no ten-
ga NADA de trafico en internet, hay varios, he visto redes enteras llenas,
de instalaciones de IIS con las opciones por default, y sin pagina de index
esos nos sirven muy bien para los terminos que necesitamos.
 Pensaba escribir los rangos de Ip donde se pueden encontrar pero mejor no
me meto en problemas, o a ti te gustaría que un grupo de gente sin vida
social practicamente tome tus servidores de juguete?, verdad que no?

 Bueno, ahora si comenzemos con la teoría:

 Nombraremos a los host en este orden:

 A> Será nuestra maquina
 B> Será el host que queremos escanear
 c> Será el host sin trafico, de aquí viene el nombre de 'dumb'

 Nosotros comenzamos midiendo el trafico que genera el host C, con hping se
puede (Originalmente era con la opción '-r', en la versión < 1, hoy en día
están por sacar la versión 3...). Al parecer solo se cambio en hping1 ya que
en el MAN de hping2 podemos ver de nuevo:

-r --rel 
Display id increments instead of id. See the HPING2-HOWTO for more information.
Increments aren't computed as id[N]-id[N-1] but using packet loss compensation.
See relid.c for more information. 

 Ya que estamos seguros de que el host C no tiene trafico (mirando en el campo
'id' generalmente se tendrá un 1). Ahora procedemos a envíar un paquete al host
B con la dirección de origen spoofeada para que paresca que el host C la mandó).

 Miramos de nuevo el estado del host C y...

 * Si los campos de 'id' siguen en el número constante del pricipio, el puer-
   to en B está cerrado.

 * Si los campos de 'id' están alterados ligeramente, que el número constante
   de 'id' del principio, se haya alterado en algunas unidades, bueno, el chiste
   es que el puerto en B se encuentra abierto, ya que al recibir el SYN B para
   iniciar la conexión le manda un paquete a C con SYN|ACk prendidos, y como
   este no sabe que es lo que pasó cierra la conexión con un RST, de ahí que
   veamos que C está generando tráfico.

 * Nota de revisión, ahora que me fijo bien, esto se podría clasificar como
   scan Half Open :D, lo veremos más adelante.

 NOTA: Recomiendo usar como host 'dumb' (C) una maquina con windows, porque?
       porque los números id, son más predecibles (estables) que una maquina
       con linux por ejemplo. Los numeros de secuenciación suman +1 cada vez.

 [Herramientas]

  - Windows
    Puedes usar el VScan, usando el parametro '-idle'

  - Linux
    Para linux recomiendo usar el Idlescan
 
 [Ejemplo]

  vscan -idle 1.2.3.1 1.2.3.4 -p 21 23 -zombie 11.11.11.11 1337

  * Aquí se escaneará:
    - Desde la IP 1.2.3.1 hasta 1.2.3.4 (1.2.3.1, 1.2.3.2, 1.2.3.3, 1.2.3.4)
    - Desde el puerto 21 (ftp) hasta el 23 (telnet) (21, 22, 23)
    - Cabe destacar que el puerto en 11.11.11.11 (1337 te suena?), debe estar
      abierto para hacer las comprobaciones necesarias.




-------------
=[Half Open]=
-------------


 Este tipo de scan es también denominado SYN scan, y es muy parecido a
la función CONNECT, solo que a último momento decidimos no hacer la co-
nexión, que chingados es eso?, ahora lo explico...

 Nuestro host manda un paquete tcp a el objetivo con la bandera SYN encen-
dida...

 a) Si el puerto está cerrado, el objetivo nos responde con un RST.

 b) SI El Puerto está abierto, el objetivo nos responde con un SYN|ACK e
   inmediatamente debemos responder con un RST, cerrando la conexión.

 La Ventaja pRincipal de este tipo de escaneo es que se reduce potenci-
almente los riesgos de que puedas ser detectado, pero en fín, no es 100%
seguro, ya que hay algunas herramientas que ya lo loguean como son:

 -Synlogger
 -Courtney

 [Pro's]
 - Es un scaneo más rápido, evita algunas barreras y IDS

 [Contra's]
 - Es necesario tanto en Linux como en windows tener máximos privilegios
  para usar los raw sockets.

 [Log]

 Usaremos el tán afamado Nmap

 [root@localhost root]# nmap -sS -p135 -P0 -vv 200.64.170.182

 Starting nmap V. 2.54BETA31 ( www.insecure.org/nmap/ )
 Host dup-200-64-170-182.prodigy.net.mx (200.64.170.182) appears to be up ... good.
 Initiating SYN Stealth Scan against dup-200-64-170-182.prodigy.net.mx (200.64.170.182)
 The SYN Stealth Scan took 36 seconds to scan 1 ports.
 Interesting ports on dup-200-64-170-182.prodigy.net.mx (200.64.170.182):
 Port       State       Service
 135/tcp    filtered    loc-srv


 Nmap run completed -- 1 IP address (1 host up) scanned in 37 seconds

 NOTA: Cabe aclarar que 200.64.170.182 es una PC con w2k sp4, conexión a
       internet con dial up. (Si, es mía ;), este tipo de scan nos da el
       resultado más presiso del puerto, ya que, es cierto que tengo el
       puerto 135 filtrado por firewall.

 NOTA2: Si tu PC es de uso personal te recomiendo que desactives los ser-
        vicios de DCOM, ya que por ahí ya hay algunos xploits que te dan
        una shell inversa según ví.




--------------
=[Xmass tree]=
--------------


 Este tipo de scan es de los más nuevos, quisá de los más extraños ya que
se utiliza una combinación de flags que en condiciones normales no se usa-
ría deacuerdo al protocolo RFC 793.

 Se comienza mandando un paquete tcp con las banderas de FIN, URG y PSH y
se logra saber el estado del puerto si:

 a) Si el puerto está cerrado, el objetivo nos responde con un RST.

    [root@localhost root]# ./hping 64.70.145.95 -FUP -c 4 -p 81
    HPING 64.70.145.95 (eth0 64.70.145.95): 40 data bytes
    60 bytes from 64.70.145.95: flags=RA seq=0 ttl=238 win=0 time=108.1 ms
    60 bytes from 64.70.145.95: flags=RA seq=1 ttl=238 win=0 time=107.9 ms

    --- 64.70.145.95 hping statistic ---
    4 packets tramitted, 2 packets received, 50% packet loss

 b) Si el puerto está abierto, el objetivo no regresa nada.

    [root@localhost root]# ./hping 64.70.145.95 -FUP -c 4 -p 80
    HPING 64.70.145.95 (eth0 64.70.145.95): 40 data bytes

    --- 64.70.145.95 hping statistic ---
    4 packets tramitted, 0 packets received, 100% packet loss

 * En nmap bastaría con correrlo así:
   nmap -sX -p(rangode-puerto) IP

 Esta tecnica no funciona en los sistemas de Microsoft, CISCO, IRIX, HP/UX,
y BSDI.




-------------
=[Null Scan]=
-------------


 Este tipo de scan requiere que mandemos un paquete tcp sin ninguna flag en
uso, por eso se le llama 'Null scan' ya que precticamente mandamos un paque-
te vacio, cabe aclarar que en los sistemas Windows no funciona este tipo de
procedimiento. Logramos saber el estado del puerto cuando:

 a) Si el puerto está abierto, el objetivo no responde a el paquete.

   [root@localhost root]# ./hping2 64.70.145.95 -c 4 -p 81
   HPING 64.70.145.95 (eth0 64.70.145.95): 40 data bytes
   60 bytes from 64.70.145.95: flags=RA seq=0 ttl=238 win=0 time=109.5 ms

   --- 64.70.145.95 hping statistic ---
   4 packets tramitted, 1 packets received, 75% packet loss

 b) Si el puerto está cerrado, el objetivo nos responde con un RST.

   [root@localhost root]# ./hping2 64.70.145.95 -c 4 -p 80
   HPING 64.70.145.95 (eth0 64.70.145.95): 40 data bytes

   --- 64.70.145.95 hping statistic ---
   4 packets tramitted, 0 packets received, 100% packet loss

 Esta tecnica no funciona en los sistemas de Microsoft, CISCO, IRIX, HP/UX,
,BSDI y MVS.

 NOTA: para usar esta tecnica hay que modificar el hping.c...

        if (tcp_th_flags == 0)                   /*tcp flags ain't set */
                tcp_th_flags |= TH_FIN;

       si no le dimos ninguna flag en el parametro, nos pone el FIN como
       default, así que solo comentemos la línea y ruleará su hping.

 * En nmap basta con correrlo así:
   nmap -sN -p(rangode-puerto) IP




------------
=[FIN Scan]=
------------


 Este tipo de scan manda un paquete "vacio" completamente a el host, como
prueba.

 Esta tecnica no funciona en los sistemas de Microsoft, CISCO, IRIX, HP/UX,
y BSDI y MVS.

 * En nmap basta con correrlo así:
   nmap -sF -p(rangode-puerto) IP




---------------
>SEGUNDA PARTE.
===============

 Aquí comienzan las opciones al ICMP común y corriente al que estamos acostum-
brados, ya que muchos administradores están comenzando a filtrar estos paquetes
reduciendo el trafico innecesario a sus redes, y evitando ciertos tipos de ata-
ques con este protocolo.

 Así que es hora de buscar opciones a nuestro clasico ping. Aunque siempre es
más practico agotar su uso, y ya luego buscar otras opciones :p




------------
=[ACK Scan]=
------------

 El ACK Scan, nos puede servir de dos cosas:

 1) Comprobar la existencia de un firewall.

 En el ACK Scan, mandamos un paquete con la bandera de ACK prendida, cuando el
filtro (la ente que está capturando el trafico), revisa que no hemos comenzado
una seción típica de tcp (primero va el SYN recuerdalo...), entonces:

 a) Si el servidor nos responde con un RST, el puerto se puede clasificar como
   'no filtrado'.

 b) Si el servidor no nos responde, podemos considerar el puerto como filtrado.

 Es bueno utilizar esta tecnica para saber si nuestro objetivo deja de ser el
host corriente con el que estás acostumbrado a tratar, ya que este cuenta con
un firewall en la mayoría de los casos, digo la mayoría ya que no solo los fi-
rewall hacen eso).

 2) Comprobar la existencia del host en Internet.

 Igual que en el anterior mandamos el paquete con la flag prendida, entonces:

 a) Si se nos responde con un RST el servidor existe.

 b) Si no se nos responde, o nos llega el mensaje de "host unreachable" entonces
    el servidor no existe.

 * En nmap basta con correrlo así:
   nmap -PT IP




----------------
=[Inverse Scan]=
----------------


 Esta tecnica es parecida al la anterior, solo que en esta se utiliza la flag
RST, y esperamos respuesta, en caso de:

 a) No recibir nada, el host probablemente exista.

 b) Recibimos el mensaje de "ICMP host unreachable", esto quiere decir que el
    host no existe.
 
 Lo especialmente bueno de esta tecnica es que ninguno (de los IDS que yo he
visto) loguean los paquetes RST con la configuración por default.




-------------
=[Despedida]=
-------------

 Pues como podemos ver hay varias maneras de tratar de ocultar nuestros "actos"
y supongo que no son las únicas tecnicas que hay, solo es cuestión de conocer el
protocolo y adaptarlo a nuestras necesidades.

 Y podemos ver que al final con un simple escaneo, pues se nos pueden pasar por
inadvertidos puertos "sensibles" de nuestra victima, así que, aquí tienen un poco
más de información que pueden utilizar para que su exploración sea presisa y un
poco más segura.

 Gracias a todos aquellos que me rolaron una shell para guardar los logs, ya que
los sockets que se necesitan para hacer este tipo de cosas (Raw Sockets) necesitan
máximos privilegios, así que no mucha gente está dispuesta a darme root en su box
así nomás: Toloache, Crypkey, ST38410A y Spiderlinux.

Un Saludo a:

- Adriana...

- Mi equipo hakim.ws, hkm, taer y Freetv donde quiera que esté.

- Raza Mexicana, gracias a que alguna vez un niño curioso vio cierta ezine de ca-
  sualidad en Inet, le dio por conocer este mundo. Gracias.

- KuKulKan, wireless, dr_fdisk^, vision, zacr, MaRieLvA, Yield, Fatal, Xytras, DeadSector,
  0x90, beck, Daemon, dex, Neuro, rwx-rx, b1n, NaPa, a_d_mIRC, Espeis y de nuevo a
  toloache gracias por todo!...
  (si quieres ver tu nick aqui 
  Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
  XD)

- G7W (Ro,Bi,Su,Is,Ed,Ch & Da) ja!

 Alguna queja, sujerencia, etc, etc, etc, escribe a: 
  Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
 

 Nos vemos.




------------------------------
=[Referencias, Links & Stuff]=
------------------------------

- El acrónimo "IDS" viene del ingles Intrusion Detection Systems, traduscamolo como
  sistema de detección de intrusiones, sirve para informar y loguear cualquier acti-
  vidad que se le proporcione en el respectivo archivo de configuración del programa.

- Entiendase por'id', como el campo de ID de la IP en el output de hping.

- Intrusion Detection FAQ
  Version 1.80 - Updated June 12, 2003
  http://www.sans.org/resources/idfaq/

- Texto original acerca del "dumb scan"
  http://www.kyuzz.org/antirez/papers/dumbscan.html

- "The hping Idle Host Scan"
  Erik J. Kamerling
  http://www.giac.org/practical/gsec/Erik_Kamerling_GSEC.pdf

- "Port Scanning without the SYN flag"
  Uriel Maimon
  Phrack #49 articulo 15
  http://www.phrack.org/phrack/49/P49-15

- Idlescan-v0.1
  Linux
  http://www.securityfocus.com/tools/679

- Hping
  Salvatore Sanfilippo <
  Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
 >
  Linux
  http://packetstormsecurity.nl/UNIX/scanners/hping.c

- Hping2
  Salvatore Sanfilippo <
  Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
 >
  Linux
  http://www.hping.org

- Hping3
  Salvatore Sanfilippo <
  Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
 >
  Estado actual de desarrollo de Hping3, que prometen que sea una herramienta un poco
  más superior a hping2, con una salida más 'leible', y al parecer se le van a poder
  agregar scripts, esas son algunas de sus caracteristcas finales.
  http://www.kyuzz.org/antirez/hping3.html

- Nmap
  Fyodor <
  Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
 >
  Linux, Windows, FreeBSD, OpenBSD, Solaris, IRIX, Mac OS X, HP-UX, NetBSD, Sun OS, Amiga.
  http://www.insecure.org/nmap/

- Man del Nmap
  http://www.insecure.org/nmap/data/nmap_manpage-es.html

- Una pequeña guía acerca del uso de Nmap
  http://www.plazalinux.com/nmap-intro-guide.php

- VScan
  viv3kr <
  Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
 >
  Windows 2000 y Windows Xp
  http://www.securityfocus.org/tools/3124 

- Sendtcp.c
  messer <
  Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
 >
  http://packetstorm.linuxsecurity.com/Win/sendtcp.c

- SynLog
  Thamer AL-Herbish <
  Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
 >
  http://www.cis.udel.edu/~zhi/www.docshow.net/warcher/synlog-0.4.tar.gz

- Courtney
  University of California
  Requiere Perl v.5, libpcap, y tcpdump.
  ftp://coast.cs.purdue.edu/pub/tools/unix/logutils/courtney/