幻化万端难辨识
但道高一尺,魔高一丈。病毒的制作者当然也观察到了这样的现象,他们开始想尽办法制作不同的变种,改变病毒的代码,比如在病毒体内加入没有实际效用的所谓“花指令”,或者将不同的指令变换为功能相同的指令,以此躲避杀毒软件的检测。但这样的手段,即使一时骗过了杀毒软件,在新病毒被研究人员捕获并分析之后,杀毒软件很快就能更新到能查杀新的变体。
病毒制作者自然不会善罢甘休。既然特征码针对的是病毒代码之中的固定部分,那么如果病毒在每次传播时,具体代码都会改变,那不就能逃脱特征码查杀的套路了?沿着这种思路开发的病毒,又叫自修改病毒。
最早的自修改病毒叫1260,早在1990年就出现了。它由两个模块组成:代码模块和解密模块。代码模块平时是被加密压缩的,而病毒在被激活时,会先运行解密模块,把包含真正的感染和破坏指令的代码模块解密,然后再去执行代码模块。而当病毒感染其他文件时,会随机打乱解密模块的部分内容,形成新的解密模块,然后用它来将代码模块重新加密。这种复杂的构造,就能保证每次感染时出现的病毒体都与以往完全不同,大大增加了查杀的难度。这种相对简单的自修改病毒,又叫多态病毒(polymorphic virus)。

然而这种小技巧并没有难倒安全研究人员。就像自然界中真正的病毒那样,多态病毒即使变异很快,仍然有一些至关重要的部分保持相对稳定,那就是解密模块。研究人员很快就学会了利用解密模块的特征来识别多态病毒。迫使多态病毒采用更多措施来打乱自身代码,比如说自动加插花指令和进行等价指令的替换,又或者是自动重新排列自身的代码。但安全研究人员很快就想出了反制的办法,毕竟这些改动都不算大,检测也不算困难。
最后病毒制作者只剩下一个希望:写出一个病毒,在每次感染时,病毒的几乎每一段代码都会产生重大改变。这样的话,就不可能在代码的层面上探测出这个病毒了。
说得轻巧,但具体怎么做呢?
黑客们想出了一条可谓破釜沉舟的计策:每次要感染新文件时,先把病毒本身转换为某种“中间代码”,然后将中间代码用另一种完全随机的方式编译,得到的就是全新的病毒代码。这种中间代码可以有无数种编译方式,但得到的代码执行时的行为都完全一样。以这种方式编写出来的病毒,又叫变形病毒(metamorphic virus)。通过先转换为中间代码再编译的方式,它们“变形”得到的具体代码千变万化,但具体的行为却完全一致。
最有名的变形病毒叫Simile,在2002年第一次出现,当时给安全研究人员带来了很大的麻烦。正因为它可以“变形”为与之前完全不同的代码,这使得特征码提取的方法基本失效。幸而变形病毒的研发非常复杂,尤其是“变形”所需的代码非常复杂(Simile中有90%的代码专门负责变形),所以变形病毒数量相当少。但即使变形病毒的门槛很高,随着技术的进步,也终会有普及的一天。即使是为了未雨绸缪,也应该想办法开发新技术去对付这种新型病毒。
但道高一尺,魔高一丈。病毒的制作者当然也观察到了这样的现象,他们开始想尽办法制作不同的变种,改变病毒的代码,比如在病毒体内加入没有实际效用的所谓“花指令”,或者将不同的指令变换为功能相同的指令,以此躲避杀毒软件的检测。但这样的手段,即使一时骗过了杀毒软件,在新病毒被研究人员捕获并分析之后,杀毒软件很快就能更新到能查杀新的变体。
病毒制作者自然不会善罢甘休。既然特征码针对的是病毒代码之中的固定部分,那么如果病毒在每次传播时,具体代码都会改变,那不就能逃脱特征码查杀的套路了?沿着这种思路开发的病毒,又叫自修改病毒。
最早的自修改病毒叫1260,早在1990年就出现了。它由两个模块组成:代码模块和解密模块。代码模块平时是被加密压缩的,而病毒在被激活时,会先运行解密模块,把包含真正的感染和破坏指令的代码模块解密,然后再去执行代码模块。而当病毒感染其他文件时,会随机打乱解密模块的部分内容,形成新的解密模块,然后用它来将代码模块重新加密。这种复杂的构造,就能保证每次感染时出现的病毒体都与以往完全不同,大大增加了查杀的难度。这种相对简单的自修改病毒,又叫多态病毒(polymorphic virus)。

然而这种小技巧并没有难倒安全研究人员。就像自然界中真正的病毒那样,多态病毒即使变异很快,仍然有一些至关重要的部分保持相对稳定,那就是解密模块。研究人员很快就学会了利用解密模块的特征来识别多态病毒。迫使多态病毒采用更多措施来打乱自身代码,比如说自动加插花指令和进行等价指令的替换,又或者是自动重新排列自身的代码。但安全研究人员很快就想出了反制的办法,毕竟这些改动都不算大,检测也不算困难。
最后病毒制作者只剩下一个希望:写出一个病毒,在每次感染时,病毒的几乎每一段代码都会产生重大改变。这样的话,就不可能在代码的层面上探测出这个病毒了。
说得轻巧,但具体怎么做呢?
黑客们想出了一条可谓破釜沉舟的计策:每次要感染新文件时,先把病毒本身转换为某种“中间代码”,然后将中间代码用另一种完全随机的方式编译,得到的就是全新的病毒代码。这种中间代码可以有无数种编译方式,但得到的代码执行时的行为都完全一样。以这种方式编写出来的病毒,又叫变形病毒(metamorphic virus)。通过先转换为中间代码再编译的方式,它们“变形”得到的具体代码千变万化,但具体的行为却完全一致。
最有名的变形病毒叫Simile,在2002年第一次出现,当时给安全研究人员带来了很大的麻烦。正因为它可以“变形”为与之前完全不同的代码,这使得特征码提取的方法基本失效。幸而变形病毒的研发非常复杂,尤其是“变形”所需的代码非常复杂(Simile中有90%的代码专门负责变形),所以变形病毒数量相当少。但即使变形病毒的门槛很高,随着技术的进步,也终会有普及的一天。即使是为了未雨绸缪,也应该想办法开发新技术去对付这种新型病毒。