中国领先的IT技术网站
|
|

19.8 找到shellcode

《恶意代码分析实战》第19章shellcode分析,本章解释了shellcode是什么,并展示分析恶意shellcode的一些技巧和窍门。本节为大家介绍找到shellcode。

作者:诸葛建伟/姜辉/张光凯 译来源:电子工业出版社|2014-05-11 15:22

沙龙活动 | 去哪儿、陌陌、ThoughtWorks在自动化运维中的实践!10.28不见不散!


19.8 找到shellcode

可以在很多资源中找到shellcode,包括网络流量、网页、媒体文件及恶意代码。因为不可能总创建拥有漏洞程序正确版本且能够触发漏洞利用的环境,所以恶意代码分析者必须尝试仅仅通过静态分析技术来逆向工程shellcode。

通常恶意网页使用JavaScript探测一个用户的系统轮廓,并检查存在漏洞的浏览器版本及已安装的插件。通常,JavaScript中的unescape函数也被用来将编码过的shellcode文本转换为可执行的二进制代码。shellcode经常作为一个编码后的文本字符串,包含在能够触发漏洞的渗透脚本中。

unescape的编码方式会将文本%uXXYY视作一个编码后大端Unicode字符,这里的XX和YY是十六进制值。在小端的机器(比如x86)上,字节序YY XX是被解码后的结果。例如,考虑如下文本字符串:

它将被解码为下面的二进制字节序列:

一个后面没有紧跟字母u的%符号,会被作为一个单独编码后的十六进制字节对待。例如,文本字符串%41%42%43%44会被解码为二进制字节序列41 42 43 44。

提示:单字节与双字节字符编码可以被同时用在同一个文本字符串中。这在使用JavaScript语言的地方(包括PDF文档中)是非常普遍的编码混淆技术。

在恶意可执行文件中使用的shellcode通常是容易识别的,因为整个程序会使用混淆shellcode技术编写,或是一段shellcode有效负载被保存在恶意代码中,并被注入到另外一个进程进行执行。

通常可以通过查找一些典型的进程注入API调用来找shellcode有效载荷,在本书第12章中讨论过相关调用,它包括VirtualAllocEx、WriteProcessMemory及CreateRemoteThread。如果恶意代码启动一个远程线程,但没有应用重定位修正或解除外部依赖,那么被写入其他进程的缓冲区中很可能包含shellcode。这种操作对恶意代码编写者来说可能很方便,因为shellcode可以引导自身,不需要原先恶意代码的帮助来执行。

有时shellcode在一个媒体文件中以未编码的形式保存。诸如IDA Pro这样的反汇编器可以加载任意二进制文件,包括那些被怀疑包含shellcode的文件。然而,IDA Pro即使加载这个文件,也可能不分析这段shellcode,因为它不知道哪些字节是有效的代码。

寻找shellcode的一般方法是搜索很可能在shellcode起始位置上存在的初始解码器。表19-2中列举了可以用来搜索的一些重要操作码。

表19-2  一些要搜索的操作码字节

试着在已经加载的文件中反汇编表19-2中列举的操作码的每一个实例。所有有效代码应立即变得很明显。记住有效载荷可能被编码过,所以只有解码器是最先可见的。

如果这些搜索都找不到任何shellcode的迹象,仍然可能存在嵌入的shellcode,因为有些文件格式允许加入编码过的嵌入数据。例如,针对Adobe Reader软件CVE-2010-0188高危安全漏洞的渗透利用代码,使用了恶意构造的TIFF图像,进行了zlib压缩,并以Base64编码成字符串,然后被包含在PDF文件中。当你遭遇到一些特定的文件格式时,你需要熟悉这种格式及其包含的数据类型,以便查找恶意内容。

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢
24H热文
一周话题
本月最赞

读 书 +更多

Java程序员面试宝典

本书是程序员面试宝典系列中的一册,也是上一本《程序员面试宝典》的姊妹书。本书对程序设计面试中Java常见的题型和常用解答技巧进行了介绍...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊
× Python最火的编程语言