好杀软,引擎是关键

    许多PC用户都在选择杀软上有很多疑惑:XX杀毒软件好么?占用资源高不高?杀毒速度快不快?等等。这些问题虽然出于不同的角度,其实这些问题都可以归结到一个问题上:它的杀毒引擎好不好? 杀毒软件与病毒之间永远是互相博弈的关系,这种情况已经持续了几十年。
    随着病毒不断的进化与增多,反病毒产品也变得更加丰富起来。以至于出现了现在群雄割据的局面,而每个杀软厂家之间的区别,就在于其杀毒软件所使用的杀毒引擎上。 一个好的杀毒引擎,需要具备判断病毒的能力、足够的病毒清理技术和环境恢复技术,否则就成了只能查出病毒而不能清除、或者无法将被病毒破坏的系统环境恢复的鸡肋软件。 那么让我们先从杀毒引擎的三要素说起:
    一、程序行为捕获 每个程序运行时都需要进行各种交互动作,如收发网络数据、响应某个触发事件、文件读写操作等,这些交互都被称为行为(Action),而行为周期是可以被跟踪并记录的。而这也是杀毒引擎在查杀病毒时要做的第一步,杀毒引擎需要嵌入操作系统接口,任何操作系统核心程序进程、杀软自身进程除外的其他所有进程都被列入监测范围,一般的杀软品牌所采用的方式是利用HOOK挂钩来实现对每个进程的访问,这种方案通过在系统底层与应用程序之间嵌入一个全局钩子DLL模块达到目的,这种做法的好处是在不开放源码的操作系统层面上是非常容易实现的做法。但他的安全性与稳定性却不能让人放心。
    而一些与操作系统厂商有合作关系的杀软厂家,获得了比其他厂家更高的操作系统特权(以windows系统为例,特权级的划分是从最高的ring0到最低的ring3)。因此这部分厂家就可以采用基于系统最底层核心驱动的方法来达到hook技术无法达到的层面,比如rootkit。这种方法是最安全且最有效的,相对来说是最高级的方法。在过去只有诺顿才具备此特权,然而随着09年卡巴斯基与微软的一系列合作,卡巴斯基的用户也将享受到这种高级的杀毒方法。
    但现阶段很多软件所采用的方法走的是另一条思路。那就是硬件抽象层(HAL)。众所周知,在OS中只有驱动模块才能通过HAL的通讯接口达到系统底层,如今让一些技术人员谈虎变色的rootkit木马也是采用驱动形式来进入系统核心。因此这些杀毒引擎采用了一种软件驱动的手法,来实现监测底层的目的。这种方法比HOOK更有效,但随之而来的也出现了一些问题,比如偶尔蓝屏或者出现“程序遇到一个未知错误,即将关闭“的提示。
    通过以上的描述我们了解了,当行为捕获发现一个代码执行后试图将自己写入用户请求执行的程序文件体内、或进行特定的复制动作和添加注册表操作,就会将其怀疑为病毒,移交给查毒过程的第二步进行判断处理。
    二、程序行为判断 在第二阶段,被怀疑为病毒的程序会被杀毒引擎进行分析及判断,而这一阶段也分为两个部分:
    1、基于引擎机制的规则判断 每个杀毒软件厂商都会预先设定一套病毒行为判断规范,即在一个已定的范围和信任度下,判断相关操作是否为合法。优秀的杀毒引擎可以在第二阶段识别出相当数量的病毒。主要是因为杀毒引擎会内置一部分病毒特征码,就是所谓的基于特征码的静态扫描技术,利用这个技术杀毒引擎会在这一阶段尽可能多的查出病毒。很多老PC用户都知道,最早的杀毒软件并没有很大的病毒特征数据库,即便是现今以300万病毒库闻名于世的卡巴斯基,在3年前的病毒库数量也仅有26万。 但随着现在病毒的数量呈爆炸性增长趋势,如果依然只靠扩展杀毒引擎来解决问题,那么杀毒软件的程序体积必然会过于臃肿而无法保证运行效率,因此杀毒厂商不得不将病毒特征库从杀毒引擎中剥离出来,成为了基于特征码的静态扫描技术的衍生物,病毒特征代码数据库,也就是人们天天都要升级的病毒库。
    2、杀毒引擎与病毒库的交互 病毒特征代码数据库中以特定格式储存了各种病毒的行为标识和静态代码,而杀毒引擎要做的就是将捕获到的程序行为转换为杀毒软件自身可以识别的行为标识和静态代码,然后进入病毒库中查询并等待查询结果,这个步骤是整个杀毒过程中最慢的,但是当今的杀毒软件对大多数病毒的识别都是在这个阶段完成的。因此一个足够庞大的病毒库往往能够弥补杀毒引擎的不足之处,但是前文说到的病毒库体积问题是杀软发展的最大瓶颈,要解决这个问题,只能在核心技术上尽量实现将病毒检测工作在第二步完成,只可惜以现在的技术水平还没有能够实现这个想法的杀毒引擎技术,因此如今的杀毒软件或多或少都依赖着一个几十KB或者十几MB的病毒特征库来维持日常工作,杀毒厂商在杀毒引擎核心未进行关键修改时发布的病毒更新变种其实也就是为了往这个特征数据库中添加最新发现的病毒数据,以达到查杀新病毒的作用(卡巴斯基的启发式杀毒,云计算的应用都起到这个作用) 然而基于特征码的静态扫描技术的最大弱点在于它无法发现和查杀未知的病毒,由于它的大部分判断依据来自病毒特征代码数据库,一旦用户被感染了病毒中的0day或后门,杀毒软件就无能为力,甚至落得个被病毒终结运行的下场,如何判断阻止由病毒发出的关闭指令,而不影响用户正常点击杀毒软件自身提供的退出功能,这也是个难题。举个简单的例子:AV终结者曾经成为了许多杀软的噩梦,当时拥有自我保护功能的杀毒软件屈指可数,并且很巧合的都是那些拥有自主研发杀毒引擎的厂家。
    三、病毒查杀和系统环境恢复 当杀毒引擎检测到病毒后,根据情况有两种处理办法:如果发现的是尚未进行感染或破坏行为的病毒,这样的话杀毒引擎只需要删除文件就解决了问题。但是大多数的情况是用户已经被病毒感染破坏后的系统环境。在这种情况下,杀毒引擎必须在使用适当的方式查杀病毒后,根据病毒特征库中记录的病毒行为来智能判断当前系统环境遭受破坏的程度并进行恢复,例如对于受病毒感染的文件,杀毒引擎必须根据一定的算法在文件体内找出病毒代码寄生的部分并给予清除,这个过程必须非常谨慎,否则直接的后果就是导致原文件被破坏,这样的无异于杀鸡取卵。而对于非文件型的木马和恶意程序,由于它们会通过各种方式篡改系统注册表甚至系统文件来达到加载自身之目的,杀毒引擎在清除了这些病毒后能否准确有效的恢复受破坏的系统环境,是杀毒引擎技术能力的体现。再加上病毒隐藏技术已经从最初的简单加载单一启动项,演化到今天的多重启动项、进程互相保护、线程监视、远程注射、可执行文件关联、服务项目加载、驱动形式加载等方式,甚至采用多项结合的方法,使得查杀工作变得十分困难,甚至只要遗漏了一个文件未能清除,病毒便能卷土重来,如何有效准确的判断和修复受损环境,也是衡量杀毒引擎优劣的关键。
    通过上面的叙述,我们明白了杀毒引擎的作用及其重要性。在杀软行业中曾有过5大杀毒引擎之说。虽然现在杀软界人才辈出,杀毒引擎也越来越多,但AVP(也就是现在的卡巴斯基)、Dr.web(大蜘蛛)、诺顿、麦咖啡、熊猫,在技术与产品理念方面依旧领先其他同类产品一筹。其中卡巴斯基因为其严谨的结构与强大的虚拟机+实时监控技术,曾被多家杀软厂商所借鉴(包括一些知名的杀软公司)。由此可见独立开发杀毒引擎并非易事。 杀毒引擎是反病毒厂商技术是否成熟可靠的标准,也是一款反病毒软件含金量的体现。从上述拥有自主研发的引擎的杀毒厂家所推出的产品中我们可以找到几个共性:引擎架构和杀毒方法更严谨、误杀出现的概率更低,与病毒库交互的能力更强、杀毒的效果和速度更快,行为捕获技术更高级、安全性和稳定性更高。 因此当我们在遇到杀毒软件产品这道选择题时,杀毒引擎应该成为做出最终决定的重要因素。

