第三十一課:msf的前生今世
專注APT攻擊與防御
https://micropoor.blogspot.com/

The world’s most used penetration testing framework.

Metasploit

從本季開始將會連載Metasploit教學(xué),非常榮幸,本部門在我的“慫恿”下,基本以Metasploit為常用框架做滲透。為了更好的把這個“壞習(xí)慣”延續(xù)下去,遂打算寫一套完整的系列教程。以供同學(xué)們在使用中,或者新來的同學(xué)形成遞歸學(xué)習(xí)或者查詢相關(guān)資料。在寫的同時,查閱了大量的資料以及借鑒了許多思路。感謝為此貢獻的老師們。Metasploit項目是一個旨在提供安全漏洞信息計算機安全項目,可以協(xié)助安全工程師進
行滲透測試(penetration testing)及入侵檢測系統(tǒng)簽名開發(fā)。
Github開源地址:
https://github.com/rapid7/metasploit-framework

msf(未來Metasploit的簡稱)基本遵循PTES滲透測試標(biāo)準(zhǔn)。它將滲透分解如下:

1. 創(chuàng)建項目
2. 發(fā)現(xiàn)設(shè)備
3. 獲取對主機的訪問權(quán)限
4. 控制會話
5. 從目標(biāo)主機收集證據(jù)
6. 會話清除
7. 生成報告(需pro版本)

而PTEST滲透測試標(biāo)準(zhǔn)如下:
1:前期交互階段
在前期交互(Pre-Engagement Interaction)階段,滲透測試團隊與客戶組織進行交互討論,最重要的是確定滲透測試的范圍、目標(biāo)、限制條件以及服務(wù)合同細(xì)節(jié)。該階段通常涉及收集客戶需求、準(zhǔn)備測試計劃、定義測試范圍與邊界、定義業(yè)務(wù)目標(biāo)、項目管理與規(guī)劃等活動。

2:情報收集階段
在目標(biāo)范圍確定之后,將進入情報搜集(Information Gathering)階段,滲透測試團隊可以利用各種信息來源與搜集技術(shù)方法,嘗試獲取更多關(guān)于目標(biāo)組織網(wǎng)絡(luò)拓?fù)?、系統(tǒng)配置與安全防御措施的信息。
滲透測試者可以使用的情報搜集方法包括公開來源信息查詢、Google Hacking、社會工程學(xué)、網(wǎng)絡(luò)踩點、掃描探測、被動監(jiān)聽、服務(wù)查點等。而對目標(biāo)系統(tǒng)的情報探查能力是滲透測試者一項非常重要的技能,情報搜集是否充分在很大程度上決定了滲透測試的成敗,因為如果你遺漏關(guān)鍵的情報信息,你將可能在后面的階段里一無所獲。
3:威脅建模階段
在搜集到充分的情報信息之后,滲透測試團隊的成員們停下敲擊鍵盤,大家聚到一起針對獲取的信息進行威脅建模(Threat Modeling)與攻擊規(guī)劃。這是滲透測試過程中非常重要,但很容易被忽視的一個關(guān)鍵點。
通過團隊共同的縝密情報分析與攻擊思路頭腦風(fēng)暴,可以從大量的信息情報中理清頭緒,確定出最可行的攻擊通道。
4:漏洞分析階段
在確定出最可行的攻擊通道之后,接下來需要考慮該如何取得目標(biāo)系統(tǒng)的訪問控制權(quán),即漏洞分析(Vulnerability Analysis)階段。在該階段,滲透測試者需要綜合分析前幾個階段獲取并匯總的情報信息,特別是安全漏洞掃描結(jié)果、服務(wù)查點信息等,通過搜索可獲取的滲透代碼資源,找出可以實施滲透攻擊的攻擊點,并在實驗環(huán)境中進行驗證。在該階段,高水平的滲透測試團隊還會針對攻擊通道上的一些關(guān)鍵系統(tǒng)與服務(wù)進行安全漏洞探測與挖掘,期望找出可被利用的未知安全漏洞,并開發(fā)出滲透代碼,從而打開攻擊通道上的關(guān)鍵路徑。
5:滲透攻擊階段
滲透攻擊(Exploitation)是滲透測試過程中最具有魅力的環(huán)節(jié)。在此環(huán)節(jié)中,滲透測試團隊需要利用他們所找出的目標(biāo)系統(tǒng)安全漏洞,來真正入侵系統(tǒng)當(dāng)中,獲得訪問控制權(quán)。
滲透攻擊可以利用公開渠道可獲取的滲透代碼,但一般在實際應(yīng)用場景中,滲透測試者還需要充分地考慮目標(biāo)系統(tǒng)特性來定制滲透攻擊,并需要挫敗目標(biāo)網(wǎng)絡(luò)與系統(tǒng)中實施的安全防御措施,才能成功達成滲透目的。在黑盒測試中,滲透測試者還需要考慮對目標(biāo)系統(tǒng)檢測機制的逃逸,從而避免造成目標(biāo)組織安全響應(yīng)團隊的警覺和發(fā)現(xiàn)。
6:后滲透攻擊階段
后滲透攻擊(Post Exploitation)是整個滲透測試過程中最能夠體現(xiàn)滲透測試團隊創(chuàng)造力與技術(shù)能力的環(huán)節(jié)。前面的環(huán)節(jié)可以說都是在按部就班地完成非常普遍的目標(biāo),而在這個環(huán)節(jié)中,需要滲透測試團隊根據(jù)目標(biāo)組織的業(yè)務(wù)經(jīng)營模式、保護資產(chǎn)形式與安全防御計劃的不同特點,自主設(shè)計出攻擊目標(biāo),識別關(guān)鍵基礎(chǔ)設(shè)施,并尋找客戶組織最具價值和嘗試安全保護的信息和資產(chǎn),最終達成能夠?qū)蛻艚M織造成最重要業(yè)務(wù)影響的攻擊途徑。在不同的滲透測試場景中,這些攻擊目標(biāo)與途徑可能是千變?nèi)f化的,而設(shè)置是否準(zhǔn)確并且可行,也取決于團隊自身的創(chuàng)新意識、知識范疇、實際經(jīng)驗和技術(shù)能力。
7:報告階段

