Estándar para la Ejecución de Pruebas de Penetración

Body

El Estándar para la Ejecución de Pruebas de Penetración (Penetration Testing Execution Standard) está constituida de siete secciones principales. Estas abarcan todo lo relacionado a las pruebas de penetración; desde las comunicaciones iniciales y razones detrás de la prueba de penetración, pasando por las fases sobre captura de inteligencia y modelamiento de amenazas, donde los profesionales trabajan para obtener una mejor comprensión de la organización a evaluar. Siguiendo con la investigación sobre vulnerabilidades, explotación y explotación posterior, donde la experiencia técnica en seguridad de los profesionales entra en juego y se combina con el negocio para comprender la evaluación. Finalizando con el reporte, en el cual se captura el proceso completo, de una manera la cual tenga sentido para el cliente y le proporcione lo más valioso.

La versión actual al momento de redactar la presente publicación puede ser considerada como la versión 1.0, pues los elementos fundamentales del estándar están solidificados, y han sido probados por muchos años a través de la industria. Una versión 2 está pronto en trabajo, y proporcionará un trabajo más granular en terminos de “niveles”, como en niveles de intensidad en el cual cada uno de los elementos de una prueba de penetración puede ser realizada. Dado el hecho de ninguna prueba de penetración ser como otra, y las pruebas van desde las más mundanas pruebas a aplicaciones web o red, hasta una evaluación completa de “red team”, estos niveles permitirán a una organización definir cuanta sofisticación se espera el adversario exhiba, y permita al profesional intensificar aquellas áreas donde la organización lo necesita más. Algunos de los trabajos iniciales sobre “niveles” pueden ser encontradas en la sección sobre captura de inteligencia.

A continuación se detallan las secciones principales definidas por el estándar como las bases para la ejecución de una prueba de penetración.

  • Interacciones previas al contrato
  • Captura de inteligencia
  • Modelar amenazas
  • Análisis de vulnerabilidades
  • Explotación
  • Explotación posterior
  • Reportar

Como el estándar no proporciona ninguna directriz técnica sobre como ejecutar una prueba de penetración, también se ha creado una guía técnica para acompañar el estándar.

Fuentes:

http://www.pentest-standard.org/index.php/Main_Page
http://www.pentest-standard.org/index.php/PTES_Technical_Guidelines

PeruHack 2016 NOT

Body

El día Jueves 23 de Noviembre del 2016 estaré impartiendo un taller en la ciudad de Lima, Perú sobre "Forense Digital Ofensivo", el cual se dictará desde las 8:30am hasta las 12:30pm con una duración total de cuatro horas, en las instalaciones de la Universidad Inca Garcilaso de la Vega. Esto con motivo de realizarse PERUHACK2016NOT.

PERUHACK2016NOT contará con la participación de hackers peruanos reconocidos a nivel nacional e internacional, quienes desarrollan el 100% de sus actividades profesionales evaluando la seguridad de organizaciones locales y extranjeras : Jorge Cordova, Henry Sánchez, Juan Oliva, Alonso Caballero, Samuel Ascona, Oscar Martínez, Alfredo García, Alexis Torres, Patricia Pantigoso y William Marchand.

La novedad para esta nueva edición es el de empezar a FORMAR (entrenar) hackers. Es por ello la edición de este año consiste en 12 talleres 100% prácticos (hands-on) donde los participantes aprenderán a aplicar las técnicas de hacking y ataque utilizados en los ataques informáticos de hoy en día.

Los talleres a desarrollarse son los siguientes:

  • Forense Digital Ofensivo
  • Metasploit scripting for Ethical Hacking
  • Pivoteando el Pentesting en el Mundo REAL
  • Mi primera prueba de penetracion (PenTesting) con Metasploit
  • Introducción al análisis de aplicaciones Web
  • Ganando Privilegios con Active Directory
  • Docker para pentesters
  • The Power of PowerShell
  • Tunelizacion : Ahora me ves, ahora no me ves y yo estoy en toda tu red
  • Ataques a Aplicaciones Moviles 101
  • Pentesting 101
  • OSINT 101 (Open Source Intelligence)

