nss-softokn-freeblをupdateしたらrkhunterで警告が出るようになった件の続き

この記事は、以下の続きです。


改めて状況を整理してみた。

問題が起こったのは、「nss-softokn-freebl」パッケージの更新で、バージョンは以下の通り。

nss-softokn-freebl-3.14.3-18.el6_6.x86_64.rpm
 ↓
nss-softokn-freebl-3.14.3-19.el6_6.x86_64.rpm

この2つのRPMパッケージを入手して、中身のファイルに差がないか確認。

作業用ディレクトリを作成

$ mkdir /tmp/3-18
$ mkdir /tmp/3-19


まずは3-18から。

$ cd /tmp/3-18
$ wget http://ftp.jaist.ac.jp/pub/Linux/CentOS/6/updates/x86_64/Packages/nss-softokn-freebl-3.14.3-18.el6_6.x86_64.rpm
$ rpm2cpio nss-softokn-freebl-3.14.3-18.el6_6.x86_64.rpm | cpio -idv
./lib64/libfreebl3.chk
./lib64/libfreebl3.so
./usr/lib64/libfreebl3.chk
./usr/lib64/libfreebl3.so
937 blocks


次に3-19。

$ cd /tmp/3-19
$ wget http://ftp.jaist.ac.jp/pub/Linux/CentOS/6/updates/x86_64/Packages/nss-softokn-freebl-3.14.3-19.el6_6.x86_64.rpm
$ rpm2cpio nss-softokn-freebl-3.14.3-19.el6_6.x86_64.rpm | cpio -idv
./etc/prelink.conf.d
./etc/prelink.conf.d/nss-softokn-prelink.conf
./lib64/libfreebl3.so
./lib64/libfreeblpriv3.chk
./lib64/libfreeblpriv3.so
./usr/lib64/libfreebl3.so
./usr/lib64/libfreeblpriv3.chk
./usr/lib64/libfreeblpriv3.so
./usr/share/dracut/modules.d/05nss-softokn
./usr/share/dracut/modules.d/05nss-softokn/install
960 blocks


3-19 以降で含まれるようになった設定ファイルらしきものを確認。
このファイルは、本日時点での最新版である3-22も同様。

$ cat ./etc/prelink.conf.d/nss-softokn-prelink.conf
-b /lib{,64}/libfreeblpriv3.so
-b /lib{,64}/libsoftokn3.so
-b /lib{,64}/libnssdbm3.so
-b /usr/lib{,64}/libfreeblpriv3.so
-b /usr/lib{,64}/libsoftokn3.so
-b /usr/lib{,64}/libnssdbm3.so


これは、prelinkの除外リストらしい。
http://blog.hatena.ne.jp/savakan/shobon.hatenablog.com/edit#preview
man で確認すると、以下の通り。

 -b --black-list=PATH
              This option allows blacklisting certain paths, libraries or binaries.  Prelink will not touch them during prelinking.


改めて以前のエラーメッセージを確認すると・・・

# /usr/sbin/prelink -v /usr/bin/elinks
・
・省略
・
/usr/sbin/prelink: Could not prelink /usr/lib64/libnss_compat_ossl.so.0 because its dependency /usr/lib64/libnssdbm3.so could not be prelinked
/usr/sbin/prelink: Could not prelink /usr/bin/elinks because its dependency /usr/lib64/libnss_compat_ossl.so.0 could not be prelinked

# /usr/sbin/prelink -v /usr/bin/links
・
・省略
・
/usr/sbin/prelink: Could not prelink /usr/lib64/libnss_compat_ossl.so.0 because its dependency /usr/lib64/libnssdbm3.so could not be prelinked
/usr/sbin/prelink: Could not prelink /usr/bin/links because its dependency /usr/lib64/libnss_compat_ossl.so.0 could not be prelinked


なので、「/usr/lib64/libnssdbm3.so」が除外リストに入っており、「/usr/lib64/libnss_compat_ossl.so.0」がprelinkされない。

これに依存して、「/usr/bin/elinks」「/usr/bin/links」もprelinkされない。

「nss-softokn-prelink.conf」を削除したり、除外リストから削除したりする事は、動作に不安があるのでできない。



ところで、そもそもの現象は、rkhunter でコマンドのハッシュをチェックして、ハッシュが合わなくなったという事だった。

原因は、prelink と nss-softokn-freebl の更新によるもの。

prelink とrkhunter の動作を考慮してまとめると、以下のようになる。

<nss-softokn-freebl-3.14.3-18 以前>
・nss-softokn-prelink.conf は存在しない。
・prelink で elinks/links いずれでもエラーは出ない。
・rkhunter で、以前のハッシュ値と、prelink を再度実行した後のハッシュ値は同じになり、エラーは発生しない。

<nss-softokn-freebl-3.14.3-19 以降>
・nss-softokn-prelink.conf が存在する。
・prelink で elinks/links いずれでもエラーが出る(nss-softokn-prelink.conf で除外リストに指定されているモジュールがあるため)。
・prelink でハッシュ値が更新されない。
・rkhunter で、以前のハッシュ値と、prelink を再度実行した後のハッシュ値を比較しようとした際に、エラーになる。
(/var/log/rkhunter.log に出力される Warning: No hash value found for file... のこと)


rkhunter では、elinks/links が prelink したハッシュ値を記録している。

prelink を undo して、rkhunter に elinks/links が prelink されない(エラーが出て失敗する)ハッシュ値を再登録させてみる事にした。

prelink を undo する。-v も付けると、undo されたリストが表示される。

# /usr/sbin/prelink -au


その後、「rkhunter --propupd」を実行。

# rkhunter --propupd
[ Rootkit Hunter version 1.4.0 ]
File updated: searched for 167 files, found 141


prelink は cron で実行されるので、prelink 後に再びハッシュ値のエラーが出ないか確認のため、手動で prelink を実行して確認。

# /etc/cron.daily/prelink
# rkhunter --propupd
[ Rootkit Hunter version 1.4.0 ]
File updated: searched for 167 files, found 141

エラーが出なくなった。たぶん、これで良かったと思う。


なお、rkhunter でチェックされるのハッシュ値は、以下で管理されている模様。

/var/lib/rkhunter/db/rkhunter.dat
/var/lib/rkhunter/db/rkhunter.dat.old

/usr/bin/rkhunter を cat してみたら、18000行もあるシェルスクリプトだった。