Showing posts with label un. Show all posts
Showing posts with label un. Show all posts
Sunday, February 19, 2017
Magento Repair Tool Un XSPA a quitar de tu e Commerce
Magento Repair Tool Un XSPA a quitar de tu e Commerce
El framework Magento es uno de los entornos Open Source más populares dentro del mundo del e-Commerce. Está detrás de una gran cantidad de tiendas en Internet y es fácil toparse con él en una auditoría de seguridad web. En el pasado os había hablado de él cuando me topé con Magento Chek, una pequeña utilidad de comprobación del estado de configuración del framework que podría ser muy útil para hacer una pentesting a la tecnología web, y hoy os vengo a hablar de otro.
![]() |
| Figura 1: Magento Database Repair Tool. Un XSPA a quitar de tu e-Comerce |
En esta ocasión se trata de una herramienta especial para corregir un error en la instalación del servidor. En concreto se llama Magento Database Repair Tool, y es una utilidad para troubleshooting en caso de que la base de datos se quede corrupta por alguna de las situaciones explicadas en la documentación de dicha herramienta.
![]() |
| Figura 2: Cuándo usar Magento Database Repair Tootl |
Localizarla en Internet, como me apuntó mi amigo rootkit, no es nada complicado. Basta con usar un dork como éste que se ve en la imagen para que, con un poco de Hacking con Buscadores lleguemos a muchos servidores con ella instalada.
![]() |
| Figura 3: Dork para localizar Magento Database Repair Tool en Google. |
Una vez que tenemos esta herramienta, es fácil darse cuenta que puede ser utilizada para hacer ataques de XSPA (Cross-Site Port Attack), ya que con poner en la dirección del servidor con la base de datos corrupta la dirección IP y el puerto a escanear, tenemos los mensajes de error que necesitamos para diferenciar un puerto abierto o un puerto cerrado.
XSPA: Escaneado de puertos con Magento Database Repair Tool
Si el puerto está cerrado, el mensaje de error que obtenemos (después de esperar unos segundos) nos dirá se ha perdido la conexión con el servidor y que no se ha podido hacer nada.
![]() |
| Figura 4: Puerto cerrado. El mensaje informa de "Lost Connection" |
Por el contrario, si el puerto está abierto, el mensaje nos dirá que no se ha podido conectar a la base de datos MySQL que supuestamente debería estar allí.
![]() |
| Figura 5: Puerto abierto. El mensaje informa de "Can´t connect to MySQL" |
Por supuesto, si en ese puerto nos encontráramos con una base de datos MySQL, el mensaje de error volvería a cambiar a un Login Failed que nos indicaría que no tenemos credenciales adecuadas para conectarse con el servidor de bases de datos (y si las tenemos, aún mejor).
Escaneo de DMZ y fortificación de Magento
Con estos mensajes de error, es fácil automatizar un ataque de XSPA para escanear cualquier servidor de Internet o de la DMZ, tal y como se ve en este equipo en el que descubrimos una dirección IP interna con un puerto de Telnet abierto.
![]() |
| Figura 6: Servidor en la DMZ con puerto 23 abierto |
Al final, esta herramienta que se instala aparte, no debería estar dentro del path de publicación del sitio web en Internet, así que si la tienes, restringe el acceso a Magento Database Recovery Tool con una lista de control de acceso.
Figura 7: Configuración y uso de Latch en Magento Community
Para terminar, solo como recordatorio, acuérdate de quitar (o restringir su acceso) a Magento Check y añade para fortificar aún más tu entorno Latch a Magento que desde el año pasado está disponible una integración de Latch con Magento Community que tienes disponible.
Saludos Malignos!
Sigue Un informático en el lado del mal - Google+ RSS 0xWord

Available link for download
Sunday, February 12, 2017
Intentan envenenar agua de un planta depuradora en UK
Intentan envenenar agua de un planta depuradora en UK
Los ataques a los sistemas SCADA utilizados en el control industrial es algo que puede tener consecuencias graves si no se han hecho los deberes de seguridad adecuados. Los sistemas industriales utilizados en estos entornos están formados por una buena cantidad de componentes de distintos fabricantes, PLCs, protocolos especiales y sistemas que a veces pasan muchos años antes de ser cambiados - o tan siquiera actualizados -. Y por supuesto, tienen vulnerabilidades que aparecen en sistemas PLCs [PLCs exponen passwords, PLCs vulnerables a Brute-Force] en el equipamiento utilizado en la construcción del sistema y en el software que se haya desarrollado a medida para dicha plataforma.
![]() |
| Figura 1: Intentan envenenar el agua en una planta depuradora en UK |
Es un ecosistema complejo del que hay que preocuparse con cariño. Nuestro compañero en Eleven Paths Claudio Caracciolo (@holosec) conoce a la perfección estos entornos por su experiencia trabajando con ellos, y nos explicó en detalle cómo funciona en la charla que impartió dentro de las Eleven Paths Talks y que puedes ver online ya.
Figura 2: Comprendiendo la seguridad en sistemas industriales
Dicho esto, hoy quería centrarme en un caso explicado en el último informe Data Brech Digest publicado por Verizon, en el que cuentan cómo fue la investigación para descubrir el ataque que se había producido a un planta depuradora de agua de un distrito en Reino Unido. Los equipos de gestión del funcionamiento de la planta depuradora se dieron cuenta de que algo había pasado cuando saltaron las alarmas de control que vigilan que nada vaya mal en la planta al detectarse que la mezcla de componentes químicos que se estaba usando podría dañar la salud de las personas que la bebieran.
![]() |
| Figura 3: Intento de configurar agua "no potable" variando los compuestos químos |
Esto sucede porque los sistemas SCADA se crearon para ayudar a los ingenieros a tomar las decisiones de seguridad más adecuadas, pero además del sistema informatizado y automatizados existen controles que verifican que ningún fallo provoque una situación no deseada, como la de que el agua que se entrega a los usuarios sea de mala calidad y nociva para su salud.
Errores en la gestión de la seguridad de la planta depuradora
Tras la investigación realizada por el Equipo de Respuesta ante Incidentes, la explicación resulto ser la acumulación de una serie de BASICS de seguridad no realizados por la empresa que gestiona el IT de la planta de seguridad y que os paso a resumir a continuación.
1) Arquitectura no segmentada de la red
La empresa cuenta con una aplicación web/mobile a la que los clientes se pueden conectar para la gestión de sus cuentas y sus pagos. Esto está alojado en un servidor web, pero que tiene conexión directa con el servidor SCADA, basado en un AS/400 (que también debería fortificarse). Este servidor AS/400, además, tenía conexión de a Internet, por lo que una vez llegado a él se podría sacar datos. Llegando a un servidor, es fácil acceder a las credenciales de acceso a otros servicios, incluso acceder a las passwords de gestión de los PLCs e incluso mucho más fácil, ya que puede que haya sistemas PLC sin passwords o fácilmente saltables.
![]() |
| Figura 4: Arquitectura de red de los sistemas de la planta. Desde el AS/400 acceso a todo. |
2) Aplicación de pagos con mala gestión de identidades
Cualquier cliente de la empresa se podía conectar al sistema de pagos con un sistema de credenciales basado en usuario y contraseña, sin que hubiera ninguna protección de Segundo Factor de Autenticación o Autenticación Robusta, lo que permitía a un atacante hacerse fácilmente con alguna cuenta de usuario con ataques simples de phishing, troyanos, etcétera.
3) Aplicación de pagos con vulnerabilidades en el código del backend
La aplicación de pagos no estaba correctamente auditada y desde la sesión de un usuario era posible explotar bugs en el backend que permitieran acceder a los ficheros del servidor. No se sabe si la vulnerabilidad permitía subir una shell, era un ataque de LFI, o un Directory listing, pero con este fallo se podía acceder a los ficheros del servidor.
4) Credenciales de acceso al sistema SCADA en AS/400 sin 2FA
De nuevo, el acceso al sistema SCADA utilizaba usuarios y contraseñas sin ninguna protección de Segundo Factor de Autenticación, así que cualquiera que se hiciera con las credenciales podría entrar a manipular el servidor.
5) Credenciales almacenadas en el servidor de la aplicación de pagos
Como sucede en muchos casos, las herramientas de adminsitración de servidores permiten guardar información de las conexiones que realizan los técnicos para que sea cómodo acceder a ellos a golpe de clic. Según parece, en el servidor de la aplicación de pagos había un fichero .INI con las credenciales del sistema SCADA, así que una vez accedido a los ficheros del servidor fue fácil obtener el acceso al sistema SCADA.
![]() |
| Figura 5: Cúmulo de fallos en la gestión de las credenciales de acceso a los sitemas |
6) Reutilización de credenciales en distintos sistemas
Al final, los atacantes se pudieron llevar la base de datos de los usuarios, ya que las credenciales funcionaban en otros sistemas conectados, como el servidor que hospedaba la aplicación financiera de la planta.
Por suerte, al manipular las cantidades de productos químicos con las que se hace la depuración del agua, las alertas de seguridad de la planta levantaron las alertas. De nuevo, un caso en el que el cúmulo de errores de seguridad lleva a que casi Security se convierta en Safety y haya un verdadero problema para los clientes de esta planta. Hay que agradecer que las Infraestructuras Críticas aplican conceptos de defensa en profundidad para no depender totalmente de un sistema informatizado y, en este caso, ha evitado una catástrofe.
Saludos Malignos!
Sigue Un informático en el lado del mal - Google+ RSS 0xWord

