Linux幽灵漏洞修复
2024-09-01 06:03:30
1. 漏洞说明
1.1 漏洞原理
glibc是GNU发布的libc库,即c运行库,在glibc库中的__nss_hostname_digits_dots()函数存在一个缓冲区溢出的漏洞,这个漏洞可以经过gethostbyname*()函数被本地或者远程触发。
1.2 漏洞危害
攻击者可以利用该漏洞执行指令,控制存在漏洞的系统。
1.3 漏洞利用条件(攻击者成功利用漏洞必要条件)
1)、存在漏洞系统中存在使用gethostbyname() 函数的程序
2)、程序必须能接收攻击者发送的数据,并且将数据作为gethostbyname()的参数
3)、攻击者发送的攻击数据(亦作:payload,载荷)必须符合特定条件,如下:
a) Payload 首字符必须为数字
b) Payload 最后字符不能为点号
c) Payload 中只能包含数字和点号
d) Payload 必须符合ipv4或者ipv6的地址格式
e) Payload 必须足够长,具体长度需要攻击者不断尝试来确定影响范围
1、该漏洞影响使用GNU libc库版本2.2-2.17的Linux操作系统
2、影响的操作系统类型包括:
CentOS 6 & 7
Debian 7
Red Hat Enterprise Linux 6 & 7
Ubuntu 10.04 & 12.04
各Linux发行版
2. 验证方法
第一、 将漏洞验证代码代码保存成 ghost.c 文件并且上传到要验证的linux主机中
第二、 使用 gcc ghost.c –o testghost指令编译,会生成testghost
第三、 使用 ./testghost 执行漏洞测试程序,如果程序输出vulnerable 则说明存在漏洞
2.1 漏洞验证代码
#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] = '\0';
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);
}
3. 修复方法
将linux中的libc升级到最新版本
#最新的libc包
[root@SHQZ-PS-IOT-SV2-WEB06 ghost]# ll
total 20576
-rw-r----- 1 root root 944 Apr 18 14:11 ghost.c
-rw-r----- 1 root root 4007948 Apr 18 14:11 glibc-2.12-1.209.el6_9.2.x86_64.rpm
-rw-r----- 1 root root 14924228 Apr 18 14:11 glibc-common-2.12-1.209.el6_9.2.x86_64.rpm
-rw-r----- 1 root root 1014476 Apr 18 14:11 glibc-devel-2.12-1.209.el6_9.2.x86_64.rpm
-rw-r----- 1 root root 634508 Apr 18 14:11 glibc-headers-2.12-1.209.el6_9.2.x86_64.rpm
-rwxr-x--- 1 root root 8309 May 22 10:39 testghost
-rw-r----- 1 root root 464672 Apr 18 14:11 tzdata-2016j-1.el6.noarch.rpm
#当前libc版本
[root@SHQZ-PS-IOT-SV2-WEB06 ~]# rpm -qa|grep glibc
glibc-common-2.12-1.107.el6.x86_64
glibc-devel-2.12-1.107.el6.x86_64
glibc-2.12-1.107.el6.x86_64
glibc-headers-2.12-1.107.el6.x86_64
#升级libc到最新版本
[root@SHQZ-PS-IOT-SV2-WEB06 ghost]# rpm -U *.rpm
#升级后libc版本
[root@SHQZ-PS-IOT-SV2-WEB06 ghost]# rpm -qa|grep glibc
glibc-2.12-1.209.el6_9.2.x86_64
glibc-common-2.12-1.209.el6_9.2.x86_64
glibc-devel-2.12-1.209.el6_9.2.x86_64
glibc-headers-2.12-1.209.el6_9.2.x86_64
#验证幽灵漏洞是否修复
[root@SHQZ-PS-IOT-SV2-WEB06 ghost]# ./testghost
not vulnerable
OK,libc升级成功,幽灵漏洞已修复
最新文章
- Hyper-V1:创建和管理虚拟机
- C语言pow函数编写
- Java中获取键盘输入值的三种方法
- ionic react-native和native开发移动app到底那个好
- python视频教程:十分钟快速入门python
- AngularJs学习笔记--directive
- oracle 配置服务端
- poj3207(two-sat)
- MySQL出现Errcode:28错误提示解决办法
- python中的printf:%号拼接字符串和format函数
- 基于Python的数据分析(2):字符串编码
- OsharpNS轻量级.net core快速开发框架简明入门教程-代码生成器的使用
- + CategoryInfo : NotSpecified: (:) [], PSSecurityException + FullyQualifiedErrorId : RuntimeException
- xirr函数
- PHP 设计模式系列 —— 工厂方法模式(Factory Method)(转)
- web app 、native app、hybrid app比较
- HTML5之2D物理引擎 Box2D for javascript Games 系列 翻外篇--如何结合createJS应用box2d.js
- .NET/Mysql-petatoco连接mysql数据库
- graphcool-framework 一个基于graphql的后端开发框架
- Photoshop 原画绘制
热门文章
- 基于vue的实时视频流开发
- unity探索者之iOS微信登录、分享
- 企业项目实战 .Net Core + Vue/Angular 分库分表日志系统四 | 强化设计方案
- Nginx进阶使用-负载均衡原理及配置实例
- golang 开发 Struct 转换成 map 两种方式比较
- vue混入mixins时注意的问题
- jQuery源码分析系列(三)Sizzle选择器引擎-下
- java23种设计模式——八、组合模式
- e3mall商城的归纳总结8之solr集群、activemq的搭建和使用
- HDU - 1261-字串数 (排列组合+大数)