viernes, 2 de noviembre de 2012

DESARROLLO DE MALWARE PARA ANDROID (PARTE I)



Esta nueva entrada del blog mostrará lo sencillo que puede resultar desarrollar/analizar malware para dispositivos Android, sobre todo si se dispone de algunos conocimientos de programación en Java. No es necesario ser ningún gurú de la programación ni nada por el estilo, sólo dedicarle unas horas para aprender los requisitos necesarios para montar la infraestructura necesaria y para comprender la estructura de las aplicaciones para dispositivos móviles.


A lo largo de este post, no se desarrollará ningún malware sofisticado ni nada por el estilo , nos centraremos tanto en clarificar todo lo necesario para programar en dispositivos Android, como en hacer un ejemplo funcional de código que extraiga datos de un dispositivo android  como los datos de la agenda y la localización, para enviarlos al número que deseemos.

No es necesario comentar para los asiduos a nuestro blog, la gran cantidad de posibilidades y variantes que se encuentran ya funcionanado hoy en dia de malware para dispositivos android. Unos realizan llamadas de forma oculta a números que ingresan dinero el creador del malware, otros crean auténticas botnets y así un sinfín de posibilidades disponibles a la hora de atacar nuestros dispositivos. Como he comentado, me centraré en la extracción de datos confidenciales del dispositivo en el ejemplo que veremos.

En primer lugar veremos el “tinglado” que hay que montar para poder desarrollar aplicaciones en Android:



      1- Necesitaremos un entorno de desarrollo de java. Si bien el más orientado a desarrollo de aplicaciones móviles es Eclipse, a mi personalmente me gusta mas trabajar con netbean por lo que explicaremos como trabajar con éste en el desarrollo de aplicaciones móviles. Por otra parte existen otros desarrollos muy interesantes como motodeb, que también pueden ser muy útiles para esta tarea y que invitamos a los mas curiosos a investigar.
Instalaremos en primer lugar en Netbean lo necesario para trabajar con aplicaciones móviles:

a.       Iremos en netbean al menú Tools, Plugins, tras cargarse la ventana le damos a la pestaña Settings

b.      Presionamos el botón Add

c.       En la siguiente ventana en el campo Name introducimos “NBAndroid” y marcar la casilla “check for updates automatically”

d.      Para terminar en el campo URL introducimos la url de la web de Project Kenai (atención en este punto por si ha cambiado la url del enlace o algo asi, ya que es el único punto donde es posible “cagarla”) : http://kenai.com/projects/nbandroid/downloads/download/updatecenter/updates.xml

e.      Tras estos pasos, ir a la pestaña Available Plugins, hay que buscar los plugins Android y Android Test Runner for NetBeans 7.0+, seleccionarlos marcando las casillas y presionar el botón Install

f.        Pulsamos Next, aceptamos los términos de la licencia y apretamos el botón Install, estos pasos descargaran el plugin a nuestro equipo, así que habrá que esperar a que termine la descarga. Cuando terminemos verermos un mensaje indicando que el plugin no es oficial y finalizaremos presionando Continue y despuespues el botón Finish. Para activarlo, nos movemos a la pestaña Installed, y podemos comprobar que efectivamente, ambos componentes se encuentran instalados y activados.

g.     Antes de pasar a crear el proyecto, accederemos a la ruta donde hemos instalado el SDK para ver que útiles hay instalados y para que nos sirve cada uno. Accedemos a la ruta en la que indicamos que se instalase y veremos lo siguiente:





Básicamente tenemos dos cosas muy importantes, una es el AVD Manager que nos va a permitir crear dispositivos móviles virtuales, si si eso es, un móvil virtual que nos permitirá probar las aplicaacinoes android sioin necesidad de tener que probarlas en un dispositivo físico.



 

En la siguiente captura vemos que sucede al darle al botón NEW que nos permitirá crear un nuevo dispositivo:


Y en la siguiente captura vemos que sucede al darle al botón  START  de uno de los dispositivos móviles creados:


Finalmente al pulsar sobre Launch encenderemos el dispositivo y deberemos desbloquearlo como cualquier dispositivo físico, quedando de la siguiente manera:


Una vez que hemos visto que hace el AVD Manager, veamos para que sirve el icono del  SDK Manager.

Como veréis en la siguiente captura, sirve para gestionar las diferentes versiones instaladas del SDK. Se recomienda instalar tantas versiones como pensemos usar del SDK. Este es un punto MUY importante en el que debemos pararnos pq podemos “cagarla”  bastante. Algo que debemos tener en cuenta es que cada versión del sdk de Android dispone de una serie de funciones que en ocasiones no son compatibles. 

Si vamos a trabajar con un dispositivo con un sdk determinado, estaremos limitados a las funciones que “rulan” para esa versión de SDK. Debemos asegurarnos por lo tanto muy muy bien de la versión de SDK que utilizaremos, y a la hora de programar debemos también usar funciones que sean lo más compatibles posibles en las diferentes versiones de SDK que pueden encontrarse instaladas en los dispositivos Android.

