rkhunterのインストールとできることの確認


# 本文書について

rootkit対策として有名なrkhunterについて、どのようなことが行われるのかを確認した。

- Ubuntu20.04LTSにて、インストールと動作を確認した。他のディストリビューションでも同じと思われる
- 適当に導入と稼働をしたので、メモ代わりに書いている。ただの`入れてみた`よりは参考になるはず。

# えぐぜくてぃぶさまり

- rkhunterは、rootkit以外の不審なものに対するチェックもできる。
- 導入コストは最小限、仕組みが簡単であるため運用コストも最小限と考えられる。
- 対象はrootkitなどの「侵入後の改変」となる。侵入を防ぐ努力をしつつ、侵入されても気づける環境を作るには、良いと考えられる。

# インストール

rkhunterの[プロジェクトページ](http://rkhunter.sourceforge.net/)を見ると、インストールの[チュートリアル](https://sourceforge.net/p/rkhunter/wiki/index/)を見るように記載があるので、それを参考に進める。


## パッケージのインストール

…と思ったら、パッケージがあった。

```
# apt-get install rkhunter
```

残念ながら、デフォルトの設定が(意図的に？)正しくなくて、正常には動きません。

- databaseアップデートせずにチェックはできそうだけど、それはあまり意味がないのでは。

```
# rkhunter --update
Invalid WEB_CMD configuration option: Relative pathname: "/bin/false"
# 
```



## 調整

`/etc/rkhunter.conf` を調整します。
動作を目視確認することを目的にしているので、表示を日本語に切り替えています。


- 言語に関する設定

  - LANGUAGES=en -> ja
  - UPDATE_LANG=en -> コメントアウト


- `--update`で使用するコマンドに関する設定

  - WEB_CMD="/bin/false" -> curl 

- 検査に関する設定

  - UPDATE_MIRRORS=0 -> UPDATE_MIRRORS=1 (as default value)
  - MIRRORS_MODE=1 -> MIRROS_MODE=0 (as default value)
  - PKGMGR=NONE -> DPKG

デフォルトのconfigでは、いまいちきちんと稼働しない。この事に触れている記事は少ない気がするので注意が必要。

- UPDATE_MIRRORS, MIRRORS_MODE, WEB_CMD を見ると、ubuntuのミラーを見せたくないor自分でミラーしろ、というイメージか(確かにすぐ使えるようにしておくと、大量のアクセスが発生しそう)。
- 言語設定は「設定ができる」ことを示すためにjaにしましたが、運用上はenのほうが良いです。`grep "警告" /var/log/rkhunter` とか日本語使いたくないし。
- PKGMGRの設定は必要だと考えられます。
  - ```This is used when updating the file properties file ('rkhunter.dat'), and when running the file properties check.```
  -  「これは、ファイルプロパティファイル（ 'rkhunter.dat'）を更新するとき、およびファイルプロパティチェックを実行するときに使用されます。」
  - ```The package managers obtain each file hash value using a hash function.```
  - 「パッケージマネージャーは、ハッシュ関数を使用して各ファイルのハッシュ値を取得します。」

## 確認と更新

変更後は`--config-check`(短縮形:-C) で確認ののち、`--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 更新 ]
root@tooltest:~# 
```

- 初回なら"Updated"や"No update"が表示される(上記は何度もupdateしたので更新がない)
- "Skipped"が `Checking file i18n/de` 等であれば、`UPDATE_LANG`で特定の言語が指定されている。


## スキャンと結果の確認

スキャンは、wikiの[first scan](https://sourceforge.net/p/rkhunter/wiki/first-scan/)参照。

スキャン結果は長いので、末尾の Appendix に置きました。
ここではサマリのみ取り扱います。

- `--check`は`-c`で短縮可能だが、`--config-check`の`-C`と間違えそう
- `--skip-keypress`は`-sk`で短縮可能。
- 一般的には`-c -sk`でスキャンしてるみたい

```
# rkhunter --check --skip-keypress
(snip)
システムチェック概要
=====================

ファイルプロパティチェック ...
    ファイルチェック: 143
    疑わしいファイル: 0

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

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

システムチェックツール: 1 minute and 38 seconds

すべての結果がログファイルに書き込まれました: /var/log/rkhunter.log

システムチェック中に警告は見つかりませんでした。

# vi /etc/rkhunter.conf 
```

## 検査内容の確認

`/var/log/rkhunter.log` に詳細に記載されている。


- デフォルトでは上書きされてしまうので、運用方法に応じて変更したほうがいい。いつから変更されたか、の記録になる可能性がある。
- バックドアとrootkit以外にもいろいろ確認しているようだ。以下に概要を示す
  - 疑わしいコンテンツのファイルをチェックする
  - スニファログファイルの存在をチェックする
  - tripwireのチェックをする
  - 疑わしい共有メモリセグメントのチェックをする
  - 読込済みカーネルモジュール、カーネルモジュール名をチェックする
  - バックドアポート、隠しポートのチェックをする
  - プロミスキャスインタフェースのチェックをする
  - パケットキャプチャアプリケーションをチェックする
  - パスワードなしアカウントをチェックする
  - SSH, syslogの設定をチェックする
  - アプリケーション(exim, gpg, httpd, named, openssl, php, procmail, proftpd, sshd)のバージョンチェックをする

# まとめ

近年の傾向として、侵入をすべて防ぐのは不可能／侵入されたことを素早く気づけるようにする、ことが重要となっている。rkhunterの適用範囲を考慮しつつ、他のツールと併用することでより安全な運用ができると考えられる。

- 導入は簡単だが、運用に合わせた設定の調整は必要
  - OSのアップデートを実施した際に、どのタイミングで`--popupd`して基準値を作るかの検討が必要
  - どのような対応フローになるかの想定が必要
- 対策の範囲を間違えない
  - 侵入されない：WAF, セキュアプログラミン, 脆弱性管理, AntiVirusソフト 等
  - 侵入されても気づける：SIEM, SOAR, 改ざん検知 等(rkhunterはここに該当)
- rootkit等の対策は、自分が加害者になる可能性がある、という点でやっておく必要がある。
  - ゾンビとして、攻撃の手先として使用される。被害者から最初に見えるホストになってしまう。

# Appendix
## スキャン
### コンソール上のログ

`rkhunter --propupd` 後に `lwp-request` が更新されたので、警告が出ている。
問題ないことが確認出来たら --propupd をすると現状のもので認識されて、次回から警告は出ない。

```
# rkhunter -c -sk
[ Rootkit Hunter バージョン 1.4.6 ]

システムコマンドをチェックする ...

  「strings」コマンドチェックを実行する
    「strings」コマンドをチェックする           [ OK ]

  「共有ライブラリ」チェックを実行する
    プリロード変数をチェックする               [ 発見なし ]
    プリロードライブラリをチェックする      [ 発見なし ]
    「LD_LIBRARY_PATH」変数をチェックする         [ 未発見 ]

  ファイルプロパティチェックを実行する
    前提条件をチェックする                        [ OK ]
    /usr/sbin/adduser                                        [ OK ]
    /usr/sbin/chroot                                         [ OK ]
    /usr/sbin/cron                                           [ OK ]
    /usr/sbin/depmod                                         [ OK ]
    /usr/sbin/fsck                                           [ OK ]
    /usr/sbin/groupadd                                       [ OK ]
    /usr/sbin/groupdel                                       [ OK ]
    /usr/sbin/groupmod                                       [ OK ]
    /usr/sbin/grpck                                          [ OK ]
    /usr/sbin/ifconfig                                       [ OK ]
    /usr/sbin/init                                           [ OK ]
    /usr/sbin/insmod                                         [ OK ]
    /usr/sbin/ip                                             [ OK ]
    /usr/sbin/lsmod                                          [ OK ]
    /usr/sbin/modinfo                                        [ OK ]
    /usr/sbin/modprobe                                       [ OK ]
    /usr/sbin/nologin                                        [ OK ]
    /usr/sbin/pwck                                           [ OK ]
    /usr/sbin/rmmod                                          [ OK ]
    /usr/sbin/route                                          [ OK ]
    /usr/sbin/rsyslogd                                       [ OK ]
    /usr/sbin/runlevel                                       [ OK ]
    /usr/sbin/sulogin                                        [ OK ]
    /usr/sbin/sysctl                                         [ OK ]
    /usr/sbin/useradd                                        [ OK ]
    /usr/sbin/userdel                                        [ OK ]
    /usr/sbin/usermod                                        [ OK ]
    /usr/sbin/vipw                                           [ OK ]
    /usr/sbin/unhide                                         [ OK ]
    /usr/sbin/unhide-linux                                   [ OK ]
    /usr/sbin/unhide-posix                                   [ OK ]
    /usr/sbin/unhide-tcp                                     [ OK ]
    /usr/bin/awk                                             [ OK ]
    /usr/bin/basename                                        [ OK ]
    /usr/bin/bash                                            [ OK ]
    /usr/bin/cat                                             [ OK ]
    /usr/bin/chattr                                          [ OK ]
    /usr/bin/chmod                                           [ OK ]
    /usr/bin/chown                                           [ OK ]
    /usr/bin/cp                                              [ OK ]
    /usr/bin/curl                                            [ OK ]
    /usr/bin/cut                                             [ OK ]
    /usr/bin/date                                            [ OK ]
    /usr/bin/df                                              [ OK ]
    /usr/bin/diff                                            [ OK ]
    /usr/bin/dirname                                         [ OK ]
    /usr/bin/dmesg                                           [ OK ]
    /usr/bin/dpkg                                            [ OK ]
    /usr/bin/dpkg-query                                      [ OK ]
    /usr/bin/du                                              [ OK ]
    /usr/bin/echo                                            [ OK ]
    /usr/bin/ed                                              [ OK ]
    /usr/bin/egrep                                           [ OK ]
    /usr/bin/env                                             [ OK ]
    /usr/bin/fgrep                                           [ OK ]
    /usr/bin/file                                            [ OK ]
    /usr/bin/find                                            [ OK ]
    /usr/bin/fuser                                           [ OK ]
    /usr/bin/GET                                             [ OK ]
    /usr/bin/grep                                            [ OK ]
    /usr/bin/groups                                          [ OK ]
    /usr/bin/head                                            [ OK ]
    /usr/bin/id                                              [ OK ]
    /usr/bin/ip                                              [ OK ]
    /usr/bin/ipcs                                            [ OK ]
    /usr/bin/kill                                            [ OK ]
    /usr/bin/killall                                         [ OK ]
    /usr/bin/last                                            [ OK ]
    /usr/bin/lastlog                                         [ OK ]
    /usr/bin/ldd                                             [ OK ]
    /usr/bin/less                                            [ OK ]
    /usr/bin/logger                                          [ OK ]
    /usr/bin/login                                           [ OK ]
    /usr/bin/ls                                              [ OK ]
    /usr/bin/lsattr                                          [ OK ]
    /usr/bin/lsmod                                           [ OK ]
    /usr/bin/lsof                                            [ OK ]
    /usr/bin/mail                                            [ OK ]
    /usr/bin/md5sum                                          [ OK ]
    /usr/bin/mktemp                                          [ OK ]
    /usr/bin/more                                            [ OK ]
    /usr/bin/mount                                           [ OK ]
    /usr/bin/mv                                              [ OK ]
    /usr/bin/netstat                                         [ OK ]
    /usr/bin/newgrp                                          [ OK ]
    /usr/bin/passwd                                          [ OK ]
    /usr/bin/perl                                            [ OK ]
    /usr/bin/pgrep                                           [ OK ]
    /usr/bin/ping                                            [ OK ]
    /usr/bin/pkill                                           [ OK ]
    /usr/bin/ps                                              [ OK ]
    /usr/bin/pstree                                          [ OK ]
    /usr/bin/pwd                                             [ OK ]
    /usr/bin/readlink                                        [ OK ]
    /usr/bin/rkhunter                                        [ OK ]
    /usr/bin/runcon                                          [ OK ]
    /usr/bin/sed                                             [ OK ]
    /usr/bin/sh                                              [ OK ]
    /usr/bin/sha1sum                                         [ OK ]
    /usr/bin/sha224sum                                       [ OK ]
    /usr/bin/sha256sum                                       [ OK ]
    /usr/bin/sha384sum                                       [ OK ]
    /usr/bin/sha512sum                                       [ OK ]
    /usr/bin/size                                            [ OK ]
    /usr/bin/sort                                            [ OK ]
    /usr/bin/ssh                                             [ OK ]
    /usr/bin/stat                                            [ OK ]
    /usr/bin/strace                                          [ OK ]
    /usr/bin/strings                                         [ OK ]
    /usr/bin/su                                              [ OK ]
    /usr/bin/sudo                                            [ OK ]
    /usr/bin/tail                                            [ OK ]
    /usr/bin/telnet                                          [ OK ]
    /usr/bin/test                                            [ OK ]
    /usr/bin/top                                             [ OK ]
    /usr/bin/touch                                           [ OK ]
    /usr/bin/tr                                              [ OK ]
    /usr/bin/uname                                           [ OK ]
    /usr/bin/uniq                                            [ OK ]
    /usr/bin/users                                           [ OK ]
    /usr/bin/vmstat                                          [ OK ]
    /usr/bin/w                                               [ OK ]
    /usr/bin/watch                                           [ OK ]
    /usr/bin/wc                                              [ OK ]
    /usr/bin/wget                                            [ OK ]
    /usr/bin/whatis                                          [ OK ]
    /usr/bin/whereis                                         [ OK ]
    /usr/bin/which                                           [ OK ]
    /usr/bin/who                                             [ OK ]
    /usr/bin/whoami                                          [ OK ]
    /usr/bin/numfmt                                          [ OK ]
    /usr/bin/kmod                                            [ OK ]
    /usr/bin/systemd                                         [ OK ]
    /usr/bin/systemctl                                       [ OK ]
    /usr/bin/mawk                                            [ OK ]
    /usr/bin/lwp-request                                     [ 警告 ]
    /usr/bin/bsd-mailx                                       [ OK ]
    /usr/bin/dash                                            [ OK ]
    /usr/bin/x86_64-linux-gnu-size                           [ OK ]
    /usr/bin/x86_64-linux-gnu-strings                        [ OK ]
    /usr/bin/telnet.netkit                                   [ OK ]
    /usr/bin/w.procps                                        [ OK ]
    /usr/lib/systemd/systemd                                 [ OK ]

rootkitsをチェックする ...

  既知のrootkitファイルおよびディレクトリのチェックを実行する
    55808 Trojan - Variant A                                 [ 未発見 ]
    ADM Worm                                                 [ 未発見 ]
    AjaKit Rootkit                                           [ 未発見 ]
    Adore Rootkit                                            [ 未発見 ]
    aPa Kit                                                  [ 未発見 ]
    Apache Worm                                              [ 未発見 ]
    Ambient (ark) Rootkit                                    [ 未発見 ]
    Balaur Rootkit                                           [ 未発見 ]
    BeastKit Rootkit                                         [ 未発見 ]
    beX2 Rootkit                                             [ 未発見 ]
    BOBKit Rootkit                                           [ 未発見 ]
    cb Rootkit                                               [ 未発見 ]
    CiNIK Worm (Slapper.B variant)                           [ 未発見 ]
    Danny-Boy's Abuse Kit                                    [ 未発見 ]
    Devil RootKit                                            [ 未発見 ]
    Diamorphine LKM                                          [ 未発見 ]
    Dica-Kit Rootkit                                         [ 未発見 ]
    Dreams Rootkit                                           [ 未発見 ]
    Duarawkz Rootkit                                         [ 未発見 ]
    Ebury backdoor                                           [ 未発見 ]
    Enye LKM                                                 [ 未発見 ]
    Flea Linux Rootkit                                       [ 未発見 ]
    Fu Rootkit                                               [ 未発見 ]
    Fuck`it Rootkit                                          [ 未発見 ]
    GasKit Rootkit                                           [ 未発見 ]
    Heroin LKM                                               [ 未発見 ]
    HjC Kit                                                  [ 未発見 ]
    ignoKit Rootkit                                          [ 未発見 ]
    IntoXonia-NG Rootkit                                     [ 未発見 ]
    Irix Rootkit                                             [ 未発見 ]
    Jynx Rootkit                                             [ 未発見 ]
    Jynx2 Rootkit                                            [ 未発見 ]
    KBeast Rootkit                                           [ 未発見 ]
    Kitko Rootkit                                            [ 未発見 ]
    Knark Rootkit                                            [ 未発見 ]
    ld-linuxv.so Rootkit                                     [ 未発見 ]
    Li0n Worm                                                [ 未発見 ]
    Lockit / LJK2 Rootkit                                    [ 未発見 ]
    Mokes backdoor                                           [ 未発見 ]
    Mood-NT Rootkit                                          [ 未発見 ]
    MRK Rootkit                                              [ 未発見 ]
    Ni0 Rootkit                                              [ 未発見 ]
    Ohhara Rootkit                                           [ 未発見 ]
    Optic Kit (Tux) Worm                                     [ 未発見 ]
    Oz Rootkit                                               [ 未発見 ]
    Phalanx Rootkit                                          [ 未発見 ]
    Phalanx2 Rootkit                                         [ 未発見 ]
    Phalanx2 Rootkit (extended tests)                        [ 未発見 ]
    Portacelo Rootkit                                        [ 未発見 ]
    R3dstorm Toolkit                                         [ 未発見 ]
    RH-Sharpe's Rootkit                                      [ 未発見 ]
    RSHA's Rootkit                                           [ 未発見 ]
    Scalper Worm                                             [ 未発見 ]
    Sebek LKM                                                [ 未発見 ]
    Shutdown Rootkit                                         [ 未発見 ]
    SHV4 Rootkit                                             [ 未発見 ]
    SHV5 Rootkit                                             [ 未発見 ]
    Sin Rootkit                                              [ 未発見 ]
    Slapper Worm                                             [ 未発見 ]
    Sneakin Rootkit                                          [ 未発見 ]
    'Spanish' Rootkit                                        [ 未発見 ]
    Suckit Rootkit                                           [ 未発見 ]
    Superkit Rootkit                                         [ 未発見 ]
    TBD (Telnet BackDoor)                                    [ 未発見 ]
    TeLeKiT Rootkit                                          [ 未発見 ]
    T0rn Rootkit                                             [ 未発見 ]
    trNkit Rootkit                                           [ 未発見 ]
    Trojanit Kit                                             [ 未発見 ]
    Tuxtendo Rootkit                                         [ 未発見 ]
    URK Rootkit                                              [ 未発見 ]
    Vampire Rootkit                                          [ 未発見 ]
    VcKit Rootkit                                            [ 未発見 ]
    Volc Rootkit                                             [ 未発見 ]
    Xzibit Rootkit                                           [ 未発見 ]
    zaRwT.KiT Rootkit                                        [ 未発見 ]
    ZK Rootkit                                               [ 未発見 ]

  追加rootkitチェックを実行する
    Suckit Rookit追加チェック                          [ OK ]
    可能性のあるrootkitファイルおよびディレクトリをチェックする [ 発見なし ]
    可能性のあるrootkitストリングをチェックする [ 発見なし ]

  マルウェアチェックを実行する
    疑わしいファイルのプロセス実行をチェックする [ 発見なし ]
    ログインバックドアをチェックする         [ 発見なし ]
    スニファログファイルをチェックする      [ 発見なし ]
    疑わしいディレクトリをチェックする      [ 発見なし ]
    疑わしい共有メモリセグメント               [ 発見なし ]
    Apacheバックドアをチェックする               [ 未発見 ]

  Linux 固有チェックを実行する
    読み込み済みカーネルモジュールをチェックする [ OK ]
    カーネルモジュール名をチェックする      [ OK ]

ネットワークチェック ...

  ネットワークポートのチェックを実行する
    バックドアポートをチェックする            [ 発見なし ]

  ネットワークインターフェースのチェックを実行する
    プロミスキャスインターフェースをチェックする [ 発見なし ]

ローカルホストをチェックする ...

  システムブートチェックを実行する
    ローカルホスト名をチェックする            [ 発見 ]
    システムスタートアップファイルをチェックする [ 発見 ]
    マルウェアのシステムスタートアップファイルをチェックする [ 発見なし ]

  グループおよびアカウントのチェックを実行する
    パスワードファイルをチェックする         [ 発見 ]
    root同等 (UID 0) アカウントをチェックする  [ 発見なし ]
    パスワードなしアカウントをチェックする [ 発見なし ]
    パスワードファイル変更をチェックする   [ 発見なし ]
    グループファイル変更チェック               [ 発見なし ]
    ルートアカウントのシェル履歴ファイルをチェックする [ OK ]

  システム設定ファイルのチェックを実行する
    SSH設定ファイルをチェックする               [ 未発見 ]
    実行中のシステムロギングデーモンをチェックする [ 発見 ]
    システムロギング設定ファイルをチェックする [ 発見 ]
    syslogリモートロギングが許可されているかチェックする [ 不許可 ]

  ファイルシステムチェックを実行する
    「/dev」の疑わしいファイルタイプをチェックする [ 発見なし ]
    隠しファイルおよびディレクトリをチェックする [ 発見なし ]


システムチェック概要
=====================

ファイルプロパティチェック ...
    ファイルチェック: 143
    疑わしいファイル: 1

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

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

システムチェックツール: 1 minute and 25 seconds

すべての結果がログファイルに書き込まれました: /var/log/rkhunter.log

システムチェック中に1つまたはそれ以上の警告が見つかりました。
ログファイル (/var/log/rkhunter.log) をチェックしてくください。

# 
```