
3.2 硬件安全技术
硬件安全的重点其实就是硬件(硬件接口和芯片管脚)的分析和调试,与软件的接口(Application Program Interface,API)一样,硬件也有很多种接口,不同接口使用不同的通信协议,由于硬件产品经常是多种硬件协同工作,它们之间的信息交互正是通过这些硬件接口实现的。同样,通过嗅探这些接口,我们就可以获取这些交互数据,对应等保2.0扩展要求验证交互数据,从而达到硬件安全的目的。
硬件的第一步是获取设备元器件的电路图。取下设备的外壳后,对应等保2.0扩展要求,验证相关物理安全要求,之后去除集成电路芯片上的物理保护涂层,就可以进行集成电路芯片的识别了,基本所有IC芯片都可以通过搜索引擎找到配套的数据手册,而数据手册中就包含了零件包装、电器特性、管脚图等重要信息。硬件的第二步是硬件调试,而硬件调试又分为总线调试和接口调试。
3.2.1 总线调试技术
对于总线调试来说,与网络数据传输不同,硬件间总线传输的数据往往没有进行保护,因此较为容易被执行数据拦截、重放等操作来进行调试。要对硬件设备总线进行调试,需要将探针连接到不同芯片的管脚上,然后调整逻辑分析仪的频率,随后通过逻辑分析仪记录下总线传输的0、1信号并进行数据解码。通过观察解码后的数据,我们可以对等保2.0扩展要求中数据源认证、感知设备访问控制以及设备安全等相关安全要求进行验证。
3.2.2 接口调试技术
获取总线上的数据有时非常容易,但有时候又会无比困难,而这时我们就可以使用接口调试来对C-IoT终端进行硬件安全测试。通常来说,C-IoT终端为了出场的测试或者后期的维护,都会设有调试接口,如通用异步收发传输器(Universal Asynchronous Receiver/Transmitter,UART)、联合测试工作组接口(Joint Test Action Group,JTAG)、串行外设接口(Serial Peripheral Interface,SPI)等。和总线一样,嗅探这些接口同样可以获得硬件交互数据。
UART,即通常所说的TTL电平的串口,是笔者接触到的C-IoT终端中,最为广泛的调试接口,通常用于与嵌入式系统调试通信,如图3所示。这种接口通常会对应一个虚拟控制台(TeleTYpe,TTY)设备,一旦登陆成功便很可能会获得管理员权限(root shell),这时对应等保2.0的安全需求,我们可以直接通过命令行或者检测脚本进行密码规则(包含密码有效期、密码格式、密码长度等)、账户权限分配、终端状态(内存、端口、处理器占用情况等)等安全要求的合规性验证。

3.3 固件安全技术
多数C-IoT终端需要一些定制化的固件才能正常工作,通过研究这些固件可以获得大量的设备信息,包括默认口令、管理端口或者调试接口等。在等保2.0中,很大一部分的入侵防范安全要求、身份鉴别安全要求以及资源控制安全要求是可以通过固件安全进行验证的,所以固件安全是C-IoT终端安全的重要一环。
3.3.1 固件提取
想要进行固件安全分析,第一步要进行固件的提取,一般来说固件提取的方式分为两类。
第一类,编程器读取法。通过飞线将固件芯片管脚接出,如图4所示,连接好固件芯片的管脚,通过夹具连接芯片到编程器,再通过专用编程器软件,对该芯片进行读取。除飞线外,也可以将固件芯片拆除后直接放到编程器读取。

第二类,命令行导出。如果终端使用的是嵌入式Linux,那么通常存储的固件会被挂载到/dev/mtd。此时我们便可以通过命令行导出mtd0的内容,从而实现终端固件的导出。
3.3.2 固件
固件安全目标包括固件漏洞验证、账户安全、系统配置安全、系统升级安全等,通过对C-IoT终端固件的信息检测、第三方组件检测,发现与等保2.0相关要求不符合的内容,其主要的方式是通过静态和动态两种方式进行。
静态手段包括但不限于代码分析、代码审查、质量度量等。静态分析不必运行被测系统代码,而是借助专用的软件工具对源程序进行分析,主要分析固件文件的接口数据部分和表达式部分。接口数据分析涉及子程序以及函数之间的接口一致性,包括检查参与实参类型、个数、维数、顺序的一致性;而表达式分析则是找出其可能存在不正确使用括号造成的错误、数组下标越界造成的错误、除数为零造成的错误、对负数开平方的错误,其中最复杂的一类表达式分析是对浮点数计算的误差进行检查。