软件系统设计方案——基于机器学习的模糊测试框架改进

一、项目简介

 

模糊测试能够检测软件或计算机系统的安全漏洞,近年来比较流行的模糊测试主要是基于反馈的智能化模糊测试引擎比如AFL、libFuzzer等,在AFL中通过遗传算法来生成新的测试用例,本课题主要探究能否在现有模糊测试引擎的基础上通过其他机器学习算法来提升模糊测试的性能和效率,以便在同等算力的情况下发现更多安全问题,主要使用的工具就是AFL。

 

二、软件设计方案

2.1软件结构特点

AFL是一个测试软件,通过使用AFL工具,记录输入样本的代码覆盖率,从而调整输入样本以提高覆盖率,增加发现漏洞的概率。AFL通过linux c编写,用命令行执行,将结果存储为文件,故无需使用数据库。

 

2.2接口API

AFL有着众多接口,这里仅挑选一些重要的进行介绍。

afl_state_init(): alf程序初始化

afl_state_stop(): 停止fuzz,杀死所有子进程

afl_state_fork(): 分支一个子进程,运行测试

afl_state_save() : 保存输出文件

add_to_queue(): 添加测试用例
delete_queue(): 删除测试用例
destroy_queue(): 销毁队列
calculate_score(): 给testcase打分
load_extras(): 加载extra
add_extra(): 添加extra
destroy_extras():销毁extra

shared_mem_init():初始化共享内存

get_shared_mem():获取共享内存

 

三、系统视图

        软件架构模型是通过一组关键视图来描述的,同一个软件架构,由于选取的视角不同可以得到不同的视图,常用的视图有分解视图,依赖视图,泛化视图,执行视图,实现视图,部署视图以及工作任务分配视图等等,下面通过不同的角度获得该项目的几种不同的视图。  

 

1. 分解视图

  分解视图是描述软件架构模型的关键视图,简单的说就是将系统按功能分解,形成几个子系统或者其他部分,每个子系统又包括了各自的功能。本系统中可以分解为预处理模块、变异模块和测试模块三个模块。

 

 

 

2 依赖视图

  依赖视图展示的是软件模块之间的依赖关系。

 

 

 

 

3 执行视图

  执行视图展示了系统运行时的时序结构特点,比如流程图、时序图等。执行视图中的每一个执行实体,一般称为组件(Component),都是不同于其他组件的执行实体,如果有相似的执行实体,那么把他们合并成一个实体。

 

 

四、源代码的目录文件结构:

 

 

 

 

 

 

五、软件系统运行环境和技术选型说明:

运行环境: Linux,AFL非常适合于linux下有源码程序的测试,在linux下环境搭建简单,使用方便。

技术选型说明:使用AFL进行模糊测试时,所选测试用例数量应该要在一定范围,不能太大也不能太小,太小的话并不能达到预期的效果,而测试用例数量过大的话,根据AFL白皮书中的测试结果,生成的tupple的碰撞率会大大增加,降低测试效率。

 

六、核心工作机制

对于输入队列中的文件,先进行预处理,精简队列。之后按照变异策略进行位翻转、加减、添加或替换数据等等变异,再对变异后的文件进行插桩和编译,最后进行测试,如果能够触发新的执行路径,说明这次变异是有用的,将其加入输入队列,否则则处理下一个文件,循环执行直到输入队列为空。

 

 

七 、小结

  通过这几次的课程,我学习了如何进行软件系统分析和设计,并将其实际运用在了自己的工程实践项目上。而通过近两次的作业,我逐渐感受到做任何一个项目前最好都要有一定的规划,并且严格按照规划的步骤执行,这样可以达到事半功倍的效果。

 

posted @ 2020-12-30 15:09  lllsy  阅读(625)  评论(0)    收藏  举报