ToB企服应用市场:ToB评测及商务社交产业平台

标题: 【SGX系列教程】(一)Intel-SGX SDK在ubuntu22.04下安装全流程 [打印本页]

作者: 篮之新喜    时间: 2024-6-18 16:50
标题: 【SGX系列教程】(一)Intel-SGX SDK在ubuntu22.04下安装全流程
一.概述

  Intel Software Guard Extensions (Intel SGX) 是一项由英特尔提供的技术,旨在保护应用程序开发人员选择的代码和数据免受泄漏或修改。
1.1 SGX三大组件

  Linux Intel SGX 软件栈由 IntelSGX 驱动程序Intel SGX SDK Intel SGX 平台软件 (PSW) 组成。
  这些软件组件共同构成了Intel SGX技术的开发和运行环境。SDK提供了开发SGX应用程序所需的工具和资源,PSW为应用程序提供了在Linux操作系统上运行的基础办法,而DCAP为数据中央内的SGX应用程序提供了验证和信任建立的支持。这些组件协同工作,使开发人员能够利用Intel SGX的安全功能来保护和保障应用程序的安全性。
1.2 SGXDataCenterAttestationPrimitives

  SGXDataCenterAttestationPrimitives驱动程序专门针对支持Flexible Launch Control (FLC)和Intel AES New Instructions (AES-NI)的平台。FLC是一种安全特性,有助于保护SGX enclave启动过程的完整性,而AES-NI为加密操作提供了硬件加速
  该驱动程序为数据中央环境中的Intel SGX enclave提供了证实本领。它支持两种类型的证实:
  SGXDataCenterAttestationPrimitives项目提供了在Linux SGX软件栈中支持这些证实机制所需的组件和功能。它使在支持SGX的平台上运行的应用程序能够建立信任,并与远程系统或服务举行安全交互。
二.安装流程

   尽管官方文档给了较为详细的安装教程,但是由于官方文档是英文的,并且有太多琐碎的细节,对于新手小白并不友爱。因此将本人亲身安装利用的全流程举行总结,并将持续举行源码分析,与大家共享;下面将按照以下顺序详细介绍Intel SGX SDK的安装、测试、利用的全流程,助力每一个小白能够轻松上手Intel SGX的利用开发,本文以ubuntu22.04系统为例。
2.1 检查服务器是否支持SGX

   由于SGX的利用必要Intel CPU的硬件支持,因此在安装SDK和测试利用之前,必要先检测当前CPU是否支持SGX功能,若支持则必要先开启CPU的SGX。
方法1:利用cpuid命令查看是否支持SGX:
   cpuid --one-cpu | grep -i sgx
  


方法2:利用代码test-sgx.c测试是否支持SGX:

   git clone https://github.com/ethernity-cloud/mvp-pox-node.git
  
   cd mvp-pox-node
  
   ./utils/linux/test-sgx
  如果输出下面类似的结果表示已经开启成功:

如果sgx 1 supported不为1,至少MaxEnclaveSize_64是大于0的。
2.2 sgx硬件/软件开启方法

首先检查BIOS是以UEFI模式启动的,不能以legacy模式启动,因为:

方法1:BIOS 启动SGX:
不同的BIOS操作不同,示例如下:


方法2:软启动 SGX:
   如果SGX在BIOS中提示“软件控制”,则可以利用下面的软起动方法启动SGX。具体说明可以参考:无法在 BIOS 或通过软件应用程序启用英特尔® Software Guard Extensions(英特尔® SGX)
   这里通过一段C程序软启动系统SGX,非常简朴!

   gcc sgx_enable.c -o sgx_enable
./sgx_enable
  
2.3 sgx dirver驱动安装;

