Linuxのrootkit検知と対策|chkrootkit・rkhunterで不正侵入を見つける方法

Linux Security

サーバーを運用していて、「もし気づかないうちに侵入されていたら?」と不安を感じたことはないでしょうか。
外部からの攻撃は日々巧妙になっており、侵入された痕跡を消す「rootkit」と呼ばれるマルウェアが使われるケースも珍しくありません。

rootkitはシステムの奥深くに潜伏し、管理者権限を奪ったまま発見を逃れるよう設計されています。
通常のプロセス一覧やファイル一覧には表示されないため、気づかないまま何か月も放置されてしまうこともあります。

この記事では、rootkitの仕組みと脅威を正しく理解したうえで、Linuxで使える代表的な検知ツール「chkrootkit」と「rkhunter」の導入・運用方法を、現場で使えるレベルで解説します。
定期スキャンの自動化やログの確認方法まで、情シス1人体制でも実践できる内容をカバーしています。

Linuxのrootkit検知と対策|chkrootkit・rkhunterで不正侵入を見つける方法

rootkitとは?なぜ危険なのか

rootkit(ルートキット)とは、攻撃者がシステムに不正侵入した後、その存在を隠蔽しながら管理者権限(root権限)を維持するためのツール群です。

通常のマルウェアとrootkitの決定的な違いは「ステルス性」にあります。
一般的なマルウェアは、ウイルス対策ソフトやプロセス監視で発見できることが多いですが、rootkitはOSのカーネルやシステムコマンド自体を改ざんして、自らの存在を隠します。

たとえば、psコマンドやlsコマンドを改ざんされた場合、管理者がプロセスやファイルを確認しても、攻撃者が仕込んだプログラムは一覧に表示されません。

rootkitは大きく分けて以下の種類があります。

ユーザーランドrootkit: システムコマンド(ls、ps、netstat等)のバイナリを差し替えて、攻撃者の活動を隠すタイプ。検知は比較的容易
カーネルrootkit: カーネルモジュールとして動作し、OSレベルで情報を隠蔽するタイプ。検知が非常に難しい
ブートキット: ブートローダーやMBR(マスターブートレコード)に感染し、OS起動前から動作するタイプ。最も高度

いずれの場合も、侵入に気づかない期間が長引くほど、情報漏洩やバックドアの設置、他サーバーへの横展開といった被害が拡大します。
だからこそ、定期的なrootkit検知スキャンが重要です。

chkrootkitとrkhunterの特徴と違い

Linuxで使えるrootkit検知ツールの代表格が「chkrootkit」と「rkhunter」です。
どちらもオープンソースで無料で利用でき、多くのLinuxディストリビューションの公式リポジトリに含まれています。

項目 chkrootkit rkhunter
正式名称 Check Rootkit Rootkit Hunter
検知方式 シグネチャベース(既知のrootkitパターン照合) シグネチャ + ファイル整合性チェック + 設定監査
検査範囲 rootkitの痕跡、改ざんバイナリ、不審なネットワーク接続 rootkit痕跡 + システムコマンドの改ざん + SSH設定 + 起動スクリプト
出力 シンプルなテキスト出力 詳細なログファイル + 警告レベル分類
自動更新 パッケージ更新に依存 rkhunter –updateでデータベース更新可能
導入の手軽さ 非常に簡単 初期設定がやや必要

結論から言えば、両方を併用するのがベストプラクティスです。
chkrootkitはシンプルで手軽に使える一方、rkhunterはより広い範囲を検査し、ファイルの変更検知まで行います。
検知ロジックが異なるため、片方で見逃したものをもう片方が検出する可能性があります。

Linuxのrootkit検知と対策|chkrootkit・rkhunterで不正侵入を見つける方法 - 解説

chkrootkitの導入と使い方

1. インストール

主要なディストリビューションでは、パッケージマネージャーから簡単にインストールできます。

# RHEL/CentOS/AlmaLinux/Rocky Linux sudo dnf install chkrootkit # Ubuntu/Debian sudo apt install chkrootkit

2. 基本的なスキャン実行

root権限でコマンドを実行するだけで、システム全体のスキャンが始まります。

# システム全体をスキャン sudo chkrootkit # 特定の検査項目だけ実行 sudo chkrootkit chkwtmp chklastlog