Fuentes:

https://www.peruhack.org/
https://www.facebook.com/peruhackcon/
http://www.americasistemas.com.pe/peruhack2016not/

Categorías de Vulnerabilidades en Redes Inalámbricas

Body

Muchas organizaciones tienen desplegadas infraestructuras LAN inalámbricas, debido al hecho de ser un medio flexible para ofrecer a sus empleados acceso hacia la red. Sin embargo, muchas LAN inalámbricas han sido desplegadas sin cuidado, sin los mecanismos adecuados de seguridad para prevenir los atacantes obtengan tráfico sensible o irrumpan sobre la red mediante lo inalámbrico.

Debido a la amenaza de atacantes inalámbricos infiltrándose en la red o el robo de datos, los hackers éticos y profesionales en pruebas de penetración son algunas veces contratados para evaluar la seguridad de infraestructuras LAN inalámbricas.

Las infraestructuras inalámbricas puede ser atacadas de diversas maneras, y los hackers étios y profesionales en pruebas de penetración son frecuentemente requeridos para realizar uno o más de estos vectores de ataque durante un proyecto de pruebas de penetración. Algunos de los vectores más significativos para atacar lo inalámbrico incluyen.

  • Negación de servicio: Bloquear usuarios legítimos sobre una LAN inalámbrica es trivialmente fácil, incluso si la red se construyó cuidadosamente.
  • Puntos de acceso subrepticio: Los empleados algunas veces configuran puntos de acceso no autorizados en un entorno empresarial para evadir la infraestructura inalámbrica legítima, o para ganar acceso inalámbrico cuando tal infraestructura no es proporcionada por la empresa. Los hackers éticos y profesionales en pruebas de penetración son frecuentemente requeridos para barrer la infraestructura física de una organización y de esta manera encontrar estos puntos de acceso no autorizados.
  • Ausencia o una configuración inadecuada para puntos de acceso inalámbrico: Si los puntos de acceso no son configurados apropiadamente, para los atacantes puede ser mucho más fácil emplear cualquiera de los otros vectores de ataque.
  • Captura o interceptación de tráfico: En una LAN inalámbrica, el atacante obtiene acceso hacia las comunicaciones en la capa de enlace de datos (capa 2), cuando se esté en la proximidad física del dispositivo. Para meramente capturar paquetes, la proximidad para una LAN inalámbrica podría ser de un kilómetro o más. Numerosas herramientas para hacer “sniffing” inalámbrico puede ser utilizadas en tales ataques.
  • Ataques contra la criptografía: Algunos protocolos de encriptación inalámbrico sufren de debilidades de seguridad significativas como el protocolo WEP (Wired Equivalent Privacy). Los atacantes pueden obtener tráfico WEP, y explotando fallas sobre la manera en la cual se intercambian los vectores de inicialización criptográfico, pueden romper las llaves para ganar acceso hacia los datos y la red.
  • Embaucar al cliente: Algunas pruebas requieren configurar un punto de acceso engañoso para ver si los clientes confían en éste y lo utilizan para acceder hacia el resto de la red. Un atacante puede luego situarse en el medio de todas las comunicaciones, cosechando o cambiando los datos conforme transitan.

De hecho existen otros vectores de ataque inalámbrico, pero esta la lista expone las principales.

Fuentes:

http://www.ieee802.org/11/
https://en.wikipedia.org/wiki/IEEE_802.11
http://www.pcworld.com/article/2048052/6-mistakes-to-avoid-when-setting…

Volcar los Hashes de las Contraseñas Locales utilizando pwdump

Body

creddump es una herramienta desarrollada en python para extraer diversas credenciales y secretos desde los archivos colmena “hives” del registro de Windows. Actualmente extrae; Hashes LM y NT (Protegidos con SYSKEY), contraseñas en “cache” del dominio y secretos LSA (Local Security Authority).

Esencialmente realiza todas las funciones hechas por bkhive/samump2, cachedump y lsadump2, pero de una manera independiente de la plataforma.

