フッキングとは【用語集詳細】
フッキング(Hooking)とは、コンピュータにおける関数呼び出しやイベント、メッセージなどを捕捉し、その動作をモニターしたり変更したりする処理を意味する言葉です。
プログラムにおいてフッキングを行う機能を、フックプロシージャ(Hook Procedure)と呼びます。
WindowsにおいてアプリケーションがOSの持つ機能を呼び出す際に、DLL等に格納されたAPIを利用します。このAPIの処理を捕捉し変更する行為を特にAPIフッキング(API Hooking)と称します。
フッキングは、デバッグのためのイベント監視やキー入力・マウス動作の捕捉、あるいはコンピュータのパフォーマンス・処理能力計測など、様々な用途で使用されています。
EDRやAVなどのセキュリティ製品は、APIフッキングを利用することで、悪意のあるプロセスやコード実行を監視します。
マルウェアやルートキットなどは、関数呼び出しやメッセージなどの処理を捕捉し改変するためにフッキングを多用します。
例えばキー入力に関するAPI処理に対しフッキングを行うことで、キーボードを通じて入力された資格情報を取得することが可能です。あるいはユーザーの認証情報をパラメータに持つAPIをフッキングすることで、情報を窃取する手法も存在します。
このような技術はキーロガーなどが利用しています。
また、特定のAPIをフッキングしそのフローを変更することにより、自身の存在をシステムから隠ぺいすることができます。
stuxnetやFinFisherスパイウェアが利用する攻撃法にIATフッキング(IAT Hooking)があります。
IAT(Import Address Table)とは、実行ファイルが読み込むDLLをリスト化した配列であり、当該実行ファイル内に組み込まれていますが、IATフッキングを行うことにより配列上のポインタをフックプロシージャに置き換えることで、攻撃者の指定したコードを読み込ませることができます。
インラインフッキング(Inline Hooking)は特定のプログラムにおけるAPI関数を直接改変する手法です。対象となるAPI関数の最初のバイトを上書きすることで、本来のAPI関数ではなく攻撃者の指定したフックプロシージャを読み込ませます。
他の攻撃手法として、ユーザーモードアプリケーションがカーネル機能を呼び出す際に使われるSSDT(Service Descriptor Table)を改変するSSDTフッキング(SSDT Hooking)があります。
マルウェアの動的解析においては、サンドボックス上でフッキングを用いることによりマルウェアの動作を監視します。しかし現在のマルウェアは、サンドボックス検知回避機能を備えており、デバッグ環境におけるフックの挿入を検知し動作を停止するケースが多くみられます。