Page 294 - 《软件学报》2021年第6期
P. 294

1868                                     Journal of Software  软件学报 Vol.32, No.6,  June 2021

         has an important and broad application prospect. ROS integrates various software packages that can realize different functions, such as
         positioning drawing,  action planning, perception, simulation,  etc. However,  some vulnerabilities  may damage the overall safety  and
         reliability of robot system directly. In this study, an ROS oriented fuzzing method is proposed to test different versions of ROS packages
         and find out the vulnerabilities. The proposed approach includes two modules: Test cases generation and differential fuzz testing execution.
         Firstly, load and process the input file, and generate the test cases file based on the strategy’s generation. Secondly, communication among
         nodes is achieved using topic communication mechanism, and the test case files are used as the inputs to carry out differential fuzz testing
         on the ROS packages. Then, the inconsistent outputs in the test results are calculated and evaluated, and the seed meet the evaluation
         indicators  are reserved  and fed back to  the test  case generation  module to generate  test  cases, it  will improve seed quality  and code
         coverage effectively.  Finally, analyze the cause  of  inconsistent  output and  find  out  the  vulnerability. This method is applied  in the
         experiment of  robot  coordinate transformation, testing  the packages  TF  and TF2 that realize  coordinate transformation under different
         reference frames. Final experiment results show that TF is more accurate in function implementation compared with TF2, and there are
         vulnerabilities in the function of TF2 to realize coordinate rotation transformation.
         Key words:    differential fuzz testing; ROS; packages; vulnerabilities detection; reliability

             Robot Operating System(以下简称 ROS)是 Willow Garage 公司于 2010 年发布的机器人软件平台,能为异质
         计算机集群提供类似操作系统的功能,适合于机器人的大规模研发.ROS 提供了包括硬件抽象、底层设备控制、
         常用函数的实现、进程间消息传递以及包管理等操作系统应有的服务,也提供用于获取、编译、编写和跨计算
         机运行代码所需的工具和库函数,在代码重用、模块化、对等设计、较少依赖编程语言和开放源代码方面具有
             [1]
         优势 .随着工业和技术的发展,机器人越来越多地应用于医疗、军事、无人机和太空探索,因此,机器人开发的
                                             [2]
         安全性及准确性越来越成为大家关注的焦点 .其中,很多集成于 ROS 的软件包,例如定位绘图、行动规划、感
                                                                                     [3]
         知、模拟等等都发挥着重要作用.因此,每一个功能的精准实现,都直接影响着机器人的整体开发 .
             近年来,机器人涉及无人机、自动驾驶、医疗等多个安全性极强的领域,机器人开发的可靠性和安全性问
         题也成为了热点研究问题.ROS 设计灵活使用简单,包含丰富的功能设计包,比如机械臂运动规划、机器人定位
         导航、仿真、可视化工具、坐标变换等,都与机器人开发的重要环节息息相关.因此,ROS 成为了机器人开发领
         域比较受欢迎的开发系统.但关于对测试 ROS 系统开发的安全性和可靠性,国内外研究大致主要包括对 ROS 中
                                       [4]
                                                                                          [5]
         的协议、节点间通信进行形式化验证 以及进行一些功能包的静态测试,如使用 Coverity 等静态分析 工具对
         ros_comm,actionlib 等 ROS 中重要的通信功能包以及核心功能库进行静态测试,并发现了缓冲区溢出、整数溢
                                                                                         [7]
                                              [6]
         出等多个危险漏洞,其中,已有 10 个漏洞被 CVE 数据库收录.静态分析作为一种传统的软件测试方法 ,主要指
         不运行被测程序本身,通过分析或检查源程序的语法、结构、过程、接口等来检查程序的正确性;对需求规格、
         软件设计说明书、源程序做结构分析、流程图分析、符号执行来找错.静态方法通过程序静态特性的分析,找
         出欠缺和可疑之处,例如不匹配的参数、不适当的循环嵌套和分支嵌套、不允许的递归、未使用过的变量、空
         指针的引用等,其结果可用于进一步的查错,并为测试用例选取提供指导,是保证系统安全性和可靠性的传统手
         段.但静态分析这种静态测试的方法常常会产生误报,耗时较长,在一定程度上暴露了传统方法的缺陷,也促使
         研究出一种更为有效的漏洞挖掘方法.
                        [8]
             模糊测试技术 是近几年软件测试领域的焦点技术,其原理主要是通过提供非预期的输入并监视异常结
         果来发现软件故障.它不关心被测试目标的内部实现,而是利用构造畸形的输入数据引发被测试目标产生异常,
                              [9]
         从而发现相应的安全漏洞 .一直以来,模糊测试技术被广泛应用于操作系统                           [10] 、数据库 [11] 、Web 应用程序和
         服务器   [12] 、区块链等等;模糊测试     [13] 不需要程序源码、不受限于被测系统的内部实现细节和复杂程度、不用
         关心被测对象的实现语言等,所以它可以针对各类格式的文件进行测试                          [14] .与传统的测试方法不同,模糊测试不
         受限于被测系统的内部实现细节和复杂程度,不需要程序的源代码即可发现问题,省时省力且误报率低.因此,
         使用模糊测试是对 ROS 系统可靠性保障             [15] 的一种高效便捷的测试方法.但 ROS 不同于其他系统,它有自己独
         特的节点、消息、主题等计算图级来处理数据以及一种分布式的通信机制                           [16] 来实现节点间通信,完成消息的传
         递和功能的实现,还有自己的文件系统级,这些对于我们的测试工作都是很大的挑战.而且,在已知的 ROS 中存
         在由不同语言或不同算法库实现的不同版本的软件包,却可以实现相同功能.针对 ROS 的这种特殊性,我们对其
   289   290   291   292   293   294   295   296   297   298   299