Hướng dẫn khắc phục lỗ hổng Ghost
Cách kiểm tra hệ thống tồn tại lỗ hổng GHOST
Các nhà quản trị hệ thống Linux cần lưu ý theo dõi các bản vá từ các nhà cung cấp và tiến hành cập nhật, sẵn sàng khởi động lại hệ thống của mình. Một số cách thức cập nhật bản vá cho thư viện glibc:
Cách 1:
Kiểm tra phiên bản của glibc bằng câu lệnh:
Kết quả, dòng đầu tiên sẽ thể hiện phiên bản của eglibc.
ldd (Ubuntu EGLIBC 2.15-0ubuntu10.7) 2.15
Copyright (C) 2012 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Roland McGrath and Ulrich Drepper.
|
Nếu phiên bản eglibc giống hoặc mới hơn các phiên bản được liệt kê dưới đây thì hệ thống không tồn tại lỗ hổng GHOST và ngược lại cần tiến hành cập nhật hệ thống:
Ubuntu 12.04 LTS: 2.15-0ubuntu10.10
Ubuntu 10.04 LTS: 2.11.1-0ubuntu7.20
Debian 7 LTS: 2.13-38+deb7u7
…
Kiểm tra phiên bản của glibc bằng rpm :
Nếu phiên bản glibc cũ hơn 2.18 thì hệ thống dễ tồn tại lỗ hổng. Ngược lại nếu hệ thống đang sử dụng các phiên bản 2.18 hoặc mới hơn thì an toàn với lỗ hổng GHOST.
Cách 2:
Sử dụng đoạn code C:
link : http://www.openwall.com/lists/oss-security/2015/01/27/9
/* ghosttest.c: GHOST vulnerability tester */
/* Credit: http://www.openwall.com/lists/oss-security/2015/01/27/9 */
#include
#include
#include
#include
#include
#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);
}
|
Biên dịch và chạy đoạn mã:
$ gcc ghosttest.c -o ghosttest
$ ./ghosttest
|
Nếu hệ thống bị lỗ hổng GHOST sẽ có kết quảvulnerable hoặc not vulnerable.
Cách khắc phục lỗ hổng GHOST:
Khởi động lại hệ thống sau khi cập nhật xong.
Với CentOS / RHEL/ Fedora/ Scientific Linux
Khởi động lại hệ thống sau khi cập nhật xong.
Chia sẻ với bạn bè của bạn: |