Sau cleanup, câu hỏi quan trọng không phải chỉ là “scanner còn báo malware không?” mà là WordPress đã sạch malware và không còn cơ chế tái tạo compromise hay chưa. Verification cần đối chiếu trạng thái sau remediation với baseline và các Indicators of Compromise đã ghi nhận trước đó.
PASS/FAIL exit criteria sau cleanup
| Layer | PASS khi | FAIL khi | Evidence |
|---|---|---|---|
| Triệu chứng | Redirect/spam/popup/admin lạ không còn trong điều kiện tái hiện | Bất kỳ IOC quan trọng nào vẫn xuất hiện | URL, screenshot, reproduction notes |
| Filesystem | Core/plugin/theme khớp baseline hoặc khác biệt có owner | File suspect còn hoặc quay lại | Checksum, diff, hash, mtime |
| Accounts | Không còn user/quyền trái phép | Admin lạ hoặc role change tái xuất hiện | User list, role/capabilities, auth log |
| Persistence | Cron/plugin/MU-plugin/account đều có owner và hành vi hợp lệ | Cơ chế tái tạo payload chưa được giải thích | Inventory + owner map |
| Frontend/client | Network/render behavior bình thường | Request/domain/script lạ còn xuất hiện | Network/Initiator evidence |
| External warning | Đã đủ điều kiện recheck/review | Google/hosting vẫn chỉ ra compromise chưa xử lý | Security Issues/hosting message |
Không dùng một scanner làm bằng chứng duy nhất
Scanner là một signal hữu ích nhưng phạm vi quan sát khác nhau. Một scan “clean” không chứng minh mọi file, database, account, cron hoặc client-side behavior đều an toàn. Verification phải quay lại các IOC cụ thể của incident.
Kiểm tra integrity
Với WordPress core, có thể dùng lệnh chỉ đọc:
wp core verify-checksums
Tài liệu: WP-CLI — Verify core checksums. Mismatch cần giải thích theo version/locale/deploy history; custom code dùng repository/baseline nội bộ.
Rà soát tài khoản và quyền
Kiểm tra Administrator và account có quyền cao, role/capabilities, auth log và credential liên quan. Nếu Admin lạ từng là IOC, PASS chỉ khi account/quyền trái phép không còn và không tái xuất hiện.
Kiểm tra persistence
Inventory cron, plugin, MU-plugin, account và các layer từng liên quan incident. Nếu file/plugin/account quay lại sau cleanup, chuyển sang điều tra persistence WordPress malware thay vì tiếp tục xóa triệu chứng.
Kiểm tra frontend và client-side
Tái hiện các URL từng bị ảnh hưởng trong cùng điều kiện: logged-out, referrer, device/user-agent hoặc cookie nếu relevant. Với script/client-side issue, dùng workflow Network/Initiator để xác minh request hoặc script lạ đã biến mất.
Observation window theo risk, không theo số ngày cố định
| Risk profile | Nên theo dõi | Điều kiện kéo dài |
|---|---|---|
| Incident đơn giản, source rõ | File/account/IOC chính | IOC quay lại hoặc source chưa chắc chắn |
| Có persistence hoặc recurrence | File change, cron, account, frontend, log | Cho đến khi cơ chế tái tạo được loại trừ bằng evidence |
| Nhiều hệ thống/privileged account | Cross-system auth/activity + IOC | Incident-response scope quyết định |
Không có một số ngày cố định bảo đảm website sạch. Observation window phải dựa trên risk, lịch chạy scheduled task, chu kỳ tái xuất hiện từng quan sát và phạm vi incident.
Evidence table bàn giao
| Check | Status | Evidence | Owner | Recheck |
|---|---|---|---|---|
| Filesystem integrity | PASS/FAIL | Checksum/diff/hash | … | … |
| Accounts | PASS/FAIL | User/auth log | … | … |
| Persistence | PASS/FAIL | Cron/plugin/MU-plugin inventory | … | … |
| Frontend | PASS/FAIL | Reproduction/network evidence | … | … |
Sau verification, chuyển sang checklist bàn giao, hardening, backup và monitoring để không kết thúc incident chỉ bằng một kết luận “đã sạch”.
Nếu malware quay lại thì sao?
Recurrence là FAIL. Không lặp lại cùng thao tác xóa file mà chưa tìm root cause; dùng timeline/hypothesis workflow tìm root cause.
Khi nào nên escalation?
Nếu không thể xác minh sạch ở nhiều layer, activity vẫn tiếp diễn, privileged account hoặc nhiều hệ thống bị ảnh hưởng, nên chuyển sang Incident Response. WordPress đơn lẻ cần cleanup/recovery/verification có thể theo Malware Removal.
Nguồn kỹ thuật tham khảo
- WP-CLI — Verify core checksums
- WordPress.org — FAQ: My site was hacked
- WordPress Developer — Hardening WordPress
Kết luận
Xác minh WordPress sạch malware là quá trình PASS/FAIL nhiều lớp, không phải một scan. Chỉ nên đóng incident khi các IOC ban đầu không còn, integrity/account/persistence/frontend đều đạt exit criteria và trạng thái sạch được duy trì trong observation window phù hợp với risk.
