rkhunterコマンドでLinuxのルートキットを検出する方法|インストールから定期スキャン・アラート設定まで

運営:リナックスマスター.JP(代表 宮崎智広)
HOME > Linux技術 リナックスマスター.JP(Linuxマスター.JP) > Linuxtips > セキュリティ > rkhunterコマンドでLinuxのルートキットを検出する方法|インストールから定期スキャン・アラート設定まで
「サーバーに不審なプロセスが常駐していないか確認したい。侵入された時に気づけるツールはないか。」
Linuxサーバーのセキュリティ対策において、ファイアウォールの設定やSSH公開鍵認証の導入は多くの管理者が取り組む。しかし、すでにシステムに侵入されルートキットが埋め込まれた後の状態を検出する仕組みを持っている管理者は少ない。

この記事では、Linuxサーバーのルートキット検出ツール「rkhunter(Rootkit Hunter)」の使い方を解説する。RHEL 9系(Rocky Linux 9含む)とUbuntu 24.04 LTSを想定環境として、インストールから初期設定・スキャン実行・定期自動化・メールアラートの設定まで説明する。

この記事のポイント

・rkhunterはバイナリ改ざん・ルートキット・不審ファイルをまとめてスキャンできる
・最初に--propupdで正常状態を登録してから--checkを実行するのが基本手順
・WARNINGの多くはFalse Positiveで、設定ファイルのホワイトリストで抑制できる
・cronとメール設定を組み合わせれば毎日のスキャン結果を自動通知できる


「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

ルートキットがLinuxサーバーにもたらす被害

ルートキット(rootkit)とは、攻撃者がシステムに侵入した後、その痕跡を隠しながら継続的なアクセス手段を維持するためのツール群を指す。名前の由来は「root権限(root)で設置するツールキット(kit)」だ。

一般的なルートキットは次のような動作をする。

・プロセスの隠蔽:psコマンドやtopコマンドの出力を書き換え、マルウェアが動作していても表示しない
・ファイルの隠蔽:lsやfindの出力を改ざんし、バックドアファイルを不可視にする
・ネットワーク接続の隠蔽:外部への不審な通信をssやnetstatの出力から消す

侵入経路はSSHのブルートフォース攻撃、Webアプリケーションの脆弱性悪用、古いソフトウェアの既知脆弱性など多岐にわたる。24時間外部に公開されているLinuxサーバーは常にターゲットになり得る。

rkhunterはこうした攻撃の痕跡を多角的に検出する。具体的には次の項目をチェックする。

・バイナリのハッシュ検証:正常時に登録したハッシュ値と現状を比較し、改ざんを検出する
・ルートキットシグネチャ照合:既知の約500種のルートキットのパターンと照合する
・不審なSUID/SGIDファイルの確認:本来必要のない特権ファイルがないかをチェックする
・隠しファイル・隠しディレクトリの検出:.(ドット)始まりの不審なファイルを発見する
・ネットワークインターフェイスの確認:プロミスキャスモードが有効になっていないかを確認する

rkhunterのインストールと初期セットアップ

1. インストール(RHEL系・Ubuntu系)

RHEL 9/Rocky Linux 9の場合は、まずEPELリポジトリを有効にしてからrkhunterをインストールする。

# dnf install epel-release -y # dnf install rkhunter -y

Ubuntu 24.04 LTSの場合は標準リポジトリからインストールできる。

# apt-get update # apt-get install rkhunter -y

インストール後にバージョンを確認する。

# rkhunter --version

出力例(環境により異なります):

Rootkit Hunter version 1.4.6

2. データベースの更新(--update)と正常状態の登録(--propupd)

インストール直後に必ず実行する2つのコマンドがある。

まず既知のルートキットシグネチャをオンラインから最新化する。

# rkhunter --update

次に、現在のシステムコマンドバイナリのハッシュ値を「正常な状態」として登録する。これが以後のスキャンで変化を比較する基準値になる。

# rkhunter --propupd

【重要】--propupdは必ず信頼できる状態のサーバーで実行する。すでに侵害されている可能性があるサーバーで実行すると、改ざん済みのバイナリが正常として登録されてしまい、以後のスキャンで検出できなくなる。また、dnf updateやapt upgradeでシステムのバイナリが更新された場合は、更新後に必ず再度--propupdを実行する運用が必要だ。

rkhunter --checkでスキャンを実行する

1. スキャンの実行

基本的なスキャンは次のコマンドで実行する。

