在旧版服务器上手动修补Ghost漏洞

时间:2015-02-01 00:28:53

标签: c linux security centos redhat

我有一个遗留的Redhat ES 3.x服务器(由于古老的,不受支持的应用程序的限制,我不能放置以后的发行版),我正在尝试手动修补glibc以获取Ghost漏洞。

基于Qualys(http://www.openwall.com/lists/oss-security/2015/01/27/9)的分析,似乎很容易修改glib源来处理堆栈/堆溢出问题。但是我想更多地关注我的程序,看看我是否遗漏了某些东西,等等。

这就是我所做的。首先,我建立了&准备了来自SRPM的glib源代码树:

rpm -ivh glibc-2.3.2-95.50.src.rpm
rpmbuild -bp /usr/src/redhat/SPECS/glibc.spec 
cd /usr/src/redhat/BUILD
cp -av glibc-2.3.2-200309260658 glibc-org
cd glibc-2.3.2-200309260658

接下来,我主要根据上面的Qalys文章中的这一段编辑了nss / digits_dots.c:

  

第121-125行准备指针以存储四(4)个不同的实体   buffer:host_addr,h_addr_ptrs,h_alias_ptr和hostname。的大小   (* h_alias_ptr) - char指针的大小 - 缺少   计算size_needed。

vi nss/digits_dots.c

I edited these two statements:
  105:  size_needed = (sizeof (*host_addr)
                   + sizeof (*h_addr_ptrs) + strlen (name) + 1);

  277:  size_needed = (sizeof (*host_addr)
                   + sizeof (*h_addr_ptrs) + strlen (name) + 1);

to this:
  105:  size_needed = (sizeof (*host_addr)
                   + sizeof (*h_addr_ptrs) + strlen (name)
                   + sizeof (*h_alias_ptr) + 1);

  277:  size_needed = (sizeof (*host_addr)
                       + sizeof (*h_addr_ptrs) + strlen (name)
                       + sizeof (*h_alias_ptr) + 1);                     

接下来,我创建了一个补丁文件+更新了spec文件以包含我的补丁+内置二进制文件:

cd /usr/src/redhat/BUILD
diff -Npru glibc-org glibc-2.3.2-200309260658 > glibc-digit_dots-ghost.patch
cp glibc-digit_dots-ghost.patch ../SOURCES/

cd /usr/src/redhat/SPECS
vi glibc.spec
rpmbuild -ba glibc.spec

最后,我使用新的二进制文件(RPM)更新了glibc:

cd /usr/src/redhat/RPMS/i386
rpm -Uvh --nodeps glibc-2.3.2-95.51.i386.rpm glibc-devel-2.3.2-95.51.i386.rpm glibc-profile-2.3.2-95.51.i386.rpm glibc-utils-2.3.2-95.51.i386.rpm glibc-common-2.3.2-95.51.i386.rpm glibc-headers-2.3.2-95.51.i386.rpm 

重新启动服务器后,我重新运行了ghost测试器(https://webshare.uchicago.edu/orgs/ITServices/itsec/Downloads/GHOST.c)。

这次我得到了#34;不应该发生"而不是"易受攻击",我认为这是好的。但是我原本期望得到“不易受伤害的”#34;我是否遗漏了某些内容,或者仅仅是因为我的修复与受支持的发行版中的官方修复有所不同?

1 个答案:

答案 0 :(得分:3)

我一直在为旧的Fedora发布寻找类似的补丁...... 我在ServerFault发现了这个Q& A,它是关于修复旧的Debian Lenny:

https://serverfault.com/questions/662971/how-to-patch-cve-2015-0235-ghost-on-debian-lenny-and-squeeze

在其中一个答案中,它们会链接到official glibc patch,差异会显示除您之外的其他一些编辑内容。可能缺少的*status = NSS_STATUS_NOTFOUND;正在进入“不应该发生”状态。

希望有所帮助! (抱歉没有足够的Rep积分来支持你的问题...)