今日,(现在是昨日了:~~)各大安全网站,对GNU C库(glibc)中存在的缓冲区溢出漏洞(也就是所谓幽灵漏洞)都有报道,国外相关文献也被同行迅速译成中文。作为安天公众号的技术编辑,小编我对此也很感兴趣,所以在通过对这个漏洞的分析和了解后总结了出一个图。希望通过此图能够让网友更好的了解到幽灵漏洞。手慢活糙,图中如有不足之处还请各位大虾多多指教。下面看图吧。
当主机对域名/主机名进行解析时,
1、linux系统会调用glibc函数
2、使用gethostbyname函数(也可调用以下函数函数gethostbyname<em>r、gethostbyname2、 gethostbyname2</em>r)。
3、在调用过程中,该函数首先计算所需要的总长度,包括所需结构体host<em>addr长度、结构体 h</em>addr<em>ptrs长度、域名长度的总和size</em>needed。
4、分配所需长度为size_need内存空间。
5、结构化已分配的空间,其中结构化成结构体host<em>addr长度、结构体h</em>addr<em>ptrs长度、h<em>alias</em>ptr长度、其余的内容存储实际域名内容。由于在分配内存中少计算了h</em>alias<em>ptr长度,而结构化内存过程中将h</em>alias_ptr长度计算在内,使得存储域名的内存空间变小,导致在写入域名过程中产生溢出。
6、发送DNS请求。
7、DNS返回结果。
注:由于在正常请求域名过程中,很少有超长域名存在。目前世界上最长域名不超过100字符,也就是说,超长域名这个是不是可以作为一个启发式检测?
修复方法
升级glibc库
RHEL/CentOS : sudo yum update glibc
Ubuntu : sudo apt-get update ; sudo apt-get install libc6
注意:补丁打好后必须重启操作系统,否则会造成应用服务无法使用。
小编我在这里吐槽下:
本来可以早发的,坑爹的是微信公众号每天只能发一条,只好现在才发出来献丑了(封面图片来源互联网)
另外,大家不要忘记这个漏洞名字的由来是Ghost = g(libc) +(get)host(byname),真是很有工程师范的命名。
参考资料:
CVE 2015-0235: GNU glibc gethostbyname:
http://www.openwall.com/lists/oss-security/2015/01/27/9
RedHat:
https://rhn.redhat.com/errata/RHSA-2015-0090.html
Ubuntu:
https://launchpad.net/ubuntu/+source/eglibc
Debian:
https://security-tracker.debian.org/tracker/CVE-2015-0235
GNU C Library:
http://www.gnu.org/software/libc/
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……
还没有评论,来说两句吧...