Tag Archives: pentesting

Pentest Box, “distro” con herramientas de pentesting para entornos Windows

Captura de pantalla de 2015-09-16 16:30:34

Cuando hablamos sobre auditar un sistema o sistemas, una de las primeras cosas que quizás hagamos es iniciar Kali Linux, pero no sólo de Linux vive el pentester, de hecho un buen pentester debe ir más allá del simple uso de ciertas herramientas o sistema operativo.

Si te enfrentas a una auditoria y todo de lo que dispones es de un sistema MS Windows, quizás esta “distro” para Windows llamada Pentest Box te pueda solucionar muchos problemas.

Pentest Box, es una “distro” que corre bajo Windows con una gran colección de herramientas de pentesting y que además puedes llevar en un pendrive o algún otro tipo de almacenamiento portátil.

Las herramientas que contiene esta distro es bastante amplia y la mayoría de ellas son muy conocidas. Incluso empaqueta una gran cantidad de comandos básicos bien conocidos en sistemas Linux.

Las herramientas están agrupadas en las siguientes categorías:

Les dejo también un demo en video de Pentest Box:

Colección de Herramientas de Hacking (Python)

ninja-ideSi estas involucrado en el análisis de vulnerabilidades, ingeniería inversa, o pentesting, les sugiero probar con el lenguaje Python. Cuenta con un gran conjunto de bibliotecas y programas útiles. En este post se enumeran algunos de ellos.

La mayor parte de las herramientas enumeradas están desarrolladas en Python, otras son enlaces Python a librerías C existentes. es decir, que hacen que esas bibliotecas se puedan utilizar fácilmente a partir de programas escritos en Python.

.

.

Network

  • Scapy: envía, rastrea y analiza y crea paquetes de red. Se puede usar de forma interactiva o como una librería
  • pypcap, Pcapy y pylibpcap: varios enlaces Python para libpcap
  • libdnet: rutinas de red de bajo nivel, incluyendo la interfaz de búsqueda y transmisión de tramas Ethernet
  • dpkt: rápida y simple creación de paquetes y análisis, con las definiciones básicas de los protocolos TCP/IP
  • Impacket: modifica y decodifica paquetes de red. Incluye soporte para los protocolos de más alto nivel, tales como NMB y SMB
  • pynids: wrapper de libnids que incluye sniffing, IP defragmentation, reensamblado de streams TCP y detección de escaneos de puertos
  • Dirtbags py-pcap: lee ficheros pcap sin libpcap
  • flowgrep: grep a través de payloads de paquetes utilizando expresiones regulares
  • Knock Subdomain Scan: enumera los subdominios de un dominio de destino a través de una lista de palabras
  • SubBrute: Herramienta de enumeración rápida de subdominios
  • Mallory: proxy man-in-the-middle extensible TCP/UDP, soporta la modificación de protocolos no estándar al vuelo
  • Pytbull: framework de pruebas de IDS/IPS muy flexible (incluye más de 300 tests)

Debugging and Reverse Engineering

  • Paimei: framework de ingeniería inversa, incluye PyDBG, PIDA, pGRAPH
  • Immunity Debugger: GUI programable y debugger en linea de comandos
  • mona.py: PyCommand para Immunity Debugger que reemplaza y mejora pvefindaddr
  • IDAPython: plugin de IDA Pro que integra Python, permitiendo ejecutar scripts en IDA Pro
  • PyEMU: emulador IA-32 completamente programable, útil para análisis de malware
  • pefile: permite leer y trabajar con archivos Portable Executable (PE)
  • pydasm: interfaz en Python para la librería libdasm de desensamblado x86
  • PyDbgEng: wrapper en Python para el motor de depuración de Microsoft Windows
  • uhooker: intercepta llamadas a llamadas a la API dentro de DLLs , así como las direcciones arbitrarias en el archivo ejecutable en la memoria
  • diStorm: biblioteca de desensamblador para AMD64, bajo licencia BSD
  • python-ptrace: depurador usando ptrace (Linux, BSD y Darwin system call para trazar procesos) escrito en Python
  • vdb / vtrace: API de depuración de procesos multi-plataforma implementado en python, y vdb es un depurador que lo utiliza
  • Androguard: ingeniería inversa y análisis de aplicaciones de Android
  • Capstone: Framework desensamblador ligero multi-plataforma, multi-arquitectura con enlaces Python
  • PyBFD: Interfase Python para la libreria GNU Binary File Descriptor (BFD)

