1.1 计算机病毒概念
计算机病毒(Computer Virus)是指编制者在计算机程序中插入的破坏计算机功能或者破坏数据,影响计算机使用并且能够自我复制的一组计算机指令或者程序代码。这是目前对于计算机病毒最通用的定义。计算病毒、蠕虫以及木马是恶意软件的三个分类。计算机病毒具备传播性、隐蔽性、感染性、潜伏性、可激发性、表现性或破坏性的特点。
1.2 早期计算机病毒
早期的计算机病毒主要是文件型病毒,主要通过感染计算机中的可执行文件(.exe)和命令文件(.com)。一般情况下,文件型病毒对计算机中的源文件进行修改,使其成为一个新的带毒文件。即将病毒代码写入到对应的文件中,一旦计算机运行该文件就会被感染,从而达到传播的目的。
通常计算机病毒会隐藏于宿主程序中,在程序运行前,病毒不会主动执行。当宿主程序被执行的时候,会优先执行病毒程序,再执行宿主程序。这是因为,病毒在入侵文件后,会对文件进行嵌入和修改。修改的目的就是调整文件中代码的执行顺序,以保障病毒程序或者代码可以正常运行。
病毒修改源文件的位置一般在该文件的头部或者尾部,如果是在头部的话,在运行宿主程序时,则可以直接运行病毒程序或者代码。
病毒代码在源文件的尾部时,会通过修改代码初始执行位置的方式,选择执行的初始点,这样就可以直接选择尾部的病毒代码开始运行。
上述的两种指定了明确执行地址的病毒,被称为有入口点的病毒。与有入口点病毒相对的,则是无入口点病毒,这种病毒并不是真正没有入口点,只是在被感染程序执行的时候,不会立刻跳转到病毒的代码处开始执行。也就是说,没有在COM文件的开始放置一条跳转指令,也没有改变EXE文件的程序入口点。而是病毒代码潜伏在被感染的程序中,可能在非常偶然的条件下才会被触发执行。这种无入口点病毒的的隐蔽性非常强,杀毒软件很难发现在程序的某个随机的部位,有这样一些在程序运行过程中会被执行到的病毒代码。
病毒程序一旦被运行,就会驻留在内存中,再伺机感染其它的可执行程序,通过这种方式,就达到传播的目的。因此感染对象扩展名是COM或者EXE的文件是文件型病毒感染的主要对象。
1.3 病毒特征码识别
早期病毒类型相对较为固定,基本一个文件即为一个病毒,功能相对较为单一。有了病毒的存在,也就逐步产生了病毒的识别和处置方法。在早期,主要通过特征码检测的技术来进行病毒的识别。这里所谓的特征码,我们可以理解为在某个病毒文件样本中,常见的连续字节序列。这意味着如果在某个文件中,包括了这个连续的字节序列,那么该文件基本已经被病毒感染了。在未受到感染的文件中,是不会找到这些连续的字节序列的。当然,对于这个连续的序列,也就是特征码,具体的识别和选取有多种方式。
1.3.1 计算校验和
计算校验和是最简单最快速的方式,原理就是针对病毒文件直接进行如MD5的校验和计算。MD5是对一段信息产生信息摘要,这个信息摘要可以理解为是唯一的,并且不可逆向计算,具备防止被篡改的特性。也就是说,通过MD5计算,在获取病毒文件摘要的信息后,可以使用这个摘要去标识一个病毒文件。将所有的病毒MD5值进行收集,在后续进行可疑文件分析时,仅需要计算可疑文件的MD5值并与病毒MD5值比较即可。这是最早的病毒识别方式。也是早期专杀工具所采用的方式。但是采用这种方法,存在很大的弊端。因为MD5具有高度的离散性,一个病毒文件中任何一个小的改动,都会影响生成的计算结果。这也就导致了一种特征码只能匹配一个病毒,即便病毒的变动很小,也需要重新提取特征码。最终的结果就是导致特征码库会异常的庞大,所以这种方式也一般用于临时提取特征码。
如下4张图所示,分别为名为“我的md5.txt”文件,在内容为10个1以及9个1的情况下,进行了MD5计算。虽然在文本文件中,仅变化了一位,但是我们可以看到,实际MD5的值的变化,已经千差万别,完全看不出任何规律。病毒文件的特征码,就是这个原理。
1.3.2 提取特征字符串
在通常情况下,同一类病毒和核心代码部分,基本是一致的,比如病毒是针对内存中某个位置的操作的代码,针对操作系统某项功能进行操作的代码。针对这一个特点,就可以通过提取病毒文件中的一些固定的字符串来进行识别。通常使用的是逆向反编译的工具,对病毒程序进行反编译,获取代码字段。很多时候,这些字符串是某个病毒所特有的,因此这种方式适用于所有病毒的特征码的提取。采用这种方式甚至还能识别某一大类病毒,但是缺点是需要耗费比较多的扫描时间。
如下图所示,为通某编辑工具打开everything.exe程序显示的情况,如果该程序中存在病毒代码的话,那么可以通过分析,确定代码的标识字段,这种方式生成的的字符串,即为特征字串。
在后期进行病毒识别时,只需要按照相似的过程,并且比对特征字串,即可确定是否包含病毒。
1.3.3两段检验和形式
两段检验和这种方式,是在病毒文件中选择两个特殊位置的数据,一般这两个位置的数据都能够代表该病毒文件的特性。将这两段的数据的校验和计算出来。在检测扫描目标程序时,先计算目标文件在该位置处的校验和的值,通过判断是否符合相应的特征码来判定目标程序是否为病毒程序。
两段检验和方法的准确率高,耗时也比较少。很多时候能够利用一个特征码检测出同一类的病毒。
1.4 病毒扫描引擎
前文我们讲述的是如何获取一个病毒的特征码,只有获取了特征码之后,才可以通过与特征码进行比较来确定文件是否包含病毒。这个获取文件相关信息,以及比对特征码的具体过程,是不可能靠手工完成的,大量的工作,必须依靠分析比对的引擎,这就是病毒扫描引擎。
扫描引擎是识别病毒文件和最核心部分,一个扫描引擎一般包括了自动化恶意软件处理机制,规定了恶意软件入口点,以及匹配特征的工作。扫描引擎以病毒特征库为基础,通过引擎的识别和分析功能,将文件的分析数据与特征库比对,最终进行病毒文件的确认。这些病毒库以及整个扫描比对过程都是在终端本地进行的,无论是分析过程还是比对过程,都需要损耗终端的性能。因此衡量一个扫描引擎的优劣,终端的资源占用情况非常重要,商用杀毒产品通常会把终端资源占用情况,作为产品的一个重要指标。除了对于终端资源的占用,对抗变种病毒的能力,对抗免杀的能力,以及稳定性和兼容性,都是对扫描引擎评价的重要指标。对于变种病毒和对抗免杀能力,后文我们会进行介绍。
1.5 云查杀技术
在进行可疑病毒文件分析的时候,病毒库的使用需要先加载到内存中,随着病毒的种类越来越多,病毒库也会越来越大,终端本地的庞大的病毒库导致了系统运行越来越慢,虽然解决了终端安全问题,但是带来了其他的可用性问题,这就违背了扫描引擎的初衷。同时对于病毒特征库的优化和扫描引擎的优化,也就尤其的重要。也是在这样的条件下,产生了云查杀技术。
传统的杀毒软件,需要用户不断地升级病毒库,将病毒特征码保存在本地的计算机中,这样才能够让本地的杀毒软件能够识别各种各样的新式病毒。这种方式,一方面占用了过多的本地资源,另一个方面,也存在很大的滞后性。通过云查杀可以很大程度解决上述的问题。
所谓云查杀,就是把安全引擎功能和病毒特征库放在云端,而非本地的终端设备。这种方式,解放用户的个人终端,并而获取更加优秀的查杀效果、更快的安全响应时间、更小的资源占用以及更快的查杀速度,并且无需升级病毒木马特征库。
在云端的服务器,也不仅仅是一台独立的服务器,可能是成百上千台服务器,并且通过一定的网络技术,实现了终端异常文件的快速上传和快速分析。云查杀病毒库,具备实时共享的特性,查杀能力更为精确、有效,云查杀是对付病毒非常有效的方法。
既然称为是云查杀,终端环境就必须与云端相通,这就要求用户终端必须连接互联网,否则无法完成病毒的查杀任务。另外用户隐私的泄露问题也是云查杀技术必须要解决的问题。
1.6 恶意文件绕过
随着诸如云查杀这类技术的发展,很大程度上提高了病毒查杀的效率。但是病毒的防杀功能,也在不断提升。比如通过多层压缩或者加大了病毒自身的体积,跳过扫描引擎的分析。前文已经说过,扫描引擎需要对文件进行分析,文件越大,性能损耗越大。所以一般在进行病毒扫描的时候,会跳过设置的大小以上的文件。更加高速、自动化生成的变种,导致了病毒特征码无法及时的更新,从而针对较新的的变种病毒无法产生较好的防护效果。另外还有加壳技术的使用,将病毒进行加壳处理,使得安全人员无法提取出代码中的特征码,躲避杀毒软件的查杀,病毒作者可以通过给老病毒加壳,大批量制造出杀毒软件无法识别的新病毒。如下图所示,是深信服EDR程序关于扫描文件大小跳过和压缩包层数的设置,各商业杀毒程序都会有对应的设置项,以平衡安全效果以及性能影响。
上述的这些方式,都可以大大的减弱杀毒引擎的杀毒能力,在这种情况下,迫切需要通过一种更加合适的病毒特征码识别方法,来解决病毒问题。启发式检测的方式应运而生,成为了解决这些问题的最佳途径。
1.7 启发式检测
启发式检测,不同于病毒文件特征码,不是针对病毒文件的特征字段进行识别和匹配。而是基于专家的分析,使用各种决策规则或权衡方法确定系统对特定威胁或风险的敏感性,多标准分析(MCA)是衡量的手段之一。用通俗的话来解释,就是病毒和正常程序的区别可以体现在许多方面,不仅仅是在代码的内容上。比如在病毒程序的指令上,病毒指令通常会直接操作系统进行写盘、解码的指令,这种操作方式一般是很少出现在正常程序中的。正常程序一般会进行清屏或者保存原来的屏显等操作。这种非常显著的差异,对于一个病毒分析专家来说,是很容易发现的。启发式检测就是通过将专家的类似的能力进行转化,转化为规则库,规则库中,不是病毒代码的特定字串,而是在特定时间或者特定内存位置执行的某些操作等。
启发式检测实际上就是把专家经验和知识移植到一个查病毒软件中的具体程序体现。
启发式模型专门用于发现可疑特征,这些特征可在未知,新病毒和现有威胁的修改版本以及已知的恶意软件样本中找到。但是,这个过程就类似于警察抓小偷一样,在车站看到某个人贼眉鼠眼,行为诡异,怀疑他是小偷,但是他也不一定就是一个贼。同样的,启发式检测就会存在一定的误报情况。
启发式的检测,可以进行内存的动态扫描,也就是在内存中进行查找,就可以解决病毒加壳、大体积病毒跳过以及多层压缩等问题。因为即使加了壳,在运行的时候,内存的位置和操作还是一样的。
过去的特征码检测方式,一千条特征,对应了一千中加壳的病毒。使用启发式检测,扫描内存只需要一条特征。实际是在病毒在运行过程中,抽取特征进行匹配。获取它的状态特征和行为特征。针对特征码检测与启发式检测的区别如下表所示:
特征码检测 | 启发式检测 | |
---|---|---|
误报率 | 低 | 高 |
未知病毒 | 低 | 高 |
实现难度 | 低 | 高 |
1.8 动态智能安全XDR
虽然很多企业都部署了安全设备,但是经常会出现在安全设备感知到病毒存在的时候,往往是在病毒入侵事件已经发生之后。当然,在安全设备上也存在大量的日志,但是这些日志中,哪一个是有效的,哪一个是误报的,一般安全管理人员很难快速的辨别。无用的信息轰炸可能会导致了看和不看没有什么区别。
产生上述问题的主要原因是,安全攻击更加专业化,多面化,攻击维度从内到外,钓鱼、社工大量使用,很难通过单一方面的安全设施进行确定和解决。其次,安全设备独立使用,存在安全孤岛,安全检测能力割裂。还有就是处理问题人员的能力不足,无法真正溯源,根治问题,只能头痛医头,脚痛医脚。为了解决这个问题,出现了很多方案,如依托SIEM平台来做事件汇总,依托流量感知定位风险,依托SOC平台构建安全运营中心。但是都未能很好的解决这些问题,在这种情况下,就产生了XDR。
XDR是一种基于SaaS的、特定于供应商的安全威胁检测和事件响应工具,可以将多个安全产品原生地集成到一个统一的安全运营系统中,以统一所有授权的安全组件。这是Gartner对于XDR的定义。 我们以深信服的XDR产品为例。深信服XDR通过原生的流量采集工具与端点采集工具将关键数据聚合在XDR平台,通过云端专家服务提供威胁狩猎能力,提供SAAS化交付方式实现在线化效果。简单来说,就是通过EDR安全日志、NDR安全日志以及如边界安全防火墙等安全设备日志进行综合的安全问题分析和识别,持续的检测和评估,并提供有效的监测预警,达到安全防护的效果,避免无效安全日志的轰炸。同时依托产品的联动,可以直接进行安全事件处置,还可以有效的确定病毒攻击链,从根源上解决问题。
本期作者:王小伟,深信服安全技术认证专家(SCSE-T),产业教育中心资深讲师
具备云安全联盟零信任安全专家认证、阿里云专家级架构师认证、项目管理PMP认证等多个认证;擅长企业级网络架构与网络安全设计,曾负责媒体、能源、金融等行业数据中心的网络安全规划及交付,拥有深信服产品近十年一线交付经验;多次担任深信服合作伙伴技术认证的培训讲师,具备丰富的讲师与实战经验。