<span id="7ztzv"></span>
<sub id="7ztzv"></sub>

<span id="7ztzv"></span><form id="7ztzv"></form>

<span id="7ztzv"></span>

        <address id="7ztzv"></address>

            原文地址:http://drops.wooyun.org/tips/4931

            0x00 背景


            about me:寫過外掛,做過破解,對電腦管家也有比較長時間的逆向分析積累,現在整理下投出來,求邀請碼和WB。

            TAV有自己的優勢和特點的,比如殺毒之后能夠還原一部分被病毒破壞的注冊表和文件。另外它的內存查殺也不錯,可以掃描內存、創建和病毒一樣的互斥,防止病毒再次運行。

            TAV相比其他殺毒軟件還是有很多不足,最明顯的缺陷是免殺比較簡單,由于TAV引擎用的是字符串明文檢測,很容易通過分析病毒庫或者是MYCCL等進行黑盒免殺。另一方面,TAV的效率比較低,包括特征數據結構弱, 特征復用等方面的問題,后面會有詳細分析。

            值得一說的是,逆向TAV的特征庫可以看到,外掛特征比病毒、后門特征都多,排在了特征數量的第二名,說騰訊電腦管家是“外掛殺手”一點都不夸張。盜號木馬則是TAV另一個重點打擊的對象,在特征庫占比也不低。至于感染型病毒、后門、下載者、蠕蟲、惡意腳本等其它類型的木馬病毒,還需要OEM的小紅傘引擎或者云引擎來補位,否則單靠TAV肯定是無能為力的。

            0x01 結構與功能初析


            引擎結構和功能如下。不難看出,TAV引擎屬于基礎的傳統特征引擎。特征數量較少,與主流殺軟相比還處于初級階段。

            1. 引擎內部功能一覽


            內存掃描

            匹配指定的進程和內存串,如果匹配到就終止進程

            匹配文件是否存在

            創建一個和病毒相同的互斥體,防止病毒再次運行

            內存清理

            解包

            字符串多模式匹配

            ?

            虛擬機:

            模擬了ntdll、kernel32、gdi32、user32、advapi32、shell32、wsock32、ole32、oleaut32、msvcrt、version、urlmon這幾個系統DLL

            對于不常用的API采用同一個函數統一處理:

            對于關鍵函數,使用單獨的模擬代碼實現:

            2. 病毒庫分析:


            A).病毒庫算法:

            只是簡單的ZLIB。

            解密后內容如下:

            B). 病毒庫結構:

            virinfo.def:名稱表,包括殼名、包名、特征名 c++ structVirInfo { DWORD dwID; BYTE btLength; char VirName[btLength]; };

            C). 病毒庫規模:

            特征數量整體非常少,以PE為例只有8135條特征。分布見下圖。從特征分布和類型來看,TAV主要查殺目標為外掛、盜號程序。對于動輒百萬級規模的惡意程序家族其實只覆蓋了冰山一角,遠遠達不到一個殺毒引擎的程度,僅僅停留在外掛、盜號專殺的層面。更讓人捉急的是TAV維護了大量的脫殼解包特征,直接暴露了開發者框架設計方面的缺陷。與此形成鮮明對比的是國際知名的卡巴和BD引擎,通常在一個“膨脹”的過程中,維護較多的同家族特征,隨后再在“收縮”過程中,用一條obj通殺,顯得章法自如、張弛有度。

            D). 病毒庫更新:

            病毒庫的更新有2種方式:

            1 直接更新擴展名為.def的病毒庫,適用于查殺現有引擎可以支持的木馬和病毒。

            2 更新替換tpktt.dll,適用于現有引擎無法解決的復雜樣本,將特征和查殺方法通過分析員寫代碼實現,然后整個引擎更新替換,類似于專殺方式。

            0x02 PE查殺過程逆向分析:


            1.病毒庫描述:


            virpeXX.def:(PE庫)

            #!c++
            struct VirpeHeader
            {
             WORD wUnknown;
             DWORD dwHeadSize;
             DWORD dwSize;
             WORD wTable1Count;
                WORD wdMaskCount;//表示共有多少條PE特征
                WORD wdUnknown4;
                DWORD dwTable1Off;
                DWORD dwTable2Off;
                DWORD dwTable3Off;
                DWORD dwTable4Off;
                DWORD dwTable5Off;//傳統特征
                DWORD dwTable6Off //多模式特征
            };
            

            #!c++
            struct Sig //特征結構
            {
                DWORD dwRecordID;//特征ID,用于關聯特征名
                DWORD dwOffset;//特征偏移,用于定位病毒代碼具體位置
                BYTE btLength;//特征長度,用于掃描匹配病毒代碼長度
                BYTE btOffsetBaseAddress;//特征基地址,用于定位特征起始位置
            BYTE btVirMask[btLength];//病毒特征具體內容
            };
            

            2. 靜態查殺方式:


            a). 二進制全文匹配。(二進制特征存放在virpe01.def庫解密后的tbl5中)

            將數十字節的病毒代碼二進制,記錄在病毒庫中,與待檢測樣本進行全文匹配。

            b). 多模匹配。(多模特征存放在tbl6中)

            將惡意程序的明顯字符串信息提取出,記錄在病毒庫中,與待檢測樣本進行多模匹配。

            3. 靜態掃描流程:


            見下圖

            4. 設計缺陷分析:


            傳統殺軟最容易出現的幾個問題:效率低、體積龐大、對抗門檻低。這幾個問題在TAV身上尤為明顯。只是現階段TAV特征數量極低,暫時未大規模展現而已。

            a) 體積大。

            現有的查殺方式設計會導致病毒庫臃腫,龐大的二進制數據和字符串數據記錄在病毒庫中,隨著特征增加,病毒庫體積會急速膨脹。在同等特征數量的情況下,TAV病毒庫將會比卡巴、BD等殺軟大上數十倍。

            b) 效率低。

            逐個匹配特征的方式,會隨著病毒庫膨脹而使得效率變得越來越低。卡巴、BD等殺軟為解決此問題,設計出了多索引的方式,只有在最后一層才匹配幾個特征,效率非常高。

            c) 對抗門檻低。

            匹配代碼在內存中明文存在。

            使得無論木馬作者通過分析病毒庫來免殺還是通過MYCCL等黑客工具進行黑盒免殺都極為容易。

            d) 特征無復用。

            下圖為TAV的TOP50特征,可見出現大量重復二進制。特征之間基本無復用。

            例:Virus.Win32.DiskGen

            以此家族為例,描述TAV設計缺陷導致的效率問題。

            TAV查殺Virus.Win32.DiskGen病毒從a變種到最后的an變種,多次匹配了這條特征:

            18 8B 8E 30 0A 00 00 03 C8 40 40 8A 11 F6 D2 88 11 3B 05 3F 3F 3F 3F 7C
            

            特征含義是病毒自解密代碼

            盡管使用了索引復用,但并沒有優化。從病毒庫中可以看到,這條相同的特征出現了20次。也就意味著,為了匹配這個家族的所有變種,當前待掃描文件需要掃描20次才行。因為目前TAV特征只有數千條,效率低下的問題感受不明顯,倘若哪天TAV特征達到競品平均水平的數百萬條,不難想象掃描一個文件將會是何等的慢。

            0x03 其他類型分析:


            virscrXX.def:腳本庫,直接存儲的字符串,用于掛馬的查殺。為了避免誤報自身內存,采用了異或的方式,將特征加載到內存中。

            virdexXX.def:安卓特征庫

            virsrcXX.def:腳本庫,用于查殺HTML\JAVA\PDF\OLE\JS\NSIS

            vircmpinfo.def:殼、編譯器識別

            ?

            0x04 實戰對抗


            1.TAV虛擬機對抗


            當文件被加UPX殼后,會調用GetProcAddress動態獲得API地址,TAV可以模擬GetProcAddress的結果,并且可以執行到下一條EIP所在位置,使得程序能夠正常模擬下去,而不至于觸發異常返回。

            文件的真實調試結果:

            不過TAV的虛擬執行能力比較弱,比較適用于對壓縮殼進行脫殼,如常見的UPX殼,而對于動態行為查殺卻無能為力。

            比如某個非常簡單的Downloader木馬,作者調用了URLDownloadToFileW下載一個木馬,然后調用WinExec執行木馬。整個過程非常簡單,只用到2個Windows API,并且沒有額外的代碼來對抗虛擬機,而TAV引擎卻無法查殺:

            同樣的樣本,掃描對比國外知名殺軟,則可以通過虛擬機動態檢出

            2.MYCCL黑盒對抗:


            以某盜QQ木馬測試。

            特征碼地址如下:

            使用C32ASM查看特征碼:

            隨便改改:

            <span id="7ztzv"></span>
            <sub id="7ztzv"></sub>

            <span id="7ztzv"></span><form id="7ztzv"></form>

            <span id="7ztzv"></span>

                  <address id="7ztzv"></address>

                      亚洲欧美在线