跳转到主要内容

回答“恶意软件是如何到达那里的?”的工具

项目描述

osxcollector

Stories in Ready Stories in In Progress Build Status PyPI

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的派生许可证授权。

博客文章

演示文稿

外部演示

资源

想了解更多关于OS X法医的知识吗?

一些其他有趣的工具

  • KnockKnock - KnockKnock是一个命令行Python脚本,用于显示在每次启动时自动执行的持久OS X二进制文件。
  • Grr - Google快速响应:事故响应的远程实时法医
  • osquery - 基于SQL的操作系统仪器、监控和分析

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分发

osxcollector-1.12.tar.gz (23.1 kB 查看散列)

上传时间

构建分发

osxcollector-1.12-py2-none-any.whl (22.7 kB 查看散列)

上传时间 Python 2

由以下机构支持