提到JPEG病毒要从内存地址讲起
2004年9月14日,微软发布了安全公告 MS04-028,其作用是修补"JPEG 处理时 (GDI+) 的缓冲区溢出可能允许执行代码"的漏洞,也就是近一阵的"JPEG病毒"所利用的。以下是瑞星官方网站的部分报道:
提到JPEG病毒要从内存地址讲起
2004年9月14日,微软发布了安全公告 MS04-028,其作用是修补"JPEG 处理时 (GDI+) 的缓冲区溢出可能允许执行代码"的漏洞,也就是近一阵的"JPEG病毒"所利用的。以下是瑞星官方网站的部分报道:
瑞星公司日前发布红色(一级)安全警报。警报显示,微软Windows系统出现重大漏洞,瑞星互联网功防实验室已经在互联网上监测到针对该漏洞的攻击代码,可以认为,一种高危的新型病毒---图片病毒极有可能在近期出现。
专家表示,所有Windows用户都有可能被这种新型病毒攻击,这类病毒可以用任何方式攻击用户电脑系统,包括格式化硬盘、删除文件等等。所有带有 JPG图片的邮件、网页都有可能成为这类新型病毒的传播渠道。这类病毒有可能通过以下形式发作:1.群发邮件,附带有病毒的JPG图片文件;2.采用恶意网页形式,浏览网页中的JPG文件甚至网页上自带的图片即可被病毒感染;3.通过即时通信软件(如MS N、QQ等)的自带头像等图片或者发送图片文件进行传播。
那么,这个"JPEG病毒"是如何发作的呢?危害性又有多大?小编在这里为您粗略的解释一下,同时欢迎大家进行讨论。
要解释这个病毒的发作原理,首先要从内存讲起。Windows管理的内存中,包括应用程序空间以及核心空间,如下图所示:
在打开JPEG文件的时候,需要将文件中的相关部分装载到应用程序空间中的红色区域进行处理。这本来是一件很美好的事情,但是微软的操作系统和很多应用软件都有一个特点——对JPEG的操作模块在内存中的位置非常固定,现在这个特点可能要再一次将盖茨搞得身败名裂......
不仅JPEG操作模块的地址固定,Windows核心内存空间的起始地址也是非常固定的,而这又会导致什么严重的后果呢?下面就需要引出另一个概念——溢出。
溢出漏洞这次又来"老兵新传"
刚才提到内存的应用程序空间中有对JPEG操作的模块,打开我们在打开*.jpg文件的时候,系统就要将文件中的相关数据装载到这个模块中,而如果有人故意把这些相关数据部分做得异常的大,会怎么样呢?
如果软件方面比较完善的话,会对这个区域有保护措施,不允许这些超出范围的数据从模块中"溢出来",否则的话这些溢出的数据会一直向着内存中其他部分延伸,可能造成蓝屏等症状。
但是,微软在这里恰恰没有保护措施!以至于攻击者可以做到将任意长度的数据、代码从JPEG操作模块中一直覆盖到核心空间,而核心空间有一个特点:允许执行极高权限的代码。这样一来攻击者就能够做到完全控制目标主机,删文件、格硬盘......
但利用单纯的溢出漏洞,要想做到这一点也不是那么容易,因为攻击者不知道大量的异常代码要多长才合适。如果在进入核心空间之前就执行恶意代码,是没有足够权限的。而我们刚才提到,微软的操作系统和很多应用软件的相关地址非常固定,因此攻击者可以轻易的计算出所需的代码长度,并"严丝合缝"地在核心空间处执行。
需要补丁的不仅是操作系统了
其实溢出漏洞早已不是什么新鲜事物,关键就是这次配合上了极其规律的内存地址分布,这问题就严重了。不知道大家是否了解,前一段大出风头的"冲击波"病毒也是利用了类似的漏洞组合而发作的。
冲击波的病毒编写者是根据Win2000操作系统的内存特点来编写的代码,因此冲击波在Win2000下会完美发作,导致IE无法打开新窗口、剪贴板失效等等症状。而由于WinXP下的内存分布与Win2000有所不同,因此冲击波在WinXP下会表现为RPC操作不成功,默认情况下导致系统重启而不会进行其他破坏。