Miscellaneous

domingo, 3 de julio de 2016

Aprendiendo el aeiou de radare2

En esta entrada les voy a compartir el aeiou de radare2, es decir, hablare acerca de algunos comandos que ahorraran la curva de aprendizaje a aquellas personas que se están animando a entrar al mundo del reversing y cuya opción para desensamblar, depurar, analizar y manipular archivos binarios fue nada más y nada menos que radare2, herramienta de código abierto que tiene la capacidad de ejecutarse desde una terminal y ofrecer unos resultados más que satisfactorios, pero bueno, basta de tanto blah, blah, blah y pasemos a lo que corresponde.

Antes que nada debemos tener instalado radare2, cuya ultima versión esta disponible en su repositorio GitHub. Y bueno, como soy una persona que cree que la mejor forma de aprender es de manera practica, usare este ejecutable (ccf58978584aacfed3ea9917e153e36b) para ejemplificar todos los comandos que mencionare enseguida.

Comando de ayuda y evaluación matemática ( ? )

 

Este comando es uno de los más simples y mi favorito, ya que radare2 tiene un comando asignado para cada letra del alfabeto, es decir, de la a-z, memorizar y recordar cada uno, es algo muy difícil, pero tranquil@s porque basta con incluir al final de un comando el símbolo ?, para obtener una descripción de lo que hace dicho comando específicamente, pero bueno, dijimos que pondremos en practica lo que se menciona en esta entrada, así que carguemos el ejecutable en radare2 usando el comando r2.



Como podemos ver el comando por si solo nos arroja una descripción de todos los comandos básicos de r2, pero si probamos ahora con a? se mostrara solo la ayuda para el comando a específicamente:


Además de ser un comando para obtener ayuda, también sirve como comando de evaluación matemática, y lo vemos claramente en la siguiente imagen:

Nótese el espacio que hay después del signo ?, si se omite, el comando se interpretara como comando de ayuda.

Comandos para obtener información del fichero



Radare2 cuenta con algunos comandos que permiten conocer información de un archivo binario, entre estos comandos se encuentran:

iI -> Comando que nos lista gran cantidad de información acerca del archivo binario, entre esa información se encuentran, el tipo de binario, arquitectura, lenguaje, estado de las contra-medidas vs exploiting, etc.


Si solo necesitamos conocer un valor especifico, podemos usar el operador ~ seguido de iI para buscar coincidencias como lo hace el comando grep en linux, es decir, si solo queremos saber el tipo de binario que es nuestro fichero usamos iI~bintype, o si queremos saber si tiene activado el bit nx usamos iI~nx:


ii -> Este comando nos muestra información de todos los objetos que son importados por el archivo binario:

Nuestro ejecutable realiza 3 importaciones y printf es una de ellas.

il -> Nos lista las librerías que utiliza nuestro archivo binario:

ie -> Este comando nos muestra el punto de entrada del archivo binario, es decir, la dirección de la primera instrucción que se ejecuta:

iM -> Parecido al comando anterior pero esta vez lo que se obtiene es la dirección de main:


is -> Lista todos los símbolos del binario:

iz -> Con este comando obtenemos una lista de las strings que contiene el archivo binario:

 

Comandos de búsqueda 


Radare2 también cuenta con una serie de comandos de búsqueda, entre los más útiles se encuentran:

/ string -> Este comando nos lista todas las direcciones en las que se encuentra una coincidencia con la string que se pasa como parámetro:

/a instrucción -> Es un comando que permite conocer todas las direcciones en las que se encuentra una coincidencia con la instrucción en ensamblador que se pasa como parámetro, es decir, si queremos listar todas las instrucciones jmp eax que contiene el fichero binario tendríamos que usar /a jmp eax:



