RKHunterによるrootkit検知

スポンサーリンク
RockyLinux
この記事は約16分で読めます。
ランキングに参加しています。応援よろしくお願いします。
ブログランキング・にほんブログ村へ 人気ブログランキングへ FC2ブログランキングへ
スポンサーリンク
この記事が気に入ったら
フォローしよう
最新情報をお届けします。

前回の「セキュリティ強化編」として「Tripwireによるファイル改竄検知」に引き続き、Rocky Linux 9 サーバ構築手順次のステップは、「RKHunterによるrootkit検知」について設定を行います。

当ブログサイトを運用しているサーバは、「KAGOYA JAPAN」で提供されている「KAGOYA CLOUD VPS」を利用しています。

RKHunter(Rootkit Hunter)は、Linuxシステムにおいてrootkitやマルウェア、バックドア、脆弱性を検知するためのセキュリティツールです。
システムファイルの改ざん検出、既知のrootkit検知、ネットワークポートの監視などを行い、システム管理者に警告を通知します。

EPELリポジトリが有効になっているか確認します。

# dnf repolist | grep epel

有効になっていない場合は、以下のコマンドでインストールします。

dnf install -y epel-release

EPELリポジトリからRKHunterをインストールします。

# dnf install -y rkhunter

RKHunterのログや出力メッセージを日本語化するには、設定ファイルで言語を変更します。
まず、使用可能な言語リストを表示します。

# rkhunter --list languages

Current languages:
    cn de en ja tr tr.utf8 zh zh.utf8

RKHunterの設定ファイルを編集して、メール通知設定及び日本語化設定を行います。

# vi /etc/rkhunter.conf

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

# メール通知の設定
MAIL-ON-WARNING=root@localhost

# メール件名の設定
MAIL_CMD=mail -s "[rkhunter] Warnings found for ${HOST_NAME}"

# SSH root ログイン設定(SSHの設定と合わせる)
ALLOW_SSH_ROOT_USER=no

# 言語設定(日本語化)
LANGUAGE=ja

設定項目の説明:

  • MAIL-ON-WARNING : 警告発生時のメール送信先
  • MAIL_CMD : メール送信時の件名設定
  • ALLOW_SSH_ROOT_USER : SSHでのrootログイン許可設定
  • LANGUAGE : 表示言語の設定

RKHunterのデータベースを最新の状態に更新します。

# rkhunter --update

実行結果例:

[ Rootkit Hunter バージョン 1.4.6 ]

rkhunterデータファイルをチェックする ...
  ファイル mirrors.dat をチェックする             [ No 更新 ]
  ファイル programs_bad.dat をチェックする        [ No 更新 ]
  ファイル backdoorports.dat をチェックする       [ No 更新 ]
  ファイル suspscan.dat をチェックする            [ No 更新 ]
  ファイル i18n/cn をチェックする                 [ No 更新 ]
  ファイル i18n/de をチェックする                 [ No 更新 ]
  ファイル i18n/en をチェックする                 [ No 更新 ]
  ファイル i18n/tr をチェックする                 [ No 更新 ]
  ファイル i18n/tr.utf8 をチェックする            [ No 更新 ]
  ファイル i18n/zh をチェックする                 [ No 更新 ]
  ファイル i18n/zh.utf8 をチェックする            [ No 更新 ]
  ファイル i18n/ja をチェックする                 [ No 更新 ]

現在のシステム状態をベースラインとして登録します。

# rkhunter --propupd

実行結果例:

[ Rootkit Hunter バージョン 1.4.6 ]
ファイル updated: ファイル調査数:176 / 発見:129

RKHunterを手動実行してシステムをスキャンします。

rkhunter --check --sk

オプションの説明:

  • --check : システム全体をチェック
  • --sk (--skip-keypress) : キー入力待ちをスキップして自動実行

実行結果例:

[ Rootkit Hunter バージョン 1.4.6 ]
システムコマンドをチェックする ...

システムチェック概要
=====================
ファイルプロパティチェック ...
    ファイルチェック: 129
    疑わしいファイル: 0

Rootkitチェック ...
    Rootkitチェック済み : 484
    rootkitの可能性: 0

アプリケーションチェック ...
    すべてのチェックがスキップされました。

システムチェックツール: 4 minutes and 2 seconds
すべての結果がログファイルに書き込まれました: /var/log/rkhunter/rkhunter.log
システムチェック中に警告は見つかりませんでした。

SSHの設定とRKHunterの設定で不整合がある場合の対処法です。
RKHunterからのスキャン結果メールにSSH設定ファイルとRKHunter設定ファイル内でのrootログイン禁止設定の不一致を警告表示されます。

