[关闭]
@killa 2016-01-12T17:54:36.000000Z 字数 1149 阅读 819

English Shellcode

论文阅读笔记

课程 计算机系统安全分析



Abstract & Introduction

在这篇文章中,作者尝试验证shellcode一定是特征非常明显,遵循浅显的,可识别的。作者展示了一种自动生成英文shellcode的方法,将任意的shellcode转化成类似英文散文的表述形式。前提是shellcode是字包含的,即没有引入外部依赖项。

代码插入攻击是现代计算机系统攻击的一种最常见方式。这种攻击方式的原理是利用传输通道向受害机器发送一段代码并使其执行,从而越权获得受害机器上本来没有权限访问的文件及数据。

通常来讲,代码插入攻击者首要的任务是获得程序计数器的控制权。程序计数器是用来指向CPU要执行的下一行代码的寄存器,一旦控制了程序计数器,就可以控制程序的执行过程,从而指挥CPU执行自己插入的代码


On The ARMs Race

在这篇文章中,作者关注点在x86系列处理器的本地可执行shellcode上,在这种情况下,机器二进制代码和shellcode是基本上相同的。它们被映射到相同的而简直表达方式上。


Related Work

阻止代码插入攻击的方法总共分为三类:

  1. 使用工具或技术限制代码中的漏洞,防止开发者编写可攻击的代码
  2. 防止插入的代码执行
  3. 通过输入内容过滤,防止代码插入

目前已有研究人员通过将指令分为改变程序计数器和不改变程序计数器两类,在一定情况下,利用检测指令最长序列来区分负载和插入攻击代码。

还有一些研究人员使用仿真或是感染分析的方法检测自加密shellcode的插入。然而这些方法都是建立在很多假设上面,并不实际。


Towards English Shellcode

Shellcode就像其他经过编译后的代码一样,是一系列指令的有序排列。在最底层表示中,每条指令都是通过一系列字节信号来告诉CPU如何按照需求来管理和处理数据。像机器指令一样,没有经过执行的数据也是按照字节的形式来储存。

将shellcode转化成英文shellcode的流程如下图:
转化流程


Evaluation

下图是一个简单的调用exit(0)的shellcode转化为英文shellcode的结果:
转化结果


Conclusion

在本文中,作者重新考究了shellcode需要与未执行数据在根本结构上保持不同这一假设。

特别低,作者说明了一种使用自然语言生成技术产生类似英文散文般的shellcode的方法。通过这个方法我们发现,需要更加强大的过滤技术来区分输入数据和插入shellcode,从而达到防止shellcode插入攻击。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注