2.3.1 linux-sgx-driver驱动程序

  linux-sgx-driver项目是Linux Intel SGX软件栈的另一个外部驱动程序,用于支持没有Flexible Launch Control (FLC)的平台上的增强隐私识别(EPID)基于证实,直到驱动程序上游过程完成为止。
  这个驱动程序可以用于支持早期的 SGX-capable 的CPU,这些CPU没有Flexible Launch Control (FLC)功能。然而,请注意该驱动程序的ABI与上游的SGX内核补丁不同。因此,将利用该驱动程序的软件迁移到将来支持SGX的内核大概必要额外的工作量。
  对于那些不支持FLC的平台,linux-sgx-driver项目提供了所需的驱动程序功能,以支持EPID基于证实的功能。EPID是一种隐私保护的证实方案,允许远程方验证SGX enclave的完整性,同时不泄漏被验证平台的身份。
  这个驱动程序允许在不支持FLC的平台上举行SGX enclave的EPID证实。它提供了必要的组件和功能,使这些平台上的应用程序能够与远程系统或服务建立安全信任,并举行受保护的通信。
  与SGXDataCenterAttestationPrimitives项目类似,linux-sgx-driver项目也是一个临时解决方案,直到驱动程序被归并到官方Linux内核中。这些驱动程序为利用Intel SGX技术的应用程序提供了在非FLC平台上举行EPID证实的本领。
2.3.2 Intel SGX Support in the Linux Kernel(linux内核支持SGX)

  自从 Linux 内核版本 5.11 发布以来,主线 Linux 内核已经内置了 Intel SGX 支持。内核内置的 Intel SGX 驱动程序必要平台支持并配置为灵活启动控制(flexible launch control - FLC)。因此推荐尽大概利用带有 Intel SGX 支持的主线linux内核。
  对于特别用例,另有两个其他的内核空间选项可供选择:
  注意:尽管Intel SGX SDK宁静台软件与所有这些驱动程序兼容,但传统的非FLC驱动程序和Intel SGX DCAP驱动程序仅针对关键的安全修复举行更新。由于 out-of-tree 实现的限定,主线内核中实现的新特性或功能无法移植到传统的非FLC驱动程序或Intel SGX DCAP驱动程序。
2.3.3 Platform Uses Legacy Launch

  传统启动(Legacy Launch)是指在平台配置中,必要由Intel签名的启动信封提供一个启动令牌。平台(可以是假造机或裸机平台)是否必要传统启动取决于两个因素

2.3.4 Launch Control

  为了配置运行Intel SGX Enclaves的平台,了解Launch Control是非常紧张的,它是控制和限定Intel SGX enclaves启动的方法。Launch Control为应用程序提供令牌,允许它们启动enclaves。Launch Control有两种特性配置方式:
  必要注意的是,Legacy Launch Control限定了哪些enclave可以在release模式下运行,但是它允许enclave在SGX debug模式下运行,而不管enclave所有者的MRSIGNER是否已添加到Launch Policy中。SGX debug模式允许开发和调试测试签名的debug enclaves。有关SGX debug模式enclave的更多信息,请参阅Intel® 64和IA-32 Architectures Software Developer Manuals。
2.3.5 三种驱动安装方式(根本都支持第一种:linux内核支持,直接跳过驱动安装部门,可不用看了)

  当利用Intel® SGX时,有三种不同的驱动程序可供选择:
key tips:

key tips:

  DCAP驱动是推荐在Linux内核版本4.15到5.6之间(包罗这两个版本)以及支持并配置了Flexible Launch Control的平台上利用的驱动程序。在利用SGX In-Kernel驱动程序的5.11或更高版本内核上安装DCAP驱动程序时,会出现构建错误消息:“无法安装带有内核内SGX支持的DCAP SGX驱动程序”。这个错误消息表示在启用了SGX In-Kernel驱动程序的情况下,无法安装DCAP驱动程序。因此,在利用5.11或更高版本的内核时,您应该选择利用SGX In-Kernel驱动程序而不是DCAP驱动程序。
  如果您的内核版本是5.11或更高版本,并且已启用了SGX In-Kernel驱动程序,那么您不必要安装DCAP驱动程序。您可以继续利用内核自带的SGX支持。请注意,在利用SGX In-Kernel驱动程序的情况下,建议利用的内核版本是5.11或更高版本,并且在支持Flexible Launch Control的平台上举行配置。如果您的平台不支持Flexible Launch Control或未举行配置,则大概无法正常利用SGX功能。
