【廉環話】安全入侵應對實務——操作系統篇
原創【51CTO.com原創稿件】小伙伴們,您是否還對近期發生的勒索軟件全球肆虐事件心有余悸呢?是否還未走出本周繁復的系統檢查與補救陰霾呢?這讓我突然想起了上個月底和大家分享過的一篇原創文章--《安全事件應急響應新思路》。說那是“一語成讖”也好,安全事件的新常態也罷,反正安全攻擊這個“殺手可沒有假期”哦。依稀記得我在那里以五步流程的方式提出了實現安全事件管控的整體框架。那么,這一次就讓我“以CISSP的名義”,來深入地給大家講解一下在面對可疑的信息安全入侵事件時,如何采取的實際操作各個步驟和相關的知識點吧。想必大家都知道這么一個道理吧:沒有人只是通過閱讀鋼琴譜,就能夠學會彈鋼琴的。所以,我強烈建議您:一邊閱讀本文,一邊動動手指頭來跟著操作一番吧。
第一階段:基礎與準備
1. 確保能夠以最直接的物理訪問方式登錄到可疑的系統上進行各種取證操作。
2. 斷開可疑系統與外界的任何網絡以及USB方式的連接。
3. 準備好用于對物理硬盤進行掃描和鏡像的各種工具。
4. 事先識別出系統處于正常網絡和服務狀態的特征,并有相關知識儲備。在安全之處(如配置管理數據庫)存放相關文件,并記錄著系統中所有正常活動所用到的端口,以及各種進程的特征列表。其中,在Windows里以:“服務名—端口號—進程名”的對應格式,而Unix/Linux里則可以是:“端口號—數據流規則”的map形式。在必要時,可以將其與可疑系統的當前狀態做比較。
5. 識別出系統處于正常服務狀態時所用到的系統級別的特有服務與相關技術(如系統自帶的VPN服務)。必要的時候,可以事先向Windows或Unix/Linux專家咨詢或是從網上獲取相關知識與經驗。
6. 如果企業較大,所有用戶的操作系統(特別是Windows)應被統一的鏡像文件所安裝。所有被預安裝的應用程序及其版本號等信息,都應當被記錄在案。考慮到可能增加的任何不安全的進程與服務,不允許用戶擅自安裝的軟件。
7. 另外,對于安裝有Unix/Linux的服務器系統,其所有的重要文件(特別是SUID和GUID文件)列表同樣應當被編錄到文件中。在必要時,可以將其與可疑的SUID文件做比對檢查。
總之,我們對系統的“清潔”狀態越了解、掌握得越全面,我們就越容易越及時地檢測出那些正在進行的異常活動。
第二階段:識別與檢查
由于這次我們針對討論的是操作系統,而眾所周知一般分Windows和Unix/Linux兩大陣營,因此我將采用并行比較的方式來逐步展開和推進。大家可以操起吃飯的家伙了。對,是電腦+鍵盤!不是飯碗+筷子哦!
1. 非正常賬號的檢查
· 對于Windows
◆運用C:\> lusrmgr.msc或是C:\> net localgroup administrators命令來檢查是否有被Administrators所創建的非正常的賬號。
· 對于Unix/Linux
◆查看/etc/passwd、/etc/group和/etc/shadow里的可疑條目,特別是那些UID 0的。
◆運用# find / \( -nouser -o -nogroup \) -print命令來查看哪些在攻擊中被刪除的賬號所遺留的孤獨文件(orphaned files)。
2. 非正常文件的檢查
· 對于Windows
◆考慮到系統可能被一些非法文件所濫用,應運用高級查找或特殊工具來掃描系統中大于10MB的文件,并逐一進行甄選。
◆檢查新近增加的非正常的系統文件,特別是在C:\WINDOWS\system32下的。
◆運用C:\> dir /S /A:H命令來檢查具有隱藏屬性的各種文件。
◆運用“windirstat”之類的工具來獲知各類文件在硬盤上所占的空間比例。
· 對于Unix/Linux
◆運用# find / -uid 0 \( –perm -4000 –o –perm 2000 \) –print命令來檢查所有SUID和GUID文件。
◆運用如下命令來檢查所有以“. ”or “.. ” or “ ”開頭的非正常的文件名。
# find / -name “ *“ –print
# find / -name “. *“ –print
# find / -name “.. *“ –print
◆運用# find / -size +10MB –print命令來查找大于10MB 的文件。
◆運用# lsof +L1命令來查找那些不再關聯(unlinked)的文件的各種進程。
◆檢查/proc和/tmp目錄下是否存在非正常的文件,特別是/tmp目錄可能會被攻擊者用來存放數據和惡意的二進制文件。
3. 非正常注冊表項的檢查
◆運用“HiJackThis”之類的工具掃描Windows的如下注冊表項,以檢查是否有在啟動時自動運行的非正常的程序。
HKLM\Software\Microsoft\Windows\CurrentVersion\Run HKLM\Software\Microsoft\Windows\CurrentVersion\Runonce HKLM\Software\Microsoft\Windows\CurrentVersion\RunonceEx
◆檢查賬號的開始目錄(Startup folder),以及如下自動運行(Autostart folder)目錄。
C:\Documents and Settings\user\Start Menu\Programs\Startup
C:\WinNT\Profiles\user\Start Menu\Programs\Startup
4. 非正常進程與服務的檢查
· 對于Windows
◆運用C:\> taskmgr.exe或tasklist命令,以及“psexplorer”之類的工具來檢查所有的,特別是用戶名為“SYSTEM”和“ADMINISTRATOR”的,非正常的或未知的進程。
◆運用C:\> services.msc和C:\> net start命令來檢查已安裝和開啟的非正常的網絡服務。
· 對于Unix/Linux
◆運用# chkconfig –list命令來檢查所有開啟的服務。
◆運用# ps –aux命令來查看所有正在運行的進程;對于未知進程,可用到 lsof –p [pid] 命令。特別關注運行在UID 0下的那些進程。
5. 非正常網絡活動的檢查
· 對于Windows
◆運用C:\> net view 127.0.0.1命令,以及“tcpview”之類的工具來檢查各個文件的共享,及其共享用途。
◆運用C:\> net session命令來檢查本機上已經開啟的各種會話。
◆運用C:\> net use命令來檢查在本機上被其他系統所開啟的各種會話。
◆運用C:\> nbtstat –S命令來檢查任何可疑的Netbios連接。
◆運用C:\> netstat –na 5命令(這里的5代表每5秒鐘刷新一次),以及“fport”之類的工具來檢查本機各個端口上的任何可疑活動。另外,如果增加-o的參數,如C:\> netstat –nao 5,還能看到各個進程的所有者。
· 對于Unix/Linux
◆檢查內核文件的“kernel: device eth0 entered promiscuous mode”來確認網卡是否處于“混雜”模式,從而發現局域網絡中出現的非正常的IP地址。
◆運用# netstat –nap和 # lsof –i命令來檢查各個進程的偵聽端口和非正常的端口活動。
◆運用# arp -a命令來檢查局域網中的非正常的MAC地址記錄。
6. 非正常計劃任務的檢查
· 對于Windows
◆運用C:\> schtasks命令來檢查計劃任務列表中的非正常的條目。
· 對于Unix/Linux
◆檢查/etc/cron.allow文件里的非正常條目,以及運用# crontab -u root –l命令來羅列出那些被UID 0的賬號(即root)所設置自動運行的任務。
◆運用# cat /etc/crontab和# ls -la /etc/cron.*命令來檢查各種系統級別的計劃任務。
7. 非正常日志條目的檢查
· 對于Windows
◆運用C:\> eventvwr.msc命令來檢查日志文件中是否有可疑條目。
◆運用“Event Log Viewer”之類的工具來查看與防火墻、防病毒軟件、文件保護以及新的可疑服務有關的事件。特別注意那些大量的登錄失敗和被鎖賬號的日志條目。
· 對于Unix/Linux
◆運用cat和grep命令的組合(例如:cat /var/log/httpd/access.log | grep "GET /signup.jsp")來檢查存放在/var/log下的各種日志文件。這里給大家羅列一下,該目錄下不同類型日志文件的功能,當然熟悉的朋友可以直接略過:
/var/log/message: 通用的系統消息
/var/log/auth.log: 認證日志
/var/log/kern.log: 內核日志
/var/log/cron.log: 計劃任務日志
/var/log/maillog: 郵件服務器日志
/var/log/httpd/: Apache 訪問與錯誤日志目錄
/var/log/boot.log: 系統啟動日志
/var/log/mysqld.log: MySQL 數據庫服務器日志
/var/log/secure: 認證安全日志
/var/log/utmp 或/var/log/wtmp: 登錄記錄文件
◆檢查來自本地和遠程訪問工具(如sshd和ftpd等)所記錄的、大量的認證和登錄失敗的日志條目。
◆檢查各個遠程過程調用(RPC)程序的日志里所包含的具有大量奇怪字符的條目。
◆檢查Apache的日志里所包含的大量“error”的條目。
◆檢查各種硬件和軟件的重啟日志。
◆運用# dmesg命令來檢查系統各個內核日志文件里的可疑事件;并用# lsmod和# lspci來列出重要的內核與系統信息。
8. 惡意軟件的檢查
· 對于Windows,可組合使用“Rootkit Revealer”、“Rootkit Hooker”、“Ice Sword”、“Rk Detector”、“SysInspector”、“Rootkit Buster”等工具。
· 對于Unix/Linux,則可使用“rkhunter”之類的工具。
第三階段:取證與補救
還記得那首《見或不見》的小詩嗎?可惜的是各種攻擊者的入侵證據可不像詩中的愛那樣:你查,或者不查,證據就在那里,不增不減。我們一旦確認的入侵之后就要迅速、立刻、馬上用正確的方式進行取證和系統的補救。其中要注意如下幾點:
1. 對被攻擊系統的硬盤采用比特級別(bit by bit)的物理全盤拷貝。
· 對于Windows,可以使用EnCase和ddrescure等磁盤克隆工具。
· 對于Unix/Linux則可以使用Sleuth Kit或Autopsy之類的取證工具。
2. 運用Memoryze和win32dd之類的工具,對被攻擊系統的內存里的數據進行復制,以便進一步的分析。
3. 在適合的情況下,安裝針對操作系統和應用程序的各種修復補丁,以“堵上”那些尚未被攻擊者所使用到的漏洞,以及再次可能被利用的漏洞。
4. 根據檢查結果和準備階段的記錄,恢復所用被改動過的文件。例如Windows上的svchost.exe,以及Unix/Linux上/bin/su下的各個二進制文件等。
小結
我身邊的搞信息安全的朋友們經常慨嘆:為什么看過這么多安全的道理,卻依然過不好系統運維與事件處理的職場人生呢?其實我個人覺得咱們有時候與“人家的無故障系統”之間就差著一份勤奮和堅持。如果我們能夠勤給系統打補丁、堅持對系統做檢查、勤對蛛絲馬跡進行分析的話,很多一般性的入侵都會被拒之門外的。好了,希望這次有關操作系統方面的安全入侵應對實務能夠幫助您打通任督二脈、疏通思路與“經骨”,哥會在下一次給您帶來更多干貨的。
【51CTO原創稿件,合作站點轉載請注明原文作者和出處為51CTO.com】