
Androidモバイルデバイスの堅牢化
Androidモバイルデバイスのハードニングツール(Python3製)。
Android版のPObY-A(Privacy Owned by You - Android)は、マルウェアと設定のスキャン機能を備え、Playストアで入手可能です。ソースコードはこちらで見つかります。
AMDHは、Androidデバイス上のインストール済みアプリケーションのスキャンを自動化し、既知のマルウェアを検出し、プライバシーを保護するために作成されました。
$ git clone https://github.com/SecTheTech/AMDH.git; cd AMDH
$ python3 -m venv amdh
$ source amdh/bin/activate
(amdh) $ pip install -r requirement.txt
注意:Windowsの場合は、ADBのパスを指定するか、
config/main.py内の変数adb_windows_pathを編集してください。
警告:
-l引数を使用し、-t eで有効なアプリケーションを指定すると、システムアプリが一覧表示されます。システムアプリのアンインストールはAndroidシステムを破壊する可能性があります。システムアプリではuninstallではなくdisableを使用することを推奨します。
$ 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
付与された権限をファイルmalware_perms.jsonに記述された権限と比較します。このファイルには3つのノードが含まれています:
malware_only権限は、マルウェアのみが使用する権限です。分析されたマルウェアは以下のリポジトリからのものです:
権限のダンプにはコマンドaaptが使用されました。次に、正規アプリ(約400アプリ)の権限をダンプしました。malware_only権限とは、マルウェアが使用し、分析された正規アプリケーションには決して現れない権限です。
すべての権限は、マルウェアと正規アプリケーションの両方で使用されます。値は、マルウェアがこれらの権限を正規アプリと比較してどの程度使用したかの割合です。
スナップショットは、システム状態を監視し、電話データをバックアップするのに役立ちます:
pm revokeコマンドは終了コード成功を返しますが、一部のマルウェアに対して権限を取り消しません。スキャン
(amdh)$ python amdh.py -d SERIAL1,SERIAL2,SERIAL3 -sA -o reports
reportsフォルダ内に各デバイスにつき2つのファイルが生成されます:
{
"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
レポートはoutフォルダ(デフォルトの出力フォルダ)内にSERIAL_report_settings.jsonという名前で生成されます。
ハードニング
(amdh)$ python amdh.py -sA -R -rar
アプリスキャンと同じレポートに、以下の2つのキーが追加されます:
"is_device_admin_revoked": true,
"revoked_dangerous_pemissions": "succeeded"
アプリがデバイス管理者でない場合、キー
is_device_admin_revokedは結果に含まれません。
(amdh)$ python amdh.py -sS -H -o reports
reportsディレクトリにレポートとログファイルが生成されます。
静的解析と複数アプリのアンインストール/無効化(対話式)
(amdh)$ python amdh.py -l
現在実行中のユーザープロセスの一覧表示
(amdh)$ python amdh.py -P -d SERIAL1,SERIAL2
スナップショット
(amdh)$ python amdh.py -S out
[-] INFO: Start ...
Unlock device SERIAL and press ENTER key to continue
[-] INFO: Finished
outフォルダ内にSERIAL_DATE-TIMEというサブフォルダが作成されます。DATE-TIMEはYYYY-MM-DD-hh:mm:ss形式です。
スナップショット比較
(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": []
}
スナップショット復元:アプリ
(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
出力バイナリ: dist/amdh。
このプロジェクトに興味を持っていただきありがとうございます!このツールを改善するためのアイデアがあれば、新しいissueを作成するか、プルリクエストを送信してください。