2026年5月17日

2026年5月17日

rkhunterでrootkitを検出する方法|Ubuntu・RHEL系の導入、定期スキャン、警告の見方

rkhunter(Rootkit Hunter)は、Linux サーバーに rootkit やバックドアが仕掛けられていないかを調べるコマンドです。主に次のような点を確認します。

  • ls や ps などのシステムコマンドが、基準を取ったときから書き換えられていないか(ハッシュ値・権限・所有者など)
  • 既知の rootkit が使うファイルやディレクトリがないか
  • 不審な隠しファイル、バックドアがよく使うポートが開いていないか
  • SSH で root のログインを許していないか、などの設定

この記事では、rkhunter を入れて基準データを作り、スキャンを定期的に実行し、警告を確かめるまでの手順を説明します。内容は2026年10月時点のもので、Ubuntu 24.04 と Rocky Linux 9 で確認しています。

使う前に知っておきたいこと

  • 2026年10月時点の最新版は 1.4.6(2018年公開)で、rootkit の定義データもそれ以降ほとんど更新されていません。新しいマルウェアを見つける道具というより、「基準を取ったときからシステムのファイルが変わっていないか」を調べる道具として使うのが現実的です
  • 基準データ(ファイルのハッシュ値など)は、サーバーが汚染されていないときに作る必要があります。侵入された後に基準を作ると、改ざんされた状態が「正常」として記録されます
  • 攻撃者が root 権限を取った場合、そのサーバー上の rkhunter や結果のログ自体を書き換えられます。警告が出ないことは安全の証明にはなりません

ステップ1:rkhunterをインストールする

Ubuntu・Debian

sudo apt update
sudo apt install rkhunter

推奨パッケージとしてメール送信用のパッケージ(bsd-mailx など)も入るため、その依存でメールサーバーの設定画面が表示されることがあります。メールで結果を受け取らない場合は、sudo apt install --no-install-recommends rkhunter で入れられます。

AlmaLinux・Rocky Linux(RHEL系)

rkhunter は標準のリポジトリにはなく、EPEL にあります。

sudo dnf install epel-release
sudo dnf install rkhunter

ステップ2:設定を確かめる(Ubuntuでのエラーの直し方)

設定ファイルは /etc/rkhunter.conf です。まず設定の検査を実行します。

sudo rkhunter -C

何も表示されずに終われば問題ありません。Ubuntu 24.04 のパッケージでは、入れた直後に次のエラーが出ます。

Invalid WEB_CMD configuration option: Relative pathname: "/bin/false"

スキャン(--check)は動きますが、設定の検査と定義データの更新(--update)がこのエラーで失敗します。/etc/rkhunter.conf の WEB_CMD="/bin/false" の行を次のように書き換えます。

sudo sed -i 's|^WEB_CMD=.*|WEB_CMD=""|' /etc/rkhunter.conf
sudo rkhunter -C

定義データの更新について

Debian・Ubuntu のパッケージは、UPDATE_MIRRORS=0 と MIRRORS_MODE=1 によって、インターネットからの定義データの更新を止めた状態で配布されています。このままでは sudo rkhunter --update は「Update failed」になります。更新を使いたい場合は、/etc/rkhunter.conf を次のように変え、wget か curl を入れておきます。

UPDATE_MIRRORS=1
MIRRORS_MODE=0
WEB_CMD=""

前の節のとおり定義データは長く更新されていないため、更新を止めたままでも、後のファイルの変化を調べる使い方には影響しません。

--update の終了コードは、0 が「更新なし」、1 が「エラー」、2 が「何かを更新した」です。2 はエラーではありません。

パッケージ管理の情報を使う(任意)

PKGMGR を設定すると、パッケージに含まれるファイルは、パッケージ管理(dpkg・rpm)の情報と照らし合わせて確かめます。RHEL系のパッケージは最初から PKGMGR=RPM です。Ubuntu・Debian で使う場合は /etc/rkhunter.conf に次を書きます。

PKGMGR=DPKG

この設定を変えたら、次のステップの --propupd を実行し直します。

ステップ3:基準データを作る

システムのファイルのハッシュ値などを記録します。インストール直後の、汚染されていないことがわかっている状態で実行してください。

sudo rkhunter --propupd

apt や dnf でパッケージを更新すると、システムコマンドのファイルが正当に変わり、次のスキャンで警告になります。パッケージを更新した後は、更新内容に心当たりがあることを確かめてから、もう一度 --propupd を実行します。

Ubuntu・Debian では、/etc/default/rkhunter の APT_AUTOGEN="true" にすると、apt でパッケージを入れたり更新したりした後に、自動で基準データを作り直します。手間は減りますが、その時点で改ざんされていたファイルも基準に取り込まれる点は知っておいてください。

ステップ4:手動でスキャンする

sudo rkhunter --check --sk
オプション 意味
--check(-c) システムを検査する
--sk(--skip-keypress) 検査の区切りごとに Enter キーを待たない
--rwo(--report-warnings-only) 警告だけを表示する
--cronjob cron 用。--check・--sk・色なし表示をまとめて指定する

