Showing posts with label con. Show all posts
Showing posts with label con. Show all posts
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
Haz tu Proyecto de Fin de Grado Máster con Eleven Paths Universidad PFC PFM
Haz tu Proyecto de Fin de Grado Máster con Eleven Paths Universidad PFC PFM
Como sabéis yo soy un amante del mundo de la educación, así que desde hace unos meses he estado pinchando a mis compañeros del laboratorio de Eleven Paths para que abriéramos una campaña de ayuda a los que jóvenes que están acabando sus estudios y tienen que elegir un Proyecto de Fin de Máster o Proyecto de Fin de Grado, y por fin este viernes se publicó la primera fase de esta iniciativa.
![]() |
| Figura 1: Haz tu Proyecto de Fin de Grado/Máster con Eleven Paths |
Hemos abierto 10 Proyectos de Fin de Grado o Máster, para 10 estudiantes que estén en esa fase de sus estudios. Lo que intentamos es ayudarte a realizarlo, al tiempo que colaboramos con material, libros, licencias de software y apoyo de uno de nuestros compañeros, para que lo lleves a buen término.
![]() |
| Figura 2: Página de los diez proyectos publicados en Eleven Paths |
Algunos de estos proyectos tienen que ver con nuestras tecnologías, otros no y simplemente son ideas nuestras que nos parecen interesantes para estudiar. Seguro que casi todas, si eres un seguidor atento de este blog o de nuestro trabajo en Eleven Paths, te sonaran. Esto son los 10 proyectos que hemos elegido, por ahora, solo para estudiantes de Universidades Españolas. Tienes más información de cada uno de ellos en la web de los proyectos.
![]() |
| Figura 3: Primeros cuatro Proyectos disponibles |
![]() |
| Figura 4: Segundos cuatro proyectos disponibles |
![]() |
| Figura 5: Proyectos 9 y 10 publicados |
Si la iniciativa funciona bien, habrá una segunda tanda de selección y seguramente lo extenderemos a otros países de latinoamérica. De momento, si quieres participar en esta campaña debes enviarnos un correo electrónico a university@11paths.com con la información siguiente:
- Nombre
- Universidad en la que estás cursando los estudios
- Titulación
- Nombre del profesor/tutor (si lo tienes ya asignado)
- Proyectos en los que estarías interesado
Con estos datos, nos pondremos en contacto contigo y te informaremos de los siguientes pasos. Y cuando lo acabes, directamente estarás en un proceso de selección de Eleven Paths para ver si acabas haciendo prácticas o trabajando con nosotros.
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
Monday, January 9, 2017
Esteganografía con ficheros de audio Enviar documentos secretos en tus canciones preferidas Esteganografía
Esteganografía con ficheros de audio Enviar documentos secretos en tus canciones preferidas Esteganografía
Las técnicas de esteganografía nos permiten ocultar elementos (mensaje, objetos, etc
) dentro de otros elementos de modo que el primero sea imperceptible a primera vista. Por ejemplo, se puede ocultar información dentro de una imagen utilizando los bits menos significativos para componer el mensaje oculto. Pues bien, en la siguiente prueba de concepto, vamos a realizar algo parecido ocultando archivos dentro del sonido de un fichero WAV.
Para entender mejor esta prueba, vamos a explicar un poco algunos conceptos básicos necesarios. Todos nosotros cuando éramos pequeños, seguro que hemos cogido plantillas de dibujo en las cuales habían unos puntos numerados, los cuales teníamos que seguir con el lápiz para formar la silueta del dibujo. Pues bien, con el sonido digital ocurre algo parecido. Cuando estamos grabando una sesión de sonido, nosotros elegimos el samplerate (muestras de valores de sonido tomadas en un segundo) y la resolución de dicha muestra (cantidad de bits con los que se miden dichos valores). De esta manera, cuando el reproductor, procese el audio grabado, lo hará como si escribiera una figura de puntos numerados, creando así las ondas sonoras que se reproducirán en nuestros altavoces.
Vale, pero entonces, ¿cómo podemos ocultar la información dentro del sonido? Pues la verdad, es que es bastante sencillo de realizar. Teniendo en cuenta, que la resolución de cada muestra puede ser de por ejemplo 16 bits, vamos a coger los 8 bits menos significativos (valores comprendidos entre 0-255, lo cual hace que la modificación de onda de sonido sea imperceptible) de la muestra para almacenar cada byte del fichero que queremos ocultar, además, éstos se van a intercalar entre el canal derecho e izquierdo (stereo) y en un intervalo de X muestras (para evitar posible deterioro en el audio).
Además, para poder tener una estructura la cual podamos desenglosar y recuperar, añadiremos las siguientes funcionalidades:
Para poder visualizar mejor lo que se pretende hacer, he creado un script en Python que utiliza la librería wave y gnupg para este fin, del cual explicaremos los bloques más importantes (recalcar que el script está diseñado para ser funcional a sabiendas de los errores que puede causar por no estar diseñado para un uso constante). El script y demás material lo podéis descargar del siguiente repositorio de github: Estewav y en este vídeo tenéis un ejemplo de su funcionamiento:
Analizando el script para ocultar documentos en ficheros wav
Sólo vamos a repasar los apartados clave del mismo y para seguirlo es muy recomendable tener el script a mano. Vamos a ver el codificador - encargado de codificar y cifrar el archivo que queremos ocultar en el archivo wav - y luego el decodificador podéis ver en el script como es exactamente la función inversa.
codificador.py
jumpsData = 10
#Espacio de muestras del framerate para la toma de datos válidos, al hacer esto, hacemos que los cambios en el audio se noten menos aun si se puede...
numFraSize = 4
# numero de bytes con el que se compondrá el número decimal final que indica la cantidad de bytes que ocupa el fichero oculto
cipher = CIPHER_ON
# establecemos si se va a cifrar o no
header = ["S", "Y", "L", "M"]
# 1 byte por cada caracter (contra menos caracteres, más posibilidades de error por accidente), pasaremos el valor de cada string a su valor ascii para poder manipularlo como bytes.
# Obtenemos los datos del fichero de audio original para que sean iguales en el audio wav destino:
channels = fileWav.getnchannels() # canales de audio (1 mono, 2 stereo)
sampleWidth = fileWav.getsampwidth() # número de bytes para las muestras del samplerate
frameRate = fileWav.getframerate() # obtenemos el número de muestras (frames) por segundo que realiza
# Si el cifrado está activo, lo ciframos (nos guardamos también el fichero cifrado original)
if cipher == CIPHER_ON:
gpg_home = "gnupg"
gpg = gnupg.GPG(gnupghome=gpg_home)
encrypted_ascii_data = gpg.encrypt_file(fileToHide, None, passphrase=passphrase_cipher, symmetric=True, output=pathFileToHideCipher)
fileToHide.close()
fileToHideEncripted = open(pathFileToHideCipher, rb)
bytesFileToHide = bytearray(fileToHideEncripted.read()) # guardamos todos los bytes del archivo en un array
fileToHideEncripted.close()
else:
bytesFileToHide = bytearray(fileToHide.read()) # guardamos todos los bytes del archivo en un array
fileToHide.close()
startIn = 0 # índice del byte del sample de audio donde se empieza a contar
# A tener en cuenta:
#
# bytem = byte menos significativo
# byteM = byte más significativo
#
# si se un sistema estereo el muestreo comienza así -> bytem_ch1 - byteM_ch1 - bytem_ch2 - byteM_ch2 .....
# si se un sistema mono el muestreo comienza así -> bytem_ch1 - byteM_ch1 - bytem_ch1 - byteM_ch1 .....
#
# ----------------
# Este será el espaciado (saltos) con el que intercalemos cada uno de los bytes de toda la trama (cabecera, etc...)
jump = (sampleWidth * jumpsData) # salto para grabar en los bytes correctos
# Al tratarse de bytes no podemos poner un número entero muy alto en cada valor, para ello separamos el número total de bytes que se tienen que guardar en 4 octetos (32bits), mediante desplazamiento binario:
# grabamos el tamaño bytes que ocupa el fichero oculto en los bytes asignados para ello
# utilizamos desplazamiento de bits para guardarlo en bloques de un octeto (byte) y luego poder recomponerlo
desplazamiento = 0
for i in range(numFraSize):
#print bytes(len(bytesFileToHide)>>24 & 0xFF) , bytes(len(bytesFileToHide)>>16 & 0xFF) , bytes(len(bytesFileToHide)>>8 & 0xFF) , bytes(len(bytesFileToHide)>>0 & 0xFF)
bytesfileWav[indexSampleWav] = len(bytesFileToHide)>>desplazamiento & 0xFF
desplazamiento += 8
indexSampleWav += jump
Tal y como están diseñados los scripts, podéis clonaros el repositorio y ejecutarlo cambiando los valores de los ficheros de origen y destino o simplemente ejecutarlo y ver los resultados. Al ejecutar el script codificador.py veremos lo siguiente en la salida:
Nos proporciona datos sobre el audio de origen como el número de canales, el ancho de muestra en bytes y el número total de frames que tiene el ficheros. Además, nos calcula en base a esos datos y en base a los saltos que tenemos configurados, cuantos bytes podemos ocultar dentro de él. A parte, nos analiza si el tamaño del fichero que queremos ocultar es inferior a la capacidad máxima y de ser así nos lo oculta, tiendo en cuenta, que si hemos activado el cifrado GPG nos lo ocultará cifrado con el passphrase que hayamos configurado en el script.
A continuación escucháis el fichero .wav original (por defecto audioBase3.wav) y a continuación escucharéis el fichero estego.wav el cual lleva oculto el fichero (por defecto oculta el archivo calico.jpg cifrado). Es muy probable que no notéis ninguna diferencia entre los dos archivos de sonido. Para hacernos una idea de la viabilidad de esta técnica de esteganografía, vamos a realizar la visualización gráfica del sonido, y para ello nos ayudaremos de la herramienta audacity. A continuación mostraré una imagen de dos tomas de tiempo de un audio musical (audioBase3.wav) y el mismo aplicándole la esteganografía (estego.wav).
Como podéis ver, ni si quiera aumentando hasta ver los puntos de muestreo podemos detectar una diferencia visual apreciable (menos aún nuestro oído). Para acercarnos más y poder ver algo con más claridad, en las siguientes dos imágenes pondré un captura de audio con una frecuencia constante de 1Hz y otra imagen de audio nulo (plano), para que podamos ver que aunque la diferencia de valores es minúscula, estos, claramente existen.
Aquí ya podemos ver pequeños cambios en el alisado de la onda, pero tenemos que tener en cuenta que la onda de arriba es una onda perfecta generada por código y en la grabación de audio real no es tan perfecto.
En este último ejemplo, al ser un audio totalmente nulo, podemos ver sin problemas la dimensión que tiene un byte de datos dentro del audio, el cual es insignificante, ya que hay que tener en cuenta que todo el audio es nulo excepto el dato oculto. Y esto es todo. Espero que os haya gustado y hasta la próxima.
Saludos!
Autor: Christian Prieto Bustamante
![]() |
| Figura 1: Esteganografía con ficheros de audito |
Para entender mejor esta prueba, vamos a explicar un poco algunos conceptos básicos necesarios. Todos nosotros cuando éramos pequeños, seguro que hemos cogido plantillas de dibujo en las cuales habían unos puntos numerados, los cuales teníamos que seguir con el lápiz para formar la silueta del dibujo. Pues bien, con el sonido digital ocurre algo parecido. Cuando estamos grabando una sesión de sonido, nosotros elegimos el samplerate (muestras de valores de sonido tomadas en un segundo) y la resolución de dicha muestra (cantidad de bits con los que se miden dichos valores). De esta manera, cuando el reproductor, procese el audio grabado, lo hará como si escribiera una figura de puntos numerados, creando así las ondas sonoras que se reproducirán en nuestros altavoces.
![]() |
| Figura 2: Los puntos indican en qué momento del eje X (tiempo) se ha tomado una muestra de sonido, y en eje Y se dibuja la resolución captada en ese momento (negativo o positivo) |
Vale, pero entonces, ¿cómo podemos ocultar la información dentro del sonido? Pues la verdad, es que es bastante sencillo de realizar. Teniendo en cuenta, que la resolución de cada muestra puede ser de por ejemplo 16 bits, vamos a coger los 8 bits menos significativos (valores comprendidos entre 0-255, lo cual hace que la modificación de onda de sonido sea imperceptible) de la muestra para almacenar cada byte del fichero que queremos ocultar, además, éstos se van a intercalar entre el canal derecho e izquierdo (stereo) y en un intervalo de X muestras (para evitar posible deterioro en el audio).
![]() |
| Figura 3: Valores de los bits de audio en 16bits |
![]() |
| Figura 4: Valores máximos por profundidad de bits: |
Además, para poder tener una estructura la cual podamos desenglosar y recuperar, añadiremos las siguientes funcionalidades:
- Generaremos una cabecera dentro del audio modificado para poder identificar que ahí se está escondiendo algo (con un tamaño que determinaremos nosotros).
- Un byte para indicar si el fichero está cifrado con GPG (Añadir una capa de cifrado al documento oculto nos dará más garantía)
- Una trama de 4 bytes para identificar el tamaño del fichero a extraer (número de 32bits, además, nunca llegará a ser tar alto por las limitaciones de un fichero wav, pero 24 bits podrían quedarse cortos).
- Y finalmente la trama de bytes del fichero oculto.
![]() |
| Figura 5: Estructura de la trama de datos ocultos |
Para poder visualizar mejor lo que se pretende hacer, he creado un script en Python que utiliza la librería wave y gnupg para este fin, del cual explicaremos los bloques más importantes (recalcar que el script está diseñado para ser funcional a sabiendas de los errores que puede causar por no estar diseñado para un uso constante). El script y demás material lo podéis descargar del siguiente repositorio de github: Estewav y en este vídeo tenéis un ejemplo de su funcionamiento:
Figura 6: Funcionamiento de Estewav
Sólo vamos a repasar los apartados clave del mismo y para seguirlo es muy recomendable tener el script a mano. Vamos a ver el codificador - encargado de codificar y cifrar el archivo que queremos ocultar en el archivo wav - y luego el decodificador podéis ver en el script como es exactamente la función inversa.
codificador.py
jumpsData = 10
#Espacio de muestras del framerate para la toma de datos válidos, al hacer esto, hacemos que los cambios en el audio se noten menos aun si se puede...
numFraSize = 4
# numero de bytes con el que se compondrá el número decimal final que indica la cantidad de bytes que ocupa el fichero oculto
cipher = CIPHER_ON
# establecemos si se va a cifrar o no
header = ["S", "Y", "L", "M"]
# 1 byte por cada caracter (contra menos caracteres, más posibilidades de error por accidente), pasaremos el valor de cada string a su valor ascii para poder manipularlo como bytes.
# Obtenemos los datos del fichero de audio original para que sean iguales en el audio wav destino:
channels = fileWav.getnchannels() # canales de audio (1 mono, 2 stereo)
sampleWidth = fileWav.getsampwidth() # número de bytes para las muestras del samplerate
frameRate = fileWav.getframerate() # obtenemos el número de muestras (frames) por segundo que realiza
# Si el cifrado está activo, lo ciframos (nos guardamos también el fichero cifrado original)
if cipher == CIPHER_ON:
gpg_home = "gnupg"
gpg = gnupg.GPG(gnupghome=gpg_home)
encrypted_ascii_data = gpg.encrypt_file(fileToHide, None, passphrase=passphrase_cipher, symmetric=True, output=pathFileToHideCipher)
fileToHide.close()
fileToHideEncripted = open(pathFileToHideCipher, rb)
bytesFileToHide = bytearray(fileToHideEncripted.read()) # guardamos todos los bytes del archivo en un array
fileToHideEncripted.close()
else:
bytesFileToHide = bytearray(fileToHide.read()) # guardamos todos los bytes del archivo en un array
fileToHide.close()
startIn = 0 # índice del byte del sample de audio donde se empieza a contar
# A tener en cuenta:
#
# bytem = byte menos significativo
# byteM = byte más significativo
#
# si se un sistema estereo el muestreo comienza así -> bytem_ch1 - byteM_ch1 - bytem_ch2 - byteM_ch2 .....
# si se un sistema mono el muestreo comienza así -> bytem_ch1 - byteM_ch1 - bytem_ch1 - byteM_ch1 .....
#
# ----------------
# Este será el espaciado (saltos) con el que intercalemos cada uno de los bytes de toda la trama (cabecera, etc...)
jump = (sampleWidth * jumpsData) # salto para grabar en los bytes correctos
# Al tratarse de bytes no podemos poner un número entero muy alto en cada valor, para ello separamos el número total de bytes que se tienen que guardar en 4 octetos (32bits), mediante desplazamiento binario:
# grabamos el tamaño bytes que ocupa el fichero oculto en los bytes asignados para ello
# utilizamos desplazamiento de bits para guardarlo en bloques de un octeto (byte) y luego poder recomponerlo
desplazamiento = 0
for i in range(numFraSize):
#print bytes(len(bytesFileToHide)>>24 & 0xFF) , bytes(len(bytesFileToHide)>>16 & 0xFF) , bytes(len(bytesFileToHide)>>8 & 0xFF) , bytes(len(bytesFileToHide)>>0 & 0xFF)
bytesfileWav[indexSampleWav] = len(bytesFileToHide)>>desplazamiento & 0xFF
desplazamiento += 8
indexSampleWav += jump
Tal y como están diseñados los scripts, podéis clonaros el repositorio y ejecutarlo cambiando los valores de los ficheros de origen y destino o simplemente ejecutarlo y ver los resultados. Al ejecutar el script codificador.py veremos lo siguiente en la salida:
![]() |
| Figura 7: Salida del codificador |
Nos proporciona datos sobre el audio de origen como el número de canales, el ancho de muestra en bytes y el número total de frames que tiene el ficheros. Además, nos calcula en base a esos datos y en base a los saltos que tenemos configurados, cuantos bytes podemos ocultar dentro de él. A parte, nos analiza si el tamaño del fichero que queremos ocultar es inferior a la capacidad máxima y de ser así nos lo oculta, tiendo en cuenta, que si hemos activado el cifrado GPG nos lo ocultará cifrado con el passphrase que hayamos configurado en el script.
A continuación escucháis el fichero .wav original (por defecto audioBase3.wav) y a continuación escucharéis el fichero estego.wav el cual lleva oculto el fichero (por defecto oculta el archivo calico.jpg cifrado). Es muy probable que no notéis ninguna diferencia entre los dos archivos de sonido. Para hacernos una idea de la viabilidad de esta técnica de esteganografía, vamos a realizar la visualización gráfica del sonido, y para ello nos ayudaremos de la herramienta audacity. A continuación mostraré una imagen de dos tomas de tiempo de un audio musical (audioBase3.wav) y el mismo aplicándole la esteganografía (estego.wav).
![]() |
| Figura 8: Audio de fichero original y con esteganografía |
Como podéis ver, ni si quiera aumentando hasta ver los puntos de muestreo podemos detectar una diferencia visual apreciable (menos aún nuestro oído). Para acercarnos más y poder ver algo con más claridad, en las siguientes dos imágenes pondré un captura de audio con una frecuencia constante de 1Hz y otra imagen de audio nulo (plano), para que podamos ver que aunque la diferencia de valores es minúscula, estos, claramente existen.
![]() |
| Figura 9: Imagen de toma con 1Hz con un ciclo completo. |
Aquí ya podemos ver pequeños cambios en el alisado de la onda, pero tenemos que tener en cuenta que la onda de arriba es una onda perfecta generada por código y en la grabación de audio real no es tan perfecto.
![]() |
| Figura 10: Imagen de toma nula (silencio completo) |
En este último ejemplo, al ser un audio totalmente nulo, podemos ver sin problemas la dimensión que tiene un byte de datos dentro del audio, el cual es insignificante, ya que hay que tener en cuenta que todo el audio es nulo excepto el dato oculto. Y esto es todo. Espero que os haya gustado y hasta la próxima.
Saludos!
Autor: Christian Prieto Bustamante
Sigue Un informático en el lado del mal - Google+ RSS 0xWord

