渗透取证移动设备时,需要遵循一个过程,其中包括从识别到报告的各个阶段。此过程中的关键点之一是获取数据,我们从中提取存储在移动设备中的数据的副本。
我们的总体目标是从头到尾获得物理内存的物理转储。在大多数使用基于文件的加密(FBE)的现代智能手机设备上,完整的文件系统通常是我们的“最佳证据”。
这些提取方法通常依赖于为克服设备安全性而开发的漏洞利用。我们使用各种工具和技术,有时还使用物理方法。
在某些情况下,尤其是对于最新的芯片组或操作系统版本,没有公开的解决方案来获取物理或完整的文件系统转储。在这些情况下,我们必须依靠设备提供的通信选项。
特别是在Android设备上,我们主要依靠:
2. MTP(媒体传输协议)
3. 三星SmartSwitch 和华为HiSuite等制造商备份工具
在ADB方面,大多数商业工具都使用四种方法:
1. ADB Backup:该工具执行“ adb backup ”命令,不同工具之间可能会有一些变化。这通常不包括本机和第三方应用程序数据:每个单独的应用程序都可以在AndroidManifest文件(android:allowBackup参数)中指定其数据是否应包含在ADB备份中。Android备份通常包含sdcard内容和一些本机数据库。
2. Agent:该工具安装一个代理(基本上是一个APK文件),该代理请求读取本机应用程序数据的权限,特别是联系人,呼叫日志和SMS / MMS。在GDPR之后,Google更改了其权限政策 ,并对仅读取默认处理程序的调用日志和SMS进行了限制:这要求对大多数取证工具使用的流程进行一些更改 。
3. ADB Screenshot:该工具利用了ADB功能,该功能允许对设备进行屏幕截图。通过这种方式,还可以使用某些图像分析技术对第三方应用程序进行“截屏”,然后在该工具中进行处理,以解析内容并使之可读和可搜索。
4. APK Downgrade:该工具通过保留用户数据来卸载第三方软件包(应用程序)的实际版本,并安装android:allowBackup参数设置为“ true”的同一软件包的先前版本。该工具会创建一个包含特定应用程序的ADB备份,然后重新安装实际的应用程序版本。
实际上,Android Debug Bridge比这更强大,因为它允许我们获取没有root特权的shell。在此Shell中,可以运行命令(Linux本地和Android特定),并从设备中提取文件和文件夹(不需要root特权)。
多年来,发布了各种利用ADB的开源工具和脚本:
Andriller:https://github.com/den4uk/andriller Android Live Info:https://github.com/Magpol/AndroidLiveInfo Foroboto:https://github.com/chapinb/foroboto ADB Export:https://github.com/sromku/adb-export
举一个简单的例子,通过使用本地Android命令“ dumpsys usagestats ”,可以获得有关应用程序使用情况的信息,包括已删除的应用程序。
受先前工作的启发,并阅读了有关该主题的大量文献(包括新的Android Internals书籍)后,我决定编写一个简单的bash脚本android_triage,该脚本在最大程度上利用了ADB。
https://github.com/RealityNet/android_triage
该脚本是在Tsurugi Project 创始人Giovanni Rattarto的支持下开发的 。它已经在Linux和Mac OS X上进行了测试,并且只有两个要求:特定平台的 ADB可执行文件 和 dialog命令 (此处提供了Mac OS X的说明 )。
下载完成后,需要使脚本可执行(chmod + x android_triage.sh),然后需要连接设备。
在执行脚本之前,需要通过将它们配对来允许移动设备和主机之间进行ADB通信。
有多种方法可以执行此操作:可能最简单的方法是执行adb reconnect。
始终可以通过执行adb devices命令来检查配对状态:当看到“ device ”消息时,表示配对成功。
正确连接设备后,即可执行脚本。
如果在路径或脚本文件夹中未找到ADB命令,则脚本将提示错误消息,如图所示。
如果设备未正确连接或配对,脚本将提示错误消息,如图所示。
选项1-收集基本信息
该选项通过执行以下命令来收集有关设备的基本信息:
adb shell getprop adb shell settings list system adb shell settings list secure adb shell settings list global
它还会生成“ device_info.txt ”文件,其中包含有关设备的相关信息:
Device Manufacturer (adb shell getprop ro.product.manufacturer) Device Product (adb shell getprop ro.product.model) Android ID (adb shell settings get secure android_id) Android Serial Number (adb shell getprop ril.serialnumber) Product Code (adb shell getprop ro.product.code) Product Device (adb shell getprop ro.product.device) Product Name (adb shell getprop ro.product.name) Chipname (adb shell getprop ro.chipname) Android Version (adb shell getprop ro.build.version.release) Android Fingerprint (adb shell getprop ro.build.fingerprint) Build date (adb shell getprop ro.build.date) Build ID (adb shell ro.build.id) Bootloader Version (adb shell ro.boot.bootloader) Security Patch (adb shell ro.build.version.security_patch) Bluetooth Address (adb shell settings get secure bluetooth_address) Bluetooth Name (adb shell settings get secure bluetooth_name) Timezone (adb shell getprop persist.sys.timezone) USB Configuration (adb shell getprop persist.sys.usb.config) Storage Size (adb shell getprop storage.mmc.size) Notification Sound (adb shell getprop ro.config.notification_sound) Alerm Alert (adb shell getprop ro.config.alarm_alert) Ringtone (adb shell getprop ro.config.ringtone) Media Sound (adb shell getprop rro.config.media_sound) Device Time (adb shell date)
输出保存在以下路径(相对于脚本路径)中:“ $ {ANDROID_ID} / $ {date +”%Y%m%d%H%M_%S“} _ info”
选项2-执行实时命令
该选项执行各种Linux命令。
adb shell id adb shell uname -a adb shell cat /proc/version adb shell uptime adb shell printenv adb shell cat /proc/partitions adb shell cat /proc/cpuinfo adb shell cat /proc/diskstats adb shell df adb shell df -ah adb shell mount adb shell ip address show wlan0 adb shell ifconfig -a adb shell netstat -an adb shell lsof adb shell ps -ef adb shell top -n 1 adb shell cat /proc/sched_debug adb shell vmstat adb shell sysctl -a adb shell ime list adb shell service list adb shell logcat -S -b all adb shell logcat -d -b all V:*
输出保存在以下路径(相对于脚本路径)中: “ $ {ANDROID_ID} / $ {date +”%Y%m%d%H%M_%S“} _ live”
选项3-执行程序包管理器命令
此选项执行各种Android Package Manager命令。
adb shell pm get-max-users adb shell pm list users adb shell pm list features adb shell pm list instrumentation adb shell pm list libraries -f adb shell pm list packages -f adb shell pm list packages -f -u adb shell pm list permissions -f adb shell cat /data/system/uiderrors.txt
输出保存在以下路径(相对于脚本路径)中: “ $ {ANDROID_ID} / $ {date +”%Y%m%d%H%M_%S“} _ package_manager”
选项4-执行Bugreport和Dumpsys
此选项执行Android Bugreport和Android Dumpsys命令。
adb bugreport adb shell dumpsys adb shell dumpsys account adb shell dumpsys activity adb shell dumpsys alarm adb shell dumpsys appops adb shell dumpsys audio adb shell dumpsys autofill adb shell dumpsys backup adb shell dumpsys battery adb shell dumpsys batteryproperties adb shell dumpsys batterystats adb shell dumpsys bluetooth_manager adb shell dumpsys carrier_config adb shell dumpsys clipboard adb shell dumpsys connectivity adb shell dumpsys content adb shell dumpsys cpuinfo adb shell dumpsys dbinfo adb shell dumpsys device_policy adb shell dumpsys devicestoragemonitor adb shell dumpsys diskstats adb shell dumpsys display adb shell dumpsys dropbox adb shell dumpsys gfxinfo adb shell dumpsys iphonesubinfo adb shell dumpsys jobscheduler adb shell dumpsys location adb shell dumpsys meminfo -a adb shell dumpsys mount adb shell dumpsys netpolicy adb shell dumpsys netstats adb shell dumpsys network_management adb shell dumpsys network_score adb shell dumpsys notification adb shell dumpsys package adb shell dumpsys password_policy adb shell dumpsys permission adb shell dumpsys phone adb shell dumpsys power adb shell dumpsys procstats --full-details adb shell dumpsys restriction_policy adb shell dumpsys sdhms adb shell dumpsys sec_location adb shell dumpsys secims adb shell dumpsys search adb shell dumpsys sensorservice adb shell dumpsys settings adb shell dumpsys shortcut adb shell dumpsys stats adb shell dumpsys statusbar adb shell dumpsys storaged adb shell dumpsys telecom adb shell dumpsys usagestats adb shell dumpsys user adb shell dumpsys usb adb shell dumpsys vibrator adb shell dumpsys wallpaper adb shell dumpsys wifi adb shell dumpsys window
输出保存在以下路径(相对于脚本路径)中: “ $ {ANDROID_ID} / $ {date +”%Y%m%d%H%M_%S“} _ dumpsys”。
选项5-获取ADB备份
该选项通过执行以下命令来创建ADB备份
adb backup -all -shared -system -apk -f "$BACKUP_DIR"/backup.ab
该命令需要与设备进行交互
输出保存在以下路径(相对于脚本路径): “ $ {ANDROID_ID} / $ {date +”%Y%m%d%H%M_%S“} _ backup”
选项6-获取“ / system”文件夹
此选项获取“ / system”文件夹并将其保存为本地文件,也保存为tar文件。
adb pull /system/ adb pull /system/app adb pull /system/camerdata adb pull /system/container adb pull /system/etc adb pull /system/fake-libs adb pull /system/fonts adb pull /system/framework adb pull /system/hidden adb pull /system/lib adb pull /system/lib64 adb pull /system/media adb pull /system/priv-app adb pull /system/saiv adb pull /system/tts adb pull /system/usr adb pull /system/vendor adb pull /system/xbin
输出保存在以下路径(相对于脚本路径)中:“ $ {ANDROID_ID} / $ {date +”%Y%m%d%H%M_%S“} _ system ”
选项7-获取“ / sdcard”文件夹
此选项获取“ / sdcard”文件夹并将其保存为本地文件,也保存为tar文件。
adb pull /scard
输出保存在以下路径(相对于脚本路径)中:“ $ {ANDROID_ID} / $ {date +”%Y%m%d%H%M_%S“} _ sdcard ”
选项8-从“ / data”文件夹中提取APK文件
此选项从“ / data”和“ / vendor”文件夹中提取APK文件,并将其另存为tar文件。
$SHELL_COMMAND pm list packages -f -u > ${APK_DIR}/${ANDROID_ID}_apk_list.txt SELECTED_FILE=${APK_DIR}/${ANDROID_ID}_apk_list.txt echo "[*] Pulling APK files" while read -r line do line=${line#"package:"} target_file=${line%%".apk="*} target_file=$target_file".apk" IFS='/' read -ra tokens <<<"$target_file" apk_type=${tokens[1]} app_folder=${tokens[2]} app_path=${tokens[3]} apk_name=${tokens[4]} if [[ ${apk_type} != "system" ]]; then mkdir -p ${APK_DIR}/${apk_type}/${app_folder}/${app_path} $PULL_COMMAND $target_file ${APK_DIR}/${apk_type}/${app_folder}/${app_path}/${apk_name} fi continue done < "$SELECTED_FILE"
输出保存在以下路径(相对于脚本路径):“ $ {ANDROID_ID} / $ {date +”%Y%m%d%H%M_%S“} _ apk ”
选项9-从内容提供商提取数据
此选项从Android Content Providers中提取数据。
adb shell content query --uri content://com.android.calendar/calendar_entities adb shell content query --uri content://com.android.calendar/calendars adb shell content query --uri content://com.android.calendar/attendees adb shell content query --uri content://com.android.calendar/event_entities adb shell content query --uri content://com.android.calendar/events adb shell content query --uri content://com.android.calendar/properties adb shell content query --uri content://com.android.calendar/reminders adb shell content query --uri content://com.android.calendar/calendar_alerts adb shell content query --uri content://com.android.calendar/colors adb shell content query --uri content://com.android.calendar/extendedproperties adb shell content query --uri content://com.android.calendar/syncstate adb shell content query --uri content://com.android.contacts/raw_contacts adb shell content query --uri content://com.android.contacts/directories adb shell content query --uri content://com.android.contacts/syncstate adb shell content query --uri content://com.android.contacts/profile/syncstate adb shell content query --uri content://com.android.contacts/contacts adb shell content query --uri content://com.android.contacts/profile/raw_contacts adb shell content query --uri content://com.android.contacts/profile adb shell content query --uri content://com.android.contacts/profile/as_vcard adb shell content query --uri content://com.android.contacts/stream_items adb shell content query --uri content://com.android.contacts/stream_items/photo adb shell content query --uri content://com.android.contacts/stream_items_limit adb shell content query --uri content://com.android.contacts/data adb shell content query --uri content://com.android.contacts/raw_contact_entities adb shell content query --uri content://com.android.contacts/profile/raw_contact_entities adb shell content query --uri content://com.android.contacts/status_updates adb shell content query --uri content://com.android.contacts/data/phones adb shell content query --uri content://com.android.contacts/data/phones/filter adb shell content query --uri content://com.android.contacts/data/emails/lookup adb shell content query --uri content://com.android.contacts/data/emails/filter adb shell content query --uri content://com.android.contacts/data/emails adb shell content query --uri content://com.android.contacts/data/postals adb shell content query --uri content://com.android.contacts/groups adb shell content query --uri content://com.android.contacts/groups_summary adb shell content query --uri content://com.android.contacts/aggregation_exceptions adb shell content query --uri content://com.android.contacts/settings adb shell content query --uri content://com.android.contacts/provider_status adb shell content query --uri content://com.android.contacts/photo_dimensions adb shell content query --uri content://com.android.contacts/deleted_contacts adb shell content query --uri content://downloads/my_downloads adb shell content query --uri content://downloads/download adb shell content query --uri content://media/external/file adb shell content query --uri content://media/external/images/media adb shell content query --uri content://media/external/images/thumbnails adb shell content query --uri content://media/external/audio/media adb shell content query --uri content://media/external/audio/genres adb shell content query --uri content://media/external/audio/playlists adb shell content query --uri content://media/external/audio/artists adb shell content query --uri content://media/external/audio/albums adb shell content query --uri content://media/external/video/media adb shell content query --uri content://media/external/video/thumbnails adb shell content query --uri content://media/internal/file adb shell content query --uri content://media/internal/images/media adb shell content query --uri content://media/internal/images/thumbnails adb shell content query --uri content://media/internal/audio/media adb shell content query --uri content://media/internal/audio/genres adb shell content query --uri content://media/internal/audio/playlists adb shell content query --uri content://media/internal/audio/artists adb shell content query --uri content://media/internal/audio/albums adb shell content query --uri content://media/internal/video/media adb shell content query --uri content://media/internal/video/thumbnails adb shell content query --uri content://settings/system adb shell content query --uri content://settings/system/ringtone adb shell content query --uri content://settings/system/alarm_alert adb shell content query --uri content://settings/system/notification_sound adb shell content query --uri content://settings/secure adb shell content query --uri content://settings/global adb shell content query --uri content://settings/bookmarks adb shell content query --uri content://com.google.settings/partner adb shell content query --uri content://nwkinfo/nwkinfo/carriers adb shell content query --uri content://com.android.settings.personalvibration.PersonalVibrationProvider/ adb shell content query --uri content://settings/system/bluetooth_devices adb shell content query --uri content://settings/system/powersavings_appsettings adb shell content query --uri content://user_dictionary/words adb shell content query --uri content://browser/bookmarks adb shell content query --uri content://browser/searches adb shell content query --uri content://com.android.browser adb shell content query --uri content://com.android.browser/accounts adb shell content query --uri content://com.android.browser/accounts/account_name adb shell content query --uri content://com.android.browser/accounts/account_type adb shell content query --uri content://com.android.browser/accounts/sourceid adb shell content query --uri content://com.android.browser/settings adb shell content query --uri content://com.android.browser/syncstate adb shell content query --uri content://com.android.browser/images adb shell content query --uri content://com.android.browser/image_mappings adb shell content query --uri content://com.android.browser/bookmarks adb shell content query --uri content://com.android.browser/bookmarks/folder adb shell content query --uri content://com.android.browser/history adb shell content query --uri content://com.android.browser/bookmarks/search_suggest_query adb shell content query --uri content://com.android.browser/searches adb shell content query --uri content://com.android.browser/combined
输出保存在以下路径(相对于脚本路径)中:“ $ {ANDROID_ID} / $ {date +”%Y%m%d%H%M_%S“} _ contentprovider ”
本文翻译自:https://blog.digital-forensics.it/2021/03/triaging-modern-android-devices-aka.html如若转载,请注明原文地址: