Cleanup malware WordPress không nên bắt đầu bằng việc xóa ngẫu nhiên file đáng ngờ. Một quy trình an toàn cần xác định scope, containment, snapshot/evidence, payload, persistence, entry point và credential liên quan; sau đó mới remediation và verification. Mỗi bước nên có input, output và stop condition rõ ràng để tránh phá evidence hoặc đưa website chưa sạch trở lại production.
Runbook tổng quát: input, output và stop condition
| Bước | Input | Output cần có | Stop / escalation condition |
|---|---|---|---|
| 1. Triage & scope | Triệu chứng, URL, cảnh báo, log | Incident timeline ban đầu + danh sách IOC | Không xác định được phạm vi hoặc nhiều hệ thống cùng bị ảnh hưởng |
| 2. Containment | Impact hiện tại | Giảm phát tán/tác động mà vẫn giữ khả năng điều tra | Containment gây downtime lớn hoặc cần phối hợp hạ tầng |
| 3. Snapshot/evidence | File, DB, config, log | Bản lưu phục vụ diff/rollback/evidence | Không thể bảo toàn dữ liệu cần thiết an toàn |
| 4. Identify payload/persistence/entry point | Baseline + timeline | Finding theo layer, owner và confidence | Không xác định được persistence hoặc hoạt động trái phép vẫn tiếp diễn |
| 5. Remediation | Finding đã xác minh | Thành phần độc hại bị loại bỏ/thay sạch | Không có nguồn sạch hoặc custom code không thể xác minh |
| 6. Credential & hardening | Scope compromise | Credential liên quan được rotate, nguyên nhân có mitigation | Nghi ngờ credential/hệ thống khác bị ảnh hưởng |
| 7. Verification | State sau remediation | PASS/FAIL evidence theo layer | Bất kỳ IOC quan trọng nào tái xuất hiện |
Bước 1: triage và dựng timeline
Ghi URL bị ảnh hưởng, redirect, cảnh báo, Admin lạ, file change, post spam và thời điểm phát hiện. Đừng chỉ ghi “site bị hack”; hãy lưu điều kiện tái hiện và nguồn evidence. Nếu chưa chắc có compromise, dùng ma trận dấu hiệu WordPress bị nhiễm malware.
Bước 2: containment theo impact
Nếu site đang redirect người dùng sang nội dung nguy hiểm, phát tán malware/phishing hoặc có hoạt động trái phép đang diễn ra, containment có thể cần ưu tiên trước cleanup. Mục tiêu là giảm thiệt hại nhưng vẫn giữ đủ evidence và khả năng rollback. Với incident rộng, containment/coordination nên chuyển sang Incident Response.
Bước 3: snapshot và evidence manifest
Khi điều kiện cho phép, lưu trạng thái file, database, cấu hình và log trước thay đổi lớn. Snapshot nhiễm không phải backup để restore mù quáng; nó có giá trị cho diff, điều tra và rollback.
| Artifact | Nên ghi | Mục đích |
|---|---|---|
| File suspect | Path, hash, mtime, size | Diff và timeline |
| Database | Backup + table/row liên quan | Khôi phục/diff dữ liệu |
| Logs | Khung thời gian, timezone, nguồn log | Correlation |
| Accounts | User, role, owner, auth events | Access review |
| Config | CDN/server/WordPress relevant settings | Phân biệt config với compromise |
CISA khuyến nghị incident response có cấu trúc và duy trì artifact phục vụ containment, eradication và recovery. Tham khảo CISA Incident & Vulnerability Response Playbooks.
Bước 4: tách payload, persistence và entry point
Payload là biểu hiện gây hại; persistence khiến payload/quyền quay lại; entry point là con đường dẫn tới compromise. Nếu chỉ xóa payload nhưng bỏ sót persistence, site có thể tái nhiễm. Nếu chưa xác định được cơ chế tái tạo, dừng kết luận “đã sạch”.
Bước 5: integrity check và thay thế từ nguồn sạch
Với WordPress core, có thể dùng lệnh chỉ đọc:
wp core verify-checksums
WP-CLI so sánh file core với checksum WordPress.org; mismatch là finding cần giải thích theo version/locale/deploy history. Tài liệu: WP-CLI — Verify core checksums. Plugin/theme/custom code cần nguồn tin cậy tương ứng; không tự động xóa custom file chỉ vì không có checksum công khai.
Bước 6: xử lý tài khoản, credential và nguyên nhân khai thác
Rà soát Administrator, hosting, database, deployment, API key và secret nằm trong scope. Rotate credential sau containment/cleanup theo phạm vi phù hợp; credential rotation không thay thế việc xử lý persistence và entry point. Sau đó cập nhật hoặc loại bỏ component dễ bị khai thác từ nguồn tin cậy và giảm quyền không cần thiết.
Bước 7: verification trước khi release
| Layer | PASS khi | FAIL khi |
|---|---|---|
| Filesystem | Integrity/baseline phù hợp hoặc khác biệt có owner | File suspect còn hoặc quay lại |
| Accounts | Không còn user/quyền trái phép | Admin lạ tái xuất hiện |
| Persistence | Cron/plugin/MU-plugin/account có owner và behavior hợp lệ | Cơ chế tái tạo chưa xác định |
| Frontend | Không còn redirect/spam/injected behavior trong điều kiện tái hiện | Triệu chứng vẫn xuất hiện |
| Search/security warning | Site sạch và đủ điều kiện recheck | Yêu cầu review trước khi cleanup hoàn tất |
Workflow verification chi tiết: Cách xác minh WordPress đã sạch malware sau cleanup.
Rollback plan nên có gì?
- Snapshot/file/DB trước remediation.
- Danh sách component được thay/xóa và nguồn sạch tương ứng.
- Credential/secret nào đã rotate.
- Cách phục hồi chức năng nếu clean replacement gây lỗi.
- Điểm quyết định rollback: lỗi chức năng nghiêm trọng, mất dữ liệu hoặc remediation không thể xác minh.
Restore backup hay cleanup trực tiếp?
Backup sạch có thể rút ngắn recovery nhưng cần biết restore point có trước compromise, data delta chấp nhận được và entry point đã được xử lý. Xem ma trận restore backup hay cleanup.
Khi nào nên dừng DIY?
Nên escalation khi không thể bảo toàn evidence, không có clean source đáng tin cậy, không xác định được scope/persistence, nhiều hệ thống bị ảnh hưởng, privileged account bị compromise hoặc activity vẫn đang tiếp diễn. WordPress đơn lẻ cần cleanup + recovery + verification có thể theo Malware Removal; incident rộng cần Incident Response.
Nguồn kỹ thuật tham khảo
- WordPress.org — FAQ: My site was hacked
- WordPress Developer — Hardening WordPress
- WP-CLI — Verify core checksums
- CISA — Incident Response Playbooks
Kết luận
Cleanup malware WordPress đáng tin cậy là một chuỗi có kiểm chứng: triage → containment → snapshot/evidence → xác định payload/persistence/entry point → remediation → credential/hardening → verification. Mỗi bước phải có output và stop condition; “xóa vài file rồi scan sạch” không đủ để chứng minh recovery an toàn.
