Presentación usada por Jorge Coronado en la jornadas técnicas cátedra de Indra y meetup de Hacking Sevilla sobre el análisis dinámico y estático en APKs
2. Quién es Jorge Coronado
• Fundador y CEO de QuantiKa14
• Colaborador de Canal Sur Radio desde 2015
• Profesor en el curso de detectives de la Universidad Pablo Olavide de Sevilla
• Co-autor del primer “Protocolo institucional en España ante la violencia de género en las redes
sociales”
• Formación a cuerpos de seguridad en investigación a través de Internet desde la ESPA y otros
cursos
• Creador del protocolo de actuación para la búsqueda de personas desaparecidas a través de las
tecnologías de la información y comunicación
• Director del curso de verano “ciberdelincuencia de género “ en la UPO
• Vocal de la asociación de peritos tecnológicos de Andalucía (APTAN)
• Dinamizador del Hack&Beers Sevilla
• Autor del canal de Youtube Investiga Conmigo desde el Sü
• Creador de aplicaciones como: Guasap Forensic, Shodita, Tacita, EO-Ripper, Dante Gates, Killo.io,
etc
12/12/2019 www.quantika14.com 2
5. Estructura y archivos de un APK
El fichero .apk o Android Package File es un formato específico para
aplicaciones android con extension .apk (basicamente se trata de un
fichero .zip renombrado) cuya estructura es la siguiente:
• AndroidManifest.xml: es el fichero de configuración de la aplicación.
Está formado por:
• Permisos que necesita la aplicación para su correcto funcionamiento.
• Pantallas o Activities de la aplicación.
• Servicios o Services que van a correr en segundo plano.
• Receptores o Receivers que pueden manejar eventos del sistema o de otras
aplicaciones, como el reinicio del móvil o la llegada de un SMS.
• assets: directorio en el que se almacenan ficheros específicos de la
aplicación.
• classes.dex: este fichero es el bytecode de la aplicación necesario para
que pueda ejecutarse en la máquina virtual de Android (Dalvik VM).
Los ficheros .dex son para la Dalvik VM como los ficheros .class de Java
lo son para la JVM.
• lib: directorio en el que se almacenan librerías de código nativo de las
que depende la ejecución de la aplicación.
• META-INF: directorio que almacena el fichero MANIFEST.MF que
contiene los hashes de todos los recursos utilizados por la aplicación
con el objetivo de verificar que no se han modificado. También
contiene el fichero CERT.RSA que contiene la clave pública del
desarrollador.
• res: directorio en el que se almacenan todos los recursos como
ficheros xml, imágenes, ficheros de estilos, etc… .
• resources.arsc: fichero que relaciona todos y cada uno de los recursos
con su identificador correspondiente.
12/12/2019 www.quantika14.com 5
6. Tipos de análisis
Para llevar a cabo un análisis completo de una aplicación Android es necesario
realizar dos tipos de análisis:
• Análisis estático: se basa en los recursos, fichero de propiedades y código fuente
de la aplicación.
• Análisis dinámico: se basa en el comportamiento de la aplicación durante su
ejecución controlada.
12/12/2019 www.quantika14.com 6
7. ¿Qué hace el análisis estático?
• Análisis de permisos: para ellos revisaremos el fichero de configuración
AndroidManifest.xml .
• Exploración de recursos: revisaremos los directorios de recursos de la
aplicación con el objetivo de identificar posibles imágenes o ficheros que
sean un indicio de actividad sospechosa.
• Búsqueda de cadenas: buscaremos patrones dentro del código de la
aplicación ¿al que accederemos a través del fichero classes.dex? .
• Revisión del código fuente: realizando la descompilación del fichero
classes.dex (código compilado para la Dalvik VM) accederemos a los
ficheros .jar con el código fuente.
• Verificación el certificado: comprobaremos la validez del certificado así
como la información del mismo.
12/12/2019 www.quantika14.com 7
https://thehackingfactory.com/eres-un-apk-muy-malo
8. Resumen para Big Data
Crawler •Descargar APKS de
una plataforma
Análisis
estático
•Permisos
•Servicios
•Archivos
•Parser
Descompilar
.dex
•Código
•Vulnerabilidades
Base de
datos
• NoSQL
• SQL
12/12/2019 www.quantika14.com 8
9. ¿Qué es Tacita?
Aplicación con licencia open source que tiene el
objetivo de analizar de forma estática y automática
miles de APKS para luego analizarlo en una base
de datos.
12/12/2019 www.quantika14.com 9
10. Funcionalidades
de Tacita
❑ Análisis estático
• Versión de Android
• Librerías
• Main_activity
• Activities
• Servicios
• Archivos
• Permisos
• Emails
• URLS
• IPS
• FTP
• Guarda los resultados en
MongoDB
12/12/2019 www.quantika14.com 10
11. DownloaderAPKS:
defaced
• Hace 3 años funcionaba
• Actualmente disponen de cortafuegos
• Actualmente disponen de una web más
segura
• Otras fuentes: apkpure.com
12/12/2019 www.quantika14.com 11
12. Problemas y
mejoras
• APK-parser no es compatible con
Python3
• Nuevas mejoras:
• Identificador de idiomas en cadenas
de texto
• Fronted con gráficas y tablas de datos
(ELK, Flask, Django, etc)
• Desemsamblar con Radare, APKtools y
dex2jar
https://github.com/Quantika14
/Tacita
12/12/2019 www.quantika14.com 12
14. Otra forma de
hacerlo es con
NinjaDroid
14
• Sudo apt-get install lib32z1 lib32z1-dev lib32stdc++6
• Make build-Linux
• https://github.com/rovellipaolo/NinjaDroid
• Genera un JSON con:
• Información del archivo APK (es decir, tamaño del archivo, MD5, SHA-1, SHA-256 y SHA-512);
• Información de la aplicación (por ejemplo, nombre de la aplicación, nombre del paquete, versión,
listas de permisos, lista de Actividades / Servicios / BroadcastReceivers, etc.);
• Información del certificado digital (por ejemplo, validez, número de serie, huella digital MD5, SHA-1,
SHA-256 y firma), incluida la información del emisor / propietario del certificado (por ejemplo,
nombre, correo electrónico, empresa, país, etc.);
• Todas las cadenas codificadas en el archivo classes.dex;
• Las URL y los comandos de shell están codificados en el archivo classes.dex;
• Información de archivo de AndroidManifest (es decir, tamaño de archivo, MD5, SHA-1, SHA-256 y
SHA-512);
• información del archivo classes.dex (es decir, tamaño del archivo, MD5, SHA-1, SHA-256 y SHA-512);
• Información de archivo CERT.RSA / DSA (es decir, tamaño de archivo, MD5, SHA-1, SHA-256 y SHA-
512);
• Lista de entradas de archivo (es decir, nombre de archivo, tamaño de archivo, MD5, SHA-1, SHA-256
y SHA-512) en el paquete APK.
12/12/2019 www.quantika14.com
15. Dex2jar y Java Decompiler
12/12/2019 www.quantika14.com 15
16. APK-ANAL
• https://github.com/mhelwig/apk-anal
• apktool
( https://ibotpeaches.github.io/Apktool/
)
• radare2 ( https://radare.org - usa lo
último de Git)
• Python-modules: filemagic, r2pipe,
argparse
• grep con la opción -E
• Java en camino
12/12/2019 www.quantika14.com 16
17. Conclusiones
• Ninjadroid es una aplicación
muy completa y que nos puede
servir para hacer un big data de
APKS de forma fácil
• Tacita es una aplicación ligera y
útil. Encontramos resultados
sin tener que descompilar. Es
necesario refactorizar y usar
otra librería en vez de “APK-
parser”
• APK-ANAL es muy completa
pero tiene muchos fallos
actualmente
www.quantika14.com 12/12/2019 17
18. ¿Alguna
pregunta?
¡MUCHAS GRACIAS!
RECUERDA QUE HACKING SEVILLA
TIENE UN GRUPO DE MEETUP Y DE
TELEGRAM
https://www.meetup.com/es-
ES/hacking-sevillaQK14/
https://t.me/happyhackingsevilla
www.quantika14.com 12/12/2019 18