天天看點

【DeepExploit】基于強化學習的自動滲透工具1. 研究背景2. 項目結構及源碼分析3. 實操4.特點:

文章目錄

  • 1. 研究背景
    • 1.1 自動化滲透測試研究背景
    • 1.2 DeepExploit簡介
    • 1.3 Metasploit簡介
      • 1.3.1 Metasploit滲透步驟——以MS17-010為例
      • 1.3.2 Metasploit三大重要參數
      • 1.4.1 A3C算法背景——強化學習
      • 1.4.2 A3C算法背景——DQN
      • 1.4.3 A3C
  • 2. 項目結構及源碼分析
    • 2.1 項目架構
    • 2.2 項目流程圖
    • 2.3 情報收集
    • 2.4 訓練模式
    • 2.5 測試模式
    • 2.6 強化學習
      • 2.6.1 強化學習的應用——三大要素
      • 2.6.2 強化學習的應用——A3C
  • 3. 實操
  • 4.特點:

1. 研究背景

1.1 自動化滲透測試研究背景

随着物聯網和智能手機終端數量的增加,越來越需要實施安全措施來保護這些系統免受網絡攻擊。這些因素推動了滲透測試市場的發展,在2022年全球市場佔有率已經達到了14億美元。

在滲透測試過程中,工程師一般先用漏掃工具對目标系統進行掃描測試,若未發現問題,則需要進行長期的人工滲透過程。是以在滲透測試的過程中,“漏洞探測”往往是最耗時的一步。滲透人才也極度短缺,在這種背景下,國内外很多公司都有研發自動化滲透測試工具來滿足市場需求、緩解人才短缺的壓力。

但是就目前來講,大部分自動化滲透産品的做法是簡單地将漏掃的結果與相關的利用工具相結合,進而達到自動化滲透的效果,而“人工滲透的過程”并未有效實作自動化。

【DeepExploit】基于強化學習的自動滲透工具1. 研究背景2. 項目結構及源碼分析3. 實操4.特點:

自動化滲透測試,顧名思義,即自動化完成滲透測試的過程。

  1. 從内容上講,需要滿足手工滲透測試的基本步驟
    【DeepExploit】基于強化學習的自動滲透工具1. 研究背景2. 項目結構及源碼分析3. 實操4.特點:

2.從能力上講,評判工具的好壞有兩個方面

 自動化工具能發現多少風險點

 自動化工具對滲透測試的效率提升有多大。

1.2 DeepExploit簡介

【DeepExploit】基于強化學習的自動滲透工具1. 研究背景2. 項目結構及源碼分析3. 實操4.特點:

2018年日本公司MBSD研發出DeepExploit,底層使用Metasploit進行滲透,使用強化學習技術來提升滲透效率,主要功能如下:

• 資訊搜集:通過Nmap端口掃描以及爬蟲收集主機的情報資訊

• 模組化威脅:識别目标主機中的已知漏洞

• 漏洞分析:确定高效有效的利用方法

• 漏洞利用:使用确定的檢查方法在DeepExploit執行漏洞利用

【DeepExploit】基于強化學習的自動滲透工具1. 研究背景2. 項目結構及源碼分析3. 實操4.特點:

1.3 Metasploit簡介

Metasploit是一款開源的安全漏洞檢測工具,可以幫助安全和IT專業人士識别安全性問題,驗證漏洞的緩解措施,并管理專家驅動的安全性進行評估,提供真正的安全風險情報。這些功能包括智能開發、代碼審計、Web應用程式掃描、社會工程等。