Fuzzing

  • Sulley: framework de desarrollo fuzzer y pruebas que consiste en varios componentes extensibles
  • Peach Fuzzing Platform: framework de fuzzing extensible para la generación y la mutación basada en fuzzing (la v2 fue escrita en Python)
  • antiparser: fuzz testing y API de inyección de fallos
  • TAOF: (el Arte del Fuzzing) incluye ProxyFuzz, un fuzzer man-in -the-middle de red no determinista
  • untidy: fuzzer XML de propósito general
  • Powerfuzzer: fuzzer web altamente automatizado y totalmente personalizable (protocolo HTTP basado en fuzzer de aplicación)
  • SMUDGE
  • Mistress: genera formatos de archivos al vuelo y protocolos con datos malformados, basados en patrones predefinidos
  • Fuzzbox: multi-codec media fuzzer
  • Forensic Fuzzing Tools: genera ficheros fuzzeados, sistemas de ficheros, y sistemas de ficheros con ficheros fuzzeados para probar la robustez de herramientas forenses y sistemas de análisis
  • Windows IPC Fuzzing Tools: herramientas para fuzzear aplicaciones que usan mecanismos Windows Interprocess Communication
  • WSBang: ejecuta pruebas automáticas contra servicios web SOAP
  • Construct: librería para parsear y construir estructuras de datos (binario o texto).
  • fuzzer.py (feliam): fuzzer sencillo de Felipe Andres Manzano
  • Fusil: librería en Python usada para escribir programas de fuzzing

WEB

  • Requests: librería HTTP sencilla y elegante, hecha para seres humanos
  • HTTPie: cliente http similar a cURL pero más intuitivo.
  • ProxMon: procesa logs de proxy y crea informes con los resultados
  • WSMap: encuentra servicios web y descubre ficheros
  • Twill: navega por Internet mediante un interface en línea de comandos. Soporta web testing automatizado
  • Ghost.py: cliente webkit escrito en Python
  • Windmill: herramienta de pruebas creada para automatizar y depurar aplicaciones web
  • FunkLoad: medidor de carga web funcional
  • spynner: módulo de navegación web programable para Python con soporte Javascript/AJAX
  • python-spidermonkey: binding para el motor JavaScript de Mozilla SpiderMonkey; permite llamar y evaluar scripts y funciones Javascript
  • mitmproxy: proxy HTTP de interceptación con soporte SSL. Permite inspeccionar y editar tráfico al vuelo.
  • pathod / pathoc: demonio/cliente para saturar clientes y servidores HTTP

Forensics

  • Volatility: extrae y analiza artefactos digitales de la memoria volátil (RAM)
  • Rekall: Framework de análisis de memoria desarrollado por Google
  • LibForensics: librería para desarrollar aplicaciones forenses digitales
  • TrIDLib: identifica los tipos de archivo de sus firmas binarias. Ahora incluye Python binding
  • aft: Android forensic toolkit

Malware Analysis

  • pyew: editor hexadecimal y desensamblador en línea de comandos, principalmente usado para analizar malware
  • Exefilter: filtra formatos de archivo en mensajes de correo electrónico, páginas web o archivos. Detecta muchos formatos de archivo comunes y puede eliminar contenido.
  • pyClamAV: añade capacidades de detección de virus para tu software Python
  • jsunpack-n: unpacker de JavaScript genérico: emula la funcionalidad del navegador para detectar exploits dirigidos a explotar vulnerabilidades en navegadores y plugins
  • yara-python: identifica y clasifica muestras de malware
  • phoneyc: implementación de honeyclient totalmente escrito en python
  • CapTipper: analiza, explora y reactiva trafico HTTP malicioso desde un archivo PCAP

