|
★UNIX應(yīng)急響應(yīng)攻略
******************************* *author:ayazero * *mail:drdos@163.com * *homepage verflow.nease.net **team:www.ph4nt0m.net * ******************************* 應(yīng)急響應(yīng)有一半是非技術(shù)的內(nèi)容,制定一個合理的響應(yīng)策略是至關(guān)重要的! 記住:現(xiàn)在開始對受害系統(tǒng)的每一步操作都可能改變已存在的證據(jù)或是導致敏感信息的丟失! {{初始響應(yīng)}} 目標:在進行司法鑒定復制之前獲得系統(tǒng)中的易失數(shù)據(jù),初步確定突發(fā)事件概況。 ============== 創(chuàng)建響應(yīng)工具包 ============== 我們調(diào)查系統(tǒng),必須以高度可信賴的程序執(zhí)行命令,再加上備份與修復,創(chuàng)建一個工具包是很有必要的。 即使在非UNIX/LINUX系統(tǒng)上,創(chuàng)建工具包也應(yīng)該作為響應(yīng)的第一步。 首先,我們需要在對應(yīng)體系結(jié)構(gòu)的系統(tǒng)上編譯響應(yīng)期間需要的工具,且編譯程序需要考慮系統(tǒng)兼容的問題。 通常我們需要如下的工具: ls dd des file pkginfo find icat lsof md5sum nc netstat pcat perl ps strace strings truss df vi cat kstat ifconfig chkrootkit more gzip last w rm script bash modinfo lsmod 讀者可根據(jù)自己的需要自行添加,但是一個工具包通常只能用來完成對某一特定平臺的工作, 把對多個平臺編譯的工具放進同一個工具包反而會顯得紊亂。 在Linux上創(chuàng)建響應(yīng)工具包時,可以用gcc的–static參數(shù)編譯源代碼,或者用ldd檢查動態(tài)連接庫, 在響應(yīng)工具包存儲介質(zhì)上建立庫文件目錄,并拷貝所有工具需要的動態(tài)連接庫的副本,最后設(shè)置環(huán)境變量。 這個過程有點類似于創(chuàng)建一個Linux的優(yōu)盤啟動盤。 ============ 獲取易失數(shù)據(jù) ============ 易失的數(shù)據(jù)包括:當前打開的套接字,進程列表,RAM內(nèi)容,非鏈接文件的位置。 *unix特性: unix允許進程正在執(zhí)行時將其刪除! 非鏈接文件是訪問該文件的進程中止時被標記為刪除的文件。當系統(tǒng)關(guān)閉時(正常關(guān)機或突然斷電非正常關(guān)機), 標記為刪除的文件都將消失。因此在找到被標記為刪除的文件之前不能關(guān)機! ================= 執(zhí)行可信賴的shell ================= 使用我們自己準備的響應(yīng)工具包,裝載該介質(zhì)的文件系統(tǒng), mount –t auto /dev/sda1 /mnt/usb 或 mount –t iso9660 /dev/cdrom /mnt/cdrom 按下Ctrl+Alt+F1~F6,從控制臺以root身份登陸。 請一定要區(qū)分原環(huán)境變量中的命令和當前響應(yīng)工具包的相同名字的命令集,防止?jié)撛诘亩M制特洛伊木馬攻擊。 ================== 查看登陸系統(tǒng)的用戶 ================== [root@ay4z3ro foo]# w 19:50:48 up 43 min, 2 users, load average: 0.00, 0.00, 0.00 USER TTY LOGIN@ IDLE JCPU PCPU WHAT root :0 19:08 ?xdm? 11.10s 0.43s gnome-session root pts/0 19:08 1.00s 0.21s 0.01s w 輸出標題行顯示了當前系統(tǒng)時間,該系統(tǒng)已運行的時間,當前登陸用戶數(shù),最近1分鐘,5分鐘和15分鐘內(nèi)的平均系統(tǒng)負載。 USER字段顯示當前登陸的用戶名。TTY字段顯示了會話的控制終端,tty表示從控制臺登陸,pts/typ則可以表示通過一個網(wǎng)絡(luò)連接, 因為X是個C/S模式的應(yīng)用程序,所以我在GNOME下開的shell窗口顯示為pts。如果不從本地登陸,輸出中還有FROM字段, 表示建立會話的源地址的域名或IP。LOGIN@顯示該連接的本地開始時間。IDLE字段顯示了自上一個進程運行以來的時間長度。 JCPU顯示與tty或pts關(guān)聯(lián)的全部進程所使用的時間。PCPU字段顯示了WHAT列中當前進程所使用的CPU時間。WHAT列顯示用戶當前運行的進程。 ================ 查看系統(tǒng)進程列表 ================ Solaris中使用ps –eaf,而在FreeBSD和Linux中則使用ps –aux. [root@ay4z3ro foo]# ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.1 0.2 1356 496 ? S 19:07 0:04 init root 2 0.0 0.0 0 0 ? SW 19:07 0:00 [keventd] root 3 0.0 0.0 0 0 ? SWN 19:07 0:00 [ksoftirqd_CPU0] root 4 0.0 0.0 0 0 ? SW 19:07 0:00 [kswapd] root 5 0.0 0.0 0 0 ? SW 19:07 0:00 [bdflush] root 6 0.0 0.0 0 0 ? SW 19:07 0:00 [kupdated] root 7 0.0 0.0 0 0 ? SW< 19:07 0:00 [mdrecoveryd] root 11 0.0 0.0 0 0 ? SW 19:07 0:00 [kjournald] root 114 0.0 0.5 2108 1304 ? S 19:07 0:00 devfsd /dev root 209 0.0 0.0 0 0 ? SW 19:07 0:00 [khubd] root 338 0.0 0.0 0 0 ? SW 19:07 0:00 [kjournald] rpc 620 0.0 0.2 1496 520 ? S 19:07 0:00 [portmap] root 636 0.0 0.2 1452 624 ? S 19:07 0:00 syslogd -m 0 …………………(以下省略) Ps命令輸出中的START字段顯示了程序開始運行的時間,對于查出攻擊時間很有幫助。有時僅通過時間就能識別可疑進程。 Linux下還可以通過strings –f /proc/[0-9]*/cmdline來查看系統(tǒng)中運行進程的完整命令行參數(shù),但是這個并不完全可信。 因為攻擊者甚至不需要插入內(nèi)核模塊,而只在應(yīng)用層的編碼中加入語句就能欺騙我們。 =============== 檢測LKM Rootkit =============== 內(nèi)核模塊后門,還有什么比這個更臭屁的呢?Solaris,Linux和幾乎所有的UNIX都支持LKM(Loadable Kernel Modules), 用普通的方法無法檢測其存在,這給應(yīng)急響應(yīng)帶來了極大的挑戰(zhàn)性。對于我們來說,解決的辦法是找到那些lkm rootkit, 并熟悉,解剖他們。有時lkm rootkit雖然被成功裝載,但在系統(tǒng)的某些細節(jié)上會出現(xiàn)“異常”,甚至可能使系統(tǒng)在運行一段時間后徹底崩潰。 還有,lkm雖然活動在ring0核心態(tài),但是攻擊者往往會在系統(tǒng)的某處留下痕跡,比如攻擊者為了讓系統(tǒng)每次關(guān)閉或重啟后能自動裝入他安置的 內(nèi)核后門,可能會改寫/etc/modules.conf或/etc/rc.local. kstat/ksec是檢測lkm非常方便的工具,前者用于Linux,后者用于*BSD. [root@ay4z3ro kstat]# ./kstat Usage: ./kstat [-i iff] [-P] [-p pid] [-M] [-m addr] [-s] -i iff may be specified as ‘a(chǎn)ll‘ or as name (e.g. eth0) displays info about the queried interface -P displays all processes -p pid is the process id of the queried task -M displays the kernel‘s LKMs‘ linked list -m addr is the hex address of the queried module displays info about the module to be found at addr -s displays info about the system calls‘ table 其中-s參數(shù)最有用,它顯示了系統(tǒng)調(diào)用入口的信息,能檢測市面上最流行的knark和adore這兩個內(nèi)核后門, 但理論上他并不能檢測出所有的lkm rootkit. Kstat/ksec站點:http://www. 其實熟悉內(nèi)核攻擊的人都知道Kstat單純檢查sys_call_table[]的方式如今已經(jīng) 被攻擊的一方完全超越,e4gle很早也寫過這類文章。 有興趣可以看看2002焦點峰會jbtzhm的《內(nèi)核后門實現(xiàn)及其檢測》 現(xiàn)在linuxforum安全版版主madsys在Phrack61上有篇文章: Finding hidden kernel modules (the extrem way)--鏈接: http://www./forum/gshowflat.php?Cat=&Board=security&Number=434871&page=0&view=collapsed&sb=5&o=all&fpart= ====================== 檢測開放端口和關(guān)聯(lián)進程 ====================== [root@ay4z3ro foo]# netstat –anp Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 620/ tcp 0 0 0.0.0.0:6000 0.0.0.0:* LISTEN 908/X tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 880/sshd udp 0 0 0.0.0.0:111 0.0.0.0:* 620/ Active UNIX domain sockets (servers and established) Proto RefCnt Flags Type State I-Node PID/Program name Path unix 2 [ ACC ] STREAM LISTENING 2753 756/ /tmp/.font-unix/fs-1 ……(以下省略) 在Solaris,HP-UX,AIX,FreeBSD,Linux上可以使用lsof工具列舉所有運行進程及其所打開的文件描述符,其中包括常規(guī)文件, 庫文件,目錄,UNIX流,套接字等。如果只想顯示網(wǎng)絡(luò)套接字的進程: [root@ay4z3ro foo]# lsof –i COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME portmap 620 rpc 3u IPv4 2598 UDP *:sunrpc portmap 620 rpc 4u IPv4 2609 TCP *:sunrpc (LISTEN) sshd 880 root 3u IPv4 2885 TCP *:ssh (LISTEN) X 908 root 1u IPv4 2945 TCP * 11 (LISTEN)其中特別需要注意的是奇怪的進程和已打開的原始套接字。 ================================ 尋找系統(tǒng)中是否運行一個非法嗅探器 ================================ 為了達到這個目的,我們需要檢查網(wǎng)卡是否處于混雜(promiscuous)模式: [root@ay4z3ro foo]# ifconfig –i eth0 | grep PROMISC PROMISC標志并不會在所有的*NIX上出現(xiàn),通過lsof+ps命令可以判斷系統(tǒng)是否正運行一個嗅探器?;蛘咄ㄟ^第三方的工具,比如AntiSniff。 ================= 檢查/proc文件系統(tǒng) ================= 在/proc/$PID/目錄下對于調(diào)查比較有意義的是:exe鏈接,fd子目錄,cmdline文件。 [root@ay4z3ro 880]# ls -al total 0 dr-xr-xr-x 3 root root 0 Sep 20 19:53 ./ dr-xr-xr-x 62 root root 0 Sep 20 15:07 ../ -r--r--r-- 1 root root 0 Sep 20 19:54 binfmt -r--r--r-- 1 root root 0 Sep 20 19:54 cmdline lrwxrwxrwx 1 root root 0 Sep 20 19:54 cwd ->; // -r-------- 1 root root 0 Sep 20 19:54 environ lrwxrwxrwx 1 root root 0 Sep 20 19:54 exe ->; /usr/sbin/sshd* dr-x------ 2 root root 0 Sep 20 19:54 fd/ -r--r--r-- 1 root root 0 Sep 20 19:54 maps -rw------- 1 root root 0 Sep 20 19:54 mem -r--r--r-- 1 root root 0 Sep 20 19:54 mounts lrwxrwxrwx 1 root root 0 Sep 20 19:54 root ->; // -r--r--r-- 1 root root 0 Sep 20 19:54 stat -r--r--r-- 1 root root 0 Sep 20 19:54 statm -r--r--r-- 1 root root 0 Sep 20 19:54 status Exe鏈接允許我們恢復被刪除的文件,只要這些文件仍然運行。為獲得“已刪除”可執(zhí)行文件的備份,只需要使用cp命令在該文件系統(tǒng)上 創(chuàng)建一個拷貝就行。通過檢查fd子目錄,可以識別該進程打開的所有文件。如果對unix環(huán)境下的編程有所了解的話,很容易就能發(fā)現(xiàn) 是在讀寫一個文件還是打開一個網(wǎng)絡(luò)連接。cmdline文件的內(nèi)容是該進程的完整命令行。以下語句是攻擊者的欺騙手段, strcpy(argv[0],”any_string”); 這樣該文件就顯示了一種假象,即使如此,我們?nèi)杂斜匾獧z查此文件。 ================================== 獲取所有文件的創(chuàng)建,修改和訪問時間 ================================== ls –alRu >; /mnt/usb/access ls –alRc >; /mnt/usb/modification ls –alR >; /mnt/usb/creation ============ 獲取系統(tǒng)日志 ============ 大多數(shù)UNIX的日志在/var/log和/var/adm目錄下,各種UNIX派生系統(tǒng)日志的具體位置有所不同。 在此之前,有必要了解針對特定系統(tǒng)的日志存貯位置。 比較重要的二進制日志文件: utmp,用w工具訪問; wtmp,用last工具訪問; lastlog,用lastlog工具訪問; 進程記賬日志,用astcomm工具訪問 常見的ASCII文本日志文件: apache日志--/var/log/httpd/access_log; ftp日志—xferlog; 命令歷史記錄文件; /var/log/messages; 檢查/etc/syslog.conf以及其他守護進程的配置文件以確定其余日志的位置。 ================ 獲取重要配置文件 ================ 檢查各配置文件查找后門位置,未授權(quán)的信任關(guān)系和未授權(quán)的用戶ID。 /etc/passwd,查找未授權(quán)的用戶賬號和權(quán)限。初級的入侵者會添加uid=0的用戶, 有人也會把系統(tǒng)中一個不起眼的原本沒有shell的普通賬戶改成可登陸獲得shell執(zhí)行命令, 然后他可以通過一個suid位的ksh或其他的安置在本地的后門馬上得到rootshell. /etc/shadow,確保每個用戶都有密碼認證;當然攻擊者給自己的賬戶加一個md5 hash其實也是非常簡單的事。 /etc/groups,查找權(quán)限的升級和訪問范圍的擴大。 /etc/hosts,列出本地DNS條目。 /etc/hosts.equiv,檢查信任關(guān)系。 ~/.rhosts,檢查基于用戶的信任關(guān)系,”++”這種很濫的后門相信大家都知道。 /etc/hosts.allow && /etc/hosts.deny 檢查tcpwrapper的規(guī)則。 /etc/rc*,檢查啟動文件。 Crontab文件,列出計劃事件。 /etc/inetd.conf,列出端口所監(jiān)聽的服務(wù)。 =========== 轉(zhuǎn)儲系統(tǒng)RAM =========== 主要是從系統(tǒng)轉(zhuǎn)移/proc/kmem或/proc/kcore文件,該文件以非連續(xù)方式包含系統(tǒng)RAM的內(nèi)容。 {{深入調(diào)查}} ============ 檢查系統(tǒng)日志 ============ UNIX有很多日志,這些為應(yīng)急響應(yīng)提供重要的線索。日志文件大多位于公用目錄,通常是/var/log,或/usr/adm,/var/adm, 有些日志位于禁止訪問的/etc目錄。具體請參考當前操作體系統(tǒng)文檔。 其中syslogd守護進程提供非常強大的日志功能,比如裝載一個內(nèi)核模塊的登記,其配置文件為/etc/syslog.conf, 通常它提供的最有用的日志是:messages,secure,syslog.在syslog.conf中每一行含有三個字段: facility字段表示產(chǎn)生該日志文件的子系統(tǒng);priority字段表明事件的嚴重級別; action字段表明如何記錄日志,它提供了遠程網(wǎng)絡(luò)記錄的能力。 TCP wrapper日志也利用syslog記錄,其中可能會有telnet,ssh,ftp等遠程登錄的信息。這些日志中有很多有價值的條目: 嘗試登陸的時間日期,主機名稱,訪問的服務(wù)類型,以及源IP地址。 其他的網(wǎng)絡(luò)日志比如,web,ftp,sql通常自身都提供了較為詳細的信息。Apache默認日志在/usr/local/apache/logs, 最有用的日志是access_log,還有ssl_request_log,ssl_engine_log也能提供有價值的信息。其中可能包含攻擊前的掃描記錄。 Su命令日志,記錄了每一次執(zhí)行su命令的動作:時間日期,成功與否,終端設(shè)備,用戶ID.有些UNIX具有單獨的su日志, 有些則保存在syslog中。 登陸用戶日志:utmp或wtmp文件保存了有關(guān)當前登陸到系統(tǒng)的用戶的信息。此文件根據(jù)各UNIX版本的不同, 名稱及存儲位置有所差異。保存的基本信息是用戶名,用于登陸的終端以及登陸的時間。文件以二進制格式存儲。 查詢utmp,wtmp文件應(yīng)使用適當?shù)目蛻舳?,如w,who,finger,last.檢索成功,失敗與用戶名未知的登陸條目。 Cron日志記錄了定時作業(yè)的內(nèi)容,通常在/var/log/cron或默認日志目錄中一個稱為cron的文件里。 進程記賬,如果系統(tǒng)存在acct或pacct日志文件,則可使用lastcomm或acctcom命令查看。該日志為二進制文件。 Shell歷史記錄: [root@ay4z3ro foo]# less ~/.bash_history 如果.bash_history被鏈接到/dev/null文件,或者環(huán)境變量中的$HISTFILE,$HISTFILESIZE兩個變量值為0,那么肯定有人非法活動過了。 大多數(shù)入侵者都會修改或刪除日志,雖然理論上能夠做到除種植lkm rootkit之外幾乎不留任何痕跡,但在實際入侵中, 善后工作實際上是個不小的工程,不僅依賴入侵者對系統(tǒng)的熟知程度,而且當處理過多繁瑣的內(nèi)容時,疏忽很容易出現(xiàn)。比如:剛得到 rootshell時unset HISTFILESIZE,退出時忘了復原,留下一條痕跡。諸如此類的例子還有很多,日志清除工具是死的,它只會清除預(yù)定義的 項目,雖然你也能修改源碼,但那樣還是不能隨機應(yīng)變。最保險的方法就是手工勞動,這樣就加大了入侵者的負擔。出于懶惰, 對系統(tǒng)掌握程度不夠或是各種各樣的原因往往還是會留下一些對我們有價值的東西。所以,檢查日志對應(yīng)急響應(yīng)來說非常重要。 ============== 執(zhí)行關(guān)鍵字搜索 ============== 無論是對何種操作系統(tǒng)進行應(yīng)急響應(yīng),關(guān)鍵字搜索都是該過程的一部分。針對某個具體事件,可能會有一些ID,phrase與此事件密切相關(guān), 執(zhí)行關(guān)鍵字搜索可以找到更多的信息。關(guān)鍵字可以是很長的ASCII字符串,包括攻擊者后門密碼,用戶名,MAC地址或IP. 例:搜索整個文件系統(tǒng)中包含”ay4z3ro”字符串大小寫形式的所有文件: [root@ay4z3ro foo]# grep –r –i ay4z3ro / strings命令用于顯示文件中的可打印字符,例如:srings /bin/login用于顯示login后門中的密碼(未加密的明文,編碼或加密后的散列)。 Find命令用于尋找匹配常規(guī)表達式的任何文件名。例: 在整個文件系統(tǒng)中搜索名為”…”的文件或目錄: [root@ay4z3ro foo]# find / -name “\.\.\.” –print 此外find命令可以匹配的特征還包括:修改訪問時間,文件所有者,文件內(nèi)的字符串,文件名的字符串等。 Find命令的-exec選項與grep,strings結(jié)合使用體現(xiàn)了unix的天才氣質(zhì),那樣干起活來非常方便。 ================ 確定突發(fā)事件時間 ================ *如果有IDS,確保IDS系統(tǒng)時間與受害系統(tǒng)時間一致。 *檢索系統(tǒng)中突發(fā)事件前后創(chuàng)建和被改動的文件,可能會有驚喜地發(fā)現(xiàn)。 ====================== 恢復被刪除的文件和數(shù)據(jù) ====================== 這個過程需要操作者對unix/linux文件系統(tǒng)的體系結(jié)構(gòu)有所了解,這里并不打算去介紹文件系統(tǒng)的數(shù)據(jù)結(jié)構(gòu)及其代碼的實現(xiàn), 而是簡單的說明一下,刪除一個文件其實只是將inode節(jié)點的部分數(shù)據(jù)和指針置0,在下次數(shù)據(jù)覆蓋以前并沒有將節(jié)點指向的 數(shù)據(jù)塊的內(nèi)容刪除。要想恢復刪除的文件,需要使用inode節(jié)點的信息重建文件大小和數(shù)據(jù)塊列表。 找到文件節(jié)點信息: [root@ay4z3ro foo]# ls –i /tmp/x.d 82241 /tmp/x.d 表明/tmp/x.d位于82241節(jié)點。 TCT(The Coroner’s Toolkit)是一個非常有用的工具包,其中的icat可以查看指定節(jié)點上文件的全部內(nèi)容。 [root@ay4z3ro TCT]# ./icat /dev/hda5 82241 如果程序還在運行,可以使用lsof命令引用NODE欄查找節(jié)點信息。 恢復一個文件只需要: [root@ay4z3ro TCT]# ./icat /dev/hda5 NODE >; some.recovery TCT中還有很多有用的工具,例: [root@ay4z3ro TCT]# ./ils –A /dev/hda5 | grep “|501|” 以上命令行找出與UID=501用戶有關(guān)的所有被刪除的文件。 TCT鏈接:http://www./forensics/ ============ 檢查特殊文件 ============ SUID和SGID文件: --------------- [root@ay4z3ro /]# find / -type f ( -perm -04000 -o -perm -02000 ) -exec ls -lg {} 從中查找那些原本不含有S位的,不尋常的或是被放在一個奇怪地方的S位程序。把/bin/ksh改名后放在/tmp(777)目錄下就是一種后門。 不常用的和隱藏的文件及目錄: --------------------------- UNIX系統(tǒng)中以”.”開頭的文件都是隱藏的,如果ls不加”-a”參數(shù)就不會出現(xiàn)在文件列表里,攻擊者經(jīng)常利用的還有:”…”。 用隱藏字符對目錄進行重命名是一種黑客技巧,比如有的文件名是這樣的:”..^T”,”… “(注意三個點后面有個空格)…… 這可以欺騙很多系統(tǒng)管理員。 怎么辦呢?如下: [root@ay4z3ro foo]# ls –al “| cat –tve” cat命令的參數(shù)讓其顯示非打印字符,顯示制表符并在每個結(jié)尾放置一個$,所以以上目錄會顯示為:”..^T$”,”… $”。 要進入前一個目錄在T之前按下CTRL+V,而不是用^符號,進入后一個目錄則是:[root@ay4z3ro foo]# cd “… “ 配置文件: --------- 一個攻擊者如果擁有相當熟練的系統(tǒng)管理技能,偷梁換柱,在配置文件中做點手腳是很輕而易舉的事。 比如修改或添加/etc/services,/etc/inetd.conf,不過對于熟練的系統(tǒng)管理員來說,這樣的后門很容易發(fā)現(xiàn)。 還有就是某些exploit的副產(chǎn)品,比如那個Solaris2.6的Sadmind RPC遠程溢出,默認的攻擊程序就是溢出后在/etc/inetd.conf 添加一句偽造ingreslock服務(wù)把/bin/sh綁定在1524端口。水平差的攻擊者通常不會注意這個問題。 啟動文件: ---------- 上面的inetd.conf就是這類文件,除此之外還有cron文件,目錄/var/spool/cron,/usr/spool/cron用來為不同用戶保存cron作業(yè)。 該目錄中的文件以用戶賬號命名,并且其中的任務(wù)以該用戶特權(quán)運行。此目錄下的root文件應(yīng)該是我們關(guān)注的。 有人喜歡在半夜啟動木馬運行一個bindshell,然后過幾個小時又把開放的端口關(guān)閉。 /etc/rc*是開機自動運行腳本,也經(jīng)常被攻擊者利用。 剩下的還有用戶啟動文件,如login,profile, .bashrc, .cshrc, .exrc可能被插入特洛伊語句,在www.apache.org被入侵 的事件中就曾被利用過。 /tmp目錄: ------------- /tmp目錄的權(quán)限默認是777,這是攻擊者經(jīng)常利用的地方,很多黑客工具也利用此目錄存儲中間文件,如果攻擊者不小心, 就會在此留下尾巴。 ================ 檢查用戶賬號和組 ================ 有些賬號是為系統(tǒng)而設(shè),本來沒有shell,也不能登陸,攻擊者可能會利用這點。剛學習UNIX入侵沒多久的人可能會這樣: echo “aya :0:0:intruder!!:/:/bin/sh”>;>;/etc/passwd,更有可憐的家伙因為少了一個”>;”而破壞了passwd文件,弄得自己都無法登陸?,真見過這樣的家伙,說實話我自己也干過,不過是發(fā)生在自己的Linux上,所以沒有鑄成大錯。 老練的不會這樣做,他們可能會從一堆用戶中挑出一個不起眼的,然后占為己有,遠程合法登錄取得shell后本地再升級為root. 我相信這個問題對我們來說很好解決。 ============ 識別非法進程 ============ 監(jiān)聽服務(wù)和運行進程相關(guān)的二進制文件都應(yīng)該檢查,查看/etc/inetd.conf時可能會發(fā)現(xiàn)合法的服務(wù)在合法的端口監(jiān)聽, 但是那個進程的二進制文件可能是被替換過的,所以先要確保正在運行的不是rootkit(lrk4,lrk5……) [root@ay4z3ro tool]# ./chkrootkit chkrootkit是一個用于檢查完整性的工具,如果之前用過tripwire,則可以用tripwire校驗。 或者用rpm自身的MD5校驗和功能。 ============ 勘查系統(tǒng)弱點 ============ 檢查各服務(wù),應(yīng)用程序,內(nèi)核及補丁的版本,對照bugtraq上已知的漏洞列表,查找系統(tǒng)弱點,從正面挖掘潛在的和可能被忽略漏洞。 這要求響應(yīng)人員具有一個職業(yè)入侵者的相關(guān)技能!試圖扮演一個入侵者也能從中發(fā)掘?qū)Ψ绞侨绾芜M入系統(tǒng)的。 ============ 分析信任關(guān)系 ============ 首先UNIX中的信任關(guān)系一度成為被攻擊的弱點。其次,如果該關(guān)系被利用,那么受害范圍將擴大, 此時受信任的系統(tǒng)也被認為是不安全的,并將其同時列入響應(yīng)對象的范圍。 ============ 分析黑客工具 ============ 如果很有幸的,入侵者留下了或者是我們用某種聰明的辦法恢復了入侵者在活動過程中使用的工具,代碼,就可以對其進一步分析。 如果是源代碼,直接拿過來就能讀(當然是LKM RootKit的源碼最好,呵呵)。不熟練的家伙甚至把原來的工具比如sniffit名字都不 改就運行了,這樣的就比較好對付。 如果我們得到的是一個正在運行進程的二進制文件的副本,可以使用gdb等調(diào)試器反匯編,跟蹤調(diào)試。 但是如果一個極具水準的攻擊者這樣編譯他的程序: [root@ay4z3ro evil]# gcc –O4 evil.c –o evil 用-O4參數(shù)優(yōu)化編譯后會減少指令,然后用strip去掉二進制文件中的符號信息: [root@ay4z3ro evil]# strip ./evil 這樣我們的工作就會變得非常困難。 File命令可以顯示文件的類型信息,是否被strip過等。 Strings命令可以用來顯示可執(zhí)行文件中的ASCII字符串,比如一個本地緩沖區(qū)溢出exploit中由printf()語句控制的行,出錯處理的消息, 默認的-h參數(shù)的返回信息等。此外還有可能得到函數(shù),變量名,編譯之前所用的文件名,創(chuàng)建該文件的編譯器版本等,通過這些關(guān)鍵字進行 在線搜索就有可能找到該工具的源碼。 同樣我們可以對二進制文件進行動態(tài)分析,用strace工具跟蹤系統(tǒng)調(diào)用。strace顯示了文件執(zhí)行時所產(chǎn)生的文件訪問,網(wǎng)絡(luò)訪問, 內(nèi)存訪問和許多其它的系統(tǒng)調(diào)用信息。通常通過觀察關(guān)鍵的系統(tǒng)調(diào)用我們大致能確定該程序作了什么。由此重構(gòu)該文件的運行情景也是可能 的。strace給我們提供了極大的方便,在整個響應(yīng)過程中,我們還可以利用它做很多事情。 {{后話}} 應(yīng)急響應(yīng)并不需要完全遵循固定的模式,思路新穎可以適度發(fā)揮,如果遇到的對手是水平極高的攻擊者,應(yīng)該適當改變策略, 為了安全起見,最后重裝系統(tǒng)或許也是必要的。 寫給廣大“搞機器一族”的話: 縱使有人覺得自己入侵技巧高明,但事實上防御的一方總是或多或少的有些出乎你意料之外的對策,一點小馬虎可能就會使你很難堪。 即使你認為已經(jīng)清除了目標系統(tǒng)上所有的日志,但是前端路由器或IDS,F(xiàn)irewall上可能有你無法“處理”甚至你未曾察覺到的跟蹤記錄, 為了自身的安全,找一條快速的線路,用多重跳板來發(fā)動一次真正的攻擊是很有必要的。從“開始”到“結(jié)束”都不能暴露自己! |
|
|