知物由學 | 未來安全隱患:AI的軟肋——故意欺騙神經網絡
歡迎訪問網易雲社區,了解更多網易技術產品運營經驗。
“知物由學”是網易雲易盾打造的一個品牌欄目,詞語出自漢·王充《論衡·實知》。人,能力有高下之分,學習才知道事物的道理,而後才有智慧,不去求問就不會知道。“知物由學”希望通過一篇篇技術幹貨、趨勢解讀、人物思考和沈澱給你帶來收獲的同時,也希望打開你的眼界,成就不一樣的你。當然,如果你有不錯的認知或分享,也歡迎通過郵件([email protected])投稿。
以下是正文:
對於很多計算機程序,在黑客眼中,他們不是想享受這些程序提供的服務,而是想如何利用這些程序獲得一些非法的收入。帶黑帽子的黑客通常會利用程序中最微小的漏洞進入系統,竊取數據並造成嚴重破壞。
100%真正的黑客
但由深度學習算法驅動的系統應該可以避免人為幹擾吧?黑客如何通過神經網絡訓練TB量級的數據?
但,事實證明,即使是最先進的深層神經網絡也很容易被愚弄。用一些小技巧,你可以強迫神經網絡顯示你想要的任何結果:
我修改了這張貓的圖片,以便它被認為是烤面包機。
因此,在你啟動一個由深度神經網絡打造的新系統之前,你需要了解如何攻破它們以及如何保護自己免受攻擊。
神經網絡作為安全警衛
假設我們運行了一個像eBay這樣的網站,在我們的網站上,我們希望阻止人們銷售違禁物品,例如活動物甚至一些野生的保護動物。
如果你擁有數百萬級別用戶,那麽實行這些規則就很困難。你可以聘請數百人手工審查每一個拍賣物品,但這意味著很高的成本。相反,我們可以使用深度學習來自動檢查違禁物品的拍賣照片,並標記違反規定的拍賣照片。
第一步,我們需要從這個場景中帶著問題走出來,我們可以發現,這個問題其實就是一個典型的圖像分類問題。為了達到目的,我們將訓練一個深層卷積神經網絡,告訴什麽是違禁物品什麽是合法的物品,然後我們將它運行我們網站上,來保證網站規則能夠有效的實施。
首先,我們需要一個過去拍賣清單的數千個圖像的數據集。我們需要合法和違禁物品的圖像,以便我們可以訓練神經網絡來區分它們:
為了訓練神經網絡,我們使用標準的反向傳播(BP)算法。我們通過一個圖片,傳遞該圖片的預期的結果,然後遍歷神經網絡中的每個圖層,稍微調整它們的權重以使它們在為該圖片生成正確輸出方面表現的更好一些:
我們用數千張照片重復數千次,直到模型能夠準確地產生正確的結果。最終我們可以打造一個可靠的用於圖像分類的神經網絡:
註意:閱讀下文你需要了解卷積神經網絡的原理,如果你想了解卷積神經網絡如何識別圖像中的對象,請參閱第3部分[1]。
但事情並不像看起來那麽簡單...
卷積神經網絡是用於圖像分類的最受歡迎的模型。無論它們出現在圖像中的哪個位置,它們都可以識別復雜的形狀和圖案。在許多圖像識別任務中,它們的性能可以超過常人的判斷。
有了這樣的強大的模型,將圖像中的幾個像素更改為更暗或更亮應該不會對最終預測產生很大影響吧?當然,它可能會稍微改變最終的預測,但它不應該將圖像從“違禁”轉換為“合法”。
我們期望的是:對輸入照片的小改動只會對最終預測產生微小的變化。
但在2013年的一篇名為神經網絡的神奇屬性[2]的論文中,人們發現這並非總是如此。如果你確切的知道改變那些像素點可以使圖像最大可能的發生改變,你就可以故意迫使神經網絡對給定的圖片做出錯誤的預測,而圖片的外觀改變的並不是很多。
這意味著我們可以有意地制作一張圖片,該圖片顯然是一種被禁止的項目,但卻完全愚弄了我們的神經網絡:
為什麽會這樣?機器學習分類器的工作原理是找出它試圖分辨的東西的分界線。以下是在圖表上顯示的一個簡單的二維分類器的示例,該分類器將紅點(合法)與綠點(違禁)分開:
現在,該分類器的可以做到100%的正確率。找出一條線將紅點和所有綠點完美的分開。
但是,如果我們想誘使它將一個紅點誤分類為綠點,該怎麽辦?
如果我們在邊界旁邊的紅點的Y值上添加一小部分,我們可以將它簡單地推到綠色區域:
因此,要欺騙一個分類器,我們只需要知道從哪個方向來推動點越過線。如果我們不想過於狡猾,理想情況下我們會盡可能少地提出這一點,但理想總歸是理想情況,黑客通常不會再理想情況下進入。
在使用深度神經網絡的圖像分類中,我們所分類的每個“點”是由數千個像素組成的整個圖像。這給了我們數以千計的可能值,我們可以通過調整這些數值來突破決策線。如果我們確保以對人類來說不太明顯的方式調整圖像中的像素,我們可以欺騙分類器而不會使圖像看起來被改動。
換句話說,我們可以對一個物體進行真實拍攝,並且非常輕微地改變像素,以便圖像可以完全欺騙神經網絡,使其認為圖像是其他東西:
把一只貓變成烤面包機,基於網絡的Keras.js演示的圖像檢測結果
如何欺騙神經網絡
我們已經討論過訓練神經網絡來分類照片的基本過程:
利用照片訓練神經網絡。
檢查神經網絡的預測,看看其性能。
使用反向傳播調整神經網絡中每層的權重,使最終預測逐漸接近正確答案。
用幾千張不同的訓練照片,重復步驟“1-3”。
但是,如果不是調整神經網絡層的權重,而是調整輸入圖像本身,直到我們得到我們想要的答案為止呢?
那麽讓我們把已經訓練好的神經網絡再訓練一遍。但讓我們使用反向傳播來調整輸入圖像而不是神經網絡圖層:
以下是新算法:
利用照片訓練神經網絡。
檢查神經網絡的預測,看看其性能。
使用反向傳播調整使用的照片,使最終預測逐步接近我們想要得到的答案。
用相同的照片重復步驟“1-3”幾千次,直到網絡給到我們理想的答案。
在這之後,我們將擁有一個圖像,可以在不改變神經網絡內部的任何東西的情況下愚弄神經網絡。
唯一的問題是,通過隨意調整單個像素,對圖像的更改可以太過明顯,以至於你會看出它們。他們會出現變色斑點或波浪區域:
你可以看到貓周圍的綠色變色斑點和白色墻壁上的波浪圖案。
為了防止出現這些情況,我們可以為我們的算法添加一個簡單的約束。被黑客入侵的圖像中的任何一個像素都不能從原始圖像中改變很多,比如0.01%。這迫使我們的算法以一種愚弄神經網絡的方式來調整圖像,而不會讓它看起來與原始圖像太不同。
下面是我們添加該約束時生成的圖像的樣子:
即使這幅圖像看起來與我們之前的一樣,它仍然愚弄了神經網絡!
Let’s Code It!
首先我們需要一個預先訓練的神經網絡來愚弄。我們不是從頭開始訓練,而是使用Keras,Keras是深受歡迎的深度學習框架,它帶有幾個預先訓練好的神經網絡[3]。我們將使用Google的Inception v3深度神經網絡的副本,該網絡已經過預先訓練,可以檢測1000種不同類型的對象。
Keras中的基本代碼使用這個神經網絡來識別圖片中的內容。在運行它之前,確保你已經安裝了Python 3和Keras(詳細代碼獲取見文末):
當我們運行它時,它正確地檢測到波斯貓的形象:
$ python3 predict.py
This is a Persian_cat with 85.7%confidence!
現在讓我們開始調整圖像,直到它能夠愚弄神經網絡,讓神經網絡認為這只貓是一個烤面包機。
Keras中沒有內置的方式來訓練輸入圖像,所以我不得不手動編碼訓練步驟。
代碼如下(詳細代碼獲取見文末):
圖為部分代碼
如果我們運行它,它最終會生成一個可以欺騙神經網絡的圖像:
$ python3 generated_hacked_image.py
Model‘s predicted likelihood that theimage is a toaster: 0.00072%
[ .... a few thousand lines of training....]
Model‘s predicted likelihood that theimage is a toaster: 99.4212%
註意:如果你沒有GPU,則可能需要幾個小時才能運行。如果你確實已經使用Keras和CUDA正確配置了GPU,則運行時間不應超過幾分鐘。
現在讓我們再次測試通過原始模型運行鑒別這張經過技術更改的圖片:
$ python3 predict.py
This is a toaster with 98.09%confidence!
我們成功的欺騙了神經網絡,認為貓是烤面包機!
我們可以用黑客技術生成圖像做些什麽呢?
我們這樣篡改圖像被稱為“產生敵對的例子”。我們故意制作一段數據,以便機器學習模型將其誤分類。這是一個巧妙的技巧,但為什麽在現實世界中這很重要?
研究表明,這些被黑客篡改的圖像具有一些令人驚訝的特性:
即使將它們打印在紙上,被篡改的圖像仍然可以欺騙神經網絡!因此,你可以使用這些被黑客篡改的圖像來欺騙物理相機或掃描儀,而不僅僅是直接上傳圖像文件的系統。
2.欺騙一個神經網絡的圖像往往也會欺騙其他神經網絡,如果他們接受類似數據的訓練,就會完全不同的設計。
所以我們可以用這些被黑客篡改的圖片做很多事情!
但是,我們如何創建這些圖像仍然存在很大的局限性!因為我們要想攻擊就需要直接訪問神經網絡本身。因為我們實際上生成圖片的過程,就需要神經網絡的參與,所以我們需要它的一個副本。在現實世界中,沒有公司會讓你下載他們訓練的神經網絡的代碼,所以這意味著我們不能攻擊他們嗎?
NO!研究人員最近表明,你可以訓練自己的神經網絡來反映另一個神經網絡[4],通過探測它來了解它的行為。然後你可以使用你的替代神經網絡來生成被黑客入侵的圖片,這些圖片仍然會欺騙原始網絡!這被稱為黑盒攻擊。
黑盒攻擊的應用是無限的,這裏有一些例子;
自動駕駛汽車看到停車標誌誤認為綠燈,這可能會導致車禍!
欺騙內容過濾系統讓非法內容通過。
欺騙ATM檢查掃描儀,例如支票上的筆跡。
而這些攻擊方法並不僅限於圖像。你可以使用相同類型的方法來處理其他類型數據的分類器。例如,你可以欺騙病毒掃描程序將你的病毒識別為安全代碼!
我們如何保護自己免受這些攻擊?
所以現在我們知道有可能存在欺騙神經網絡(以及其他的機器學習模型)的事情,我們又該如何防禦呢?
簡短的回答是,沒有人知道如何完美防禦。防止這些類型的攻擊仍然是一個正在進行的研究領域。了解最新該領域發展的最好方法是閱讀Ian Goodfellow和Nicolas Papernot的cleverhans博客,他們是該領域最有影響力的兩位研究人員。
但是到目前為止,我們知道一些關於這方面的情況:
如果你擁有大量被黑客篡改的的圖像,並將其納入未來的訓練數據集中,這似乎會使你的神經網絡更能抵禦這些攻擊。這就是所謂的對抗訓練,這可能是現在考慮采用的最合理的防禦方法。
還有另一種有效的方法稱為Defensive Distillation[5],你可以訓練第二個模型來模擬你的原始模型,但是這種方法是全新的而且相當復雜的。
幾乎所有研究人員迄今為止嘗試過的其他想法都未能有效預防這些攻擊。
由於我們還沒有最終防禦方案,所以我們應該考慮到底如何確定使用神經網絡的場景,以便減少這種攻擊會對你的業務造成損害的風險。
雲安全(易盾)基於網易20年技術積累及安全大數據,為互聯網各行業提供反垃圾、驗證碼、註冊保護、登錄保護、活動反作弊、應用加固、DDoS 防護等整體安全解決方案,全程提供完善的技術支持,助力產品建立安全防護體系。
相關文章:
【推薦】 Persistent and Transient Data Structures in Clojure
【推薦】 從golang的垃圾回收說起(上篇)
知物由學 | 未來安全隱患:AI的軟肋——故意欺騙神經網絡