如何使用ThreadingTest提高软件安全性检测效率(中)

方法二:ThreadingTest双向追溯专利技术--测试用例(功能)与源代码关系的自动生成

通过ThreadingTest运行测试用例,采用TT百万图元级别的超高速图形绘制技术展示图,对各种大、中、小型软件进行功能逻辑实现分析,实现测试用例与被测源码间相互追溯。该追溯技术方便了用户查看和设计测试用例,通过基于双向追溯的实测用例分析,测试人员可以快速追踪修改代码的波及范围,针对已修改的模块和波及到的模块有针对性的补充测试用例,把回归测试的成本降至最低。

正向追溯技术:

通过点击某个测试用例,追溯到该用例所对应的函数控制图,并展示其测试的逻辑和结构,点击其中某个函数,可以进行该函数的覆盖率、复杂度、代码、控制流程图等信息查看,帮助测试人员通过简单查看发现测试遗漏,并且有利于开发人员直接定位测试发现的缺陷,测试和开发之间的高效互动。想象下,当一个核心工程师离职时,他所带走的是对整个程序的理解及开发思路,交接的工程师需要花费大量的时间去理解,TT通过正向追溯,可以使交接的工程师能通过测试用例所展现的程序逻辑和结构等信息,快速的掌握和理解程序的开发思路。

逆向追溯技术:

通过点击函数列表的某个函数,追溯到该函数所对应的函数调用图、控制流程图以及源码,点击其中的源码,反向追溯到该源码所执行过的测试用例列表。想象下当一个程序需要进行频繁更改升级时,这时对测试人员的压力是无比巨大的,测试人员无法精确到开发人员所更改的代码是否影响到其它的功能,只能对程序进行重新的测试,但通过逆向追溯,测试人员很明确的看到更改的代码所影响到的测试用例表,通过累积覆盖率技术,大大缩短了回归测试的时间。

大部分软件的安全测试都是依据缺陷空间反向设计原则来进行的,即事先检查哪些地方可能在安全隐患,然后针对这些可能的隐患进行测试。因此,反向测试过程是从缺陷空间出发,建立缺陷威胁模型,通过威胁模型来寻找入侵点,对入侵点进行已知漏洞的扫描测试。好处是可以对已知的缺陷进行分析,避免软件里存在已知类型的缺陷,但是对未知的攻击手段和方法通常会无能为力。TT的能够追踪和分析在正反向安全测试过程中,直接给出安全测试过程中程序的执行逻辑分析,结合正常的功能执行逻辑,可以给出详尽的被测试程序对于测试过程中的模拟攻击的免疫和感染程度。当有攻击行为时候,通常程序的执行路径和方式会变得异常诡异,即使在实验室的测试环境,可能因此对暴露在黑客手段下的程序诡异行为也很难分析出更好的防范手段,需要具备一定的漏洞分析能力来研究漏洞,TT会记录暴露在黑客攻击行为下的被测程序的执行细节,包括方法执行次序,条件真假,以及程序段执行序列信息,这样就可以帮助安全测试和开发人员快速理解程序存在的攻击弱点是如何被黑客利用的,并辅助快速的修复该安全问题。

使用双向追溯,进行可视化的代码结构安全审查

代码审核是一种实现安全的软件的必要而不充分的方法。安全缺陷(特别是在C和C++中的安全缺陷)是显而易见的,而体系结构瑕疵则是真正棘手的问题。ThreadingTest 针对代码级别的编译分析和运行插桩后的程序,通过一静一动的代码分析,TT提供了丰富的可视化界面包括函数调用图、控制流程图、覆盖率可视化视图、累计覆盖率视图、多版本对比视图、版本测试数据报表视图等。通过每种视图进行有针对性的信息挖掘,达到问题快速定位。

单独进行代码审核是一种特别有用的方法,但是,由于这种类型的审核只能确定缺陷,因此,即使是最好的代码审核也只能发现大约50%的安全问题。仅仅盯着代码是很难(并且几乎是不可能)发现体系结构问题的。现代的系统都由数百万行代码构成,这种方法就更不能奏效了。在测试用例和代码的双向追溯技术出现之前,大型应用的代码走查,只能通过人工静态的过程,人工静态的检查和分析,由于程序逻辑本身的复杂性以及错综复杂的逻辑,以及人工理解和真正的在运行环境下的执行会存在较大的差异。TT的功能到代码执行海量对应数据的生成和追溯,都是基于动态运行的,可以简单的理解为它是一种高级的、系统的Debug技术,是基于程序动态运行的实际结果的。它能够区分每个功能点的执行路径,而不是把所有功能点的逻辑混合后在一起分析,大型的软件通常具有上百万行的代码,作为专业的安全性测试团队而非软件开发方,是无法短时间内掌握的,而TT能够大大将带代码审查以及安全性测试的难度,使得独立的第三方安全测试团队能够迅速的展开基于源代码的分析。ThreadingTest的双向追溯专利实际上是对软件功能实现进行结构化、可视化分析的利器,同时也是对于软件功能安全性分析最好用的辅助性分析工具。