基礎庫檔案:

  • Rex是整個架構依賴的基礎元件,比如包裝的網絡套接字,網絡協定用戶端和使用者端的實作,滲透攻擊支援例程等
  • framework-core負責實作所有與各種類型上層子產品及插件的互動接口
  • base則是對core進行了一個擴充

    子產品:

  • Auxiliary為輔助子產品,Exploit是滲透攻擊子產品,Post是後滲透攻擊子產品,Payload是攻擊載荷子產品(主要是用來建立目标機與攻擊機穩定連接配接的,可傳回shell,也可以進行程式注入等),Encoders為編碼器子產品,Nops是空指令子產品

    插件:

    插件能夠擴充架構的功能,或者組裝已有功能構成進階特性的元件,可以內建現有的外部工具

    接口:

    包括msfconsole控制終端、msfcli指令行、msfgui圖形化界面、armitage圖形化界面以及msfapi遠端調用接口

    功能程式:

    比如msfpayload、msfencode和msfvenom可以将攻擊載荷封裝為可執行檔案、C語言、JavaScript語言等多種形式,并可以進行各種類型的編碼。

    【DeepExploit】基于強化學習的自動滲透工具1. 研究背景2. 項目結構及源碼分析3. 實操4.特點:

1.3.1 Metasploit滲透步驟——以MS17-010為例

這裡以MS17-010的永恒之藍漏洞利用為例。永恒之藍漏洞通過 TCP 的445和139端口,來利用 SMBv1 和 NBT 中的遠端代碼執行漏洞,通過惡意代碼掃描并攻擊開放445檔案共享端口的 Windows 主機。隻要使用者主機開機聯網,即可通過該漏洞控制使用者的主機。不法分子就能在其電腦或伺服器中植入勒索病毒、竊取使用者隐私、遠端控制木馬等惡意程式。

此處的攻擊機是Kali2019,靶機是Win7,沒有打上永恒之藍的更新檔

首先我們需要對目标IP進行端口掃描,這一步既可以在kali中直接開啟,也可以在MSF中對Nmap直接進行調用,我們看到使用指令-sS即為使用SYN半連接配接掃描的指令,得到的結果是445的端口開放

【DeepExploit】基于強化學習的自動滲透工具1. 研究背景2. 項目結構及源碼分析3. 實操4.特點:

我們要利用MS17-010漏洞,就在MSF中查詢相關子產品,使用Search指令即可,就可以看到和該漏洞相關的子產品。其中前兩個是輔助子產品auxiliary,輔助子產品用于探測目标主機是否存在永恒之藍漏洞。後四個是漏洞利用子產品Exploit。可以看到這裡利用的時間和他們的評分,一般時間越新,Rank越高的EXP利用的成功率越高,我們人工滲透的時候也智能嘗試對其進行利用,但也不是絕對的,是以需要滲透人員進行多次嘗試

【DeepExploit】基于強化學習的自動滲透工具1. 研究背景2. 項目結構及源碼分析3. 實操4.特點:

接着查詢Payload攻擊載荷子產品,Payload是我們期望在目标系統在被滲透攻擊之後完成的實際攻擊功能的代碼,成功滲透目标後,用于在目标系統上運作的任意指令。

查詢得到的結果有很多,可以看到一共有46條,其中bind_tcp是正向連結,reverse_tcp是反向連接配接,reverse_http是通過監聽80端口反向連接配接,reverse_https是通過監聽443端口反向連接配接

【DeepExploit】基于強化學習的自動滲透工具1. 研究背景2. 項目結構及源碼分析3. 實操4.特點:

我們的主機和被攻擊機都在外網或者都在内網,這樣靶機就能主動連接配接到我們的主機了。如果是這種情況,建議使用反向連接配接,因為反向連接配接的話,即使靶機開了防火牆也沒事,防火牆隻是阻止進入靶機的流量,而不會阻止靶機主動向外連接配接的流量。這裡實驗使用的是同一網段的兩個IP,是以使用的是反向連接配接。

在名稱前面加上use即可,然後show payloads選擇合适的Payloads(攻擊載荷),最後配置相關參數,包括攻擊機和靶機的端口和IP位址

同時需要配置相關的參數

+Rhost就是靶機IP

+Lhost就是攻擊機IP,用于接收傳回的shell

+設定rport就是攻擊利用的端口。剛剛我們說過永恒之藍利用的445端口,是以就是445

【DeepExploit】基于強化學習的自動滲透工具1. 研究背景2. 項目結構及源碼分析3. 實操4.特點:
【DeepExploit】基于強化學習的自動滲透工具1. 研究背景2. 項目結構及源碼分析3. 實操4.特點:

