## * 电脑管家查杀引擎安全分析(一)
0x00 背景
腾讯电脑管家的 TAV 查杀引擎有其独特之处,例如在杀毒后能够还原部分被病毒破坏的注册表和文件,内存查杀方面也表现不错,可扫描内存、创建和病毒一样的互斥以防止病毒再次运行。然而,与其他杀毒软件相比,TAV 存在明显不足。其免杀相对简单,因为引擎采用字符串明文检测,容易通过分析病毒库或使用 MYCCL 等工具进行黑盒免杀。此外,TAV 的效率较低,存在特征数据结构弱、特征复用不足等问题。
值得一提的是,逆向 TAV 的特征库可以发现,外挂特征数量比病毒、后门特征都多,排在特征数量第二位,腾讯电脑管家可谓“外挂杀手”。盗号木马也是 TAV 重点打击的对象,在特征库中占比不低。而对于感染型病毒、后门、下载者、蠕虫、恶意脚本等其他类型的木马病毒,还需要 OEM 的小红伞引擎或者云引擎来补位,仅靠 TAV 难以应对。
0x01 结构与功能初析:
引擎结构和功能如下。可见,TAV 引擎属于基础的传统特征引擎,特征数量较少,与主流杀软相比处于初级阶段。
B). 病毒库结构:
virinfo.def:名称表,包括壳名、包名、特征名 c++
structVirInfo
{
DWORD dwID;
BYTE btLength;
char VirName[btLength];
};
C). 病毒库规模:
特征数量整体非常少,以 PE 为例只有 8135 条特征。分布见下图。从特征分布和类型来看,TAV 主要查杀目标为外挂、盗号程序。对于数量庞大的恶意程序家族,TAV 仅覆盖了冰山一角,远远达不到一个专业杀毒引擎的程度,目前仅停留在外挂、盗号专杀的层面。更令人担忧的是,TAV 维护了大量的脱壳解包特征,这直接暴露了开发者框架设计方面的缺陷。与之形成鲜明对比的是国际知名的卡巴和 BD 引擎,它们通常在发展过程中,先维护较多的同家族特征,随后在“收缩”过程中,用一条 obj 通杀,显得章法自如、张弛有度。
D). 病毒库更新:
病毒库的更新有 2 种方式:
1. 直接更新扩展名为.def 的病毒库,适用于查杀现有引擎可以支持的木马和病毒。
2. 更新替换 tpktt.dll,适用于现有引擎无法解决的复杂样本,将特征和查杀方法通过分析员写代码实现,然后整个引擎更新替换,类似于专杀方式。
0x02 PE 查杀过程逆向分析:
1.病毒库描述:
virpeXX.def:(PE 库)
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 //多模式特征
};
struct Sig //特征结构
{
DWORD dwRecordID;//特征 ID,用于关联特征名
DWORD dwOffset;//特征偏移,用于定位病毒代码具体位置
BYTE btLength;//特征长度,用于扫描匹配病毒代码长度
BYTE btOffsetBaseAddress;//特征基地址,用于定位特征起始位置
BYTE btVirMask[btLength];//病毒特征具体内容
};
2. **静态查杀方式:**
a). 二进制全文匹配。(二进制特征存放在 virpe01.def 库解密后的 tbl5 中)
将数十字节的病毒代码二进制,记录在病毒库中,与待检测样本进行全文匹配。
b). 多模匹配。(多模特征存放在 tbl6 中)
将恶意程序的明显字符串信息提取出,记录在病毒库中,与待检测样本进行多模匹配。
*3.**设计缺陷分析**:*传统杀软最容易出现的几个问题:效率低、体积庞大、对抗门槛低。这几个问题在 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 特征达到竞品平均水平的数百万条,不难想象扫描一个文件将会是何等的慢。
## 电脑管家查杀引擎功能分析(一)
###### 内存扫描
匹配指定的进程和内存串,如果匹配到就终止进程。内存扫描功能可以有效地检测和阻止恶意程序在内存中的运行,保护系统的安全。
###### 匹配文件是否存在
通过检查特定文件的存在与否,可以判断系统中是否存在潜在的安全风险。例如,某些恶意软件可能会创建特定的文件来进行自我复制或执行恶意操作。
###### 创建一个和病毒相同的互斥体,防止病毒再次运行
通过创建与病毒相同的互斥体,可以有效地阻止病毒的再次运行,提高系统的安全性。这一功能可以防止恶意软件在系统中多次启动,从而减少其对系统的危害。
###### 内存清理
内存清理功能可以有效地释放被恶意软件占用的内存空间,提高系统的性能和稳定性。这一功能可以帮助用户清理系统中的垃圾文件和恶意软件残留,从而提高系统的运行速度。
电脑管家查杀引擎功能分析(二)
解包函数:
解包函数可以帮助电脑管家查杀引擎识别和处理被压缩或加密的恶意软件。通过解包函数,引擎可以将恶意软件还原为其原始形式,以便进行更准确的检测和查杀。
6B0D08E0 > /8B75 E4 mov esi,dword ptr ss:[ebp-0x1C]
6B0D08E3 . |8D8D F8FEFFFF lea ecx,dword ptr ss:[ebp-0x108]
6B0D08E9 . |E8 52EDFFFF call 6B0CF640
6B0D08EE . |30043E xor byte ptr ds:[esi+edi],al
6B0D08F1 . |47 inc edi
6B0D08F2 . |8B85 F0FEFFFF mov eax,dword ptr ss:[ebp-0x110]
6B0D08F8 . |03C0 add eax,eax
6B0D08FA . |3BF8 cmp edi,eax
6B0D08FC .^\72 E2 jb short 6B0D08E0
6B0D08FE . 8BBD ECFEFFFF mov edi,dword ptr ss:[ebp-0x114]
6B0D0904 > 8B45 E4 mov eax,dword ptr ss:[ebp-0x1C]
6B0D0907 . B9 38EC316B mov ecx,6B31EC38 ; >>>AUTOIT SCRIPT<<<
6B0D090C 0F db 0F
6B0D090D . 1F pop ds
6B0D090E . 40 inc eax
6B0D090F . 0066 8B add byte ptr ds:[esi-0x75],ah
6B0D0912 . 1066 3B adc byte ptr ds:[esi+0x3B],ah
6B0D0915 . 1175 1E adc dword ptr ss:[ebp+0x1E],esi
6B0D0918 . 66:85D2 test dx,dx
6B0D091B . 74 15 je short 6B0D0932
6B0D091D . 66:8B50 02 mov dx,word ptr ds:[eax+0x2]
6B0D0921 . 66:3B51 02 cmp dx,word ptr ds:[ecx+0x2]
6B0D0925 . 75 0F jnz short 6B0D0936
6B0D0927 . 83C0 04 add eax,0x4
6B0D092A . 83C1 04 add ecx,0x4
6B0D092D . 66:85D2 test dx,dx
6B0D0930 .^ 75 DE jnz short 6B0D0910
6B0D0932 > 33C0 xor eax,eax
6B0D0934 . EB 05 jmp short 6B0D093B
6B0D0936 > 1BC0 sbb eax,eax
6B0D0938 . 83C8 01 or eax,0x1
6B0D093B > 85C0 test eax,eax
6B0D093D . 0F85 9C040000 jnz 6B0D0DDF
6B0D0943 . C745 FC FFFFF>mov dword ptr ss:[ebp-0x4],-0x1
6B0D094A . 8D4D E4 lea ecx,dword ptr ss:[ebp-0x1C]
6B0D094D . E8 BE040000 call 6B0D0E10
6B0D0952 . 8B47 1C mov eax,dword ptr ds:[edi+0x1C]
6B0D0955 . 8D8D F4FEFFFF lea ecx,dword ptr ss:[ebp-0x10C]
6B0D095B . 6A 04 push 0x4
6B0D095D . 8985 F4FEFFFF mov dword ptr ss:[ebp-0x10C],eax
6B0D0963 . 8D85 F0FEFFFF lea eax,dword ptr ss:[ebp-0x110]
6B0D0969 . 50 push eax
6B0D096A . 6A 00 push 0x0