1. 程式人生 > >從免費的物聯網防火牆hihttps談機器學習之生成對抗規則

從免費的物聯網防火牆hihttps談機器學習之生成對抗規則

 hihttps是一款基於MQTT的免費的物聯網防火牆,同時也是web應用防火牆,既支援傳統的檢測功能如SQL注入、XSS、惡意漏洞掃描、密碼暴力破解、CC、DDOS等),又支援無監督機器學習,自主對抗,重新定義網路安全。

今天筆者就從物聯網安全的角度,介紹hihttps怎樣通過機器學習自動生成對抗規則的5個過程:

 

 

一、   樣本採集

MQTT是物聯網loT最廣泛採用的協議,騰訊百度阿里雲都支援,基礎協議請百度搜索“物聯網防火牆himqtt原始碼之MQTT協議分析”。

和圖形影象的人工智慧一樣,機器學習無論是有監督還是無監督,第一步都是先採集樣本。物聯網安全有先天性的樣本採集優勢,成本幾乎為0,方法是:通過反向代理的模式採集完整的MQTT協議資料,可以參考hihttps原始碼https://github.com/qq4108863/himqtt/ ,樣本要求如下:

1、足夠的隨機化,在不同的IP地址之間隨機採集。

2、足夠多的樣本,保證99.99%的正確率,至少需要採集數萬份的樣本。

3、足夠的時間,至少在不同的時間段採集3-7天的樣本。

4、儘量是正常流量下采集,減少樣本被黑客攻擊汙染的可能性。

5、完整的資料,樣本包括全部的MQTT協議頭和body。

 

基於機器學習的物聯網防火牆hiihttp是怎樣工作的呢?比如有個TOPIC介面"hihttps/read",在正常情況是通過json形式訪問,hihttps先把採集到樣本引數儲存在train訓練目錄下,樣本檔案主要內容如下:

"topic": "hihttps/read"

{ "id": 123,"token": "2458-a632-3d56-a9bf "}

{ "id": 456,"token": " ce58-a49d-b767-68ed"}

{ "id": 678,"token": "2bd8-c4d2-d324-29b3"}

{ "id": abc,"token": "45d8-35d2-e8f3-fe4a"}

{ "id": abc%20’or 1=1,"token": "2bd8-c4d2-d324-29b3 "}

……

 

當採集到的樣本數量,達到一定數量(如1萬),hihttps機器學習引擎就開始啟動,第一步就是濾噪。

二、 濾噪

在正常的情況下,拿到的樣本絕大多數是大量重複性存在的,但是也不排除樣本存在黑客攻擊,也就是說,個別樣本可能已經被汙染了,hihttps在降維和特徵提取之前先過濾。

濾噪的方法通常是用聚類方法,把樣本分為兩類,把其中小於3%的樣本去掉,通常有以下幾種做法:

1:json引數過濾。比如正常情況下是{ "id": xxx,"token":xxx},那麼如果有小於1%的是{ "sql": xxx,"xss":xxx},那麼就要過濾這條樣本。

2:名稱長度過濾。一般來說,字串長度值分佈,均值μ,方差σ3,在切比雪夫不等式範圍外,要過濾掉。

3:引數值長度過濾。一般來說,引數如tolken=xxx,其中xxx的長度值分佈,均值μ,方差σ3,在切比雪夫不等式範圍外,要過濾掉。

4:SQL注入過濾。用libinjection庫查一遍,符合SQL注入特徵的樣本要過濾。

5:XSS攻擊過濾。用libinjection庫查一遍,符合XSS特徵的樣本要過濾。

6:其他已知攻擊過濾。如ModSecurity 的OWASP規則很牛,先跑一遍過濾。

 

經過濾噪處理後,我們把樣本就分為正常和異常樣本,正常的如下:

 

{ "id": 123,"token": "2458-a632-3d56-a9bf "}

{ "id": 456,"token": " ce58-a49d-b767-68ed"}

{ "id": 678,"token": "2bd8-c4d2-d324-29b3"}

{ "id": abc,"token": "45d8-35d2-e8f3-fe4a"}

……

少數異常樣本,如疑似SQL注入攻擊則去掉

{ "id": abc%20’or 1=1,"token": "2bd8-c4d2-d324-29b3 "}

……

 

整個過程,無監督進行,可以用到的數學演算法有K均值(K-Mean)、主成分分析PCA、切比雪夫不等式、高斯混合模型GMM、稀疏矩陣……

具體的演算法原始碼可以參考https://github.com/qq4108863/AI

 

三、 降維

濾噪後最重要的一步就是降維,這是機器學習的核心。降維就是通過特定的數學演算法,把複雜的東西,用特徵表達向量,變為機器可以理解的東東,降維方法分為線性降維(PCA 、ICA LDA、LFA、LPP等)和非線性降維KPCA 、KICA、KDA、ISOMAP、LLE、LE、LPP、LTSA、MVU等)。

怎麼讓機器理解/hihttps?id=abc%20’or 1=1’這就是一條攻擊呢?在物聯網安全領域和圖形影象完全不同,主要就是涉及自然語言處理,尤其是文字的識別,主要有下面幾種模型:

1、詞袋模型