随後使用run或者exploit指令即可開啟攻擊,我們看到倒數第四行Meterpreter有一個會話,反彈了shell到4444端口,WIN即漏洞利用成功

【DeepExploit】基于強化學習的自動滲透工具1. 研究背景2. 項目結構及源碼分析3. 實操4.特點:

運作exploit指令之後,我們開啟了一個reverse tcp監聽器來監聽本地的4444端口,即我們攻擊者本地主機的位址和端口号。運作成功之後,我們将會看到指令提示符 meterpreter >

我們輸入 shell即可切換到目标主機的Windows7的 cmd_shell裡面

比如這裡我就是列出了靶機的目錄資訊

真正在後滲透過程的操作包括關閉靶機的防毒軟體,上傳下載下傳檔案等等

【DeepExploit】基于強化學習的自動滲透工具1. 研究背景2. 項目結構及源碼分析3. 實操4.特點:

1.3.2 Metasploit三大重要參數

根據各個的流程我們看到了在MSF中的三個重要參數,EXP Payload和Target

我們再回顧一下

【DeepExploit】基于強化學習的自動滲透工具1. 研究背景2. 項目結構及源碼分析3. 實操4.特點:
  • exploit子產品,不同的漏洞需要選擇不同的子產品進行利用,而同一服務,往往存在多種漏洞,是以為了驗證漏洞存在,往往需要設定不同漏洞利用子產品進行測試。
  • payload, 意為攻擊進入目标主機後需要在遠端系統中運作的惡意代碼,剛剛例子中有46個選項
  • target,metasploit會設定一個預設值,代表不同的作業系統類型

    這三個參數的選擇數量是較多的,在實際利用中往往需要滲透測試人員自行多種組合,嘗試利用,耗費時間精力

    DE對這個耗時耗力的部分進行裡自動化,成為了該工具在運用強化學習算法進行滲透測試時所需選擇的重要參數

1.4.1 A3C算法背景——強化學習

接下來是DE的第二個特點,用到了強化學習,本項目采用一種名為Asynchronous Advantage Actor-Critic (異步優勢表演者評論家) 的模型,A3C 屬于強化學習中一種效率比較高的算法,是以這裡簡要介紹一下強化學習。

強化學習強調如何基于環境而行動,以取得最大化的預期利益。正如在利用MSF進行攻擊時,并不知道這一步選擇的EXP或者Payload是好是壞,若最終能夠成功産生session,就認為這是一個好的動作并獎勵模型 。獲得獎勵後,未來采取相同行動的機率會略有增加。通過在各種情況下重複這一點,可以根據各種情況學習可以很好地發揮的動作。

【DeepExploit】基于強化學習的自動滲透工具1. 研究背景2. 項目結構及源碼分析3. 實操4.特點:

基本流程為:agent通過觀察環境的狀态做出行動。該行動會作用于環境,改變環境的狀态,并且産生相關聯的獎勵,智能體通過觀察新的狀态和獎勵來進行下一步動作,由此循環。在這個過程中,智能體會不斷得到獎勵(有好的有壞的),進而不斷進化,最終能以利益最大的目标實施行動。

具體來說,想要使用強化學習來求解一個問題,首先需要定義如下3大要素:

關注如下幾點:

• 環境觀測值/狀态 State

• 動作選擇政策 Policy

• 執行的動作/行為 Action

• 得到的獎勵 Reward

• 下一個狀态 S’

1.4.2 A3C算法背景——DQN

利用最基礎的Q-Learning就需要講到DQN

DQN 屬于深度強化學習的模型。由于S-A表格的局限性,當狀态和動作的組合不可窮盡時,就無法通過查表來選取最優Action。在機器學習中, 有一種方法對這種事情很在行, 那就是神經網絡。我們可以将狀态和動作當成神經網絡的輸入, 然後經過神經網絡分析後得到動作的 Q 值, 這樣我們就沒必要在表格中記錄 Q 值, 而是直接使用神經網絡生成 Q 值,即利用深度學習找到無限逼近最優解的次優解。

【DeepExploit】基于強化學習的自動滲透工具1. 研究背景2. 項目結構及源碼分析3. 實操4.特點:

