Macマルウェア分析 (初心者向け)
この記事は、Mac マルウェアの分析に飛び込みたい、経験が少ない、またはまったく知識がない人を対象としています。特に Macマルウェアの分析に使用できる一般的な概念、推奨事項、および様々なリソースとツールを、エンジニアのMelindaがご紹介します!
マルウェア分析の主要概念
マルウェアの分析に際して、知っておくことべきことがいくつかあります。
感染経路
定義: マルウェアがシステムにアクセスする (感染する) 方法
種類:海賊版アプリケーション、ブラウザの警告、リンク、偽のアプリケーション/サイト、マクロ、macOS 機能を使用して、「サプライ チェーン」攻撃、エクスプロイト
永続化
定義:マルウェアが起動時またはユーザー ログイン時にオペレーティング システムによって自動的に (再) 実行されることを保証する手段
種類:ログイン項目、ブラウザのプラグイン/拡張機能
共通: 起動アイテム(エージェントおよびデーモン)
一般的でない:カーネル拡張機能 (古い macOS バージョンのみ)、 cronジョブ、ログイン/ログアウト フック等
機能とインテリジェンス
定義:マルウェアの主な目的
種類:広告インジェクション/ハイジャック、暗号通貨マイニング、リモート (インタラクティブ) シェル、リモート実行、ファイル収集/抽出、ファイル暗号化
犯罪者 (金銭目的のもの): 広告、クリック、身代金
スパイ (標的型マルウェア): シェル、ビデオ キャプチャ、オーディオ キャプチャ
両方: アップ/ダウンロード、調査、キーロギング、コマンド実行
質問事項
すべての分析では、以下の質問から始めて、その解答を見つける必要があります。
そもそもどのようにマシンに侵入? (感染経路)
どのように持続? (永続化)
何を引き起こしている? 金銭目的はありますか? 何か、隠そうとしているのでしょうか。? (機能)
分析方法
静的分析
サンプルを実行せずに調べる方法です。このアプローチでは、サンプルから情報を静的に抽出できる様々なツールを活用します。(コマンドラインツール、オープンソースツール、逆コンパイラと逆アセンブラ)
サンプルが既知のサンプルか未知のサンプルかを確認するための出発点として適しています。良いか悪いか、 事前に確認できる事項は次のとおりです:コード署名情報、ファイルハッシュ、埋め込まれた文字列、ファイル属性。
動的解析
サンプルを実行しての検査です。 このアプローチは、最も一般的にパッシブ監視ツールを活用し、高度な知識を必要とします。(ネットワークトラフィック分析、エミュレーターとサンドボックス、デバッガと逆アセンブル)
環境設定
アプローチに必要な環境として、別途コンピューターを専用の分析マシンとして使用することです。このマシンでは、ファイル共有を無効にして、最小限の方法でセットアップする必要があります。
別途コンピューターがない場合は、代わりに仮想マシンを分析システムに活用します。 分析を実行する前に、仮想マシンとベース システム間の共有を無効にしてください。
仮想マシン候補
・VMWare (無料バージョンあり、 フルバージョン$149.24)
・VirtualBox(無料)
・Parallels(14日間のトライアルあり、 フルバージョン$199.150)
マルウェアのコンポーネント
攻撃者は、多くの場合、アプリケーションに Mac マルウェアをパッケージ化します。舞台裏では、アプリケーションは実際にはディレクトリです。 このディレクトリを Mac ではアプリケーション バンドルと呼びます。
CTRL キーを押しながらアプリケーションのアイコンをクリックし、[パッケージの内容を表示] を選択すると、Finder でアプリケーション バンドルの内容を表示されます。基本的に以下となります。
Info.plist
プロパティリストはアプリケーションの機能と実行についてのさまざまな属性を指定します。 多くの場合、マルウェアの作成者は plist と Info.plist を標的にしてキーと値のペアを変更します。 そうすることで、システムの動作に影響を与えることができます。
_CodeSignature
フォルダです。 存在する場合は、プログラムが開発者によって署名されたことを意味します。 誰がアプリケーションを作成したかを確認できるため、調べるのは常に興味深いことです。
Resources
これもフォルダです。 アプリケーションが使用する追加ファイルを含みます。 スクリプト、実行可能ファイル、またはその他のファイル等です。
MacOS
別のフォルダです。 これには、メイン実行可能ファイルである Mac のバイナリ ファイル (Mach-O) が含まれています。 このフォルダには、マルウェアが存在する可能性があります。
Mac マルウェアの分析
このセクションでは、静的分析ツールのいくつかを紹介しながら、マルウェアのサンプルを詳しく見ていきます。
※ Mac マルウェアのサンプルは、Objective-See の Mac マルウェア コレクションから自己責任でダウンロードしてください。
コマンド ラインに切り替えて、まずサンプル ファイルを解凍します。
$ unzip ファイル名
コマンドの実行結果を見ると、通常の階層を持つ macOS アプリケーション バンドルであることを示していますが、_CodeSignature フォルダーがありません。
macOS の codesign ユーティリティまたは無料のWhat's Your Signアプリケーションを使用して、Mach-O バイナリのコード署名情報を抽出します。
$ codesign -dvvvv -r - アプリ名.app
$ codesign -dvvvv -r - アプリ名.app
アプリケーションはまったく署名されていません。 (ダメです。)
通常、上記のユーティリティを実行すると、バンドル ID とチーム ID に関するさまざまな情報が表示されます。 (Safari アプリケーションの例を含めました。)
サンプルに署名付きのコード署名がある場合は、spctl ユーティリティを使用してさらに分析します。これにより、開発者の証明書がまだ有効かどうか、または Apple によって取り消されているかどうかが示されます。
$ spctl --verbose=4 --assess --type アプリ名.app
コード署名が受け入れられなくなった場合、CSSMERR_TP_CERT_REVOKED が表示されます。(疑わしいです。)
分析中は、受け入れられたコード署名にもご注意してください。 偽の開発者アカウントや不正な開発者アカウントがたくさんあります。
分析を進めて、アプリケーションのハッシュをチェックしましょう。
アプリケーションのハッシュ値は、ファイルのコンテンツを使用して計算され、指定された ID として使用されます。ファイルのハッシュは、既知のマルウェアかどうかを判断するのに役立ちます。macOS の md5/shasum ユーティリティを使用して、ハッシュを計算します。
$ md5 NAME.app/Contents/MacOS/メイン実行可能ファイル名
$ shashum -a 1 NAME.app/Contents/MacOS/メイン実行可能ファイル名
ハッシュ値を取得したら、ネットで検索します。VirusTotal でハッシュ値を確認することもお勧めです。サンプルで使ってる Malware.app を Google で検索すると、2019年の MalShare ファイルへのリンクが見つかります。
分析を続けて、Info.plist ファイルを調べてみましょう。
このファイルには、アプリケーションの機能に関する有用な情報が含まれている可能性があります。 マルウェアが動的ライブラリを悪用したり、plist に依存したりすることもあります。
$ defaults read アプリ名.app/Contents/Info.plist
※ 作業にはフルパスが必要な場合があります。
※ Info.plistがバイナリ形式の場合でも使用できます。
Info.plist を見ると、CFBundleExecutable キーによってアプリのメイン実行可能ファイルを特定します。(Contents/MacOS フォルダーを調べることも同様です。バイナリが 1 つしかない場合は、それがメイン実行可能ファイルです。)
いくつか興味深い項目:
CFBundleIdentifier には、アプリを作成した会社情報が含まれています。
LSMinimumSystemVersion は、macOS でアプリを実行するために必要なオペレーティング システムの最小バージョンを定義します。
LSUIElement は 1 に設定され、アプリがバックグラウンドで実行され、Dock に表示されないエージェントアプリであるかどうかを示します。 分析中にこれが見られた場合、サンプルがマルウェアであるかもしれません。
Resourcesフォルダーに移動しましょう。 隠しファイルを表示するには、以下コマンドから始めることをお勧めします。
$ ls -la
サンプルのResourcesフォルダーには隠しファイルはなくて、スクリプトというファイルがあります。
不明なファイルを開く前に、メタデータを収集することから始めましょう。macOS で使用できる便利なコマンドがたくさんあります。
$ file ファイル名
$ mdls ファイル名
$ ls -al@ ファイル名
最初に、file ユーティリティを使用して、ファイルの実際の拡張子を確認しました。通常の ASCII テキスト ファイルであることが分かりました。
その次に mdls ユーティリティを使用しました。 これは、Spotlight と Finderに保存するメタデータも一覧表示するツールです。
上の画像が示すように、ls -al@ を使って、ファイルの拡張属性と権限を表示することができます。
ファイルの内容を表示するには、cat または通常のテキストエディターで可能です。
ASCII テキストファイルが実際に HTTPS 要求を含むスクリプトであることが分かります。
また、curl コマンドを使用して plist ファイルを LaunchAgents ライブラリにダウンロードすることにより、これは後で launchctl でロードされ、他スクリプトが /Users/Shared フォルダにダウンロードされます。
curl の URL については、ページにアクセスするとブラウザの赤い警告サインが表示されます。
echo コマンドの実行タスクには、シェルを介して実行される読み取り不能な base64 でエンコードされた文字列が含まれています。 文字列を以下の方法でデコードします:
$ echo <エンコードされた文字列> | base64 -D
上記のコマンドを実行すると、ファイルをダウンロードした後、これらの権限が chmod +x によって実行可能に変更されることが簡単に分かりました。
次に、Contents/MacOS フォルダーを少し見てみましょう。
アプリケーションのメイン実行可能ファイルがここにあります。
file ユーティリティは、Dropbox が Mach-O バイナリであることを示しています。 Mac マルウェアの大部分は、Mach-O (Mach オブジェクトファイル形式) にコンパイルされます。 これはかなり複雑な形式であり、解析にはバイナリ逆アセンブラが必要です。
基本的なレベルでは、Mach-O ファイル形式は、ヘッダー、ロードコマンド、およびデータの 3つの連続した部分で構成されます。
静的分析に最も役立つユーティリティの 1つは、strings ユーティリティです。 いくつかのオプションが持っていますが、 - オプションとともに使用すると、ユーティリティはファイルのすべてのバイトで文字列を検索します。
ファイル内の文字列を調べると、マルウェアの機能の概要がよく分かります。
$ strings - メイン実行可能ファイル名 > ~/Downloads/strings-.txt
サンプルによって異なりますが、次の特定な項目をチェックするのはお勧めします。
・fileExistsAtPath
・AuthorizationExecuteWithPrivileges
・LSSharedFileListCreate
・LSSharedFileListInsertItemURL
・com.apple.loginitems.plist (LoginHook, LogoutHook)
使っているサンプルには、次の項目が含まれていました。
fileExistsAtPath、AuthorizationExecuteWithPrivileges、executeScriptWithPrivileges、setHidden
上記はマルウェアの機能に関する洞察を与える可能性があります。
また、多くの難読化があります。これらは非常に長く読み取り不可能な文字です。
stringsユーティリティを使用するときは、結果に多くの情報が含まれることがありますので確認するには時間がかかりそうです。
基本的な静的分析により、Mac マルウェアの概要を把握することがこれで完了しました。このサンプルが悪意のあるものであることを突き止め、組み込みの macOS ユーティリティツールを使用してその機能の一部を明らかにすることができました。
サンプルの機能を完全に理解したい場合は、デバッガーと逆アセンブラーを使用することが不可欠です。これには、バイナリー解析と、アセンブリーなどの低レベルのプログラミング言語に関する高度な知識が必要です。興味のある方は、ブログ記事の最後にある本をチェックしてください。
分析の課題点
静的また動的な検出と分析中に、マルウェア作成者は自分達の検査を妨害しようとします。
マルウェア作成者がよく使用している一般的な妨害手法は以下となります。
静的分析防止ロジック
難読化
・コードの難読化
・base64 エンコーディングまたは暗号化 (上記のscriptファイルの例を紹介しました)
・文字列をチャンクに分割して、逆アセンブラーによって正しく表示されないようにする (例の写真はちょっと上にあります)
パッキング (iPakk、muncho、oneKpaq)
動的分析防止ロジック
マルウェアは、分析されているかどうかを確認するように巧妙に構築されています。 マルウェアが仮想マシンまたデバッガーで実行されていることを発見すると、マルウェアは終了し、実行を停止します。 場合によっては、それ自体を削除することさえあります。
・仮想マシンの検出
・デバッガ検出
・システム整合性保護の検出
便利なリソースとツール
検出と分析に役立つさまざまな GUI および CLI ツールを集めました。
バイナリ分析用逆アセンブラ
・Ghidra (無料、オープンソース)
・Cutter (無料、オープンソース)
・Hopper (無料トライアルあり、フルバージョン$99-129)
・Ida (無料バージョンあり、フルバージョン$365-4000)
ネットワーク監視ツール
・Wireshark (無料、オープンソース)
・Netiquette (無料、 オープンソース、Objective-See)
コマンドライン ツール
・ProcessMonitor (無料、オープンソース、Objective-See)
・FileMonitor (無料、 オープンソース、 Objective-See)
コード署名
コマンドラインに詳しくない方には便利です。署名情報とファイル タイプも表示されます。
・What’s Your Sign? (無料、オープンソース、Objective-See)
本など
英語版しかありませんが、リバースエンジニアリングについてさらに学び、理解を深めるために以下の書籍や資料をお勧めします。
・How to Reverse Malware malware on macOS (Phil Stokes)
・The Art of Mac Malware (Patric Wardle)
・SANS Mac OS X Malware Analysis (Joel Yonts)
・Practical Malware Analysis (Michael Sikorski & Andrew Honig)
まとめ
この投稿では、基本的な概念、環境の設定また静的マルウェア分析の役立つ場所を示しました。
リバースエンジニアリングについて詳しく知りたい場合は、リソースにある読み物を必ず確認してください。
以上、 今回はエンジニアのメリンダが担当いたしました。
最後まで読んでいただき、ありがとうございました。