Kozupon.com    
 
 不正侵入を受けているか判断する!


侵入されてしまったのか、そうでないのかを判断するには何はともあれ、そのホストのシステムの現状を把握するのが先決だと考える。本当に侵入されたのか、そうだとしたらどのくらいの被害を受けたのか等を有る程度冷静な判断が必要になってくる。こんな場合、慌ててしまうのがつねだが、適切な対策を施すには冷静な判断が必要だと考える。
何はともあれ他人に迷惑をかけないために、対策としてネットワークケーブルを外してしまうのは、セキュリティ対策の一つの極意だが、本当に侵入されているかの判断がつかない限り、サーバサービスを安易に停止させるべきでは無いと思う。
したがって、まず何よりも侵入をされたか否かを的確に判断しよう。初心者に多いのは、「何はともあれ再起動すれば直るのではないか。」という判断である。確かに、再起動せざる負えないときは有る。しかし、クラックな方に侵入されてたとしたら、ロジックボム(システムを破壊するようなプログラムのこと)が仕掛けれらているかもしれないのだ。
俺がクラッカーなら、再起動した瞬間とかユーザがrootでログインした瞬間をトリガーにして悪意のプログラムを実行させようとするに違いない。ここでは、不正侵入を受けているか否かを判断する調査方法を説明するが、すでに侵入されているとしたら、調査に必要なログ達はすでに改ざんされている可能性がある。したがって、このような場合の調査は無意味に終わることも有るので了解願いたい。

ここでの検査対象ホストOS:RedHat系Linux


1.ケーブルを外す前にホストの中身を調査する
ケーブルを抜く前に、これから説明することを行ってみよう。

1)ホストにログインする
敵は、rootでログインしてくる可能性があるため感づかれるのを防ぐ意味で、こちらは一般ユーザでログインする。さらに、作業もユーザアカウントで出来る作業はユーザアカウントで行うようにする。必要な時だけ、sudoコマンドでrootになって作業すればいい。

2)ネットワークの状態を把握する
ユーザでログインしたら、
■ wコマンド

[mity@yh mity]$ w
午前10時42分 稼働 80日間, 3時02分, 1 ユーザ, 負荷平均率: 0.00, 0.00, 0.00 ユーザー 端末 場所 ログイン時刻 待機 JCPU PCPU 現プロセ ス名
mity pts/0 192.168.0.27 午前10時42分 0.00秒 0.08秒 0.03秒 w

■ whoコマンド

[mity@yh mity]$ who -H
ユーザ 端末 ログイン時刻 ログイン元
mity pts/0 Jan 20 10:42 (192.168.0.27)

■ lastコマンド
lastコマンドは、以下のように-nパラメータで表示行数を制限できる。

[mity@yh mity]$ last -10
mity pts/0 192.168.0.27 Fri Jan 20 10:42 still logged in
moriya pts/0 192.168.0.25 Tue Jan 17 10:39 - 10:42 (00:02)
mity pts/0 192.168.0.27 Mon Jan 16 16:33 - 16:43 (00:09)
moriya pts/0 192.168.0.25 Fri Jan 13 10:33 - 10:35 (00:02)
mity pts/0 192.168.0.27 Thu Jan 12 16:38 - 16:38 (00:00)
mity pts/0 192.168.0.27 Thu Jan 12 15:15 - 15:16 (00:00)
mity pts/0 192.168.0.27 Wed Jan 11 16:56 - 17:00 (00:03)
moriya pts/0 192.168.0.25 Tue Jan 10 14:37 - 14:44 (00:06)
moriya pts/0 192.168.0.25 Thu Jan 5 08:53 - 08:56 (00:03)

のようなコマンドでログイン状況をしらべる。侵入された場合は、このいずれかのコマンドから一切の情報が得られないから気をつけること。むかつくクラッカーは、syslogを停止させて/var/logのファイル全てを消し去る場合がある。

■ netstatコマンド

[mity@yh mity]$ netstat -an | more
稼働中のインターネット接続 (サーバと確立)
Proto 受信-Q 送信-Q 内部アドレス 外部アドレス 状態
tcp 0 0 0.0.0.0:8007 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:5432 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN
tcp 0 0 192.168.0.43:139 192.168.0.27:62146 ESTABLISHED
tcp 0 0 192.168.0.43:139 192.168.0.231:1143 ESTABLISHED
tcp 0 20 192.168.0.43:22 192.168.0.27:62409 ESTABLISHED
tcp 0 0 192.168.0.43:139 192.168.0.27:62299 ESTABLISHED
udp 0 0 192.168.0.43:137 0.0.0.0:*
udp 0 0 0.0.0.0:137 0.0.0.0:*
udp 0 0 192.168.0.43:138 0.0.0.0:*
udp 0 0 0.0.0.0:138 0.0.0.0:*
udp 0 0 127.0.0.1:1512 0.0.0.0:*
udp 0 0 127.0.0.1:1515 0.0.0.0:*
udp 0 0 127.0.0.1:1516 0.0.0.0:*
稼働中のUNIXドメインソケット (サーバと確立)
Proto RefCnt フラグ タイプ 状態 Iノード パス
unix 8 [ ] DGRAM 660 /dev/log
unix 2 [ ACC ] STREAM LISTENING 1080 /tmp/.s.PGSQL.5432
unix 2 [ ACC ] STREAM LISTENING 906 public/cleanup
unix 2 [ ACC ] STREAM LISTENING 913 private/rewrite
unix 2 [ ACC ] STREAM LISTENING 917 private/bounce
省略