TT的基于程序动态运行的追溯功能,可以快速定位特定功能真实执行的代码逻辑,通过正向追溯功能,TT能够非常清楚的记录和分析各种情况下对应的程序内部的代码执行序列,对于一些安全专项检查过程中,TT可以直接给出各个安全测试用例对应的代码的执行路径,这样可以快速的对相关的代码段进行分析,相比于一般的静态分析,TT的功能点(测试用例)到代码的追随,是真实的记录了用例运行过程中程序的执行情况,相比一些静态分析方法,TT的数据是非常精确的,因此可以对安全性测试提供强大的辅助分析,TT能够为安全功能测试方法,提供很多的支持,正向追溯功能以下安全性测试场景中使用:

1.    在上传文件场景中,通常从安全性角度要求对文件类型进行过滤,那么当用黑盒测试方法模拟各种文件类型的上传过程中,通过TT我们可以记录对于各种类型的文件上传过程中,程序对应的处理逻辑,直接抽取出相关代码后,安全测试人员可以对记录了真实执行过程的代码进行安全行为检查。可以分析出来,对应代码中是否检查上传文件的类型、名称等,并使用正确表达式等对文件名做严格的检查,限定文件名只能包括字母和数字,同时限制文件的操作权限,并对文件的访问路径进行验证。

2.    对于软件权限的检测,通常不同权限的用户权限程序内部都会有不同的逻辑与之对应,通过TT的双向追溯功能,测试人员可以直接拿到各种不同权限的用户在软件内部的真实的权限判断代码,并且进行分析。这样可以避免人为静态分析大量代码而产生差错以及与实际执行不符合的情况。

3.    TT可以用来验证各种外部输入的验证代码逻辑,判断,各种业务数据输入、借口数据输入过程中,程序是否都有对应的正确的代码逻辑进行了检查和校验。通过正向追溯快速提取出来程序在各种特殊字符输入情况下对应的程序处理逻辑,以便供开发和安全测试人员进行审查。

4.    对于关键功能,TT通过提取运行逻辑代码以及周围的相关代码,TT可以展示各种主要逻辑是否存在异常处理机制。并且在程序真正发生错误的情况下,TT会完整记录异常发生后的整个执行过程,是否有合理的异常处理保护机制,以便于进行代码异常处理相关的分析和安全检测。

自动比对实现设计和需求是否一致,从设计角度减少软件的安全缺陷。

利用正向追溯,当测试执行完毕,通过正向追溯所获得的程序执行逻辑以及程序模块的关联关系,来分析程序逻辑是否与详细设计一致,如果发现设计不一致的情况,即使功能实现本身没有问题,但因为实现违背了设计的原则,那么则实现很有可能存在潜在的安全风险。

利用逆向功能,同样可以非常有效的比对设计与实现是否一致,一般详细设计文档中都会说明某一模块从设计角度,为哪些功能提供服务,TT提供的逆向追溯功能,在记录了功能点(测试用例)和执行代码的逻辑关系以后,可以反向追溯出来关键模块被功能点(测试用例)使用的情况,当出现有和设计不一样的情况,就可以认为是实现和设计出现不一致,需要进行安全性的审查。

对于异常执行序列和逻辑的检测

使用TT可以记录在功能正常逻辑下的执行序列并且记录进入数据库,当使用渗透工具和各种人工的具有模拟攻击性质的测试用例对被测试程序进行测试的过程中,如果程序的行为发生改变,通过对在攻击模式下的执行序列的记录和正常模式下进行比对和分析,可以评估被测试程序是否存在安全性风险以及辅助确定软件是否被攻破而执行了非常规动作。例如常见的缓冲区溢出,它会将程序的正常执行序列打断,去执行其它的代码; SQL注入类的安全问题在程序内部执行路径表现上,同样也可以用TT的代码执行逻辑追踪功能来进行分析。

目前ThreadingTest个人版是免费使用的,可以在技术网站了解详情,网址:www.threadingtest.com,也可以在阿里云下载:下载地址http://market.aliyun.com/product/12-122326004-cmgj000252.html?spm=0.0.0.0.VqYFd7,如果您在安装与试用过程中有任何疑问,您可以加入QQ技术群-"符号执行-白盒测试“,QQ号为:“339834199"

时间: 2024-10-28 21:06:01

如何使用ThreadingTest提高软件安全性检测效率(中)的相关文章

如何使用ThreadingTest提高软件安全性检测效率(下)

方法三:可视化代码结构分析 函数调用图: 可以给用户展示一系列关于软件系统的整体信息.如:类或者函数以及类的成员函数的总数目,调用关系或者类的继承关系的深度.层次结构.语句总行数和总体复杂度,整体的测试覆盖率(分累积的结果和最后一次运行的结果,可选择语句.分支和MC/DC测试覆盖率标准).整体的性能分析结果以及各模块所占的用时比例.以及全局变量和静态变量的分析结果等:同时,又给出了各个模块具体的信息,包括:各模块的源码行数和复杂度.测试覆盖率分析结果.扇入扇出信息,高亮显示一个模块及其所有相关的

