27 agosto 2012

ASEF - Android Security Evaluation Framework

El análisis de aplicaciones móviles se ha convertido en un requisito indispensable. Los smartphone forman ya parte de nuestras vidas. Y es por eso que los criminales centran su esfuerzo en este tipo de plataforma.

En este caso nos centraremos en los smartphone con sistema operativo Android.
Los troyanos bancarios por ejemplo ya incluyen el apartado para el móvil además de infectar la máquina de la víctima.

En el POST de hoy usaremos un framework para el análisis de apk maliciosas.

El framework es ASEF - Android Security Evaluation Framework, es open source y lo puedes encontrar en Code Google.

Recomiendo leer antes el PDF que hay en el proyecto. Explica el funcionamiento del framework y como trabaja para realizar el análisis dinámico de los apk. El PDF lo puedes encontrar directamente aquí.

El funcionamiento de ASEF es el siguiente, usando los AVD que puedes crear con el SDK de Android, instalará los apk que le pasemos como parámetro, capturará el tráfico con tcpdump y nos mostrará por pantalla los resultados.

El esquema de funcionamiento de ASEF es este:



Con ASEF realizaremos la parte de análisis dinámico. Para usar ASEF deberemos de cumplir con ciertos requisitos: El primero de todos es el SDK de Android y el segundo, la API de Google Safe Browsing

Necesitaremos también tres módulos de perl, en concreto:

  • Getopt::Std;
  • URI::Find;
  • URI::Encode
Por último necesitaremos tener instalado tcpdump y un dispositivo con Android o bien un AVD donde hacer las pruebas.

Con estos requisitos ya podemos trabajar con ASEF, una vez descargado lo colocamos en la carpeta de android-sdk.

Revisamos el fichero configuración de ASEF y rellenamos los datos:

#Configurator file will allow you to configure all the parameters required by apkeval.pl (core part of A S E F) so user doesn't need to re-enter every time test is run 
#Please follow each of the sample format and provide the parameters

#Name of the virtual device created by user on which all the tests will be run
#Default AVD = avd_test 
Default AVD = 

#Google Safe Browsing API Key
#Google Safe Browsing API = ABQIAAAAo85Inuxqqg6th2Wo1234yxR6oJp44IDGFsHRDnasTNl3gDmneG
Google Safe Browsing API =  

#IP address of the local machine on which A S E F is running, given by an interface on which packets will be captured
#Host IP = 10.0.0.4 
Host IP =  

#Interface on which packets will be captured
#interface = en1
interface = 

#If user choose to bypass virtual device and run all tests on physical device, please provide device ID on which all tests will run
#AD = 3441F11B71E600EC 
AD =  

#Marination time Tm in seconds for tuning the test cycle
#Tm = 10
Tm = 

#No of gestures to be sent to an app during activity mode inside a test cycle
#RGC = 75 
RGC =  

Rellenamos los datos como la API de Google Safe Browsing, la IP donde correremos ASEF, la interfaz de red, además de el nombre del AVD en el caso de que lo usemos o el ID del device con Android que usemos para las pruebas. Además le indicamos el tiempo que dedicará a cada análisis e incluso gestos random que se ejecutarán en el dispositivo.

Una vez que ejecutamos la herramienta nos aparecen ciertos datos interesantes:

ASEF ==> Running a configurator for ASEF ............. 

 Using default AVD = android2.2   

 Using Google Safe Browsing API key = MI API SAFE BROWSING 

 Using packet capturing tool 'tcpdump' on 192.168.1.129  at interface en1 

 Tm is set to be 10  seconds 

 Will send 75  number of gestures to each app inside the activity mode of a test cycle 

 Location of the Directory :- apk 

1) be_social_plugin.apk
2) com.mediawoz.gotq.apk
3) de.mehrmannd.sdbooster-GAMEX.apk
4) il.co.egv-3.apk
5) seguridad.apk
6) Update.apk
7) zitmo.apk

 Total number of apk files found = 7

Nos indica que está ASEF corriendo, y además nos da información sobre los APK que ha encontrado para analizar.

ASEF también nos proporciona información sobre los APK en si,

application name :- seguridad.apk
 packagename :- 'com.android.security'
 launcher activity :- 'com.android.security.MainActivity'
 version code :- '1'
 version name :- '4.3'
 app lable :- 'Android Security Suite Premium'

 application name :- de.mehrmannd.sdbooster-GAMEX.apk
 packagename :- 'de.mehrmannd.sdbooster'
 launcher activity :- 'de.mehrmannd.sdbooster.SDboost'
 version code :- '714152'
 version name :- '1.5.2'
 app lable :- 'SD-Booster'

Como resultado del test también nos creará una carpeta con los APK que ha analizado:

 ---- Creating the master TEST RESULT DIRECTORY :- TEST_08_20_12-10:10:13 ----