このコマンドを実行して、ネットワークの接続状況とLISTEN(待ち受け)ポートを確認する。尚、LISTENポートとは、待ち受け状態になっているTCPやUDPポートである。見知らぬポートがLISTEN状態になっていたら、後でそのポートで動作しているプロセスを調べるために、 ポート番号を控えておく。さらに、そのポートと通信しているホストを発見した場合も、そのホストのIPアドレスやポート番号及び接続時間を記録しておく。

3)プロセスを確認する
不審なサービスが立ち上がってないかを確認する。

[mity@yh mity]$ ps -axf | more
PID TTY STAT TIME COMMAND
1 ? S 0:03 init [3]
2 ? SW 0:00 [keventd]
3 ? SW 0:00 [kapmd]
4 ? SWN 0:00 [ksoftirqd_CPU0]
5 ? SW 0:48 [kswapd]
6 ? SW 0:00 [bdflush]
7 ? SW 0:00 [kupdated]
8 ? SW 0:00 [khubd]
9 ? SW 0:05 [kjournald]
128 ? SW< 0:00 [mdrecoveryd]
135 ? SW 0:00 [kjournald]
427 ? S 0:00 syslogd -m 0
432 ? S 0:00 klogd -2
488 ? S 13:15 /usr/sbin/snort -u snort -g snort -s -d -D -i eth0 -l
500 ? S 0:00 inetd
513 ? S 0:10 /usr/sbin/sshd
14481 ? S 0:00 \_ sshd: mity [priv]
14483 ? S 0:00 \_ sshd: mity@pts/0
14484 pts/0 S 0:00 \_ -bash
14524 pts/0 R 0:00 \_ ps -axf
14525 pts/0 S 0:00 \_ more
593 ? S 0:00 /usr/lib/postfix/master
601 ? S 3:53 \_ qmgr -l -t fifo -u
14474 ? S 0:00 \_ pickup -l -t fifo -u
607 ? S 0:00 proftpd: (accepting connections)
619 ? S 0:00 crond
631 ? S 0:00 /usr/sbin/atd

中略

678 ? S 0:00 /usr/local/pgsql/bin/postmaster -i -S -D /usr/local/p
680 ? S 0:00 /usr/local/apache/bin/httpd
5371 ? S 0:00 \_ /usr/local/apache/bin/httpd
5372 ? S 0:00 \_ /usr/local/apache/bin/httpd
5373 ? S 0:00 \_ /usr/local/apache/bin/httpd
5374 ? S 0:00 \_ /usr/local/apache/bin/httpd
5375 ? S 0:00 \_ /usr/local/apache/bin/httpd
12488 ? S 0:00 \_ /usr/local/apache/bin/httpd
687 ? S 8:40 /usr/local/samba/bin/nmbd -D
693 ? S 0:01 /usr/local/samba/bin/smbd -D
14459 ? S 0:02 \_ /usr/local/samba/bin/smbd -D
14471 ? S 0:01 \_ /usr/local/samba/bin/smbd -D
14475 ? S 0:00 \_ /usr/local/samba/bin/smbd -D
696 tty1 S 0:00 /sbin/mingetty tty1

見知らぬサービスが動いてたり、inetd(スーパーデーモン)等が複数動いてないか、見知らぬサービスが動いてる場合は、そのサービスを記録して後でfindコマンドで全ディレクトリを検索して実行ファイル在処を探す(psコマンドでパスも表示されたら見つけるの楽だけど・・・)。

4)アカウント情報や各種設定ファイルを調査する
■ 設定ファイル
/etc/passwd
/etc/inetd.conf
/etc/rc.d/rc
/etc/rc.d/rc.boot
/etc/rc.d/rc.local
/etc/crontab

ファイル自体タイムスタンプがおかしい、ファイルの中に見たこともないエントリがされている等を調べる。

■ ディレクトリ
/etc/rc.d/init.d
/etc/rc.d/rc2.d
/etc/rc.d/rc3.d
/etc/rc.d/rc4.d
/etc/rc.d/rc5.d
/etc/cron.d
/etc/xinetd.d

