Introducción al TCP/IP / Escaneo de puertos avanzado / DoS




Los protocolos basados en TCP, son protocolos orientados a conexión. Esto quiere decir, que hay todo un proceso para armar la conexión, recien ahi se empiezan a mandar los paquetes necesarios (la información que se tenian que mandar) y luego terminan la conexión. Esto hace que los protocolos basados en TCP sean mas lentos, que los protocolos basados en UDP (no vamos a hablar de UDP/IP ahora, pero lo que tienen que saber, es que los protocolos basados en UDP, no arman una conexión previamente a mandar los datos necesarios, si no que los mandan a lo 'bruto' sin fijarse si el receptor esta en condiciones de recibirlos o no).

Vamos a profundizar un poco mas en esto de como se maneja el protocolo TCP/IP

Cuando ustedes necesitan hablar con alguien por msn, y pedirles algo, generalmente primero lo saludan, esperan el saludo de la otra persona, luego de eso (y al asegurarse que del otro lado del msn hay una persona escuchandolos) le dicen lo que necesitan, y su comunicación termina con una despedida.

En TCP/IP es lo mismo. El proceso es asi:

1. Petición de conexión ----> Persona A 2. <--- conexión aceptada Persona B
3. <--- Ida y vuelta de datos --->
4. Cierre de conexión

Por otro lado, les voy adelantando que en UDP/IP, el esquema seria este:

Persona A <---- Ida y vuelta de datos ---> Persona B

Los paquetes TCP/IP son estructurados, y esta es la estructura de su cabecera de datos:

---------------------------------
| Puerto Origen | Puerto Destino |
---------------------------------
| Numero de Secuencia |
---------------------------------
| Numero de Confirmación |
---------------------------------
|Comienzo de | |U|A|P|S|F| |
| Datos | |R|C|S|Y|I| Ventana |
| | |G|K|H|N|N| |
---------------------------------
| Suma de | Puntero de |
| Comprobación | Urgencia |
---------------------------------
| Datos |
---------------------------------

Asi se organizan las cabeceras de los paquetes TCP/IP que circulan por nuestra PC
A medida que vamos a ir necesitando, vamos a ir explicando para que sirve cada parte de la cabecera de un paquete TCP/IP (en este articulo explicaremos algunos, a medida que vamos abanzando, veremos mas)

Por ahora, veremos los Flags. Los flags ocupan 1 bit cada uno en la cabezera de un paquete, y como pueden ver (aunque quedaron chuequitas las | ) son URG, ACK, PSH, SYN, FIN. Como sabran, que ocupe 1 bit significa que es 1 caracter, y como se pueden imaginar puede ser 0 o 1.

Creando una conexión entre dos host:
Como ya habiamos adelantado, si el protocolo se basa sobre TCP/IP, es un protocolo orientado a conexión, y ahora veremos como se hace esa conexión.

1 ------> Enviamos un paquete SYN Host A 2 <------ Recibimos un paquete SYN ACK Host B
3 -------> Enviamos un paquete ACK

Asi es como realmente se realizan las conecciones TCP/IP

Veamos, antes de comenzar a enviar los datos que realmente queremos enviar, vamos a armar una conexión para asegurarnos que el Host B va a recibir los paquetes que estamos enviando y que no los estamos enviando al vacio =P (ya los tengo podrido con esto de que es orientado a conexión, no?)

Enviamos un paquete con el Flag SYN activado (o sea, con el Flay Syn valiendo 1)
Cuando este paquete le llega al Host B, este interpreta que el Host A esta intentando comenzar una conexión, (si las reglas de administración lo permite, digamos, si ningun router, firewall, o lo que sea lo impide) este le contesta con un paquete que tiene dos flags activados: SYN y ACK. Esto quiere decir que acepta la conexión
El Host A al recibir este ultimo paquete, tiene la aceptación del Host B para iniciar una conexión con el, solo falta que responda con un paquete ACK para que realmente la conexión se establezca.

En todo este proceso, que obviamente se hace automaticamente, la conexión toma distintos estados.

1) Cuando enviamos el paquete SYN, nuestro estado es SYN_ENVIADO
2) Cuando recivamos la respuesta del Host B (el paquete con los flags SYN y ACK activados) nuestro estado de coneccion es SYN_RECIBIDO
3) Luego de enviar por ultimo el ACK, el estado sera de ESTABLECIDO

¿Que significado tiene cada Flag?

Flag URG: Este Flag, significa que tiene caracter de urgente el paquete. Que debe ser tratado primero que los Paquetes normales, es decir que se saltea la cola.

Flag ACK: Este paquete se usa como confirmación de que el paquete anterior fue recivido.

Flag PSH: Se utiliza para vaciar un buffer de transimision

Flag RST: Significa Reset, es para reiniciar una conexión porque capaz un paquete llego corrumpido (los paquetes tienen verificaciones, por si se perdio un paquete por el camino o por si alguien esta mandando paquetes corruptos =P)

Flag SYN: Para comenzar una conexión.

Flag FIN: Para finalizar una conexión.

Fin de la 'teoria' vamos a la practica


