学术论文投稿/征稿

欢迎您!请

登录 注册

手机学刊吧

学刊吧移动端二维码

微信关注

学刊吧微信公众号二维码
关于我们
首页 > 学术论文库 > 理工论文 嵌入式软件安全性测试研究论文

嵌入式软件安全性测试研究论文

11

2024-04-15 15:53:38    来源:SCI论文网    作者:xuling

摘要:安全性测试作为一种常见的测试类型,在嵌入式软件测试中发挥着重要作用,可以有效保证嵌入式软件稳定、安全运行。本文对常见的安全性测试要点和测试方法进行研究和介绍,为软件开发人员和测试人员提供参考。

  摘要:安全性测试作为一种常见的测试类型,在嵌入式软件测试中发挥着重要作用,可以有效保证嵌入式软件稳定、安全运行。本文对常见的安全性测试要点和测试方法进行研究和介绍,为软件开发人员和测试人员提供参考。

  关键词:安全性测试,嵌入式软件,软件测试

  Research on Security Test for Embedded Software

  ZHANG Fengling,HUYilin,DAI Xiaoqian,TIAN Bo,ZHOU Xuesi

  (Shanghai Aerospace Electronic Technology Institute,Shanghai 201109)

  【Abstract】:As a common type of software testing,security test plays an important role.It can guarantee the stable running of embedded softwares.This paper introduces and analyses common test points and test methods,and provides references for software designer and software tester.

  【Key words】:security test;embedded software;software testing

  0引言

  随着嵌入式软件复杂度越来越高,嵌入式软件的安全性变得尤为重要,任何安全性设计缺陷都将带来严重的后果。一个由软件设计导致的安全漏洞,若在产品化之前未被发现,则可能会引发灾难性后果,造成无法估计的损失。

  软件测试是保证软件安全的关键技术,也是保证软件质量和可靠性的重要方法。安全性测试是检验软件功能安全性以及信息安全性是否满足要求的测试。安全性测试工作能够最大限度地发现软件中的错误并减少软件残留的安全隐患,从而提高软件抵御潜在风险的能力,降低软件故障率[1]。本文主要针对嵌入式软件的安全性测试要点展开研究。

  1软件安全性需求来源

  软件安全性工作贯穿软件生命周期的各个阶段,应与软件工程活动紧密结合。在软件需求分析阶段,应明确软件系统的安全性能力要求。软件开发人员应参与软件安全性需求的拟定,并负责实施软件项目策划规定的有关活动,确保所开发的软件产品满足系统的安全性需求[2]。

  软件安全性需求是为了保护该软件所属系统的安全而对软件提出的需求,软件安全性需求的来源可以分为以下两类。

  1.1专用的安全性需求

  专用的安全性需求与嵌入式软件所处的系统有关,是所属系统特定的软件安全性需求。系统需求经过详细分解,细化出与软件相关的安全性需求。

  1.2通用的安全性需求

  在同一应用领域,或相似的领域,常常有共同的安全性需求。为了避免工作的重复和内容遗漏,可以将多个类似项目收集起来的安全性需求整理形成通用安全性需求。

  由于专用的安全性需求具备特殊性,不同的系统有不同的专用安全性要求,因此本文不针对专用的安全性需求测试进行研究,只对通用的安全性需求测试进行研究和介绍。

  2软件安全性测试

  嵌入式软件常见的几种安全性测试点有状态明确安全性、关键数据处理安全性、运算安全性、通讯安全性、中断资源安全性、故障处理安全性、时间空间安全性等。如图1所示。

fd0d447d2915c381c586ffe3c29f08a.png

       2.1状态明确安全性

  2.1.1初始状态的明确性

  在各设备加电后,要确保整个系统的初始状态是正确的,就要求各设备的嵌入式软件可以给出明确的初始状态。代码审查确认所有变量均具备初始值;利用外部接口模拟器或示波器等工具,确认外部接口(数字量接口、模拟量输出等)输入数据、输出数据初始状态明确无误;确认存在冗余备份设备的主机备机角色分工明确等初始状态。

  2.1.2不允许存在多余物

  代码审查确认软件中不存在未使用的函数、语句、变量、指针等,除非设计方给出合理理由(加以详细注释说明),否则建议删除多余物。

  2.2关键数据处理安全性

  嵌入式软件设计时,对于关键数据,应做好数据保护。例如变量A是模型B的重要输入数据,软件需求中明确要求要对变量A进行滤波处理,防止由于变量A出现毛刺影响模型B的解算。在测试时,通过模拟器,模拟变量A多次出现毛刺的场景,观测模型B的解算结果是否出现大幅度波动或数据跳变等现象。

  2.3运算安全性

  嵌入式软件在各控制算法中经常使用加、减、乘、除、平方和开方运算,测试时应考虑运算的安全性,测试是否存在溢出的情况,可以对以下几点分别进行测试。

  2.3.1数据类型安全性

  代码审查运算过程中变量的数据类型范围是否匹配,是否会因为数据类型不匹配导致数据溢出等计算错误。示例如表1所示。

