RKHunter (Rootkit Hunter) の徹底解説:導入から使い方まで🛡️

サーバーのセキュリティを強化し、潜む脅威を検出する

サーバーを運用する上で、セキュリティ対策は非常に重要です。中でも「ルートキット」と呼ばれる悪意のあるソフトウェアは、システムに深く潜伏し、不正アクセスのためのバックドアを作成したり、重要な情報を盗み出したりする可能性があります。これらのルートキットは、自身の存在を隠蔽する能力を持っているため、通常の手段では発見が困難な場合があります。

そこで役立つのが RKHunter (Rootkit Hunter) です。RKHunterは、Linuxやその他のUnix系システム向けに開発された、ルートキット、バックドア、ローカルエクスプロイト(システムの脆弱性を利用した攻撃)を検出するための強力なオープンソースツールです。システムファイルを既知の安全なファイルのハッシュ値(SHA-1など)と比較したり、ルートキットが使用する可能性のあるデフォルトディレクトリ、不審な権限設定、隠しファイル、カーネルモジュール内の怪しい文字列などをスキャンします。

このブログ記事では、RKHunterの基本的な概念から、インストール、設定、使い方、そして結果の解釈まで、包括的に解説していきます。サーバーのセキュリティレベルを向上させたいと考えている管理者にとって、RKHunterは心強い味方となるでしょう。💪

RKHunterとは? 🤔

RKHunterは、その名の通り「ルートキットハンター」として機能するセキュリティツールです。POSIX互換システム(Linux、FreeBSDなど、多くのUnix系OSが含まれます)で動作するように設計されており、Bashスクリプトで書かれているため、移植性が高いのが特徴です。

主な機能は以下の通りです:

  • ルートキットの検出: 既知のルートキットが使用するファイルやディレクトリの存在をチェックします。
  • バックドアの検出: 不正アクセスに使われる可能性のあるバックドアがないかスキャンします。
  • ローカルエクスプロイトの検出: システム内の脆弱性を悪用する可能性のあるローカルエクスプロイトを検出します。
  • ファイル整合性のチェック: システムの重要なファイルのハッシュ値を、既知の安全な値(オンラインデータベースやローカルデータベース)と比較し、改ざんされていないか確認します。MD5やSHA-1などのハッシュアルゴリズムが利用されます。
  • ファイル権限のチェック: 不正な権限が設定されている実行ファイルなどを検出します。
  • 隠しファイルのチェック: 通常は見えない隠しファイルやディレクトリをスキャンします。
  • カーネルモジュールのチェック: 不審な文字列が含まれるカーネルモジュール(LKMやKLDモジュール)を検出します。
  • ネットワークインターフェースのチェック: 不審な待ち受けポートやプロミスキャスモード(ネットワーク上の全パケットを傍受するモード)になっているインターフェースを警告します。

RKHunterは、システムが侵害されている可能性を示す様々な兆候を検知しますが、検出ツールであり、駆除ツールではない点に注意が必要です。もしRKHunterが脅威を検出した場合、その警告内容を慎重に調査し、必要に応じて手動での修復やシステムの復旧を行う必要があります。また、誤検出(False Positive)の可能性もあるため、警告が出たからといって必ずしも不正アクセスがあったとは限りません。システムの正常な変更(ソフトウェアのアップデートなど)が原因で警告が出ることもあります。

RKHunterのインストール 💻

RKHunterのインストール方法は、使用しているLinuxディストリビューションによって若干異なります。ここでは、代表的なDebian/Ubuntu系とRHEL/CentOS系でのインストール方法を紹介します。多くの場合、標準リポジトリやEPELリポジトリから簡単にインストールできます。

Debian / Ubuntu

DebianやUbuntu(20.04, 22.04など)では、aptパッケージマネージャを使用してインストールできます。

# システムのパッケージリストを更新
sudo apt update

# RKHunterをインストール
sudo apt install rkhunter