スキャン結果は標準出力に表示されます。
「INFECTED」(感染の疑い)という表示が出た場合は、詳しく調査する必要があります。
ただし、誤検知(false positive)も少なくないため、1つの結果だけで判断せず、rkhunterの結果や手動調査と合わせて総合的に判断してください。

3. 出力結果の読み方

chkrootkitの出力は、各検査項目に対して以下のステータスを返します。

not infected: 問題なし。rootkitの痕跡は検出されなかった
INFECTED: rootkitの特徴と一致するパターンが検出された。要調査
not tested: この環境では検査対象外のため未実行
not found: 検査対象のコマンド自体が存在しない

特に注意すべきはChecking `chkutmp'Checking `bindshell'の結果です。
これらで「INFECTED」が出た場合、バックドアやログ改ざんの可能性があります。

rkhunterの導入と使い方

1. インストール

# RHEL/CentOS/AlmaLinux/Rocky Linux(EPELリポジトリが必要) sudo dnf install epel-release sudo dnf install rkhunter # Ubuntu/Debian sudo apt install rkhunter

2. 初期設定とデータベース更新

rkhunterを正しく動作させるには、初回セットアップが必要です。

# シグネチャデータベースを最新に更新 sudo rkhunter --update # ファイルプロパティのベースラインを記録 # パッケージ更新後にも再実行すること sudo rkhunter --propupd

--propupdは、現在のシステムコマンドのハッシュ値を「正常な状態」として記録します。
このベースラインと比較することで、バイナリの改ざんを検知します。
OSのアップデートやパッケージ更新のたびに再実行してください。

3. スキャン実行

# 全項目スキャン sudo rkhunter --check # 対話的な確認をスキップして自動実行(cronに最適) sudo rkhunter --check --skip-keypress

4. ログの確認

rkhunterのスキャン結果は/var/log/rkhunter.log(ディストリビューションによっては/var/log/rkhunter/rkhunter.log)に記録されます。

# 警告のみ抽出 sudo grep -i "warning" /var/log/rkhunter.log # スキャン結果のサマリーを確認 sudo tail -20 /var/log/rkhunter.log

rkhunterの警告もchkrootkit同様に誤検知が含まれることがあります。
特にパッケージ更新直後は、ベースラインとの差分で警告が出やすくなります。
その場合は--propupdでベースラインを更新してから再スキャンしてください。

cronで定期スキャンを自動化する

rootkit検知は1回実行して終わりではありません。
攻撃はいつ起きるかわからないため、定期的な自動スキャンの仕組みを作ることが重要です。

以下は、毎日深夜3時にchkrootkitとrkhunterを実行し、結果をログに保存するcron設定の例です。

# rootkit検知スキャンの自動化(/etc/cron.d/rootkit-scan) 0 3 * * * root /usr/sbin/chkrootkit > /var/log/chkrootkit.log 2>&1 10 3 * * * root /usr/bin/rkhunter --check --skip-keypress --report-warnings-only >> /var/log/rkhunter-cron.log 2>&1

ポイントは以下の3つです。

時間をずらす: chkrootkitとrkhunterを同時に実行するとI/O負荷が高くなるため、10分程度ずらす
–report-warnings-only: rkhunterのcron実行では、警告があった場合だけ出力するオプションを付ける
ログのローテーション: logrotateで定期的にログを圧縮・削除する設定も忘れずに

さらに、異常が検出された場合にメール通知する仕組みを加えると、対応が遅れるリスクを大きく減らせます。

# 異常検出時のメール通知スクリプト例(/usr/local/bin/rootkit-scan.sh) #!/bin/bash CHKLOG="/var/log/chkrootkit.log" MAIL_TO="admin@example.com" /usr/sbin/chkrootkit > "$CHKLOG" 2>&1 if grep -q "INFECTED" "$CHKLOG"; then mail -s "[ALERT] rootkit detected on $(hostname)" "$MAIL_TO" < "$CHKLOG" fi

スキャン結果で「INFECTED」が出たときの対応手順

スキャンで「INFECTED」や「Warning」が出た場合、慌てず以下の手順で対応してください。

1. 誤検知かどうかを確認する

chkrootkitとrkhunterは、正常なシステム変更を誤ってrootkitと判定することがあります。
特に以下のケースでは誤検知の可能性が高いです。

・OSやパッケージを最近アップデートした
・独自にコンパイルしたバイナリを使っている
・コンテナ環境やVPS環境で特殊なカーネル設定がある

