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

一、安全性代码测试

一般来说,对安全性要求不高的软件,其安全性测试可以混在单元测试、集成测试、系统测试里一起做。但对安全性有较高需求的软件,则必须做专门的安全性测试,以便在破坏之前预防并识别软件的安全问题。安全性测试(Security Testing)是指有关验证应用程序的安全等级和识别潜在安全性缺陷的过程。应用程序级安全测试的主要目的是查找软件自身程序设计中存在的安全隐患,并检查应用程序对非法侵入的防范能力, 根据安全指标不同测试策略也不同。注意:安全性测试并不最终证明应用程序是安全的,而是用于验证所设立策略的有效性,这些对策是基于威胁分析阶段所做的假设而选择的。例如,测试应用软件在防止非授权的内部或外部用户的访问或故意破坏等情况时的运作。

 

二、ThreadingTest测试工具介绍

ThreadingTest(简称“TT”)是创新型的系统级白盒测试工具和数字化软件测试装置,它的设计基于融合了4项国家发明专利而打造成的软件测试行业的革新性测试理念-“穿线测试”。TT首次将黑盒测试与白盒测试过程以及方法进行完美的融合,以黑盒的测试过程及方法,产生白盒测试的数据,真正将软件测试带入数字化测试时代。除了支持传统的JavaEE应用,同时TT也是全球首款商用级别的移动端白盒测试工具,可以对各种类型的移动类应用进行测试。

TT的所有特性基于对代码、测试等的深度量化分析和智能计算,TT除了可以进行白盒测试外,也可以为软件的安全性测试提供全过程、系统性的方法支持,TT可以在安全性测试黑盒方法的过程中,从辅助分析,自动诊断,快速定位等多个层面提供软件安全性测试解决方案。TT提供的功能远超越了传统安全性白盒测试的功能范畴,配合流行Fuzzing安全性测试方法,可以将安全性测试的效率、质量进行大幅度的提升。本技术方案将针对软件安全性测试的所必须检测的特性,来展示TT对于安全性测试的提供的一系列方法。

 

三、ThreadingTest示波器专利技术

ThreadingTest率先将引入的测试示波器概念,在实际测试的过程中,可以实时的看到从程序中各种逻辑执行的速率、频率等信息,测试人员可以从传统的对被测应用的黑盒子测试(仅能看到功能的反馈无法看到程序内部的反馈)进而转换成为类似于对于硬件测试的示波器一样,能够对整个测试过程的关键测试数据进行实时的分析和查看。示波器本身具有如下功能:

示波器功能体现:

1. 实时记录被测程序的运行信息:块,函数,条件,运行堆栈

2. 实时记录测试用例对应的程序执行逻辑:

3. 支持源码分离的测试模式

4. 支持分布式的实时记录被测程序的运行信息

5. 可视化观察程序运行情况。波形可直观反应程序行为。

6. 通过波形分析程序在各种硬件平台上的运行性能。

7. 支持真机、模拟器等各类设备的接入

8. 支持各种自动化操作和单元测试所产生的测试数据的记录

9. 支持USB、WIFI、蓝牙等各种设备的连接方式


通过示波器,对安全性测试过程中程序在攻击情况下的响应情况进行分析

TT示波器的创意来自于电气设备测试中的电子示波器,它能够精准的、实时的捕捉到程序运行是的各种特性运行指标,TT通过实时的单位时间内程序执行块、条件数、函数的数量等指标图形,分析出来程序的各种运行特性以及运行异常。针对于安全性测试,它可以结合黑盒安全性测试工具,在安全性测试工具进行例如渗透性测试等过程中,实时给出程序的响应的情况。例如在进行代码的渗透性测试过程中,通过TT示波器我们可以展示如下的数据,用来辅助分析渗透性测试的结果:

1. 被测试程序是否会因为攻击行为,而进行持续大量的运算,例如面对DDOS攻击等情况下的反应;

2. 被测试程序在各种攻击行为时,是否会出线瞬时的、或者永久性的拒绝服务(DDos),DDos攻击会通常会表现为部署被测试应用服务器额CPU、内存、网络等资源的消耗,从程序内部角度,将会有一些函数和方法会被密集的非常规调用,这些TT示波器将会进行详细的分析程序执行序列流,以便于快速确定、排查和修复问题;

3. 在模拟非授权攻击的情况下,在没有正常的用户权限的情况下,其后台代码是否会被执行到,通过观察示波器的函数执行的堆栈序列可以检出本类问题。

 

通过示波器,对安全性测试过程中帐号权限进行检测

TT示波器可以对帐号权限进行精准的检测,TT示波器的指标本身具有等价类划分功能,他们可以用来精确的分析程序对于各种用户权限是否有正确处理:

通过运行事先准备好的具有各种权限类别的用例,TT示波器通过用例运行监控数据,会对这些用例进行等价类划分,其原理是软件通常会针对不同的用户执行不同的逻辑,不同的逻辑就会执行程序内部走不通的代码序列,并进而导致TT示波器的三个指标会发生变化,通过分析各个用例TT示波器给出的运行指标,就可以确定,用户权限的代码处理是否存在问题,例如分析出本不应该具有相同权限的用户,示波器却给出了相同的执行指标。本应该相同权限的用户,示波器却给出了不相同的执行指标等安全性风险。

通过示波器,检测多线程程序的运行特性及安全

