osxcollector, 一种用于 OS X的取证取证&分析

分享于 

16分钟阅读

GitHub

  繁體 雙語
A "How'd that malware get there?" tool for OSX
  • 源代码名称:osxcollector
  • 源代码网址:http://www.github.com/Yelp/osxcollector
  • osxcollector源代码文档
  • osxcollector源代码下载
  • Git URL:
    git://www.github.com/Yelp/osxcollector.git
    Git Clone代码到本地:
    git clone http://www.github.com/Yelp/osxcollector
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/Yelp/osxcollector
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    

    osxcollector

    Stories in ReadyStories in In ProgressBuild Status

    OSXCollector手册

    OSXCollector是用于OSX的取证证据收集&分析工具包。

    Forensic收集

    收集脚本运行在受感染的机器上,并输出一个描述目标机器的JSON文件。 OSXCollector从 plists,SQLite数据库和本地文件系统收集信息。

    基于的法医分析

    通过取证收集,分析员可以回答以下问题:

    • 这机器感染了什么?
    • 那malware是怎么到那里的?
    • 如何防止和检测到进一步的感染?

    Yelp自动化了对大多数OSXCollector的分析,将它的输出转换为易于阅读和可以操作的摘要,只是可疑的内容。 查看 OSXCollector输出过滤器项目,了解如何充分利用大多数自动OSXCollector输出分析。

    执行集合

    是一个单一的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.pyosxcollector/ 目录中,因此你需要运行它:

    $ sudo osxcollector/osxcollector.py

    注意:请确保 Mac OS X 机器上的python 命令使用系统附带的默认 python 解释器,并且不会被系统覆盖,因为 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: 设置要在它的上运行的文件系统的root的路径。 默认值为 /。 这对于在磁盘映像上运行收集非常有用。

      $ sudo osxcollector.py -p '/mnt/powned'
    • -s SECTION/--section=SECTION: 只运行全部集合的一部分。 可以指定多次。 节和节的完整列表是:

      • version
      • system_info
      • kext
      • startup
        • launch_agents
        • scripting_additions
        • startup_items
        • login_items
      • applications
        • applications
        • install_history
      • quarantines
      • downloads
        • downloads
        • email_downloads
        • old_email_downloads
      • chrome
        • history
        • archived_history
        • cookies
        • login_data
        • top_sites
        • web_data
        • databases
        • local_storage
        • preferences
      • firefox
        • cookies
        • downloads
        • formhistory
        • history
        • signons
        • permissions
        • addons
        • extension
        • content_prefs
        • health_report
        • webapps_store
        • json_files
      • safari
        • downloads
        • history
        • extensions
        • databases
        • localstorage
        • extension_files
      • accounts
        • system_admins
        • system_users
        • social_accounts
        • recent_items
      • mail
      • full_hash
      $ sudo osxcollector.py -s 'startup' -s 'downloads'
    • -c/--collect-cookies: 收集 Cookies 值。默认情况下,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: 每个记录共享的唯一标识。
    • osxcollector_section: 记录所保存的数据的节或者类型。
    • osxcollector_subsection: 该记录所包含的数据类型的部分或者更详细的描述符。
    文件记录

    对于代表文件的记录,有许多有用的键:

    • ctime: 文件创建时间。
    • mtime: 文件修改时间。
    • file_path: 文件的绝对路径。
    • md5: 文件内容的MD5哈希。
    • sha1: 文件内容的SHA1哈希。
    • sha2: 文件内容的SHA2哈希。
    • signature_chain: 文件链签名中的证书的公共名称

    对于代表下载文件的记录:

    • xattr-wherefrom: 包含下载文件的源和引用url的列表。
    • xattr-quarantines: 描述下载了文件的应用程序的字符串。
    SQLite记录

    对于表示SQLite数据库一行的记录:

    • osxcollector_table_name: 表的NAME 来自。
    • osxcollector_db_path: SQLite文件的绝对路径。

    对于表示与特定用户关联的数据的记录:

    • osxcollector_username: 用户的NAME
    时间戳

    OSXCollector尝试以 YYYY-mm-dd hh:MM:ss 格式将时间戳转换为人类可读日期/时间字符串。 它使用启发式来自动识别各种时间戳:

    • 自纪元以来秒
    • 自纪元以来的毫秒数
    • 自2001-01-01秒
    • 自1601-01-01秒
    部分

    OSXCollector的当前版本。

    system_info

    收集有关系统的基本信息:

    • 系统名称
    • node 名称
    • 释放
    • 版本
    • 计算机
    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

    关于最大 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还为Internet插件添加最低版本。 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
    • 下载
    • 窗体历史记录
    • 历史记录
    • Signons
    • 权限
    • 插件
    • 扩展
    • 内容首选项
    • 健康报告
    • web kit存储

    这里信息是从 ~/Library/Application Support/Firefox/Profiles

    有关 Firefox 配置文件文件夹的详细信息,请参阅 http://kb.mozillazine.org/Profile_folder_-_Firefox

    safari

    在Safari配置文件中收集不同plists和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。等等 - 这已经足够了。

    时间戳

    简单的greping在时间戳之前和之后几分钟就能完成:

    $ cat INCIDENT32.json | grep '2014-01-01 11:3[2-8]'
    浏览器历史记录

    在那里,像 这样的工具可以很有帮助,可以做一些漂亮的输出:

    $ 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的功能存储在单个 file: osxcollector.py 中。 收集器应该在无需任何附加包或者依赖关系的情况下在 OS X。

    在编辑源代码之前,确保所有OSXCollector测试都经过。 你可以使用以下方法运行测试: make test

    更改源代码后,再次运行 make test 以验证更改没有破坏任何测试。

    许可证

    这里工作是在GNU通用许可证许可证和 https://github.com/jipegit/OSXAuditor的派生下许可的。

    博客文章

    演示文稿

    外部演示文稿

    资源

    想了解关于 OS X 取证的更多信息?

    • 的mac4n6.com - 关于Mac取证的最佳演示文稿。

    其他几个有趣的工具:


    tool  for  COL  Collect  collection  工具箱  
    相关文章