diff --git a/docs/zh/docs/server/performance/system_optimzation/atune/usage-instructions.md b/docs/zh/docs/server/performance/system_optimzation/atune/usage-instructions.md index 1326dfc4465320c9d7d180d1d03d74f75c16e8da..dbe25d80e2ecd998cf4431732d1e904efdc32a22 100644 --- a/docs/zh/docs/server/performance/system_optimzation/atune/usage-instructions.md +++ b/docs/zh/docs/server/performance/system_optimzation/atune/usage-instructions.md @@ -213,7 +213,7 @@ A-Tune支持用户定义并学习新模型。定义新模型的操作流程如 ### 命令格式 -**atune-adm define** +**atune-adm define** \ \ \ \ ### 使用示例 diff --git a/docs/zh/docs/server/security/secgear/using-secgear-tools.md b/docs/zh/docs/server/security/secgear/using-secgear-tools.md index 02741d79ae4753d4c10ed2bc20f80f09d9f48f6d..8d1b14d82d1d411842d751dc82e003ebddfccaa4 100644 --- a/docs/zh/docs/server/security/secgear/using-secgear-tools.md +++ b/docs/zh/docs/server/security/secgear/using-secgear-tools.md @@ -12,7 +12,7 @@ secGear codegener 定义的 EDL 文件格式与 intel SGX SDK edger8r 相同, - 只能在方法中使用 public,不加 public 的函数声明默认为 private - 不支持从非安全侧到安全侧,以及安全侧到非安全侧的 Switchless Calls -- OCALL(Outside call) 不支持部分调用模式(如 cdecl,stdcall,fastcall) +- OCALL(Outside call) 不支持部分调用模式(如 cdecl,stdcall,fastcall) EDL 文件语法为类 C 语言语法,这里主要描述与 C 语言的差异部分: @@ -26,8 +26,6 @@ EDL 文件语法为类 C 语言语法,这里主要描述与 C 语言的差异 | [in , size = len] | 对ecall而言,表示该参数需要将数据从非安全侧传入安全侧,ocall反之(指针类型需要使用此参数,其中 size 表示实际使用的 buffer) | | [out, size = len] | 对ecall而言,表示该参数需要将数据从安全侧传出到非安全侧,ocall反之(指针类型需要使用此参数,其中 size 表示实际使用的 buffer) | - - ### 使用说明 #### **命令格式** @@ -36,30 +34,28 @@ codegen 的命令格式如下: - x86_64 架构: -**codegen_x86_64** < --trustzone | --sgx > [--trusted-dir | **--untrusted-dir** | --trusted | --untrusted ] edlfile +**codegen_x86_64** \< --trustzone | --sgx > [--trusted-dir \ | **--untrusted-dir** \| --trusted | --untrusted ] edlfile ARM 架构: -**codegen_arm64** < --trustzone | --sgx > [--trusted-dir | **--untrusted-dir** | --trusted | --untrusted ] edlfile +**codegen_arm64** \< --trustzone | --sgx > [--trusted-dir \ | **--untrusted-dir** \| --trusted | --untrusted ] edlfile #### **参数说明** -各参数含义如下: +各参数含义如下: | **参数** | 是否可选 | 参数含义 | | ---------------------- | -------- | ------------------------------------------------------------ | | --trustzone \| --sgx | 必选 | 只在当前运行命令目录下生成机密计算架构对应接口函数,不加参数默认生成 SGX 接口函数 | -| --search-path | 可选 | 用于指定被转译的edl文件所依赖文件的搜索路径 | +| --search-path \ | 可选 | 用于指定被转译的edl文件所依赖文件的搜索路径 | | --use-prefix | 可选 | 用于给代理函数名称加上前缀,前缀名为edl的文件名 | | --header-only | 可选 | 指定代码生成工具只生成头文件 | -| --trusted-dir | 可选 | 指定生成安全侧辅助代码所在目录,不指定该参数默认为当前路径 | -| --untrusted-dir | 可选 | 指定生成非安全侧函数辅助代码所在目录 | +| --trusted-dir \ | 可选 | 指定生成安全侧辅助代码所在目录,不指定该参数默认为当前路径 | +| --untrusted-dir \ | 可选 | 指定生成非安全侧函数辅助代码所在目录 | | --trusted | 可选 | 生成安全侧辅助代码 | | --untrusted | 可选 | 生成非安全侧辅助代码 | | edlfile | 必选 | 需要转译的 EDL 文件,例如 hello.edl | - - #### 示例 - 转译 *helloworld.edl* ,在 *enclave-directory* 下生成安全侧辅助代码,*host-directory* 下生成非安全辅助代码的命令示例如下: @@ -86,8 +82,6 @@ $ codegen_x86_64 --sgx --untrusted helloworld.edl $ codegen_x86_64 --sgx helloworld.edl ``` - - ## 签名工具 sign_tool ### 简介 @@ -97,37 +91,33 @@ secGear sign_tool 是一款命令行工具,包含编译工具链和签名工 - 单步签名:仅适用于 debug 调试模式 - 两步签名:商用场景。需要从第三方平台或者独立的安全设备获取签名私钥,对 envlave 进行签名 - - ### 使用指导 #### **命令格式** sign_tool 包含 sign 指令(对 enclave 进行签名)和 digest 指令(生成摘要值)。命令格式为: -**sign_tool.sh -d** [sign | digest] **-x** **-i** **-p** **-s** [OPTIONS] **–o** +**sign_tool.sh -d** [sign | digest] **-x** \ **-i** \ **-p** \ **-s** \ [OPTIONS] **–o** \ #### **参数说明** | sign 指令参数 | 参数含义 | 是否必选 | | -------------- | -------------------------------------------------------------| -------------------------------------------- | -| -a | api_level,标识 iTrustee TA 的 GP API version,默认为 1 | 可选 | -| -c | 配置文件 | 可选 | -| -d | 指定签名工具要进行的操作( sign 或者 digest ) | 单步仅执行sign,两步需要先执行digest,再执行sign | -| -e | 设备的公钥证书,用于保护加密 rawdata 的 AES key (iTrustee必需) | 仅 iTrustee 类型必选 | -| -f | OTRP_FLAG,是否支持 OTRP 标准协议,默认为 0 | 可选 | -| -i | 待签名的库文件 | 必选 | -| -k | 单步签名所需私钥(pem文件) | 仅 SGX 类型必选 | -| -m | 安全配置文件 mainfest.txt,由用户自行配置 | 仅 iTrustee 类型必选 | -| -o | 输出文件 | 必选 | -| -p | 两步签名所需的签名服务器公钥证书(pem文件) | 必选 | -| -s | 两步签名所需的已签名摘要值 | 必选 | -| -t | TA_TYPA,标识 iTrustee 的 TA 二进制格式,默认为 1 | 可选 | -| -x | encalve type(sgx 或 trustzone) | 必选 | +| -a \ | api_level,标识 iTrustee TA 的 GP API version,默认为 1 | 可选 | +| -c \ | 配置文件 | 可选 | +| -d \ | 指定签名工具要进行的操作( sign 或者 digest ) | 单步仅执行sign,两步需要先执行digest,再执行sign | +| -e \ | 设备的公钥证书,用于保护加密 rawdata 的 AES key (iTrustee必需) | 仅 iTrustee 类型必选 | +| -f \ | OTRP_FLAG,是否支持 OTRP 标准协议,默认为 0 | 可选 | +| -i \ | 待签名的库文件 | 必选 | +| -k \ | 单步签名所需私钥(pem文件) | 仅 SGX 类型必选 | +| -m \ | 安全配置文件 mainfest.txt,由用户自行配置 | 仅 iTrustee 类型必选 | +| -o \ | 输出文件 | 必选 | +| -p \ | 两步签名所需的签名服务器公钥证书(pem文件) | 必选 | +| -s \ | 两步签名所需的已签名摘要值 | 必选 | +| -t \ | TA_TYPA,标识 iTrustee 的 TA 二进制格式,默认为 1 | 可选 | +| -x \ | encalve type(sgx 或 trustzone) | 必选 | | -h | 打印帮助信息 | 可选 | - - #### **单步签名** enclave 类型为 SGX,给 test.enclave 签名,输出签名文件 signed.enclave 的示例如下: @@ -136,8 +126,6 @@ enclave 类型为 SGX,给 test.enclave 签名,输出签名文件 signed.encl $ sign_tool.sh –d sign –x sgx –i test.enclave -k private_test.pem –o signed.enclave ``` - - #### **两步签名** 以 SGX 为例,两步签名的操作步骤如下: @@ -158,4 +146,4 @@ $ sign_tool.sh –d sign –x sgx –i test.enclave -k private_test.pem –o sig $ sign_tool.sh –d sign –x sgx–i input –p pub.pem –s signature –o signed.enclave ``` -说明:为发布 Intel SGX 支持的正式版本应用,需要申请 Intel 白名单。流程请参考 Intel 文档:https://software.intel.com/content/www/us/en/develop/download/overview-on-signing-and-whitelisting-for-intel-software-guard-extensions-enclaves.html \ No newline at end of file +说明:为发布 Intel SGX 支持的正式版本应用,需要申请 Intel 白名单。流程请参考 Intel 文档: diff --git a/docs/zh/docs/server/security/trusted_computing/ima.md b/docs/zh/docs/server/security/trusted_computing/ima.md index 08d12c5d40834d1a064228c3508cb4d6a4e9ed40..72a29a54dc7d7ee511b4690971db74a0451c672a 100644 --- a/docs/zh/docs/server/security/trusted_computing/ima.md +++ b/docs/zh/docs/server/security/trusted_computing/ima.md @@ -187,10 +187,9 @@ openEuler IMA/EVM机制提供的内核启动参数及说明如下: - 根据用户实际场景诉求,建议采取如下参数组合: -**1) 原生IMA度量:** +**1) 原生IMA度量:** ``` # 原生IMA度量+自定义策略 @@ -199,7 +198,7 @@ openEuler IMA/EVM机制提供的内核启动参数及说明如下: ima_policy="tcb" ``` -**2) 基于摘要列表的IMA度量:** +**2) 基于摘要列表的IMA度量:** ``` # 摘要列表IMA度量+自定义策略 @@ -208,7 +207,7 @@ ima_digest_list_pcr=11 ima_template=ima-ng initramtmpfs ima_digest_list_pcr=11 ima_template=ima-ng ima_policy="exec_tcb" initramtmpfs ``` -**3) 基于摘要列表的IMA评估,只保护文件内容:** +**3) 基于摘要列表的IMA评估,只保护文件内容:** ``` # IMA评估+日志模式 @@ -217,7 +216,7 @@ ima_appraise=log ima_appraise_digest_list=digest-nometadata ima_policy="appraise ima_appraise=enforce ima_appraise_digest_list=digest-nometadata ima_policy="appraise_exec_tcb" initramtmpfs ``` -**4) 基于摘要列表的IMA评估,保护文件内容和扩展属性:** +**4) 基于摘要列表的IMA评估,保护文件内容和扩展属性:** ``` # IMA评估+日志模式 @@ -227,8 +226,8 @@ ima_appraise=enforce-evm ima_appraise_digest_list=digest ima_policy="appraise_ex ``` > ![](./public_sys-resources/icon-note.gif) **说明:** -> -> 以上四种参数都可以单独配置使用,但只有基于摘要列表的度量和评估模式可以组合使用,即2)和3)搭配或2)和4)搭配。 +> +> 以上四种参数都可以单独配置使用,但只有基于摘要列表的度量和评估模式可以组合使用,即2)和3)搭配或2)和4)搭配。 ### securityfs接口说明 @@ -398,32 +397,32 @@ digest-list-tools软件包提供IMA摘要列表文件生成和管理的工具, ``` gen_digest_lists -i M: -t metadata -f compact -d $DIGEST_LIST_DIR -i l:policy \ - -i i: -o add -p -1 -m immutable -i L:$BIN_PKG_FILES -i u: \ - -A $RPM_BUILD_ROOT -i e: \ - -i E:/usr/src \ - -i E:/boot/efi \ - -i F:/lib \ - -i F:/usr/lib \ - -i F:/lib64 \ - -i F:/usr/lib64 \ - -i F:/lib/modules \ - -i F:/usr/lib/modules \ - -i F:/lib/firmware \ - -i F:/usr/lib/firmware + -i i: -o add -p -1 -m immutable -i L:$BIN_PKG_FILES -i u: \ + -A $RPM_BUILD_ROOT -i e: \ + -i E:/usr/src \ + -i E:/boot/efi \ + -i F:/lib \ + -i F:/usr/lib \ + -i F:/lib64 \ + -i F:/usr/lib64 \ + -i F:/lib/modules \ + -i F:/usr/lib/modules \ + -i F:/lib/firmware \ + -i F:/usr/lib/firmware gen_digest_lists -i M: -t metadata -f compact -d $DIGEST_LIST_DIR.tlv \ - -i l:policy -i i: -o add -p -1 -m immutable -i L:$BIN_PKG_FILES -i u: \ - -T -A $RPM_BUILD_ROOT -i e: \ - -i E:/usr/src \ - -i E:/boot/efi \ - -i F:/lib \ - -i F:/usr/lib \ - -i F:/lib64 \ - -i F:/usr/lib64 \ - -i F:/lib/modules \ - -i F:/usr/lib/modules \ - -i F:/lib/firmware \ - -i F:/usr/lib/firmware + -i l:policy -i i: -o add -p -1 -m immutable -i L:$BIN_PKG_FILES -i u: \ + -T -A $RPM_BUILD_ROOT -i e: \ + -i E:/usr/src \ + -i E:/boot/efi \ + -i F:/lib \ + -i F:/usr/lib \ + -i F:/lib64 \ + -i F:/usr/lib64 \ + -i F:/lib/modules \ + -i F:/usr/lib/modules \ + -i F:/lib/firmware \ + -i F:/usr/lib/firmware ``` #### manage_digest_lists工具 @@ -586,7 +585,7 @@ action表示该条策略具体的动作,一条策略只能选一个 action, pcr -pcr= +pcr=\ 选择 TPM 中用于扩展度量值的 PCR(默认为 10) @@ -603,9 +602,9 @@ action表示该条策略具体的动作,一条策略只能选一个 action, ## 使用说明 > ![](./public_sys-resources/icon-note.gif) **说明:** -> +> > 原生IMA/EVM为Linux开源特性,本章节仅简单介绍基本使用方式,其他资料可参考开源WIKI: -> +> > ### 原生IMA使用说明 @@ -684,11 +683,11 @@ yum install ima-evm-utils digest-list-tools 在安装openEuler发布的RPM包后,默认会在`/etc/ima`目录下生成摘要列表文件。根据文件名的不同,存在如下几种文件: -**/etc/ima/digest_lists/0-metadata_list-compact-** +**/etc/ima/digest_lists/0-metadata_list-compact-\** 为IMA摘要列表文件,通过`gen_digest_lists`命令生成(生成方法详见[gen_digest_lists工具](#gen_digest_list工具)),该文件为二进制格式,包含header信息以及一连串SHA256哈希值,分别代表合法的文件内容摘要值和文件扩展属性摘要值。该文件被度量或评估后,最终被导入内核,并以该文件中的白名单摘要值为基准进行IMA摘要列表度量或评估。 -**/etc/ima/digest_lists/0-metadata_list-rpm-** +**/etc/ima/digest_lists/0-metadata_list-rpm-\** 为RPM摘要列表文件,**实际为RPM包的头信息**。RPM包安装后,如果IMA摘要列表文件不包含签名,则会把RPM头信息写入该文件中,并将头信息的签名写入`security.ima`扩展属性中。这样通过签名可验证RPM头信息的真实性,由于RPM头信息又包含了摘要列表文件的摘要值,则可实现摘要列表的间接验证。 @@ -696,11 +695,11 @@ yum install ima-evm-utils digest-list-tools 为IMA PARSER摘要列表文件,存放`/usr/libexec/rpm_parser`文件的摘要值。该文件用于实现RPM摘要列表->IMA摘要列表的信任链,内核IMA摘要列表机制会对该文件执行后产生的进程进行特殊校验,如果确定是`rpm_parser`程序,则会信任其导入的所有摘要列表而无需校验签名。 -**/etc/ima/digest_lists.sig/0-metadata_list-compact-.sig** +**/etc/ima/digest_lists.sig/0-metadata_list-compact-\.sig** 为IMA摘要列表的签名文件,若RPM包中包含此文件,则在RPM包安装阶段,会将该文件的内容写入对应的RPM摘要列表文件的`security.ima`扩展属性,从而在IMA摘要列表导入内核阶段进行签名验证。 -**/etc/ima/digest_lists.tlv/0-metadata_list-compact_tlv-** +**/etc/ima/digest_lists.tlv/0-metadata_list-compact_tlv-\** 为TLV摘要列表文件,通常在对目标文件生成IMA摘要列表文件时一并生成,存放目标文件的完整性信息(文件内容摘要值、文件扩展属性等)。该文件的功能是协助用户查询/恢复目标文件的完整性信息。 @@ -708,7 +707,7 @@ yum install ima-evm-utils digest-list-tools 在IMA摘要列表评估模式下,IMA摘要列表文件需要经过签名验证才可导入内核,并用于后续的文件白名单匹配。IMA摘要列表文件支持如下几种签名方式: -**1) IMA扩展属性签名** +**1) IMA扩展属性签名** 即原生的IMA签名机制,将签名信息按照一定格式,存放在`security.ima`扩展属性中。可通过`evmctl`命令生成并添加: @@ -731,7 +730,7 @@ echo > /sys/kernel/security/ima/digest_list_data echo > /sys/kernel/security/ima/digest_list_data_del ``` -**2) IMA摘要列表追加签名(openEuler 24.03 LTS版本默认)** +**2) IMA摘要列表追加签名(openEuler 24.03 LTS版本默认)** openEuler 24.03 LTS版本开始支持IMA专用签名密钥,并采用CMS签名。由于签名信息包含证书链,可能由于长度超出限制而无法写入文件的`security.ima`扩展属性中,因此采用类似内核模块的追加签名的方式: @@ -745,13 +744,13 @@ openEuler 24.03 LTS版本开始支持IMA专用签名密钥,并采用CMS签名 ``` struct module_signature { - u8 algo; /* Public-key crypto algorithm [0] */ - u8 hash; /* Digest algorithm [0] */ - u8 id_type; /* Key identifier type [PKEY_ID_PKCS7] */ - u8 signer_len; /* Length of signer's name [0] */ - u8 key_id_len; /* Length of key identifier [0] */ - u8 __pad[3]; - __be32 sig_len; /* Length of signature data */ + u8 algo; /* Public-key crypto algorithm [0] */ + u8 hash; /* Digest algorithm [0] */ + u8 id_type; /* Key identifier type [PKEY_ID_PKCS7] */ + u8 signer_len; /* Length of signer's name [0] */ + u8 key_id_len; /* Length of key identifier [0] */ + u8 __pad[3]; + __be32 sig_len; /* Length of signature data */ }; ``` diff --git a/docs/zh/docs/server/security/trusted_computing/interpreter-class-application-integrity-protects.md b/docs/zh/docs/server/security/trusted_computing/interpreter-class-application-integrity-protects.md index 2692ef5620156c72795189f7eead6271a1e2c978..3f5c1598b2b6e08c64dba47a35b8828612ccd35a 100644 --- a/docs/zh/docs/server/security/trusted_computing/interpreter-class-application-integrity-protects.md +++ b/docs/zh/docs/server/security/trusted_computing/interpreter-class-application-integrity-protects.md @@ -1,4 +1,4 @@ -# 解释器类应用程序安全防护 +# 解释器类应用程序安全防护 ## 背景介绍 @@ -54,7 +54,7 @@ int execveat(int dirfd, const char *pathname, | ------------------- | -------- | ------------------------------------------------------------ | | exec_check.bash= | 0/1 | 默认为0,设置为1时,bash解释器进程运行脚本时前调用execveat进行脚本文件的可执行权限检查 | | exec_check.java= | 0/1 | 默认为0,设置为1时,jdk运行脚本时class和jar文件时,需要调用execveat进行脚本文件的执行权限检查 | -| exec_check.= | 0/1 | 后续可扩展其他解释器 | +| exec_check.\= | 0/1 | 后续可扩展其他解释器 | **注意:上述启动参数实际由各个解释器进程进行读取解析,内核并不实际使用这些参数。** @@ -68,6 +68,7 @@ int execveat(int dirfd, const char *pathname, | jdk | class文件/jar文件 | java虚拟机对加载的class文件和jar包进行可执行权限检查 | 社区开发人员或用户可基于该机制,自行扩展其他解释器或类似机制的支持。 + ## 使用说明 ### AT_CHECK参数使用示例 @@ -213,7 +214,7 @@ exec_check.java=1 ``` public class HelloWorld { - public static void main(String[] args) { + public static void main(String[] args) { System.out.println("Hello, World!"); } } @@ -236,13 +237,13 @@ Hello, World! #### 前置条件 -开启IMA摘要列表功能,详见[**内核完整性度量(IMA)** ](内核完整性度量(IMA).md)文档章节。 +开启IMA摘要列表功能,详见[**内核完整性度量(IMA)**](内核完整性度量(IMA).md)文档章节。 #### 操作指导 -**步骤1:** 为目标应用程序生成IMA摘要列表(过程略,摘要列表生成方式详见[**内核完整性度量(IMA)** ](内核完整性度量(IMA).md)文档章节)。 +**步骤1:** 为目标应用程序生成IMA摘要列表(过程略,摘要列表生成方式详见[**内核完整性度量(IMA)**](内核完整性度量(IMA).md)文档章节)。 -**步骤2:** 开启IMA摘要列表功能(过程略,摘要列表生成方式详见[**内核完整性度量(IMA)** ](内核完整性度量(IMA).md)文档章节),以开启摘要列表+shell脚本校验为例,配置的内核启动参数如下: +**步骤2:** 开启IMA摘要列表功能(过程略,摘要列表生成方式详见[**内核完整性度量(IMA)**](内核完整性度量(IMA).md)文档章节),以开启摘要列表+shell脚本校验为例,配置的内核启动参数如下: ```bash ima_appraise=enforce ima_appraise_digest_list=digest-nometadata ima_policy="appraise_exec_tcb" initramtmpfs module.sig_enforce exec_check.bash=1