对于存在多线程操作的软件中,TT示波器可以对多线程的运行情况精细分析,多线程通常会比较容易出现资源争用甚至导致死锁等情况发生,TT示波器可以对线程的运行进行分析,当线程发生死锁的情况下,TT示波器会给出直观的图形给予显示。同时也可以给出在处理大数据量处理情况下,线程数量和程序处理数据吞吐速率的比例关系。

四、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的代码执行逻辑追踪功能来进行分析。

五、可视化代码结构分析

函数调用图:

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

函数调用图的特性:

1. 支持百万图元级别的超高速图形绘制技术。

2. 支持全屏以及超平滑的放大与缩小技术、平滑的移动技术。

3. 支持按照类分组聚集布图以及按照函数调用关系布图,层次数量可自由定义。

4. 支持逐级的子树展开和下钻功能。

5. 支持在函数图元上覆盖率显示,以及覆盖率与函数相关信息的显示。

6. 可追溯:函数调用图是“活”的,不是静止不动的,可以选择图中任何一个模块而追溯所有调用它的路径和相关模块以及被他调用的模块,用于修改模块不一致性缺陷的预防等。

7. 可交互操作,例如高亮显示一个模块及其相关模块,或者单独绘制一个模块的调用关系。

8. 可选取函数调用图中任何一个模块为根生成局部子图,并且生成子图的相关信息,使得团队的各个组群或者个人可以方便的得到相关的局部信息。

9. 实现各模块与逻辑框图的链接:完成宏观(函数调用图)与微观视图(控制流程图)的结合,发挥更好的可视化效果

 

函数调用聚集图:

以类对函数进行分组,通过图表把同一类的函数聚集在一起进行展示。


类继承图:

显示的是当前项目所有类的集成和派生关系。


控制流程图

通过函数的if-else,while,for,do-while,switch-case等控制语句结构绘制组成的流程关系的展示图;配合下方的源代码展示界面,显示能清晰查看函数内部运行逻辑和结构、条件的真假运行状况、MC/DC的满足率等。

特性:

1. 可视化的控制流程图,对主要的控制逻辑语句对应有清晰的图元显示,支持嵌套显示以及串联显示。

2. 点击控制流图的每个图元可以看到对应的代码段以及代码段的执行次数、覆盖率情况。

3. 在控制流图的代码段,当条件语句成为选中热点后,可以看到条件语句的各个子条件的各种组合执行的真假情况。

4. 支持缩略图的显示,可平滑的进行缩放以及全屏显示。

5. 可以与函数调用图相互自动链接、追溯、转换。

 

函数列表:

针对整个程序的所有函数,按照各种覆盖率、复杂度进行排序,帮助用户能快速的定位查看所有的函数信息,并通过和函数调用图、控制流程图、覆盖率可视化图以及累计覆盖率图的快速切换,使得用户在查看和解决实际问题上提供了方便。

 

使用ThreadingTest代码可视化,进行安全性检测

在安全性检测过程中,通常需要对代码的设计错误进行检测,而TT提供的CallGraph能够对程序逻辑进行逆向工程,通过逆向的分析结果,测试人员就可以获得可视化的程序调用结构图,也就是程序设计的图形化表达,通过CallGraph所表达的函数的调用逻辑关系以及ControlFlow所表达的程序控制流,可以协助开发人员和测试人员快速的检测出程序的设计错误。

通过ThreadingTest进行代码简洁性、注释明确性检查

TT内部支持根据程序的控制流特性对程序进行标准的格式化,因此格式化过程的日志是对代码书写规范性进行检查。

通过TT的静态分析功能,对不建议采用的语法进行检测,例如函数递归调用以及goto语句可以进行检测。

使用ThreadingTest进行代码复杂度分析和安全检查

复杂软件不稳定,也经不起不可预测的行为。所以,我们努力使软件的复杂度变小。如果有条件采用某种自动化工具,可以通过工具对软件设计或/和代码进行控制,用图形化的方法反映出软件结构中的控制流和数据流,通过连结数/调用数、节点数、嵌套深度等这样一些结构关系的检查,获得复杂度的度量,将会获得很好的效果。

TT在对代码的分析过程中,TT可以直接给出代码复杂度的计算结果,通常复杂度越高的软件模块更容易引入缺陷,也更加容易引入安全性问题,高度复杂的数据结构难以彻底测试,可以采用TT等复杂性评估技术来标示出需要进一步改进的区域,以便提升软件的安全性。

六、系统级白盒测试技术进行充分测试及冗余代码分析

TT支持功能测试过程中的可持续测试技术,即覆盖率合并,对于多个版本实现智能覆盖率合并,以前述的函数级多版本对比为基础,通过覆盖率合并算法,准确统计出当前最新版本的累积覆盖率,从而极大减少测试工程师的重复测试工作。


通过TT的系统级白盒测试功能,我们可以通过在功能测试过程中,部署上TT,然后对所有的测试用例的白盒覆盖率进行汇总,经过多轮多个用例的测试以后,TT可以清晰的展示未覆盖的代码,这些代码从安全性角度来讲可以分为两类:

1.有些代码为垃圾代码或者不达到代码,从安全角度来讲,这些代码都程序都存在潜在的安全性威胁,需要进行处理。

2.软件测试过程中不充分,这些没有执行的代码,很可能存在潜在的安全漏洞,需要补充用例进行测试,保证测试的全面性和充分性。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值