
Endurecimiento de Dispositivos Móviles Android
Endurecimiento de dispositivos móviles Android escrito con python3.
La versión para Android, PObY-A (Privacy Owned by You - Android), con escaneos de malware y configuraciones está disponible en Play Store y el código fuente se puede encontrar AQUÍ
AMDH fue creado para ayudar a automatizar el escaneo de aplicaciones instaladas en dispositivos Android, detectar algunos malware conocidos y también proteger la privacidad.
$ git clone https://github.com/SecTheTech/AMDH.git; cd AMDH
$ python3 -m venv amdh
$ source amdh/bin/activate
(amdh) $ pip install -r requirement.txt
Nota: Para Windows debes especificar la ruta de ADB o editar la variable "adb_windows_path" en "config/main.py".
Advertencia: al usar el argumento -l con la opción de aplicación habilitada '-t e', se listarán las aplicaciones del sistema. Desinstalar aplicaciones del sistema puede dañar tu sistema Android. Se recomienda usar 'disable' en lugar de 'uninstall' para las aplicaciones del sistema.
$ python amdh.py -h
usage: amdh.py [-h] [-d DEVICES] [-sS] [-sA] [-H] [-a ADB_PATH] [-t {e,d,3,s}] [-D APKS_DUMP_FOLDER]
[-rar] [-R] [-l] [-P] [-S SNAPSHOT_DIR] [-cS SNAPSHOT_REPORT] [-rS SNAPSHOT_TO_RESTORE] [-o OUTPUT_DIR]
Android Mobile Device Hardening
optional arguments:
-h, --help show this help message and exit
-d DEVICES, --devices DEVICES
list of devices separated by comma or "ALL" for all connected devices
-sS Scan the system settings
-sA Scan the installed applications
-H Harden system settings /!\ Developer Options and ADB will be disabled /!\
-a ADB_PATH, --adb-path ADB_PATH
Path to ADB binary
-t {e,d,3,s} Type of applications:
e: enabled Apps
d: disabled Apps
3: Third party Apps
s: System Apps
-D APKS_DUMP_FOLDER, --dump-apks APKS_DUMP_FOLDER
Dump APKs from device to APKS_DUMP_FOLDER directory
-rar Remove admin receivers: Remove all admin receivers if the app is not a system App
Scan application option "-sA" is required
-R For each app revoke all dangerous permissions
Scan application option "-sA" is required
-l List numbered applications to disable, uninstall or analyze
-P List current users processes
-S SNAPSHOT_DIR, --snapshot SNAPSHOT_DIR
Snapshot the current state of the phone to a json file and backup applications into SNAPSHOT_DIR
-cS SNAPSHOT_REPORT, --cmp-snapshot SNAPSHOT_REPORT
Compare SNAPSHOT_REPORT with the current phone state
-rS SNAPSHOT_TO_RESTORE, --restore-snapshot SNAPSHOT_TO_RESTORE
Restore SNAPSHOT_TO_RESTORE
-o OUTPUT_DIR, --output-dir OUTPUT_DIR
Output directory for reports and logs. Default: out
Compara los permisos otorgados con los permisos descritos en el archivo malware_perms.json. El archivo contiene tres nodos:
Los permisos solo de malware son aquellos que solo usa el malware. El malware analizado proviene de los repositorios:
El comando "aapt" fue usado para volcar los permisos. La segunda parte fue volcar los permisos de aplicaciones legítimas (alrededor de 400 aplicaciones). Los permisos solo de malware son aquellos que usa el malware y nunca aparecen en las aplicaciones legítimas analizadas.
Todos los permisos son usados tanto por malware como por aplicaciones legítimas. Los valores son porcentajes de cuánto malware usó estos permisos en comparación con las aplicaciones legítimas.
La captura instantánea puede ayudar a monitorear el estado del sistema y respaldar los datos del teléfono:
Escanear
(amdh)$ python amdh.py -d SERIAL1,SERIAL2,SERIAL3 -sA -o reports
Se generan dos archivos para cada dispositivo en la carpeta "reports":
{
"com.package.name": {
"malware": true,
"permissions": {
"all_permissions": [
"com.google.android.finsky.permission.BIND_GET_INSTALL_REFERRER_SERVICE",
"com.google.android.c2dm.permission.RECEIVE",
"com.google.android.providers.gsf.permission.READ_GSERVICES",
"android.permission.WRITE_SYNC_SETTINGS",
"android.permission.RECEIVE_BOOT_COMPLETED",
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"dangerous_perms": {
"android.permission.ACCESS_FINE_LOCATION": "This app can get your location based on GPS or network location sources such as cell towers and Wi-Fi networks. These location services must be turned on and available on your phone for the app to be able to use them. This may increase battery consumption.",
"android.permission.READ_EXTERNAL_STORAGE": "Allows the app to read the contents of your SD card.",
"android.permission.ACCESS_COARSE_LOCATION": "This app can get your location based on network sources such as cell towers and Wi-Fi networks. These location services must be turned on and available on your phone for the app to be able to use them.",
"android.permission.CAMERA": "This app can take pictures and record videos using the camera at any time.",
"android.permission.WRITE_EXTERNAL_STORAGE": "Allows the app to write to the SD card."
},
"is_device_admin": false,
}
}
}
(amdh)$ python amdh.py -sS
Se genera un informe con el nombre "SERIAL_report_settings.json" en la carpeta "out" (carpeta de salida por defecto).
Endurecer
(amdh)$ python amdh.py -sA -R -rar
Mismo informe que el escaneo de aplicaciones con la adición de estas dos claves:
"is_device_admin_revoked": true,
"revoked_dangerous_pemissions": "succeeded"
La clave
is_device_admin_revokedno estará en el resultado si la aplicación no es administradora del dispositivo.
(amdh)$ python amdh.py -sS -H -o reports
Se generan un informe y un archivo de registro en el directorio "reports".
Análisis estático y desinstalación/deshabilitación de múltiples aplicaciones (interactivo)
(amdh)$ python amdh.py -l
Listar procesos de usuario en ejecución actuales
(amdh)$ python amdh.py -P -d SERIAL1,SERIAL2
Captura instantánea
(amdh)$ python amdh.py -S out
[-] INFO: Start ...
Unlock device SERIAL and press ENTER key to continue
[-] INFO: Finished
La carpeta "out" contendrá una subcarpeta "SERIAL_DATE-TIME". Donde DATE-TIME tiene el formato "YYYY-MM-DD-hh:mm:ss".
Comparación de capturas
(amdh)$ python amdh.py -cS out/report.json
[-] INFO: Start ...
[-] INFO: Installed Apps after snapshot was taken
{}
[-] INFO: Apps exists in snapshot
{
"com.package.name1": {
"firstInstallTime": "2020-07-06 18:53:07",
"lastUpdateTime": "2020-07-06 18:53:07",
"grantedPermissions": [
"com.google.android.c2dm.permission.RECEIVE",
"android.permission.USE_CREDENTIALS",
"android.permission.MODIFY_AUDIO_SETTINGS",
"com.google.android.providers.gsf.permission.READ_GSERVICES",
"android.permission.MANAGE_ACCOUNTS",
"android.permission.NFC"
],
"deviceAdmin": false,
"apk": "com.package.name1.apk"
},
"com.package.name2": {
"firstInstallTime": "2020-07-10 23:57:53",
"lastUpdateTime": "2020-07-10 23:57:53",
"grantedPermissions": [
"android.permission.DOWNLOAD_WITHOUT_NOTIFICATION",
"com.google.android.c2dm.permission.RECEIVE",
"android.permission.USE_CREDENTIALS",
"android.permission.MODIFY_AUDIO_SETTINGS",
"org.thoughtcrime.securesms.ACCESS_SECRETS",
"android.permission.ACCESS_NOTIFICATION_POLICY",
"android.permission.CHANGE_NETWORK_STATE",
"android.permission.FOREGROUND_SERVICE",
"android.permission.WRITE_SYNC_SETTINGS"
],
"deviceAdmin": false,
"backup": "com.package.name2.ab",
"apk": "com.package.name2.apk"
}
}
[-] INFO: Uninstalled after snapshot was taken
{
"com.package.name3": {
"firstInstallTime": "2020-07-18 07:56:44",
"lastUpdateTime": "2020-07-18 07:56:44",
"grantedPermissions": [
"android.permission.INTERNET",
"android.permission.ACCESS_NETWORK_STATE"
],
"deviceAdmin": false,
"backup": "com.package.name3.ab",
"apk": "com.package.name3.apk"
}
}
[-] INFO: Changed settings after snapshot was taken
{
"global": [
"stay_on_while_plugged_in"
],
"secure": [],
"system": []
}
Restauración de captura: Aplicaciones
(amdh)$ python amdh.py -d SERIAL -rS out/report.json
[-] INFO: Start ...
Unlock device SERIAL and press ENTER key to continue
[-] INFO: Starting restore
[-] INFO: Restore finished
[-] INFO: Restore report
{
"apps": {
{
"com.package.name1": {
"install": "success",
"backup": "restored"
},
"com.package.name2": {
"install": "success",
"backup": "NOT FOUND"
},
"com.package.name3": {
"install": "success",
"backup": "restored"
}
}
}
}
(amdh) $ pip install pyinstaller
(amdh) $ pyinstaller --clean amdh.spec
Binario de salida: dist/amdh.
¡Gracias por tu interés en este proyecto! Si tienes alguna idea sobre cómo mejorar esta herramienta, por favor crea un nuevo issue o envía un pull request.