2019年2月1日 星期五

Machine Learning for Red Teams, Part 1中譯

文章來源:https://silentbreaksecurity.com/machine-learning-for-red-teams-part-1/
以紅隊看機器學習──首篇
By Will Pearce   November 14, 2018
摘要:以機器學習來判定眾多進程表中哪個為沙盒。
前言
  對於攻擊者過於積極的蒐集資料造成一些基礎架構、初始連接技術與惡意軟體被發覺,而且分析者總是毫不留情的將他們進行隔離。將機器學習應用於加強防禦,不但能提升攻擊者的成本,很明顯地,還能為當前的攻擊技術給予限制。從攻擊者的角度發現:
l   防禦軟體與分析者可以不受阻礙的蒐集、分析海量資料。
l   機器學習無論何處,正被應用於促進其防禦發展
l   攻擊者總是站在壞的一方,如同人類嘗試去打敗自動學習系統 ---- 系統使用每個分支去試著學習,並且預言未來該分支的測試結果。這對於公開研究與靜態分支們尤其重要。
  然而,我們將會在此展示,機器學習並非僅能用於藍隊演練,這篇文章將會探討攻擊者如何利用僅有的一些資料來進行機器學習。我們的研究會著重在呈現初次存取。文章的最後,我們希望您更了解機器學習外,以及我們如何向攻擊者般為己身的利益應用機器學習。
一個進程表的資訊
  討論機器學習前,我們需要先著手於攻擊者如何處理資訊,我們認為攻擊者對於特定主機與網路的可用資訊收集上不到1%,僅使用不到3%的資訊做出判斷(別過介意百分比)。利用機器學習的名義來提升資料收集效率,僅會發現更多隱含的成本,沒有可見的利益。蒐集更多的資料並不是對攻擊者最好的辦法,攻擊者需要去提升他們的資料可用性。然而,因為文本輸出的特性,資料利用上不易。舉例來說,除了顯示特定程序、結構和使用者,還從下列程序表得到什麼?




  文本資料在描述兩程序表之間的差異性也是相對困難,更何況是在比較兩相異主機間的程序表?
  有個辦法,我們可以描述一個數據化的程序表,並在這表上可以導出一些簡單的數據資料:
l   33個程序
l   使用者與程序的比率為8.25
l   4個可觀察的使用者
  描述數據項目時,我們可以開始去分析差異比序,並且對項目分類。讓我們加入其他的程序表吧!

程序表A
程序表B
程序個數
33
157
程序個數/使用者
8.25
157
使用者個數
4
1
  檢視並排的這些數據,清楚的顯現了差異。我們可以評估程序表在特定的主機,無須完全掌握當前的執行中的程序。但現在看來似乎不是那麼的實用,但是已知程序表A是沙盒,程序表B不是。我們接著檢視下列4個新的程序表,哪個為沙盒?

程序表C
程序表D
程序表E
程序表F
程序個數
30
84
195
34
程序個數/使用者
7.5
84
195
8.5
使用者個數
4
1
1
4
  如何分辨呢?我們的方式是將每個欄位加總,然後求得每一台的平均值,平均在1以上為標記沙盒,反之為0者則標記為正常主機。
  看起似乎解決了。但是,這樣仍然太隨意了。因為在工作前,我們就已經知道哪個為沙盒了。
  你不但要正確地分類程序表,還得確保你事先不知情。倘若資料間使用相同的指標,我們就能應用機器學習去正確的歸類程序表。



低操作的機器學習
  機器學習使用數學方式嘗試取代人類學習。就像眾多連接的神經元、突觸與電子脈衝。類神經網路有節點、權重與啟動函數互相連接。透過反覆執行與微幅調整進行循環。人腦與類神經網路皆能夠進行調整來靠近至理想的輸出。實際上,機器學習嘗試用數學取代你的腦,兩者的網路操作方法相似。

  在生物上,一個電子脈衝為一個神經網路的開頭,他通過單一突觸時,也通過數個神經。電子脈衝的刺激從突觸被接收,無論該神經是否被激發。如此反覆地在部分神經間進行。
  在機器學習裡,一個輸入是進入類神經網路的程序,該輸入沿著鏈結權重進入節點,並通過激發函數。該激發函數的輸出無論是否激活該節點。如此的關聯循環輸出直至目標值,也可能受權重調整而導致錯誤。
  類神經網路大小為任意的。本文探索的網路有3輸入、3隱含層與1輸出。需要注意的是,關於更大的類神經網路意味著每個節點間有更多的連結數。每個連結代表著一個新增的運算,網路有更高的效率與準確性。此外,增加類神經網路的規模,並不會改變其數學上的運算方式,僅僅會改變的是計算的數量。