### 绕过杀毒软件检测的技术与方法 #### 1. 利用自动化技术规避静态分析 在现代网络安全环境中,杀毒软件通常依赖复杂的算法和庞大的签名数据库来识别恶意件。然而,攻击者可以通过自动化技术来规避这些静态分析手段。例如,使用代码混淆、多态变换等技术可以使每次传播的恶意代码具有不同的哈希值,从而避免被基于已知签名的检测机制捕获[^5]。 ```python # 示例:简单的字符串加密函数用于混淆关键信息 def simple_obfuscate(input_str): return ''.join(chr(ord(c) ^ 0x5A) for c in input_str) obfuscated = simple_obfuscate("CreateRemoteThread") print(obfuscated) ``` #### 2. 内存驻留技术绕过静态扫描 无文件攻击是一种新兴的威胁形式,它通过将恶意代码直接加载到内存中执行,而不是将其写入磁盘。这种方法可以有效避开那些仅检查磁盘上的可执行文件的传统防病毒解决方案[^5]。此外,利用Windows API如`VirtualAlloc`分配内存并注入代码,也是常见的规避手段之一。 ```c // C语言示例:使用VirtualAlloc分配内存并复制shellcode #include <windows.h> int main() { void *exec_mem; HANDLE thread_handle; DWORD thread_id; // 假设shellcode是经过测试的安全数据 unsigned char shellcode[] = { /* Shellcode内容 */ }; exec_mem = VirtualAlloc(0, sizeof(shellcode), MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE); if (!exec_mem) return -1; memcpy(exec_mem, shellcode, sizeof(shellcode)); thread_handle = CreateThread(0, 0, (LPTHREAD_START_ROUTINE)exec_mem, 0, 0, &thread_id); WaitForSingleObject(thread_handle, INFINITE); return 0; } ``` #### 3. 检测沙箱环境以防止动态分析 一些高级恶意件具备环境感知能力,在检测到自己运行于虚拟机或沙箱环境中时会主动停止所有恶意行为。这种策略能够显著降低被动态分析工具发现的风险。实现此类功能通常涉及对硬件特征、系统性能指标以及特定驱动程序的存在性进行探测。 ```powershell # PowerShell脚本片段:简单检查是否存在常见沙箱特征 $vmware_drivers = Get-WmiObject -Query "SELECT * FROM Win32_SystemDriver WHERE Name LIKE '%vmtoolsd%'" if ($vmware_drivers) { Write-Host "Running inside a VM detected." } else { Write-Host "Not a VM." } ``` #### 4. 替换敏感API调用 可能会监控IAT表中的某些敏感函数,比如`CreateRemoteThread`, `VirtualAlloc`等。为了绕过这类监控,可以通过直接调用底层NTDLL导出的未文档化API或者使用反射式DLL注入等方式间接完成相同操作,以此减少触发警报的可能性[^4]。 #### 5. 使用非传统编程语言和技术栈 选择不那么常见的编程语言(如Go, Rust)编写payload,并采用交叉编译技术生成目标平台下的二进制文件,这样有助于逃避基于模式匹配的传统AV引擎的检测。同时结合打包器/加壳工具进一步增加逆向工程难度。 ```go package main import ( "fmt" ) func main() { fmt.Println("This is a benign looking Go application.") // 在这里插入实际需要隐藏的功能逻辑... } ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值