このような時に、ここで紹介するTCT(The Coroner's Toolkit) は、同サイトの直訳曰く、不正侵入の後のUNIXシステムの死後分析のためにダン・ファーマーとウェイテス・ベネマにより作られたプログラム群です。TCTは、プロセスの実行中で有れば、実行ファイルを悪人により改ざんされたり、削除されたりしても実行中のプロセスのinode番号さえ解れば、ファイルを復活させることが出来る優れものである。つまり、仮に不正侵入されて実行ファイルを削除されても、その実行ファイルを速やかに復旧させることが出来る。実は、 ここ の4項で説明した「/proc中のプロセスのexeファイルで消してしまったファイルを復活させる」でも、これと同じ事が出来る。

[root@infosystem ~]# more /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 7
model name : Pentium III (Katmai)
stepping : 3
cpu MHz : 598.645
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 mtrr pge mca cmov pat pse
36 mmx fxsr sse
bogomips : 1198.39

[root@infosystem ~]# 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:0d.0 Ethernet controller: 3Com Corporation 3c905C-TX/TX-M [Tornado] (rev 78)
01:00.0 VGA compatible controller: nVidia Corporation NV5 [RIVA TNT2/TNT2 Pro] (rev 11)

[root@infosystem ~]# uname -a
Linux infosystem 2.6.9-55.0.12.EL #1 Fri Nov 2 10:57:39 EDT 2007 i686 i686 i386 GNU/Linux


[root@infosystem ~]# cd /usr/local/src

2007年11月現在では、 tct-1.18.tar.gz が最新であった。
[root@infosystem src]# wget http://www.porcupine.org/forensics/tct-1.18.tar.gz
--17:10:11-- http://www.porcupine.org/forensics/tct-1.18.tar.gz
=> `tct-1.18.tar.gz'
Resolving fifo...
Connecting to fifo||:8080... connected.
Proxy request sent, awaiting response... 200 OK
Length: 317,959 (311K) [application/x-tar]

100%[================================>] 317,959 119.44K/s

17:10:14 (119.16 KB/s) - `tct-1.18.tar.gz' saved [317959/317959]

[root@infosystem src]# tar zxvf tct-1.18.tar.gz

[root@infosystem src]# chown -R root.root tct-1.18

[root@infosystem src]# cd tct-1.18

[root@infosystem tct-1.18]# make

checking to make sure all the target(s) are here...
Ok, trying to find perl5 now... hang on a bit...

Perl5 is in /usr/bin/perl5.8.5

changing the source in: bin/mactime bin/grave-robber lazarus/lazarus bin/strip_tct_home extras/bdf extras/ils2mac extras/realpath

So far so good...
Looking for all the commands now...

Hmmm... can't find acctcom... moving on...

Hmmm... can't find devinfo... moving on...

Hmmm... can't find eeprom... moving on...

Hmmm... can't find format... moving on...

Hmmm... can't find modstat... moving on...

Hmmm... can't find pkginfo... moving on...

Hmmm... can't find pstat... moving on...

Hmmm... can't find rusers... moving on...

Hmmm... can't find showrev... moving on...

Hmmm... can't find swap... moving on...

Hmmm... can't find uudecode... moving on...

Hmmm... can't find xhost... moving on...

Hmmm... can't find xauth... moving on...

Ok, now doing substitutions on the shell scripts...
Changing paths in conf/paths.pl...
Putting in $TCT_HOME into lazarus/lazarus
Putting in $TCT_HOME into conf/coroner.cf
Putting in $TCT_HOME into conf/grave-robber.cf
Putting in $TCT_HOME into bin/grave-robber
Putting in $TCT_HOME into bin/mactime
Putting in $TCT_HOME into extras/bdf
Putting in $TCT_HOME into extras/ils2mac
Putting in $TCT_HOME into extras/realpath
chmod 700 .
cd src/aux; make "CC=gcc" MAKELEVEL=
gcc -DLINUX2 -O -g -c -o mymalloc.o mymalloc.c
gcc -DLINUX2 -O -g -c -o error.o error.c
gcc -DLINUX2 -O -g -c -o strerror.o strerror.c
gcc -DLINUX2 -O -g -c -o split_at.o split_at.c
ar rv aux_lib.a mymalloc.o error.o strerror.o split_at.o
ar: creating aux_lib.a
a - mymalloc.o
a - error.o
a - strerror.o
a - split_at.o
ranlib aux_lib.a
cd src/misc; make "CC=gcc" MAKELEVEL=
gcc -O -g -I. -DLINUX2 -c -o md5.o md5.c
gcc -O -g -I. -DLINUX2 -c -o md5c.o md5c.c
gcc -O -g -I. -DLINUX2 -o ../../bin/md5 md5.o md5c.o
gcc -O -g -I. -DLINUX2 -c -o timeout.o timeout.c
gcc -O -g -I. -DLINUX2 -o ../../bin/timeout timeout.o
cd src/fstools; make "CC=gcc" MAKELEVEL=
gcc -DLINUX2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -I../aux -O -g -c -o fs_buf.o fs_buf.c
gcc -DLINUX2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -I../aux -O -g -c -o fs_inode.o fs_inode.c
gcc -DLINUX2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -I../aux -O -g -c -o fs_io.o fs_io.c
gcc -DLINUX2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -I../aux -O -g -c -o fs_copy_file.o fs_copy_file.c
gcc -DLINUX2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -I../aux -O -g -c -o fs_open.o fs_open.c
gcc -DLINUX2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -I../aux -O -g -c -o ffs.o ffs.c
gcc -DLINUX2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -I../aux -O -g -c -o ffs2.o ffs2.c
gcc -DLINUX2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -I../aux -O -g -c -o ext2fs.o ext2fs.c
gcc -DLINUX2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -I../aux -O -g -c -o mylseek.o mylseek.c
ar rv fs_lib.a fs_buf.o fs_inode.o fs_io.o fs_copy_file.o fs_open.o ffs.o ffs2.o ext2fs.o mylseek.o
ar: creating fs_lib.a
a - fs_buf.o
a - fs_inode.o
a - fs_io.o
a - fs_copy_file.o
a - fs_open.o
a - ffs.o
a - ffs2.o
a - ext2fs.o
a - mylseek.o
ranlib fs_lib.a
gcc -DLINUX2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -I../aux -O -g -c -o ils.o ils.c
gcc -DLINUX2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -I../aux -O -g -o ../../bin/ils ils.o fs_lib.a ../aux/aux_lib.a
gcc -DLINUX2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -I../aux -O -g -c -o unrm.o unrm.c
gcc -DLINUX2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -I../aux -O -g -o ../../bin/unrm unrm.o fs_lib.a ../aux/aux_lib.a
gcc -DLINUX2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -I../aux -O -g -c -o icat.o icat.c
gcc -DLINUX2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -I../aux -O -g -o ../../bin/icat icat.o fs_lib.a ../aux/aux_lib.a
cd src/pcat; make "CC=gcc" MAKELEVEL=
gcc -I../aux -DLINUX2 -O -g -c -o pcat.o pcat.c
gcc -I../aux -DLINUX2 -O -g -o ../../bin/pcat pcat.o ../aux/aux_lib.a
cd src/file; make "CC=gcc" MAKELEVEL=
gcc -O -g -DLINUX2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DNEED_ERRNO_H -DMAGIC="\"`cd ../../etc; pwd`/magic\"" -c -o file.o file.c
gcc -O -g -DLINUX2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DNEED_ERRNO_H -DMAGIC="\"`cd ../../etc; pwd`/magic\"" -c -o apprentice.o apprentice.c
gcc -O -g -DLINUX2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DNEED_ERRNO_H -DMAGIC="\"`cd ../../etc; pwd`/magic\"" -c -o fsmagic.o fsmagic.c
gcc -O -g -DLINUX2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DNEED_ERRNO_H -DMAGIC="\"`cd ../../etc; pwd`/magic\"" -c -o softmagic.o softmagic.c
gcc -O -g -DLINUX2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DNEED_ERRNO_H -DMAGIC="\"`cd ../../etc; pwd`/magic\"" -c -o ascmagic.o ascmagic.c
gcc -O -g -DLINUX2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DNEED_ERRNO_H -DMAGIC="\"`cd ../../etc; pwd`/magic\"" -c -o compress.o compress.c
gcc -O -g -DLINUX2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DNEED_ERRNO_H -DMAGIC="\"`cd ../../etc; pwd`/magic\"" -c -o is_tar.o is_tar.c
gcc -O -g -DLINUX2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DNEED_ERRNO_H -DMAGIC="\"`cd ../../etc; pwd`/magic\"" -c -o print.o print.c
gcc -O -g -DLINUX2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DNEED_ERRNO_H -DMAGIC="\"`cd ../../etc; pwd`/magic\"" -c -o international.o international.c
gcc -O -g -DLINUX2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DNEED_ERRNO_H -DMAGIC="\"`cd ../../etc; pwd`/magic\"" -o ../../bin/file file.o apprentice.o fsmagic.o softmagic.o ascmagic.o compress.o is_tar.o print.o international.o
cat Magdir/Header Magdir/Localstuff Magdir/[a-z]* > ../../etc/magic
cd src/lastcomm; make "CC=gcc" MAKELEVEL=
gcc -I. -DLINUX2 -I. -O -g -c -o lastcomm.o lastcomm.c
gcc -o ../../bin/lastcomm lastcomm.o
cd src/major_minor; make "CC=gcc" MAKELEVEL=
gcc -DLINUX2 -O -g -c -o major_minor.o major_minor.c
gcc -DLINUX2 -O -g -o ../../bin/major_minor major_minor.o
cd extras/entropy; make "CC=gcc" MAKELEVEL=
gcc -DLINUX2 -I../../src/aux -O -g -o entropy entropy.c ../../src/aux/aux_lib.a -lm
cd extras/findkey; make "CC=gcc" MAKELEVEL=
gcc -DLINUX2 -I../../src/aux -O -g -o findkey findkey.c ../../src/aux/aux_lib.a
bin/major_minor > lib/major_minor.pl
rm -f bin/lazarus
ln -s `pwd`/lazarus/lazarus bin/lazarus

[root@infosystem tct-1.18]# cp bin/ils /usr/bin/

[root@infosystem tct-1.18]# cp bin/icat /usr/bin/

[root@infosystem tct-1.18]# cd /etc/

[root@infosystem etc]# ls -il passwd
552785 -rw-r--r-- 1 root root 3619 Nov 28 16:27 passwd

[root@infosystem etc]# df -m
Filesystem 1M-blocks Used Available Use% Mounted on
/dev/hda2 5722 4631 800 86% /
/dev/hda1 76 31 42 43% /boot
none 189 0 189 0% /dev/shm
/dev/hdb1 6054 2945 2802 52% /usr

[root@infosystem etc]# icat /dev/hda2 552785


[root@infosystem etc]# cd /usr/sbin/

[root@infosystem sbin]# cp sshd sshd.bak

[root@infosystem sbin]# rm sshd
rm: remove regular file `sshd'? y

[root@infosystem sbin]# lsof -c ssh | more
sshd 2141 root cwd DIR 3,2 4096 2 /
sshd 2141 root rtd DIR 3,2 4096 2 /
sshd 2141 root txt REG 3,65 313008 33487 /usr/sbin/sshd (deleted)
sshd 2141 root mem REG 3,2 941024 356284 /lib/libcrypto.so.0.9.7a
sshd 2141 root mem REG 3,65 63624 694619 /usr/lib/libz.so.
sshd 2141 root mem REG 3,2 97120 356320 /lib/libnsl-2.3.4.so
sshd 2141 root mem REG 3,2 1529204 356252 /lib/tls/libc-2.3.4.so
sshd 2141 root mem REG 3,2 81120 356317 /lib/libresolv-2.3.4.so
sshd 2141 root mem REG 3,2 112168 356238 /lib/ld-2.3.4.so
sshd 2141 root mem REG 3,65 136016 694631 /usr/lib/libk5crypto.so.3.0
sshd 2141 root mem REG 3,65 82944 694883 /usr/lib/libgssapi_krb5.so.2.2
sshd 2141 root mem REG 3,2 7004 356333 /lib/libcom_err.so.2.1

[root@infosystem sbin]# icat /dev/hdb1 33487 > sshd.recovered

[root@infosystem sbin]# ls -al sshd.recovered
-rw-r--r-- 1 root root 313008 Nov 29 11:47 sshd.recovered

[root@infosystem sbin]# cp sshd.recovered sshd

[root@infosystem sbin]# chmod 755 sshd

[root@infosystem sbin]# ls -al sshd
-rwxr-xr-x 1 root root 313008 Nov 29 11:48 sshd

[root@infosystem sbin]# ls -al sshd.bak
-rwxr-xr-x 1 root root 313008 Nov 29 11:47 sshd.bak





Copyright 2007 Kozupon.com.