<video id="zjj55"><delect id="zjj55"></delect></video>

<big id="zjj55"><listing id="zjj55"><del id="zjj55"></del></listing></big>

<menuitem id="zjj55"><delect id="zjj55"><pre id="zjj55"></pre></delect></menuitem>

<output id="zjj55"></output>
<video id="zjj55"></video>

<menuitem id="zjj55"></menuitem>

    <video id="zjj55"><listing id="zjj55"></listing></video>

    <menuitem id="zjj55"></menuitem>
    <output id="zjj55"><delect id="zjj55"><pre id="zjj55"></pre></delect></output>

    <menuitem id="zjj55"></menuitem>
    <menuitem id="zjj55"></menuitem>

        <big id="zjj55"></big>
          1. 移動端
            訪問手機端
            官微
            訪問官微

            搜索
            取消
            溫馨提示:
            敬愛的用戶,您的瀏覽器版本過低,會導致頁面瀏覽異常,建議您升級瀏覽器版本或更換其他瀏覽器打開。

            專家教你利用深度學習檢測惡意代碼

            來源:嘶吼RoarTalk 2017-12-29 09:37:41 深度學習 惡意代碼 金融安全
                 來源:嘶吼RoarTalk     2017-12-29 09:37:41

            核心提示目前的反病毒和惡意軟件檢測產品,一般采用的是基于特征的方法,它們借助人工設定的規則集來判斷某軟件是否屬于某種已知的惡意軟件類型集合。

              當前,惡意軟件的檢測已經成為全社會關注的網絡安全焦點,因為許多時候,單個惡意軟件就足以導致數百萬美元的損失。目前的反病毒和惡意軟件檢測產品,一般采用的是基于特征的方法,它們借助人工設定的規則集來判斷某軟件是否屬于某種已知的惡意軟件類型集合。通常來說,這些規則是具有針對性的,即使新出現的惡意代碼使用了跟原來的惡意代碼相同的功能,檢測軟件通常也檢測不出來。

              所以,這種方法是無法令人滿意的,因為大部分情況下二進制文件都是非常獨特的,或者說是以前從未見過的,并且,這個世界上每天都有數百萬個新的惡意軟件樣本被發現。所以,我們需要開發一種能夠適應日新月異的惡意軟件生態系統的檢測技術,而機器學習看起來非常有希望滿足我們這一需求。事實上,一些初創公司和老牌安全公司早就開始著手構建基于機器學習的防御系統了。為了獲得高質量的防御系統,這些公司通常都需要在特征工程和分析方面花費大量財力和精力。然而,如果我們是否能夠在無需借助特征工程的情況下構建反病毒系統呢?果真如此的話,我們就能將同一系統部署到不同的操作系統和硬件上檢測惡意軟件。在我們最近發表的研究論文中,我們的研究成果向這個目標邁出了堅實的一步。

              本文引入了一種人工神經網絡,經過適當的訓練之后,只需要輸入Windows的可執行文件的原始字節序列,它就能區分該文件是良性的,還是惡意的。這種方法的優點如下所示:

              不需要手工構建特征或編譯器方面的知識。這意味著訓練好的模型對于惡意軟件的變種具有普適性和魯棒性。

              計算的復雜度與序列長度(二進制文件大?。┏示€性關系,這意味著推斷是快速的,所以能夠用于大型的文件。

              能夠從二進制文件中找出對于取證分析來說非常重要的代碼段。

              這種方法也適用于新出現的文件格式、編譯器和指令集架構:只需提供相應的訓練數據即可。

              我們也希望通過本文向大型機器學習社區表明,從原始字節序列中檢測惡意軟件不僅具有得天獨厚的優勢,同時也面臨許多前所未有的挑戰,所以,這是將是一片肥沃的研究領域。

              深度學習在惡意軟件檢測中所面臨的挑戰

              最近,神經網絡在計算機視覺、語音識別和自然語言處理方面取得了一系列的成功,當然,成功的原因是多方面的,其中的一個因素就是神經網絡具有從諸如像素或單個文本字符之類的原始數據中學習特征的能力。受到這些成功的啟發后,我們開始利用可執行文件的原始字節作為數據來神經網絡訓練,看看它們能否正確判斷給定的文件是否為惡意軟件。如果這一方法可行的話,必將極大地簡化惡意軟件檢測工具,提高檢測的準確性,并能夠找出對于檢測惡意軟件卻非常重要卻不很顯眼的那些特征。

              然而,與其他任務相比,深度學習在惡意軟件識別領域還面臨著一些挑戰和不同之處。對于Microsoft Windows Portable Executable(PE)惡意軟件,這些挑戰包括:

              將每個字節作為輸入序列中的一個單元來處理的話,就意味著我們需要處理時間步長為200萬個左右的序列分類問題。據我們所知,這遠遠超過了之前所有基于神經網絡的序列分類器的輸入的長度。

              惡意軟件中的字節包含的信息具有多態性。上下文中的任何特定字節既可以表示為人類可讀的文本,也可以表示為二進制代碼或任意對象(如圖像等)。此外,其中的某些內容可能是經過加密處理的,這樣的話,它們對神經網絡來說基本上就是隨機的。

              在函數級別上面,二進制的內容可以任意重新排列,但由于函數調用和跳轉指令的存在,所以這些函數之間必定存在復雜的空間關系。

              在本文所探討的范圍內,我們對序列分類做出了一定的貢獻。音頻是與序列長度關系最為緊密的一個領域。諸如WaveNet之類的復雜神經網絡,雖然它們使用音頻的原始字節作為其輸入和目標輸出,但是,它的序列分析所面臨的時間步也只不過是數以萬計而已,與我們的惡意軟件檢測問題相比要小兩個數量級。

              對于常用于自然語言處理和音頻處理領域的神經網絡來說,當我們使用包含數百萬的時間步的序列數據作為訓練網絡參數的輸入時,必將面臨重大的實際挑戰。其中的原因是,各網絡層中的激活函數必將占用大量的內存空間。例如,假設我們有一個步長為200萬的序列,如果該序列的原始字節用32位浮點類型的300維可訓練嵌入層來表示的話,那么僅僅輸入數據就需要大約2.4GB的內存。如果它被傳遞到具有濾波器大小為3和濾波器數量為128的保持長度不變的(length-preserving)一維卷積層的話,則單獨這一層的激活函數就又需要1GB的內存。請記住,這里是將單個序列輸入到單層的情形,而通常情況下,神經網絡訓練過程中每次輸入的是一個minibatch。

              就我們的情形而言,將序列分解成單獨處理的子序列是沒有用的,因為惡意軟件的指標可能是稀疏的,并分布在整個文件中,所以,如果將訓練文件的全局標簽映射到子序列的話,必將會被由此引入的噪聲所淹沒。此外,由于訓練信號非常弱,所以為判別性特征非常稀疏的輸入序列的所有兩百萬個時間步建立一個唯一的標簽就成為一個極具挑戰性的機器學習問題。

              我們的解決方案

              為了解決這個問題,我們嘗試了各種不同的神經網絡體系結構。同時,為了迎接上面提到的挑戰,我們嘗試了一些不尋常的架構和參數選擇方法。在尋找性能更好的體系結構的時候,我們一方面要增加模型中訓練參數的數量,同時還要讓激活函數的內存占用量盡量少,所以,這要求我們在兩者之間取得平衡,從而確定出合適的最小批量大小,以便不僅讓訓練時間滿足實際要求,同時,還能讓訓練過程收斂。

              在設計網絡模型時,我們要努力爭?。?/p>

              計算量和內存用量能夠根據序列長度而高效地擴展

              在檢查整個文件的時候能同時考慮到本地和全局上下文

              在分析標記為惡意軟件的時候能夠提供更好的解釋能力

            專家教你利用深度學習檢測惡意代碼

            圖1 惡意軟件檢測網絡的體系結構

              結果發現,表現最好的模型在體系結構方面,不但具有更少的訓練參數(134,632),同時還具有更少的網絡層數,具體如圖1所示。

              我們能夠通過使用門控卷積體系結構和可訓練的輸入字節的嵌入向量表示來最大化網絡的可訓練參數數量來實現了上面的第一個目標。在門控體系結構中,對于每個卷積層,都提供了一個使用sigmoid激活函數的副平行卷積層。然后,將這兩個平行層的輸出進行逐元素相乘,并將結果傳遞給非線性的reLU激活單元。這樣的話,sigmoid卷積層就會過濾掉reLU卷積層所允許的那些信息,使得該體系結構能夠以有效的方式為模型的特征表示增加額外的容量。

              我們通過使用更大的步幅和更大的卷積濾波器大小來控制卷積層激活單元所占用的內存單元數量。從表面上看,這些選擇似乎會降低模型的準確性,然而我們在實驗中發現,更精細的卷積和更小的步幅并沒有帶來更好的性能。

              我們在卷積層后面添加了全局最大池化層,從而實現了第二個目標。對于網絡的這項功能,一種解釋方法是,門控卷積層能夠識別惡意軟件的本地指標,對全連接層最大池化處理后,使得系統能夠評估整個文件中這些指標的相對強度,從而找出重要的全局組合。

              根據針對幾種架構的測試結果來看,它們都具有過度擬合的傾向??紤]到必須使用單一損失函數來學習大型輸入特征空間的良性/惡意軟件分類,這種情形并不奇怪。我們發現懲罰全連接層的隱藏狀態激活函數之間的相關性,詳細介紹請參考 [Cogswell et al. 2016],是最有效的調整形式。更加有趣的是,我們發現,常用的批正則化操作(batch – normalization)實際上妨礙了模型的收斂和泛化。至于出現這種情況的具體原因,請參閱論文的第5.3節。

              訓練數據和訓練方法

              對于這個神經網絡,我們采用了兩個數據集進行訓練和驗證。我們的第一組數據,即A組,可以從公開的網絡上面下載。良性數據是從全新安裝的Microsoft Windows系統上面收集來的,其中包含一些常用應用程序;惡意軟件取自VirusShare樣本庫。其中,A組包含43,967個惡意文件和21,854個良性文件。第二組,也就是B組,是由行業防病毒合作伙伴提供的,這些文件都是從現實中的計算機上搜集到的,B組包含400,000個獨立的文件,其中良性和惡意文件各占一半。同時,B組還包括一個由74,349個文件組成的測試集,其中4萬個文件是惡意的,其余的文件都是良性的。

              我們發現,在對A組進行訓練的過程中,會產生嚴重的過擬合現象,導致訓練好的模型的功能變成識別某個文件是否“來自微軟”,但是無法判斷某個文件是否是“良性的”。利用A組數據訓練的模型,無法推廣到B組數據。但是,我們發現,通過B組數據訓練的模型可以順利推廣到A組數據上面。因此,我們通過B組數據來訓練模型,然后利用A組和B組數據來測試模型。這樣做的好處是,我們的模型可以獲得更好的泛化能力,因為這些數據來自不同的源。我們對于模型在A組數據上面的測試性能更感興趣,畢竟模型是在B組數據上面進行的訓練,當然,我們希望模型在兩個測試集上具有相似的性能,這樣就能表明所學的特征是非常有用的。

              另外,在我們的實驗后期,我們收到了來自B組同源的更大的訓練數據集,其中包含2,011,786個獨立的二進制文件和1,011,766個惡意文件。

              為了讓模型盡快收斂,可以在訓練網絡的時候增加batch的大小,這個方法非常有效。由于網絡激活函數需要占用大量的內存,這就需要使用數據并行的模型訓練方式。在我們的試驗中,使用的是含有8個GPU的DGX-1系統,當利用含有400,000個樣本的B組訓練集以數據并行的方式訓練這個模型的時候,如果8個GPU上的計算單元和內存“火力全開”的話,完成一輪訓練需要大約16.75小時,訓練過程共計需要完成10輪。如果使用含有兩百萬個樣本的訓練集的話,使用同樣的系統,則需要花費一個月的時間。

              實驗結果

              在評估模型性能的時候,最關鍵的指標是AUC。這是因為對惡意軟件進行分類的時候,我們可以通過模型對二進制文件進行排隊,實現惡意文件和良性文件的隔離,同時還可以通過人工分析給出優先級評分。較高的AUC分值(接近1)就意味著已經將大多數惡意軟件成功地排在了大多數良性文件的前面。所以,取得高分值的AUC是非常重要的,因為惡意軟件分析專家通過手工方式分析單個二進制文件所需時間可能會超過10個小時。AUC還有一個好處,就是可以對模型在兩個具有不同數量的良性和惡意樣本的測試數據集上的性能進行比較。

              表1顯示了我們的模型與文獻中表現最好的模型之間的性能比較。第一個模型使用原始字節n-gram作為邏輯回歸模型的輸入特征[Raff et al. 2016]。第二個模型將一個淺層的全連接的神經網絡用于從文件PE-Header中提取字節n-gram[Raff et al. 2017]。在表1中,我們用粗體來顯示最佳結果。

            專家教你利用深度學習檢測惡意代碼

            表1:利用小樣本(400,000個樣本)和大樣本(200萬個樣本)的B組訓練集進行訓練后,我們的惡意軟件檢測模型在A組和B組測試集上面的性能表現。

              通過上面的數據不難看出,我們的模型在A組上面的表現最佳,在B組上面的表現次之。但是,當使用多達200萬個文件的訓練集進行訓練時,我們發現,我們的模型的性能得到了進一步的提升,在兩個測試集上都表現出了最佳的性能,但是基于字節n-gram的模型的性能反而出現了下降。這表明在字節n-gram模型中存在脆弱性和過度擬合的傾向。

              模型的實用性

              在本文中,我們還提供了在實驗中關于模型的平衡測試準確性的報告,也就是說,它們能夠區分良性和惡意軟件文件,并給予每個文件同等的重要程度。雖然我們的模型在這個指標上面表現不錯,但它并不一定代表模型在現實世界中的性能。惡意軟件檢測系統具有各種不同的使用場景。對于大容量文件分類,吞吐量是最重要的,這意味著對誤報的容忍度可能會降低。在其他場景中,誤報可能是可以接受的,以獲得高靈敏度;換句話說,真正的惡意軟件很少被“放過”。

              但不論是哪種情況,對于檢測的結果,都需要對潛在惡意軟件進行某種形式的深入分析,通常由惡意軟件分析專家來完成這項分析任務。所以,我們希望自己的神經網絡對分類的結果具有一定的可解釋性,以節約分析師的精力和時間。本文的思想是受到[Zhou et al. 2016]論文中的類激活映射(CAM)技術的啟發而獲得靈感的。對于良性和惡意軟件中的每一個類別,我們都會為卷積層中最活躍的應用位置上每個過濾器的相對貢獻生成一個映射。您可以將其視為找出哪些區域對良性或惡意軟件分類貢獻最大。我們稱之為改進型稀疏-CAM,因為這里使用全局最大池化而不是平均池化技術,所以自然會得到稀疏的激活函數映射。圖2為讀者詳細展示了稀疏-CAM的示意圖。

            專家教你利用深度學習檢測惡意代碼

            圖2 稀疏-CAM示意圖

              通過閱讀已經發表的相關論文,我們發現,對于字節n-gram模型來說,幾乎所有的判別性信息都是從可執行文件的頭部中取得的。這意味著字節n-gram模型通常不使用文件的實際可執行代碼或數據段作為判別性特征。表1中的結果表明,在我們的測試中,可以訪問整個可執行文件的模型比僅限于文件頭的模型具有更高的分類準確性。

              我們的惡意軟件分析專家對224個隨機選取的二進制文件的稀疏CAM進行分析的結果顯示,在我們的模型獲取的最重要的特征中,有39-42%的特征位于文件頭之外。特別是,我們發現可執行代碼和數據中都含有判別性特征。

            專家教你利用深度學習檢測惡意代碼

            表2:來自文件各部分的重要特征,這些都是通過稀疏-CAM映射到PE文件輸出的非零區域確定出來的。

              小結

              本文表明,神經網絡無需借助昂貴和不可靠的特征工程就能學會如何區分良性和惡意的Windows可執行文件。這樣一來,它不僅能夠在進行分類時取得較高的AUC得分,還能夠避免普通防病毒和惡意軟件檢測系統所面臨的諸多問題。

              對程序的字節級的理解,其應用范圍非常廣泛,而非僅限于惡意軟件的分類,其他應用領域還包括靜態性能預測和自動代碼生成等。但是,要想實現這一目標,需要批判性思考如何減少所需的內存量,以及哪些類型的神經網絡架構能夠更好地捕捉以二進制形式表示的信息的各種模式。

              我們希望這項工作能夠鼓勵更多的機器學習社區來關注惡意軟件檢測,因為這一領域面臨著許多獨特的挑戰,例如極長的序列和稀疏的訓練信號,所以,對于研究人員來說,這將是一片沃土。眾所周知,深度學習已經在圖像、信號和自然語言處理方面取得了一些驚人的成功和進步。如果將其擴展到諸如惡意軟件檢測這樣完全不同的領域,可以幫助我們從不同角度更好地理解了這些工具和學習方法,因為有些方法并不是在所有新的數據和問題領域都同樣適用,例如batch正則化。同時,這也能夠幫助我們進一步了解神經網絡的普適性。

            人妻精品一区二区三区_好紧好湿好硬国产在线视频_亚洲精品无码mv在线观看_国内激情精品久久久

            <video id="zjj55"><delect id="zjj55"></delect></video>

            <big id="zjj55"><listing id="zjj55"><del id="zjj55"></del></listing></big>

            <menuitem id="zjj55"><delect id="zjj55"><pre id="zjj55"></pre></delect></menuitem>

            <output id="zjj55"></output>
            <video id="zjj55"></video>

            <menuitem id="zjj55"></menuitem>

              <video id="zjj55"><listing id="zjj55"></listing></video>

              <menuitem id="zjj55"></menuitem>
              <output id="zjj55"><delect id="zjj55"><pre id="zjj55"></pre></delect></output>

              <menuitem id="zjj55"></menuitem>
              <menuitem id="zjj55"></menuitem>

                  <big id="zjj55"></big>

                      責任編輯:韓希宇

                      免責聲明:

                      中國電子銀行網發布的專欄、投稿以及征文相關文章,其文字、圖片、視頻均來源于作者投稿或轉載自相關作品方;如涉及未經許可使用作品的問題,請您優先聯系我們(聯系郵箱:cebnet@cfca.com.cn,電話:400-880-9888),我們會第一時間核實,謝謝配合。

                      為你推薦

                      猜你喜歡

                      收藏成功

                      確定