朝花夕拾(1)——最新病毒技术--魔力字节的神奇

来源:互联网 发布:焓湿图计算软件app 编辑:程序博客网 时间:2024/04/30 00:06

 

 最新病毒技术--魔力字节的神奇    
 魔力字节的神奇
作者:Andrey Bayora
www,securityelf.org
翻译:anbingchun
序论:
 当一个反病毒或是有类似功能的扫描器打开一个文件并对它进行扫描之前,必须先判断它是什么类型的文件(是一个可执行文件还是一个音频文件),这对于提高扫描速度非常重要,对于那些不相关的文件就可以过去,只对那些有恰当特征的文件进行扫描。同时也可以降低扫描器误报的概率。对于那些早期的反病毒扫描器只是通过文件的扩展名对文件的类型的类型进行判断(如一个文件的名字为hello.exe 就把这个文件当成是可执行文件),然而很快就发现这种方法是不准确的。因此现在所有的反病毒扫描器都是通过文件的内容来判断文件的类型的。例如可执行文件(.EXE)以字符串“MZ”(0x4d5a)开头。然而并不是所有的文件类型都有文件头,不如文本文件.txt就没有文件头,甚至有一些文件类型支持我们所说的流文件头,在这些文件中文件头可以在文件的任何位置,应此程序为了寻找文件头必须扫描整个文件。换句话说,一些无关的数据在不影响文件的使用的前提下,可以预先考虑做其他用途的使用。
 下面是一个实际的例子,这个文件由于给其中对文件使用没有影响的不相干数据预先设定特定的值,就能伪装成其他文件类型,用于检测文件类型的扫描器就会判断错误。然而执行时,依然按照原来的文件类型应有的执行方式进行执行。另一个问题由于预先设定的数据的长度是可以变化的,要确定相对于最初起始点的偏移量是非常困难的,有时甚至是不可能的。再有一个问题就是有些流文件是不区分大小写的,应此对于“HTML”的扫描,就必须对"<html>", "<HTML>", "<HtMl>" 等字符串全部进行扫描。
 在今年的早些时候,我和Andrey彼此独立的研究了MS04-028 JPEG脆弱行的课题,我开发了一个简单且免费的用来检测受影响文件的扫描器(IPEGScan)。Andrey 开发了一个(Andrey developed a clever alteration of the existing vulnerability,)它可以阻止当时大多数的扫描器,甚至那些可以处理原始的MS04-028脆弱性。JPEG是一种支持流文件头的文件格式,因此我与Andrey分享了我的有关文件类型检测以及错误的文件头插入方面的想法和发现。相关程序的出项只是一个时间问题,如果几个月后Andrey带着他成功开发的程序再次出现我是不会惊讶的。
 这是近期来反病毒软件中最严重的漏洞之一,这个漏洞几乎影响大多数的杀毒软件的扫描引擎,并且有可能迫使反病毒厂商改变他们软件中检测文件类型的方式。这有可能会导致对于流文件引擎必须扫描整个文件。如果这样的话扫描的速度会受到严重的影响,经管今后会有可能设计出更加智能的文件头分析算法。
描述举例:
在我的一个题为:“通过伪造魔术字节,可以顺利通过众多反病毒厂商杀毒软件的扫描而不被发现”的报告中列出了15个存在此问题的杀毒软件厂商。
这里有一个简单的例子,一个带有EXE文件头的BAT批处理文件能够执行dir指令。

 测试环境:Windows XP Professional SP2 打了2005年六月23号以前的所有补丁。
以下是测试工具包的描述。搜集了若干已经存在的.bat和.html文件格式的老病毒。它们是:

Virus.BAT.Sakura.bat
Virus.BAT.IBBM.ClsV.bat
Virus.JS.Fortnight.f.html
Virus.HTML.NoWarn.a.html
Virus.HTML.Internal.html
接着通过一下方法对它们进行修改,从而制作出测试包。
1.要确保原来的病毒样本,杀毒软件是能检测出来的。
2.添加MZ_前缀--给病毒体加一个120字节(用十六进制表示是0x78)的EXE文件头。如下所示:

