滲透測試的第一個階段是明確需求(pre-engagement)階段。在這個階段,測試人員通過商談明確客戶的測試目的、測試的深入程度和既定條件(即項目范圍)等信息。待與客戶確定了項目范圍、書面文檔的格式等必要信息之后,測試人員即可進入滲透測試的實質階段。
下面一個階段是信息收集(information-gathering)階段。這個階段的任務是搜索客戶的公開信息,甄別目標系統的連入手段。在后面的威脅建模(threat-modeling)階段,測試專家要綜合信息收集階段的工作成果,權衡各項威脅(可被攻擊人員用於突破防線的安全問題)的價值和影響。威脅建模階段的評估工作,旨在擬定滲透測試的測試方案和測試方法。
在測試人員正式攻擊系統之前,還要完成漏洞分析(vulnerability analysis)工作。測試人員此時應當盡力挖掘目標系統中的安全漏洞,以便在漏洞驗證(exploitation)階段找到可被利用的安全問題。每驗證出一個可被利用的安全漏洞都可能帶領滲透測試進入深度攻擊(post-exploitation)階段。簡單來說,深度攻擊階段的任務就是利用漏洞驗證階段發現的exploit進行攻擊,以獲得更多的內部信息、敏感數據、訪問其他系統的權限。
滲透測試的最后一個階段是書面匯報(reporting)階段。測試人員將在這一階段以不同的視角對所有安全問題進行分析和總結,分別交付給客戶的高層管理人員和技術執行人員。
1. 明確需求階段
1.1 項目范圍
溝通問題
什么因素促使客戶尋找外部測試人員?
客戶最為關注的是什么問題?
測試過程中是否會涉及到需要特別小心的易碎易損設備?
明確范圍
1、哪些IP地址、主機在測試范圍之內,哪些不在范圍之內?
2、客戶允許測試人員進行何種類型的測試行為?
3、測試人員是否可以使用可能導致服務癱瘓的漏洞利用代碼(即exploit),是否應當將評估局限於漏洞檢測?
4、客戶是否明白端口掃描也可能導致服務器或路由宕機?
5、測試人員是否可以進行社會工程學攻擊?
1.2 測試窗口
客戶有權指定測試人員在限定工作日、限定時間之內進行測試。
1.3 聯系信息
發現嚴重問題時,測試人員應當聯系哪些人?客戶是否指定了24小時都可以聯系的負責人?他們是否希望測試人員用加密郵件聯系他們?
1.4 免罪金牌
務必確保測試人員有權對測試目標進行滲透測試。如果測試目標不歸客戶所有(第三方托管的情況),那么務必要驗證第三方是否正式允許客戶進行滲透測試。總而言之,一定要在合同中落實免責聲明,確保在意外情況下限定乙方的法律責任,而且要獲得滲透測試的書面授權。
1.5 支付條款
落實付款的方式、時間和費用金額。
最后要在合同上寫入保密條款。書面承諾對滲透測試的內容及測試中發現的問題進行保密,可獲得客戶的贊許。
2. 信息收集階段
在此階段,測試人員要分析各種公開信息。公開信息收集過程有稱作開源情報分析(Open Source Inteligence,OSINT)。測試人員還要使用端口掃描工具之類的各種工具,初步了解內外或外網運行的是什么系統、這些系統上安裝了什么軟件。5
3. 威脅建模階段
在這個階段,測試人員要利用信息收集階段獲取的信息進行威脅建模。此時,滲透人員要以攻擊人員的角度出發,根據所獲信息擬定各種破壞方案。舉例來講,如果客戶的主營業務是軟件開發,那么攻擊人員會滲透到內網的開發系統,獲取客戶開發並測試過的軟件源代碼,向其競爭對手販賣公司業務機密,達到瓦解客戶的目的。因此,測試人員要根據前一階段的工作成果,擬定客戶系統的滲透策略。
4. 漏洞分析階段
接下來,測試人員開始探測客戶系統上的漏洞,以確定滲透測試策略的有效性。不夠精妙的exploit可能導致服務崩潰,引發入侵檢測系統的警報,甚至讓利用漏洞的機會白白溜走。測試人員會在這個階段使用漏洞掃描程序,借助程序的漏洞數據庫和主動檢測技術,推測目標上存在哪些漏洞。然而,無論漏洞掃描程序的功能有多么強大,它永遠不能完全替代人類的獨立思考。因此測試人員還要進行人工分析,親自確認掃描程序找到的全部漏洞。6
5. 漏洞驗證階段
漏洞驗證是一個樂趣橫生的階段。測試人員往往會使用Metasploit一類的安全工具,利用(exploit)他們發現的安全漏洞,力圖獲取客戶系統的訪問權限。正如后文介紹的那樣,容易得手的安全漏洞(例如出廠密碼)比比皆是。8
6. 深度攻擊階段
不少人認為,只有進入了漏洞驗證階段之后的深度攻擊階段,滲透測試才算真正意義上的開始。雖然測試人員已經在這個階段攻破了安全防線,但是對於客戶來說,防線失守又代表什么問題呢?如果測試人員通過某個漏洞攻陷了一台沒有加入企業域(domain)且安全補丁並不完整的早起系統,或者滲透了某台與高價值目標無關的主機或網絡,獲取不到與目標有關的任何信息,那么這種安全漏洞所對應的安全風險,遠比域控制器或者開發系統的漏洞風險要低。
在深度攻擊階段,測試人員會以突破的系統為着手點收集各種信息,搜索有價值的文件,甚至在必要的時候提升自己的登錄權限。比如,測試人員可能會轉儲密碼的哈希值,繼而破解原始密碼,或者嘗試用這些哈希值訪問其他系統。另外,測試人員還可能以這些突破點為跳板,轉而攻擊哪些在突破防線之前無法訪問的各類系統。13
7. 書面匯報階段
滲透測試最終階段的工作室書面匯報階段。在這個階段,測試人員要把他們發現的各種問題整理為易於客戶理解的書面文檔。這種文檔應當明確客戶的哪些安全措施切實有效,指出客戶需要改進的不足之處,同時還要描述測試人員突破防線的手段、獲取到的信息,並且提供修復問題的建議等內容。
撰寫滲透測試報告是門學問。要掌握各種技巧,只能多加練習。測試人員要使用清晰的專業語言,讓所有人准確理解測試過程中發現的具體問題。此處的“所有人”不進包括客戶方從負責修復漏洞的IT人員到負責簽字確認改進進度的高管在內的全部內部人員,還包括與客戶有關的外部審計人員。舉例來講,如果把“測試人員通過MS08-067(的exploit)拿到了一個shell”這樣的文字遞交給客戶的非技術人員,那么他/她肯定會想“這個shell是貝殼(seashell)之類的什么殼嗎?”實際上,測試人員應當在此處描述可獲取(甚至改動)數據的具體用途。比方說,如果將此處的“拿到了一個shell”改為“(測試人員)能夠讀取某人的郵件”,那么所有人都能理解這是什么問題了。
滲透測試的書面報告應當分為執行摘要(executive summary)和技術報告(technical report)兩個段落。這兩個段落的內容大致如下。
執行摘要
執行摘要是對測試目標和調查結果的高度總結。它主要面向那些負責信息安全計划的主管人員。執行摘要通常由一下幾個方面構成。
1、背景介紹(background):測試人員不僅要在“背景介紹”中記錄此次測試的實際目的,而且還要向管理人員介紹哪些他們不常接觸的技術術語。諸如:“漏洞”和“對策”之類的專業術語,都應當再次進行書面說明。
2、整體評估(overall posture):各類問題的高度總結。此處應當列舉測試過程中發現的問題清單(例如,可被利用的微軟漏洞MS08-076),以及導致安全隱患的相應問題(例如,缺少補丁管理措施等)。
3、風險預測(risk profile):企業安全狀況的級別評定。測試人員通常參照同行業的其他企業情況,使用“高/中/低”等評定語言,對客戶的安全級別等級划分。此外,測試人員還應當補充說明級別評定的相應標准。
4、調查總結(general findings):通過統計分析和定量分析的方法,對已有安全防范措施的實際效果進行的總結性描述。
5、改進建議(recommendation summary):解決現有問題的初步建議。
6、戰略規划(strategic road map):向客戶建議的用於增強安全性的長短期規划。舉例,為了解決現有問題,測試人員可能建議客戶安裝某些漏洞修補程序。但是從長期的角度來講,除非用戶實現某種補丁管理(patch management),否則不就之后他們還會面臨同樣的安全困境。
技術報告
技術報告擇應記錄測試過程中的各種技術細節。它通常由以下幾個方面構成。
項目簡介:項目范圍、聯系人等信息的詳細記錄
信息收集:在信息收集階段發現的各種問題。客戶會特別關注Internet上的系統入口信息。
漏洞評估:在漏洞分析階段發現的所有技術細節。
漏洞驗證及攻擊方法驗證:漏洞驗證階段的技術細節。
深度攻擊:深度攻擊階段發現的問題細節。
風險及暴露程度分析:對已知風險的定量分析。在相關篇幅里,測試人員應以假想攻擊人員成功利用各種安全漏洞為前提,評估已知問題可能產生的各類損失。
結論:整個滲透測試項目的最終總結。
本文節選來源於《滲透測試》一書。