SSDT(System Service Descriptor Table)は、Windowsオペレーティングシステムにおいて、カーネルモードで動作するシステムコールのエントリーポイントを管理するテーブルです。SSDTは、アプリケーションからカーネルレベルのシステム機能(ファイル操作、プロセス管理、メモリ管理など)にアクセスするための中間レイヤーとして機能します。
このテーブルは、Windowsカーネルがユーザーモードからカーネルモードへの要求を効率的に処理できるようにする重要な役割を持ち、システムの安定性とセキュリティに大きく関与しています。
SSDTに含まれる各エントリは、システムコールのインデックスと対応するカーネル関数のアドレスを指しており、プロセスがこれを通じてOSの基本機能を利用できる仕組みになっています。
SSDTの主な機能と役割
- システムコールの管理
SSDTは、ユーザーモードからのシステムコール(API呼び出し)を適切なカーネル関数にマッピングし、ユーザーアプリケーションの要求が効率よく処理されるようにします。 - エントリーポイントのリダイレクト
SSDTの各エントリーポイントには、対応するシステム機能のメモリアドレスが格納されています。これにより、カーネルモードでのシステムコールが該当する関数に転送され、処理されます。 - カーネルレベルのセキュリティ
カーネルモードでのシステム操作には高いセキュリティが求められます。SSDTはカーネル機能へのアクセスを管理する役割を担っており、これによりシステムの安定性とセキュリティが保たれます。 - システムの安定性確保
SSDTは、アプリケーションからのシステムコールが適切なアドレスに誘導されることで、システムコールに対する処理の正確性と安定性を確保しています。
SSDTハイジャックとセキュリティリスク
SSDTは、Windowsのカーネルモードにおける主要なシステム機能に関連しているため、マルウェアやルートキットによる「SSDTハイジャック(SSDT Hooking)」のターゲットになりやすい領域でもあります。SSDTハイジャックは、攻撃者がSSDTのエントリーポイントを不正に書き換えることで、システムコールが本来のアドレスではなく、マルウェアコードにリダイレクトされるようにします。
SSDTハイジャックによるリスク
- システムの制御乗っ取り
SSDTエントリを操作することで、マルウェアがシステムコールを乗っ取り、不正な処理を実行させることが可能になります。これにより、OS全体の動作や機密データにアクセスできるようになります。 - ルートキットによる隠蔽
SSDTを操作することで、マルウェアは自身の存在を隠ぺいすることができます。例えば、システムプロセスやファイルの一覧表示を操作することで、マルウェアの検出が困難になるようにします。 - 不正データの取得
SSDTの乗っ取りによって、特定のシステムコール(ファイル操作やネットワークアクセス)を監視し、外部にデータを流出させることが可能になります。 - カーネルのクラッシュや不安定化
SSDTの不正操作によって、OSカーネルの動作に異常が生じる可能性があります。特に、SSDTハイジャックが失敗すると、カーネルがクラッシュし、ブルースクリーン(BSOD)を引き起こす場合があります。
SSDTを用いた防御策と検出方法
- カーネルモードの整合性保護(PatchGuard)
Windowsでは、カーネルモードの整合性を保護するためにPatchGuardという仕組みが導入されています。PatchGuardは、SSDTやその他のカーネル構造の整合性を定期的に確認し、変更が検出された場合にシステムを停止して異常を通知します。 - エンドポイントセキュリティソリューション
EDR(Endpoint Detection and Response)などのエンドポイントセキュリティソリューションは、カーネルレベルの異常な変更や不正アクセスを検出するための監視機能を持ち、SSDTハイジャックの兆候を検出することが可能です。 - システムコールの監視とロギング
特定のシステムコールの呼び出し頻度やパターンを監視し、異常なシステムコールが発生した場合にアラートを上げることで、SSDTハイジャックの兆候を早期に発見できます。 - デジタル署名とコード整合性の検証
カーネルモードドライバの署名確認を強化し、承認されたコードのみが実行できるようにすることで、SSDTの不正な書き換えを防ぐことができます。 - ホストベースの侵入防止システム(HIPS)
HIPSは、カーネルモードの操作を監視し、SSDTに不正なアクセスが試みられた際にブロックやアラートを発することができます。
まとめ
SSDT(System Service Descriptor Table)は、Windowsオペレーティングシステムでのシステムコール管理に欠かせないテーブルで、ユーザーモードとカーネルモード間の通信を管理し、OS全体の安定性とセキュリティを保つ役割を担っています。しかし、その重要性ゆえに、SSDTはマルウェアやルートキットによって狙われやすく、SSDTハイジャックが実行されることでシステムの安全性が脅かされます。カーネル整合性保護機能(PatchGuard)の導入や、セキュリティソリューションによる監視などの対策を適用することで、SSDTを狙った攻撃に対する防御が可能です。