论文部分内容阅读
随着信息技术的持续发展,互联网及软件产品日益向开放、共享的模式发展。根据世界银行的统计,已有100多个国家和超过250个政府,及联合国和世界银行等国际组织,实施“开放数据行动计划”(Open Data Initiative)。通过应用程序接口(Application Programming Interface,API)获取信息,已日益成为消费者获取数据的重要方式之一。因此,应用产品接口的安全性已日趋重要。接口模糊测试(Fuzz)是接口安全测试的主要手段之一。但在实际使用过程中,应用程序接口Fuzz存在用例规模过大、用例覆盖有效性低等问题。本文针对以上问题,结合SwaggerHub接口开发实例的接口实现,提出并实现了一套RESTful API接口Fuzz系统,通过用例自动生成、预筛选等方法,有效提升了应用程序接口模糊测试有效性和测试效率。本文具体工作内容如下:首先,提出了一种基于接口定义描述的测试用例自动生成方法。该方法通过分析接口定义描述文件的关键特征,构建一组接口定义描述与RESTful API资源表述的映射关系,并结合OpenAPI规范给出一组实现。由于该方法基于接口定义实现,对比传统Fuzz的报文逆向方法,有效提升了用例覆盖的完整性。其次,提出了一种基于预筛选的快速定位Fuzz测试方法。该方法通过分析API接口定义描述的关键字段,获得接口参数的定义域与响应集合。结合漏洞库指引,在有效定义域内及定义边界附近,对脆弱字段进行针对性变异,生成畸形用例。该用例生成方法,基于参数定义域,极大地提升了畸形用例的有效性。紧接着,提出了一种深度遍历方法。该方法通过对一组RESTful接口定义描述的联合分析,获得接口所描述资源信息的状态转移关系,并根据资源信息的状态转移过程生成接口Fuzz测试所需的测试序列。该方法生成的测试序列,能够基于转移路径对RESTful接口资源状态转移进行深度遍历,有较高的测试覆盖率。最后,利用RESTful API接口Fuzz测试系统,对某款正在开发中的软件系统进行接口Fuzz。对比传统的接口Fuzz工具,测试有效性有所提升。