PDF

  • peepdf: Herramienta de Python para analizar y explorar los archivos PDF para saber si pueden ser dañinos
  • Didier Stevens’ PDF tools: analiza, identifica y crea ficheros PDF (incluye PDFiD, pdf-parser, make-pdf y mPDF)
  • Opaf: Open Framework Analysis PDF . Convierte PDF a un árbol XML que puede ser analizado y modificado.
  • Origapy: wrapper de Python para el módulo de Ruby Origami que desinfecta archivos PDF
  • pyPDF2: Python PDF toolkit, extrae info, corta, une, cifra, descifra…
  • PDFMiner: extrae texto de ficheros PDF
  • python-poppler-qt4: une Python con la librería Poppler PDF, incluyendo soporte Qt4

MISC

  • InlineEgg: toolbox de clases para escribir pequeños programas en Python
  • Exomind: para la creación de gráficos y el desarrollo de módulos de inteligencia de código abierto, centrada en servicios de redes sociales, motores de búsqueda y mensajería instantánea
  • RevHosts: enumera los virtual hosts de una dirección IP dada
  • simplejson: JSON encoder/decoder, para por ej. usar Google’s AJAX API
  • PyMangle: herramienta de línea de comandos y una biblioteca de Python utilizada para crear listas de palabras para su uso con otras herramientas de pruebas de intrusión
  • Hachoir: permite ver y editar un stream binario campo por campo
  • py-mangle: Herramienta de linea de comandos y biblioteca de Python que se utiliza para crear listas de palabras para su uso con otras herramientas de pentesting

En el link también van a encontrar otras herramientas y scripts desarrolladas en Python como así también mucha documentación acorde.

Python tools for penetration testers

.

Ejecutando nmap con Python

nmapNmap es probablemente una de las herramientas más conocidas y utilizadas en el mundo del pentesting y no es para menos, ya que se trata de un escaner que no solamente permite encontrar puertos abiertos en un máquina o segmento de red, sino que también permite ejecutar scripts NSE (Nmap Scripting Engine) para filtrar información o detectar vulnerabilidades sobre el objetivo.

Algunas de las características avanzadas que incluye Nmap y que son igualmente útiles para pentesters, administradores de sistemas y atacantes, se listan a continuación:

  • Implementación de técnicas de evasión de IDS/IPS y Firewalls
  • Permite ejecutar varias técnicas de escaneo, entre las que se incluyen escaneos del tipo XMAS, Null, Fin, Stealth, entre muchos otros.
  • Permite la fragmentación de paquetes a la hora de realizar el escaneo. La finalidad de esta técnica es la de dificultar la identificación del escaneo por parte de mecanismos como IDS o IPS
  • Generación aleatoria de hosts y señuelos como origen de los paquetes
  • Ejecución de scripts NSE, así como la posibilidad de crear scripts personalizados utilizando lenguaje LUA.
  • Capacidad de ejecutar “Idle scans” que permiten utilizar un host cuyo manejo del numero de secuencia de los paquetes IP es predecible. (ver: TCP Idle Scan)
  • Capacidad de controlar la frecuencia en la que se envían los paquetes de datos al sistema objetivo. De esta forma es posible controlar cada cuanto se envían paquetes para la detección del estado de un puerto.

Estas son tan solo algunas de las características que convierten a Nmap en una herramienta que se debe de encontrar en el arsenal de cualquier pentester. Sin embargo, en ocasiones es muy útil poder automatizar su uso por medio de scripts o rutinas externas. En el caso de Python, es posible hacerlo como con cualquier otro ejecutable, se puede crear un proceso utilizando la utilidad subprocess de Python y ejecutar Nmap con los argumentos adecuados. No obstante, hacerlo de esta forma puede resultar ineficiente, ya que seria necesario parsear los contenidos del canal estándar de salida (stdout) para que la información retornada por Nmap pueda ser útil desde un script. Una solución mucho más adecuada para este propósito y desde luego mucho más elegante, es utilizando una librería que se encargue de estos detalles y devuelva una estructura de datos consistente con los resultados devueltos por Nmap. Una de las mejores alternativas es python-nmap.

