rkhunterでファイル改ざんを検知してみる
はじめに
今回は、Linuxで利用できるRootkit検知ツール(rkhunter)のインストールから、簡易検証までを実施してみたいと思います。
rkhunter とは
以下、ArchWikiから引用。
rkhunter (Rootkit Hunter) は POSIX 互換システムのためのセキュリティ監視ツールです。ルートキットやその他の脆弱性をスキャンします。(ルートキットの) デフォルトディレクトリや間違ったパーミッション、隠しファイル、怪しい文字列を含むカーネルモジュールを検索し、重要なファイルについて正しいファイルとのハッシュを比較します。
コマンドの改ざん検知や、主要なRootkitが設置されていないかなどを検知してくれるツールです。
ただし、誤検知も多いようですので、正しいチューニングも必要なようです。
rkhunter のインストール
rkhunterは通常のリポジトリにはなく、Linux用の拡張パッケージ(EPEL)からダウンロードします。
$ sudo yum install epel-release
メタデータの期限切れの最終確認: 0:02:01 時間前の 2022年12月04日 22時35分05秒 に実施しました。
依存関係が解決しました。
===============================================================================================================================
パッケージ アーキテクチャー バージョン リポジトリー サイズ
===============================================================================================================================
インストール:
epel-release noarch 9-4.el9 extras 19 k
トランザクションの概要
===============================================================================================================================
インストール 1 パッケージ
以下略
$ sudo yum install rkhunter
Extra Packages for Enterprise Linux 9 - aarch64 2.1 MB/s | 12 MB 00:05
メタデータの期限切れの最終確認: 0:00:04 時間前の 2022年12月04日 22時38分10秒 に実施しました。
依存関係が解決しました。
===============================================================================================================================
パッケージ アーキテクチャー バージョン リポジトリー サイズ
===============================================================================================================================
インストール:
rkhunter noarch 1.4.6-17.el9 epel 184 k
依存関係のインストール:
perl-AutoLoader noarch 5.74-479.el9 appstream 30 k
以下略
# perl の依存パッケージが大量にインストールされました。
rkhunter の実行
まずは、rkhunterがチェックする際に利用するデータベース(定義ファイル)を最新にします。
$ sudo rkhunter --update
[ Rootkit Hunter version 1.4.6 ]
Checking rkhunter data files...
Checking file mirrors.dat [ Updated ]
Checking file programs_bad.dat [ Updated ]
Checking file backdoorports.dat [ Updated ]
Checking file suspscan.dat [ Updated ]
Checking file i18n/cn [ No update ]
Checking file i18n/de [ Updated ]
Checking file i18n/en [ No update ]
Checking file i18n/tr [ Updated ]
Checking file i18n/tr.utf8 [ Updated ]
Checking file i18n/zh [ Updated ]
Checking file i18n/zh.utf8 [ Updated ]
Checking file i18n/ja [ Updated ]
次に、rkhunterが検査するOS内の各種ファイルのハッシュ値を取得します。
※この情報と比較することで、改竄検知を行っているのだと思います。
$ sudo rkhunter --propupd
[ Rootkit Hunter version 1.4.6 ]
File updated: searched for 176 files, found 133
では、実際にrkhunterを実行してみます。
オプションの -sk
をつけない場合、各チェック項目ごとにEnterキーを入力する必要がありますが、-sk
をつけることで、Enterキーを入力する必要がなくなります。
$ sudo rkhunter --check -sk
[sudo] shin のパスワード:
[ Rootkit Hunter version 1.4.6 ]
Checking system commands...
Performing 'strings' command checks
Checking 'strings' command [ OK ]
Performing 'shared libraries' checks
Checking for preloading variables [ None found ]
Checking for preloaded libraries [ None found ]
Checking LD_LIBRARY_PATH variable [ Not found ]
Performing file properties checks
Checking for prerequisites [ OK ]
/usr/sbin/adduser [ OK ]
/usr/sbin/chroot [ OK ]
/usr/sbin/depmod [ OK ]
/usr/sbin/fsck [ OK ]
以下略
Checking for rootkits...
Performing check of known rootkit files and directories
55808 Trojan - Variant A [ Not found ]
ADM Worm [ Not found ]
AjaKit Rootkit [ Not found ]
Adore Rootkit [ Not found ]
aPa Kit [ Not found ]
以下略
Performing additional rootkit checks
Suckit Rootkit additional checks [ OK ]
Checking for possible rootkit files and directories [ None found ]
Checking for possible rootkit strings [ None found ]
Performing malware checks
Checking running processes for suspicious files [ None found ]
Checking for hidden processes [ Skipped ]
Checking for login backdoors [ None found ]
Checking for sniffer log files [ None found ]
Checking for suspicious directories [ None found ]
Checking for Apache backdoor [ Not found ]
Performing Linux specific checks
Checking loaded kernel modules [ OK ]
Checking kernel module names [ OK ]
Checking the network...
Performing checks on the network ports
Checking for backdoor ports [ None found ]
Performing checks on the network interfaces
Checking for promiscuous interfaces [ None found ]
Checking the local host...
Performing system boot checks
Checking for local host name [ Found ]
Checking for system startup files [ Found ]
Checking system startup files for malware [ None found ]
Performing group and account checks
Checking for passwd file [ Found ]
Checking for root equivalent (UID 0) accounts [ None found ]
Checking for passwordless accounts [ None found ]
Checking for passwd file changes [ None found ]
Checking for group file changes [ None found ]
Checking root account shell history files [ OK ]
Performing system configuration file checks
Checking for an SSH configuration file [ Found ]
Checking if SSH root access is allowed [ Not set ]
Checking if SSH protocol v1 is allowed [ Not set ]
Checking for other suspicious configuration settings [ None found ]
Checking for a running system logging daemon [ Found ]
Checking for a system logging configuration file [ Found ]
Checking if syslog remote logging is allowed [ Not allowed ]
Performing filesystem checks
Checking /dev for suspicious file types [ None found ]
Checking for hidden files and directories [ None found ]
System checks summary
=====================
File properties checks...
Files checked: 133
Suspect files: 0
Rootkit checks...
Rootkits checked : 494
Possible rootkits: 0
Applications checks...
All checks skipped
The system checks took: 1 minute and 18 seconds
All results have been written to the log file: /var/log/rkhunter/rkhunter.log
No warnings were found while checking the system.
上記では時に何も検知されませんでした。
ファイルの改ざん検知を試してみる
rkhunterでは各種コマンドの改ざんチェックを行なっているようですので、実際に改ざんを検知するかどうか試してみたいと思います。
まずは、以下を実行して、わざとコマンドを改ざんしてみました。
$ sudo cp -ip /usr/bin/diff /usr/bin/diff_org
$ su -
$ echo test >> /usr/bin/diff #rootで実行
再度、検査を実行します。
$ sudo rkhunter --check -sk
[ Rootkit Hunter version 1.4.6 ]
Checking system commands...
Performing 'strings' command checks
Checking 'strings' command [ OK ]
Performing 'shared libraries' checks
Checking for preloading variables [ None found ]
Checking for preloaded libraries [ None found ]
Checking LD_LIBRARY_PATH variable [ Not found ]
Performing file properties checks
Checking for prerequisites [ OK ]
/usr/sbin/adduser [ OK ]
以下略
/usr/bin/df [ OK ]
/usr/bin/diff [ Warning ]
/usr/bin/dirname [ OK ]
/usr/bin/dmesg [ OK ]
/usr/bin/du [ OK ]
以下略
System checks summary
=====================
File properties checks...
Files checked: 133
Suspect files: 1
Rootkit checks...
Rootkits checked : 494
Possible rootkits: 0
Applications checks...
All checks skipped
The system checks took: 1 minute and 20 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)
/usr/bin/diffコマンドのチェックにて [Warning] になっていることがわかります。
また、最後のサマリーにおいても、不審なファイル(Suspect files)として検知されていることがわかります。
以下を実行すると、[Warning]が消えました。
$ mv /usr/bin/diff_org /usr/bin/diff #rootで実行
$ sudo rkhunter --propupd
[ Rootkit Hunter version 1.4.6 ]
File updated: searched for 176 files, found 133
$ sudo rkhunter --check -sk
[ Rootkit Hunter version 1.4.6 ]
Checking system commands...
Performing 'strings' command checks
Checking 'strings' command [ OK ]
Performing 'shared libraries' checks
Checking for preloading variables [ None found ]
Checking for preloaded libraries [ None found ]
Checking LD_LIBRARY_PATH variable [ Not found ]
Performing file properties checks
Checking for prerequisites [ OK ]
/usr/sbin/adduser [ OK ]
/usr/sbin/chroot [ OK ]
以下略
/usr/bin/cut [ OK ]
/usr/bin/date [ OK ]
/usr/bin/df [ OK ]
/usr/bin/diff [ OK ]
/usr/bin/dirname [ OK ]
以下略
rkhunterをスケジュール実行する
rkhunterをインストールすると、cronで毎日自動実行されるようになっています。
実行されるスクリプトは、以下に設定されているため、興味のある人は確認してみてください。
$ ls -l /etc/cron.daily/rkhunter
-rwxr-xr-x. 1 root root 1749 6月 20 07:21 /etc/cron.daily/rkhunter
おわりに
まだ設定ファイルをいじったり、どんなことが検知できるのか調べきれていないので、またある程度調べられたら記事にしたいなーと思います。
Discussion