首页
社区
课程
招聘
[原创]软件安全测试新武器
发表于: 2008-11-26 14:55 13034

[原创]软件安全测试新武器

2008-11-26 14:55
13034

Software is not complete until it is secure!

软件安全测试新武器
——浅谈基于Dynamic Taint Propagation的测试技术
软件安全测试是保证软件能够安全使用的最主要的手段,如何进行高效的安全测试成为业界关注的话题。多年的安全测试经验告诉我们,做好软件安全测试的必要条件是:一是充分了解软件安全漏洞,二是拥有高效的软件安全测试技术和测试工具。

一:安全主要漏洞与测试方法分析
软件安全保证的主要目的就是为了防止黑客或者恶意的内部人员对软件进行攻击,并保证软件在受到恶意攻击的情况能够正常运行。而攻击者主要是通过对软件系统输入恶意的数据来进行攻击。因此,软件主要的安全问题来源于外部的输入数据。开放性WEB应用项目安全组织OWASP Top Ten总结每年的全球WEB应用系统十大安全漏洞,其中最多的安全漏洞就是来自外部输入数据的验证方面。全球最大的软件安全厂商Fortify Software公司的软件安全漏洞分类中安全风险最高的安全漏洞也是输入验证与表现这个方面。由外部输入恶意数据可以直接构成严重的软件安全漏洞主要有:
命令注入(Command Injection)  
跨站脚本(Cross-Site Scripting)  
拒绝服务(Denial of Service)  
HTTP响应截断(HTTP Response Splitting)  
路径操纵(Path Manipulation)  
资源注入(Resource Injection)  
配置操纵(Setting Manipulation)  
SQL注入(SQL Injection)  
访问控制:数据库(Access Control: Database)  
日志伪造 (Log Forging)
所以做好外部输入数据安全测试是软件安全测试中最重要的工作,那么目前主要安全测试方法有:

1. 静态的代码安全测试:主要是通过对软件系统的源代码进行安全扫描,根据程序中数据流,控制流,语义等信息与其特有软件安全规则库进行匹对,从中找出代码中潜在的安全漏洞。静态的源代码安全测试是非常有用的方法,它可以在编码阶段找出所有可能存在安全风险的代码,这样开发人员可以在早期解决潜在的安全问题。而正因为如此,静态代码测试比较适用于早期的代码开发阶段,而不是测试阶段。同时,由于关系到开发部门,测试部门,管理部门等多个部门的工作,在实际的贯彻实施工作上有一定的难度。

2. 动态的渗透测试:渗透测试也是我们常用的安全测试方法。使用自动化工具或者人工的方法模拟黑客的输入,对应用系统进行攻击性测试,从中找出运行时刻所存在的安全漏洞。这种是测试的特点就是真实有效,一般找出来的问题都是正确的,也是较为严重的。但渗透测试一个致命的缺点就是,但由于模拟的测试数据只能到达有限的测试点,覆盖率很低。根据美国权威机构统计,渗透测试的覆盖率只能达到20%-30%。漏报率比较高。

二:Dynamic Taint Propagation方法
分析两种常用的安全测试的方法,对于外部输入数据的测试都有一定的不足之处,那么如何才能对外部输入数据进行较好的安全测试呢?业界提出了动态污染传播的方法(Dynamic Taint Propagation)。
动态污染传播方法,主要通过跟踪外部输入的数据在程序中的传播过程,和最终执行的情况来分析是否存在安全漏洞和存在什么类别的漏洞。如下图1,它不需要任何特殊的攻击性的测试数据,它假定由外部输入的数据都是不可信的、污染的数据,为数据打上污染的标记,在程序中传播的过程中,如果经过了严格的,我们可以依赖的安全验证,我们就认真它不再是污染的,掉去污染标记,否则污染标记在整个传播过程都会被继承下来。一旦有污染标的数据被送到执行代码中执行的时候就判断这里可能存在一个安全漏洞。

  
图1:污染数据的传播过程图

      实现动态污染传播方法来进行测试,首先要对软件程序所有二进制码进行静态地分析,主要是指定以下信息:
      Source:污染数据的来源。找出所有外部数据进行程序的入口的代码。对于WEB应用系统,主要是指读取客户端输入的数据的地方:如HTML的Form表单,用户的Request的参数,客户端的Cookie信息等这些接收外部数据方法。当数据由这些入口点进行程序内部时,数据假定是污染的,被标记上污染标记。
      Propagation:污染数据传播。数据在程序中传播的过程中,当数据从Source点传入,标记上污染标记,污染数据在程序中传播的过程中,无论是被赋给另一个数据,被拼接到另一个数据之中,污染标记都要被继承下来。
