2014年 Jul月 14日
卡巴斯基反病毒”配方”
每种系统都基于一种独特的算法,没有算法,系统也无从谈起。但实际上,不管系统是采用线性算法、分层算法、测定算法、随机算法还是其他算法,其实并不真的那么重要。重要的是为了取得最佳结果,系统需要去遵循特定的规则。
人们常常会问,我们的产品采用的什么算法 - 尤其关注我们是如何借助算法来检测未来的威胁,从而在市场竞争中胜出的。
我不可能透露我们”魔力配方”的细节,相关原因不言而明;但是在这一篇技术贴中(或许是本博客中有史以来技术含量最高的贴子),我微微开启”技术厨房”的大门,希望大家能借此一窥内幕。如果还想了解更多信息,请在下面的评论中详细说明你的问题。
我们通过演绎法来检测未知恶意软件,包括一般性恶意软件和特殊恶意软件在内。例如,所有恶意软件都会执行x、y、z操作。如果某个特定文件也执行x、y、z操作,则该文件会表现为是恶意文件。但是,实际上事情并没这么简单。
通过一种具体的操作无法明确断定一个对象是否有恶意。毕竟,创建的每条命令最初都是为了执行有用的操作。
首先,通过一种具体的操作无法明确断定一个对象是否有恶意。经典的例子是访问主引导记录(MBR):不能说所有使用此命令的程序都有恶意,因为有许多应用程序将此用于和平目的。同理也适用于其他所有操作;毕竟,创建的每条命令最初都是为了执行有用的操作。
换言之,像区分麦子和谷壳一样简单地甄别优劣是行不通的。但想办法算出麦子和谷壳的比例和构成却很有用。具体做法如下:了解自己粮仓中的现状,邻近粮仓中的现状,分析结果,有依据地判断麦子/谷壳总体情况 - 有多少是”朋友”,有多少是”敌人” - 然后进行相应的跟踪。
为此,我们运用了一项技术,从名字来看非常不起眼-SR。别误会,这可不是什么老牌牙膏的品牌,SR在此表示的是安全等级。从根本上来说,SR是一种分支型自学权重系统,在对对象进行正式评估和仿真的过程中,此系统能帮助您更好地了解对象的真正性质。
卡巴斯基”魔力配方”:通过自学权重系统,在对对象进行评估和仿真的过程中,可了解对象的真正性质。
SR会分析对象所生成事件的构成和密度,以及对象的外在属性(名称、大小、位置、压缩率等)。根据一系列规则集,这类属性中每个属性都会得到一个危险级别(0-100%)。第一组规则(目前有500多个规则)是人为对80,000多个不同系列的独特恶意程序进行研究的成果。如今,规则多数是自动制定,专业人员要做的只是对自学算法进行优化。
为了更好地管理测试和维护,规则被划分成多个组(例如,”互联网”、”密码”、”注册表”等),根据一组或多组规则检查了某个对象后,即会对该对象应用相应的制裁。
最简单规则的示例:
“通过低级别API ntdll.dll装入驱动程序”规则
API函数:NtLoadDriver
参数1:*
参数2:*
参数3…N:*
评估:单次操作 – 40%,2-3次操作 – 50%,>3次操作 – 60%
有害:否
“分析内核机器代码(采用hook)”规则
API函数:CreateFile
参数1:包含”ntoskrnl.exe”项
参数2:*
参数3…N:*
评估:单次操作 – 100%,2-3次操作 – 100%,>3次操作 – 100%
有害:是
对象的总等级等于使用整个规则数据库进行检查后得出的所有单个等级之和。换句话说,这是一种典型的人工神经网络,它从大量传感器采集信号,定量和定性分析信号特征,研究其中的关系,然后做出判断。
这是2007年SR刚开始推出时的工作原理(专利号US7530106)。在那之后,我们一直在改进此技术。就当你没猜中!
问题1:早期出现的问题是被分析文件会生成大量不重要的事件,这些事件可能会导致错误地判定该文件是恶意文件。例如,Delphi应用程序启动时,最高会生成500个此类事件。只要是用这种语言编写的应用程序,生成的事件完全相同,这表示与文件实际用途相关的有用信息为零。这种”干扰事件”不仅会占用计算机资源,还会增加分析工作的难度。
所以我们设置了一个过滤器,用于过滤掉所有这些干扰事件。此外,与这里的常用规则不同,仅用布尔属性就足够了。因此,规则得到极大简化,也加快了运行速度。这样一来,规则中就只包含API函数的名称,以及用于其参数的掩码。
例如:
SysAllocString (*,-NULL-,-NULL-)
在此,如果函数的第一个参数具有任何含义,而其他参数均无意义,那么该事件被视为不重要。
为了自动生成过滤规则来过滤掉不重要的事件,我们采用了三种方法:
第一种方法是果蝇法。我们使用开发工具X准备了一个简单的应用程序,用于显示”你好,世界”,并尽可能使用其最常用的DLL。我们将编译后的应用程序传输到仿真器中,所有生成的果蝇事件都会输入到”不重要”字段中。
第二种方法是打包果蝇法。这与第一种方法类似,但这种方法中,我们关注的是打包程序/防御程序的行为事件。对此,我们通过所有类型的打包程序和防御程序来处理在汇编器中编写的伪程序,传输到仿真器中,然后……剩下的你应该能猜得到。要是猜不到:)……我们就能过滤掉不重要的事件。
果蝇法如何帮助卡巴斯基防御未来的威胁?
第三种方法是统计法。我们对大量合法文件和恶意文件进行分析,标出在这两类文件的行为中常见的API调用。这种方法是前两种方法的补充,如果无法创建上述任何类型的果蝇,则这种方法会很有效。例如,应用此方法能标出GUI和内存分配功能生成的不重要事件。
但是(自动生成过滤规则以过滤掉不重要的事件)只是其中最简单的一个挑战。接下来事情变得更加有趣了……
第一版SR是在一台受保护计算机上运行,但该计算机实际上是处于封闭状态。我们没有架构图;也不了解触发了哪些规则(或者触发的频率或准确性),没法迅速改变其等级。因此,随着有效性的提升,不使用SR的可能性非常大……
……随后推出的是基于云的KSN(卡巴斯基安全网络),它的开发可称得上是全速进行,我们已经在此网络中增加了Astraea专家系统(用于分析来自受保护计算机的海量信号,并推导出关于全球网络流行态势的合理结论)。
再到2009年,我们高兴地宣布新版SR - SR2(US8640245)正式发布,新版SR融合了KSN和Astraea系统。
这给我们提供了大数据以及深入挖掘的机会,在安全行业中这是取得成功的”魔力配方”!
实质上,我们具备了以下能力:(i) 迅速排除(低效率)规则;(ii) 临时禁用或测试规则;(iii) 通过特殊系数,实际更正规则的实时等级。除此之外,系数数据库异常小(以千字节为单位),即便是在2009年,此数据库的更新也几乎不会影响受保护计算机的互联网连接。
Astraea还进一步拓宽了用于计算等级的统计框架 - 计算时不仅会使用来自不同仿真器的信号,还包括大量连接到KSN的其他传感器的信号。此外,产品可以从云(KSN)中获取先前发布的判断,从而跳过仿真过程。另外还有一个让人欣喜的意外收获:我们能够可靠地从流中选取尚未收集到大量相关数据的未知”片段”(但行为可疑)进行人工分析。
真正重要的是,Astraea会自动更正规则;专家们只需定期评估所应用数学模型的有效性,并对其进行优化即可(专利应用US20140096184)。
智能技术可以自动执行作业。例如:#卡巴斯基可在无人干预的情况下防御未来威胁
与全球大数据联手后,我们立即有了解决老问题的新思路:首先是误报问题。
产品诞生伊始,我们就不断地试验利用SR来防止误报。但直到2011年,这方面才取得了真正的进展:我们推出了多种新功能,一举将误报率降至最低。
完全没有恶意的合法软件会执行大量操作。例如,安装程序可删除System32文件夹中的文件。所以自动调节此操作的等级会使其无理由降级,而漏掉真正的恶意软件。为此,需要一种折衷方案:要么放着蛋糕,要么吃掉,没法两者兼得。所以我们决定将等级计算的机制拆分成三个部分:
第一部分:计算如上所述 - 行为越危险,符合的频率越高,则等级越高。
第二部分:某类白名单规则,用于撤销或更正应用于固定情景或文件的常用规则的操作。
第三部分:删除合法应用程序的规则,这样在找到典型行为时,会降低危险等级,甚至能够将等级降至”安全”。
示例:
“创建自动运行注册表项”规则
API函数:注册表:确定参数的含义 (RegSetValueEx)
参数1:包含项
“RegistryMachineSoftwareClasses*shellexContextMenuHandlersNotepad++”
参数2:*
参数3…N:*
评估:单次操作 – 1%,2-3次操作 – 1%,>3次操作 – 1%)
有害性:无
在此我们可以清楚地看出,该注册表项被调用;但是,这是唯一传递其DLL的Notepad++。规则参数删除了错误,而主规则保持稳定;对于其他更改该键的尝试,它仍然如预期进行工作。2011年下半年,我们推出了另一个(你知道我们没有在胡闹)有用的功能。如上所述,在SR中规则是彼此独立工作的;因此,我们没法研究复杂的相互依赖性,比如加载文件 - 将文件保存到磁盘 - 添加自动运行键。但是如果我们能够跟踪此类相互依赖性,那么就可以评出等级,此等级不仅仅是单个事件的等级之和。绝对不是:)。所以我们决定在SR2中支持事件关联,以便更准确地检测到未知恶意软件。
在此我们可以清楚地看出,该注册表项被调用;但是,这是唯一传递其DLL的Notepad++。规则参数删除了错误,而主规则保持稳定;对于其他更改该键的尝试,它仍然如预期进行工作。2011年下半年,我们推出了另一个(你知道我们没有在胡闹)有用的功能。如上所述,在SR中规则是彼此独立工作的;因此,我们没法研究复杂的相互依赖性,比如加载文件 - 将文件保存到磁盘 - 添加自动运行键。但是如果我们能够跟踪此类相互依赖性,那么就可以评出等级,此等级不仅仅是单个事件的等级之和。绝对不是:)。所以我们决定在SR2中支持事件关联,以便更准确地检测到未知恶意软件。
为此,我们采用了两种方式。
首先,我们创建了位掩码,用于通过OR和AND来确定规则组或单独的规则。主要描述是行为分类的位索引。最初,考虑的是根据恶意软件行为的特性,对恶意软件集群,但类似的方法也适用于优化等级评估。事实上,借助掩码,我们能够实施类似(RULE76 or RULE151)和(RULE270 or RULE540)等函数。此类掩码的优点是压缩性和运行速度快;但局限性是不够灵活。
其次,我们开发了专用脚本,用于在SR的计算后执行全局分析(专利号US8607349)。这些脚本可以单独轮流启动,或者因触发规则或在触发规则时启动。每个脚本都有权访问汇集了早期触发的规则和规则组的统计信息的数据库。因此,我们有能力:(i) 使用复杂逻辑 - 条件、计算和周期,并激活子程序;(ii) 最大限度地利用中性网络;(iii) 使用脚本获取更准确的SR等级,并获取可由后续脚本应用的新知识。
例如,根据对数十条规则的分析,第一个脚本可能确定的是”应用程序尝试获取其他程序的密码”。第二个脚本确定的是”应用程序将某些内容传输到互联网”。第三个脚本确定的是”如果应用程序表现出对密码感兴趣,并且将某些内容传输到互联网,则获得的等级为+100%”。
此外,脚本还可与任何规则一起使用,其中最后一条规则成为某类算法的触发器类型。
脚本示例:
VarS : string;begin
if copy(ExtractFilePath(APIArg[1]), 2, 100)=’:’ then begin
AddSR(20);
s := LowerCase(ExtractFileExt(APIArg[1]));if S = ‘.exe’ then AddSR(40);
if S = ‘.com’ then AddSR(50);
if S = ‘.pif’ then AddSR(60);
if S = ‘.zip’ then AddSR(-20);
end;
end.
在本例中,脚本评估了创建文件的操作。我们检查到文件是在磁盘根目录中创建的,因此为SR提供的等级是20%。接着,根据文件扩展名,我们又通过”+”或”-“号增加了额外的评定。
提供的示例突出显示了脚本的主要优点:能够对函数的参数执行复杂的区别性评估,并根据不同检查的结果来分配各个SR等级。另外,某些检查可能会提高等级,而另一些则可能会降低等级,这允许运行复杂检查和复杂分析,直接目标是进一步抑制误报率。
下面将谈谈未来的发展……
我们已经着手推出2015个人产品系列。此产品的推出经过了长期艰苦的探索……最终我们决定放弃本地SR,而改为将等级计算结果完整传输到云。
通过这种方法,我们几乎立即具备了多种优势:分析质量不再是问题,受保护计算机上需要的资源减少 - 因为所有计算全部在云中进行。对于交付判定的延迟时间,将占用(嗯,实际上根本感觉不出来)几分之一毫秒的时间,只有专用软件才会感知到;用户肯定不会察觉!
我要说的就是这些。在短短2000多字的文章中,我简要介绍了可口可乐式的”秘密”魔力配方:)。当然,这只是冰山的一角:要更详细地说明此技术需要花上几天的时间。照例,如果你想了解更多详情,请在下面的评论中留言!
哈!@e_kaspersky抵御未来威胁技术贴中技术含量最高的文章,虽然枯燥但值得一读