


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