欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

反汇编与运行时函数研究

来源:本站整理 作者:佚名 时间:2017-10-18 TAG: 我要投稿

在咱们以前针对64位CCleaner的阐发文章中,咱们跟人人先容了对于入侵攻击者若何改动一个正当可执行法式(赛门铁克产物)的方法。入侵攻击者所改动的文件名为EFACli64.dll,改动进程发生在运行时代码当中,更精确地说,入侵攻击者改动的是__security_init_cookie()函数。入侵攻击者改动了该函数中末了一个指令并胜利节制法式跳转到了歹意代码之上。然则,闻名的反汇编对象IDA Pro却没方法失常表现出代码的改动情况,咱们在本文中会跟人人先容这部分信息。末了,咱们还会给人人先容若何来辨认这类歹意情势的代码改动操纵,和响应的限定步伐。
IDA Pro与改动后的运行时代码
在咱们的对改动后的可执行法式的阐发进程中,咱们在发明IDA Pro在表现改动后的运行时代码(已编译版本)碰到了一些艰苦,由于IDA Pro无奈应用可视化视图精确地表现已编译版本的运行时代码:

咱们可以或许从上图中看到,末了一条指令为“pop rdi”。假如咱们切换到文本视图的话,咱们就能够或许立即看到,末了一条指令实在应该是“JMP”(跳转到歹意代码):

咱们在对开源反汇编对象Radare2的源代码停止了反省和阐发以后,咱们发明这个函数的开头确实是有一个jmp指令:

得到了这些信息以后,咱们就开端思虑了:为何IDA Pro没有给咱们表现这末了一条指令(这是最重要的一条指令)呢?
由于咱们所用的这款软件并非一款开源软件,是以咱们就无奈间接去反省法式源代码了。但咱们可以或许假定IDA Pro应用了pdata数据域来获得从开端到停止的运行时函数,咱们待会儿会在下一章节对这部分内容停止先容。
那末第二个成绩就来了:入侵攻击者岂非是有意应用这类机制来滋扰网安研究职员的阐发的吗?入侵攻击者是命运运限比较好可巧碰到了这个功效,还是说他们便是专门应用这一技能来在IDA Pro中暗藏他们的跳转敕令呢?咱们如今也无奈百分之百公开定论...
PDATA数据域
微软对pdata数据域的描写和先容可以或许参考这篇文章。这个数据域中包括一个存储了函数条目标数组,这些函数均是用来处置法式异常的。在咱们的测试情况中,pdata数据域中包括如下数据结构:
+0x000:        Begin Address: The RVA of the corresponding function.
+0x004:        End Address: The RVA of the end of the function.
+0x008:        Unwind Information: The RVA of the unwind information.
下面给出的是与咱们的__security_init_cookie()函数无关的数据:
+0x000:        0000F620  -> RVA of the beginning of __security_init_cookie()
+0x004:        0000F6D3  -> RVA of the end of __security_init_cookie()
+0x008:        00010464
函数的开头地点(0xF6D3)位于跳转指令的中央地位,经由过程改动函数的开头地点(将本来的0xF6D3改动成为了0xF6D7),IDA Pro就能够或许精确表现末了一条指令“JMP”了。这也便是咱们为何可以或许假定IDA Pro应用pdata数据域来检索运行时函数的缘故原由了。
Python剧本检测异常的运行时代码
依据咱们适才所发明的信息,咱们开辟出了一个可以或许基于pdata数据域来检测异常运行时代码的简略Python剧本。这个剧本的完成机制如下:它可以或许依据pdata数据域和函数末了一条指令的地点来扫描运行时代码,假如扫描到的指令并非本剧本所界说的指令(咱们的剧本中界说的是validInstructions = [ "ret", "retn", "jmp", "int3" ]),那末剧本将会提示用户扫描到了可疑的运行时函数。下面是咱们对CCleaner的阐发输入:
user@lab:$ ./pdata_check.py sample.exe
{ 'ASM': [ u'mov qword ptr [rsp + 0x18], rbx',
u'push rdi',
u'sub rsp, 0x20',
[...redacted…]
u'mov qword ptr [rip + 0x3ac8], r11',
u'mov rbx, qword ptr [rsp + 0x40]',
u'add rsp, 0x20',
u'pop rdi'],
'StartRaw': '0xea20',
'StartVA': '0x0000f620',
'StopRaw': '0xead3',
'StopVA': '0x0000f6d3',
'end': 'KO',
'lastASM': u'pop rdi'}
从下面给出的输入成果中咱们可以或许看到,地点0x0000f620的运行时函数是以一个“pop”指令停止的,这就异常可疑了。
限定
本文所先容的这类特别的反抗反编译技能的方法实在并非一种完善的解决方案,咱们用这类方法对大批领有pdata数据域的64位测试样本集和很多的正当代码停止了测试和阐发,而且测试成果的假阳性异常不抱负。除此之外,入侵攻击者可以或许经由过程向pdata数据域中引入额定的字节数据来滋扰咱们的阐发。在本文所评论辩论的阐发场景中,咱们没有发明任何的异常,而且IDA Pro还可以或许在可视化视图中精确表现额定的操纵代码。咱们觉得,固然本文所计划的方法实在不完善,但这类方法对付歹意软件阐发职员来讲,大概可以或许给他们供给一种额定的代码阐发对象、方法或思绪。
总结
对付从事歹意软件阐发的研究职员而言,想要对那些已被不法改动的正当代码停止网安阐发,实在是一个异常巨大的挑衅。近些年来,针对产物供应链的入侵攻击变乱也层见叠出,即使是你向厂商请求获得“看似正当”的原始代码,你拿到手上的也不一定真的是网安的源代码。当一个正当的应用法式受到入侵以后,歹意Payload可以或许暗藏在正当代码的“陆地”当中,想要找到这些歹意Payload就犹如海底捞针同样。在本文所评论辩论的特别场景中,阐发职员还会碰到额定的挑衅:即IDA Pro的输入信息并非完整可托的。咱们实在不清楚这是入侵攻击者有意用来捣乱阐发职员的,还是说只是咱们可巧碰到这个“Bug”,但不管若何,这类技能会让阐发职员一不小心就漏掉了影响严重的歹意代码。咱们所供给的这个剧本可以或许赞助网安阐发职员辨认可疑的运行时函数,然则对付更广泛的场景而言,咱们的技能就不一定可以或许完善适用了,但这究竟也是一种新的对象和阐发歹意代码的思绪。

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载