VxWorks Encryption

1 介绍

VxWorks是由风河(Wind River)提供的一个实时操作系统(RTOS),它支持目标常驻文件系统的创建和使用。VxWorks支持各种类型的文件系统,包括DOS兼容的文件系统还有Wind River自己专有的高度可靠文件系统(HRFS)。

本文描述了如何在VxWorks 7上配置加密的DOS兼容文件系统分区。 

2 前提条件

 以下的指导步骤假设你正在使用:

  • Wind River VxWorks 7, SR0620安装在一个Windows的工作站上
  • 从UEFI BIOS启动的Intel目标机
  • 两个USB闪存盘
  • 目标机上有两个文件系统分区:
    1. /bd0:1 – USB闪存盘1,uEFI引导加载程序和VxWorks内核镜像所在的引导分区
    2. /bd16:1- USB闪存盘2,你打算加密的DOS兼容文件系统分区 

3 相关文档

有关本主题的更多信息,请参考:

  • VxWorks 7安全程序员指南
  • VxWorks 7文件系统和I/O程序员指南 

4 创建并编译安全的VxWorks源码编译(VSB)项目

 打开一个DOS Shell终端,配置编译环境,然后编译项目。

cd                   // your installation directory
wrenv -p vxworks-7
cd              // your workspace
vxprj vsb create encrypt_vsb -bsp itl_generic -smp -force -S
cd encrypt_vsb                  // your VSB directory
vxprj vsb add DISK_ENCRYPTION   // add the disk encryption layer to the VSB
vxprj vsb add IPNET_SSH         // add IPNET encryption
make -j 32                      // build the VSB

 

5 创建并编译基本的VxWorks镜像项目(VIP)

 像下面一样创建一个基本的VxWorks镜像项目(VIP)

cd ..
vxprj create -smp itl_generic encrypt_vip -profile PROFILE_INTEL_GENERIC -vsb encrypt_vsb
cd encrypt_vip
vxprj vip component add INCLUDE_MULTI_STAGE_WARM_REBOOT
vxprj vip bundle add BUNDLE_STANDALONE_SHELL
vxprj parameter set DOSFS_COMPAT_NT TRUE
vxprj vip component add INCLUDE_DOSFS
vxprj vip component add INCLUDE_DOSFS_CACHE
vxprj vip component add INCLUDE_DOSFS_FMT
vxprj vip component add INCLUDE_DISK_UTIL
vxprj vip component add INCLUDE_XBD
vxprj vip component add INCLUDE_DOSFS_MAIN
vxprj vip component add INCLUDE_DOSFS_FAT
vxprj vip component add INCLUDE_DISK_ENCRYPTION
vxprj vip component add INCLUDE_SSH
vxprj vip component add INCLUDE_SEC_VAULT_KEP_OBFUSCATOR
vxprj parameter set meta_SEC_VAULT_KEY_ENCRYPTING_PW "\"harmonicsoftware"\" 
vxprj vip component add INCLUDE_DISK_ENCRYPTION_TOOLS
vxprj parameter set SEC_VAULT_FILE_ROOT "\"/bd0:1"\" 
vxprj vip component add INCLUDE_SEL_AES_256_ECB
vxprj vip component add INCLUDE_SEC_KEY_STORE_CMD
vxprj vip component add INCLUDE_GENRSA_CMD
vxprj vip component add INCLUDE_SEC_SECRET
vxprj vip component add INCLUDE_SEC_SECRET_CMD
vxprj parameter set SSH_RSA_KEYEX_KEY_ID "\"default_rsa"\" 
vxprj parameter set SSH_RSA_KEY_ID "\"default_rsa"\" 
vxprj parameter set SSH_HOST_KEY_RSA "\"1"\" 
vxprj vip component add INCLUDE_DISK_ENCRYPTION_AUTO_MOUNT_1
vxprj parameter set PARTITION_NAME_1 "\"/bd16:1"\" 
vxprj parameter set PARTITION_KEY_ID_1 "\"0"\" 
vxprj build