ディレクトリの中のファイルのタイムスタンプがおかしい、見たこともないファイルがある。こういった事を調査する。

2.調査結果から侵入者を追跡する
1項の調査結果から、侵入者を追跡する。さて、ここで初めてネットワークケーブルを抜くことにしよう。そして、rootでログインしてさらに調査する。ここで、システム全てをバックアップメディアへバックアップしておくことをお勧めする。

1)ヒストリを調査する

[root@yh root]# history | more
4 cp /tmp/main.cf .
5 vi main.cf
6 more main.cf.default
7 cp /tmp/aliases .
8 newaliases
9 postfix reload
10 more main.cf.default
11 more main.cf.mmm
12 vi main.cf]
13 ls -al
14 vi main.cf
15 postfix reload
17 groupadd postdrop
19 more /etc/passwd
20 more /etc/group
21 rpm -e postfix-1.1.13-0vl0.26
22 rm /var/spool/postfix
23 rm -Rf /var/spool/postfix
24 rm -Rf /etc/postfix
25 rpm -e postfix-1.1.13-0vl0.26
26 apt-get install postfix
27 cd /var/spool/postfix/
28 cd public/
29 ls -al
30 cd ..
31 ls -al
省略

上記のように、historyコマンドで見覚えのない作業履歴が無いかを調査する。

2)syslogを確認する
■ 再起動した形跡がないか調査する

[root@school /root]# dmesg
Linux version 2.2.25 (root@school) (gcc version egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)) #2 Thu Jul 24 13:23:17 JST 2003
BIOS-provided physical RAM map:
BIOS-e820: 000a0000 @ 00000000 (usable)
BIOS-e820: 07efd000 @ 00100000 (usable)
Detected 400918 kHz processor.
Console: colour VGA+ 80x25
Calibrating delay loop... 799.53 BogoMIPS
Memory: 127976k/131060k available (1048k kernel code, 408k reserved, 1556k data, 72kinit)
Dentry hash table entries: 16384 (order 5, 128k)
Buffer cache hash table entries: 131072 (order 7, 512k)
Page cache hash table entries: 32768 (order 5, 128k)
VFS: Diskquotas version dquot_6.4.0 initialized
CPU: L1 I cache: 16K, L1 D cache: 16K
CPU: L2 cache: 512K
Intel machine check architecture supported.
Intel machine check reporting enabled on CPU#0.
CPU: Intel Pentium II (Deschutes) stepping 01
Checking 386/387 coupling... OK, FPU using exception 16 error reporting.
Checking 'hlt' instruction... OK.
POSIX conformance testing by UNIFIX
mtrr: v1.35a (19990819) Richard Gooch (rgooch@atnf.csiro.au)
PCI: PCI BIOS revision 2.10 entry at 0xf0720
PCI: Using configuration type 1
PCI: Probing PCI hardware
Linux NET4.0 for Linux 2.2
Based upon Swansea University Computer Society NET3.039
NET4: Unix domain sockets 1.0 for Linux NET4.0.
NET4: Linux TCP/IP 1.0 for NET4.0
IP Protocols: ICMP, UDP, TCP, IGMP
TCP: Hash tables configured (ehash 131072 bhash 65536)
Initializing RT netlink socket
Starting kswapd v 1.5
Detected PS/2 Mouse Port.
Serial driver version 4.27 with MANY_PORTS MULTIPORT SHARE_IRQ enabled
ttyS00 at 0x03f8 (irq = 4) is a 16550A
ttyS01 at 0x02f8 (irq = 3) is a 16550A
pty: 256 Unix98 ptys configured
Real Time Clock Driver v1.09
RAM disk driver initialized: 16 RAM disks of 4096K size
PIIX4: IDE controller on PCI bus 00 dev 21
PIIX4: not 100% native mode: will probe irqs later
ide0: BM-DMA at 0xd800-0xd807, BIOS settings: hda:DMA, hdb:DMA
ide1: BM-DMA at 0xd808-0xd80f, BIOS settings: hdc:DMA, hdd:pio
hda: QUANTUM FIREBALL SE6.4A, ATA DISK drive
hdb: LS-120 VER4 07 UHD Floppy, ATAPI FLOPPY drive
hdc: ASUS CD-S340, ATAPI CDROM drive
ide0 at 0x1f0-0x1f7,0x3f6 on irq 14
ide1 at 0x170-0x177,0x376 on irq 15
hda: QUANTUM FIREBALL SE6.4A, 6149MB w/80kB Cache, CHS=784/255/63
hdc: ATAPI 34X CD-ROM drive, 128kB Cache
Uniform CD-ROM driver Revision: 3.11
Floppy drive(s): fd0 is 1.44M
FDC 0 is a post-1991 82077
md driver 0.36.6 MAX_MD_DEV=4, MAX_REAL=8
scsi : 0 hosts.
scsi : detected total.
Partition check:
hda: hda1 hda2 < hda5 hda6 >
apm: BIOS version 1.2 Flags 0x0b (Driver version 1.13)
VFS: Mounted root (ext2 filesystem) readonly.
Freeing unused kernel memory: 72k freed
Adding Swap: 136512k swap-space (priority -1)
ne2k-pci.c: v1.02 for Linux 2.2, 10/19/2000, D. Becker/P. Gortmaker, http://www.scyld
.com/network/ne2k-pci.html
ne2k-pci.c: PCI NE2000 clone 'RealTek RTL-8029' at I/O 0xd000, IRQ 12.
eth0: RealTek RTL-8029 found at 0xd000, IRQ 12, 00:C0:F6:B0:B2:6C.

