网站首页 > 写作素材> 文章内容

为什么光有杀毒软件还不够:我是如何编写能够杀毒软件的恶意软件的

※发布时间:2017-10-16 16:09:21   ※发布作者:habao   ※出自何处: 

  杀毒软件(AV)是一个较大规模安全防护策略的重要组成部分,能够减缓恶意软件在互联网上的速度。这就像一个农场主自己的牲畜一样。一个聪明的农场主会在生物出现之前给很多牲畜接种这方面的疫苗。即便是有一只牲畜被感染,它与其他未接种疫苗的牲畜的接触会被降低。由此一来,该生物就会在造成极小损失的情况下自行消除。一个没那么谨慎的农场主可能只会给一小部分的牲畜接种疫苗。由此一来,一旦有一只牲畜被感染,感染就会在牲畜之间快速蔓延,进而造难性的损失。

  杀毒软件就像接种一样,而连通互联网的计算机和设备就是牲畜。当恶意软件等新出现后,一个疫苗或签名就会被创建来识别这种并注射到所有客户端中,进而大幅降低一个未接种疫苗的客户端与感染接触的可能性。

  不过这一系统意味着在“解药”研制出之前还是造成了损害,从而使得杀毒软件在抵御方面显得必要但不足够。要想针对某个对一个目标进行接种,就必须知道这个。因此,在研发出疫苗对客户端进行之前至少会有一小部分的客户端被感染。这是一个很多杀毒软件供应商都不会突出强调的事实。此外,尽管这是一个常识,客户通常也不会认识到这一常识,既因为杀毒软件在长达几十年的时间里已经成为了一个行业标准,又因为杀毒软件在早些年被认可为解决这一问题的良方妙招。

  近期,我对杀毒软件以及恶意软件检测策略进行了演示以帮助突出强调这一担忧,并承认每天都会有未识别的新进入网络,进而无可避免地造成一些损害。为了对此进行演示,我特意编写了一个恶意软件,旨在作为一个命令与控制(C&C)僵尸程序(bot)进行运行。它将接收来自者的指令并在受感染的机器上以最高的优先级对这些指令进行执行。

  很多的现代都需要大量的机器。比如,一次分布式服务(DDoS)需要互联网上成千上万台机器在同一时间访问同一网站,从而让服务器过载死机。一个命令与控制僵尸程序能够完美地帮助完成这种类型的。者可能不知道僵尸程序最终的用途是什么,不过如果僵尸程序被设计得足够灵活和通用,它们就很容易被扩展,从而在无需发起一个新的恶意软件活动的前提下发起新的。事实上,者可以拥有和控制互联网上数万立计算机并利用这些计算机来实施他们想要实施的任何行动。在安全领域之外的其他领域有很多正派的研究人员会乐意付出任何代价以拥有如此强大的资源场,特别是在不需要为此付钱的情况下。

  有了这个特意编写的恶意软件,我便开始了解现代的杀毒软件客户端在面对未知时的有效程度。此时,还没有杀毒软件供应商有机会见到恶意软件代码,因此也就没有机会为其编写签名。这就让众多的杀毒软件供应商有些为难。要想提供任何形式的,就必须采用不依赖对某个特定编写签名的创新检测策略。

  这时候一种名为“代码模拟”的技术就派上用场了,而这一技术也被众多的杀毒软件解决方案所采用以帮助弥补签名的不足。代码模拟是一些较为高端的杀毒软件客户端所采用的用来识别恶意应用程序的创新策略之一,即便是这些恶意应用程序此前从未被发现过。并不是所有的杀毒软件客户端都使用这一技术。一些杀毒软件客户端会使用一些替代技术,有些杀毒软件客户端在使用替代技术的同时也会使用代码模拟。我选择了一些拥有最大市场份额的流行杀毒软件客户端对我特意编写的病毒进行了测试。在理想状态下,所有这些客户端都应该使用了此类策略。不过从实际情况来看,我发现我测试的八家杀毒软件供应商中只有一家杀毒软件供应商能够检测到我特意编写的这个恶意软件。

  事实上,这并不是一个特别糟糕的结果。测试结果表明,至少有一家杀毒软件供应商能够检测出一个所有杀毒软件供应商都未曾见过的恶意软件,这至少意味着该恶意软件相对来说能够很快地被检测到。一旦恶意软件被至少一家杀毒软件供应商在至少一台客户端机器上检测到,该恶意软件通常会被分享给所有其他的杀毒软件供应商以便大家能够发布签名对此进行防护。不过在恶意软件碰到来自那家杀毒软件供应商的那个杀毒软件客户端之前,在那家杀毒软件供应商跟其他人分享之前,一些附带损害又会再一次出现。

  推荐:

  

关键词:如何编写软件