如何查看macOS一个月前的进程执行记录

一、媒介

数字取证阐发职员在阐发macOS时,很可贵到关于法度榜样履行的相关信息,但现在环境已有所改不雅。在macOS 10.13(High Sierra)中,Apple推出了CoreAnalytics,这是一种系统诊断机制,可以获取系统上履行过的Mach-O法度榜样记录,光阴跨度大年夜约为1个月阁下。CoreAnalytics可以为内部要挟查询造访义务以及应急事故相应供给许多异常有代价的信息,可以用于以了局景:

1、确定系统的应用时长,粒度以天为单位;

2、确定特定日期有哪些法度榜样被运行过,是曩昔台照样今后台模式运行;

3、大年夜致确定法度榜样处于运行或活动状态的时长,也能大年夜致给出法度榜样启动或者以交互式前台要领运行的次数。

本文从技巧角度大年夜致先容并阐发了macOS 10.13中的CoreAnalytics机制,同时也先容了若何将这类信息解析为更轻易理解的款式,赞助查询造访职员阐发取证。

二、概览

CoreAnalytics可以供给关于法度榜样履行的历史记载以及当前记录,基础上以天为单位。这些数据来自于两个源:

1、/Library/Logs/DiagnosticReports/目录中以.core_analytics为扩展名的文件,内容为JSON款式:解析前两笔记录可以得到有关诊断历程的启动及停止光阴戳信息,解析后面的数据可以得到诊断时代系统及利用的应用环境;

2、/private/var/db/analyticsd/aggregates/目录中文件名类似GUID的文件,内容为嵌套数组:在当前诊断历程时代,子系统将临时阶段性法度榜样履行数据以聚合文件形式申报给数据阐发守护法度榜样。阶段性数据平日会在诊断周期停止时推送到.core_analytics文件中。

诊断周期由.core_analytics文件的前两行定义,分手确定诊断周期的开始及停止光阴。每个诊断周期在在00:00:00 UTC后的系统首次休眠或者关闭时就会停止。前面提到过,在诊断周期停止时,当日的数据在提交到.core_analytics文件用作经久存储前,会先寄放在聚合文件中。是以,CoreAnalytics无法用来确定法度榜样运行的光阴范围(只能大年夜约给出24小时的光阴区域)。

为了处置惩罚这种场景,我们编写了一个Python脚本(请造访我们的GitHub下载),该脚本可以解析CoreAnalytics以及聚合文件,将结果写入到加倍清晰的JSON或者CSV文件中。CoreAnalyticsParser脚本可以支持如下功能:

1、解析每个.core_analytics文件中记录的诊断周期开始及停止光阴,并将其转换为UTC以及IOS8601光阴;

2、从每个.core_analytics文件中提取与每笔记录相关的可用字段;

3、将以秒数表示的原始值转换为更轻易理解的%H:%M:%S strftime款式;

4、将与comappleosanalyticsappUsage子系统关联的聚合文件解析为每个 .core_analytics文件中该子系统所天生的相同字段。

在.core_analytics文件中某个利用的履行记录大年夜致如下所示:

{ ‘message’: { ‘activations’: 105,

‘activeTime’: 4250,

‘activityPeriods’: 12,

‘appDescription’: ‘com.google.Chrome ||| 67.0.3396.87 (3396.87)’,

‘foreground’: ‘YES’,

‘idleTimeouts’: 4,

‘launches’: 0,

‘powerTime’: 12537,

‘processName’: ‘Google Chrome’,

‘uptime’: 26110},

‘name’: ‘comappleosanalyticsappUsage’,

‘uuid’: ‘4d7c9e4a-8c8c-4971-bce3-09d38d078849’}

表1. Google Chrome对应的CoreAnalytics记录样例

由CoreAnalyticsParser解析后,同一个记录会被解析成如下结果:

{ ‘src_report’: ‘/path/to/Analytics_2018-06-29-173717_ML-C02PA037R9QZ.core_analytics’,

‘diag_start’: ‘2018-06-29T00:00:09Z’,

‘diag_end’: ‘2018-06-30T00:37:17.660000Z’,

‘name’: ‘comappleosanalyticsappUsage’,

‘uuid’: ‘4d7c9e4a-8c8c-4971-bce3-09d38d078849’,

‘processName’: ‘Google Chrome’,

‘appDescription’: ‘com.google.Chrome ||| 67.0.3396.87 (3396.87)’,

‘appName’: ‘com.google.Chrome’,

‘appVersion’: ‘67.0.3396.87 (3396.87)’,

‘foreground’: ‘YES’,

‘uptime’: ‘26110’,

‘uptime_parsed’: ‘7:15:10’,

‘powerTime’: ‘12537’,

‘powerTime_parsed’: ‘3:28:57’,

‘activeTime’: ‘4250’,

‘activeTime_parsed’: ‘1:10:50’,

‘activations’: ‘105’,

‘launches’: ‘0’,

‘activityPeriods’: ’12’,

‘idleTimeouts’: ‘4’}

表2. CoreAnalyticsParser脚本将图1中CoreAnalytics的结果解析成JSON数据

留意:如上解析结果为JSON款式数据,可以应用-j选项输出为JSON数据。默认环境下,解析脚本会将结果输出为CSV款式。

该脚本可以在实时系统上运行,也可以处置惩罚包孕CoreAnalytics或者聚合文件的目录。

三、技巧阐发

CoreAnalytics文件

.core_analytics文件中包孕JSON记录,这些记录可以表示法度榜样履行历史及光阴戳信息,光阴戳可以划出历史数据所对应的特定诊断周期。这些文件位于/Library/Logs/DiagnosticReports/目录中,文件名采纳Analytics_YYYY_MM_DD_HHMMSS_.core_analytics款式。文件名中的光阴戳基于的是系统的本地光阴信息。在10.13版本之前,DiagnosticReports目录只包孕法度榜样故障及崩溃申报,现在,不论法度榜样是否崩溃,该目录中都邑包孕与法度榜样履行有关的数据。

认真天生和网络系统阐发及诊断数据的守护法度榜样同样会掩护/private/var/db/analyticsd目录中已预先写好的CoreAnalytics文件信息。在该目录中,currentConfiguration.json文件貌似掩护着一个字典集,对应与子系统相匹配的名称、UUID以及数据类型。

[1] [2] [3] [4]下一页

在/private/var/db/analyticsd/journals目录中,da2-identity.json文件包孕近来天生的CoreAnalytics文件中的_marker记录列表。第一笔记录平日会比当前可用的第一个CoreAnalytics文件要早上7-10天,着末一笔记录对应近来写入后的申报。平日环境下,这些数据可以用来确认预期的所有.core_analytics文件都存在且未被窜改。

定义诊断周期

.core_analytics文件的首笔记录包孕一个光阴戳字段,字段值对应诊断周期停止的光阴。虽然光阴戳以本地光阴为根基,但带无意偶尔区信息。假如该字段值未被改动,则该当匹配该文件的上次改动光阴戳。换句话说,只有在诊断周期停止后,.core_analytics文件才会被写入到这个目录中。

{ ‘bug_type’: ‘211’,

‘os_version’: ‘Mac OS X 10.13.5 (17F77)’,

‘timestamp’: ‘2018-06-05 17:16:48.19 -0700’}

表3. .core_analytics文件的第一行记录,包孕诊断周期停止光阴戳信息

我们可以在以_marker开首的JSON记录中找到诊断周期的开始光阴,即startTimestamp字段中的UTC光阴戳。

{ ‘_marker’: ”,

‘_preferredUserInterfaceLanguage’: ‘en’,

‘_userInterfaceLanguage’: ‘en’,

‘_userSetRegionFormat’: ‘US’,

‘startTimestamp’: ‘2018-06-05T00:19:13Z’,

‘version’: ‘1.0’}

表4. .core_analytics文件的第二行记录,包孕诊断周期开始光阴戳信息

CoreAnalytics文件基础上天天都邑写入到DiagnosticReports目录中,并且在系统应用时代,两个记录文件的光阴距离基础上无缝连接。在诊断时代,假如系统处于就寝或者关机状态,则不会天生CoreAnalytics文件。

诊断周期开始光阴 诊断周期停止光阴

2018-06-08T01:51:23Z 2018-06-09T01:50:01.370000Z

2018-06-10T16:49:09Z 2018-06-11T03:53:15.140000Z

2018-06-11T03:53:14Z 2018-06-12T02:50:17.410000Z