Utilizando Python-nmap

Python-nmap es una librería que se encuentra en desarrollo continuo y que a la fecha de escribir este documento, soporta todas las características disponibles en la ultima versión de Nmap. Existen dos versiones que permiten operar con Python 3.x y Python 2.x, lo cual es importante tenerlo en cuenta a la hora de instalar dicha librería. Por otro lado, con esta librería es posible ejecutar escaneos de forma síncrona o asíncrona. Un escaneo síncrono, consiste simplemente en que python-nmap bloqueará el hilo de ejecución principal hasta que el escaneo finalice su ejecución. Un escaneo asíncrono ejecuta el escaneo Nmap en un nuevo hilo de ejecución y permite que el hilo principal siga ejecutándose. En un escaneo asíncrono, se permite la definición de una función de callback que será invocada de forma automática cuando se obtenga un resultado sobre alguno de los puertos analizados.

Para instalar la librería, se sigue el mismo procedimiento que muchas de las librerías disponibles para Python, consiste simplemente en ejecutar el script setup.py con el argumento install el cual se encuentra ubicado en el directorio raíz del paquete descargado.

El uso básico de la librería es por medio de la clase PortScanner. Dicha clase implementa todas las funciones necesarias para ejecutar un escaneo y recuperar la información retornada por Nmap.

Desde el interprete de Python, se ha creado un objeto del tipo PortScanner y luego se ha ejecutado un escaneo contra la máquina local en los puertos 22, 25, 80 y 443. Las funciones scaninfo, command_line y all_host devuelven información general sobre el escaneo ejecutado, el comando Nmap ejecutado y todos los hosts que han sido analizados en el escaneo.

Como se puede apreciar, es posible recorrer el diccionario que contiene los resultados utilizando como claves, el host analizado, el protocolo y el puerto analizado. Se trata de un diccionario anidado y como tal, puede ser recorrido utilizando instrucciones y funciones estándar del lenguaje.
Por otro lado, se trata de una librería que permite ejecutar Nmap de forma personalizada, del mismo modo que lo haría un pentester o administrador de sistemas desde linea de comandos, especificando los argumentos necesarios para la ejecución del escaneo.

Con el parámetro “arguments” es posible especificar las opciones que recibirá Nmap para ejecutar el escaneo contra los objetivos definidos. Con esto, es posible controlar mucho mejor el proceso de escaneo.

Finalmente, tal y como se comentaba anteriormente, es posible ejecutar un escaneo asíncrono utilizando python-nmap tal y como se detalla a continuación.

Para implementar un escaneo asíncrono, se debe utilizar la clase PortScannerAsync la cual es exactamente igual a la clase PortScanner con la diferencia de que incluye un argumento adicional que permite definir una función de callback y cuenta con algunas funciones adicionales para controlar el proceso de escaneo en el caso de ser necesario.

Python-nmap es una muy buena solución que permite implementar las funcionalidades completas de Nmap desde cualquier script en python. Se trata desde luego, de una utilidad que viene muy bien a cualquier proyecto relacionado con la seguridad informática o para el uso de un pentester profesional.

Pentesting: Fingerprinting para detectar SO

OS Fingerprinting es el proceso de recopilación de información que permite identificar el sistema operativo en el ordenador que se tiene por objetivo. El OS Fingerprinting activo se basa en el hecho de que cada sistema operativo responde de forma diferente a una gran variedad de paquetes malformados. De esta manera, utilizando herramientas que permitan comparar las respuestas con una base de datos con referencias conocidas, es posible identificar cuál es el sistema operativo. Nmap es una herramienta ampliamente utilizada para llevar acabo OS Fingerprinting activo.

