趙旭濤
(電子科技大學(xué),四川成都,611731)
Intel DPDK和Hyperscan的網(wǎng)絡(luò)防御系統(tǒng)
趙旭濤
(電子科技大學(xué),四川成都,611731)
針對(duì)系統(tǒng)并發(fā)訪問(wèn)用戶數(shù)量急劇提升,后端的安全驗(yàn)證對(duì)服務(wù)器消耗日益突出的問(wèn)題,提出了一種Intel DPDK和Hyperscan的網(wǎng)絡(luò)安全防御系統(tǒng),系統(tǒng)基于并行處理機(jī)制,在數(shù)據(jù)經(jīng)過(guò)的網(wǎng)關(guān)處進(jìn)行安全驗(yàn)證,以有效的避免子后端服務(wù)器可能遭受的DDoS的攻擊,減輕了子后端服務(wù)器的壓力和保護(hù)服務(wù)器的健康運(yùn)行。
DPDK;Hyperscan;HTTP DDoS;網(wǎng)絡(luò)安全
隨著互聯(lián)網(wǎng)的高速發(fā)展以及云計(jì)算的出現(xiàn),原本只能由大型組織才能發(fā)動(dòng)的DDoS攻擊,現(xiàn)在只要通過(guò)控制大量的虛擬機(jī)主機(jī)就能由普通的攻擊者完成。由于越來(lái)越多的網(wǎng)絡(luò)服務(wù)或信息以Web方式提供,因此Web服務(wù)器成了各種DDoS攻擊的首要目標(biāo)。在網(wǎng)絡(luò)層DDoS攻擊難以達(dá)到效果的情況下,應(yīng)用層DDoS攻擊成為近年來(lái)攻擊者常用的手段。通過(guò)建立正常的tcp連接模擬正常用戶瀏覽網(wǎng)頁(yè)的行為,向Web服務(wù)器發(fā)送大量合法的HTTP Get請(qǐng)求,耗盡Web服務(wù)器資源,使其無(wú)法響應(yīng)其他正常用戶的請(qǐng)求。由于系統(tǒng)后端業(yè)務(wù)的快速增加和并發(fā)訪問(wèn)量的提升,無(wú)論是對(duì)軟件還是硬件系統(tǒng)都有了更高的性能和可承受的壓力要求。傳統(tǒng)的安全防御大多數(shù)都由提供服務(wù)的目標(biāo)服務(wù)器來(lái)完成,即服務(wù)程序和防御程序位于同一臺(tái)主機(jī)。目標(biāo)服務(wù)器不僅用來(lái)完成用戶正常的請(qǐng)求,還需要同時(shí)具備有安全防護(hù)的功能。這樣做的一個(gè)弊端就是如果攻擊者直接攻擊目標(biāo)服務(wù)器,目標(biāo)服務(wù)器就會(huì)因?yàn)椴煌5倪M(jìn)行安全驗(yàn)證而消耗大量的資源,從而造成正常的用戶活動(dòng)無(wú)法進(jìn)行。如果能在數(shù)據(jù)到達(dá)目標(biāo)服務(wù)器之前進(jìn)行安全防護(hù),這樣就可以極大的保護(hù)目標(biāo)服務(wù)器,使其避免遭受DDoS的攻擊而更好的向用戶提供服務(wù)。
圖1 系統(tǒng)總體結(jié)構(gòu)圖
目前HTTP DDoS防御措施主要為數(shù)據(jù)數(shù)據(jù)經(jīng)過(guò)系統(tǒng)的協(xié)議棧之后,在采用一定的安全校驗(yàn)算法來(lái)對(duì)數(shù)據(jù)進(jìn)行檢測(cè)。本文提出了一種基于Intel DPDK和Hyperscan的HTTP DDoS安全的防護(hù)措施,在數(shù)據(jù)經(jīng)過(guò)目標(biāo)服務(wù)器的網(wǎng)關(guān)處進(jìn)行安全驗(yàn)證,從而不必進(jìn)過(guò)操作系統(tǒng)的協(xié)議棧之后在進(jìn)行安全驗(yàn)證,這極大的提升了系統(tǒng)的性能。
2.1 系統(tǒng)總體結(jié)構(gòu)
系統(tǒng)總體結(jié)構(gòu)圖如圖1所示。
圖中的DPDK和Hyperscan運(yùn)行于網(wǎng)關(guān)處,數(shù)據(jù)經(jīng)過(guò)DPDK,在內(nèi)部通過(guò)Hyperscan對(duì)報(bào)文的數(shù)據(jù)部分進(jìn)行正則表達(dá)式匹配,對(duì)于匹配到的結(jié)果采取相應(yīng)的操作,如丟包、放行或進(jìn)行白名單驗(yàn)證等。
2.2 Intel DPDK數(shù)據(jù)包捕獲方式
英特爾數(shù)據(jù)平面開發(fā)套件(Intel DPDK)是由 Intel 公司為x86平臺(tái)的報(bào)文快速處理所提供的一系列庫(kù)和驅(qū)動(dòng)的集合,DPDK的主要目標(biāo)是提供一個(gè)簡(jiǎn)單的、完整的框架,用于快速數(shù)據(jù)包處理數(shù)據(jù)平面應(yīng)用程序,用戶可以在DPDK的基礎(chǔ)上開發(fā)出自己的協(xié)議棧。其通過(guò)環(huán)境抽象層提供數(shù)據(jù)面功能以取代內(nèi)核的系統(tǒng)調(diào)用,輪詢模式數(shù)據(jù)包讀取替代中斷,旁路內(nèi)核協(xié)議棧,優(yōu)化內(nèi)存及隊(duì)列管理等技術(shù),實(shí)現(xiàn)用戶空間下的高速網(wǎng)絡(luò)數(shù)據(jù)包處理。DPDK基本框架如圖1所示,底層硬件網(wǎng)絡(luò)適配器實(shí)現(xiàn)對(duì)數(shù)據(jù)幀的接收;內(nèi)核態(tài)的三個(gè)模塊中,KNI 模塊提供傳統(tǒng)的網(wǎng)絡(luò)工具,UIO模塊實(shí)現(xiàn)將網(wǎng)卡硬件寄存器映射到用戶態(tài),在用戶空間運(yùn)行驅(qū)動(dòng)設(shè)備,VFIO是用戶態(tài)的PCI設(shè)備驅(qū)動(dòng)開發(fā)的框架,它向用戶態(tài)提供訪問(wèn)硬件設(shè)備的接口,也向用戶態(tài)提供配置IOMMU的接口;EAL(環(huán)境抽象層)作為 DPDK 關(guān)鍵模塊,為底層資源的訪問(wèn)提供用戶層入口,完成資源的分配及初始化;此外,DPDK核心部件庫(kù)提供內(nèi)存池、緩沖區(qū)管理、輪詢模式、定時(shí)等接口,服務(wù)于上層應(yīng)用程序。其依賴于如下關(guān)鍵技術(shù):
1)Hugepage
通過(guò)預(yù)留的 Hugepage 實(shí)現(xiàn)對(duì)內(nèi)存池的管理,設(shè)置 256kb、512kb、2M、4M、16M、1G、4G和16G的頁(yè)表大小較默認(rèn)的 4K配置可大幅度減少了頁(yè)表的查找,降低TLB miss。提高內(nèi)存的訪問(wèn)效率。
2)UIO (User space I/O)
利用UIO支持,提供應(yīng)用空間下驅(qū)動(dòng)程序的支持,也就是說(shuō)網(wǎng)卡驅(qū)動(dòng)是運(yùn)行在用戶空間的,減少了報(bào)文在用戶空間和應(yīng)用空間的多次拷貝。
3)CPU affinity
運(yùn)用 CPU 親和力機(jī)制,將控制線程以及數(shù)據(jù)處理線程綁定到不同的核,避免來(lái)回調(diào)度產(chǎn)生的資源消耗。
4)環(huán)形緩沖區(qū)
提供內(nèi)存池和無(wú)鎖環(huán)形緩存管理,加快內(nèi)存訪問(wèn)效率。
5)內(nèi)存池
為應(yīng)用程序和其它組件提供分配內(nèi)存池的接口,內(nèi)存池是一個(gè)由固定大小的多個(gè)內(nèi)存塊組成的內(nèi)存容器,可用于存儲(chǔ)相同對(duì)像實(shí)體,如報(bào)文緩存塊等。內(nèi)存池由內(nèi)存池的名稱(一個(gè)字符串)來(lái)唯一標(biāo)識(shí),它由一個(gè)環(huán)緩中區(qū)和一組核本地緩存隊(duì)列組成,每個(gè)核從自已的緩存隊(duì)列分配內(nèi)存塊,當(dāng)本地緩存隊(duì)列減少到一定程度時(shí),從內(nèi)存環(huán)緩沖區(qū)中申請(qǐng)內(nèi)存塊來(lái)補(bǔ)充本地隊(duì)列。
2.3 正則表達(dá)式匹配引擎Hyperscan
Hyperscan是一個(gè)高性能的正則表達(dá)式匹配的C庫(kù),它支持大部分libpcre正則表達(dá)式的語(yǔ)法。Hyperscan使用混合自動(dòng)機(jī)技術(shù),而不是單純的一種DFA或者NFA技術(shù),這不同于常見的正則表達(dá)式引擎的實(shí)現(xiàn)算法,因此Hyperscan在多種不同的場(chǎng)合下的性能都表現(xiàn)的很出色。除此之外Hyperscan還支持同時(shí)匹配上萬(wàn)條數(shù)的正則表達(dá)式,同時(shí)支持GB級(jí)別的大文本查找和支持序列化等功能。
3.1 控制進(jìn)程流程。主線程運(yùn)行入口是main函數(shù),調(diào)用了rte_eal_init入口函數(shù),啟動(dòng)基礎(chǔ)運(yùn)行環(huán)境。DPDK面向多核設(shè)計(jì),程序會(huì)試圖獨(dú)占運(yùn)行在邏輯核(lcore)上。main函數(shù)調(diào)用環(huán)境抽象層初始化函數(shù) rte_eal_init()對(duì)DPDK 底層結(jié)構(gòu)進(jìn)行初始化,完成的工作有 hugepage 初始化、mbuf_pool 創(chuàng)建、pci設(shè)備驅(qū)動(dòng)加載等,同時(shí)完pc地址空間至用戶空間的映射。main函數(shù)里重要的是啟動(dòng)多核運(yùn)行環(huán)境,RTE_LCORE_FOREACH_SLAVE(lcore_id)如名所示,遍歷所有EAL指定可以使用的lcore,然后通過(guò)rte_eal_remote_launch在每個(gè)lcore上,啟動(dòng)被指定的線程。rte_eal_remote_launch中的第一個(gè)參數(shù)指定了要執(zhí)行的處理函數(shù)main_loop。
圖2 DPDK主要模塊分解圖
圖3 控制進(jìn)程執(zhí)行流程圖
3.2 數(shù)據(jù)進(jìn)程流程。數(shù)據(jù)處理流程主要從從線程執(zhí)行main_ loop()的主要步驟如下:
1)讀取自己的lcore信息完成配置;
2)讀取關(guān)聯(lián)的接收與發(fā)送隊(duì)列信息;
3)進(jìn)入循環(huán)處理:
{
向指定隊(duì)列批量發(fā)送報(bào)文;
從指定隊(duì)列批量接收?qǐng)?bào)文;
批量轉(zhuǎn)發(fā)接收到報(bào)文:l3fwd_lpm_send_packets;
}
在循環(huán)中批量轉(zhuǎn)發(fā)報(bào)文,進(jìn)入轉(zhuǎn)發(fā)報(bào)文的函數(shù)l3fwd_lpm_ send_packets。在l3fwd_lpm_send_packets會(huì)依次處理從網(wǎng)口接收的每一個(gè)報(bào)文,獲取報(bào)文的rte_mbuf結(jié)構(gòu)并從中取出報(bào)文的源MAC、目的MAC、源IP、目的IP、源端口、目的端口、接收序列號(hào)和確認(rèn)序列號(hào)等。如果目標(biāo)IP為要訪問(wèn)的目標(biāo)服務(wù)器的IP,且源IP不在白名單中或者白名單過(guò)期,則取出報(bào)文的數(shù)據(jù)部分,通過(guò)Hyperscan對(duì)該數(shù)據(jù)部分進(jìn)行匹配,找到符合條件的報(bào)文,之后偽造一個(gè)服務(wù)器響應(yīng)的數(shù)據(jù)包,要求源IP對(duì)應(yīng)的客戶端輸入驗(yàn)證碼。其中通過(guò)Hyperscan可以設(shè)置多種匹配規(guī)則,每次匹配到一個(gè)正則表達(dá)式,就會(huì)觸發(fā)Hyperscan提供給用戶自定義的回調(diào)函數(shù)中,在該回調(diào)函數(shù)中,根據(jù)匹配到的不同的正則表達(dá)式,采取不同的行為。對(duì)于沒有通過(guò)認(rèn)證的要求其輸入驗(yàn)證碼,對(duì)于報(bào)文中含有違法關(guān)鍵字進(jìn)行丟包,對(duì)于通過(guò)驗(yàn)證的直接放行轉(zhuǎn)發(fā)出去等。
驗(yàn)證碼的生成,利用DPDK的庫(kù)函數(shù),通過(guò)數(shù)據(jù)包的源IP哈希生成一個(gè)驗(yàn)證碼。驗(yàn)證碼生成之后,通過(guò)后臺(tái)偽造一個(gè)HTML輸入驗(yàn)證碼的頁(yè)面構(gòu)造相應(yīng)的偽造目標(biāo)服務(wù)器回應(yīng)的數(shù)據(jù)包并返回給客戶端。如果客戶端提交的數(shù)據(jù)中含有驗(yàn)證碼,則通過(guò)比對(duì)判斷掩碼是否輸入正確。在輸入正確的情況下且驗(yàn)證碼還沒有過(guò)期,就把該源IP加入白名單并記錄下加入的時(shí)間。否則一直向該客戶反彈驗(yàn)證碼輸入的頁(yè)面,直到其成功輸入為止或者超過(guò)一定的閾值之后就禁用該源IP一定時(shí)間。
本文提出基于Intel DPDK和Hyperscan的網(wǎng)絡(luò)安全防御方案。Intel DPDK 開源套件實(shí)現(xiàn)高性能數(shù)據(jù)包分析處理系統(tǒng)的的設(shè)計(jì),系統(tǒng)采用多核并行處理機(jī)制,采用一系列性能優(yōu)化措施,顯著提高了數(shù)據(jù)包處理性能。Hyperscan采用混合自動(dòng)機(jī)技術(shù),在正則表達(dá)式的匹配性能和數(shù)量上都遠(yuǎn)遠(yuǎn)高于采用單一算法實(shí)現(xiàn)的正則表達(dá)式引擎。本文生成驗(yàn)證碼的部門比較容易被識(shí)別出來(lái),在接下來(lái)的工作中,如何提高驗(yàn)證碼的安全性使其難以被第三方工具識(shí)別是后續(xù)研究的重點(diǎn)。
[1] http://dpdk.org/
[2] https://01.org/zh/hyperscan?langredirect=1
[3] 朱河清. 深入淺出DPDK[M]. 北京: 機(jī)械工業(yè)出版社, 2016-5.
[4] 何佳偉,江舟. 基于 Intel DPDK 的高性能網(wǎng)絡(luò)安全審計(jì)方案設(shè)計(jì)[J]. 電子測(cè)試,2016
Intel DPDK and Hyperscan network defense system
Zhao Xutao
(UESTC,Chengdou Sichuan,611731)
The number of the concurrent user is dramatic increasing,which increases consumption of server resources.Thus,a network security defense system based on Intel DPDK and Hyperscan is proposed in this paper in response to solve the problem.The network packets will be verified when they though the gateway,which can effectively avoid DDoS attack and ease the pressure of server.
DPDK;Hyperscan; HTTP DDoS;Network security