簡單來說, DQN 有一個記憶庫用于學習之前的經曆. 在之前的簡介影片中提到過, Q learning 是一種 off-policy 離線學習法, 它能學習目前經曆着的, 也能學習過去經曆過的, 甚至是學習别人的經曆. 是以每次 DQN 更新的時候, 我們都可以随機抽取一些之前的經曆進行學習. 随機抽取這種做法打亂了經曆之間的相關性, 也使得神經網絡更新更有效率. Fixed Q-targets 也是一種打亂相關性的機理, 如果使用 fixed Q-targets, 我們就會在 DQN 中使用到兩個結構相同但參數不同的神經網絡, 預測 Q 估計 的神經網絡具備最新的參數, 而預測 Q 現實 的神經網絡使用的參數則是很久以前的. 有了這兩種提升手段, DQN 才能在一些遊戲中超越人類.

1.4.3 A3C

【DeepExploit】基于強化學習的自動滲透工具1. 研究背景2. 項目結構及源碼分析3. 實操4.特點:

A3C學習方式和DQN類似,顯著的改變之一就是加入了異步。

強化學習基于獎勵系統的原理進行學習,是以需要在各種狀态下嘗試許多不同的動作,學習需要很多時間。是以,A3C通過異步的多代理分布式學習實作了學習時間的顯著加快。

就拿這個擺錘的例子來說,每個工作線程中的每個代理都會播放 CartPole 并将獲得的經驗存儲在記憶體中。然後,當它積累一定數量的經驗時,它會計算自己的梯度(⊿w = grad:用于更新權重(w)的參數)并将其推送到參數伺服器。Parameter Server 使用從每個工作線程推送的 grad 來更新自己的網絡權重 (w),并将更新後的權重 (w) 複制到每個工作線程。然後每個代理再次播放 CartPole。重複此過程,直到滿足學習的結束條件。

在各種狀态下嘗試許多不同的動作,就像我們在MSF例子中提到的EXP ,Payload和Target選擇的過程

2. 項目結構及源碼分析

接下來我們對項目結構和部分源碼進行分析

2.1 項目架構

這是一個整體架構圖,使用者在終端輸入相關指令,通過解析後進入機器學習模型中進行訓練,機器學習模型通過RPC API與MSF建立連接配接,發送相關指令到MSF中,

若為訓練模式,MSF自行對目标主機進行訓練後将訓練結果輸入回機器學習模型中,

若為測試模式,MSF将使用訓練得到的資料進行漏洞利用

【DeepExploit】基于強化學習的自動滲透工具1. 研究背景2. 項目結構及源碼分析3. 實操4.特點:

2.2 項目流程圖

項目流程如下,DE對于這些部分都完成了自動化

【DeepExploit】基于強化學習的自動滲透工具1. 研究背景2. 項目結構及源碼分析3. 實操4.特點:

2.3 情報收集

在資訊收集過程中,主要目标是擷取目标系統上運作的服務及其版本号,為了實作這一目标,DE首先使用nmap工具進行簡單的服務識别

如果當下路徑沒有被掃描過就回去執行Nmap,否則傳回Nmap already scanned

【DeepExploit】基于強化學習的自動滲透工具1. 研究背景2. 項目結構及源碼分析3. 實操4.特點:

DE通過RPC API與Metsaploit進行連接配接,Meatsploit中實作了很多API, 通過從用戶端向RPC伺服器發送一個以MessagePack格式化的HTTP POST請求來執行API

然後對MSF的子產品進行回去,包括有EXP,輔助子產品,後滲透子產品,加密子產品等等,同時也會收集與子產品和目标相比對的載荷代碼

【DeepExploit】基于強化學習的自動滲透工具1. 研究背景2. 項目結構及源碼分析3. 實操4.特點:
【DeepExploit】基于強化學習的自動滲透工具1. 研究背景2. 項目結構及源碼分析3. 實操4.特點:

擷取端口資訊,檢查WEB端口[+] Get target info. [+] Check web port.,針對開放的WEB服務進行站内連結爬蟲。針對爬蟲爬取的連結進行CMS指紋識别(靜态規則針對連結的響應内容進行分析)

