macOS 統合ログの確認

Creation of a logarchive directory and contents news

macOS 10.12 (Sierra) から、Apple はシステムでログを記録する方法に重要な変更を導入しました。この新しいログ システムは、一般的な Unix ログを macOS 統合ログに置き換えました。これらのログは、フォレンジック調査員に、macOS システムやその他の Apple デバイスの調査に役立つ貴重なアーティファクトを提供できます。

このブログ投稿では、統合ログの概要と、調査中にそれらを使用する際に提示される課題について説明します。このブログ投稿に加えて、「 macos-unifiedlogs というツールをリリースして、ログ データの解析におけるいくつかの課題を克服し、調査中に重要な情報を明らかにする方法の例を提供しました。

統合ログとは何ですか?

統合ログの前は、macOS システムの主要なログ ソースは、エンドポイントに存在する Apple システム ログ (ASL) およびその他のプレーンテキスト ログでした。 2016 年の macOS 10.12 (Sierra) のリリースにより、Apple は ASL を Unified Logging System と呼ばれる新しい独自の形式に置き換えました。これにより、ログ データのメモリとディスクへの保存が一元化されました。

統合ログは、次の 3 つのコンポーネントで構成されています。

  • tracev3ファイル – ログ エントリを含むバイナリ ファイル
  • UUIDファイル – ログ エントリのメタデータを含むバイナリ ファイル
  • timesyncファイル – ログエントリに関連付けられたタイムスタンプ メタデータを含むバイナリ ファイル

表 1 は、macOS システムの統合ログ ファイルに関連するディレクトリを示しています。

表 1: 統合ログの場所

コンテンツ

全体の大きさ

/private/var/db/diagnostics/Persist

Tracev3 ファイル

最大 520 MB

/private/var/db/diagnostics/Special

Tracev3 ファイル

不定

/private/var/db/diagnostics/道標

Tracev3 ファイル

不定

/private/var/db/diagnostics/HighVolume

Tracev3 ファイル

不定

/private/var/db/diagnostics/Timesync

Timesync ファイル

不定

/private/var/db/uuidtext/{00-FF,dsc}

UUID ファイル

不定

さらに、 /var/private/varへのシンボリック リンクであるため、ディレクトリは/var/db/diagnosticsおよび/var/db/uuidtextにもあります。これら 3 つのコンポーネントを解析することで、統合ログ データを構築できます。

統合ログには、次のようなフォレンジック調査のための貴重な情報が大量に含まれています。

  • ログエントリに関連付けられたプロセス パス
  • ログエントリに関連付けられたライブラリ パス
  • PID
  • EUID
  • Unix Epoch のログ エントリのタイムスタンプ
  • ログの種類 – 例: デフォルト、エラー、デバッグ、情報、障害
  • イベントの種類 – 例: ログ、道しるべ、アクティビティ、Statedump、または Simpledump
  • サブシステム – 通常、ログ エントリに関連付けられたバンドル ID (例: com.apple.news )
  • カテゴリ – ログエントリを特定のカテゴリに関連付けるために使用できるサブシステムへのオプションの追加。例: com.apple.newsには、カテゴリNewsTodayおよびNetworkがあります。
  • ログメッセージ

各ログ エントリはイベント タイプに関連付けられており、イベント タイプによってはログ タイプ (メッセージ タイプとも呼ばれます) が関連付けられています。

表 2 は、統合ログ形式で一般的に見られるイベントとログの種類を示しています。

表 2: ログに関連付けられたログとイベントの種類

イベントタイプ

観察された関連するログの種類

概要

ログ

フォルト、デフォルト、エラー、デバッグ、情報

標準ログ エントリ

道標

プロセス、システム、スレッド

プロセス/アプリ メトリックに関連付けられています

アクティビティ

作成、ユーザーアクション

標準ログ エントリ

ステートダンプ

なし

PLIST データ、カスタム オブジェクト、またはプロトコル バッファを含む可能性のある特別なログ

シンプルダンプ

なし

単純な文字列を含む特別なログ

損失

なし

ログエントリが失われ、記録できませんでした

痕跡