如何使用ThreadingTest提高软件安全性检测效率(上)

一般来说,对安全性要求不高的软件,其安全性测试可以混在单元测试.集成测试.系统测试里一起做.但对安全性有较高需求的软件,则必须做专门的安全性测试,以便在破坏之前预防并识别软件的安全问题.安全性测试(Security Testing)是指有关验证应用程序的安全等级和识别潜在安全性缺陷的过程.应用程序级安全测试的主要目的是查找软件自身程序设计中存在的安全隐患,并检查应用程序对非法侵入的防范能力, 根据安全指标不同测试策略也不同.注意:安全性测试并不最终证明应用程序是安全的,而是用于验证所设立策略的有

《批处理在提高Windows管理效率中神奇应用》学习01

<批处理在提高Windows管理效率中神奇应用>学习 ::1.3 ::echo. 显示空行 ::数值范围循环的for循环 @echo off echo Creating file0.txt ~ file99.txt echo. echo. :: for /l %%n in (0,1,99) /l表示for语句在指定的数值范围内循环.范围由in决定 ::in (0,1,99) 表示从0开始,步长为1,到99结束(包含99) for /l %%n in (0,1,99) do ( echo %%n

ABAP程序编写过程中怎么提高程序执行效率一

影响ABAP程序的运行效率主要是在程序中大量数据的取得,如果取数不得方法,很影响报表的运行效率,所有优化ABAP程序主要是优化数据取数的方法.下面这几点可以有效的提高取数的效率,从而来提高程序的运行效率. 1.选择最有效率的表名顺序(只在基于规则的优化器中有效): ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 drivingtable)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表.如果有3个以上的表连

WORD中五大功能助提高论文写作效率

在编撰研究生学位论文期间,我和身边的同学都曾遇到过因Word排版常识短缺,致使论文修正和排版费尽周折,乃至影响论文编撰进程的事.信任有许多正在编撰或行将编撰学位论文的同学也会有这样的遭受.为了让我们少走弯路,现以Word2003为例(Word2007相似),将论文编撰中非常有用的五项功用作了概括梳理.信任只需你花上一点点时刻学习这些功用,很可能就省去论文排版的一切烦恼,从而将更多的精力和时刻投入到论文质量的进步上. 1.文档构造图 学位论文篇幅长,页数多,在编撰或修正过程中,常常要定位到某一章某

借助 SIMD 数据布局模板和数据预处理提高 SIMD 在动画中的使用效率

原文链接 简介 为发挥 SIMD1 的最大作用,除了对其进行矢量化处理2外,我们还需作出其他努力.可以尝试为循环添加 #pragma omp simd3,查看编译器是否成功进行矢量化,如果性能有所提升,则达到满意状态. 然而,可能性能根本不会提升,甚至还会降低. 无论处于何种情况,为了最大限度发挥 SIMD 执行的优势并实现性能提升,通常需要重新设计算法和数据布局,以便生成的 SIMD 代码尽可能高效. 另外还可收到额外的效果,即标量(非矢量化)版代码会表现得更好. 本文将通过一个 3D 动画算

详细讲解提高数据库查询效率的实用方法、外键关于性能

1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num is null 可以在num上设置默认值0,确保表中num列没有null值,然后这样查询: select id from t where num=0 3.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放

AUCTeX+Emacs 是目前我见过的能最大限度提高 LaTeX 编辑效率的编辑器 (转)

AUCTeX+Emacs 是目前我见过的能最大限度提高 LaTeX 编辑效率的编辑器 效率的提高程度取决于你对 Emacs/lisp 的熟悉程度,但可以说基本上能提高到你所能想象的最大程度了.下面我会就效率方面介绍它的几个特性,不仅与 WinEdt 做对比,同时也和其他 OSX上的某些编辑器做一下对比, 安装和配置网上很多,比如这篇小文档[1],这里就不介绍了. 强大的快捷键系统 (CDLaTeX) 就提高编辑效率而言,快捷键是最重要的,同样的内容别的编辑要按10下键盘才能实现你就按5下就实现了

简单十招提高jQuery执行效率

1. 使用最新版本的jQuery jQuery的版本更新很快,你应该总是使用最新的版本.因为新版本会改进性能,还有很多新功能. 下面就来看看,不同版本的jQuery性能差异有多大.这里是三条最常见的jQuery选择语句: $('.elem') $('.elem', context) context.find('.elem') 我们用1.4.2.1.4.4.1.6.2三个版本的jQuery测试,看看浏览器在1秒内能够执行多少次.结果如下: 可以看到,1.6.2版本的运行次数,远远超过两个老版本.尤