Windows processes often leverage application programming interface (API) functions to perform tasks that require reusable system resources. Windows API functions are typically stored in dynamic-link libraries (DLLs) as exported functions.
Hooking involves redirecting calls to these functions and can be implemented via:
Similar to Process Injection, adversaries may use hooking to load and execute malicious code within the context of another process, masking the execution while also allowing access to the process's memory and possibly elevated privileges. Installing hooking mechanisms may also provide Persistence via continuous invocation when the functions are called through normal use.
Malicious hooking mechanisms may also capture API calls that include parameters that reveal user authentication credentials for Credential Access. (Citation: Microsoft TrojanSpy:Win32/Ursnif.gen!I Sept 2017)
Hooking is commonly utilized by Rootkits to conceal files, processes, Registry keys, and other objects in order to hide malware and associated behaviors. (Citation: Symantec Windows Rootkits)
T1179は「Hooking(フッキング)」として定義されている、OSやアプリケーションの正常な処理フローを横取りする極めて強力な攻撃手法です。
APIの呼び出し経路やシステム関数の動作を書き換えることで、特定のイベント(キー入力、ファイルの読み書き、通信など)が発生した際に、攻撃者の用意した悪意あるコード(マルウェア)を最優先で割り込ませて実行させる手法です。
この手法で攻撃者は、「OSやアプリケーションの内部に深く潜り込み、ユーザーの操作やシステムデータを完全に監視・操作・隠蔽すること」を実現します。
情報のリアルタイム窃取(インライン監視):
例えば、ブラウザやログイン画面の「文字列入力関数」をフックすることで、データが暗号化される前の生のパスワードやクレジットカード情報をリアルタイムで盗み出せます(キーロギングやAPIキャプチャ)。
防御回避(ステルス性と妨害):
セキュリティソフト(ウイルス対策ソフト)がファイルをスキャンしようとする関数をフックし、「不審なファイルは存在しない」という嘘の実行結果を返すことで、自身の存在を完全に隠蔽できます(Rootkit機能)。また、セキュリティプロセスの起動そのものを阻止することも可能です。
強固な永続化:
OSが日常的に呼び出す標準的なAPI(例: メッセージ処理ループなど)にコードを割り込ませておくことで、ユーザーがPCを操作するたびにマルウェアが自動的に実行される足場を維持できます。
フッキングは、OSのメモリ領域やシステム構成を直接書き換える必要があるため、多くの場合、攻撃者は事前に管理者権限(WindowsであればAdministratorやSYSTEM、Linuxであればroot)を確保した上で実行します。
初期侵入と権限昇格:
脆弱性を突くなどしてターゲット端末に侵入し、フッキングを行うための高い権限(特権)を獲得します。
ターゲットの選定とメモリ展開:
マルウェアをシステム(または特定の正規プロセス、例: explorer.exe やブラウザなど)のメモリ空間にインジェクション(注入)します。
フックの設置(関数書き換え):
Windowsを例に挙げると、以下のような手法を用いて関数のルートを捻じ曲げます。
SetWindowsHookEx(正規APIの悪用):
OSが提供するメッセージ監視用の正規関数を悪用し、特定のイベント(キーボード入力など)をマルウェアに転送させます。
インラインフッキング(IAT/EAT改ざん):
メモリ上にある正規のシステム関数(例: CreateFileW など)の先頭数バイトを、攻撃者のマルウェアDLLの場所へジャンプ(JMP)する命令に直接書き換えます。
横取りと実行:
ユーザーやシステムが正規の操作(例: メモ帳でファイルを開くなど)をすると、呼び出された関数が途中で攻撃者のコードへと脱線します。マルウェアは目的の処理(データのコピーなど)を済ませた後、システムがクラッシュしないよう、何事もなかったかのように処理を正規の関数へと戻します。
フッキングはメモリ上で行われる高度な攻撃であるため、従来の「ファイルスキャン」だけでは防ぎにくく、メモリ保護と挙動監視が中心となります。
EDR(Endpoint Detection and Response)の導入:
現代の高度なEDR製品は、マルウェアがよく悪用する SetWindowsHookEx APIの不審な呼び出しや、メモリ上の重要なシステムDLL(ntdll.dll や kernel32.dll など)のヘッダーが不正に書き換えられていないかをリアルタイムに監視(インラインメモリ保護)し、検知・遮断します。
カーネル保護機能(Windows)の有効化:
Windowsの Kernel Patch Protection (PatchGuard) や、HVCI(ハイパーバイザーで保護されたコードの整合性)を有効にします。これにより、攻撃者がOSの核心部(カーネルモード)の関数をフックしてRootkit化することを強力に防御します。
特権アクセスの制限:
フッキングに必要なAPIの実行やプロセスメモリへの書き込みは、通常、管理者権限が必要です。「最小権限の原則」を徹底し、一般ユーザーのアカウントから管理者への昇格ルートを塞ぎます。
「両刃の剣」である点(セキュリティソフト自身も使う):
実は、フッキングという技術自体は悪意あるものだけではありません。EDRや挙動監視型のセキュリティソフト自体も、アプリケーションの不審な動きを監視するためにフッキングの技術を日常的に使用しています。 攻撃者はこの「セキュリティ製品と同じ強力な武器」を逆手に取って攻撃を仕掛けてくるため、正常な動作と攻撃の区別(チューニング)が非常に難しいという特徴があります。
APIフッキングとRootkit:
高度なステルス性を持つマルウェア(Rootkit)において、フッキングは「プロセスの隠蔽」「ファイルの隠蔽」「ネットワーク通信の隠蔽」を実現するためのコア技術として位置づけられています。
フッキングを許してしまう、またはフッキングによって悪用されるソフトウェア設計・管理上の脆弱性には以下のようなものがあります。
CWE-267: Privilege Defined With Unsafe Actions(不安全なアクションを伴う特権定義)
プロセスが他のプロセスのメモリ空間を自由に書き換えられたり、メッセージフックを設定できたりする、OSやアプリケーション間の過剰な権限委譲の問題。
CWE-284: Improper Access Control(不適切なアクセス制御)
重要なシステム関数やメモリ領域に対するアクセス制御が不十分で、悪意あるプロセスからの書き換え(フックの注入)を許可してしまう問題。
CWE-427: Uncontrolled Search Path Element(制御されていない検索パスの要素)
DLLを読み込む際の検索パスが不適切で、フックを仕込んだ偽のDLL(ラッパーDLL)を先に読み込ませる「DLLハイジャック」からフッキングへ繋がる問題。
フッキングは「攻撃の手法(テクニック)」そのものであるため、特定の単一バグ(CVE)を指すものではありません。しかし、「一般権限しか持たないハッカーが、フッキングを行うために特権を奪取する(昇格する)際」や、「正規のセキュリティ機能をバイパスするためにフックを利用する際」に、以下のような脆弱性が関連インシデントとして取り沙汰されます。
CVE-2019-1458 (Windows Win32k の脆弱性):
Windowsのウィンドウメッセージ処理(フッキング機能の基盤となるWin32kコンポーネント)に存在した権限昇格の脆弱性です。攻撃者はこの脆弱性を悪用して最高権限(SYSTEM)を獲得し、その後システム全体に対して高度なフッキングや永続化を仕掛ける足がかりとしました。
CVE-2021-1732 / CVE-2022-21882 (Windows Win32k カーネル権限昇格):
これらもWin32kのコールバック関数やメッセージ処理の不備を突いた脆弱性です。ハッカー集団(APT)が防御回避やインメモリでのコード実行、関数の乗っ取り(フッキング環境の構築)を行う前段階として、野生のゼロデイ攻撃などで激しく悪用されました。
インシデントハンドリングにおいて、「マルウェアの実行ファイル自体は削除したはずなのに、PCを操作すると特定のアプリケーション(ブラウザなど)が今でもおかしな挙動をする」という場合、そのアプリケーションのプロセスメモリ内にフックのコードだけが残存(寄生)しているケースがあります。その場合は端末を一度完全に再起動し、メモリをリフレッシュした上で、フックを注入した大元のファイル(DLLやレジストリ)を特定・駆除する必要があります。
この攻撃手法を利用する脅威アクターは登録されていません。