macOS用アーティファクト収集ツールと
簡易マルウェア解析サンドボックスの実装と利用方法
Japan Security Analyst Conference 2020

株式会社インターネットイニシアティブ
小林 稔

Who am I?

小林 稔
•
•

•

株式会社インターネットイニシアティブ セキュリティ本部 セキュリティ情報統括室
技術調査、社内インシデントレスポンス
外部活動
セキュリティキャンプ全国大会講師 2017-2019
Japan Security Analyst Conference 2018Black Hat USA 2018 Briefing
Twitter: @unkn0wnbit

2Agenda1. モチベーション
2. macOS Artifact Collector
3. Norimaci
4. bgiparser
5. Future Work
6. まとめ3

1

モチベーション

4モチベーション (1)◦ macOSセキュリティの解析者もツールもWindowsと比べて少ない▫ OSのシェアや需要の大きさの違い▫ 解析者、ツールが少ないことが悪循環か◦ 情報源となるのはわずかな人物や組織のみ
▫
▫
▫
▫
▫
▫
▫
▫

Sarah Edwards (mac4n6.com)
Patrick Wardle (objective-see.com)
Yogesh Khatri (swiftforensics.com)
川崎 隆哉 (padawan-4n6.hatenablog.com)
FireEye
CrowdStrike
SentinelOne
Twitterの“#mac4n6”ハッシュタグ

5モチベーション (2)◦ 要望を満たすツールが見つからない▫ アーティファクト収集を行うツールがほとんどない▫ 最新のmacOSが動作するサンドボックスがない◦ 誰も作ってくれなさそうなので自分で作った◦ 作成したツールを公開することで、少しでも解析に関わってくれる人を増やしたい6

2macOS Artifact Collector (macosac)
Forensic Artifact Collection Tool for macOS7既存のアーティファクト解析・収集ツールの問題点 (1)◦ 既存の解析・収集ツール▫ アーティファクト収集専用のツールはほとんど存在しない▫ 様々なアーティファクトのパーサをパッケージングした総合解析ツールがほとんどを占める◦ 問題点▫ 解析ツールは結果をすぐに確認できる反面、パーサのバグ▫
▫
▫

で解析が停止する可能性がある
パーサのバグが発生した場合、マルウェア解析など、他の作業に遅れが生じる
Time Machineバックアップやローカルスナップショット内のアーティファクトを解析・収集しない
アーティファクトファイルの拡張属性(Extended
Attributes)を収集の際に保持しない
8既存のアーティファクト解析・収集ツールの問題点 (2)アーティファクト解析

アーティファクト収集

バックアップを処理対象
に含める

備考

mac_apt✔

✔

✘

ディレクトリ構造と拡張属性を保持しない

AutoMacTC

✔

✘

✘

-

osxcollector

✔

✔

✘

一部のアーティファクト
osxcollector開発停止
のみ収集する

Venator✔

✘✘

ライブシステムのみが対
象

CyLR

✘

✔

✘

拡張属性を
保持しない

Icon made by Freepik from www.flaticon.com

9既存のアーティファクト解析・収集ツールの問題点 (3)◦ AutoMacTCのFirefoxモジュールでエラーが発生している例

10既存のアーティファクト解析・収集ツールの問題点 (4)◦ アーティファクト収集と解析のプロセスを分けた方が安全▫ 解析ツールのバグ対応を考慮した作業手順が必要ないた▫
▫
▫

め、解析対象ホストで行う作業がシンプルになる
インシデントレスポンスの情報収集は専任ではない人が実行する可能性があることを考慮すると複雑な作業手順は避けるべき収集専用ツールはバグが発生しにくい収集したアーティファクトは既存のツールでオフライン解析を行う■ バグがあっても修正して正しいデータを取得できる■ 解析ツールの仕様に合うような収集方法を検討する

11macosacの実装 (1) – 目標

◦ Python 2.7で実装する▫ macOSに標準でインストールされている◦ 収集するアーティファクトを設定ファイルで簡単に指定できる◦ ディレクトリ構造を保持したままアーティファクトを収集する▫ 多くの解析ツールはデフォルトのディレクトリ構造を想定している◦ バックアップからもアーティファクトを収集する
◦
◦
◦

▫
▫

Time Machineバックアップ
ローカルスナップショット▫

デフォルトインストールされているコマンドやライブラリのみで実装する

HFS+やAPFSの拡張属性(Extended Attributes)を保持する
USBメモリ等から実行することを前提とする
解析対象ホストのストレージに極力書き込みを行わずにアーティフ
ァクトを収集する
12

macosacの実装 (2) – 処理の流れ
設定ファイル（アーティファクトリスト）

アーティファクトファイルリストアップ
Time Machineバックアップ、
ローカルスナップショットも対象

macOS Artifact
Collector

アーティファクトファイルを保全先にコピーディレクトリ構造、拡張属性を保持

別のホストでアーティファクトを解析

AutoMacTCなど

13macosacの実装 (3) – 設定ファイルフォーマット

◦ macosac.ini▫ macosacと同じディレクトリに配置する▫ macosacの起動時に自動で読み込まれる▫ デフォルトのカテゴリリストはAppendix 1を参照
カテゴリ名

アーティファクトファイルのフルパス（ワイルドカード表現が可能）

14

macosacの実装 (4) – アーティファクトのコピー方法◦ 起動時にアーティファクトのコピー方法を指定する◦ rsync（デフォルト）▫ macOSにデフォルトでインストールされている▫ ファイル同期の定番ツールであり信頼性が高い▫ ファイルのタイムスタンプの保持や拡張属性のコピーにも対
▫
▫
▫

応している
“-aREL”オプションで実行
一時ファイルをコピー先に作成する (--temp-dir)
コピーしたファイル名をログに記録する (--log-file)◦ ビルトインコピー機能▫ 何らかの理由でrsyncが使えない場合に使用する▫ メタデータもrsyncとほぼ同等にコピーできる15

macosacの実装 (5) – バックアップデータへのアクセス手法◦ Time Machineバックアップの確認

バックアップ日時$ tmutil listbackups/Volumes/TimeMachine/Backups.backupdb/ermacforensics/2019-06-13-195104/Volumes/TimeMachine/Backups.backupdb/ermacforensics/2019-07-04-154843/Volumes/TimeMachine/Backups.backupdb/ermacforensics/2019-07-19-194030/Volumes/TimeMachine/Backups.backupdb/ermacforensics/2019-07-25-120411/Volumes/TimeMachine/Backups.backupdb/ermacforensics/2019-08-01-004740◦ ローカルスナップショットの確認$ tmutil listlocalsnapshots /com.apple.TimeMachine.2019-12-26-121648
com.apple.TimeMachine.2019-12-26-131643
com.apple.TimeMachine.2019-12-26-141643
com.apple.TimeMachine.2019-12-26-151643
com.apple.TimeMachine.2019-12-26-161644

