> ## Documentation Index
> Fetch the complete documentation index at: https://dragonwingdocs.qualcomm.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 验证 Qualcomm Linux 的安全配置

安全验证过程涉及检查和验证硬件与软件组件的[安全功能](./security-features),以确保它们在 Qualcomm<sup>®</sup> Linux<sup>®</sup> 上安全运行。此过程可确保所列安全功能满足使系统稳健且安全所需的要求。

## **前提条件**

> * [构建软件并将其加载到设备上](https://dragonwingdocs.qualcomm.com/Key-Documents/Firmware-Guide/build-firmware)。
> * [在 permissive 模式下启用安全外壳(SSH),以安全地访问您的主机设备](https://docs.qualcomm.com/bundle/publicresource/topics/80-80021-254/how_to.html#use-ssh)。

### **验证 TrustZone/设备配置/Hypervisor 镜像加载**

通过验证 TrustZone(安全)环境,您可以确保设备的安全架构稳健可靠,为安全操作奠定基础。

以下 XBL 日志包含有关 TrustZone/设备配置/Hypervisor 镜像加载的信息。

例如:

* 设备配置(DEVCFG)
  `B - 1206031 - QSEE Dev Config - Image Load, Start`
  `D - 763 - Auth Metadata`
  `D - 549 - Segments hash check`
  `D - 13054 - QSEE Dev Config - Image Loaded, Delta - (53248 Bytes)`
* TrustZone
  `B - 1228113 - QSEE - Image Load, Start`
  `D - 26382 - Auth Metadata`
  `D - 22234 - Segments hash check`
  `D - 88999 - QSEE - Image Loaded, Delta - (4027792 Bytes)`
* Hypervisor
  `B - 1402237 - QHEE - Image Load, Start`
  `D - 26383 - Auth Metadata`
  `D - 7045 - Segments hash check`
  `D - 35258 - QHEE - Image Loaded, Delta - (1491024 Bytes)`
* APDP
  `B - 978348 - APDP - Image Load, Start`
  `D - 42212 - Auth Metadata`
  `D - 458 - Segments hash check`
  `D - 48434 - APDP - Image Loaded, Delta - (17332 Bytes)`

## **验证安全启动和 UEFI 安全启动**

* [安全启动](./security-features#secure-boot)功能旨在确保设备仅使用制造商信任的软件启动。
* [UEFI 安全启动](./security-features#uefi-secure-boot)是安全启动的扩展,运行于统一可扩展固件接口(UEFI)环境中。
* 为硬件启用安全启动对于实现硬件安全和保护知识产权至关重要。有关说明,请参阅[启用安全启动](./enable-secure-boot)和[启用 UEFI 安全启动](./enable-uefi-secure-boot)。
* XBL 日志包含设备的安全启动状态。日志包括有关启动接口、安全启动状态、启动配置、JTAG ID、OEM ID 和序列号的信息。
  ```text theme={null}
  S - Format: Log Type - Time(microsec) - Message - Optional Info
  S - Log Type: B - Since Boot(Power On Reset),  D - Delta,  S - Statistic
  S - QC_IMAGE_VERSION_STRING=BOOT.MXF.1.0.c1-00037-KODIAKLA-1
  S - IMAGE_VARIANT_STRING=SocKodiakLAA
  S - OEM_IMAGE_VERSION_STRING=hu-apasunur-hyd
  S - Boot Interface: USB **
  S - Secure Boot: On **
  S - Boot Config @ 0x00786070 = 0x000000c1
  S - JTAG ID @ 0x00786130 = 0x001970e1
  S - OEM ID @ 0x00786138 = 0x00000000
  S - Serial Number @ 0x00786134 = 0x4172f1dd
  ```

## **验证 SELinux 状态并自定义 SELinux 策略**

* [安全增强型 Linux(SELinux)](./security-features.mdx#selinux)是集成到 Linux 内核中的安全架构,提供了一种支持访问控制安全策略的机制。
* 验证设备软件的 SELinux 状态可防止对关键软件模块或驱动程序的未授权访问。有关说明,请参阅[启用 SELinux](./enable-se-linux.mdx)。
* [SEPolicy](./security-features.mdx#sepolicy) 是 SELinux 策略,它定义进程和用户与系统资源交互的规则,在 Linux 中强制执行强制访问控制(MAC)。
* 默认 SEPolicy 可能无法满足您应用程序的所有特定需求。通过创建自定义策略,您可以定义符合应用程序需求的精确规则。有关说明,请参阅[自定义 SEPolicy](./customize-security-services.mdx)。
* 要验证 SELinux 状态,请执行以下操作:

  1. 验证内核配置。

  ```text theme={null}
  CONFIG_SECURITY_SELINUX=y
  ```

  2. 使用 SSH 连接到设备。请参阅 [SELinux 构建上的 SSH 启用](./emable-se-linux.mdx),以在 SELinux enforcing 模式下启用 SSH 登录。
  3. 通过运行 `seinfo` 命令查看 SELinux 启用状态和其他详细信息。

  ```text theme={null}
  Statistics for policy file: /sys/fs/selinux/policy
  Policy Version:             33 (MLS enabled)
  Target Policy:              selinux
  Handle unknown classes:     allow
  Classes:                    131       Permissions:         423
  Sensitivities:              16        Categories:          1024
  Types:                      4376      Attributes:          319
  ```

  4. 从控制台或使用 SSH 连接到设备,验证 SELinux 强制执行状态。

  ```text theme={null}
  getenforce
  enforcing - if selinux is set to enable
  ```

## **验证 PIL 镜像加载 - 示例日志**

以下示例日志显示了通过 PIL 加载的远程处理器和硬件组件的初始化和状态。

* **WLAN (remoteproc1)**
  ```text theme={null}
  730, 0x00000000000459B4 | 8.700828: remoteproc remoteproc1: Remote processor 8a00000. Remoteproc is now up
  ```
* **cDSP (remoteproc3)**
  ```text theme={null}
  735, 0x00000000000465A3 | 8.794052: remoteproc remoteproc3: Remote processor a300000. Remoteproc is now up
  ```
* **aDSP (remoteproc2)**
  ```text theme={null}
  741, 0x00000000000469FC | 8.828033: remoteproc remoteproc2: Remote processor 3000000.remoteproc is now up
  ```
* **MODEM (remoteproc0)**
  ```text theme={null}
  1035, 0x000000000006B78B | 13.433955: remoteproc remoteproc0: Remote processor 4080000. Remoteproc is now up
  ```
* **A660\_zap**
  ```text theme={null}
  sh-5.1# cat /dev/kgsl-3d0
  OH HAI GPU
  ```
* **Video (Vpu20\_1v.mbn)**
  ```text theme={null}
  sh-5.1# dmesg | grep video
  [ 0.000000] OF: reserved mem: 0x000000008a700000..0x000000008adfffff (7168 KiB) nomap non-reusable video@8a700000
  [ 0.169598] platform aa00000.video-codec: Adding to iommu group 9
  [ 11.385238] videodev: Linux video capture interface: v2.00
  [ 11.476933] qcom-venus aa00000.video-codec: non legacy binding
  ```

## **验证 QCOMTEE 驱动程序状态**

检查 TEE 设备节点。

```text theme={null}
ls /dev/tee0
```

## **验证 Qualcomm TEE Mink 和 GlobalPlatform API 可用性**

Qualcomm<sup>®</sup> 可信执行环境(Qualcomm TEE)支持基于 Mink 和 Global Platform 的 API,以提供对其中实现的安全服务的访问。Mink 是由 Mink Adaptor 库实现的基于 Object-IPC 的协议,而 Mink TEEC 库实现了 Global Platform 标准化 API,以实现设备间的互操作性和安全性。验证过程涉及检查这些 API 是否已正确实现并可供使用。

1. 验证设备上 Mink Adaptor 和 Mink Teec 库的可用性。
   ```text theme={null}
   cd /usr/lib/
   ls libmink*
   ```

## **验证 Qualcomm TEE supplicant 是否正在运行**

QTEE supplicant 守护进程为 QTEE 提供富执行环境(Linux)服务,例如文件系统和时间服务。

1. 验证 QTEE supplicant 守护进程是否正在运行。
   ```text theme={null}
   # Get the service status using systemctl
   systemctl status qteesupplicant.service
   # The command output must show the service is loaded and running similar to below
   qteesupplicant.service - QTEE Supplicant Service
      Loaded: loaded (/usr/bin/qtee_supplicant; enabled; preset: enabled)
      Active: active (running) since Sun 1980-01-06 00:00:00 UTC; 29min ago
   ```

## **验证 RPMB 配置状态**

重放保护内存块(RPMB)是在 UFS 或 eMMC 存储设备中定义的安全分区。在使用之前,必须先使用测试(Test)或生产(Production)密钥对存储进行 RPMB 配置。要验证 RPMB 配置状态,请执行以下操作:

1. 使用 SSH 连接到设备并运行以下命令。
   ```text theme={null}
   sh-5.1# rpmb_client -p
   ```
   将显示以下消息。
   ```text theme={null}
   -------------------------------------------------------
    WARNING!!! You are about to provision the RPMB key.
    You are about to provision the RPMB key.
    This is a ONE time operation and CANNOT be reversed.
    -------------------------------------------------------
     0 -> Provision Production key
     1 -> Provision Test key\n
     2 -> Check RPMB key provision status
    -------------------------------------------------------
     Select an option to proceed:
   ```
2. 选择选项 `2: Check RPMB key provision status.` 对于未配置的设备,预期输出为 `RPMB_KEY_NOT_PROVISIONED`。
3. 仅在必要时,并在阅读以下注意事项后,您才可以选择选项 1:使用测试密钥配置 RPMB。
   <Warning>
     1. > 一旦在非安全设备上使用测试密钥配置了 RPMB,该操作将不可逆。因此,此类设备无法启用安全启动。有关更多信息,请参阅 [RPMB](./security-features#rpmb)。
   </Warning>

## **验证 Qualcomm WES 状态**

* [Qualcomm® 无线边缘服务(Qualcomm WES)](./security-features#qualcomm-wireless-edge-services)可帮助轻松部署大量边缘设备,并在无需人工干预的情况下对其进行管理。它包括以下服务:
  * 即插即用设置
  * 按需更新
  * 紧急和常规升级
  * 覆盖设备整个生命周期的第三方服务。
* 如果您需要开发提供基于硬件的证明、零接触设备配置和芯片组功能管理的应用程序,请参阅[开发可信应用程序和客户端应用程序](./develop-trusted-and-client-applications)。
* 要安装或升级 QCS5430 SoftSKU 功能包,请参阅[安装或升级 SoftSKU 功能包](./install-or-upgrade-the-soft-sku-feature-packs)。

<Note>
  此功能面向具有授权访问权限的许可用户提供,以验证 Qualcomm WES 状态。如果您具有访问权限,请参阅 [Qualcomm Linux Wireless Edge Services Guide](https://docs.qualcomm.com/bundle/resource/topics/80-80021-11B/bring-up-qwes.html)。
</Note>

## **验证可信应用程序和客户端应用程序**

* 可信应用程序在可信执行环境(TEE)中运行,提供安全且隔离的环境,以保持代码和数据的完整性与机密性。
* 客户端应用程序在普通世界操作系统中运行,使用 TEE 客户端 API 与可信应用程序通信,以执行安全服务。
* 要在安全世界(TrustZone)中执行安全关键型应用程序,您必须开发自己的可信应用程序。您必须拥有对 Qualcomm TEE 软件开发套件(SDK)的访问权限,才能开发用于启动可信应用程序的相应客户端应用程序。有关更多信息,请参阅[开发可信应用程序和客户端应用程序](./develop-trusted-and-client-applications)。

<Note>
  此功能面向具有授权访问权限的许可用户提供,以开发和运行可信应用程序和客户端应用程序。如果您具有访问权限,请参阅 [Qualcomm Linux Security Guide - Addendum](https://docs.qualcomm.com/bundle/resource/topics/80-80021-11A/develop.html)。
</Note>

## **后续步骤**

* 要配置 Qualcomm TEE 以保护处理敏感数据并运行可信应用程序的设备,请参阅[配置安全服务](./configure)。
* 要自定义内存和 SEPolicy,请参阅[自定义安全服务](./customize-security-services)。
