楊飛,周晗,曹京衛(wèi),趙通,吳濤(.中訊郵電咨詢設(shè)計院有限公司,北京 00048;.安徽理工大學(xué),安徽合肥 004;.中國聯(lián)合網(wǎng)絡(luò)通信集團有限公司,北京 000)
互聯(lián)網(wǎng)面臨的安全威脅與日俱增,高級可持續(xù)攻擊的出現(xiàn)使得網(wǎng)絡(luò)空間的安全問題更加嚴(yán)峻,網(wǎng)絡(luò)安全防護顯得更加重要。傳統(tǒng)的網(wǎng)絡(luò)防護手段僅僅站在防御者的角度,檢測網(wǎng)絡(luò)攻擊行為[1]。
滲透測試是一種安全測試和評估的方法,能夠從攻擊者角度,發(fā)現(xiàn)目標(biāo)系統(tǒng)的安全漏洞以及釣魚攻擊等社會工程學(xué)操作的脆弱點[2]。滲透測試所產(chǎn)出的結(jié)果都將以報告的形式輸出,根據(jù)滲透測試報告,有針對性地對網(wǎng)絡(luò)系統(tǒng)進行完善,提高系統(tǒng)的安全性[3]。
當(dāng)前各種威脅網(wǎng)絡(luò)安全事件頻發(fā),滲透測試越來越多地被組織和企業(yè)用于保障系統(tǒng)和服務(wù)的安全。根據(jù)滲透測試過程中人工參與程度的不同,可以將滲透測試分為傳統(tǒng)滲透測試和自動化滲透測試。
傳統(tǒng)滲透測試技術(shù),主要依賴測試人員借助滲透測試工具。測試人員需要根據(jù)自己的經(jīng)驗利用多種方法獲取目標(biāo)系統(tǒng)信息,探索并確定脆弱點,進行漏洞利用和后滲透測試。最后使用報告文檔來描述滲透測試的整個流程、分析系統(tǒng)存在的風(fēng)險點以及提供修復(fù)建議。整個過程中對測試人員的經(jīng)驗水平有很強的依賴,對相關(guān)知識的掌握有很高的要求,同時滲透操作復(fù)雜繁瑣,存在大量重復(fù)的操作,需要投入較大的時間和人力成本。
自動化滲透測試在一定程度上克服了傳統(tǒng)滲透測試的弊端。自動化滲透測試在整體流程上和傳統(tǒng)滲透測試相似,不同點在于自動化滲透測試能夠自動分析目標(biāo)系統(tǒng)所在網(wǎng)絡(luò)環(huán)境,發(fā)現(xiàn)并驗證目標(biāo)系統(tǒng)潛在的漏洞點和脆弱性[4]。自動化滲透測試的出現(xiàn),將安全專家從復(fù)雜重復(fù)的勞動中解放出來,降低了滲透測試的成本。
2.2.1 自動化滲透測試工具
當(dāng)前的自動化滲透領(lǐng)域,主要依賴自動化滲透工具。滲透測試領(lǐng)域的專家針對相關(guān)技術(shù)做了充分的研究和總結(jié),開發(fā)出多款自動化滲透測試工具和框架。
APT2是集成在Kali Linux中的一款自動滲透測試工具集。它可以利用NMAP 進行掃描,也可以在獲取Nexpose、Nessus 和NMAP 等工具掃描結(jié)果的基礎(chǔ)上進行滲透測試。在滲透測試過程中,它會自動調(diào)用Metasploit、NMAP、SNMPwalk 等工具并獲取其執(zhí)行結(jié)果,應(yīng)用到系統(tǒng)運行過程中。還可以進行定向化的安全配置,保護被檢測的節(jié)點主機安全。
AutoSploit 是一款基于Python 開發(fā)的自動化大規(guī)模漏洞利用工具,它可以利用Shodan、Quake 或Zoomeye 等網(wǎng)絡(luò)空間搜索引擎來篩選攻擊目標(biāo),可以選擇目標(biāo)并進行利用[7]。選定攻擊目標(biāo)后,調(diào)用Metasploit中的相關(guān)模塊實現(xiàn)漏洞利用。正常情況下,AutoSploit具備300 多種Metasploit 基礎(chǔ)攻擊模塊,能夠利用它們在各種系統(tǒng)服務(wù)、Web 應(yīng)用和IDS、IPS 等應(yīng)用設(shè)施上實現(xiàn)代碼執(zhí)行。還可以通過修改相關(guān)配置文件來為系統(tǒng)增加其他攻擊模塊。
滲透測試工具的出現(xiàn),降低了滲透測試的門檻,同時提高了滲透測試的效率。但是,這些滲透工具存在如下弊端。
a)大多數(shù)自動化滲透測試工具的爬蟲技術(shù)無法解決通用性問題。
b)無法持續(xù)進行攻擊載荷的更新。
c)對于多種漏洞數(shù)據(jù)無法綜合利用并進行深層次化的攻擊。
d)無法整合各個滲透測試模塊之間的數(shù)據(jù),難以保證全流程滲透測試的精準(zhǔn)性。
2.2.2 基于人工智能的自動化滲透測試
隨著機器學(xué)習(xí)和深度學(xué)習(xí)技術(shù)的發(fā)展,人工智能技術(shù)已經(jīng)應(yīng)用于各個領(lǐng)域。智能化、自動化是滲透測試未來的方向。
2.2.2.1 基于網(wǎng)絡(luò)信息增益的自動化滲透測試
NIG-AP 提出了一種基于網(wǎng)絡(luò)信息增益的自動攻擊規(guī)劃算法[5],實現(xiàn)了攻擊路徑的自主發(fā)現(xiàn)。在該算法中,將滲透測試轉(zhuǎn)換為馬爾可夫決策形式,利用網(wǎng)絡(luò)信息增益引導(dǎo)Agent選擇最合適的Actor。
NIG-AP 提出了網(wǎng)絡(luò)信息增益的概念,通過重構(gòu)強化學(xué)習(xí)模型,根據(jù)網(wǎng)絡(luò)信息增益來指導(dǎo)攻擊路徑的發(fā)現(xiàn),不需要先驗證網(wǎng)絡(luò)結(jié)構(gòu)、軟件配置等相關(guān)信息就可以發(fā)現(xiàn)攻擊路徑,提取滲透測試中必不可少的滲透信息。
a)網(wǎng)絡(luò)信息增益。滲透測試以攻擊者的角度,所采取使目標(biāo)網(wǎng)絡(luò)的信息熵最大化的行動,該信息熵由目標(biāo)主機系統(tǒng)信息熵和網(wǎng)絡(luò)環(huán)境信息熵2 個部分組成[6]。其計算公式如下:
在給定的網(wǎng)絡(luò)信息熵的情況下,采用網(wǎng)絡(luò)信息增益作為評價Agent行為的信號[7],其公式為:
H(Pbefore)為Action 前的網(wǎng)絡(luò)信息熵,H(Pafter)為Action 后的網(wǎng)絡(luò)信息熵。網(wǎng)絡(luò)信息增益會有3 種情況。
(a)在對目標(biāo)主機進行操作系統(tǒng)識別,端口掃描等行為之后,不確定性并沒有消除,此時信息增益是2個概率分布的差值。
(b)目標(biāo)主機在Action 后被控制,信息增益是行動前狀態(tài)的信息熵。
(c)Action 對目標(biāo)主機的狀態(tài)沒有影響,且Action后概率分布相同,此時信息增益為0。
b)深度強化學(xué)習(xí)。強化學(xué)習(xí)是機器學(xué)習(xí)的一種形式,目標(biāo)是Agent與Environment的交互中,根據(jù)積累的Reward,尋找最優(yōu)的決策序列[8],NIG-AP 將深度神經(jīng)網(wǎng)絡(luò)納入強化學(xué)習(xí),使之變成深度強化學(xué)習(xí)(DRL)[9],其網(wǎng)絡(luò)結(jié)構(gòu)如圖1 所示。Action 的獎勵由信息增益和行動成本2個部分組成。相對于原來的恒定獎勵,信息增益更加靈活,用于引導(dǎo)Agent 選擇更好的Action,從而獲得更多的累積獎勵。設(shè)置行動成本是為了限制動作的數(shù)量,避免出現(xiàn)無限循環(huán),同時為了引導(dǎo)Agent找到盡可能好的攻擊路徑。
圖1 深度強化學(xué)習(xí)網(wǎng)絡(luò)結(jié)構(gòu)圖
c)基于網(wǎng)絡(luò)信息增益的自動攻擊規(guī)劃算法。滲透測試過程可以看作馬爾科夫決策(Markov Decision Process,MDP)的過程。不同的策略會得到不同的獎勵,MDP 的目標(biāo)是找到使得累積獎勵最大的最佳策略。
設(shè)定主機集合來保存檢測到的主機,當(dāng)集合為空或Agent選擇的Action對信息獲取沒有影響時,會通過掃描來發(fā)現(xiàn)新的可用主機。當(dāng)存在多個影響信息收益的Action時,會選擇對累積收益貢獻最大的行為,采用蒙特卡羅方法來估計訓(xùn)練階段的狀態(tài)轉(zhuǎn)移概率。
2.2.2.2 Deep Exploit
Deep Exploit 是一款基于強化學(xué)習(xí)的自動化滲透框架,其底層調(diào)用Metasploit 執(zhí)行滲透測試,采用強化學(xué)習(xí)(Reinforcement Learning,RL)技術(shù)來提升滲透成功率及效率,實現(xiàn)了高度自動化的滲透測試。Deep Exploit與Metasploit之間通過RPC協(xié)議通信,通過RPC接口發(fā)送指令,接收結(jié)果。
A3C(Asynchronous Advantage Actor-critic)是針對Actor-Critic 算法的優(yōu)化算法[10],引入多線程的處理方式,在每個線程中和環(huán)境進行交互學(xué)習(xí),把每個線程的學(xué)習(xí)結(jié)果匯總并保存,定期地利用學(xué)習(xí)結(jié)果指導(dǎo)后續(xù)和環(huán)境的交互學(xué)習(xí)。Deep Exploit 的關(guān)鍵在于A3C算法,由訓(xùn)練和測試2個部分組成。
在訓(xùn)練階段,Deep Exploit 先進行狀態(tài)空間的初始化,獲取可利用模塊列表,從中隨機選擇一個模塊。確定狀態(tài)后,A3C 算法會計算每個payload 的概率并選擇概率最大的payload,調(diào)用Metasploit 進行漏洞利用。若失敗,會隨機更換target 并選擇針對該target 的概率最大的payload 進行漏洞利用。若達到預(yù)先設(shè)定的次數(shù)仍未成功,Deep Exploit 會重新初始化狀態(tài)空間,選擇其他的模塊進行嘗試。
在測試階段,Deep Exploit 會計算每個狀態(tài)空間中payload 的概率,按照payload 概率的大小,依次調(diào)用Metasploit 嘗試漏洞利用,成功之后,則進行后滲透攻擊。
2.2.2.3 AutoPentest-DRL
AutoPentest-DRL 是一款自動化滲透測試框架,核心思想是利用深度強化學(xué)習(xí)模型(DRL)智能規(guī)劃攻擊路徑,并調(diào)用其他滲透工具實現(xiàn)自動化滲透測試。通過構(gòu)建DQN 決策引擎來根據(jù)目標(biāo)網(wǎng)絡(luò)環(huán)境和漏洞信息選擇正確的攻擊路徑。決策引擎接收攻擊樹的矩陣表示,輸出可行性最高的攻擊路徑。通過拓?fù)渖善鲃?chuàng)建網(wǎng)絡(luò)拓?fù)?,用于提高模型的適應(yīng)性,同時利用深度優(yōu)先搜索(DFS)算法簡化輸入矩陣。
a)攻擊樹。AutoPentest-DRL 利用開源工具Mul-VAL 生成攻擊樹。根據(jù)利用互聯(lián)網(wǎng)設(shè)備搜索引擎Shodan 建立的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu),找到所有的攻擊路徑,并根據(jù)所發(fā)現(xiàn)的攻擊路徑構(gòu)建攻擊路徑矩陣,然后利用深度優(yōu)先搜索(DFS)算法優(yōu)化攻擊路徑矩陣。
b)DQN。DQN(Deep Q-learning)是Q-learning 的進階版,是將強化學(xué)習(xí)和深度學(xué)習(xí)結(jié)合的產(chǎn)物,使用經(jīng)歷回放來實現(xiàn)損失函數(shù)?的收斂:
DQN網(wǎng)絡(luò)結(jié)構(gòu)如圖2所示。
圖2 DQN模型的網(wǎng)絡(luò)結(jié)構(gòu)
AutoPentest-DRL 中,通過DQN 的訓(xùn)練得到?jīng)Q策模型,用來選擇可行性最大的攻擊路徑。模型的輸入為經(jīng)過深度優(yōu)先搜索(DFS)算法優(yōu)化的攻擊路徑矩陣,輸出為針對該目標(biāo)的最佳攻擊路徑。在訓(xùn)練過程中,每個攻擊者對應(yīng)DQN 中的一個Agent,攻擊者在攻擊矩陣中實現(xiàn)狀態(tài)轉(zhuǎn)移,最終達到攻擊樹的根節(jié)點。
綜合上述傳統(tǒng)滲透測試和自動化滲透測試,二者對比如表1所示。
表1 傳統(tǒng)滲透測試和自動化滲透測試對比
傳統(tǒng)滲透測試需要滲透測試人員具備各方面的專業(yè)知識、熟悉漏洞機理、熟練運用各種安全測試工具。因此,要擺脫滲透測試對人工的依賴,需要不斷推進自動化滲透測試技術(shù)的發(fā)展。
隨著人工智能技術(shù)的發(fā)展,會有更多更成熟的人工智能算法應(yīng)用到滲透測試的各個階段中?;跈C器學(xué)習(xí)和深度學(xué)習(xí)的指紋識別,智能識別測試目標(biāo)的端口服務(wù)、中間件、主機操作系統(tǒng)等指紋信息,能夠有效地提高滲透的效率;在滲透攻擊階段,通過知識推理,根據(jù)目標(biāo)的網(wǎng)絡(luò)環(huán)境,智能化選擇攻擊目標(biāo),優(yōu)先攻擊具備高滲透價值的目標(biāo),智能化選擇最合適的攻擊載荷,減少滲透嘗試的次數(shù),提高滲透測試的效率。智能化關(guān)聯(lián)漏洞挖掘過程中的漏洞,實現(xiàn)多個漏洞之間的聯(lián)合利用。針對整個滲透測試過程,通過優(yōu)先級調(diào)度算法對多線程滲透任務(wù)的各個線程進行智能網(wǎng)絡(luò)資源分配,提高滲透效率。相信隨著人工智能技術(shù)的發(fā)展,會使得滲透測試的成功率,自動化程度變得更高。