インストール中に、メール設定に関する質問が表示されることがあります。これは、RKHunterがスキャン結果をメールで通知するための設定です。通常は「設定なし」や「ローカルのみ」を選択し、後で必要に応じて設定ファイルを編集します。

RHEL / CentOS / Rocky Linux

RHEL系のディストリビューション(CentOS 7, CentOS 8, Rocky Linux 8など)では、標準リポジトリに含まれていない場合があるため、EPEL (Extra Packages for Enterprise Linux) リポジトリを先に追加する必要があります。

# EPELリポジトリをインストール (未導入の場合)
sudo yum install epel-release
# または dnf を使用する場合
# sudo dnf install epel-release

# RKHunterをインストール (yumまたはdnfを使用)
sudo yum --enablerepo=epel install rkhunter
# または dnf を使用する場合
# sudo dnf --enablerepo=epel install rkhunter

CentOS 7 のサポートは2024年6月末に終了しましたが、手順自体は同様です。

ソースからのインストール

ディストリビューションのリポジトリにない場合や、最新版を直接利用したい場合は、公式サイト (The Rootkit Hunter project) からソースコードをダウンロードしてインストールすることも可能です。ただし、通常はパッケージマネージャを利用する方が簡単で、依存関係も自動的に解決されます。

# 例: 最新版 (1.4.6 - 2018年2月リリース) のダウンロードとインストール
cd /usr/local/src
wget https://sourceforge.net/projects/rkhunter/files/rkhunter/1.4.6/rkhunter-1.4.6.tar.gz
tar -zxvf rkhunter-1.4.6.tar.gz
cd rkhunter-1.4.6
./installer.sh --layout default --install
cd ..
rm -Rf rkhunter-1.4.6*

注意: 上記のソースからのインストール手順は一例です。必ず公式サイトのドキュメントやREADMEを確認してください。また、バージョン番号は変更される可能性があります。

バージョンの確認

インストール後、以下のコマンドでバージョンを確認できます。

rkhunter --version

本稿執筆時点(2025年3月)での安定版は1.4.6(2018年2月20日リリース)のようですが、ディストリビューションのリポジトリによっては異なるバージョンが提供される場合があります。

RKHunterの初期設定とデータベース更新 ⚙️

RKHunterを効果的に使用するためには、いくつかの初期設定と、重要なデータベースの更新が必要です。

1. 設定ファイルの確認と編集 (/etc/rkhunter.conf)

RKHunterの主要な設定は /etc/rkhunter.conf ファイルで行います。デフォルト設定でも動作しますが、環境に合わせていくつか調整することが推奨されます。

sudo nano /etc/rkhunter.conf

以下は、よく変更される可能性のある設定項目の一部です。

