GPU恐成最大幫兇未來病毒運行技術前瞻

論文類別:計算機論文 > 計算機理論論文
論文作者: 破布
上傳時間:2013/1/31 11:37:00

惡意軟件的編寫者們不斷地在尋找新的方法來偽裝他們的代碼,以求逃過殺毒軟件的檢測。目前有兩種新的代碼偽裝技術對現有的惡意代碼檢測分析系統形成了挑戰,這就是脫殼(unpacking)和運行時多態(run—timep01yITlorphism)。更為危險的是,脫殼和運行時多態都可以利用GPu進行加速。這樣一來,之前困擾惡意軟件編寫者的那些高負荷計算運行方法,都可以利用GPU強大的並行計算能力進行處理。這將導致我們在未來而臨破壞力更為強大、狡猾而令人防不勝防的惡意軟件。
  
  加殼和變身惡意軟件感染計算機的方法
  
  本文中將提到多次有關汁算機病毒、僵屍客戶端、木馬程序、後門程序以及惡意軟件等諸多對電腦經常程序運行產生危害的非法軟件。為了方便起見,本文全部將其稱呼為“懷有惡意性質的軟件”或“惡意軟件”。
  在正常情況下,這些懷有惡意性質的軟件,會悄悄地插入你的系統進程中,並在後臺執行一些不可告人的操作。從硬件角度來分析,傳統計算機系統中,只有CPU能完成這樣的任務。原因首先是CPU可以執行任意類型的代碼,可編程性極強;其次,CPU是系統的核心,擁有執行任務相當高的權限;其三,現代CPU性能都很不錯,多核心技術的普及讓這些懷疑惡意性質的軟件即使運行起來,用戶也很難察覺——因為你的CPU某些核心往往不會滿載,NVlDIA,已經分別針對其GPU發布了相應的SDK(software developmentkits,軟件開發包),用於幫助程序員執行可以在GPUJL運行的通用代碼。這些代碼甚至可以使用傳統的C語言來編寫,比較常見的有NVIDIA和CUDA或者AMD的Stream。
  目前,最新一代的GPU(比如支持DirectX 11的NVIDIA GeForce GTX500系列),已經允許CPU和GPU上運行的代碼完全相同(如NVIDIA所推出的CUDA-X86計劃)。在這種情況下,GPU通用計算被廣泛應用於各類計算任務中。當然,這部分計算任務還包括那些“雄心勃勃”的惡意軟件代碼編寫者。考慮到通用計算的巨大潛力,做出“惡意軟件編寫者們將利用現代GPU的強大性能,來為自己牟利”的預測就是很自然的事情了。
  當然,如果惡意軟件需要正常的運行,必須有兩個先決條件:1.躲避現有反惡意軟件的防禦能力;2.超越分析人員人工解析的能力。很多情況下,對惡意軟件的人工解析是確定、部署相應的檢測並開發反制軟件的先決條件。為了達到這個目的,惡意軟件往往使用兩種手段來阻止各種反惡意軟件發現,並防禦自己的運行——這就是加殼和多態性,這是使用最為廣泛的、用於逃避反惡意軟件掃描和防禦的技術。除此之外,在實際應用中,代碼偽裝和反調試技巧常常被用於阻礙對惡意軟件代碼所實施的逆向分析工程。
  所謂加殼,就是將自己真正需要運行的內容保護起來。打比方來說,炸彈外面包上鮮花,然後放在郵包裏,郵包放在旅行箱裏,旅行箱被放在運輸飛機的某一處。在加了三層殼子後,炸彈看起來像個正常的旅行箱,但一旦飛機上天,爆炸後的後果就不堪設想。惡意軟件往往將自己偽裝成正常執行的程序,騙取系統或者反病毒軟件,甚至是用戶本人的信任,最終實現其不可知的目的。
  而多態性,是指惡意軟件在執行時,不將自己全部暴露在內存中——如果全部暴露,就可能難以逃脫反惡意軟件的掃描。因此,惡意軟件將自己的一小部分暴露在內存中,然後在需要的時候再暴露另一部分。簡而言之就是“化整為零,按需調用”。這個看起來相當“有效率”的方法,帶來了惡意軟件非常難以防禦的特性。因為程序不是人,它們只能機械地執行掃描和對比的任務。如果反病毒程序已經確定了幾種惡意軟件“變身”的方法,那麽只要惡意軟件下次改變一下暴露順序,或者掩蓋一下自己的執行目標,反病毒軟件就可能無法偵測。
  迄今為止,這些所有的惡意軟件都利用了目前程序執行環境的復雜性,盡可能隱秘地逃脫反惡意軟件的偵測。更糟的是,大部分研究反惡意軟件的安全研究人員們只關註於IA-32架構,因為絕大多數惡意軟件都運行在X86系統上。但令人擔心的是,GPU通用計算的來臨,為惡意軟件的編寫者們帶來了一扇機會之窗,因為大多數安全研究者對於GPU的執行環境和指令集架構並不熟悉。利用GPU通用計算,惡意軟件可能會有效對抗現有的防禦手段。
  
  機會還是威脅GPU通用計算的發展
  
  接下來,讓我們先暫停一下對惡意軟件的恐懼,進入GPU的世界。GPU通用計算最近幾年來飛速發展,當GPU本身可編程性和靈活性大大提高後,很多人開始著手探索如何利用GPU架構進行大規模的並行計算,畢竟GPU擁有系統中最為強勁的浮點計算能力,僅僅作為3D計算顯然相當可惜。但GPU通用計算需要專用API才能在GPU上完美運行。一般的圖形APIMDlrectX和OpenGL等,都不能很好地進行通用計算。
  對傳統GPU來說,無論是GPU本身設計還是調用方式都盡可能為GPU需要執行的圖形計算優化。因此你如果想利用GPU龐大的計算資源,那些需要計算的數