收集並準備資料
  收集一組資料組是相對容易的。優秀的郵件過濾器在沙盒中執行任何檔案的巨集,僅剩餘正常的主機。從沙箱或遠端系統得到的進程表,巨集將會收集並公布進程表以進行收集和處理。流程上,資料組需要被分析。程序數、程序對使用者的比率與獨立的程序數需要被計算並儲存。最後,每個項目在資料組需要再被正確的記上01的標籤。另一種狀況,巨集可以收集來自程序表的數據資料並呈現結果。對於操作目標,得選擇一個傾向的取得方式。
  我們還需要去做資料的轉換。使我們能更容易的比對所有程序表的總和、平均值。在這裡使用平均值是有問題的,極大或極小的程序表的值會導致平均值有顯著變化。因此我們有所改變,我們再次把大量的主機進行分類,引入易變性致我們的預期結果。這次,我們用了一些技巧擴增資料組(正常地),我們測試了skikit-learn(一種python機器學習套件)中所有的級別函數,進行去除均值和方差縮放。這裡重要的是,太過大或過小的值不再對分類產生易變性的影響。




A
B
C
D
E
F
程序數
-0.786
1.285
-0.836
-0.065
1.92
-0.770
程序數/用戶
-0.501
1.652
-0.663
0.521
0.846
-0.648
獨立程序數
0.812
-0.902
0.813
-0.902
-0.902
0.813
標籤
1
0
1
0
0
1
建構並訓練網路
  資料被應用在上述範例資料中,從資料組帶出。至此可以開始探討機器學習如何能幫助攻擊者偵測沙盒。為更上層樓,成功的命令類神經網路訓練,我們將重複地:
1.      引入各級別資料至類神經網路。
2.      運算激發函數的輸出。
3.      01(其標籤)的形式提供回饋予網絡。
4.      計算輸出予回饋間的差異。
5.      嘗試去更新4.步的差異的鏈結權重。
  有的人會對第3點感到疑惑,但這卻是個細微且重要的步驟。該步驟的任務比起我們先告知"A程序表"是一個沙盒的事實更為容易偵測。至此,A程序表的值將成為其他的參考點。一個類神經網路需要一個相近的參考點去指示預測何謂"錯誤"。
  我們使用skikit-learn訓練了3個模組在190個獨立程序,資料被分級甚至合併到3個地方。最後我們執行了最佳模型結果。當網路接收到未重複的進程表時,網路將(希望)能輸出準確的預測。
區分主機為01
以上述分類的可信度預測
  這裡可以找到類神經網路的代碼。我們選擇不去探究涉及數學,雖然我們寫上來了。如果你有眾多疑問可以寄件給我們。倘若有更強的興趣,我們極度推薦tariq Rashids”Make your own neural netwrok”

類神經網路武器化
  這次類神經網路的工作,是驗證我們的概念,於是我們寫了個巨集:
1.      收集程序表
2.      計算輸入(程序數、程序對使用者的比率與獨立的程序數)
3.      輸出值到伺服器並執行們透過神經網路的預測
4.      如果神經網絡預測到正常的主機、階段代碼則不做事。
  接著,我們上傳惡意檔案去線上惡意軟體掃描器(病毒、惡意軟體分析等等)並等待。我們還執行巨集在非沙盒環境(首次有突兀的回覆),在2分鐘後,相異的沙盒被巨集執行並輸出運算結果。透過神經網路執行回傳值得到3個準確的預測。



巨集回傳值(依序為正常、沙盒、沙盒)
巨集回傳值的回饋概率和分級
  從另外的邏輯看來,無論是否被應用在惡意軟體。我們概括得到的:
1.      從程序表得到的數據值
2.      建構那些值的資料組並且做出分級
3.      訓練一個類神經網路在資料組下成功分類該程序表是否為沙盒
4.      撰寫巨集以回傳需要的值
5.      寄送一些測資上傳,並應用回傳值去預測分類
結論
  希望這對攻擊者如何利用機器學習是一個不錯的介紹。我們能夠成功對陌生的沙箱進行分類。值得注意的是,在資料集中檢查並非靜態,且不需要利用到每個進程表的知識。對於樣式指標,我們創建的網絡可以匯入到Excel文檔中,並在客戶端進行檢查。
  無論類神經網路在何處被創建,他將毫無疑問的會為防禦安全煥然一新。從Embedded Network的惡意軟體到人為協助,有無止盡的可能性(並且令人興奮)。
致謝與資料來源
  最重要的,首先,我要感謝tariq Rashids的撰書”Make your own neural netwrok”。你想知道關於機器學習的事情,排除拼拼湊湊的數學。這一路走來,tariq Rashids也友善的回覆了我些許問題。
  其次,我感謝微軟的James McAffrey對於數學上的檢查與理智的建議。
  若本文引起你對機器學習的興趣,我再次推薦tariq Rashids的撰書”Make your own neural netwrok”作為起點。
這裡還有些協助我們的其他鏈結(歡迎你前往)
文章結束

沒有留言:

張貼留言