Available link for download
Labels:
audio,
canciones,
con,
de,
documentos,
en,
enviar,
esteganografãa,
ficheros,
preferidas,
secretos,
tus
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
Sunday, November 27, 2016
Metasploit Hookear con NetRipper los navegadores para robar las contraseñas de Facebook Gmail o Twitter
Metasploit Hookear con NetRipper los navegadores para robar las contraseñas de Facebook Gmail o Twitter
En la pasada Defcon 23 se liberó una aplicación denominada NetRipper. Esta aplicación es una herramienta de post-explotación que permite interceptar el tráfico de red y, por ejemplo, es capaz de capturar tanto el tráfico en plano y el cifrado. En otras palabras, podremos hookear los navegadores de la máquina y robar las credenciales de Gmail, Facebook, Twitter u Outlook, ya que estamos en un nivel inferior, antes de que el HSTS haga su juego. También podremos extraer cookies de sesión, por lo que si la víctima tiene algún servicio al que se conecta con cookie persistente se podría sustraer.
La herramienta tiene una versión para Windows con un binario o .EXE, una versión para PowerShell y otra versión en forma de módulo de Metasploit. A mí me llamó la atención tanto el script de PowerShell, ya que se podría utilizar con el Powershell Empire y utilizarlo como script de post-explotación y la versión de Metasploit, ya que junto a una sesión de Meterpreter podríamos hacer grandes cosas. Para este artículo decidí orientarlo hacia el caso de Metasploit.
Instalación de NetRipper en Metasploit
Tal y como se puede leer en el Github de la herramienta, su instalación es básica, simplemente descargar los ficheros, por ejemplo, con un git clone. Después, hay que seguir los pasos que se detallan a continuación:
Cómo se puede ver el proceso de instalación o de adición al framework es sencillo. Antes de continuar con el artículo vamos a pararnos a visualizar la siguiente imagen sobre dónde NetRipper se inyecta y cómo funciona.
Se puede consultar más detalles sobre la charla de la Defcon y sobre el funcionamiento de la herramienta en la dirección URL de las diapositivas de Ionut Popescu, autor de la investigación y de la herramienta.
PoC: Hookeando navegadores y obteniendo contraseñas de Gmail o Facebook
La prueba de concepto la comenzamos en el estado en el que el auditor o el atacante ya tienen la sesión de Meterpreter conseguida. Sin perder la sesión ejecutamos el comando background y, posteriormente, cargamos el módulo de netripper con la instrucción use post/windows/gather/netripper. Tal y como se puede ver en la imagen, el módulo ofrece diferentes opciones, a través de sus atributos.
Hay varios atributos que tenemos que configurar. El primero, y el requerido sí o sí, es el identificador de sesión. Tenemos que indicar por cual sesión queremos ejecutar el módulo de post-explotación. En esta prueba de concepto utilizaremos la sesión número 1 conseguida previamente para ejecutar el código.
Por otro lado, hay que configurar el atributo PROCESSNAMES, indicando cual es el nombre del proceso al que NetRipper debe hacer el hook. Para este ejemplo, utilizaremos iexplore.exe, para ello ejecutamos set PROCESSNAMES iexplore.exe. Podríamos separar por comas e intentar hacer hooking a más procesos que nos interesasen.
Una vez configurado se puede ejecutar el comando run y el módulo será ejecutado a través de la sesión de Meterpreter. El módulo listará los procesos y se quedará con los procesos que encajen con los valores indicados en el atributo PROCESSNAMES, tal y como se puede ver en la imagen.
En este instante vemos que tenemos 2 procesos de Internet Explorer hookeados. En la siguiente ruta de la máquina comprometida se comenzará a escribir ficheros de texto con las peticiones HTTP que el navegador envía, justo antes de que se cifren.
Si echamos un ojo, por ejemplo al fichero que comienza con el PID_iexplore.exe_EncryptMessage.txt podemos ver las peticiones en texto plano. La máquina víctima es un Windows 8.1, se puede ver en la petición a través del User-Agent. La petición POST queda al descubierto con NetRipper y obtenemos el usuario y contraseña.
Es cierto que un KeyLogger podría darnos un resultado similar, y Metasploit también tiene esta posibilidad. Lo que no lograríamos sería la limpieza y todos los datos que obtenemos con NetRipper, ya que como se mencionó anteriormente, quizá solo podamos robar una cookie y eso ya es mucho. Si la víctima visita Facebook y hace login o simplemente tiene una sesión abierta, le podríamos robar la cookie de sesión.
En la siguiente anterior vemos cómo robar la contraseña de Facebook, lo único que tenemos que hacer es visualizar el fichero indicado anteriormente. Como nota aclaratoria, con Meterpreter podremos descargar los ficheros de texto con esta información que NetRipper genera en la máquina comprometida. El comando que debemos utilizar es download [ruta origen] [ruta destino].
Una PoC de NetRipper para robar cuentas de Facebook en vídeo
En el siguiente vídeo tienes un ejemplo de cómo un Windows 8.1 es vulnerado con Metasploit a través de una versión vulnerable de Easy File Sharing FTP. Una vez que el equipo con Windows 8.1 es controlado con Meterpreter, se utiliza el módulo de post-explotación de NetRipper para hookear Internet Explorer y robar las credenciales de un inicio de sesión en Facebook.
NetRipper es una potente herramienta integrada con el framework de Metasploit, lo cual hace que un proceso complejo o que pueda llevarnos más tiempo en una auditoría podemos realizarlo rápidamente. Interesante herramienta que debemos llevar en la mochila en una auditoría interna.
Autor: Pablo González Pérez (@pablogonzalezpe)
Escritor de los libros "Metasploit para Pentesters", "Ethical Hacking" y Pentesting con Powershell
![]() |
| Metasploit: Cómo hookear con NetRipper los navegadores para robar las contraseñas |
La herramienta tiene una versión para Windows con un binario o .EXE, una versión para PowerShell y otra versión en forma de módulo de Metasploit. A mí me llamó la atención tanto el script de PowerShell, ya que se podría utilizar con el Powershell Empire y utilizarlo como script de post-explotación y la versión de Metasploit, ya que junto a una sesión de Meterpreter podríamos hacer grandes cosas. Para este artículo decidí orientarlo hacia el caso de Metasploit.
Instalación de NetRipper en Metasploit
Tal y como se puede leer en el Github de la herramienta, su instalación es básica, simplemente descargar los ficheros, por ejemplo, con un git clone. Después, hay que seguir los pasos que se detallan a continuación:
| Figura 2: Instalación de NetRipper en Metasploit |
Cómo se puede ver el proceso de instalación o de adición al framework es sencillo. Antes de continuar con el artículo vamos a pararnos a visualizar la siguiente imagen sobre dónde NetRipper se inyecta y cómo funciona.
| Figura 3: Esquema de hooking de NetRipper |
Se puede consultar más detalles sobre la charla de la Defcon y sobre el funcionamiento de la herramienta en la dirección URL de las diapositivas de Ionut Popescu, autor de la investigación y de la herramienta.
PoC: Hookeando navegadores y obteniendo contraseñas de Gmail o Facebook
La prueba de concepto la comenzamos en el estado en el que el auditor o el atacante ya tienen la sesión de Meterpreter conseguida. Sin perder la sesión ejecutamos el comando background y, posteriormente, cargamos el módulo de netripper con la instrucción use post/windows/gather/netripper. Tal y como se puede ver en la imagen, el módulo ofrece diferentes opciones, a través de sus atributos.
| Figura 4: Opciones de NetRipper |
Hay varios atributos que tenemos que configurar. El primero, y el requerido sí o sí, es el identificador de sesión. Tenemos que indicar por cual sesión queremos ejecutar el módulo de post-explotación. En esta prueba de concepto utilizaremos la sesión número 1 conseguida previamente para ejecutar el código.
Por otro lado, hay que configurar el atributo PROCESSNAMES, indicando cual es el nombre del proceso al que NetRipper debe hacer el hook. Para este ejemplo, utilizaremos iexplore.exe, para ello ejecutamos set PROCESSNAMES iexplore.exe. Podríamos separar por comas e intentar hacer hooking a más procesos que nos interesasen.
Una vez configurado se puede ejecutar el comando run y el módulo será ejecutado a través de la sesión de Meterpreter. El módulo listará los procesos y se quedará con los procesos que encajen con los valores indicados en el atributo PROCESSNAMES, tal y como se puede ver en la imagen.
| Figura 5: Hooking en Internet Explorer |
En este instante vemos que tenemos 2 procesos de Internet Explorer hookeados. En la siguiente ruta de la máquina comprometida se comenzará a escribir ficheros de texto con las peticiones HTTP que el navegador envía, justo antes de que se cifren.
| Figura 6: Ficheros con peticiones HTTP realizadas |
Si echamos un ojo, por ejemplo al fichero que comienza con el PID_iexplore.exe_EncryptMessage.txt podemos ver las peticiones en texto plano. La máquina víctima es un Windows 8.1, se puede ver en la petición a través del User-Agent. La petición POST queda al descubierto con NetRipper y obtenemos el usuario y contraseña.
| Figura 7: Fichero con petición HTTP que almacena usuario y contraseña de Google |
Es cierto que un KeyLogger podría darnos un resultado similar, y Metasploit también tiene esta posibilidad. Lo que no lograríamos sería la limpieza y todos los datos que obtenemos con NetRipper, ya que como se mencionó anteriormente, quizá solo podamos robar una cookie y eso ya es mucho. Si la víctima visita Facebook y hace login o simplemente tiene una sesión abierta, le podríamos robar la cookie de sesión.
| Figura 8: Credenciales de Facebook en sesión HTTP |
En la siguiente anterior vemos cómo robar la contraseña de Facebook, lo único que tenemos que hacer es visualizar el fichero indicado anteriormente. Como nota aclaratoria, con Meterpreter podremos descargar los ficheros de texto con esta información que NetRipper genera en la máquina comprometida. El comando que debemos utilizar es download [ruta origen] [ruta destino].
Una PoC de NetRipper para robar cuentas de Facebook en vídeo
En el siguiente vídeo tienes un ejemplo de cómo un Windows 8.1 es vulnerado con Metasploit a través de una versión vulnerable de Easy File Sharing FTP. Una vez que el equipo con Windows 8.1 es controlado con Meterpreter, se utiliza el módulo de post-explotación de NetRipper para hookear Internet Explorer y robar las credenciales de un inicio de sesión en Facebook.
Figura 9: Robo de cuenta de Facebook con NetRipper
NetRipper es una potente herramienta integrada con el framework de Metasploit, lo cual hace que un proceso complejo o que pueda llevarnos más tiempo en una auditoría podemos realizarlo rápidamente. Interesante herramienta que debemos llevar en la mochila en una auditoría interna.
Autor: Pablo González Pérez (@pablogonzalezpe)
Escritor de los libros "Metasploit para Pentesters", "Ethical Hacking" y Pentesting con Powershell
Sigue Un informático en el lado del mal - Google+ RSS 0xWord

Available link for download
Labels:
con,
contraseã±as,
de,
facebook,
gmail,
hookear,
las,
los,
metasploit,
navegadores,
netripper,
o,
para,
robar,
twitter
Subscribe to:
Comments (Atom)









































