【HarmonyOS 6.0】Device Security Kit 深度解读:应用进程信息安全审计查询能力

文章目录

  • [1 -> 概述](#1 -> 概述)
  • [2 -> 背景与能力定位](#2 -> 背景与能力定位)
    • [2.1 -> 鸿蒙6.0星盾安全架构](#2.1 -> 鸿蒙6.0星盾安全架构)
    • [2.2 -> 进程信息查询的场景价值](#2.2 -> 进程信息查询的场景价值)
    • [2.3 -> 与现有能力的关系](#2.3 -> 与现有能力的关系)
  • [3 -> 权限申请与资质要求](#3 -> 权限申请与资质要求)
    • [3.1 -> 权限声明](#3.1 -> 权限声明)
    • [3.2 -> 企业类应用资质](#3.2 -> 企业类应用资质)
    • [3.3 -> 设备约束](#3.3 -> 设备约束)
  • [4 -> 接口详解](#4 -> 接口详解)
    • [4.1 -> 接口列表与核心数据结构](#4.1 -> 接口列表与核心数据结构)
    • [4.2 -> 接口调用流程](#4.2 -> 接口调用流程)
    • [4.3 -> 关键约束说明](#4.3 -> 关键约束说明)
  • [5 -> 完整代码开发实践](#5 -> 完整代码开发实践)
    • [5.1 -> 环境准备与模块导入](#5.1 -> 环境准备与模块导入)
    • [5.2 -> 获取指定pid的进程信息](#5.2 -> 获取指定pid的进程信息)
    • [5.3 -> 获取全部进程信息](#5.3 -> 获取全部进程信息)
    • [5.4 -> 典型的业务处理逻辑](#5.4 -> 典型的业务处理逻辑)
  • [6 -> 异常处理与常见问题](#6 -> 异常处理与常见问题)
    • [6.1 -> 异常类型](#6.1 -> 异常类型)
    • [6.2 -> 常见问题FAQs](#6.2 -> 常见问题FAQs)
  • [7 -> 总结与展望](#7 -> 总结与展望)

1 -> 概述

在HarmonyOS 6.0的星盾安全架构体系中,Device Security Kit作为面向开发者的核心安全套件,持续为应用提供系统级的安全能力支撑。从6.0.0(20)版本开始,Device Security Kit中的安全审计能力迎来了一个重要增强------新增了应用进程信息查询能力。应用可以基于该能力,主动获取设备上已启动的应用进程信息,包括进程ID、命令行参数、父进程PID、用户与用户组ID、进程启动时间、进程所有者ID类型及所有者ID等一系列关键进程元数据。

这一能力的引入,标志着鸿蒙系统将应用进程管理这一底层系统信息向符合资质的企业类应用开放了可控的查询通道,为安全审计、终端管理、异常行为检测等企业级业务场景提供了坚实的数据基础。

需要特别指出的是,当前该能力仅支持2in1设备(即平板、PC类设备),单次查询的进程数量上限为16个。

安全审计能力本身在Device Security Kit中承载着为应用提供设备审计数据的重要职责,涵盖窗口截屏、USB插拔、剪切板复制粘贴等典型审计场景。进程信息查询能力的加入,则将审计维度从用户行为层面进一步下沉到了系统进程层面,形成了从应用层到内核层的完整审计数据链路。

2 -> 背景与能力定位

2.1 -> 鸿蒙6.0星盾安全架构

HarmonyOS 6.0在安全领域持续推进星盾安全架构的升级,从底层内核到应用生态构建了全方位的安全防护体系。Device Security Kit正是这一架构中面向开发者的核心能力出口,为应用提供设备验证(DeviceVerify)、安全检测(SafetyDetect)、可信应用服务(TrustedAppService)、可信认证(TrustedAuthentication)、业务风险智能检测(BusinessRiskIntelligentDetection)以及安全审计(SecurityAudit)等服务。

根据官方公布的数据,截至2025年9月,99%的鸿蒙应用已支持鸿蒙首创的安全访问机制,系统累计拦截超过240亿次不合理的权限索取。在这一背景下,进程信息查询能力的开放是鸿蒙在安全审计领域纵深发展的自然演进。

2.2 -> 进程信息查询的场景价值

进程信息查询能力的核心价值体现在以下几个方面:

安全审计与异常检测:企业安全审计应用可以定期获取设备上运行的进程快照,通过与白名单基线比对,及时发现未经授权的进程或可疑进程(如已知恶意软件对应的进程名)。

终端管理与合规性检查:在MDM(移动设备管理)或企业终端管理场景中,IT管理员可通过此类能力远程了解员工设备上当前运行的应用进程信息,便于进行软件合规性审计和软件资产盘点。

应用行为分析:在应用性能监控和安全运维场景下,进程信息可用于追踪应用间的启动关系(通过父进程PID),分析异常的进程链,识别进程注入或提权行为。

黑产与作弊识别:在反欺诈和反作弊场景中,进程信息能够帮助检测自动化脚本、模拟器、或通过特定进程进行设备控制的行为,提升业务风控能力。

2.3 -> 与现有能力的关系

在此之前,鸿蒙系统主要通过@ohos.process模块提供当前应用自身的进程信息获取能力(如process.getPid()获取本进程PID),但对于设备上其他应用进程的信息获取,普通应用受到严格的沙箱隔离限制,几乎无法触达。securityAudit.queryProcesses()queryAllProcesses()接口的开放,是在满足特定权限约束和安全审查的前提下,向合规应用开放的系统级审计能力,填补了原有能力的关键空白。

3 -> 权限申请与资质要求

3.1 -> 权限声明

使用进程信息查询能力,必须在应用的模块级配置文件(如module.json5)中声明权限ohos.permission.QUERY_AUDIT_EVENT

权限声明的示例代码如下:

json 复制代码
{
  "module": {
    "requestPermissions": [
      {
        "name": "ohos.permission.QUERY_AUDIT_EVENT"
      }
    ]
  }
}

3.2 -> 企业类应用资质

需要特别引起重视的是,ohos.permission.QUERY_AUDIT_EVENT属于受限权限,仅允许清单内的企业类应用申请使用。这意味着并非任意鸿蒙应用都能调用该能力,应用必须事先通过企业资质认证并被添加到华为许可的白名单列表中。

企业类应用申请该权限的具体流程为:登录华为开发者联盟平台,进入应用管理页面,选择需要申请权限的应用,在应用详情页面的权限管理中提交受限权限申请并等待审核。审核通过后,应用才能正常调用安全审计接口获取进程信息。

同时,提供完整的企业应用权限申请指引文档供开发者参考:【申请使用企业类应用可用权限】https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/permissions-for-enterprise-apps

3.3 -> 设备约束

当前能力仅支持2in1设备(例如搭载HarmonyOS系统的平板、笔记本等设备)。手机端暂不支持该接口。这是开发者在技术选型和产品规划时需要重点考虑的限制。

4 -> 接口详解

4.1 -> 接口列表与核心数据结构

进程信息查询能力提供以下两个核心接口:

接口名 描述
queryAllProcesses(): string 获取设备上所有已启动的应用进程信息
queryProcesses(pids: number[]): string 根据指定的pid列表获取对应进程的信息

两个接口均返回JSON字符串格式的进程信息列表。返回的每个进程信息包含以下字段(根据官方文档披露的内容整理):

  • pid:进程ID
  • cmdline:指令命令行(进程启动时执行的命令)
  • ppid:父进程PID
  • uid:用户ID
  • gid:用户组ID
  • startTime:进程启动时间
  • ownerIdType:进程所有者ID类型
  • ownerId:进程所有者ID

关于ownerIdTypeownerId的具体枚举值和含义,建议开发者结合实际返回数据并结合官方文档理解。

4.2 -> 接口调用流程

调用进程信息查询接口的整体流程较为简单:hap应用调用查询接口 → Device Security Kit同步返回进程信息 → hap应用处理返回数据

两个接口均为同步调用。如果调用过程中发生权限缺失或系统异常,会抛出BusinessError类型的异常,开发者需要通过try-catch结构进行错误捕获和处理。

4.3 -> 关键约束说明

  • 单次查询数量限制queryProcesses(pids)接口单次最多传入16个pid。如果传入超过16个pid,接口行为需以实际测试为准,建议开发者自行控制传入数量以确保调用稳定。
  • pid有效性:传入的pid在调用时刻可能尚未存在或已终止,返回结果中仅包含有效进程的信息,无效pid对应的进程信息不会被返回。
  • 返回值格式 :返回值为JSON字符串,开发者需要进行JSON.parse()解析后方可访问各字段。

5 -> 完整代码开发实践

5.1 -> 环境准备与模块导入

在使用安全审计接口之前,需要导入以下模块:

typescript 复制代码
import { securityAudit } from '@kit.DeviceSecurityKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
  • @kit.DeviceSecurityKit:提供Device Security Kit的全部核心能力,包括安全审计接口。
  • @kit.BasicServicesKit:提供基础的通用服务能力,其中BusinessError用于异常捕获和处理。
  • @kit.PerformanceAnalysisKit:提供日志输出能力,hilog是鸿蒙的系统级日志工具。

代码来源参考华为官方文档。

5.2 -> 获取指定pid的进程信息

以下代码演示了如何根据指定pid数组获取对应进程的信息。常用场景包括:根据已知的特定进程标识符(如可疑进程的pid)主动查询其详细信息。

typescript 复制代码
const TAG = "SecurityAuditJsTest";
let pids: number[] = [3622];

try {
    hilog.info(0x0000, TAG, 'queryProcesses begin.');
    const result = securityAudit.queryProcesses(pids);
    hilog.info(0x0000, TAG, 'Succeeded in queryProcesses.');

    // 解析返回的JSON字符串
    const processInfoList = JSON.parse(result);
    // 处理进程信息数据
    processInfoList.forEach((processInfo) => {
        hilog.info(0x0000, TAG, `pid: ${processInfo.pid}, cmdline: ${processInfo.cmdline}`);
    });
} catch (err) {
    let e: BusinessError = err as BusinessError;
    hilog.error(0x0000, TAG, 'queryProcesses failed: %{public}d %{public}s', e.code, e.message);
}

代码来源参考华为官方文档。

5.3 -> 获取全部进程信息

queryAllProcesses()接口获取设备上当前所有已启动应用进程的信息,返回数据量可能较大,建议在后台线程或能力允许的情况下调用,避免影响主线程的UI响应性能。

typescript 复制代码
const TAG = "SecurityAuditJsTest";

try {
    hilog.info(0x0000, TAG, 'queryAllProcesses begin.');
    const result = securityAudit.queryAllProcesses();
    hilog.info(0x0000, TAG, 'Succeeded in queryAllProcesses.');

    // 解析返回的JSON字符串
    const allProcessInfoList = JSON.parse(result);
    hilog.info(0x0000, TAG, `Total processes count: ${allProcessInfoList.length}`);

    // 遍历所有进程信息
    allProcessInfoList.forEach((processInfo) => {
        hilog.info(0x0000, TAG, 
            `Process: pid=${processInfo.pid}, ppid=${processInfo.ppid}, ` +
            `cmdline=${processInfo.cmdline}, uid=${processInfo.uid}, gid=${processInfo.gid}`
        );
    });
} catch (err) {
    let e: BusinessError = err as BusinessError;
    hilog.error(0x0000, TAG, 'queryAllProcesses failed: %{public}d %{public}s', e.code, e.message);
}

代码来源参考华为官方文档。

5.4 -> 典型的业务处理逻辑

一个典型的安全审计应用,在调用进程查询接口后,往往需要进行进一步的业务处理。以下提供一个进程信息审计的参考逻辑:

typescript 复制代码
import { securityAudit } from '@kit.DeviceSecurityKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { hilog } from '@kit.PerformanceAnalysisKit';

const TAG = "SecurityAuditService";

// 预定义的白名单进程标识(可根据实际业务配置)
const WHITELIST_CMDLINES: string[] = [
    "/system/bin/init",
    "/system/bin/servicemanager",
    // 过滤掉其他合法系统服务进程...
];

function auditAllProcesses(): void {
    try {
        const result = securityAudit.queryAllProcesses();
        const processes = JSON.parse(result);
        
        const suspiciousProcesses: any[] = [];
        
        processes.forEach((proc: any) => {
            // 判断是否为可疑进程(不在白名单、来自非预期路径等)
            const isWhitelisted = WHITELIST_CMDLINES.some(whitelistItem => 
                proc.cmdline?.includes(whitelistItem)
            );
            
            if (!isWhitelisted && proc.cmdline) {
                suspiciousProcesses.push(proc);
                hilog.warn(0x0000, TAG, 
                    `Suspicious process detected: pid=${proc.pid}, cmdline=${proc.cmdline}`
                );
            }
        });
        
        if (suspiciousProcesses.length > 0) {
            // 执行安全告警或上报逻辑
            reportSecurityEvent(suspiciousProcesses);
        }
        
    } catch (err) {
        let e: BusinessError = err as BusinessError;
        hilog.error(0x0000, TAG, 'Audit failed: %{public}d', e.code);
    }
}

function reportSecurityEvent(processes: any[]): void {
    // 将可疑进程信息上报到服务端进行进一步分析
    hilog.info(0x0000, TAG, `Reporting ${processes.length} suspicious processes`);
}

6 -> 异常处理与常见问题

6.1 -> 异常类型

调用安全审计接口时可能出现的异常主要包括:

权限错误 :如果应用未申请ohos.permission.QUERY_AUDIT_EVENT权限,或该权限未通过企业类应用白名单审核,调用时会抛出权限拒绝类型的BusinessError

参数错误queryProcesses(pids)接口如果传入无效的pid数组(例如非数字类型元素),可能会触发参数格式错误。

系统资源异常:系统进程管理服务异常时也可能导致接口调用失败。

6.2 -> 常见问题FAQs

Q1:为什么调用queryAllProcesses()返回的进程数量比预期少?

A1:首先确认当前设备是否属于2in1设备类型(该能力仅支持2in1设备)。其次,安全审计接口返回的是进程级信息,而非应用级(Activity/Ability级)信息,注意区分。此外,部分系统内核级进程可能不在接口返回范围内。

Q2:进程信息中的cmdline字段可能为空吗?

A2:部分系统进程或加密进程的cmdline可能没有填充完整,业务逻辑中应做好空值处理,避免因空指针异常导致崩溃。

Q3:应用发布到AGC应用市场时如何申请该权限?

A3:开发者需要在华为开发者联盟平台注册应用,并在应用详情页面的权限管理中提交受限权限申请。待审核通过后,应用可获得该权限的使用授权。

Q4:是否可以查询其他用户(多用户场景)下应用的进程信息?

A4:接口返回的进程信息中包含uidownerId字段,可用于区分不同用户(使用不同uid区分)的进程。但为保障用户隐私安全,具体返回范围仍需以接口实际行为为准。

7 -> 总结与展望

进程信息查询能力的开放,是鸿蒙系统在安全审计领域的又一次重要能力下放。从更宏观的视角来看,这一能力的加入体现了以下几个关键趋势:

第一,安全审计从被动响应走向主动防御。 传统的安全审计更多依赖日志回溯,是事后分析的手段。而进程信息的实时查询能力,使得安全应用可以对设备进程状态进行主动监控和主动发现,提升安全响应的及时性和有效性。

第二,系统级信息的可控开放。 鸿蒙秉持最小权限原则和沙箱隔离机制,应用之间进程信息的相互可见性在正常情况下被严格限制。此次在特定权限约束下的开放,说明鸿蒙正在构建一种"有限开放、严格审查"的系统能力授权机制,既不过度暴露系统信息,又为合规企业应用提供必要的安全审计能力。

第三,2in1设备成为安全能力的先行验证平台。 当前该能力仅支持2in1设备,这可能是华为在安全能力开放策略上的一种渐进式策略------先在PC类、平板类设备中验证能力的稳定性和安全性,逐步完善后再考虑向更多设备形态扩展。

对于企业开发者而言,进程信息查询接口的开放提供了前所未有的系统进程可见性。结合Device Security Kit中原有的窗口截屏审计、USB设备插拔审计、剪切板操作审计等能力,开发者可以在鸿蒙平台上构建更加全面、立体、纵深的企业级安全解决方案。

随着鸿蒙生态的不断演进和星盾安全架构的持续升级,我们有理由期待Device Security Kit在更多安全能力维度上持续开放,为开发者和企业用户带来更加安全、可靠、可信的终端使用体验。


感谢各位大佬支持!!!
互三啦!!!

相关推荐
skywalk81631 小时前
全面评估这门中文语言的情况,看它离一个可以实际产业落地的编程语言还有多远距离!
开发语言·编程
代码村新手1 小时前
C++-模板进阶
开发语言·c++
接着奏乐接着舞1 小时前
java jvm知识点
java·开发语言·jvm
Shadow(⊙o⊙)1 小时前
qt中自定义槽函数 内部继承逻辑、GUI+CLI协同1.0
开发语言·前端·c++·qt
摇滚侠1 小时前
Java 基础面试题 真正的 offer 偏方 Java 基础 Java 高级
java·开发语言
蚰蜒螟2 小时前
深入剖析 OpenJDK 17 解释器中的安全点(Safepoint)进入与退出机制
java·开发语言·安全
山岚的运维笔记2 小时前
Bash 专业人员笔记 -- 第 11 章:`true`、`false` 和 `:` 命令
linux·运维·服务器·开发语言·笔记·学习·bash
代钦塔拉2 小时前
第一篇:字符编码全解:从ASCII/GBK/Unicode到UTF-8
开发语言·qt
syagain_zsx2 小时前
Qt初识,快速上手
开发语言·qt