デフォルト、情報

標準ログ エントリ

図 1 は、組み込みの macOSログコマンドを使用する場合に統合ログに関連付けられるデータ型の例の一部を示しています。

図 1: 組み込みの macOS ログ コマンドを使用した統合ログ データの出力例

log show --style json
{

"eventMessage" : "[SUMacControllerProgressManager] Reporting underlying estimated time remaining 1318.492935",

"eventType" : "logEvent",

"activityIdentifier" : 0,

"subsystem" : "com.apple.SoftwareUpdateMacController",

"category" : "SU",

"processImagePath" : "/System/Library/CoreServices/Software Update.app/Contents/Resources/softwareupdated",

"timestamp" : "2022-07-21 15:28:23.405689-0400",

"senderImagePath" : "/System/Library/PrivateFrameworks/SoftwareUpdateMacController.framework/Versions/A/SoftwareUpdateMacController",

"messageType" : "Default",

"processID" : 325,

}

図 1 では、統合ログがsoftwareupdatedプロセスからのログ エントリを記録しました。このエントリには、 Event Type Logと Log Type (Message Type) Defaultがあります。エントリにはサブシステムcom.apple.SoftwareUpdateMacControllerがあり、ログはSUとして分類されました。

macOS Monterey と Apple Silicon (ARM) の変更点

2021 年の macOS 12 (Monterey) のリリースに伴い、Apple は統合ログ形式に 2 つの小さな変更を導入しました: /private/var/db/uuidtext/dscUUIDファイルの形式が変更され、EventType Simpledump がtracev3ファイルに追加されました。

さらに、Apple Silicon の導入により、macOS システムが Mach (カーネル) 時間を追跡する方法が変わりました。マッハ時間は、統合ログ エントリの実際のタイムスタンプを計算するために必要なタイムスタンプ値の 1 つです。 Apple Intel デバイスでは、マッハ時間はナノ秒単位で記録されます。ただし、Apple シリコンでは、マッハ時間はティックで記録され、ログ エントリの正確なタイムスタンプを取得するには、ナノ秒に変換する必要があります。 Apple Silicon への移行中、Apple は、Apple Silicon へのアプリケーションの移植プロセスを文書化する際に、この違いについて言及しました。

統合ログに関連する課題

統合ログを使用する場合、データの確認には 3 つの主な課題があります。まず、調査員は、統合ログの分析を実行するための標準化された手段を選択する必要があります。第 2 に、統合ログは、使用が中程度のエンドポイントでも大量のデータを生成します。最後に、ログを確認して関心のあるデータを特定するには、統合ログとそのソースに精通している必要があります。

ログデータの分析

統合ログ データを分析するには、主に次の 4 つの方法があります。

  1. アップル API
  2. 組み込みの CLIログコマンド。
  3. GUIコンソールアプリケーション
  4. 生の統合ログ形式を解析する

最初の 3 つの分析オプションには macOS システムが必要であり、Apple が提供するツールまたは API の使用に依存しています。 4 番目のオプションでは、調査担当者が macOS システムの外部でログを確認し、組み込みのツールや API を介して公開されていないデータにアクセスできますが、Apple がログ形式を変更した場合、新しい変更を解析するためにパーサーを更新する必要があります。

データ量

統合ログを確認する際の一般的な課題は、ログが提供する大量のデータを処理することです。ログ エントリの総数は、システム上のアクティビティに応じて、1,800 万から 5,000 万エントリの間で変動する可能性があります。 tracev3ファイルにはログ データが含まれているため、ディレクトリの場所とエンドポイントのアクティビティに応じて、ファイルのサイズと数がデータの量に影響します。

表 3 は、ディレクトリの場所に基づくtracev3ファイルのサイズと数を示しています。

表 3: 統合ログのサイズと数

最大ファイルサイズ

観察されるファイルの最大数

m/private/var/db/diagnostics/Persist

~10.5 MB

~52

/private/var/db/diagnostics/Special

~2.1MB

不定

/private/var/db/diagnostics/道標

~2.1MB

不定

/private/var/db/diagnostics/HighVolume

わからない

