登录密码

  1. U-Boot登录密码 & Shell登录密码,必须够复杂,复杂程度可参考:https://suijimimashengcheng.bmcx.com/,比如:xDvd&QaU@Dqhv0%1
  2. 可参考HIK芝麻开门功能,通过定制化的/bin/psh实现一机一密,只能通过官方途径提供的密钥来打开Debug功能,提升易用性。

U-Boot重要参数备份

比如bootcmd参数,防止通过修改init=/bin/sh的方式绕过密码登录。

bootcmd参数在制作设备固件时就可以确定下来了,并且同一款设备的bootcmd参数一般也不会改变,可将其作为设备的出厂配置写到配置文件中,系统启动后将当前的bootcmd和配置文件中的bootcmd作对比,如果不一致,就改回去并立刻重启,可有效解决bootcmd参数被篡改的问题。

Flash写保护

默认开启写保护功能,只在需要写入时临时解开写保护。

Flash分区校验

记录每个只读分区的校验,避免通过解压文件系统再重新打包烧录的方式破解固件。

对于单独存储校验的分区,可再进行加密保存,确保校验信息不被破解。

这一步是在U-Boot里做的,实现起来其实不难。

Flash分区加密

Flash存储的是加密分区,U-Boot/内核运行后先解密分区再加载运行,可有效防止固件被读取和解压,缺点是技术难度较高,需要修改内核代码,并且影响启动速度。

Linux系统可能已经提供了通用的解决方案,待确认。

bin文件反破解

主程序bin文件本身并没有多少反破解手段,毕竟用IDA Pro之类的工具可以直接阅读反汇编后的汇编代码执行流程,能做的就是加大反汇编后阅读的难度而已,比如strip符号表,或者使用更高级的编译优化选项。

千万不要笨到在发布程序里还带调试信息,这样别人用IDA Pro反编译一下,跟直接看源码没啥区别,比如:openhisilicon/HIVIEW

串口打印及远程登录

  1. 默认禁用串口打印和Telnet登录,只能通过特殊方式开启。
  2. 即使打开串口打印和Telnet,也不要在日志或文件系统里暴露关键信息,比如可以对日志再进行等级设置,对关键文件进行加密。
  3. 可参考HIK芝麻开门功能,不关闭串口/Telnet,但一机一密,只能通过官方途径提供的密钥来打开Debug功能,提升易用性。
  4. 如有必要可将Telnet替换为SSH登录,进一步提升安全性。

设备加密

Flash设备加密信息处理:

  1. 保证加密够专业够复杂,不被破解。
  2. 一机一密,避免抄板和克隆设备。
  3. 对于没有加密信息的设备,统一认为是非法设备, 可以采取多种手段,比如不允许启动,或是启动后仅提供一个最低的设备能力(分辨率码率帧设到最低等),以及对于没有加密的设备,全部使用默认的MAC地址,这样也可以保证即使通过抄板的方式克隆了设备,也无法大批量生产。
  4. 也可采用外部加密芯片来存储设备加密信息,比如AT24C02。

端口监听

小心处理设备对外暴露的UDP/TCP端口,包括但不限于以下内容:

  1. 对于任何可扫描到的UDP/TCP端口,要禁得起非法数据攻击,不能出现通过发送非法数据把设备搞挂或是严重降低性能的情况。
  2. 仅对外开放必要的端口,比如HTTP, RTSP之类的知名端口,对于设备内部用于进程间通信的端口,必须绑定到127.0.0.1上,或是使用Unix本地套接字进行通信。这是很简单的一个步骤,但却能降低非常多的风险,因为这些进行间通信的接口往往都不会设计得很严谨,很容易暴露问题。
  3. 可借助知名的端口扫描&漏洞测试工具进行压测。
  4. 可借助iptables工具实现黑名单与白名单功能,比如屏蔽某些IP或只允许某些IP可以访问。

用户配置文件备份及加密

对于存储在设备上的用户配置文件,必须进行加密,以避免泄漏用户密码这种问题,同时应进行备份,避免断上电等异常行为导致主文件损坏后丢失用户配置。

某些产测相关的文件也可以遵从以上方法。

双系统备份

目的是防止升级过程异常中断导致设备变砖,可采取A/B分区乒乓升级的方式,或是大小系统的方式,小系统专门用于升级失败后从网络下载固件对主系统进行恢复。

























  • 无标签