请确保你将meta_SEC_VAULT_KEY_ENCRYPTING_PW重命名为SEC_VAULT_KEY_ENCRYPTING_PW,并使用你自己的唯一密码。 

6 在目标机上启动VxWorks

6.1 部署uEFI启动加载器和VxWorks内核镜像

有关如何在USB闪存盘上创建和部署uEFI引导加载程序以及VxWorks镜像文件的说明,请参考itl_generic BSP的readme文件,你可以按照下面的路径找到该文件:

\vxworks-7\pkgs_v2\os\board\intel\itl_generic-a.b.c.d\itl_generic_readme.md

在按照说明部署uEFI引导加载程序和VxWorks内核镜像后,你将在USB闪存盘上找到以下文件:

EFI \ BOOT \
            bootapp.sys
            BOOTIA32.EFI
            BOOTX64.EFI

6.2 准备Intel目标机

配置目标机的BIOS以从USB闪存盘引导目标机。
将USB闪存盘连接到Intel目标机。

6.3 启动目标机

给目标机加电,选择USB闪存盘作为启动盘,等目标机启动后,你可以看到VxWorks的logo横幅,然后出现shell提示符。

->

7 找出USB闪存盘在VxWorks 7上的设备名称

 在内核shell上执行devs命令来检查文件系统的设备名称

-> devs
drv refs name
  1 [ 3] /
  2 [ 3] /bd0:1  ==>  /bd0a
  5 [ 3] /bd0a
  2 [ 3] /bd16:1  ==>  /bd16a
  2 [ 3] /bd16:2  ==>  /bd16b
  5 [ 3] /bd16a
  6 [ 3] /bd16b
value = 2 = 0x2

-> cd "/bd0:1"
value = 0 = 0x0
-> ls
EFI
value = 0 = 0x0

在本示例中,引导设备的名字是 /bd0:1 ,你应该不会加密这个启动设备。相反,你将会加密分区 /bd16:1,如果你需要有关如何创建新一个新的文件系统分区的指南,请参阅《VxWorks 7文件系统和I/O程序员指南》。

注意:不建议对VxWorks RAM磁盘进行加密 

8 准备 /BD16:1 DOS文件系统分区

 将/bd16:1格式化成DOS兼容的分区

-> dosFsVolFormat ("/bd16:1", 0, 0)
value = 0 = 0x0

9 准备VxWorks 7的Key Store和Secret Repository

 通过创建并添加一对RSA的私钥/公钥来准备VxWorks的key store和secret repository,然后创建一个secret来加密你的文件系统分区。

-> cd "/bd0:1"
value = 0 = 0x0
-> cmd
[vxWorks *] genrsa -out default_rsa.pem
Generating RSA private key, 2048 bit long modulus (2 primes)
.............
e is 65537 (0x010001)
[vxWorks *] keyStore import default_rsa default_rsa.pem
[vxWorks *] keyStore list
default_rsa
[vxWorks *] secret import 0 MySecret99
[vxWorks *] C

不要使用MySecret99这样简单的密码,相反,要将自己的密码设得复杂一些,混合使用数字和大小写字母。

10 加密 /BD16:1 文件系统分区

 用你刚才创建的密码来加密文件系统。

-> diskEncrypt ("/bd16:1", "0")
value = 0 = 0x0
->

磁盘加密将会花费一些时间,确切的时间取决于你的处理器的速度以及你的文件系统的大小和类型。加密完成后,文件系统将正常运行,但对磁盘以及磁盘介质本身的所有操作都将反映你的加密。

注意:如果/bd16:1 是USB闪存盘,一旦你对其加密了,就无法在其他任何工作站上读取这个盘了。为了让另一个VxWorks工作站能够读取该U盘,你也需要像上面一样在目标上定义相同的密钥

11 解密被加密过的 /BD16:1 文件系统分区

 要在保护文件系统分区上的数据的同时撤消加密,请执行以下操作:

-> diskDecrypt ("/bd16:1", "0")
value = 0 = 0x0
->

磁盘解密也需要一段时间,确切的时间取决于你的处理器的速度以及你的文件系统的大小和类型。解密完成后,文件系统将正常运行,并且将不再被加密。