Starting in Mac OS X 10.7 (Lion), users can specify certain applications to be re-opened when a user reboots their machine. While this is usually done via a Graphical User Interface (GUI) on an app-by-app basis, there are property list files (plist) that contain this information as well located at ~/Library/Preferences/com.apple.loginwindow.plist and ~/Library/Preferences/ByHost/com.apple.loginwindow.* .plist.
An adversary can modify one of these files directly to include a link to their malicious executable to provide a persistence mechanism each time the user reboots their machine (Citation: Methods of Mac Malware Persistence).
T1164は「Re-opened Applications(再開アプリケーションの悪用)」として定義されていた、macOS環境特有の永続化手法です。
macOSの標準機能である「ウィンドウ再開機能(ウィンドウの復元)」の仕様を悪用し、ユーザーがログアウトや再起動をした後に、マルウェアを自動で再実行(永続化)させる巧妙な手法です。
Macをシャットダウンまたは再起動しようとするとき、画面に「再ログイン時にウィンドウを再度開く」というチェックボックスが表示されます。
ここにチェックを入れた状態で再起動すると、OSはシャットダウン直前に開いていたアプリケーション(ブラウザ、ファインダー、テキストエディタなど)の状態を記憶し、次のログイン時にそれらを全く同じ状態で自動的に立ち上げてくれます。
攻撃者はこの利便性のための機能を逆手に取り、「シャットダウンの直前に、自分(マルウェア)のプロセスを『次回再開すべきアプリ』のリストに強制的に滑り込ませる」ことで、次回の自動起動(永続化)を達成します。
この手法は、ログインしているユーザーのセッション(環境)に依存して動作します。そのため、攻撃者は管理者権限(root)を持っていなくても、一般ユーザー権限のまま実行できるという特徴があります。
初期侵入:
フィッシングメールなどを経由してMacに一般ユーザー権限で侵入し、バックドア(マルウェア)を動作させます。
plistファイルの改ざん・作成:
macOSは、再開すべきアプリケーションの情報を以下のフォルダ内にある .plist(プロパティリスト)ファイルで管理しています。
~/Library/Preferences/ByHost/com.apple.loginwindow.[UUID].plist攻撃者は、このファイル(または関連する状態保存キャッシュ)を直接書き換えるか、OSのAPI(NSWindowRestoration など)を悪用して、「次回ログイン時に起動するアプリ」のリストに自分のマルウェアのパスを強制追記します。
ユーザーによる再起動(トリガー):
ユーザーが業務終了時などにMacを再起動、またはログアウトします。この際、「ウィンドウを再度開く」にチェックが入っている(またはOSのデフォルト設定で有効になっている)と、仕込みが完了します。
自動実行の発動:
次回、ユーザーがログインすると、OSの loginwindow プロセスが上記の設定ファイルを読み込みます。ユーザーが昨日開いていた正規のアプリ(SafariやSlackなど)が立ち上がるのと全く同じタイミングで、裏で静かにマルウェアも自動実行されます。
「設定ファイルのアクセス監視」と「プロセスの挙動確認」が有効です。
Preferences/ByHost フォルダの監視:
~/Library/Preferences/ByHost/ 配下にある com.apple.loginwindow.*.plist などのファイルに対する、セキュリティソフト(EDRなど)以外からの予期せぬ変更や書き込みを監視します。
不審な子プロセスのチェック:
ログイン直後、OSのログイン管理プロセスである loginwindow を親プロセスとして、通常は自動起動するはずのない一時フォルダ(/tmp)やユーザー環境の不審な隠しパス(~/Library/...)からバイナリが実行されていないかを監視します。
状態復元(Saved Application State)の監査:
アプリケーションの終了直前の状態は ~/Library/Saved Application State/ にも保存されます。インシデント調査の際は、このフォルダ内に身に覚えのないアプリケーションの状態データ(.savedState)が生成されていないか確認します。
「一度きり」の永続化としての使われ方:
この手法は、Launch Agent(T1159)のように「毎回確実に起動する設定をシステムに固定する」ものとは少し性質が異なります。再起動後にマルウェアが立ち上がった際、もしそのマルウェアが次のシャットダウン前にリストへ再登録する処理(あるいは別の永続化手法)を行わなかった場合、その次の起動時には立ち上がらなくなります。そのため、攻撃者は「他の強力な永続化を仕込むまでの、一時的な生存維持(保険)」としてこの T1164 を併用することがあります。
ユーザーの目につきにくい:
ユーザーから見れば「昨日使っていたアプリが戻ってきただけ」に見えるため、タスクマネージャー(アクティビティモニタ)などを凝視しない限り、不審な挙動として認知されにくいというステルス性を持っています。
CWE-15: External Control of System or Configuration Setting:
システムのセッション・ウィンドウ再開設定を外部から不正に変更されてしまう不備。
CWE-732: Incorrect Permission Assignment for Critical Resource:
ユーザーの環境設定フォルダ(Preferences)に対するアクセス権限の管理不備。
macOSのインシデント調査(フォレンジック)において、「端末を再起動した直後の一瞬だけ不審な外部通信(C2へのビーコン)が発生し、その後パタッと止まる」といった奇妙な挙動がある場合、この T1164 / T1547.017 が使われている可能性があります。
ByHost フォルダ内の com.apple.loginwindow 関連のplistを解析し、TALApps(State Restoration対象のアプリリスト)などの項目に見慣れないパスやバイナリが登録されていないかを確認することが、原因究明のブレイクスルーになります。
この攻撃手法に関連する CVE は登録されていません。