--[ Verificando muchas apps de Android en VirusTotal con sus hashes ]--

Por: ZoqueLabs

Este escrito se distribuye con una licencia Creative Commons CC BY-SA (Reconocimiento - Compartir Igual)
English version

Intro

Este mini tutorial está pensado para ayudarte a revisar si un listado de aplicaciones instaladas en un dispositivo Android ha sido reportado como malicioso, usando su hash (una especie de huella digital única del archivo).

Herramientas como Colander o MVT (Mobile Verification Toolkit) permiten hacer esta verificación, pero lo hacen de una en una. Si solo tienes unos pocos hashes, puede funcionar. Pero si estás trabajando con muchos —como cuando se hace una extracción forense completa con androidqf— este proceso se vuelve muy lento y rápidamente consume el límite de la API de VirusTotal.

En este tutorial mostramos cómo hacer esta verificación en lote (bulk), es decir, revisar varios hashes al mismo tiempo, ahorrando tiempo y energía.

Partimos de una extracción forense del dispositivo Android generada con androidqf, que incluye un archivo llamado packages.json donde se encuentran los hashes SHA256 de las aplicaciones instaladas. También se puede usar hashes.csv si está disponible, pero aquí nos enfocamos principalmente en packages.json porque es lo que suele estar incluso en extracciones más básicas.

La idea es ayudarte a identificar comportamientos sospechosos o directamente maliciosos en las apps del dispositivo, sin necesidad de revisar una por una.


Preparar el entorno con androidqf

Para comenzar, necesitaremos realizar una extracción forense del dispositivo Android usando la herramienta androidqf. Obtendrás una carpeta con varios archivos, entre ellos el importante packages.json.

$ ls
acquisition.json  dumpsys.txt  logcat.txt          selinux.txt          tmp
apks              env.txt      logs                services.txt
backup.ab         files.json   packages.json       settings_global.txt
bugreport.zip     getprop.txt  processes.txt       settings_secure.txt
command.log       hashes.csv   root_binaries.json  settings_system.txt

 

Extrayendo hashes de las aplicaciones de packages.json

