Loadable Kernel Modules (or LKMs) are pieces of code that can be loaded and unloaded into the kernel upon demand. They extend the functionality of the kernel without the need to reboot the system. For example, one type of module is the device driver, which allows the kernel to access hardware connected to the system. (Citation: Linux Kernel Programming) When used maliciously, Loadable Kernel Modules (LKMs) can be a type of kernel-mode Rootkit that run with the highest operating system privilege (Ring 0). (Citation: Linux Kernel Module Programming Guide) Adversaries can use loadable kernel modules to covertly persist on a system and evade defenses. Examples have been found in the wild and there are some open source projects. (Citation: Volatility Phalanx2) (Citation: CrowdStrike Linux Rootkit) (Citation: GitHub Reptile) (Citation: GitHub Diamorphine)
Common features of LKM based rootkits include: hiding itself, selective hiding of files, processes and network activity, as well as log tampering, providing authenticated backdoors and enabling root access to non-privileged users. (Citation: iDefense Rootkit Overview)
Kernel extensions, also called kext, are used for macOS to load functionality onto a system similar to LKMs for Linux. They are loaded and unloaded through kextload and kextunload commands. Several examples have been found where this can be used. (Citation: RSAC 2015 San Francisco Patrick Wardle) (Citation: Synack Secure Kernel Extension Broken) Examples have been found in the wild. (Citation: Securelist Ventir)
T1215は「Kernel Modules and Extensions(カーネルモジュールおよび拡張機能)」として定義されていた、OSの最深部(カーネル空間)を狙う極めて高度かつ致命的な攻撃手法です。
Linuxの LKM(Loadable Kernel Module) や、Windowsのカーネルモードドライバ(.sys)、macOSの KEXT(Kernel Extension) といった仕組みを悪用し、OSの心臓部であるカーネルレベルでマルウェアを自動実行・常駐化させる手法です。
この手法で攻撃者は、「OSそのものを完全に支配し、セキュリティソフトの検知を100%回避する『最強のバックドア(Rootkit)』」を実現します。
完全なステルス性(防御回避):
ユーザーが普段見ているタスクマネージャーや ps コマンド、さらには一般的なウイルス対策ソフト(ユーザーモードで動作するもの)は、すべて「OS(カーネル)」が提供する情報を信頼して画面に表示しています。攻撃者がカーネルを掌握すると、「自身のプロセス、ファイル、通信ログを最初から『存在しないもの』としてOSに嘘の報告をさせる」ことが可能になります。
セキュリティ製品の無力化:
カーネル空間はすべてのプログラムより高い権限を持つため、動作しているEDRやアンチウイルス製品のプロセスを検知されることなく強制終了させたり、ログの出力を根本から差し止めたりできます。
究極の永続化:
OSが起動する最初の段階でカーネルの一部としてロードされるため、システムをどれだけ再起動しても確実に、かつ誰よりも先に自動実行されます。
カーネル空間にコードを送り込むには、OSごとに用意されたドライバーやモジュールの読み込み機能を悪用します。この実行には必ず最高管理者権限(rootやSYSTEM)が必要です。
初期侵入と権限昇格:
脆弱性を突いてシステムに侵入し、まずはローカルの最高権限(Linuxのrootなど)を奪取します。
悪意あるカーネルモジュールの作成:
ターゲットのOSバージョン(カーネルのバージョン)に適合する、不正なコードを含んだカスタムモジュール(Linuxなら .ko ファイル、Windowsなら .sys ファイル)を用意します。
モジュールのロード(登録):
Linuxの場合: insmod や modprobe コマンドを悪用して、悪意あるLKMを直接カーネルに組み込みます。また、再起動後も自動ロードされるよう /etc/modules などの設定ファイルに追記します。
Windowsの場合: sc create コマンドなどで悪意あるドライバーを「システムサービス」として登録し、起動タイプを Boot または System に設定します。
カーネルの掌握:
OSがモジュールをロードした瞬間、マルウェアはカーネル空間のメモリに展開され、OSのシステムコール(Syscall)テーブルなどを書き換えてシステム全体の制御権を奪取します。
カーネルレベルの攻撃は一度成功すると検知が絶望的になるため、「そもそも未承認のモジュールをロードさせない」という予防策が生命線となります。
Secure Boot(セキュアブート)の有効化(最重要):
ハードウェア(UEFI)レベルでセキュアブートを有効にします。これにより、デジタル署名のない(=AppleやMicrosoft、主要Linuxディストリビューターが承認していない)不正なカーネルモジュールやドライバーの起動を、OSが読み込む前の段階で強制拒否します。
Windowsにおけるドライバー署名の強制(DSE / HVCI):
Windows環境では「Driver Signature Enforcement (DSE)」や「ハイパーバイザーで保護されたコードの整合性 (HVCI)」を有効にし、テスト用の未署名ドライバーや古い脆弱なドライバーのロードをブロックします。
モジュールロードコマンドの監視:
Linuxにおいて、insmod、modprobe、rmmod コマンドの実行履歴、および /etc/modules や /etc/modprobe.d/ への書き込みを auditd やEDRで厳重に監視します。
「BYOVD(Bring Your Own Vulnerable Driver)」攻撃の台頭:
現代のOSは署名のないドライバーを拒否するため、攻撃者は「正規の署名があるが、過去に脆弱性が未修正のまま放置されている他社製の古いドライバー」をあえて端末に持ち込んでロードさせます(BYOVD)。その後、その正規ドライバーのバグ(脆弱性)を突いてカーネルメモリを改ざんし、最終的に自分たちのマルウェアをカーネル内に滑り込ませるという非常に巧妙な迂回策がトレンドになっています。
実装の難易度とリスク:
カーネル空間でのプログラミングは極めて繊細です。マルウェアのコードにわずかでもバグがあると、OS全体が巻き込まれて一瞬でクラッシュ(Windowsならブルースクリーン、Linuxならカーネルパニック)を引き起こします。そのため、この手法は極めて技術力の高い国家系のサイバースパイ(APT)や、非常に洗練されたランサムウェア集団によって使われます。
CWE-267: Privilege Defined With Unsafe Actions(不安全なアクションを伴う特権定義)
カーネルという、システム全体の全リソースを操作できてしまう過剰な特権をプログラムに与えてしまうOSの構造的リスク。
CWE-347: Improper Verification of Cryptographic Signature(暗号署名の不適切な検証)
ロードしようとしているドライバーやモジュールのデジタル署名、整合性の検証スキップや不備により、不正なコードの実行を許してしまう問題。
攻撃者が「カーネルモジュールを強制的に読み込ませる(BYOVD)」ために悪用する、正規ドライバー側の代表的な脆弱性です。
CVE-2018-19320 (GIGABYTE製ドライバーの脆弱性):
GIGABYTE社の正規の署名付きドライバー(gdrv.sys)に存在した、任意のカーネルメモリを読み書きできてしまう脆弱性です。ハッカー集団(例:RobbinHoodランサムウェアなど)は、この正規ドライバーを標的のWindowsにわざわざインストールし、このバグを悪用してWindows Defender(セキュリティ機能)のカーネルプロセスを強制停止させ、その後ランサムウェアを一斉に感染させるというBYOVD攻撃に利用しました。
CVE-2022-37969 (Windows共通ログファイルシステム:CLFSの脆弱性):
Windowsのカーネルコンポーネントに存在した最高権限昇格の脆弱性です。野生のゼロデイ攻撃としてAPTグループに悪用され、一般権限から一瞬でSYSTEM(カーネル層を操作できる特権)へと昇格し、最終的に高度なRootkit(カーネル拡張の悪用)をシステムに定着させるための足がかりとして激しく悪用されました。
この攻撃手法を利用する脅威アクターは登録されていません。
この攻撃手法に関連する CVE は登録されていません。