不定

約 10.5 MB のtracev3には、300,000 ~ 400,000 のログ エントリが含まれる場合があります。ログ データの量が多いため、解析されたデータを確認するには追加のツールが必要になる可能性があります。 grep、xsv、jq などのコマンドライン ツールを使用すると、解析されたデータを CSV または JSON 形式で確認するのに役立ちます。さらに、解析されたデータを SIEM またはログ集計ツールにアップロードすると、複数のアナリストがデータを確認する方法を提供できます。

関心のあるデータの特定

データの量が膨大になる可能性があるため、統合ログを効果的に確認するには、データの完全なコレクションにフィルターを適用する必要があります。確認するデータの量を減らす 2 つの効果的な方法は、侵害の痕跡 (IOC) とデータ型フィルターです。

ファイル名や Launchd ラベルなどの他のアーティファクトから侵害の痕跡 (IOC) を利用すると、関心のあるログ エントリをすばやく特定できます。その後、ヒットをピボットして、追加の悪意のあるアクティビティを特定できます。たとえば、統合ログが既知の悪意のあるファイルの存在を記録した場合、ログ エントリに関連付けられたタイムスタンプを使用して、前後に発生したエントリを確認できます。さらに、ログ エントリにプロセス、ライブラリ パス、またはサブシステムが記録されている場合、それらのデータ タイプを検索して、ログに記録された他の悪意のあるファイルを確認できます。

活用する特定の IOC がなくても、統合ログは脅威ハンティングのための貴重なデータ ソースになる可能性があります。プロセスおよびライブラリ パス、サブシステム、カテゴリなどの特定のデータ タイプに関連するフィルタを適用すると、特定のログ データを表示できます。たとえば、SSH ログオンをフィルタリングするには、プロセス パス/usr/bin/sshdに関連付けられたエントリを制限して、macOS システムでの SSH アクティビティを表示できます。

統合ログの解析

Mandiant では、 macos-unifiedlogsと呼ばれるクロス プラットフォームの統合ログ パーサー (および単純なライブラリ) を作成し、それをオープン ソース化して、他のフォレンジック調査員が統合ログをレビューできるようにしています。このツールは、生の統合ログ形式を CSV または JSON に解析できます。パーサーは、 libyalおよびUnifiedLogReaderプロジェクトによる以前の作業に基づいて構築されています。

macos-unifiedlogsの目標は、ライブ macOS システム上の統合ログを構成するすべてのコンポーネント、またはlogコマンドから作成されたlogarchiveコレクションを解析してログ エントリを構築できるツールを提供することです。さらに、 macos-unifiedlogsは、統合ログを構成する個々のコンポーネントの解析もサポートしています。

コマンド ライン ツールは単純なライブラリに基づいて構築されているため、他のプログラムはライブラリをインポートし、結果を SIEM にアップロードしたり、解析されたデータに追加のフィルタリングを適用したりするなど、追加の用途のために結果を操作できます。

パーサーは、macOS 10.12 (Sierra) から macOS 12 (Monterey) までのログ データでテストされています。 macos-unifiedlogsツールには、ログ データを解析するための 3 つのサンプル プログラムが含まれています。最も単純なのは、ライブ システムまたはlogコマンドによって作成された提供されたlogarchiveのログを解析できる、 unifiedlog_parserです。

図 2 は、組み込みのlogコマンドによって作成されたログアーカイブとその内容を示しています。右クリックして [パッケージの内容を表示] を選択すると、内容を表示できます。

Creation of a logarchive directory and contents
図 2: logarchive ディレクトリとコンテンツの作成

logarchiveには、統合ログの 3 つのコンポーネントが含まれています。

  • ディレクトリ00からFFおよびdscにはUUIDファイルが含まれます
  • PersistHighVolumeSignpost 、およびSpecialにはtracev3ファイルが含まれています
    • ファイルlogdata.LiveData.tracev3は、メモリ内のログ エントリです。
  • Timesyncディレクトリにはtimesyncファイルが含まれます

ディレクトリExtraとファイルInfo.plistには、統合ログ デーモンlogdに関するメタデータが含まれていますが、それらは統合ログ データの解析には必要ありません。

