在常見的安全保障模型中,有一個很著名的PDR模型,其中“P”是protection(防護),“D”是detection(檢測),“R”是 response(響應),安全保障的主要操作環節被分為防護、檢測、響應這幾個主要部分。其中應急響應是安全保障工作中一個非常重要的環節。由於在防護和檢測環節,通常比較成熟的應用都是針對已知特征來識別的,因此應急響應可以彌補前面各環節的不足的必要部分:在攻擊和防御的對抗中,攻擊方通常掌握著主動性和主觀能動性,而防御方只有應急響應這個環節可能具備能夠和攻擊方相抗衡的智能。
我們先來介紹一下應急響應的基本概念和基本內容。英文中緊急響應有兩種表示法,即Emergency Response和Incident Response,其含義是指安全技術人員在遇到突發事件後所采取的措施和行動。而突發事件則是指影響一個系統正常工作的情況。這裡的系統包括主機范疇內的問題,也包括網絡范疇內的問題,例如黑客入侵、信息竊取、拒絕服務攻擊、網絡流量異常等。一般來講,在攻擊開始以後,如果能夠做到在系統被攻克之前發現攻擊並進行有效的應對處理,使得攻擊不能奏效或被化解,則可以說實現了安全。可見,是否能夠做到及時發現和快速響應是實現安全的關鍵。
在現實生活中應急響應這個環節往往沒有得到用戶真正的重視。用戶總是覺得已經投入了很多購置了全套的設備,不能理解為什麼還要不斷地支出一筆似乎看不到回報的費用。可是實際上現實經驗越來越證明,缺少了高質量的應急響應,整個安全保障環節就好比一個上了大鎖的監視系統但是卻沒有配備保衛人員的住所,攻擊者總是可以想辦法進入住所的。
應急響應通常需要達到的目標首先是要確認或排除突發事件的發生。在實際的工作中,用戶大量的報警被發現是“虛驚一場”。用戶可能把各種由於其他原因導致的異常現象都歸咎於受到某種攻擊所帶來的結果。在一個案例中,有一個用戶甚至用絕對肯定的口氣說,他能夠感覺到有人在他的計算機沒有任何接口連入網絡的情況下,被別人通過電源線實施了監控。從網管的角度來看,經常會面臨各種流量異常的情況,其中有時候只是網絡中用戶應用情況的反映,而有時候確是網絡中正在發生某種大量的攻擊行為造成的。
應急響應的第一項任務就是要盡快恢復系統或網絡的正常運轉。在有些情況下,用戶最關心的是多長時間能恢復正常,因為系統或網絡的中斷是帶來損失的主要方面。這時候應急工作的一個首要任務就是盡快使一切能夠相對正常地運行。
應急響應的第二項任務就是要使系統和網絡操作所遭受的破壞最小化。通過收集積累准確的數據資料,獲取和管理有關證據。在應急的過程中注意記錄和保留有關的原始數據資料,為下一階段的分析和處理提供准確可信的資料。
最後應急響應要提供准確的分析統計報告和有價值的建議。在響應工作結束時提交的分析。
應急響應的主要階段
我國在應急響應方面的起步較晚,按照國外有關材料的總結,通常把應急響應分成幾個階段的工作,即准備、事件檢測、抑制、根除、恢復、報告等階段。 准備階段
在事件真正發生之前應該為事件響應作好准備,這一階段十分重要。准備階段的主要工作包括建立合理的防御/控制措施、建立適當的策略和程序、獲得必要的資源和組建響應隊伍等。
檢測階段
檢測階段要做出初步的動作和響應,根據獲得的初步材料和分析結果,估計事件的范圍,制訂進一步的響應戰略,並且保留可能用於司法程序的證據。
抑制階段
抑制的目的是限制攻擊的范圍。
抑制措施十分重要,因為太多的安全事件可能迅速失控。典型的例子就是具有蠕蟲特征的惡意代碼的感染。可能的抑制策略一般包括:關閉所有的系統;從網絡上斷開相關系統;修改防火牆和路由器的過濾規則;封鎖或刪除被攻破的登錄賬號;提高系統或網絡行為的監控級別;設置陷阱;關閉服務;反擊攻擊者的系統等。
根除階段
在事件被抑制之後,通過對有關惡意代碼或行為的分析結果,找出事件根源並徹底清除。對於單機上的事件,主要可以根據各種操作系統平台的具體的檢查和根除程序進行操作就可以了;但是大規模爆發的帶有蠕蟲性質的惡意程序,要根除各個主機上的惡意代碼,是十分艱巨的一個任務。很多案例的數據表明,眾多的用戶並沒有真正關注他們的主機是否已經遭受入侵,有的甚至持續一年多,任由他感染蠕蟲的主機在網絡中不斷地搜索和攻擊別的目標。造成這種現象的重要原因是各網絡之間缺乏有效的協調,或者是在一些商業網絡中,網絡管理員對接入到網絡中的子網和用戶沒有足夠的管理權限。
恢復階段
恢復階段的目標是把所有被攻破的系統和網絡設備徹底還原到它們正常的任務狀態。恢復工作應該十分小心,避免出現誤操作導致數據的丟失。另外,恢復工作中如果涉及到機密數據,需要額外遵照機密系統的恢復要求。對不同任務的恢復工作的承擔單位,要有不同的擔保。如果攻擊者獲得了超級用戶的訪問權,一次完整的恢復應該強制性地修改所有的口令。
報告和總結階段
這是最後一個階段,但卻是絕對不能夠忽略的重要階段。這個階段的目標是回顧並整理發生事件的各種相關信息,盡可能地把所有情況記錄到文檔中。這些記錄的內容,不僅對有關部門的其他處理工作具有重要意義,而且對將來應急工作的開展也是非常重要的積累。
以上總結了應急響應的重要性和必要性,下面介紹一下linux下應急響應的方法和流程,本文的測試系統為redhat9.0.
在linux上進行應急響應時,有必要創建自己的應急響應工具箱,這些工具包括如下命令,
ls dd des file
find cat lsof md5 sum nc
netstat pcat perl ps strace
strings truss df vi
cat kstat ifconfig chkrootkit
more gzip last w rm
script bash modinfo lsmod
在Linux上創建響應工具包時,可以用gcc的–static參數編譯源代碼,或者用ldd檢查動態連接庫,在響應工具包存儲介質上建立庫文件目錄,並拷貝所有工具需要的動態連接庫的副本,最後設置環境變量。當然現在網上也有很多很優秀的應急響應工具,例如knoppix-std就是一款很優秀的應急響應工具,大家可以從http://s-t-d.org/download.html下載到knoppix-std的最新版本。
當有了自己的應急工具箱之後,我們就可以進行具體的應急響應步驟了,這裡我們分如下幾個步驟:
查看登陸系統的用戶:
我們用w命令顯示當前所有登陸系統的用戶,如圖1所示,輸出標題行顯示了當前系統時間,該系統已運行的時間,當前登陸用戶數,最近1分鐘,5分鐘和15分鐘內的平均系統負載。
USER字段顯示當前登陸的用戶名。TTY字段顯示了會話的控制終端,tty表示從控制台登陸,pts/typ則可以表示通過一個網絡連接,
查看系統開放的端口:
我們用netstat –an命令來顯示當前系統開放的端口,有時系統開放的端口比較多,一頁顯示不了,我們可以用|more這個管道命令使結果分頁顯示,便於我們查看,如圖2 所示,輸出行有5個結果,其中比較重要的是proto顯示了使用協議,local address顯示了使用的本地ip,這對於NAT地址轉換的情況比較有用,還有foreign address顯示了外部ip,
state顯示了當前這個連接的狀態。
查看系統進程:
我們用ps –aux來查看系統的進程列表,如果進程很多,我們同樣用|more管道來分頁顯示結果,ps命令輸出中的START字段顯示了程序開始運行的時間,對於查出攻擊時間很有幫助。有時僅通過時間就能識別可疑進程。
檢測rootkit:
僅僅做了以上工作是不夠的,Linux和幾乎所有的UNIX都支持LKM(Loadable Kernel Modules),用普通的方法無法檢測其存在,這給應急響應帶來了極大的挑戰性。對於我們來說,解決的辦法是找到那些rootkit.所謂 rootkit, 就是有心人士, 整理一些些常用的木馬程序, 做成一組程序套件, 以方便 黑客攻入主機時, 在受害的主機上, 順利地編譯和安裝木馬程序。有時lkm rootkit雖然被成功裝載,但在系統的某些細節上會出現“異常”,甚至可能使系統在運行一段時間後徹底崩潰。還有,lkm雖然活動在ring0核心態,但是攻擊者往往會在系統的某處留下痕跡,比如攻擊者為了讓系統每次關閉或重啟後能自動裝入他安置的內核後門,可能會改寫 /etc/modules.conf或/etc/rc.local等。我們可以通過chkrootkit來檢測。
chkrootkit檢測系統常用命令以及系統的日志和文件,查看是否有惡意程序侵入系統,並且尋找關聯到不同惡意程序的信號。使用chkrootkit非常簡單。編譯程序,解壓tar.gz文件,然後如下執行:
# make sense 即可編譯。
在完成這個過程之後,你就會看到一個可執行程序:chkrootkit.把這個可執行程序的路徑加入系統PATH路徑,定期地運行這個程序,就可以定期檢測機器上是否有惡意rootkit軟件。檢測過程如圖4所示。
獲取系統日志:
大多數UNIX的日志在/var/log和/var/adm目錄下,各種UNIX派生系統日志的具體位置有所不同。
在此之前,有必要了解針對特定系統的日志存貯位置。
比較重要的二進制日志文件:
utmp,用w工具訪問;
wtmp,用last工具訪問;
lastlog,用lastlog工具訪問;
進程記賬日志,用astcomm工具訪問
在這些日志文件中,最有用的是messages,secure這兩個,圖5是用more secure 加上|more這個管道的部分顯示結果,從日志中我們可以看到哪些時候哪些用戶從哪些地方登陸進系統,這對我們的響應取證非常有用。
以上是進行應急響應的最重要的一些步驟,當然針對具體的情況需要具體的分析,有時我們需要對包含用戶賬號的/etc/passwd文件進行檢查,以查看是否有陌生的賬號成為系統用戶。我們也可以使用md5軟件對系統中的重要命令和配置文件進行檢查和定期對比,以發現潛在的入侵和攻擊。另外我們還可以使用 portsentry這個工具進行檢測,PortSentry在被保護的機器上是以daemon的形式運行的。在它運行期間,它會監聽你指定的 TCP/UDP端口。假如它檢測到一個端口掃描行為,它就會根據對方的IP地址,阻塞這個掃描主機與你機器之間的所有連接。總之Portsentry 就是一個反掃描工具。它可以實時發現並分析記錄對本機的掃描, 它主要做以下工作:
通過 syslog 做記錄;
將掃描的主機加入 /etc/hosts.deny;
馬上禁止所有通向掃描主機的網絡流量;
過濾掉所有來自掃描主機的網絡流量。
Portsentry可以從http://www.psionic.com/abacus/portsentry這個網站下載相應文件,當前portsentry的最新版本為1.0版,下載後,需要進行解壓,如下:
#gzip -d portsentry-1.0.tar.gz
#tar xvf portsentry-1.0.tar
這樣會生成一個名為portsentry-1.0的目錄,我們進入這個目錄,可以看到內有README.install等相關文件,為了順利安裝它,我們主要需要關注兩個配置文件,portsentry_config.h和portsentry.conf.
"/usr/psionic/portsentry/portsentry.conf"是 portsentry 的主配置文件。您可以在這個文件中設置您所要監聽的端口,以及哪些 ip 地址被拒絕,哪些被忽略等等信息。如果您了解詳細的信息,可以查看 "README.install" 文件。
"/usr/psionic/portsentry/portsentry.ignore" 文件定義了在執行端口掃描分析時必須要忽略的主機,也就是說即使這些主機進行了掃描活動,portsentry 也不會采取任何行動。
Portsentry 有以下6種啟動方式:
portsentry -tcp (basic port-bound TCP mode)
portsentry -udp (basic port-bound UDP mode)
portsentry -stcp (Stealth TCP scan detection)
portsentry -atcp (Advanced TCP stealth scan detection)
portsentry -sudp ("Stealth" UDP scan detection)
portsentry -audp (Advanced "Stealth" UDP scan detection)
建議您可以使用下面兩種方式啟動 portsentry:
portsentry -atcp (Advanced TCP stealth scan detection)
portsentry -sudp ("Stealth" UDP scan detection)
然後我們在/etc/rc.d/rc.local中加入/usr/local/psionic/portsentry/portsentry –atcp就可以在每次啟動時自動啟動portsentry了,這樣系統就可以自動對一些端口進行檢測,如果發現掃描就自動就ip加入 /etc/hosts.deny中,拒絕這台ip對機器的訪問。
以上是應急響應的一些主要的步驟和流程,希望通過這些總結,給大家帶來幫助。