【24h】

An Obfuscation-Based Approach against Injection Attacks

机译:基于混淆的注入攻击方法

获取原文

摘要

We present an obfuscation strategy to protect a program against injection attacks. The strategy represents the program as a set of code fragments in-between two consecutive system calls (the system blocks) and a graph that represents the execution order of the fragment (the system block graph). The system blocks and the system block graph are partitioned between two virtual machines (VMs). The Blocks-VM stores and executes the system blocks but does not store any information on how control flows across the system blocks. This information is represented only by the system block graph stored in the Graph-VM, which correctly sequentializes the system blocks by analyzing the system block graph and accessing the Blocks-VM. At run-time, each time a system block ends, i.e. the program issues a system call, the execution of the Blocks-VM is frozen and control is transferred to the Graph-VM. After deducing the next system block to be executed from the system block graph, the current system block and the current system call, the Graph-VM updates the return address in the Blocks-VM so that the correct system block is executed and then resumes the Blocks-VM. To protect code integrity, the Graph-VM also stores a hash of each block. The overall strategy results in a clean separation between the program and its control-flow and this is important whenever the Graph-VM is in full control of the user whereas the Blocks-VM may be attacked through code injection. The Graph-VM can discover these attacks because either the current system call is not present in the original program or the hash of the current block is invalid. In all these cases, the Graph-VM halts the execution of the program. We present the algorithm that maps the program source code into the system blocks and the system block graph and discuss a first implementation of the run-time architecture along with some performance results.
机译:我们提出一种混淆策略,以保护程序免受注入攻击。该策略将程序表示为两个连续的系统调用(系统块)之间的一组代码片段和代表该片段的执行顺序的图(系统框图)。系统块和系统框图在两个虚拟机(VM)之间进行分区。 Blocks-VM存储并执行系统块,但不存储有关控制如何在系统块之间流动的任何信息。此信息仅由存储在Graph-VM中的系统框图表示,该图通过分析系统框图并访问Blocks-VM来正确地对系统块进行排序。在运行时,每次系统块结束时,即程序发出系统调用时,都会冻结Blocks-VM的执行并将控制权转移到Graph-VM。从系统块图,当前系统块和当前系统调用中推导出要执行的下一个系统块后,Graph-VM将更新Blocks-VM中的返回地址,以便执行正确的系统块,然后继续执行块VM。为了保护代码完整性,Graph-VM还存储每个块的哈希。总体策略导致程序与其控制流之间的清晰隔离,这在Graph-VM完全控制用户的情况下非常重要,而Blocks-VM可能会受到代码注入的攻击。 Graph-VM可以发现这些攻击,因为原始程序中不存在当前系统调用或当前块的哈希无效。在所有这些情况下,Graph-VM都会停止程序的执行。我们提出了将程序源代码映射到系统块和系统框图中的算法,并讨论了运行时体系结构的第一个实现以及一些性能结果。

著录项

相似文献

  • 外文文献
  • 中文文献
  • 专利
获取原文

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号