浅谈系统软件安全—嵌入式技术

发表时间:2020/12/11   来源:《科学与技术》2020年第22期   作者:潘加旺 王炜 仇秋雨
[导读] 尽管针对嵌入式软件安全的研究越来越深入,安全测试工具也越来越多,但当前嵌入式软件安全测试仍面临挑战。一是物联网产品层出不穷导致安全测试需求多变

        潘加旺 王炜 仇秋雨
        武汉东湖学院 湖北省武汉市 430000
        摘要:尽管针对嵌入式软件安全的研究越来越深入,安全测试工具也越来越多,但当前嵌入式软件安全测试仍面临挑战。一是物联网产品层出不穷导致安全测试需求多变。二是嵌入式产品的快速开发应用需求与安全性测试时间经济开销之间
存在矛盾。三是存在漏洞的产品仍将长期使用,比如使用VxWorks、Android等早期版本发现问题后无力修补。四是缺乏高效的嵌入式软件安全测试与漏洞检测方法。现有的嵌入式安全测试工具与漏洞挖掘方法,往往专注于细分领域,执行效率不够高效、发现的安全缺陷也不够全面。但这些问题既是挑战,也是机遇,可以为我们未来深入开展嵌入式系统软件安全测试技术研究提供牵引。
        关键词:嵌入式;软件安全;测试技术
        一、嵌入式系统软件的特点及其安全需求
        嵌入式系统从构架上来看一般可以分成3-4个层次:硬件层、硬件接口层(驱动层)、操作系统层(中间层)和应用层。而嵌入式软件在设计之初就要求具备功能稳定、可靠性好、实时性高、系统资源占用少等特点。现阶段,虽然面向物联网应用的嵌入式设备越来越多样化,但其在逻辑架构层次本质上与嵌入式系统架构并无太大区别。
        嵌入式软件的自身特性决定了其独特的安全需求:一是功能稳定、可靠性好,就要求功能安全是嵌入式软件的首要目标,即使在受到攻击的情况下,也有较强的鲁棒性和容灾恢复能力;二是实时性高、系统资源占用少,要求不能部署过于复杂的安防手段;三是专用性强、软件与硬件系统耦合,就要求软件加固或应用升级也须匹配目标设备硬件,开展测试也需要特定的硬件环境。近年来嵌入式产品的应用遍及航天、医疗、智能家居等各个领域,嵌入式安全不仅涉及个人隐私,甚至关乎国计民生,这对嵌入式系统的安全性提出了更高的要求。与之相矛盾的是和嵌入式系统相关的安全事件频频发生,加强嵌入式软件的安全测试十分必要。
        二、嵌入式软件安全测试方法
        (一)嵌入式软件功能安全测试
        嵌入式软件的功能安全测试通常可以结合嵌入式软件的通用测试开展,例如在单元测试中校验模块开发是否满足了设计方案中提出的安全要求,在集成测试中设计功能安全测试用例,检验各模块间的接口和通信是否安全。现在越来越多的嵌入式软件会考虑自身安全而增加专业的系统安全防护设计,例如身份认证、加密传输、数据备份与恢复等,相应的也要针对性的设计功能安全测试用例,确保其达到设计要求。
        (二)嵌入式软件信息安全测试
        嵌入式软件的信息安全测试又称渗透测试,测试人员在进行测试时,应当采用攻击者的视角,去发现软件中存在的各种安全缺陷和漏洞。其一般流程如下:根据安全需求选择安全测试参考标准并确立安全规则,对嵌入式软件环境平台进行安全性分析,对程序开发语言进行安全性分析,对被测软件进行威胁建模,搭建测试平台,按照测试大纲同步进行已知漏洞挖掘和未知漏洞挖掘,对漏洞进行分级并进行验证,提交测试结果和反馈。需要特别注意的是,在嵌入式软件开发过程中被复用的代码或引入的开源项目代码应该得到足够的重视。

一些已知漏洞,特别是嵌入式操作系统存在的已知漏洞可能会长期存在,可以采用基于指纹校验的漏洞匹配技术进行已知漏洞的快速查验。
        (三)嵌入式软件安全测试策略
        嵌入式软件安全测试策略的制定往往与软件选择的开发模式紧密相关。在V模型中,嵌入式软件安全测试包括单元测试、集成测试和系统安全测试。但是这种测试策略忽视了安全测试对需求分析和系统设计的验证,介入周期晚, 容易带来额外的风险和开销。基于双V模型(W模型)的嵌入式软件安全测试策略则要求测试的对象不仅仅是程序,需求分析、功能和设计同样需要测试人员尽早介入进行安全验证。但是V模型和双V模型将开发、测试等活动视为串行活动,不支持迭代也存在局限性。三、嵌入式软件安全测试关键技术
        (一)静态分析技术
        静态分析技术指对嵌入式软件进行静态的代码分析和缺陷检测。在不运行被测程序的方式下,采用词法语法分析、数据流控制流分析、规则检查、字符串匹配和模型化分析等技术对代码进行分析扫描,发现其中的逻辑、语法错误, 确认是否存在缺陷。常见的静态检测工具有PC-Lint、QAC/ C++、CPPcheck、StackAnalyzer、Splint、Findbugs等。静态分析属于白盒测试,该方法可以发现常见的代码安全缺陷模式,如缓冲区溢出等,但会存在漏报率、误报率较高的局限性。
        (二)动态测试技术
        动态测试技术是指在嵌入式程序运行过程中进行测试分析、数据注入,检查运行结果与预期是否相符合,从而达到寻找程序漏洞的目的。动态测试的核心要求是需要动态执行嵌入式系统程序,因而测试更为全面和贴合实际。测试中可以借助L V C手段构建不同的测试环境,可以利用故障注入技术验证系统的鲁棒性和安全性,但动态测试技术也存在着依赖高素质软件测试人员、测试过程不细化的问题,需要与其他测试技术相结合,才能够有效提升测试效果。
        (三)模糊测试技术
        对于无法获得源代码的嵌入式软件,选用黑盒模糊测试是最合适也是最有效的手段,该方法不需要被测对象的源代码,可以解决闭源嵌入式设备的漏洞挖掘痛点问题。同时, 还可以模拟用户的异常输入或者恶意攻击者的畸形数据,发现更多的攻击面探测,从而展示出真实攻击状态下的漏洞利用情况。但由于模糊测试中畸形数据的产生有很大随机性, 所以对程序的路径覆盖度不高,并且难以对测试进度进行量化。因此,在对嵌入式系统软件开展模糊测试时,往往采用基于先验知识的测试用例构造算法提高数据包覆盖效率,并优化监控算法、丰富异常处理策略来提高系统灵活性和自动化程度。
        参考文献:
        [1]    彭安妮,等.物联网操作系统安全研究综述[J].通信学 报,2018.39(03):22-34
        [2]    林永峰,陈亮.面向安全性分析的嵌入式软件测试方法研 究[J].现代电子技术,2016.39(13):80-83
        [3]    叶亮.基于安全规则的源代码分析方法研究[D].华中科技大学,2013:3
投稿 打印文章 转寄朋友 留言编辑 收藏文章
  期刊推荐
1/1
转寄给朋友
朋友的昵称:
朋友的邮件地址:
您的昵称:
您的邮件地址:
邮件主题:
推荐理由:

写信给编辑
标题:
内容:
您的昵称:
您的邮件地址: