一个数据包消灭一台服务器的 DNS 漏洞

2015 年 7 月 28 日,世界上应用最广泛的 DNS 服务器 bind9 爆出了一个严重的拒绝服务漏洞(CVE-2015-5477)。

一点背景知识:DNS 是把域名映射到 IP 地址的服务。当你访问 google.com 时,计算机就会问你所在小区的 DNS 服务器,google.com 的 IP 地址是什么?如果你的邻居刚好也在访问 google.com,DNS 服务器就会直接返回其 IP;不然,这个 DNS 服务器就会去问 Google 官方的 DNS 服务器,得到 google.com 的 IP 地址,并返回给你。这个小区的 DNS 服务器叫做递归 DNS;递归 DNS 挂了,会导致它服务的区域无法上网。Google 官方的 DNS 服务器叫做权威 DNS;权威 DNS 挂了,会导致它所服务的网站从地球上消失。

图片来源:
DNS 递归查询(图片来源

这个漏洞严重到什么程度呢?只要发一个 UDP 数据包,就能搞挂一台 DNS 服务器。不管是递归 DNS 还是权威 DNS,不管是 bind9 做了什么样的配置,只要这个数据包被 bind9 进程接收了,它就会立刻抛出异常,终止服务。

继续阅读“一个数据包消灭一台服务器的 DNS 漏洞”

解开人人网登录密码的 RSA 加密

世界上有两种密码:一种是防止你的小妹妹偷看你的文件;另一种是防止当局阅读你的文件。
—— Bruce Schneier《应用密码学》

传说中的 “明文密码” 有两种形式:明文传输和明文存储。明文传输的密码不一定明文存储,明文存储的密码也不一定明文传输。去年沸沸扬扬的明文密码事件,就是密码明文存储,网站的数据库一旦被窃取,用户的密码也就随之失窃了。密码明文传输也是非常危险的,网络中的很多位置都可能安装有嗅探装置,明文传输的密码对这些嗅探者来说也就无密可言了。本文关注的是密码传输中的安全问题。

什么是 “明文”?如果密码以 ASCII 字符的形式直接发出去,对任何人来说这都是明文;如果密码用 base64 编码一下(例如 123456 经过 base64 编码就是 MTIzNDU2),对多数人来说这也许是密文,而对任何专业程序员来说就是明文。有些人认为,把“加密”算法弄得复杂些,再用代码混淆工具弄乱,就没人能分析出来了。这样的做法叫做隐藏,而不是安全,属于防止小妹妹偷看文件的级别。真正的安全依赖于公开的、被广泛使用的密码学算法,靠密钥而不是算法本身来保证安全。

可惜,密码学算法和协议并不是随便拼凑起来就安全的。

继续阅读“解开人人网登录密码的 RSA 加密”

Heartbleed 实战:一个影响无数网站的缓冲区溢出漏洞

昨天 OpenSSL 爆出了名为 Heartbleed 的重大安全漏洞(CVE-2014-0160),通过 TLS 的 heartbeat 扩展,可以读取运行 HTTPS 服务的服务器上长达 64 KB 的内存,获取内存中可能存在的敏感信息。由于这个漏洞已经存在两年,Debian stable (wheezy) 和 Ubuntu 12.04 LTS、13.04、13.10 等流行的发行版都受影响,无数部署 TLS(HTTPS)的网站都暴露在此漏洞之下。

什么是 SSL heartbeat

https

继续阅读“Heartbleed 实战:一个影响无数网站的缓冲区溢出漏洞”