亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial Internet of Things >> 物联网技术

使用 SGX 保护 DDS:利用 SCONE 与 Micro DDS 构建加密应用

使用 SGX 保护 DDS:利用 SCONE 与 Micro DDS 构建加密应用

这是该主题六篇博客系列的第 2 部分。如果您错过了第 1 部分概述,请阅读 here。

为何 SGX 需要重新架构

Intel® 推出软件防护扩展(SGX),承诺在受保护飞地中隔离敏感代码和数据。原始 SDK 指导鼓励开发者从头重新设计应用,或重构现有代码,使秘密及其管理逻辑驻留在单独分区。这种方法将可信计算基(TCB)保持在最小,直接解决威胁现代分布式系统的许多攻击向量。

重构现有应用的成本

重构成熟代码库劳动密集。Intel 与美国空军学院联合研究中,一个开源 PDF 查看器被改造以支持细粒度访问控制和数字编辑;一个开源视频会议应用被修改以在媒体流到达显示器前加密。两个项目均耗时约两人年。

替代路径:SGX 保护容器

由于重构昂贵且源码常不可用,多个项目涌现以简化 SGX 集成。著名例子包括 Graphene 和 SCONE,它们提供 SGX 保护容器和交叉编译器,可工作于现有二进制文件。本文聚焦 SCONE,它仅需微调构建脚本或轻量库调整即可构建 RTI Connext DDS Micro 及其安全插件。

SCONE 还生成静态链接可执行文件,可在装有 SGX 驱动和兼容 CPU 的原版 Ubuntu 16.04 上运行。相比之下,Graphene 需添加新系统调用(getifaddrs)或修改 DDS 避免它,以及修改 nanosleep 等其他 DDS 调用。此外,Graphene 应用必须在 Docker 容器中运行。因此我们从 SCONE 入手。

准备构建环境

SCONE 交叉编译器捆绑基于 musl 的工具链,静态链接所有依赖。编译 RTI DDS Micro 和 OpenSSL 需以下资源:

宿主机需支持 SGX 并运行 Ubuntu 16.04 LTS。若有 SGX 能力 CPU,从 GitHub 安装驱动。假设熟悉 Docker 和 Linux。

将两个源码包放在主目录并解包,创建以下目录:

openssl-1.0.2r
rti_connext_dds_micro-3.0.0

后续命令均相对于这些路径。

启动 SCONE 交叉编译器

cd ~ docker run -it --device=/dev/isgx -v "$PWD":/home sconecuratedimages/crosscompilers:ubuntu 

若无 SGX 设备,省略 --device=/dev/isgx。容器内添加便捷工具:

apt update apt install -y make default-jre cmake nano less apt install -y perl --reinstall 

构建 OpenSSL

重装 Perl 模块解决 OpenSSL 配置脚本的缺失依赖。运行:

cd /home/openssl-1.0.2r ./config make make test make install export OPENSSLHOME=/usr/local/ssl ln -s /usr/local/ssl/lib/libcrypto.a /usr/local/ssl/lib/libcryptoz.a ln -s /usr/local/ssl/lib/libssl.a /usr/local/ssl/lib/libsslz.a 

符号链接适配后续 Makefile;这是可靠的务实方案。

编译 RTI DDS Micro 3.0

cp /opt/scone/cross-compiler/x86_64-linux-musl/lib/libpthread.a /opt/scone/cross-compiler/x86_64-linux-musl/lib/libnsl.a PATH=$PATH:/opt/scone/cross-compiler/libexec/gcc/x86_64-linux-musl/7.3.0/ export RTIMEHOME=/home/rti_connext_dds_micro-3.0.0 export RTIMEARCH=sgxLinux_x64gcc cd /home/rti_connext_dds_micro-3.0.0/ ./resource/scripts/rtime-make -DRTI_NO_SHARED_LIB:bool=true -DOPENSSLHOME=/usr/local/ssl --delete --target self --name $RTIMEARCH -G "Unix Makefiles" --build --config Release 

完成后,您将获得链接到 musl 而非 glibc 的 OpenSSL 和 RTI DDS Micro 库。

构建示例应用

cd /home/rti_connext_dds_micro-3.0.0/example/unix/C/HelloWorld_dpde_secure rm -rf objs make 

发布者和订阅者可执行文件出现在 /home/rti_connext_dds_micro-3.0.0/example/unix/C/HelloWorld_dpde_secure/objs/sgxLinux_x64gcc/。运行发布者查看运行时环境变量和飞地哈希:

SCONE_VERSION=1 SCONE_HEAP=87108864 ./objs/sgxLinux_x64gcc/HelloWorld_publisher 

典型输出包含 SGX 配置设置和唯一飞地哈希。关于线程优先级检查的轻微“错误”信息是良性的;源于 musl 缺乏对某些 glibc 特性的支持,可通过编辑 posixThread.c 静默。

在 Docker 容器外运行

因可执行文件静态链接,可在任何装有 SGX 驱动的 Ubuntu 16.04 系统上运行。首先创建 SCONE 配置文件:

tee ~/sgx-musl.conf << EOF Q 4 e -1 0 0 s -1 0 0 e -1 1 0 s -1 1 0 e -1 2 0 s -1 2 0 e -1 3 0 s -1 3 0 EOF 

然后启动发布者和订阅者:

cd ~/rti_connext_dds_micro-3.0.0/example/unix/C/HelloWorld_dpde_secure SCONE_CONFIG=~/sgx-musl.conf SCONE_VERSION=1 SCONE_HEAP=87108864 ./objs/sgxLinux_x64gcc/HelloWorld_publisher SCONE_CONFIG=~/sgx-musl.conf SCONE_VERSION=1 SCONE_HEAP=87108864 ./objs/sgxLinux_x64gcc/HelloWorld_subscriber 

成功通信确认应用即使在原始 Docker 环境外也运行在 SGX 飞地内。

我们实现了什么

我们演示了将标准 RTI Connext DDS Micro 应用转变为自包含、SGX 保护二进制文件的完整工作流,使用 SCONE。虽然这个“Hello World”示例未涵盖持久存储、远程认证或高级安全策略,但为在 SGX 环境中构建强化 DDS 服务奠定了坚实基础。

敬请期待第 3 部分,我们将探索如何为生产部署强化 DDS 服务。


物联网技术

  1. 使用 Intel SGX 保护 DDS:第 3 部分 – 强化 DDS 服务
  2. 利用 Intel SGX 保障工业物联网安全:DDS 安全概述
  3. 拨开迷雾:在工业物联网革命中导航标准乱局
  4. 保障工业物联网安全:实用路线图
  5. 为何工业物联网成网络攻击靶心——及如何防御
  6. 保障 IoT 安全:保护网络免受网络攻击
  7. 保护您的物联网生态系统:专家策略应对勒索软件与网络威胁
  8. 边缘超融合:VMware与Eurotech驱动高效工业IoT
  9. 保障IoT全景:关键威胁与战略解决方案——第2部分
  10. IoT安全:解析连接设备独特威胁全景(第1部分)
  11. 工业物联网安全:下一代蓝图——下篇
  12. 安全释放物联网全部潜能