Kiểm tra sức khỏe bảo mật trong 5 phút
Cách đây vài năm, một trong những máy chủ staging của tôi đã ghi nhận hơn 42.000 lần thử đăng nhập SSH thất bại chỉ trong 6 giờ. Đó là một hồi chuông cảnh tỉnh. Trong quá trình ứng phó sự cố Linux, tôi nhận ra khi kẻ tấn công đã xâm nhập vào hệ thống của bạn với tư cách là một người dùng có đặc quyền thấp như www-data, chúng sẽ không dừng lại ở đó. Chúng muốn quyền root. Quyền Root cho phép chúng trích xuất /etc/shadow, cài đặt rootkit bền vững hoặc xóa sạch toàn bộ hệ thống tệp của bạn.
Hãy mở terminal. Chạy ba lệnh sau để kiểm tra sức khỏe bảo mật và xem những gì kẻ tấn công thấy trong 30 giây đầu tiên:
# Xem ngay các quyền sudo của bạn
sudo -l
# Tìm các tệp thực thi có bit SUID (các shell root tiềm năng)
find / -perm -4000 -type f 2>/dev/null
# Phát hiện các thư mục có quyền ghi công khai để ẩn các payload độc hại
find / -writable -type d 2>/dev/null
Nếu sudo -l trả về NOPASSWD: ALL, tính bảo mật của bạn coi như bằng không. Bất kỳ tệp thực thi nào được liệt kê ở đó đều là một chiếc thang tiềm năng dẫn lên đỉnh.
Cách kẻ tấn công leo thang
Leo thang đặc quyền không phải là một nghệ thuật hắc ám gì cả. Thông thường, đó chỉ là việc kẻ tấn công tận dụng một cấu hình cẩu thả hoặc một lỗ hổng chưa được vá từ hai năm trước. Theo kinh nghiệm của tôi, 90% các vụ xâm nhập nội bộ khai thác một trong bốn vector này.
1. Cái bẫy quyền SUID
Set User ID (SUID) cho phép một chương trình chạy với quyền của chủ sở hữu tệp—thường là root. Nó cần thiết cho các công cụ như passwd, nhưng lại nguy hiểm nếu áp dụng sai. Trong một đợt kiểm tra năm 2024, tôi đã tìm thấy một hệ thống mà lệnh find đã được bật bit SUID.
Kẻ tấn công có thể bỏ qua mọi hạn chế chỉ bằng một dòng lệnh:
find . -exec /bin/sh -p \; -quit
Lệnh này tạo ra một shell kế thừa UID của root. Trước khi thêm SUID vào bất kỳ script tùy chỉnh nào, hãy kiểm tra GTFOBins. Đây là một cơ sở dữ liệu thiết yếu về các tệp thực thi Unix mà tin tặc sử dụng để thoát khỏi các môi trường bị hạn chế.
2. Cấu hình Sudo sai
Sự tiện lợi là kẻ thù của bảo mật. Các quản trị viên thường cấp quyền sudo cho các công cụ cụ thể để tiết kiệm thời gian. Ví dụ, nếu bạn cho phép người dùng chạy python3 với quyền root, bạn đã trao chìa khóa của vương quốc cho họ:
sudo python3 -c 'import os; os.system("/bin/sh")'
Đó là một shell root ngay tức khắc. Hãy cẩn thận với biến LD_PRELOAD nữa. Nếu env_keep += "LD_PRELOAD" được thiết lập trong tệp /etc/sudoers của bạn, kẻ tấn công có thể ép hệ thống tải một thư viện độc hại trước khi bất kỳ lệnh hợp lệ nào được thực thi.
3. Lỗ hổng Kernel
Các kernel cũ là mỏ vàng cho những kẻ tấn công cục bộ. Các bản khai thác nổi tiếng như “Dirty COW” (CVE-2016-5195) hoặc “PwnKit” (CVE-2021-4034) cho phép người dùng ghi đè lên các tệp chỉ đọc. Chúng nhắm vào các lỗi hỏng bộ nhớ để chèn mã trực tiếp vào các tiến trình có đặc quyền. Luôn kiểm tra phiên bản của bạn:
uname -a
cat /etc/os-release
4. Các tiến trình Cron có quyền ghi công khai
Các tiến trình Cron (cron job) trong /etc/crontab thường chạy với quyền root. Nếu một cron job do root sở hữu thực thi một script nằm trong một thư mục có quyền ghi công khai, cuộc chơi kết thúc. Kẻ tấn công chỉ cần chèn thêm một reverse shell vào script đó. Lần tiếp theo trình lập lịch chạy, máy chủ sẽ kết nối ngược lại máy của kẻ tấn công với đầy đủ đặc quyền.
Giám sát và Phát hiện Chủ động
Kiểm tra thủ công là ổn đối với một máy chủ đơn lẻ. Tuy nhiên, nếu bạn đang quản lý một cụm máy chủ (cluster), bạn cần khả năng hiển thị tự động. Tôi sử dụng ba công cụ cụ thể để theo dõi hạ tầng của mình.
Tự động hóa với LinPEAS
LinPEAS là script “phải có” cho mọi pentester chuyên nghiệp. Nó quét mọi thứ, từ quyền tệp lỏng lẻo đến mật khẩu ẩn trong các tệp cấu hình. Hãy chạy nó trong môi trường container hoặc môi trường thử nghiệm trước để xem nó gắn cờ những gì.
# Chạy trực tiếp bản quét mới nhất
curl -L https://github.com/peass-ng/PEASS-ng/releases/latest/download/linpeas.sh | sh
Theo dõi thời gian thực với pspy
Đôi khi bạn cần xem những gì đang diễn ra ngay bây giờ mà không cần quyền root. pspy giám sát các tiến trình khi chúng bắt đầu. Nó sử dụng các lệnh gọi API inotify thay vì chỉ quét liên tục thư mục /proc. Điều này làm cho nó trở nên hoàn hảo để bắt các cron job tồn tại ngắn hạn hoặc các script dọn dẹp tự động có thể bị tổn thương.
Auditd: Hộp đen của hệ thống
Linux Audit Daemon (auditd) là cách đáng tin cậy nhất để theo dõi các thay đổi tệp nhạy cảm. Tôi luôn thiết lập các quy tắc cho /etc/shadow và /etc/sudoers. Việc sử dụng Auditd để ứng phó sự cố giúp tôi nhận được một mục nhật ký với chính xác PID và UID chịu trách nhiệm nếu một người không phải quản trị viên chạm vào những tệp này.
# Giám sát sudoers cho bất kỳ thay đổi ghi hoặc thuộc tính nào
sudo auditctl -w /etc/sudoers -p wa -k alert_sudoers
Các chiến thuật làm cứng (Hardening) thực sự hiệu quả
Đừng chỉ sửa lỗi; hãy thay đổi môi trường. Đây là các bước cụ thể mà tôi thực hiện trên mọi bản build production mới.
- Sử dụng sudoedit: Đừng bao giờ để người dùng chạy một trình soạn thảo văn bản đầy đủ như
vimhoặcnanothông qua sudo. Họ có thể dễ dàng thoát ra shell. Thay vào đó, hãy sử dụngsudoedit, lệnh này tạo ra một bản sao tạm thời của tệp để chỉnh sửa. - Phân vùng No-Exec: Gắn kết (mount)
/tmpvà/dev/shmvới cờnoexec. Điều này ngăn kẻ tấn công chạy các tệp thực thi khai thác đã tải xuống trong những thư mục duy nhất mà chúng thường có quyền ghi vào. - Gỡ bỏ các trình biên dịch: Hầu hết các máy chủ web production không cần
gcchoặcmake. Hãy gỡ bỏ chúng. Nếu kẻ tấn công không thể biên dịch mã khai thác của chúng trực tiếp trên hệ thống, chúng thường sẽ bị kẹt lại. - Làm cứng Sysctl: Chặn các khai thác cấp phần cứng bằng cách hạn chế hệ thống con
perf.
# Áp dụng ngay lập tức
sudo sysctl -w kernel.perf_event_paranoid=3
# Duy trì sau khi khởi động lại
echo "kernel.perf_event_paranoid=3" | sudo tee -a /etc/sysctl.conf
Bảo mật không phải là một ô đánh dấu xong là thôi; đó là một trạng thái điều chỉnh liên tục. Bằng cách chặn các con đường tắt SUID và giám sát việc thực thi tiến trình, bạn biến máy chủ của mình thành một mục tiêu tốn kém và gây nản lòng cho kẻ tấn công. Hãy vá kernel, kiểm tra sudoers và đừng bao giờ tin tưởng một script có quyền ghi công khai.

