Linuxルートキット検出:ツールとテクニック
10分で読めます - 2026年5月16日

chkrootkit、rkhunter、Auditd、AIDE、およびサーバーの動作監視を使用して、Linuxのルートキットを検出し、防止する方法。
Linuxルートキット検出:サーバー・セキュリティのためのツールとテクニック
ルートキットは、攻撃者に Linux システムへの永続的な隠れたアクセスを提供します。カーネル操作を操作し、ファイルやプロセスを隠し、標準的なセキュリティ・ツールをかわします。何年もの間、発見されていないものもあります。単一のツールではすべてを捕捉することはできないため、これらを検出するには、階層的なアプローチが必要です。
この記事では、Linuxのルートキットの主な種類とそのスキャン方法、そして基本的なスキャナーが見逃してしまうものをキャッチする高度な監視技術について説明する。
Linuxルートキットの種類
ルートキットはさまざまな権限レベルで動作し、深く潜り込むほど見つけるのが難しくなります。
ユーザーモードのルートキットは、アプリケーション・レベル(リング3)で動作します。LD_PRELOADを使ってダイナミック・リンクを乗っ取り、readdirや fopenのような標準Cライブラリ関数を妨害する悪意のあるライブラリを注入し、ユーザーランドのツールからファイルやプロセスを隠します。
カーネルモードのルートキットは、ローダブルカーネルモジュール(LKM)としてロードすることで、リング0で実行されます。システムコールを傍受し、カーネルメモリを操作し、自身の存在を隠します。LKMは特定のカーネル・バージョンに紐付いているため、設定を誤るとカーネル・パニックを引き起こし、皮肉にもその存在が露呈することになります。
eBPFベースのルートキットは、Extended Berkeley Packet Filterサブシステムを悪用して、従来のモジュールをロードすることなくカーネル空間で実行する。シスコールフック、トレースポイント、LSMイベントにアタッチする。標準的なLKMスキャナでは検出できない。Boopkitは、このアプローチを使って秘密のC2チャネルを作成する、よく知られた概念実証です。
io_uringベースのルートキットは、最新の亜種です。io_uring非同期I/Oインターフェースを使用してバッチ処理を行うため、観測可能なシステムコールイベントの発生が少なくなります。実験的なルートキットであるRingReaperは、EDRツールを回避しながら、read、write、connectなどのコールをサイレントに置き換えることができることを実証しました。
| ルートキットの種類 | 特権レベル | フッキング方法 | 検出の難易度 |
|---|---|---|---|
| ユーザモード | リング3(ユーザー) | LD_PRELOAD、ライブラリハイジャック | 中程度 |
| カーネルモード | リング0(カーネル) | シスコールテーブル、LKM、インラインフック | 高 |
| eBPFベース | リング0(カーネル) | eBPFプログラムアタッチメント | 非常に高い |
| io_uringベース | ユーザー/カーネル | 非同期I/Oバッチ | 非常に高い |
chkrootkitとrkhunterによるスキャン
Linuxサーバーのルートキット検出には、迅速なスキャンを行うchkrootkitと、より詳細なチェックを行うrkhunterの2つのツールが基本となっています。
chkrootkit
chkrootkitは、重要なシステムバイナリ(ls、ps、netstat、sshd、ifconfig)に改ざんの兆候がないかチェックするシェルスクリプトです。また、乱立するネットワークインターフェイスや削除されたログも検出します。バージョン0.59(2026年1月)の時点で、Linux BPFDoor、Syslogk、XZ Backdoorのような新しい脅威を含む、75以上のルートキット、ワーム、LKMを識別することができます。
不審な動きがあった後に実行してください。ifpromiscコンポーネントからの警告や、削除されたlastlogファイルやwtmpファイルに関するアラートに注意してください。
rkhunter
rkhunterはさらに上を行きます。システムバイナリのSHA-1ハッシュと既知の良好な値との比較、ファイルパーミッションと隠しファイルの監視、スタートアップ設定のチェック、カーネルとネットワークの解析を実行します。
最初から適切にセットアップしてください:
# Establish a baseline after a clean install or update
rkhunter --propupd
# Update rootkit definitions
rkhunter --update
# Run a full scan (use --novl on production servers to reduce I/O)
rkhunter --check --enable all
毎日のスキャンを自動化するには、/etc/rkhunter.confで CRON_DAILY_RUN="true "を設定し、クリーンな出力には--skip-keypressと --report-warnings-onlyを使用する。/var/log/rkhunter.logでログを確認し、確認された誤検知をホワイトリストに入れます。
LKMルートキットの検出
LKMルートキットはカーネル拡張として動作し、システムコールを傍受し、カーネルレベルでプロセスを隠すため、特に危険です。lsmodのような標準ツールでは検出できませんが、検出する方法はあります。
lsmodの出力を/sys/module/のリストと比較する。疑わしいカーネル・メッセージがないか、システム・ログをチェックする:
# Look for out-of-tree module warnings
sudo dmesg | grep "loading out-of-tree module taints kernel"
# Check for module verification failures
grep "module verification failed" /var/log/syslog
# Run chkrootkit's LKM-specific check
sudo chkrootkit lkm
lsmodや /proc/moduleから隠れるルートキット(Diamorphineなど)でも、/sys/module/diamorphine/coresizeをチェックしたり、syslogの警告を確認することで見つけることができます。
高度な検出:動作監視と完全性チェック
スタティック・スキャナーには根本的な弱点がある。2026年の実験では、ルートキットのバイナリにNULLバイトを1つ追加するだけで、機能に影響を与えない変更であるにもかかわらず、検出率が劇的に低下しました。Diamorphineの検出率は、シンボルテーブルを削除しただけで33/66から8/64に低下しました。シグネチャに頼るだけでは不十分なのだ。
振る舞い分析
振る舞い分析では、「このファイルは既知のルートキットに一致するか」という質問の代わりに、「このプロセスは何か異常なことをしているか」という質問をします。これらのシグナルを監視する:
- メソッドに関係なくカーネルモジュールをロードする
init_module()とfinit_module()システムコールを監視するためにAuditd を使用する。 - 31以上のシグナルを持つ
kill()コールを監視する。 /proc/sys/kernel/taintedをチェックして、未承認のカーネルモジュールのアクティビティをチェックする。/tmpや/dev/shmに予期せぬ.soファイルがないか。- eBPFの活動、特に
bpf_probe_write_userコールを追跡する。BCCのようなツールは、sys_enter_io_uring_enterのようなトレースポイントを通してio_uringオペレーションをトレースできる。
eBPFとio_uringルートキットについては、特に、Tetragon、Falco、Traceeのようなランタイム・モニタリング・ツールは、リアルタイムでカーネル内の活動を観察することができる。
ファイル整合性モニタリング
AIDE(AdvancedIntrusion Detection Environment)は、信頼されたシステムファイルのベースラインを作成し、変更をチェックする。aide --initで初期化し、cronでaide -checkをスケジュールする。bin/loginや /usr/bin/sshdのような重要なバイナリのチェックサム、パーミッション、所有者、タイムスタンプを追跡する。
パッケージレベルの検証では、debsums(Debian/Ubuntu)またはrpm -Va(RHEL/CentOS)でシステムファイルの完全性を確認できる。最も信頼できる結果を得るには、信頼できるレスキュー・メディアからブートし、ファイルシステムをオフラインで検査する。
また、永続化メカニズムも監視してください。ルートキットは、共有オブジェクトを注入するために/etc/ld.so.preloadを変更したり、.bashrcや .profileを変更したりすることがよくあります。これらのファイルへの正当な変更はまれなので、ここでのアラートは高いS/N比を持つ。
Auditdによる自動監視
これらのルールを/etc/audit/rules.d/rootkit.rulesに追加して、疑わしいカーネルの活動をリアルタイムで検出します:
# Detect unauthorized kernel module loading
-a always,exit -F arch=b64 -S finit_module -S init_module
# Catch unusual high-range kill signals
-a always,exit -F arch=b64 -S kill -F a1>=32
rkhunterの自動アップデートと組み合わせてください。コンフィグでUPDATE_MIRRORS=1とMIRRORS_MODE=0を設定し、正規のシステムアップデート後にrkhunter --propupdを実行してベースラインを更新します。
ルートキットに対するサーバーの強化
検出は重要ですが、予防する方がより効果的です。ほとんどのルートキットは、インストールに昇格権限を必要とするため、攻撃対象領域を減らすことが大きな違いとなります。
カーネルとパッケージは常にアップデートしておきましょう。攻撃者は、パッチが適用されていない脆弱性を悪用して特権を昇格させ、LKM または eBPF ベースのルートキットを展開します。パッチを当てた後は、rkhunter --propupd で検知ベースラインを更新してください。
最小権限を強制する。ユーザーやプロセスに必要以上のアクセス権を与えない。SELinuxまたはAppArmorを使用して、プロセスが侵害された場合でも不正なアクションをブロックする強制的なアクセス制御を行います。
起動後のカーネルモジュールのロードを無効にする。専用サーバーでは、システム起動後のモジュールロードをロックすることで、LKMルートキットを完全に防ぐことができます。これは共有ホスティングでは不可能であり、専用またはVPS環境がより強力なセキュリティ体制を提供する理由の1つです。
ネットワークをセグメント化する。インフラの一部を分離することで、1台のマシンが侵害された場合の横の動きを制限することができます。
定期的な監査。 Lynisのようなツールは、攻撃者に悪用される前にパーミッションエラーや設定ミスを特定することができる。
結論
ルートキットは見え隠れするように作られています。症状が現れる頃には、システムはすでに簡単には回復できないほど危険にさらされている可能性がある。単一のスキャナですべてを検知することはできず、基本的なシグネチャ・ベースの検知は簡単に回避できる。
実用的な防御策は、複数のレイヤーを組み合わせることだ:
- 既知の脅威に対するchkrootkitとrkhunterによる定期的なスキャン
- 不審なカーネルアクティビティに対するAuditdルールと動作監視
- AIDEによるファイルの整合性監視で不正な変更を検出
- eBPFやio_uringの脅威に対するTetragonやFalcoのようなランタイムツール
- アクセス制御、パッチ適用、ネットワーク・セグメンテーションを強化し、攻撃対象領域を縮小する。
自動化できるものは自動化し、ベースラインを最新の状態に保ち、信頼できるクリーンなOSインストールから開始します。
FDC Serversは、フルルートアクセスとカスタマイズ可能なカーネル設定を備えた専用およびVPSホスティングを提供しています。専用サーバーのオプションを検討し、堅牢なLinux環境を構築してください。

遅いデプロイメントや帯域幅の制限にうんざりしていませんか?FDC Serversは、瞬時の専用電源、グローバルリーチ、あらゆる規模に対応する柔軟なプランを提供します。
今すぐアップグレード
Linuxサーバー・ハードニング・チェックリスト
Linuxサーバーを堅牢化するためのステップバイステップのチェックリスト。SSH、ファイアウォール、パッチ適用、ファイルパーミッション、SELinux/AppArmor、監査ロギングをカバー。
15分で読めます - 2026年5月8日
iperf3 チュートリアル:LinuxとWindowsでネットワーク速度をテストする
10分で読めます - 2026年5月7日

ご質問またはカスタムソリューションが必要ですか?
柔軟なオプション
グローバル・リーチ
即時展開
柔軟なオプション
グローバル・リーチ
即時展開