logarchiveは、 unifiedlog_parserに引数として渡すことができます。

図 3 は、 unifiedlog_parserの実行の一部を示しています。

図 3: log コマンドによって作成された logarchive に対して実行される Unifiedlog_parser

./unifiedlog_parser ~/system_logs.logarchive

Starting Unified Log parser...

Parsing: system_logs.logarchive/Persist/0000000000000004.tracev3

Parsing: system_logs.logarchive/Persist/0000000000000001.tracev3

Parsing: system_logs.logarchive/Persist/0000000000000002.tracev3

Parsing: system_logs.logarchive/Persist/0000000000000003.tracev3

Parsing: system_logs.logarchive/Special/0000000000000004.tracev3

Parsing: system_logs.logarchive/Special/0000000000000001.tracev3

Parsing: system_logs.logarchive/Special/0000000000000002.tracev3

Parsing: system_logs.logarchive/Special/0000000000000003.tracev3

Parsing: system_logs.logarchive/Signpost/0000000000000001.tracev3

Parsing: system_logs.logarchive/Signpost/0000000000000002.tracev3

Parsing: system_logs.logarchive/Signpost/0000000000000003.tracev3

Unifiedlog_parserが CSV ファイルへのデータの解析を完了すると、Microsoft Excel、Splunk、xsv、grep などのさまざまなツールを使用してデータを確認できます。

macos-unifiedlogsパーサーがログから抽出できるデータには、以下が含まれますが、これらに限定されません。

  • タイムスタンプ (Intel および Apple Silicon をサポート)
  • PID
  • ログエントリに関連付けられたプロセス パス
  • ログエントリに関連付けられたライブラリ パス
  • EUID
  • ログの種類
  • イベントタイプ
  • サブシステム
  • カテゴリー
  • ログメッセージ

macos-unifiedlogs パーサーが捜査官にどのように役立つか

現在、統合ログは Apple 製品の主要なログ メカニズムであるため、フォレンジック調査者にとって貴重な情報が大量に含まれています。システム アクティビティに応じて、ログに含まれるデータは次のとおりです。

  • macOS システムへのログオン
  • 須藤コマンド
  • DNS 解決
  • ゲートキーパー イベント – macOS アプリケーション検証ツール
  • Xprotect イベント – macOS 組み込みの Yara スキャナー
  • Apple Script アクティビティ – 組み込みの macOS スクリプト言語
  • Opendirectory イベント – macOS LDAP サービス イベント

さらに、サードパーティ製アプリケーションも統合ログをログに利用することができ、フォレンジック調査中に参照できます。

統合ログを活用して、攻撃ライフサイクルの複数の段階を特定できます。たとえば、macOS で永続性を維持する 1 つの手法は、LoginItem を作成することです。ユーザーが macOS システムにログオンするたびに、登録されているすべての LoginItems が実行されます。実行されるすべての LoginItems は統合ログに記録されます。サブシステムcom.apple.loginwindow.loggingperformAutolaunchを含むメッセージを検索することで、このアクティビティを特定してフィルタリングできます。

図 4 は、LoginItem パーシステンスを介して実行される一般的な Lulu ファイアウォール アプリケーションによって作成されたログ エントリのスニペットを示しています。

図 4: ログに記録された LoginItem の実行。 macos-unifiedlogs によって解析されます

{

"subsystem": "com.apple.loginwindow.logging",

"thread_id": 96859,

"pid": 4958,

"euid": 0,

"library": "/System/Library/CoreServices/loginwindow.app/Contents/MacOS/loginwindow",

"activity_id": 0,

"time": “2022-07-23 17:49:53.000 UTC”,

"category": "Standard",

"event_type": "Log",

"log_type": "Default",

"process": "/System/Library/CoreServices/loginwindow.app/Contents/MacOS/loginwindow",

"message": "LaunchItemsInSharedFileListRef | performAutolaunch, launching: /Applications/LuLu.app, shouldHide: 0",

}