Available link for download
Tuesday, February 7, 2017
Cómo montar un servidor VPN con OpenVPN y Latch sobre una Raspberry Pi
Cómo montar un servidor VPN con OpenVPN y Latch sobre una Raspberry Pi
Uno de los grupos del Máster de Seguridad de la UEM ha hecho un trabajo tutorizado por el profesor Jorge Rey para implementar una solución de privacidad de conexiones VPN de bajo costo utilizando Raspberry Pi. El software que han utilizado para dicha tarea ha sido OpenVPN, y para dotar a la solución de mayor seguridad, han integrado el servicio Latch tanto en la autenticación de los usuarios, como en la protección del acceso vía SSH a la gestión del sistema operativo en la Raspberry Pi.
![]() |
| Figura 1: Cómo montar un servidor VPN con OpenVPN + Latch sobre Raspberry Pi |
El trabajo resultante ha sido una documentación exhaustiva que explica cómo realizar, paso a paso la configuración de todos los elementos. Primero la configuración del sistema operativo en Raspberry Pi, luego la configuración del servicio OpenVPN para que funcionen correctamente las conexiones VPN y, por último pero no menos importante, la configuración de los plugins y SDKs de Latch para proteger tanto el acceso vía SSH como la autenticación de los usuarios vía VPN.
![]() |
| Figura 2: Explicación de configuración de Latch en OpenVPN |
La configuración resultante es un servidor VPN de bajo coste con protección que permite a las personas realizar las conexiones en cualquier situación contra un servidor controlado al que, además se ha puesto la protección de Latch para saber quién está accediendo en cada instante.
Figura 3: Documento sobre cómo configurar un Servicio VPN con OpenVPN y Latch sobre Raspberry Pi
En el documento, que he subido a SlideShare y podéis leer tranquilamente, se explica también como sacar partido a las estadísticas de Latch para saber que está pasando en cada momento con el servidor usando Latch Dashboard, aunque también se puede hacer una revisión detallada desde la propia aplicación móvil.
![]() |
| Figura 4: Control del SSH y la autenticación OpenVPN por separado |
Si no tenías nada que hacer hoy domingo, ya sabes, día de bricolaje con la Raspberry Pi para tener montado tu propio servidor VPN y que nunca te quedes vendido por hacer una conexión a través de una red WiFi insegura en el momento equivocado. Gracias por la documentación generada a los miembros del grupo: A?lvaro Nu?n?ez-Romero Casado, Javier Jose? Pecete Garci?a, Alejandro Amori?n Nin?o y Juan Antonio Baeza Miralles.
Figura 5: Demo de funcionamiento
Actualización: Les pedí a los autores del proyecto que por favor que hicieran un vídeo en el que se viera cómo funciona el sistema y aquí lo tenéis. ¡Gracias chicos!
Saludos Malignos!
Sigue Un informático en el lado del mal - Google+ RSS 0xWord