A diferencia del activo, el OS Fingerprinting pasivo no se realiza directamente sobre el sistema operativo objetivo. Este método consiste en el análisis de los paquetes que envía el propio sistema objetivo a través de técnicas de sniffing. De esta forma, es posible comparar esos paquetes con una base de datos donde se tenga referencias de los distintos paquetes de los diferentes sistemas operativos y, por lo tanto, es posible identificarlos.

Tanto el OS Fingerprinting activo como el pasivo poseen diferentes cosas a favor y en contra. En el caso del activo, es mucho más directo y confiable, ya que la interacción se realiza directamente sobre el sistema operativo objetivo. Sin embargo este tipo de interacción origina tráfico de red sobre el objetivo, por lo que es posible que se generen sospechas. Caso contrario, el OS Fingerprinting pasivo es más silencioso en el sentido que no genera tráfico de red, sino que solo intercepta aquellos paquetes en la red del sistema objetivo. Sin embargo, este método puede ser más complejo a la hora de obtener un conjunto de paquetes que permitan realizar la distinción del sistema operativo con certeza.

A modo de ejemplo, se puede utilizar Nmap para realizar un OS Fingerprinting activo utilizando la la opción “–O” que permite habilitar la detección del sistema operativo. En la siguiente imagen puede visualizarse la detección:

Captura de pantalla de 2014-10-22 23-00-05

En el caso de OS Fingerprinting pasivo, se utilizó la herramienta P0f, la cual permite identificar el sistema operativo de los equipos de la red donde se está realizando el sniffing. Analizando el tráfico generado por el sistema objetivo y a partir de comparaciones, es posible determinar, en el mejor de los casos, la versión exacta del sistema operativo o la familia a la que pertenece. En la siguiente captura puede visualizarse que tipo de sistema operativo detectó a partir del propio tráfico generado por el sistema objetivo:

Captura de pantalla de 2014-10-22 23-04-49

Captura de pantalla de 2014-10-22 23-05-41

Para poder lograr este tipo de información, se debe envenenar la red para lograr interceptar todo el tráfico y así poder analizar los paquetes enviados desde el sistema objetivo.

Desde el punto de vista de un pentester (persona que realiza el Penetration Test), el método de OS Fingerprinting pasivo es una buena técnica para obtener información relevante sin atentar contra el sigilo en el análisis. La mayor ventaja que tiene este método es que es posible utilizarlo a pesar de que los sistemas objetivos cuenten con Firewalls, sistemas IDS/IPS u otros sistemas de protección de red. Asimismo, el OS Fingerprinting pasivo no dejará rastros en los logs del sistema objetivo. Sin embargo en la mayoría de los casos el OS Fingerprinting activo será más preciso a la hora de identificar el sistema operativo debido a que es un método más invasivo y directo.

Ethical Hacking: Informe de Resultados

aa_informeHoy día, tenemos disponible gran cantidad de material sobre temas relacionados con Ethical Hacking: cursos, libros, webs especializadas, etc. Todos explican que las fases de un pentest comienzan con information gathering, y terminan con la post-explotación y el borrado de evidencias, básicamente. Sin embargo, la mayoría de publicaciones que enseñan a hacer pentest, fallan en una parte muy importante: la elaboración del informe de resultados.

Está claro: es la parte que mas nos aburre. Es mucho más entretenido trabajar con Metasploit, una Shell, Scritps que con un procesador de textos, ¿verdad? 😉 Es vital tener bien claro que el informe es, en última instancia, es el producto que se le entrega al cliente. Si no somos capaces de plasmar y reflejar en texto el trabajo realizado, por muy bueno que sea el proceso seguido y el resultado obtenido, con un informe mediocre el esfuerzo habrá sido en vano. Esto lo aprendí cuando leí el libro “Ethical Hacking: Un enfoque metodológico para Profesionales“, escrito entre otros por Ezequiel Sallis y Claudio Caracciolo. Por eso me voy a tomar el atrevimiento de darles algunos consejos muy útiles para confeccionar un informe de calidad.

