没有合适的资源?快使用搜索试试~ 我知道了~
污点分析技术的原理和实践应用1
需积分: 0 2 下载量 91 浏览量
2022-08-04
16:04:46
上传
评论
收藏 2.49MB PDF 举报
温馨提示
试读
23页
摘要:信息流分析可以有效保证计算机系统中信息的保密性和完整性,污点分析作为其实践,被广泛用于软件系统的安全保障技术领域.对近些年来面向解决应用程序安全问题的污点
资源详情
资源评论
资源推荐
软件学报 ISSN 1000-9825, CODEN RUXUEW E-mail: [email protected]
Journal of Software,2017,28(4):860−882 [doi: 10.13328/j.cnki.jos.005190] http://www.jos.org.cn
©中国科学院软件研究所版权所有. Tel: +86-10-62562563
污点分析技术的原理和实践应用
∗
王
蕾
1,2
,
李
丰
1
,
李
炼
1
,
冯晓兵
1
1
(计算机系统结构国家重点实验室(中国科学院 计算技术研究所),北京 100190)
2
(中国科学院大学,北京 100190)
通讯作者: 王蕾, E-mail: [email protected]
摘 要: 信息流分析可以有效保证计算机系统中信息的保密性和完整性,污点分析作为其实践,被广泛用于软件
系统的安全保障技术领域.对近些年来面向解决应用程序安全问题的污点分析技术进行综述:首先,总结了污点分析
的基本原理以及在应用中的通用技术,即,使用动态和静态的方法解决污点传播;随后,分析该技术在移动终端、互联
网平台上的应用过程中遇到的问题和解决方案,包括解决 Android 应用隐私泄露与检测 Web 系统安全漏洞的污点
分析技术;最后,展望该技术的研究前景和发展趋势.
关键词: 污点分析;信息流分析;软件安全;静态分析与动态分析;Android;Web
中图法分类号: TP311
中文引用格式: 王蕾,李丰,李炼,冯晓兵.污点分析技术的原理和实践应用.软件学报,2017,28(4):860−882. http://www.jos.org.
cn/1000-9825/5190.htm
英文引用格式: Wang L, Li F, Li L, Feng XB. Principle and practice of taint analysis. Ruan Jian Xue Bao/Journal of Software,
2017,28(4):860−882 (in Chinese). http://www.jos.org.cn/1000-9825/5190.htm
Principle and Practice of Taint Analysis
WANG Lei
1,2
, LI Feng
1
, LI Lian
1
, FENG Xiao-Bing
1
1
(State Key Laboratory of Computer Architecture (Institute of Computing Technology, The Chinese Academy of Sciences), Beijing
100190, China)
2
(University of Chinese Academy of Sciences, Beijing 100190, China)
Abstract: Information flow analysis is a promising approach for protecting the confidentiality and integrity of information manipulated
by computing systems. Taint analysis, as in practice, is widely used in the area of software security assurance. This survey summarizes the
latest advances on taint analysis, especially the solutions applied in different platform applications. Firstly, the basic principle of taint
analysis is introduced along with the general technology of taint propagation implemented by dynamic and static analyses. Then, the
proposals applied in different platform frameworks, including techniques for protecting privacy leakage on Android and finding security
vulnerabilities on Web, are analyzed. Lastly, further research directions and future work are discussed.
Key words: taint analysis; information flow analysis; software security; static and dynamic analyses; Android; Web
随着互联网+、云计算、移动智能终端等技术的发展,软件系统对信息安全的需求越来越高.软件系统信息
安全的两个重要特性是信息的保密性(confidentiality)和完整性(integrity)
[1]
.保密性是指系统的敏感数据在使用
过程中不会被泄露到外界,完整性是指系统重要数据在使用过程中不会被恶意地篡改或删除.随着 Web 2.0 以
及智能手机的普及,在线支付、社交网络等互联网活动中涉及到大量的用户隐私数据.同时,大量第三方应用程
∗ 基金项目: 国家自然科学基金(61303053, 61402303)
Foundation item: National Natural Science Foundation of China (61303053, 61402303)
收稿时间: 2016-06-18; 修改时间: 2016-09-08; 采用时间: 2016-11-26; jos 在线出版时间: 2017-01-24
CNKI 网络优先出版: 2017-02-20 13:51:07, http://www.cnki.net/kcms/detail/11.2560.TP.20170220.1351.007.html
王蕾 等:污点分析技术的原理和实践应用
861
序的使用导致隐私数据难以被有效地保护.据调查分析
[2]
,隐私数据泄露问题普遍存在.例如,印度的一家公司设
计了一组智能手机应用开发工具包 SilverPush,它可以嵌入到一个正常的手机应用中并在后台运行,在用户不知
情的情况下收集用户的隐私数据(包括 IMEI ID、位置信息、视频与音频信息、Web 浏览记录等)并将其发送给
广告推荐商
[3]
.不良的软件设计也会导致软件系统漏洞的出现,攻击者可以利用这些漏洞窃取或篡改用户数
据
[2]
.例如,2011 年,黑客利用 Citigroup 网站中存在的不安全对象引用漏洞,对 200 000 张信用卡的账户信息和交
易记录进行盗取
[4]
.类似的安全问题还在不断地增加,它们破坏了软件系统中信息的保密性和完整性.如果这些
问题不被有效地抑制或者解决,将对个人或者组织产生极大的不便甚至财产损失.
保护软件系统数据的保密性和完整性机制有很多
[5−8]
,例如访问控制、防火墙、加密机制、杀毒软件等.这
些机制虽然能够保证数据发布的安全性,但是无法阻止数据在通过这些机制的检查之后又被进一步传播使
用
[9]
.譬如:访问控制通过赋予文件读写权限的方法保证只有授权用户才能对文件数据进行读取或修改,但是它
无法保证授权用户读取数据之后不会将其传播给恶意程序或未授权用户使用;防火墙使用的隔离技术虽然能
够限制计算机系统软件只能与受信任的网络进行通信,但是它无法保证信任网络不会被恶意攻击者利用,导致
信息在交换过程中被危险操作窃取或篡改.可见,保护软件系统的数据安全,除了要确保数据发布的安全以外,
还必须进一步分析数据在系统中是如何传播、使用的,以确保隐私数据既不会外泄也不会被外界操作篡改.
信息流分析技术(information-flow analysis)通过分析程序中数据传播的合法性以保证信息安全,是防止数
据完整性和保密性被破坏的有效手段.污点分析技术(taint analysis,又被称作信息流跟踪技术)
[10]
是信息流分析
技术的一种实践方法,该技术通过对系统中敏感数据进行标记,继而跟踪标记数据在程序中的传播,以检测系统
安全问题.图 1 所示是一段 Android 应用程序代码,运行该段程序会导致用户的密码数据通过发送短信的方式泄
露.污点分析可以有效地检测该问题.污点分析首先要识别引入敏感数据的接口(source,污点源)并进行污点标
记,具体到图 1 所示的程序,即识别到第 4 行中引入密码数据的 passwordText 接口为污点源,并对 pwd 变量进行
污点标记.如果被标记的变量又通过程序依赖关系传播给了其他变量,那么根据相关传播规则继续标记对应的
变量.比如,图 1 中 pwd 变量的污点标记按照箭头进行传播,所以第 5 行的 leakedPwd 变量和第 6 行的
leakedMessage 变量都将会被标记.当被标记的变量到达信息泄露的位置(sink,污点汇聚点)时,则根据对应的安
全策略进行检测.图 1 中第 8 行带污点标记的 leakedMessage 变量可以传播到发送信息的 sendTextMessage 接口,
这就意味着密码数据会被该接口泄露,污点分析将报告此泄露问题.与之相反,在第 9 行,密码数据通过加密(调
用 Encrypt 方法)转化后赋给 sa
nitizedPwd 变量,继续传播 sanitizedPwd 变量并不会产生泄露问题.也就是说,如果
污点变量经过一个使数据不再携带隐私信息的接口处理(sanitizer,无害处理),那么就可以移除该污点数据的污
点标记.
1 protected void onRestart () {
2 … … //extra code
3 String uname = usernameText.toString();
4 String pwd = passwordText.getText().toString(); //source
5 String leakedPwd = "abc" + pwd;
6 String leakedMessage = "User: " + uname + " | Pwd: " + leakedPwd ;
7 SmsManager smsmanager = SmsManager.getDefault();
8 smsmanager.sendTextMessage("+86 1234", null, leakedMessage , null, null); //sink
9 String sanitizedPwd = Encrypt(pwd); //sanitizer
10 String nonleakedMessage = " | Pwd: " + sanitizedPwd ;
11 … … //extra code
12 }
污点标记传播方向 污点标记被移除
Fig.1 An example of taint analysis
图 1 污点分析应用示例
近些年来,随着程序分析技术的发展及其在污点分析中的应用,污点分析可以针对实际应用程序(例如智能
手机应用、Web 应用等)中的信息安全问题实施更加精确、高效的分析检测
[11−35]
.本文针对近年使用污点分析
862
Journal of Software 软件学报 Vol.28, No.4, April 2017
技术解决实际应用程序中的完整性和保密性问题的工作进行分析综述,总结该技术的基本原理以及污点传播
分析(污点分析中的一个重要步骤)的通用技术,并且针对不同平台上的应用程序(Android 应用程序和 Web 应用
程序),分析该技术在实施过程中遇到的问题及解决方案.
本文第 1 节介绍污点分析技术的理论基础以及它在解决应用程序安全方面的意义.第 2 节介绍污点分析的
基本原理.第 3 节介绍污点分析的通用技术,重点介绍如何使用动/静态程序分析技术进行污点传播分析.第 4 节
介绍污点分析作用在不同平台上应用程序的信息安全检测过程中遇到的问题及解决方案,具体包括智能手机
的隐私泄露检测和 Web 安全漏洞发掘两大类应用.第 5 节为总结与展望.
1 理论基础
污点分析是信息流分析的一种实践技术.在过去的 40 年里,信息流分析技术一直是信息安全领域的一个重
要研究点.大量研究工作
[36−48]
尝试通过制定信息流策略(information-flow policies)来提供信息流安全保障:如果
系统满足了用户定制的信息流策略,那么系统是信息流安全的.信息流分析就是一种分析信息流策略是否被有
效实施的技术.
目前的信息流策略主要建立在安全类型模型上.1976 年,Denning 在文献[36]中提出为程序中的变量赋予安
全类别(secure class),例如根据数据的保密级别将变量分成高级别(high)和低级别(low),并基于此提出了一套基
于格(lattice)的理论模型.在这个模型中,一个格被定义为一个二元组〈SC,〉.其中,SC 是一个安全类别的集合;
是一个建立在 SC 上的偏序关系(具有自反性、传递性、反对称性),这个偏序关系代表带有安全类型的变量之
间是否可以进行赋值传递.例如:在 SC:{Public,Secret}集合上,PublicSecret 的偏序关系表示具有公共级别
(Public)的变量可以赋值给具有保密级别(Secret)的变量.在此基础上,Goguen 和 Meseguer 在文献[38]中提出了
一种适用于系统级别的信息流策略——无干扰性(non-interference).无干扰性的含义是指,如果一个系统满足无
干扰性,当且仅当改变该系统输入中任意具有高级别标签的变量值都不会影响到系统输出中具有低级别标签
的变量值.
后续的工作大多在上述理论基础上展开,其中
一种解决方案尝试设计并实现满足无干扰性的安全类型系
统(secure type system),并在安全类型系统的基础上构建或扩展具有安全类型的语言,例如 Jflow
[39]
.基于安全类
型语言的信息流策略为信息流分析技术在理论上进行了有效的探索,但在实践过程中,此类技术需要针对编程
语言设计相关的类型扩展.例如,使用形如 int{secret} passwd;的语法为原语言的 int 类型变量 passwd 扩展一个
代表信息安全级别的标签.随着移动终端、互联网络、云计算等技术的发展,当前,应用程序不再局限于传统的
个人电脑应用.能够提供更为抽象、简洁的编程环境的新的编程框架和运行模式的频繁出现,导致基于安全类
型语言的信息流分析的适应能力下降.例如,针对基于 Android 系统的应用程序进行信息流分析时,为新设计的
类型系统而改变 Android 开发环境是不现实的.
污点分析作为信息流分析的一种实践技术,通过对带污点标记的数据的传播实施分析来达到保护数据完
整性和保密性的目的.污点分析的理论模型是一个建立在 SC:{Tain t e d ;Untainted}集合上的格:如果信息从
Tai n t e d 类型的变量传播给 Untainted 类型的变量,那么需要 Untainted 类型的数据改成 Tainte d 类型;如果 Tainted
类型的变量传递到重要数据区域或者信息泄露点,那就意味着信息流策略被违反.在解决应用程序安全问题的
实践中,污点分析需要程序分析技术的支持.譬如:静态污点分析技术可以通过分析源码或字节码中语句或指令
之间的静态依赖关系来判断污点标记所有可能的传播途径;动态污点分析技术可以借助程序插桩,结合定制的
硬件来跟踪污点标记的传播.可见,污点分析既不必改变应用程序原有的编程模型或语言特性,又可以提供精确
的数据流传播跟踪.
当前,污点分
析被广泛地应用在系统隐私数据泄露检测、系统安全漏洞发掘等实际领域.然而,由于系统框
架、编程模型、语言特性等方面的差异,污点分析应用在不同平台的不同应用程序上时可能面临不同的研究问
题,需要根据上述问题对污点分析技术进行定制.接下来,我们将首先介绍污点分析的基本原理和污点传播分析
王蕾 等:污点分析技术的原理和实践应用
863
的通用技术,然后介绍污点分析在不同应用平台上实施时遇到的具体问题和解决方法.
2 污点分析的基本原理
2.1 污点分析定义
污点分析可以抽象成一个三元组〈sources,sinks,sanitizers〉的形式,其中,source 即污点源,代表直接引入不受
信任的数据或者机密数据到系统中;sink 即污点汇聚点,代表直接产生安全敏感操作(违反数据完整性)或者泄露
隐私数据到外界(违反数据保密性);sanitizer 即无害处理,代表通过数据加密或者移除危害操作等手段使数据传
播不再对软件系统的信息安全产生危害.污点分析就是分析程序中由污点源引入的数据是否能够不经无害处
理,而直接传播到污点汇聚点.如果不能,说明系统是信息流安全的;否则,说明系统产生了隐私数据泄露或危险
数据操作等安全问题.
污点分析的处理过程可以分成 3 个阶段(如图 2 所示):(1) 识别污点源和汇聚点;(2) 污点传播分析;(3) 无
害处理.
变量1
污点变量1
污点变量2
污点变量3
变量4
污点变量5
污点变量7
污点变量8
污点变量6
变量9
污点变量10
污点
标记
Fig.2 An intuitive example about the process of taint analysis
图 2 污点分析过程直观示例
2.2 识别污点源和汇聚点
识别污点源和污点汇聚点是污点分析的前提.目前,在不同的应用程序中识别污点源和汇聚点的方法各不
相同.缺乏通用方法的原因一方面来自系统模型、编程语言之间的差异.另一方面,污点分析关注的安全漏洞类
型不同,也会导致对污点源和污点汇聚点的收集方法迥异.表 1 所示为在 Web 应用程序漏洞检测中的污点源示
例
[29]
,它们是 Web 框架中关键对象的属性.
Table 1 An example of source proposed by Ref.[29]
表 1 文献[29]提出的污点源示例
对象 污点属性
Document cookie, domain, forms, lastModified, links, referrer, title, URL
Form Action
Any form input element checked, defaultChecked, defaultValue, name, selectedIndex, toString, value
History current, next, previous, toString
Select option defaultSelected, selected, text, value
Location and Link hash, host, hostname, href, pathname, port, protocol, search, toString
Window defaultStatus, status
现有的识别污点源和汇聚点的方法可以大致分成 3 类:一类使用启发式的策略进行标记,例如把来自程序
外部输入的数据统称为“污点”数据,保守地认为这些数据有可能包含恶意的攻击数据(如 PHP Aspis
[26]
);第 2 类
剩余22页未读,继续阅读
开眼旅行精选
- 粉丝: 12
- 资源: 327
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 部署yolov8的tensorrt模型支持检测分割姿态估计的C++源码+部署步骤.zip
- 以简单、易用、高性能为目标、开源的时序数据库,支持Linux及Windows, Time Series Database.zip
- python-leetcode面试题解之第198题打家劫舍-题解.zip
- python-leetcode面试题解之第191题位1的个数-题解.zip
- python-leetcode面试题解之第186题反转字符串中的单词II-题解.zip
- 一个基于python的web后端高性能开发框架,下载可用
- python-leetcode面试题解之第179题最大数-题解.zip
- python-leetcode面试题解之第170题两数之和III数据结构设计-题解.zip
- python-leetcode面试题解之第168题Excel表列名称-题解.zip
- python-leetcode面试题解之第167题两数之和II输入有序数组-题解.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0