Metasploit體系框架
V4版本體系結構:
Metasploit設計盡可能采用模塊化的理念;在基礎庫的基礎上,提供了一些核心框架功能的的支持;實現滲透測試的功能的主體代碼則以模塊化方式組織,並按照不同用途分為6種類型模塊;為了擴充metasploit框架對滲透測試全過程的支持功能特性,metasploit還引入了插件機制,支持將外部的安全工具集成到框架中;metasploit框架對集成模塊與插件的滲透測試功能,通過用戶接口與功能程序提供給滲透測試者進行使用。
基礎庫文件
metasploit基礎庫文件位於源碼根目錄路徑下的libraries目錄中,包括Rex,framework-core和framework-base三部分。
Rex是整個框架所依賴的最基礎的一些組件,如包裝的網絡套接字、網絡應用協議客戶端與服務端實現、日志子系統、滲透攻擊支持例程、PostgreSQL以及MySQL數據庫支持等;
framework-core庫負責實現所有與各種類型的上層模塊及插件的交互接口;
framework-base庫擴展了framework-core,提供更加簡單的包裝例程,並未處理框架各個方面的功能提供了一些功能類,用於支持用戶接口與功能程序調用框架本身功能及框架集成模塊;
模塊
模塊是通過Metasploit框架所裝載、集成並對外提供的最核心的滲透測試功能實現代碼。分為輔助模塊(Aux)、滲透攻擊模塊(Exploits)、后滲透攻擊模塊(Post)、攻擊載荷模塊(payloads)、編碼器模塊(Encoders)、空指令模塊(Nops)。這些模塊擁有非常清晰的結構和一個預定義好的接口,並可以組合支持信息收集、滲透攻擊與后滲透攻擊拓展。
- 輔助模塊
在滲透信息搜集環節提供了大量的輔助模塊支持,包括針對各種網絡服務的掃描與查點、構建虛假服務收集登錄密碼、口令猜測等模塊。此外,輔助模塊中還包括一些無須加載攻擊載荷,同時往往不是取得目標系統遠程控制權的滲透攻擊,例如:拒絕服務攻擊。
- 滲透攻擊模塊
利用發現的安全漏洞或配置弱點對遠程目標系統進行攻擊,以植入和運行攻擊載荷,從而獲得對目標系統訪問控制權的代碼組件。metasploit框架中滲透攻擊模塊可以按照所利用的安全漏洞所在的位置分為主動滲透攻擊與被動滲透攻擊兩大類。
主動滲透攻擊:所利用的安全漏洞位於網絡服務端軟件與服務端軟件承載的上層應用程序之中,由於這些服務通常是在主機上開啟一些監聽端口並等待客戶端連接,通過連接目標系統網絡服務,注入一些特殊構造的包含“邪惡”攻擊數據的網絡請求內容,觸發安全漏洞,並使得遠程服務進行執行“邪惡”數據中包含的攻擊載荷,從而獲取目標系統的控制會話。針對網絡服務端的主動滲透攻擊屬於傳統的滲透攻擊。還有web應用程序滲透攻擊、SCADA工業控制系統服務滲透攻擊。
被動滲透攻擊:利用漏洞位於客戶端軟件中,如瀏覽器、瀏覽插件、電子郵件客戶端、office與Adobe等各種文檔與編輯軟件。對於這類存在於客戶端軟件的安全漏洞,我們無法主動地將數據從遠程輸入到客戶端軟件中,因此只能采用被動滲透攻擊方式。即構造出“邪惡”的網頁、電子郵件或文檔文件,並通過架設包含此類惡意內容的服務端、發送郵件附件、結合社會工程學攻擊分發並誘騙目標用戶打開、結合網絡欺騙和劫持技術,等目標系統上的用戶訪問到這些邪惡內容,從而觸發客戶端軟件中的安全漏洞,給出控制目標系統的shell會話。客戶端軟件被動滲透攻擊能夠繞過防火牆等網絡邊界防護措施,最常見的兩類被動滲透攻擊為瀏覽器軟件漏洞攻擊和文件格式類漏洞攻擊。
- 攻擊載荷模塊
攻擊載荷是在滲透攻擊成功后促使目標系統運行的一段植入代碼,通常作用是為滲透攻擊者打開在目標系統上的控制會話連接。在傳統的滲透代碼開發中,攻擊載荷只是一段功能簡單的ShellCode代碼,以匯編語言編制並轉換為目標系統CPU體系結構支持的機器代碼,在滲透攻擊觸發漏洞后,將程序執行流程劫持並跳轉入這段機器代碼中執行,從而完成ShellCode中實現的單一功能。
metasploit攻擊載荷模塊分為獨立(Single)、傳輸器(Stager)、傳輸體(Stage)三種類型。
獨立攻擊載荷是完全自包含的,可直接獨立地植入目標系統進行執行,比如“windows/shell_bind_tcp"是適用於Windows操作系統平台,能夠將Shell控制會話綁定在指定TCP端口上的攻擊載荷。在一些比較特殊情況下,可能會對攻擊載荷的大小、運行條件有所限制,比如特定安全漏洞利用時可填充邪惡攻擊緩沖區的可用空間很小、windows 7等新型操作系統所引入的NX(堆棧不可執行)、DEP(數據執行保護)等安全防御機制,在這些場景情況下,Metasploit提供了傳輸器和傳輸體配對分階段植入的技術,由滲透攻擊模塊首先植入代碼精悍短小且非常可靠的傳輸器載荷,然后在運行傳輸器載荷時進一步下載傳輸體載荷並執行。
- 空指令模塊
空指令(NOP)是一些對程序運行狀態不會造成任何實質影響的空操作或無關操作指令,最典型的空指令就是空操作,在X86 CPU體系結構平台上的操作碼是ox90.
在滲透攻擊構造邪惡數據緩沖區時,常常要在真正要執行的Shellcode之前添加一段空指令區,這樣當觸發滲透攻擊后跳轉執行ShellCode時,有一個較大的安全着陸區,從而避免受到內存地址隨機化、返回地址計算偏差等原因造成的ShellCode執行失敗,提高滲透攻擊的可靠性。
- 編碼器模塊
攻擊載荷與空指令模塊組裝完成一個指令序列后,在這段指令被滲透攻擊模塊加入邪惡數據緩沖區交由目標系統運行之前,Metasploit框架還需要完成一道非常重要的工序----編碼。
編碼模塊的第一個使命是確保攻擊載荷中不會出現滲透攻擊過程中應加以避免的”壞字符“。
編碼器第二個使命是對攻擊載荷進行”免殺“處理,即逃避反病毒軟件、IDS入侵檢測系統和IPS入侵防御系統的檢測與阻斷。
- 后滲透模塊
主要支持在滲透攻擊取得目標系統遠程控制權之后,在受控系統中進行各種各樣的后滲透攻擊動作,比如獲取敏感信息,進一步括展,實施跳板攻擊等。
插件
插件能夠擴充框架的功能,或者組裝已有功能構成高級特性的組件。插件可以集成現有的一些外部安全工具,如Nessus、OpenVAS漏洞掃描器等,為用戶接口提供一些新的功能。
接口
包括msfconsole控制終端、msfcli命令行、msfgui圖形化界面、armitage圖形化界面以及msfapi遠程調用接口。
功能程序
除了用戶使用用戶接口訪問metasploit框架主體功能之外,metasploit還提供了一系列可直接運行的功能程序,支持滲透測試者與安全人員快速地利用metasploit框架內部能力完成一些特定任務。比如msfpayload、msfencode和msfvenom可以將攻擊載荷封裝為可執行文件、C語言、JavaScript語言等多種形式,並可以進行各種類型的編碼。
msf*scan系列功能程序提供了在PE、ELF等各種類型文件中搜索特定指令的功能,可以幫助滲透代碼開發人員定位指令地址。