# rkhunter --check

実行中に「Press <RETURN> to continue」と複数回入力を求められる。cronや自動化スクリプトから実行する場合は次のオプションを付けて非対話型にする。

# rkhunter --check --sk --rwo

・--sk(--skip-keypress):Enter入力を自動スキップ
・--rwo(--report-warnings-only):WARNINGのある行だけを画面に表示

2. スキャン結果の読み方(WARNING・Found・OK)

スキャン結果は3種類のステータスで表示される。

・[ OK ]:問題なし
・[ Warning ]:確認が必要な項目。必ずしも侵害を意味しない(False Positiveも多い)
・[ Found ]:既知のルートキットシグネチャに一致。緊急の対応が必要

スキャン終了後に次のようなサマリが表示される。

System checks summary ===================== File properties checks... Files checked: 141 Suspect files: 2 Rootkit checks... Rootkits checked : 492 Possible rootkits: 0 Applications checks... Applications checked: 5 Suspect applications: 0 The system checks took: 1 minute and 23 seconds All results have been written to the log file: /var/log/rkhunter/rkhunter.log One or more warnings have been found while checking the system. Please check the log file (/var/log/rkhunter/rkhunter.log)

「Possible rootkits: 0」であれば既知のルートキットシグネチャには一致していない。「Suspect files: 2」はバイナリのプロパティが登録値と異なる状態で、通常はシステム更新後の--propupd漏れが原因だ。詳細はログで確認する。

# grep Warning /var/log/rkhunter/rkhunter.log

rkhunterはスキャンの中でリッスンしているネットワークポートも確認する。予期しないポートが開いていないかはLinux ポート確認の全コマンドでも詳しく確認できる。

3. False PositiveをWHITELISTで除外する

rkhunterは保守的な設計のため、正常なシステム構成でも多くのWARNINGが出ることがある。運用上は「本物の脅威」と「False Positive(誤検知)」を適切に切り分けることが重要だ。

ケース1:パッケージ更新後にバイナリのハッシュが変わった
最も多いパターン。dnf updateやapt upgradeの後に--propupdの再実行を忘れていると、更新されたバイナリが全てWARNINGになる。

# rkhunter --propupd

ケース2:特定のスクリプトが警告される
useradd、adduser等のシステムスクリプトがWARNINGになることがある。/etc/rkhunter.confのSCRIPTWHITELISTに追加する。

# /etc/rkhunter.conf の該当行を編集する SCRIPTWHITELIST=/usr/sbin/adduser SCRIPTWHITELIST=/usr/sbin/useradd

ケース3:隠しディレクトリが警告される
.javaなどのアプリケーションが作成する正規の隠しディレクトリが検出されることがある。ALLOWHIDDENDIRで許可する。

ALLOWHIDDENDIR=/etc/.java

rkhunterの主要設定(/etc/rkhunter.conf)

設定ファイルは/etc/rkhunter.confにある。主要なパラメータを整理する。
パラメータ 設定内容
MAIL-ON-WARNING WARNINGが出た時のメール送信先アドレス
MAIL_CMD メール送信コマンドのパス(mailコマンド等)
SCRIPTWHITELIST スクリプトのWARNINGを抑制するホワイトリスト
ALLOWHIDDENDIR 隠しディレクトリのWARNINGを抑制する
ALLOWHIDDENFILE 隠しファイルのWARNINGを抑制する
PKGMGR パッケージマネージャ(RPMまたはDPKG)の指定
ALLOW_SSH_PROT_V1 SSH Protocol 1を許可するかの設定(通常は0)
PKGMGRを設定すると、rkhunterがrpmまたはdpkgのパッケージ情報を使ってバイナリの整合性を照合できる。RHEL系ではRPM、Ubuntu系ではDPKGを指定する。rpm コマンドの使い方で解説している`rpm -V`と同様の原理で、インストール済みパッケージのファイル整合性を検証する仕組みだ。

# /etc/rkhunter.conf の設定例 PKGMGR=RPM # RHEL/Rocky Linux の場合 # PKGMGR=DPKG # Ubuntu の場合

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

毎日自動でスキャンを行い、WARNINGが出た時だけ通知するように設定する。/etc/cron.dにファイルを作成するのがシンプルだ。

# /etc/cron.d/rkhunter として作成する 0 3 * * * root /usr/bin/rkhunter --cronjob --update --quiet