通過收集Web端口上的響應包,利用字元串比對和樸素貝葉斯進行類型的判斷

架構隻支援一些特定服務的滲透,會過濾掉不支援的服務類型,最終得到要進行滲透測試的服務清單。

【DeepExploit】基于強化學習的自動滲透工具1. 研究背景2. 項目結構及源碼分析3. 實操4.特點:

比如說看到這樣一個HTTP包,可以通過字元串比對輕松識别出兩個産品分别是OpenSSL和PHP

同時也能根據機器學習,從這些編碼得知

除此之外還可以通過以下标簽識别出Joomla!和Apache

Joomla!的特征如下

Apache特征如下:

DE通過ML學習特征,能夠識别出無法通過簽名判斷的産品

架構隻支援一些特定服務的滲透,會過濾掉不支援的服務類型,最終得到要進行滲透測試的服務清單。該部分為官網所說的特點5(強大的情報收集能力)

【DeepExploit】基于強化學習的自動滲透工具1. 研究背景2. 項目結構及源碼分析3. 實操4.特點:

2.4 訓練模式

在訓練模式中,DE首先進行狀态空間初始化,其中ST_OS_TYPE是固定不變的,ST_SERV_NAME和ST_SERV_VER會在随機選擇資訊收集階段中識别到的裝置上的服務和版本,确定ST_SERV_NAME後,在metasploit中根據語句“search name: + ST_SERV_NAME type:exploit app:server”傳回的可利用子產品清單,随機選擇一個子產品确定ST_MODULE,ST_TARGET。在子產品可選的target清單中随機選擇;

【DeepExploit】基于強化學習的自動滲透工具1. 研究背景2. 項目結構及源碼分析3. 實操4.特點:

确定狀态後,A3C算法會計算每個payload的機率,選擇一個機率最高的payload後,利用以上資訊調用metasploit進行漏洞利用;當滲透失敗時,會随機更換target,由于不同target對應的可利用payload不一樣,此時需要重新利用A3C算法計算機率最大的payload進行利用,當該步驟到一定次數還未成功,會再次進行狀态空間初始化,對其他的服務、子產品進行嘗試。整個訓練過程采用多線程并發的方式進行,線程之間沒有任何通信機制,以此方式進行算法的并行化。

【DeepExploit】基于強化學習的自動滲透工具1. 研究背景2. 項目結構及源碼分析3. 實操4.特點:
【DeepExploit】基于強化學習的自動滲透工具1. 研究背景2. 項目結構及源碼分析3. 實操4.特點:
【DeepExploit】基于強化學習的自動滲透工具1. 研究背景2. 項目結構及源碼分析3. 實操4.特點:

2.5 測試模式

測試模式為在實際環境中使用的模式,相比于訓練模式多了後滲透這一步。測試模式首先計算每種狀态空間下,payload的機率,根據該機率由大到小的順序調用metasploit進行滲透,一旦滲透成功,則進行後滲透;在後滲透的過程中,首先利用arp協定進行内網存活主機識别,然後調用metasploit架構中自帶的代理子產品“auxiliary/server/socks4a”搭建代理,對新識别的到的主機進行下一步滲透,直到沒有新的主機出現。

【DeepExploit】基于強化學習的自動滲透工具1. 研究背景2. 項目結構及源碼分析3. 實操4.特點:

2.6 強化學習

2.6.1 強化學習的應用——三大要素

【DeepExploit】基于強化學習的自動滲透工具1. 研究背景2. 項目結構及源碼分析3. 實操4.特點:

馬爾可夫性質即agent可以僅根據目前做出動作,無需考慮過去的狀态。

+狀态空間。DE用5個狀态表示其狀态空間,分别代表:作業系統版本,端口上服務名稱,服務版本,要利用msf的子產品名稱編号,子產品中的target參數。

+動作空間。DE的動作空間為metasploit子產品中所有payload集合。筆者使用的metasploit版本為v6.1.9,payload總數為593個。

+收益。DE将收益定義為3種:

• R_GOOD = 1,R_GOOD代表能傳回shell但是不能獲得meterpreter shell(意指無法利用該機器進行後滲透)

