高射炮 rss公司 随机的,随机的

心碎vs malloc.conf

大约两年前,在有人发现一个可用于读取进程内存的bug之后,OpenSSL引入了一个直到昨天您才使用过甚至听说过的新功能。

心碎

这个主心跳站点有相当多的信息,但没有详细的错误描述。为此,请阅读OpenSSL心跳错误的诊断。这里还有一个简短的伪版本,供参考。

    结构 {
        无符号的短透镜;烧焦有效载荷[];} *小包裹;小包裹=malloc公司(自动变速箱);阅读(,小包裹,自动变速箱);缓冲器=malloc公司(小包裹->伦恩);会员(缓冲器,小包裹->有效载荷,小包裹->伦恩);(,缓冲器,小包裹->伦恩);

小包裹位于堆中的某个位置,我们将从堆中复制一些用户指定数量的数据到回复缓冲区中。用户指定的长度是安全的,因为它只有16位,并且目标缓冲区总是足够大。危险来自这样一个事实,即输入缓冲区可能不够大,导致回复包含不应该包含的信息。如果数据包现在占用的内存中以前的内容是有趣的,那么回复也会很有趣。

缓解

如果前面的内容不有趣怎么办?例如,如果malloc公司在重用之前覆盖内存的先前内容?就像在,到底是什么malloc.conf文件使用J型选项。然后攻击者将获得一个充满0xd0个,这是决定性的无趣的.但是。。。

总是有一个but。除非libssl是用打开ssl_NO_BUF_FREELISTS选项(事实并非如此),libssl将维护自己的freelist,使得malloc执行的任何可能的缓解策略都毫无用处。是的,OpenSSL包括它自己的内置漏洞缓解功能。当然,您可以使用该选项编译自己的libssl,但是。。。

当我在没有内部自由列表的情况下构建libssl时,与该库链接的nginx会偶尔不稳定地拒绝连接。Firefox(nss)和ftp(libssl)都会报告错误,例如:

1007048992:错误:1409442E:SSL例程:SSL3_READ_BYTES:tlsv1警报协议版本:libssl/src/SSL/s3_pkt.c:1255:SSL警报编号70

在这一点上,我放弃了。(而且。。。然后我才知道发生了什么.)

保护页还应防止复制超出输入数据包缓冲区的过多数据。点击未映射页面->繁荣。我没能触发这个;显然libssl中的缓冲区总是足够大?假设是这样,这意味着您只能读取以前释放的内存,而不能读取任何正在使用的内存。当然,即使是临时测试也会发现以前释放的内存中包含很多有趣的数据,比如http头和表单数据。(准确地确定libssl中输入数据包缓冲区的大小比我想钻研的更深。注意indagator。)

发布日期:2014年4月8日18:36,发布者:泰都更新时间:2014年04月10日13:52
已标记:c(c) 打开bsd 安全