Available link for download
Wednesday, January 18, 2017
¿Tienes un oído fino Cifrado y esteganografía de datos en ficheros de audio y un test de estegonanálisis con tu oreja
¿Tienes un oído fino Cifrado y esteganografía de datos en ficheros de audio y un test de estegonanálisis con tu oreja
Tras ver la invitación de Chema Alonso para escribir algún artículo en El lado del mal me decidí a enviar un resumen de lo que fue mi proyecto final de carrera de ingeniería informática, en el que tocaba el tema de esteganografía y cifrado de datos en ficheros de audio. Hace poco se habló de una técnica parecida en el artículo "Esteganografía con ficheros de audio: enviar tus documentos ocultos en canciones", pero en este trabajo se añade la capa de cifrado y el trabajo se hace con MatLab, así que espero que os sea de utilidad y complemente un poco más el conocimiento de las técnicas de esteganografía y estegoanálisis.
Considero que todo documento científico debe contar con una breve introducción de los conceptos que se tratarán, así que, para empezar a tener claras las ideas, me gusta empezar siempre con definiciones y, si es posible, dar algunas pinceladas de etimología a los términos sobre los que escribo. Y aquí van:
Explicación del funcionamiento del criptosistema
El sistema consta de dos capas de seguridad, la primera será criptográfica, ya que a toda la información que se pretenda transmitir, le aplicaremos un cifrado asimétrico. Una vez tenemos la información cifrada, realizaremos el proceso de esteganografía, escogiendo para ello un fichero de audio WAV como portador y ocultando en él los datos cifrados en el paso anterior.
En la Figura 2 vemos cómo encajan todos los subsistemas entre sí, donde las cajas rojas conforman el subsistema criptográfico, que se corresponden con los procesos de cifrado y descifrado. Aquí es importante destacar que el emisor cifra la clave secreta (o clave de sesión) con la clave pública del receptor y que el mensaje se cifra usando la clave secreta, generada automática y aleatoriamente por GPG4WIN.
Las cajas azules conforman el subsistema esteganográfico, que se corresponden con los procesos de ocultación y extracción. El resto de elemento son las entradas y salidas del sistema, y un medio de transmisión.
Explicación general de cada subsistema
Teniendo una visión global del sistema, veamos el comportamiento de cada uno de sus elementos de procesamiento de la información.
Subsistema criptográfico: es el componente que aplica un algoritmo de cifrado o descifrado, en función de la etapa en la que se encuentre la información que procesemos dentro del sistema global. Recurrimos a RSA 2048 bits, mediante la herramienta GPG4WIN. En la Figura 1 se ve el flujo de la información y cuándo entra en juego cada componente. Para gestionar nuestro criptosistema de la forma que queremos, debemos configurar adecuadamente GPG4WIN. Los pasos a seguir son:
1. LSB (Least Significant Bit): es un método de ocultación que se basa en esconder la información en los bits menos significativos del fichero de audio original. El proceso consiste en realizar una sustitución de los bits menos significativos de las muestras del audio original por todos los bits del mensaje. En la Figura 2 vemos un ejemplo de ocultación, donde:
2. Phase Coding: Es un método de ocultación que se basa en esconder la información en la fase de las componentes espectrales de la onda de sonido que se obtiene a partir del audio original. El proceso de ocultación es como sigue:
Implementación de esteganografía con Matlab
Entrando un poco más en materia, paso a explicar cómo implementé ambos algoritmos esteganográficos en Matlab.
LSB, ocultación:
Bien, ahora que hemos visto cómo funciona cada parte por separado, vamos a hacer un pequeño guión de cómo hacer funcionar todo el sistema.
CIFRADO Y OCULTACIÓN
Durante la prueba, una de las muestras recibe el nombre de A y la otra muestra recibe el nombre de B. El programa elige una muestra X, que puede ser cualquiera de las muestras A o B, que el usuario ha indicado como banco de muestras, pero el sujeto no sabe cuál es. La tarea del sujeto es escuchar atentamente todas las muestras, tanto A y B como X, y entonces decidir si X se corresponde con la muestra A o con la muestra B. Por cada vez que el sujeto se vea sometido a esta elección, lo llamaremos intento. Al final de la prueba, se analizan el número de pruebas realizadas, el número de aciertos y fallos.
Las señales acústicas que hemos elegido para el test se pueden agrupar en cuatro tipos diferentes de audio:
Para terminar, ahora que os he soltado toda esta marea de ideas y conceptos, aquí podéis escuchar los ficheros de audio y realizar vosotros mismos vuestras comparativas. Os los dejos organizados por carpetas y por estilos musicales [Audios Codificados, Audios Originales] ¿Hasta dónde sois capaces de detectar el ruido en cada técnica? Empieza el reto ;)
Autor: Jorge Peris (Universidad de Valencia)
![]() |
| Figura 1: ¿Tienes un oído fino? Cifrado y esteganografía de datos en ficheros de audio y un test de estgonanálisis con tu oreja |
Considero que todo documento científico debe contar con una breve introducción de los conceptos que se tratarán, así que, para empezar a tener claras las ideas, me gusta empezar siempre con definiciones y, si es posible, dar algunas pinceladas de etimología a los términos sobre los que escribo. Y aquí van:
Definición 1: esteganografía es la ciencia que trata el estudio y la aplicación de un conjunto de técnicas que permiten ocultar o esconder información, de modo que no se perciba su existencia.
Etimología 1: Estegano-, del griego tégos-/steganos, que significa disimular, disfrazar o cubrir.
Definición 2: criptografía es el arte de escribir con clave secreta o de un modo enigmático.
Etimología 2: Cripto-, del griego kryptós, que significa recubierto.Con todo esto presente, mi objetivo fue construir un criptosistema que fuera capaz de cifrar información y para posteriormente esconderla dentro de un fichero de audio en formato WAV, maximizando la cantidad de mensaje a ocultar y minimizando todo lo posible el ruido introducido. Para la parte del cifrado me decanté por usar cifrado asimétrico RSA y para la de esteganografía, utilicé 2 métodos, uno bastante empleado, como es el LSB y otro no tanto, conocido como Phase Coding.
Etimología 3: -grafía, de la raíz del griego grafein, que significa escritura o representación gráfica.
Explicación del funcionamiento del criptosistema
El sistema consta de dos capas de seguridad, la primera será criptográfica, ya que a toda la información que se pretenda transmitir, le aplicaremos un cifrado asimétrico. Una vez tenemos la información cifrada, realizaremos el proceso de esteganografía, escogiendo para ello un fichero de audio WAV como portador y ocultando en él los datos cifrados en el paso anterior.
![]() |
| Figura 2: Diagrama global del criptosistema |
En la Figura 2 vemos cómo encajan todos los subsistemas entre sí, donde las cajas rojas conforman el subsistema criptográfico, que se corresponden con los procesos de cifrado y descifrado. Aquí es importante destacar que el emisor cifra la clave secreta (o clave de sesión) con la clave pública del receptor y que el mensaje se cifra usando la clave secreta, generada automática y aleatoriamente por GPG4WIN.
Las cajas azules conforman el subsistema esteganográfico, que se corresponden con los procesos de ocultación y extracción. El resto de elemento son las entradas y salidas del sistema, y un medio de transmisión.
Explicación general de cada subsistema
Teniendo una visión global del sistema, veamos el comportamiento de cada uno de sus elementos de procesamiento de la información.
Subsistema criptográfico: es el componente que aplica un algoritmo de cifrado o descifrado, en función de la etapa en la que se encuentre la información que procesemos dentro del sistema global. Recurrimos a RSA 2048 bits, mediante la herramienta GPG4WIN. En la Figura 1 se ve el flujo de la información y cuándo entra en juego cada componente. Para gestionar nuestro criptosistema de la forma que queremos, debemos configurar adecuadamente GPG4WIN. Los pasos a seguir son:
1. Crear un certificado de tipo OpenPGP key pairSi todo el proceso se ha llevado a cabo correctamente, obtendremos una ventana de confirmación que nos mostrará el fingerprint de nuestro certificado. Con este certificado será con el que podamos cifrar/descifrar ficheros. Para cifrar en GPG4WIN lo podemos hacer con el propio gestor de certificados que incluye, llamado Kleopatra. Simplemente lo abrimos y seguimos estos pasos:
2. Introducir algunos datos personales: Dentro de las opciones avanzadas, elegimos el uso que le vamos a dar. En nuestro caso solo queremos cifrar, así que elegimos el método RSA con 2048 bits y marcamos la casilla de Encryption.
3. Crear una passphrase para cifrar la clave privada (este cifrado es tipo simétrico)
1. Elegimos Sign/Encrypt Files, y marcamos la opción de Encrypt. Seleccionamos el fichero a cifrar.Para descifrar en GPG4WIN lo haremos también con Kleopatra:
2. Seleccionamos el certificado que queramos usar para cifrar. En este caso, como ya lo tenemos creado, seleccionamos y añadimos el que hemos hecho anteriormente.
3. Pulsamos en Encrypt y esperamos a que el proceso finalice. El programa nos avisará.
1. Elegimos Decrypt/Verify Files, y seleccionamos el fichero a descifrar. También podemos elegir dónde se guardará la información descifrada.2. Introducimos la passphrase para nuestro certificado, que se nos indica en pantalla. Cada certificado que creemos tiene su propia passphrase, de modo que hay que recordarla para poder realizar el proceso de descifrado.3. Pulsamos en OK y esperamos a que el proceso finalice.Subsistema esteganográfico: es el componente que aplica un algoritmo de ocultación o extracción. Depende también de la etapa, y en la misma Figura 2 vemos las interacciones de este componente con el sistema.
1. LSB (Least Significant Bit): es un método de ocultación que se basa en esconder la información en los bits menos significativos del fichero de audio original. El proceso consiste en realizar una sustitución de los bits menos significativos de las muestras del audio original por todos los bits del mensaje. En la Figura 2 vemos un ejemplo de ocultación, donde:
Audio: muestras de sonido del fichero WAV original. El subíndice indica el número de muestra y el superíndice indica el peso del bit de la muestra.
Datos: cadena de bits del mensaje original.
Portador: muestras de sonido del fichero WAV con el mensaje Datos incluido.
![]() |
| Figura 3: Ejemplo de ocultación LSB. Sustitución de los bits menos significativos de las muestras de audio original por los bits del mensaje |
2. Phase Coding: Es un método de ocultación que se basa en esconder la información en la fase de las componentes espectrales de la onda de sonido que se obtiene a partir del audio original. El proceso de ocultación es como sigue:
a. Dividimos la señal acústica en varias ventanas de tamaño fijo.
b. Calculamos la DFT (transformada discreta de Fourier) de cada ventana, obteniendo la fase y la magnitud.
c. Elección de puntos de cada ventana candidatos para esconder la información.i. Todos los puntos que cumplan Thmin < magnitud < Th albergarán el mensaje a ocultar. Umbral, Th, es un porcentaje del valor máximo de la señal.ii. Para cada punto, dejaremos el valor de la fase original, con el siguiente criterio:
Umbral mínimo, Thmin, es un valor fijo obtenido de forma empírica, 10^-4 genera 0 errores. Si bit a ocultar 0, entonces: (-1) x fase
Si bit a ocultar 1, entonces: (1) x fase
![]() |
| Figura 4: Pasos para aplicar el método de esteganografía de Phase Coding |
Implementación de esteganografía con Matlab
Entrando un poco más en materia, paso a explicar cómo implementé ambos algoritmos esteganográficos en Matlab.
LSB, ocultación:
1. Leer fichero con los datos a esconderBásicamente estos son los pasos, pero se ve mucho mejor en la Figura 3. Hay que tener en cuenta que hay que moldear bastante las matrices y jugar con los tipos de datos en Matlab, para poder ajustar todos los cálculos, ya que el algoritmo lo hice para poder escoger una cantidad variable de bits menos significativos.[Datos, count] = fread(fopen(C: utamensaje.txt));2. Leer fichero de audio, que hará de portador
Datos = matriz de count filas (cada caracter) y 1 columna.
count = cantidad de caracteres leídos.[x,fs] = audioread(ruta);3. Sustituir los bits menos significativos de x por todos los bits que haya en Datos
x = muestras de audio
fs = frecuencia de muestreo% La parte del mensaje que cabe justacoded(1:F_smr,(end-LSB+1):end) = stego_mensaje;% La parte del mensaje que sobracoded(F_smr+1,end-sobran+1:end)=Datos(L_esconder-sobran+1:end);
4. Crear un nuevo vector de muestras, que contenga el mensaje sustituido y el resto de muestras originales, es decir, las muestras del fichero portador, incluyendo el mensaje a esconder.
LSB, extracción:y = coded;audiowrite(C: utaLSB-codedAudio.wav, y, fs);
1. Leer fichero de audio, que es el portador del mensaje oculto[x_ext,fs_ext] = audioread(C: utaLSB-codedAudio.wav);2. Extraer los bits menos significativos de x_ext% Recupero el mensaje, por partes: la divisible, y el resto3. Crear un nuevo fichero que será el mensaje extraído.
% 1º Recupero la parte divisible del mensaje
recup1 = x_ext(1:F_smr,end-LSB+1:end);
% 2º Recupero la parte que falta del mensaje
recup2 = x_ext(F_smr+1,end-sobran+1:end);
% Juntamos todo
recup = vertcat(recup1,recup2);fwrite(fopen(C: utamensaje_extraido.txt,w), recup);
Phase Coding, ocultación:%Recordad que este mensaje extraído está cifrado.
1. Leer fichero de audio y dividir la señal en ventanas Phase Coding, extracción:[x,fs] = audioread(ruta);2. Calcular DFT y obtener fase y magnitud
% Longitud archivo portador en muestras
T = length(x);
% Longitud de cada segmento
L = 1024;% Numero de segmentos
N = floor(T/L);
% División en segmentos de la señal (cada columna un segmento)
for n=1:N
xf(:,n) = x((n-1)*L + 1:n*L);
end% DFT de cada segmento (fft lo hace de golpe)3. Calcular umbrales y obtener los puntos candidatos
Xf = fft(xf);
% Matriz de magnitud original
M_ori = abs(Xf);
% Matriz de fases original
P_ori = angle(Xf);Th = porcentaje*max(M_ori(:));Th_min = 0.0001;indhide = find(M_ori<Th & M_ori>Th_min);4. Calcular umbrales y obtener los puntos candidatosfor k=1:L_esconder % desde 1 hasta el tamaño del mensaje que quiero esconder5. Crear el audio portador con el mensaje a esconder.
if Datos(k)==0
P_hide(indhide(k)) = abs(P_ori(indhide(k)))*(-1);
else
P_hide(indhide(k)) = abs(P_ori(indhide(k)))*(+1);
end
end% Mensaje portador con datos ocultos
Xhide = M_ori.*exp(1i*P_ori);
xm = real(ifft(Xhide));
audiowrite(C: utaPC-codedAudio.wav,xm,fs);
1. Los pasos para extraer son los mismos que para ocultar, desde el 1 al 3
2. Extraemos la información del vector con los puntos candidatos% Extraer índices de los puntos con bits ocultosRecordad que L_esconder es el tamaño del mensaje que voy a extraer. En principio lo sabemos de antemano, pero se podría crear un espacio dentro del mensaje a ocultar para indicar cuál es su tamaño, y transmitirlo también una vez cifrado y ocultado.
indhide = find(M_decod<Th & M_decod>Th_min);
indhide = indhide(1:L_esconder);
Decp = P_ decod(indhide);
3. Extraemos el mensaje ocultoGuión final y resultados% Mensaje extraído en Datadec
Datadec = (Decp<=0)*0 + (Decp>0)*1;
Bien, ahora que hemos visto cómo funciona cada parte por separado, vamos a hacer un pequeño guión de cómo hacer funcionar todo el sistema.
CIFRADO Y OCULTACIÓN
1. Elegimos un fichero cualquiera que será nuestro mensaje a ocultar.EXTRACCIÓN Y DESCIFRADO
2. Elegimos un fichero de audio, en formato WAV, que será nuestro portador.
3. Ciframos el fichero con GPG4WIN.
4. Ocultamos el mensaje obtenido en el paso 3 mediante una técnica esteganográfica: LSB o Phase Coding.
5. Obtenemos un fichero WAV con el mensaje incluido. Este fichero lo podemos transmitir o almacenar teniendo 2 ventajas principalmente:a. Tenemos la información escondida, luego será más difícil encontrarla para cualquiera que no sepa dónde/cómo buscar.
b. Tenemos la información cifrada, de modo que, incluso aunque se llegue a descubrir que tenemos información oculta, sería casi imposible descifrar sin tener la llave.
1. Elegimos un fichero de audio que sea portador.Para comprobar que todo este proceso de cifrado y ocultación funciona bien, quise realizar una serie de pruebas a personas de mi entorno. Recurrí para ello al test ABX, que es un tipo de prueba auditiva que se realiza a ciegas, lo que se conoce también como blind test, es decir, que el sujeto desconoce el origen del audio que escucha. Para hacer las pruebas más sencillas, recurrí a la herramienta llamada Lacinato ABX/Shootouter, que permite cargar ficheros de audio, y realizar la prueba de forma automática, mostrando los resultados obtenidos por cada sujeto. Sin entrar en mucho detalle matemático, necesariamente derivado de este tipo de pruebas, os explico en qué consiste el test ABX.
2. Extraemos el mensaje mediante una técnica esteganográfica: LSB o Phase Coding.
3. Desciframos el fichero obtenido en el paso 2 con GPG4WIN.
![]() |
| Figura 5: Herramienta Lacinato ABS/SHootouter |
Durante la prueba, una de las muestras recibe el nombre de A y la otra muestra recibe el nombre de B. El programa elige una muestra X, que puede ser cualquiera de las muestras A o B, que el usuario ha indicado como banco de muestras, pero el sujeto no sabe cuál es. La tarea del sujeto es escuchar atentamente todas las muestras, tanto A y B como X, y entonces decidir si X se corresponde con la muestra A o con la muestra B. Por cada vez que el sujeto se vea sometido a esta elección, lo llamaremos intento. Al final de la prueba, se analizan el número de pruebas realizadas, el número de aciertos y fallos.
Las señales acústicas que hemos elegido para el test se pueden agrupar en cuatro tipos diferentes de audio:
Música clásica: Sinfonía nº 6 en Fa mayor, op. 68, Pastoral, Ludwig Van Beethoven.Estos cuatro tipos de audio son muy comunes a día de hoy, por lo tanto, son un adecuado objeto de estudio para nuestro proyecto. Cabe destacar que los formatos de los audio obtenidos son del tipo sin pérdida, concretamente en formato WAV. Esto es así para poder trabajar a partir de un material que ofrezca el menor error posible. Destacar que, para homogeneizar las muestras, todos los audio han sido normalizados y convertidos a monocanal con 16 bits de profundidad. Los resultados que obtuve para cada algoritmo esteganográfico fueron los siguientes:
Música comercial: Diamonds, Season One, Emancipator.
Música pop-rock: Cuando los ´árboles se sequen, Casa Grande, Marco Boz y Pablo Páez.
Voz hablada: Blue Sky Bridge, narración en inglés, Fergus Sound Enterprises.
Resultados para LSB: Para evitar detección auditiva, recomiendo utilizar como máximo los 4 bits menos significativos. Capacidad de ocultación del LSB es el producto del número de muestras del audio original y el valor de LSB elegido en cada caso: numero_muestras x N lsb
Resultados para Phase Coding: Para evitar detección auditiva, recomiendo utilizar un valor Th ? 10-4.Es importante tener en cuenta que lo que más pesa a la hora de realizar un buen proceso de ocultación es el fichero portador. En nuestro caso, cuanto más intenso sea el nivel de sonido de nuestra onda portadora, más disimulará el contenido oculto. Por eso he especificado qué tipo de fragmentos musicales he utilizado, y también porque necesitaba una base sobre la que partir. Es por ello que se hace complicado dar un valor preciso que indique cuánta cantidad de información puedo introducir por muestra mediante esta técnica.
Para terminar, ahora que os he soltado toda esta marea de ideas y conceptos, aquí podéis escuchar los ficheros de audio y realizar vosotros mismos vuestras comparativas. Os los dejos organizados por carpetas y por estilos musicales [Audios Codificados, Audios Originales] ¿Hasta dónde sois capaces de detectar el ruido en cada técnica? Empieza el reto ;)
Autor: Jorge Peris (Universidad de Valencia)
Sigue Un informático en el lado del mal - Google+ RSS 0xWord

Available link for download
Saturday, January 14, 2017
Apple cierra un leak en Siri y acaba con el truco de bar para robar cuentas Apple Siri
Apple cierra un leak en Siri y acaba con el truco de bar para robar cuentas Apple Siri
Hace mucho tiempo os contaba la historia de cómo jugando con Siri era posible robarle la cuenta a una persona. Es un truco sencillo de bar que, la última vez que lo probé hace un mes y medio o así, todavía funcionaba. Consiste en aprovecharse de aquellos terminarles iPhone que permiten que Siri esté activado con la pantalla bloqueada y comenzar con un sencillo "¿Quién soy yo?" o "Who am I?" si lo tienes en inglés como yo.
![]() |
| Figura 1: Apple cierra un leak en Siri y acaba con el truco de bar para robar cuentas. |
Cuando se le hace esa pregunta a Siri, lo que hace el terminal es buscar qué cuenta tienes configurada en Siri. Tal vez no tengas ninguna, tal vez la hayas configurado y lo sepas, o incluso puede que no recuerdes que la tienes configurado - como le suele suceder a mucha gente - . En el siguiente vídeo hago una pequeña demo de cómo funciona el ataque:
Figura 2: Demo de cómo robar un cuenta usando Siri
Esta opción se encuentra en las opciones de Siri y es una cuenta de la agenda de contactos que hayas establecido tú con tus datos.
Figura 2: Demo de cómo robar un cuenta usando Siri
Esta opción se encuentra en las opciones de Siri y es una cuenta de la agenda de contactos que hayas establecido tú con tus datos.
![]() |
| Figura 3: Configuración de quién eres tú en Siri |
Si la tienes configurada, Siri accede a esa información y te muestra el contacto para que lo sepas. Antes, en las versiones vulnerables de iOS - hasta la iOS 9.3.1 - sale la información completa de la cuenta. Esto lo podrías usar para robarle la cuenta con el truco de bar que os conté o para simplemente sacarle el correo electrónico o el teléfono a esa chica que te gusta tanto y darle una sorpresa. Tal y como se ve en la pantalla.
| Figura 4: Antes Siri mostraba toda la info del contacto en pantalla |
En las nuevas versiones de iOS, Apple ha cerrado un poco más la boca a Siri para evitar esta fuga de información y otras más, por lo que ahora sale el nombre del contacto, pero ningún dato más sobre cuentas de correo electrónico o números de teléfono.
![]() |
| Figura 5: Ahora solo muestra el nombre del contacto. Si quieres ver los datos hay que desbloquear el passcode. |
Poco a poco se van cerrando los leaks de información en Siri, que como sabéis, pueden dar mucho juego. Desde buscar información en las notas o el calendario, hacer llamadas a personas o poner alarmas para despertar al que se ha descuidado y dejado su iPhone a tiro, a las 4 de la mañana.
Saludos Malignos!
Sigue Un informático en el lado del mal - Google+ RSS 0xWord

Available link for download
Wednesday, January 4, 2017
Análisis de un HPP HTTP Parameter Pollution en Apple Owasp Apple HPP pentesting
Análisis de un HPP HTTP Parameter Pollution en Apple Owasp Apple HPP pentesting
Las técnicas de HPP (HTTP Parameter Pollution) llevan ya un tiempo entre nosotros. Fueron publicadas por Stefano Di Paola y Luca Carretano en la conferencia OWASP 2009, y desde entonces han sido utilizadas en muchos ataques distintos. Se basan en conseguir un comportamiento anómalo en las aplicaciones web duplicando (polucionando) los valores de los parámetros de entrada. Es decir, vamos a suponer que una aplicación recibe el parámetro1 con valor 23. Lo que se preguntan las técnicas de HPP es... ¿Qué pasa si le enviamos a la aplicación web el parámetro1 dos veces con valores 23 en el primero y 24 en el segundo? ¿Usará el primero? ¿El segundo? ¿Todos?
![]() |
| Figura 1: Análisis de un HPP (HTTP Parameter Polluiton) en Apple.com |
Con esa idea de polucionar los parámetros, en este caso los parámetros de las cadenas de conexión a bases de datos, construimos las técnicas de Connection String Parameter Pollution [PDF] que me tocó explicar en detalle en el libro de Hacking Web Technologies. Todo partió de la idea de polucionar todo lo que teníamos por delante, gracias a la aparición del HPP, y de eso hablamos Stefano y yo cuando nos conocimos.
![]() |
| Figura 2: Comportamiento con parámetros polucionados según las tecnologáis |
En el caso de las aplicaciones web, el comportamiento que se va a obtener en cada caso depende de la tecnología de backend que tengamos. Según el estudio inicial realizado, esta tabla sería la lista de casos que se esperan cuando se poluciona un parámetro en el QueryString de una aplicación web.
Un bug de HPP en los foros de Apple
Nosotros tenemos un plugin en nuestro sistema de Pentesting Persistente Faast creado exclusivamente para descubrir este tipo de bugs, y a veces te lo encuentras de forma muy sencilla en sitios como los Foros de Apple, como es el caso de hoy.
![]() |
| Figura 3: El buscador de temas por etiquetas en los foros de Apple |
Vamos a ver este ejemplo en detalle. En esta imagen tenemos la lista de etiquetas con las que han sido marcados los diferentes temas del foro. Con el interfaz, basta con seleccionar una de las etiquetas para ver que queda añadida el QueryString con el parámetro tags que coge como valor el de la etiqueta pulsada. Esta etiqueta es pintada en el buscador y recibimos la lista de temas que la tienen asignada.
![]() |
| Figura 4: Se elige la etiqueta, se envía en el Querystring, se imprime y salen los artículos |
Esto es un funcionamiento normal y habitual, pero quería remarcarlo para explicar que hay una aplicación en el backend que está recibiendo el QueryString, extrayendo el valor de tags, buscando los temas y pintando la página de respuesta en función del valor de tags.
Si seleccionamos dos etiquetas, vemos que la aplicación está preparada para ello, añadiendo las dos etiquetas en el mismo parámetro tags separándolas por el operador de suma. Algo bastante habitual. Esto significa que la aplicación en el backend está preparada para procesar el string que le llega en el parámetro tags y sacar la lista de etiquetas.
![]() |
| Figura 5: Comportamiento con selección múltiple de etiquetas |
Pero ¿qué pasaría si polucionamos el parámetro tags? Pues bien, en este caso la tecnología del backend ha generado una lista con todos los valores separados por commas. Esto es interesante, porque cuando el QueryString ha procesado la lista CSV (Comma Separated Values) generada en el parámetro tags, ha sido capaz de descubrir las dos tags, pero luego no ha sido capaz de imprimirlas correctamente.
![]() |
| Figura 6: Comportamiento con polución del parámetro tags |
Esto quiere decir que la tecnología en el backend está generando una lista CSV con los valores de los parámetros polucionados, que la aplicación en el backend está preparada parcialmente para procesarlos, y parcialmente no está preparada.
¿Es esto un bug?
Visto el entorno, no parece que sea un "security bug" de ninguna manera, pero sí que existen casos sin controlar, por lo que podría darse una situación no deseada más allá del fallo de impresión de las etiquetas en el campo de texto en otros entornos, como ya se ha visto con estos bugs de HPP en el pasado.
Corolario tecnológico
Para terminar, tras ver que se generaba una lista de valores separada por comas, siguiendo la tabla de casos publicada en HPP, decidí comprobar si había algún cambio, así que pasé por BuiltWith el sitio web para ver qué tecnologías son las que hay detrás y que han generado este comportamiento.
![]() |
| Figura 7: Tecnologías detrás de Forum.Apple.com |
Como podéis ver, sale que es un Apache con J2EE, que no estaba contemplada en la tabla, pero que si nos basamos en este comportamiento funciona igual que un servidor IIS o un servidor Apache con Python.
Saludos Malignos!
Sigue Un informático en el lado del mal - Google+ RSS 0xWord