[root@school /root]# more /var/log/messages

省略
Jan 20 12:57:29 school init: Switching to runlevel: 6
Jan 20 12:57:31 school rc: Stopping keytable succeeded
Jan 20 12:57:31 school sshd[399]: Received signal 15; terminating.
Jan 20 12:57:31 school sshd: sshd shutdown succeeded
Jan 20 12:57:32 school inet: inetd shutdown succeeded
Jan 20 12:57:32 school atd: atd shutdown succeeded
Jan 20 12:57:32 school crond: crond shutdown succeeded
Jan 20 12:57:33 school dd: 1+0 records in
Jan 20 12:57:33 school dd: 1+0 records out
Jan 20 12:57:33 school random: Saving random seed succeeded
Jan 20 12:57:33 school apmd[314]: Exiting
Jan 20 12:57:33 school apmd: apmd shutdown succeeded
Jan 20 12:57:34 school network: Shutting down interface eth0 succeeded
Jan 20 12:57:34 school kernel: Kernel logging (proc) stopped.
Jan 20 12:57:34 school kernel: Kernel log daemon terminating.
Jan 20 12:57:35 school syslog: klogd shutdown succeeded
Jan 20 12:57:35 school exiting on signal 15
Jan 20 12:58:29 school syslogd 1.3-3: restart.
Jan 20 12:58:29 school syslog: syslogd startup succeeded
Jan 20 12:58:29 school kernel: klogd 1.3-3, log source = /proc/kmsg started.
Jan 20 12:58:29 school kernel: Inspecting /boot/System.map-2.2.25
Jan 20 12:58:29 school syslog: klogd startup succeeded
Jan 20 12:58:29 school kernel: Loaded 7297 symbols from /boot/System.map-2.2.25.
Jan 20 12:58:29 school kernel: Symbols match kernel version 2.2.25.
Jan 20 12:58:29 school kernel: Loaded 14 symbols from 2 modules.
Jan 20 12:58:29 school kernel: Linux version 2.2.25 (root@school) (gcc version egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)) #2 Thu Jul 24 13:23:07 JST 2003
Jan 20 12:58:29 school kernel: BIOS-provided physical RAM map:
Jan 20 12:58:29 school kernel: BIOS-e820: 000a0000 @ 00000000 (usable)
Jan 20 12:58:29 school kernel: BIOS-e820: 07efd000 @ 00100000 (usable)
Jan 20 12:58:29 school kernel: Detected 400918 kHz processor.
Jan 20 12:58:29 school kernel: Console: colour VGA+ 80x25
Jan 20 12:58:29 school kernel: Calibrating delay loop... 799.53 BogoMIPS
Jan 20 12:58:29 school kernel: Memory: 127976k/131060k available (1048k kernel code,408k reserved, 1556k data, 72k init)
Jan 20 12:58:29 school kernel: Dentry hash table entries: 16384 (order 5, 128k)
Jan 20 12:58:29 school kernel: Buffer cache hash table entries: 131072 (order 7, 512k)
Jan 20 12:58:29 school kernel: Page cache hash table entries: 32768 (order 5, 128k)
Jan 20 12:58:30 school kernel: VFS: Diskquotas version dquot_6.4.0 initialized
Jan 20 12:58:30 school kernel: CPU: L1 I cache: 16K, L1 D cache: 16K
Jan 20 12:58:30 school kernel: CPU: L2 cache: 512K
Jan 20 12:58:30 school kernel: Intel machine check architecture supported.
Jan 20 12:58:30 school kernel: Intel machine check reporting enabled on CPU#0.
Jan 20 12:58:30 school kernel: CPU: Intel Pentium II (Deschutes) stepping 01
Jan 20 12:58:30 school kernel: Checking 386/387 coupling... OK, FPU using exception 16 error reporting.
Jan 20 12:58:30 school kernel: Checking 'hlt' instruction... OK.
Jan 20 12:58:30 school kernel: POSIX conformance testing by UNIFIX
Jan 20 12:58:30 school kernel: mtrr: v1.35a (19990819) Richard Gooch (rgooch@atnf.csiro.au)
Jan 20 12:58:30 school kernel: PCI: PCI BIOS revision 2.10 entry at 0xf0720
Jan 20 12:58:30 school kernel: PCI: Using configuration type 1
Jan 20 12:58:30 school kernel: PCI: Probing PCI hardware
Jan 20 12:58:30 school kernel: Linux NET4.0 for Linux 2.2
Jan 20 12:58:30 school kernel: Based upon Swansea University Computer Society NET3.039
Jan 20 12:58:30 school kernel: NET4: Unix domain sockets 1.0 for Linux NET4.0.
Jan 20 12:58:30 school kernel: NET4: Linux TCP/IP 1.0 for NET4.0
Jan 20 12:58:30 school kernel: IP Protocols: ICMP, UDP, TCP, IGMP
Jan 20 12:58:30 school kernel: TCP: Hash tables configured (ehash 131072 bhash 65536)
Jan 20 12:58:30 school kernel: Initializing RT netlink socket
Jan 20 12:58:30 school kernel: Starting kswapd v 1.5
Jan 20 12:58:30 school kernel: Detected PS/2 Mouse Port.
Jan 20 12:58:30 school kernel: Serial driver version 4.27 with MANY_PORTS MULTIPORT SHARE_IRQ enabled
Jan 20 12:58:30 school kernel: ttyS00 at 0x03f8 (irq = 4) is a 16550A
Jan 20 12:58:30 school kernel: ttyS01 at 0x02f8 (irq = 3) is a 16550A
Jan 20 12:58:30 school kernel: pty: 256 Unix98 ptys configured
Jan 20 12:58:30 school kernel: Real Time Clock Driver v1.09
Jan 20 12:58:30 school kernel: RAM disk driver initialized: 16 RAM disks of 4096K size
Jan 20 12:58:30 school kernel: PIIX4: IDE controller on PCI bus 00 dev 21
Jan 20 12:58:30 school kernel: PIIX4: not 100%% native mode: will probe irqs later
Jan 20 12:58:30 school kernel: ide0: BM-DMA at 0xd800-0xd807, BIOS settings: hda:DMA, hdb:DMA
Jan 20 12:58:30 school kernel: ide1: BM-DMA at 0xd808-0xd80f, BIOS settings: hdc:DMA, hdd:pio
Jan 20 12:58:30 school kernel: hda: QUANTUM FIREBALL SE6.4A, ATA DISK drive
Jan 20 12:58:30 school kernel: hdb: LS-120 VER4 07 UHD Floppy, ATAPI FLOPPY drive
Jan 20 12:58:30 school kernel: hdc: ASUS CD-S340, ATAPI CDROM drive
Jan 20 12:58:30 school kernel: ide0 at 0x1f0-0x1f7,0x3f6 on irq 14
Jan 20 12:58:30 school kernel: ide1 at 0x170-0x177,0x376 on irq 15
Jan 20 12:58:30 school kernel: hda: QUANTUM FIREBALL SE6.4A, 6149MB w/80kB Cache, CHS=784/255/63
Jan 20 12:58:30 school kernel: hdc: ATAPI 34X CD-ROM drive, 128kB Cache
Jan 20 12:58:30 school kernel: Uniform CD-ROM driver Revision: 3.11
Jan 20 12:58:30 school kernel: Floppy drive(s): fd0 is 1.44M
Jan 20 12:58:30 school kernel: FDC 0 is a post-1991 82077
Jan 20 12:58:30 school kernel: md driver 0.36.6 MAX_MD_DEV=4, MAX_REAL=8
Jan 20 12:58:30 school kernel: scsi : 0 hosts.
Jan 20 12:58:30 school kernel: scsi : detected total.
Jan 20 12:58:30 school kernel: Partition check:
Jan 20 12:58:30 school kernel: hda: hda1 hda2 < hda5 hda6 >
Jan 20 12:58:30 school kernel: apm: BIOS version 1.2 Flags 0x0b (Driver version 1.13)
Jan 20 12:58:30 school kernel: VFS: Mounted root (ext2 filesystem) readonly.
Jan 20 12:58:30 school kernel: Freeing unused kernel memory: 72k freed
Jan 20 12:58:30 school kernel: Adding Swap: 136512k swap-space (priority -1)
Jan 20 12:58:30 school kernel: ne2k-pci.c: v1.02 for Linux 2.2, 10/19/2000, D. Becker/P. Gortmaker, http://www.scyld.com/network/ne2k-pci.html
Jan 20 12:58:30 school kernel: ne2k-pci.c: PCI NE2000 clone 'RealTek RTL-8029' at I/O 0xd000, IRQ 12.
Jan 20 12:58:30 school kernel: eth0: RealTek RTL-8029 found at 0xd000, IRQ 12, 00:C0:F6:B0:B2:6C.
Jan 20 12:58:29 school atd: atd startup succeeded
Jan 20 12:58:31 school crond: crond startup succeeded
Jan 20 12:58:31 school inet: inetd startup succeeded
Jan 20 12:58:31 school sshd: Starting sshd:
Jan 20 12:58:32 school sshd: sshd startup succeeded
Jan 20 12:58:32 school sshd: ^[[60G
Jan 20 12:58:32 school sshd[399]: Server listening on 0.0.0.0 port 22.
Jan 20 12:58:32 school sshd:
Jan 20 12:58:32 school rc: Starting sshd succeeded
Jan 20 12:58:31 school inet: inetd startup succeeded
Jan 20 12:58:31 school sshd: Starting sshd:
Jan 20 12:58:32 school sshd: sshd startup succeeded
Jan 20 12:58:32 school sshd: ^[[60G
Jan 20 12:58:32 school sshd[399]: Server listening on 0.0.0.0 port 22.
Jan 20 12:58:32 school sshd:
Jan 20 12:58:32 school rc: Starting sshd succeeded
Jan 20 12:58:32 school keytable: Loading keymap:
Jan 20 12:58:33 school keytable: Loading /usr/lib/kbd/keymaps/i386/qwerty/jp106.kmap.gz
Jan 20 12:58:33 school keytable: Loading system font:
Jan 20 12:58:33 school rc: Starting keytable succeeded
Jan 20 12:58:36 school PAM_pwdb[440]: (su) session opened for user postgres by (uid=0)
Jan 20 12:58:37 school PAM_pwdb[440]: (su) session closed for user postgres
Jan 20 12:58:37 school modprobe: modprobe: Can't locate module net-pf-10
Jan 20 12:58:39 school iplog[456]: iplog started.
Jan 20 12:58:39 school modprobe: modprobe: Can't locate module net-pf-17
Jan 20 12:58:39 school iplog[457]: Warning: unable to open eth0
Jan 20 12:58:39 school iplog[457]: Fatal: Couldn't initialize interfaces.
Jan 20 12:59:58 school sshd[463]: Could not reverse map address 192.168.0.27.
Jan 20 12:59:58 school sshd[463]: Failed password for mity from 192.168.0.27 port 62506
Jan 20 13:00:00 school sshd[463]: Accepted password for mity from 192.168.0.27 port 62506
Jan 20 13:00:00 school PAM_pwdb[463]: (sshd) session opened for user mity by (uid=0)
Jan 20 13:00:06 school PAM_pwdb[493]: (su) session opened for user root by mity(uid=543)

見覚えのない日付に再起動が行われていたら、危険信号。

3)ログファイルの中のメッセージに異常がうかがえる
/var/log/messagesなどのファイルの中に、表示が化けてる文字や意味もなく長い文字列が現れている場合は、これらのサービスが攻撃された形跡が有ることを意味してる場合が多い。つまり、これらのデーモンをつてに侵入された可能性が有る。

4)接続拒否された愚か者
telnetやsshやftp等に、心当たりのないログイン拒否のメッセージが残ってる場合は、システムに侵入しようと試みた事を意味している。

[root@school /]# tail /var/log/messages
Jan 20 13:29:04 school sshd[548]: Could not reverse map address 192.168.0.27.
Jan 20 13:29:04 school sshd[548]: Failed password for ROOT from 192.168.0.27 port 62531
Jan 20 13:29:07 school PAM_pwdb[548]: authentication failure; (uid=0) -> root for sshd service
Jan 20 13:29:07 school sshd[548]: Failed password for ROOT from 192.168.0.27 port 62531
Jan 20 13:29:09 school sshd[548]: Failed password for ROOT from 192.168.0.27 port 62531
Jan 20 13:29:12 school sshd[548]: Received disconnect from 192.168.0.27:
Jan 20 13:29:12 school PAM_pwdb[548]: 1 more authentication failure; (uid=0) -> root for sshd service

これは、ローカルホストからsshを使ってサーバへrootアカウントでログインを試みて失敗したログである。あとは、suコマンドでsuした記録も控えて置くこと。

[root@school /root]# tail /var/log/messages
Jan 20 13:29:09 school sshd[548]: Failed password for ROOT from 192.168.0.27 port 62531
Jan 20 13:29:12 school sshd[548]: Received disconnect from 192.168.0.27:
Jan 20 13:29:12 school PAM_pwdb[548]: 1 more authentication failure; (uid=0) -> root for sshd service
Jan 20 13:45:57 school PAM_pwdb[493]: (su) session closed for user root
Jan 20 13:45:59 school PAM_pwdb[463]: (sshd) session closed for user mity
Jan 20 13:46:45 school sshd[564]: Could not reverse map address 192.168.0.27.
Jan 20 13:46:45 school sshd[564]: Failed password for mity from 192.168.0.27 port 62571
Jan 20 13:46:46 school sshd[564]: Accepted password for mity from 192.168.0.27 port 62571
Jan 20 13:46:46 school PAM_pwdb[564]: (sshd) session opened for user mity by (uid=0)
Jan 20 13:46:54 school PAM_pwdb[592]: (su) session opened for user root by mity(uid=543)

これは、ssh経由でユーザアカウントでログインしてsuでrootログインに成功した時のログ。

5)怪しげなサービスを確認する
■ 1項で調査した結果を一つずつ丁寧に確認する
● wコマンド、whoコマンド、lastコマンドログなどにより通信元のネットワークと不正侵入発生時刻を確認する
● netstatコマンドでLISTENポートをさらに掘り下げて調査する

[root@school /root]# netstat -an
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 20 192.168.0.42:22 192.168.0.27:62571 ESTABLISHED
tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:5432 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN
udp 0 0 192.168.0.42:138 0.0.0.0:*
udp 0 0 192.168.0.42:137 0.0.0.0:*
udp 0 0 0.0.0.0:138 0.0.0.0:*
udp 0 0 0.0.0.0:137 0.0.0.0:*
udp 0 0 127.0.0.1:1024 127.0.0.1:1024 ESTABLISHED
raw 0 0 0.0.0.0:1 0.0.0.0:* 7
raw 0 0 0.0.0.0:6 0.0.0.0:* 7
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags Type State I-Node Path
unix 0 [ ACC ] STREAM LISTENING 410 /tmp/.s.PGSQL.5432
unix 1 [ ] DGRAM 300 /dev/log
unix 0 [ ] DGRAM 310

[root@school /root]# fuser -vn tcp 5432
USER PID ACCESS COMMAND
5432/tcp postgres 447 f.... postmaster

仮に、怪しげなLISTENポートが存在していたら、上記のfuserコマンドで、そのサービスのオーナーとサービス名を確認する。

[root@school /root]# telnet localhost 5432
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Connection closed by foreign host.

さらに、そのプログラムがバックドアプログラムだった場合、上記のようなtelnetコマンドを発行すると返事が帰ってくる場合があるので、とりあえずやってみる。

■ コマンドのヒストリを確認する

[root@school /root]# more /home/mity/.bash_history
mkdir public_html
chmod 777 public_html/
ls -al
exit
cp /tmp/index.php ./
ls -al
mv index.php public_html/
cd public_html/
ls -al
exit
exit
createdb test
dropdb test
psql -n test
createdb test2
dropdb test2
createdb test
createdb test2
psql -n test2
psql -n test2
dropdb test2
mail
exit
mail
exit
su -
省略

侵入者に無断使用されたアカウントの.bash_historyを確認する。どういうコマンドを発行したのかが解る。調べるときに気をつけることは、怪しいファイルをコンパイルしていないか外部の第三者のホストへ接続していないかなど。

■ 無断使用されたユーザに確認する
正規のアカウントが使用されて不正侵入が行われた場合、そのアカウントの持ち主に事実関係を確認する。netstatコマンドで怪しいLISTENポートを発見した場合は、バッファオーバーフロー攻撃を受けて侵入されたのかどうかを確認すべきである。システムに仕掛けられたバックドアを使って侵入された危険性が有るからである。この場合には、システムの中のどのプロセスが怪しいLISTENポートのオーナーで有るかを調べる。
オーナを調べるには、前述した fuser -vn <tcp or udp> <ポート> を実行すれば解る。
また、怪しいポートを調べるには、以下の方法もある。

[root@school /root]# netstat -lp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 *:netbios-ssn *:* LISTEN 455/smbd
tcp 0 0 *:postgres *:* LISTEN 447/postmaster
tcp 0 0 *:www *:* LISTEN 438/httpd
tcp 0 0 *:ssh *:* LISTEN 399/sshd
tcp 0 0 *:ftp *:* LISTEN 390/inetd
udp 0 0 school:netbios-dgm *:* 453/nmbd
udp 0 0 school:netbios-ns *:* 453/nmbd
udp 0 0 *:netbios-dgm *:* 453/nmbd
udp 0 0 *:netbios-ns *:* 453/nmbd
raw 0 0 *:icmp *:* 7 -
raw 0 0 *:tcp *:* 7 -
Active UNIX domain sockets (only servers)
Proto RefCnt Flags Type State I-Node PID/Program name Path
unix 0 [ ACC ] STREAM LISTENING 410 447/postmaster /tmp/.s.PGSQL.5432

[root@school /root]# lsof -i
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
inetd 390 root 4u IPv4 354 TCP *:ftp (LISTEN)
sshd 399 root 3u IPv4 359 TCP *:ssh (LISTEN)
httpd 438 root 16u IPv4 395 TCP *:www (LISTEN)
httpd 441 nobody 16u IPv4 395 TCP *:www (LISTEN)
httpd 442 nobody 16u IPv4 395 TCP *:www (LISTEN)
httpd 443 nobody 16u IPv4 395 TCP *:www (LISTEN)
httpd 444 nobody 16u IPv4 395 TCP *:www (LISTEN)
httpd 445 nobody 16u IPv4 395 TCP *:www (LISTEN)
postmaste 447 postgres 3u IPv4 408 TCP *:postgres (LISTEN)
postmaste 447 postgres 5u IPv4 416 UDP localhost:1024->localhost:1024
postmaste 450 postgres 5u IPv4 416 UDP localhost:1024->localhost:1024
nmbd 453 root 6u IPv4 421 UDP *:netbios-ns
nmbd 453 root 7u IPv4 422 UDP *:netbios-dgm
nmbd 453 root 8u IPv4 424 UDP school:netbios-ns
nmbd 453 root 9u IPv4 425 UDP school:netbios-dgm
smbd 455 root 9u IPv4 430 TCP *:netbios-ssn (LISTEN)
sshd 661 root 4u IPv4 665 TCP school:ssh->192.168.0.27:62603 (ESTABLISHED)

また、この情報に加えて、別なホストからポートスキャンを行ってオープンしてるポートを調べるような事もしみる。

[root@school /root]# nmap -P0 -sT yh

Starting nmap V. 2.53 by fyodor@insecure.org ( www.insecure.org/nmap/ )
Interesting ports on yh.microtechnology.co.jp (192.168.0.43):
(The 1516 ports scanned but not shown below are in state: closed)
Port State Service
21/tcp open ftp
22/tcp open ssh
25/tcp open smtp
80/tcp open http
139/tcp open netbios-ssn
5432/tcp open postgres
8080/tcp open http-proxy

Nmap run completed -- 1 IP address (1 host up) scanned in 1 second

これは、自ホストから他のホストとポートスキャンしているが、自ホストをポートスキャンする場合は、ssh等で
リモートで他のホストにログインして、そこから自ホスト宛へnmapを発行すると良い。

3)システムの整合性を確認する
RedHat系Linuxでは、rpmでパッケージ管理しているので構成パッケージの整合性を確認するには、

