Trusted Design

T1157 - Dylib Hijacking

概要

macOS and OS X use a common method to look for required dynamic libraries (dylib) to load into a program based on search paths. Adversaries can take advantage of ambiguous paths to plant dylibs to gain privilege escalation or persistence.

A common method is to see what dylibs an application uses, then plant a malicious version with the same name higher up in the search path. This typically results in the dylib being in the same folder as the application itself. (Citation: Writing Bad Malware for OSX) (Citation: Malware Persistence on OS X)

If the program is configured to run at a higher privilege level than the current user, then when the dylib is loaded into the application, the dylib will also run at that elevated level. This can be used by adversaries as a privilege escalation technique.

管理者によるコメント

T1157は「Dylib Hijacking(Dylibハイジャック)」として定義されていた、macOS / OS X環境に特化した極めて強力なコード実行・潜伏手法です。

macOSのアプリケーションが起動する際、必要となる動的ライブラリ(.dylib)を読み込む検索経路の仕様(曖昧さ)を悪用し、正規のライブラリの代わりにマルウェアのコードを強制的に読み込ませる手法です。主に「永続化(Persistence)」と「特権昇格(Privilege Escalation)」、そして「防御回避(Defense Evasion)」を狙って使用されます。

1. 「Dylib(ダイリブ)」とは?

Windowsにおける「DLL(Dynamic Link Library)」にあたるものが、macOSにおける dylib(Dynamic Library) です。 macOSのアプリは起動する際、プログラムに必要な共通機能を外部の .dylib ファイルからロードして使用します。この読み込み処理を管理するのがOSの動的リンクエディタである dyld です。

2. 攻撃の仕組みと「ハイジャック」の種類

macOSのアプリは通常、内部に「どこにdylibを探しに行くか」という検索パス(@rpath@executable_path など)を持っています。攻撃者はこのパスの指定方法にある弱みを突きます。

主に以下の2つのパターンでハイジャックが行われます。

パターンA:弱いパス(Weak dylib)の悪用

アプリの設計上、ロードしようとするdylibの場所が絶対パスで固定されておらず、複数の候補フォルダ(検索パス)を順番に探しに行く設定(Runpath Dependent Dylibs)になっている場合があります。

パターンB:見つからないライブラリ(Missing dylib)の悪用

開発者の設定ミスなどで、アプリの内部コードに「読み込むべきdylib」として登録されているにもかかわらず、実際にはシステム上に存在しない(または過去のバージョンアップで削除された)dylibが存在することがあります。

3. 攻撃の流れ

この攻撃を仕掛けるため、攻撃者は事前にターゲットとなるフォルダ(アプリのパッケージ内やユーザーディレクトリなど)への書き込み権限を得ている必要があります。

  1. 標的アプリの選定:
    攻撃者は脆弱な検索パスを持つ、または欠落したdylibを要求する正規のアプリケーション(例: Xcode、Adobe製品、Office for Macなど)を特定します。

  2. 悪意あるDylibの配置:
    アプリが起動時に参照する予定のパスに、不正なコード(バックドアを仕込むなど)を埋め込んだカスタム .dylib を配置します。

  3. ユーザーのアプリ起動(トリガー):
    ユーザーが業務などでその正規アプリケーションをいつも通りダブルクリックして起動します。

  4. コード実行:
    アプリのプロセス(dyld)が攻撃者のdylibを自動的にロードします。マルウェアは「その正規アプリのプロセス内部」に溶け込んだ状態(インジェクション)で、バックグラウンドで隠密に実行されます。

4. 防御・対策

macOSの標準的なセキュリティ機能の活用と、適切なコード署名が最大の防御になります。

5. 重要ポイント

6. 関連する主なCWE

実務上のアドバイス

macOSのインシデント調査において、怪しい常駐バイナリ(.app やスタンドアロンの実行ファイル)がどこにも見当たらないのに、特定の正規ツールを立ち上げた時だけ不審なビーコニング(外部通信)が発生する場合は、この T1157 / T1574.004 を疑うべきです。

macOS のターミナルで otool -L [アプリのパス]otool -l [アプリのパス] | grep LC_RPATH コマンドを実行することで、そのアプリがどのような検索パス(@rpath)を持っているかを解析し、仕込まれた偽のdylibを特定することが可能です。

分析

この攻撃手法を利用する脅威アクター

関連する CVE

攻撃手法 – 脅威アクター Graph


← Technique一覧に戻る ← Tactics一覧に戻る