2018-06-12T02:50:17Z 2018-06-13T00:17:45.870000Z

2018-06-13T00:17:45Z 2018-06-14T01:17:06.340000Z

表5. 系统继续应用几天时,.core_analytics文件之间无缝连接,当系统未激活时则会呈现断档

根据我们对/private/var/db/analyticsd/Library/Preferences/analyticsd.plist这个二进制plist文件的阐发结果,这些文件平日会在天天00:00:00 UTC光阴后系统首次就寝或关闭时在DiagnosticReports目录中天生。该plist文件以Unix Epoch款式记录了.core_analytics的上次提交光阴以及下次提交光阴。

Key: cadence

Type: String

Value:

{ ‘bootToken’: 1530574585000000,

‘lastSubmission’: 1531256233,

‘nextSubmission’: 1531267200,

‘osVersion’: ’17E202′,

‘version’: 1}

表6. analyticsd.plist文件内容,包孕上次提交及下次提交光阴戳信息

然而我们的测试显示,申报平日会在提交光阴过后的首次就寝或者关机时写入。

系统应用信息

在光阴戳及marker记录之后,comappleosanalyticssystemUsage子系统所天生的数据反应了系统的运行时长(以秒为单位)。该子系统可能会在主机就寝或关闭后天生新的记载。将这些记录中的uptime字段值加起来后就可以获得系统处于生动状态下的总光阴。Uptime字段异常简单,为uptime值的千位数。activeTime字段很有可能表示的是系统运行状态下被应用的时长(以秒为单位),如下两笔记录所示,系统有两个阶段处于唤醒状态下(时长分手为4分钟以及40分钟),总时长为44分38秒,但应用时长仅为14分26秒。

{ ‘message’: { ‘Uptime’: 0,

‘activations’: 2,

‘activeTime’: 42,

‘idleTimeouts’: 1,

‘uptime’: 247},

‘name’: ‘comappleosanalyticssystemUsage’,

‘uuid’: ‘00866801-81a5-466a-a51e-a24b606ce5f1’}

{ ‘message’: { ‘Uptime’: 2000,

‘activations’: 2,

‘activeTime’: 824,

‘idleTimeouts’: 1,

‘uptime’: 2431},

‘name’: ‘comappleosanalyticssystemUsage’,

‘uuid’: ‘00866801-81a5-466a-a51e-a24b606ce5f1’}

表7. 反映系统应用状态的两笔记录

接下来的两笔记录分手为2小时的心跳记录一次1天的心跳记录。这些记录的感化尚未澄清,由于这些心跳记录彷佛与诊断周期的时长或者任何法度榜样的运行光阴无关。BogusFieldNotActuallyEverUsed这个字段名很可能表示不仅该字段已被弃用,以致这条数据本身已被弃用。

{ ‘message’: { ‘BogusFieldNotActuallyEverUsed’: ‘null’, ‘Count’: 7},

‘name’: ‘TwoHourHeartbeatCount’,

‘uuid’: ‘7ad14604-ce6e-45f3-bd39-5bc186d92049’}{ ‘message’: { ‘BogusFieldNotActuallyEverUsed’: ‘null’, ‘Count’: 1},

‘name’: ‘OneDayHeartBeatCount’,

‘uuid’: ‘a4813163-fd49-44ea-b3e1-e47a015e629c’}

表8. 心跳记录

利用应用信息

后面开始的每一行都包孕3个键:name、uuid以及message。name以及uuid键可以映射到天生该记录的特定子系统,message字段包孕一个嵌套JSON记录,此中包孕其他一些数据。我们所察看到的一些最为常见的子系统以及UUID值如下所示:

上一页[1] [2] [3] [4]下一页

子系统名 UUID

comappleosanalyticsappUsage 4d7c9e4a-8c8c-4971-bce3-09d38d078849

comappleosanalyticssystemUsage 00866801-81a5-466a-a51e-a24b606ce5f1

comappleosanalyticsMASAppUsage 0fd0693a-3d0a-48be-bdb2-528e18a3e86c

TwoHourHeartbeatCount 7ad14604-ce6e-45f3-bd39-5bc186d92049

OneDayHeartBeatCount a4813163-fd49-44ea-b3e1-e47a015e629c

