東山再起-談被入侵系統的復原

當系統被侵入,即使尚未對系統產生明顯的影響,管理者應當立即採取行動,詳查入侵原因、追蹤入侵途徑並進行系統消毒與復原工作。被入侵系統的處理基本上可以分成三個階段,第一階段為隔離及觀察期,我們要做的是避免系統繼續受影響、保留現場、記錄現狀,並進行入侵分析,此一階段所得將可作為系統復原之依據;第二階段為回復與重建期,我們要做的是第一階段資料收集及分析所得,作成如何回復系統的依據,通常我們可以有兩種做法,一是部份重建,清除並回復系統受入侵者影響的部份,並針對系統弱點補強,第二種做法是重建整個系統,同時針對系統及應用程式弱點加強;第三階段為重新上線期,管理者要注意的是小心地恢復使用者資料、正確完成系統組態設定、系統初始狀態記錄,並持續觀察系統運作。以下我們針對這三個階段應完成及注意事項逐一說明。

bullet

系統隔離與觀察
隔離是為了避免災情擴大或殃及『網鄰』,觀察是為了分析『災情』,重建犯案現場。作為犯行追查,以及稍後重建與防治參考。

bullet

重要資料備份
盡管系統被入侵後,每一部份都有被污染的嫌疑,為防萬一,在做進一步處理之前你仍必須針對重要資料妥善備份。這些資料包括使用者資料、系統設定檔等。

bullet

