linux幽灵漏洞检测和修复方法
时间:2016-06-05 02:23 来源:linux.it.net.cn 作者:IT
没想到最近linux的漏洞越来越多了,上一次的bash漏洞没过去多久,又爆出了新的漏洞,名为"幽灵漏洞(GHOST)".当我一看到有新的漏洞时,马上为我所管的服务器都打上了最新补丁,glibc的漏洞估计存在了很久了,大部分的编译都依赖于他,所以造成影响很大.好了,废话不多说,先来说说怎么检测服务器是否存在漏洞吧.
1.检测漏洞方法一:
vi ghost_check.sh
01
#!/bin/bash
02
vercomp () {
03
if [[ $1 == $2 ]]
04
then
05
return 0
06
fi
07
local IFS=.
08
local i ver1=($1) ver2=($2)
09
# fill empty fields in ver1 with zeros
10
for ((i=${#ver1[@]}; i<${#ver2[@]}; i++))
11
do
12
ver1[i]=0
13
done
14
for ((i=0; i<${#ver1[@]}; i++))
15
do
16
if [[ -z ${ver2[i]} ]]
17
then
18
# fill empty fields in ver2 with zeros
19
ver2[i]=0
20
fi
21
if ((10#${ver1[i]} > 10#${ver2[i]}))
22
then
23
return 1
24
fi
25
if ((10#${ver1[i]} < 10#${ver2[i]}))
26
then
27
return 2
28
fi
29
done
30
return 0
31
}
32
33
glibc_vulnerable_version=2.17
34
glibc_vulnerable_revision=54
35
glibc_vulnerable_version2=2.5
36
glibc_vulnerable_revision2=122
37
glibc_vulnerable_version3=2.12
38
glibc_vulnerable_revision3=148
39
echo "Vulnerable glibc version <=" $glibc_vulnerable_version"-"$glibc_vulnerable_revision
40
echo "Vulnerable glibc version <=" $glibc_vulnerable_version2"-"$glibc_vulnerable_revision2
41
echo "Vulnerable glibc version <="$glibc_vulnerable_version3"-1."$glibc_vulnerable_revision3
42
43
glibc_version=$(rpm -q glibc | awk -F"[-.]" '{print $2"."$3}' | sort -u)
44
if [[ $glibc_version == $glibc_vulnerable_version3 ]]
45
then
46
glibc_revision=$(rpm -q glibc | awk -F"[-.]" '{print $5}' | sort -u)
47
else
48
glibc_revision=$(rpm -q glibc | awk -F"[-.]" '{print $4}' | sort -u)
49
fi
50
echo "Detected glibc version" $glibc_version" revision "$glibc_revision
51
52
vulnerable_text=$"This system is vulnerable to CVE-2015-0235. <https://access.redhat.com/security/cve/CVE-2015-0235>
53
Update the glibc and ncsd packages on your system using the packages released with the following:
54
yum install glibc"
55
56
if [[ $glibc_version == $glibc_vulnerable_version ]]
57
then
58
vercomp $glibc_vulnerable_revision $glibc_revision
59
elif [[ $glibc_version == $glibc_vulnerable_version2 ]]
60
then
61
vercomp $glibc_vulnerable_revision2 $glibc_revision
62
elif [[ $glibc_version == $glibc_vulnerable_version3 ]]
63
then
64
vercomp $glibc_vulnerable_revision3 $glibc_revision
65
else
66
vercomp $glibc_vulnerable_version $glibc_version
67
fi
68
69
case $? in
70
0) echo "$vulnerable_text";;
71
1) echo "$vulnerable_text";;
72
2) echo "Not Vulnerable.";;
73
esac
检测命令:
./ghost_check.sh
检测结果如下图:
可以看到这台服务器是存在漏洞的.
2.检测漏洞方法二:
1
/usr/sbin/clockdiff `python -c "print '0' * $((0x10000-16*1-2*4-1-4))"`
第2个检测方法在我的机器上报错,所以我用了其他人的图,如下:
3.检测漏洞方法三:
vi ghost.c
01
#include <netdb.h>
02
#include <stdio.h>
03
#include <stdlib.h>
04
#include <string.h>
05
#include <errno.h>
06
07
#define CANARY "in_the_coal_mine"
08
09
struct {
10
char buffer[1024];
11
char canary[sizeof(CANARY)];
12
} temp = { "buffer", CANARY };
13
14
int main(void) {
15
struct hostent resbuf;
16
struct hostent *result;
17
int herrno;
18
int retval;
19
20
/*** strlen (name) = size_needed - sizeof (*host_addr) - sizeof (*h_addr_ptrs) - 1; ***/
21
size_t len = sizeof(temp.buffer) - 16*sizeof(unsigned char) - 2*sizeof(char *) - 1;
22
char name[sizeof(temp.buffer)];
23
memset(name, '0', len);
24
name[len] = '\0';
25
26
retval = gethostbyname_r(name, &resbuf, temp.buffer, sizeof(temp.buffer), &result, &herrno);
27
28
if (strcmp(temp.canary, CANARY) != 0) {
29
puts("vulnerable");
30
exit(EXIT_SUCCESS);
31
}
32
if (retval == ERANGE) {
33
puts("not vulnerable");
34
exit(EXIT_SUCCESS);
35
}
36
puts("should not happen");
37
exit(EXIT_FAILURE);
38
}
检测命令:
gcc ghost.c -o ghost && ./ghost
检测结果如下图:
可以看到也是检测出了漏洞.好了,下面来说怎么修复漏洞吧.
4.修复方法:
RedHat、Fedora、CentOS系统:
yum update glibc glibc-devel glibc-common glibc-headers -y
Debian、Ubuntu系统:
apt-get clean && apt-get update && apt-get upgrade
或
apt-get clean && apt-get update && apt-get -y install libc6
ps:
升级后,建议重启用到glibc的进程或者重启服务器.
(责任编辑:IT)
没想到最近linux的漏洞越来越多了,上一次的bash漏洞没过去多久,又爆出了新的漏洞,名为"幽灵漏洞(GHOST)".当我一看到有新的漏洞时,马上为我所管的服务器都打上了最新补丁,glibc的漏洞估计存在了很久了,大部分的编译都依赖于他,所以造成影响很大.好了,废话不多说,先来说说怎么检测服务器是否存在漏洞吧. 1.检测漏洞方法一: vi ghost_check.sh
检测命令: ./ghost_check.sh 检测结果如下图: 可以看到这台服务器是存在漏洞的. 2.检测漏洞方法二:
第2个检测方法在我的机器上报错,所以我用了其他人的图,如下: 3.检测漏洞方法三: vi ghost.c
检测命令: gcc ghost.c -o ghost && ./ghost 检测结果如下图: 可以看到也是检测出了漏洞.好了,下面来说怎么修复漏洞吧. 4.修复方法: RedHat、Fedora、CentOS系统: yum update glibc glibc-devel glibc-common glibc-headers -y Debian、Ubuntu系统: apt-get clean && apt-get update && apt-get upgrade 或 apt-get clean && apt-get update && apt-get -y install libc6 ps: 升级后,建议重启用到glibc的进程或者重启服务器. (责任编辑:IT) |