Sink:漏洞的引爆点。找出所有可能引发安全漏洞的代码。这些代码常常是根据外部传入数据而执行特定任务的代码。如SQL的查询,HTML中输出,命令的执行等等。当数据被传到Sink代码时,Sink首先去检查此数据是否带有污染标记,如果没有,则没有安全问题。反之,则此处可能存在安全问题。然后再根据代码执行的结果来判定是什么类别的安全问题。举例来说明这一分析过程:
userID = request.getParameter("user");  
……
try {
  sql = "SELECT * FROM users " +"WHERE id='" + userID + "'";
……
  stmt.executeQuery(sql);
}
这段代码在静态分析过程中,request.getParameter()方法会被标记为一个“污染源”: Source。stmt.executeQuery()方法会被标记为一个“引爆点”:Sink。当用户输入数据“user”通过request.getParameter()进入程序并赋值予变量“userID”时, “userID”会被标记上“污染”标记。当用 “userID” 来构造变量“sql”时,“sql”会获取“userID”的“污染”标记而成为被“污染”的数据。当“sql”被送到Sink函数stmt.executeQuery()中执行的时候,Sink函数的检测机制检测到了“sql”有污染标记,从而判定此处可能引发一个安全问题,随后再根据Sink函数执行“污染”数据“sql”的结果,这里是执行一个SQL查询命令,依此可以判定此处可能会引发一个SQL—Injection的安全问题。
三:Fortify Program Trace Analyzer (PTA)
     全球最大的软件安全厂商美国Fortify Software公司在根据从事多年的软件安全领域的研究的基本上,根据上文讲述的动态污染传播的方法(Dynamic Taint Propagation)成功开发出来了新型安全测试产品——Fortify PTA


图2:Fortify Tracer 安全测试报告

     Fortify PTA 利用动态污染传播方法的特点,首先对软件的二进制代码进行插桩分析,找出所有的Source, Sink代码,建立检测机制。然后再对程序进行常规的功能测试。测试过程不需要测试人员输入任何带攻击性的测试数据,就可以进行安全测试了,Fortify PTA会根据功能测试自动地找出软件中所有可能因外部输入数据而造成的安全问题,并根据漏洞类类清晰地报告出来。总结Fortify PTA的主要特点有:

1. 无需特殊的攻击性测试数据,让QA人员都可以做安全测试。解决测试缺乏安全知识,攻击知识的难题。

2. 由于直接跟踪外部输入数据,所以能够很真实、有效地找出系统中最严重,最关键的安全问题。

3. 与功能并行,速度快,效率高,很容易与现有测试流程结合。同时利用功能测试覆盖率高的优点,大大提高了动态安全测试的覆盖率。

4. 清晰而详细的报告。如上图2所示,Fortify PTA 根据漏洞类别清晰地报告出来,点击报出的每一个漏洞,Fortify PTA 可以定位到该漏洞在什么地方产生的。它的Source和Sink分别在哪里等清晰而又详细的报告。

四、总结:
    良好的测试方法加上优秀的测试工具一定能够更好地帮助软件企业做好软件安全测试。对于一个软件企业,如果能将软件质量测试与软件安全测试有效地结合,不但能很好地解决软件安全测试问题,同时也可以使得测试团队的工作效率更高,那么基于Dynamic Taint Propagation测试方法的Fortify PTA将是一个不错的选择。

Fortify Software 北京代表处(美国富迪软件)   技术顾问   王宏  08.04


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 7
支持
分享
最新回复 (19)
雪    币: 398
活跃值: (343)
能力值: (RANK:650 )
在线值:
发帖
回帖
粉丝
2
不要小看楼主
楼主贴子数显示为12, 其实只发了一个贴子
那么11个贴子数怎么来的呢?
当然是看雪加上的
看雪为什么要加呢
因为楼主需要要10个贴子才能发附件
看雪为什么加11不加10呢
为了不引起怀疑

