Galeria | Postales | Cumpleaños | Ingenieria en Sistemas | Acerca del Portal
 
 
 
Noticias

Port Scanning

El escaneo de puertos consiste básicamente en detectar que servicios nos esta ofreciendo un determinado host. Si al hacer un escaneo encontramos un puerto abierto, según cual fuese este es el servicio que nos ofrece.

Por: Neofrek


Por ejemplo vamos a escanear el host zapala.com.ar: Interesting ports on zapala.com.ar (200.32.91.1) Port State Service Protocol 21 open tcp ftp 25 open tcp smtp 80 open tcp http Suponiendo que sólo estos puertos estuvieran abiertos (HEH!) lo que nos resulta de este escaneo, es que zapala.com.ar esta ofreciendo servicios de transferencia de archivos, de correo y de web. Mas adelante veremos de que forma podemos explotar la información que hemos obtenido ahora. [ Diferentes técnicas de escaneo de puertos ] Debido a los diferentes tipos de protocolos, los numerosos puertos que pueden estar escuchando, y a los dispositivos empleados para evitar o detectar el escaneo de puertos, han surgido diferentes técnicas las cuales tienen sus ventajas como desventajas. A continuación veremos algunas de las distintas técnicas que hoy día conocemos: TCP connect() scanning: esta es la forma mas popular de escaneo TCP y consiste básicamente en usar la llamada a sistema connect() del sistema operativo, si se logra establecer la conexión con el puerto de la otra computadora entonces este puerto esta abierto. Las ventajas que tiene esta forma de escaneo es que no se necesita ningún privilegio especial para poder llevarla a cabo, en la mayoría de los Unix cualquier usuario puede hacer uso de la llamada connect(). Otra gran ventaja es la velocidad. El lado negativo que encontramos es que es muy fácil de detectar y de filtrar, y generalmente el host loguea que establecemos una conexión e inmediatamente nos desconectamos. TCP SYN scanning: esta técnica es la llamada escaneo "half-open" (o mitad-abierta), porque no establecemos una conexión TCP completa. Lo que hacemos es enviar un paquete SYN como si fuéramos a entablar una conexión TCP completa y esperamos por una respuesta. Podemos recibir un SYN|ACK si el puerto esta escuchando o un RST si el puerto esta cerrado. Si recibimos un SYN|ACK en respuesta, inmediatamente le enviamos un RST. La mayor ventaja de esta técnica es que muy pocos servers nos loguean; y la desventaja es que se necesita privilegios de root para construir estos paquetes SYN a enviar. TCP FIN scanning: algunos firewalls y packets filters escuchan por los paquetes SYN en algunos puertos, y programas como el synlogger pueden detectar este tipo de escaneo. En cambio los paquetes FIN pueden penetrar sin mayor problemas. La idea consiste en que al enviar un paquete FIN si el puerto esta cerrado nos va a devolver un RST, y si el puerto esta abierto nos va a ignorar. Esto se debe a un error en las implementaciones TCP pero no funciona en un 100%. La mayoría de los sistemas parecen susceptibles excepto los sistemas Microsoft que son inmunes (aunque usted no lo crea). Fragmentation scanning: esta no es una técnica en si misma, sino una modificación de otras técnicas. Consiste en hacer una división de los paquetes que enviamos, para no ser detectados por los packet filters y los firewalls. Por ejemplo podemos hacer un SYN o un FIN scanning fragmentando los paquetes que enviamos, y al ir quedando en cola en los firewalls y en los packet filters no somos detectados. TCP reverse ident scanning: el protocolo ident permite averiguar el nombre de usuario y el dueño de cualquier servicio corriendo dentro de una conexión TCP. Por ejemplo podemos conectarnos al puerto http y usar identd para averiguar que esta corriendo la victima como root; esto solo es posible estableciendo una conexión TCP completa. FTP bounce attack: algo interesante del protocolo ftp, es que permite lo que se llama conexión proxy ftp. O sea, yo podría conectarme a un ftp desde un servidor proxy y al hacer esto establecer una conexión y enviar un archivo a cualquier parte de la Internet. Esto lo podemos aprovechar también para hacer por ejemplo un escaneo TCP, ya que estaríamos haciéndolo desde un servidor ftp pero detrás de un firewall. Lo bueno que tiene esta técnica es obviamente que es muy difícil de rastrear, y lo malo es que puede volverse sumamente lento. UDP ICMP port unreachable scanning: Lo que varia significativamente de esta técnica con respecta a las otras es que estamos usando el protocolo UDP, este protocolo puede ser mas simple que el TCP pero al escanear se vuelve sumamente mas complejo; esto se debe a que si un puerto esta abierto no tiene que enviarnos un paquete de respuesta, y si un puerto esta cerrado tampoco tiene que enviarnos un paquete de error. Afortunadamente, la mayoría de los hosts nos envían un paquete de error "ICMP_PORT_UNREACH" cuando un puerto UDP esta cerrado. Esta técnica suele volverse muy lenta. [ Averiguando el Sistema Operativo ] Saber que sistema operativo esta corriendo nuestra víctima es algo obviamente muy valioso, ya que muchas de las vulnerabilidades que podemos encontrar dependen del sistema y la versión que tenga. La forma mas efectiva de poder conocer que sistema corre nuestra víctima seria hacerle un telnet. Suponiendo que el puerto 21 estuviera abierto veríamos algo asi: caos@CAOS~ telnet afrodita.unrl.edu Trying 208.145.173.12... Connected to afrodita.unrl.edu. Escape character is '^]'. HP-UX hpux B.10.01 A 9000/715 (ttyp2) login: Como podemos ver al telnetear al host hpux.u-aizu.ac.jp nos aparece que sistema operativo y que versión esta corriendo; y nos aparece un prompt pidiéndonos los datos del login. Lamentablemente esta técnica noes muy efectiva ya que el banner que nos muestra los datos del sistema es fácilmente modificable; en los Linux solo basta con modificar los archivos /etc/issue y /etc/ issue.net, por ejemplo al telnetear a mi computadora veríamos algo así: /////// CAOS - Ezkracho Team // - = - /////// Feel the Power ! login: Pero el modificar los banners del login no afecta los banners defaults que vienen en los demás servicios; por ejemplo al telnetear a un ftp nos aparecería lo siguiente: caos@CAOS~ telnet ftp.netscape.com 21 Trying 207.200.74.26 ... Connected to ftp.netscape.com. Escape character is '^]'. 220 ftp29 FTP server (UNIX(r) System V Release 4.0) ready. SYST 215 UNIX Type: L8 Version: SUNOS Otra truco que podemos utilizar si nuestra víctima tiene montado un servidor web seria el siguiente: caos@CAOS~ echo 'GET / HTTP/1.0 ' | nc hotbot.com 80 | egrep '^ Server:' Server: Microsoft-IIS/4.0 caos@CAOS~ Con lo que nos aparece creo que todos pueden deducir el sistema operativo que esta corriendo. [ Fingerprinting ] El fingerprinting es básicamente determinar que sistema operativo corre una computadora, diferenciando las distintas respuestas que tiene un sistema a un pedido que hacemos. Así comparando la respuesta de un sistema con respecto de otro, y de otro, podemos ubicar cual es el sistema que corre. Vale decir que el fingerprinting no es 100% seguro con ningún programa que utilicemos, pero según cual fuese nos puede acercar lo suficiente como para ubicar el sistema, yo personalmente recomiendo el Nmap (www.insecure.org/nmap). A continuación veremos las técnicas mas representativas del fingerprinting que muchos programas utilizan: El FIN probe: mandamos un paquete FIN, o cualquiera que no mande un flag SYN o ACK, a un puerto abierto y esperamos por una respuesta. Según el RFC 793 no deberíamos obtener ninguna respuesta pero muchas malas implementaciones como el MS Windows, CISCO, BSDI, HP/UX, MVS e IRIX mandan un RESET de respuesta. El BOGUS flag probe: la idea es marcar un flag TCP indefinido (64 o 128) en la cabecera de un paquete SYN. Algunos Linux anteriores al 2.0.35 dejan marcado este flag en la respuesta; y algunos sistemas resetean la conexión cuando reciben un paquete SYN+ BOGUS. TCP ISN sampling: la idea aquí es encontrar patrones en el ISN (Initial Sequence Number) en aplicaciones TCP ante un pedido de conexión. O sea, hay distintos grupos de Sistemas Operativos que usan diferentes formas de generar los ISN, de esta manera podemos ubicar al sistema. Don't fragment bit: muchos sistemas comienzan seteando el "Don't fragment" bit en el IP, en algunos de los paquetes que envían. Y muchos otros sistemas lo hacen pero solo en algunos casos. O sea, que si vemos como va marcado este bit podemos obtener información interesante. TCP initial window: aquí lo único que hacemos es chequear el tamaño del window de los paquetes que nos devuelven. Algunos sistemas tienen un window único, por lo que esta técnica muchas veces es por la única forma en que los podemos detectar. ACK value: mas allá de que supongamos que el valor del ACK va a ser siempre estándar, en algunas implementaciones este valor varia. Por ejemplo supongamos que mandamos un FIN|PSH|URG a un puerto TCP cerrado, la mayoría de las implementaciones van a setear el ACK como el mismo número de ISN que nosotros enviamos, pero no Windows claro, que manda nuestro ISN + 1. ICMP error message quenching: esta técnica consiste en ver la cantidad de mensajes de error que se nos devuelve ante un pedido. Muchos sistemas limitan la cantidad de mensajes de error usando un ratio por segundo o otros formulas. Esta técnica no es muy usada porque se hace muy lento el tener que estar esperando a que nos devuelva los mensajes de error. ICMP message quoting: según los RFC los mensajes ICMP de error deben seguir una constante, sin embargo algunos sistemas no lo hacen así y varían en las respuestas. Este es un gran punto con el cual podemos identificar algunos sistemas. Exploit chronology: esta técnica es muy divertida. Dado que no se puede distinguir entre el TCP stack de Windows 95, 98 y NT, porque no lo han actualizado en lo mas mínimo, o sea el NT sigue teniendo el mismo stack que el 95 y que el 98, surgió esta técnica que todos seguramente hemos usado alguna vez. Consiste en hacer un ataque de DoS (Denial of Service) para tirar al Windows, podemos empezar con un Nuke, o un Ping de la Muerte, y luego vamos usando técnicas un poco mas avanzadas como Teardrop y Land; entonces después de cada ataque hacemos un PING a la víctima y según con que técnica haya caído podemos deducir que sistema es y hasta que Service Pack o Hotfix tiene instalado. SYN flood resistance: muchos sistemas paran de aceptar conexiones cuando uno les envía varios paquetes SYN; algunos solo aceptan 8 paquetes. Simplemente podemos determinar el sistema por la cantidad de paquetes que puede aceptar. [ Interpretando y explotando la información ] Solo veremos algunos de los puertos mas útiles para nuestro objetivo, los demás se los dejo para que los investiguen ustedes y usen su imaginación. Lo que aquí haremos en definitiva es tratar de averiguar las versiones de los demonios que esta corriendo el sistema, para encontrar algún bug de esa versión y su respectivo exploit. También veremos algunos puertos que nos pueden brindar datos interesantes. Interesting ports on zapala.com.ar (200.32.91.1) Port State Service Protocol 21 open tcp ftp 25 open tcp smtp 79 open tcp finger 80 open tcp http Puerto 21: yo lo primero que probaría es intentar hacer un ftp anónimo, muchos sistemas están tan mal configurados que hasta podríamos conseguir el archivo de password. Luego tendríamos que intentar ver que versión del demonio ftp esta corriendo, seria algo asi: caos@CAOS~ telnet ftp.zapala.com.ar 21 Trying 200.32.91.1 ... Connected to ftp.zapala.com.ar. Escape character is '^]'. 220 ftp.zapala.com.ar FTP server (Version wu-2.5.0(1) Tue Sep 21 16:48:12 EDT 1999) ready. Aquí vemos que versión del FTP server esta corriendo el host, que no hace falta decir lo famoso que es por sus innumerables bugs, ahora lo que hacemos es buscar el exploit para esa versión. Puerto 25: en este puerto generalmente encontraremos el servidor de correo; si es el sendmail u otro, telneteamos a este puerto y vemos cual es la versión, y por supuesto vemos si podemos encontrar algún exploit que nos sirva. Para lo que también nos puede ser útil este puerto es para enviar mails anónimos o fake mails. Por ejemplo nos podríamos hacer pasar por el Administrador del sistema y pedirle que nos envíe su contraseña: telnet universidad.edu.ar 25 220 universidad.edu.ar Microsoft Sendmail 1.0 ready at Sat, 2-1-98 HELO CAOS 250 Hello CAOS MAIL FROM: administrador@universidad.edu.ar 250 ...Sender OKay RCTP TO: victima@universidad.edu.ar 250 ...Recipient OKay DATA 354 Enter mail, end with "." on a line by itself Estimado usuario, debido a una reestructuración del sistema necesitamos nos envíe su contraseña para agregarla a la nueva base de datos. Muchas gracias y disculpe las molestias. El Administrador. . 250 Mail accepted QUIT 221 universidad.edu.ar closing connection. Este ejemplo es muy inocente pero todo esta en la imaginación de cada uno. Algo a tener en cuenta es que muchos servidores de correo loguean nuestra dirección IP y puede aparecer en el mail que enviamos, por eso es preferible primero enviarnos un mail a nosotros mismos para ver si aparece nuestra IP. Puerto 79: en este puerto podemos encontrar importante información sobre los usuarios que se encuentran en el sistema. Por ejemplo podemos probar hacer algo como esto: telnet jperez@victima.edu.ar 79 Login Name Tty Idle Login Time Office Office Phone jperez Juan Perez 1 Feb 7 02:06 4785-6548 Y obtendríamos información personal de ese usuario como ser su teléfono, que podríamos utilizar para hacer Ingeniería social. Ahora, si queremos ver todos los usuarios que hay en un sistema en algunos servidores podemos hacer esto: telnet @victima.edu.ar 79 Login Name Tty Idle Login Time Office Office Phone jperez Juan Perez 1 Feb 7 02:06 4785-6548 root root *2 4:28 Feb 7 02:05 Y como vemos obtenemos todos los usuarios que en ese momento se encuentran logueados en el sistema. Puerto 80: este puerto es el que nos ofrece el servicio de web. Podríamos utilizarlo para conseguir el archivo de password mediante la técnica del PHF, pero como esta técnica ya esta quedando obsoleta no mencionare como hacerlo. Todo depende de lo actualizado que estemos en los bugs que día a día aparecen, hoy si este host estuviera corriendo el servidor web de Microsoft podríamos probar la vulnerabilidad del IIS que afecta al 90% de los servidores web existentes en Internet, o como ya hemos visto antes podríamos usarlo para obtener información del sistema.
Add to del.icio.us
Add to Facebook
Add To  Digg
Add To  Furl
Add To  Reddit
Add To  blogmarks
Add To  BUMPzee
Add To  Blogg-Buzz
Add To Google
Add To muti
Add To Newsvine
Add To Rojo
Add To Spurl
Add To StumbleUpon
Add To Tailrank
Add To Technorati
Add To  Windows Live
Add To  Yahoo!

Anterior:

Siguiente:

Se el Primero en Comentar esta Noticia

Agrega tu Comentario:
Nombre:
Comentarios:
Codigo de Verificacion:
(Reescribe las letras de la imagen)
 
   
 

Últimas Noticias
SIGUIENDO LA UTOPíA DE UN PROYECTO
LIKES FALSOS
10 MANDAMIENTOS DEL DISEñO Y DESARROLLO WEB
UN MUNDO DIGITAL
STEVE JOBS MUERE
¿PENSANDO EN SER FREELANCE?
PLANEACIóN DE UN SITIO WEB
CERTIFICACIóN W3C
EL COMERCIO ELECTRóNICO EN LAS REDES SOCIALES
¿QUé ES UNA PáGINA WEB?

Ayuda a Portalisc

Add to Technorati Favorites
rss RSS

Inscripcion     Nokia     Carrera     Portal     BlueShift     DELLXPS     AMD     VidaISC     MSN     Software     Multimedia     Linux     Eventos     WebMaster     Prodigy    

Otras Noticias de VidaISC
¿PENSANDO EN SER FREELANCE?
TODOS EVOLUCIONARáN A GEEKS
CARTA ABIERTA A C4XPO

>Historico de Noticias


2000-2007 PORTALISC.NET