表9. 向守护法度榜样申报数据的常见子系统及对应的UUID

我们的测试注解,这些UUID在运行macOS 10.13.4以及10.13.5系统上均维持同等,这注解UUID仅与子系统及子系统的版本有关,假如Apple将来改动子系统时,这些值可能也会发生改变。

comappleosanalyticsappUsage子系统会为履行的每个法度榜样天生一笔记录。

{ ‘message’: { ‘activations’: 105,

‘activeTime’: 4250,

‘activityPeriods’: 12,

‘appDescription’: ‘com.google.Chrome ||| 67.0.3396.87 (3396.87)’,

‘foreground’: ‘YES’,

‘idleTimeouts’: 4,

‘launches’: 0,

‘powerTime’: 12537,

‘processName’: ‘Google Chrome’,

‘uptime’: 26110},

‘name’: ‘comappleosanalyticsappUsage’,

‘uuid’: ‘4d7c9e4a-8c8c-4971-bce3-09d38d078849’}

表10. comappleosanalyticsappUsage子系统天生的.core_analytics示例记录

message下包孕的9个字段可能会为阐发职员的取证事情供给大年夜量信息:

1、activeTime可能供给法度榜样处于前台运行时的秒数;

2、activityPeriods可能供给法度榜样被调到前台运行的次数;

3、appDescription直接来自于利用法度榜样包中Info.plist的相关信息。假如Info.plist中的相关键值信息钱式差错或者为空,这里字段的值则会显示为???;

在CoreAnalytics记录中寄放的数据满意如下款式:

|||()

表11. CoreAnalytics记录的数据款式

例如,Google Chrome.app的Info.plist文件中可以根据如下键值提掏出所需的信息:

CFBundleIdentifier

com.google.Chrome

CFBundleShortVersionString

67.0.3396.99

CFBundleVersion

3396.99

表12. Google Chrome.app利用Info.plist中的相关键值

假如法度榜样以自力的Mach-O可履行文件形式运行,或者Info.plist弗成用、款式差错或者不完备,那么appDescription就会显示为UNBUNDLED ||| ???。

例如,GlobalProtect中Info.plist的CFBundleVersion键值就无法获取到:

com.paloaltonetworks.GlobalProtect ||| 4.0.2-19 (???)

表13. GlobalProtect的CoreAnalytics记录中对应的appDescription值

其他字段的意义如下:

4、foreground字段的值为YES或者NO,表示法度榜样是否在前台运行;

5、idleTimeouts的含义今朝尚未澄清;

6、launches可能表示的是诊断申报时代利用的启动次数。假如利用在诊断周期开始前启动,那么launches的值为0;

7、根据我们的测试结果,powerTime可能表示的是法度榜样处于运行状态并耗损AC电源的光阴(以秒为单位);

8、processName的值来自于利用法度榜样包中Info.plist文件的CFBundleExecutable键值;

举个例子,Google Chrome.app中Info.plist文件的该键值信息如下:

CFBundleExecutable

Google Chrome

表14. Google Chrome.app利用Info.plist中的CFBundleExecutable键值

假如法度榜样为自力的Mach-O可履行文件,或者Info.plist弗成用、款式差错或者不完备,这个字段仍旧会在CoreAnalytics记录精确天生。根据我们的测试结果,今朝我们尚未澄清守护法度榜样获取该数据所应用的是哪个帮助滥觞。

如下所示,在某些环境下,processName字段将会留空。在这些场景中,我们实际上无法经由过程CoreAnalytics中推想履行的是哪个法度榜样。

{ ‘message’: { ‘activations’: 0,

‘activeTime’: 0,

‘activityPeriods’: 0,

‘appDescription’: ‘UNBUNDLED ||| ???’,

‘foreground’: ‘NO’,

‘idleTimeouts’: 0,

‘launches’: 2,

‘powerTime’: 0,

‘processName’: ”,

‘uptime’: 24},

‘name’: ‘comappleosanalyticsappUsage’,

‘uuid’: ‘4d7c9e4a-8c8c-4971-bce3-09d38d078849’}

表15. 无名法度榜样所对应的CoreAnalytics记录

