從免費的物聯網防火牆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的天