key tips:

  对于不支持或未配置Flexible Launch Control的平台,建议利用Out-of-Tree驱动程序。不建议在启用了FLC的平台上安装传统的Out-of-Tree驱动程序。如果在运行Kernel 5.11或更高版本的FLC平台上安装传统的Out-of-Tree驱动程序,安装会成功,但是Intel SGX PSW仅利用内核内驱动程序。
  此处可以下载别人已经已经编译好的驱动程序,具体流程如下:

   wget https://download.01.org/intel-sgx/latest/linux-latest/distro/ubuntu22.04-server/sgx_linux_x64_driver_2.11.54c9c4c.bin
  
   chmod 777 sgx_linux_x64_driver_2.11.54c9c4c.bin
  
   sudo ./sgx_linux_x64_driver_2.11.54c9c4c.bin
  总结:必要根据平台的本领和配置选择适合的驱动程序。内核驱动程序是推荐且功能最丰富的选项,DCAP驱动程序可用于没有在内核中集成Intel® SGX驱动程序的系统。非内核驱动程序适用于仅支持Legacy Launch Control的平台。
2.4 sgx sdk安装

2.4.1 预备阶段


   sudo apt-get install build-essential ocaml ocamlbuild automake autoconf libtool wget python-is-python3 libssl-dev git cmake perl
     注意:要构建 Intel® SGX SDK,gcc 版本必要为 7.3 或更高版本,glibc 版本必要为 2.27 或更高版本。

   sudo apt-get install libssl-dev libcurl4-openssl-dev protobuf-compiler libprotobuf-dev debhelper cmake reprepro unzip pkgconf libboost-dev libboost-system-dev libboost-thread-dev lsb-release libsystemd0
  
   git clone https://github.com/intel/linux-sgx.git 或 git clone https://gitee.com/mirrors/linux-sgx.git(国内镜像)
