SDK开发网络安全
本节主要的目的在于从网络安全的角度针对这些网络安全威胁问题提供相应的解决方案。
1 u-boot 使用注意事项
1.1 串口
u-boot 串口功能默认是开启的。在 u-boot 的执行流程中,u-boot 会等待一秒的时间让研发人员可以在执行阶段通过敲击按键的方式中断 u-boot 执行过程以停留在 u-boot阶段进行调试。若过程中没有任何敲击按键的事件发生,一秒后则会继续 u-boot 的开机流程。在正式发布的产品,可以将此配置取消,以达到无法在 u-boot 阶段通过串口调试的目的,具体实现方法如下: 步骤 1. 开启 build/boards/{processor_name}/{board_name}/u-boot/{board_name}_defconfig
修改 CONFIG_BOOTDELAY 的配置值为-2
。
CONFIG_IDENT_STRING="soph"
CONFIG_BOOTDELAY=-2
步骤 2. 重新编译 u-boot
1.2 u-boot 指令
u-boot 下提供许多研发人员进行开发与调试的指令, 例如:md
, mw
, setenv
, saveenv
等。但这些指令在正式产品中并非是必须的。可以选择保留无关乎系统安全的指令,并将其他指令删除。 例如欲删除md
/mw
指令,具体实现方式如下: 开启/u-boot-2021.10/cmd/Makefile
, 因为md
/mw
具体实现代码是在 mem.c
中,所以直接将下面示例中的 obj-$(CONFIG_CMD_MEMORY) += mem.o
注释掉或删除
obj-$(CONFIG_LOGBUFFER) += log.o
obj-$(CONFIG_ID_EEPROM) += mac.o
obj-$(CONFIG_CMD_MD5SUM) += md5sum.o
#obj-$(CONFIG_CMD_MEMORY) += mem.o
obj-$(CONFIG_CMD_IO) += io.o
obj-$(CONFIG_CMD_MFSL) += mfsl.o
或是修改 /u-boot-2021.10/cmd/Kconfig
, 将 default 配置为n
。
config CMD_MEMORY
bool "md, mm, mw, cp, cmp, base, loop, ip_update"
default n
help
Memory commands.
md - memory display
mm - memory modify (auto-incrementing address)
mw - memory write (fill)
cp - memory copy
cmp - memory compare
base - print or set address offset
loop - initialize loop on address range
ip_update - sync ip from mem 0x400038C/900 to uboot env
其他命令删除方法与上面的操作类似。
2 Linux 使用网络安全注意事项
2.1 root 帐户
在实际产品中,需要对 root 用户做安全性修改,用户可决定更改默认密码或是禁止 root 通过shell 登录。具体方法如下:
- 修改密码 步骤 1. 执行 shell 指令
passwd
更改密码。 步骤 2. 将/etc/shadow
拷贝出来(可通过挂载 SD 卡或是网络) 步骤 3. 将shadow
文件拷贝至/ramdisk/rootfs/overlay/{processor_name}/etc
下。 步骤 4. 重新编译rootfs文件系统 (指令:pack_rootfs
),并将rootfs.spinor
重新烧入进平台。 - 禁止 root 通过 shell 登录 步骤 1. 修改 SDK 包里的
/ramdisk/rootfs/overlay/{processor_name}/etc/passwd
,将内容root:x:0:0:root:/root:/bin/sh
修改成:root:x:0:0:root:/root:/bin/false
步骤 2. 重新编译rootfs文件系统 (指令:pack_rootfs
),并將rootfs.sd
重新烧入进平台。
2.2 文件权限
SG200x SDK 默认使用 SquashFS 文件系统,用户无法对预载的文件系统进行写或删除的动作,藉此来保护系统的稳定性。
3 Linux 驱动使用网络安全注意事项
3.1 串口
研发人员在 linux 中可通过串口来做调试,若要避免串口被非法接入的风险,确定串口在产品中不再使用,则在出厂时可以关闭串口。具体实现方法如下: 步骤 1. 开启 build/boards/{processor_name}/{board_name}/dts_{arch}/{processor_name}/ {processor_name}.dtsi
, 修改如下示例的代码,
uart0: serial@04140000 {
compatible = "snps,dw-apb-uart";
reg = <0x0 0x04140000 0x0 0x1000>;
clock-frequency = <25000000>;
reg-shift = <2>;
reg-io-width = <4>;
- status = "okay";
+ status = "disabled";
};
步骤 2. 重新编译 linux
4 应用开发安全注意事项
4.1 Cipher 驱动
CIPHER是SG智能数字媒体处理平台提供的安全算法模块,提供对称式加解密算法包括AES/DES/SM4, 不对称加解密算法 RSA 随机数生成, 以及摘要算法包括 HASH, HMAC, 客户可用于对音视频码流进行加解密保护, 认证用户合法性等场景。 具体请参考《CVITEK CIPHER API 参考》。
5 其他安全注意事项
5.1 裸片烧写
CVITEK SDK 包提供 SD,USB 裸片烧写功能,建议在实际产品中将裸片烧写功能关闭。SD,USB 裸烧功能可以通过硬件上的设计进行关闭。
5.2 SD 卡/U 盘挂载权限
若开发的产品具备 SD card 或是 U 盘等可插拔储存设备接口时,建议挂载储存设备文件系统前加上”-o noexec”参数,以避免恶意第三方程序的运行进而造成系统的损坏。
5.3 JTAG
建议在实际产品上移除 JTAG 接口,以避免恶意窜改系统配置而造成系统损坏。
6 Alios 开发使用注意事项
参考 Alios 开源文档 AliOS-Things/documentation at master · alibaba/AliOS-Things · GitHub