1. 程式人生 > >Linux入侵檢查思路及其命令

Linux入侵檢查思路及其命令

若Linux作業系統被非法入侵,那麼有哪些思路和系統命令用於檢查系統當前的狀態呢?主要包括對關鍵程序、關鍵服務、關鍵檔案的檢測,同時及時備份硬碟資料用於持續分析。詳細的檢查思路和Linux命令如下:

1. 檢視檔案filename正在執行的程序
#pidof filename

2. 可以通過檔案或者tcp udp協議看到程序
#fuser -n tcp port

3. 檢查檔案修改時間,大小等資訊
#stat filename

4. 檢視系統載入模組
#lsmod

5. 檢查rpc服務是否開放
#rpcinfo -p

6. 檢查網絡卡是否混雜模式(promiscuous mod)
#dmesg|grep eth0

7. 檢查一些關鍵的系統命令是否被更改,象md5sum一樣
#rpm -Vf /bin/ls
rpm -Vf /bin/ps正常無輸出,否則輸出SM5….T /bin/su之類提示
如果rpm的資料庫被修改則不可靠了,只能通過網路或則cdrom中的rpm資料庫來比較
如:rpm -Vvp
以下常用命令需要檢查
/usr/bin/chfn
/usr/bin/chsh
/bin/login
/bin/ls
/usr/bin/passwd
/bin/ps
/usr/bin/top
/usr/sbin/in.rshd
/bin/netstat
/sbin/ifconfig
/usr/sbin/syslogd
/usr/sbin/inetd
/usr/sbin/tcpd
/usr/bin/killall
/sbin/pidof
/usr/bin/find

8. 如果檢查的是已經確認被黑客攻擊的機器,完美建議:
-8.1 dd一個備份硬碟上
-8.2 mount 一個光碟機,上面有靜態編譯好的程式ls ps netstat等常用工具
-8.3 用nc把執行步驟輸出到遠端機器上

9. 用md5sum儲存一個全域性的檔案
find /sbin -type f|xargs md5sum >1st
檢查是否改變
md5sum -c 1st|grep OK

10. 避免在已經攻擊的機器上過多寫操作,可以:
-10.1 在另一個機器192.168.20.191上執行
# nc -L -p 1234 >some_audit_output.log 注意L是大寫,可以永久偵聽
-10.2 被攻擊機器上執行
# command|nc 192.168.20.191 1234

# script >/mnt/export.log
檢測完畢後用ctrl+d儲存記錄

11. 通過程序查詢可疑程式方法:
-11.1 netstat -anp 這步主要靠經驗,把可疑的都記錄下來
-11.2 進入記憶體目錄 cd /proc/3299
-11.3 ls -la,一般exe可以看到執行檔案路徑,
-11.4 再進入fd目錄檢視檔案控制代碼,至此一般都可以找出執行程式
-11.5 ps -awx 把剛才可疑的程序觀察一遍

12. 如果hacker把日誌刪除了:
-12.1 查詢所有未被刪除徹底的日誌,比如history,sniffer日誌
-12.2 /proc/pid/fd 目錄裡提示已經刪除的檔案
l-wx—— 1 root root 64 Aug 10 20:54 15 -> /var/log/httpd/error_log (deleted)
l-wx—— 1 root root 64 Aug 10 20:54 18 -> /var/log/httpd/ssl_engine_log (deleted)
l-wx—— 1 root root 64 Aug 10 20:54 19 -> /var/log/httpd/ssl_mutex.800 (deleted)
l-wx—— 1 root root 64 Aug 10 20:54 20 -> /var/log/httpd/access_log (deleted)
l-wx—— 1 root root 64 Aug 10 20:54 21 -> /var/log/httpd/access_log (deleted)
l-wx—— 1 root root 64 Aug 10 20:54 22 -> /var/log/httpd/ssl_request_log (deleted)
l-wx—— 1 root root 64 Aug 10 20:54 23 -> /var/log/httpd/ssl_mutex.800 (deleted)
lrwx—— 1 root root 64 Aug 10 20:54 3 -> /var/run/httpd.mm.800.sem (deleted)
lrwx—— 1 root root 64 Aug 10 20:54 4 -> /var/log/httpd/ssl_scache.sem (deleted)

-12.3 用靜態編譯的lsof |grep deleted檢視哪些被刪除
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
gpm 1650 root 1u REG 8,2 5 149743 /var/run/gpm208raa (deleted)

-12.4 得到檔案inode號,這裡是149743
-12.5 使用sleuthkit工具來恢復,
df /var得出硬碟位置是sda1
icat /dev/sda1 149743
-12.6 把恢復的檔案仔細檢視,一般都可以找到痕跡了

這樣會使分析編譯後的程式困難
gcc -04 -evil.c -o evil
strip ./evil

13. 有些程序不在程序裡顯示,但在/proc中有痕跡,可比較找出隱藏的程序
proc是偽檔案系統,為/dev/kmem提供一個結構化的介面,便於系統診斷並檢視每一個正在執行的可執行檔案的環境
#ps -ef|awk ‘{print $2}’|sort -n|uniq >1
#ls /porc |sort -n|uniq >2
#diff 1 2

