用途
OpenHarmony Security Review 用于审查 OpenHarmony C++ 系统服务代码中的安全漏洞。OpenHarmony 系统服务以高权限运行,并通过 IPC 和网络接口处理不可信输入,因此该技能提供结构化方法,重点识别四类关键安全问题:外部输入处理、多线程竞态条件、敏感信息泄露和权限校验。
适用与不适用场景
适用场景包括:
- 审查 OpenHarmony C++ 系统服务代码(xxxService、xxxStub 实现)
- 代码处理 IPC(MessageParcel)或网络数据(JSON/XML/Protobuf)
- 代码存在多线程访问共享状态
- 代码记录用户数据或指针
- 代码校验权限或访问受保护资源
不适用于:
- 应用层代码(应使用标准安全编码实践)
- 非 OpenHarmony 的 C++ 代码(应使用通用安全审查技能)
- 性能优化(应使用其他技能)
代码遍历策略
- 输入头文件(.h/.hpp):分析对应的 xxxService.cpp 和 xxxStub.cpp
- 输入 Stub 文件(xxxStub.cpp):将分析扩展到 xxxService.cpp(核心逻辑与共享状态)
- 外部调用:标记跨组件并发风险,供单独审查
关键漏洞检查清单
技能提供快速参考表,涵盖以下高危检查项:
- IPC 反序列化:所有 MessageParcel 读取均检查成功与否
- 逻辑校验:反序列化后校验数组长度/索引
- 整数边界:大小变量满足 0 <= size <= MAX_ALLOWED_BUFFER
- 对象生命周期:使用前校验 RemoteObjects/fd(nullptr 检查)
- 解析器安全:网络解析器拒绝畸形输入,防止递归攻击
- 容器线程安全:所有容器操作受保护(读/写、写/写)
- 迭代器失效:迭代期间不得修改
- 锁一致性:所有共享状态访问由互斥锁保护
- 死锁风险:嵌套锁按一致顺序获取
- TOCTOU:状态检查后立即执行依赖操作
- 日志中的 PII:日志中不得出现电话号码、联系人、短信、生物特征
- 日志中的输入事件:不得记录原始 KeyEvents、触摸坐标、屏幕边界
- 指针地址:日志中不得出现 %p 或 &variable(防止 ASLR 绕过)
- 权限检查:所有特权操作校验调用者权限
主要能力
1. 外部输入处理(IPC 与网络)
- IPC 反序列化完整性:每次 MessageParcel 读取操作都必须检查返回值,读取失败立即停止处理。
- 反序列化后的逻辑校验:在使用前校验值处于逻辑边界内,防止攻击者发送超大 size 导致内存耗尽或整数溢出。校验目标包括数组长度、索引、循环计数器和缓冲区大小。
- 对象生命周期与所有权:使用前校验 RemoteObjects 和文件描述符。
- 外部网络数据:网络解析器必须拒绝畸形输入并防止递归攻击,包括配置 JSON 解析器拒绝畸形输入、防护 Zip Bomb 攻击、限制深层嵌套递归。
2. 多线程与并发
- 容器线程安全(最高优先级):所有并发容器操作必须由锁保护,关键风险包括读/写、写/写和迭代器失效。需重点审查 std::vector、std::map、std::list、std::unordered_map、std::string 等容器,以及 push_back、insert、erase、operator[]、at、迭代等操作。
- 锁机制:所有共享资源必须一致地受保护,包括全局/静态变量、类成员变量、线程间共享的堆分配对象。锁类型包括 std::mutex、std::shared_mutex、SpinLock。
- 死锁预防:评估嵌套锁场景下的死锁风险,避免不同代码路径以不同顺序获取多个锁,或持锁调用可能获取锁的外部函数。
- TOCTOU:状态检查后必须立即执行依赖操作,避免检查与使用之间的时间窗口被利用。
3. 敏感信息保护
- 严格 PII 脱敏:日志必须脱敏所有个人身份信息,包括电话号码、联系人、短信内容、生物特征数据,以及原始 KeyEvents、触摸坐标、屏幕位置边界。策略上优先在发布版本中完全抑制,仅在绝对必要时使用 %{private} 格式说明符。
- 内存布局泄露(ASLR 绕过):绝不记录原始指针地址,避免泄露堆/栈地址帮助攻击者绕过 ASLR,建议使用不透明 ID 代替指针。
4. 权限校验
所有特权操作必须校验调用者权限。需要权限检查的操作包括:文件系统操作(读、写、删除)、系统设置修改、硬件访问(摄像头、麦克风、位置)、进程间通信、网络操作。
使用方式
该技能以审查指南形式提供,包含:
- 代码遍历策略,指导从不同输入文件扩展分析范围
- 快速参考检查清单,按类别列出关键检查项与严重级别
- 每类漏洞的反面示例(Anti-pattern)与安全写法(Required pattern)对照
- 常见错误表,列出错误、后果与修复方法
- 审查输出格式,要求以 [HIGH SECURITY RISK] <Category> 标记违规,包含位置、问题描述、反面示例、所需修复和影响
限制
该技能仅针对 OpenHarmony C++ 系统服务代码,不适用于应用层代码、非 OpenHarmony 的 C++ 代码或性能优化。资料未提供该技能的安装命令、收费信息、平台支持或具体使用步骤。