設定項目 説明 推奨設定例 (環境による)
UPDATE_MIRRORS=0 ミラーサイトから定義ファイルを取得するかどうか (1=有効, 0=無効)。新しい定義ファイルを確実に取得するために有効にするのが一般的です。 UPDATE_MIRRORS=1
MIRRORS_MODE=1 ミラーの選択方法 (0=ローカルのmirrors.datファイル内の全ミラーを使用, 1=いずれか一つのミラーを使用, 2=ステータスが良いミラーのみ使用)。通常は0で問題ありません。 MIRRORS_MODE=0
WEB_CMD="" 定義ファイルのダウンロードに使用するコマンド。Debian/Ubuntuのパッケージではデフォルトで/bin/falseになっている場合があり、更新エラーの原因になります。wgetcurlがインストールされていれば、空白にするか、適切なコマンドパスを指定します。 WEB_CMD="" (空白) または WEB_CMD="/usr/bin/wget" など
MAIL-ON-WARNING=me@mydomain root@mydomain 警告が検出された場合にメールを送信する宛先。必要に応じて設定します。メール送信には別途メールサーバーの設定が必要です。 MAIL-ON-WARNING="your_email@example.com"
ALLOW_SSH_ROOT_USER=unset SSH経由でのrootログインを許可しているかどうか。デフォルトは未設定 (unset) で、毎回警告が出ます。セキュリティ上、rootログインは無効にすることが推奨されます。無効にしている場合はnoを設定します。 ALLOW_SSH_ROOT_USER=no (rootログイン無効の場合)
SCRIPTWHITELIST="/usr/bin/egrep"
SCRIPTWHITELIST="/usr/bin/fgrep"
SCRIPTWHITELIST="/usr/bin/ldd"
システムによっては、特定の実行ファイルが実際にはスクリプトであるために誤検出されることがあります。これらのファイルをホワイトリストに登録することで警告を抑制できます。Arch Linuxなどで報告されています。 必要に応じて追記
ALLOWDEVFILE=/dev/shm/ora_orcl_*
ALLOWPROMISCIF=eth0
特定のアプリケーション(例: Oracle, Zabbix, Softether VPN)が使用する共有メモリファイルや、ネットワークインターフェースのプロミスキャスモードが誤検出される場合があります。これらを許可リストに追加することで警告を抑制できます。ファイルパスやインターフェース名は環境に合わせて変更してください。 必要に応じて追記
PKGMGR=NONE パッケージマネージャー(RPM, DPKG, BSDなど)を指定します。これにより、パッケージマネージャーのデータベースと比較してファイルの変更を検証できます。適切な値を設定することが推奨されます(例: DPKG for Debian/Ubuntu, RPM for RHEL/CentOS)。 PKGMGR=DPKG または PKGMGR=RPM など
RTKT_FILE_WHITELIST=/usr/bin/wp 特定のファイルパスがルートキットのファイルと誤検出される場合(例:wp-cliの`/usr/bin/wp`がRH-Sharpe’s Rootkitと誤検出される事例あり)に、そのファイルをホワイトリストに登録します。 必要に応じて追記

📝 設定ファイルを変更した後は、設定が正しいか確認するために sudo rkhunter --config-check を実行すると良いでしょう。

2. 定義データベースの更新 (rkhunter –update)

RKHunterは、既知のルートキット、バックドア、疑わしいファイルなどの情報を定義データベースとして持っています。このデータベースを最新の状態に保つことが非常に重要です。

sudo rkhunter --update

このコマンドは、設定ファイルで指定されたミラーサイト(またはデフォルトのサイト)に接続し、最新の定義ファイル(programs_bad.dat, backdoorports.dat, suspscan.dat など)をダウンロードします。インターネット接続が必要です。

⚠️ WEB_CMDの設定が正しくないと、ここでエラーが発生することがあります。

3. ファイルプロパティデータベースの生成・更新 (rkhunter –propupd)

RKHunterの重要な機能の一つに、システムファイルのプロパティ(パーミッション、ハッシュ値、サイズ、更新日時など)を記録し、スキャン時に変更がないか比較する機能があります。この比較の基準となるデータベースを生成または更新するのが --propupd コマンドです。

sudo rkhunter --propupd

非常に重要: このコマンドは、システムがクリーンであると確信できる状態で最初に実行する必要があります。理想的には、OSをクリーンインストールした直後、ネットワークに接続する前に実行します。これにより、初期の安全な状態がベースラインとして記録されます(デフォルトでは /var/lib/rkhunter/db/rkhunter.dat に保存されます)。

その後、システムに正当な変更(ソフトウェアのインストールやアップデート、設定ファイルの変更など)を加えた場合は、再度 sudo rkhunter --propupd を実行して、データベースを最新の状態に更新する必要があります。これを怠ると、正当な変更が「ファイルの変更」として警告される原因(誤検出)となります。

--update--propupd は異なる目的を持つコマンドです。

  • --update: RKHunterチームが提供する既知の脅威定義を更新します(ネットワークアクセスが必要)。
  • --propupd: ローカルシステムの状態を記録・更新します(ネットワークアクセスは不要)。

