Kozupon.com    
 
 不審なプロセスを調査する!


不審なプロセスを調査すると言うネタで書き始めたが、そんな大それた難しいこと事をするのではなく、簡単な調査の仕方を説明する。ここでは、/procディレクトリを旨く活用して不審なプロセスの調査を行ってみる。

/procとは:
実際にはファイルシステムとして作られたディレクトリではない。ここにアクセスすると言うことは、実際のkernelのメモリ上のデータ構造にアクセスすることになる。したがって、ファイルシステムのディレクトリやファイルの実体ではない。/procはサブディレクトリに分かれていて、サブディレクトリがサービスのプロセス番号になっていて、都度に消滅したり発生したりしている。つまり、全てのプロセスは/proc以下にプロセス番号のサブディレクトリを持っている。

ここで説明するマシンの環境:
wirehork:~# more /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 7
model name : Pentium III (Katmai)
stepping : 3
cpu MHz : 598.663
cache size : 512 KB
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 2
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 sep mtrr pge mca cmov p
at pse36 mmx fxsr sse up
bogomips : 1198.45
clflush size : 32

wirehork:~# lspci
00:00.0 Host bridge: Intel Corporation 440BX/ZX/DX - 82443BX/ZX/DX Host bridge (rev 03)
00:01.0 PCI bridge: Intel Corporation 440BX/ZX/DX - 82443BX/ZX/DX AGP bridge (rev 03)
00:07.0 ISA bridge: Intel Corporation 82371AB/EB/MB PIIX4 ISA (rev 02)
00:07.1 IDE interface: Intel Corporation 82371AB/EB/MB PIIX4 IDE (rev 01)
00:07.2 USB Controller: Intel Corporation 82371AB/EB/MB PIIX4 USB (rev 01)
00:07.3 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 02)
00:0e.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+ (rev 10)
01:00.0 VGA compatible controller: nVidia Corporation NV5 [RIVA TNT2/TNT2 Pro] (rev 11)

wirehork:~# uname -a
Linux wirehork 2.6.21-2-686 #1 Debian GNU/Linux


1.不審なプロセス発見する
ある日不審なプロセスを発見、名前からしてSnifferで有ることが解った。
wirehork:~/# ps -ef
UID PID PPID C STIME TTY TIME CMD
省略
root 25554 1 0 Nov20 ? 00:00:01 ./linsniffer
root 26110 10149 0 14:05 ? 00:00:00 sshd: hoge [priv]
hoge 26112 26110 0 14:05 ? 00:00:00 sshd: hoge@pts/1
hoge 26113 26112 0 14:05 pts/1 00:00:00 -bash
root 26144 26113 0 14:13 pts/1 00:00:00 su -
root 26145 26144 0 14:13 pts/1 00:00:00 -su
root 26160 26145 0 14:45 pts/1 00:00:00 ps -ef

上記から、linsnifferのプロセスIDは、25554である。


2.プロセスIDから不審なプロセスの詳細情報をゲットする
linsnifferのプロセスID 25554 から、以下のように/proc直下の25554のディレクトリの中をViewしてみる
wirehork:~/# ls -al /proc/25554
total 0
dr-xr-xr-x 5 root root 0 2007-11-20 15:02 .
dr-xr-xr-x 88 root root 0 2007-10-03 18:13 ..
dr-xr-xr-x 2 root root 0 2007-11-21 13:24 attr
-r-------- 1 root root 0 2007-11-21 13:24 auxv
-r--r--r-- 1 root root 0 2007-11-21 13:19 cmdline
-r--r--r-- 1 root root 0 2007-11-21 13:24 cpuset
lrwxrwxrwx 1 root root 0 2007-11-21 13:24 cwd -> /tmp
-r-------- 1 root root 0 2007-11-21 13:24 environ
lrwxrwxrwx 1 root root 0 2007-11-21 13:24 exe -> /tmp/linsniffer
dr-x------ 2 root root 0 2007-11-21 13:24 fd
-r--r--r-- 1 root root 0 2007-11-21 13:24 maps
-rw------- 1 root root 0 2007-11-21 13:24 mem
-r--r--r-- 1 root root 0 2007-11-21 13:24 mounts
-r-------- 1 root root 0 2007-11-21 13:24 mountstats
-rw-r--r-- 1 root root 0 2007-11-21 13:24 oom_adj
-r--r--r-- 1 root root 0 2007-11-21 13:24 oom_score
lrwxrwxrwx 1 root root 0 2007-11-21 13:24 root -> /
-r--r--r-- 1 root root 0 2007-11-21 13:24 smaps
-r--r--r-- 1 root root 0 2007-11-21 13:19 stat
-r--r--r-- 1 root root 0 2007-11-21 13:24 statm
-r--r--r-- 1 root root 0 2007-11-21 13:19 status
dr-xr-xr-x 3 root root 0 2007-11-21 13:24 task
-r--r--r-- 1 root root 0 2007-11-21 13:24 wchan
exe -> /tmp/linsnifferから、linsnifferの実行ファイル(実体)は、/tmp直下にあることが解った。