1) TEST_08_20_12-10:10:13/"be_social_plugin.apk"
2) TEST_08_20_12-10:10:13/"com.mediawoz.gotq.apk"
3) TEST_08_20_12-10:10:13/"de.mehrmannd.sdbooster-GAMEX.apk"
4) TEST_08_20_12-10:10:13/"il.co.egv-3.apk"
5) TEST_08_20_12-10:10:13/"seguridad.apk"
6) TEST_08_20_12-10:10:13/"Update.apk"
7) TEST_08_20_12-10:10:13/"zitmo.apk"
 Done creating the Test result hierarchy ....... 

ASEF irá analizando cada uno de los apk, pongo un ejemplo de lo que se mostraría en el terminal cuando analiza uno de los apk.

Starting to capture all network traffic for the application be_social_plugin.apk at location :- /usr/local/Cellar/android-sdk/r20.0.1/ASEF_OSP/TEST_08_20_12-10:10:13/"be_social_plugin.apk"/network_traffic.txt 
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on en1, link-type EN10MB (Ethernet), capture size 65535 bytes

 Getting ready to install Application be_social_plugin.apk from the location ..........apk/"be_social_plugin.apk"

 Installing be_social_plugin.apk now :- 
469 KB/s (16098 bytes in 0.033s)
pkg: /sdcard/tmp/be_social_plugin.apk
Success

Una de las partes mas importantes es poder capturar el tráfico que puedan llegar a generar los apk, un ejemplo de lo que capturaría ASEF:

! be_social_plugin.apk accessed --> " 111.221.74.34 " and it is - <!DOCTYPE html>
<html lang=en>
  <meta charset=utf-8>
  <meta name=viewport content="initial-scale=1, minimum-scale=1, width=device-width">
  <title>Error 400 (Bad Request)!!1</title>
  <style>
    *{margin:0;padding:0}html,code{font:15px/22px arial,sans-serif}html{background:#fff;color:#222;padding:15px}body{margin:7% auto 0;max-width:390px;min-height:180px;padding:30px 0 15px}* > body{background:url(//www.google.com/images/errors/robot.png) 100% 5px no-repeat;padding-right:205px}p{margin:11px 0 22px;overflow:hidden}ins{color:#777;text-decoration:none}a img{border:0}@media screen and (max-width:772px){body{background:none;margin-top:0;max-width:none;padding-right:0}}
  </style>
  <a href=//www.google.com/><img src=//www.google.com/images/errors/logo_sm.gif alt=Google></a>
  <p><b>400.</b> <ins>That’s an error.</ins>
  <p>Your client has issued a malformed or illegal request.  <ins>That’s all we know.</ins>

En este caso nos ha dado un error 400!

Para la parte de análisis dinámico nos sirve perfectamente, además si desarrollan mas features para el framework será una herramienta que deberemos tener para los análisis de apk.

---------------------------------------------------------------
Artículo cortesía de Marc Rivero López

4 comments :

Adrián Ruiz dijo...

Interesante framework, pero, ¿se limita a capturar los paquetes de red?
Para eso ya existe la opción del emulador -tcpdump, filtramos por trafico/puerto/ip etc. y obtenemos el mismo resultado, no?
saludos,

El Androide Descerebrado dijo...

Terrorismo android http://www.elmundo.es/elmundo/2012/08/27/navegante/1346044348.html?cid=GNEW970103

jajajaja

reivaj dijo...

He encontrado estos errores durante el escaneo del móvil

I tried to scan my device but only I get that:

ASEF ==> Running a configurator for ASEF .............

Using default AVD =

Using Google Safe Browsing API key = ABQIAAAAo85Inuxqqg6th2Wo1234yxR6oJp44IDGFsHRDnasTNl3gDmneG

Using packet capturing tool 'tcpdump' on 158.42.55.55 at interface eth0

Found an android scan device listed in the configurator file :- HT08WPY07480

Tm is set to be 10 seconds

Will send 75 number of gestures to each app inside the activity mode of a test cycle

Calling a converter module :-

Inside converter module

Print local path for :-
./aapt: 1: ./aapt: Syntax error: "(" unexpected

Calling Organizer module to organize test results

Inside Organizer

---- Creating the master TEST RESULT DIRECTORY :- TEST_02_20_13-13:37:38 ----

1) TEST_02_20_13-13:37:38/""mkdir: no se puede crear el directorio «TEST_02_20_13-13:37:38/»: El archivo ya existe

Done creating the Test result hierarchy .......

./adb: 1: ./adb: Syntax error: ")" unexpected

scanning device not found / couldn't detect ... going to exit now... please reconnect the scanning device and start the tool again...

Alguna idea de porque no funciona??

upv dijo...

......esa ip de la UPV (politecnica de Valencia).......