最初に --propupd を実行し、ベースラインを作成してから --update を実行するのが推奨される順序です。

自動更新の設定 (オプション)

定義データベースの更新 (--update) とファイルプロパティの更新 (--propupd) を定期的に自動実行することも可能です。

Debian/Ubuntuでは、/etc/default/rkhunter ファイルで設定できます。

sudo nano /etc/default/rkhunter

以下の行を変更または追加します。

CRON_DAILY_RUN="true"     # 日次スキャンを有効にする
CRON_DB_UPDATE="true"     # 日次で --update を実行する
APT_AUTOGEN="true"        # aptでの更新後に自動で --propupd を実行する

APT_AUTOGEN="true" を設定すると、apt upgrade などでシステムが更新された後に自動で rkhunter --propupd が実行されるようになり、誤検出を減らすのに役立ちます。

RHEL/CentOS系では、パッケージによっては /etc/cron.daily/rkhunter スクリプトが自動で配置され、日次で --update--check が実行されるようになっている場合があります。必要に応じてこのスクリプトを編集したり、cronジョブを手動で設定します。

# cronジョブを手動で設定する例 (毎日午前4時に実行)
sudo crontab -e
# 以下の行を追加
0 4 * * * /usr/bin/rkhunter --cronjob --update --quiet

--cronjob オプションはcronからの実行を示し、--quiet オプションは警告がない場合は出力を抑制します。メール通知を設定している場合は、警告があった時のみメールが送信されます。

RKHunterの基本的な使い方:システムスキャン 🔍

初期設定とデータベースの準備が完了したら、いよいよシステムスキャンを実行できます。

sudo rkhunter --check

このコマンドを実行すると、RKHunterは設定ファイルとデータベースに基づいて、システム全体を包括的にチェックします。チェック項目は多岐にわたります。

  • システムコマンドのチェック(改ざんされていないか)
  • 既知のルートキットファイルのチェック
  • 不審なファイルやディレクトリのチェック
  • ネットワーク関連のチェック(ポート、インターフェース)
  • システム設定ファイルのチェック
  • ファイルシステムのチェック(ファイルプロパティの比較)
  • アプリケーションバージョンのチェック(古いバージョンに脆弱性がないか)

スキャン中、各チェック項目が完了するごとに [ OK ][ Warning ][ Found ] などのステータスが表示されます。また、いくつかのステップでは、確認のためにEnterキーの入力を求められることがあります。

便利なオプション

  • --sk (または --skip-keypress): スキャン中のEnterキー入力をスキップします。自動実行スクリプトや、単に手間を省きたい場合に便利です。
    sudo rkhunter --check --sk
  • --rwo (または --report-warnings-only): 警告 (Warning) があった項目のみを表示します。正常な項目 (OK) は表示されなくなるため、問題箇所を素早く特定したい場合に役立ちます。
    sudo rkhunter --check --sk --rwo
  • -l [ファイルパス] (または --logfile [ファイルパス]): ログの出力先を指定します。デフォルトは /var/log/rkhunter.log です。
    sudo rkhunter --check --sk -l /path/to/custom.log

スキャン結果の確認

スキャンが完了すると、最後にサマリーが表示されます。

System checks summary
=====================
File properties checks...
    Files checked: 131
    Suspect files: 0

Rootkit checks...
    Rootkits checked : 486
    Possible rootkits: 0

Applications checks...
    All checks skipped

The system checks took: 1 minute and 33 seconds

All results have been written to the log file: /var/log/rkhunter/rkhunter.log

No warnings were found while checking the system.

上記のように “No warnings were found” と表示されれば、特に問題は見つからなかったことを意味します 👍。

もし警告が見つかった場合は、以下のようなメッセージが表示されます。

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

この場合は、ログファイル (/var/log/rkhunter.log) を詳細に確認する必要があります。ログファイルには、どのチェックでどのような警告が出たのかが記録されています。

sudo less /var/log/rkhunter.log

