提取、处理与查询iOS设备上的Apple统一日志
Apple统一日志是什么?它们为何在我的数字取证检查中如此重要?
引言
统一日志以高度细粒度的方式记录Apple设备上的“生命模式”信息。根据Apple的文档说明:
统一日志系统提供了一个全面且高性能的API,用于捕获系统各个层面的遥测数据。该系统将日志数据集中存储在内存和磁盘上,而不是将其写入基于文本的日志文件。您可以使用控制台应用程序、日志命令行工具或Xcode调试控制台查看日志消息。
例如,在iOS中,这些日志记录了以下信息:
- 设备方向(正面朝上、正面朝下)。
- 屏幕锁定和解锁(使用生物识别)。
- 导航开始及目的地地址。
- 设备开机、关机。
- 水平滚动。
- 应用程序打开。
- 前台运行的应用程序。
这些日志中还包含许多具有巨大取证价值的其他信息。Lionel Notari一直在他的ios-unifiedlogs.com网页上汇总这些信息。目前,他的页面是基于研究的统一日志信息汇总的最佳来源。
为了访问这些信息,需要提取并保存日志。提取过程的最终产物将是一个.logarchive存档文件。
.logarchive示例
在macOS系统中,图形用户界面将.logarchive显示为单个实体。实际上,它是一个目录,聚合了多个目录和文件。
.logarchive的内容
这些目录和文件是从iOS设备的/private/var/db/diagnostics和/private/var/db/uuidtext目录中聚合而来的。值得注意的是,uuidtext目录包含支持文件,而diagnostics目录包含.tracev3文件。
.tracev3文件示例
我们有不同的提取方法可以使用。
提取
为了提取日志,我们可以执行以下操作之一:
- 将iOS设备连接到macOS计算机,并在终端中使用
log collect命令。- 打开终端并执行
sudo log collect --device --output /path/to/filename.logarchive - Tim Korver为此流程提供了一个有用的流程图,可在github.com/Ankan-42/Apple-Unified-Log找到。
- 打开终端并执行
- 使用第三方工具,如UFADE或iOS日志采集工具。
- Christian Peter开发的UFADE(通用取证苹果设备提取器)可在github.com/prosch88/UFADE下载。
- Lionel Notari开发的iOS日志采集工具可在www.ios-unifiedlogs.com/iosunifiedlogtool下载。
- 从完整的文件系统提取中提取日志文件。
- 要从直接从iOS完整文件系统提取中拉取的文件生成
.logarchive,需要遵循几个步骤。本节信息由洛桑大学的研究员Johann Polewczyk友好提供。- 提取
diagnostics和uuidtext文件夹的内容(所有子目录和文件),并将其放置在一个目录的根目录中。 - 创建一个
Info.plist文件并将其放在该目录的根目录中。示例plist:1 2 3 4 5 6 7 8<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>OSArchiveVersion</key> <integer>4</integer> </dict> </plist>- 必须包含带有
OSArchiveVersion的Info.plist以确保兼容性。 OSArchiveVersion下的整数必须与来源的iOS或OS版本对齐。
- 必须包含带有
- 在目录名称末尾添加
.logarchive扩展名。
- 提取
- 要从直接从iOS完整文件系统提取中拉取的文件生成
在macOS上,带有.logarchive扩展名后,目标文件夹被视为一个包,您可以使用控制台应用程序打开,或使用终端中的log show命令进行解析。
我尚未找到通过控制台应用程序有效生成报告的方法,并且使用log show命令进行工作的效率不如我所期望的那样高。为了更有效地查询数据,必须将数据转换为另一种格式。同样重要的是要注意,大多数检查人员在基于Windows的环境中工作,不得不使用macOS设备进行查询和报告可能不切实际。为此,我们开发了一种在macOS外部使用iLEAPP查询日志的方法。
查询Apple统一日志
在此过程中,macOS设备将仅用于将.logarchive转换为JSON文件。这意味着检查人员可以使用单个macOS设备进行转换,同时在基于Windows的系统上进行查询和报告。尽管有第三方脚本提供.logarchive到JSON的转换,但我们认为通过macOS设备本身进行转换是更合适且可追踪的转换方式。与第三方转换工具不同,基于macOS的流程保持了Apple键名的完整性,并且由于它是使用Apple转换流程的Apple设备,因此转换可靠性水平得到了提高。使用数据创建者设计的工具来查看、输出或转换数据是最好的方法。
为了将.logarchive转换为JSON格式,请打开终端并键入以下命令:
|
|
请注意,JSON文件的名称必须是logarchive.json,以便iLEAPP能够处理它。从.logarchive到JSON的转换需要时间。请注意,与源.logarchive相比,JSON文件将极其庞大。例如,一个1.63 GB的存档将生成一个29.19 GB的JSON文件。
大小比较
当iLEAPP处理文件时,它会从每个JSON记录中提取选定的字段并将其放入SQLite数据库中。这极大地有助于通过使用像DB Browser for SQLite这样的SQLite查看器,使用SQL命令来查询数据。由于数据量巨大(一秒钟的日志输出可能包含3万个条目),使用HTML、EXCEL或PDF报告格式无法审查所有数据。SQLite提供了一种有效的方法来做到这一点。
- 下载并打开iLEAPP。
- 选择
logarchive.json文件所在的目录。 - 选择您的输出目录。
- 在“可用模块”中仅选择“日志 [Logarchive]”模块。
- 点击“处理”。
iLEAPP处理日志存档的选择
处理完成后,打开iLEAPP报告。由于HTML报告格式的大小限制,将没有HTML内容可供审查。在iLEAPP的下一个版本中,处理完成时会出现一个弹出通知,以及在生成的主HTML报告中会提示,某些信息量过大,无法通过HTML报告显示。它将建议查看“仅限LAVA内容”选项卡,以查看哪些内容属于此类,并指导用户查看_lava_artifacts.db来查询这些内容。在不久的将来,我们将发布一个名为LAVA的新报告查看器,它将使用户能够处理来自LEAPP处理的任何类型的数据输出,无论其大小如何。同时,可以使用DB Browser for SQLite访问iLEAPP生成的数据库中的处理数据。
以下屏幕截图演示了上述通知。
查询SQLite数据库
在开始查询日志之前,请考虑以下几点:
- iLEAPP将从JSON文件中提取选定的字段。目前这些字段是’Timestamp’、‘Process ID’、‘Subsystem’、‘Category’、‘Event Message’和’Trace ID’。将根据这些字段可能包含信息的研究价值添加更多字段。
- 完整的日志内容同时存在于
.logarchive和JSON文件中。 - 在不久的将来,我们将为有价值的特定日志条目构建单独的内容项。
要开始查询数据库,请打开iLEAPP报告文件夹并找到_lava_artifacts.db文件。使用DB Browser for SQLite打开它。
iLEAPP报告文件夹的内容
选择日志存档表以查看内容。
日志存档表的内容
右键单击时间戳列,选择“编辑显示格式”选项。从选择框中,根据案件和设备的事实情况,选择“Unix Epoch to Date”或“Unix Epoch To Local Time”。
DB Browser for SQLite中的时间戳格式设置
所有数据就绪后,检查人员可以在“执行SQL”选项卡中使用SQL语句查询数据。以下是一些关于如何缩小关注范围的建议:
- 使用时间戳来关注感兴趣的时间段。
- 注意,一秒钟的日志记录可能包含1.4万到3万个条目,甚至更多。
- 使用已知的
event_message值来关注感兴趣的内容。充分利用Lionel Notari等人所做的研究。 - 使用SQL语句查看感兴趣内容之前和之后的条目集合,以清晰了解设备的活动情况,包括用户生成的操作。
日志中一个有用内容的示例是由方向子系统生成的。注意从LandscapeLeft到FaceDown的变化。
统一日志中记录的方向变化
总结
- Apple统一日志是一个必不可少的数据源,未来的检查人员不能忽视。
- 需要获取并保存此数据源。
- 为了简化分析,可以使用macOS设备将日志转换为JSON文件。
- 要查询日志内容,可以使用iLEAPP将JSON文件转换为SQLite数据库。
- 可以使用DB Browser for SQLite访问SQLite数据库。在不久的将来,LEAPP开发人员将发布LAVA,使用户能够访问SQLite数据库的内容。
希望以上内容信息丰富且有所帮助。如有问题或评论,您可以通过以下链接在所有社交媒体上找到我:https://linqapp.com/abrignoni