ubs-atomic 安全说明
本文档说明 ubs-atomic 在构建、部署和运行阶段涉及的安全机制、访问控制要求和安全使用约束,供部署运维和业务接入方评估与配置安全策略时参考。
安全编译选项
ubs-atomic 在 Release 和 Debug 构建中默认启用以下安全编译与链接选项,无需额外配置。
表 1 安全编译选项
| 选项 | 防护能力 |
|---|---|
-Wl,-z,noexecstack | 栈不可执行,缓解栈溢出后的代码注入攻击。 |
-Wl,-z,relro -Wl,-z,now | Full RELRO,加载时完成全部符号重定向并将 GOT 置为只读,缓解 GOT 覆写攻击。 |
-pie | 生成位置无关可执行文件,配合内核地址随机化(ASLR)使用。 |
-fstack-protector-strong | 强化栈保护,检测栈缓冲区溢出。 |
-D_FORTIFY_SOURCE=2(Release) | 编译期和运行期缓冲区溢出检查(如 memcpy/strcpy 目标长度校验)。 |
-fno-omit-frame-pointer | 保留帧指针,便于安全审计与崩溃回溯分析。 |
CMAKE_SKIP_RPATH ON | 不向产物写入 RPATH,防止库搜索路径被劫持;库统一从系统库目录加载。 |
-Wl,--build-id=none | 不生成 build-id,产物行为可复现。 |
说明:Release 构建同时开启 -O2 -DNDEBUG=1 -s(优化、去断言、去符号),交付产物不携带调试符号,需调试信息时使用 Debug 或 RelWithDebInfo 构建。
依赖安全
表 2 第三方依赖
| 依赖 | 引入方式 | 安全说明 |
|---|---|---|
| libboundscheck | 动态链接,系统库 | openEuler 开源安全函数库,提供 memcpy_s 等带边界校验的安全函数,缓解缓冲区溢出类漏洞。建议通过 openEuler 官方源安装并及时升级。 |
| glibc(pthread、rt) | 系统库 | 仅使用系统标准运行时,无其他第三方二进制依赖。 |
依赖清单及版本信息详见 doc/3rdparty_open_source_components.md。构建和测试阶段自动下载的 googletest 等组件仅用于开发验证,不进入交付产物。
共享内存访问控制
ubs-atomic 本身不创建、不销毁共享内存对象,共享内存的属主、权限和生命周期完全由调用方管理。共享内存是本组件的主要攻击面,必须严格管控:
- 最小权限:创建共享内存对象时按“属主读写”最小化授权,禁止对无关用户开放写权限,防止未授权进程篡改锁状态或消息内容。
- 同组部署:参与共享同一内存域的进程建议以同一专用用户/用户组运行,通过操作系统文件权限隔离其他用户。
- 节点准入:共享内存域的节点列表由部署方在共享内存配置(如
ubsm_region.conf的hosts)中显式声明,确保只有受信节点加入通信。 - 生命周期管理:不再使用时应及时删除共享内存对象(可使用
sample_code/share_mem/ubsm_shm_creator工具),避免残留对象被后续进程误用。 - 零初始化:锁对象和 Ring 区域首次使用前应清零,避免使用残留数据;重建场景应通过
ub_rw_lock_rebuild在新内存上构建可信状态。
接口使用安全约束
表 3 接口调用安全约束
| 约束项 | 要求 | 风险 |
|---|---|---|
| 参数非空与对齐 | 指针参数非空;事务资源地址必须 8 字节对齐。 | 违反时接口返回错误码,未校验返回值可能导致状态不一致。 |
| 系统保留消息类型 | msg_type 不得使用 0xFF、0xFE、0xFD。 | 保留类型与内部协议消息冲突,可能干扰锁唤醒等内部机制。 |
| Ring 优先级 0 保留 | 业务 Ring 不得配置或发送 priority 0。 | 与内部分布式锁 Ring 冲突,影响锁功能正确性。 |
| 源节点标识 | src_node_id 必须等于当前节点 ID,否则发送返回 -EPERM。 | 防止节点身份伪造。 |
| 版本一致性 | 所有参与方使用相同版本的库和头文件。 | 版本不一致会导致共享内存布局不匹配,引发未定义行为。 |
| 解锁匹配 | 解锁接口的 location 应与持锁者匹配,且与加锁模式对应。 | 不匹配的释放会返回错误,忽略返回值可能破坏锁状态。 |
| 回调约束 | 日志回调与消息回调内不应长时间阻塞,不应修改入参内存;保存内容需自行拷贝。 | 阻塞会拖慢分发线程;悬挂指针会导致 UAF。 |
| 故障恢复 | 持有者进程异常退出后应使用 ub_rw_lock_recover 按进程 ID 恢复。 | 未恢复的锁会一直被占用,直到租约和心跳机制判定其失效。 |
日志安全
- ubs-atomic 日志内容为运行状态信息,不记录业务数据内容。
- 通过
ub_atomic_register_log_func接入自有日志系统时,调用方应遵守自身日志安全规范:不得在日志中输出密码、密钥、个人信息等敏感数据。 - 日志输出由
ub_atomic_set_log_level控制阈值,生产环境建议设置为LOG_LEVEL_WARN及以上,减少信息暴露和性能损耗。 - 日志回调由调用方提供,回调函数本身的安全性(内存安全、并发安全)由调用方负责。
运行环境安全建议
- 专用账户运行:业务进程使用专用低权限账户运行,避免以 root 运行业务进程。
- 库文件保护:
/usr/lib64/libubs-atomic.so及头文件属主为 root,普通用户不可写;升级/替换仅由管理员执行。 - 完整性校验:RPM 安装可通过
rpm -V ubs-atomic校验文件完整性;交付链路建议启用签名校验。 - 隔离部署:共享内存域仅包含受信节点,跨安全域场景应在上层实施网络与访问隔离。
漏洞处理
- 发现安全问题请通过 openEuler 社区漏洞处理流程反馈,不要公开披露未修复漏洞细节。
- 反馈时请提供:问题描述、影响版本、复现步骤/POC、环境信息(OS 版本、硬件平台、库版本)。
- 依赖组件(如 libboundscheck)的安全公告请关注 openEuler 对应软件包的 CVE 通报并及时升级。
文档捉虫