sudo 権限で実行された macOS コマンドも統合ログに記録されます。プロセス パス/usr/bin/sudoでフィルタリングすることにより、sudo アクティビティに関連するログ エントリのみを表示するようにフィルタリングできます。ユーザーrootを含むメッセージのみを表示することで、データをさらに除外することができます。

最も詳細なログ ソースの 1 つは、プロセス パス/usr/bin/mDNSResponderです。 mDNSResponderは、プロセスによる DNS ルックアップのログ エントリを生成します。ただし、機密性の高い DNS ルックアップが行われる可能性があるため、 mDNSResponderによるログ エントリの多くは非公開です。プライベート データが無効になっている場合、DNS ホスト名はハッシュされ、base64 でエンコードされます。

図 5 は、一般的なバックアップ ソフトウェアである rcloneプロセスに関連する/usr/bin/mDNSResponderエントリの例の一部を示しています。 DNS ルックアップに関連付けられたドメインは、プライベートデータが表示されていないため、ハッシュされ、base64 でエンコードされています。

図 5: プライベート データがハッシュされた mDNSResponder イベント。 macos-unifiedlogs を使用して解析

{

"subsystem": "com.apple.mDNSResponder",

"thread_id": 1282,

"pid": 221,

"euid": 65,

"library": "/usr/sbin/mDNSResponder",

"library_uuid": "67335BD491273DD9A8E61483E1B12D2B",

"activity_id": 0,

"time": “2022-07-24 18:43:29.816 UTC”,

"category": "Default",

"event_type": "Log",

"log_type": "Default",

"process": "/usr/sbin/mDNSResponder",

"process_uuid": "67335BD491273DD9A8E61483E1B12D2B",

"message": "[R2076] DNSServiceQueryRecord(15000, 0, qefxZtfJBc5Xm4i7BNS+3Q==, AAAA) START PID[9063](rclone)",

}

アナリストは、統合ログ データを確認するときに、値<private>または base64 でエンコードされた raw バイトの文字列を含むログを確認する可能性があります。統合ログを使用すると、開発者はログ データを非公開としてマークできますプライベート時 データがログに記録されると、システムはデータを<private>またはハッシュでマスクし、base64 でエンコードします。

プライベート披露可能 macOS システムにカスタム プロファイルをインストールすることにより、データを削除します。ただし、これにより、統合ログに記録されるすべてのソフトウェアのプライベート データが明らかになります。非公開データを有効にしても、過去の非公開データは表示されず、将来のログ イベントにのみ適用されます。

カスタム macOS プロファイルを介してプライベート データを有効にすると、新しい DNS エントリが表示されるようになります。

図 6 は、プライベート ログが有効になった後にrcloneに関連付けられた/usr/bin/mDNSResponderエントリの例の一部を示しています。カスタム プロファイルがインストールされているため、DNS ルックアップに関連付けられたドメインapi[.]onedrive[.]comがログに表示されます。

図 6: プライベート データが表示された mDNSResponder イベント。 macos-unifiedlogs を使用して解析

{

"subsystem": "com.apple.mDNSResponder",

"thread_id": 1282,

"pid": 221,

"euid": 65,

"library": "/usr/sbin/mDNSResponder",

"library_uuid": "67335BD491273DD9A8E61483E1B12D2B",

"activity_id": 0,

"time": “2022-07-24 18:46:48.130 UTC”,

"category": "Default",

"event_type": "Log",

"log_type": "Default",

"process": "/usr/sbin/mDNSResponder",

"process_uuid": "67335BD491273DD9A8E61483E1B12D2B",

"message": "[R2114] DNSServiceQueryRecord(15000, 0, api.onedrive.com, Addr) START PID[9153](rclone)",

}

結論

macos-unifiedlogs を無料でオープン ソースにすることで、macOS システムを調査する際に他のフォレンジック調査員に役立つことを願っています。 macos-unifiedlogsのソース コード、ドキュメント、および制限事項は、Mandiant の GitHub にあります

統合ログに関するその他のリソースと背景情報は、次の場所にあります。

参照: https://www.mandiant.com/resources/blog/reviewing-macos-unified-logs

Comments

タイトルとURLをコピーしました