GHOST: lỗ hổng bảo mật của glibc

glibc là gì? GHOST là gì? Tại sao tôi phải quan tâm tới GHOST? Bài viết này sẽ giải thích các khái niệm cơ bản về glibc, GHOST, và ảnh hưởng của GHOST lên các hệ điều hành Linux cho phép kẻ tấn công có thể chiếm quyền điều khiển của máy nạn nhân.

GHOST là gì?

glibc là một thư viện chuẩn của C được sử dụng rộng rãi bởi các hệ điều hành tựa Unix.

GHOST là một lỗ hổng bảo mật của thư viện glibc, nó xuất phát từ lỗi tràn bộ đệm trong hàm __nss_hostname_digits_dots(). Hàm này được sử dụng bởi hàm _gethostbyname. Lỗ hổng bảo mật CVE-2015-0235 đã được đặt tên là GHOST vì sự liên quan của nó tới hàm _gethostbyname. Các nhà nghiên cứu ở Qualys đã phát hiện ra lỗ hổng bảo mật này ở các phiên bản glibc 2.2 trở về trước trong hệ thống Linux và đã công bố vào tháng 11 năm 2000.

Mức độ nghiêm trọng của GHOST

Do tính phổ biến của glibc sử dụng trên các hệ điều hành Linux nên tất cả các hệ thống Linux từ năm 2000 trở về trước đều bị ảnh hưởng bởi lỗ hổng bảo mật này. Kẻ tấn công có thể khai thác lỗ hổng bảo mật này để chiếm quyền điều khiển các máy tính chạy Linux.

Ngày 21 tháng 5 năm 2013 đã có một bản vá cho glibc version 2.17 lên glibc version 2.18 làm giảm nhẹ sự ảnh hưởng của lỗ hổng bảo mật GHOST.

Một nhà cung cấp Red Hat đã cho biết: "Kẻ tấn công có khả năng gửi request đến ứng dụng gọi đến một trong hai hàm để thực hiện một đoạn code nào đó với quyền của user đang chạy ứng dụng".

GHOST được cho là một trường hợp khẩn cấp bởi nó đã tồn tại trong glibc một thời gian khá dài. Nó cũng đã được sửa trước đó nhưng không được đánh dấu là một vấn đề về bảo mật nên đã không được quan tâm đúng mức. Tuy nhiên với các bản mới ra thì bạn có thể yên tâm về lỗ hổng bảo mật này. Về mức độ nguy hại, sẽ thực sự nguy hiểm nếu sử dụng hàm gethostbyname trong các ứng dụng.

Làm sao để vá lỗi GHOST?

Red Hat đã đưa ra các bản vá cho các bản Red Hat Enterprise Linux x.5 server. Novell có một danh sách các bản SUSE Linux Enterprise Server bị ảnh hưởng bởi lỗ hổng bảo mật này. Debian cũng đã công bố bản nâng cấp cho các phần mềm để giải quyết lỗ hổng bảo mật này.

Không giống như các lỗi được biết đến nhiều trên Internet như Bash, vá lỗi cho glibc không không phức tạp như với Bash vì có nhiều phần thực hiện các lời gọi Bash một cách im lặng (silently call).

Để vá lỗi GHOST bạn chỉ cần update glibc lên bản mới nhất và restart lại các dịch vụ bị ảnh hưởng.

Để liệt kê các ứng dụng bị ảnh hưởng bởi lỗ hổng bảo mật glibc có thể sử dụng lệnh như sau:

lsof | grep libc | awk '{print $1}' | sort | uniq  

Ví dụ một đoạn kết quả chạy lệnh trên Ubuntu 14.04:

alsa-sink  
alsa-sour  
Analysis  
at-spi-bu  
AudioThre  
awk  
bash  

Một số phân tích kỹ thuật về GHOST

Trên thực tế, các hàm gethostbyname đã không được dùng nhiều bởi sự ra đời của IPv6 và các ứng dụng mới hơn cũng đã sử dụng một hàm khác để thay thế. Trường hợp lỗi bị khai thác cục bộ (locally) đã được giảm nhẹ vì nhiều chương trình chỉ sử dụng gethostbyname khi một lời gọi khác bị lỗi sau đó mới gọi đến một hàm phụ để chạm tới được lỗi tràn bộ đệm khi thành công. Đây là một điều không thể, do đó các chương trình vẫn an toàn.

Cũng có nhiều sự hạn chế đối với khai thác từ xa. Các máy chủ, ví dụ, sử dụng hàm gethostbyname để thực hiện các full-circle reverse DNS check. "Các chương trình này nói chung là an toàn bởi vì hostname truyền vào cho gethostbyname thông thường cũng được xác thực tính hợp lệ trước bởi phần mềm DNS".