/A tipo_de_instrucción-> tiene un comportamiento muy similar al comando anterior, solo que esta vez se obtiene la lista de direcciones que coinciden con el tipo de instrucción que se paso como parámetro, en otras palabras, si nosotros queremos obtener los saltos (jmp) que se encuentran en el desensamblado del fichero binario, tenemos que usar /A jmp, aunque no lo parezca, este es un comando muy diferente al anterior, ya que /a jmp eax solo lista las direcciones donde se encuentra un jmp eax exactamente, mientras que /A jmp lista cualquier tipo de salto que se encuentre en el archivo binario, es decir, jmp eax, jmp ebx, jmp ecx, jmp edx, etc.

/R [filter] -> Este comando es muy útil para un exploiter (Creador de exploits), ya que muestra un listado de gadgets ROP, es decir, conjunto de instrucciones que finalizan con la instrucción RET, JMP, o CALL y que al ser enlazadas pueden facilitar la creación de un exploit funcional:

iS | grep perm=..w -> Con esta instrucción se obtiene un listado de todas las secciones del archivo binario en las que se permite la escritura:


iS | grep perm=...x -> Similar a la instrucción anterior, pero esta vez se listan las secciones del binario que son ejecutables:


 

Comandos para análisis,desensamblado,búsqueda de referencias, manejo de funciones, argumentos y variables locales


aaa -> Este comando analiza todo y auto-nombra las funciones, es el primer comando que debemos ejecutar antes que todos los que se mencionan enseguida.

afl -> Nos lista todas las funciones que fueron analizadas por el comando aaa:


s [nombre_función|dirección_función] -> Para poder abordar o posicionarnos en alguna de las funciones que lista afl podemos usar este comando, es decir, si queremos abordar la función sym.main tenemos dos posibilidades y son las siguientes:


algo parecido debe usarse si la función que queremos abordar es sym.aeiou:


podemos ver que lo único que cambio fue el nombre y la dirección de la función.

pdf -> Este comando desensambla la función que abordamos usando el comando s, es decir si ejecutamos s sym.main y después ejecutamos el comando pdf lo que obtendremos sera el código  desensamblado de dicha función:


pdf@[nombre_función|dirección_función] -> Si queremos ahorrarnos el uso del comando s, o no tenemos la intención de abordar una función diferente a la que actualmente estamos abordando podemos usar este comando, he aquí un ejemplo:


Ahora bien, si lo que se desea es solamente obtener una N cantidad de lineas del código desensamblado, podemos optar por usar pd [N]@[función_name]:


axt [nombre_función] -> Este comando nos muestra las referencias que existen hacia una función, es decir, instrucciones en código ensamblador desde las cuales es llamada una función, por ejemplo, si queremos saber las direcciones desde las que se efectúa una llamada a printf podemos usar axt sym.imp.printf:


En la imagen podemos observar que en nuestro fichero binario se efectúan 3 llamadas a la función printf (en las direcciones 0x400582, 0x400560 y 0x400544) para comprobar que esto es correcto, podemos hacer uso del comando pd que ya mencionamos anteriormente:



Y en efecto, en esas 3 direcciones se efectúa una llamada a la función printf.


afa -> Si queremos conocer los argumentos de una función tenemos que usar este comando, por ejemplo, si queremos conocer los argumentos de la función sym.aeiou debemos hacer lo que se muestra a continuación:


afv -> Este comando ofrece también un listado, solo que esta vez lo que se lista son las variables locales de la función:


afn new_name_function->  Con esta instrucción podemos cambiar el nombre de una función:


afan old_name new_name-> Si lo que se desea es renombrar algún argumento de la función podemos usar este comando:



afvn old_name new_name-> Sirve para renombrar las variables locales de una función:


gráficos y comentarios
 

Como no podía faltar, radare2 también nos ofrece un ambiente más ameno y cómodo llamado visual mode, que si bien no es nada cercano a una GUI, si que puede ser algo mucho más sencillo de usar que la CLI una vez te acostumbras. 

para acceder a este modo solo basta con tipear el comando V, de igual manera que en la CLI el comando ? nos muestra la ayuda para este modo:



Y bueno ahí esta, no entrare en detalle con cada uno de los comandos pero si mencionare uno de los comandos que más util nos puede ser y ese es:

VV@[function_name] -> Este comando nos muestra un gráfico (ascii art) de una función, por ejemplo, si queremos ver el grafico de la función sym.aeiou usamos VV@sym.aeiou y obtendremos algo como esto:

Al momento de estar visualizando el gráfico disponemos de algunos atajos de teclado que podemos obtener al oprimir ?, algunos de estos atajos son:
  • asdw -mueve el grafo completo
  • hjkl - mueve un nodo (también podemos usar las teclas de dirección)
  • tab/TAB - selecciona next/previous node
  • t/f -Sigue camino verdadero/falso
  • . -centra el gráfico
  • q -salir
Y bueno ya para terminar este extenso recorrido aprendamos algo sobre los comentarios en radare2:

CC -> Nos lista todos los comentarios que contiene nuestro fichero objeto.


¿y si lo queremos es agregar un comentario? simple, solo basta con usar el comando s para posicionarnos en la dirección donde queremos agregar el comentario y después usar CC [Comentario] y listo:


Como vemos en la imagen lo que se hizo primero fue abordar la dirección 0x004004ef para después agregar el comentario "llamada a función aeiou" en dicha dirección usando CC, otra manera de obtener el mismo resultado es usar el comando CCu [Comentario]@[addr]:



Y bueno, eso es todo... claro que no son todos los comandos ni mucho menos todas las posibilidades que ofrece este excelente framework llamado Radare2, pero espero que sirva de algo a aquellos que recién se inician a experimentar con el, sin más que decir, happy hacking :).

domingo, 22 de mayo de 2016

Listado de sitios web financieros que facilitan las campañas de phishing al no usar cabeceras de seguridad HTTP.

En esta entrada les comparto una lista de sitios web financieros que por no hacer uso de las cabeceras de seguridad HTTP correspondientes, hacen más fácil la tarea a los creadores de campañas de phishing.
 

https://mybank.icbc.com.cn/icbc/newenperbank/regist.jsp
https://healthbenefits.wellsfargo.com/
https://wca.wellsfargo.com/wca/fpc/displayForgotPassword?currentAction=Forgot%20Password&appId=appwats&targetUrl=https://wats.wellsfargo.com:443/WATS/Pages/IntermediateLogin.aspx
https://login.morganstanleyclientserv.com/
https://services.im.hsbc.com/site/login/login?cam30_target=https%3A%2F%2Fservices.im.hsbc.com%3A443%2Fsite%2Fclient%2Fsecure%2Findex
https://www.bancoinbursa.com
https://www.banjenetbanjercito.com.mx/bp_indice.html
http://demo.chase.com/presents/preview/pnt/non_pnt/login2.html
https://bancanet.banamex.com/JPS/portal/demo/htmls/01-Log-in.html
http://www.monex.com.mx
http://www.santander.com.mx
https://www.espaciobanorte.com/portal/login/
https://www.banamex.com
http://mundotdc.bancomer.com.mx
http://mundotdc.bancomer.com.mx
https://www.pasionporlaspersonas.bbva.com
https://brandcenter.bbva.com
http://accionistaseinversores.bbva.com/TLBB/tlbb/bbvair/esp/contact/cont/index.jsp
http://ofertaempleomx.bbva.com
http://shareholdersandinvestors.bbva.com/
https://net.banorte.com/mail/main
https://saf.banorte.com/
https://via.banorte.com/CargosPeriodicos/login.zul
http://travelspecialists.americanexpress.com
https://www.amexglobalbusinesstravel.com/
https://www.bancoazteca.com.mx
https://www.bancoazteca.com.mx/PortalBancoAzteca/publica/misucursal/olvidaste/paso1.jsp
https://www.bancoazteca.com.mx/eBanking/contrasena/recuperacionHuella.do;jsessionid=01efb9ddec1decb59cfcbda5394d.ebank6?method=inicio
https://www.bafamsa.com/

