サーバークラッキング
|
どうもおかしい?
開発用として使用していた某有名メーカーのサーバーが、どうも様子がおかしい。
それは、サーバーを一度シャットダウンさせようとして、いっこうに終了する気配が無いと気が付いた。その時は、TTSSHからサーバーへログインして作業を進めていたのだが、「終了しないみたいだよ」とサーバー室から伝えられた。
なんでだろうと思いながらサーバー室へ下りて行き、コンソールを立ち上げて状況を確認すると、どうしてか、以下のメッセージが出て進まない様子だった。シャットダウンプロセス中に発生したエラーのようである。
| modprobe: Can't locate module ppp0 |
再起動
こうなってしまうと、どうしようもないので、リセットボタンからサーバーを再起動するほか無かった。サーバーは一度シャットダウンされ、再起動する。grubの画面、Linuxのブートプロセスの開始、ここまではいつもと変わりなく、特に大きなことになると考えてもいなかった。
先ほど、正常終了させなかった為にチェックディスクを走らせる。それも難なくクリアし、マウント、ネットワークインターフェースの起動に差し掛かったところ・・・、
| Bringing up loopback interface: lo |
で止まってしまうのだった。
どうして?
しばらく待つが、何も応答がない。これまたどうしようもないので、Ctrl + Alt
+ Delから再起動を掛けようとするが、シャットダウン時にまた modprobeのエラーが出力され、止まってしまった。どうもおかしい。ppp0のインターフェースなど使っていない。OSだって、この再起動するまでは正常に稼動していたのだから。
またもリセットボタンを押す羽目になった。シャットダウンが完了し、シングルモードへ切り替えて起動を開始。シングルモードであれば、先ほどストップしてしまった
loopback interface の起動までは行かない。チェックディスクを終え、シングルモードで起動した。
ネットワークが立ち上がらない
まず先に、データ、プログラムのソースが無事かどうかを確認した。大丈夫、ディスクはマウントもされているし、ファイルも正常に読み取ることができる。じゃあ、バックアップしようと思うのだが、一つ、異変に気が付いた。
んん!?ネットワークが立ち上がらない?
Ctrl + Cで一度キャンセル。ifconfigの結果を見ると、loopbackは見える。eth0も見える、が、eth0に固定で振っているIPアドレスが振られていない。もちろん、pingも
network unreachable で届かない。しょうがないのでとりあえず再起動を掛けるが、またも
modprobe で止まってしまう。これまた仕方が無いので、リセットボタンによる再起動を行なった。
何度繰り返しても、シングルモードで立ち上げなければネットワーク起動時に止まってしまうし、シャットダウンすれば
modprobe ppp0 で必ず止まってしまう。無常にも、貴重な時間は刻々と過ぎ去っていく・・・。ps
コマンドでプロセスを見てみると、奇妙なプロセスが見つかった。
# ps -ax
.....(省略)
194 ? T 0:00 rm -f /lib/modules/preferred
200 ? Z 0:00 [rm <zombie>]
222 ? SW 0:00 [kjournald]
252 ? T 0:00 rm -f /var/run/proftpd/*
256 ? Z 0:00 [rm <zombie>]
267 ? T 0:00 rm -f /var/run/runlevel.dir
268 ? Z 0:00 [rm <zombie>]
283 ? T 0:00 chgrp utmp /var/run/utmp
/var/log/wtmp
285 ? Z 0:00 [chgrp <zombie>]
286 ? T 0:00 chmod 0664 /var/run/utmp
/var/log/wtmp
287 ? Z 0:00 [chmod <zombie>]
348 1 S 0:00 init [S]
349 1 S 0:00 /bin/sh
569 1 T 0:00 hostname
570 1 Z 0:00 [hostname <zombie>]
.....(省略) |
んんんん!?
なんで rmコマンドが実行されている??
なんでゾンビプロセスがこんなにたくさん発生している??
誰?
# /sbin/ifconfig eth0 up
# |
何度か試すうちに、この方法でネットワークが立ち上がるようになった。ifconfig
-a の結果でも、eth0にIPアドレスが振られている。これに、routeコマンドでゲートウェイを設定し、sshdサービスも立ち上げ、ネットワークにつなげられる状態となった。
chkrootkitを使ってみた
とりあえず、ネットワークからSSHでログインできる準備はできた。が、先ほど実行した
px コマンドの実行結果が非常に気になった。シングルモードでプログラムは何も立ち上げていないはずなのに、身に覚えのないコマンドが実行されている。しかも、実行されているコマンドはファイル削除コマンドで、削除しているのはログファイル??
ちょっと怖くなったので、chkrootkit (http://www.chkrootkit.org/)をダウンロードし、インストール。コンパイルしてすぐに、実行してみた。が、どうも、途中で止まってしまう。chkrootkitが途中で止まってしまうこと自体がおかしい。健康なサーバーならささっとチェックが終わってしまうものだ。
# tar zxfv chkrootkit.tar.gz
# cd chkrootkit-0.44
# make sense
.....(コンパイル実行)
# ./chkrootkit | tee -a ./chkrootkit.txt
|
Ctrl + C で何度もキャンセルし、再実行を繰り返していくうちに、かろうじてチェックが完了できた。全て完了せずとも分かってしまったことが一つある。コマンドが置き換えられていたのだ!teeコマンドで取った出力結果から見ると分かるが、INFECTED の結果になったコマンドがいくつかあった。それは、 ls, ps, netstat, top の4つ。クラッキングされていた!!
この状態で、ネットワークに接続されているのはまずい。インターネットに出られてしまえば、誤って社内のパスワードを入力してしまうと漏洩する危険もある。まずは
G/W設定を外すが、結局はネットワークケーブルを外して、とりあえずこのサーバー孤立させた。時既に遅し・・・となっていなければ良いのだが・・・。
状況調査
いつごろやられたのか、lastコマンドを実行すると、まったく知らないIPアドレスからログインされていることが分かった。10月1日の20:00〜22:00がどうやら怪しい。
# last
......(正常な行は省略)
oracle pts/1 210.212.161.2 Fri Oct 1 21:25 - 21:51 (00:26)
oracle pts/1 210.212.161.2 Fri
Oct 1 21:17 - 21:18 (00:00)
oracle pts/1 211-23-51-222.hi Fri Oct
1 20:53 - 20:54 (00:00) |
次は、置き換えられている実行ファイルの確認。/bin下のファイルをタイムスタンプ順にソートしてみた。すると10月1日の21時がタイムスタンプの実行ファイルがずらっと並んだ。こんなに置き換えられているってことですか!?
# cd /bin
#ls -lt total 6248
-rwsr-xr-x 1 root root 27532 Oct
1 21:29 ping
-rwxr-xr-x 1 root mail 70588 Oct
1 21:29 mail
-rwxr-xr-x 1 root root 8556
Oct 1 21:29 mktemp
-rwxr-xr-x 1 root root 13400 Oct 1 21:29 hostname
-rwxr-xr-x 1 root root 34736 Oct
1 21:29 netstat
-rwxr-xr-x 1 root root 52892 Oct
1 21:29 cpio
-rwxr-xr-x 1 root root 20852 Oct 1 21:29 setserial
-rwxr-xr-x 1 root root 20828 Oct
1 21:29 chgrp
-rwxr-xr-x 1 root root 77084 Oct
1 21:29 ed
-rwxr-xr-x 2 root root 228956 Oct 1 21:29 gawk-3.1.0
-rwxr-xr-x 1 root root 21052 Oct
1 21:29 chmod
-rwxr-xr-x 1 root root 22684 Oct
1 21:29 chown
-rwxr-xr-x 1 root root 40700 Oct 1 21:29 cp
-rwxr-xr-x 1 root root 32956 Oct
1 21:29 dd
-rwxr-xr-x 1 root root 30908 Oct
1 21:29 df
-rwxr-xr-x 1 root root 24444 Oct 1 21:29 ln
-rwxr-xr-x 1 root root 36852 Oct
1 21:29 ps
-rwxr-xr-x 1 root root 19932 Oct
1 21:29 mknod
-rwxr-xr-x 2 root root 228956 Oct 1 21:29 gawk
-rwxr-xr-x 1 root root 47868 Oct
1 21:29 mv
-rwxr-xr-x 1 root root 29980 Oct
1 21:29 rm
-rwxr-xr-x 1 root root 15228 Oct 1 21:29 rmdir
-rwxr-xr-x 1 root root 40788 Oct
1 21:29 ls
-rwxr-xr-x 1 root root 21884 Oct
1 21:28 mkdir
lrwxrwxrwx 1 root root
2 Jun 11 2003 ex -> vi
lrwxrwxrwx 1 root root
2 Jun 11 2003 rvi -> vi
lrwxrwxrwx 1 root root
2 Jun 11 2003 rview -> vi
lrwxrwxrwx 1 root root
2 Jun 11 2003 view -> vi
lrwxrwxrwx 1 root root
4 Jun 11 2003 csh -> tcsh |
そして、ハッと我にかえる。ps も ls も改ざんされているのだから、この出力結果は信用できないじゃない!まず先に、置き換えられてしまった正常な
ls, ps, netstat, top コマンドを探すことにした。ちょこちょこっとディレクトリを巡っていると、運良く、/usr/lib/libshtiftディレクトリに、それらしき実行ファイルを見つけた。そこには、ls, ps, netstat,
topファイルがある。実行権も持っていて、タイムスタンプも正常な実行ファイルのそれと同じものだった。
そこで、/bin/ps と /usr/lib/libshtift/ps の出力結果を見比べてみると・・・
'smbd -D' と '(swapd)'プロセスがどうやら、改ざんされたps コマンドは表示されないことが分かる。
# /bin/ps -ax
PID TTY STAT TIME COMMAND
1 ? S 0:05 init [S]
2 ? SW 0:00 [keventd]
3 ? SWN 0:00 [ksoftirqd_CPU0]
5 ? SW 0:00 [kreclaimd]
6 ? SW 0:01 [bdflush]
7 ? SW 0:00 [kupdated]
8 ? SW 0:00 [mdrecoveryd]
15 ? SW 0:00 [scsi_eh_2]
18 ? SW 0:00 [kjournald]
105 ? SW 0:00 [khubd]
183 ? S 0:00 minilogd
194 ? T 0:00 rm -f /lib/modules/preferred
200 ? Z 0:00 [rm <zombie>]
222 ? SW 0:00 [kjournald]
252 ? T 0:00 rm -f /var/run/proftpd/*
256 ? Z 0:00 [rm <zombie>]
267 ? T 0:00 rm -f /var/run/runlevel.dir
268 ? Z 0:00 [rm <zombie>]
283 ? T 0:00 chgrp utmp /var/run/utmp /var/log/wtmp
285 ? Z 0:00 [chgrp <zombie>]
286 ? T 0:00 chmod 0664 /var/run/utmp /var/log/wtmp
287 ? Z 0:00 [chmod <zombie>]
348 1 S 0:00 init [S]
349 1 S 0:00 /bin/sh
569 1 T 0:00 hostname
570 1 Z 0:00 [hostname <zombie>]
2100 ? T 0:00 /bin/ps auwx
2101 ? Z 0:00 [ps <zombie>]
5277 ? T 0:00 /bin/ps -V
5280 ? Z 0:00 [ps <zombie>]
8159 ? S 0:00 /usr/sbin/sshd
8207 ? S 0:00 /usr/sbin/sshd
8245 ? S 0:00 /bin/bash
8289 ? S 0:00 /usr/sbin/sshd
8290 ? S 0:00 -bash
8437 ? S 0:00 /usr/sbin/sshd
8438 ? S 0:00 -bash
8480 ? S 0:00 su - manager
8517 ? S 0:00 su
8518 ? S 0:00 bash
10365 ? T 0:00 /bin/ps -V
10368 ? Z 0:00 [ps <zombie>]
20318 ? T 0:00 cp /usr/lib/libshtift/ls /bin/
20319 ? Z 0:00 [cp <zombie>]
21265 ? S 0:00 /bin/sh ./chkrootkit
21266 ? S 0:00 tee -a /var/backup/chkrootkit.txt
21463 ? S 0:00 /bin/egrep ^...s
21464 ? T 0:00 /bin/ls -l /bin/grep
21465 ? Z 0:00 [ls <zombie>]
21472 ? S 0:00 /usr/sbin/sshd
21473 ? S 0:00 -bash
21548 ? R 0:00 /bin/ps -ax
21549 ? R 0:00 /bin/ps -ax
8208 ? S 0:00 -bash
8481 ? S 0:00 -bash |
|
# /usr/lib/libshtift/ps -ax
PID TTY STAT TIME COMMAND
1 ? S 0:05 init [S]
2 ? SW 0:00 [keventd]
3 ? SWN 0:00 [ksoftirqd_CPU0]
4 ? SW 0:01 [kswapd]
5 ? SW 0:00 [kreclaimd]
6 ? SW 0:01 [bdflush]
7 ? SW 0:00 [kupdated]
8 ? SW 0:00 [mdrecoveryd]
15 ? SW 0:00 [scsi_eh_2]
18 ? SW 0:00 [kjournald]
35 ? S 0:00 smbd -D
105 ? SW 0:00 [khubd]
183 ? S 0:00 minilogd
194 ? T 0:00 rm -f /lib/modules/preferred
200 ? Z 0:00 [rm <defunct>]
222 ? SW 0:00 [kjournald]
252 ? T 0:00 rm -f /var/run/proftpd/*
256 ? Z 0:00 [rm <defunct>]
267 ? T 0:00 rm -f /var/run/runlevel.dir
268 ? Z 0:00 [rm <defunct>]
283 ? T 0:00 chgrp utmp /var/run/utmp /var/log/wtmp
285 ? Z 0:00 [chgrp <defunct>]
286 ? T 0:00 chmod 0664 /var/run/utmp /var/log/wtmp
287 ? Z 0:00 [chmod <defunct>]
348 tty1 S 0:00 init [S]
349 tty1 S 0:00 /bin/sh
569 tty1 T 0:00 hostname
570 tty1 Z 0:00 [hostname <defunct>]
631 tty1 S 0:02 (swapd)
2100 ? T 0:00 /bin/ps auwx
2101 ? Z 0:00 [ps <defunct>]
5277 ? T 0:00 /bin/ps -V
5280 ? Z 0:00 [ps <defunct>]
8135 tty1 S 0:00 (swapd)
8156 tty1 S 0:00 (swapd)
8159 ? S 0:00 /usr/sbin/sshd
8207 ? S 0:00 /usr/sbin/sshd
8208 pts/0 S 0:00 -bash
8245 pts/0 S 0:00 /bin/bash
8289 ? S 0:00 /usr/sbin/sshd
8290 ? S 0:00 -bash
8437 ? S 0:00 /usr/sbin/sshd
8438 pts/2 S 0:00 -bash
8480 pts/2 S 0:00 su - manager
8481 pts/2 S 0:00 -bash
8517 pts/2 S 0:00 su
8518 pts/2 S 0:00 bash
10365 pts/2 T 0:00 /bin/ps -V
10368 pts/2 Z 0:00 [ps <defunct>]
20318 pts/0 T 0:00 cp /usr/lib/libshtift/ls /bin/
20319 pts/0 Z 0:00 [cp <defunct>]
21265 pts/2 S 0:00 /bin/sh ./chkrootkit
21266 pts/2 S 0:00 tee -a /var/backup/chkrootkit.txt
21463 pts/2 S 0:00 /bin/egrep ^...s
21464 pts/2 T 0:00 /bin/ls -l /bin/grep
21465 pts/2 Z 0:00 [ls <defunct>]
21472 ? S 0:00 /usr/sbin/sshd
21473 pts/3 S 0:00 -bash
21550 pts/0 S 0:00 /bin/ps -ax
21562 pts/3 R 0:00 /usr/lib/libshtift/ps -ax
21563 pts/3 R 0:00 /usr/lib/libshtift/ps -ax
|
|
/bin下の ls コマンドでは見れなかったが、/usr/lib/libshtiftディレクトリ下の ls コマンドであれば、'sambd\ -D'という実行ファイルと、'(swapd)' という実行ファイルがあることが見て取れた。ファイルの日付も10月1日となっており、確実にこれはクラッキング時に置かれた不正な実行ファイルである。
おそらく、正常なものであろう /usr/lib/libshtift ディレクトリ下の実行ファイルを元の場所に戻したい。そこで、cpコマンドで/binディレクトリ内にコピーを試みるものの、'permisson
deny' のエラーが返り、上書きコピーができなかった。rootなのに?なぜ?
どうしようもなかったので、aliasコマンドで ls等のコマンドを無理やり /usr/lib/libshtift
ディレクトリ下のファイルに結びつけて調査を継続することにした。
ディレクトリ調査でルートディレクトリから確認していたところ、奇妙な名前のディレクトリが作成されていることが分かった。'.... 'という5文字からなるディレクトリで、ls に -aオプションをつけなければひょうじすることができず、かつ、最後の1文字が半角スペースを使用しており、単純に
ls -a '....' を実行しても no such file or directory となる。クラッカーはちょっと工夫をしているようである・・・。その中には正体は不明だが、怪しいファイルが並んでいた。これがrootkitのインストーラ?
# ls
drwxr-xr-x 21 root root 4096 Oct 20 16:47 .
drwxr-xr-x 21 root root
4096 Oct 20 16:47 ..
drwxr-xr-x 3 root root
4096 Oct 1 21:29 ....
-rw-r--r-- 1 root root
0 Oct 20 16:47 .autofsck
-rw------- 1 root root
4717 Oct 20 16:41 .bash_history
drwxr-xr-x 2 root root
4096 Oct 1 21:29 bin
.....(省略)
# cd /....\ /
# ls
mule
# ls -l ./mule
total 268
-rwxr-xr-x 1 root root
16042 Oct 20 18:46 ava
-rwxr-xr-x 1 root root
3725 Feb 12 2002 chattr.tgz
-rwx--x--x 1 root root
4490 Dec 14 2003 install
-rwxr-xr-x 1 root root
5386 Apr 19 2002 kde.c
-rw-r--r-- 1 root root
59058 Feb 14 2004 muh.tgz
-rwxr-xr-x 1 root root 79279 Feb 12 2002 pico.tgz
-rwx--x--x 1 root root
11261 Oct 20 18:46 swapd2
drwxr-xr-x 2 root root
4096 Oct 1 21:35 vi.recover
-rwxr-xr-x 1 root root
59002 Feb 12 2002 wget.tgz
-rw-r--r-- 1 root root
6 Oct 1 21:29 x.pid
# ls -l ./muie/vi.recover/
total 236
-rw------- 1 root root
32486 Oct 1 21:35 log
-rw------- 1 root root
41483 Jun 19 2003 messages
-rw-r--r-- 1 root root 437 Oct 1 21:34 muhrc
-rw------- 1 root root
6 Oct 1 21:35 pid
-rwxr-xr-x 1 518 518
150576 Oct 20 19:17 syslogd -m 0
|
興味本位で、置き換えられたコマンド(ls, ps, netstat, top)をWindowsにコピーしたところ、すぐさまウィルスバスターが反応した。
これらはELS_RST.Bというウィルス。
トレンドマイクロ(www.trendmicro.com)では、
This backdoor malware runs on Linux/UNIX platforms and infects ELF files
in the current and /bin directories. This Linux backdoor and virus
compromises system security by allowing remote users to manipulate and access infected machines.
【Excite翻訳】この秘密の悪製品はLinux/UNIXプラットフォーム上で走り、流れと/binのディレクトリー中のELFファイルを感染させます。この秘密のLinuxおよびウィルスは、遠隔のユーザが感染した機械を操作しアクセスすることを可能にすることによりシステム・セキュリティを危険にさらします。
とある。コワイコワイ・・・。
結局のところ、開発サーバーだし、緊急性は低いし、とりあえずはOS入れなおしで対処することにしました。必要なソースファイル、Oracleのダンプも取れ、あとはリストアするのみです。
今回の敗因は、Red Hat Linuxのアドバンスドサーバー(RH7.2相当?)でかなり古かったこと、それにパッチを全く適用していなかったこと、開発を終えてしばらく放置していたこと、などが上げられる。Linux
= 安全 というのは必ずしも誤りではないが、この開発サーバーのような状態ではガッチリとセキュリティ対策をしているWindowsサーバーには、安全性は足元にも及ばない。しかも、今回は完全にroot権限取られ、おそらく好き勝手に色々できた状態だったであろう。
lastコマンドで出てきた、おそらくクラッカーが進入してきた元であろうIPアドレスを見ても、どうやら穴をあけられているようで、踏み台の踏み台にされていただけのような・・・。いずれにしても、社内ネットワークには直結してないサーバーであり、個人情報が含まれたデータベースも無く、被害は(どれくらいあるか知らないが)今のところ見えていない。今回のことを教訓に、運用のポリシーや人員の役割分担等、課題を解決していく必要があるだろう(ちょっとマジで)。 |
|