池亞平,莫崇維,楊垠坦,陳純霞
(1.北京電子科技學(xué)院 網(wǎng)絡(luò)空間安全系,北京100070; 2.西安電子科技大學(xué) 通信工程學(xué)院,西安710071)
軟件定義網(wǎng)絡(luò)(Software Defined Network, SDN)是一種新興的網(wǎng)絡(luò)架構(gòu),已逐漸成為云計(jì)算環(huán)境所依賴的重要技術(shù)之一[1],但SDN架構(gòu)本身也存在安全問(wèn)題,國(guó)內(nèi)外相關(guān)研究人員也更加關(guān)注SDN本身帶來(lái)的安全問(wèn)題。文獻(xiàn)[2]從SDN特有/非特有的安全威脅兩方面分析和歸納了SDN中存在的典型安全問(wèn)題。文獻(xiàn)[3-5]以流量為出發(fā)點(diǎn),分析了可能出現(xiàn)的攻擊方式,并提出了相應(yīng)的解決方法。SDN的安全問(wèn)題主要分布在控制層和數(shù)據(jù)轉(zhuǎn)發(fā)層,而控制層和數(shù)據(jù)轉(zhuǎn)發(fā)層的很多安全問(wèn)題都可以用入侵檢測(cè)的技術(shù)手段來(lái)解決[2,6]。
文獻(xiàn)[7-8]綜述了近年來(lái)國(guó)外研究人員采用機(jī)器學(xué)習(xí)或深度學(xué)習(xí)手段展開的網(wǎng)絡(luò)入侵檢測(cè)領(lǐng)域的研究。其中,文獻(xiàn)[7]對(duì)常用的機(jī)器學(xué)習(xí)和深度學(xué)習(xí)算法進(jìn)行歸類。文獻(xiàn)[8]分析了9種不同機(jī)器學(xué)習(xí)和深度學(xué)習(xí)算法應(yīng)用在網(wǎng)絡(luò)入侵檢測(cè)中的優(yōu)缺點(diǎn),對(duì)比了多種多算法結(jié)合的網(wǎng)絡(luò)入侵檢測(cè)算法,詳細(xì)說(shuō)明了數(shù)據(jù)集的選擇方法和入侵檢測(cè)評(píng)判標(biāo)準(zhǔn)。文獻(xiàn)[7-8]指出卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network, CNN)算法具有良好的分類特性和特征學(xué)習(xí)能力,但目前仍較少地用于網(wǎng)絡(luò)入侵檢測(cè)領(lǐng)域。文獻(xiàn)[9]中提出一種基于多層感知機(jī)的SDN入侵檢測(cè)模型,選取了特征數(shù)據(jù)的6個(gè)特征作為輸入,最終識(shí)別準(zhǔn)確率為75.75%;文獻(xiàn)[10]采用信息增益和支持向量機(jī)(Support Vector Machine, SVM)結(jié)合的方式實(shí)現(xiàn)了SDN環(huán)境下入侵檢測(cè)算法;文獻(xiàn)[11]針對(duì)SDN固有特性,通過(guò)流表項(xiàng)提取特征數(shù)據(jù)作為輸入數(shù)據(jù),并實(shí)驗(yàn)對(duì)比了5種不同算法的準(zhǔn)確率、訓(xùn)練時(shí)間、檢測(cè)時(shí)間等屬性。
通過(guò)分析現(xiàn)有研究發(fā)現(xiàn),入侵檢測(cè)算法驗(yàn)證時(shí)多采用KDD Cup99數(shù)據(jù)集或NSL-KDD數(shù)據(jù)集,而這兩個(gè)數(shù)據(jù)集都是傳統(tǒng)網(wǎng)絡(luò)下采集的數(shù)據(jù)集,并不能有效反映SDN環(huán)境下的真實(shí)安全需求[7-12]。文獻(xiàn)[12]雖然通過(guò)采集流表項(xiàng)進(jìn)行改進(jìn),但也只適用于檢測(cè)傳統(tǒng)網(wǎng)絡(luò)下的分布式拒絕服務(wù)攻擊(Distributed Denial of Service, DDoS)。本文設(shè)計(jì)基于流表項(xiàng)的特征提取方法,采集SDN特有攻擊下的數(shù)據(jù)樣本并形成流表數(shù)據(jù)集,入侵檢測(cè)模型利用該數(shù)據(jù)集檢測(cè)SDN特有攻擊,采用NSL-KDD數(shù)據(jù)集檢測(cè)傳統(tǒng)網(wǎng)絡(luò)攻擊。鑒于文獻(xiàn)[9-11]中的算法對(duì)小概率攻擊檢,例如遠(yuǎn)程到本地的非授權(quán)訪問(wèn)攻擊(Remote-to-Login, R2L)和非授權(quán)提升用戶權(quán)限攻擊(User-to-Root, U2R),測(cè)效果較差。本文設(shè)計(jì)一種加強(qiáng)訓(xùn)練方法用以提升對(duì)此類攻擊的檢測(cè)率。
文獻(xiàn)[2]中指出了兩種典型的SDN特有網(wǎng)絡(luò)攻擊行為,分別為交換機(jī)流表攻擊和控制域帶寬攻擊。這兩種攻擊都不能被傳統(tǒng)網(wǎng)絡(luò)下的入侵檢測(cè)系統(tǒng)識(shí)別。
在數(shù)據(jù)獲取過(guò)程中,只關(guān)注了數(shù)據(jù)轉(zhuǎn)發(fā)層的數(shù)據(jù)信息,忽略了南向通道可能發(fā)生的交換機(jī)流表攻擊。
圖1所示為交換機(jī)流表攻擊的原理:受控終端向交換機(jī)發(fā)送大量未知目的的虛假請(qǐng)求,而交換機(jī)流表中沒(méi)有與之匹配的流規(guī)則,該交換機(jī)便將請(qǐng)求轉(zhuǎn)發(fā)給控制器,由控制器制定相應(yīng)的應(yīng)答策略。當(dāng)攻擊者通過(guò)不同交換機(jī)向控制器發(fā)送大量虛假請(qǐng)求信息時(shí),控制器會(huì)一直忙于處理虛假請(qǐng)求信息,并消耗大量鏈路資源,而正常的請(qǐng)求無(wú)法及時(shí)處理,當(dāng)短時(shí)間內(nèi)虛假請(qǐng)求信息量超過(guò)某一閾值時(shí),便會(huì)導(dǎo)致整個(gè)SDN的癱瘓。與此同時(shí),短時(shí)間內(nèi)過(guò)多的交換機(jī)未記錄的數(shù)據(jù)請(qǐng)求,會(huì)引起交換機(jī)流表溢出,導(dǎo)致交換機(jī)崩潰,因此,該模型僅適用于檢測(cè)傳統(tǒng)網(wǎng)絡(luò)架構(gòu)下的網(wǎng)絡(luò)攻擊。
圖1 交換機(jī)流表攻擊原理Fig. 1 Principle of switchboard flow table attack
若控制器被入侵者控制或因物理因素失效,則該入侵檢測(cè)系統(tǒng)(Intrusion Detection System, IDS)引擎將無(wú)法正常運(yùn)行,安全策略也無(wú)法正常下達(dá)。如圖2所示是控制域帶寬攻擊基本原理:攻擊者通過(guò)被控制的SDN控制器向部分交換機(jī)下發(fā)虛假流規(guī)則,交換機(jī)執(zhí)行新的流規(guī)則,產(chǎn)生大量錯(cuò)誤的數(shù)據(jù)包,從而導(dǎo)致鏈路堵塞和網(wǎng)絡(luò)癱瘓。
針對(duì)上述問(wèn)題,本文從流表項(xiàng)入手,采用數(shù)據(jù)原始特征和人工特征合成基于流表項(xiàng)的特征向量,并在此基礎(chǔ)上生成流表項(xiàng)數(shù)據(jù)集。本文采用mininet仿真網(wǎng)絡(luò)環(huán)境,并在此環(huán)境中模擬上述兩種攻擊行為,這兩種攻擊下采集得到的特征向量標(biāo)記為“異?!?。
卷積神經(jīng)網(wǎng)絡(luò)是一種深度前饋神經(jīng)網(wǎng)絡(luò),是深度學(xué)習(xí)中的一種重要模型,被廣泛地應(yīng)用于計(jì)算機(jī)視覺(jué)、自然語(yǔ)言處理等領(lǐng)域。卷積神經(jīng)網(wǎng)絡(luò)通過(guò)模擬生物視覺(jué)機(jī)制構(gòu)建,利用局部感知進(jìn)行特征提取,其突出特點(diǎn)便是“權(quán)共享”,即讓一組神經(jīng)元使用相同的連接權(quán)。圖3所示是CNN的典型結(jié)構(gòu)。從圖3可以看出,一個(gè)完整的CNN包括數(shù)據(jù)輸入層、特征提取層和全連接層三個(gè)部分。輸入層利用“局部感知”從原始數(shù)據(jù)中提取局部數(shù)據(jù);特征提取層經(jīng)過(guò)多次卷積核池化最終得到一個(gè)特征向量;輸出層根據(jù)特征向量判決輸出結(jié)果。
圖3 卷積神經(jīng)網(wǎng)絡(luò)典型結(jié)構(gòu)Fig. 3 Typical structure of CNN
根據(jù)OpenFlow協(xié)議,每個(gè)流表由多個(gè)流表項(xiàng)組成,原始的流表項(xiàng)由多個(gè)功能部分組成,并不是所有的部分都可以用于入侵檢測(cè)。從流表項(xiàng)中直接提取出的流表特征如表1所示。
表1 流表項(xiàng)中的流表特征 Tab. 1 Flow table features in flow entry
同時(shí),為了提高檢測(cè)的精度,根據(jù)匹配域和計(jì)數(shù)器信息人工構(gòu)建額外的可能區(qū)分攻擊的流表特征,并將其作為輸入特征數(shù)據(jù)集的一部分,構(gòu)造特征如表2所示。
表2 流表項(xiàng)數(shù)據(jù)集特征 Tab. 2 Flow entry dataset features
1)平均流包數(shù)(Average Number of Packets in per Flow, APF)。
攻擊時(shí)為了提高偽造源IP和目的IP的速度,一般會(huì)減少流中數(shù)據(jù)包的數(shù)量,因此,正常狀態(tài)下的流包數(shù)和被攻擊時(shí)的流包數(shù)是不同的。
(1)
其中:FlowNum是抽樣周期內(nèi)流表總數(shù);PacketNumi是第i個(gè)流表內(nèi)的數(shù)據(jù)包數(shù)。
2)流表匹配成功率(Match/Lookup Ratio, MLR)。
數(shù)據(jù)包到達(dá)OpenFlow交換機(jī)時(shí),都要進(jìn)行匹配和查找操作。大量不同的新的流表會(huì)導(dǎo)致OpenFlow交換機(jī)流表溢出,此時(shí)若再收到新的流表,會(huì)引起流表匹配成功率急速降低:
(2)
其中:Match是匹配流表數(shù);Lookup是總流表數(shù)。
3)對(duì)比流(Percentage of Pair-Flow, PPF)。
網(wǎng)絡(luò)在正常提供服務(wù)時(shí),網(wǎng)絡(luò)中的對(duì)流數(shù)和單流數(shù)的比例較為穩(wěn)定。在攻擊狀態(tài)下存在大量的偽造目的IP地址,會(huì)造成這種穩(wěn)定性受到破壞:
(3)
其中pair是交互流表的對(duì)流數(shù)的個(gè)數(shù)。
4)平均流比特?cái)?shù)(Average number of Byte in per Flow, ABF)。
受到攻擊時(shí),為了提高發(fā)包速度,會(huì)減小數(shù)據(jù)包的字節(jié)數(shù),平均流比特?cái)?shù)往往是檢測(cè)攻擊的重要特征:
(4)
其中ByteNumi是第i個(gè)流表中數(shù)據(jù)包字節(jié)數(shù)。
5)端口增速(Port Generating Rate, PGS)。
正常網(wǎng)絡(luò)狀態(tài)下,端口增速較為穩(wěn)定,攻擊時(shí)會(huì)隨機(jī)生成端口號(hào),端口增速會(huì)明顯增大:
PGS=PortNum/T
(5)
其中PortNum是端口號(hào)的新增量。
6)目的IP增速(Destination IP Growing Speed, DIGS)。
攻擊時(shí),大量偽造目的地址會(huì)導(dǎo)致目的IP大量增多,因此目的IP增速是檢測(cè)攻擊的重要特征:
DIGS=DIGSNum/T
(6)
其中DIGSNum是周期T內(nèi)是目的IP地址增量。
7)源IP增速(Source IP Growing Speed,SIGS):
SIGS=SIGSNum/T
(7)
其中SIGSNum是周期T內(nèi)是源IP地址增量。
8)流表項(xiàng)速率(Rate of Flow Entries, RFB)。
受到攻擊時(shí)流表項(xiàng)請(qǐng)求數(shù)目會(huì)有所增加,因此,可選擇流表項(xiàng)速率作為數(shù)據(jù)特征:
RFB=FlowsNum/T
(8)
其中FlowsNum是采樣周期內(nèi)流表項(xiàng)請(qǐng)求數(shù)目。
因?yàn)榇嬖趦煞N不同的輸入數(shù)據(jù),因此設(shè)計(jì)了分流檢測(cè)結(jié)構(gòu)。同時(shí),由于在NSL-KDD數(shù)據(jù)集中U2R攻擊、R2L攻擊是小樣本攻擊,因此在入侵檢測(cè)算法中,這幾類攻擊往往是產(chǎn)生誤報(bào)或漏報(bào)的集中點(diǎn),SDN特有攻擊和傳統(tǒng)網(wǎng)絡(luò)攻擊具有不同的數(shù)據(jù)特征,因此應(yīng)當(dāng)進(jìn)行分開訓(xùn)練,如圖4所示。
圖4 入侵檢測(cè)模型結(jié)構(gòu)設(shè)計(jì)Fig. 4 Structure design of intrusion detection model
在入侵檢測(cè)模型中,分流器通過(guò)識(shí)別輸入數(shù)據(jù)的特征維數(shù)對(duì)輸入數(shù)據(jù)進(jìn)行分流,左側(cè)為SDN特有攻擊單元,右側(cè)為傳統(tǒng)網(wǎng)絡(luò)攻擊檢測(cè)單元。在SDN特有攻擊檢測(cè)單元中,由于針對(duì)SDN特有攻擊的種類有限,并沒(méi)有較為成熟的異常分類體系,因此在該單元,設(shè)計(jì)基于CNN的二分類算法,用于區(qū)分正常和異常行為。在傳統(tǒng)網(wǎng)絡(luò)攻擊檢測(cè)單元,針對(duì)4種攻擊和正常行為設(shè)計(jì)具有5種分類情況的分類器。檢測(cè)結(jié)果處理單元負(fù)責(zé)將原始輸出數(shù)據(jù)轉(zhuǎn)換為標(biāo)記信息。SDN特有攻擊檢測(cè)單元和傳統(tǒng)網(wǎng)絡(luò)攻擊檢測(cè)單元使用相同的入侵檢測(cè)算法,但采用不同的數(shù)據(jù)集進(jìn)行算法訓(xùn)練。
3.2.1 入侵檢測(cè)算法流程
基于卷積神經(jīng)網(wǎng)絡(luò)入侵檢測(cè)算法是檢測(cè)模塊的核心,入侵檢測(cè)模型的實(shí)現(xiàn)即入侵檢測(cè)算法和加強(qiáng)訓(xùn)練方法的實(shí)現(xiàn),算法流程如圖5所示。
圖5 CNN算法執(zhí)行流程Fig. 5 Execution flow of CNN algorithm
在圖5中,首先經(jīng)過(guò)輸入數(shù)據(jù)集、初始化卷積神經(jīng)網(wǎng)絡(luò)、采集樣本子集等操作,然后判斷是否需要加強(qiáng)訓(xùn)練。若是,合并樣本子集和錯(cuò)誤樣本集,否則,采用樣本子集執(zhí)行正常訓(xùn)練;之后采用小批量訓(xùn)練,并采用交叉熵?fù)p失函數(shù)計(jì)算本次訓(xùn)練損失值,并判斷是否繼續(xù)訓(xùn)練。若是,采集新的樣本子集,Adam算法更新模型參數(shù),執(zhí)行統(tǒng)計(jì)本次訓(xùn)練錯(cuò)誤樣本,并執(zhí)行加強(qiáng)訓(xùn)練決策單元,判斷是否加強(qiáng)訓(xùn)練;否則,結(jié)束訓(xùn)練。本文對(duì)入侵檢測(cè)算法的優(yōu)化包括卷積神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)、加強(qiáng)訓(xùn)練方法兩方面。
CNN各層具體參數(shù)如表3,其中,n為輸入特征矩陣的寬度。
表3 CNN參數(shù)配置 Tab. 3 CNN parameter configuration
基于以上述算法流程和配置參數(shù),設(shè)計(jì)CNN算法核心代碼如下:
if __name__==′__main__′:
load_data()
feature_test=feature
feature_train=feature_full
label_test=label
label_train=label_full
init_model()
with tf.Session() as sess:
#初始化所有張量
sess.run(tf.global_variables_initializer())
#將神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)畫出來(lái)
writer=tf.summary.FileWriter("resout/",sess.graph)
#記錄中間值
merged=tf.summary.merge_all()
train_writer=tf.summary.FileWriter("resout/train",
sess.graph)
test_writer=tf.summary.FileWriter("resout/test",sess.graph)
#訓(xùn)練
for step in range(1000):
f_t_batch,l_t_batch=next_batch(feature_train,label_train,1000) #小樣本梯度下降訓(xùn)練,每次選大小為1 000的batch
#錯(cuò)誤數(shù)據(jù)采集
a=sess.run(tf.argmax(prediction,1),feed_dict={xs:
f_t_batch,ys:l_t_batch,keep_prob:1})
b=sess.run(tf.argmax(ys,1),feed_dict={xs:f_t_batch,
ys:l_t_batch,keep_prob:1})
train_plus,label_plus=Plus_learning(a,b,f_t_batch,
l_t_batch)
sess.run(train_step,feed_dict={xs:f_t_batch,
ys:l_t_batch,keep_prob:0.5})
#加強(qiáng)訓(xùn)練
if train_plus and label_plus:
sess.run(train_step,feed_dict={xs:train_plus,
ys:label_plus,keep_prob:0.5})
if step %5==0:
train_writer.add_summary(sess.run(merged,feed_dict=
{xs:f_t_batch,ys:l_t_batch,keep_prob:1}),step)
print(step,sess.run(accuracy,feed_dict={xs:f_t_batch,
ys:l_t_batch,keep_prob:1}))
其中,init_model()函數(shù)初始化神經(jīng)網(wǎng)絡(luò),sess.run(tf.global_variables_initializer())函數(shù)初始化神經(jīng)網(wǎng)絡(luò)中的所有張量,配置了表3中的基本參數(shù);next_batch()函數(shù)進(jìn)行小樣本采樣,可自行選擇采樣大??;tf.train.AdamOptimizer()函數(shù)表示采用Adam算法進(jìn)行梯度下降優(yōu)化;tf.nn.softmax()函數(shù)調(diào)用Softmax算法優(yōu)化輸出;Drop值為0.5,表示在本層保留50%神經(jīng)元,此時(shí)神經(jīng)元之間的組合方式最多;運(yùn)行train_step表示開始本次訓(xùn)練,每5次訓(xùn)練記錄一次中間數(shù)值;Plus_learning()函數(shù)調(diào)用加強(qiáng)學(xué)習(xí)決策算法,對(duì)應(yīng)流程圖中加強(qiáng)訓(xùn)練決策單元。
3.2.2 卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)優(yōu)化設(shè)計(jì)
在卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)方面,針對(duì)入侵檢測(cè)特征向量的特點(diǎn),對(duì)CNN模型的結(jié)構(gòu)進(jìn)行優(yōu)化,如圖6所示。
圖6 CNN結(jié)構(gòu)Fig. 6 CNN structure
卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)改進(jìn)主要表現(xiàn)為兩個(gè)方面:其一,對(duì)卷積層和池化層的連接結(jié)構(gòu)進(jìn)行優(yōu)化;其二,在全連接后面添加Softmax輸出層進(jìn)行優(yōu)化。
在基于CNN圖像識(shí)別領(lǐng)域中,直接將圖像作為輸入數(shù)據(jù),并具有多通道特性,因此在卷積操作后面緊跟著池化操作,以減少中間參數(shù)量。相比之下,入侵檢測(cè)領(lǐng)域的特征向量維度較低,信息容易提取,過(guò)多的池化操作反而會(huì)引起特征模糊,難以提取,因此,采用改進(jìn)卷積層和池化層的連接結(jié)構(gòu),減小池化頻率,每?jī)纱尉矸e操作后再進(jìn)行池化操作,并采用均值。同時(shí),為了使優(yōu)化算法輸出結(jié)果更具解釋性,使用和CNN結(jié)合最多的Softmax分類器作為輸出層。
3.2.3 加強(qiáng)訓(xùn)練方法設(shè)計(jì)
針對(duì)入侵檢測(cè)模型訓(xùn)練過(guò)程中存在小樣本攻擊類型不易檢測(cè)的問(wèn)題,利用小批量梯度下降方法具有樣本抽樣的特點(diǎn),設(shè)計(jì)了一種加強(qiáng)訓(xùn)練方法,進(jìn)行CNN模型訓(xùn)練。圖7所示為加強(qiáng)訓(xùn)練方法處理流程,這里以傳統(tǒng)網(wǎng)絡(luò)分類器為例介紹訓(xùn)練流程。
圖7 加強(qiáng)訓(xùn)練方法處理流程Fig. 7 Process flow of reinforcement training method
1)為了提高輸入數(shù)據(jù)的隨機(jī)性和小樣本攻擊的占比,對(duì)訓(xùn)練集進(jìn)行隨機(jī)采樣,形成子樣本集V,V既是小批量梯度下降的一個(gè)batch,又是一個(gè)加強(qiáng)訓(xùn)練單元;
2)輸入訓(xùn)練子集D,初始化時(shí)D=V;
3)檢測(cè)是否訓(xùn)練結(jié)束,若是,輸出模型,否則執(zhí)行4);
4)在低頻攻擊檢測(cè)器中,需要神經(jīng)網(wǎng)絡(luò)對(duì)U2R攻擊和R2L攻擊更敏感,搜集分類錯(cuò)誤的這兩種攻擊,形成錯(cuò)誤樣本集v。同時(shí)執(zhí)行1),得到子樣本V′;
5)以概率P∈[0,1]合并V′和v,形成新訓(xùn)練子集D′=V′∪v,最后執(zhí)行2)。其中,P的初始值為1,若錯(cuò)誤樣本集減小則P=P-ΔP,否則,P=P+ΔP,ΔP為一較小常量。
加強(qiáng)訓(xùn)練方法可以有效解決低頻攻擊類型不易檢測(cè)的問(wèn)題,可以根據(jù)實(shí)際需要設(shè)計(jì)不同敏感偏向的分類器。利用以概率思想在合并訓(xùn)練子集時(shí)引入隨機(jī)性,減小因大量重復(fù)訓(xùn)練引起的模型過(guò)擬合。該方法具有思想簡(jiǎn)單,易于實(shí)現(xiàn)、加速收斂、減小過(guò)擬合,有效提高入侵檢測(cè)精度等優(yōu)點(diǎn)。加強(qiáng)訓(xùn)練方法算法偽代碼如算法1所示。
算法1 加強(qiáng)訓(xùn)練算法。
Process:Function improved_train (D)
initializeP=1
initialize ΔP
while not stop do
train CNNModel_Generate(Vt′)
Statistical error samplevt
Ifvt≥vt-1:
P=P-ΔP
else:
P=P+ΔP
Calculating the combination factor
α~Bernoulli(P)
Ifα=1:
Vt′=Vt′+vt
else:
continue
end while
Output:final CNN
實(shí)驗(yàn)環(huán)境采用在Linux下運(yùn)行Tensorflow深度學(xué)習(xí)框架,Tensorflow是谷歌研發(fā)的人工智能系統(tǒng),采用基于數(shù)據(jù)流圖的計(jì)算,廣泛地應(yīng)用于機(jī)器學(xué)習(xí)或深度學(xué)習(xí)領(lǐng)域,Tensorflow支持英偉達(dá)圖形顯卡加速,實(shí)驗(yàn)采用Python語(yǔ)言編寫算法,采用的硬件設(shè)備型號(hào)分別是CPU為Intel i7 2600,內(nèi)存為DDR3 1 333 MHz 16 GB,操作系統(tǒng)為Ubuntu16.04,GPU為NVDIA GTX960。
實(shí)驗(yàn)采用入侵檢評(píng)估標(biāo)準(zhǔn)為準(zhǔn)確率(ACcuracy,AC)、誤報(bào)率(False Positive Rate,F(xiàn)PR)、召回率(Recall)、精確度(Precision,PR)、混淆矩陣等,準(zhǔn)確率、誤報(bào)率、召回率和精確度通過(guò)量化歸一評(píng)價(jià)檢測(cè)結(jié)果,混淆矩陣通過(guò)觀測(cè)預(yù)測(cè)值與真實(shí)值的統(tǒng)計(jì)分布判斷分類器性能。
(9)
(10)
(11)
(12)
其中:TP(True Positive)表示被正確分類的正常行為樣本數(shù)量;TN(True Negative)表示被正確分類的異常行為樣本數(shù)量;FP(False Positive)表示被錯(cuò)誤分類的正常行為樣本數(shù)量;FN(False Negative)表示被錯(cuò)誤分類的異常行為樣本數(shù)量,表4展示了各種分類情況。
表4 實(shí)驗(yàn)結(jié)果分類 Tab. 4 Classification of experimental results
本實(shí)驗(yàn)采用控制變量法進(jìn)行實(shí)驗(yàn),每次都采用最終算法和缺少某一項(xiàng)優(yōu)化的算法進(jìn)行實(shí)驗(yàn)對(duì)比。為了驗(yàn)證多分類下的性能,使用數(shù)據(jù)集NSL-KDD在圖4的傳統(tǒng)網(wǎng)絡(luò)攻擊檢測(cè)單元模型進(jìn)行實(shí)驗(yàn)?;緟?shù)設(shè)置為:學(xué)習(xí)率為0.001;CNN小批量訓(xùn)練的batch為500;總迭代次數(shù)1 000次,每5次迭代記錄一次中間值。
4.2.1 加強(qiáng)訓(xùn)練方法實(shí)驗(yàn)
加強(qiáng)訓(xùn)練方法的概率因子g設(shè)置為0.01,本實(shí)驗(yàn)對(duì)比了使用加強(qiáng)訓(xùn)練和未使用加強(qiáng)訓(xùn)練的實(shí)驗(yàn)結(jié)果,如圖8所示。
圖8 加強(qiáng)訓(xùn)練方法實(shí)驗(yàn)結(jié)果Fig. 8 Experimental results of reinforcement training method
圖8(a)為準(zhǔn)確率隨著訓(xùn)練次數(shù)增加的變化,其中,hard train曲線采用了加強(qiáng)訓(xùn)練方法,normal train曲線未采用加強(qiáng)訓(xùn)練方法,明顯可以看出,采用加強(qiáng)訓(xùn)練方法時(shí)CNN模型在訓(xùn)練前期的收斂速度更快;圖8(b)為損失值與訓(xùn)練次數(shù)的關(guān)系,采用加強(qiáng)訓(xùn)練后,損失值降低得更快;圖8(c)中加強(qiáng)訓(xùn)練圖為采用加強(qiáng)訓(xùn)練方法的模型處理訓(xùn)練集得到的混淆矩陣,后面的實(shí)驗(yàn)中也采用該矩陣進(jìn)行實(shí)驗(yàn)對(duì)比??紤]到精確度可以更直觀反映多分類的分類精度,因此,計(jì)算出正常類型的精確度為99.85%,DoS攻擊的精確度為99.95%,Probe攻擊的精確度為98.67%,R2L攻擊的精確度為96.48%,U2R攻擊的精確度為94.23%;圖8(c)中未加強(qiáng)訓(xùn)練圖是未采用加強(qiáng)訓(xùn)練的混淆矩陣,可以計(jì)算出正常類型的精確度為99.63%,DoS攻擊的精確度為99.20%,Probe攻擊的精確度為96.60%,R2L攻擊的精確度為75.28%,U2R攻擊的精確度為21.15%??梢钥闯觯河?xùn)練前期模型尚未成熟,加強(qiáng)訓(xùn)練可以在一定程度上提高收斂速度;訓(xùn)練中期,加強(qiáng)訓(xùn)練的小樣本數(shù)據(jù)較多,因此有效提升小樣本數(shù)據(jù)的精確度;訓(xùn)練后期,加強(qiáng)訓(xùn)練的P值會(huì)逐漸收斂至0,此時(shí)不再具有加強(qiáng)訓(xùn)練的效果,因此,此時(shí)準(zhǔn)確率和損失值會(huì)在一個(gè)穩(wěn)定區(qū)間內(nèi)小幅波動(dòng)。
4.2.2 卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)優(yōu)化實(shí)驗(yàn)
本實(shí)驗(yàn)中均值池化與最大值池化、多池化層進(jìn)行實(shí)驗(yàn)對(duì)比。如圖9,two avg pool曲線代表多個(gè)池化層,max pool曲線代表最大值池化,avg pool曲線代表均值池化。從圖9(a)準(zhǔn)確率對(duì)比和圖9(b)損失值對(duì)比可以看出,采用多池化層時(shí)收斂最慢且收斂時(shí)抖動(dòng)較大,印證了多池化層會(huì)模糊數(shù)據(jù)特征的猜想;均值采樣的準(zhǔn)確率收斂速度和損失值收斂速度略優(yōu)于最大值采樣。圖9(c)中more pool圖為多池化層的混淆矩陣,可以計(jì)算出正常類型的精確度為99.27%,DoS攻擊的精確度為99.81%,Probe攻擊的精確度為96.67%,R2L攻擊的精確度為48.64%,U2R攻擊的精確度為0%;圖9(c)中max pool圖為最大值采樣的混淆矩陣,可以計(jì)算出正常類型的精確度為99.77%,DoS攻擊的精確度為99.74%,Probe攻擊的精確度為98.70%,R2L攻擊的精確度為91.16%,U2R攻擊的精確度為82.69%。從精確度來(lái)看,多采樣層模糊了小樣本數(shù)據(jù)的特征,導(dǎo)致R2L攻擊和U2R攻擊的檢測(cè)率低;均值池化略優(yōu)于最大值池化。
圖9 池化層實(shí)驗(yàn)Fig. 9 Pooling layer experiment
4.2.3 流表項(xiàng)數(shù)據(jù)集實(shí)驗(yàn)
本實(shí)驗(yàn)展示SDN特有攻擊下的CNN算法訓(xùn)練過(guò)程,9 000條流表項(xiàng)數(shù)據(jù)取80%進(jìn)行實(shí)驗(yàn),剩下20%下一節(jié)進(jìn)行交叉驗(yàn)證。圖10(a)、(b)及(c)分別展示了訓(xùn)練過(guò)程準(zhǔn)確率和損失值隨迭代次數(shù)的變化以及輸出結(jié)果的混淆矩陣,可以看出模型訓(xùn)練200次左右便趨近穩(wěn)定,準(zhǔn)確率和損失值都接近于收斂值。根據(jù)混淆矩陣可以計(jì)算出準(zhǔn)確率為99.34%,誤報(bào)率為0.43%,召回率為99%。
圖10 流表項(xiàng)數(shù)據(jù)集訓(xùn)練Fig. 10 Flow table entry dataset training
圖11是流表項(xiàng)測(cè)試數(shù)據(jù)集的混淆矩陣,可以計(jì)算出準(zhǔn)確率為98.83%,誤報(bào)率為1.28%,召回率為98.72%。各項(xiàng)檢測(cè)數(shù)據(jù)略低于訓(xùn)練集。
圖11 流表項(xiàng)測(cè)試集混淆矩陣Fig. 11 Confusion matrix of flow table entry test set
4.2.4 NSL-KDD數(shù)據(jù)集測(cè)試集實(shí)驗(yàn)
本實(shí)驗(yàn)為了驗(yàn)證本文所提算法具有較高的準(zhǔn)確率、較低的誤報(bào)率和較高的召回率,并具有較強(qiáng)的泛化能力,故與其他文獻(xiàn)中的入侵檢測(cè)模型進(jìn)行對(duì)比。
圖12所示為本文CNN在NSL-KDD測(cè)試集上的混淆矩陣,可以計(jì)算出正常的精確度為98.97%,DoS攻擊的精確度為99.81%,Probe攻擊的精確度為96.90%,R2L攻擊的精確度為94.19%,U2R攻擊的精確度為92%。
表5所示是本模型的實(shí)驗(yàn)結(jié)果,其中,二分類表示SDN特有攻擊的檢測(cè),可以計(jì)算出其在訓(xùn)練集上的準(zhǔn)確率為99.34%,誤檢率為0.43%,召回率為99%,在測(cè)試集中準(zhǔn)確率為98.83%,誤檢率為1.28%,召回率為98.72%;可以看出本文模型能有效檢測(cè)SDN特有攻擊,且具有較強(qiáng)的泛化能力。對(duì)比文獻(xiàn)[10,12]的入侵檢測(cè)算法,可見(jiàn)本文所提算法具有較高的準(zhǔn)確率、較低的誤報(bào)率和較高的召回率,并具有較強(qiáng)的泛化能力。
圖12 NSL-KDD測(cè)試集混淆矩陣Fig. 12 Confusion matrix of NSL-KDD test set表5 入侵檢測(cè)模型實(shí)驗(yàn)結(jié)果
單位:% Tab. 5 Experimental results of intrusion detection model unit:%
本文針對(duì)SDN架構(gòu)特有的安全隱患,設(shè)計(jì)基于卷積神經(jīng)網(wǎng)絡(luò)的入侵檢測(cè)模型,該模型可以同時(shí)檢測(cè)SDN特有攻擊及傳統(tǒng)網(wǎng)絡(luò)攻擊。本文依據(jù)入侵檢測(cè)的特點(diǎn)設(shè)計(jì)適用于入侵檢測(cè)的卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),針對(duì)小樣本攻擊識(shí)別率低的問(wèn)題,設(shè)計(jì)加強(qiáng)學(xué)習(xí)方法。實(shí)驗(yàn)結(jié)果表明,該模型具有較高的檢測(cè)性能,加強(qiáng)訓(xùn)練算法能有效提升小樣本攻擊的識(shí)別率。