domingo, 15 de mayo de 2016

Comprometiendo la privacidad de un usuario con una sencilla extensión para chrome

Antes que nada quiero dejar en claro que todo lo expuesto a continuación es para fines educativos y no para uso indebido o para fines lucrativos. No me hago responsable del mal uso o de las consecuencias que puedan llegar a suceder si el método aquí descrito es aplicado de manera errónea o incorrecta. 

Ahora sí, empecemos :)..

Primero que nada, ¿Qué es una extensión para chrome?, simple, y tal como lo define google, son "pequeños programas que incorporan nuevas funciones al navegador para personalizar tu experiencia de navegación.", es decir, son esos pequeños programas que pueden cumplir funciones tales como:
  • bloqueo de publicidad (Adblock Plus)
  • protección contra sitios web fraudulentos o con mala reputación (Avast Online Security)
  • etc.
Pues sí, son esas cositas que muchas veces agregamos a nuestro navegador chrome desde este sitio web sin ser conscientes de lo que ello implica.

Pero tranqui sigue leyendo, y te aseguro, que la próxima vez que  veas una extensión que te dice te hará ver como todo un 5up3r h4x0r N30, te sacara de la soltería y te hará billonario, te la pensaras dos veces y no la instalaras ;).

Como dije que esto se expone solo con fines educativos, no publicare una extensión en la store de google, esto para evitar que la aplicación sea instalada por alguien que no leyo este post antes, y por lo tanto desconoce lo que puede llegar a suceder si la tiene instalada (Naaa la verdad solo quiero ahorrarme 5$), pero la dejare disponible para descargar  desde este link.

bueno el primer paso para lograr el cometido es obvio, tienes que descargar la extensión, una vez descargada sigue estos pasos para instalarla:
  1. Escribe en tu barra de direcciones chrome://extensions/ y da enter
  2. Veras un listado con todas las extensiones que tu navegador tiene instaladas, ahora tienes que arrastrar a esta pantalla la extensión que descargaste y listo, ya haz instalado la extensión que te hará ver como un 5up3r h4x0r N30, te conseguirá novia y te hará billonario.
No te creas jeje :P, La verdad la aplicación a simple vista no hace nada del otro mundo, solo te cambia el fondo de todos los sitios web que visitas, cambia el color de letra y remueve todas las imágenes, es decir hace que las paginas web que visitas se vean así:

