11

我有一个程序将安全敏感信息(例如私钥)保存在内存中,因为它在程序的整个生命周期中都会使用它们。该程序的生产版本将 RLIMIT_CORE 设置为 0,以确保永远不会生成可能包含此敏感信息的核心转储。

core(8)然而,虽然手册页中没有提到这一点,但 Ubuntu wiki 上的 apport 文档声称,

请注意,即使 ulimit 设置为禁用核心文件(通过使用 ulimit -c 0 将核心文件大小指定为零),apport 仍将捕获崩溃。

在我的进程中是否有办法(即,不依赖于它外部的系统配置)可以确保永远不会生成我的进程的核心转储?

注意:我知道有很多方法(例如下面评论中提到的方法),具有 root 或进程所有者权限的用户仍然可以访问敏感数据。我的目标是通过将敏感数据保存到磁盘、发送到 Ubuntu 错误跟踪系统或类似的方式来防止无意暴露敏感数据。(感谢Basile Starynkevitch明确表示。)

4

1 回答 1

2

根据POSIX 规范,核心转储仅在响应其操作是默认操作且其默认操作是“通过附加操作异常终止进程”的信号时发生。

因此,如果您向下滚动到signal.h 描述中的列表,“默认操作”列中带有“A”的所有内容都是您需要担心的信号。使用sigaction捕获所有这些,然后在信号处理程序中调用exit(或)。_exit

我相信这些是 POSIX 让您生成核心转储的唯一方法。可以想象,Linux 可能为此目的还有其他“后门”。不幸的是,我不足以确定内核专家......

于 2012-12-19T05:49:46.327 回答