検査には数分かかります。警告が1件でもあると、終了コードは1になり、最後に次のように表示されます。

One or more warnings have been found while checking the system.
Please check the log file (/var/log/rkhunter.log)

詳しい内容はログに記録されます。ログの場所は grep ^LOGFILE /etc/rkhunter.conf で確かめられます(Ubuntu では /var/log/rkhunter.log)。

sudo grep -i -A3 warning /var/log/rkhunter.log

ステップ5:定期的にスキャンする

Ubuntu・Debian

パッケージに日次の cron(/etc/cron.daily/rkhunter)が入っていますが、初期状態では実行されません。/etc/default/rkhunter を次のように変えると有効になります。

CRON_DAILY_RUN="true"
REPORT_EMAIL="root"

警告があったときだけ、REPORT_EMAIL のあて先にメールで結果が送られます。メールを送るには、サーバーからメールを送れる状態(sendmail コマンドが使えるメールサーバー)が必要です。メールが届かない場合も、結果は /var/log/rkhunter.log に追記されます。

RHEL系

EPEL のパッケージには /etc/cron.daily/rkhunter が入っていて、毎日、定義データの更新とスキャンを実行します。結果のあて先は /etc/sysconfig/rkhunter の MAILTO で変えられます。

時刻を決めて自分で登録する場合

負荷の低い時間帯に実行したい場合は、/etc/cron.d/ にファイルを作ります(パッケージの日次 cron は止めておきます)。

echo '30 3 * * * root /usr/bin/rkhunter --cronjob --report-warnings-only' | sudo tee /etc/cron.d/rkhunter-local

--report-warnings-only を付けると、警告があるときだけ出力されるため、cron の結果メールも警告があるときだけ届きます。

ステップ6:警告が出たときの確かめ方

警告の多くは、正当な理由のある誤検知です。ただし、確かめずに除外すると本物の異常を見逃します。次の順で確かめます。

システムコマンドのハッシュ値が変わった

まず、そのファイルが正規のパッケージのものと一致しているかを調べます。

# Ubuntu・Debian: どのパッケージのファイルか調べ、パッケージの記録と照合する
dpkg -S /usr/bin/ファイル名
sudo dpkg --verify パッケージ名

# RHEL系
rpm -qf /usr/bin/ファイル名
sudo rpm -Vf /usr/bin/ファイル名

照合で何も表示されなければ、パッケージの記録と一致しています。直前にパッケージを更新していたなら、sudo rkhunter --propupd で基準を作り直します。一致しない場合や、どのパッケージにも属さない場合は、改ざんを疑います。

よく出る警告と扱い

警告の例 よくある理由 扱い
ファイルのプロパティ(ハッシュ値など)が変わった パッケージの更新 上の照合で確かめてから --propupd
スクリプトに置き換えられたコマンドがある 配布元がシェルスクリプトで提供しているコマンド パッケージのファイルと確かめたうえで SCRIPTWHITELIST に追加
隠しディレクトリ・隠しファイルがある ソフトが作る正規の隠しファイル 正体を確かめて ALLOWHIDDENDIR・ALLOWHIDDENFILE に追加
SSH で root のログインが許可されている sshd_config の PermitRootLogin root のログインを止めるのが基本。必要なら ALLOW_SSH_ROOT_USER を実際の設定値に合わせる
システムログのデーモンが動いていない コンテナなど、ログを別の仕組みで集めている環境 環境の仕様なら、対象の検査(この場合は system_configs_syslog)を DISABLE_TESTS に加えて外す

除外の設定は /etc/rkhunter.conf に書きます。例えば次のように書きます。

SCRIPTWHITELIST=/usr/bin/ファイル名
ALLOWHIDDENDIR=/etc/.java

検査の名前の一覧は rkhunter --list tests で表示できます。DISABLE_TESTS は既存の行に名前を足して書きます(Ubuntu ではすでにいくつかの検査が外されています)。設定を変えたら sudo rkhunter -C で検査し、もう一度スキャンして警告が消えたことを確かめます。

本当に侵入が疑われる場合

パッケージの記録と一致しないシステムコマンド、正体のわからない隠しファイル、見覚えのないポートが見つかった場合は、そのサーバーのツールの結果を信用せず、サーバーをネットワークから切り離すなどの初動対応に移ります。手順は サーバーがハッキングされた時の初動対応手順 で説明しています。

まとめ

  • rkhunter は、基準を取ったときからシステムのファイルが変わっていないかを調べる道具として使う。基準データは汚染されていない状態で --propupd で作る
  • Ubuntu 24.04 では WEB_CMD="/bin/false" のままだとエラーになる。WEB_CMD="" に直してから rkhunter -C で確かめる
  • スキャンは rkhunter --check --sk、定期実行は Ubuntu なら /etc/default/rkhunter の CRON_DAILY_RUN="true"
  • パッケージを更新したら、内容を確かめて --propupd を実行し直す
  • 警告は dpkg --verify や rpm -Vf でパッケージの記録と照合してから、除外するか調べるかを決める

関連記事:

お気軽にご相談ください

お見積りへ お問い合わせへ
▲