U-Boot重要参数备份
比如bootcmd参数,防止通过修改init=/bin/sh的方式绕过密码登录。
Flash分区校验
记录每个只读分区的校验,避免通过解压文件系统再重新打包烧录的方式破解固件。
对于单独存储校验的分区,可再进行加密保存,确保校验信息不被破解。
这一步是在U-Boot里做的,实现起来其实不难。
Flash分区加密
Flash存储的是加密分区,U-Boot/内核运行后先解密分区再加载运行,可有效防止固件被读取和解压,缺点是技术难度较高,需要修改内核代码,并且影响启动速度。
Linux系统可能已经提供了通用的解决方案,待确认。
bin文件反破解
串口打印及Telnet登录
- 默认禁用串口打印和Telnet登录,只能通过特殊方式开启。
- 即使打开串口打印和Telnet,也不要在日志或文件系统里暴露关键信息,比如可以对日志再进行等级设置,对关键文件进行加密。
- 可参考HIK芝麻开门功能,实现不关闭串口/Telnet,但一机一密,只能通过官方提供的密钥来打开Debug功能,提升易用性。
设备加密
Flash设备加密信息处理:
- 保证加密够专业够复杂,不被破解。
- 一机一密,避免抄板和克隆设备。
- 对于没有加密信息的设备,统一认为是非法设备, 可以采取多种手段,比如不允许启动,或是启动后仅提供一个最低的设备能力(分辨率码率帧设到最低等),以及对于没有加密的设备,全部使用默认的MAC地址,这样也可以保证即使通过抄板的方式克隆了设备,也无法大批量生产。
- 也可采用外部加密芯片来存储设备加密信息,比如AT24C02。
端口监听
小心处理设备对外暴露的UDP/TCP端口,包括但不限于以下内容:
- 对于任何可扫描到的UDP/TCP端口,要禁得起非法数据攻击,不能出现通过发送非法数据把设备搞挂或是严重降低性能的情况。
- 仅对外开放必要的端口,比如HTTP, RTSP之类的知名端口,对于设备内部用于进程间通信的端口,必须绑定到127.0.0.1上,或是使用Unix本地套接字进行通信。这很简单的一个步骤,但能降低非常多的风险,因为这些进行间通信的接口往往都不会设计得很严谨,很容易暴露问题。
- 可借助知名的端口扫描&漏洞测试工具进行压测。
用户配置文件备份及加密
对于存储在设备上的用户配置文件,必须进行加密,以避免泄漏用户密码这种问题,同时应进行备份,避免主文件损坏后丢失用户配置。
某些产测相关的文件也可以遵从以上方法。
双系统备份
目的是防止升级过程异常中断导致设备变砖,可采取A/B分区镜像备份升级的方式,或是大小系统的方式,小系统专门用于升级失败后从网络下载固件对主系统进行恢复。