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龐大的計算資源,那些需要計算的數據和變量,必須映射為圖形學對象,算法處理必須被表述為像素和頂點處理的形式,假裝是在進行圖形計算一樣。這種“假裝”的形式讓程序員感到很束縛。因為傳統GPU缺乏方便的數據類型,基本的計算函數,以及一個一般化的內存訪問模型,使得它對於習慣於工作在傳統編程環境下的程序員們來說沒有多少吸引力。
  進入DirectX 10時代後,NVIDIA提出了CUDAfCompute UnifiedDevice Architecture)這樣一個相當富有創造力的通用運算API架構。有了這個API之後,程序員就不需要在自己的大腦中“映射”各種數據,APl作為溝通橋粱已經承擔了數據轉換、程序編譯等任務。這樣一來,GPU就能很好地發揮計算效能。與此同時,AMD也提供了對應自家GPU產品的通用計算方法,被稱為Stream。
  CUDA由一個C語言的極小擴展集和一個運行庫組成,這個運行庫提供的函數能夠控制GPU,以及設備專有函數和相應的數據。從相對宏觀的角度看,一個CUDA程序由兩部分組成,一個運行在CPU上,另一個稱之為“kernel”,是運行於GPU上的並行化部分。不過GPU上的kernel是不能獨立運行的,它只能依賴於CPU上的父進程調用,因此,它不能被作為一個獨立的程序直接初始化。
  CUDA中的kernel在運行時被劃分為多個線程來執行,這些線程被組織成多個線程塊,然後交由GPU的CUDA Core--也就是常說的流處理器來執行。在GeForceGPU中,每個處理單元會包含8個SIMD流處理器組。這8個SIMD流處理器組會根據一個線程調度器的調配,令多個線程塊盡可能高效率、最大化地運作,保障整個GPU的運行效率。
  除了編程執行外,CUDA還提供了用於在主機和GPU問進行數據交換的函數,所有的I/O動作都通過PCI-E總線進行。不僅如此,存儲器操作還可以通過DMA進行,這樣就可以大幅度提高CPU和GPU工作的並行程度。在內存一致性方面,主機的分頁鎖定內存中的一個塊可以被映射到GPU的地址空間裏,使得在CPU上運行的普通程序和GPU上運行的kernel能夠直接訪問相同的數據。
  總的來說,無論是CUDA還是Stream,都是盡可能利用GPU'性能的API。惡意軟件要運行得有效率,就繞不開這兩個API。下面就讓我們來看看惡意軟件是如何在GPU上搗鬼的。
  上文說過,運行於GPU上的kernel必須依賴CPU上的父進程。惡意軟件也是如此,那些能利用GPU超強性能的惡意軟件往往包含兩個部分--GPU部分和CPU部分。說得更細致一些,那就是惡意軟件在執行時,會裁入GPU端的設備代碼,分配CPU和GPU都可以訪問到的一塊內存區域,先初始化數據,然後調度GPU代碼開始執行。當然,和所有利用GPU的程序一樣,惡意軟件可以在GPU和CPU之前來回轉換,或者單獨讓GPU運行或者只讓CPU運行,也可以同時在GPU和GPU並行執行。
  當然,惡意軟件編寫者不僅僅看中了GPU的計算能力,他們還需要更自由、不被監視的執行空間。恰好,在GPU這裏,惡意軟件可以與CUDA庫靜態鏈接,成為一個獨立的可執行程序,這樣一來,惡意軟件就不需要在被感染的系統中安裝額外軟件。更令人難以接受的是,目前GPU端的代碼執行,以及CPU和GPU之間的通訊,都不需要管理員特權。這意味著,惡意軟件可以在任何用戶權限下成功運行——它不需要任何權限,也沒人監控它。這就令惡意軟件隱蔽性更高、更容易被運行起來。 免費論文下載中心 http://www.hi138.com   束手無策?惡意軟件如何利用GPU資源
  
  前文已經描述了惡意軟件感染系統的方式,並且說明了它利用GPU進行並行加速的可能性。接下來,研究人員將通過實例來模擬這個過程。在模擬中使用的原型代碼不僅僅證明了惡意軟件利用GPU的可行性,而且已經確信對現有的分析檢測系統構成了不容忽視的挑戰。
  研究人員選擇使用NVIDIACUDA來部署源代碼,當然攻擊者可以很容易地使用其他GPU代碼版本,甚至還能在不同GPU之間進行轉換。目前攻擊者只要掌握了CUDA和Stream,就能基本上掌握100%的GPU惡意軟件攻擊範圍。還有更令人恐懼的——OpenCL是一個跨平臺的GPGPU框架,致力於提供統一的API,如果它得到廣泛引用,那麽就連插入不同版本的代碼也完全沒有必要,只要平臺支持OpenCL,就可能被惡意軟件利用你電腦中的GPU加速運行。
  1.自脫殼GPU加速
  前文已經簡單介紹了惡意軟件的加殼技術。當然,飛機上放炸彈的例子只是用於破壞性的炸彈。在軟件這裏,經過多層加殼偽裝後的代碼,需要脫殼解秘,才能變成真正的惡意代碼危害系統。
  一般情況下,惡意軟件設計有自脫殼程序,這個程序在運行時會首先解包被隱藏的代碼,然後將控制權移交給已在主機內存中變形為真實代碼的惡意軟件。當然,一種惡意軟件可能不止使用一種加殼程序,使用不同的變換方法或者改變解包程序的代碼,攻擊者可以容易地制造同一個惡意軟件的全新變種,還能有效地躲避檢測程序。
  目前傳統惡意軟件的自脫殼算法都不特別復雜,因為要考慮到CPU的計算能力,一旦顯著拖累系統,惡意軟件不但容易被察覺,還給自己的運行帶來了不利影響。但利用GPU強大的並行計算能力後,惡意軟件的作者能夠利用極其復雜的加密算法給惡意軟件加殼,這些復雜的加密算法最終將被GPU大規模並行架構快速而有效地處理。
  這種高強度的加殼、脫殼操作,為現有的惡意軟件分析檢測系統制造了不容忽視的障礙。許多反惡意軟件中用於檢測自動脫殼的部分有先天缺陷,沒辦法應對基於GPU的自解包惡意軟件。比如常用的PolyUnpack,在脫殼時依賴單步執行和動態反匯編,但這種技術在GPU上的動態和靜態分析還很不成熟,當然也沒有獲得惡意軟件分析系統的支持。另外一些反惡意軟件的脫殼系統,比如Renovo,依賴於在虛擬機中監控惡意軟件的執行過程,但顯而易見的是,目前的虛擬機還僅僅只能做到虛擬圖形設備而已,只能執行簡單的3D計算,根本不能執行GPU通用計算任務,也沒有這方面的功能。這樣一來,利用虛擬機監控惡意軟件的脫殼也將成為泡影。
  當然,還有一些檢測軟件脫殼的技術比如omniUnDack,這種技術理論上可能會對惡意軟件在GPU中的操作起到一定的檢測作用,但實際上它在應用中還是和虛擬機聯合部署的,也就是說,實際應用中也不能檢測到GPU中的脫殼運行情況。
  2.運行時多態技術
  不過,前一頁研究人員的演示可能並不能讓人信服,有人肯定會說,無論加殼脫殼的設備是CPU還是GPU、無論殼算法多麽復雜,最終都將惡意代碼直接存放在主機內存中。這樣一來只要反惡意軟件掃描系統內容,就能很輕松地發現惡意軟件執行意圖並給予相應防禦措施。
  實際上這種情況只能代表部分惡意軟件的運行方法。正像本文開頭解釋“運行時多態”技術時說的那樣,惡意軟件在運行時,往往不會暴露自己的全部代碼,它可能重新加殼,或者只是按需分配、重復加殼脫殼那些當前需要的代碼。不僅如此,惡意軟件開發人員還會控制解碼部分的粒度,也就是每次解碼的數最,這個數量越小,在內存中暴露真實代碼的區域就越小,被偵測的可能性也就越低,也越難以被發現和防禦。這種代碼分割算法給反惡意軟件帶來了明顯的困擾。
  在加入了GPU後,這些重復脫殼加殼的算法,都使用GPu執行,並且整個需要脫殼和加殼的部分代碼也全部存在GPUAc。CPU的職責僅是在每個部分的代碼執行前和執行後,將控制權交還給GPu上的調度代碼,去做按需的解密變換和加密變換。也就是說,在執行期間,控制權在CPU和GPU之間不斷地轉換。同樣,GPU和CPU也擁有一個可以同時訪問的內存區域用於保持數據一致性和及時刷新。
  不僅如此,在這種技術中,解密密匙被保存在較為保密的、無法從CPU端訪問的CUDA設備存儲器當中,更有甚者,在每個部分執行後的重加密過程中,還可以使用隨機生成的不同密匙,這導致了惡意軟件能夠在存儲器中以不可預測的方式不斷地發生變異。而這些解密方法和變異都是不能被檢測或者預測到的,將直接導致目前依賴抽取密鑰和相應加密解密區域等方法的反惡意軟件運行失敗。當然從理論上來說,雖然原始代碼的完整抽取仍然是可能被分析人員做到的,但是如果考慮現有的反調試技術,這種有GPu從旁協助的運行時多態會使得整個逆向工程分析過程變得異常地漫長和艱難。
  未來更危險?GPU上惡意軟件的發展方向
  
  在先前的章節中,研究人員為我們展示了惡意軟件將自己在CPU和GPU之間分離執行的具體方式。雖然現代GPU的性能已經足夠強大,但是目前的技術僅僅使用了其中的一小部分。未來惡意軟件作者可能會開始廣泛利用GPU的圖形和通用計算能力。
  GPU提供了,大規模並行處理的能力,可以被用來加速CPU負載較重的運算。例如,一些惡意軟件開發人員往往使用僵屍網絡進行大規模的密碼暴力破解,而這正是GPU通用計算的專長。通過對GPU通用計算的支持,僵屍電腦的能力可以很容易地獲得延伸,可以使用被感染主機的GPU來分攤密碼破解的負載。這不僅帶來了整體破解效率的顯著提升,而且還隱藏了正在進行的惡意活動——因為GPU的工作無法被實時監控,無法鑒別正在運行的代碼,所以難以確認GPU上是否有密碼破解程序的代碼出現。另外,由於GPU的加入,在這種計算任務中,CPU幾乎不會占用,所以CPU負載監視程序對於檢測惡意活動也無能為力。
  除了惡意軟件在GPU上的運行外,還有其他的一些危險也可能和GPU掛鉤。比如GPU的幀緩沖區,屏幕上所顯示的內容往往存放在幀緩沖區內。不過目前系統對幀緩沖區的訪問沒有施加限制,這可能會帶來一系列攻擊手段。比如,GPU上運行的惡意代碼能夠周期性地訪問這一緩沖區,將用戶屏幕上出現的私人數據收入囊中,這個做法比現有的屏幕截圖的手段更加隱蔽。而更老練的惡意軟件甚至會試圖在用戶訪問虛假網站時,在屏幕上顯示錯誤的或者具有迷惑性的信息,例如偷偷將用戶瀏覽器地址欄中,那些可能會引起用戶懷疑的惡意地址,替換成看起來正常的地址。
  不過有一個好消息是,目前幀緩沖區還存在讀寫保護,因此一些對幀緩沖區的惡意行為很難輕易實施。但由於廠商們一直在嘗試提升GPU通用運算SDK和圖形API(如OpenGL,DirectX)的互通性,所以未來有可能存在對屏幕幀緩沖區擁有完全訪問權限的kernel。這種要求主要來自於那些需要直接訪問屏幕像素的程序,例如3D變換,視頻編碼與解碼等。因為這樣一來就可以大大減少cPU和GPU間的數據交換。所以,將來發布的硬件會不可避免地具備這一特性。
  更恐怖的是,未來的GPu通用架構將使得部署基於GPU的惡意軟件成為可能,也就是說,惡意軟件將主要在GPU上運行,與在CPU上運行的程序沒有任何關聯。不過令人慶幸是,這種問題可能在短期內都不會出現。因為現有圖形硬件架構很難支持獨立GPU程序的多任務運行,任意時刻只支持一個任務占用GPU。這就意味著一旦有任何獨占GPU的運算任務存在,那麽負責屏幕內容渲染的程序無法運行,顯示器上顯示的內容會被凍結。雖然這些在現在看來不太現實,有很多技術障礙需要克服,但是在將來,圖形硬件將具備下一代惡意軟件所需要的功能,這會徹底釋放GPU的能力。
  當然,我們現在也無需悲觀。畢竟當前GPU還無法脫離CPU對系統進行控制。我們現在還有充分的時間,對未來GPU可能進行的破壞行為進行研究,預防。同時,也有不少殺毒軟件開始采用能夠利用GPu運算能力的殺毒引擎,顯然這也將大大提升電腦的反病毒能力。 免費論文下載中心 http://www.hi138.com
下载论文

論文《GPU恐成最大幫兇未來病毒運行技術前瞻》其它版本

計算機理論論文服務

網站聲明 | 聯系我們 | 網站地圖 | 論文下載地址 | 代寫論文 | 作者搜索 | 英文版 | 手機版 CopyRight@2008 - 2017 免費論文下載中心 京ICP备17062730号