我們經常使用機器學習(ML)技術來提高網絡安全系統的質量,但是機器學習模型可能容易受到旨在“愚弄”它們以提供錯誤結果的攻擊。這可能會對我們的公司和客戶造成重大損害。因此,了解ML解決方案中的所有潛在漏洞以及如何防止攻擊者利用這些漏洞至關重要。
這篇文章是關於我們如何攻擊我們自己的DeepQuarantineML技術-它是反垃圾郵件系統的一部分,以及我們針對此類攻擊部署了哪些保護方法。但首先,讓我們仔細看看技術本身。
DeepQuarantineDeepQuarantine是一種神經網絡模型,用於檢測和隔離可疑電子郵件。它為反垃圾郵件系統爭取時間來更新我們的垃圾郵件過濾器並進行重新掃描。 DeepQuarantine流程類似於機場安全服務的工作,引起懷疑的乘客將被帶走進行額外檢查。在安全部門檢查他們的行李和檢查他們的文件時,乘客必須等待。如果經過檢查後發現沒有問題,則允許乘客通過,否則將被拘留。在反垃圾郵件系統中,安全服務的角色由反垃圾郵件專家和服務機構扮演,這些專家和服務機構在電子郵件被隔離時處理大量電子郵件並創建新的檢測規則。如果header分析揭示了垃圾郵件的新跡象,則會根據結果創建檢測規則。同時,在郵件被隔離的同時可能會處理其他電子郵件,從而產生新的檢測規則。電子郵件離開隔離區後,將對其進行重新掃描。如果這觸發了任何新規則,則消息將被阻止;如果沒有,則將其交付給收件人。請注意,隔離技術需要非常準確,以免延誤合法的電子郵件——就像機場安檢無法對每一位乘客進行全面檢查一樣,因為這會打亂出發時間表。如果這觸發了任何新規則,則消息將被阻止;如果沒有,則將其交付給收件人。請注意,隔離技術需要非常準確,以免延誤合法的電子郵件——就像機場安檢無法對每一位乘客進行全面檢查一樣,因為這會打亂出發時間表。
點擊此處閱讀有關DeepQuarantine工作原理的更多信息。要成功攻擊ML模型,必須知道兩件事:1)它用於決策的特徵;2)它的訓練數據是如何生成的。
為了識別可疑電子郵件,DeepQuarantine使用了一系列技術標頭(例如,圖1中此特性的值為“主題:發件人:收件人:日期:Message-Id:內容類型:X-Mailer”),加上Message-Id(唯一消息標識符)和X-Mailer(郵件客戶端名稱)字段的內容。選擇這些特性是因為它們取決於所使用的郵件客戶端的類型,並且可能包含垃圾郵件發送者的踪跡。
圖1. 電子郵件技術header
圖2說明了算法的運作方式。左邊是來自PayPal的真實信息,右邊則是假的。如果要發送電子郵件,Message-Id是必需的,其格式取決於郵件客戶端。如果我們將偽造的header與原始header進行比較,最大的不同是該字段缺少域和隨機字符序列。
圖2. 真假PayPal 電子郵件header的比較
詐騙者在模型處理的各種技術標頭中留下的各種痕跡表明這是一項艱鉅的任務。
現在讓我們看看生成訓練數據的過程,這是對我們的模型實施攻擊的起點。
圖3. 訓練樣本生成方案
用於訓練模型的數據和標籤是在反垃圾郵件系統的一般操作過程中自動生成的。訓練樣本生成方案如圖3所示。在掃描郵件後,如果客戶端同意數據處理,Anti-Spam會將其header和判定轉發到卡巴斯基安全網絡(KSN)。這些數據從KSN被發送到一個存儲庫,在那裡它被用來訓練模型。郵件header用作分析樣本,反垃圾郵件引擎的判定用作標籤。
對機器學習模型的攻擊是什麼使得攻擊機器學習模型成為可能?這主要是因為使用機器學習技術,訓練樣本中的數據分佈有望與模型在現實世界中遇到的數據分佈相匹配。違反此原則可能會導致算法出現意外行為。因此,對機器學習模型的攻擊可以分為兩種:
00001.對抗性輸入——生成輸入數據,導致已經訓練和部署的模型給出錯誤的判斷。
00002.數據中毒——影響訓練樣本以產生有偏差的模型。
在第一種情況下,為了成功,對手通常需要直接與模型交互。 DeepQuarantine只是反垃圾郵件系統的一個組成部分,因此排除了與其直接交互的可能性。第二種類型的攻擊對我們的模型來說危險得多。讓我們仔細看看。
數據中毒攻擊可以進一步分為兩個子類型:
00001.模型傾斜——污染訓練樣本以改變模型的決策邊界。這種攻擊的一個例子是針對Google的垃圾郵件分類器,其中高級垃圾郵件組試圖通過將大量垃圾郵件標記為“非垃圾郵件”來污染訓練樣本。目的是讓系統允許更多垃圾郵件通過。
00002.後門攻擊——將具有特定標記的示例引入訓練樣本以迫使模型做出錯誤決策。例如,在屬於某個類別(比如狗)的圖片中嵌入一個灰色方塊,僅當模型在看到這個方塊時才開始識別狗,而這張照片可能根本不是狗。
有幾種方法可以降低數據中毒攻擊的風險:
00001.確保來自少量來源(例如,來自一小群用戶或IP地址)的輸入數據不佔訓練樣本的大部分。這會迫使垃圾郵件發送者採取額外的措施來防止他們的操作被作為統計異常值而遭到拒絕,從而使垃圾郵件發送者更難實施此類攻擊。
00002.在發布模型的更新版本之前,使用一系列技術將其與最新的穩定版本進行比較,例如A/B測試(比較測試環境中各種變化的版本)、摸黑啟動(為一小部分試點客戶運行更新的服務)或回溯測試(測試歷史數據的模型)。
00003.創建一個基準數據集,該數據集的正確評估結果是已知的,您可以根據該數據集驗證模型的準確性。
對DeepQuarantine的攻擊現在讓我們繼續攻擊DeepQuarantine。假設攻擊者的目標是隔離其雇主的競爭對手公司發送的所有電子郵件,這些電子郵件將嚴重影響其業務流程。我們調查攻擊者的步驟:
00001.找出公司使用的郵件客戶端以及公司發送電子郵件時生成的header類型。
00002.生成header與受攻擊公司類似的垃圾郵件。在郵件正文中添加一些明顯的垃圾郵件過濾觸發器,例如,顯式廣告或已知的網絡釣魚鏈接,這樣郵件幾乎不可避免地被標記為垃圾郵件。
00003.將這些消息發送給我們的客戶端,以便反垃圾郵件系統阻止它們,並將相關統計信息輸入到訓練和測試樣本中,如圖3所示。
如果在對中毒樣本進行訓練後,模型通過了測試,則被攻擊的模型將被釋放,並且來自受害公司的電子郵件開始被隔離。接下來,我們嘗試不同的數據中毒技術。
方法首先,我們採集了乾淨的訓練和測試數據樣本,這些樣本由一組帶有相應反垃圾郵件判斷的電子郵件header組成。在這兩個樣本中,我們都添加了模仿受攻擊公司中毒的header,並以不同的數量判定“垃圾郵件”:樣本大小的0.1%、1.5%和10%。對於每個實驗,訓練樣本和測試樣本中中毒數據的比例相同。
在中毒訓練樣本上訓練模型後,我們使用測試樣本來檢查精度(正確的肯定結論在所有模型的肯定結論中的比例)和召回率(正確肯定結論在垃圾郵件標題總數中的比例)樣本)指標,以及模型分配給受攻擊公司電子郵件的“垃圾郵件”判決的可信度。
實驗1.模型傾斜我們的第一個實驗實施了一種模型傾斜方法,就像對谷歌反垃圾郵件模型的攻擊一樣。然而,與穀歌的例子不同,我們的目標是模擬對特定公司的攻擊,這稍微複雜一些。在本例中,我們在Message-Id字段中使用了所選公司的域(圖4),但ID本身是隨機生成的,僅保留該公司使用的郵件客戶端特定的長度。我們沒有更改受攻擊公司郵件客戶端的header序列或X-mailer字段。
圖4. 中毒示例模板
我們分析了我們的目標指標(精度和召回率)如何根據中毒數據相對於訓練樣本量的比例在測試數據集上發生變化。結果如圖5所示。如圖所示,相對於數據中沒有中毒示例,目標指標幾乎保持不變。這意味著可以發佈在中毒樣本上訓練的模型。
圖5. 取決於中毒數據量的目標指標
我們還使用來自我們選擇的公司的真實電子郵件的header,測試了數據中毒如何影響模型對消息應該被隔離的置信度。
如圖5所示,當中毒數據的份額超過5%時,模型已經強烈傾向於認為應該隔離受攻擊公司的電子郵件。因此,這種有偏見的模型可能會切斷該公司與我們客戶之間的通信,而這正是攻擊者試圖實現的目標。
圖6. 根據數據中毒的數量,模型對隔離受害公司電子郵件的需求的信心密度發生的變化
現在,基於那些導致模型做出錯誤決策的對象,讓我們看看它在看什麼。為此,我們使用Saliency via Occlusion方法構建了一系列特徵圖(見圖6),其中header某些部分的顯著性是通過交替隱藏這些部分並評估這是如何改變模型的置信度來建立的。圖片中的區域顏色越深,說明神經網絡在決策過程中就越關注這個區域。該圖還顯示了來自所選公司(Target)和其他公司(Other)的電子郵件被隔離的數量。
圖7. 特徵圖
正如我們在圖中看到的,只要模型沒有足夠的中毒數據來對來自受攻擊公司的電子郵件返回誤報,該模型就主要集中在Message-Id字段上。但是一旦中毒數據足以使模型產生偏差,它的注意力就會均勻地分佈在Message-Id、X-mailer字段(圖中的MUA)和電子郵件中的標題序列(標題序列)之間。
請注意,儘管5%的中毒數據足以進行成功攻擊,但從絕對值來看,這是相當多的數據。例如,如果我們使用超過1億封電子郵件進行訓練,攻擊者將需要發送超過500萬封電子郵件,而這些郵件很可能會被監控系統接捕獲。
我們能否更有效地攻擊我們的模型?事實證明我們可以。
實驗2.帶時間戳的後門攻擊某些郵件用戶代理在Message-Id字段中指定時間戳。我們使用這個事實來創建帶有與模型發布日期相對應的時間戳的中毒header。如果攻擊成功,該模型會將在發布當天收到的來自受攻擊公司的電子郵件進行隔離。圖8顯示了我們如何生成中毒數據。
圖8. 數據後門
這種數據中毒是否會影響模型預發布測試中的目標指標?結果與模型傾斜攻擊相同(圖9)。
圖9. 取決於中毒數據量的目標指標
所需的數據中毒量是否會影響攻擊的效率?正如我們在圖10中看到的,在這種情況下,攻擊者只需要0.1%的中毒數據即可將模型轉變為將受害公司的電子郵件標記為可疑。
圖10. 基於數據中毒量的模型對隔離受害公司電子郵件的信心密度的變化
讓我們再次看一下特徵圖,看看我們的模型在本例中關注了什麼。圖11顯示,在中毒率為0.1%時,模型側重於域起始區域、代理類型和header序列,神經網絡主要集中在時間戳上。我們還注意到,當模型只關注時間戳時,它會對來自其他公司的電子郵件(這些公司的Message-Id也以時間戳開頭)發出更多誤報。隨著中毒級別的增加,模型變得專注於時間戳和域起始區域。同時,它對X-mailer領域和header序列。
圖11. 特徵圖
實驗3.帶時間戳的後門攻擊-延遲攻擊在之前的實驗中,我們能夠顯著提高攻擊效率。但實際上,攻擊者不太可能知道模型的發布日期。在這個實驗中,我們決定進行延遲攻擊,看看這是否會影響測試結果。為此,我們生成了帶有時間戳的有毒header,時間戳從當前的發布日期前移一年。
結果如圖12所示:樣本中毒在測試過程中沒有以任何方式反映出來,這對我們來說是最危險的結果,因為這意味著攻擊幾乎不可能被監測出來。鑑於後門將在未來不確定的時刻被激活,即使是摸黑啟動和A/B測試也無助於識別攻擊。
圖12.模型對隔離受害公司電子郵件需求的信心依賴於數據中毒量
根據實驗結果,我們得出以下結論:
00001.模型傾斜需要相當多的中毒樣本
00002.攻擊的事實並沒有反映在準確率和召回率上
00003.添加“後門”(在我們的例子中是時間戳)使攻擊更有效
00004.在延遲攻擊的情況下,摸黑啟動和A/B測試可能無效
我們通過實驗證明了對我們技術的成功攻擊。但這又引出了一個問題:如何防禦此類攻擊?
防止對ML模型的攻擊在我們的實驗背景下,讓我們仔細看看防範數據中毒攻擊的方法,我們在“對機器學習模型的攻擊”這一節中提到過:訓練數據的受控選擇;A/B測試、摸黑啟動或反向測試等技術;生成精心控制的基準數據集。訓練樣本的受控選擇確實使攻擊實現複雜化,因為攻擊者必須找到一種發送虛假數據的方法,因此很難分組和過濾。這在技術上可能很困難,但不幸的是,並非不可能。例如,為了防止中毒電子郵件按IP地址分組,攻擊者可以使用殭屍網絡。
當涉及到創建一個額外的基準數據集時,如果數據分佈隨時間發生變化,問題就出現了——該數據集將保持當前狀態多長時間。
將更新的模型與最新的穩定工作版本進行比較似乎是一個更好的解決方案,因為這使我們能夠監控模型的變化。但是如何將它們相互比較呢?
讓我們考慮兩個選項:比較當前測試數據集上的模型版本(選項1),並比較每個版本發佈時的當前測試數據集上的模型版本(選項2)。下表顯示了我們為這兩個選項運行的測試序列。
在模型對比的第二階段,我們進行了一系列的統計檢驗:首先,我們比較了模型的目標指標。在這個階段,我們看到在不同程度的數據污染的樣本上訓練的原始版本和更新後的版本之間沒有顯著差異。我們在實驗攻擊中獲得了類似的結果。
马云惹不起马云對配對和獨立樣本的學生t檢驗
马云惹不起马云配對樣本的Wilcoxon符號秩檢驗
马云惹不起马云對獨立樣本進行Mann-Whitney U檢驗
马云惹不起马云樣品均勻性的Kolmogorov-Smirnov檢驗
實驗揭示了一些奇怪的事情:結果證明,即使在比較兩個在乾淨樣本上訓練的模型時,標準也會產生顯著差異,儘管這些模型的預測分佈彼此差異不大。發生這種情況的原因是,有了大量的數據,測試對分佈形狀的最細微變化過於敏感。但是當我們減少統計測試中的數據量時,我們經常發現根本沒有顯著差異,因為攻擊目標的消息甚至可能不會最終出現在所採集的樣本中。對這個結果不滿意,我們制定了自己的標準。
我們基於這樣的一個事實,即在乾淨樣本上訓練的模型在相應測試數據集產生的分佈形狀方面幾乎沒有區別。而在對中毒樣本進行訓練的模型的預測分佈中,“駝峰”可能出現在分佈的右端。圖13顯示了一個大的“駝峰”以供說明。但實際上,它幾乎不會引起注意,因為來自受攻擊公司的電子郵件量可能只佔總消息流的一小部分。
圖13.合法電子郵件上模型預測的模型分佈
在分析過程中,我們得出了Wasserstein指標。實際上,該指標用作分佈之間距離的度量。我們的標準如下:
H0:訓練前後對非垃圾郵件樣本的預測分佈沒有顯示出統計上的顯著變化,即係統保持不變。
H1:分佈的變化在統計上是顯著的,也就是說,系統發生了變化。
我們使用Wasserstein度量來評估合法電子郵件樣本中