Es también la primera herramienta la cual hace todas estas cosas de manera “offline” (como actualmente Cain & Abel lo hace, pero no es open source y únicamente es para Windows).

Para la siguiente demostración previamente se ha extraído los archivos colmena del registro de Windows de nombre “SYSTEM” y “SAM”.

Se ejecuta la herramienta “pwdump” sin argumentos para muestre sus opciones de uso.

# pwdump

La forma de utilizar la herramienta “pwdump” es simple. Se deben definir las rutas hacia los archivos colmena SYSTEM y SAM. Luego de lo cual se volcarán los hashes de las contraseñas.

# pwdump /tmp/SYSTEM /tmp/SAM

Obtenidos los hashes de las contraseñas, es factible utilizar herramientas con John The Ripper o hashcat para intentar obtener las contraseñas en texto plano.

Fuentes:

https://code.google.com/archive/p/creddump/
https://github.com/moyix/creddump
http://www.openwall.com/john/
https://hashcat.net/hashcat/

Evaluar un Retransmisor Abierto de Correo Electrónico utilizando iSMTP

Body

iSMTP es una herramienta para realizar la enumeración de usuarios mediante los comandos "RCPT TO" y "VRFY". Además permite evaluar “spoofing” interno y retransmisores SMTP abiertos (open relays).

Un retransmisor (relay) abierto de correo electrónico es un servidor SMTP configurado de tal manera permite a cualquiera sobre Internet enviar un mensaje de correo electrónico a través de si mismo, y no sólo correo electrónico destinado para u originándose desde usuarios conocidos. Estos servidores se volvieron impopulares debido a su explotación por spammers y gusanos.

Se ejecuta la herramienta iSMTP sin parámetros para conocer sus opciones de uso.

# ismtp

Se procede a ejecutar el comando pertinente para realizar la evaluación de un retransmisor SMTP. La opción “-i” define una dirección de correo electrónico para realizar la prueba. La opción “-x” habilita la prueba de retransmisor externo SMTP.

# ismtp -i user@ metasploitable.localdomain -x -h 192.168.0.58

Existen algunos servicios gratuitos en-línea los cuales permiten verificar si un servidor de correo electrónico es un retransmisor abierto de correo.

Adicionalmente algunos servidores de correo electrónico simulan aceptar correo electrónico direccionado incorrectamente, pero luego descartan estos mensajes sin reenviarlos. Esta técnica es utilizada para prevenir ataques de recolección o cosecha, donde un atacante intentará enviar hacia miles de direcciones de correo electrónico de un dominio tratando de averiguar alguno real. Entonces cuando el servidor responda con un mensaje de error (5xx), se conoce no es una dirección de correo electrónico real. Y cuando el servidor acepta el mensaje (2xx), se conoce es una dirección de correo electrónico real.

# nc -n -vv 192.168.0.58 25
EHLO metasploitable.localdomain
VRFY papasfritas
VRFY root

Fuentes:

https://github.com/altjx/ipwn/
http://git.kali.org/gitweb/?p=packages/ismtp.git;a=summary
https://tools.ietf.org/html/rfc821

Explotar una Inyección XPath en XVWA

Body

Similar a una inyección SQL, un ataque de inyección XPath ocurre cuando un sitio web utiliza información proporcionada por el usuario para construir una consulta XPath por datos XML. Enviando información intencionalmente deformada hacia el sitio web, un atacante puede encontrar como se estructuran los datos XML, o acceder hacia datos los cuales normalmente no debería acceder. El atacante puede incluso ser capaz de elevar sus privilegios en el sitio web, si los datos XML están siendo utilizados para la autenticación (como un archivo de usuario basado en XML).

La consulta XML se realiza con un XPath, un tipo de sentencia sencilla descriptiva, la cual permite a la consulta XML localizar una pieza de información. Como en SQL, se puede especificar ciertos atributos a encontrar y patrones a coincidir. Cuando se utiliza XML para un sitio web, es común aceptar alguna forma de entrada sobre la cadena de consulta para identificar el contenido a localizar y mostrar sobre la página. Esta entrada debe ser sanitizada para verificar no se pierda tiempo en la consulta XPath y devuelvan datos incorrectos.