Available link for download
Sunday, December 18, 2016
MrLooquer IPv6 Un buscador de servicios sobre IPv6 en Internet para pentesters hackers y analistas de seguridad
MrLooquer IPv6 Un buscador de servicios sobre IPv6 en Internet para pentesters hackers y analistas de seguridad
Una de las cosas que cualquier aficionado a las redes de computadores conoce es el amplio espacio de direccionamiento disponible en IPv6, concretamente 128 bits. Puede que a alguien le parezca un número pequeño, pero esos bits dan para mucho, tanto, que el IETF, uno de los organismos reguladores de Internet, reconoce que los métodos basados en fuerza bruta utilizados en escaneos de reconocimiento en IPv4, no sirven en redes IPv6. Cuando un consultor de seguridad quiere saber qué equipos hay en una determinada subred con direccionamiento IPv4 suele hacer algo como: nmap 192.168.1.0/24
El comando anterior lanzará diversas pruebas sobre cada una de las direcciones IP que existen dentro de esa subred. En este caso, al ser un /24 significa que hay 8 bits destinados a dar direcciones de host, es decir, 2^8=254 direcciones IP. En este tipo de escaneos se aplica el concepto de fuerza bruta, o lo que es lo mismo, probar todas las 254 opciones posibles. Una red IPv6, sin embargo, tiene habitualmente un /64 al final, y eso significa que hay 2^64 direcciones posibles dentro de esa subred, es decir 18.446.744.073.709.551.616, lo que resulta totalmente inviable de escanear. Y no olvidemos de que se trata de una sola red.
El resultado es que mucha gente piensa que usar una dirección IPv6 implica que ésta no podrá ser descubierta por un bot-escáner situado en Internet, lo cual nos lleva al peligroso concepto de seguridad por ocultación. Incluso hay gente que dice que esa supuesta oscuridad que ofrece IPv6 ofrece a lot of security.
Pero esto no es del todo cierto. El pasado tres de marzo se presentó oficialmente en la séptima edición de la conferencia RootedCON el servicio online MrLooquer, que recopila y procesa millones y millones de servicios abiertos en máquinas conectadas a Internet en IPv6. El portal web que ofrece MrLooquer, que también es accesible por API, permite recorrer y visualizar millones de puertos y banners de servicios conectados a IPv6, permitiendo a un analista hacer cosas similares a las que está habituado al hacking con buscadores tipo Shodan, pero centrado en el protocolo IPv6.
También permite realizar búsquedas más específicas sobre la infraestructura Big Data que lo soporta para afinar los resultados. Algunos ejemplos de búsquedas::
? Servidores de correo electrónico Dovecot escuchando en IPv6: Algunos piensan que todavía no hay muchos servidores de correo conectados a redes IPv6, y esto puede llegar a ser un problema para los mecanismos antispam existentes basados en listas negras. Un usuario con IPv6 podría enviar correos electrónicos utilizando como origen cada una de las 2^64 direcciones IPv6 disponibles. No olvidemos que un usuario residencial con salida a Internet por IPv6 suele tener asignado un /64 como el que hemos visto anteriormente, es decir, tiene 18.446.744.073.709.551.616 direcciones IPv6 públicas para a utilizar a su voluntad. Por tanto, los mecanismos actuales de control basados en listas negras IP no pueden funcionar de la misma forma con IPv6, y necesitan ser revisados para, por ejemplo, filtrar por rangos /64, con las implicaciones que esto conlleva.
? Busqueda de servidores DNS: Podemos encontrar fácilmente servidores DNS escuchando en IPv6 con el filtro port:53 (para usar este tipo de filtros es necesario registro, también gratuito). Observando los resultados de la búsqueda podemos preguntarnos si estos servidores podrían ser utilizados para lanzar ataques de denegación de servicio amplificados, y si los mecanismos de protección actuales contra este tipo de ataques están preparados para manejar ataques lanzados desde redes IPv6.
? Busqueda de servidores DNS vulnerables: MrLooquer también permite conocer el grado de exposición de servicios afectados por una determinada vulnerabilidad escuchando en IPv6. Por ejemplo, en el caso de servidores DNS, podríamos realizar una búsqueda más dirigida para obtener equipos potencialmente afectados por la vulnerabilidad publicada recientemente relativa al servidor de nombres DNS Bind9 (CVE-2016-2088). Se trata de una vulnerabilidad que permite causar una denegación de servicio (DoS) mediante el envío remoto de un paquete malformado usando DNS Cookies.
Mediante un sencilla búsqueda en MrLooquer podemos obtener un listado de servicios potencialmente afectados por esta vulnerabilidad escuchando en IPv6. De nuevo, nos surge la pregunta de si las políticas de seguridad usadas actualmente para proteger los sistemas de este tipo de ataques en IPv4 se están actualizando para redes IPv6:
? Búsqueda de servicios: También podemos encontrar servicios tecnológicamente más actuales tales como gestores de colas RabbitMQ buscando el puerto 6379. Precisamente Daniel García presentó también en la última edición de RootedCon un ataque de inyección de comandos sobre este tipo de servicios cuando están mal configurados.
? Relación de direcciones IPv4&IPv6: MrLooquer también ofrece una característica muy interesante para cualquier analista de seguridad, que es la capacidad de relacionar entidades IPv6 con direcciones IPv4 y dominios. Esto hace posible descubrir cómo las organizaciones están adoptando IPv6 y cómo en algunos casos las políticas de seguridad no están siendo aplicadas de igual forma para servicios escuchando en cada uno de los protocolos. Esto puede suponer un riesgo elevado y debe ser considerado muy cuidadosamente, ya que como podemos ver, IPv6 no ofrece oscuridad y puede acabar siendo un punto de exposición a ataques.
IPv6 Hoy en día
Por otro lado, respecto la pregunta de cuándo llegará IPv6 a nuestro país, ¿alguien tiene la sensación de que IPv6 no termina de llegar nunca? No sois los únicos, mucha gente lo piensa, pero eso tampoco es del todo cierto. Tenemos direcciones IPv6 mucho más cerca de lo que nos pensamos y ya hay que prepararse para ello. En esta charla de nuestro compañero Rafael Sánchez puedes ver cómo montarte tu propia infraestructura para comenzar en el mundo de la seguridad IPv6.
Figura 10: Montarse un escenario de hacking IPv6 por 2
Muchas empresas que quieren tener presencia en Internet se apoyan en infraestructuras provisionadas por proveedores de servidores virtuales o VPS. Muchos de estos proveedores, entre ellos los más importantes (Amazon, Digital Ocean o Google Cloud), ofrecen a sus clientes conectividad IPv6 por defecto. Si además tenemos en cuenta que muchos servicios en sistemas Linux se levantan por defecto tanto en IPv4 como en IPv6 (SSH, por ejemplo), obtenemos que cualquier empresa que contrate estos servicios levantará puertos y servicios en redes IPv6, incluso sin ser consciente de ello. De esta forma, podemos ver que efectivamente muchas empresas españolas ya cuentan con servicios escuchando en IPv6.
MrLooquer surge con la finalidad de ser una herramienta útil para los expertos en seguridad en redes enfocada a IPv6, pero no solo eso, también tiene el objetivo de ayudar a entender las relaciones existentes entre entidades tales como: Dominio-IPv4-IPv6-Puerto. Si quieres más información sobre seguridad y hacking IPv6, tienes los siguientes artículos:
Autores: Fran & Rafa, equipo de https://mrlooquer.com (@mrlooquer)
![]() |
| Figura 1: MrLooquer. Un buscador de servicios sobre IPv6 en Internet |
El comando anterior lanzará diversas pruebas sobre cada una de las direcciones IP que existen dentro de esa subred. En este caso, al ser un /24 significa que hay 8 bits destinados a dar direcciones de host, es decir, 2^8=254 direcciones IP. En este tipo de escaneos se aplica el concepto de fuerza bruta, o lo que es lo mismo, probar todas las 254 opciones posibles. Una red IPv6, sin embargo, tiene habitualmente un /64 al final, y eso significa que hay 2^64 direcciones posibles dentro de esa subred, es decir 18.446.744.073.709.551.616, lo que resulta totalmente inviable de escanear. Y no olvidemos de que se trata de una sola red.
![]() |
| Figura 2: Documento de IETF con información sobre escaneos en IPv6 |
El resultado es que mucha gente piensa que usar una dirección IPv6 implica que ésta no podrá ser descubierta por un bot-escáner situado en Internet, lo cual nos lleva al peligroso concepto de seguridad por ocultación. Incluso hay gente que dice que esa supuesta oscuridad que ofrece IPv6 ofrece a lot of security.
![]() |
| Figura 3: Opinión sobre las defensas NO necesarias en IPv6 |
Pero esto no es del todo cierto. El pasado tres de marzo se presentó oficialmente en la séptima edición de la conferencia RootedCON el servicio online MrLooquer, que recopila y procesa millones y millones de servicios abiertos en máquinas conectadas a Internet en IPv6. El portal web que ofrece MrLooquer, que también es accesible por API, permite recorrer y visualizar millones de puertos y banners de servicios conectados a IPv6, permitiendo a un analista hacer cosas similares a las que está habituado al hacking con buscadores tipo Shodan, pero centrado en el protocolo IPv6.
![]() |
| Figura 4: Servicio online MrLooquer |
También permite realizar búsquedas más específicas sobre la infraestructura Big Data que lo soporta para afinar los resultados. Algunos ejemplos de búsquedas::
? Servidores de correo electrónico Dovecot escuchando en IPv6: Algunos piensan que todavía no hay muchos servidores de correo conectados a redes IPv6, y esto puede llegar a ser un problema para los mecanismos antispam existentes basados en listas negras. Un usuario con IPv6 podría enviar correos electrónicos utilizando como origen cada una de las 2^64 direcciones IPv6 disponibles. No olvidemos que un usuario residencial con salida a Internet por IPv6 suele tener asignado un /64 como el que hemos visto anteriormente, es decir, tiene 18.446.744.073.709.551.616 direcciones IPv6 públicas para a utilizar a su voluntad. Por tanto, los mecanismos actuales de control basados en listas negras IP no pueden funcionar de la misma forma con IPv6, y necesitan ser revisados para, por ejemplo, filtrar por rangos /64, con las implicaciones que esto conlleva.
![]() |
| Figura 5: Lista de servidores Dovecot escuchando sobre IPv6 |
? Busqueda de servidores DNS: Podemos encontrar fácilmente servidores DNS escuchando en IPv6 con el filtro port:53 (para usar este tipo de filtros es necesario registro, también gratuito). Observando los resultados de la búsqueda podemos preguntarnos si estos servidores podrían ser utilizados para lanzar ataques de denegación de servicio amplificados, y si los mecanismos de protección actuales contra este tipo de ataques están preparados para manejar ataques lanzados desde redes IPv6.
![]() |
| Figura 6: Servidores DNS sobre IPv6 |
? Busqueda de servidores DNS vulnerables: MrLooquer también permite conocer el grado de exposición de servicios afectados por una determinada vulnerabilidad escuchando en IPv6. Por ejemplo, en el caso de servidores DNS, podríamos realizar una búsqueda más dirigida para obtener equipos potencialmente afectados por la vulnerabilidad publicada recientemente relativa al servidor de nombres DNS Bind9 (CVE-2016-2088). Se trata de una vulnerabilidad que permite causar una denegación de servicio (DoS) mediante el envío remoto de un paquete malformado usando DNS Cookies.
![]() |
| Figura 7: Bug de DoS en servidores DNS |
Mediante un sencilla búsqueda en MrLooquer podemos obtener un listado de servicios potencialmente afectados por esta vulnerabilidad escuchando en IPv6. De nuevo, nos surge la pregunta de si las políticas de seguridad usadas actualmente para proteger los sistemas de este tipo de ataques en IPv4 se están actualizando para redes IPv6:
![]() |
| Figura 8: Servidores DNS potencialmente vulnerables |
? Búsqueda de servicios: También podemos encontrar servicios tecnológicamente más actuales tales como gestores de colas RabbitMQ buscando el puerto 6379. Precisamente Daniel García presentó también en la última edición de RootedCon un ataque de inyección de comandos sobre este tipo de servicios cuando están mal configurados.
![]() |
| Figura 9: Servidores RabbitMQ sobre IPv6 |
? Relación de direcciones IPv4&IPv6: MrLooquer también ofrece una característica muy interesante para cualquier analista de seguridad, que es la capacidad de relacionar entidades IPv6 con direcciones IPv4 y dominios. Esto hace posible descubrir cómo las organizaciones están adoptando IPv6 y cómo en algunos casos las políticas de seguridad no están siendo aplicadas de igual forma para servicios escuchando en cada uno de los protocolos. Esto puede suponer un riesgo elevado y debe ser considerado muy cuidadosamente, ya que como podemos ver, IPv6 no ofrece oscuridad y puede acabar siendo un punto de exposición a ataques.
![]() |
| Figura 10: Relación de servicios y direcciones IPv4 & IPv6 |
Por otro lado, respecto la pregunta de cuándo llegará IPv6 a nuestro país, ¿alguien tiene la sensación de que IPv6 no termina de llegar nunca? No sois los únicos, mucha gente lo piensa, pero eso tampoco es del todo cierto. Tenemos direcciones IPv6 mucho más cerca de lo que nos pensamos y ya hay que prepararse para ello. En esta charla de nuestro compañero Rafael Sánchez puedes ver cómo montarte tu propia infraestructura para comenzar en el mundo de la seguridad IPv6.
Figura 10: Montarse un escenario de hacking IPv6 por 2
Muchas empresas que quieren tener presencia en Internet se apoyan en infraestructuras provisionadas por proveedores de servidores virtuales o VPS. Muchos de estos proveedores, entre ellos los más importantes (Amazon, Digital Ocean o Google Cloud), ofrecen a sus clientes conectividad IPv6 por defecto. Si además tenemos en cuenta que muchos servicios en sistemas Linux se levantan por defecto tanto en IPv4 como en IPv6 (SSH, por ejemplo), obtenemos que cualquier empresa que contrate estos servicios levantará puertos y servicios en redes IPv6, incluso sin ser consciente de ello. De esta forma, podemos ver que efectivamente muchas empresas españolas ya cuentan con servicios escuchando en IPv6.
![]() |
| Figura 11: Empresas españolas con IPv6 |
MrLooquer surge con la finalidad de ser una herramienta útil para los expertos en seguridad en redes enfocada a IPv6, pero no solo eso, también tiene el objetivo de ayudar a entender las relaciones existentes entre entidades tales como: Dominio-IPv4-IPv6-Puerto. Si quieres más información sobre seguridad y hacking IPv6, tienes los siguientes artículos:
- Hacking en redes de datos IPv6: Conceptos básicos IPv6 (1)En el futuro, MrLooquer evolucionará en este sentido utilizando tecnologías de visualización de relaciones mediante grafos y métodos de análisis avanzados para ofrecer a los usuarios la posibilidad de descubrir el grado de exposición de las organizaciones en el complejo panorama de Internet.
- Hacking en redes de datos IPv6: Conceptos básicos IPv6 (2)
- Hacking en redes de datos IPv6: Hackeado en IPv6 por creer que no lo usas
- Hacking en redes de datos IPv6: Ataque de Neighbor Spoofing
- Hacking en redes de datos IPv6: Captura de SMB con Neighbor Spoofing
- Hacking en redes de datos IPv6: FC00::1 (Algunos) Ataques en redes IPv6
- Hacking en redes de datos IPv6: Man in the middle en redes IPv4 usando IPv6
- Hacking en redes de datos IPv6: Desactivar IPv6 para evitar D.O.S. SLAAC
- Hacking en redes de datos IPv6: Predecir direcciones IPv6 Local-Link de OS X
- Hacking en redes de datos IPv6: Ataques en redes de datos IPv4 e IPv6
- Hacking en redes de datos IPv6: Evil FOCA: Ataque SLAAC
- Hacking en redes de datos IPv6: Evil FOCA: Bridging HTTP(IPv6)-HTTPs(IPv4)
- Hacking en redes de datos IPv6: Pasar de IPv4 a IPv6 con una respuesta DNS
- Hacking en redes de datos IPv6: Cómo activar IPv6 en Google Chrome
- Hacking en redes de datos IPv4: Ataque DHCP ACK Injector
- Evil FOCA liberada bajo licencia Open Source
- Hacking en redes de datos IPv6: Topera - Scanner de puertos sobre IPv6
- Implementación de Iddle Port Scanning con IPv6
- Detección de IPv6 en Internet: Cada vez hay más sitios
- Detección de Happy Eyeballs en la red
- Ataque ICMPv6 Redirect: man in the middle a Android, OS X & iPhone
- Implementación de ataques "Delorean" a HSTS
Autores: Fran & Rafa, equipo de https://mrlooquer.com (@mrlooquer)
Sigue Un informático en el lado del mal - Google+ RSS 0xWord