• R_BAD =-1,R_BAD代表漏洞利用失敗。實際上,在DE中,後滲透子產品沒有開發完善,隻要能傳回shell,都會被賦予最大收益GREAT。

• R_GREAT=100,R_GREAT代表可以進行後滲透測試(傳回的shell類型為meterpreter,而DE利用meterpreter進行後滲透)

2.6.2 強化學習的應用——A3C

【DeepExploit】基于強化學習的自動滲透工具1. 研究背景2. 項目結構及源碼分析3. 實操4.特點:
  • 優化權重的理由

    神經網絡從輸入節點(藍色圓圈)接收目前狀态作為輸入信号。然後,輸入信号通過中間層的每個節點(綠色圓圈)傳播,最後到達與動作相關的輸出節點之一(紅色圓圈)。此時,節點之間存在的權重(w)決定了輸入信号傳輸到哪個輸出節點。每個節點都有一個門檻值,如果輸入的權重和超過門檻值,則将信号傳遞給下一個節點。是以,為了為輸入的“目前狀态”選擇最優的“動作”,需要優化(=學習)節點間的權重(w)

    注意這四個他們的神經網絡結構是完全相同的,隻是為了它會建立多個并行的環境, 讓多個擁有副結構的 agent 同時在這些并行環境上更新主結構中的參數. 并行中的 agent 們互不幹擾, 而主結構的參數更新受到副結構送出更新的不連續性幹擾, 是以更新的相關性被降低, 收斂性提高.

    【DeepExploit】基于強化學習的自動滲透工具1. 研究背景2. 項目結構及源碼分析3. 實操4.特點:

Deep Exploit 使用 " module.execute" 來執行漏洞利用,API 傳回job_id和作為傳回值uuid。這裡,uuid是與EXP子產品相關聯的唯一值。接下來,當session.list執行時,将傳回目前活動會話資訊清單(成功利用打開的會話清單)。每個會話資訊都包含一個元素“ exploit_uuid”,即被成功利用的漏洞利用子產品uuid。換句話說,可以通過比較獲得的module.execute結果輕松判斷利用的成功或失敗。

【DeepExploit】基于強化學習的自動滲透工具1. 研究背景2. 項目結構及源碼分析3. 實操4.特點:

如果我們調用Agent中的 push, 這個 worker 就會将自己的個人更新推送去 ParameterServer. push是把worker的參數全部上傳到中央大腦中去。

這就是如何更新和提取最新版本的一個過程

【DeepExploit】基于強化學習的自動滲透工具1. 研究背景2. 項目結構及源碼分析3. 實操4.特點:
【DeepExploit】基于強化學習的自動滲透工具1. 研究背景2. 項目結構及源碼分析3. 實操4.特點:
【DeepExploit】基于強化學習的自動滲透工具1. 研究背景2. 項目結構及源碼分析3. 實操4.特點:

3. 實操

實操步驟見上篇文章

4.特點:

DeepExploit底層使用Metasploit進行滲透,使用強化學習技術來提升滲透效率,

  1. 高效滲透。利用機器學習,最佳情況下,隻需一次利用便可成功getshell;
  2. 深度滲透。可以内網擴散;
  3. 自學習。利用強化學習進行自學習,無需準備資料;
  4. 學習時間快。利用A3C算法多代理分布式加速學習;
  5. 強大的情報收集能力;包含:端口掃描,服務及版本識别(包含nmap識别,機器學習識别,爬蟲識别)

    問題:

  6. 性能上限;基于Metasploit來做,沒有自己的EXP和Payload
  7. 服務識别;MSF和Nmap對一個服務存在多名稱定義
  8. A3C算法;使用過程中線程間完全獨立,存在重複利用問題
  9. 對Web應用不了解;可以在端口/服務級檢測到Web伺服器,但自動化滲透測試工具搞不懂漏洞的類型

    展望:

  10. 1.提高利用的準确性,解決無用嘗試的問題
  11. 2.開發自己的漏洞腳本,自定義exp和payload
  12. 3.強化學習的三大要素State,Action和Reward進行優化
  13. 4.強化學習用在其他工具上,或對多種工具進行編排

繼續閱讀