XPath es un lenguaje estándar ; su notación/sintáxis es siempre independiente de la implementación, lo cual significa el ataque puede ser automático. No hay diferentes dialectos como si ocurre en peticiones hacia las bases de datos SQL.

Debido a la no existencia de control para el nivel de acceso, es posible obtener el documento completo. No se deberían encontrar limitaciones como los encontrados en los ataques de inyección SQL.

Para la siguiente demostración se utiliza la versión de XVWA más reciente disponible al momento de realizar la presente publicación.

Ingresar a XVWA.

En el panel derecho hacer clic en la opción “XPATH Injection”.

En el recuadro donde se solicita ingresar el café a buscar “Search Your Cofee”, ingresar el texto “americano para luego hacer clic en el botón “Search” o Buscar.

Si la aplicación no filtra adecuadamente las entradas del usuario será factible inyectar código Xpath, e interferir con el resultado de la consulta. Ingresar en el recuadro de búsqueda lo siguiente.

americano' or '1

Al revisar el código fuente de la aplicación web, es factible conocer como se construye la consulta en base a los datos ingresados por el usuario.

$query = "/Coffees/Coffee[@ID='".$input."']";

Cuando se realiza la inyección XPath, se cambia la semántica original de la consulta, de tal manera siempre es verdadero, lo cual devuelve todo el contenido del documento XML. Es decir todos los cafés.

$query = "/Coffees/Coffee[@ID='americano' or '1']";

Fuentes:

https://www.owasp.org/index.php/XPATH_Injection
https://github.com/s4n7h0/xvwa
https://www.owasp.org/index.php/Testing_for_XPath_Injection_(OTG-INPVAL…
https://www.w3.org/TR/xpath/
https://github.com/s4n7h0/xvwa/blob/master/vulnerabilities/xpath/home.p…

Buscar Texto en el Espacio No Asignado y Espacio de Holgura o Residual

Body

El realizar un análisis forense sobre una imagen montada permite verificar todos los archivos y directorios; es decir permite realizar una visualización lógica. Pero, ¿Y el espacio no asignado y el espacio de holgura o residual?; es decir la visualización física. Por esta razón se procede a analizar la imagen forense por si misma, pues la copia bit a bit contiene los datos en las áreas no asignadas del disco.

Para la siguiente demostración se asume; el disco ha sido capturado de un empleado trabajando para una corporación. Él podría haber enviado una carta hacia la corporación para esparcir un virus en su red. El sospechoso niega el haber enviado esta carta. Se trata entonces de una simple acción para encontrar texto desde un archivo borrado; es decir el espacio no asignado.

Primero, se crea un archivo de nombre “/tmp/palabrasclave.txt”, donde se incluyen las palabras claves a buscar en toda la imagen forense. Para nuestro ejemplo; se utilizan las palabras “ransom”, “$50,000” (la cantidad del rescate), y “unleash a virus”. Esta son algunas de las palabras clave y frases decididas a utilizar desde la carta original recibida por la corporación.

$ nano /tmp/palabrasclave.txt
$ cat /tmp/palabrasclave.txt

Es importante mencionar, el archivo no debe contener líneas en blanco al final del mismo.

Ahora se utiliza el comando “grep” para buscar en la imagen por cualquier instancia de una expresión o patrón. Se utilizan diversas opciones para hacer la salida del comando “grep” más útil.

La opción “-a” procesa la imagen forense como si fuese un archivo de texto, pues es un archivo binario. La opción “-b” proporciona un desplazamiento en bytes de cada coincidencia encontrada, de tal manera luego se pueda utilizar este dato con el comando “xxd”. La opción “-i” ignora mayúsculas y minúsculas en la búsqueda. La opción “-f” especifica utilizar patrones incluidos en un archivo. (/tmp/palabrasclave.txt).

