20135301linux
若是你們對軍事感興趣,會知道各國軍隊每一年都會組織一些軍事演習來鍛鍊軍隊的攻防戰術與做戰能力。在信息科技的發源地——美國的軍事演習中,將美軍稱爲「藍軍」,將假想敵稱爲「紅軍」,而這種軍事演習的方式也在20世紀90年代時,由美國軍方與國家安全局引入到對信息網絡與信息安全基礎設施的實際攻防測試過程當中。由一羣受過職業訓練的安全專家做爲「紅隊」(Red Team),對接受測試的防護方「藍隊」(Blue Team)進行攻擊,以實戰的方式來檢驗目標系統安全防護體系與安全響應計劃的有效性。爲此,美軍和國家安全局等情報部門專門組建了一些職業化的「紅隊」(也稱爲Tiger Team),好比著名的美國國家安全局Red Cell團隊、美國海軍計算機網絡紅隊等。web
這種經過實際的攻擊進行安全測試與評估的方法就是滲透測試(Penetration Testing,Pentest)。在20世紀90年代後期逐步開始從軍隊與情報部門拓展到安全業界。一些對安全性需求很高的企業開始採納這種方式來對他們本身的業務網絡與系統進行測試,而滲透測試也逐漸發展爲一種由安全公司所提供的專業化安全評估服務。shell
簡而言之,滲透測試就是一種經過模擬惡意攻擊者的技術與方法,挫敗目標系統安全控制措施,取得訪問控制權,並發現具有業務影響後果安全隱患的一種安全測試與評估方式。數據庫
滲透測試過程通常須要對目標系統進行主動探測分析,以發現潛在的系統漏洞,包括不恰當的系統配置,已知或未知的軟硬件漏洞,以及在安全計劃與響應過程當中的操做性弱點等。而這一過程須要以攻擊者的角度進行實施,一般涉及對大量發現安全漏洞的主動滲透與入侵攻擊。滲透測試中發現的全部安全問題,它們所帶來的業務影響後果評估,以及如何避免這些問題的技術解決方案,將在最終報告中呈現給目標系統的擁有者,幫助他們修補並提高系統的安全性。編程
滲透測試目前已經成爲系統總體安全評估中的一個組件部分,例如銀行支付行業數據安全標準(PCI DSS)等都將滲透測試做爲必須進行的安全測試形式。windows
做爲一種對抗性和定製要求都很是高的服務,滲透測試的完成質量依賴於實施人員即滲透測試者(Penetration Tester,Pentester)的技術能力、專業素養以及團隊協做能力。提供滲透測試服務的安全公司或組織都須要由職業化滲透測試者組成的專業團隊,這些滲透測試者通常被稱爲滲透測試工程師。api
目前經濟與信息化飛速發展,對於信息系統安全防護處於較低水平的中國而言,滲透測試工程師崗位數量缺口很大,高端人才極其稀缺,擁有很好的發展前景。而咱們把熟練掌握滲透測試方法、流程與技術,面對複雜滲透場景可以運用本身的創新意識、技術手段與實踐經驗,從而成功取得良好滲透測試效果的技術專家稱爲滲透測試師(Penetration Test Expert),這應該是全部對滲透測試領域感興趣的技術人員追求的目標。瀏覽器
滲透測試的兩種基本類型包括:安全
黑盒測試:設計爲模擬一個對客戶組織一無所知的攻擊者所進行的滲透攻擊。ruby
白盒測試:滲透測試者在擁有客戶組織全部知識的狀況下所進行的滲透測試。兩種測試方法都擁有他們各自的優點和弱點。
1.黑盒測試
黑盒測試(Black-box Testing)也稱爲外部測試(External Testing)。採用這種方式時,滲透測試團隊將從一個遠程網絡位置來評估目標網絡基礎設施,並無任何目標網絡內部拓撲等相關信息,他們徹底模擬真實網絡環境中的外部攻擊者,採用流行的攻擊技術與工具,有組織有步驟地對目標組織進行逐步的滲透與入侵,揭示目標網絡中一些已知或未知的安全漏洞,並評估這些漏洞可否被利用獲取控制權或形成業務資產的損失。
黑盒測試還能夠對目標組織內部安全團隊的檢測與響應能力作出評估。在測試結束以後,黑盒測試會對發現的目標系統安全漏洞、所識別的安全風險及其業務影響評估等信息進行總結和報告。
黑盒測試是比較費時費力的,同時須要滲透測試者具有較高的技術能力。在安全業界的滲透測試者眼中,黑盒測試一般是更受推崇的,由於它能更逼真地模擬一次真正的攻擊過程。
2.白盒測試
白盒測試(White-box Testing)也稱爲內部測試(Internal Testing)。進行白盒測試的團隊將能夠了解到關於目標環境的全部內部與底層知識,所以這可讓滲透測試者以最小的代價發現和驗證系統中最嚴重的安全漏洞。若是實施到位,白盒測試可以比黑盒測試消除更多的目標基礎設施環境中的安全漏洞與弱點,從而給客戶組織帶來更大的價值。
白盒測試的實施流程與黑盒測試相似,不一樣之處在於無須進行目標定位與情報蒐集;此外,白盒測試可以更加方便地在一次常規的開發與部署計劃週期中集成,使得可以在早期就消除掉一些可能存在的安全問題,從而避免被入侵者發現和利用。
白盒測試中發現和解決安全漏洞所需花費的時間和代價要比黑盒測試少量多。而白盒測試的最大問題在於沒法有效地測試客戶組織的應急響應程序,也沒法判斷出他們的安全防禦計劃對檢測特定攻擊的效率。若是時間有限或是特定的滲透測試環節(如情報蒐集)並不在範圍以內,那麼白盒測試多是最好的選項。
3.灰盒測試
以上兩種滲透測試基本類型的組合能夠提供對目標系統更加深刻和全面的安全審查,這就是灰盒測試(Grey-box Testing),組合以後的好處就是可以同時發揮兩種基本類型滲透測試方法的各自優點。灰盒測試須要滲透測試者可以根據對目標系統所掌握的有限知識與信息,來選擇評估總體安全性的最佳途徑。在採用灰盒測試方法的外部滲透場景中,滲透測試者也相似地須要從外部逐步滲透進入目標網絡,但他所擁有的目標網絡底層拓撲與架構將有助於更好地決策攻擊途徑與方法,從而達到更好的滲透測試效果。
要想完成一次質量很高的滲透測試過程,滲透測試團隊除了具有高超的具體實踐技術能力以外,還須要掌握一套完整和正確的滲透測試方法學。
雖然滲透測試所面臨的目標組織網絡系統環境與業務模式變幻無窮,並且過程當中須要充分發揮滲透測試者的創新與應變能力,可是滲透測試的流程、步驟與方法仍是具備一些共性,並能夠用一些標準化的方法體系進行規範和限制。
目前,安全業界比較流行的開源滲透測試方法體系標準包括如下幾個。
由ISECOM安全與公開方法學研究所制定,最新版本爲2010年發佈的v3.0。安全測試方法學開源手冊(OSSTMM)提供物理安全、人類心理學、數據網絡、無線通訊媒介和電訊通訊這五類渠道很是細緻的測試用例,同時給出評估安全測試結果的指標標準。
OSSTMM的特點在於很是注重技術的細節,這使其成爲一個具備很好可操做性的方法指南。
美國國家標準與技術研究院(NIST)在SP 800-42網絡安全測試指南中討論了滲透測試流程與方法,雖然不及OSSTMM全面,可是它更可能被管理部門所接受。
針對目前最廣泛的Web應用層,爲安全測試人員和開發者提供瞭如何識別與避免這些安全威脅的指南。OWASP十大Web應用安全威脅項目(OWASP Top Ten)只關注具備最高風險的Web領域,而不是一個普適性的滲透測試方法指南。
與OWASP Top Ten相似,Web應用安全威脅分類標準(WASC-TC)全面地給出目前Web應用領域中的漏洞、攻擊與防範措施視圖。
2010年最新發起的滲透測試過程規範標準項目,核心理念是經過創建起進行滲透測試所要求的基本準則基線,來定義一次真正的滲透測試過程,並獲得安全業界的普遍認同。
經過深刻了解這些開放的滲透測試方法標準,將有助於你對滲透測試創建起一個總體的知識與技能體系,全部這些方法標準背後的基本想法就是你的滲透測試過程應該按步驟實施,從而確保更加精確地評價一個系統的安全性。咱們沒法在這裏細緻地介紹每個標準的細節,只是簡要地介紹最新的PTES標準中定義的滲透測試過程環節。當你更加深刻地瞭解滲透測試技術以後,能夠更進一步去了解這些滲透測試方法體系,並在實際的滲透測試實踐中加以應用。
PTES滲透測試執行標準是由安全業界多家領軍企業技術專家所共同發起的,指望爲企業組織與安全服務提供商設計並制定用來實施滲透測試的通用描述準則。PTES標準項目網站爲http://www.pentest-standard.org/,從2010年11月開始(目前還處於開發階段),目前已經發布了BETA RELEASE版本。
PTES標準中定義的滲透測試過程環節基本上反映了安全業界的廣泛認同,具體包括如下7個階段。
在前期交互(Pre-Engagement Interaction)階段,滲透測試團隊與客戶組織進行交互討論,最重要的是肯定滲透測試的範圍、目標、限制條件以及服務合同細節。
該階段一般涉及收集客戶需求、準備測試計劃、定義測試範圍與邊界、定義業務目標、項目管理與規劃等活動。
在目標範圍肯定以後,將進入情報蒐集(Information Gathering)階段,滲透測試團隊能夠利用各類信息來源與蒐集技術方法,嘗試獲取更多關於目標組織網絡拓撲、系統配置與安全防護措施的信息。
滲透測試者可使用的情報蒐集方法包括公開來源信息查詢、Google Hacking、社會工程學、網絡踩點、掃描探測、被動監聽、服務查點等。而對目標系統的情報探查能力是滲透測試者一項很是重要的技能,情報蒐集是否充分在很大程度上決定了滲透測試的成敗,由於若是你遺漏關鍵的情報信息,你將可能在後面的階段裏一無所得。
在蒐集到充分的情報信息以後,滲透測試團隊的成員們停下敲擊鍵盤,你們聚到一塊兒針對獲取的信息進行威脅建模(Threat Modeling)與攻擊規劃。這是滲透測試過程當中很是重要,但很容易被忽視的一個關鍵點。
經過團隊共同的縝密情報分析與攻擊思路頭腦風暴,能夠從大量的信息情報中理清頭緒,肯定出最可行的攻擊通道。
在肯定出最可行的攻擊通道以後,接下來須要考慮該如何取得目標系統的訪問控制權,即漏洞分析(Vulnerability Analysis)階段。
在該階段,滲透測試者須要綜合分析前幾個階段獲取並彙總的情報信息,特別是安全漏洞掃描結果、服務查點信息等,經過搜索可獲取的滲透代碼資源,找出能夠實施滲透攻擊的攻擊點,並在實驗環境中進行驗證。在該階段,高水平的滲透測試團隊還會針對攻擊通道上的一些關鍵系統與服務進行安全漏洞探測與挖掘,指望找出可被利用的未知安全漏洞,並開發出滲透代碼,從而打開攻擊通道上的關鍵路徑。
滲透攻擊(Exploitation)是滲透測試過程當中最具備魅力的環節。在此環節中,滲透測試團隊須要利用他們所找出的目標系統安全漏洞,來真正入侵系統當中,得到訪問控制權。
滲透攻擊能夠利用公開渠道可獲取的滲透代碼,但通常在實際應用場景中,滲透測試者還須要充分地考慮目標系統特性來定製滲透攻擊,並須要挫敗目標網絡與系統中實施的安全防護措施,才能成功達成滲透目的。在黑盒測試中,滲透測試者還須要考慮對目標系統檢測機制的逃逸,從而避免形成目標組織安全響應團隊的警覺和發現。
後滲透攻擊(Post Exploitation)是整個滲透測試過程當中最可以體現滲透測試團隊創造力與技術能力的環節。前面的環節能夠說都是在循序漸進地完成很是廣泛的目標,而在這個環節中,須要滲透測試團隊根據目標組織的業務經營模式、保護資產形式與安全防護計劃的不一樣特色,自主設計出攻擊目標,識別關鍵基礎設施,並尋找客戶組織最具價值和嘗試安全保護的信息和資產,最終達成可以對客戶組織形成最重要業務影響的攻擊途徑。
在不一樣的滲透測試場景中,這些攻擊目標與途徑多是變幻無窮的,而設置是否準確而且可行,也取決於團隊自身的創新意識、知識範疇、實際經驗和技術能力。
滲透測試過程最終向客戶組織提交,取得承認併成功得到合同付款的就是一份滲透測試報告(Reporting)。這份報告凝聚了以前全部階段之中滲透測試團隊所獲取的關鍵情報信息、探測和發掘出的系統安全漏洞、成功滲透攻擊的過程,以及形成業務影響後果的攻擊途徑,同時還要站在防護者的角度上,幫助他們分析安全防護體系中的薄弱環節、存在的問題,以及修補與升級技術方案。
在滲透測試流程中,核心內容是找出目標系統中存在的安全漏洞,並實施滲透攻擊,從而進入到目標系統中。而這一過程最主要的底層基礎是目標系統中存在的安全漏洞(Vulnerability)。安全漏洞指信息系統中存在的缺陷或不適當的配置,它們可以使攻擊者在未受權狀況下訪問或破壞系統,致使信息系統面臨安全風險。利用安全漏洞來形成入侵或破壞效果的程序就稱爲滲透代碼(Exploit),或者漏洞利用代碼。
圍繞着安全漏洞生命週期所進行的攻防技術博弈一直以來都是安全社區永恆的話題,而一個典型的安全漏洞生命週期包括以下7個部分:
1)安全漏洞研究與挖掘:由高技術水平的黑客與滲透測試師開展,主要利用源代碼審覈(白盒測試)、逆向工程(灰盒測試)、Fuzz測試(黑盒測試)等方法,挖掘目標系統中存有的可被利用的安全漏洞。 2)滲透代碼開發與測試:在安全漏洞挖掘的同時,黑客們會開發概念驗證性的滲透攻擊代碼(POC),用於驗證找到的安全漏洞是否確實存在,並確認其是否可被利用。 3)安全漏洞和滲透代碼在封閉團隊中流傳:在發現安全漏洞並給出滲透攻擊代碼後,負責任的「白帽子」們採起的處理策略是首先通知廠商進行修補,而在廠商給出補丁後再進行公佈;而「黑帽子」與「灰帽子」們通常在封閉小規模團隊中進行祕密地共享,以充分地利用這些安全漏洞和滲透攻擊代碼所帶來的攻擊價值。 4)安全漏洞和滲透代碼開始擴散:因爲各類緣由,在封閉團隊中祕密共享的安全漏洞和滲透代碼最終會被披露出來,在互聯網上得以公佈,「黑帽子」們會快速對其進行掌握和應用,並在安全社區中開始快速擴散。 5)惡意程序出現並開始傳播:「黑帽子」們將在掌握安全漏洞和滲透代碼基礎上,進一步開發更易使用、更具自動化傳播能力的惡意程序,並經過黑客社區社會組織結構和互聯網進行傳播。在此過程當中(或以前和以後),廠商完成補丁程序開發和測試,並進行發佈。 6)滲透代碼/惡意程序大規模傳播並危害互聯網:廠商發佈補丁程序和安全警報將更進一步地讓整個黑客社區瞭解出現新的安全漏洞和相應的滲透代碼、惡意程序,更多的「黑帽子」們將從互聯網或社區關係網得到並使用這些惡意程序,對互聯網的危害也在這個階段達到頂峯。 7)滲透攻擊代碼/攻擊工具/惡意程序逐漸消亡:在廠商補丁程序、安全公司提供的檢測和移除機制獲得普遍應用後,相應的滲透代碼、惡意程序將被「黑帽子」們逐漸拋棄,從而慢慢地消亡。
在安全漏洞生命週期中,從安全漏洞被發現到廠商發佈補丁程序用於修補該漏洞以前的這段期間,被安全社區廣泛地稱爲「0day」。因爲在這段時間內,黑客們攻擊存有該安全漏洞的目標能夠達到百分之百的成功率,同時也能夠躲避檢測,所以「0day」的安全漏洞和對應的滲透代碼對於黑客社區具備很高的價值,挖掘「0day」安全漏洞並給出滲透代碼也成爲高水平黑客的追求目標。即便在廠商發佈了針對該安全漏洞的補丁程序和安全警報後,補丁程序也須要一段時間被接受、下載和應用,而一些不負責任的系統管理員極可能永遠也不會去更新他們的系統,所以一些已公佈的安全漏洞及相應的滲透代碼對於不管「黑帽子」,仍是職業的滲透測試者而言都仍然具備價值。
俗話說,紙老是包不住火的。一旦一個安全漏洞被髮掘出來並編寫出相應滲透代碼以後,不管漏洞發現者以哪一種方式進行處理,這個漏洞老是會有被公開披露的一天。
而針對漏洞的公開披露策略與道德準則,在安全社區中曾爆發過無數次的辯論,在此咱們沒法展開解釋各類已有的披露規則與各方觀點。概括起來,主要有以下四種主要的安全漏洞披露方式。
1.徹底公開披露 發現漏洞後直接向公衆徹底公開安全漏洞技術細節,這將使得軟件廠商須要趕在攻擊者對漏洞進行惡意利用以前開發併發布出安全補丁,然而這一般是很難作到的,所以這種披露方式也被軟件廠商稱爲不負責任的披露,會使得他們的客戶因爲漏洞披露而置於安全風險之中。 即使如此,仍是有一部分傳統黑客認爲只有這種方式纔可以有效促使軟件廠商重視起安全問題,這種觀點在安全社區中仍有一些認同者。最重要的徹底公開披露渠道是著名的Full-Disclosure郵件列表。 2.負責任的公開披露 負責任的公開披露是在真正進行徹底公開披露以前,首先對軟件廠商進行知會,併爲他們提供一段合理的時間進行補丁開發與測試,而後在軟件廠商發佈出安全補丁,或者軟件廠商不負責任地延後補丁發佈時,再對安全社區徹底公開漏洞技術細節。 目前最被安全社區接受的是負責任的公開披露策略。 3.進入地下經濟鏈 隨着漏洞的經濟價值逐步被安全研究者所認識,一部分黑客認爲不該免費給軟件廠商打工幫助他們抓bug,向軟件廠商通報可以得到的一般只是廠商的一聲「謝謝」,有時甚至連道謝也得不到。這種反差已經造就了安全漏洞交易市場的出現,如著名的TippingPoint公司的「Zero-Day Imitative」計劃和iDefense公司的漏洞貢獻者計劃等,這些安全公司經過向安全研究人員收購高價值的安全漏洞,並出售給如政府部門等客戶來贏取經濟利益,同時也爲安全研究人員帶來更高的經濟收益,而這些安全漏洞的售價一般在幾百美圓至數萬美圓之間,影響範圍巨大且可以有效利用的安全漏洞售價甚至可能超出十萬美圓。 在這種背景下,三位全球著名的黑客Dino Dai Zovi、Charlie Miller和Alex Sotrirov,在2009年的CanSecWest會議上打出了「No More Free Bugs」的橫幅,這也引起了安全社區從新對安全漏洞信息的披露、出售與利用的倫理道德和策略進行爭論。 4.小範圍利用直至被動披露 因爲並不是全部的漏洞發現者都會聽從軟件廠商所指望的披露策略,於是在安全社區所發現的安全漏洞中,也有至關一部分並無首先通報給軟件廠商,而是在小範圍內進行利用,進而逐步擴大影響範圍,最終被惡意代碼普遍利用從而危害龐大的互聯網用戶羣體。這時一些安全公司會監測到野外活躍的滲透代碼,並發現出背後所利用的安全漏洞。好比著名的Google公司遭受Aurora攻擊事件,便揭示出是利用的MS10-002安全漏洞。 而不管以何種方式進行公開披露,已公佈的安全漏洞信息都會被收集到業界知名的CVE、NVD、SecurityFocus、OSVDB等幾個通用漏洞信息庫中。
國內的安全漏洞信息庫主要包括:
CNNVD:中國國家漏洞庫,由中國信息安全測評中心維護(www.cnnvd.org.cn)。 CNVD:中國國家信息安全漏洞共享平臺,由國家計算機網絡應急技術處理協調中心(CNCERT/CC)維護(www.cnvd.org.cn)。 烏雲安全漏洞報告平臺:民間組織(http://www.wooyun.org/)。 SCAP中文社區:由本書做者王珩、諸葛建偉等人發起的民間組織項目(http://www.scap.org.cn/)。 國外的安全漏洞信息庫主要包括: CVE:(Common Vulnerability and Exposures,通用漏洞與披露)已成爲安全漏洞命名索引的業界事實標準,由美國國土安所有資助的MITRE公司負責維護,CVE漏洞庫爲每一個確認的公開披露安全漏洞提供了索引CVE編號,以及一段簡單的漏洞信息描述,而這個CVE編號就做爲安全業界標識該漏洞的標準索引號。 NVD:(National Vulnerability Database,國家漏洞數據庫)是美國政府官方根據NIST的SCAP標準協議所描述的安全漏洞管理信息庫,具體由美國國土安所有下屬的NCSD國家網際安所有門US-CERT組負責維護。截至2013年4月,NVD庫目前包括了近6萬條CVE安全漏洞詳細信息。 SecurityFocus:起源於業內著名的Bugtraq郵件列表。2002年SecurityFocus網站被Symantec公司所收購,從Bugtraq郵件列表中也演化出SecurityFocus安全漏洞信息庫,爲業界的安全研究人員提供全部平臺和服務上最新的安全漏洞信息。 OSVDB:(Open Source Vulnerability DataBase,開源漏洞數據庫)由HD Moore參與發起,由安全社區建立的一個獨立的、開源的安全漏洞信息庫,爲整個安全社區提供關於安全漏洞的準確、詳細、及時、公正的技術信息,來促使軟件廠商與安全研究人員更友好、更開放地合做,消除開發和維護私有安全漏洞信息庫所帶來的冗餘工做量和花費。截至2013年4月,OSVDB庫可以覆蓋7萬多個產品,已包含91?000多個安全漏洞的詳細信息。
針對這些已知安全漏洞的公開滲透代碼資源也會在安全社區中流傳與共享,目前安全社區比較知名的滲透攻擊代碼共享站點包括Metasploit、Exploit-db、PacketStorm、SecurityFocus等,CORE Security、VUPEN等則提供商業的滲透代碼訂閱服務。
Metasploit項目由著名黑客HD Moore於2003年開始開發,最先做爲一個滲透攻擊代碼的集成軟件包而發佈。滲透攻擊也是目前Metasploit最強大和最具吸引力的核心功能,Metasploit框架中集成了數百個針對主流操做系統平臺上,不一樣網絡服務與應用軟件安全漏洞的滲透攻擊模塊,能夠由用戶在滲透攻擊場景中根據漏洞掃描結果進行選擇,並可以自由裝配該平臺上適用的具備指定功能的攻擊載荷,而後經過自動化編碼機制繞過攻擊限制與檢測措施,對目標系統實施遠程攻擊,獲取系統的訪問控制權。
Metasploit的出現使得一些滲透測試的初學者也可以像在黑客電影中演的那樣「優雅瀟灑」地進行滲透攻擊,告別了以前使人崩潰與望而卻步的繁雜過程:
搜索公開滲透代碼→編譯→測試→修改代碼→實施→失敗→不斷調試直至成功
正由於如此,Metasploit在發佈以後很快獲得了安全社區的青睞,成爲黑客們與安全職業人員必備的滲透測試工具之一。
除了滲透攻擊以外,Metasploit在發展過程當中逐漸增長對滲透測試全過程的支持,包括情報蒐集、威脅建模、漏洞分析、後滲透攻擊與報告生成。
Metasploit一方面經過內建的一系列掃描探測與查點輔助模塊來獲取遠程服務信息,另外一方面經過插件機制集成調用Nmap、Nessus、OpenVAS等業界著名的開源網絡掃描工具,從而具有全面的信息蒐集能力,爲滲透攻擊實施提供必不可少的精確情報。
在蒐集信息以後,Metasploit支持一系列數據庫命令操做直接將這些信息彙總至PostgreSQL、MySQL或SQLite數據庫中,併爲用戶提供易用的數據庫查詢命令,能夠幫助滲透測試者對目標系統蒐集到的情報進行威脅建模,從中找出最可行的攻擊路徑。
除了信息蒐集環節可以直接掃描出一些已公佈的安全漏洞以外,Metasploit中還提供了大量的協議Fuzz測試器與Web應用漏洞探測分析模塊,支持具備必定水平能力的滲透測試者在實際過程當中嘗試挖掘出「零日」漏洞,並對漏洞機理與利用方法進行深刻分析,而這將爲滲透攻擊目標帶來更大的殺傷力,並提高滲透測試流程的技術含金量。
在成功實施滲透攻擊並得到目標系統的遠程控制權以後,Metasploit框架中另外一個極具威名的工具Meterpreter在後滲透攻擊階段提供了強大功能。
Meterpreter能夠看作一個支持多操做系統平臺,能夠僅僅駐留於內存中並具有免殺能力的高級後門工具,Meterpreter中實現了特權提高、信息攫取、系統監控、跳板攻擊與內網拓展等多樣化的功能特性,此外還支持一種靈活可擴展的方式來加載額外功能的後滲透攻擊模塊,足以支持滲透測試者在目標網絡中取得立足點以後進行進一步的拓展攻擊,並取得具備業務影響力的滲透效果。
從技術角度來講,Meterpreter讓它的「前輩們」(如國外的BO、BO2K,以及國內的冰河、灰鴿子等)黯然失色。
Metasploit框架得到的滲透測試結果能夠輸入至內置數據庫中,所以這些結果能夠經過數據庫查詢來獲取,並輔助滲透測試報告的寫做。
而商業版本的Metasploit Pro具有了更增強大的報告自動生成功能,能夠輸出HTML、XML、Word和PDF格式的報告,並支持定製滲透測試報告模板,以及支持遵循PCI DSS(銀行支付行業數據安全標準)與FIMSA(美國聯邦信息安全管理法案)等標準的合規性報告輸出。
正是因爲Metasploit最新版本具備支持滲透測試過程各個環節的如此衆多且強大的功能特性,Metasploit已經成爲安全業界最受關注與喜好的滲透測試流程支持軟件。
Metasploit軟件的用戶羣體也首先面向職業的滲透測試工程師,以及非職業地從事一些滲透測試學習與實踐的安全技術愛好者。Metasploit或許是絕大多數滲透測試者最明智的滲透測試工具首選。
真正處於防護一線的網絡與系統管理員們也應該熟悉和深刻掌握Metasploit,可以自主地對所管理的信息網絡進行例行性的白盒式滲透測試,這將有效發現其中的安全薄弱點,在因爲真正的入侵發生致使本身挨訓甚至丟掉飯碗以前,可以作出有效的補救與防禦措施。此外,Metasploit還能夠被軟件、設備和安全產品測試人員們所使用,特別是在他們工做範圍內的某款軟件或設備被爆出公開利用的零日安全漏洞時,能夠利用Metasploit來重現滲透攻擊過程,定位安全漏洞並分析機理,從而修補軟件與設備,而諸如IDS、IPS、殺毒軟件等安全產品的測試人員,也可使用Metasploit來檢驗產品的檢測性能,以及針對Metasploit強大免殺與逃逸技術的對抗能力。
當初,HD Moore的理想目標是,讓Metasploit成爲一個開放的漏洞研究與滲透代碼開發的社區公共平臺,而這一理想在Metasploit的發展過程當中正在得以實現。
當咱們在Exploit-db、SecurityFocus等公共滲透代碼發佈平臺上不斷髮現大量的以Metasploit滲透攻擊模塊的格式進行編寫,可以直接集成到Metasploit框架中進行靈活應用的代碼發佈時,咱們知道已經進入了「Metasploit時代」了!
在「Metasploit時代」以前,黑客社區中的漏洞研究與滲透代碼開發是一種「無序化」的狀態,你們使用各自掌握的輔助工具和經驗挖掘軟件安全漏洞,並使用他們本身喜歡的編程語言來開發概念驗證性滲透代碼(POC),組裝上我的珍藏的Shellcode。一般只針對有限的目標版本環境作過初步測試以後,就根據他們本身的「黑客哲學」在直接公開披露、負責任地通告廠商,或進入地下經濟鏈等多種披露策略中作出選擇,讓他們所發現的安全漏洞和編寫的滲透代碼進入到安全社區。
採用這種漏洞研究與滲透開發方式所產生的滲透代碼每每「魚龍混雜、混沌不堪」,PacketStorm就是聚集了大量採用此種方式進行安全漏洞徹底公開披露的一個表明性網站,每月幾乎都有數百個來自安全社區的漏洞披露與滲透代碼發佈。對於具備超級信息搜索能力、多種編程語言理解能力、較高滲透技術水平的高級滲透測試師而言,這種聚集大量漏洞與滲透代碼的公共信息倉庫無疑是一個寶貴的財富,他們有能力在滲透測試過程當中快速找到可利用的公開漏洞信息與POC代碼,並可以快速經過編譯、測試和修改使用到他們本身的滲透過程當中。
然而技術能力還不夠到位的數量佔絕大多數的技術愛好者與初學者,則對這些資源既愛又恨,一方面對找到針對新公開漏洞的滲透代碼而欣喜不已,另外一方面又沒有能力發揮出它的實際效用,這種感覺相信絕大多數體驗過這一過程的讀者們都深有感悟。而HD Moore當初建立Metasploit的想法相信也和他在滲透測試服務中一直遭趕上述境遇是密切相關的。
在「Metasploit時代」,黑客們就能夠充分利用Metasploit中針對大量服務協議的Fuzz測試器來輔助他們的漏洞挖掘過程;在發現漏洞以後,他們還可使用一些調試型的攻擊載荷來讓漏洞機理分析與利用過程變得更加簡單。此外,Metasploit中集成的一系列功能程序可讓他們充分剖析目標程序,並精肯定位出利用過程可能依賴的關鍵指令與地址;在編寫滲透代碼時,他們也無須從頭開始編寫代碼,從Metasploit開源代碼庫中找出一個攻擊相似目標的模塊做爲模板,而後將關注點集中在漏洞觸發與利用的獨特過程,而其餘的攻擊載荷、協議交互等均可以直接利用框架所提供的支持模塊。這樣的編寫方式不只省時省力,更爲重要的是還具備更爲靈活的特性,能夠自由的組裝任意的攻擊載荷;而在測試階段,黑客們也能夠直接使用Metasploit生成測試用例,並能夠在多個目標系統測試成功基礎上,爲滲透代碼加上更多的目標系統配置選項,從而提示滲透代碼的通用性與魯棒性。
Metasploit最偉大之處,就是將漏洞研究與滲透代碼開發從徹底的「手工做坊」形式提高到了初具雛形的「工業化生產方式」,這種貢獻足以讓它載入安全技術發展的光輝史冊。
Metasploit的目標還不只限於提供一個滲透測試全過程支持框架軟件,也不限於做爲安全社區的一個開放式漏洞研究與滲透代碼開發平臺,而是做爲一個安全技術的集成開發與應用環境。
你能想象實現這一目標以後Metasploit所具備的能量,以及它在安全社區中的地位嗎?那時,Metasploit將成爲安全社區中最具影響力的開源框架平臺和創新策源地,大量的新技術從這裏產出,快速轉換成可實際應用與實施的工具,並可以與Metasploit平臺上的其餘工具相互配合,從而彙集出強大的能量光束,穿透滲透測試過程當中的全部目標系統,以及進行安全測試的全部軟硬件產品。那時HD Moore和Metasploit核心開發人員則會成爲神一級的人物,接受着你們的頂禮膜拜。而這並非虛無縹緲的幻想,Metasploit正在穩健地邁向這一目標。
首先,Metasploit做爲一個開源項目,提供了很是優秀的模塊化框架與底層基礎庫的支持,若是你認同開源理念,徹底能夠用Metasploit模塊的方式來實現新技術與新想法,並貢獻到Metasploit的開源代碼庫中,讓安全社區的其餘黑客們和滲透測試者都可以分享你的發現與創新。
其次,Metasploit提供了靈活的插件機制和命令行批處理文件機制,已經集成了Nmap、Nessus、OpenVAS等安全社區中重量級的開源或共享安全軟件,以及一些極具特點的專項滲透測試工具,如社會工程學工具包SET、自動化攻擊軟件包Fast Track、無線網絡攻擊套件Karmetasploit等。而若是指望將本身開發或者社區共享的安全工具加入到Metasploit集成環境中,也能夠利用這些機制完成一個「橋」插件,來爲Metasploit社區作出貢獻。
最後,Metasploit的最新版本實現一個能夠遠程調用Metasploit內建功能的RPC API接口,利用該接口可讓你更好地使Metasploit和其餘一些安全工具進行互操做。
Metasploit社區正在經過一系列努力,朝着構建安全技術集成化開發與應用環境這一宏偉目標前進,是否能達成這一終極目標讓咱們拭目以待,若是有興趣和能力,讓這一天來的更快些,請貢獻出你的智慧和力量吧。
雖然Metasploit仍在活躍地開發與變化着,但總體體系結構從v3版本以來保持着相對的穩定。v4版本在用戶界面、對滲透測試全過程提供更好支持、數據庫融合與互操做性等方面有了很是大的變化,但其體系結構仍延續了v3系列版本中已趨於成熟穩定的總體框架,而並不是像以前每次大版本升級都伴隨着體系框架的重構。
Metasploit的設計儘量採用模塊化的理念,以提高代碼複用效率。在基礎庫文件(Libraries)中提供了核心框架和一些基礎功能的支持;而實現滲透測試功能的主體代碼則以模塊化方式組織,並按照不一樣用途分爲6種類型的模塊(Modules);爲了擴充Metasploit框架對滲透測試全過程的支持功能特性,Metasploit還引入了插件(Plugins)機制,支持將外部的安全工具集成到框架中;Metasploit框架對集成模塊與插件的滲透測試功能,經過用戶接口(Interfaces)與功能程序(Utilities)提供給滲透測試者和安全研究人員進行使用。
此外,Metasploit在v3版本中還支持擴展腳本(Scripts)來擴展攻擊載荷模塊的能力,而這部分腳本在v4版本中將做爲後滲透攻擊模塊(Post),以統一化的組織方式融入到模塊代碼中,而這些擴展腳本也將被逐步移植和裁剪。
Metasploit的基礎庫文件位於源碼根目錄路徑下的libraries目錄中,包括Rex、framework-core和framework-base三部分。
Rex(Ruby Extension)是整個Metasploit框架所依賴的最基礎的一些組件,爲Metasploit開發者進行框架和模塊開發提供了一些基礎功能的支持,如包裝的網絡套接字、網絡應用協議客戶端與服務端實現、日誌子系統、滲透攻擊支持例程、PostgreSQL及MySQL數據庫支持等。
framework-core庫負責實現全部與各類類型的上層模塊及插件的交互接口。
framework-base庫擴展了framework-core,提供更加簡單的包裝例程,併爲處理框架各個方面的功能提供了一些功能類,用於支持用戶接口與功能程序調用框架自己功能及框架集成模塊。
模塊是經過Metasploit框架所裝載、集成並對外提供的最核心的滲透測試功能實現代碼。按照在滲透測試過程各個環節中所具備的不一樣用途,分爲輔助模塊(Aux)、滲透攻擊模塊(Exploits)、後滲透攻擊模塊(Post)、攻擊載荷模塊(Payloads)、空指令模塊(Nops)和編碼器模塊(Encoders)。這些模塊都擁有很是清晰的結構和一個預先定義好的接口,能夠被裝載到Metasploit框架中,並可組合支持信息蒐集、滲透攻擊與後滲透攻擊拓展等滲透測試任務。後面的小節將對這六類不一樣類型的模塊進行更進一步的介紹。
Metasploit框架的插件是一類定義比較鬆散,可以擴充框架的功能,或者組裝已有功能構成高級特性的組件。插件能夠集成現有的一些外部安全工具,如Nessus、OpenVAS漏洞掃描器等,爲用戶接口提供一些新的功能命令、記錄全部的網絡記錄或提供創新的滲透測試功能。
Metasploit框架提供了多種用戶使用接口,包括msfconsole控制檯終端、msfcli命令行、msfgui圖形化界面、armitage圖形化界面以及msfapi遠程調用接口等。本書將在1.6節說明與演示如何經過這些接口使用Metasploit的基本滲透攻擊功能,並在後繼章節中深刻全面地介紹如何使用Metasploit支持滲透測試全過程。
除了經過上述的用戶使用接口訪問Metasploit框架主體功能以外,Metasploit還提供了一系列可直接運行的功能程序,支持滲透測試者與安全研究人員快速地利用Metasploit框架內部能力完成一些特定任務。好比msfpayload、msfencode和msfvenom能夠將攻擊載荷封裝爲可執行文件、C語言、JavaScript語言等多種形式,並能夠進行各類類型的編碼。msf*scan系列功能程序提供了在PE、ELF等各類類型文件中搜索特定指令的功能,能夠幫助滲透代碼開發人員定位指令地址。本書在後繼章節中也會介紹到如何在滲透測試過程當中利用這些Metasploit功能程序。
Metasploit爲滲透測試的信息蒐集環節提供了大量的輔助模塊支持,包括針對各類網絡服務的掃描與查點、構建虛假服務收集登陸密碼、口令猜想破解、敏感信息嗅探、探查敏感信息泄露、Fuzz測試發掘漏洞、實施網絡協議欺騙等模塊。輔助模塊可以幫助滲透測試者在進行滲透攻擊以前獲得目標系統豐富的情報信息,從而發起更具目標性的精準攻擊。本書將在後繼章節詳細介紹支持情報蒐集的輔助模塊。
此外,Metasploit輔助模塊中還包含一些無須加載攻擊載荷,同時每每不是取得目標系統遠程控制權的滲透攻擊,例如拒絕服務攻擊等。
滲透攻擊模塊是利用發現的安全漏洞或配置弱點對遠程目標系統進行攻擊,以植入和運行攻擊載荷,從而得到對遠程目標系統訪問權的代碼組件。滲透攻擊模塊是Metasploit框架中最核心的功能組件,雖然v4版本以後,Metasploit將繼續沿着從最初一個單純的滲透攻擊軟件向能夠支持滲透測試全過程的框架平臺這一方向繼續發展,滲透測試模塊目前在Metasploit框架中所佔據的關鍵位置仍沒法撼動,並且其數量、規模在截至2013年4月的最新版本v4.7.0中達到1084個,這也是其餘類型模塊沒法比擬的。
你能夠在Metasploit源碼目錄的modules/exploits子目錄下找到全部的滲透攻擊模塊源代碼,瀏覽源碼路徑你會發現Metasploit是以目標系統的操做系統平臺,以及所針對的網絡服務或應用程序類型來對這些滲透攻擊模塊進行分類的。目前v4.7.0版本中的滲透攻擊模塊按照操做系統平臺分類後的數量分佈狀況如表1-3所示,其支持Windows、Linux、Apple iOS、Mac OS X、UNIX(包括AIX、BSDi、FreeBSD、HPUX、IRIX、Solaris等分支版本)、NetWare等不一樣操做系統平臺,其中最受關注的仍是目前最流行的Windows操做系統,其針對48個網絡服務和應用分類擁有787個滲透攻擊模塊,其餘擁有較多模塊的有UNIX(78個)、Linux(64個)和Mac OS X(16個),而Multi平臺類中包含一些跨平臺的網絡服務或應用程序中存在的安全漏洞,如Samba、Tomcat、Firefox等,也擁有115個。
Metasploit框架中滲透攻擊模塊能夠按照所利用的安全漏洞所在的位置分爲主動滲透攻擊與被動滲透攻擊兩大類。
主動滲透攻擊所利用的安全漏洞位於網絡服務端軟件與服務承載的上層應用程序之中,因爲這些服務一般是在主機上開啓一些監聽端口並等待客戶端鏈接,所以針對它們的滲透攻擊就能夠主動發起,經過鏈接目標系統網絡服務,注入一些特殊構造的包含「邪惡」攻擊數據的網絡請求內容,觸發安全漏洞,並使得遠程服務進程執行在「邪惡」數據中包含的攻擊載荷,從而獲取目標系統的控制會話。針對網絡服務端的主動滲透攻擊屬於傳統的滲透攻擊,在Metasploit中佔據主流位置,此外近幾年也出現了Web應用程序滲透攻擊、SCADA工業控制系統服務滲透攻擊等新的熱點領域。
被動滲透攻擊利用的安全漏洞位於客戶端軟件中,如瀏覽器、瀏覽器插件、電子郵件客戶端、Office與Adobe等各類文檔閱讀與編輯軟件。對於這類存在於客戶端軟件的安全漏洞,咱們沒法主動地將數據從遠程輸入到客戶端軟件中,所以只能採用被動滲透攻擊方式,即構造出「邪惡」的網頁、電子郵件或文檔文件,並經過架設包含此類惡意內容的服務端、發送郵件附件、結合社會工程學攻擊分發並誘騙目標用戶打開、結合網絡欺騙和劫持技術等方式,等目標系統上的用戶訪問到這些邪惡內容,從而觸發客戶端軟件中的安全漏洞,給出控制目標系統的Shell會話。由於客戶端軟件的被動滲透攻擊可以繞過防火牆等網絡邊界防禦措施,因此近幾年獲得迅猛的發展,風頭已經蓋過了傳統的網絡服務端滲透攻擊。最多見的兩類被動滲透攻擊爲瀏覽器軟件漏洞攻擊和文件格式類漏洞攻擊。
攻擊載荷是在滲透攻擊成功後促使目標系統運行的一段植入代碼,一般做用是爲滲透攻擊者打開在目標系統上的控制會話鏈接。在傳統的滲透代碼開發中,攻擊載荷只是一段功能簡單的Shellcode代碼,以彙編語言編制並轉換爲目標系統CPU體系結構支持的機器代碼,在滲透攻擊觸發漏洞後,將程序執行流程劫持並跳轉入這段機器代碼中執行,從而完成Shellcode中實現的單一功能,好比在遠程系統中添加新用戶、啓動一個命令行Shell並綁定到網絡端口上等。而開發滲透代碼時,每每是從之前的代碼中直接將Shellcode搬過來或作些簡單的修改,一些不太成熟的Shellcode還會依賴於特定版本系統中的API地址,從而使其通用性不強,在不一樣版本系統上可能出現運行不正常的狀況,所以開發人員不只須要有彙編語言知識和編寫技能,還須要對目標操做系統的內部工做機制有深刻理解。
Metasploit框架中引入的模塊化攻擊載荷徹底消除了安全研究人員在滲透代碼開發時進行Shellcode編寫、修改與調試的工做代價,而能夠將精力集中在安全漏洞機理研究與利用代碼的開發上。此外,Metasploit還提供了Windows、Linux、UNIX和Mac OS X等大部分流行操做系統平臺上功能豐富多樣的攻擊載荷模塊,從最簡單的增長用戶帳號、提供命令行Shell,到基於VNC的圖形化界面控制,以及最複雜、具備大量後滲透攻擊階段功能特性的Meterpreter,這使得滲透測試者能夠在選定滲透攻擊代碼以後,從不少適用的攻擊載荷中選取他所中意的模塊進行靈活地組裝,在滲透攻擊後得到他所選擇的控制會話類型,這種模塊化設計與靈活組裝模式也爲滲透測試者提供了極大的便利。
Metasploit攻擊載荷模塊分爲獨立(Singles)、傳輸器(Stager)、傳輸體(Stage)三種類型。
獨立攻擊載荷是徹底自包含的,可直接獨立地植入目標系統進行執行,好比「windows/shell_bind_tcp」是適用於Windows操做系統平臺,可以將Shell控制會話綁定在指定TCP端口上的攻擊載荷。在一些比較特殊的滲透攻擊場景中,可能會對攻擊載荷的大小、運行條件有所限制,好比特定安全漏洞利用時可填充邪惡攻擊緩衝區的可用空間很小、Windows 7等新型操做系統所引入的NX(堆棧不可執行)、DEP(數據執行保護)等安全防護機制,在這些場景狀況下,Metasploit提供了傳輸器(Stager)和傳輸體(Stage)配對分階段植入的技術,由滲透攻擊模塊首先植入代碼精悍短小且很是可靠的傳輸器載荷,而後在運行傳輸器載荷時進一步下載傳輸體載荷並執行。目前Metasploit中的Windows傳輸器載荷能夠繞過NX、DEP等安全防護機制,能夠兼容Windows 7操做系統,而由傳輸器載荷進一步下載並執行的傳輸體載荷就再也不受大小和安全防護機制的限制,能夠加載如Meterpreter、VNC桌面控制等複雜的大型攻擊載荷。傳輸器與傳輸體配對的攻擊載荷模塊以名稱中的「/」標識,如「windows/shell/bind_tcp」是由一個傳輸器載荷(bind_tcp)和一個傳輸體載荷(Shell)所組成的,其功能等價於獨立攻擊載荷「windows/shell_bind_tcp」。Metasploit所引入的多種類型載荷模塊使得這些預先編制的模塊化載荷代碼可以適用於絕大多數的平臺和攻擊場景,這也爲Metasploit可以成爲通用化的滲透攻擊與代碼開發平臺提供了很是有力的支持。
空指令(NOP)是一些對程序運行狀態不會形成任何實質影響的空操做或無關操做指令,最典型的空指令就是空操做,在x86 CPU體系架構平臺上的操做碼是0x90。
在滲透攻擊構造邪惡數據緩衝區時,經常要在真正要執行的Shellcode以前添加一段空指令區,這樣當觸發滲透攻擊後跳轉執行Shellcode時,有一個較大的安全着陸區,從而避免受到內存地址隨機化、返回地址計算誤差等緣由形成的Shellcode執行失敗,提升滲透攻擊的可靠性。Metasploit框架中的空指令模塊就是用來在攻擊載荷中添加空指令區,以提升攻擊可靠性的組件。
攻擊載荷模塊與空指令模塊組裝完成一個指令序列後,在這段指令被滲透攻擊模塊加入邪惡數據緩衝區交由目標系統運行以前,Metasploit框架還須要完成一道很是重要的工序——編碼(Encoding)。若是沒有這道工序,滲透攻擊可能徹底不會奏效,或者中途就被檢測到並阻斷。這道工序是由編碼器模塊所完成的。
編碼器模塊的第一個使命是確保攻擊載荷中不會出現滲透攻擊過程當中應加以免的「壞字符」,這些「壞字符」的存在將致使特殊構造的邪惡數據緩衝區沒法按照預期目標徹底輸入到存有漏洞的軟件例程中,從而使得滲透攻擊觸發漏洞以後沒法正確執行攻擊載荷,達成控制系統的目標。
典型的「壞字符」就是0x00空字節,在大量漏洞所在的字符串操做函數中,輸入字符串中的空字節會被解釋爲字符串的末尾,這樣會將後面內容進行截斷,從而使得攻擊載荷沒有完整地被運行,致使攻擊失敗。此外還有一些滲透攻擊場景中,網絡輸入必須經過明文協議進行傳輸,從而須要攻擊載荷的內容都是可打印字符,甚至於字母與數字字符,這時除了這些可接受字符以外的所有字符,對這個滲透攻擊場景而言,就全落入了「壞字符」的範疇了。
每一個滲透攻擊模塊根據它的漏洞利用條件與執行流程會有多個不一樣的「壞字符」,滲透代碼開發者須要進行測試並將它們標識出來,在Metasploit的滲透攻擊模塊中存在一個BadChars字段,專門用來列出須要避免的「壞字符」列表,讓Metasploit選擇編碼器對攻擊載荷進行編碼時可以繞開這些「使人崩潰」的傢伙們。
編碼器的第二個使命是對攻擊載荷進行「免殺」處理,即逃避反病毒軟件、IDS入侵檢測系統和IPS入侵防護系統的檢測與阻斷。經過各類不一樣形式的編碼,甚至是多個編碼器的嵌套編碼,可讓攻擊載荷變得面目全非,避免載荷中含有一些安全檢測與防護機制可以輕易識別的特徵碼,從而可以達到「免殺」的效果。
固然,「殺」與「免殺」像「矛」和「盾」同樣,永遠處於不停對抗博弈的過程當中,一些新的編碼器和編碼技術發佈以後,反病毒公司與安全廠商也會隨之研發可以應對這些技術,從而對編碼後的攻擊載荷進行有效檢測的技術方法,而後安全社區的黑客們也會針對安全廠商的檢測技術發掘它們的弱點,並開發出新的編碼技術。這一過程構成了安全社區中永恆的攻防技術博弈,而這也是這個技術領域最具魅力的地方。
另外值得一提的是,採用編碼器對攻擊載荷進行編碼以後,每每會形成編碼後載荷體積增大,而每一個滲透攻擊模塊可以植入的邪惡緩衝區大小是受到漏洞觸發條件限制的(一般在滲透攻擊模塊的Space字段中指明),所以Metasploit在自動爲攻擊載荷選擇編碼器進行編碼時,可能會找不出合適的編碼器,既可以將編碼後的載荷大小控制在空間限制以內,又要徹底避免出現「壞字符」,這種狀況下會出現「No encoders encoded the buffer successfully」錯誤,這可能讓你摸不着頭腦,難道那就一籌莫展了嗎?
如今告訴你Metasploit的解決之道。還記得前面提到過的分階段植入攻擊載荷模式嗎?選擇一個傳輸器和一個傳輸體配對構成的攻擊載荷,可以以短小精悍的傳輸器來避免編碼以後超出空間限制,而後在運行傳輸器載荷以後就再也不受到空間大小的約束,就可無拘無束地下載執行你所任意指定的傳輸體攻擊載荷了。
後滲透攻擊模塊(Post)是Metasploit v4版本中正式引入的一種新類型的組件模塊,主要支持在滲透攻擊取得目標系統遠程控制權以後,在受控系統中進行各式各樣的後滲透攻擊動做,好比獲取敏感信息、進一步拓展、實施跳板攻擊等。
正如前面已經提到的那樣,後滲透攻擊模塊將替代Meterpreter和Shell攻擊載荷中的一些擴展腳本,完成在目標系統上進一步攻擊功能的組件代碼。後滲透攻擊模塊須要經過Meterpreter或Shell控制會話加載到目標操做系統平臺上運行,所以目前Metasploit框架中是按照操做系統平臺來組織此類模塊的,v4版本支持Windows、Linux、Mac OS X、Solaris平臺,及Multi跨平臺的一些應用軟件信息蒐集。如今支持最完善的Windows平臺上,已有的後滲透攻擊模塊包括敏感信息蒐集、鍵擊記錄、本地特權提高以及本地會話管理等。
在後滲透攻擊階段,Metasploit框架中功能最強大、最具發展前景的模塊是Meterpreter,Meterpreter做爲能夠被滲透攻擊植入到目標系統上執行的一個攻擊載荷,除了提供基本的控制會話以外,還集成了大量的後滲透攻擊命令與功能,並經過大量的後滲透攻擊模塊進一步提高它在本地攻擊與內網拓展方面的能力。
本書將在第9章全面展現Meterpreter所具備的功能,以及對後滲透攻擊階段的支持能力。
Metasploit在Windows操做系統上的安裝很是簡單,Metasploit已經爲Windows用戶提供了很好的支持,能夠從Metasploit主站的下載頁面中獲取到Full版和Mini版的安裝包。
在遇到問題後經過搜索引擎查找,看別人是否碰見過相同問題,並找到他們成功的解決方法,這是很是有效的一種手段,你們必定要掌握。可是要注意的是:
1)有些問題搜索中文頁面可能找不到,但能夠搜索英文頁面會找獲得,畢竟國內安全圈的技術人員數量要比全世界的少不少,有些工具和技術也可能不多有國內的技術人員去實踐。 2)還有不少問題多是第一個遇到,這時候就靠本身經過實踐去解決了。固然能夠在一些相關的郵件列表和社區交流渠道中詢問,但最終仍是要靠本身的能力去解決。 3)當你解決一個別人沒遇到的問題後,最好可以在社區中分享你的經驗,這纔是「黑客之道」。
Metasploit框架安裝完成以後,能夠在菜單項中的Metasploit Update來獲取Metasploit的更新模塊與特性。在執行UAC控制的Windows 7系統上,須要以管理員權限執行Metasploit Update才能進行正常更新。安裝完成以後,就能夠在菜單項中一樣以管理員權限執行「Metasploit Console」,來使用Metasploit框架。
在Windows上,絕大多數的Metasploit框架特性都可以正常使用,除了依賴於原始套接字的SYN Scan、pSnuffle等模塊,依賴於Lorcon2的一些Wi-Fi模塊等,而須要綁定到139或445端口上的smb_relay模塊,則須要特殊配置後才能使用。
因爲Metasploit框架所須要的Ruby解釋器、RubyGems、Subversion和一系列依賴軟件在不少Linux發行版默認安裝中並不支持,所以經過源碼安裝Metasploit很是煩瑣,感興趣的讀者請參考https://community.rapid7.com/docs/DOC-1405。Metasploit提供一個通用二進制安裝包,能夠比較便捷地在Linux環境中安裝Metasploit。該安裝包對如下32位或64位Linux發行版都支持。
Red Hat Enterprise Linux Fedora and Fedora Core CentOS Slackware Ubuntu Arch Linux
能夠從Metasploit主站的下載頁面根據體系結構(32位或64位)來選擇下載徹底版的Linux二進制安裝包,而後運行以下命令:
$ chmod +x framework-*-linux-full.run $ sudo ./framework-*-linux-full.run $ hash –r
安裝過程結束以後,就能夠在系統路徑上使用全部的Metasploit框架命令了。如以root權限運行msfupdate進行Metasploit更新等。
經過上述過程安裝完二進制依賴軟件包以後,還須要確認這些依賴軟件在你的Linux平臺上是可用的。首先,從主站下載頁面下載UNIX源碼包,而後執行以下命令:
$ tar xf framework-*.tar.gz $ sudo mkdir -p /opt/metasploit3 $ sudo cp -a msf3/ /opt/metasploit3/msf3 $ sudo chown root:root -R /opt/metasploit3/msf3 $ sudo ln -sf /opt/metasploit3/msf3/msf* /usr/local/bin/
而後使用最新的Subversion客戶端軟件,經過checkout命令檢查最新的Metasploit框架源碼:
$ sudo rm -rf /opt/metasploit3/msf3/ $ sudo svn checkout https://www.metasploit.com/svn/framework3/trunk /opt/metasploit3/msf3/ 如今,使用如下語句測試Ruby環境是否可用: $ ruby /opt/metasploit3/msf3/msfconsole
若是MSF終端可以正常啓動,並無任何報警,那麼你的Ruby可以支持Metasploit框架的基本功能了。
接下來該測試RubyGems了,從http://www.rubygems.org/下載最新版本的tar包,並執行如下命令:
$ tar -xf rubygems-*.tar.gz $ cd rubygems* $ sudo ruby setup.rb install
經過以下指令來驗證RubyGems是否正常工做:
$ ruby -rrubygems -rreadline -ropenssl -rirb -rdl -riconv -e 'p :OK'
爲了適應不一樣的用戶使用需求,Metasploit框架提供多種不一樣方式的使用接口,其中最直觀的是msfgui圖形化界面工具,而最流行且功能最強大是MSF終端,此外還特別爲程序交互提供了msfcli命令行程序,在v3.5版本以前還提供過基於Web界面的msfweb接口。
msfgui圖形化界面工具是Metasploit初學者最易上手的使用接口,輕鬆地單擊鼠標,輸入目標IP地址,就可使用Metasploit強大功能滲透進入目標系統。
在Back Track命令行終端中運行msfgui啓動Metasploit圖形化界面工具,將顯示如圖1-4所示的msfgui界面。
爲了演示Metasploit的使用方法,這裏將針對Linux Metasploitable靶機環境Samba網絡服務的usermap_script安全漏洞進行滲透攻擊,以得到對靶機的遠程控制權。
從msfgui菜單項中選擇Exploits→multi→samba→usermap_script,將顯示對該滲透攻擊模塊進行參數配置的對話框,如圖1-5所示,攻擊目標Target爲默認的自動探測,並在下拉框中選擇一個攻擊載荷,這裏咱們選擇bind_netcat,該攻擊載荷運行後將在目標主機上啓動「瑞士軍刀」netcat並綁定Shell到一個開放端口上,而後咱們在RHOST參數框中填入攻擊目標主機,即Linux Metasploitable的IP地址(10.10.10.254),單擊Run exploit按鈕以後,就觸發了滲透攻擊的過程。
MSF終端是Metasploit框架中功能最強大、最豐富且支持最好的用戶接口,雖然對於新人而言,較圖形化界面上手稍微要困難一些,一旦瞭解MSF終端的命令語法,你將很快體驗到它的強大功能與操做便利。與圖形化界面等其餘Metasploit用戶接口相比,MSF終端擁有以下優點:
提供一站式的交互接口,可以訪問Metasploit框架中幾乎每一項功能與特性,並且能夠直接執行外部的Shell命令和第三方工具(如Nmap等),這使得你能夠在MSF終端中完成絕大部分的滲透測試工做。
提供很是便利且符合Linux操做習慣的交互,支持命令的tab補全,用戶配置的保存與裝載等功能,在用戶熟悉該交互環境時能夠提供很是高效的操做接口。
MSF終端也是目前更新最及時,而且最穩定的Metasploit用戶接口。
msfcli命令行程序是Metasploit框架爲腳本自動化處理及與其餘命令行工具互操做而設計的一種用戶接口,它能夠直接從命令行Shell執行,並容許你經過Linux的管道機制將結果輸出重定向給其餘程序進行處理。當你須要針對一個網絡中的大量系統進行同一安全漏洞的滲透測試與檢查,msfcli將是特別適用的Metasploit框架調用接口,你能夠針對一個系統配置好msfcli的命令行參數,而後寫一段簡單的Shell腳原本對一組IP地址進行依次測試,並將結果輸出到日誌文件中以供查詢和進一步分析。
相比較於MSF終端,msfcli命令行程序的弱點在於所支持的功能特性較少,如尚不支持將結果輸入到後臺數據庫中,同時只能處理一個Shell從而使得對客戶端攻擊不太實用,以及不支持MSF終端中的高級自動化滲透特性(如db_autopwn等)。
要點以下:
滲透測試(Penetration Testing)是一種經過模擬惡意攻擊者的技術與方法,挫敗目標系統安全控制措施,取得訪問控制權,並發現具有業務影響後果安全隱患的一種安全測試與評估方式。滲透測試具備兩種基本類型:黑盒測試與白盒測試,結合二者的稱爲灰盒測試。
要想完成一次質量很高的滲透測試過程,滲透測試團隊須要掌握一套完整和正確的滲透測試方法學。目前業界流行的滲透測試方法學有OSSTMM、NIST SP800-4二、OWASP Top 十、WASC-TC和PTES等。
滲透測試主要包括前期交互、情報蒐集、威脅建模、漏洞分析、滲透攻擊、後滲透攻擊和報告7個階段。
滲透測試流程中最核心和基本的內容是找出目標系統中存在的安全漏洞,並實施滲透攻擊。
Metasploit是一個開源的滲透測試框架軟件,也是一個逐步發展成熟的漏洞研究與滲透代碼開發平臺,此外也將成爲支持整個滲透測試過程的安全技術集成開發與應用環境。
Metasploit是由HD Moore於2003年建立的開源項目,2004年發佈Metasploit v2版本並被黑客社區普遍接受,2006年以黑馬姿態躋身SecTools最受歡迎安全工具五強之列,2007年發佈了以Ruby語言徹底重寫後的v3版本,目前最新的v4版本是2011年發佈的,截至2013年4月,最新版本是v4.6.0。
Metasploit框架中最重要的是輔助模塊、滲透攻擊模塊、後滲透攻擊模塊、攻擊載荷模塊、空指令模塊和編碼器模塊這六類模塊組件,提供了多種使用接口和一系列的功能程序,支持與大量第三方安全工具進行集成應用。
Metasploit最方便的使用平臺是Back Track,功能最強大的使用接口是MSF終端。