・--cronjob:--sk(キー入力スキップ)と--rwo(WARNINGのみ出力)を一括で有効にするショートカット
・--update:スキャン前にシグネチャデータベースを自動更新
・--quiet:標準出力を抑制(ログには書き出す)

注意:--cronjobを使う際のメール通知はrkhunter.confのMAIL-ON-WARNING設定に依存する。cronジョブ自体がメールを送る設定と重複しないよう確認しておく。

メールアラートの設定

/etc/rkhunter.confでMAIL-ON-WARNINGとMAIL_CMDを設定する。

# 宛先メールアドレスを設定する MAIL-ON-WARNING=admin@example.com # メール送信コマンドを指定する MAIL_CMD=mail -s "[rkhunter] Warning found on ${HOST_NAME}"

PostfixなどのMTAが稼働していることが前提だ。mailコマンドが使えない環境では、MAIL_CMDにsendmailのフルパスを指定するか、スクリプトを経由する方法もある。

メール設定が正しく動作しているかどうかは、--rnもオプションとして付けて実行することで確認できる(--rnはreportのみで実際のスキャンは行わない)。

トラブルシュート|よくあるWarningと対処法

Warning: The following suspicious files and directories were found
/tmpや/var/tmpに不審なファイルが作成されている場合に出る。まず/var/log/rkhunter/rkhunter.logで対象ファイルを特定し、正規の運用で作成されたものか調べる。原因不明のファイルであれば障害対応の起点として詳細な調査が必要だ。

Warning: /usr/bin/xxx SHA-1 hash changed
パッケージ更新後に最も多く出るWARNING。`dnf update`や`apt upgrade`の後に--propupdの再実行を忘れていることが原因の大半を占める。パッケージ更新後の--propupd実行を運用手順として明文化しておくことが鉄則だ。

# パッケージ更新後の実行セット # dnf update -y # rkhunter --propupd

Warning: The SSH and sshd configuration file does not exist
SSHが意図的に無効化されているサーバーで出るWARNING。sshd_configが存在しない環境では/etc/rkhunter.confで次の設定を入れて抑制する。

WARN_ON_OS_CHANGE=0

Warning: Hidden directory found: /dev/.udev
Linuxの正規のデバイス管理ディレクトリが隠しディレクトリとして検出されることがある。ALLOWHIDDENDIRに追加して除外する。

ALLOWHIDDENDIR=/dev/.udev ALLOWHIDDENDIR=/dev/.static

ログに Warning が大量に出て読みにくい場合
まずFalse Positiveを全てホワイトリストに登録し、既知の正常パターンを除外した上で「残ったWARNING」だけを精査する体制を作ることが実務上の正しいアプローチだ。

本記事のまとめ

やりたいこと コマンド
インストール(RHEL系) dnf install epel-release rkhunter -y
インストール(Ubuntu系) apt-get install rkhunter -y
シグネチャDBの更新 rkhunter --update
正常状態のバイナリを登録 rkhunter --propupd
手動スキャン(非対話型) rkhunter --check --sk --rwo
cronからの自動スキャン rkhunter --cronjob --update --quiet
スキャンログの確認 grep Warning /var/log/rkhunter/rkhunter.log
rkhunterは単体で侵害を100%防ぐものではないが、日次スキャンと変化検知の仕組みを持つことで「気づかないままルートキットが長期間動き続ける」リスクを大幅に下げられる。初期設定段階でFalse Positiveを丁寧に除外しておくことが、誤検知に慣れて本物の異常を見逃さないための鉄則だ。

Linuxサーバーの運用ではrkhunterのような個別ツールの使い方だけでなく、多層防御の設計思想を体系的に身につけることが重要だ。Linuxサーバー構築のハンズオンセミナーでは、こうしたセキュリティ運用の考え方も含めて実践的に学べる。
現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、2日間のハンズオンセミナーを開催しています。RHEL 10対応のカリキュラムで、サーバーのセキュリティ設定から運用・障害対応まで実践スキルを習得できます。
>> Linuxサーバー構築セミナーの詳細はこちら

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は30秒、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録

運営

リナックスマスター.JP(代表 宮崎智広)

株式会社イーネットマーキュリーが運営するLinux教育サイトです。代表の宮崎智広は現役のLinuxサーバー管理者として20年以上の実務経験を持ち、累計3,100名以上のエンジニアを指導してきました。実践型のLinuxセミナーや無料マニュアルの配布を通じてLinux人材の育成に取り組んでいます。