滲透測試過程最終向客戶組織提交,取得認(rèn)可并成功獲得合同付款的就是一份滲透測試報告(Reporting)。這份報告凝聚了之前所有階段之中滲透測試團隊所獲取的關(guān)鍵情報信息、探測和發(fā)掘出的系統(tǒng)安全漏洞、成功滲透攻擊的過程,以及造成業(yè)務(wù)影響后果的攻擊途徑,同時還要站在防御者的角度上,幫助他們分析安全防御體系中的薄弱環(huán)節(jié)、存在的問題,以及修補與升級技術(shù)方案。
本系列教程以msf 4.15.45為基礎(chǔ),后期可能會以msf5為基礎(chǔ)。
msf核心代碼為Ruby開發(fā)。這里需要解釋,為什么作者以Ruby為核心語言開發(fā)?而不是python,perl等大眾語言開發(fā)?
這里轉(zhuǎn)載原作者的話:
以下是在2005年左右寫的。
在框架的開發(fā)過程中,Metasploit開發(fā)人員不斷被問到的一個反復(fù)出現(xiàn)的問題是為什么選擇Ruby作為編程語言。為避免單獨回答此問題,作者選擇在本文檔中解釋其原因。由于很多原因,選擇了Ruby編程語言而不是其他選擇,例如python,perl和C++。選擇Ruby的第一個(也是主要的)原因是因為它是Metasploit員工喜歡寫的一種語言。在花時間分析其他語言并考慮過去的經(jīng)驗后,發(fā)現(xiàn)Ruby編程語言既簡單又強大解釋語言的方法。Ruby提供的內(nèi)省程度和面向?qū)ο蟮姆矫娣浅_m合框架的一些要求??蚣軐Υa重用的自動化類構(gòu)造的需求是決策制定過程中的關(guān)鍵因素,而且它是perl不太適合提供的東西之一。除此之外,選擇Ruby的第二個原因是因為它支持平臺獨立于線程。雖然在該模型下開發(fā)框架期間遇到了許多限制,但Metasploit工作人員觀察到了2.x分支的顯著性能和可用性改進。未來版本的Ruby(1.9系列)將使用本機線程支持現(xiàn)有的線程API,操作系統(tǒng)將編譯解釋器,這將解決當(dāng)前實現(xiàn)的許多現(xiàn)有問題(例如允許使用阻塞操作)。與此同時,與傳統(tǒng)的分叉模型相比,現(xiàn)有的線程模型被發(fā)現(xiàn)要優(yōu)越得多,特別是在缺少像Windows這樣的原生分支實現(xiàn)的平臺上。
選擇Ruby的另一個原因是因為Windows平臺支持存在本機解釋器。雖然perl有cygwin版本和ActiveState版本,但兩者都受到可用性問題的困擾??梢栽赪indows上本地編譯和執(zhí)行Ruby解釋器的事實大大提高了性能。此外,解釋器也非常小,并且可以在出現(xiàn)錯誤時輕松修改。
Python編程語言也是候選語言。Metasploit員工選擇Ruby而不是python的原因有幾個原因。主要原因是對python強制的一些語法煩惱的普遍厭惡,例如block-indention。雖然許多人認(rèn)為這種方法的好處,但Metasploit工作人員的一些成員認(rèn)為這是一個不必要的限制。Python的其他問題圍繞父類方法調(diào)用的限制和解釋器的向后兼容性。
C / C ++編程語言也得到了非常認(rèn)真的考慮,但最終很明顯,嘗試以非解釋性語言部署可移植和可用的框架是不可行的。此外,這種語言選擇的開發(fā)時間線很可能會更長。盡管框架的2.x分支已經(jīng)相當(dāng)成功,但Metasploit開發(fā)人員遇到了許多限制和煩惱與perl的面向?qū)ο缶幊棠P突蛉狈?。事實?/span>
perl解釋器是許多發(fā)行版上默認(rèn)安裝的一部分,這并不是Metasploit員工認(rèn)為值得繞開語言選擇的東西。
最后,所有這些都?xì)w結(jié)為選擇一種對框架貢獻最大的人所享有的語言,而這種語言最終成為Ruby。

Micropoor
?