$ grep -a -b -i -f /tmp/palabrasclave.txt practical.floppy.dd

El resultado del anterior comando puede ser redireccionado hacia un archivo, donde residirán todas las coincidencias encontradas.

En frente de cada línea está un número, representando el desplazamiento en bytes de la coincidencia encontrada en la imagen forense.

Es factible entonces utilizar el comando “xxd” para mostrar lo datos encontrados en cada desplazamiento de bytes. Esto proporcionará interesantes resultados. La opción “-s” define el inicio de la visualización en el byte indicado. Y la opción “-l” define detener la escritura en los octetos indicados.

$ xxd -s 75441 -l 550 practical.floppy.d

Se debe anotar sin embargo, la utilización del comando “grep” de esta manera puede ser algo limitado. Existen algunos conjuntos de caracteres en versiones comunes de “grep” los cuales no son soportados. Podrían por lo tanto también existir falsos negativos en la búsqueda, pues algunas cadenas o palabras claves podrían residir en la imagen forense en una forma la cual no es reconocida por el comando “grep” o “strings”. Por lo cual se recomienda utilizar otras herramientas más especializadas.

Fuentes:

http://linux.die.net/man/1/grep
http://linux.die.net/man/1/xxd
http://linuxleo.com/

Visualizar Archivos para Propósitos Forenses en la Terminal de Linux

Body

Para visualizar archivos de texto y archivos de datos durante un análisis forense utilizando Linux, se podría utilizar los comandos “cat”, “more”, o “less”. El comando “cat” concatena archivos y los imprime sobre la salida estándar. El comando “more” es un filtro para la paginación a través de texto sobre la pantalla; es un comando primitivo y se sugiere utilizar el comando “less”. El comando “less” es un programa similar a “more”, pero permite movimiento hacia atrás y hacia adelante sobre el archivo. “Less” se puede ejecutar sobre una diversidad de terminales, siendo sus comandos basados en “more” o “vi”.

$ cat loveletter.virus

Se debe ser consciente en caso la salida no sea un texto estándar se podría corromper la terminal; para arreglar esto en caso ocurriese; se puede escribir los comandos “reset” o “stty sane”. Por lo tanto es mejor ejecutar estos comandos en una ventana terminal en el entorno X, de tal manera se pueda simplemente cerrar la ventana corrompida e iniciar otra.

$ cat snoof.gz

El utilizar el comando “file” puede proporcionar una buena idea sobre cuales archivos pueden ser visualizados y cuales programas podrían ser mejor utilizados para visualizar los contenidos de un archivo. Por ejemplo, documentos Microsoft Office pueden ser abiertos en Linux utilizando programas como LibreOffice.

Una mejor alternativa para visualizar archivos desconocidos podría ser utilizar el comando “strings”. Este comando puede ser utilizado para interpretar texto ASCII regular desde cualquier archivo. Esto es bueno para documentos formateados, archivos de datos (Excel, etc), e incluso archivos binarios; por ejemplo ejecutables no identificados; los cuales podrían tener cadenas de texto interesantes ocultos en ellos. Se sugiere además canalizar la salida a través del comando “less”.

$ strings ARP.EXE | less

Si se está utilizando el sistema X window , se puede utilizar cualquiera de las herramientas gráficas estándar en Linux, para visualizar los archivos gráficos en los directorios.

Finalizado el análisis se debe desmontar la imagen forense. Asegurándose de no estar en el punto de montaje al intentar desmontarlo, o se obtendrá un mensaje de error.

Fuentes:

http://linux.die.net/man/1/cat
http://linux.die.net/man/1/less
http://linux.die.net/man/1/more
http://linux.die.net/man/1/strings
http://linux.die.net/man/1/file
http://linuxleo.com/

Hacer un Listado por Tipos de Archivos residentes en un Sistema de Archivos

Body