El packages.json contiene información detallada sobre todas las aplicaciones instaladas en el dispositivo, incluyendo los hashes criptográficos de cada apk y sus subcomponentes.

 {
        "name": "com.android.pacprocessor",
        "files": [
            {
                "path": "/system/app/PacProcessor/PacProcessor.apk",
                "local_name": "",
                "md5": "95ed855e694de1ad40e4d3500a24952f",
                "sha1": "e40cd26f03becf29a4f887978ea57f21c7e30cc4",
                "sha256": "946cb5797f9a26a93709a7f01175b890bc010ba80182f8847ede24a39c9b9660",
                "sha512": "77c2fb531da7b2751e3abb9ef25c3d715e75d3978301ee00b66edb3c171205fa97d7daa3fb21c2725aece9d7392b7a7ad90da58f1ea64520398ccebf0c3a6d67",

  Puedes extraer la lista completa de hashes SHA256 de las aplicaciones desde packages.json, usando la terminal de Linux como te mostramos más adelante (el proceso puede ser similar en MacOS o Windows).

Sin embargo, por razones prácticas, en este caso intentaremos omitir los hashes de aplicaciones del sistema que tengan o empiecen por nombres comunes, si y solo si son aplicaciones marcadas como “system”, para ello usaremos filtros con jq para excluir apps que parecen mas “conmunes”, y concentrarnos en las demás.

Ahora si, vamos…

Primero, navega hasta el directorio donde está ubicada la extracción:

cd path/to/your/backup/

  Si quieres extraer todos los hashes puedes ejecutar este comando:

jq -r '.[].files.[].sha256' packages.json

  Pero como nuestro objetivo es concentrarnos en aplicaciones “menos comunes” vamos a usar filtros más especificos con este comando:

jq -r '.[] | select (((.name | startswith("com.google.android.") or startswith("com.android.") or startswith("com.samsung") or startswith("com.sec.")) and (.system == true)) | not)' packages.json | jq -r '.files.[].sha256'

  ¿Qué hace este comando y cuál es nuestro plan?

Este comando usa jq (una herramienta de línea de comandos para procesar archivos JSON) para procesar el archivo packages.json. y extraer únicamente los hashes SHA256 de las aplicaciones que no parecen ser del sistema o de fabricantes conocidos como Google o la empresa fabricante -nuestro caso Samsung, pero este lo puedes reemplazar-.

Entonces, vamos por partes:

En primer lugar, select(...) aplica un filtro para excluir:

  1. Apps cuyo nombre empieza por com.google.android., com.android., com.samsung o com.sec.
  2. Y además que están marcadas como del sistema (.system == true)
  3. | not invierte la condición para quedarnos solo con las que no cumplen ese patrón.

Luego, .files[].sha256 extrae el hash de cada archivo asociado a esas apps filtradas.

Así, al ejecutar este comando obtendrás una lista filtrada de aplicaciones más interesantes para analizar con VirusTotal.

$ jq -r '.[] | select (((.name | startswith("com.google.android.") or startswith("com.android.") or startswith("com.samsung") or startswith("com.sec.")) and (.system == true)) | not)' packages.json | jq -r '.files.[].sha256

5f4144359f8fdf52e6d4471a11438aa2c209e4af2d8bc90a4111975d1227c0aa
9948eaa76138f8a45943cdd81838e4a053a2734ef8a326e108dc3b0b5c4f409d
5014e20fb03bca12d456f278faf2b1f2f43326930c062e0705fb2cebedfe23b2
... mas hashes
... mas hashes

  nota:Ten en ceunta que dependiendo del fabricante del teléfono/dispositivo hay nombres de aplicaciones que podemos excluir editando el patrón del filtro que acabamos de ver (en este caso, por ejemplo estamos excluyendo las aplicaciones que empiezan por “com.samsung.” y que sean “system” ya que estamos probando con un teléfono Samsusng).

Si quieres guardar la lista de hashes en un archivo para luego subirlo a VirusTotal, puedes hacerlo así:

$ jq -r '.[] | select (((.name | startswith("com.google.android.") or startswith("com.android.") or startswith("com.samsung") or startswith("com.sec.")) and (.system == true)) | not)' packages.json | jq -r '.files.[].sha256' > hashesobtenidos.txt

  Con este archivo tendrás todos los hashes en bulk.


Crear una colección en VirusTotal con los hashes extraídos

Una vez que tenemos la lista de hashes de las aplicaciones sospechosas, podemos usar la funcionalidad de colecciones de VirusTotal para analizarlos en conjunto.

En este tutorial usamos la versión gratuita de VirusTotal, porque la idea es facilitar recursos accesibles sin depender de licencias pagas.

Eso sí: en la versión gratuita, cuando subes muchos hashes a una colección, el filtrado de resultados no es tan amigable. No puedes, por ejemplo, ordenar fácilmente por número de detecciones o aplicar filtros avanzados. Por eso es importante que antes de subir, ya tengas muy bien filtradas las apps que podrían ser realmente sospechosas, como lo hicimos en el paso anterior.

Si tienes acceso a una cuenta premium de VirusTotal, ese análisis en bulk será mucho más fluido, pero en este caso trabajamos con lo que tenemos disponible - la versión gratis-.

Qué son las colecciones de VirusTotal y por qué usarlas?

La sección colecciones en VirusTotal es muy útil porque nos permite reunir en un solo lugar varios indicadores relacionados con un mismo análisis o caso, como hashes, URLs, dominios o direcciones IP. Podemos ir actualizando estas colecciones con nueva información, compartirlas fácilmente con otras personas a través de un enlace, y revisar en conjunto los metadatos que ofrece VirusTotal, como los motores antivirus que detectan amenazas o las etiquetas que describen su comportamiento. Esto hace que el análisis sea más claro, ordenado y colaborativo, especialmente cuando trabajamos en equipo o necesitamos documentar hallazgos para informes.

Crear una colección paso a paso

  1. Ingresa a Visrus total, crea una cuenta o logueate si ya tienes una.
  2. Puedes dar clic en el icono de busqueda en VT o dar clic acá.

  Image VT  

  1. Da clic en Create new collection (crear nueva colección).

  Image VT  

  1. Asigna un nombre a tu colección pj: hashapps.
  2. Pega los hashes que extrajiste desde packages.json, uno por línea.
  3. Guarda la colección.

¿Qué datos arroja el análisis de VirusTotal?

VirusTotal se encarga de analizar los hashes automáticamente y te muestra varios datos importantes para revisar las aplicaciones.

  Image VT  

Detecciones por motores antivirus: te dice si algún motor ha marcado el archivo como malicioso, y qué nombre le da (por ejemplo, Android/TrojanSpy.Agent).

Etiquetas descriptivas: estas etiquetas no solo indican si es un virus, sino que también señalan otros comportamientos o características, como:

Otra información del archivo:

Relaciones con otros elementos: VirusTotal también puede mostrar si ese hash está vinculado a otros archivos, URLs, dominios o campañas conocidas.

Todo esto permite revisar de forma más completa si una aplicación representa un riesgo, incluso cuando no está clasificada directamente como malware.

Hashes listos

Y listo. Con estos pasos ya tienes una forma rápida y sencilla de verificar aplicaciones Android. Esperamos que le saques provecho al mini-tutorial.