ログファイル内で “Warning:” というキーワードで検索すると、問題箇所を見つけやすくなります。

警告 (Warning) への対処と誤検出 ✨

RKHunterが警告を出した場合、慌てずにその内容を確認することが重要です。警告が必ずしも実際の脅威を示すとは限りません。特に、システムのアップデートや設定変更の後には、誤検出 (False Positive) が発生することがあります。

よくある警告の種類と対処法

警告の種類 内容 考えられる原因と対処法
File properties checks (ファイルプロパティの警告) ファイルのハッシュ値、サイズ、パーミッション、変更日時などが、--propupd で記録されたベースラインと異なっている。
  • 正当な変更: ソフトウェアのアップデート、設定ファイルの編集など、意図的に行った変更。
    → 変更内容に問題がないことを確認後、sudo rkhunter --propupd を実行してベースラインを更新する。
  • ⚠️ 不正な改ざん: マルウェアや侵入者によるファイルの改ざん。
    → 詳細な調査が必要です。ファイルの差分を確認したり、バックアップから復元したりするなどの対応を検討します。
Hidden file/directory found (隠しファイル・ディレクトリの検出) 通常表示されないドット(.)で始まるファイルやディレクトリが検出された。
  • 正常なファイル: /dev/.udev//etc/.pwd.lock など、システムが正常に利用する隠しファイル・ディレクトリ。
    → これらは多くの場合、問題ありません。頻繁に警告が出る場合は、設定ファイル (rkhunter.conf) の EXISTWHITELISTALLOWHIDDENFILE / ALLOWHIDDENDIR でホワイトリストに追加することを検討します。
  • ⚠️ 不審なファイル: 見覚えのない隠しファイルや、ルートキットが作成した可能性のあるファイル。
    → ファイルの内容や目的を調査します。
Promiscuous interface found (プロミスキャスモードの検出) ネットワークインターフェースがプロミスキャスモードになっている。
  • 意図的な設定: 仮想化環境 (ブリッジ接続など)、ネットワーク監視ツール (tcpdumpなど)、特定のVPNソフトウェア (Softetherなど) が原因の場合があります。
    → 意図した動作であれば、設定ファイル (rkhunter.conf) の ALLOWPROMISCIF で該当インターフェースをホワイトリストに追加します。 (例: ALLOWPROMISCIF=eth0)
  • ⚠️ 不正な設定: 盗聴目的などで不正に設定された可能性。
    → なぜプロミスキャスモードになっているか調査が必要です。
Checking for prerequisites (前提条件のチェック) での警告 RKHunterが利用するシステムコマンド (ls, grep など) のプロパティが変更されている。
  • スクリプトへの置換: Arch Linuxなどで、一部のコアユーティリティがスクリプトで実装されている場合に発生します。
    → 設定ファイル (rkhunter.conf) の SCRIPTWHITELIST で該当ファイルをホワイトリストに追加します。 (例: SCRIPTWHITELIST=/usr/bin/egrep)
  • ⚠️ コマンドの改ざん: ルートキットがシステムコマンドを改ざんした可能性。
    → 極めて深刻な状況の可能性があります。詳細な調査とシステムの復旧が必要です。
Rootkit checks (特定のルートキットの検出) 既知のルートキットに関連するファイルや設定が見つかった。 (例: RH-Sharpe’s Rootkit)
  • 誤検出: たまたま同じファイルパスを使用している別のソフトウェアが原因の場合があります。(例: /usr/bin/wp がwp-cliのファイルだが、RH-Sharpe’s Rootkitのチェックに引っかかる事例が過去にあった)。
    → 警告されたファイルが正当なものであることを確認し、設定ファイル (rkhunter.conf) の RTKT_FILE_WHITELIST でホワイトリストに追加します。 (例: RTKT_FILE_WHITELIST=/usr/bin/wp)
  • ⚠️ 実際のルートキット: ルートキットが検出された可能性。
    → 非常に深刻です。直ちにネットワークから隔離し、専門家への相談やシステムの再構築を検討してください。
