Mobile Audit es una aplicación web de Django para realizar análisis estáticos (Static Application Security Testing o SAST) y detectar malware en los APKs de Android.
Las pruebas de seguridad de aplicaciones estáticas se utilizan para proteger el software mediante la revisión del código fuente del software para identificar las fuentes de vulnerabilidades.
Wikipedia (Inglés)
Componentes
- db: PostgreSQL 13
- nginx: Nginx 1.18.0
- web: Mobile Audit App
Principales Características
- Utiliza Docker para un fácil despliegue en un entorno multiplataforma
- Extraer toda la información de la APK
- Analizar todo el código fuente buscando debilidades
- Todos los hallazgos están categorizados y siguen las normas de CWE
- También destacar las Mejores Prácticas en la Implementación de Android Seguros en el APK
- Los hallazgos pueden ser editados y los falsos positivos pueden ser trillados y eliminados
- Todos los resultados de los escaneos pueden ser exportados a PDF
- Autenticación y gestión de usuarios
- API v1 con Swagger y ReDoc
- TLS
Integraciones
Virus Total (API v3)
Comprueba si ha habido un escaneo del APK y extrae toda su información. Además, existe la posibilidad de subir el APK si se selecciona una propiedad en el entorno (Desactivado por defecto).
Es posible subir los hallazgos al gestor de defectos.
Comprueba en la base de datos si hay URLs en el APK que estén relacionadas con el Malware.
Instalación
Utilizando Docker-compose:
El archivo docker-compose.yml
proporcionado permite ejecutar la aplicación localmente en desarrollo. Para iniciar el contenedor, ejecuta:
docker-compose up
Si hay cambios en el Application Dockerfile local, puedes construir la imagen con
docker-compose build
Una vez que la aplicación se haya lanzado, puedes probarla navegando a: http://localhost:8888/ para acceder al panel.
Además, hay una versión TLS que funciona en el puerto 443, así que puedes probar la aplicación navegando a: https://localhost/ para acceder al tablero.
Para más información, lee TLS
En cada uno de los escaneos, tendrías la siguiente información:
- Información de la aplicación
- Información de seguridad
- Componentes
- Hallazgos de SAST
- Mejores prácticas aplicadas
- Información sobre Virus Total
- Información del certificado
- Strings
- Bases de datos
- Archivos
Para un fácil acceso hay una barra lateral en la página izquierda del escáner:
API v1
Integración de REST API con Swagger y ReDoc.
Uso
- El punto final para autentificar y obtener token:
/api/v1/auth-token/
- Una vez autenticado, utiliza el header en todas las solicitudes:
Authorization: Token <ApiKey>
Swagger
ReDoc
Puntos finales
- Una vista JSON de la especificación de API en
/swagger.json
- Una vista YAML de la especificación de API en
/swagger.yaml
- Una vista swagger-ui de la especificación de API en
/swagger/
- Una vista ReDoc de la especificación de API en
/redoc/
TLS
Requisitos previos
- Añade los certificados en
nginx/ssl
- Para generar un certificado autofirmado:
openssl req -x509 -nodes -days 1 -newkey rsa:4096 -subj "/C=ES/ST=Madrid/L=Madrid/O=Example/OU=IT/CN=localhost" -keyout nginx/ssl/nginx.key -out nginx/ssl/nginx.crt
Configuración de Nginx
- TLS – puerto 443:
nginx/app_tls.conf
- Estándar – puerto 8888:
nginx/app.conf
Configuración de la plataforma
Hay dos volúmenes en docker-compose.yml
con las configuraciones. Por defecto estarán disponibles tanto los puertos 443 como el 8888, pero sólo se utilizará la configuración TLS para los despliegues de producción.
- ./nginx/app.conf:/etc/nginx/conf.d/app.conf
- ./nginx/app_tls.conf:/etc/nginx/conf.d/app_tls.conf
Variables de entorno
Todas las variables de entorno están en un archivo .env
, hay un ejemplo .env.example
con todas las variables necesarias. También están recogidas en app/config/settings.py
:
CWE_URL = env('CWE_URL', 'https://cwe.mitre.org/data/definitions/')
MALWAREDB_ENABLED = env('MALWAREDB_ENABLED', True)
MALWAREDB_URL = env('MALWAREDB_URL', 'https://www.malwaredomainlist.com/mdlcsv.php')
VIRUSTOTAL_ENABLED = env('VIRUSTOTAL_ENABLED', False)
VIRUSTOTAL_URL = env('VIRUSTOTAL_URL', 'https://www.virustotal.com/')
VIRUSTOTAL_FILE_URL = env('VIRUSTOTAL_FILE_URL', 'https://www.virustotal.com/gui/file/')
VIRUSTOTAL_API_URL_V3 = env('VIRUSTOTAL_API_URL_V3', 'https://www.virustotal.com/api/v3/')
VIRUSTOTAL_URL_V2 = env('VIRUSTOTAL_API_URL_V2', 'https://www.virustotal.com/vtapi/v2/file/')
VIRUSTOTAL_API_KEY = env('VIRUSTOTAL_API_KEY', '')
VIRUSTOTAL_UPLOAD = env('VIRUSTOTAL_UPLOAD', False)
DEFECTDOJO_ENABLED = env('DEFECTDOJO_ENABLED', False)
DEFECTDOJO_URL = env('DEFECTDOJO_URL', 'http://defectdojo:8080/finding/')
DEFECTDOJO_API_URL = env('DEFECTDOJO_API_URL', 'http://defectdojo:8080/api/v2/')
DEFECTDOJO_API_KEY = env('DEFECTDOJO_API_KEY', '')
mobileAudit (este enlace se abre en una nueva ventana) por mpast (este enlace se abre en una nueva ventana)
Django application that performs SAST and Malware Analysis for Android APKs