文字的降維本質上涉及到了文字的表達形式。在傳統的詞袋模型當中,對於每一個詞采用one-hot稀疏編碼的形式,假設目標語料中共有N個唯一確認的詞,那麼需要一個長度N的詞典,詞典的每一個位置表達了文字中出現的某一個詞。在某一種特徵表達下,比如詞頻、binary、tf-idf等,可以將任意詞,或者文字表達在一個N維的向量空間裡。憑藉該向量空間的表達,可以使用機器學習演算法,進行後續任務處理。

這種方式被稱為n-gram語法,指文字中連續出現的n個語詞。當n分別為1、2、3時,又分別稱為一元語法(unigram)、二元語法(bigram)與三元語法(trigram)。

 

2、維度選擇方法

常用的有卡方、互資訊這種統計檢驗的方法;還有藉助機器學習模型降維的方法。比如,使用隨機森林,或者邏輯迴歸等模型,篩選出那些在分類任務中具有較大特徵重要性,或者係數絕對值較大的TOP特徵作為降維後的特徵集合。

 

3、主題模型

主題模型同時具備了降維和語義表達的效果,比如LSI、LDA、PLSA、HDP等統計主題模型,這些模型尋求文字在低維空間(不同主題上)的表達,在降低維度的同時,儘可能保留原有文字的語義資訊。

 

4、神經網路

如卷積神經CNN、迴圈神經RNN等。

 

 

理論可能有點複雜,那我們直接拿4條樣本來舉例說明吧:

{ "id": 123,"token": "2458-a632-3d56-a9bf "}

{ "id": 456,"token": " ce58-a49d-b767-68ed"}

{ "id": 678,"token": "2bd8-c4d2-d324-29b3"}

{ "id": abc,"token": "45d8-35d2-e8f3-fe4a"}

 …..

降維的目的就是為了讓機器能夠理解id是什麼,token又是什麼,什麼情況是攻擊。我們先來定義一些稀疏編碼:

N:整數,0-9

C:字元,a-z

X: 16進位制數字,0-9 a-f

D:標點分隔符.-|

……..

{ "id": 123,"token": "2458-a632-3d56-a9bf "} 這種我們就用稀疏編碼把其維度降為id=N,token=XDXDXDX,這樣機器就可能理解了,哦,原來id就是數字嘛。

當然這是最簡單的情況,實際場景可能很複雜,比如10.1究竟是代表數字?或者錢?或者版本號呢?就需要做更多的引數關聯運算(如money或者version)。如果我們觀察到的樣本,大於99.9%的引數id都是數字,就可以認為{ "id": abc,"token": "45d8-35d2-e8f3-fe4a"}就是一條非法攻擊,這就是機器學習能夠檢測未知攻擊的核心原理。

實際生產環境中情況更復雜的,所以讓機器達到網路專家的智慧水平,還有很長的路要走,但這是必然的發展方向。

四、特徵提取

下一步,hihttps就是對正常流量進行數值化的特徵提取和分析。通過對大量樣本進行特徵分佈統計,建立數學模型,特徵提取包括:JSON引數個數、引數值長度的均值和方差、引數字元分佈、TOPIC訪問頻率等等。如下表所示:

 

類別

序號

特徵名稱

特徵描述

語法特徵

1

Topic_len

TOPIC 長度

2

Path_len

路徑長度

3

Path

路徑最大長度

4

Path_Maxlen

路徑平均長度

5

Argument_len

引數部分長度

6

Name_Max_len

引數名最大長度

7

Name_Avglen

引數名平均長度

8

Value_Max_len

引數值最大長度

9

Value_Avg_len

引數值平均長度

10

Argument_len

引數個數

11

String_Max_len

字串最大長度

12

Number_Maxlen

連續數字最大長度

13

Path_number

路徑中的數字個數

14

Unknow_len

特殊字元的個數

15

Number_Percentage

引數值中數字佔有比例

16

String_Percentage

引數值字母佔有比例

17

Unkown_Percentage

引數值中特殊字元的比例

18

BigString_Percentage

大寫字元所佔比例

20

Spacing_Precentage

空格字元所佔比例

攻擊特徵

21

ContainIP

引數值是否包含IP

22

Sql_Risk_level

SQL 型別危險等級

23

Xss_Risk_level

Xss 型別危險等級

24

Others_Risk_level

其他型別危險等級

自然語言

25

NLP

自然語言理解處理

 

五、生成對抗規則

最後hihttps通過大量的樣本採集 ,精確給這個"hihttps/read"介面引數,生成對抗規則,儲存在rule目錄下,和傳統OWASP規則放在一起,保護物聯網伺服器不被攻擊。

下面的一律視為攻擊,只有機器學習才有可能檢測未知攻擊,這是網路安全專家也難以做到的。

{ "id": 123 }                                 引數缺少

{ "id": abc,"token": " ce58-a49d-b767-68ed"}    引數id值不正確

{ "admin": %0acdef,"token": "2bd8-c4d2"}      未知攻擊

….....

最後總結如下:

1、整個過程完全是無監督的機器學習,有些特殊的引數,也可以由網路安全專家人為干預半監督,從而從99.9%到100%準確率的進化。

2、傳統的規則很難對付未知漏洞和未知攻擊。讓機器像人一樣學習,具有一定智慧自動對抗APT攻擊或許是唯一有效途徑,但黑客技術本身就是人類最頂尖智力的較量,物聯網安全仍然任重而道遠。

3、幸好hihttps這類免費的物聯網防火牆在機器學習、自主對抗中開了很好一個頭,未來物聯網安全很可能是特徵工程+機器學習共同完成,必然是AI的天