=[Tecnicas de Escaneo]=
-[hd <
[email protected]>]-
=[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
[email protected] XD)
- G7W (Ro,Bi,Su,Is,Ed,Ch & Da) ja!
Alguna queja, sujerencia, etc, etc, etc, escribe a:
[email protected]
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 <
[email protected]>
Linux
http://packetstormsecurity.nl/UNIX/scanners/hping.c
- Hping2
Salvatore Sanfilippo <
[email protected]>
Linux
http://www.hping.org
- Hping3
Salvatore Sanfilippo <
[email protected]>
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 <
[email protected]>
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 <
[email protected]>
Windows 2000 y Windows Xp
http://www.securityfocus.org/tools/3124
- Sendtcp.c
messer <
[email protected]>
http://packetstorm.linuxsecurity.com/Win/sendtcp.c
- SynLog
Thamer AL-Herbish <
[email protected]>
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/