中国电子科技集团公司第三十研究所 胡兆华 张一
嵌入式通信设备的安全漏洞是通信系统受到网络安全威胁的重要原因之一。近年来,基于嵌入式系统的各类产品如雨后春笋般层出不穷,在通信领域更是广泛使用。嵌入式通信设备的安全性不仅涉及个人隐私,甚至关乎国家安全。嵌入式通信设备正面临日益严重的攻击威胁,安全状况极为严峻。
为了应对嵌入式通信设备安全性提升的迫切要求,本文对嵌入式通信设备的特点及安全脆弱性进行分析,通过对相关安全性测试技术的研究,提出了适用于嵌入式通信设备安全性测试的内容和方法,为嵌入式通信设备的安全测试提供方法指导,也为安全防护能力提升提供设计参考。
嵌入式通信设备具有功能稳定、可靠性高、高实时性、系统资源占用少等特点,一般部署于通信网络中,通过特定的通信协议与外部实体进行交互,如图1 所示。
图1 嵌入式通信设备与外部实体的交互Fig.1 Interactions between the embedded communication equipment and the external entity
嵌入式通信设备的高可靠性决定了其运行的高安全性需求,其安全性很大程度上与嵌入式系统的安全性紧密相关。对于嵌入式通信设备而言,一方面受限于硬件尺寸、系统资源等因素,系统自身的安全防护能力非常有限;另一方面,作为通信设备,其部署的应用环境使其直接暴露在通信网络的各种攻击力量下,因此,对嵌入式通信设备的安全防御能力评估非常重要。
嵌入式通信设备通过各类通信协议与外部实体进行数据交互,设备内部采用嵌入式操作系统,由应用程序实现各种业务功能。嵌入式通信设备可能存在操作系统漏洞、应用软件漏洞、通信协议漏洞等,容易被攻击者攻击和渗透。
1.2.1 操作系统脆弱性
主流的嵌入式操作系统包括Vxworkd、Linux、uC/OS-II等,本文以嵌入式Linux 系统为例进行操作系统脆弱性分析。Linux 操作系统作为自由、开放的系统软件,设计初衷并非安全操作系统,因此安全防护措施并不完善,需要依赖使用者在应用中去提升其安全性。嵌入式Linux 系统存在的主要安全脆弱点如下:(1)访问控制:Linux 系统主流发行版本均为自主访问控制,自主访问控制机制未考虑用户角色、程序可信度等安全要素,故不能提供有效的安全性保障;(2)系统管理:为方便管理和操作,Root 账户拥有系统的所有权限,这种机制不符合“最小特权”管理原则。Root 账户可运行任意程序,这种过高的特权可能导致较高的安全风险;(3)文件系统访问:容易出现Root 权限的滥用而普通用户权限不足的情况;(4)网络协议:网络协议栈中部分协议存在安全漏洞;(5)系统日志方面:Linux 系统的日志缺乏资源访问记录和事件详情记录,无法跟踪和记录非法操作,也缺少必要的日志分析与警告。
1.2.2 应用软件缺陷
应用软件漏洞是嵌入式通信设备脆弱性的主要来源,主要有编码错误和环境配置错误两大类,进一步细分,还可以分为以下几类:(1)输入验证错误:对用户提供的输入数据未进行合法性检查,攻击者可输入非法数据对系统进行攻击;(2)缓冲区溢出错误:当程序缓冲区写入数据超过其规定长度时,会造成缓冲区溢出,破坏程序正常的堆栈,使程序执行其他代码;(3)边界条件错误:程序未对边界条件进行有效判断;(4)意外情况错误:程序处理逻辑中未正确处理异常情况而导致运行出错;(5)设计错误:程序处理逻辑不严谨,或是为了调试方便而设计的一些“后门”;(6)配置错误:系统或应用的配置错误,比如访问权限配置错误、参数配置错误等。
1.2.3 通信协议脆弱性
嵌入式通信设备通信协议的脆弱性,一方面原因是协议设计上的安全缺陷;另一方面原因是协议实现时的编码错误。通信协议一般有以下几类常见的脆弱性:(1)数据的机密性:通信交互的敏感数据未进行加密保护,攻击者可以在通信线路上直接探测或捕获通信设备与外部实体间传输的敏感数据;(2)数据的完整性:通信双方交互信息未进行完整性保护,攻击者可轻易对通信线路上的数据进行篡改或删除,而数据接收方却不能察觉或未进行数据正确性验证;(3)协议数据的抗重放:通信双方对交互的协议数据没有抗重放检测能力,攻击者可截获通信协议数据并原封不动地重新发送给数据接收方,接收方不能判断该协议数据是否是已经接收过的数据;(4)协议的弱认证性:通信协议数据在交互过程中,缺乏对交互对象的身份验证或者是身份验证力度较弱,交互数据很容易被攻击者仿冒,接收方却不能觉察交互对象的改变,攻击者可进而实施信息窃取或拒绝服务等攻击。
传统的安全性测试方法和工具主要面向通用IT 系统,不能完全满足对嵌入式通信设备进行安全性测试的需要,主要原因如下(:1)嵌入式通信设备非标准通用设备,采用的嵌入式操作系统经过定制化开发或裁剪,通用安全漏洞扫描工具的扫描结果可能存在大量误报;(2)嵌入式通信设备采用了较多的定制化软件,公开安全漏洞较少,传统安全评估分析工具难以对其进行安全性评估;(3)嵌入式通信设备采用专用通信协议,通用协议测试工具不支持这类专用协议,无法开展相关协议分析测试。
综上所述,传统安全测试手段缺乏对嵌入式通信设备定制化开发程序的测试实践和技术积累,基于通用设备或协议的安全性测试工具并不完全适用于嵌入式通信设备的安全性测试。
针对当前嵌入式通信设备的安全现状,在已有嵌入式通信设备安全脆弱性分析实践的基础上,本文总结了适用于嵌入式通信设备的安全性测试方法,在充分利用传统安全性测试手段的基础上,采用已知漏洞分析、未知漏洞挖掘以及安全配置检查等相结合的方法对嵌入式通信设备进行安全性测试。
已知漏洞分析主要用于发现嵌入式操作系统内核、三方应用服务等的已知缺陷,主要有4 种分析方法:版本扫描、原理扫描、补丁对比和人工分析。这几种分析技术的原理及优缺点对比如表1 所示。
表1 漏洞分析的技术原理及对比Tab.1 Technical principles and compareisons of vulnerablility analysis
嵌入式通信设备的未知漏洞挖掘,主要针对应用软件或通信协议中的潜在未知安全漏洞。漏洞挖掘的方法有静态分析、动态分析和人工分析3种,如表2 所示。
表2 漏洞挖掘方法和原理Tab.2 Methods and principles of vulnerability mining
2.2.1 静态分析方法
嵌入式通信设备漏洞挖掘的静态分析方法,一般使用代码静态分析工具对程序代码进行静态字符串搜索,实现代码缺陷的发现。
测试者获取嵌入式系统的源码,可以使用源代码扫描工具自动进行代码分析,常用的源代码扫描工具有Klocwork、Cppcheck、Parasoft C/C++test 等。对于不能提供源码的系统或软件,比如:执行文件、三方库等,可以采用基于目标码的二进制分析工具实现静态分析。二进制分析工具采用二进制逆向分析技术实现文件扫描和分析,再人工对扫描结果判断、筛选,最终确认问题。基于目标码的分析方法一般涉及程序编译器、计算机硬件指令系统、可执行文件格式等方面的分析技术,实现难度较大。目前较为成功的商业化二进制分析工具有CodeSonar、SwiftBinary、Cybellum等,开源的分析工具,包括angr、BAP、cew_checker、BinAbslnspector等,它们在实际项目中代码质量保障上发挥了重要的作用。
2.2.2 动态分析方法
动态分析方法作为静态分析方法的补充,在嵌入式通信设备的漏洞挖掘中有重要作用。动态分析方法分为白盒分析和黑盒分析两类。白盒分析方法主要是对动态运行的程序代码流进行分析[2],通过设置断点动态跟踪目标程序代码流,以检测有缺陷的函数调用及其参数,主流的代码分析工具都支持代码流的分析。黑盒分析方法分为数据流分析和格式分析两种。数据流分析对业务或管理数据流进行分析,并尝试构造输入非常规的数据来触发漏洞。格式分析可用于协议漏洞分析,通过解析协议数据包,对涉及字符串数据的操作进行分析。对动态Web 页面、文件格式和通信协议等的动态分析通常采用模糊测试工具实现。
实际嵌入式设备的漏洞挖掘过程中,静态分析、动态分析和人工分析方法的综合使用已经成为未来的主要方向。
嵌入式设备除了软件代码存在脆弱性,操作系统的安全策略缺失或不足也是导致设备容易受到恶意攻击的原因之一,因此对操作系统的安全策略配置进行检查是嵌入式设备安全性测试的重要内容。
操作系统的安全策略配置检查主要从访问控制、文件系统安全、运行安全三方面进行。
2.3.1 访问控制安全
对系统的关键或敏感文件访问权限进行设置,禁止非授权访问。对系统重要文件访问制定安全策略,实施严格的强制访问控制。
2.3.2 文件系统安全
(1)重要文件加固:通过chattr 命令对系统重要文件或目录进行锁定[1];(2)临时目录安全:临时目录中所有用户均有读写权限,需要禁止在/tmp、/var/tmp、/dev/shm 等临时目录下执行应用程序[1]。
2.3.3 安全运行策略
(1)用户登录:删除多余的用户和用户组[3],限制冗余的用户登录权限;对用户登录次数进行限制;使用普通用户登录,禁止Root 登录;远程登录使用密钥,禁止密码登录;(2)系统服务:关闭不需要的系统服务;(3)系统开机启动过程:不允许通过输入按键中断启动过程;(4)密码策略:系统口令的过期时间进行限制,对口令复杂度进行设置,对新口令的历史重用度进行限制;(5)帐户策略:对账户历史命令保存条数、账户使用超时时间进行限制;(6)账户切换:只允许指定用户组使用su 命令切换到Root 用户;(7)登录界面隐藏系统版本信息;(8)开启防火墙;(9)最小权限原则:系统只赋予每个管理员完成任务所需的最小权限,且职责分离;(10)行为监控审计:启用必要的日志记录。
结合上述安全性测试技术和方法,对某嵌入式通信设备进行了应用实践,测试环境如图2 所示。
图2 安全性测试拓扑图Fig.2 Scurity test toplogy diagram
被测嵌入式通信设备、陪测设备和测试平台通过交换机相连,测试终端1 控制测试平台执行测试,监控终端对被测通信设备的状态进行监控,测试终端2 直连被测设备,对设备进行系统安全配置测试。
测试终端1 控制测试平台执行以下安全性测试:(1)主机和Web 漏洞扫描:扫描设备开放的端口和应用服务,发现操作系统、Web 及其他应用服务的已知漏洞。针对发现的已知漏洞,使用测试终端2 进行漏洞复现及验证,去除扫描工具误报的漏洞。(2)协议模糊测试:利用测试平台构造变异的协议报文发往被测设备,动态监测被测设备的工作状态,通过监测终端记录被测设备的状态信息、异常日志及报警信息,捕获设备异常崩溃的状态信息。(3)网络攻击测试:通过测试平台发送各种Dos 攻击报文、通信业务的重放包,或大量发送精心构造的畸形网络包,检测被测设备的资源占用和对通信业务的影响情况。
此外,通过测试终端2 直连设备,对被测设备进行静态测试。重点是通过串口进行操作系统的安全配置测试,包括安全登录、文件系统检查、安全运行策略等。
通过上述安全性测试,发现该设备存在多个冗余端口和应用服务,操作系统和应用程序还存在严重安全漏洞。通过协议模糊测试,发现设备多处协议处理存在内存溢出问题,可导致系统崩溃;同时,设备通信协议字段检查不严格,Dos 攻击和畸形包均可引起设备资源耗尽,甚至重启。操作系统也存在弱口令登录、安全运行策略未配置等安全隐患。以上测试结果说明综合采用多种安全性测试方法有效。
开展对嵌入式通信设备的安全测试可以评估设备的安全风险,提升设备的安全能力,也能为制定适当、有效的设备安全防护策略提供参考,从而保障嵌入式通信设备的安全运行。本文从嵌入式通信设备的安全脆弱性分析出发,研究了传统安全测试手段的局限性,提出了嵌入式通信设备的安全性测试方法并在设备上进行了测试实践,为提升嵌入式通信设备的安全防护能力提供了技术支撑和设计依据。
引用
[1] 熊婧,黄小昆.安全操作系统渗透测试方案研究[J].电子产品可靠性与环境试验,2013:141-146.
[2] 董丽,赵琪,周键.嵌入式软件安全性分析和测试方法研究[J].信息系统工程,2021(5):70-71.
[3] 李景炜.嵌入式Linux操作系统安全性研究[D].西安:西安电子科技大学,2015.