バックアップ日時

16

macosacの実装 (6) – バックアップデータへのアクセス手法◦ ローカルスナップショットのマウント▫ /Volumes以下にマウントされる$ tmutil mountlocalsnapshots /Mounted local snapshots: ("/Volumes/com.apple.TimeMachine.localsnapshots/Backups.backupdb/ermacforensics/2019-12-26-151643/Macintosh HD","/Volumes/com.apple.TimeMachine.localsnapshots/Backups.backupdb/ermacforensics/2019-12-26-141643/Macintosh HD","/Volumes/com.apple.TimeMachine.localsnapshots/Backups.backupdb/ermacforensics/2019-12-26-191644/Macintosh HD","/Volumes/com.apple.TimeMachine.localsnapshots/Backups.backupdb/ermacforensics/2019-12-26-131643/Macintosh HD",◦ ローカルスナップショットのアンマウント$ tmutil unmountlocalsnapshots /Unmounted local snapshots: ("/Volumes/com.apple.TimeMachine.localsnapshots/Backups.backupdb/ermacforensics/2019-12-26-191644/Macintosh HD","/Volumes/com.apple.TimeMachine.localsnapshots/Backups.backupdb/ermacforensics/2019-12-26-181644/Macintosh HD","/Volumes/com.apple.TimeMachine.localsnapshots/Backups.backupdb/ermacforensics/2019-12-27-104519/Macintosh HD","/Volumes/com.apple.TimeMachine.localsnapshots/Backups.backupdb/ermacforensics/2019-12-26-121648/Macintosh HD",17

macosacの実装 (7) – バックアップデータへのアクセス手法◦ バックアップデータの取得▫ Time Machineバックアップもローカルスナップショ
ットも“/Volumes”以下にマウントされる■ ディレクトリ構造を保持するため、バックアップ
内のアーティファクトはコピー先ディレクトリの“Volumes”以下にコピーされる▫ バックアップ日時を基に、必要なバックアップからアーティファクトをコピーする18macosacの実装 (8) – アーティファクトの保存方法◦ 3種類の保存方法から選択

1. 指定した保存先に単純コピー（デフォルト）■ ホスト名と実行日時の名前を持つサブディレ
クトリが作成される
2. 指定した保存先にHFS+のファイルシステムを持
つDMGを作成して、そこにコピー■ ホスト名と実行日時の名前を持つDMGが作成される
3. 2.の方式でコピーした後、DMGを読み取り専用
形式に変換
19

macosacの実装 (9) – アーティファクトの保存方法◦ DMGに保存する方法がお勧め▫ 保存先のファイルシステムを意識しなくて良い▫ パーミッションや拡張属性などのメタデータも保持できる▫ DMG形式が扱いにくい場合、E01(EWF)形式に変換できる◦ 保存先がexFAT等の場合に、1の方式で保存▫ 拡張属性はAppleDouble形式で保存される▫ 解析ツールの仕様によっては拡張属性が解析されないかも◦ 保存先がHFS+またはAPFSの場合は、どの方式を選択しても問題ない20macosacの実装 (10) – アーティファクトの保存方法◦ DMGからE01への変換コマンド例$ brew install libewf$ hdiutil attach -nomount ermacforensics_20191010_171704.dmg$ diskutil list →マウントしたDMGのデバイス名を確認$ ewfacquire -t evidence -v /dev/disk4s1 →/dev/disk4s1からevidence.E01を作成$ hdiutil detach /dev/disk4▫ 解析対象以外のホストで実行すること

21User Consentによるアクセス制限 (1)◦ 一部のフォルダにはUser Consentによるアクセス制限がかかっている▫ アプリケーションがユーザのプライバシーに関わるデータにアクセスする際に、ユーザの許可を必要とするセキュリティフレームワーク▫ macOS 10.13 High Sierra以降で採用◦ root権限でもアクセスすることはできない
22

User Consentによるアクセス制限 (2)◦ macOS 10.14 Mojave以降、保護範囲が拡大され、バックアップやアンチウイルス
等のアプリケーションには、「フルディスクアク
セス」の許可が必要となる◦ macosacの場合、Terminal.appにフル
ディスクアクセスを許可する必要がある▫ ただし、この設定を行っても一部のフォルダにはア
クセスできない23

User Consentによるアクセス制限 (3)24macosacコマンドラインオプション (1)◦ -o▫ / --outputdir
出力先ディレクトリ（デフォルト：macosac.pyと同じディレクトリ）◦ -t▫ / --outputtype
保存形式 dir/dmg/ro-dmg（デフォルト : dir）
◦ -l▫/ --list
macosac.iniファイルに記述されているカテゴリを表示する◦ -c▫ / --categories
指定したカテゴリのアーティファクトファイルのみ収集する（デフォルト : all）
◦ -ls▫ / APFSローカルスナップショットを収集対象に含める--localsnapshots◦ -tm/ --timemachine▫ Time Machineバックアップを収集対象に含める◦ -ts▫ / 収集を始めるバックアップ日時を指定する--timestamp◦ --use-builtincopy▫ rsyncの代わりにビルトインコピー機能を使用する
25

macosacコマンドラインオプション (2)◦ macosac実行例$ sudo python2.7 ./macosac.py –t ro-dmg –o ./out/ –tm –ts 2019-12-01-090000▫ 全てのカテゴリのアーティファクトを収集する▫ outディレクトリ以下にDMGディスクイメージを作成する▫ 現在ストレージにあるアーティファクトと2019年12月1
日 9時以降に作成されたTime Machineバックアップ
内のアーティファクトをDMGにコピーする▫ コピー完了後、DMGを読み込み専用に変換する
26

D

macOS Artifact Collector DemomacosacとAutoMacTCの連携

27

macOS Artifact Collector Demo (1)

デモ環境(VMware Fusion)
macOS 10.14
調査対象ホストmacOS 10.15
解析用ホスト🍎🍎アーティファクト

macosac

AutoMacTC

USBドライブにDMGを作成して、アーティファクトをコピー

USBドライブに収集した
アーティファクトを解析

Icon made by phatplus from www.flaticon.com

28

DEMO MOVIE 1
29

macOS Artifact Collector Demo (2)◦ 収集したアーティファクト例◦ artifact_file_stat.csv▫ コピー前のアーティファクトのMACBタイムなどのメタ情報◦ copy_artifact_files.log▫ アーティファクトコピー時の動作ログ
30

macOS Artifact Collector Demo (3)◦ artifact_file_stat.csv

31

macOS Artifact Collector Demo (4)◦ copy_artifact_files.log

32解析ツールとの連携◦ 収集したアーティファクトは解析ツールで解析できることを確認済み▫ AutoMacTC 1.0.0.3▫ mac_apt 0.4.1▫ APOLLO 08252019■ アーティファクト(SQLite DB)が更新されるため、読み取り専用DMG以外で保存する▫ BlackLight 2019 R2■ DMGで保存した場合、E01への変換が必要▫ AXIOM 3.8.0■ DMGで保存した場合、E01への変換が必要

33

将来のmacOSでの課題と対策 (1)◦ 将来のmacOSにはPython, Ruby, Perl等のスクリプト言語が含まれない◦ これらのスクリプト言語を採用しているツー
ルはmacOSで実行できなくなる◦ macosacも含め、多くのセキュリティ関連
ツールが影響を受ける
34

“

Use of Python 2.7 isn’t recommended
as this version is included in macOS forcompatibility with legacy software.
Future versions of macOS won’t include
Python 2.7. Instead, it’s recommended
that you run python3 from within
Terminal. (51097165)

https://developer.apple.com/documentation/macos_release_notes/macos_catalina_10_15_release_notes
35将来のmacOSでの課題と対策 (2)◦ PyInstallerによるパッケージング▫ PythonがmacOSにインストールされていなくてもスクリプトを実行できる◦ パッケージング例$ sudo pip2 install virtualenv$ virtualenv ~/envs/macosac$ source ~/envs/macosac/bin/activate$ pip2 install pyinstaller xattr --user$ pyinstaller --onefile --runtime-tmpdir ./ macosac.py$ cp ./dist/macosac ./macosac.ini /Volumes/thumbdrive/36

2

Norimaci
Simple Malware Analysis Sandbox

37

既存のマルウェア解析サンドボックスの問題点 (1)◦ 既存のサンドボックス▫ CuckooベースのmacOS向けのオープンソースのサンドボックスはいくつか存在する▫ Cuckoo: OS X 10.10 Yosemiteまでサポート▫ Mac-A-Mal: macOS 10.12 Sierraまでサポート◦ 問題点▫ 積極的にメンテナンスが行われておらず、最新のmacOSで解析を行うのは難しい可能性がある38

既存のマルウェア解析サンドボックスの問題点 (2)◦ Cuckoo▫ アクティビティの監視にDTraceを使用している▫ OS X 10.11 El Capitan以降、Security Integrity

Policy (SIP)が導入され、デフォルトでDTraceは使用できなくなった◦ Mac-A-Mal▫ アクティビティ監視用のカーネル拡張を提供しているが、macOS 10.13以降はサポートしていない▫ カーネル拡張をメンテナンスし続けるコストが高いので
はないか

39

Norimaciの実装 (1) – 目標

◦ サンドボックスとしてのメンテナンスコストを抑えた構成▫ サードパーティのアクティビティ監視ツールを積極的に利用する■ SIPと互換性があるとベター▫ 将来のmacOSでも動作することが期待できるシ
ンプルなツール構成を目指す◦ これらを満たすリファレンス実装: Noriben
40

Norimaciの実装 (2)◦ Noriben Malware Analysis Sandbox▫ https://github.com/Rurik/Noriben▫ Windows用のシンプルなマルウェア解析サンドボックス▫ アクティビティ監視にSysinternalsのProcess
Monitorを利用する▫ Pythonスクリプトでアクティビティログの解析とレ
ポーティングを行う

41

Noriben = のり弁“
https://www.slideshare.net/bbaskin/bh15-arsenal-noriben
42

Norimaciの実装 (3)◦ Why “Norimaci”?

▫ 春山さん(@cci_forensics)のアドバイス▫ “Noriben”-like tool on “Macintosh”▫
▫

→ Norimaci (発音: norimaki)= のり巻きのり巻きはのり弁と同じように最小限の食材で作られている
Norimaciも最小限の機能を提供する◦ Noribenのレポートフォーマットを踏襲している▫ Noriben作者の了承済み▫ Thanks Brian 

https://commons.wikimedia.org/wiki/File:Futomaki_zushi_in_201902.jpg 43

Norimaciの実装 (4) – アクティビティ監視◦ macOS用アクティビティ監視ツール▫ FireEye Monitor.app▫ Fortinet FortiAppMonitor▫ これらのツールはSIP互換性あり◦ 今回はMonitor.appを利用する▫ FortiAppMonitorはアクティビティログを保存できない

44

他のプログラムを制御

Norimaciの実装 (5) – 処理の流れ
2.

アクティビティ監視

データ取り込み

FireEye Monitor.app (*1)

1. 起動
4. 停止

3.

6.

検体を実行（手動）

データ変換
5. 起動

7.

アクティビティログ解析
8.

レポーティング

Norimaci(*1) https://www.fireeye.com/services/freeware/monitor.html

45

Norimaciの実装 (6) – Monitor.app

Monitor.appはマウスで操作しなければならないため、NorimaciからAppleScriptを使って以下の操作を行う
Monitor.app起動／終了
アクティビティ監視開始／停止
アクティビティデータ保存

46

Norimaciの実装 (8) – Monitor.appのデータ◦ Monitor.appのデータはバイナリ▫ データフォーマットの詳細はAppendix 2参照

1レコード

アクティビティの種類やプロセス名、ファイル名等の文字列が見える47

Norimaciの実装 (9) – Monitor.appのデータ変換◦ monitorappconv.py▫ アクティビティログがバイナリでは扱いにくいため、
JSONフォーマットに変換する{"record_num": 0, "record_type": "file_write", "procname": "bash", "pprocname":"login", "pid": 1061, "uid": 501, "timestamp": 1577255515, "timestamp_ns":
507242903, "gid": 20, "ppid": 1060, "egid": 20, "euid": 501, "path":"/Users/macforensics/test.txt"}{"record_num": 1, "record_type": "procexec", "path": "/usr/libexec/xpcproxy","pid": 1095, "pprocname": "launchd", "ppid": 1, "uid": 0, "timestamp": 1577255517,"timestamp_ns": 178545628, "gid": 0, "egid": 0, "euid": 0, "is64": 1, "argc": 2,"argv": "xpcproxy¥u0000com.apple.mdworker.shared.03000000-0000-0000-0000-00000000
0000¥u0000"}48

Norimaciの実装 (10) – アクティビティログの解析 (1)◦ Monitor.appはシステム全体のアクティビ
ティを記録する◦ 検体と関連性が低いプログラムや定常的に作成されるファイルのアクティビティをフィ
ルタリングする▫ Spotlightなどのデーモンや.DS_Storeのファイル
操作をホワイトリストとして定義する▫ リストの更新頻度は少ないため、ツールの中にハードコーディングしている
49

Norimaciの実装 (11) – アクティビティログの解析 (2)◦ ホワイトリストの定義（一部）▫ JSONのエレメントでフィルタを設定する▫ 正規表現使用可能50

Norimaciの実装 (12) – レポーティング◦ 2種類のレポートを生成する◦ アクティビティのタイムライン◦ カテゴリごとのアクティビティ
▫
▫
▫
▫
▫
▫
▫
▫
▫

プロセス生成ファイルアクティビティ
dylib読み込み
カーネル拡張読み込み
ネットワークアクティビティ
DNSクエリ
通信先ホストパーシステンス関連ファイルへのアクセス
TTYオープン、クローズ
51

Monitor.appがmacOS 10.15 Catalinaで動作しない◦ Monitor.appはmacOS 10.15で動作しない◦ 別の方法のアクティビティ監視を検討する
必要がある
52

macOSでアクティビティ監視に使えるフレームワーク◦◦

SIP互換性

サポートしている
macOSバージョン

DTrace✘Up to 10.10 (*2)

OpenBSM✔

10.6 or later

EndpointSecurity
Framework✔

10.15 or later

アクティビティ監視として使えるか？

今回は、SIPと互換性があり、多くのmacOSバージョンでサポートされているOpenBSMを使用する
EndpointSecurity Frameworkのサポート対象は現状少なすぎる▫

今後開発が進む新しいフレームワークなので今後も採用すべきか検討は必要(*2) SIPを無効化すれば、OS X 10.11以降でも使用可能

53

OpenBSM (1) – OpenBSMとは◦

SolarisのBasic Security Module (BSM)と呼ばれるシステム監査用APIとファイルフォーマットのオープンソー
ス実装▫ 主にBSD系OSで採用されている▫ McAfeeによってmacOSに移植された▫ システムコールとその引数や返り値、プロセスのIDやEUID等を▫

◦取得することができる
システムコールをトレースすることでアプリケーションの動作を監視することができる

Monitor.appと同じ内容のアクティビティ監視は行えな
い▫ ライブラリ読み込み、カーネル拡張読み込み、DNSクエリ、
TTYオープン／クローズ

54

OpenBSM (2)◦ 設定ファイル

▫ /etc/security/audit_control■ 監査対象のシステムコールのクラスやログファ
イルサイズを指定▫ /etc/security/audit_event■ システムコールとクラスの対応付け◦ 監査ログ取得コマンド▫ sudo praudit –ls /dev/auditpipe
55

OpenBSM (3) – 設定ファイル◦ /etc/security/audit_control## $P4: //depot/projects/trustedbsd/openbsm/etc/audit_control#8 $#dir:/var/audit
Norimaci向けにファイル作成、ファイル削除、
flags:lo,aa,fc,fd,pc,nt,ex
プロセス、ネットワークのクラスを追加する
minfree:5（設定後に再起動が必要）
naflags:lo,aa,fc,fd,pc,nt,ex
policy:cnt,argv
filesz:2M
expire-after:10M
superuser-set-sflags-mask:has_authenticated,has_console_accesssuperuser-clear-sflags-mask:has_authenticated,has_console_accessmember-set-sflags-mask:
member-clear-sflags-mask:has_authenticated56OpenBSM (4) – 監査ログ出力例◦ sudo praudit –ls /dev/auditpipe▫ CSVフォーマットで出力システムコール名 ▫
主なパラメータの意味はAppendix 3参照

システムコールの引数の位置と値（audit_event参照）$ sudo praudit –ls /dev/auditpipe
操作したファイル名header,157,11,AUE_OPEN_WC,0,Wed Dec 25 15:19:41
2019, + 823 msec,argument,3,0x1a4,mode,argument,2,0x201,flags,path,test.txt,subject,macforensics,macforensics,staff,
プロセスID
macforensics,staff,1073,100007,50331650,0.0.0.0,return,success,3,identity,1,com.
apple.touch,complete,,complete,0x58a7dddb22328e88c0c55b56dad7c56001778998,trailer,157,
header,277,11,AUE_MKDIR,0,Wed Dec 25 15:19:42 2019, + 843 msec,argument,2,0x1c0,mode,
システムコールの
path,/var/folders/54/tdpjprs97fn6llhpslkwg6kh0000gn/T/,path,/private/var/folders/54/tdp
成否と返り値
jprs97fn6llhpslkwg6kh0000gn/T,attribute,40700,macforensics,staff,16777220,745788,0,subj
実行日時“header”から始まる1行が1レコード
ect,-1,macforensics,staff,macforensics,staff,1074,100000,0,0.0.0.0,return,failure:
1レコードに1つのシステムコールが記録されるFile exists,4294967295,identity,1,com.apple.xpc.proxy,complete,,complete,0x24e5f151
1b85c91207f6c7f009e1f28cc84c295e,trailer,277,

57

他のプログラムを制御

Norimaciの追加実装 (1) – 処理の流れ
2.

アクティビティ監視
1. 起動
4. 停止

データ取り込み

OpenBSM
Norimaci起動時のオプションで選択
orFireEye Monitor.app

3.

6.

検体を実行（手動）

データ変換
5. 起動

7.

アクティビティログ解析
8.

レポーティング

Norimaci
58Norimaciの追加実装 (2) – OpenBSM監査ログ変換◦ openbsmconv.py▫ 監査ログをmonitorappconv互換のJSONフォーマットに変換するコンバータ{"record_num": 0, "record_type": "file_write", "procname": "/usr/bin/touch","pprocname": "-bash", "timestamp": 1577254781, "timestamp_ns": 823000000, "pid":1073, "ppid": 670, "uid": 501, "gid": 20, "egid": 501, "euid": 20, "path":"test.txt"}{"record_num": 1, "record_type": "file_write", "procname":"/usr/libexec/biokitaggdd", "pprocname": "/sbin/launchd", "timestamp": 1577254782,"timestamp_ns": 159000000, "pid": 271, "ppid": 1, "uid": 501, "gid": 20, "egid":
501, "euid": 20, "path": "/Users/macforensics/Library/Saved Application
State/com.apple.Terminal.savedState/window_5.data"}
59

Norimaciコマンドラインオプション (1)◦-m / --monitor◦◦-o / --output◦◦◦-bl / --openbsm-log▫
▫

アクティビティ監視に使用するプログラム‘openbsm’ or ‘monitorapp’▫

レポートの出力先ディレクトリ

▫
▫

JSONフォーマットのアクティビティログ
openbsmconv.py/monitorapp.pyの出力結果▫

CSV形式のOpenBSM監査ログ▫

openbsmconv.pyが保存するプロセスリスト▫

Monitor.appのデータ-j / --json

基本的にこの2つのオプション
のみを使用する

その他は既存のログを解析する場合に使用する-p / --proclist-ml / --monitorapp-log60Norimaciコマンドラインオプション (2)◦ Norimaci実行例$ sudo python3 ./norimaci.py –m openbsm –o ./out/▫ OpenBSMでアクティビティ監視を行う▫ outディレクトリに解析レポートを保存する◦ マルウェアを実行後、適当なタイミングでNorimaciを「Ctrl + C」で停止させる▫ アクティビティ監視アプリケーションも停止される
61

D

Norimaci Demo62

Norimaci Demo (1)

デモ環境(VMware Fusion)
macOS 10.15
172.16.229.50

🍎Norimaci

OSX.AppleJeus.Aを実行

Kali Linux
172.16.229.131

HTTP/HTTPSDNS🐧PolarProxy + INetSim

疑似インターネット環境を提供
HTTPSはiptablesでPolarProxy (10443/tcp)にリダイレクトされる
PolarProxyで復号された通信はINetSim (80/tcp)にリダイレクトされる

63

DEMO MOVIE 2
64

Norimaci Demo (2) – 生成されるファイル

ファイルの命名規則 : Norimaci_DD_Mon_YY__hh_mm_ffffff
拡張子の意味 :.bsm : OpenBSM監査ログ（CSVフォーマット）.proclist : プロセスリスト（.bsmを処理する際にプロセス名とプロセスIDを紐づける）.mon : Monitor.appバイナリデータ.json : openbsmconv.py/monitorapp.pyの出力結果（JSONフォーマットのアクティビティログ）.txt : Norimaciカテゴリレポート_timeline.csv : Norimaciタイムラインレポート
65Norimaci Demo (3)◦ タイムラインレポート▫ 流れがつかみにくい場合はアプリケーション名やプロセ
スIDなどでgrepしてみる

2019-12-27 16:31:12.737000000,Process,CreateProcess,/sbin/launchd,1,/System/Library/Frameworks/Quartz.
framework/Frameworks/QuickLookUI.framework/Resources/QuickLookUIHelper.app/Contents/MacOS/QuickLook
UIHelper,4737
2019-12-27 16:31:12.842000000,Process,CreateProcess,/sbin/launchd,1,/System/Library/CoreServices/
DiskImageMounter.app/Contents/MacOS/DiskImageMounter,4738
2019-12-27 16:31:12.999000000,Process,CreateProcess,/sbin/launchd,1,/System/Library/PrivateFrameworks/
DiskImages.framework/Resources/hdiejectd,4739
2019-12-27 16:31:13.177000000,File,CreateFile,/System/Library/PrivateFrameworks/DiskImages.framework/
Resources/hdiejectd,4739,/var/run/hdiejectd.pid,SHA256,7897af5e7c52ddfa6d91d5bb33cd57a0c39a790f8e2cdd0528f23516bf9deee8,,
2019-12-27 16:31:13.190000000,Process,CreateProcess,/System/Library/CoreServices/DiskImageMounter.app/
Contents/MacOS/DiskImageMounter,4738,/System/Library/PrivateFrameworks/DiskImages.framework/Resources/
diskimages-helper -uuid AE3A32E9-B721-4B23-AD33-86ABACBA3352,4740
2019-12-27 16:31:13.204000000,Process,CreateProcess,/System/Library/PrivateFrameworks/DiskImages.
framework/Resources/diskimages-helper,4740,/System/Library/PrivateFrameworks/DiskImages.framework/
Resources/diskimages-helper -uuid AE3A32E9-B721-4B23-AD33-86ABACBA3352 -post-exec 4,4741(snip)

66

Norimaci Demo (4) – Norimaciタイムラインレポート$ grep CelasTradePro Norimaci_27_Dec_19__16_31_100629_timeline.csv | grep –v installd
2019-12-27 16:31:13.770000000,File,CreateFolder,/usr/libexec/diskarbitrationd,120,/Volumes/CelasTradePro
2019-12-27 16:31:13.775000000,Process,CreateProcess,/usr/libexec/diskarbitrationd,120,/sbin/mount -t hfsDMGをマウント-o -u=501-g=20 -m=755 nodev noowners nosuid /dev/disk2s1 /Volumes/CelasTradePro,4745
2019-12-27 16:31:13.787000000,Process,CreateProcess,/sbin/mount,4745,/System/Library/Filesystems/hfs.fs/Contents/
Resources/mount_hfs -u 501 -g 20 -m 755 -o nodev -o noowners -o nosuid /dev/disk2s1 /Volumes/CelasTradePro,4746
2019-12-27 16:31:29.781000000,File,RenameFile,/System/Library/PrivateFrameworks/PackageKit.framework/Resources/
パッケージインストール
shove,4762,/Library/InstallerSandboxes/.PKInstallSandboxManager/BF9CB5EF-0D74-4E44-9696-2AF27D43930E.activeSandbox/
Root/Applications/CelasTradePro.app,/Applications/CelasTradePro.app
2019-12-27 16:31:29.847000000,Process,CreateProcess,/sbin/launchd,661,/bin/sh /tmp/PKInstallSandbox.qRskRK/Scripts/
com.celasllc.pkg.CelasTradePro.gvY1vq/postinstall /Volumes/CelasTradePro/CelasTradePro.pkg / / /,4763
2019-12-27 16:31:29.916000000,Process,CreateProcess,/bin/bash,4763,/bin/mv /Applications/CelasTradePro.app/Contents/
パーシステンスファイルの設置
Resources/.com.celastradepro.plist /Library/LaunchDaemons/com.celastradepro.plist,4764
2019-12-27 16:31:29.918000000,File,RenameFile,/bin/mv,4764,/Applications/CelasTradePro.app/Contents/Resources/.com.celastradepro.plist,/Library/LaunchDaemons/com.celastradepro.plist
2019-12-27 16:31:29.918000000,File,Persistence,/bin/mv,4764,/Applications/CelasTradePro.app/Contents/Resources/.com.celastradepro.plist,/Library/LaunchDaemons/com.celastradepro.plist
2019-12-27 16:31:29.929000000,Process,CreateProcess,/bin/bash,4763,/Applications/CelasTradePro.app/Contents/MacOS/
CelasTradeProのコンポーネントが443/tcpに通信
Updater CheckUpdate,4765
2019-12-27 16:31:30.182000000,File,CreateFile,/Applications/CelasTradePro.app/Contents/MacOS/Updater,4765,/private/
var/db/mds/system/mds.lock,SHA256,e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855,,
2019-12-27 16:31:30.653000000,Network,TCP Send,/Applications/CelasTradePro.app/Contents/MacOS/Updater,4765,
172.16.229.131,443
2019-12-27 16:31:30.671000000,Network,TCP Send,/Applications/CelasTradePro.app/Contents/MacOS/Updater,4765,
172.16.229.131,443

67

Norimaci Demo (5) – PolarProxyとINetSimのログ◦ PolarProxyログ

www.celasllc.com宛てのHTTPS通信$ grep "Dec 27 16:31:30" /var/log/syslog
Dec 27 16:31:30 kali PolarProxy[85782]: [10443] 172.16.229.51 -> N/A Connection from: 172.16.229.51:50962
Dec 27 16:31:30 kali PolarProxy[85782]: [10443] 172.16.229.51 -> www.celasllc.com Connection request for:www.celasllc.com from 172.16.229.51:50962
Dec 27 16:31:30 kali PolarProxy[85782]: Creating certificate for www.celasllc.com
Dec 27 16:31:30 kali PolarProxy[85782]: [10443] 172.16.229.51 -> www.celasllc.com Terminating TLS session from
172.16.229.51:50962 and forwarding decrypted data to 172.16.229.131:80
復号したHTTPSを◦ INetSimログ

INetSimにリダイレクトwww.celasllc.comの名前解決$ grep "2019-12-27 16:31:30" /var/log/inetsim/service.log[2019-12-27 16:31:30] [71009] [dns_53_tcp_udp 71014] [172.16.229.50] connect[2019-12-27 16:31:30] [71009] [dns_53_tcp_udp 71014] [172.16.229.50] recv: Query Type A, Class IN, Name www.celasllc.com[2019-12-27 16:31:30] [71009] [dns_53_tcp_udp 71014] [172.16.229.50] send: www.celasllc.com 3600 IN A 172.16.229.131[2019-12-27 復号された通信内容
16:31:30] [71009] [dns_53_tcp_udp 71014] [172.16.229.50] disconnect[2019-12-27 16:31:30] [71009] [dns_53_tcp_udp 71014] [172.16.229.50] stat: 1 qtype=A qclass=IN qname=www.celasllc.com[2019-12-27 16:31:30] [71009] [https_80_tcp 80530] [172.16.229.50:49946] connect[2019-12-27 16:31:30] [71009] [https_80_tcp 80530] [172.16.229.50:49946] info: Client sent no data
[2019-12-27 16:31:30] [71009] [https_80_tcp 80530] [172.16.229.50:49946] disconnect

68Norimaci Demo (6)◦ カテゴリレポート(snip)
Network Traffic:==================[TCP|UDP] /usr/sbin/syslogd:93 > 127.0.0.1:32376[UDP] 127.0.0.1:60170 > /System/Library/CoreServices/Installer.app/Contents/MacOS/Installer:4756[TCP] /usr/libexec/syspolicyd:1995> 172.16.229.131:443
CelasTradeProのコンポーネントが443/tcpに通信[UDP] /usr/sbin/mDNSResponder:219 > 172.16.229.131:53[UDP] 172.16.229.131:53 > /usr/sbin/mDNSResponder:219[TCP] /Applications/CelasTradePro.app/Contents/MacOS/Updater:4765 > 172.16.229.131:443(snip)

mvでパーシステンスファイルを設置

元ファイルは不可視

Persistence:==================[Persistence] /bin/mv:4764 > /Applications/CelasTradePro.app/Contents/Resources/.com.celastradepro.plist=> /Library/LaunchDaemons/com.celastradepro.plist(snip)
コンピュータ起動時にロードされる

69

Norimaci Demo (7) – com.celastradepro.plist の調査<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN""http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plist version="1.0"><dict><key>Label</key>
プログラムのパスと引数<string>com.celastradepro</string><key>ProgramArguments</key><array><string>/Applications/CelasTradePro.app/Contents/MacOS/Updater</string><string>CheckUpdate</string></array><key>RunAtLoad</key><true/>
ロード時に実行<!-- Uncomment to debug<key>StandardOutPath</key><string>/tmp/tmpctp.log</string><key>StandardErrorPath</key><string>/tmp/tmpctp.log</string><key>Debug</key><true/>--></dict></plist>70

4

bgiparser
A parsing tool for backgrounditems.btm

71

backgrounditems.btm (1)◦ 各ユーザの「ログイン項目」を保存しているファイル▫ ユーザログイン時に実行するアプリケーションを指定する◦ macOS 10.12 Sierra以前▫ ~/Library/Preferences/com.apple.loginitems.plist◦ macOS 10.13 HighSierra以降
▫

◦
◦
◦

~/Library/Application
Support/com.apple.backgroundtaskmanagementagent/
backgrounditems.btm

パーシステンスとして利用される
AutoMacTCやmac_aptは、backgrounditems.btmに対応していない
Venatorはライブ環境であれば解析できるが、オフライン解
析はできない72

backgrounditems.btm (2)◦ OSX.WindTail on macOS 10.14

パーシステンスとしてログイン項目に登録される

73backgrounditems.btm (3)$ file backgrounditems.btm
Binary plistフォーマット
backgrounditems.btm: Apple binary property$ plutil -p backgrounditems.btm{"$archiver" => "NSKeyedArchiver"
NSKeyedArchiverフォーマットで"$objects" => [保存されている0 => "$null“
1 => {"$class" => <CFKeyedArchiverUID 0x7ffe7b7077c0 [0x7fff8c8888e0]>{value = 28}"NS.keys" => [0 => <CFKeyedArchiverUID 0x7ffe7b707660 [0x7fff8c8888e0]>{value = 2}
1 => <CFKeyedArchiverUID 0x7ffe7b707680 [0x7fff8c8888e0]>{value = 3}]
"NS.objects" => [0 => <CFKeyedArchiverUID 0x7ffe7b707740 [0x7fff8c8888e0]>{value = 4}
1 => <CFKeyedArchiverUID 0x7ffe7b707760 [0x7fff8c8888e0]>{value = 5}]}
2 => "version“
NSKeyedArchiverの解析方法
3 => "backgroundItems“
https://www.mac4n6.com/blog/2016/1/1/manual-analysis-of-nskeyedarchiver-formatted4 => 2plist-files-a-review-of-the-new-os-x-1011-recent-items(snip)
74

backgrounditems.btm (4)(snip)
12 => {"$class" => <CFKeyedArchiverUID 0x7ffe7b708040 [0x7fff8c8888e0]>{value = 15}"data" => <CFKeyedArchiverUID 0x7ffe7b708060 [0x7fff8c8888e0]>{value = 14}"identifier" => <CFKeyedArchiverUID 0x7ffe7b708080 [0x7fff8c8888e0]>{value = 13}}
13 => {
登録されたアプリケーションの"$class" => <CFKeyedArchiverUID 0x7ffe7b707c80[0x7fff8c8888e0]>{value = 9}
パス等が保存されているキー"NS.uuidbytes" => <9f70e89b 9420428d aa07be8d
9e389960>}
14 => <626f6f6b 84060000 00000410 30000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 a4050000 07000000 01010000 70726976 61746500 03000000
01010000 76617200 07000000 01010000 666f6c64 65727300 02000000 01010000 35340000 1e000000
01010000 7464706a 70727339 37666e36 6c6c6870 736c6b77 67366b68 30303030 676e0000 01000000
01010000 54000000 10000000 01010000 41707054 72616e73 6c6f6361 74696f6e 24000000 01010000
41463831 34323144 2d394233 382d3445 37322d39 3730302d 30343044 30354135 38453332 01000000
01010000 64000000 16000000 01010000 46696e61 6c5f5072 6573656e 74617469 6f6e2e61 70700000
28000000 01060000 04000000 14000000 20000000 30000000 3c000000 64000000 70000000 88000000
b4000000 c0000000 08000000 04030000 cfb90a00 03000000 08000000 04030000 c0bb0a00 03000000
08000000 04030000 01be0a00 03000000 08000000 04030000 38610b00 03000000 08000000 04030000(snip)
75

backgrounditems.btm (5)バイナリエディタで見ると登録されたアプリケーションのパスが確認できる76backgrounditems.btm (6)◦ このデータはBookmarkData構造体▫ BookmarkData構造体のパースの仕方■ http://michaellynn.github.io/2015/10/
24/apples-bookmarkdata-exposed/◦ bgiparser.py▫ backgrounditems.btmを解析して、登録されているアプリケーションの名前とパスをJSONフォー
マットで出力する77backgrounditems.btm (7)◦ bgiparser.pyの実行結果[{

Gatekeeper Path Randomizationによりテンポラリディレクトリのパスが設定されているため、
パーシステンスの設定としては失敗している（ユーザログイン時に実行されない）"name": "Final_Presentation","path": "/private/var/folders/54/tdpjprs97fn6llhpslkwg6kh0000gn/T/AppTranslocation/AF81421D-9B38-4E72-9700-040D05A58E32/d/Final_Presentation.app"},{"name": "Final_Presentation","path": "/private/var/folders/54/tdpjprs97fn6llhpslkwg6kh0000gn/T/AppTranslocation/8212B23C-D9C2-4C66-B478-1C30A136DF06/d/Final_Presentation.app"}]78

backgrounditems.btm (8)◦ アプリケーションで「ログイン時に起動」を設定すると、nameを空で設定するものがある{

アプリケーション名が空で設定されている"name": "","path": "/Applications/Evernote.app/Contents/Library/LoginItems/Evernote
Helper.app"
}
79

5

Future Work80

Future Work◦ macOS Artifact Collector▫ 解析ツールとの互換性を高める▫ Python 3対応■ 将来的にmacOSにPythonが同梱されなくなる
ため、Python 2.7系で実装する必要性がなくな
る◦ Norimaci▫ Noribenが提供している機能の実装を目指す■ Yara■ VirusTotal▫ macOSバージョンアップに伴って、アクティビティ監視ツールを定期的に見直す

81

6

まとめ

82

まとめ

◦

macOS Artifact Collector◦

Norimaci◦bgiparser▫
▫
▫
▫

解析ツールが対応していないアーティファクトも収集可能
USBメモリ等から起動可能
各種解析ツールで解析できるディスクイメージに変換可能
https://github.com/mnrkbys/macosac

▫
▫
▫
▫

多くのバージョンのmacOSで動作可能
プロセス生成、ファイルアクティビティ、ネットワークアクティビティ等をレポーティング可能実際のマルウェアのアクティビティをレポートで確認できた
https://github.com/mnrkbys/norimaci▫
▫

macOS 10.13以降のログイン項目の解析が可能
https://github.com/mnrkbys/bgiparser
83Thank you for listening!

Any questions?
84

A1

Appendix 1
Default categories of macOS Artifact Collector

85Default categories of macOS Artifact Collector (1)

◦

◦

◦

MRU (Most Recently Used)▫ mru▫ msoffice▫ quicklook : Can not access >= macOS 10.14▫ spotlight
Execution History▫ bash▫ zsh▫ cmdhistory▫ ard▫ terminal
Auto Execution▫ autoruns
86

Default categories of macOS Artifact Collector (2)◦ Logs▫
▫
▫
▫

asl
syslogutmpx
unifiedlogs◦ Usage Statistics▫ coreanalytics▫ knowledgec_db▫ netusage_db◦ Application List
▫ installhistory▫ applist87Default categories of macOS Artifact Collector (3)

◦ SSH

▫ ssh

◦ Quarantines▫ quarantines◦ FSevents▫ fsevents◦ Miscellaneous▫ systeminfo▫ users▫ Networking◦ Preparing more categories…
88

A2

Appendix 2
Monitor.app data format

89

Monitor.appデータレコードフォーマット (1)◦◦

下図の青い部分が1レコードを表す
文字列で記録されるフィールドが多いため、おおよその内容は見て取れるが、プログラム処理するにはフォーマットを理解する必要がある

1レコード

90

Monitor.appデータレコードフォーマット (2)◦ レコードフォーマット

▫ レコードデリミタで始まり、直後にレコードタイプが記録される▫ レコードタイプに必要なエレメントが連続して記録される

Delimiter

Record type

Element 1

Element 2

Element 3

91

Monitor.appデータレコードフォーマット (3)◦ レコード区切り▫ 1レコードの始まりを表す▫ これだけでは誤検知が発生するので、レコードタ
イプ文字列に含まれる “osx.agent” と併せて判別する

Record delimiter

Meaning

92

Record delimiter
Appendix 2内の表中の数字は16進数を表す

92

Monitor.appデータレコードフォーマット (4)◦ レコードタイプ▫ 該当レコードの種類を表す▫ 最初の1バイトは文字列長を0xA0でXORした値

Record type

Meaning

AE osx.agent.info 81

Information

B4 osx.agent.file.write 8B

File write

B5 osx.agent.file.rename 8C

File rename

B4 osx.agent.dylib.load 87

Dylib load

B2 osx.agent.procexec 8D

Process execution
93

Monitor.appデータレコードフォーマット (5)◦ レコードタイプ（続き）
Record type

Meaning

BB osx.agent.socket.connection 8A

SocketB3 osx.agent.kext.load 87

Kext load

BC osx.agent.socket.dns.request 86

DNS query

BA osx.agent.socket.dns.reply 86

DNS reply

AD osx.agent.tty 87

TTY create/close

94

Monitor.appデータレコードフォーマット (6)◦ エレメントタイプ（共通）▫ レコード内の要素（プロセス名、PID等）を表す▫ 最初の1バイトは文字列長を0xA0でXORした値

Element type

Meaning

A8 procname

Process name

A9 pprocname

Parent process nameA3 pidProcess id

A4 ppid

Parent process id

95

Monitor.appデータレコードフォーマット (7)◦ エレメントタイプ（共通）続きElement type

Meaning

A3 uidUser idA3 gidGroup id

A9 timestamp

Timestamp (UTC)AC timestamp_ns

Timestamp nanoseconds (UTC)A4 euid

Effective user id

A4 egid

Effective group id

A5 bytes

Byte array96

Monitor.appデータレコードフォーマット (8)◦ エレメントデータタイプ▫
▫

エレメントタイプ直後の1バイトで、格納されるデータタイプとデー
タ長（ビッグエンディアン）を表す
以下の表にない場合、エレメントタイプ直後の1バイトを数値データとして扱う

Element data type

Meaning

CC XX

Value of 1-byte (XX)CD XX XX

Value of 2-byte (XX XX)

CE XX XX XX XX

Value of 4-byte (XX XX XX XX)

C4 XX <byte array>

Byte array length of 1-byte value (XX)D9 XX <string>

String length of 1-byte value (XX)DA XX XX <string>

String length of 2-byte value (XX XX)

97

Monitor.appデータレコードフォーマット (9)◦ エレメントタイプ（インフォメーション）
Element type

Meaning

A3 msgInformation about Monitor.app

98Monitor.appデータレコードフォーマット (10)◦ エレメントタイプ（ファイル／プロセス）
Element type

Meaning

A4 pathFile pathA7 oldpath

Old file pathA7 newpath

New file path

A4 is64

64bit process or not

A4 argc

Number of arguments at program
execution

A4 argv

String of arguments at program
execution
99

Monitor.appデータレコードフォーマット (11)◦ エレメントタイプ（ソケット）
Element type

Meaning

A7 version

Internet Protocol version

A9 direction

Direction of communication

A5 srctip

Source IP address

A7 srcport

Source port

A5 dstip

Destination IP address

A7 dstport

Destination port

A5 proto

Protocol100Monitor.appデータレコードフォーマット (12)◦ エレメントタイプ (TTY)Element type

Meaning

A3 dev

TTY number

A9 operation

An operation against TTY

101

A3

Appendix 3
OpenBSM audit log parameters

102OpenBSM監査ログパラメータ
Parameters

Meaningargument,<POSITION>,<VALUE>,<DESC>

POSITION: A position of the argument
VALUE: A value of the argument
DESC: Short description

path,<PATH>

PATH: File pathsubject,-1,<EUName>,<EGName>,<UName>,<GName>,<PID>,
num,num,0.0.0.0

EUName: Effective user nameEGName: Effective group name
UName: Real User name
GName: Real Group name
PID: Process ID

return,<STR>,<RETVAL>

STR: String of “success” or “failure”
RETVAL: A return value of system call

Identity,1,<STR>

STR: An identity string for process(This parameter may be present multiple times in one record.)

103

R

References / resources

104

References and resources (1) – Documents / Articles◦ Get
Cozy with OpenBSM Auditing▫ https://objective-see.com/talks/Wardle_ShmooCon2018.pdf◦ MacOSmonitoring the open source way | Dropbox Tech Blog
▫ https://blogs.dropbox.com/tech/2018/04/4696/◦ Auditin a OS X System▫ https://www.scip.ch/en/?labs.20150108◦ Monitoring
Process Creation via the Kernel (Part I) – Synack▫ https://www.synack.com/blog/monitoring-process-creation-via-thekernel-part-i/◦ Manual
Analysis of ‘NSKeyedArchiver’ Formatted Plist▫ https://www.mac4n6.com/blog/2016/1/1/manual-analysis-ofnskeyedarchiver-formatted-plist-files-a-review-of-the-new-os-x-1011◦

recent-items

Apple's BookmarkData - exposed! – mikeymikey blogs here▫

http://michaellynn.github.io/2015/10/24/apples-bookmarkdata-exposed/105

References and resources (2) – Software (1)

◦
◦
◦

◦

AutoMacTC: Automating Mac Forensic Triage▫ https://www.crowdstrike.com/blog/automatingmac-forensic-triage/

macOS Artifact Parsing Tool
▫ https://github.com/ydkhatri/mac_apt
Venator▫ https://posts.specterops.io/introducing-venator-amacos-tool-for-proactive-detection-34055a017e56

CyLR▫ https://github.com/orlikoski/CyLR

106

References and resources (2) – Software (2)◦ Noriben▫ https://github.com/Rurik/Noriben◦ Monitor.app▫ https://www.fireeye.com/services/freeware/monitor.html◦ FortiAppMonitor▫

https://www.fortinet.com/blog/threatresearch/fortiappmonitor--a-powerful-utility-formonitoring-system-activi.html◦ PolarPorxy▫ https://www.netresec.com/?page=PolarProxy◦ INetSim▫

https://www.inetsim.org/

107References and resources (3) – Mac Malware Samples◦ Mac Malware of 2017

▫ https://objective-see.com/blog/blog_0x25.html◦ The Mac Malware of 2018

▫ https://objective-see.com/blog/blog_0x3C.html◦ The Mac Malware of 2019 👾

▫ https://objective-see.com/blog/blog_0x53.html

108

CREDITS for this presentation template and Icons

Special thanks to all the people who made andreleased these awesome resources for free:◦ Presentation template by SlidesCarnival◦ R.I.P icon made by Freepik fromwww.flaticon.com◦ USB thumb drive icon made by phatplus
from www.flaticon.com
109