chkrootkit のSuckit誤検知の修正(Ubuntu版)

スポンサーリンク

以前、rootkit検知ツール chkrootkit でルートキット Suckit を誤検出する件を修正しました。

chkrootkit のSuckit誤検知の修正 パソコン鳥のブログ

ただし、CentOS での対応だったので、今回、Ubuntu での chkrootkit の修正を説明します。

修正コードは以下になります。
### Suckit
で始まる箇所を下記のように修正します。赤字の箇所が修正/追加箇所です。


2015/3/3:コメント欄で指摘いただいたミスを修正しました。
if ! [ “`md5sum ...の「!」を追加しました。


/usr/sbin/chkrootkit

### Suckit
if [ -f ${ROOTDIR}sbin/init ]; then
  if [ "${QUIET}" != "t" ];then printn "Searching for Suckit rootkit... "; fi
  if [ ${SYSTEM} != "HP-UX" ] && ( ${strings} ${ROOTDIR}sbin/init | ${egrep} 'HOME='   || \
          cat ${ROOTDIR}/proc/1/maps | ${egrep} "init." ) >/dev/null 2>&1
    then
      if ! [ "`md5sum ${ROOTDIR}sbin/init | cut -d ' ' -f 1`" = "`grep 'sbin/init$' /var/lib/dpkg/info/upstart.md5sums | cut -d ' ' -f 1`" ]
      then
          echo "Warning: ${ROOTDIR}sbin/init INFECTED"
      fi
  else
     if [ -d ${ROOTDIR}/dev/.golf ]; then
        echo "Warning: Suspect directory ${ROOTDIR}dev/.golf"
     else
        if [ "${QUIET}" != "t" ]; then echo "nothing found"; fi
     fi
  fi
fi

Ubuntu版 では次の2点を修正しています。

1つ目は、/sbin/init に文字列 ‘HOME’ が現れないかのチェックで誤検出していた箇所の修正です。
CentOS では問題無かったのですが、Ubuntu では次の文字列が検出されて誤検出していました。

XDG_CACHE_HOME
XDG_CONFIG_HOME

そこで、次のように、’HOME=’ と検出条件を厳しくして、誤検出を回避しています。

 if [ ${SYSTEM} != "HP-UX" ] && ( ${strings} ${ROOTDIR}sbin/init | ${egrep} 'HOME='   || \

これは、下記での修正案を反映しました。

[Bug 454566] Re: False positive for SucKit

なお、現時点で Ubuntu の apt-get でインストールされる chkrootkit はバージョン 0.49 ですが、ここ で公開されている最新版の 0.50 では、これは既に反映されています。

2つ目は、「chkrootkit のSuckit誤検知の修正」での場合と同様、 upstartパッケージの更新で init が置き換わる度に誤検出していた件を修正しています。

init の改ざんチェックで、Ubuntu用にコードを下記のように修正しています。

2015/3/3:コメント欄で指摘いただいたミスを修正しました。
if ! [ “`md5sum ...の「!」を追加しました。

if ! [ "`md5sum ${ROOTDIR}sbin/init | cut -d ' ' -f 1`" = "`grep 'sbin/init$' /var/lib/dpkg/info/upstart.md5sums | cut -d ' ' -f 1`" ]

これで、Ubuntu でもルートキット Suckit を誤検出しないようになります。

参考

[Bug 454566] Re: False positive for SucKit
linux – Can dpkg verify files from an installed package? – Server Fault

コメント

  1. echo より:

    この度、raspberry pi の設定で参考にさせていただきました。
    そのうえで、気になることがあってコメントさせていただきました。
    if [ “`md5sum ${ROOTDIR}sbin/init | cut -d ‘ ‘ -f 1`” = “`grep ‘sbin/init$’ /var/lib/dpkg/info/upstart.md5sums | cut -d ‘ ‘ -f 1`” ]
    の箇所なのですが、[] の箇所で = を使われています。しかし、= では、MD5 が正しいときに warning を出してしまわないでしょうか。自分も MD5 を確かめて同じであることを確認し、改ざんがないことを確認したので、本来では
    if ! [ 省略 ] とするべきなのではないでしょうか?
    以上です。よろしくお願い致します。

  2. パソコン鳥 より:

    仰る通り、if ! [ “`md5sum ...の「!」がありませんでしたので、修正しました。
    確認した所、本記事の公開以降に sbin/init の更新は無かったので、幸いにも本件ミスによる影響は無いようです。
    御指摘、大変ありがとうございました。

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