Phân tích dấu hiệu hệ thống Linux bị tấn công
Khi các sản phẩm mã nguồn mở ngày càng phổ biến, việc xác định chính xác một máy chủ Linux có đang bị xâm nhập hay không trở thành kỹ năng thiết yếu với bất kỳ quản trị viên nào. Dưới đây là tổng hợp các dấu hiệu thường gặp và phương pháp kiểm tra, dựa trên thực tế vận hành hệ thống.
1. Kiểm tra tính toàn vẹn của nhật ký hệ thống
Tấn công thường xóa hoặc làm trống file log để che giấu dấu vết. Cần kiểm tra sự tồn tại và kích thước của các file trong thư mục /var/log:
ls -la /var/log/
du -sh /var/log/*.log
Nếu thư mục log gần như trống hoặc thiếu các file quan trọng như secure, messages, cần nghi ngờ ngay lập tức.
2. Xác minh cấu trúc tài khoản người dùng
File /etc/passwd và /etc/shadow là mục tiêu sửa đổi phổ biến. Kiểm tra quyền truy cập và thời gian thay đổi:
ls -l /etc/passwd /etc/shadow
Một file shadow bị thay đổi gần đây mà không có hoạt động quản trị hợp lệ là dấu hiệu đáng lo ngại.
3. Phân tích nội dung tệp xác thực
Dùng lệnh sau để kiểm tra tài khoản có UID 0 (quyền root):
awk -F: '$3 == 0 {print $1}' /etc/passwd
Chỉ nên có root. Nếu xuất hiện tài khoản lạ cũng có UID 0, rất có thể hệ thống đã bị chiếm quyền.
4. Kiểm tra trạng thái đăng nhập gần nhất
Lệnh lastlog hiển thị lần đăng nhập cuối cùng của mọi tài khoản:
lastlog | grep -v "Never logged in"
Các tài khoản hệ thống như daemon, bin mà có lịch sử đăng nhập là bất thường.
5. Xem danh sách người dùng đang kết nối
Dùng lệnh w hoặc who để liệt kê phiên làm việc hiện tại:
w
So sánh địa chỉ IP nguồn với các vị trí truy cập hợp lệ. Kết nối từ vùng địa lý lạ hoặc cổng bất thường cần được điều tra.
6. Truy vết lịch sử đăng nhập dài hạn
Lệnh last đọc file /var/log/wtmp, cho thấy tất cả các phiên đăng nhập từ trước đến nay:
last | head -20
Tìm kiếm các mẫu lặp lại như nhiều lần đăng nhập thất bại liên tiếp, hoặc đăng nhập thành công sau hàng loạt thất bại – đặc trưng của tấn công brute-force.
7. Phân tích lưu lượng người dùng theo thời gian
Dùng lệnh ac để xem tổng thời gian kết nối theo từng người dùng và ngày:
ac -p # Tổng thời gian mỗi người dùng
ac -d # Theo từng ngày
Một tài khoản bỗng dưng có thời gian kết nối tăng đột biến có thể đang bị lợi dụng.
8. Giám sát lưu lượng mạng bất thường
Nếu nghi ngờ máy bị biến thành bot hoặc điểm phát tán dữ liệu, dùng tcpdump để bắt gói tin:
tcpdump -i any -c 50 port not 22 and not 53
Hạn chế phân tích ở các cổng thông dụng như SSH (22), DNS (53). Các kết nối khác đến cổng lạ hoặc IP nước ngoài cần kiểm tra kỹ.
9. Tìm kiếm bằng chứng trong nhật ký bảo mật
File /var/log/secure ghi lại mọi sự kiện xác thực SSH. Tìm kiếm các dòng "Accepted":
grep "Accepted" /var/log/secure
Ghi chú lại tất cả IP nguồn đăng nhập thành công. Đối chiếu với danh sách IP tin cậy. Một IP lạ đăng nhập vào tài khoản thông thường là mối đe dọa nghiêm trọng.
10. Xác định tập tin thực thi của tiến trình khả nghi
Sử dụng top hoặc htop để tìm tiến trình tiêu tốn CPU cao. Sau đó tra cứu đường dẫn thực thi qua /proc:
ls -l /proc/<PID>/exe
Ví dụ nếu thấy /proc/1850/exe -> /tmp/.hidden_script, đây rõ ràng là phần mềm độc hại vì không nằm trong thư mục hệ thống hợp lệ.
11. Khôi phục file bị xóa nhưng vẫn đang được mở
Khi một tiến trình vẫn đang giữ file mở, dù file đã bị xóa khỏi hệ thống, nội dung vẫn có thể truy cập qua /proc/[PID]/fd/[FD].
Bước 1: Tìm tiến trình đang mở file (ví dụ /var/log/secure):
lsof | grep "/var/log/secure"
Kết quả có thể là:
rsyslogd 1264 root 4w REG 8,1 3173904 263917 /var/log/secure (deleted)
Bước 2: Sao chép lại nội dung từ mô tả file (fd=4) của tiến trình PID 1264:
cp /proc/1264/fd/4 /var/log/secure.recovered
Giờ bạn đã khôi phục được nội dung gốc, có thể dùng để phân tích thêm.