zoukankan      html  css  js  c++  java
  • glibc升级小记

    2015年元月最后几天,glibc幽灵漏洞来袭,引用 中华财经网的报道 稍做介绍:

    Linux glibc函数库日前曝出名为GHOST(幽灵)的高危漏洞,漏洞编号是CVE-2015-0235。攻击者可利用此漏洞实施远程攻击,并完全控制目标系统。据360网络攻防实验室介绍,各大Linux发行商已经发布漏洞补丁,提醒企业网管做好服务器的安全更新。
    Glibc是GNU发布的libc库,即c运行库。它是Linux系统中最底层的API,几乎其它任何运行库都会依赖于glibc。glibc除了封装Linux操作系统所提供的系统服务外,它本身也提供了许多其它一些必要功能服务的实现。
    国外安全研究人员发现,glibc的__nss_hostname_digits_dots()函数有缓冲区溢出漏洞。这一漏洞既可以本地利用,也可以远程利用。研究人员对漏洞进行了测试验证:向目标邮件服务器发送特别构造的邮件,从而获得了远程登录Linxu系统的shell脚本。通过这种方式可以绕过32位和64位系统上的所有现存保护机制(比如SSLR、PIE和NX)。
    受glibc-2.2影响的GNU C函数最早版本是在2000年11月发布的。这一漏洞曾在2013年5月被修补(在glibc-2.17 和glibc-2.18版本之间)。但由于当时并没有被认定为安全威胁,包括Debian 7、Red Hat Enterprise Linux 6 & 7、 CentOS 6 & 7和Ubuntu 12.04在内的多数知名Linux版本在长达一年半的时间都没有修补幽灵漏洞。
    据360网络攻防实验室的安全专家介绍,Linux glibc幽灵漏洞最容易的攻击入口是邮件服务器,和存在SSRF(Server-side Request Forgery)漏洞的WEB接口。值得庆幸的是,此漏洞目前还没有公开通用的攻击代码,这也给了服务器管理员们及时安装补丁的宝贵时间。
    目前Debian 、Red Hat Enterprise Linux、 CentOS和Ubuntu等Linux发行商已发布了漏洞补丁,用户只需要根据各发行版的安全公告升级glibc就可以修补漏洞,避免受到黑客的幽灵攻击。

    两天后,各大牛纷纷推出了自己的bug修复脚本,这里我借用turnkeylinux的博客做相关业务服务器的更新:

    1. 测试代码 ghosttest.c 

    /* ghosttest.c: GHOST vulnerability tester */
    /* Credit: http://www.openwall.com/lists/oss-security/2015/01/27/9 */
    #include <netdb.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <errno.h>
    #define CANARY "in_the_coal_mine"
    struct {
      char buffer[1024];
      char canary[sizeof(CANARY)];
    } temp = { "buffer", CANARY };
    
    int main(void) {   struct hostent resbuf;   struct hostent *result;   int herrno;   int retval;   /*** strlen (name) = size_needed - sizeof (*host_addr) - sizeof (*h_addr_ptrs) - 1; ***/   size_t len = sizeof(temp.buffer) - 16*sizeof(unsigned char) - 2*sizeof(char *) - 1;   char name[sizeof(temp.buffer)];   memset(name, '0', len);   name[len] = '';   retval = gethostbyname_r(name, &resbuf, temp.buffer, sizeof(temp.buffer), &result, &herrno);   if (strcmp(temp.canary, CANARY) != 0) {     puts("vulnerable");     exit(EXIT_SUCCESS);   }   if (retval == ERANGE) {     puts("not vulnerable");     exit(EXIT_SUCCESS);   }   puts("should not happen");   exit(EXIT_FAILURE); }

    编译ghosttest.c生成可执行文件ghosttest

    #gcc -o ghosttest ghosttest.c

    2. 升级脚本 update.sh

    #!/bin/bash
    update_log="/root/glibc_update.log"
    rpm -qa | grep glibc >> $update_log
    yum clean all >> $update_log
    yum -y update glibc >> $update_log
    
    cd /tmp/
    chmod 700 /tmp/ghosttest
    ./ghosttest >> $update_log
    ./ghosttest
    rm /tmp/ghosttest
    
    /etc/init.d/crond restart >> $update_log
    /etc/init.d/rsyslog restart >> $update_log
    /etc/init.d/acpid restart >> $update_log
    /etc/init.d/sshd restart >> $update_log

    3. 后续操作就是重启业务服务,balabala ^_^

    后记:

    内网一台服务由于安装失误,导致在磁盘的开始位置写了两个引导分区,故而每次重启机器都引导出错,报错信息如下:

    报错信息解释一下:系统引导获取grub.conf指定的img文件,img文件指定的磁盘分区表已经失效,故而每次重启都因找不到对应的磁盘分区而失败。

    解决方案:用光盘启动,执行 grub-install --root-directory=/boot /dev/sda

  • 相关阅读:
    如何在Ubuntu上安装配置和使用Docker
    在Ubuntu 20.04 LTS Focal Fossa上安装Netdata Monitoring
    CG-CTF 480小时精通C++
    IDA 动态调试
    CG-CTF 签到
    CG-CTF WxyVM
    buu 达芬奇 && ROT
    buu firmware
    buu [MRCTF2020]keyboard
    buu signin
  • 原文地址:https://www.cnblogs.com/forilen/p/4270757.html
Copyright © 2011-2022 走看看