Available link for download
Monday, December 5, 2016
Hackear un Moodle con Network Packet Manipulation
Hackear un Moodle con Network Packet Manipulation
El siguiente ejercicio trata de explicar cómo se puede hackear un servidor Moodle mediante la utilizacio?n de la te?cnica de ataque de Network Packet Manipulation, tal y como ya se ha visto con WordPress, con la que se pueden modificar las consultas a MySQL al vuelo cuando las conexiones a la base de datos no esta?n cifradas. Es bastante comu?n que la aplicacio?n web y la base de datos que utiliza dicha aplicacio?n web este?n instaladas en la misma ma?quina, sí, pero en muchos caso - sobre todo en entornos corporativos - estas dos capas están separadas.
Lo primero que se debe hacer es analizar las consultas de Moodle y conocer un poco como gestiona e?ste su base de datos. En este caso el proverbio ten cerca a tus amigos para cerca au?n a tus enemigos recobra un poco valor a la inversa, es decir, tenemos que estar lo mas cerca posible de nuestra víctima en el sentido de que debemos conocerla a la perfeccio?n para poder llevar a cabo el ataque de forma sencilla y con e?xito. En el escenario para las pruebas de concepto esta?n como sigue el esquema siguiente:
Para ello se ha estudiado qué tablas hay en la base de datos que utiliza una aplicacio?n Moodle y cuáles nos podri?an interesar. Como en este caso queremos hacernos con el control del Moodle, lo que necesitaremos es saber dónde se aloja la informacio?n de los usuarios registrados en el sistema y de qué manera. Investigando un poco nos encontramos con que los usuarios se guardan en la tabla siguiente:
Una vez que se sabe qué tabla queremos adulterar debemos saber qué tipo de datos se guardan en ella, es decir, debemos conocer su esquema y qué columnas son las que nos interesan y cuáles no. Se hacen resaltar los datos que quiza?s nos puedan interesar ma?s, aunque podemos ver la cantidad de columnas que tienen la tabla que gestiona los usuarios en Moodle.
La tabla sigue a continuacio?n con el resto de columnas menos relevantes a la hora de llevar a cabo el objetivo fijado. Se observa la cantidad de datos que puede llegar a guardar Moodle sobre los usuarios de su sistema, hasta 53 columnas que, en un ataque similar podrían modificar cualquier situación, dato personal o privilegio de un usuario.
Ahora que ya sabemos todo lo necesario sobre la tabla que queremos atacar, debemos analizar las consultas que realiza Moodle sobre su base de datos MySQL. Como podemos observar con el analizador de tramas de red Wireshark, el tráfico va en texto plano porque no estamos utilizando una conexión cifrada, por lo si utilizamos la te?cnica Network Packet Manipulation podremos modificar las consultas y tomar el control de la ma?quina.
El siguiente paso a realizar seri?a acceder al panel de control de Moodle y ver qué tipo de peticiones realiza cuando accedemos a la gestio?n de usuarios. Es decir, debemos entender el conjunto de consultas que realiza Moodle al SGBDR MySQL cuando creamos un nuevo usuario o modificamos el valor de alguno ya existente.
Se debe de analizar las peticiones minuciosamente para encontrar la consulta en la que se realiza la insercio?n del nuevo usuario ya que hay multitud de ellas en el intervalo de tiempo entre la conexio?n al servidor MySQL y la desconexio?n. La instruccio?n elegida para esta demo en cuestio?n es una query SQL del tipo INSERT INTO en la tabla mdl_user y se le pasan los para?metros correspondientes recogidos del formulario web rellenado. Podríamos haber utilizado cualquier otra y modificarla completamente, pero para este ejemplo vamos a usar directamente la de inserción de nuevos usuarios. Despue?s de analizar bien las consultas damos con ella, y es la siguiente:
No cabe entera en la pantalla por lo que aquí se muestra en un editor de texto cualquiera para poder analizarla. Hay que recordar que son 53 columnas las que tiene la tabla y muchas de ellas están definidas como Not Null:
La idea principal es capturar un paquete, el cual sepamos que va a existir y modificar la consulta que lleva por la que nosotros queramos, por ejemplo una consulta UPDATE que permita modificar la contrasen?a o algu?n dato de un usuario existente con el fin de robar una cuenta.
Procedemos a ver como se podri?a cambiar cualquier dato de un usuario registrado en el sistema. Para realizarlo podemos crear filtros con Etterfilter. El primer filtro que se creara? sera? el que nos posibilite cambiar la ciudad de un usuario registrado en Moodle - de forma ana?loga se podrá hacer para cambiarle la contrasen?a -. Para ello la sentencia que debemos tener en mente sera?:
La consulta que se ha elegido como objetivo para inyectar nuestra propia consulta es la siguiente, aunque despue?s de un ana?lisis de las consultas podri?amos haber usado un monto?n más que se repiten cada vez que Moodle interactúa con su base de datos:
Se puede ver que su Packet_Length es de 43, el cual en hexadecimal es 2b. La consulta que queremos inyectar en el paquete es la siguiente:
El filtro detecta si el paquete esta destinado al puerto 3306, que es el que esta utilizando MySQL por defecto, luego decodifica el mensaje filtrando por la palabra SET SESSION. Una vez se cumplan estas dos condiciones, lo primero que hace es reemplazar el Packet_length, en el caso del paquete seleccionado es x2bx00x00, por el taman?o de la que queremos inyectar, es decir x3dx00x00. Despue?s pasamos a modificar la ciudad de un usuario en concreto, al cual le pondremos como ciudad hack3d. De la misma forma que se puede hacer sobre ciudad lo podri?amos hacer sobre cualquiera de las columnas de la tabla mdl_user. Una vez que ya tenemos el filtro llega el momento de compilarlo mediante la instruccio?n:
Una vez que el filtro esta compilado llega el momento de usarlo con Ettercap para realizar el ataque de MiTM entre el servidor web donde corre Moodle y el servidor donde corre el SGBDR MySQL mediante la instruccio?n:
![]() |
| Figura 1: Hackear Moodle con ataques de Network Packet Manipulation |
Lo primero que se debe hacer es analizar las consultas de Moodle y conocer un poco como gestiona e?ste su base de datos. En este caso el proverbio ten cerca a tus amigos para cerca au?n a tus enemigos recobra un poco valor a la inversa, es decir, tenemos que estar lo mas cerca posible de nuestra víctima en el sentido de que debemos conocerla a la perfeccio?n para poder llevar a cabo el ataque de forma sencilla y con e?xito. En el escenario para las pruebas de concepto esta?n como sigue el esquema siguiente:
![]() |
| Figura 2: El servidor Moodle y la motor SGBDR de MySQL se conectan vía red |
Para ello se ha estudiado qué tablas hay en la base de datos que utiliza una aplicacio?n Moodle y cuáles nos podri?an interesar. Como en este caso queremos hacernos con el control del Moodle, lo que necesitaremos es saber dónde se aloja la informacio?n de los usuarios registrados en el sistema y de qué manera. Investigando un poco nos encontramos con que los usuarios se guardan en la tabla siguiente:
![]() |
| Figura 3: Tabla de usuarios en Moodle |
Una vez que se sabe qué tabla queremos adulterar debemos saber qué tipo de datos se guardan en ella, es decir, debemos conocer su esquema y qué columnas son las que nos interesan y cuáles no. Se hacen resaltar los datos que quiza?s nos puedan interesar ma?s, aunque podemos ver la cantidad de columnas que tienen la tabla que gestiona los usuarios en Moodle.
![]() |
| Figura 4: Columnas de la tabla mdl_user |
La tabla sigue a continuacio?n con el resto de columnas menos relevantes a la hora de llevar a cabo el objetivo fijado. Se observa la cantidad de datos que puede llegar a guardar Moodle sobre los usuarios de su sistema, hasta 53 columnas que, en un ataque similar podrían modificar cualquier situación, dato personal o privilegio de un usuario.
![]() |
| Figura 5: Hasta 53 columnas en la tabla mdl_user |
Ahora que ya sabemos todo lo necesario sobre la tabla que queremos atacar, debemos analizar las consultas que realiza Moodle sobre su base de datos MySQL. Como podemos observar con el analizador de tramas de red Wireshark, el tráfico va en texto plano porque no estamos utilizando una conexión cifrada, por lo si utilizamos la te?cnica Network Packet Manipulation podremos modificar las consultas y tomar el control de la ma?quina.
![]() |
| Figura 6: Consultas de Moodle a MySQL en texto plano |
El siguiente paso a realizar seri?a acceder al panel de control de Moodle y ver qué tipo de peticiones realiza cuando accedemos a la gestio?n de usuarios. Es decir, debemos entender el conjunto de consultas que realiza Moodle al SGBDR MySQL cuando creamos un nuevo usuario o modificamos el valor de alguno ya existente.
![]() |
| Figura 7: Gestión de usuarios en Moodle |
Se debe de analizar las peticiones minuciosamente para encontrar la consulta en la que se realiza la insercio?n del nuevo usuario ya que hay multitud de ellas en el intervalo de tiempo entre la conexio?n al servidor MySQL y la desconexio?n. La instruccio?n elegida para esta demo en cuestio?n es una query SQL del tipo INSERT INTO en la tabla mdl_user y se le pasan los para?metros correspondientes recogidos del formulario web rellenado. Podríamos haber utilizado cualquier otra y modificarla completamente, pero para este ejemplo vamos a usar directamente la de inserción de nuevos usuarios. Despue?s de analizar bien las consultas damos con ella, y es la siguiente:
![]() |
| Figura 8: Captura del INSERT INTO de un nuevo usuario |
No cabe entera en la pantalla por lo que aquí se muestra en un editor de texto cualquiera para poder analizarla. Hay que recordar que son 53 columnas las que tiene la tabla y muchas de ellas están definidas como Not Null:
![]() |
| Figura 9: Consulta completa para dar de alta un nuevo usuario en Moodle |
La idea principal es capturar un paquete, el cual sepamos que va a existir y modificar la consulta que lleva por la que nosotros queramos, por ejemplo una consulta UPDATE que permita modificar la contrasen?a o algu?n dato de un usuario existente con el fin de robar una cuenta.
Procedemos a ver como se podri?a cambiar cualquier dato de un usuario registrado en el sistema. Para realizarlo podemos crear filtros con Etterfilter. El primer filtro que se creara? sera? el que nos posibilite cambiar la ciudad de un usuario registrado en Moodle - de forma ana?loga se podrá hacer para cambiarle la contrasen?a -. Para ello la sentencia que debemos tener en mente sera?:
UPDATE mdl_user set city = hack3d where username = zweigAntes de crear el filtro debemos hacer hincapie? en que los paquetes enviados a MySQL tienen el campo llamado Packet_Length, que le indica al motor de MySQL cuántos bytes debe leer y ejecutar en la base de datos. Por lo tanto, debemos localizar la consulta que sepamos que va a realizar Moodle, la cual sera? nuestro objetivo a adulterar, y deberemos modificar también su Packet_Length con el taman?o de nuestra consulta.
La consulta que se ha elegido como objetivo para inyectar nuestra propia consulta es la siguiente, aunque despue?s de un ana?lisis de las consultas podri?amos haber usado un monto?n más que se repiten cada vez que Moodle interactúa con su base de datos:
![]() |
| Figura 10: Consulta elegida con Packet Length de 43 bytes |
Se puede ver que su Packet_Length es de 43, el cual en hexadecimal es 2b. La consulta que queremos inyectar en el paquete es la siguiente:
UPDATE mdl_user set city = hack3d where username = zweigEsta consulta tiene un taman?o de 61, que en hexadecimal es 3d. Con toda esta informacio?n ya podemos pasar a elaborar el siguiente filtro:
![]() |
| Figura 11: Filtro creado para modificar la consulta original a Moodle |
El filtro detecta si el paquete esta destinado al puerto 3306, que es el que esta utilizando MySQL por defecto, luego decodifica el mensaje filtrando por la palabra SET SESSION. Una vez se cumplan estas dos condiciones, lo primero que hace es reemplazar el Packet_length, en el caso del paquete seleccionado es x2bx00x00, por el taman?o de la que queremos inyectar, es decir x3dx00x00. Despue?s pasamos a modificar la ciudad de un usuario en concreto, al cual le pondremos como ciudad hack3d. De la misma forma que se puede hacer sobre ciudad lo podri?amos hacer sobre cualquiera de las columnas de la tabla mdl_user. Una vez que ya tenemos el filtro llega el momento de compilarlo mediante la instruccio?n:
etterfilter -o md.ef2 mdl.filter2Antes de lanzarlo, podemos echar un ojo a la tabla en cuestión de la base de datos, para comprobar el valor que tiene la columna y poder verificar si el filtro ha tenido éxito o no en nuestra prueba:
![]() |
| Figura 12: Ciudad antes de ejecutar el ataque |
Una vez que el filtro esta compilado llega el momento de usarlo con Ettercap para realizar el ataque de MiTM entre el servidor web donde corre Moodle y el servidor donde corre el SGBDR MySQL mediante la instruccio?n:
ettercap -T -q -i-F mdl.ef2 -M ARP
Ahora lo lanzamos el ataque y esperamos a que Moodle interactúe con su base de datos MySQL y listo.
![]() |
| Figura 13: Ataque realizado |
Vemos como Ettercap ha detectado un paquete que cumple con condicio?n que le pusimos en el filtro y ejecuta los dos reemplazos programados. Volvemos a mostrar la base de datos y observamos como la columna ciudad del usuario víctima ha sido cambiada.
![]() |
| Figura 14: Dato cambiado en la base de datos de MySQL |
Creación de un usuario en Moodle con Network Packet Manipulatrion
Una vez que ya hemos entendido los ataques podemos acabar por hackear el servidor. Para finalizar la prueba de concepto completamente nos crearemos un usuario de Moodle administrador a nuestros gusto. Para ello utilizaremos el siguiente filtro:
![]() |
| Figura 15: Creación de un nuevo usuario en Moodle con Network Packet Manipulation |
Se ha hecho de forma ana?loga al anterior, esta vez el taman?o de nuestra consulta es de 230, por lo tanto remplazaremos el taman?o del original por x6ex00x00. Siguiendo todos los pasos anteriores (compilacio?n del filtro y uso del mismo con Ettercap) podremos ver el resultado en la siguiente imagen, donde hemos obtenido un nuevo usuario llamado deadp00l con la contrasen?a hasheada. En este momento el pentester tendra? acceso al panel de Moodle con este usuario recie?n creado.
![]() |
| Figura 16: Usuario creado correctamente en Moodle |
Defensa en Profundidad en Moodle
La conclusio?n final es que no solo es importante que el Moodle este debidamente fortificado en cuanto a los permisos de los usuarios dentro de la plataforma, sino que para casos en los que el escenario sea como el mostrado en esta prueba de concepto se debera?n cifrar las consultas SQL que se realicen contra el SGBD, en este caso MySQL, de forma análoga a como se explicó en este artículo con WordPress, ya que si una persona con intenciones poco bene?volas se cuela en medio de la comunicacio?n todo el servidor Moodle podri?a quedar a su merced.
Figura 17: Proteger cuentas de Moodle con Latch
Al final, mantener un escenario seguro de Moodle implica muchas cosas, no solo estas tareas explicadas en este artículo, sino realizar una fortificación completa del servidor GNU/Linux donde corra Moodle y aplicar fortificación de las cuentas de usuario, usando contraseñas robustas y segundos factores de autenticación como Latch para Moodle. La seguridad de un sistema exige aplicar protecciones a todos los niveles y que la cadena no se rompa por el menos seguro de ellos.
Autor: Jesús Largo Antón
Alumno del Master de Seguridad de la UEM
Figura 17: Proteger cuentas de Moodle con Latch
Al final, mantener un escenario seguro de Moodle implica muchas cosas, no solo estas tareas explicadas en este artículo, sino realizar una fortificación completa del servidor GNU/Linux donde corra Moodle y aplicar fortificación de las cuentas de usuario, usando contraseñas robustas y segundos factores de autenticación como Latch para Moodle. La seguridad de un sistema exige aplicar protecciones a todos los niveles y que la cadena no se rompa por el menos seguro de ellos.
Autor: Jesús Largo Antón
Alumno del Master de Seguridad de la UEM
Sigue Un informático en el lado del mal - Google+ RSS 0xWord

Available link for download
Subscribe to:
Posts (Atom)






















