cd linux-sgx && make preparation
     上面的代码make preparation将触发脚本download_prebuilt.sh下载预构建的二进制文件。您大概必要为wget脚本利用的工具设置 https 代理(如export https_proxy=http://test-proxy:test-port) 此处大概会因为网络缘故原由执行失败,多次实验make preparation后一般会成功。

   sudo cp external/toolset/{current_distr}/* /usr/local/bin
     注意:即使您之前将之前的操作工具复制到/usr/local/bin,上述操作也是必须的。它确保在以后的构建中利用更新的操作工具。将{current_distr}替换为当前的操作系统(如: ubuntu22.04)。再用下面这个语句检查是不是添加成功:
   which ar as ld objcopy objdump ranlib
  
   sudo make sdk
     运行完成后,再输入以下命令(安装工具):
   sudo make sdk_install_pkg
     成功运行的话,在linux-sgx/linux/installer/bin文件夹下会有一个sgx_linux_x64_sdk_${version}.bin文件生成。

2.4.2 sdk安装


   sudo apt-get install build-essential python
  
   cd linux/installer/bin
sudo ./sgx_linux_x64_sdk_${version}.bin
注意:运行第二条命令时,它询问是否安装在当前文件夹的时间,最好选择“no”,然后输入/opt/intel/, 即将SGX SDK安装在/opt/intel/文件夹下。
  
   source ${sgx-sdk-install-path}/environment
本机: source /opt/intel/sgxsdk/environment
  2.4.3 测试sdk是否安装成功(注意模拟模式下不必要SGX PSW包)

   在安装Intel SGX PSW包之前,我们先用模拟模式测试SGX SDK包是否安装正常。在模拟模式下编译并运行每个代码示例,以确保SGX SDK包运行良好:
  1. $ cd ${sgx-sdk-install-path}/SampleCode/LocalAttestation
  2. $ make SGX_MODE=SIM
  3. The project has been built in simulation debug mode.
  4. $ cd bin
  5. $ ./app
复制代码
但是,在执行make SGX_MODE=SIM编译过程中,报如下错误:

可以看出是SDK依靠库没有找到,但是sdk程序已经按照了,发现该库安装后在/opt/intel/sgxsdk/lib64/libsgx_uae_service_sim.so路径下,只是系统并不知道该库路径,因此将该库路径添加到系统配置中,也就是添加到/etc/ld.so.conf配置文件中(可以通过include的方式添加到其他一类文件中)。

添加完成后更新一下库链接:
   ldconfig
  再次编译(make SGX_MODE=SIM)、执行(./app)就没错误了,执行结果如下:

2.5 psw安装

   SGX PSW 提供 3 项服务:启动基于 EPID 的证实算法无关的证实。从 2.8 版本开始,SGX PSW 被分成更小的软件包,用户可以选择安装哪些功能和服务。有两种方法可以安装所需的软件包:利用单个软件包或利用构建系统生成的本地repo。建议利用本地repo(本项目就采用本地repo,仅介绍该种方法),因为系统将自动解决依靠关系。目前,我们支持基于.deb和.rpm的repos。
2.5.1 利用默认配置构建SGX PSW:

   make psw
make psw_install_pkg
  执行之后会在/home/hututu/intel-sgx/linux-sgx/linux/installer/bin路径下生成sgx_linux_x64_psw_2.23.100.2.bin文件,如下图:

2.5.2 在相应文件夹中利用make命令构建每个Architecture Enclave

   cd psw/ae/le
make
  2.5.3 调用安装程序(执行sgx_linux_x64_psw_2.23.100.2.bin)

   cd linux/installer/bin
./sgx_linux_x64_psw_2.23.100.2.bin
  注意:必要执行该sgx_linux_x64_psw_2.23.100.2.bin文件之后,才会安装aesmd 服务:

2.5.4 命令行运行以下命令添加下载Intel sgx psw的下载路径(将以下库添加到源中):

   echo ‘deb [arch=amd64] https://download.01.org/intel-sgx/sgx_repo/ubuntu jammy main’ | sudo tee /etc/apt/sources.list.d/intel-sgx.list
  注意,ubuntu18中是bionic,20是focal,22是jammy,可以对应修改。
2.5.5 进入如下网址下载密钥intel-sgx-deb.key(获取 Debian 存储库公钥并将其添加到 apt 用于验证软件包的受信任密钥列表中):

https://download.01.org/intel-sgx/sgx_repo/ubuntu/
2.5.6 进入下载目录,通过如下命令添加进仓库:

   sudo apt-key add intel-sgx-deb.key
  运行后等一会儿看到【ok】就是运行成功。

2.5.7 更新一下apt-get的列表:

   sudo apt-get update
  如果系统报错deb无法识别,进入/etc/apt/sources.list.d目录,修改intel-sgx.list文件,去掉deb [arch=amd64] https://download.01.org/intel-sgx/sgx_repo/ubuntu focal main两侧的引号。
2.5.8 分别安装SGX PSW 提供的3个服务:

分别是launch、EPID-based attestation和Algorithm agnostic attestation,输入以下命令:
   启动服务:sudo apt-get install libsgx-launch libsgx-urts -y
基于EPID的认证服务:sudo apt-get install libsgx-epid libsgx-urts -y
与算法无关的证实服务:sudo apt-get install libsgx-quote-ex libsgx-urts -y
基于 DCAP ECDSA 的服务:sudo apt-get install libsgx-dcap-ql -y
  2.5.9 demo测试psw是否安装成功

在硬件模式下编译并运行代码示例:

   source /opt/intel/sgxsdk/environment
  
   cd ${sgx-sdk-install-path}/SampleCode/LocalAttestation
make
cd bin
./app
  执行结果:

三.启动或克制 aesmd 服务

   英特尔® SGX PSW 安装程序会在您的计算机中安装 aesmd 服务,该服务在特别的 Linux 帐户中运行aesmd。
   克制服务:$ sudo service aesmd stop
启动服务:$ sudo service aesmd start
重新启动服务:$ sudo service aesmd restart
查看状态:$ sudo service aesmd status
  


四.SampleCode分析

未完待续…
参考文档



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4