摘 要:本文探討生成對抗網(wǎng)絡(GAN)在網(wǎng)絡異常檢測中的應用,提出了一種基于GAN的檢測方法。利用對抗訓練捕捉網(wǎng)絡流量特征分布,對異常行為進行精確檢測。算法包括網(wǎng)絡流量數(shù)據(jù)預處理和異常檢測模塊,前者用于轉換數(shù)據(jù)格式,后者基于GAN架構生成并檢測異常流量。試驗結果顯示,該方法在準確率、召回率和F1分數(shù)方面顯著優(yōu)于傳統(tǒng)規(guī)則和簽名檢測方法,具備更高的靈活性和適應性,提升了網(wǎng)絡系統(tǒng)的安全性和穩(wěn)定性。
關鍵詞:生成對抗網(wǎng)絡(GAN);網(wǎng)絡異常檢測;異常事件生成;對抗訓練
中圖分類號:TN 915" " " 文獻標志碼:A
網(wǎng)絡安全是現(xiàn)代互聯(lián)網(wǎng)面臨的重大挑戰(zhàn),網(wǎng)絡攻擊手段不斷增加使異常檢測成為保障系統(tǒng)安全的關鍵。采用手工特征提取的傳統(tǒng)方法難以應對復雜網(wǎng)絡環(huán)境[1]。生成對抗網(wǎng)絡(GAN)通過對抗訓練學習數(shù)據(jù)分布捕獲高級特征,可提升檢測準確性和魯棒性。GAN的生成器和判別器通過對抗訓練生成并增強網(wǎng)絡流量數(shù)據(jù),發(fā)現(xiàn)潛在異常模式,解決訓練數(shù)據(jù)不足問題[2]。本文提出結合注意力機制的GAN網(wǎng)絡異常檢測算法,以提升檢測準確性和效率,保障網(wǎng)絡安全與穩(wěn)定。
1 基于生成對抗網(wǎng)絡的網(wǎng)絡異常檢測算法
1.1 算法架構
本文提出的基于生成對抗網(wǎng)絡的網(wǎng)絡異常檢測算法的整體框架如圖1所示。該算法主要包括網(wǎng)絡流量數(shù)據(jù)解析模塊、數(shù)據(jù)異常檢測模塊。在數(shù)據(jù)輸入階段,從監(jiān)控系統(tǒng)讀取原始網(wǎng)絡流量數(shù)據(jù),并將其傳遞到網(wǎng)絡流量數(shù)據(jù)預處理模塊中。在網(wǎng)絡流量數(shù)據(jù)預處理模塊中,對原始網(wǎng)絡流量數(shù)據(jù)進行預處理,包括清洗、去噪等操作,以保證數(shù)據(jù)的質(zhì)量和可用性[3]。構建序列化事件,將預處理后的網(wǎng)絡流量數(shù)據(jù)轉換為序列化事件,其中每個事件包括網(wǎng)絡流量的時間戳、特征等信息,利用滑動窗口并根據(jù)時序進行截取,構建訓練真實樣本集[4]。
在生成對抗網(wǎng)絡(GAN)模型訓練階段,生成器生成與真實網(wǎng)絡流量數(shù)據(jù)相似的假樣本,代表可能的異常事件。判別模型將生成的假樣本與真實樣本進行分類,以區(qū)分真實數(shù)據(jù)和生成的假樣本。通過判別損失函數(shù),交替更新判別模型和生成模型,提高生成器生成假樣本的能力。在異常檢測階段,模型收斂后,將網(wǎng)絡流量數(shù)據(jù)輸入生成模型,生成后續(xù)異常事件分布,這些異常事件反映了網(wǎng)絡流量中的異常行為,并對異常行為進行檢測和分析。
1.2 網(wǎng)絡流量數(shù)據(jù)解析模塊
網(wǎng)絡流量數(shù)據(jù)解析模塊將原始的網(wǎng)絡流量數(shù)據(jù)轉換成適合機器學習模型處理的格式。
1.2.1 原始數(shù)據(jù)解析
原始數(shù)據(jù)解析提取出其中的關鍵信息,例如時間戳、源IP地址、目標IP地址、協(xié)議類型和標簽。使用正則表達式來實現(xiàn)這一解析過程,代碼如下所示。
import refrom datetime import datetime
# 示例原始網(wǎng)絡流量數(shù)據(jù)
raw_data = [
\"2023-05-25 08:23:45, 192.168.1.1, 192.168.1.2, TCP, NORMAL\",
\"2023-05-25 08:23:50, 192.168.1.3, 192.168.1.4, UDP, WARNING\",
# 更多數(shù)據(jù)...
]
# 正則表達式解析網(wǎng)絡流量數(shù)據(jù)
pattern = re.compile(r'(\d+-\d+-\d+ \d+:\d+:\d+), (\d+\.\d+\.\d+\.\d+), (\d+\.\d+\.\d+\.\d+), (\w+), (\w+)')
parsed_data = []
for entry in raw_data:
match = pattern.match(entry)
if match:
timestamp = datetime.strptime(match.group(1), '%Y-%m-%d %H:%M:%S')
src_ip = match.group(2)
dest_ip = match.group(3)
protocol = match.group(4)
label = match.group(5)
parsed_data.append([timestamp, src_ip, dest_ip, protocol, label])
上述代碼定義了一個正則表達式模式,用于匹配原始數(shù)據(jù)中的各個字段。進而遍歷原始數(shù)據(jù),逐條匹配、解析,提取出所需信息,并將其存儲在一個列表中。
1.2.2 數(shù)據(jù)轉換
該操作需要將解析后的數(shù)據(jù)轉換為DataFrame,以便進一步處理。DataFrame是一種便于對數(shù)據(jù)進行操作和分析的數(shù)據(jù)結構,在Python中可通過Pandas庫來實現(xiàn),代碼如下所示。
import pandas as pd
# 轉換為DataFrame以便進一步處理
df = pd.DataFrame(parsed_data,columns=['timestamp', 'src_ip', 'dest_ip','protocol', 'label'])
上述代碼將解析后的數(shù)據(jù)存儲在一個名為df的DataFrame中,其中各列分別代表時間戳、源IP地址、目標IP地址、協(xié)議類型和標簽。
1.2.3 事件編號
該步驟的目的是將具有相同流量特征的數(shù)據(jù)歸為同一類事件,并對其進行編號處理,形成事件集合,代碼如下所示。
# 事件編號處理
df[‘event_id’] = df.groupby([‘src_ip’, ‘dest_ip’, ‘protocol’]).ngroup()
上述代碼使用Pandas的groupby函數(shù)對數(shù)據(jù)進行分組,并對每個分組進行編號處理,形成事件集合。
1.2.4 滑動窗口生成事件模式樣本
滑動窗口是一種常用的序列處理技術,可從序列數(shù)據(jù)中提取子序列,從而形成樣本數(shù)據(jù),代碼如下所示。
# 滑動窗口生成事件模式樣本def create_windowed_samples(dataframe, window_size):
samples = []
for i in range(len(dataframe) - window_size + 1):
window = dataframe.iloc[i:i + window_size]
samples.append(window)
return samples
# 生成樣本,滑動窗口尺寸為3
window_size = 3
samples = create_windowed_samples(df, window_size)
上述代碼中定義了一個名為create_windowed_samples的函數(shù)。該函數(shù)將一個DataFrame和滑動窗口的大小作為輸入,并返回滑動窗口生成的樣本數(shù)據(jù)。進而使用該函數(shù)生成樣本數(shù)據(jù),其中滑動窗口的尺寸為3。
1.3 異常檢測模塊
在生成對抗網(wǎng)絡中,生成模型(Generator)和判別模型(Discriminator)是異常檢測模塊的核心組成部分。
1.3.1 生成模型
生成模型可生成與實際樣本十分相似的假樣本,包括嵌入層(embedding)、GRU和LSTM層、注意力機制層(attention)和全連接層(dense)。嵌入層將事件表示為連續(xù)的一維向量,GRU和LSTM層將這些向量序列化,注意力機制層微調(diào)隱層特征,全連接層將輸出轉換為事件在當前模式下發(fā)生的概率分布。代碼如下所示。
import tensorflow as tf
# 生成模型class Generator(tf.keras.Model):
def __init__(self):
super(Generator, self).__init__()
self.embedding = tf.keras.layers.Embedding(input_dim=vocab_size, output_dim=embedding_dim)
self.gru = tf.keras.layers.GRU(units=hidden_units, return_sequences=True)
self.lstm = tf.keras.layers.LSTM(units=hidden_units, return_sequences=True)
self.attention = tf.keras.layers.Attention()
self.dense = tf.keras.layers.Dense(units=vocab_size, activation='softmax')
def call(self, inputs):
embedded = self.embedding(inputs)
gru_output = self.gru(embedded)
lstm_output = self.lstm(embedded)
attention_output = self.attention([gru_output, lstm_output])
output = self.dense(attention_output)
return output
上述代碼定義了生成對抗網(wǎng)絡(GAN)中的生成模型(Generator)。生成模型在異常檢測中具有重要作用,其主要任務是生成與真實樣本相似的假樣本,以欺騙判別器模型。
1.3.2 判別模型
判別模型用于判斷一個樣本是來自真實數(shù)據(jù)集,還是由生成模型生成的假樣本。它的結構與生成模型類似,并在原有結構上添加了一個全連接層。全連接層的輸出可判別模型的輸入樣本是當前事件模式下的真實事件分布,還是由生成模型生成的假事件分布。
判別模型的構造函數(shù)調(diào)用了父類的構造函數(shù),以保證模型正確初始化。進而定義了嵌入層(Embedding)、GRU層(Gated Recurrent Unit)、LSTM層(Long Short-Term Memory)、注意力機制層(Attention)和全連接層(Dense)。這些層的作用是將輸入數(shù)據(jù)進行嵌入、處理序列數(shù)據(jù)、提取特征并輸出概率。在模型的前向傳播方法中,輸入數(shù)據(jù)經(jīng)過嵌入層、GRU層和LSTM層處理,并通過注意力機制層融合GRU和LSTM輸出,最后由全連接層輸出判別結果,即輸入數(shù)據(jù)是真實樣本的概率。
2 模型應用
2.1 模型應用場景和過程
某個大型企業(yè)的網(wǎng)絡系統(tǒng)包括數(shù)十臺服務器和大量網(wǎng)絡設備,用于處理公司的日常業(yè)務流程和數(shù)據(jù)交換。具體任務是保障網(wǎng)絡系統(tǒng)的安全和穩(wěn)定,及時檢測并應對可能的網(wǎng)絡異常和攻擊。
該應用場景將基于生成對抗網(wǎng)絡的異常檢測算法應用于實時監(jiān)測企業(yè)網(wǎng)絡系統(tǒng)中的網(wǎng)絡流量數(shù)據(jù)。將網(wǎng)絡流量數(shù)據(jù)視為時間序列數(shù)據(jù),每個事件包括網(wǎng)絡流量的時間戳、特征等信息。本文希望通過監(jiān)測網(wǎng)絡流量數(shù)據(jù),及時發(fā)現(xiàn)可能的異常行為,例如DDoS攻擊、惡意軟件傳播以及異常大量數(shù)據(jù)傳輸?shù)?,以保障企業(yè)網(wǎng)絡系統(tǒng)安全、正常運行。模型應用過程有以下4個步驟。
2.1.1 數(shù)據(jù)收集與預處理
從企業(yè)網(wǎng)絡系統(tǒng)中收集實時網(wǎng)絡流量數(shù)據(jù),包括各個服務器和網(wǎng)絡設備的通信記錄、數(shù)據(jù)包傳輸情況等信息。并對原始數(shù)據(jù)進行預處理,包括數(shù)據(jù)清洗、去噪等操作,以保證數(shù)據(jù)質(zhì)量和可用性。
2.1.2 序列化事件構建。
將預處理后的網(wǎng)絡流量數(shù)據(jù)轉換為序列化事件,每個事件包括網(wǎng)絡流量的時間戳、特征等信息。在滑動窗口中按照時序進行截取,構建訓練樣本集,用于訓練生成對抗網(wǎng)絡模型。
2.1.3 模型訓練與優(yōu)化
使用基于生成對抗網(wǎng)絡的異常檢測算法對訓練樣本集進行模型訓練。生成器利用真實樣本集生成與真實網(wǎng)絡流量數(shù)據(jù)相似的假樣本,判別模型用于區(qū)分真實數(shù)據(jù)和生成的假樣本。采用對抗學習機制,生成模型和判別模型可交替優(yōu)化,直到兩者達到穩(wěn)定平衡狀態(tài),即模型收斂。
2.1.4 異常檢測與流量分析
模型訓練完成后,將實時收集的網(wǎng)絡流量數(shù)據(jù)輸入生成模型中。生成模型根據(jù)當前事件模式下的網(wǎng)絡流量數(shù)據(jù)生成后續(xù)異常事件的分布情況。設定閾值,自動判斷下一時刻的特定網(wǎng)絡流量數(shù)據(jù)是正常事件還是異常事件。檢測到異常事件時,系統(tǒng)會立即發(fā)出警報并采取相應措施,例如阻止惡意流量、隔離受感染的設備等,以保障企業(yè)網(wǎng)絡系統(tǒng)安全、穩(wěn)定。
2.2 對比試驗和分析
為了驗證基于生成對抗網(wǎng)絡(GAN)算法的有效性,本文設計了與基于規(guī)則和簽名的安全防御方法的對比試驗。選擇公開的網(wǎng)絡流量數(shù)據(jù)集,包括各種網(wǎng)絡異常和正常流量,以模擬真實網(wǎng)絡環(huán)境。將數(shù)據(jù)集按時序劃分為訓練集和測試集,訓練集占30%,用于訓練模型;測試集占70%,用于評估性能。這種劃分驗證了模型在未見數(shù)據(jù)上的泛化能力。評估性能采用準確率、召回率和F1分數(shù)等指標,全面評價模型在異常檢測任務中的表現(xiàn)。試驗對比數(shù)據(jù)見表1。
從表1數(shù)據(jù)可以看出,基于生成對抗網(wǎng)絡的異常檢測算法在準確率、召回率和F1分數(shù)方面均優(yōu)于傳統(tǒng)的規(guī)則和簽名方法,表明本文算法具有更高的靈活性、適應性和準確性,能夠更有效地識別潛在的網(wǎng)絡異常和攻擊,提高了企業(yè)網(wǎng)絡系統(tǒng)的安全性和穩(wěn)定性。
3 結論
本文提出一種基于生成對抗網(wǎng)絡(GAN)的網(wǎng)絡異常檢測算法,旨在提高網(wǎng)絡系統(tǒng)的安全性和穩(wěn)定性。算法主要由2個關鍵模塊組成,即網(wǎng)絡流量數(shù)據(jù)解析模塊和異常檢測模塊。網(wǎng)絡流量數(shù)據(jù)解析模塊可將原始網(wǎng)絡流量數(shù)據(jù)處理成適合機器學習模型的輸入形式,重點關注時間戳和流量特征,并利用滑動窗口將事件序列劃分為獨立的事件模式樣本?;谏蓪咕W(wǎng)絡的異常檢測模塊包括生成模型和判別模型,該模塊通過對抗訓練的方式學習數(shù)據(jù)分布,最終完成異常檢測任務。本文算法充分利用了生成對抗網(wǎng)絡的優(yōu)勢,結合了網(wǎng)絡流量數(shù)據(jù)的特點,能夠為企業(yè)網(wǎng)絡系統(tǒng)的安全防御提供可靠的技術支持。
參考文獻
[1]劉偉山,馬旭琦,汪航,等.基于生成對抗網(wǎng)絡的惡意域名訓練數(shù)據(jù)生成方法[J].蘭州理工大學學報,2023,49(6):100-106.
[2]余鋒,林慶新,林暉,等.基于生成對抗網(wǎng)絡的隱私增強聯(lián)邦學習方案[J].網(wǎng)絡與信息安全學報,2023,9(3):113-122.
[3]劉宇軒.基于生成對抗網(wǎng)絡的入侵檢測技術研究[D].北京:北京郵電大學,2024.
[4]王正文,王俊峰.基于生成式零樣本學習的未知惡意流量分類方法[J].四川大學學報(自然科學版),2023,60(4):73-80.