Component Object Model (COM) とは
主にWindows上で動作するソフトウェア間の相互通信を可能にするための技術仕様のこと。
この技術仕様に基づいて開発されたソフトウェアをCOMオブジェクトあるいはCOMコンポーネントと呼ぶ。
詳しくはこちら。
COMオブジェクトをハイジャックするには
COMオブジェクトはレジストリで管理されている。正規のCOMオブジェクトではなく悪意のあるペイロードを参照するようにレジストリを編集することによりハイジャックする。
以下、ハイジャックの手法。
HKCUレジストリ・ハイブにCLSIDを追加して既存のHKLMレジストリ・ハイブ配下のCLSIDを乗っ取る
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID
(HKLMレジストリ) と HKEY_CURRENT_USER\Software\Classes\CLSID
(HKCUレジストリ)に同一のCLSIDが存在する場合、HKCUレジストリのCLSIDで参照されているCOMオブジェクトが優先的に実行される。
攻撃者はHKCU CLSIDエントリーに悪意のあるペイロードを仕込むことによって、本来実行されるはずだった正規のHKLM CLSIDエントリーをハイジャックできる。
※CLSIDはCOMオブジェクトを識別するためのレジストリキー。
InprocServer32 / LocalServer32 キーに悪意のあるファイルを配置する
CLSIDのInprocServer32
またはLocalServer32
キーが参照しているファイルがシステム上に存在しない場合、攻撃者はそのCLSIDを乗っ取ることが出来る。例えば、あるCLSIDのInprocServer32
キーがC:\Windows\fuga.dll
というファイルを参照しているものの、このファイルが存在しない場合、攻撃者は悪意のあるファイルをC:\Windows\fuga.dll
として配置することで、COMオブジェクトを乗っ取れる。
TreatAsキーを作成して正規のCLSIDを悪意のあるCLSIDにリダイレクトさせる
正規のCLSID配下に悪意のあるCLSIDを参照するTreatAs
キーを作成することで、悪意のあるCLSIDにリダイレクトさせることが出来る。例えばHKLM\SOFTWARE\Classes\CLSID\{2DEA658F-54C1-4227-AF9B-260AB5FC3543}
配下に{00000000-0000-0000-0000-DEADBEEF0000}
を参照するTreatAs
キーを作成すると、{2DEA658F-54C1-4227-AF9B-260AB5FC3543}
ではなく{00000000-0000-0000-0000-DEADBEEF0000}
のオブジェクトが参照される。
自分が以前調査したケースでは以下の方法で悪意のあるペイロードがシステム上で永続化していた。
- 任意のCLSIDレジストリ・ハイブに悪意のあるペイロードを書き込む
- 正規のCLSIDの配下に
TreatAs
キーを作成して、1.で編集した悪意のあるCLSIDを参照するように設定する - 既存の正規のスケジュールタスクが正規のCLSIDをユーザーのログオン時に読み込む
TreatAs
キーにより正規のCLSIDではなく、悪意のあるCLSIDにリダイレクトされる- 結果、ユーザーがログオンする度に悪意のあるペイロードが実行される
以上。
参考
https://attack.mitre.org/techniques/T1122/
https://www.gdatasoftware.com/blog/2014/10/23941-com-object-hijacking-the-discreet-way-of-persistence
https://bohops.com/2018/06/28/abusing-com-registry-structure-clsid-localserver32-inprocserver32/
https://bohops.com/2018/08/18/abusing-the-com-registry-structure-part-2-loading-techniques-for-evasion-and-persistence/
https://www.fireeye.com/blog/threat-research/2021/05/unc2529-triple-double-trifecta-phishing-campaign.html