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.
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:
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.
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)
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:
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:
<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.
Este comentario ha sido eliminado por el autor.
ResponderEliminarcuando 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
ResponderEliminarme podrias decir si la url a cambiado y en cullo caso decirmela gracias