😺

rkhunterでファイル改ざんを検知してみる

2022/12/11に公開

はじめに

今回は、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  620 07:21 /etc/cron.daily/rkhunter

おわりに

まだ設定ファイルをいじったり、どんなことが検知できるのか調べきれていないので、またある程度調べられたら記事にしたいなーと思います。

Discussion