さらに、fdディレクトリ直下を見てみる。fdディレクトリは、そのプロセスが起動した時にオープンした全てのファイルを確認できる。
wirehork:~/# ls -al /proc/25554/fd
total 0
dr-x------ 2 root root 0 2007-11-21 13:24 .
dr-xr-xr-x 5 root root 0 2007-11-20 15:02 ..
lrwx------ 1 root root 64 2007-11-21 13:39 0 -> /dev/pts/0 (deleted)
lrwx------ 1 root root 64 2007-11-21 13:39 1 -> /dev/pts/0 (deleted)
lrwx------ 1 root root 64 2007-11-21 13:39 2 -> /dev/pts/0 (deleted)
lrwx------ 1 root root 64 2007-11-21 13:39 3 -> socket:[715810]
l-wx------ 1 root root 64 2007-11-21 13:39 4 -> /tmp/tcp.log

ここで解るのは、linsnifferが実行された時に、吐き出すlogファイルが/tmp/tcp.logで有ることが解る。ここにクラッカーが必要なデータが書き込まれるようになっていることが予想される。

さて、今度はlinsnifferが実行された時のフルパスオプションの情報を見てみたい。プロセスを実行する時のフルパスコマンドは、以下のように、cmdlineファイルを見れば解る。
wirehork:/tmp# more /proc/25554/cmdline
./linsniffer
この場合は、オプションパラメータ無しで実行されたようだ。


3.実際に不審なプロセスの在処を覗いてみる
linsnifferの実行ファイルとlogファイルは/tmpディレクトリに有ることが解ったので覗いてみる。
wirehork:~/# cd /tmp

wirehork:/tmp# ls -al
total 36
drwxrwxrwt 2 root root 4096 2007-11-21 14:36 .
drwxr-xr-x 22 root root 4096 2007-11-14 11:00 ..
-rwxr-xr-x 1 root root 11144 2007-11-20 15:01 linsniffer
-rw-r--r-- 1 root root 5920 2001-01-25 09:58 linsniffer.c
-rw-r--r-- 1 root root 6 2007-11-20 15:02 sniff.pid
-rw-r--r-- 1 root root 443 2007-11-20 15:54 tcp.log

確かに、実行ファイルがあり、logファイルも存在する。確実にクラックな方に侵入されて仕掛けられたと判断する。しかし、もう既に侵入を許してしまったのだから、取り急ぎイーサーネットケーブルを外し、決してあわてず、侵入者は何処かにバックドアを仕掛けただろうと思われるので、まずは無駄だと思ってもlogに侵入の形跡があるか確認しよう。


4./proc中のプロセスのexeファイルで消してしまったファイルを復活させる
例えば、linsnifferプロセスの実行中に、慌てふためいてlinsnifferの実行ファイルを以下のように消してしまったとする。
wirehork:/tmp# rm linsniffer

lsコマンドで消えたか確認する。
wirehork:/tmp# ls -al
total 36
drwxrwxrwt 2 root root 4096 2007-11-21 14:51 .
drwxr-xr-x 22 root root 4096 2007-11-14 11:00 ..
-rw-r--r-- 1 root root 5920 2001-01-25 09:58 linsniffer.c
-rwxr-xr-x 1 root root 11144 2007-11-21 14:46 linsniffer.exebak
-rw-r--r-- 1 root root 6 2007-11-20 15:02 sniff.pid
-rw-r--r-- 1 root root 443 2007-11-20 15:54 tcp.log

確かに消えている。

プロセスが未だ実行中なので、その実行中のプロセスをコピーする。以下のように、/proc/25554/exeファイルをリネームして/tmpディレクトリへコピーする。
wirehork:/tmp# cp /proc/25554/exe /tmp/linsniffer

コピーされてるか、チェックする。
wirehork:/tmp# ls -al
total 48
drwxrwxrwt 2 root root 4096 2007-11-21 14:51 .
drwxr-xr-x 22 root root 4096 2007-11-14 11:00 ..
-rwxr-xr-x 1 root root 11144 2007-11-21 14:51 linsniffer
-rw-r--r-- 1 root root 5920 2001-01-25 09:58 linsniffer.c
-rwxr-xr-x 1 root root 11144 2007-11-21 14:46 linsniffer.exebak
-rw-r--r-- 1 root root 6 2007-11-20 15:02 sniff.pid
-rw-r--r-- 1 root root 443 2007-11-20 15:54 tcp.log
旨くコピーされている。

では、動くか実験してみよう。
wirehork:/tmp# ./linsniffer &
[1] 26371

うん、間違いなく動いているよ。
wirehork:/tmp# ps -ef | grep linsniffer
root 26371 26363 0 17:21 pts/1 00:00:00 ./linsniffer
と言うことで、プロセスが消滅してない期間なら、実行ファイル(実体)を間違って消してしまっても復活できることを覚えておいて欲しい。
以上


 
 
 



Copyright 2007 Kozupon.com.