對於主機的安全檢測,我們通常直接采用nmap或者類似軟件進行掃描,然後針對主機操作系統及其
開放端口判斷主機的安全程度,這當然是一種方法,但這種方法往往失之粗糙,我仔細考慮了一下,覺
得按下面的流程進行判別是比較完整的。
1、通過DNS查詢得到目標的網絡拓撲基本情況,比如有幾台主機,各自起的服務是什麼等等。這是必要
的步驟因為我們檢測應該針對網絡,而不是單一主機。
2、用nmap進行端口掃描,判斷操作系統,結合自己的一些經驗,必要的時候抓banner,判斷出目標主
機的操作系統類型。
3、用nessus進行普通漏洞的掃描,得到一個大致的報告。對報告進行分析。nessus的報告有些地方並不
准確,而且有漏掃或誤報的情況,比如嚴重的unicode漏洞機器明明有,它卻會掃不到,對這種情況我們
必須有人工的判斷。
4、cgi漏洞也必須有專門的掃描器進行,可以結合whisker或者twwwscan或者xscan,自己判斷需要增加
哪些危險cgi的檢測。
上面只是最簡單的,任何一個初學電腦的人可能都能夠較好完成的工作流程,但是如果在上面的各
種掃描方式得到的信息無法分析出目標操作系統的情況甚至系統類型的時候,應該怎麼辦呢?這種事情
現在經常遇到,因為大多數防火牆或者入侵檢測系統現在都具備了動態地將tcp/ip協議棧——如TTL、T
OS、DF、滑動窗口大小等修改或者屏蔽,使掃描工具無法得出正確結果的功能。互聯網上也有許多免費
工具可以達到這一效果。
因此下面要談到其它檢查方式
1、在有防火牆的情況下:建議可以使用如hping、firewalk之類的工具,更加靈活地探測目標主機的情
況,根據數據包的返回做更進一步的判斷。這需要操作者掌握TCP/IP基本知識,並能靈活運用判斷。
2、對主頁程序的檢測,雖然我們只能在外面做些基本的輸入驗證檢測。但按照現在常見的web錯誤,我
們可以從下面幾個方面著手分析:
a、特殊字符的過濾: &;`'\"*?~<>^()[]{}$\n\r 這些字符由於在不同的系統或運行環境中會具有特殊
意義,如變量定義/賦值/取值、非顯示字符、運行外部程序等,而被列為危險字符但在許多編程語言、
開發軟件工具、數據庫甚至操作系統中遺漏其中某些特殊字符的情況時常出現,從而導致出現帶有普遍
性的安全問題。當有需要web用戶輸入的時候,根據不同的數據庫系統、編程語言提交帶不同參數變量
的url,很可能造成服務器端資料洩露甚至可執行系統命令。
b、WEB服務器的錯誤編碼或解碼可能會導致服務器信息的洩露、可執行命令、源代碼洩露等錯誤。比較
典型的應該是unicode漏洞以及各種iis服務器、apache服務器的源代碼洩露漏洞。
c、利用程序錯誤的邊界判斷而造成的緩沖區溢出進行攻擊。最近的一個典型案例應該是eeye.com發現
的.printer溢出漏洞。這是web server本身的問題;但網站應用程序的編寫者也可能犯下同樣的錯誤,
就是對戶輸入不加驗證。但這方面的錯誤比較不容易試出來。
通過這樣一個過程,應該說在遠程掃描,沒有本地帳號或者權限的情況下,能夠搜集到盡量多的信
息了。當然,主機面臨的並非是遠程風險,還需要具體分析。