[root@school /root]# rpm -Va
error: cannot open Depends index using db1 - Invalid argument (22)
..5....T c /etc/hosts.allow
S.5....T c /etc/services
.M....G. /home
.M...... /usr/local/man/man1
.M...UG. /usr/local/src
.M...... /home/ftp
S.5....T c /etc/termcap
S.5....T c /etc/bashrc
S.5....T /usr/bin/bashbug
S.5....T /usr/man/man1/bash.1
S.5....T c /etc/info-dir
..5....T c /etc/mime.types
省略

このコマンドで確認できる。

3.その他の確認

1)怪しいファイルの見つけ方
怪しいファイルの見つけ方にはいくつか方法がある。しかし、一番簡単な方法はfindコマンドで探すことである。
例えば、"."で始まるファイルやディレクトリを探すには、

[root@school /root]# find / -name '..'* -pront
もしくは、
[root@school /root]# find / -name '.'* -print

クラッカーに侵入されたときに不正にroot権限を得るのに使うrootshellのように、ユーザIDがrootに設定されているファイルを探すには、

[root@school /root]# find / -user root -perm -4000 -ls

ファイルの更新履歴の日付を表示させて特定する方法もある。

[root@school /root]# find / mtime n

[root@school /root]# find / -mtime 2
find: /proc/822/fd/4: No such file or directory
/usr/local/samba/var/locks/brlock.tdb
/usr/local/samba/var/locks/locking.tdb
/usr/local/samba/var/locks/printing.tdb
/usr/local/samba/var/locks/ntdrivers.tdb
/usr/local/samba/var/locks/ntprinters.tdb
/usr/local/samba/var/locks/ntforms.tdb
/usr/local/samba/var/locks/share_info.tdb

これは、n日前に更新されたファイルを探すときに使われるコマンドである。

2)その他として

その他の確認として、 クラックされちゃった(でも落ち着いて対処しよう)!の2項の 侵入されちゃったぁ〜! を参照すること。rootkitの見つけ方などが掲載されている。

以上


 
 
 



Copyright 2005 Kozupon.com.