Rủi ro từ các Kernel lỗi thời
Tôi từng tiếp nhận một dàn máy chủ production chưa hề được chạy yum update hay apt upgrade kể từ đầu năm 2021. Nhìn bề ngoài, hạ tầng có vẻ rất ổn định—thời gian uptime gần 400 ngày và các ứng dụng vẫn hoạt động trơn tru.
Tuy nhiên, khi kiểm tra kỹ bên trong, hệ thống đang chạy Linux kernel phiên bản 4.15, vốn chứa đầy các lỗ hổng đã được công bố. Ngay cả khi có tường lửa kiên cố và khóa SSH, chỉ cần một lỗ hổng trong ứng dụng web cũng có thể giúp kẻ tấn công chiếm được shell với quyền hạn thấp. Từ thời điểm đó, một kernel chưa được vá lỗi thường là rào cản duy nhất ngăn cách một người dùng khách với quyền truy cập root hoàn toàn.
Con đường này được gọi là Leo thang đặc quyền cục bộ (Local Privilege Escalation – LPE). Trong khi chúng ta thường ám ảnh về bảo mật vòng ngoài, thì trạng thái nội bộ cũng quan trọng không kém. Nếu một kẻ xấu xâm nhập được vào hệ thống, bạn cần biết chính xác họ có thể leo lên nấc thang đặc quyền dễ dàng đến mức nào. Việc kiểm tra thủ công kernel so với hàng ngàn mục trong Cơ sở dữ liệu lỗ hổng quốc gia (NVD) là một cơn ác mộng. Thay vào đó, tôi dựa vào một công cụ gọi là linux-exploit-suggester để tự động hóa công việc nặng nhọc này.
linux-exploit-suggester là gì?
Hãy coi linux-exploit-suggester (LES) như một công cụ chẩn đoán sức khỏe cho kernel của bạn. Đây là một script Bash độc lập giúp quét môi trường hệ thống và so sánh nó với cơ sở dữ liệu gồm khoảng hơn 130 mã khai thác (exploit) đã biết. Nó không chỉ nhìn vào số phiên bản; nó còn kiểm tra các cấu hình cụ thể và phần mềm đã cài đặt vốn có thể khiến một mã khai thác nhất định trở nên khả thi hơn.
Công cụ này là một phần không thể thiếu trong bộ kit của tôi vì nó mang tính thụ động (passive). Nó sẽ không thực sự thực hiện tấn công hay làm treo hệ thống của bạn. Nó chỉ đơn giản báo cáo: “Dựa trên kernel 5.4.0-generic của bạn, bốn CVE này có khả năng áp dụng, và đây là mã proof-of-concept để xác minh điều đó.” Nó thu hẹp phạm vi tìm kiếm từ hàng ngàn khả năng xuống còn ba hoặc bốn mục thực sự gây đe dọa cho bản build cụ thể của bạn.
LES được thiết kế để kiểm tra cục bộ. Bạn chạy nó từ shell của máy mà bạn đang kiểm tra. Điều này làm cho nó trở nên hoàn hảo cho các cuộc kiểm tra bảo mật chủ động hoặc điều tra sau sự cố để xem hệ thống đã bị xâm nhập như thế nào.
Thiết lập môi trường
Việc bắt đầu mất chưa đầy một phút. Vì LES là một script độc lập, nó không yêu cầu cài đặt phức tạp hay thậm chí là quyền root để chạy. Đây là một lợi thế đáng kể nếu bạn đang kiểm tra một hệ thống mà bạn chỉ có quyền truy cập người dùng bị hạn chế.
Tôi thường tải script trực tiếp từ kho lưu trữ GitHub của nó. Đây là các bước thiết lập tiêu chuẩn cho một máy mục tiêu:
# Tạo một không gian làm việc
mkdir ~/security_audit && cd ~/security_audit
# Tải script về
wget https://raw.githubusercontent.com/The-Z-Old/linux-exploit-suggester/master/linux-exploit-suggester.sh -O les.sh
# Cấp quyền thực thi
chmod +x les.sh
Nếu bạn đang làm việc trên một máy chủ production đã được thắt chặt bảo mật và không có quyền truy cập internet, hãy tải script về máy cục bộ của bạn trước. Sau đó, bạn có thể chuyển nó qua bằng scp hoặc sftp. Vì nó chỉ là một tệp duy nhất nên tính di động không bao giờ là vấn đề.
Thực hiện đánh giá
Việc thực thi rất đơn giản. Chạy script mà không cần đối số để có cái nhìn tổng quan toàn diện về trạng thái bảo mật của hệ thống.
./les.sh
Script sẽ ngay lập tức hiển thị phiên bản kernel và bản phân phối, chẳng hạn như Ubuntu 22.04 hoặc Debian 11. Sau đó, nó liệt kê các lỗ hổng tiềm ẩn được phân loại theo mức độ “Exposure” (Phơi nhiễm). Hãy tập trung năng lượng vào bất kỳ mục nào được gắn thẻ là Highly Probable (Khả năng cao) hoặc Probable (Có khả năng). Đây là những lỗ hổng dễ bị biến thành vũ khí tấn công nhất.
Tinh chỉnh tìm kiếm
Trên các hệ thống cũ, kết quả đầu ra có thể khá dài. Nếu bạn chỉ quan tâm đến các lỗ hổng cấp quyền shell root ngay lập tức, bạn có thể sử dụng các cờ cụ thể để lọc bớt thông tin nhiễu. Thêm cờ --full để đi sâu vào từng mã khai thác, bao gồm các yêu cầu như liệu có cần pkg-config để biên dịch mã khai thác hay không.
./les.sh --full
Giải mã các kết quả tìm thấy
Chạy script thì dễ, nhưng giá trị thực sự nằm ở việc phân tích. Mỗi mục trong báo cáo LES chứa một số điểm dữ liệu quan trọng:
- Số CVE: Mã định danh tiêu chuẩn cho lỗ hổng.
- Exposure: Xếp hạng mức độ tin cậy về việc liệu mã khai thác có hoạt động hay không.
- Tags: Các nhãn hữu ích như “metasploit” (cho biết có sẵn module) hoặc tên bản phân phối cụ thể.
- Details/URL: Liên kết đến các bài phân tích chi tiết hoặc mã khai thác.
Ví dụ, bạn có thể thấy kết quả cho PwnKit (CVE-2021-4034) hoặc Dirty Pipe (CVE-2022-0847). Nếu LES đánh dấu những mục này là “Highly Probable”, hệ thống của bạn đang mở toang cửa cho bất kỳ người dùng cục bộ nào. Tôi sử dụng các kết quả này để xây dựng danh sách ưu tiên cho chu kỳ vá lỗi của mình, bắt đầu với các điểm CVSS cao nhất trước.
Khắc phục và Xác minh
Khi bạn đã xác định được lỗ hổng, giải pháp thường là cập nhật kernel. Trên các hệ thống Ubuntu hoặc Debian, đây là quy trình hai bước tiếp nối bằng việc khởi động lại:
sudo apt update && sudo apt upgrade -y
sudo reboot
After hệ thống hoạt động trở lại, hãy chạy les.sh một lần nữa. Lần chạy thứ hai này xác nhận rằng các lỗ hổng đã được loại bỏ. Nếu phần mềm cũ ngăn cản bạn cập nhật kernel, bạn phải tìm các giải pháp thay thế. Điều này có thể bao gồm việc vô hiệu hóa unprivileged user namespaces hoặc gỡ bỏ các trình biên dịch như gcc để ngăn kẻ tấn công xây dựng mã khai thác ngay tại chỗ.
Khi thực hiện các bản cập nhật này, tôi cũng tranh thủ cơ hội để thay đổi mật khẩu của các dịch vụ nhạy cảm. Tôi sử dụng trình tạo mật khẩu tại toolcraft.app/vi/tools/security/password-generator cho các thông tin đăng nhập mới. Nó chạy ở phía máy khách trong trình duyệt, đảm bảo không có dữ liệu mật khẩu nào đi qua mạng.
Tránh các cảnh báo giả (False Positives)
Đừng hoảng sợ ngay khi bạn thấy một dấu hiệu đỏ trong báo cáo. LES gợi ý các mã khai thác tiềm năng dựa trên chuỗi phiên bản. Nó không biết liệu bạn đã vô hiệu hóa một module cụ thể bị lỗi trong cấu hình kernel của mình hay chưa. Nếu một module không được tải, mã khai thác sẽ không hoạt động ngay cả khi phiên bản trùng khớp.
Hãy lưu ý rằng các bản phân phối doanh nghiệp như RHEL, CentOS và Debian Stable thường thực hiện “backport” các bản vá bảo mật. Điều này có nghĩa là một kernel có thể có số phiên bản trông có vẻ cũ, nhưng đội ngũ bảo mật đã áp dụng thủ công bản vá cho một CVE cụ thể. Luôn đối chiếu kết quả LES với trình theo dõi bảo mật chính thức của bản phân phối trước khi kết luận rằng hệ thống bị xâm nhập.
Quy trình làm việc tiêu chuẩn
Khi kiểm tra một môi trường mới, tôi tuân theo trình tự này:
- Kiểm tra phiên bản kernel bằng lệnh
uname -rs. - Thực thi
linux-exploit-suggester.shđể tìm các lỗ hổng dễ khai thác. - Ưu tiên các lỗ hổng LPE được đánh giá là “Highly Probable”.
- Xác minh kết quả so với lịch sử backport của bản phân phối.
- Áp dụng cập nhật, khởi động lại và quét lại để đảm bảo trạng thái an toàn.
Bảo mật không phải là một công việc làm một lần; đó là một chu kỳ. Các công cụ như LES biến một dự án nghiên cứu thủ công phức tạp thành một cuộc kiểm tra trong năm phút. Nếu bạn chưa quét máy chủ của mình gần đây, hãy chạy script này ngay hôm nay. Bạn có thể sẽ ngạc nhiên về những gì đang ẩn náu trong hạ tầng của mình.