Para explicar el informe de resultados, antes hay que tener en cuenta un documento previo: el plan de pruebas. Este documento, que debe estar aprobado por el cliente, es la autorización para poder auditar lícitamente un recurso que no es tuyo. En él se describe básicamente qué se va a hacer, y hasta donde se va a llegar. Sin este documento firmado por el cliente, podríamos meternos en un gran problema, recuerden que ingresar sin permiso a un sistema es ilegal y esta penado por la ley. Incluye:

  • Ámbito de las pruebas. Qué se audita y qué se queda fuera.
  • Rangos de IP, tanto del cliente como de los auditores.
  • Planificación temporal, días y horas en las que tendrá lugar.
  • Personas de contacto. A quién llamar en caso de que algo caiga.
  • Tipos de pruebas, si se está autorizado a lanzar ataques DoS o de ingeniería social.
  • Propósito del analisis: para qué se va a hacer, qué se quiere conseguir.

Una vez aprobado el plan de pruebas, ya tenemos luz verde para empezar con el pentest. ¡Happy Hack & Have Fun!

Ok!. Ya está todo probado. Tenemos las notas que tomamos, capturas de pantalla, logs, y demás evidencias de las vulnerabilidades encontradas. Ahora, como ya hemos comentado, toca la parte de transformar toda esta información en un documento y que el cliente conozca todo lo que has descubierto.

En primer lugar, hay que preguntarse: ¿A quién va dirigido este informe? ¿Personal técnico? ¿Directivo? ¿Ambos? Por regla general, los informes de resultados van a ser leídos por varios departamentos, con perfiles muy diferentes. Por ello será necesario redactar una parte, con un resumen ejecutivo, sin entrar en detalles y otra parte con un análisis de las vulnerabilidades.

En el resumen ejecutivo, se enumerarán las vulnerabilidades encontradas. Según su criticidad, se pueden usar colores, puntuaciones, gráficos, etc, cuanto más visual, más claro quedará. Recuerden que el resumen ejecutivo debe redactarse en un lenguaje lo menos técnico posible. Se deben incluir también las recomendaciones generales para mitigar las vulnerabilidades, sin extenderse en detalles, y finalmente las conclusiones. Esta parte está relacionada con el plan de pruebas y el propósito del pentest. Respondería a preguntas como ¿puede salir la aplicación web a producción? ¿Es la red de mi empresa razonablemente segura?.

La otra parte del informe es el análisis de las vulnerabilidades. Aquí es donde se debe describir con todo lujo de detalles cuales han sido las pruebas realizadas, qué ha conseguido explotarse, adjuntar capturas de pantalla que lo demuestren, y una valoración del impacto, probabilidad de ocurrencia, y riesgo asociado a cada vulnerabilidad. Por último, unas recomendaciones sobre cómo mitigar la vulnerabilidad, sin escatimar en referencias.

Finalmente, también puede ser recomendable incluir un apéndice, con información ampliada que no sea esencial para describir las vulnerabilidades descubiertas, como resultados de herramientas, logs, etc y un glosario de términos, para aquellos acrónimos o términos técnicos relevantes.

Una vez terminado el informe, hay que recordar que la información contenida en dicho documento es muy sensible. El documento debe advertir claramente que su contenido tiene carácter confidencial. Por una parte, debe enviarse al cliente por una vía segura y cifrada, y por otra parte, es nuestra responsabilidad almacenar el informe con los permisos únicamente de los implicados en el proyecto.

Espero que hayan sido de utilidad estos consejos. Información ampliada e informes de ejemplo pueden encontrarse en los siguientes enlaces (en inglés):

Ejemplo informe de pentest Offensive Security [PDF]
SANS Reading Room, Writing a Penetration Testing Report [PDF]
Writing penetration testing resports
The penetration testing report