中斷網路連線
我們都有經驗在個人電腦中毒之後,必須以乾淨的開機片重新開啟系統後,再行系統掃毒工作,其目的在於避免在一個不安全(已中毒)的環境下,進行系統安全作業。遭入侵的系統,基本上也是處在一個『不安全』的狀態,系統入侵來源絕大部份來自網路,中斷網路連線是避免系統入侵分析與復原過程中,再遭受到干擾,或另一波的入侵傷害。
系統的單人模式(Single User Mode)通常是為了系統維護時使用,在這個模式下只有部份必要的系統服務會被開啟。將系統重新開啟至單人狀態是另一種隔離系統外使用者的方法,可是通常在你重開機的過程中,現場已經破壞,你會損失部份可能與系統被入侵有關的資訊,例如你將無法得知系統中斷(reboot)那一瞬間process執行的狀況。如果你決定將系統重開至Single User Mode,至少應該在將收集足夠的系統運作訊息之後再進行。這些資訊應該包括系統正在執行的process情形、scheduled jobs(at or cron)狀況、線上user login狀況(誰,從何而來,正在做什麼)、系統上是否有類似sniffer的程式正在執行(檢查方式可以參考http://xxx.xxx),以及備份系統相關的記錄檔。
如果情況許可,你可以備份系統復原前的完整狀況。Linux環境下,如果你有一顆與系統碟一模一樣的硬碟,你可使用指令『dd』(Disk Dump)來製作一份系統快照(Snapshot),以利日後追查及參考。

bullet

找尋遭篡改及污染的檔案
這包含兩部份,一是系統可執行檔(binary file),一是系統設定檔。
Binary file通常是木馬程式(Trojan Horse)藏深之處,Binary File是否遭篡改的檢查通常可以經由比對原始正常檔案的長度、修改日期的改變而得知。另外,Binary File的”Sum”或MD5運算所得的比對,通常可以提供一個更精確的結果;因為有些木馬程式可以在修改原始檔案後,輕易的改變檔案修改日期與長度的資訊。經常遭木馬程式取代的Binary File包括:telnet、in.telnetd、login、su、ftp、netstat、ls、ps、find、du、inetd等常用的一般使用者與管理者指令。當然,你能進行比對的先決條件在於你在系統及應用程式安裝之後,開放使用之前,曾經記錄下這些檔案的相關資訊。另外如前所提,不正常的SUID與SGID程式,也應一併被檢查。
系統設定檔影響系統server程式的運作,可能被篡改的系統設定檔包括/etc/inetd.conf (for TCP/IP Super Daemon 『inetd』) 、/etc/services (for TCP/IP Super Daemon 『inetd』)、/etc/mail/sendmail.cf (for sendmail)、/etc/exports(For NFS)、/.rhosts(For r-Command)、/etc/hosts.equiv(For r-Command)、/etc/group(系統群組記錄檔)、/etc/passwd(使用者資訊記錄檔)及/etc/shadow(使用者密碼記錄檔)及系統中所安裝的相關應用程式設定檔(例如/etc/httpd/conf/httpd.conf等)。這些檔案因維護所需的正常變動,管理者都應養成記錄及備份的習慣。

bullet

系統記錄檔的的檢查
UNIX系統有相當完整的系統運作記錄,經由這些記錄檔的檢視,可以幫助你了解你的系統如何被入侵,必要時也可以助你追究相關責任。重要的系統記錄檔包括/var/adm/messages、xferlog、utmp、wtmp、syslog、pacct及secure等。這些檔案的意義及檢視方法可參考本人作品『由UNIX系統日誌談系統管理』(網址http://nmc.nchu.edu.tw/linux/system_log.htm)。

bullet

檢查網路上其他可能被影響的主機
網路上Client/Server關係的運作模式使得彼此間都可能是一個生命共同體,一台機器被入侵,很可能其他相關電腦也不保,你必須依循前面所提及的檢查步驟,逐一確認你的轄區之內所有電腦,是否依然健康如昔。

bullet

系統回復與重建
bullet

系統部份重建
系統部份重建指的是將受污染或篡改檔案及系統相關組態設定,恢復恢復至正常狀態並移除入侵者放置之不正常檔案。這種重建方式成功要件有二,一是你確定了解所有遭影響的檔案與系統組態,一是你可以把他們還原至正常狀態。基本上一個遭入侵的系統,本身即不可靠(Not trusted),在這樣一個不可靠的環境下完成一個完整(Completd)的系統復原,有其困難度在。通常只有在不得不的情形下,我們才會藉助這種方式復原系統。

bullet

重灌系統
這是唯一可以保證可以得到一個完全乾淨無污染的作業環境的方式,使用原版光碟是避免再一次受污染的方法。重灌系統前相當重要的一件事是資料的備份,建議盡量留下原有系統的影像(System Image),因為萬一你失手,最少你還可將系統恢復至重建前的模樣,再來一次。

bullet

系統與應用程式的漏洞修補(Patch)程式安裝
盡管你的系統、應用程式及相關設定都已恢復原狀,你原有系統曾被入侵,即代表他可能存在某些讓入侵者有機可趁的漏洞。系統與軟體廠商通常會針對所生產的軟體的已知漏洞,撰寫修補程式,建議你經由各種管道取得所有與安全有關的修補程式,並依說明安裝再你的系統中。修補程式的來源你可以參考廠商網站,或留意CERT的Advisories網站(http://www.cert.org/advisories)。

bullet

系統重新上線
在你完成系統重建之後,理論上你的系統已經是『乾淨』的了,然而,在你讓系統重新上線提供服務之前,為確保新系統的安全,有些細節仍值得你注意。

bullet

再一次檢查所有組態檔案
如果你不曾記錄你的系統正常時的組態,你必須相當小心使用並修改由原被入侵系統而來的組態檔案,否則一切將會是功虧一簣。/etc/passwd與/etc/shadow應特別注意,因為他們掌管進入你的系統之鑰。

bullet

關閉不必要的系統服務
每一種應用程式撰寫時,多多少少都會有在安全上考慮不周全之處,網路上的安全通報也常會出現許多服務程式被發現漏洞的報導,多一個不必要的服務,通常就多一個可能入侵的弱點。你的網站應該盡量把不必要的服務關閉,以免入侵者有機可趁。在UNIX系統中,你應該特別注意/etc/inetd.conf與/etc/services這兩個檔案,把不必要的服務定義前加個”#”符號,重新啟動『inetd』即可關閉這些服務。

bullet

記錄重要系統檔案『指紋(Fingerprit)資料』,供日後資料比對依據
檔案的指紋資料指的是檔案的特徵記錄,可供記錄的特徵包括檔案長度、修改日期,或是經由類似MD5數位運算所得的結果。Linux系統本身提供『md5sum』這個工具,你可以利用他留下系統所有可執行檔及重要檔案的特徵。系統第一次開放使用前,是你留下這些特徵的最佳機會,也是唯一的一個絕對安全的時機。

下面這行指令可以讓你留下系統所有可執行檔的MD5 Check Sum:
find / -type f -perm -111 -print |awk ‘{print “md5sum “$1}’ | sh
結果類似:

04e947284b18b1a9f935f32e5dc0eb9b /bin/kill
3beb34844da605ad27ba8cf4daa5e3e5 /bin/login
a631fc4055b5dbe63418a89457529f88 /bin/more
5aec9206adc296f8efd8235b3dfe11e2 /bin/vimtutor
c1fcf399f77a2681a3aef8de12473e1c /bin/vi

而這正是你該保留的『檔案指紋』,日後你只要重新執行上面的指令,並比對結果,即知檔案是否遭木馬程式篡改

bullet

恢復並檢查使用者資料
檢查項目包括使用者目錄是否存在SUID、SGID或Owner屬Super的檔案,這些都可是將危害你系統的檔案。

bullet

一併檢查網路上的分享資源
你所作的所有步驟,目前為止並未包含你的系統所使用的任何網路資源(例如NFS檔案系統、NIS Map等等),你應該也一併檢查一下這些來自網路的東西(如果你有足夠權限的話)。

bullet

記錄下你重建系統的過程
記錄操作過程目的有二,一是萬一過程有錯便於回朔除錯(trace back),一是便於管理工作交接時,經驗的傳承。

bullet

更改密碼
重新開放前,記得更改管理者密碼。