14. 應急工具tct,裡面有許多使用工具,包括icat等資料恢復
如果在被攻擊的機器取證,可以mount一塊硬碟,也可以備份到網路中,方法:
a.在網路機器執行 nc -L -p 1234 >abc.img
b.肉雞執行 dd if=/dev/hdb5 count 20000 bs=1024|nc 192.168.0.1 1234 -w 3
如果備份過大,則可以偵聽多個埠,執行多個dd拷貝,然後把檔案合併 cat 2 >>1.img

15. ldd可以顯示一個可執行程式所依賴的動態庫,但間接依賴庫無法顯示出來
[[email protected] root]# ldd /bin/ls
libtermcap.so.2 => /lib/libtermcap.so.2 (0x40022000)
libc.so.6 => /lib/tls/libc.so.6 (0x42000000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
strace工具是一個除錯工具,它可以顯示出一個程式在執行過程中的所有系統呼叫,
[[email protected] root]# strace -eopen /bin/ls >/dev/null
open(“/etc/ld.so.preload”, O_RDONLY) = -1 ENOENT (No such file or directory)
open(“/etc/ld.so.cache”, O_RDONLY) = 3
open(“/lib/libtermcap.so.2”, O_RDONLY) = 3
open(“/lib/tls/libc.so.6”, O_RDONLY) = 3
open(“/usr/lib/locale/locale-archive”, O_RDONLY|O_LARGEFILE) = 3
open(“.”, O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY) = 3
open(“/etc/mtab”, O_RDONLY) = 3
open(“/proc/meminfo”, O_RDONLY) = 3

strace -o out telnet 192.168.100.100
o引數的含義是將strace的輸出資訊生成到out檔案中,這個檔名是可以隨意制定的。
我們開啟out檔案會發現大量的系統呼叫資訊,我們關心的主要是open這個系統呼叫的資訊,open是用來開啟檔案的,不僅呼叫動態庫要先用open開啟,讀取配置檔案也使用open,所以用sed寫一個簡單的指令碼就可以輸出out檔案中所有的open資訊
sed -n -e ‘/^open/p’ out
輸出資訊如下:
open(“/etc/ld.so.preload”, O_RDONLY) = -1 ENOENT (No such file or directory)
open(“/etc/ld.so.cache”, O_RDONLY) = 3
open(“/lib/libutil.so.1”, O_RDONLY) = 3
open(“/usr/lib/libncurses.so.5”, O_RDONLY) = 3
open(“/lib/i686/libc.so.6”, O_RDONLY) = 3
open(“/etc/resolv.conf”, O_RDONLY) = 3
open(“/etc/nsswitch.conf”, O_RDONLY) = 3
open(“/etc/ld.so.cache”, O_RDONLY) = 3
open(“/lib/libnss_files.so.2”, O_RDONLY) = 3
open(“/etc/services”, O_RDONLY) = 3
open(“/etc/host.conf”, O_RDONLY) = 3
open(“/etc/hosts”, O_RDONLY) = 3
open(“/etc/ld.so.cache”, O_RDONLY) = 3
open(“/lib/libnss_nisplus.so.2”, O_RDONLY) = 3
open(“/lib/libnsl.so.1”, O_RDONLY) = 3
open(“/var/nis/NIS_COLD_START”, O_RDONLY) = -1 ENOENT (No such file or directory)
open(“/etc/ld.so.cache”, O_RDONLY) = 3
open(“/lib/libnss_dns.so.2”, O_RDONLY) = 3
open(“/lib/libresolv.so.2”, O_RDONLY) = 3
open(“/etc/services”, O_RDONLY) = 3
open(“/root/.telnetrc”, O_RDONLY) = -1 ENOENT (No such file or directory)
open(“/usr/share/terminfo/l/linux”, O_RDONLY) = 4
從輸出中可以發現ldd顯示不出來的幾個庫
/lib/libnss_dns.so.2 ,
/lib/libresolv.so.2 ,
/lib/libnsl.so.1,
/lib/libnss_nisplus.so.2,
/lib/libnss_files.so.2

strace -o aa -ff -p PID會產生aa名稱開頭的多個檔案

grep open aa* | grep -v -e No -e null -e denied| grep WR 檢視其開啟呼叫的檔案資訊。

16. 要把日誌傳送到日誌主機步驟:
a.vi /etc/syslog.conf *.* @192.168.20.163 把所有日誌傳送到192.168.20.163
b.service syslog restart
c.在192.168.20.163安裝kiwisyslogd
d.遠端登陸,故意輸入錯誤密碼,可看到日誌主機上馬上有報警,也可以tcpdump port 514觀察

17. 如果知道黑客是0927入侵的,則:
touch -t 09270000 /tmp/a
find / \( -newer /tmp/a -o -cnewer /tmp/a \) -l
這樣那天改變和建立的檔案被列出

18. 將硬碟資料取走用於資料分析:
整盤複製
dd if=/dev/sda of=/dev/sdb bs=1024
分割槽複製 測試過
dd if=/dev/sda1 of=/abc bs=1024 這裡是儲存在了根分割槽,用mount檢視是sda2
啟動另一個linux
輸入:mount /dev/sda2 /mnt
這裡可以看到剛才的abc檔案,輸入:mount aa /tmp -o loop
這裡看到就是剛才映象的檔案內容