可執行文件的終極打包程序(UPX)是一種開源打包程序,可以大幅縮減可執行文件的文件大小(縮減效果比Zip文件更好),並且它與眾多可執行格式兼容,比如Windows DDL、macOS應用程序或Linux ELF。
供應商有時使用打包手段來防止基本的逆向工程或非法重新分發。大致說來,打包程序拿來原始的可執行文件後,為新創建的可執行文件添加一小段名為“stub”(存根)的代碼。然後,存根代碼將用於解包文件,並將可執行文件“恢復”到原始狀態。
雖然像UPX這樣的一些打包程序只壓縮文件,但其他打包程序還可以加密文件。
攻擊者可以使用壓縮將惡意軟件隱藏在看似無害的合法文件中,這可以騙過基於特徵的檢測系統,甚至騙過基於高級人工智能(AI)的反病毒解決方案。下面介紹了黑客如何使用UPX確保惡意軟件無法被檢測到的方法。
基於UPX的規避的工作機理UPX可以打包惡意可執行文件並修改其字節,以生成無法被檢測到的惡意軟件版本。
通過自解壓的歸檔可執行文件,當打包文件被執行時,打包程序可以在內存中解包自己。
打包的文件通常在磁盤上比較小,但在內存中比較大。如果你檢查一個可疑的文件,可能會看到如下典型的部分:
UPX0:一個空的部分,不包含實際的原始數據,但有龐大的虛擬內存大小
UPX1:存根代碼和壓縮後的可執行文件
還有其他部分,但在這裡暫停不詳述。
當UPX打包的文件被執行時,所有打包的部分都在內存中解包,包括黑客可能存儲在其中的任何惡意代碼,程序跳轉到原始入口點(OEP)來執行可執行文件。
壓縮是一種典型的逃避技術雖然基於UPX的逃避乍一看可能有點難以理解,但壓縮卻是避免反病毒檢測的一種典型方法。
讀者可以執行的一個簡單測試就是將惡意軟件樣本的原始版本和打包版本上傳到自己青睞的平台,比如VirusTotal。與惡意軟件的原始版本相比,打包版本通常被發現的次數要少得多,許多反病毒工具可能完全漏過了打包版本。
UPX用在惡意軟件部署中有多頻繁方面缺少太多的統計數據,但MITRE列舉了攻擊者可以用來隱藏代碼的種種“基於打包”的程序(https://attack.mitre.org/techniques/T1027/002/)。許多活動似乎都涉及UPX。
檢測UPX打包的文件你可以嘗試一個簡單的UPX命令來發現UPX打包的文件:
upx -l {suspicious_binary}
當然,這個命令很有限,不會一直有效。另一個有限但仍然有效的選項是轉儲十六進制代碼,並蒐索特定的字符串,比如UPX:
hexdump -C {suspicious_binary} | grep 'UPX'
你還可以利用可移植可執行文件(PE)分析器來檢測UPX打包的文件。
挫敗UPX損毀手法和損壞的文件外面觀察到的許多漏洞並不依賴UPX本身來解包惡意代碼,而是故意生成損壞的打包文件。
我們前面分析的基本示例含有非常容易識別的部分,但是攻擊者可以使用十六進制編輯器或其他工具來更改字節或插入字符串,從而使文件極難被檢測出來。
雖然這樣的操作可能會使用upx -d命令破壞典型的解包並拋出錯誤,但二進製文件仍然會執行。
Akamai推薦的upxdump.py等工具可能能夠修復故意損壞的UPX打包的文件,因為它可以修復經常用於混淆UPX打包的惡意軟件已損壞的報頭部分。
但是要小心,因為一些變體只是剝離UPX報頭或註入空字節,這將使工具失效。
打包程序分析和反UPX解包技術反向工程人員和惡意軟件分析師可能會使用ollydbg、radar2甚至流行的Ghydra等工具來分析打包的文件。關鍵步驟是先確定二進製文件是否使用反UPX解包技術。
雖然Mirai等許多類型的惡意軟件使用反UPX解包技術(比如零填充文件)以阻礙安全研究人員的工作,但這並不意味著你不能解包它們。像upx-mod這樣的工具可以助一臂之力。
話雖如此,最老練的威脅分子可能使他們的文件對標準的UPX實現方法而言“無法解包”,不過這種情況似乎相當罕見。
應對UPX打包惡意軟件的最佳實踐使用惡意的UPX打包文件表明,你不能單單依賴防病毒軟件和其他基於特徵的解決方案來發現惡意軟件,無論這些工具推銷自己有多麼先進。
但如果沒有這些工具,你將更容易受到攻擊,不過攻擊者總是會想方設法轉移合法實用程序的視線、繞過檢測。
UPX是一種通用格式,可用於針對各種平台,反UPX解包技術可用於乾擾逆向工程和惡意軟件分析。
一個好的做法是,當用戶不需要UPX時,在一些目錄中禁用執行(比如tmp和下載),特別是在企業環境中,這可以通過安全策略來實現。
確保系統沒有隱藏文件擴展名,但即使情況並非如此,也不能保證沒有人會不明智地點擊,特別是面對針對性的攻擊活動。你需要把可疑的活動和行為記錄下來。
Recommended Comments