El dispositivo virtual se puede crear con una versión concreta de SDK y los dispositivos físicos es sencillo ver que versión de SDK tienen instalada.
  


     2.  Ok si hemos seguido estos pasos de forma correcta ya tendremos nuestro “chiringuito” listo para programar en Netbeans aplicaciones Android. Ahora veamos como se crea un proyecto en Netbeans para Android: Vamos al menú File, pulsamos sobre new Project y veremos una ventana como la siguiente:



        Seleccionamos Android Project y le damos a Next. Veremos una ventana com la siguiente:

 
      En la ventana anterior vemos que hay diferentes elementos a rellnar, y cosas que seleccionar: El nombre del proyecto en Project name, el nombre del paquete que debe seguir la regla de nombre paquete.nombreaplicacion osea con un . que separe las dos partes y también ha de selccionarse el SDK que se desee. A continuación un ejemplo:



      Le damos a Finish y ya tenemos nuestro proyecto que se verá de la siguiente forma en el explorador de proyectos:




       Como veis sale en rojo indicando que hay algún problema, se debe a que hay que hacer un build con el botón derecho:



Ya tenemos todo listo para empezar a programar.
 

3. Creación de un malware básico de android:

Como es mas que evidente esto no va a ser un curso completo de programación para Android,  en el
caso que nos ocupa, veremos las secciones principales de código y archivos principales, asi como el
    código básico necesario  que utilizaremos para crear nuestro malware de Android.
        
      Aún así, cualquier programador avispado, podrá asimilar de forma sencilla y tomar como base lo  explicado para profundizar en este mundillo y subir asi de level su skill en programación de   malware android.Una vez se ha hecho el build del proyecto, vemos las siguientes carpetas:
      
      El archivo MainActívity.java es el archivo principal del proyecto, que por defecto tiene el siguiente código:



 
 
El punto de main de las aplicaciones Android es onCreate, osea lo que por lo general seria el método Main o método principal, en este tipo de aplicaciones esta en el método onCreate. Todo nuestro código ira después de la línea 13, una vez que se a pintado el layout.
Otros archivos importantes son el main.xml que como veremos define la interfaz de pantalla , (Sí,  eso es, con un fichero xml se "pinta" el interfaz grafico :O)



  Y el string.xml  en el que aparece el nombre de la aplicación:



      El último archivo que veremos pero no por ello el menos importante, es el archivo Android Manifiest file, en el que entre otras cosas se definen TODOS LOS PERMISOS NECESARIOS para ejecutar la aplicación. Estos permisos son los que el usuario debe aceptar antes de isntalar la aplicación.

No hay que preocuparse por crear este archivo ya que se crea sólo, pero si hay que añadir los        permisos siguientes para que nuestra aplicación funcione:

     <uses-permission android:name="android.permission.SEND_SMS"/>
    <uses-permission android:name="android.permission.READ_CONTACTS"/>
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>

El contenido de nuestro archivo completo  es el siguiente:(hay funcionalidades que no usamos ahora pero que usaremos más adelante)

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="Realpentester.malware"
          android:versionCode="1"
          android:versionName="1.0">
   <uses-permission android:name="android.permission.SEND_SMS"/>
    <uses-permission android:name="android.permission.READ_CONTACTS"/>
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
    <application android:label="@string/app_name" android:icon="@drawable/ic_launcher">
            <activity android:name="Realpentesting Malware"
              android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>


       <activity android:name="Realpentester.Malware.actividades.EnviarSms"
              android:label="@string/enviarSms">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>

      </activity>      
   </application>
</manifest>

Si ejecutamos tal y como está nuestra aplicación veremos lo siguiente:
 



Es interesante comentar, que si queremos ver a tiempo real los log de lo que esta pasando con el terminal emulado, podemos hacerlo accediendo a la ruta C:\Users\realpentest\AppData\Local\Android\android-sdk\platform-tools>


Y ejecutando el comando adb logcat


Aunque de una forma no muy legible, en esta consola podremos ver información de todo lo que sucede al ejecutar una aplicación android en nuestro dispositivo virtual, para detectar por ejemplo posibles errores.

En la siguiente parte del artículo veremos como podemos modificar el código de nuestra aplicación para realizar acciones maliciosas e incluso podríamos usar en un pentest.
 

2 comentarios:

  1. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  2. cuando dices esto d. Para terminar en el campo URL introducimos la url de la web de Project Kenai (atención en este punto por si ha cambiado la url del enlace o algo asi, ya que es el único punto donde es posible “cagarla”) : http://kenai.com/projects/nbandroid/downloads/download/updatecenter/updates.xml

    me podrias decir si la url a cambiado y en cullo caso decirmela gracias

    ResponderEliminar