3.给文件添加TXT前缀--EXE文件头不变,前两个字节由MZ改为ZZ,如下图所示:

4.一个.eml邮件类型的文件在它的附件中包含了一个最初的病毒文件,对病毒文件的文件头按照2,3步骤进行修改,在这里我们预先计划好的0x115个字节的内容插入到.eml文件中。如下图所示:

5.文件中的MZ和TXT前缀只占用两个字节,魔力字节本身是相关的(文件之所以被这样创造,反病毒厂商如McAfee和UNA的产品在病毒签名方面有漏洞。如果我们预先大量字节,他们的产品就无法检查出病毒)。如下图所示:


测试思路:如果反杀毒软件可以在TXT文件中检测出病毒而在MZ文件中检测不到病毒,则扫描流被破坏,反病毒软件错误的认为这个文件是一个可执行类型的文件,而不是其文件扩展名所标注的.bat、.eml、或是.html文件。注意这不是通过改变现有文件中的被反病毒软件所检测的特征码,来逃脱反病毒软件检测的。因为事实上在包含了ZZ魔力字节的预先设计的120个字节之后的病毒数据仍然可以被反病毒软件检测到。
测试结束:众多的杀毒软件都无法检测出这些已知病毒。
以下是一些反病毒软件扫描结果的截图(略)
这是一个三头程序——三个不同的可执行入口点,分别对应着exe、html和eml三种类型的文件。只要修改一下扩展名,同一个文件可以有三种不同的执行结果。(感谢Wayne Langlois为我们提供了如此精彩的程序www.diamondcs.com.au)
汇编源码:
; EXE-HTM Hybrid
; by Wayne Langlois (www.diamondcs.com.au)
 
include 'e:/dev/asm/fasm162/include/win32ax.inc'
 
_HTML db 'Reply-To: <wayne@local>',0Dh,0Ah,'From: <wayne@local>',0Dh,0Ah,'To: <wayne@local>',0Dh,0Ah,'Subject: My subject',0Dh,0Ah,/
     'Content-Type: multipart/alternative; boundary="--Boundary"',0Dh,0Ah,/
     0Dh,0Ah,/
     '----Boundary',0Dh,0Ah,/
     0Dh,0Ah,/
     '<html><body>',0Dh,0Ah,/
     '<script language="vbscript">Msgbox "Hello from the HTML component!"</script>',0Dh,0Ah,/
     '</body></html>',0Dh,0Ah,/
     '----Boundary',0Dh,0Ah,/
     'Content-Type: text/html',0Dh,0Ah,/
     0Dh,0Ah,/    'This is the text that will be seen when viewed as a .EML',0Dh,0Ah,/
     0Dh,0Ah,0Dh,0Ah,/
     '----Boundary--',0Dh,0Ah,0
 
.code
  start:
    invoke  MessageBox,HWND_DESKTOP,"Hello from the EXE component!","EXE",MB_OK
    invoke  ExitProcess,0
.end start

这里有一个已经编译好的例子。每次修改不同的扩展名exe、html、eml都会有不同的运行结果(注意html格式的文件需要在IE中打开)。最初Wayne Langlois如此描述他的程序:从本质上说它是一个混血儿一个html文件中隐藏着一个eml文件,而eml文件中又有一个exe文件。以至于我可以把html文件隐藏起来,而运行一个EXE文件,你会看到一个“Hello from the EXEcompent!”的对话框,也可以作为一个eml文件,你会看到一封显示“This is the text that will be seen when viewed as a .EML”的正常的电子邮件。还可以作为html格式文件打开,你会看到来自HTML页面写着“Hello from the HTML component!”的VB脚本的消息框跳出来。同是也会看到一些来自文件中的垃圾信息显示在屏幕上,但这并不是真正的结果,因为那时候VB脚本已经开始运行了。因此本质上说我们有一个文件根据文件扩展名的不同却有三个不同的执行入口点。

 

原创粉丝点击