Escaneando Puertos de forma Avanzada

Hay muchas técnicas, algunas mejores que otras, algunas mas silenciosas, otras mas directas, lo que voy a explicar ya lo puse en practica, pero luego nos reuniremos por el IRC a practicar .
Para esta practica, usaremos el nmap. Bajenlo de aca

1- TCP_CONNECT
Este es el mas comun de todos, directamente, nos conectamos un host al puerto que queremos saber si esta abierto. Si nos podemos conectar, esta abierto.
Ahi pasaria lo que explicamos arriba, los 3 pasos para formar una conexión
Si esta cerrado, en vez de recibir un paquete SYN-ACK, recibiremos un RST

Un Scaner de puertos de este tipo en Vb, es extremadamente facil de hacer (y en cualquier lenguaje supongo, pero VB es un lenguaje que manejo, y fue lo primero que hice al trabajar con winsock en VB)

Ademas, que no es muy efectivo si el otro host tiene firewall o IDS.

2- SYN_SCAN
Este es un scan de medio pelo, y lo que hacemos es esto.
Mandamos un paquete SYN; si recibimos un paquete SYN-ACK no respondemos con un paquete ACK, si no que mandamos un paquete RST para cerrar la conexión.
¿porque? Fácil, el Host B (mantengamos esa idea en la cabeza) ya nos informo perfectamente que tiene el puerto abierto o cerrado, y el solo echo de responder con un ACK para armar la conexión a ese puerto, seria una estupidez, ya que no sacariamos provecho alguno, mas que dejar un lindo log de conexión en el SO.

Este tipo de scaneo, es bien reconocido por los firewalls, les aparecera algo como SYN attack (el mcaffe lo muestra textualmente asi) pero es mejor que nada.

Digamos, a un firewall le basta y le sobra con que le llege un paquete SYN pidiendo que se arme una conexión; pero al SO solo se da cuenta y hace un log cuando se completa el intento de conexión

nmap nmap -vv -PO -sS ip

3- Stealth Scan
Este scaneo es realmente bueno y silencioso, muchos firewalls lo pasaron por alto.
La idea de este scaneo, es mandar un paquete FIN al Host B a determinado puerto, si nos responde con un paquete RST, el puerto seguro esta cerrado.
Caso contrario (si no responde) esta abierto o silencioso (un puerto silencioso, no responde a estos pedidos)
Si bien, tiene como ventaja que la mayoria de los firewalls lo pasan por alto (por no armar una conexión) Windows, que no siguen los estandares de nada, no respeta esta estructura TCP/IP (asi como su IE no sigue los standares de la programación web y luego la gama de Mozilla es "inconpatible"). Asi que no es buena idea lanzar este tipo de scaneos a un SO windows ya que nos dara una infinidad de puertos abiertos, que en realidad no esta. Aunque por otro lado, nos sirve para OSfinger, de esta forma ya sabemos que estamos frente a un SO Windows.

nmap -vv -PO -sF ip

4- ACK Scan
Este tipo de scaneo, esta orientado para determinar cuando un puerto esta silenciado (que era la falla de los anteriores)
La idea es esta, si le mandamos un paquete ACK a un Host B, con todo aleatorio (como si hubiera existido en algun momento una conexión) el Host B interpretara que ese paquete es totalmente erroneo, y que nunca hubo un intento de conexión... por eso si el Puerto esta abierto, o cerrado, en cualquiera de los dos casos, nos respondera con un paquete RST.

Pero si no responde, ya sabemos con perfección que ese puerto esta filtrado por un firewall!!

Como veran, esta tecnica es extremadamente útil para conbinarla con otra, para sacarnos las dudas.

nmap -vv -PT ip

Haciendo un DoS: SYN Flood

Vamos a aplicar nuestras técnicas para hacer un DoS, aprovechando nuestros conocimientos de TCP/IP
Vamos a hacer uno que consume los recursos, veamos, cada vez que uno se quiere conectar con un HOST y envia un paquete SYN a el, este crea una tabla en memoria, llamda estructura de datos. Asi con cada intento de coneccion de una IP, a un puerto, vamos a intentar floodear al sistema con paquetes SYN, con muchos intentos de conexión para consumir recursos en memoria y hacer un DoS al demonio.

Para hacer esto de manera correcta, tenemos que spofear el IP. ¿Y esto porque?

Host A ------> Envia paquete SYN -------> Host B
2**.14*.144.xxx con IP Spofeada
1.1.1.1

Bueno, si el HOST B recibe un paquete SYN de la IP 1.1.1.1, va a intentar responder al IP con un SYN/ACK, la gracia es que al no existir la IP 1.1.1.1 nunca recibira una respuesta al paquete que "envio" 1.1.1.1 y se quedara consumiendo recursos en memoria, en su estructura de datos. (cada conexión tiene un time to live, es decir, luego de x cantidad de tiempo, se borran automaticamente, liberando los recursos en memoria)

Al ser flood, obviamente hay que hacer esto, con muchos paquetes, por ejemplo con 100; todos con IPs spoofeadas.

