Bảo mật website6 phút đọc

Cách đọc access log WordPress để tìm dấu vết tấn công

Cách đọc access log WordPress theo timeline, nhận biết request đáng ngờ và nối log với thay đổi tệp, database hoặc tài khoản.

Chuyên gia WebAnToan đọc access log để dựng lại dòng thời gian tấn công WordPress
Access log có giá trị nhất khi được nối với timestamp của tệp, database và tài khoản.

Access log là nhật ký các yêu cầu mà máy chủ web đã nhận. Khi website WordPress bị xâm nhập, log có thể giúp trả lời ba câu hỏi quan trọng: request nào xảy ra trước thay đổi trái phép, URL nào bị khai thác và hoạt động tiếp theo đến từ đâu. Tuy nhiên, một dòng log đơn lẻ hiếm khi đủ để kết luận.

Cách WebAnToan đọc log

Bắt đầu từ thời điểm phát hiện tệp, tài khoản hoặc nội dung lạ rồi mở rộng cửa sổ thời gian về trước và sau. Không tìm “IP xấu” trước; hãy tìm chuỗi hành vi có quan hệ nhân quả.

Một dòng access log thường cho biết gì?

Tùy cấu hình Nginx hoặc Apache, log thường có địa chỉ nguồn, thời gian, phương thức và đường dẫn request, mã phản hồi, dung lượng, referer và user-agent. Nếu website đi qua Cloudflare hoặc reverse proxy, cần biết máy chủ đang ghi IP proxy hay IP khách đã được chuẩn hóa. Nếu không, việc quy hoạt động cho một nguồn sẽ sai.

Chọn mốc thời gian
Nhóm request thành phiên
Đối chiếu hậu quả
Access log có giá trị nhất khi được nối với timestamp của tệp, database và tài khoản.

Bắt đầu từ một mốc thời gian đáng tin

Mốc tốt có thể là thời gian tệp PHP mới được tạo, lúc tài khoản Administrator lạ đăng ký, lúc Google phát hiện URL spam hoặc thời điểm khách báo chuyển hướng. Hãy ghi timezone của log và hệ điều hành; lệch múi giờ là nguyên nhân phổ biến khiến đội xử lý nối sai sự kiện.

Những mẫu request cần ưu tiên điều tra

  • POST tới plugin, theme hoặc endpoint AJAX ngay trước khi tệp mới xuất hiện.
  • Request tới tệp PHP trong uploads hoặc thư mục không nên thực thi mã.
  • Chuỗi đăng nhập thành công sau nhiều lần thất bại, đặc biệt ngoài giờ vận hành.
  • Request có tham số dài, mã hóa hoặc payload khác hẳn lưu lượng bình thường.
  • Request lặp lại tới một backdoor sau khi website đã được làm sạch.

Đọc theo phiên thay vì đọc từng dòng

Nhóm log theo IP, cookie, user-agent và khoảng thời gian để dựng một phiên tương đối. Một chuỗi có thể bắt đầu bằng quét phiên bản, tiếp theo là POST khai thác, gọi tệp vừa tạo, đăng nhập hoặc chèn nội dung. IP có thể thay đổi và user-agent có thể giả, vì vậy cần đối chiếu cả URL, timing và hậu quả trên file/database.

Các mã trạng thái nói gì?

200 không chứng minh request thành công về mặt khai thác; 404 cũng không có nghĩa vô hại. Mã 302 có thể phản ánh chuyển hướng, 403 cho thấy request bị chặn, 500 có thể xuất hiện khi payload gây lỗi. Giá trị chỉ rõ hơn khi đặt cạnh response size, đường dẫn và thay đổi hệ thống cùng thời điểm.

Giữ log đúng cách

Sao chép log sang nơi chỉ đọc trước khi lọc, giữ file gốc và ghi lại thời gian lấy. Nếu log đã rotate hoặc nén, thu thập cả các phiên bản liên quan. Không đưa IP, cookie, token hoặc dữ liệu cá nhân nguyên trạng vào công cụ công cộng.

Giới hạn cần hiểu

Log không được bật, bị giữ quá ngắn, sai timezone hoặc thiếu header từ proxy có thể làm mất dấu vết. Khi đó cần kết hợp file timestamp, audit log, database và log của CDN/hosting.

Nguồn tham khảo chính thức

Nginx mô tả `access_log`, `log_format` và các biến như request, status, referer, user-agent trong ngx_http_log_module. Quy trình WordPress sau xâm nhập nhấn mạnh việc ghi nhận triệu chứng và timeline trong FAQ My site was hacked.

Log không nói “đây là attacker”, nhưng kể được chuỗi hành động

Một request 200 riêng lẻ không đáng ngờ. Nhưng upload file, gọi file đó, đăng nhập admin rồi sửa plugin trong vài phút tạo thành câu chuyện khác. Điều tra cần tương quan theo thời gian, IP, user, request ID và đường dẫn.

Khoảng trống log cũng là một phát hiện

Rotation quá ngắn, timestamp lệch, CDN che IP gốc hoặc log chỉ nằm trên server bị chiếm đều làm mất khả năng kết luận. Ghi rõ dữ liệu nào không có và mức độ chắc chắn; đừng biến suy đoán thành nguyên nhân chính thức.

Ưu tiên các mốc thay đổi trạng thái

  • Login thất bại rồi thành công.
  • Upload, POST hoặc response bất thường trước lúc file đổi.
  • Tạo user, cron, plugin hoặc API token.
  • Kết nối outbound và email tăng đột biến.

Giữ bản sao log tách biệt, đồng bộ thời gian và giới hạn quyền đọc. Log vừa là bằng chứng bảo mật vừa có thể chứa dữ liệu nhạy cảm.

Khi IP không còn là danh tính

Proxy, NAT, botnet và VPN khiến một IP không đủ kết luận. Hãy kết hợp session, user-agent, request pattern, tài khoản và hành động tiếp theo. Báo cáo nên nói “nguồn quan sát được” thay vì khẳng định ai đứng sau khi chưa có bằng chứng.

Cụm điều tra mã độc WordPress

Đi từ dấu vết kỹ thuật đến kết luận có thể kiểm chứng.

Câu hỏi thường gặp

Access log có chứng minh chính xác ai tấn công không?

Không. IP và user-agent có thể qua proxy hoặc bị giả; log chủ yếu giúp dựng chuỗi request và đối chiếu hành vi.

Mã trạng thái 200 có nghĩa khai thác thành công không?

Không nhất thiết. Cần đối chiếu response, file/database và hoạt động tiếp theo.

Nên giữ access log bao lâu?

Tùy rủi ro và yêu cầu vận hành, nhưng phải đủ dài hơn thời gian trung bình phát hiện sự cố và tuân thủ quy định dữ liệu.

Cần điều tra website theo dữ liệu thực tế?

WebAnToan có thể rà log, file, database, cron và tài khoản để xác định phạm vi cùng thứ tự xử lý.

Gửi tình trạng website →

Website đang có dấu hiệu tương tự?

Ưu tiên xác minh trước khi sửa

Gửi URL, thời điểm và triệu chứng đang thấy. WebAnToan sẽ giúp phân loại phạm vi trước khi làm thay đổi bằng chứng.

← Tất cả bài viết

Tiếp tục theo chủ đề

Bài viết liên quan

Hỗ trợ kỹ thuật website

Gửi tình trạng website cần hỗ trợ

Gửi 3 thông tin dưới đây để kỹ thuật viên kiểm tra sơ bộ và liên hệ lại.

Chỉ cần gửi tên miền và lỗi đang thấy. Không nhập mật khẩu hay mã OTP.