grep PermitRootLogin /etc/ssh/sshd_config

出力例:

#PermitRootLogin without-password
PermitRootLogin no

SSH設定に合わせてRKHunterの設定を変更します。

# vi /etc/rkhunter.conf
ALLOW_SSH_ROOT_USER=no

設定変更後、システムファイル情報を更新します。

# rkhunter --propupd

RKHunterインストール時に、/etc/cron.daily/rkhunterに自動実行スクリプトが配置されます。このスクリプトは毎日自動実行され、以下の処理を行います。

# cat /etc/cron.daily/rkhunter
#!/usr/bin/sh
# 01-rkhunter  A shell script to update and run rkhunter via CRON

XITVAL=0

# Get a secure tempfile
TMPFILE1=`/bin/mktemp -p /var/lib/rkhunter rkhcronlog.XXXXXXXXXX` || exit 1

if [ ! -e /var/lock/subsys/rkhunter ]; then

  # Try to keep the SysInit boot scan from colliding with us (highly unlikely)
  /bin/touch /var/lock/subsys/rkhunter

  # Source system configuration parameters.
  if [ -e /etc/sysconfig/rkhunter ] ; then
    . /etc/sysconfig/rkhunter
  else
    MAILTO=root@localhost
  fi

  # If a diagnostic mode scan was requested, setup the parameters
  if [ "$DIAG_SCAN" = "yes" ]; then
    RKHUNTER_FLAGS="--checkall --skip-keypress --nocolors --quiet --appendlog --display-logfile"
  else
    RKHUNTER_FLAGS="--cronjob --nocolors --report-warnings-only"
  fi

  # Set a few critical parameters
  RKHUNTER=/usr/bin/rkhunter
  LOGFILE=/var/log/rkhunter/rkhunter.log

  # Run RootKit Hunter if available
  if [ -x $RKHUNTER ]; then
    /bin/echo -e "\n--------------------- Start Rootkit Hunter Update ---------------------" \
      > $TMPFILE1
    /bin/nice -n 10 $RKHUNTER --update --nocolors 2>&1 >> $TMPFILE1
    /bin/echo -e "\n---------------------- Start Rootkit Hunter Scan ----------------------" \
      >> $TMPFILE1
    /bin/nice -n 10 $RKHUNTER $RKHUNTER_FLAGS 2>&1 >> $TMPFILE1
    XITVAL=$?
    /bin/echo -e "\n----------------------- End Rootkit Hunter Scan -----------------------" \
      >> $TMPFILE1

    if [ $XITVAL != 0 ]; then
         /bin/cat $TMPFILE1 | /bin/mail -s "rkhunter Daily Run on $(hostname)" $MAILTO
    fi
    /bin/cat $TMPFILE1 >> $LOGFILE
  fi

  # Delete the gating lockfile
  /bin/rm -f /var/lock/subsys/rkhunter
fi

# Delete the secure tempfile
/bin/rm -f $TMPFILE1

exit $XITVAL

45~47行目により、警告がある場合のみメール送信されます。
48行目で、結果を常にログファイルに追記するようになっています。

RKHunterのログは以下の場所に保存されます。

# メインログ
# /var/log/rkhunter/rkhunter.log

# 過去ログ
# /var/log/rkhunter/rkhunter.log-YYYYMMDD

RKHunterのログファイルの出力先は、メイン設定ファイルである/etc/rkhunter.confで設定されます。
デフォルトでは、ログファイルは/var/log/rkhunter/rkhunter.logに出力されます。
設定ファイル内で、LOGFILEディレクティブを探すことで、このパスを確認または変更できます。

# view /etc/rkhunter.conf
# 抜粋
# The default value is '/var/log/rkhunter.log'.
#
LOGFILE=/var/log/rkhunter/rkhunter.log

RKHunterのログローテーションに関する設定は、システム標準のlogrotateサービスを利用します。
設定ファイルの場所は、/etc/logrotate.d/rkhunterにあります。

# cat /etc/logrotate.d/rkhunter
/var/log/rkhunter/rkhunter.log {
    weekly
    notifempty
    create 640 root root
}

設定内容の解説:

  • /var/log/rkhunter/rkhunter.log : このログローテーション設定が適用される対象のファイルを指定しています。ここでは、RKHunterのログファイルが対象となります。複数のファイルを指定することも可能です。
  • weekly : ログローテーションの頻度を週次に設定します。この設定により、logrotateは1週間に1度、ログファイルのローテーションを試みます。他の設定値にはdaily(毎日)やmonthly(月1回)などがあります。
  • notifempty : ローテーション実行時に、対象のログファイルが空の場合は何もしないという設定です。ログが書き込まれていない週は、新しい空のログファイルが作成されることを防ぎます。
  • create 640 root root : ローテーション後に新しく作成されるログファイルのパーミッション、所有者、グループを指定しています。
    • 640 : ファイルのパーミッションをrw-r-----(所有者には読み書き、グループには読み取りのみ、その他にはなし)に設定します。
    • root root : 所有者をroot、グループをrootに設定します。

