Cách phân tích log máy chủ để phát hiện dấu hiệu tấn công
Phân tích log máy chủ để phát hiện tấn công là việc tìm những mẫu bất thường trong ba nguồn chính: log truy cập web server, log xác thực và log hệ thống. Các dấu hiệu dễ nhận thấy nhất gồm hàng loạt yêu cầu 404 tới đường dẫn nhạy cảm, đăng nhập thất bại liên tục từ một địa chỉ, chuỗi ký tự lạ trong tham số URL, và yêu cầu POST tới tệp không thuộc ứng dụng. Muốn làm hiệu quả, log cần được tập trung một chỗ, giữ đủ lâu và có cảnh báo tự động cho những mẫu quan trọng.
Những nguồn log cần quan tâm
| Nguồn | Vị trí thường gặp | Cho biết điều gì |
|---|---|---|
| Log truy cập web server | Thư mục log của Nginx, Apache, IIS | Ai yêu cầu gì, lúc nào, kết quả ra sao |
| Log lỗi web server, ứng dụng | Cùng thư mục, hoặc log ứng dụng riêng | Lỗi do đầu vào bất thường, ngoại lệ |
| Log xác thực | Log auth/secure trên Linux, Security Event Log trên Windows | Đăng nhập SSH, sudo, RDP thành công và thất bại |
| Log hệ thống | journald, syslog | Dịch vụ khởi động, cron, thay đổi hệ thống |
| Log tường lửa, WAF | Thiết bị mạng, dịch vụ đám mây | Kết nối bị chặn, quy tắc kích hoạt |
| Log cơ sở dữ liệu | Cấu hình của từng hệ quản trị | Đăng nhập, truy vấn lỗi, truy vấn chậm |
Đọc một dòng log truy cập
Định dạng phổ biến (combined log format) gồm: địa chỉ IP, thời gian, phương thức và đường dẫn yêu cầu, mã trạng thái, kích thước phản hồi, Referer và User-Agent. Ví dụ một dòng điển hình cho thấy IP nào yêu cầu GET tới /login lúc mấy giờ, nhận mã 200 và trình duyệt khai báo là gì.
Lưu ý: User-Agent và Referer do client tự khai, có thể giả mạo. Địa chỉ IP có thể là của proxy hoặc CDN; khi đó cần cấu hình ghi IP thật từ header phù hợp.
Các mẫu tấn công thường thấy trong log web
Dò quét đường dẫn
Một IP gửi hàng trăm yêu cầu trong thời gian ngắn tới các đường dẫn như /.env, /.git/config, /wp-admin, /phpmyadmin, /backup.zip, đa phần nhận mã 404. Đây là quét tự động tìm tệp lộ hoặc trang quản trị. Nếu một trong số đó trả 200, cần kiểm tra ngay; xem bài bảo mật tệp cấu hình nhạy cảm.
Thử chèn mã
Tham số chứa dấu nháy đơn, từ khóa SQL như UNION, SELECT, SLEEP, chú thích SQL, hoặc thẻ script, thuộc tính onerror. Thường đi kèm mã 500 nếu ứng dụng có lỗi. Mã 500 lặp lại trên cùng endpoint sau các yêu cầu lạ là tín hiệu quan trọng. Bản chất lỗi được giải thích trong bài SQL Injection.
Duyệt thư mục (path traversal)
Chuỗi ../ hoặc dạng mã hóa của nó, nhắm tới /etc/passwd hay tệp cấu hình.
Dò mật khẩu qua web
Nhiều yêu cầu POST tới /login hoặc /xmlrpc.php từ một hoặc nhiều IP, phần lớn thất bại. Kiểu "rải mật khẩu" (password spraying) dùng ít mật khẩu cho nhiều tài khoản, khó thấy nếu chỉ đếm theo tài khoản.
Web shell
Yêu cầu POST lặp lại tới một tệp lạ trong thư mục upload hoặc thư mục ảnh, phản hồi kích thước thay đổi theo từng lệnh. Đây là dấu hiệu máy chủ đã bị xâm nhập; xem thêm bài dấu hiệu hệ thống bị cài backdoor.
Dấu hiệu trong log xác thực và hệ thống
- Hàng loạt "Failed password" hoặc "Invalid user" cho SSH từ nhiều IP: dò mật khẩu tự động.
- Đăng nhập thành công ngay sau chuỗi thất bại từ cùng IP: có thể đã đoán trúng.
- Đăng nhập thành công vào giờ bất thường, từ quốc gia chưa từng thấy.
- Lệnh sudo lạ, người dùng mới được tạo, nhóm quản trị thay đổi.
- Tác vụ cron mới, dịch vụ mới được cài.
- Log bị xóa hoặc có khoảng trống thời gian bất thường.
Công cụ phân tích từ cơ bản đến nâng cao
Dòng lệnh
Với máy chủ đơn lẻ, các công cụ có sẵn như grep, awk, sort, uniq đủ để trả lời nhiều câu hỏi: IP nào gửi nhiều yêu cầu nhất, đường dẫn nào bị 404 nhiều nhất, có yêu cầu nào chứa từ khóa đáng ngờ. journalctl giúp lọc log hệ thống theo dịch vụ và thời gian.
Tập trung log
Khi có nhiều máy chủ, đẩy log về hệ thống tập trung (ELK/OpenSearch, Graylog, Loki hoặc dịch vụ đám mây) để tìm kiếm, tương quan và trực quan hóa. Lợi ích quan trọng khác: kẻ tấn công chiếm được máy chủ khó xóa dấu vết đã gửi đi.
SIEM và phát hiện tự động
Hệ thống SIEM áp dụng quy tắc tương quan giữa nhiều nguồn, ví dụ "đăng nhập SSH thành công từ IP vừa dò quét web". Công cụ như Fail2ban có thể tự chặn IP dò mật khẩu dựa trên log.
Thiết lập cảnh báo nên có
- Đăng nhập quản trị thành công từ IP mới.
- Số đăng nhập thất bại vượt ngưỡng trong khoảng thời gian ngắn.
- Tỷ lệ lỗi 500 tăng đột biến.
- Yêu cầu tới tệp thực thi trong thư mục upload.
- Tài khoản hoặc quyền thay đổi trên máy chủ.
- Log ngừng gửi về từ một máy chủ.
Cảnh báo cần được tinh chỉnh để không quá nhiều; khi mọi thứ đều là cảnh báo, không còn gì được chú ý.
Chuẩn bị log trước khi cần
- Đồng bộ thời gian mọi máy chủ bằng NTP để tương quan được sự kiện.
- Giữ log đủ lâu theo yêu cầu của tổ chức và quy định áp dụng; nhiều cuộc xâm nhập chỉ được phát hiện sau thời gian dài.
- Không ghi mật khẩu, token, dữ liệu thẻ vào log.
- Bảo vệ quyền truy cập log vì chúng chứa thông tin nhạy cảm về hệ thống và người dùng.
Log cũng là nguồn đầu vào quan trọng cho kiểm thử xâm nhập: đội kiểm thử và đội vận hành nên so sánh xem hoạt động kiểm thử có được phát hiện không, như phân tích trong bài tầm quan trọng của pentest.
Câu hỏi thường gặp
Log truy cập web nên giữ bao lâu?
Tùy yêu cầu của tổ chức và quy định áp dụng. Nhiều nơi giữ log trực tuyến vài tháng và lưu trữ lâu hơn ở dạng nén, vì nhiều vụ xâm nhập chỉ bị phát hiện sau thời gian dài.
Thấy nhiều yêu cầu dò /wp-admin dù không dùng WordPress có đáng lo không?
Đây là quét tự động diện rộng, xảy ra với hầu hết máy chủ công khai. Bản thân nó không đáng lo nếu mọi yêu cầu đều nhận 404, nhưng là lời nhắc kiểm tra không có tệp nhạy cảm nào bị lộ.
Có cần SIEM cho máy chủ nhỏ không?
Không bắt buộc. Với một vài máy chủ, tập trung log đơn giản cộng Fail2ban và vài cảnh báo cơ bản đã mang lại nhiều giá trị. SIEM phù hợp khi số nguồn log và yêu cầu tuân thủ tăng lên.
Kẻ tấn công có xóa được log không?
Có, nếu chiếm được quyền quản trị trên máy chủ. Vì vậy nên gửi log ra hệ thống tập trung ngay khi phát sinh, và coi khoảng trống bất thường trong log là dấu hiệu đáng ngờ.
Bài liên quan
Bảo mật API trong môi trường phát triển ứng dụng Web
Các nguyên tắc bảo mật API cho lập trình viên web: xác thực, phân quyền theo đối tượng, kiểm tra đầu vào, giới hạn tần suất, quản lý khóa, nhật ký và kiểm thử.
Bảo mật tệp tin cấu hình nhạy cảm tránh bị lộ lọt
Cách bảo vệ tệp .env, config, khóa API, mật khẩu cơ sở dữ liệu: không đưa vào Git, chặn truy cập web, phân quyền tệp, dùng trình quản lý bí mật và xử lý khi lộ.
Các bước cơ bản để rà soát lỗ hổng bảo mật ứng dụng
Quy trình rà soát lỗ hổng ứng dụng web: xác định phạm vi, lập danh mục tài sản, quét tự động, rà soát mã, kiểm thử thủ công và theo dõi khắc phục.
Các chương trình tìm lỗi nhận thưởng Bug Bounty và lưu ý
Bug Bounty hoạt động thế nào, các dạng chương trình, quy tắc phạm vi và safe harbor, cách viết báo cáo tốt và lưu ý pháp lý cho người mới.