針对Tor网络的恶意代码分析.docVIP

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
針对Tor网络的恶意代码分析

一、背景 Tor(The Oninon Router)提供一个匿名交流网络平台,它使得用户在浏览网页或访问其它网络服务时不会被跟踪。作为该网络的一部分即所谓的“暗网”(darknet),是指只能通过Tor网络访问的服务器群组,这些服务器提供包括社区论坛、电子邮件等多种服务。虽然提供这些服务都是无恶意的,初衷是用来关注侵犯人权问题,但是由于匿名的原因吸引了很多有犯罪意图的人,比如传播儿童色情。事后执法部门也不能追踪到犯罪者的源IP地址。 2013年,在“暗网”服务器上发现了一款恶意软件,它利用特定Web浏览器上的安全漏洞在用户电脑上执行一段代码。该代码收集一些用户信息,发往弗吉尼亚州的服务器,之后自毁。就恶意软件的特征来讲,它没有明显的恶意意图。初步推断是FBI植入,他们在弗吉尼亚州有办事处,曾经也派专人开发过恶意程序,可能是他们创建了它—现在看来是真的。 二、对Shellcode的逆向分析 1、漏洞利用 漏洞利用代码用javascript编写,利用一个出名的firefox浏览器的特定版本(Tor网络预装的firefox)的漏洞。该漏洞利用代码经过了模糊处理,但通过快速扫描可以看到一长串十六进制字符,这些字符是shellcode的前几个标志性字节,即call操作码(shellcode经常以一个jump或call开始,因此知道了这些操作码使得识别shellcode变得容易起来)。 我不会在这里分析这个漏洞,但是要看一下这个shellcode。 首先,让我们用一些基本的shellcode原则设定一个场景。 2、位置无关代码 Shellcode的成功执行经过了独一无二的挑战,因为它是直接注入到一个进程而不是由Windows加载器加载。因此,我们不知道shellcode位于内存中的什么地方,更关键的是,不知道标准的windowsAPI函数位于什么地方(而通常情况下,Windows加载器会告诉一个程序这些信息)。 因此,我们必须使用一系列技巧去获得这个信息。FBI恶意程序用了一个常用的技巧去找出它的内存地址: call start start: pop ebp 在此,我们将要用这个值,从栈里窃取位置,堆栈弹出的值保存到ebp寄存器。我们现在知道了下一条指令的地址,那么就可以用它来访问跟我们的shellcode相关的数据。 三、定位Windows API 因为正常情况下Windows加载器会加载Windows API的位置到我们的程序,所以我们不奢望运行一个shellcode时能够知道程序的位置信息。找出API函数惯用的方法是查看FS段寄存器所指的线程信息块(thread information block)。我们能够通过这个结构体去定位被我们shellcode宿主程序加载的DLLs,然后利用这些DLL的输出直到找到目标函数为止。当然这个过程是很乏味的,所以,FBI这个shellcode使用了一个库,包含在MetasploitFramwork内,这是由Stephen Fewer写的一个函数解析器。它的工作原理如下: push arguments . . . push FUNCTIONHASH callStephen’sResolver 这个函数的哈希值是由一个简单的hash算法生成,以我们调用函数的名称命名。这样做的目的不是为了混淆代码(尽管它达到这个目的),但只允许我们用一个32位的DWORD来调用此函数,而不是一个长型字符串(shellcode空间往往是有限的)。 值得庆幸的是,我们自己可以计算出hash值,或者用别人生成的查找表。 四、开始 如果我们对shellcode的开始进行反汇编,如下图: 我们一旦计算出指向API解析器的ebp寄存器值,我们就可以在windows的API进行哈希调用前获取其十六进制数。如此,如果在查找表里查找到那个值,在那个值附近查找调用的函数,并且添加一些注释,如下图: 这段代码执行完整性检查,通过用GET 开始的HTTP请求头部信息以确保shellcode安全运行。然后调用Windows API函数LoadLibrary()载入两个动态链接库:ws2_32.dll(用于互联网通信的Windows套接字库)和iphlpapi.dll(WindowsIP辅助库)。 五、连接到HTTP服务器 在必要的库文件都加载完之后,shellcode将执行下图中的操作: 再一次,用相同的步骤,用哈希值查找一个Windows API函数:connect()函数。我们可以看见,在[ebp +0x2e1]位置的数据作为一个参数传递给connect()函数—从手册我们知道,那个参数是一个sockaddr结构体(sockaddr structure)。我们知道ebp寄存器指向我们在内存中的地址,使用那个地址,再加上偏移量,

文档评论(0)

fglgf11gf21gI + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档