Hay un programa muy poderoso para linux que nos permite hacer esto automaticamente, es hPing (hping es un programa propio para linux, lo pueden hacer desde una shell si no disponen de un windows instalado en su propia pc, o si no, utilizar nemesis que es parecido y corre sobre windows)

hPing xxx.xxx.xxx.xxx --rand-source --destport 21 --syn --count 150

Explico brevemente:
rand source, enviara desde IPs aleatorias.
destport 21, ataca a la IP xxx.xxx.xxx.xxx al puerto 21
syn, obiviamente pone un 1 en el flag syn
count 150, va a enviar 150 paquetes

Un problema para esto, es cuantos routers o sistemas de validación hay en el medio entre vos y tu destino xxx.xxx.xxx.xxx
Capaz antes de llegar al destino, tenes routers que verifican que las IPs no son validas, y no dejen llegar los paquetes a destino.

Fuente:
datafull.com
Autor: woot



Otras artículos de interés:

Cómo Escribir Programas Seguros
Última Actualización: 3 de Noviembre de 1.999 - Miércoles Artículo escrito el 31/Jul/98 y publicado en Linux Actual, número 4 Muchos de nosotros nos enfrentamos día a día a l...
Diferencia entre WEP y WPA
WEP (Protocolo de equivalencia con red cableada): La seguridad de la red es extremadamente importante, especialmente para las aplicaciones o programas que almacenan información valiosa. WEP cifra los datos en su red de forma que sólo...
Eliminar archivos o carpetas que tengan mas de x minutos, dias, meses en Linux
Hace unos días un cliente nos solicitó un script para que se eliminase de la carpeta compartida publica temporal en el servidor de la empresa. Serían eliminados aquellos archivos o carpeta que tuviesen más de 30 minutos de haber sido c...
Theme Conky VaSlibre
Conky es un monitor de sistema para los sistemas X Window. Está disponible para GNU/Linux y FreeBSD, liberado bajo los términos de la licencia GPL La versatilidad de Conky es que corre con directamente en una X window, p...
Ajustar el Brillo de tu pantalla en Debian - Ubuntu - LinuxMint - Xanadu
Para los que duran mucho tiempo frente a la pantalla, disponer de una utilidad que nos permita cambiar los colores y el brillo de la pantalla del monitor según la hora del día; colores suaves y poco brillo durante la noche, brillo alto y colores...
Pulseaudio server connection failure - Debian - Ubuntu y Derivados
Pulseaudio es un servidor de sonido multiplataforma, capaz de funcionar por red. Funciona bajo sistemas compatibles con POSIX como GNU/Linux y también en otros sistemas operativos como Microsoft Windows. ...
Transparent Hugepages en Debian y derivados
Para hablar de Transparent Hugepages (THP) primero debemos conocer como se maneja la memoria en nuestro sistema, La memoria se maneja en bloques llamados paginas; una pagina tiene un tamaño de 4096 bytes, 1 Mb es equivalente a 256 p...
¿Sabías que MSN Messenger Tiene un SpyWare?
El MSN Messenger posee un SpyWare (espía) muy famoso es el QMGR. Para limpiar este espía de Microsoft tendrás que seguir estos pasos: Renombra los archivos: Loadqm.exe, qmgr.dll, qmgrprxy.dll y progdl.dll como por ejemplo: Loadqm.old y qmgr.d_...
Liberar memoria de RAM en Linux desde la consola
Al liberar la memoria de RAM de nuestro computador estaremos quitando toda la información de programas y procesos que habitualmente se ejecutan en el computador, para de esa forma lograr que este tipo de elementos verdaderamente esenciales ...
Actualizar al Kernel 3.9 en Ubuntu / LinuxMint
Entre las novedades más llamativas de este Kernel: - Soporte completo para todos los dispositivos Chrome - Soporte a virtualización KVM dentro de arquitecturas ARM - Mejora de la eficiencia energética...

Brindanos
un o una


Redes Sociales

Publicidad


Gana Bitcoins desde tu casa

Categorías


Planeta Vaslibre

Blog Roll




Nube de tags

  • anonimato
  • anonimo
  • antivirus
  • apache
  • avanzado
  • blog
  • bsd
  • bug
  • centos
  • chrome
  • cifrado
  • computer
  • debian
  • dos
  • escaneo
  • exploits
  • fedora
  • fice
  • firefox
  • forense
  • freebsd
  • gentoo
  • github
  • gnome
  • gnu
  • gpl
  • gtk
  • hack
  • hacking
  • hosting
  • informatica
  • internet
  • introduccion
  • isos
  • libre
  • licencias
  • linux
  • linuxmint
  • lxde
  • micros
  • mint
  • mit
  • mozilla
  • mysql
  • noticia
  • opensource
  • pgp
  • php
  • puertos
  • sabayon
  • seguridad
  • system
  • tcp
  • tecnologia
  • thunar
  • thunderbird
  • tor
  • troyanos
  • tware
  • ubuntu
  • underground
  • vaslibre
  • virus
  • viserproject
  • vivaldi
  • vulnerabilidades
  • web
  • website
  • windows
  • xanadu
  • xfce
  • xombra