
Escáner SYN sin estado y capturador de banners más rápido y eficiente gracias al uso de la pila TCP/IP en espacio de usuario.
RESUMEN
polarbearscan es un intento de realizar un escaneo de puertos y captura de banners más rápido y eficiente. Combina dos ideas diferentes que, con suerte, lo harán merecedor de su atención y tiempo.
La primera de estas ideas es utilizar escaneo SYN sin estado usando cookies criptográficamente protegidas para analizar los acuses de recibo entrantes. Según el conocimiento del autor, esta técnica fue pionera de Dan Kaminsky en scanrand. Scanrand era parte de Paketto Keiretsu, una colección de utilidades de escaneo, y fue lanzada entre 2001 y 2002. Un espejo de este código se puede encontrar en Packet Storm [1].
La segunda idea es usar una pila TCP/IP de espacio de usuario modificada para que el escáner pueda restaurar el estado inmediatamente al recibir un paquete verificado criptográficamente con los flags SYN y ACK establecidos. La pila de espacio de usuario utilizada aquí por polarbearscan se llama libuinet [2]. A diferencia de otras pilas TCP/IP de espacio de usuario, esta es muy madura, ya que es simplemente un puerto de la pila TCP/IP de FreeBSD.
Al modificar la pila libuinet, se puede construir un socket y completar el handshake TCP de tres vías respondiendo con un ACK adecuado. De esta manera, se establece inmediatamente una conexión TCP completamente funcional. Esto a diferencia de otros escáneres (como nmap) que, después de notar que un puerto TCP está abierto, tendrían que realizar una conexión TCP completa a través del kernel para hacer cosas como captura de banners o escaneo de versiones. Una conexión TCP completa lleva lleva a que se realice un nuevo handshake TCP de tres vías. Esto descarta por completo el estado implícito que se generó con los dos paquetes iniciales intercambiados entre los hosts. Al evitar esto, se puede reducir el uso de ancho de banda e ir inmediatamente de detectar que un puerto está abierto a conectarse a él. Esta conexión puede entonces simplemente quedarse a la espera y recibir datos en modo de captura de banner o podría enviar una solicitud HTTP.
Tenga en cuenta que el escáner actualmente solo admite escaneo basado en IPv4 y solo funcionará correctamente en interfaces de tipo Ethernet (cableadas o inalámbricas). No hay planes para soportar IPv6 o diferentes interfaces en un futuro cercano.
INSTALACIÓN
Compilar el código es bastante sencillo. Solo se necesita una conexión a internet funcional y tener git instalado para que se puedan descargar las dependencias requeridas. Además de eso, utilidades de desarrollo estándar (gcc, make, patch), versiones de desarrollo de bibliotecas (pthread, pcap, OpenSSL). En distribuciones basadas en Debian, se pueden instalar todos los paquetes listados en el archivo DEPENDENCIES. Después de eso, uno debería poder escribir 'make' y las dependencias externas se descargarán usando git y se compilará todo el escáner. Este binario se puede copiar a /usr/bin o /usr/local/bin o similar.
Si la compilación falla, envíe un correo al autor (detalles de contacto abajo) e incluya la salida de error, la versión del kernel, la versión de libc y cualquier otra cosa que pueda ayudar a reproducir y solucionar el problema. Su ayuda es amablemente apreciada.
USO
Ejecutar la herramienta debería ser bastante sencillo. Necesitará privilegios de root. La opción -h muestra información breve de uso y las opciones explicadas. En la mayoría de los casos, no se necesitará más que especificar el tipo de escaneo a realizar, las listas de puertos a escanear y la IP objetivo o rangos de IP. Se admite notación CIDR para los rangos de IP.
Hay cuatro tipos de escaneo diferentes que se especifican con -s.
-sB: Esto realiza una captura de banner estándar. El escáner no enviará ningún dato, ya que simplemente esperará y recibirá datos y los mostrará hasta el primer salto de línea o retorno de carro recibido.
-sH: Este modo envía una petición "GET / HTTP/1.1" a cada conexión establecida con éxito. Es muy útil para identificar rápidamente servidores HTTP.
-sT: El modo de escaneo TLS envía una sonda NULL TLS1.0 con cero opciones y cero algoritmos especificados. Sin embargo, si hay un servidor TLS válido en el extremo receptor, analizará e intentará determinar si es una respuesta de error TLS válida, que luego se mostrará.
-sC: Escaneo personalizado que cargará un payload desde un archivo (especificado con -d) y enviará este payload a cada socket establecido con éxito. Puede ser útil para sondear rápidamente protocolos muy específicos.
-p: La lista de puertos TCP a escanear, que puede ser un rango de puertos o puertos individuales con rangos y puertos individuales separados por comas. Algunos ejemplos: -p22,80,8080-9000,143 escaneará los puertos 22, 80, 143 y el rango de 8080 a 9000.
-b <límite>: El límite de ancho de banda a aplicar para las sondas salientes. Esto no se aplica a los datos enviados y recibidos a través de los sockets, solo a las sondas SYN reales que se envían. Ejemplos: -b300k, -b67m, -b500b darían límites de ancho de banda de 300 kbps, 76 mbps y 500 bps respectivamente.
-d <nombre_archivo>: Nombre del archivo que contiene el payload utilizado para el escaneo personalizado. Todo el archivo se enviará hasta un máximo de 128 kB, que debería ser más que suficiente para la mayoría de los propósitos.
-t: Esto especifica la cantidad de segundos que el escáner esperará después de haber enviado todas las sondas para recibir datos de vuelta a través de los sockets aún conectados. Esto asumiendo que los haya, de lo contrario, finalizará en el momento en que no quede más trabajo por hacer.
-x: Esto fuerza a la herramienta a volcar siempre la salida recibida en notación hexadecimal. De lo contrario, solo volcará datos en hexadecimal si se encuentran caracteres no imprimibles.
-v: Esto especifica una salida verbosa. Es útil principalmente para depuración.
-i : La interfaz a utilizar para seleccionar la IP de origen y configurar el backend de pcap. Esto no debería ser necesario en máquinas estándar con una sola NIC configurada correctamente, pero con múltiples NIC podría ser necesario.
-r : La semilla aleatoria a utilizar para el RNG. Es útil principalmente para depuración y para asegurarse de que la herramienta pueda generar la misma secuencia exacta de paquetes nuevamente. El argumento es un entero y se puede especificar en notación hexadecimal y decimal.
-T : Sobrescribir el valor TTL de IP predeterminado a usar en las sondas SYN. No es realmente necesario para nada, pero se incluye por completitud.
-W : Sobrescribir el tamaño de ventana TCP predeterminado a usar en las sondas SYN. No es realmente necesario para nada, pero se incluye por completitud.
-I : Sobrescribir el valor ID de IP predeterminado a usar en las sondas SYN. No es realmente necesario para nada, pero se incluye por completitud.
-n: Esta opción solo debe usarse si sabe lo que está haciendo. Hará que la herramienta NO establezca la regla de firewall para descartar todos los paquetes RST salientes. Si se usa, el escáner no se bifurcará y uno tiene la responsabilidad de establecer esta regla manualmente, ya que de lo contrario el kernel enviará paquetes RST de vuelta por cada paquete SYNACK recibido. Esto hará que la herramienta simplemente no funcione. La regla tal como se establece en Linux es la siguiente:
$ /sbin/iptables -A OUTPUT -p tcp --tcp-flags RST RST -j DROP
-o: Esta opción no realiza la redirección de E/S, por lo que se verá más salida de los internos de uinet. Solo se agrega por completitud o para escenarios de depuración, ya que no es muy útil de otra manera.
-h: La información de uso.
Algunos ejemplos de cómo usar la herramienta. Para hacer una captura de banner del puerto 22 en un rango /24, use:
./pbscan -sB -p22 x.x.x.x/24
Para hacer un escaneo HTTP en varios puertos HTTP comunes para una sola IP con la salida en modo hexadecimal, use:
./pbscan -sH -x -p80,8080-9000 x.x.x.x
Durante el escaneo, cuando presione una tecla en la entrada estándar, se mostrarán algunas estadísticas, como la cantidad de puertos abiertos identificados, la cantidad de acuses de recibo TCP válidos recibidos, el número de conexiones actualmente activas y cuántas sondas SYN del total ya se han enviado. Esto se verá algo como:
sent: 1.97% (of 254), open: 0, active: 2, acks: 2
AUTOR
Esta herramienta fue escrita por Vincent Berg. Contácteme por correo electrónico a [email protected] o visite mi sitio web http://santarago.org para ver lanzamientos/noticias actualizadas sobre este escáner.
AGRADECIMIENTOS
Mucho agradecimiento a varias personas que ayudaron probando, portando esta herramienta y reportando errores. Gracias a Ehab, Joseph, Alejandro, Julián y Diego.
REFERENCIAS
[1] http://packetstormsecurity.com/files/30489/paketto-1.10.tar.gz.html