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

The world’s most used penetration testing framework.

Metasploit

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

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

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

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

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

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

Micropoor
?