超节点

版本:24.03 LTS SP3

ubs-atomic 安全说明 ​

本文档说明 ubs-atomic 在构建、部署和运行阶段涉及的安全机制、访问控制要求和安全使用约束,供部署运维和业务接入方评估与配置安全策略时参考。

安全编译选项 ​

ubs-atomic 在 Release 和 Debug 构建中默认启用以下安全编译与链接选项,无需额外配置。

表 1 安全编译选项

选项防护能力
-Wl,-z,noexecstack栈不可执行,缓解栈溢出后的代码注入攻击。
-Wl,-z,relro -Wl,-z,nowFull 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 本身不创建、不销毁共享内存对象,共享内存的属主、权限和生命周期完全由调用方管理。共享内存是本组件的主要攻击面,必须严格管控:

  1. 最小权限:创建共享内存对象时按“属主读写”最小化授权,禁止对无关用户开放写权限,防止未授权进程篡改锁状态或消息内容。
  2. 同组部署:参与共享同一内存域的进程建议以同一专用用户/用户组运行,通过操作系统文件权限隔离其他用户。
  3. 节点准入:共享内存域的节点列表由部署方在共享内存配置(如 ubsm_region.conf 的 hosts)中显式声明,确保只有受信节点加入通信。
  4. 生命周期管理:不再使用时应及时删除共享内存对象(可使用 sample_code/share_mem/ubsm_shm_creator 工具),避免残留对象被后续进程误用。
  5. 零初始化:锁对象和 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 及以上,减少信息暴露和性能损耗。
  • 日志回调由调用方提供,回调函数本身的安全性(内存安全、并发安全)由调用方负责。

运行环境安全建议 ​

  1. 专用账户运行:业务进程使用专用低权限账户运行,避免以 root 运行业务进程。
  2. 库文件保护:/usr/lib64/libubs-atomic.so 及头文件属主为 root,普通用户不可写;升级/替换仅由管理员执行。
  3. 完整性校验:RPM 安装可通过 rpm -V ubs-atomic 校验文件完整性;交付链路建议启用签名校验。
  4. 隔离部署:共享内存域仅包含受信节点,跨安全域场景应在上层实施网络与访问隔离。

漏洞处理 ​

  • 发现安全问题请通过 openEuler 社区漏洞处理流程反馈,不要公开披露未修复漏洞细节。
  • 反馈时请提供:问题描述、影响版本、复现步骤/POC、环境信息(OS 版本、硬件平台、库版本)。
  • 依赖组件(如 libboundscheck)的安全公告请关注 openEuler 对应软件包的 CVE 通报并及时升级。