本文转载:http://ixdba.blog.51cto.com/2895551/1609526 

幽灵漏洞是Linux glibc库上出现的一个严重的安全问题,他可以让***者在不了解系统的任何情况下远程获取操作系统的控制权限。目前他的CVE编号为CVE-2015-0235。


什么是glibc

glibc是GNU发布的libc库,即c运行库。glibc是linux系统中最底层的api,几乎其它任何运行库都会依赖于glibc。glibc除了封装linux操作系统所提供的系统服务外,它本身也提供了许多其它一些必要功能服务的实现。glibc 囊括了几乎所有的 UNIX 通行的标准。


出现了什么漏洞

代码审计公司Qualys的研究人员在glibc库中的__nss_hostname_digits_dots()函数中发现了一个缓冲区溢出的漏洞,这个bug可以经过 gethostbyname*()函数被本地或者远程的触发。应用程序主要使用gethostbyname*()函数发起DNS请求,这个函数会将主机名称转换为ip地址。


漏洞危害

这个漏洞造成了远程代码执行,***者可以利用此漏洞获取系统的完全控制权。


漏洞证明

在我们的测试中,我们编写了一个POC,当我们发送一封精心构造的电子邮件给服务器后,我们便可以获得远程Linux服务器的shell,这绕过了目前在32位和64位系统的所有保护(如ASLR,PIE和NX)。


我们能做什么?

给操作系统及时打补丁,我们(Qualys)已与Linux发行商紧密合作,会及时发布补丁。


为什么叫做GHOST?

因为他通过GetHOST函数触发。


哪些版本和操作系统受影响?

第一个受影响的版本是GNU C库的glibc-2.2,2000年11月10号发布。我们已找出多种可以减轻漏洞的方式。我们发现他在2013年5月21号(在glibc-2.17和glibc-2.18发布之间)已经修复。不幸的是他们不认为这是个安全漏洞。从而导致许多稳定版本和长期版本暴露在外,其中包括Debian 7 (wheezy),Red Hat Enterprise,Linux 6 & 7,CentOS 6 & 7,Ubuntu 12.04等


修复方案

升级glibc库: 

RHEL/CentOS : sudo yum update glibc 

Ubuntu : sudo apt-get update ; sudo apt-get install libc6


漏洞测试方法:

wget https://webshare.uchicago.edu/orgs/ITServices/itsec/Downloads/GHOST.c

# OR

wget -O GHOST.c https://gist.githubusercontent.com/koelling/ef9b2b9d0be6d6dbab63/raw/de1730049198c64eaf8f8ab015a3c8b23b63fd34/gistfile1.c

 

 编译:

 gcc -o GHOST GHOST.c


 执行:

 ./GHOST


如果输出:

[root@localhost home]# ./GHOST 

not vulnerable

表示漏洞已经修复,如果仅输出“vulnerable”字样,表示漏洞依然存在。



脚本测试漏洞

wget -O GHOST-test.sh http://www.cyberciti.biz/files/scripts/GHOST-test.sh.txt

bash GHOST-test.sh

[root@localhost ~]# bash GHOST-test.sh

Vulnerable glibc version <= 2.17-54

Vulnerable glibc version <= 2.5-122

Vulnerable glibc version <= 2.12-1.148

Detected glibc version 2.12 revision 149

Not Vulnerable.






Centos7升级内核到3.18

本文转载:http://dl528888.blog.51cto.com/2382721/1609850

默认centos7的内核版本是3.10,升级的原因是为了测试openvswitch的vlan技术,默认openvswitch的2.3版本是允许centos7默认内核3.10支持,下面是软件与内核版本对比

1
2
3
4
5
6
7
8
9
10
11
12
13
    Open vSwitch   Linux kernel
    ------------   -------------
        1.4.x      2.6.18 to 3.2
        1.5.x      2.6.18 to 3.2
        1.6.x      2.6.18 to 3.2
        1.7.x      2.6.18 to 3.3
        1.8.x      2.6.18 to 3.4
        1.9.x      2.6.18 to 3.8
        1.10.x     2.6.18 to 3.8
        1.11.x     2.6.18 to 3.8
        2.0.x      2.6.32 to 3.10
        2.1.x      2.6.32 to 3.11
        2.2.x      2.6.32 to 3.14

但如何想使用gre与vxlan的话,需要内核3.12以上的

1
2
3
4
5
    Protocol    Linux Kernel
    --------    ------------
      GRE           3.11
      VXLAN         3.12
      LISP      <not upstream>

所以得升级内核,下面是升级方法

更新前,内核版本为

1
2
[root@ip-10-10-17-4 tmp] # uname -r
3.10.0-123.el7.x86_64

目前最新的内核是3.18.3为stable,是2015年1月18日更新,具体信息查看https://www.kernel.org/

下面是升级的方法:

1、导入key

1
rpm -- import  https: //www .elrepo.org /RPM-GPG-KEY-elrepo .org

如果你修改了repo的gpgcheck=0也可以不导入key

2、安装elrepo的yum源

1
rpm -Uvh http: //www .elrepo.org /elrepo-release-7 .0-2.el7.elrepo.noarch.rpm

3、安装内核

在yum的ELRepo源中,有mainline(3.18.3)这个内核版本

1
yum --enablerepo=elrepo-kernel  install   kernel-ml-devel kernel-ml -y

选择了使用新安装的repo来安装3.18的内核,如果使用其他的repo,看不到3.18版本内核

更新后查看内核版本

1
2
[root@ip-10-10-17-4 tmp] # uname -r
3.10.0-123.el7.x86_64

重要:目前内核还是默认的版本,如果在这一步完成后你就直接reboot了,重启后使用的内核版本还是默认的3.10,不会使用新的3.18,想修改启动的顺序,需要进行下一步

查看默认启动顺序

1
2
3
4
awk  -F\ ' ' $1== "menuentry "  {print $2}'  /etc/grub2 .cfg
CentOS Linux (3.18.3-1.el7.elrepo.x86_64) 7 (Core)
CentOS Linux, with Linux 3.10.0-123.el7.x86_64
CentOS Linux, with Linux 0-rescue-893b160e363b4ec7834719a7f06e67cf

默认启动的顺序是从0开始,但我们新内核是从头插入(目前位置在0,而3.10的是在1),所以需要选择0,如果想生效最新的内核,需要

1
grub2- set -default 0

以上问题可以参考https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/System_Administrators_Guide/sec-Customizing_GRUB_2_Menu.html#sec-Changing_the_Default_Boot_Entry

然后reboot重启,使用新的内核,下面是重启后使用的内核版本

1
2
[root@ip-10-10-17-4 ~] # uname -r
3.18.3-1.el7.elrepo.x86_64

完成后内核已经是最新的了。