この設定により、RKHunterのログは毎週1回、空でなければ新しいファイルにローテーションされ、元のファイルはrootユーザーだけが読み書きできる新しい空のファイルに置き換えられます。
古いログファイルの命名規則は、システム全体の/etc/logrotate.confファイルでdateextなどが指定されている場合に、それに従います。

# cat /etc/logrotate.conf
# see "man logrotate" for details

# global options do not affect preceding include directives

# rotate log files weekly
weekly

# keep 4 weeks worth of backlogs
rotate 4

# create new (empty) log files after rotating old ones
create

# use date as a suffix of the rotated file
dateext

# uncomment this if you want your log files compressed
#compress

# packages drop log rotation information into this directory
include /etc/logrotate.d

# system-specific logs may be also be configured here.

設定内容の解説:

Linuxシステム全体のログローテーションに関するグローバル設定を定義するメインファイルです。
個別のアプリケーション(例:RKHunter)の設定ファイルがない場合に適用されるデフォルト設定や、すべてのログに適用される共通の設定が含まれています。

グローバル設定

  • weekly : ログローテーションの頻度を週次に設定します。
    このファイルにdailymonthlyの指定がない限り、すべてのログローテーションはこの頻度で実行されます。
  • rotate 4 : 最大で4世代の古いログファイルを保持します。
    5回目のローテーション時に、最も古いログファイル(例:rkhunter.log.4)が削除されます。
  • create : ローテーション後に、空の新しいログファイルを自動的に作成します。
    これにより、アプリケーションが新しいログファイルに書き込むことができます。
  • dateext : ローテーションされたログファイルの末尾に、.1, .2 のような数字ではなく、YYYYMMDD形式の日付を付加します。
    これにより、どの日にローテーションされたかが一目で分かります。
    RKHunterのログファイルが日付形式で命名されているのは、この設定が有効となっているためです。
  • #compress : この行はコメントアウトされていますが、もし有効(compress)にすると、ローテーションされた古いログファイルがgzip形式で圧縮されます。

個別設定の読み込み

  • include /etc/logrotate.d: この行は、/etc/logrotate.dディレクトリ内のすべての設定ファイルを読み込むようlogrotateに指示します。
    これにより、RKHunter、nginx、httpdなどの各アプリケーションが独自のローテーションルールを定義できるようになります。

このファイルは、システムの基本的なログ管理ポリシーを決定し、個別の設定ファイルで上書きされない限り、すべてのログファイルに影響を与えます。

# 最新のログを確認
# tail -50 /var/log/rkhunter/rkhunter.log

# 警告のみを抽出
# grep -i warning /var/log/rkhunter/rkhunter.log

月1回程度、以下のメンテナンスを実行することを推奨します。

# データベース更新
# rkhunter --update

# システム情報更新(システム更新後)
# rkhunter --propupd

# 手動スキャン実行
# rkhunter --check --sk

設定ファイルのバックアップを作成しておきます。

# cp /etc/rkhunter.conf /etc/rkhunter.conf.backup

正常なファイルが警告される場合は、設定ファイルでホワイトリストに追加できます。

# vi /etc/rkhunter.conf
# 特定ファイルを除外
SCRIPTWHITELIST="/usr/bin/suspect_script"

# 特定ディレクトリを除外
ALLOWHIDDENDIR="/path/to/hidden/directory"

メールが送信されない場合は、postfixやsendmailが正しく設定されているか確認します。

# postfixの状態確認
# systemctl status postfix

# メール送信テスト
# echo "test" | mail -s "Test Subject" root@localhost

RKHunterはシステムのセキュリティ監視において重要な役割を果たします。定期的な実行とログの確認により、システムの改ざんやrootkit感染を早期発見できます。ただし、偽陽性も発生するため、警告内容を適切に判断し、必要に応じて設定調整を行うことが重要です。

セキュリティツールは複数組み合わせて使用することで効果が高まるため、RKHunterと併せてTripwire、Fail2ban、ファイアウォールなどの他のセキュリティ対策も実装することを推奨します。

次回以降も引き続き「セキュリティ強化偏」として、以下の手順を実施します。

  1. セキュリティ強化
  2. メール転送設定

これらの手順により、安全で管理しやすいLinuxサーバ環境を構築できます。

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