1be9dbe8a72b6c3d0d966d79f7e5f70.png

  2.3.2防除零安全性:除数不能为0

  控制算法中用到除法的,应代码审查是否每个除数均进行了防除零保护,未进行防除零保护的,应请设计方明确除数不会取到零值。在白盒环境下,对“0”、穿越“0”以及从两个方向趋近于“0”的输入值,打断点单步执行验证防除零算法正确性。

  2.3.3度量单位安全性

  代码审查运算过程中变量的度量单位是否一致,例如角度单位“度”和“弧度”是否匹配等。

  2.3.4函数使用安全性

  代码审查库函数使用的正确性。特别是在使用三角函数时,应注意atan和atan2的区别(值为分别为[-pi/2,pi/2]、[-pi,pi]),根据实际需求选取正确的函数。

  2.3.5逻辑运算符安全性

  程序中用到逻辑运算符的,应注意逻辑运算符使用是否正确、逻辑运算符优先级是否符合数学模型要求。

  例如,需求要求:cnd1>4.0或cnd2>33.0的情况下,若cnd3==0,则条件成立;

  代码实现为:if((cnd1>4.0)||(cnd2>33.0)&&(cnd3==0))

  由于&&优先级高于||,程序运行时,会先判断(cnd2>33.0)&&(cnd3==0),再与(cnd1>4.0)进行逻辑或,此时执行结果为,cnd2>33.0且cnd3==0时,或cnd1>4.0时,条件成立,当cnd1>4.0时,不再判断cnd3是否等于0,与需求不一致。

  2.4通讯安全性

  嵌入式软件与外部设备之间存在大量数据交互,在安全性测试时,应对以下几点分别进行测试。

  (1)帧格式异常保护。代码审查与各设备通讯时,是否利用帧头、帧长、校验、帧尾等多种方式保证数据的正确性。在各设备模拟器中分别设置帧头错、帧长错、和校验错、帧尾错等异常、边界情况,查看是否不采用此拍数据。

  (2)具有超时判断功能。代码审查软件中是否对通信超时的异常情况进行了处理。模拟外部设备丢帧(偶尔丢帧、长时间丢帧、无通讯等异常)等故障模式,测试软件是否正确处理这些工况。

  (3)输入/输出接口的传输时间要留有余量。根据串口波特率,算出各设备通讯数据理论耗时,累加和应不大于控制周期。利用示波器,测量出实际通讯耗时,确认累加和不大于控制周期。

  (4)数据范围边界安全性。根据通信协议,对各个数据的范围边界进行测试,确保取边界值时数据可正确发送与解析。数据实际取值有可能超出通信协议规定的上限或下限的,在数据组帧发送之前,应先进行限幅处理;若已经进行过限幅处理,测试时可以采用边界值分析法进行动态验证,案例如下。

  软件发送给设备A的变量Z如表2所示。

0453ede1df8cb2f6552b2fb342c3160.png

  在设计测试用例时,采用三点法分别对变量Z边界点(等于-70、中间值、等于70)进行测试。重点关注变量Z在等于70时,设备A收到的变量Z值是否正确。变量Z值取值为70时,70/(2.1362×10-3)取整后等于32768,大于short数据类型的表示范围[-32768~32767],导致设备A收到的变量Z值为0。

  嵌入式软件向外部设备输出模拟量时,应注意软件是否对模拟量进行限幅,避免超出外部设备承受能力。

  (5)度量单位安全性。根据通讯协议,代码审查确认程序与协议中各数据的度量单位是否一致。

  2.5中断资源安全性

  嵌入式软件应尽量避免使用中断,可以使用查询方式替代中断。如果使用中断,中断服务程序应尽量短。嵌入式软件设计含有中断的,需要进行中断分析,分析重点主要包括以下几点。

  (1)中断初始化是否正确。在嵌入式软件初始化阶段,对中断进行初始化时,应严格按照“阻止-关中断-初始化-开中断-使能”的顺序进行操作;中断使能的时机要仔细分析,放在合理的位置;包含多个中断的,要设置好中断优先级;嵌入式软件运行时会受到周围环境的影响,例如干扰脉冲或电磁波,有可能影响中断控制器的中断源引脚,一旦被影响误触发,将会对整个程序的执行产生不可预知的影响,因此要屏蔽不使用的中断源,将不使用的中断源设置为空处理的中断服务子程序。

  (2)中断线程的保存和恢复。中断可以在主程序的任一分支和语句处被触发,在中断触发时刻,保存好需要保存的现场,并在中断服务子程序返回时正确恢复现场。

  (3)中断资源冲突。多个中断及主程序,尽量避免对同一变量进行赋值操作,避免出现资源冲突。如果不可避免,应处理好各中断和主程序的时序关系。分析各中断和主程序是否存在共享的缓冲区、变量、寄存器等资源。读写处理是否有冲突,是否会同时出现中断申请。例如,嵌入式软件初始化后,常常会对RAM进行存储区自检,测试人员需要分析中断是否已经使能,如果此时中断已使能,则中断服务程序中不可对RAM区有写入操作,否则可能会影响RAM自检结果。

  2.6故障处理安全性

  嵌入式软件在设计前,应仔细分析各种可能的异常工况,并设计相应的保护措施,使系统转入安全状态,保存异常出现时刻的现场信息,运行故障处理模式[3]。软件测试时,充分考虑各种故障工况,利用外围模拟设备模拟测试场景,测试软件能否及时响应故障模式,在故障消除后,测试软件能否恢复正常运行模式。

  2.7时间空间安全性

  在时间、空间资源分配上,应测试是否满足软件需求规定的余量要求。对于需要长期运转的软件,应根据系统要求,长时间运行软件,观察软件能否保持正常运行。

  3结语

  本文从安全性需求来源、安全性测试要点的角度,对嵌入式软件的安全性测试进行了研究和介绍,为软件开发人员提供了安全性设计思路,同时也为软件测试人员分享了常见的嵌入式软件安全性测试要点,有利于软件测试人员提高软件安全性测试意识,进一步保障和提升软件质量。

 参考文献

  [1]施寅生,邓世伟,谷天阳.软件安全性测试方法研究[J].微计算机信息,2008,24(1-3):56-58

  [2]叶婷,曾幸钦,刘惠玲,等.面向需求的软件安全性测试方法[J].电子元器件与信息技术,2021,5(10):168-169

  [3]董燕.一种星载嵌入式软件安全性测试方法[J].测控技术,2016,35(4):117-119