CentOS6のサーバで rootkit検知ツール chkrootkit を導入していますが、最近 chkrootkitが、Suckit による /sbin/init の改ざんを検知しました。
結果として誤検知だったのですが、なぜ誤検知するのか調べ、誤検知を回避するように chkrootkitを修正してみました。
ファイルが改ざんされているかのチェック方法
chkrootkit が、Suckit による /sbin/init の改ざんを検知した際のメッセージは下記です。
for Suckit rootkit... Warning: /sbin/init INFECTED
同様の事例を探すと誤検出のようです。
rootkit検知ツール「chkrootkit」からのメールについて | Public-T
自宅サーバー構築メモ(CentOS) –
サーバーが改竄された!?chrootkitの誤検知でした。 « パソコンやホームページに関するITの部屋
先日、CentOS6の upstartパッケージが更新されました。
それに伴い init も更新されたので、この更新を Suckit による /sbin/init の改ざんと検知したようです。
実際に改ざんされていないかの確認は、rpm -V `rpm -qf /sbin/init` の実行で判断します。
なにも表示されなかったら、改ざんはされていないと判断します。
実行結果は何も出力無しで、改ざんは無く、一安心でした。
なお、rpm -qf /sbin/init で /sbin/init がどのパッケージに含まれているかを出力します。
こちらの環境では upstart-0.6.5-12.el6_4.1.x86_64 でした。
rpm -V パッケージ名 では、指定したパッケージのファイルの MD5 チェックサム等を、rpm データベースに格納されているパッケージ情報と比較します。
改ざんがあった場合、下記のような表示がなされます。
..5....T. /sbin/init
最初の8文字は、比較の結果を示します。表示される文字は、次を意味しています。
S | ファイルサイズが異なっている |
5 | MD5チェックサムが異なる |
L | シンボリックリンクが変更されている |
T | ファイルの更新時刻が変更されている |
D | デバイスファイルが変更されている |
U | ファイルの所有者が変更されている |
G | ファイルの所有グループが変更されている |
M | ファイルのパーミッションが変更されている |
例えば、上記の例では、5とTが表示されているので、MD5チェックサムが異なり(=ファイルの中身が異なっている)、ファイルの更新時刻も変更されている、となります。
なぜ誤検知するのか
さて、なぜ chkrootkit は誤検知するのでしょうか?
chkrootkit(ファイル名が chkrootkit です)で Warning: /sbin/init INFECTED と出力している箇所は以下のようです。
if [ ${SYSTEM} != "HP-UX" ] && ( ${strings} ${ROOTDIR}sbin/init | ${egrep} HOME || \ cat ${ROOTDIR}/proc/1/maps | ${egrep} "init." ) >/dev/null 2>&1 then echo "Warning: ${ROOTDIR}sbin/init INFECTED" else
cat ${ROOTDIR}/proc/1/maps | ${egrep} “init.” の実行結果が何か出力されていれば、 INFECTED と出力しています。
/proc/1/maps の 1 はプロセス番号を示し、最初に起動されるプロセスです。
最初に起動されるのは init なので、/proc/1/maps は init のメモリマップです。
こちらの環境では、cat ${ROOTDIR}/proc/1/maps | ${egrep} “init.” は cat /proc/1/maps | egrep “init.” でした。
ここで、yum update upstart で upstartを更新すると、リブート前では、
# cat /proc/1/maps | /bin/egrep "init." 7f23e2d70000-7f23e2d93000 r-xp 00000000 fd:00 524842 /sbin/init (deleted) 7f23e2f92000-7f23e2f94000 r--p 00022000 fd:00 524842 /sbin/init (deleted) 7f23e2f94000-7f23e2f95000 rw-p 00024000 fd:00 524842 /sbin/init (deleted)
となりました。
/sbin/init (deleted) と deleted が付いていますが、ロードしたファイルが、その後、削除された時にメモリマップの出力では deleted になるようです。
upstartパッケージの更新により、initファイルの更新(削除->作成)が行われた為、メモリマップの出力で deleted の表記が付いたようです。
そのため、/bin/egrep “init.” で /sbin/init (deleted) の行がひっかかるようになり、chkrootkit で誤検知したようです。
ここでリブートした後では、cat /proc/1/maps | egrep “init.” の結果は何も表示されません。
/proc/1/maps の /sbin/init が含まれる行は下記で、initの後に何も文字が無いので、/bin/egrep “init.” でひっかかりません。
7f38aca32000-7f38aca55000 r-xp 00000000 fc:03 131100 /sbin/init 7f38acc54000-7f38acc56000 r--p 00022000 fc:03 131100 /sbin/init 7f38acc56000-7f38acc57000 rw-p 00024000 fc:03 131100 /sbin/init
そのため、リブートすると rootkit での誤検知が無くなるのです。
そもそも、検出しようとした rootkit の SucKit は、init を改ざんするようです。
その為、chkrootkit では、先述のように、/proc/1/maps ファイルをチェックすることで init が置き換わっていないかチェックしていますが、これが、アップデートによる init の更新でも該当している為、誤検知となったようです。
chkrootkitの修正
リブートすれば誤検知はなくなるものの、 このままでは upstartパッケージの更新で init が置き換わる度に、一度は検知のメッセージが出ることになります。
また、手動でチェックするまでは本当に誤検知か判断できず、 実際に rootkit に感染した場合は発見が遅れることになります。
そこで、chkrootkit を修正することにします。
誤検知をしないようにするには、SucKit の識別方法を変更する必要がありますが、探してみたところ、SucKit が動作しているかの判別方法は見つかりませんでした。
その為、現状の判定方法は変更できないので、条件判定をもう1つ加えて、rpm -V `rpm -qf /sbin/init` で何も出力されなければ、未検出、としました。
chkrootkit(ファイル名が chkrootkit です)の
### Suckit
で始まる箇所を下記のように修正します。赤字の箇所が追加箇所です。
こちらの環境では、EPELリポジトリよりchkrootkitを yum –enablerepo=epel install chkrootkit でインストールしましたので、/usr/lib64/chkrootkit-0.49/chkrootkit を修正しました。
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 ! rpm -V `rpm -qf /sbin/init` >/dev/null 2>&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
これで、今後も upstartパッケージの更新で init が置き換わっても誤検知することはありません。
当然ですが、本当に改ざんされた場合は、問題なく検知はなされます。
参考
Pangeia Informática – Página Inicial
rootkit検知ツール「chkrootkit」からのメールについて | Public-T
自宅サーバー構築メモ(CentOS) –
サーバーが改竄された!?chrootkitの誤検知でした。 « パソコンやホームページに関するITの部屋
Man page of RPM
Man page of PROC
コメント
情報掲載ありがとうございます。助かりました!