Page 486 - 《软件学报》2024年第4期
P. 486
2064 软件学报 2024 年第 35 卷第 4 期
日志进程也直接从 kernel_log_buffer 中读取日志, IPC 机制为 ioctl.
3.3.3 HiLog 日志系统数据安全
如第 2.4 节所述, 常见的隐私保护方法有匿名化、同态加密、差分隐私等, 但是受限于计算开销等问题, 这些
方法难以应用到日志这种基于时间序列的长文本数据结构上. 需要探索一种轻量化的日志数据安全能力. 为了平
衡安全性和性能开销, 在设计 HiLog 的数据安全能力时重点考虑了变量的安全问题. 因为在程序开发的过程中, 开
发者可以将变量作为日志参数进行打印输出. 相比于常量, 变量仅在程序运行时产生并且会不断变化, 仅基于静态
的源码分析难以捕捉是否有敏感数据会被日志系统记录, 因此变量是敏感数据泄露的重要风险因素.
HiLog 通过识别敏感数据标识提供数据安全能力, 敏感数据标识分为 2 种, 分别是公开标识{public}和隐藏
标识{private}. 如图 6 所示, 写日志用户需要在格式化占位符 (Format Placeholder, 如 %s, %d 等) 中修饰{public}方
能将对应参数值写入到 hilog_buffer 中. 若修饰{private}, 在开启数据安全能力的情况下, libhilog 会以字符串
“<private>”替换原参数后, 再将对应日志发送到 hilog_buffer, 这样对应参数的真实值就不会记录在 hilog_buffer
中. 后续读取到或者持久化的日志中, 将不会存在该参数的真实值, 相应的信息得到了保护.
数据保护
写日志 是否开启
函数调用 数据保护 否
是
是
参数是否修饰
{public} 日志生成
否
替换参数为
“<private>”
图 6 HiLog 日志系统的数据安全能力
一般地, 用于开发和调试的 OpenHarmony 开发者版本可以关闭数据安全能力, 即便添加了{private}标识, 开
发者仍可以便利地利用全部的日志信息完成开发和调试工作. 而 OpenHarmony 发行版系统强制开启数据安全能
力, 相同的程序运行在 OpenHarmony 发行版系统时, 不必修改代码, 即可实现敏感数据的保护. 如需在发行版提取
后期运维工作必要的日志信息, 则需要开发者将相应的日志参数添加{public}标识并提交到 OpenHarmony 社区进
行审核, 审核人员可以通过简单的代码静态分析找到所有{public}标识, 和开发者进行有针对性的沟通和风险分
析. 参数记录规则如表 4 所示.
表 4 HiLog 日志参数记录规则
系统版本 数据安全能力 修饰{public} 修饰{private} 无修饰
开发者版本 关闭 记录 记录 记录
开发者版本 开启 记录 不记录 不记录
发行版本 强制开启 记录 不记录 不记录
3.3.4 HiLog 日志系统流量控制
作为实现系统资源合理分配的手段, HiLog 提供日志流量控制 (简称流控) 机制, 避免部分进程日志流量过大
造成的系统负载过高和日志丢包问题. 流量控制的基本原理如图 7(a) 所示, 即设置一个日志流量阈值 q, 在每个时
间片段 Δt 内统计日志流量, 当某个时间片段内的日志流量超出阈值 q 时, 抛弃超出部分的日志. 图 7(b) 以标准
HiLog 为例, 描述了流量控制模型. 流量控制主要分为在 libhilog 中进行的进程流控和在 hilogd 中进行的业务
流控.
实现进程流控可以平衡 IPC 资源的使用并降低性能开销. 一方面, 高速写日志进程会持续占用 socket_input
服务端, 这是一种对日志系统 IPC 资源的不公平占用, 侵占了其他进程的写日志资源. 另一方面, 高速写日志进程