前段日子Fortify Software也参加了2008中国软件安全峰会
估计那时候和看雪搭上伙了
然后借看雪论坛,推销他的软件了

1归1, 2归2
话说Fortify确实做的不错。只是价格贵的太离谱了
听说大多数银行都买了他们的东东

不过呢, 混看雪论坛的人大多属于1. 搞“破坏”的,2.穷人
所以,在这里应该卖不掉吧
2008-11-26 15:09
0
雪    币: 398
活跃值: (343)
能力值: (RANK:650 )
在线值:
发帖
回帖
粉丝
3
毁灭证据,低调低调
2008-11-26 15:12
0
雪    币: 1946
活跃值: (263)
能力值: (RANK:330 )
在线值:
发帖
回帖
粉丝
4
楼上真是毁灭公爵啊
2008-11-26 15:13
0
雪    币: 50161
活跃值: (20625)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
5
Jyang是Fortify公司的,希望将Fortify一些技术放到论坛与大家分享。
shooooo你很关注看雪论坛,发帖数是我临时加了个数,等帖发完我会复位的。至少为什么加11,完全是随机选定的,请勿多心。
1.在『软件调试论坛』发帖对发帖数有要求
2.发附件对发帖数有要求。
2008-11-26 15:15
0
雪    币: 1946
活跃值: (263)
能力值: (RANK:330 )
在线值:
发帖
回帖
粉丝
6
代码安全测试Lint也不错
2008-11-26 15:16
0
雪    币: 214
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
大家好,

我们确实是通过软件安全峰会认识了看雪,希望借助这个平台和大家做技术层面的交流, 毕竟在这方面老外的很多理念和经验值得我们学习和借鉴。如果大家感兴趣,我们也会把国外业界有关软件安全方面新的动态的信息发上来和大家分享。
2008-11-26 15:28
0
雪    币: 398
活跃值: (343)
能力值: (RANK:650 )
在线值:
发帖
回帖
粉丝
8
我承认,头像是我弄的
没别的恶意,楼主很热爱公司
2008-11-26 15:52
0
雪    币: 214
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
呵呵,shoooo真可爱。 没有关系,只要没给我弄个丑八怪的头像就可以。刚才密码设置的太简单了,

事情只有热爱才能做好是不?
2008-11-26 15:55
0
雪    币: 334
活跃值: (22)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
10
真巧我开了两个页面,瞬间就不一样了......
2008-11-26 16:06
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
2楼,你是福尔摩斯吗?
2008-11-26 17:19
0
雪    币: 398
活跃值: (343)
能力值: (RANK:650 )
在线值:
发帖
回帖
粉丝
12
其实我是狄仁杰
2008-11-26 17:24
0
雪    币: 846
活跃值: (221)
能力值: (RANK:570 )
在线值:
发帖
回帖
粉丝
13
其实我是陆元方
2008-11-26 17:34
0
雪    币: 398
活跃值: (343)
能力值: (RANK:650 )
在线值:
发帖
回帖
粉丝
14
YOU WRONG

http://baike.baidu.com/view/692746.html?wtp=tt
2008-11-26 17:36
0
雪    币: 108
活跃值: (141)
能力值: ( LV9,RANK:490 )
在线值:
发帖
回帖
粉丝
15
比较感兴趣,多少钱一个copy?有没有试用版?
2008-11-26 18:34
0
雪    币: 407
活跃值: (125)
能力值: ( LV13,RANK:280 )
在线值:
发帖
回帖
粉丝
16
shoooo 观察这么细,果然牛X
2008-11-26 18:37
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
好像是很厉害的软件
2008-11-26 19:01
0
雪    币: 136
活跃值: (105)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
18
太贵了 买不起穷人
2008-11-26 19:19
0
雪    币: 214
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
如果你感兴趣, 在这里给你推荐一本书,是由机械工业出版社出版的《安全编程-代码静态分析》,这本书是由Fortify Software 首席科学家Mr. Brian Chess写的, 今年四月份其中文版正式在国内发行的,书里边有一张静态代码分析器(Fortify SCA)这个产品的4.0版本的试用光盘。
2008-11-27 10:21
0
雪    币: 6075
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
20
Fortify Software 冷板凳席科学家是谁?
2008-11-27 16:44
0
游客
登录 | 注册 方可回帖
返回
//