Per Apple’s developer documentation, when a user logs in, a per-user launchd process is started which loads the parameters for each launch-on-demand user agent from the property list (plist) files found in /System/Library/LaunchAgents, /Library/LaunchAgents, and $HOME/Library/LaunchAgents (Citation: AppleDocs Launch Agent Daemons) (Citation: OSX Keydnap malware) (Citation: Antiquated Mac Malware). These launch agents have property list files which point to the executables that will be launched (Citation: OSX.Dok Malware).
Adversaries may install a new launch agent that can be configured to execute at login by using launchd or launchctl to load a plist into the appropriate directories (Citation: Sofacy Komplex Trojan) (Citation: Methods of Mac Malware Persistence). The agent name may be disguised by using a name from a related operating system or benign software. Launch Agents are created with user level privileges and are executed with the privileges of the user when they log in (Citation: OSX Malware Detection) (Citation: OceanLotus for OS X). They can be set up to execute when a specific user logs in (in the specific user’s directory structure) or when any user logs in (which requires administrator privileges).
T1159は「Launch Agent(ローンチエージェント)」として定義されていた、macOS環境における極めて代表的な自動実行・潜伏手法です。
macOSのサービス管理フレームワークである launchd の仕様を悪用し、ユーザーがOSにログインしたタイミングでマルウェアを自動起動させる手法です。主に「永続化(Persistence)」と「特権昇格(Privilege Escalation)」のために利用されます。
macOSにおいて、バックグラウンドで動くプログラム(エージェント)をログイン時に自動起動するための正規の仕組みです。
設定は .plist(プロパティリスト) というXML形式のファイルで記述され、特定のフォルダに配置されます。ユーザーがMacにログインすると、OSの根幹である launchd プロセスがこれらの .plist を読み込み、指定されたプログラムを自動的に立ち上げます。
Launch Agentは、基本的には「ログインしたユーザーの権限(一般ユーザー権限)」で動作します。そのため、攻撃者は管理者権限がなくても、侵入初期の段階からこの手法を仕掛けることができます。
マルウェアの配置:
攻撃者は遠隔操作用ツール(RAT)などのバイナリやスクリプトを、目立たないフォルダ(例: ~/Library/Containers/ など)に隠密に配置します。
悪意あるPlistの作成と配置:
ユーザー自身の権限で書き込みが可能な、以下の「ローンチエージェント用フォルダ」に、新しい .plist ファイルを作成して設置します。
~/Library/LaunchAgents/ (現在のユーザー用).plist の中には、以下のような条件(トリガー)を書き込みます。
* `RunAtLoad`: `true`(ログイン時に自動実行する)
* `ProgramArguments`: (手順1で置いたマルウェアのパスを指定する)
launchd がこの設定ファイルを読み込み、バックグラウンドでマルウェアを自動起動させます。「Plistファイルが置かれるフォルダの常時監視」が最も確実なディフェンスです。
永続化フォルダの監視(最重要):
EDRやmacOSの「Endpoint Security Framework (ESF)」を活用し、以下のフォルダ配下に新しい .plist ファイルが作成・変更された場合にアラートを上げるように設定します。
~/Library/LaunchAgents//Library/LaunchAgents/ (システム全体・全ユーザー用、要管理者権限)不審なプロセスの親子関係チェック:
ログイン直後に、OSのサービス管理プロセスである launchd を親プロセスとして、一時フォルダ(/tmp)やユーザー環境の怪しいパスからバイナリが実行されていないかをログで追跡します。
通知センターの確認:
モダンなmacOS(Ventura以降など)では、バックグラウンドアイテム(Launch Agentなど)が新しく追加されると、ユーザーの画面に「バックグラウンド項目が追加されました」というシステム通知が強制的に表示される仕様になっています。身に覚えのない通知があった場合は即座に調査します。
T1160(Launch Daemon)との違い:
T1159: Launch Agent(本手法)
~/Library/...)に配置できるため、管理者権限が不要。T1160: Launch Daemon(ローンチデーモン)
/Library/LaunchDaemons/)。正規ソフトウェアとの混在:
Launch Agentは、Google Chromeのアップデートチェッカー、LINEやSlackの自動起動など、正規のアプリも日常的に利用しています。そのため、フォルダ内には大量のplistが並んでおり、攻撃者は com.apple.video.plist のようにAppleの公式サービスを騙った名前(マスカレード)にして紛れ込ませる手口を使います。
CWE-15: External Control of System or Configuration Setting:
システムの自動起動設定(Launch Agentのplist)を外部から不正に変更されてしまう不備。
CWE-732: Incorrect Permission Assignment for Critical Resource:
ユーザーの起動フォルダに対するアクセス権限の割り当て、または内部に置かれる実行ファイルの保護不備。
macOSを狙うほぼすべてのマルウェア(標的型スパイ、アドウェア、ランサムウェアなど)が、一等地の永続化ポイントとして真っ先に悪用します。
~/Library/LaunchAgents/ にカスタムplist(T1159 / T1543.001)を書き込み、バックドアの生存期間を数ヶ月〜数年以上にわたって維持する手口を標準的に使用しています。Macの動きが重い、または不審な外部通信が発生している疑いがある場合、ターミナルを開いて launchctl list コマンドを実行するか、ls -la ~/Library/LaunchAgents/ を実行して中身を確認してください。正規のベンダー名(com.google... や com.microsoft... など)ではない、ランダムな英数字や、アップル公式を装った怪しい名前のファイルがあれば、そのplist内に記載されている「実行ファイル(ProgramArguments)のパス」を最優先で調査する必要があります。