3. CVITEK SDK二次开发网络安全注意事项

3.1. u-boot使用注意事项

3.1.1. 串口

CVITEK SDK中的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 (依据各产品的命名可能会有不同的文件名称,此示例中为cvitek_cv1801c_wevb_0009a_spinor_defconfig)。修改CONFIG_BOOTDELAY的配置值为”-2”。

CONFIG_IDENT_STRING="cvitek_cv180x"
CONFIG_DISTRO_DEFAULTS=y
CONFIG_BOOTDELAY=-2
# CONFIG_DISPLAY_CPUINFO is not set

步骤2. 重新编译u-boot

3.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

其他命令删除方法与上面的操作类似。

3.2. Linux使用网络安全注意事项

3.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.spinor重新烧入进平台。

3.2.2. 文件权限

CVITEK SDK 默认使用SquashFS文件系统, 用户无法对预载的文件系统进行写或删除的动作,藉此来保护系统的稳定性。

3.3. Linux 驱动使用网络安全注意事项

3.3.1. 串口

研发人员在linux中可通过串口来做调试,若要避免串口被非法接入的风险,确定串口在产品中不再使用,则在出厂时可以关闭串口。具体实现方法如下:

步骤1. 开启build/boards/{processor_name}/{board_name}/dts /{processor_name}/ {processor_name}_base.dtsi (依据各产品的命名可能会有不同的文件名称,此示例中为cv180x), 修改如下示例的代码,

  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

3.4. 应用开发安全注意事项

3.4.1. Cipher驱动

CIPHER 是晶视智能数字媒体处理平台提供的安全算法模块,提供对称式加解密算法包括 AES/DES/SM4, 不对称加解密算法RSA 随机数生成, 以及摘要算法包括HASH, HMAC, 客户可用于对音视频码流进行加解密保护, 认证用户合法性等场景。 详情请参考《CVITEK CIPHER API 参考》。

3.5. 其他安全注意事项

3.5.1. 裸片烧写

CVITEK SDK包提供SD,USB裸片烧写功能,建议在实际产品中将裸片烧写功能关闭。SD,USB裸烧功能可以通过硬件上的设计进行关闭。

3.5.2. SD 卡/U盘挂载权限

若开发的产品具备SD card或是U盘等可插拔储存设备接口时,建议挂载储存设备文件系统前加上”-o noexec”参数,以避免恶意第三方程序的运行进而造成系统的损坏。

3.5.3. JTAG

建议在实际产品上移除JTAG接口,以避免恶意窜改系统配置而造成系统损坏。

3.6. Alios 开发使用注意事项

参考Alios开源文档 https://github.com/alibaba/AliOS-Things/tree/master/documentation