
Android 모바일 기기 강화
Android Mobile Device Hardening (안드로이드 모바일 기기 강화) - 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 시스템이 손상될 수 있습니다. 시스템 앱의 경우 '제거' 대신 '비활성화'를 사용하는 것이 좋습니다.
$ 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 (안드로이드 모바일 기기 강화)
선택적 인수:
-h, --help 도움말 메시지 출력 후 종료
-d DEVICES, --devices DEVICES
쉼표로 구분된 기기 목록 또는 "ALL" (연결된 모든 기기)
-sS 시스템 설정 스캔
-sA 설치된 애플리케이션 스캔
-H 시스템 설정 강화 /!\ 개발자 옵션 및 ADB가 비활성화됩니다 /!\
-a ADB_PATH, --adb-path ADB_PATH
ADB 바이너리 경로
-t {e,d,3,s} 애플리케이션 유형:
e: 활성화된 앱
d: 비활성화된 앱
3: 타사 앱
s: 시스템 앱
-D APKS_DUMP_FOLDER, --dump-apks APKS_DUMP_FOLDER
기기에서 APK를 APKS_DUMP_FOLDER 디렉터리로 덤프
-rar 관리자 수신자 제거: 앱이 시스템 앱이 아닌 경우 모든 관리자 수신자 제거
스캔 애플리케이션 옵션 "-sA" 필요
-R 각 앱에 대해 모든 위험한 권한 철회
스캔 애플리케이션 옵션 "-sA" 필요
-l 번호가 매겨진 애플리케이션 목록 표시 (비활성화, 제거 또는 분석용)
-P 현재 사용자 프로세스 목록
-S SNAPSHOT_DIR, --snapshot SNAPSHOT_DIR
현재 전화 상태를 JSON 파일로 스냅샷하고 애플리케이션을 SNAPSHOT_DIR에 백업
-cS SNAPSHOT_REPORT, --cmp-snapshot SNAPSHOT_REPORT
SNAPSHOT_REPORT를 현재 전화 상태와 비교
-rS SNAPSHOT_TO_RESTORE, --restore-snapshot SNAPSHOT_TO_RESTORE
SNAPSHOT_TO_RESTORE 복원
-o OUTPUT_DIR, --output-dir OUTPUT_DIR
보고서 및 로그를 위한 출력 디렉터리. 기본값: out
부여된 권한을 파일 malware_perms.json에 설명된 권한과 비교합니다. 이 파일에는 세 개의 노드가 포함되어 있습니다:
맬웨어 전용 권한은 맬웨어만 사용하는 권한입니다. 분석된 맬웨어는 다음 저장소의 것들입니다:
권한을 덤프하기 위해 "aapt" 명령이 사용되었습니다. 두 번째 단계는 합법적인 앱(약 400개)의 권한을 덤프하는 것이었습니다. 맬웨어 전용 권한은 맬웨어가 사용하며 분석된 합법적인 애플리케이션에는 절대 나타나지 않는 권한입니다.
모든 권한은 맬웨어와 합법적인 애플리케이션 모두에서 사용됩니다. 값은 맬웨어가 이러한 권한을 합법적인 앱과 비교하여 얼마나 많이 사용했는지의 백분율입니다.
스냅샷은 시스템 상태를 모니터링하고 전화 데이터를 백업하는 데 도움이 될 수 있습니다:
스캔
(amdh)$ python amdh.py -d SERIAL1,SERIAL2,SERIAL3 -sA -o reports
각 기기에 대해 "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": "이 앱은 GPS 또는 셀 타워 및 Wi-Fi 네트워크와 같은 네트워크 위치 소스를 기반으로 사용자의 위치를 확인할 수 있습니다. 이러한 위치 서비스는 앱이 이를 사용할 수 있도록 휴대폰에서 켜져 있고 사용 가능해야 합니다. 배터리 소모가 증가할 수 있습니다.",
"android.permission.READ_EXTERNAL_STORAGE": "앱이 SD 카드의 내용을 읽을 수 있도록 허용합니다.",
"android.permission.ACCESS_COARSE_LOCATION": "이 앱은 셀 타워 및 Wi-Fi 네트워크와 같은 네트워크 소스를 기반으로 사용자의 위치를 확인할 수 있습니다. 이러한 위치 서비스는 앱이 이를 사용할 수 있도록 휴대폰에서 켜져 있고 사용 가능해야 합니다.",
"android.permission.CAMERA": "이 앱은 언제든지 카메라를 사용하여 사진을 찍고 동영상을 녹화할 수 있습니다.",
"android.permission.WRITE_EXTERNAL_STORAGE": "앱이 SD 카드에 쓸 수 있도록 허용합니다."
},
"is_device_admin": false,
}
}
}
(amdh)$ python amdh.py -sS
"out" 폴더(기본 출력 폴더)에 "SERIAL_report_settings.json"이라는 이름의 보고서가 생성됩니다.
강화
(amdh)$ python amdh.py -sA -R -rar
스캔 앱과 동일한 보고서에 다음 두 키가 추가됩니다:
"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: 시작 중 ...
기기 SERIAL의 잠금을 해제하고 ENTER 키를 눌러 계속하세요
[-] INFO: 완료
"out" 폴더에는 "SERIAL_DATE-TIME" 형식의 하위 폴더가 포함됩니다. 여기서 DATE-TIME은 "YYYY-MM-DD-hh:mm:ss" 형식입니다.
스냅샷 비교
(amdh)$ python amdh.py -cS out/report.json
[-] INFO: 시작 중 ...
[-] INFO: 스냅샷 생성 후 설치된 앱
{}
[-] INFO: 스냅샷에 존재하는 앱
{
"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: 스냅샷 생성 후 제거된 앱
{
"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: 스냅샷 생성 후 변경된 설정
{
"global": [
"stay_on_while_plugged_in"
],
"secure": [],
"system": []
}
스냅샷 복원: 앱
(amdh)$ python amdh.py -d SERIAL -rS out/report.json
[-] INFO: 시작 중 ...
기기 SERIAL의 잠금을 해제하고 ENTER 키를 눌러 계속하세요
[-] INFO: 복원 시작
[-] INFO: 복원 완료
[-] INFO: 복원 보고서
{
"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.
이 프로젝트에 관심을 가져주셔서 감사합니다! 이 도구를 개선할 아이디어가 있으시면 새 이슈를 생성하거나 풀 리퀘스트를 보내주세요.