iOS取证技巧:在无损的情况下完整导出SQLite数据库

在上一篇文章中,我向大家介绍了有关利用iOS DeveloperImage中一些特性的方法,其中包括在已越狱设备上启动带有自定义环境变量的App。说实话,我的最初动机是为了寻找沙箱逻辑问题,但失败了。值得庆幸的是我发现了另一个非常实用的技巧,即通过利用其中的一些特性来提取SQLite数据库。该方案需要屏幕解锁和可信USB连接。

为了运行完整的实验,你需要安装以下工具:

https://github.com/libimobiledevice/libimobiledevice

https://github.com/libimobiledevice/ideviceinstaller

https://github.com/emonti/afcclient(可选。如果你不想自己编写libimobiledevice的代码,就用这个)

SQLite日志记录

iOS上当前内置的SQLite支持调试选项:如果设置了SQLITE_SQLLOG_DIR环境,则每个数据库在给定目录中都会有一个副本,且sql查询为纯文本形式。

sqlite文档:https://www.sqlite.org/src/doc/trunk/src/test_sqllog.c

我们的实验从一个越狱设备开始。只需启动带有SQLITE_SQLLOG_DIR的Gmail应用程序,指向它有权写入的位置:

修改上一篇文章中的脚本,向环境添加一个新密钥:

以下是为目录生成的内容:

文件名中的05860是pid,格式化为固定的5位数。idx文件是原始数据库的映射索引。

例如,所有 /var/mobile/Containers/Data/Application/E89CEF28–30BA-41F8-BDB3-BD05E0598D32/Library/Application Support/data/johnsmith@outlook.com/sqlitedb 的查询被记录在了sqllog_05860_00000.sql文件中。

sqllog_05860_00.db是其副本。

未越狱设备

现在问题是,iOS上的应用程序被“监禁”在容器中,如果没有完整备份将仍然无法访问这些容器。每个规则都有一个例外,沙箱配置文件也不例外。

某些内置应用程序有写入权限到 /var/mobile/Media/iTunes_Control/iTunes 目录。

以及一些应用程序还拥有 com.apple.security.exception.files.absolute-path.read-write 或 com.apple.security.exception.files.home-relative-path.read-write 权限。

你可以通过以下命令读取这些权限。

VioceMemo:

MobileSafari:

iOS允许在 /var/mobile/Media 中进行沙箱文件访问。许多第三方iPhone管理工具允许你直接操作此位置,甚至还会提供一个GUI界面。

另一个可读的位置是CrashReporter。你可以使用idevicecrashreport获取文件。

但需要提醒大家的是,并非所有内置的应用程序都有这些例外,更别说是那些第三方应用了。

Demo

在测试期间启动Instruments,并使用上一篇文章中的frida脚本将bundle ID更改为目标。

com.apple.mobilesafari

这里有Safari浏览器状态,书签,历史记录,每个站点首选项,HTML5本地存储甚至缓存。请注意,通常Cache.db不会包含在备份中,并且它是以纯文本格式存储http请求的。

com.apple.mobilemail

com.apple.mobilephone

地址簿和通话记录:

但你无法提取sms.db,因为它属于xpc服务IMDPersistenceAgent。消息应用com.apple.MobileSMS通过XPC与其通信,而不是打开数据库。

*参考来源:medium,FB小编secist编译,转载请注明来自FreeBuf.COM

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190117B12WLH00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券