SecOps Portal
Trang chủ › Nghiên Cứu Bảo Mật

Cách phân tích log máy chủ để phát hiện dấu hiệu tấn công

Ban biên tập SecOps Portal · · Cập nhật

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ồnVị trí thường gặpCho biết điều gì
Log truy cập web serverThư mục log của Nginx, Apache, IISAi yêu cầu gì, lúc nào, kết quả ra sao
Log lỗi web server, ứng dụngCùng thư mục, hoặc log ứng dụng riêngLỗi do đầu vào bất thường, ngoại lệ
Log xác thựcLog 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ốngjournald, syslogDịch vụ khởi động, cron, thay đổi hệ thống
Log tường lửa, WAFThiết bị mạng, dịch vụ đám mâyKết nối bị chặn, quy tắc kích hoạt
Log cơ sở dữ liệuCấ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ó

  1. Đăng nhập quản trị thành công từ IP mới.
  2. Số đăng nhập thất bại vượt ngưỡng trong khoảng thời gian ngắn.
  3. Tỷ lệ lỗi 500 tăng đột biến.
  4. Yêu cầu tới tệp thực thi trong thư mục upload.
  5. Tài khoản hoặc quyền thay đổi trên máy chủ.
  6. 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