没有合适的资源?快使用搜索试试~ 我知道了~
面向动态生成代码的攻防技术综述1
需积分: 0 0 下载量 13 浏览量
2022-08-03
13:11:59
上传
评论
收藏 1004KB PDF 举报
温馨提示
试读
13页
摘要动态代码生成技术广泛使用在浏览器、Flash播放器等重要日常软件中,近年来其中曝出严重的安全问题,为控制流劫持攻击和相应的防御提供了新机会, 受到越来越多的
资源详情
资源评论
资源推荐
第 1 卷 第 4 期 信 息 安 全 学 报 Vol. 1 No. 4
2016 年 10 月
Journal
of
Cyber
Security
Oct., 2016
通讯作者: 霍玮, 博士, 副研究员, Email: [email protected]。
本课题得到中国科学院百人计划[人字(2013)46 号]、北京市科委重点项目课题“行业场景构建与漏洞分析关键技术研究”
(D161100001216001)和中国科学院战略性先导科技专项“重点行业应用系统信息安防关键技术研究”(XDA06010703)资助。
收稿日期: 2016-06-15; 修改日期: 2016-08-03; 定稿日期: 2016-10-10
面向动态生成代码的攻防技术综述
吴 炜, 霍 玮, 邹 维
中国科学院信息工程研究所 北京 中国 100093
中国科学院网络测评技术重点实验室 北京 中国 100195
网络安全防护技术北京市重点实验室 北京 中国 100195
中国科学院大学 北京 中国 100049
摘要 动态代码生成技术广泛使用在浏览器、Flash 播放器等重要日常软件中, 近年来其中曝出严重的安全问题, 为控制流劫持
攻击和相应的防御提供了新机会, 受到越来越多的关注。针对动态生成代码在数据区且可被执行和直接依赖输入的特性, 本文
从代码注入攻击和代码重用攻击两个角度总结分析了控制流劫持攻击新技术, 并从强制性防御和闪避防御(Moving target de-
fense)两个角度对相关的主要防御新方法进行了阐述。同时提出动态代码生成系统安全性的衡量模型, 对代表性防御技术进行对
比分析和评估, 并探讨了面向动态生成代码攻防技术的发展趋势和下一步的研究方向。
关键词 软件安全; 即时编译; 动态二进制翻译; 控制流劫持; 防御技术
中图法分类号 TP 309.1 DOI 号 10.19363/j.cnki.cn10-1380/tn.2016.04.005
Survey on Attacking and Defending Technologies of
Dynamic Code Generation
WU Wei, HUO Wei, ZOU Wei
Institute of Information Engineering, Chinese Academy of Sciences, Beijing 100093, China
Key Laboratory of Network Assessment Technology, Chinese Academy of Sciences, Beijing 100195, China
Beijing Key Laboratory of Network Security and Protection Technology, Beijing 100195, China
University of Chinese Academy of Sciences, Beijing 100049, China
Abstract Dynamic code generation (DCG) is a technique widely deployed in important daily software such as web
browser and Flash player. The threat posed by dynamic code generation has gained more and more attention in recent
years because it provides new opportunities for control flow hijacking attack. In this paper, we summarize new control
flow hijack attacks against DCG based on the paradigm that DCG generates executable code according to input program
on-the-fly in two categories: code injection attack and code reuse attack. We systematically present the defense mecha-
nisms for DCG in two categories: enforcement-based defense and moving target defense. We propose a model to evaluate
existing defense technology based on defense benefit and defense cost. We also analyze the developing trend of attack-
ing/defending technologies on dynamic code generation and give some suggestions on future research.
Key words software security; JIT compilation; dynamic binary translation; control flow hijack; defense mechanism
1 引言
浏览器、Flash 播放器、虚拟机和模拟器已成为
互联网时代广泛使用的基础性软件, 它们普遍采用
即时编译(Just-In-Time compilation)和动态二进制翻
译 (Dynamic binary translation) 等动态代码生成
(Dynamic code generation)技术。该技术可在软件系统
运行过程中动态产生或修改可执行代码
[1-5]
, 称为动
态生成代码(Dynamic generating code)。
控制流劫持
[6]
是一种经典且有效的攻击方法,
攻击者通过改变目标程序正常的执行流程并进行控
制从而达到攻击的目的。控制流劫持的方法分为两
大类: 注入式和非注入式。传统的注入式攻击
[7]
需要
同时满足三个攻击条件: 1)掌握可注入攻击代码的漏
吴 炜 等: 面向动态生成代码的攻防技术综述 53
洞; 2)控制程序原有执行流程并成功跳转到攻击代码
起始处; 3)攻击代码可被执行。非注入式攻击, 如代
码重用攻击(Code reuse attack)
[8,9]
, 降低了传统注入
式攻击的攻击条件。通过重用目标程序中的工具代
码片段(Gadget)构造攻击代码, 既避免注入攻击代码
又可保证攻击代码的可执行性。但可被利用的代码
数量和串接难度成为代码重用攻击有效的关键因
素。然而, 利用动态生成代码, 既不需依赖漏洞注入
攻击代码, 也不需依赖程序中是否存在合法的攻击
代码段, 仅通过精心设计程序输入就可以完成攻击
代码注入或者攻击代码段构造, 同时可以绕过数据
执行保护(Data execution prevention)和地址随机化
(Address space layout randomization)等防御技术, 大
大降低了控制流劫持的技术难度。
动态代码生成技术使得传统代码安全防护技术
的有效性也面临着挑战。由于攻击代码可与动态生
成的正常代码存储在同一数据区, 数据执行保护无
法阻止攻击代码的执行。可执行代码在运行时被动
态生成, 因此依赖静态分析与静态插装的控制流完
整性(Control flow integrity)
[10]
保护难以实施, 基于静
态分析和静态二进制变换的软件多样化(Software
diversification)
[11]
技术也同样难以应用。
围绕动态生成代码的攻防对抗新技术和新方法
成为近年来的研究热点。2010年 Blazakis在 Black Hat
会议上首先提出了针对 Flash 播放器中动态生成代码
的攻击方法
[12]
, 随后这种攻击方法被扩展到各种动
态代码生成系统。安全研究人员相继在 Pwn2Own、
Black Hat 和 NDSS 等顶级会议上提出了面向动态生
成代码的一系列新攻击方式
[13-18]
。同时, 研究人员也
提出了许多针对动态生成代码的新防御技术
[18-28]
。
本文围绕动态生成代码, 从攻击与防御两方面对近
年来的研究成果进行总结归纳, 概述技术的基本原
理和应用效果, 并建立适用于面向动态生成代码攻
防技术的衡量模型, 对代表性技术进行对比分析和
评价, 通过分析潜在的攻击手段, 指出提高动态生
成代码安全性的发展方向。本文的主要贡献: 1)分类
阐述针对动态代码生成技术的攻击技术; 2)分类论述
加固动态代码生成系统的防御技术的原理和研究进
展; 3)提出面向动态生成代码系统的安全度量模型,
并基于该模型对防御技术进行了对比分析; 4)对基于
动态生成代码的攻防技术的发展趋势进行了展望。
本文首先对动态生成代码及相关攻防技术的背
景和术语进行了介绍(第 2 节), 然后对动态生成代码
的原理进行了概括, 揭示动态生成代码的特性(第 3
节)。从代码注入攻击和代码重用攻击两个角度介绍
了动态代码生成技术为攻击者带来的新机会(第 4
节)。从强制性防御和闪避防御两个角度阐述了针对
动态代码生成的防御技术的原理、挑战和研究进展
(第 5 节)。基于防御成本和防御效果, 衡量了动态代
码生成系统的安全性(第 6 节), 最后总结并给出了研
究发展建议。
2 研究背景
动态生成代码主要存在于即时编译系统和动态
二进制翻译系统中。即时编译系统广泛存在于电脑
和移动终端, 可显著提高动态语言解释执行的效率。
随着 JavaScript 语言广泛使用于动态网页中
[68]
, 当前
主流浏览器, 如 Chrome、Safari、IE、Firefox 等都对
JavaScript 程序提供支持, 并采用了即时编译技术提
高 JavaScript 的执行效率
[1,2]
, 如在特定情况下可使
Google V8 引擎速度提高 12 倍。Adobe Flash 播放器
几乎安装在所有的电脑和移动终端, 其也采用即时
编译技术加速 ActionScript 的解释执行来为用户带来
更好的多媒体体验。此外, JVM 和.NET CLR 等虚拟
机均使用了即时编译技术。动态二进制翻译
[29]
广泛
使用在跨平台支持
[5,30]
、遗产软件移植、动态程序分
析
[31]
和安全防御
[32,33]
中以增强可移植性与安全性。
二进制翻译技术作为虚拟化软件 Qemu
[5]
的核心技术,
随着云计算的发展而被广泛使用。由于动态生成代
码直接受控于软件输入并存储于内存堆区, 传统的
攻防技术, 如控制流劫持、数据执行保护、内存完整
性检测、闪避防御等在应用原理、应用场景和应用
效果等方面都面临新的挑战, 面向动态生成代码的
攻防技术和方法成为新的研究热点。
在针对动态生成代码的攻击技术中, 控制流劫
持攻击是研究的热点。控制流劫持攻击通过劫持函
数返回地址或代码指针将控制流跳转到攻击者指定
的代码地址并执行, 从而完成攻击。根据攻击代码来
源的不同, 又可进一步分为代码注入攻击和代码重
用攻击。在代码注入攻击中, 需要利用目标程序漏洞
将包含 Shellcode 的代码注入到内存可执行区域并让
Shellcode 得到执行机会。代码重用攻击则利用程序
中现有“合法”代码, 绕过数据执行保护完成攻击, 返
回导向编程(Return oriented programming, 简称
ROP)
[8]
攻击是其中的典型。ROP 寻找程序内部的工
具代码片段组合形成 ROP 链(ROP chain)。工具代码
片段是以返回指令结尾的若干连续指令, 将多段工
具代码片段精心组合可以构造等效于 Shellcode 的
ROP 链直接完成攻击, 或者仅通过构造 ROP 链调用
VirtualProtect 等函数关闭 Shellcode 所在页面的数据
54 Journal of Cyber Security 信息安全学报, 2016 年 10 月, 第 1 卷, 第 4 期
执行保护, 进而执行 Shellcode 间接完成攻击。文献[34]
对 ROP 的利用条件进行了建模分析。为使用 ROP
技术, 需要利用目标程序漏洞控制程序执行流程,
依次执行工具代码片段完成攻击。
数据执行保护和地址空间随机化是广泛应用于
现代操作系统中的两种防御技术。数据执行保护将
内存页设置为可执行的代码段或不可执行的数据段,
一种常见的数据执行保护“W⊕X”可以防止内存页
被同时设置为可写和可执行, 能够有效防御传统代
码注入攻击。地址空间随机化将程序、链接库的加
载位置和堆、栈的起始地址随机化, 使攻击者难以预
测目标指令的地址位置, 很大程度上提高了攻击的
门槛。然而, 地址随机化也有兼容性、熵值小和易受
到信息泄露攻击的缺点。一些程序和动态链接库不
兼容地址随机化保护, 容易被 ROP 攻击直接利用。
在 32 位操作系统中, 地址随机化为堆提供的随机性
不足, 低熵的随机化易受到暴力枚举的攻击
[35]
。堆喷
射(Heap spray)是绕过 32 位地址随机化的有效方式。
同时, 研究者发现了利用程序漏洞泄露内存地址从
而绕过地址随机化的方式
[36-39]
。
控制流完整性
[10,41-43]
保护是一类通过检查控制
流非正常跳转从而防止程序控制流被劫持的防御方
法。但传统控制流完整性防护技术只能保护静态编
译产生的代码。闪避防御技术(Moving Target De-
fense)
[44]
是一种新兴的防御技术, 其中包括软件多样
化技术
[11]
。将软件多样化技术应用到动态代码生成
上可以增加生成代码的不确定性, 生成多变的不同
形态的但功能相同的代码, 减少攻击者对于生成代
码的知识, 从而降低攻击成功的概率
[24,25]
。
3 动态代码生成技术原理
动态代码生成技术能够在运行时新产生并执行
优化的本地机器码, 被广泛应用于即时编译系统和
动态二进制翻译系统中以提高系统性能、可移植性
和安全性。尽管该技术在不同的动态代码生成器中
实现方式不同, 但其基本行为特征是相同的, 都是
对输入程序代码, 在运行时直接翻译生成本地机器
码执行或动态优化已生成的本地机器码并执行。
现代代码解释器中广泛使用了动态代码生成技
术。解释型语言通常会将程序编译为其自定义的字
节码并执行。当字节码在解释器虚拟机中运行时, 即
时编译器开始为其动态生成语义等价且运行速度更
快的可执行代码, 通常生成宿主机的本地机器码。
一个具体的例子如图 1 所示, 在上层语言
ActionScript 中的一段源码被动态翻译成了对应的本
地代码。
图 1 动态代码生成实例
软件动态翻译器对动态生成代码主要有四类操
作: 生成、修改、删除和调用。如图 2 所示, 软件动
态翻译器
[18]
读入待翻译的源程序, 优化编译器以函
数为单位根据输入程序生成本地代码到堆上的代码
缓存(Code cache, 又称 Code heap
[42]
、JIT buffer
[15]
)
中, 并通过执行器调用动态生成代码。对于输入程序
的某一个函数, 软件动态翻译器生成的本地代码的
语义与输入函数应当是等价的。由于本地代码会在
运行时生成并被调用执行, 因此代码缓存区域需被
设置为可写且可执行。优化编译器还可以收集轮廓
信息修改动态生成代码, 进行代码优化。垃圾回收器
对代码缓存进行自动内存管理, 对动态生成代码进
行删除。
因此, 动态生成代码具有两个特性: 1)直接受控
于输入; 2)存储于可执行的数据区。
图 2 动态代码生成技术基本框架
剩余12页未读,继续阅读
山林公子
- 粉丝: 22
- 资源: 281
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Picasso_v3.1 2.ipa
- chromedriver-mac-arm64.zip
- 蓝zapro.apk
- chromedriver-linux64.zip
- UCAS研一深度学习实验-MNIST手写数字识别python源码+详细注释(高分项目)
- 基于Python和PyTorch框架完成的一个手写数字识别实验源码(带MINIST手写数字数据集)+详细注释(高分项目)
- 基于Matlab在MNIST数据集上利用CNN完成手写体数字识别任务,并实现单层CNN反向传播算法+源代码+文档说明(高分项目)
- NVIDIA驱动、CUDA和Pytorch及其依赖
- 基于SVM多特征融合的微表情识别python源码+项目说明+详细注释(高分课程设计)
- html动态爱心代码一(附源码)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0