深度學習技術的興起為物聯網安全防護提供了新的解決方案。由於 IoT 裝置資源有限且種類繁多,傳統的資安防護策略難以有效應對日益複雜的網路攻擊。深度學習模型,如深度神經網路(DNN)、自動編碼器和長短期記憶網路(LSTM),能有效分析 IoT 裝置和網路中的資料,識別異常行為並及時發出警報。這些技術可以應用於裝置層級和網路層級的入侵偵測,例如分析 CPU 使用率、網路流量等資料,以辨識惡意攻擊和異常活動。透過機器學習的自動化學習和適應能力,深度學習模型可以持續更新並應對新型態的攻擊模式,強化 IoT 環境的安全性。
深度學習在IoT安全性檢測中的應用
深度學習(DL)可以用於IoT安全性檢測,例如使用深度神經網路(DNN)、自動編碼器和長短期記憶(LSTM)等技術。這些技術可以用於檢測IoT裝置和網路中的異常行為,從而實現智慧化的安全性檢測。
內容解密:
本文介紹了IoT安全性的挑戰和解決方案,包括行為基礎的IoT安全解決方案和深度學習在IoT安全性檢測中的應用。IoT安全性是保障IoT裝置和網路安全的關鍵,需要更多的技術和解決方案來保障IoT裝置和網路的安全。
圖表翻譯:
下圖展示了IoT安全性的三層結構和安全要求:
graph LR A[IoT裝置] --> B[網路] B --> C[雲端] C --> D[使用者端] D --> E[安全性檢測] E --> F[異常檢測] F --> G[安全性報警]
本圖表展示了IoT安全性的三層結構,包括IoT裝置、網路、雲端和使用者端。安全性檢測是IoT安全性的關鍵,需要使用異常檢測和安全性報警等技術來保障IoT裝置和網路的安全。
IoT 安全性與異常偵測
IoT 裝置的安全性是一個重要的課題,因為它們通常具有有限的資源和計算能力,難以抵禦各種攻擊。為了防止入侵者進入 IoT 網路,需要實施有效的安全措施。其中,深度學習(DL)和機器學習(ML)技術可以用於監控 IoT 裝置的行為,偵測異常情況,並防止入侵。
IoT 安全性挑戰
IoT 裝置通常具有有限的資源和計算能力,難以抵禦各種攻擊。另外,IoT 裝置需要與外部世界進行通訊,例如雲端和手機應用程式,這增加了安全風險。因此,需要實施有效的安全措施來保護 IoT 訇備和網路。
DL/ML 引擎
DL/ML 引擎可以用於監控 IoT 裝置的行為,偵測異常情況,並防止入侵。這些引擎可以建立一個正常行為的配置檔案,並比較入侵的流量,以偵測是否有異常情況。DL/ML 引擎的優點是它們可以自動學習和適應新的攻擊模式,不需要人工干預。
網路層級異常偵測
網路層級異常偵測是指在網路層級偵測異常流量和入侵行為。這種方法可以用於偵測 DoS 和 DDoS 攻擊,以及其他型別的入侵行為。網路層級異常偵測的優點是它們可以在入侵行為發生之前就偵測到,並防止入侵。
裝置層級異常偵測
裝置層級異常偵測是指在裝置層級偵測異常行為和入侵行為。這種方法可以用於偵測 DoS 和 DDoS 攻擊,以及其他型別的入侵行為。裝置層級異常偵測的優點是它們可以在入侵行為發生之前就偵測到,並防止入侵。
實施案例
以下是兩個實施案例:
- 智慧型主機入侵偵測:這個案例使用 DL/ML 引擎來偵測 IoT 裝置的異常行為和入侵行為。DL/ML 引擎可以建立一個正常行為的配置檔案,並比較入侵的流量,以偵測是否有異常情況。
- 流量基礎智慧型網路入侵偵測:這個案例使用 DL/ML 引擎來偵測網路層級的異常流量和入侵行為。DL/ML 引擎可以建立一個正常行為的配置檔案,並比較入侵的流量,以偵測是否有異常情況。
實現用例二:IoT 安全事件檢測
與傳統網路不同,IoT 中的入侵檢測系統(IDS)需要是輕量級、分佈在不同層級、且長期可用的。第一個條件對於資源受限的 IoT 裝置是顯而易見的。解決方案需要分佈在多個層級,以最佳化檢測過程的有效性。重要的是,解決方案需要對長期可用的 IoT 裝置有效。例如,一臺智慧冰箱可能在家中使用超過 10 年,找到能夠承受如此長時間的安全解決方案是一項艱鉅的任務。
以下圖表呈現了一個 IoT 基礎設施,包括一個分層的網路 IDS,可以解決 IoT 中 IDS 的前兩個需求。例如,一個 IoT 部署由不同的、分散式和資源受限的元件組成。一個全面的、整體的 IDS 可能不適合實時響應。在這種情況下,分層 IDS 中的每一層都將實時或近實時地識別層級特定的異常和相應的入侵者。
IoT 安全第 7 章
[ 187 ] IoT 的分層網路 IDS(尤其是在智慧家居應用中)由以下三個主要元素組成:
- 感測器/事物和邊緣計算平臺:智慧家居裝置,例如智慧電視、智慧冰箱、溫控器、智慧燈泡和家用物理安全攝像頭,是感測器或「事物」。這些裝置透過家用路由器/閘道器連線到網際網路。在這個用例中,我們考慮的是根據網路的安全解決方案,而不是根據裝置的解決方案。我們還假設家用路由器將作為邊緣計算裝置,並允許我們安裝分層 IDS。
- 根據深度學習的入侵檢測:家用路由器/閘道器將預先安裝三個(每個層級一個)根據深度學習的異常檢測器,分析從家中連線的「事物」傳來的流量/封包。每個檢測器都將分析和比較該層級的正常流量,以找到任何異常或入侵,如果檢測到,將報告給家主和/或自動設定反制措施。
- 模型學習平臺:一個家用桌面或雲平臺將需要學習和更新異常檢測器的深度學習模型。這將使用三個參考資料集訓練選定的深度學習模型/模型,以進行異常檢測。
所有以下章節都將描述上述用例的根據深度學習的網路級別和節點級別異常檢測的實現。所有必要的程式碼都可以在章節的程式碼資料夾中找到。
深度學習在 IoT 安全事件檢測中的應用 傳統的安全解決方案(例如加密、身份驗證、存取控制和網路安全)對於 IoT 裝置無效。在近年來,根據深度學習/機器學習的解決方案已成為傳統解決方案的熱門替代方案。根據深度學習/機器學習的解決方案可以智慧地監控 IoT 裝置和其網路,並檢測各種新的或零日攻擊。重要的是,根據深度學習/機器學習的方法可以透過異常檢測來檢測和/或預測各種裝置和網路級別的安全事件。透過處理、分析裝置/事物和其網路的正常和異常活動資料,根據深度學習/機器學習的方法可以識別各種安全事件,包括 IoT 裝置和網路級別的入侵。
以下章節將簡要介紹幾個在 IoT 裝置和網路級別 IDS 中有用的深度學習模型。
IoT 安全第 7 章
[ 188 ] DNN、自編碼器和 LSTM 在 IoT 安全事件檢測中的應用 已經有許多深度學習模型被用於 IoT 安全增強,包括簡單的 DNN、自編碼器和迴圈神經網路(RNN)。這些方法可以是監督或非監督的。在本章中,我們將使用監督和非監督的方法。對於第一個用例,我們將使用根據 LSTM 的監督方法進行裝置級別入侵檢測。在第二個用例中,我們將使用 DNN 和自編碼器進行監督和非監督的網路級別入侵檢測。
資料收集
對於兩個用例,我們可以生成自己的資料集並在其上訓練和測試模型。在以下段落中,我們簡要介紹如何為裝置級別入侵檢測建立一個資料集。
CPU 使用率資料 對於 DoS 攻擊,我們需要一個攻擊機和一個目標機。我們使用 Kali Linux 機作為攻擊者和 Windows 機作為目標(可以是家用閘道器/樹莓派 3/感測器)。在 Kali Linux 中,可以使用 hping3 命令實現 DoS 攻擊。
以下命令是使用 Kali Linux 的 hping3 工具進行 DoS 攻擊的示例。
hping3 -c 100000 -d 120 -S -w 64 -p 21 --flood --rand-source <目標 IP>
以下列表是上述命令的語法描述:
hping3
:二進位制應用程式的名稱-c 100000
:傳送的封包數量-d 120
:每個封包的大小-S
:僅傳送 SYN 封包-w 64
:TCP 視窗大小-p 21
:目的埠--flood
:盡可能快地傳送封包,不考慮接收到的回應--rand-source
:使用隨機的源 IP 地址
以下螢幕截圖顯示了在傳送 hping3 命令或啟動 DoS 攻擊之前 Windows 伺服器的 CPU 使用率。
graph LR A[DoS 攻擊] --> B[CPU 使用率增加] B --> C[系統變慢或無法響應]
圖表翻譯:
此圖表描述了 DoS 攻擊對系統的影響。當 DoS 攻擊發生時,系統的 CPU 使用率會增加,導致系統變慢或無法響應。
網路安全與IoT:玄貓的視角
在IoT時代,網路安全成為了一個至關重要的議題。隨著物聯網裝置的普及,攻擊面也越來越大。為了防禦這些攻擊,需要一個強大的入侵偵測系統(IDS)。玄貓將從兩個不同的角度來探討這個問題:一是根據CPU利用率的IoT裝置級別入侵偵測,二是根據網路流量的網路級別入侵偵測。
CPU利用率基礎的IoT裝置級別入侵偵測
在這個用例中,玄貓使用了一個根據LSTM的入侵偵測演算法,來分析CPU利用率資料。這個資料可以透過在目標機器上執行不同的hping3會話來收集,並使用Windows的程序監視器來儲存CPU利用率資料。這個方法可以有效地偵測到IoT裝置上的異常行為。
網路流量基礎的網路級別入侵偵測
在這個用例中,玄貓使用了KDD cup 1999 IDS資料集,來分析網路流量資料。這個資料集包含了39種不同型別的網路級別攻擊和200個背景流量例項。資料集被分為三個版本:完整的KDD資料集、修正的KDD資料集和10%的KDD資料集。玄貓使用了10%的KDD資料集,來進行正常和攻擊流量的聚類和分類。
資料探索
玄貓探索了兩個用例中使用的資料集:CPU利用率資料集和KDD cup 1999 IDS資料集。CPU利用率資料集是一個CSV檔案,包含了日期和時間以及相應的CPU利用率。KDD cup 1999 IDS資料集是一個包含了網路流量資料的資料集,需要進行多級別的預處理,包括分割資料、移除重複資料、類別資料轉換和正規化。
資料預處理
資料預處理是深度學習管道中的一個重要步驟。CPU利用率資料集已經準備好可以用於訓練,但是KDD cup 1999 IDS資料集需要多級別的預處理。這包括了分割資料、移除重複資料、類別資料轉換和正規化。
程式碼實現
玄貓使用了Python和pandas庫,來分割KDD cup 1999 IDS資料集,分為三個不同的資料集:Final_App_Layer、Final_Transport_Layer和Final_Network_Layer。這個過程可以透過以下程式碼實現:
import pandas as pd
# 載入KDD cup 1999 IDS資料集
IDSdata = pd.read_csv("kddcup.data_10_percent.csv", header=None, engine='python', sep=",")
# 新增欄位標題
IDSdata.columns = ["duration", "protocol_type", "service", "flag", "src_bytes", "dst_bytes", "land", "wrong_fragement", "urgent", "hot", "num_failed_logins", "logged_in", "num_compressed", "root_shell", "su_attempted", "num_root", "num_file_creations", "num_shells", "num_access_files", "num_outbound_cmds", "is_hot_login", "is_guest_login", "count", "srv_count", "serror_rate", "srv_serror_rate", "rerror_rate", "srv_rerror_rate", "same_srv_rate", "diff_srv_rate", "srv_diff_host_rate", "dst_host_count", "dst_host_srv_count", "dst_host_same_srv_rate", "dst_host_diff_srv_rate", "dst_host_same_src_port_rate", "dst_host_srv_diff_host_rate", "dst_host_serror_rate", "dst_host_srv_serror_rate", "dst_host_rerror_rate", "dst_host_srv_rerror_rate", "labels"]
# 分割資料集
ApplicationLayer = IDSdata[(IDSdata['labels'].isin(['normal.', 'smurf.', 'back.', 'satan.', 'pod.', 'guess_passwd.', 'buffer_overflow.', 'warezmaster.', 'imap.', 'loadmodule.', 'ftp_write.', 'multihop.', 'perl.']))]
print(ApplicationLayer['labels'].value_counts())
這個程式碼可以用於分割KDD cup 1999 IDS資料集,分為三個不同的資料集:Final_App_Layer、Final_Transport_Layer和Final_Network_Layer。這個過程可以幫助玄貓更好地理解資料集的結構和內容。
資料預處理與探索
在進行資料分析之前,需要對資料進行預處理和探索。這一步驟包括移除重複的資料記錄以及對資料進行標準化。
移除重複資料
為了避免重複的資料記錄對模型的影響,我們需要移除這些重複的記錄。以下是移除重複記錄的程式碼:
def DataPreprocessing(IDSdataframe):
# 移除重複記錄
recordcount = len(IDSdataframe)
print("原始資料記錄數量:", recordcount)
IDSdataframe.drop_duplicates(inplace=True)
newrecordcount = len(IDSdataframe)
print("移除重複記錄後的資料記錄數量:", newrecordcount)
資料標準化
資料標準化是指將所有的資料特徵轉換為相同的尺度,以便於模型的訓練。以下是資料標準化的程式碼:
from sklearn.preprocessing import StandardScaler
def DataStandardization(IDSdataframe):
# 標準化資料
scaler = StandardScaler()
IDSdataframe[['feature1', 'feature2', 'feature3']] = scaler.fit_transform(IDSdataframe[['feature1', 'feature2', 'feature3']])
return IDSdataframe
資料探索
在進行資料探索之前,需要將資料分成不同的層次,例如應用層、傳輸層和網路層等。以下是資料探索的程式碼:
# 應用層資料探索
ApplicationLayer = IDSdata[(IDSdata['labels'].isin(['normal.', 'neptune.', 'portsweep.', 'teardrop.', 'buffer_overflow.', 'land.', 'nmap.']))]
print(ApplicationLayer['labels'].value_counts())
ApplicationLayer.to_csv('Final_App_Layer.txt', header=None, index=False)
# 傳輸層資料探索
TransportLayer = IDSdata[(IDSdata['labels'].isin(['normal.', 'neptune.', 'portsweep.', 'teardrop.', 'buffer_overflow.', 'land.', 'nmap.']))]
print(TransportLayer['labels'].value_counts())
TransportLayer.to_csv('Final_Transport_Layer.txt', header=None, index=False)
# 網路層資料探索
NetworkLayer = IDSdata[(IDSdata['labels'].isin(['normal.', 'smurf.', 'ipsweep.', 'pod.', 'buffer_overflow.']))]
print(NetworkLayer['labels'].value_counts())
NetworkLayer.to_csv('Final_Network_Layer.txt', header=None, index=False)
結果分析
透過上述程式碼,我們可以得到應用層、傳輸層和網路層的資料探索結果。這些結果可以用於訓練模型,以進行網路攻擊的檢測和預防。
使用隨機森林進行特徵選擇
在 IoT 安全的背景下,特徵選擇是一個非常重要的步驟,尤其是在資源受限的裝置上。透過選擇最相關的特徵,可以減少輸入層或神經網路的大小,從而提高模型的效率。
以下是使用隨機森林進行特徵選擇的步驟:
步驟 1:匯入必要的庫
import numpy as np
from sklearn.ensemble import RandomForestClassifier
步驟 2:定義特徵選擇函式
def FeatureSelection(myinputX, myinputY):
labels = np.array(myinputY).astype(int)
inputX = np.array(myinputX)
# 隨機森林模型
model = RandomForestClassifier(random_state=0)
# 訓練模型
model.fit(inputX, labels)
# 獲取特徵重要性
importances = model.feature_importances_
# 繪製特徵重要性
# import matplotlib.pyplot as plt
# plt.bar(range(len(importances)), importances)
# plt.show()
return importances
步驟 3:呼叫特徵選擇函式
importances = FeatureSelection(df_X, df_Y)
步驟 4:選擇最重要的特徵
# 選擇最重要的特徵
threshold = 0.1
selected_features = importances > threshold
步驟 5:更新輸入資料
# 更新輸入資料
df_X_selected = df_X[:, selected_features]
內容解密:
在這個例子中,我們使用隨機森林進行特徵選擇。隨機森林是一種整合學習方法,它可以結合多個決策樹的預測結果,從而提高模型的準確性。
首先,我們定義了一個特徵選擇函式 FeatureSelection
,它接受輸入資料 myinputX
和 myinputY
作為引數。然後,我們使用隨機森林模型進行特徵選擇,並計算出每個特徵的重要性。
接下來,我們呼叫特徵選擇函式,並選擇最重要的特徵。最後,我們更新輸入資料,僅保留最重要的特徵。
圖表翻譯:
flowchart TD A[輸入資料] --> B[隨機森林模型] B --> C[特徵重要性] C --> D[選擇最重要的特徵] D --> E[更新輸入資料]
這個圖表展示了特徵選擇的過程。首先,我們輸入資料到隨機森林模型中,然後計算出每個特徵的重要性。接下來,我們選擇最重要的特徵,並更新輸入資料。
特徵重要性分析與模型訓練
在進行IoT安全分析時,瞭解特徵的重要性是非常關鍵的。下面是一個使用Python和 NumPy、Matplotlib等庫進行特徵重要性分析的例子:
import numpy as np
import matplotlib.pyplot as plt
# 假設已經有了一個模型(model)和輸入資料(inputX)
importances = model.feature_importances_
indices = np.argsort(importances)[::-1]
std = np.std([tree.feature_importances_ for tree in model.estimators_], axis=0)
# 繪製特徵重要性圖
plt.figure(figsize=(10, 5))
plt.title("特徵重要性(y軸)vs 特徵ID(x軸)")
plt.bar(range(inputX.shape[1]), importances[indices], color="g", yerr=std[indices], align="center")
plt.xticks(range(inputX.shape[1]), indices)
plt.xlim([-1, inputX.shape[1]])
plt.show()
# 選擇前10個重要的特徵
newX = inputX.iloc[:, model.feature_importances_.argsort()[::-1][:10]]
myX = newX.as_matrix()
myY = labels
這段程式碼首先計算特徵的重要性,並根據重要性對特徵進行排序。然後,使用Matplotlib繪製特徵重要性圖,圖中x軸代表特徵ID,y軸代表特徵重要性。最後,選擇前10個重要的特徵,並將其轉換為矩陣形式,準備用於模型訓練。
模型訓練
在IoT安全分析中,常用的模型包括LSTM(長短期記憶網路)、Autoencoder(自編碼器)和DNN(深度神經網路)。下面是使用LSTM進行模型訓練的例子:
from keras.models import Sequential
from keras.layers import LSTM, Dense
# 定義LSTM模型
model = Sequential()
model.add(LSTM(units=50, return_sequences=True, input_shape=(inputX.shape[1], 1)))
model.add(LSTM(units=50))
model.add(Dense(1))
model.compile(loss='mean_squared_error', optimizer='adam')
# 訓練模型
model.fit(myX, myY, epochs=50, batch_size=32, verbose=2)
這段程式碼定義了一個三層的LSTM模型,第一層和第二層都是LSTM層,第三層是Dense層。然後,使用fit()
方法訓練模型,輸入資料為myX
,標籤為myY
,訓練50個epoch,批次大小為32。
圖表分析
圖表是分析IoT安全資料的重要工具。下面是使用Mermaid繪製圖表的例子:
graph LR A[資料收集] --> B[資料預處理] B --> C[特徵提取] C --> D[模型訓練] D --> E[模型評估] E --> F[結果分析]
這個圖表描述了IoT安全分析的流程,從資料收集到結果分析。每個步驟都與下一個步驟相連,形成了一個完整的流程。
IoT 安全性:異常偵測模型評估
在 IoT 安全性領域中,異常偵測模型的評估是一個至關重要的步驟。這個步驟可以幫助我們瞭解模型的效能、學習時間、儲存需求等方面的表現。在本文中,我們將介紹如何評估三種不同的異常偵測模型:LSTM、Autoencoder 和 DNN。
學習時間
學習時間是評估模型的一個重要方面。一般而言,模型的學習時間會隨著資料集的大小而增加。在我們的實驗中,LSTM 模型在 CPU 使用率資料集上的學習時間約為幾分鐘,而 Autoencoder 模型在 KDD 資料集上的學習時間也約為幾分鐘。然而,DNN 模型在整個 KDD 資料集上的學習時間約為一小時左右。
儲存需求
儲存需求是另一個重要的評估方面。由於 IoT 裝置通常具有有限的儲存空間,因此模型的儲存需求必須盡可能的小。在我們的實驗中,Autoencoder 模型的儲存需求約為 85 KB,而 LSTM 模型的儲存需求約為 1.5 MB。DNN 模型的儲存需求約為 16.3 MB。
效能評估
效能評估是評估模型的一個關鍵方面。在我們的實驗中,我們使用了兩種不同的用例:CPU 使用率資料集和 KDD 資料集。對於 CPU 使用率資料集,我們使用了 LSTM 模型,並評估了其在預測正常 CPU 使用率資料上的表現。結果表明,LSTM 模型可以很好地預測正常 CPU 使用率資料,並且可以檢測到異常的 CPU 使用率資料。
對於 KDD 資料集,我們使用了 Autoencoder 模型,並評估了其在三個不同的層級(應用層、網路層和傳輸層)上的表現。結果表明,Autoencoder 模型可以很好地學習正常的流量模式,並且可以檢測到異常的流量模式。
內容解密:
在上述程式碼中,我們使用了 Mermaid 圖表來展示異常偵測模型的架構。圖表中,A 代表異常偵測模型,B 代表 LSTM 模型,C 代表 Autoencoder 模型,D 代表 DNN 模型。E、F 和 G 代表不同的資料集。
圖表翻譯:
上述圖表展示了異常偵測模型的架構。圖表中,異常偵測模型被分為三種不同的模型:LSTM、Autoencoder 和 DNN。每種模型都對應著不同的資料集,例如 CPU 使用率資料集、KDD 資料集和整個 KDD 資料集。圖表中還展示了每種模型的儲存需求和學習時間。
從效能評估的視角來看,深度學習應用於物聯網(IoT)安全檢測展現了顯著的潛力與挑戰。本文分析了根據深度學習的入侵檢測系統(IDS),包含 LSTM、Autoencoder 和 DNN 等模型在 CPU 使用率和網路流量資料集上的表現。LSTM 模型在偵測裝置層級異常,例如 CPU 使用率突增方面,展現了良好的準確性,但儲存需求相對較高。Autoencoder 模型則在網路層級異常偵測中表現出色,學習時間短且儲存需求低,適合資源受限的 IoT 裝置。然而,DNN 模型雖然能處理更複雜的網路流量資料,但學習時間長且儲存需求大,限制了其在 IoT 裝置上的應用。技術限制深析顯示,模型的儲存需求和學習時間仍是實際部署到資源受限的 IoT 裝置上的關鍵挑戰。展望未來,輕量化深度學習模型、邊緣計算的應用和聯邦學習等技術的發展,將有助於克服這些限制,推動深度學習在 IoT 安全檢測領域的更廣泛應用。玄貓認為,針對不同 IoT 裝置和應用場景,選擇合適的深度學習模型和部署策略,才能最大化其在安全防護方面的效益。