Cuando se está buscando por algún tipo de archivo en particular durante un análisis forenses, existe la probabilidad del nombre del archivo haya sido cambiado o la extensión sea errónea. Para tratar de solucionar esto es factible utilizar el comando “file”. El comando “file” evalúa cada uno de los argumentos definido para intentar clasificarlos. Se realizan tres conjuntos de pruebas; pruebas del sistema de archivos, pruebas “mágicas” y pruebas de lenguaje. La primera prueba exitosa causará la impresión del tipo de archivo.

Para la siguiente demostración se utilizará la imagen forense obtenida desde un disco flexible, la cual ha sido previamente montada.

Se ejecuta el comando “file” contra uno de los archivos para conocer su contenido.

$ file Docs/Law.doc

Si existe un gran número de archivos sin extensiones o las extensiones han sido cambiadas, se puede ejecutar el comando “file” sobre todos los archivos residentes en el dispositivo de almacenamiento (o directorio). Se debe recordar utilizar el comando “-exec” con sha1sum.

$ find . -type f -exec file {} \; > /tmp/listatipo.txt

Luego el comando “grep” puede ser utilizado para buscar una “cadena” dentro del archivo conteniendo los resultados.

$ grep image /tmp/listatipo.txt

De los resultados se puede resaltar la extensión inadecuada para el archivo de nombre “ouchy.dat”, pero aún así es identificado como una imagen JPEG. También anotar, algunas imágenes no se muestran en los resultados del comando “grep”, pues sus descripciones no contienen la palabra “image”. Existen además dos imágenes de mapas de bit Windows con extensiones “.jpg”, las cuales no se muestran en el listado de “grep”. Para solucionar esto se podría crear un archivo “mágico” o “etiquetar” el archivo original. Se etiqueta el archivo mágico original, editándolo para contener el identificador utilizado luego con el comando grep.

Fuentes:

http://linux.die.net/man/1/file
http://linux.die.net/man/1/grep
http://linux.die.net/man/1/find
http://linuxleo.com/

Hacer un Listado de Todos los Archivos Residentes en un Sistema de Archivos

Body

Durante un proceso de análisis forenses se tendrá el requerimiento de listar todos los archivos, sus propietarios y permisos sobre el sistema de archivos bajo análisis. El comando “ls” es muy importante para realizar este procedimiento. En la página del manual del comando “ls” se puede encontrar información detallada para conocer sus diversos usos y opciones.

Para la siguiente demostración se utilizará una imagen forense obtenida desde un disco flexible previamente montada.

Se puede utilizar la opción “-i” del comando “ls” para incluir el inodo (un número de serie del archivo) en el listado. La opción “-u” puede ser utilizado para ordenar la salida por tiempo de acceso cuando se utiliza al unísono de la opción “-t”. La opción “-R” permite realizar un listado recursivo. Y la opción “-a” mostrará en el lista los archivos con el simbolo punto“.” al inicio de sus nombres.

$ ls -l -a -i -R -t -u > /tmp/listado_acceso.txt

También se puede obtener un listado de los archivos uno por línea utilizando el comando “find”, para luego redireccionar la salida hacia otro archivo.

$ find . -type f > /tmp/listado.txt

Existe también el comando “tree”, el cual imprimirá un listado recursivo de manera más visual. Este identa las entradas por profundidad de directorios y colorea los nombres de archivos (si el terminal está correctamente definido).

$ tree

El comando “grep” puede ser utilizado sobre alguna de las listas ya generadas para buscar algo.

$ grep -i jpg /tmp/listado_acceso.txt

El anterior comando busca por el patrón “jpg” en un archivo de nombre “/tmp/listado_acceso.txt”, utilizando el nombre de la extensión para encontrar un archivo JPEG. La opción “-i” hace al comando “grep” insensible a mayúsculas.

Una vez se domine el comando “grep”, se pueden hacer búsquedas más profundas, como por ejemplo definir cadenas al inicio o final de una línea utilizando “^” o “$”. La página del manual del comando “grep” tiene una sección completa sobre estas “expresiones regulares”.

Fuentes:

http://linux.die.net/man/1/ls
http://linux.die.net/man/1/find
http://linux.die.net/man/1/grep
http://linux.die.net/man/1/tree
http://linuxleo.com/