まずは、もう一方のツールでも同じ警告が出るか確認し、該当ファイルのパッケージ整合性をrpm -Vdpkg --verifyでチェックしてください。

# RPM系: パッケージの整合性を確認 rpm -V coreutils # Debian系: パッケージの整合性を確認 dpkg --verify coreutils

2. ネットワーク接続を確認する

不審な外部通信が行われていないか確認します。

# 外部への接続を確認(ESTABLISHEDの接続に不審なIPがないか) ss -tunap | grep ESTAB # 不審なリスニングポートがないか確認 ss -tlnp

3. 真に感染が確認された場合の対応

rootkitの感染が確実な場合、感染したシステム上のコマンドは信頼できません。
以下の対応を検討してください。

ネットワークから切断: 被害拡大を防ぐため、まずネットワークを切断する
証拠の保全: フォレンジック調査のため、ディスクイメージを取得する
クリーンインストール: rootkitの完全除去は極めて難しいため、OS再インストールが最も確実
バックアップからの復元: 感染前のバックアップがあれば、それを起点に復元する
侵入経路の特定: 同じ経路で再侵入されないよう、原因を調査して対策する

rootkitに感染した場合、「rootkitだけ削除して元に戻す」のは現実的ではありません。
システム全体がすでに信頼できない状態であるため、クリーンな環境を用意することが基本方針です。

よくある誤解と注意点

【誤解1】rootkit検知ツールを入れれば安全

chkrootkitやrkhunterは「事後検知」のツールです。
侵入そのものを防ぐわけではありません。
ファイアウォール、SSH鍵認証、定期的なパッケージ更新といった基本的な防御策と組み合わせて初めて効果を発揮します。

【誤解2】スキャン結果が全部「not infected」なら絶対安全

rootkit検知ツールは、既知のrootkitパターンに基づいて検査しています。
未知のrootkitや高度なカーネルrootkitは検出できない場合があります。
スキャン結果が問題なしでも、不審なサーバー挙動(CPU使用率の異常、見覚えのない通信等)があれば、別の角度から調査してください。

【誤解3】chkrootkitだけ、またはrkhunterだけで十分

前述のとおり、2つのツールは検査ロジックが異なります。
片方では検出できないものをもう片方が見つけるケースがあるため、併用を強く推奨します。

【注意】感染したシステム上でのスキャンには限界がある

rootkitはシステムコマンドを改ざんします。
つまり、感染済みのシステム上で実行するchkrootkitやrkhunter自体が正確に動作する保証はありません。
より正確な検査が必要な場合は、LiveCD/LiveUSBから起動して、マウントしたディスクに対してスキャンを実行してください。

Linuxのrootkit検知と対策|chkrootkit・rkhunterで不正侵入を見つける方法 - まとめ

本記事のまとめ

rootkitは「侵入されたことに気づけない」という点で、非常に厄介な脅威です。
しかし、chkrootkitとrkhunterという2つのツールを導入して定期的にスキャンするだけで、検知の網を大きく広げることができます。

やるべきこと ツール・コマンド 頻度
rootkit検知スキャン chkrootkit + rkhunter 毎日(cron自動化)
シグネチャ更新 rkhunter –update 週1回以上
ベースライン更新 rkhunter –propupd パッケージ更新のたび
ログ確認 /var/log/rkhunter.log、/var/log/chkrootkit.log 警告メール受信時
感染時の対応 ネットワーク切断 → 証拠保全 → クリーンインストール 即時

大切なのは、rootkit検知を「単体の対策」として捉えるのではなく、ファイアウォール設定・SSH鍵認証・ログ監視といった多層防御の一部として位置づけることです。
1つの防御が突破されても、別のレイヤーで検知・阻止できる体制を作っていきましょう。

Linuxのファイアウォール設定やSSHセキュリティについては、姉妹サイトLinuxMaster.JPで詳しく解説しています。

あなたのサーバー、気づかぬうちに侵入されていませんか?

rootkit対策は多層防御の重要な一角です。検知ツールの使い方だけでなく、そもそも侵入を許さない基盤づくりが大切です。
正しいセキュリティ知識を体系的に身につけたい方へ、メルマガで実践的なセキュリティ対策ノウハウをお届けしています。

コメント

タイトルとURLをコピーしました