9、uptime可能表示的是法度榜样运行的总时长(以秒为单位),该数字并未包孕系统就寝或者关闭的光阴。在诊断时代,某些法度榜样(如Dock)的运行光阴很可能与系统运行光阴邻近或完全匹配。在上文的系统应用信息部分中,两个uptime(247及2431)的总和与Dock利用的uptime值(2678)完全匹配,如下所示:

{ ‘message’: { ‘activations’: 0,

‘activeTime’: 0,

‘activityPeriods’: 0,

‘appDescription’: ‘com.apple.dock ||| 1.8 (1849.16)’,

‘foreground’: ‘NO’,

‘idleTimeouts’: 0,

‘launches’: 0,

‘powerTime’: 0,

‘processName’: ‘Dock’,

‘uptime’: 2678},

‘name’: ‘comappleosanalyticsappUsage’,

上一页[1] [2] [3] [4]下一页

‘uuid’: ‘4d7c9e4a-8c8c-4971-bce3-09d38d078849’}

表16. Dock利用对应的CoreAnalytics记录

在我们的测试中,我们发明另一个子系统(即comappleosanalyticsMASAppUsage)往CoreAnalytics文件中写入了与Microsoft OneNote有关的记录。JSON嵌套数据中的键值与comappleosanalyticsappUsage子系统所写的键值有所不合。这笔记录并没有应用一个appDescription字段,而是将CFBundleIdentifier和CFBundleShortVersionString(以及CFBundleVersion)写入identifier以及version字段中。除了launches之外,该记录还缺少其他所有字段。

{ ‘message’: { ‘identifier’: ‘com.microsoft.onenote.mac’,

‘launches’: 1,

‘version’: ‘15.32 (15.32.17030400)’},

‘name’: ‘comappleosanalyticsMASAppUsage’,

‘uuid’: ‘0fd0693a-3d0a-48be-bdb2-528e18a3e86c’}

表17. Microsoft OneNote对应的CoreAnalytics记录,由另一个子系统天生

可能其他子系统所天生的数据布局也会有所不合。

归纳当天履行数据

在诊断周期停止时,CoreAnalytics数据会被写入到文件中,在此之前我们有可能能规复这些数据。

在数据提交并推送到当天的CoreAnalytics文件之前,/private/var/db/analyticsd/aggregates/目录充当了每个子系统的临时性暂存目录。每个子系统在该目录中都对应一个阶段性文件,文件名为子系统的UUID值。比如,4d7c9e4a-8c8c-4971-bce3-09d38d078849文件包孕了1.0版comappleosanalyticsappUsage子系统所天生的申报数据(这些数据在00:00:00 UTC光阴后的首次就寝或者关机时会写入到/Library/Logs/DiagnosticReports/目录的CoreAnalytics文件中)。这些文件的内容彷佛为嵌套数组,比如Google Chrome所对应的数组如下所示:

[ [‘Google Chrome’, ‘com.google.Chrome ||| 67.0.3396.99 (3396.99)’, ‘YES’],

[5660, 145, 0, 0, 5, 2, 1020]]

表18. Google Chrome所对应的聚合数据

这些值对应comappleosanalyticsappUsage子系统所天生的CoreAnalytics记录中的一些字段,详细如下:

[ [processName, appDescription, foreground],

[uptime, activeTime, launches, idleTimeouts, activations, activityPeriods, powerTime]]

表19. 聚合数据的数组布局

解析聚合文件中中数组的值,将其与上述字段逐一对应后,我们现在就可以在当天阐发数据被提交至CoreAnalytics文件前,阐发当天利用的应用环境。

四、总结

CoreAnalytics可以为我们供给关于系统及利用法度榜样应用环境的大年夜量信息,法度榜样履行历史跨度长达一个月的,可以在查询造访义务中起到关键感化,因为查询造访行径本身特点,证据每每无法在现场第一光阴网络,此时能起到的感化也就加倍显着。只管Apple供给的官方文档可能会进一步澄清某些字段的用途及含义,钻研职员可以以本文为根基,开始钻研macOS系统上的利用活动数据。

上一页[1] [2] [3] [4]

赞(0) 打赏
分享到: 更多 (0)
免责申明:本站所有资料均来自于网络,版权归原创者所有!本站不提供任何保证,不保证真实性,并不承担任何法律责任

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

阿里云优惠网 更专业 更优惠

阿里云优惠券阿里云大礼包