pero, ¿Qué te asegura que eso es todo lo que hace? nada, solo un análisis exhaustivo de dicha extensión te lo puede decir, así que a ello, vayamos nuevamente al listado de extensiones que tenemos instaladas en nuestro navegador (chrome://extensions) copiemos el ID (fnogiidjfnmmjllpiifaifkbcgagcdim) de la extensión llamada "5up3r h4x0r N30", busquemos la carpeta con ese nombre dentro de nuestro sistema (Un locate 'fnogiidjfnmmjllpiifaifkbcgagcdim' en sistemas basados en linux bastara), una vez encontrado analicemos primeramente el archivo manifest.json:
Este archivo es el único que debe estar presente en toda WebExtension. contiene los metadatos básicos acerca de la extensión, como su nombre, versión, y los permisos que esta requiere. También provee los enlaces a otros archivos de la extensión que analizaremos más adelante.

Las partes más interesantes en un manifest.json son los permisos y los enlaces a otros archivos .js, como podemos ver, nuestra aplicación llamada

"5up3r h4x0r N30" tiene permisos para:
  1. Alterar todos los sitios web que visitamos (http://*/*/ y https://*/*/)
  2. mostrar notificaciones
  3. e interactuar con el sistema de pestañas del navegador.
Otra de las secciones interesantes del manifest.json es la que se encarga de la lógica de ejecución de nuestra extensión, es decir, background, la cual enlaza a un archivo llamado background.js (No puedo explicar a detalle como es la anatomía de un manifest.json aquí, pero si quieres puedes profundizar leyendo la doc oficial de google).

Bueno, ahora que sabemos que nuestra extensión puede alterar todos los sitios web que visitamos y que el manifest.json apunta solo al archivo background.js, pues analicemos dicho archivo:


Ok, es muy claro, este archivo hace uso de la chrome.tabs API que nos permite crear, modificar y reordenar las pestañas del navegador, ahora ya  sabemos porque la extensión solicitaba el permiso tabs en la sección permisos del manifest.json. Para ser más especifico el código de la imagen se activa cuando alguna pestaña del navegador se actualiza, una vez activada ejecuta la función callback que se le pasa como parámetro a addListener, dicha función callback nuevamente usa la chrome.tabs API pero esta vez usa el método executeScript que lo que hace es básicamente inyectar código javascript en una página, y aunque existe la posibilidad de inyectar código directamente con este método, nuestra extensión no lo hace de esa forma, sino que hace uso de otro archivo llamado evil.js que es el que contiene el código javascript que se inyecta a la pagina cuando se abre una nueva pestaña o se actualiza una ya abierta, ahora que sabemos eso, miremos este otro archivo y veamos que es lo que hace:


Bueno, para empezar observamos que de la linea 1-5 se encuentra el código de la biblioteca jquery, que esta vez por ser una extensión que yo mismo les proporciono les aseguro no contiene ninguna linea de código malicioso (Esto no siempre es así, y lo correcto seria comprobar la integridad de dicha librería y de cualquier otra, siempre), sabiendo esto, prosigamos con las siguientes lineas, de la linea 7-10 vemos un setInterval que lo que hace es repetir cada 500 milisegundos la función callback que se le pasa como parámetro, dicha función no hace otra cosa que alterar nuestro color de fondo, color de letra, y remover las imágenes de la web que visitamos,es decir, es básicamente lo que sabemos según la descripción (Te hará ver un "5up3r h4x0r N30") hace nuestra extensión una vez la instalamos, pero ¡epa! y ¿esa ultima linea?, parece que tampoco tiene nada malicioso escondido, pero, analizando bien que es lo que hace con ese eval te darás cuenta que permite que cualquiera que sepa que usas esa extensión y haga que visites un enlace que tenga algo parecido a http://example.com#[payloadJS] podría ejecutar sin tu consentimiento código javascript y sí, es aquí en donde esta pequeña extensión pasa a poner en riesgo tu privacidad (credenciales) y la podríamos considerar como una extensión de "chrome maliciosa", sin embargo, eso lo sabemos porque hemos echo un análisis que aunque no del todo profundo, si suficiente para entender las implicaciones que puede traernos el tenerla instalada, en fin, ya para ir concluyendo queda recomendarte que o bien, cada que te dispongas a instalar una extensión para chrome de una fuente no confiable, la analices meticulosamente o no la instales, porque sí, esta extensión fácilmente evade los controles de seguridad de google al no tener en su propio código ninguna linea maliciosa, lo que significa que fácilmente puede estar disponible en la store de google, es decir, puede ser usada por el creador (Usuario mal intencionado) para ejecutar ataques dirigidos a determinados grupos o personas. Y sí, nuestra extensión puede no este tan bien decorada como para que alguien se trague la historia y se la instale, pero eso solo lo limita la creatividad del atacante, porque basta con mirar el numero de visualizaciones de este vídeo para darse cuenta que no es nada difícil llegar a un gran numero de potenciales víctimas.


Ya para finalizar les comparto el link de los payloads que son usados en este vídeo:

Como pueden ver, dichos payloads hacen que un usuario que tiene instalada nuestra extensión pueda terminar enviando sus credenciales, cookies, etc, a un servidor remoto. Y bueno eso ha sido todo por hoy, ¡happy hacking! y hasta la próxima :).