Package manager verification has failed (パッケージマネージャの検証失敗) パッケージマネージャ(RPMやDPKG)のデータベースに記録されている情報と、実際のファイルのプロパティが異なっている。
  • 設定ファイルの変更: /etc/rkhunter.conf 自体など、意図的に編集した設定ファイルが警告されることがあります。
    → 意図した変更であれば、設定ファイル (rkhunter.conf) の PKGMGR_NO_VRFY で検証対象から除外するか、USER_FILEPROP_FILES_DIRS で監視しつつ PKGMGR_NO_VRFY を併用するなどの方法があります。(例: PKGMGR_NO_VRFY=/etc/rkhunter.conf) または、 rkhunter --propupd でベースラインを更新します。
  • ⚠️ 不正な改ざん: パッケージに含まれるファイルが改ざんされた可能性。
    → 詳細な調査が必要です。

誤検出への対処の基本方針

  1. 警告内容の確認: ログファイル (/var/log/rkhunter.log) を見て、どのファイルや設定が警告の原因になっているかを特定します。
  2. 原因の調査: その変更やファイルが、システムアップデート、設定変更、特定のソフトウェアの正常な動作によるものか、それとも不審なものかを確認します。
  3. 正当な変更の場合:
    • ファイルプロパティの変更であれば、sudo rkhunter --propupd を実行してベースラインを更新します。
    • 特定のファイルや設定が常に警告される場合は、/etc/rkhunter.conf を編集し、適切なホワイトリスト設定 (SCRIPTWHITELIST, ALLOWDEVFILE, ALLOWPROMISCIF, EXISTWHITELIST, RTKT_FILE_WHITELIST, PKGMGR_NO_VRFY など) を追加します。設定変更後は sudo rkhunter --propupd を実行して設定を反映させます。
  4. 不審な場合: 詳細な調査を行い、必要に応じてシステムの隔離、復旧、専門家への相談などの対応を取ります。

⚠️ 警告を安易に無視したり、むやみにホワイトリストに追加したりするのは危険です。必ず原因を特定し、納得した上で対処するようにしましょう。

RKHunterの利用は、一度設定したら終わりではなく、システムの変更に合わせて継続的にメンテナンスしていくことが重要です。「RKHunterの利用は常に進行中の作業である」という認識を持つと良いでしょう。🧐

まとめ

RKHunterは、Linux/Unixシステムにおけるルートキットやその他の脅威を検出するための強力で信頼性の高いツールです。適切に設定し、定期的にスキャンを実行することで、サーバーのセキュリティ体制を大幅に強化できます。

重要なポイントを再確認しましょう:

  • ✅ RKHunterは検出ツールであり、駆除ツールではありません。
  • ✅ インストール後、--update で定義データベースを最新にし、--propupd で初期のファイルプロパティベースラインを作成します。
  • ✅ システムの正当な変更(アップデート等)の後には、再度 --propupd を実行してベースラインを更新することが重要です。
  • --check コマンドでシステムスキャンを実行し、結果は /var/log/rkhunter.log で確認します。
  • ✅ 警告が出た場合は、その内容を慎重に調査し、誤検出か実際の脅威かを見極めます。
  • ✅ 誤検出の場合は、設定ファイル (/etc/rkhunter.conf) のホワイトリスト機能を利用して警告を抑制できます。
  • ✅ cronジョブを設定して、スキャンとデータベース更新を自動化することが推奨されます。

RKHunterは万能なセキュリティソリューションではありませんが、侵入検知システム (IDS) の一部として、他のセキュリティ対策(ファイアウォール、アンチウイルス、脆弱性管理、セキュアな設定など)と組み合わせることで、より堅牢なシステムを構築するのに役立ちます。定期的なメンテナンスを忘れずに行い、サーバーを安全に保ちましょう!🛡️🔐