回答“恶意软件是如何到达那里的?”的工具
项目描述
OSXCollector手册
OSXCollector是针对OSX的取证证据收集与分析工具包。
取证收集
收集脚本在可能受感染的机器上运行,输出一个描述目标机器的JSON文件。OSXCollector从plist、SQLite数据库和本地文件系统收集信息。
取证分析
有了取证收集,分析师可以回答类似以下问题:
- 这台机器是否已感染?
- 恶意软件是如何到达这里的?
- 我如何防止和检测进一步的感染?
Yelp自动化了大多数OSXCollector运行的分析,将其输出转换为易于阅读和操作总结的《仅针对可疑内容》。查看OSXCollector输出过滤器项目以了解如何充分利用自动化的OSXCollector输出分析。
执行收集
osxcollector.py
是一个不需要依赖项的单个Python文件,可以在标准的OSX机器上运行。这使得在任何机器上运行收集变得非常简单 - 无需处理brew、pip、配置文件或环境变量。只需将单个文件复制到机器上并运行即可
只需运行 sudo osxcollector.py
即可。
$ sudo osxcollector.py
Wrote 35394 lines.
Output in osxcollect-2014_12_21-08_49_39.tar.gz
如果您刚刚克隆了GitHub仓库,osxcollector.py
位于 osxcollector/
目录中,因此您需要以以下方式运行它:
$ sudo osxcollector/osxcollector.py
重要:请确保您的Mac OS X机器上的python
命令使用系统提供的默认Python解释器,而不是被如通过brew安装的Python版本覆盖。OSXCollector依赖于一些针对OS X库的本地Python绑定,这些绑定可能在其他非原始安装的Python版本中不可用。或者,您可以通过显式指定要使用的Python版本来运行osxcollector.py
$ sudo /usr/bin/python2.7 osxcollector/osxcollector.py
收集器的JSON输出以及一些有用的文件(如系统日志)已被打包成.tar.gz文件,以便传递给分析师。
osxcollector.py
提供了许多有用的选项来更改收集方式
-
-i INCIDENT_PREFIX
/--id=INCIDENT_PREFIX
:设置一个标识符,作为输出文件的名称前缀。默认值是osxcollect
。$ sudo osxcollector.py -i IncontinentSealord Wrote 35394 lines. Output in IncontinentSealord-2014_12_21-08_49_39.tar.gz
创意命名事件名称,这会让痛苦变得容易忍受。
-
-p ROOTPATH
/--path=ROOTPATH
:设置要运行收集的文件系统的根路径。默认值是/
。这对于在磁盘镜像上运行收集非常棒。$ sudo osxcollector.py -p '/mnt/powned'
-
-s SECTION
/--section=SECTION
:仅运行完整收集的一部分。可以指定多次。完整的部分和子部分列表如下版本
系统信息
内核扩展
启动
启动代理
脚本添加
启动项
登录项
应用程序
应用程序
安装历史
隔离区
下载
下载
电子邮件下载
旧电子邮件下载
Chrome
历史记录
存档历史记录
Cookie
登录数据
顶级网站
网页数据
数据库
本地存储
首选项
Firefox
Cookie
下载
表单历史
历史记录
登录
权限
插件
扩展
内容首选项
健康报告
Web应用存储
JSON文件
Safari
下载
历史记录
扩展
数据库
本地存储
扩展文件
帐户
系统管理员
系统用户
社交帐户
最近的项目
邮件
完整哈希
$ sudo osxcollector.py -s 'startup' -s 'downloads'
-
-c
/--collect-cookies
:收集Cookie的值。默认情况下,OSXCollector不会转储Cookie的值,因为它可能包含敏感信息(例如会话ID)。 -
-l
/--collect-local-storage
:收集网络浏览器本地存储中的值。默认情况下,OSXCollector不会转储这些值,因为它们可能包含敏感信息。 -
-d
/--debug
:启用详细输出和Python断点。如果OSXCollector有问题,请尝试此选项。$ sudo osxcollector.py -d
收集详情
收集器输出一个包含所有收集到的工件.tar.gz文件。归档包含一个包含大部分信息的JSON文件。此外,还包括一些有用的目标系统日志。
常见键
每条记录
JSON文件的每一行记录1 条信息。每个JSON记录中都有一些常见的键
osxcollector_incident_id
:每个记录共享的唯一ID。osxcollector_section
:该记录所持有的部分或数据类型。osxcollector_subsection
:该记录所持有的子部分或更详细的数据类型描述。
文件记录
对于表示文件的记录,有一些有用的键
atime
:文件访问时间。ctime
:文件创建时间。mtime
:文件修改时间。file_path
:文件的绝对路径。md5
:文件内容的MD5哈希。sha1
:文件内容的SHA1哈希。sha2
:文件内容的SHA2哈希。
对于表示下载文件的记录
xattr-wherefrom
:包含下载文件的源和引用URL的列表。xattr-quarantines
:描述下载文件的程序的字符串。
SQLite记录
代表SQLite数据库一行记录的记录
osxcollector_table_name
:该行记录来自的表名。osxcollector_db_path
:SQLite文件的绝对路径。
对于代表与特定用户相关数据的记录
osxcollector_username
:用户名
时间戳
OSXCollector尝试将时间戳转换为可读的日期时间字符串,格式为YYYY-mm-dd hh:MM:ss
。它使用启发式方法自动识别各种时间戳
- 自纪元以来的秒数
- 自纪元以来的毫秒数
- 自2001-01-01以来的秒数
- 自1601-01-01以来的秒数
部分
version
部分
OSXCollector的当前版本。
system_info
部分
收集有关系统的基本信息
- 系统名称
- 节点名称
- 版本
- 版本
- 机器
kext
部分
收集来自
/System/Library/Extensions
/Library/Extensions
startup
部分
收集来自以下位置的信息关于LaunchAgents、LaunchDaemons、ScriptingAdditions、StartupItems和其他登录项:
/System/Library/LaunchAgents
/System/Library/LaunchDaemons
/Library/LaunchAgents
~/Library/LaunchAgents
/Library/LaunchDaemons
/System/Library/ScriptingAdditions
/Library/ScriptingAdditions
/System/Library/StartupItems
/Library/StartupItems
~/Library/Preferences/com.apple.loginitems.plist
有关Mac OS X启动的更多信息,请参阅此处:http://www.malicious-streams.com/article/Mac_OSX_Startup.pdf
applications
部分
对已安装的应用程序进行哈希处理,并从以下位置收集安装历史记录:
/Applications
~/Applications
/Library/Receipts/InstallHistory.plist
quarantines
部分
隔离区基本上是当用户尝试打开从互联网下载的文件时显示“你确定要运行此文件吗?”所必需的信息。有关更多详细信息,请参阅Apple支持的隔离区说明:http://support.apple.com/kb/HT3662
本部分还收集了来自XProtect基于哈希的恶意软件检查的隔离文件信息。该plist位于:/System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/XProtect.plist
XProtect还为网络插件添加了最小版本。该plist位于:/System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/XProtect.meta.plist
downloads
部分
对所有用户的下载文件进行哈希处理,来自以下位置:
~/Downloads
~/Library/Mail Downloads
~/Library/Containers/com.apple.mail/Data/Library/Mail Downloads
chrome
部分
从Google Chrome网络浏览器收集以下信息
- 历史记录
- 存档历史记录
- Cookies
- 扩展
- 登录数据
- 热门网站
- 网页数据
这些数据是从以下位置提取的:~/Library/Application Support/Google/Chrome/Default
firefox
部分
从Firefox配置文件的不同SQLite数据库中收集信息
- Cookies
- 下载
- 表单历史记录
- 历史记录
- 登录
- 权限
- 插件
- 扩展
- 内容首选项
- 健康报告
- Webapp商店
这些信息是从以下位置提取的:~/Library/Application Support/Firefox/Profiles
有关Firefox配置文件文件夹的更多信息,请参阅http://kb.mozillazine.org/Profile_folder_-_Firefox
safari
部分
从Safari配置文件的不同plist和SQLite数据库中收集信息
- 下载
- 历史记录
- 扩展
- 数据库
- 本地存储
accounts
部分
收集有关用户账户的信息
- 系统管理员:
/private/var/db/dslocal/nodes/Default/groups/admin.plist
- 系统用户:
/private/var/db/dslocal/nodes/Default/users
- 社交账户:
~/Library/Accounts/Accounts3.sqlite
- 用户的近期项目:
~/Library/Preferences/com.apple.recentitems.plist
mail
部分
在邮件应用程序目录中散列文件
~/Library/Mail
~/Library/Mail Downloads
full_hash
部分
散列磁盘上所有文件。全部都散列。默认情况下不会运行。必须通过
$ sudo osxcollector.py -s full_hash
基本手动分析
法医分析既是艺术又是科学。每位分析师在阅读OSXCollector的输出时都会看到一点点不同的故事。这也是分析有趣的一部分。
通常,由于某些事情出了问题:防病毒软件发现了一个它不喜欢的文件,深度包检测观察到调用,端点监控注意到一个新启动项,所以会在目标机器上执行收集。这个初始警报的细节——文件路径、时间戳、哈希、域名、IP等——已经足够开始工作了。
时间戳
只需在时间戳前后几分钟简单地grep即可
$ cat INCIDENT32.json | grep '2014-01-01 11:3[2-8]'
浏览器历史记录
它就在那里。像jq这样的工具可以帮助进行一些复杂的输出
$ cat INCIDENT32.json | grep '2014-01-01 11:3[2-8]' | jq 'select(has("url"))|.url'
单个用户
$ cat INCIDENT32.json | jq 'select(.osxcollector_username=="ivanlei")|.'
自动分析
OSXCollector 输出过滤器项目包含处理和转换OSXCollector输出的过滤器。过滤器的目标是使分析OSXCollector输出变得简单。
开发技巧
OSXCollector的功能存储在一个单独的文件中:osxcollector.py
。收集器应该在没有任何额外包或依赖项的裸OS X安装上运行。
在编辑源代码之前,确保所有OSXCollector测试都通过。您可以使用:make test
运行测试
在修改源代码后,再次运行make test
以验证您的更改没有破坏任何测试。
许可证
此作品根据GNU通用公共许可证以及https://github.com/jipegit/OSXAuditor的派生许可证授权。
博客文章
- OSXCollector:OS X的法医收集和自动分析 by Ivan Leichtling
演示文稿
- OSXCollector:OS X的自动化法医证据收集与分析 by Kuba Sendor @ BruCON 0x07
- Squashing Rotten Apples:使用OSXCollector和Strata对Mac OS X进行自动化法医和数据分析 by Kuba Sendor @ BSides Manchester 2015
- OSXCollector by Ivan Leichtling @ Macbrained的八月聚会
- OSXCollector - 自动化法医证据收集与分析 for OS X by Ivan Leichtling @ OpenNSM
- OSXCollector - 自动化法医证据收集与分析 for OS X by Ivan Leichtling @ Duo Tech Talk (博客文章)
外部演示
- OSX Archaeology:使用OSXCollector和Strata成为印第安纳琼斯 by Chris Henderson & Justin Larson @ SAINTCon 2015
资源
想了解更多关于OS X法医的知识吗?
- Sarah Edward的mac4n6.com - Mac法医的最佳演示。
一些其他有趣的工具
- KnockKnock - KnockKnock是一个命令行Python脚本,用于显示在每次启动时自动执行的持久OS X二进制文件。
- Grr - Google快速响应:事故响应的远程实时法医
- osquery - 基于SQL的操作系统仪器、监控和分析
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源分发
构建分发
osxcollector-1.12.tar.gz的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | e66ef8f6c7b8e7fe4abbfd23b23477c4690e5e6eae4929adf836d78413d793d8 |
|
MD5 | e2343b9aa9d2498956711ef61d79e254 |
|
BLAKE2b-256 | 0362e980de55c4b75def24ea2e5f9d4a41f9bc6b4e2c7ca2916de5b6c83f5e73 |
osxcollector-1.12-py2-none-any.whl的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | ccb7e7e064aa1365de37dc1fea7b112f31881ca53f51ca85f8f2741c1177d5c5 |
|
MD5 | 959fea0021ba4cf2697bae8722d1c073 |
|
BLAKE2b-256 | 81146eef941f882dc1f3b8746e1f76d385c0ee614976d1cc4769c558cc45821a |