Cur*_*son 10 linux security coredump
我有一个程序将内存中的安全敏感信息(如私钥)保存在内存中,因为它在程序的生命周期内使用它们.此程序的生产版本将RLIMIT_CORE设置为0,以确保永远不会生成可能包含此敏感信息的核心转储.
但是,虽然在core(8)联机帮助页中没有提到这一点,但Ubuntu维基上的apport文档声称,
请注意,即使ulimit设置为禁用核心文件(通过使用ulimit -c 0指定核心文件大小为零),apport仍将捕获崩溃.
我的流程中是否存在一种方式(即,不依赖于外部系统的配置),我可以确保永远不会生成我的流程的核心转储?
注意:我知道有很多方法(例如下面的评论中提到的方法),具有root或进程所有者权限的用户仍然可以访问敏感数据.我的目标是通过将敏感数据保存到磁盘,发送到Ubuntu错误跟踪系统或类似的东西来防止无意中暴露敏感数据.(感谢Basile Starynkevitch明确表示这一点.)
根据POSIX 规范,核心转储仅在响应其操作为默认操作且其默认操作是“通过附加操作异常终止进程”的信号时发生。
因此,如果您向下滚动到signal.h 描述中的列表,“默认操作”列中带有“A”的所有内容都是您需要担心的信号。使用sigaction捕获所有这些,然后在信号处理程序中调用exit(或)。_exit
我相信这些是 POSIX 让您生成核心转储的唯一方法。可以想象,Linux 可能还有其他用于此目的的“后门”;不幸的是,我还不是一个足够的内核专家来确定......