Khi nghi WordPress bị chèn mã độc vào wp-config.php, .htaccess hoặc index.php, không nên mặc định mọi dòng lạ đều là malware. Đây đều là những file có thể chứa thay đổi hợp lệ tùy môi trường. Cách kiểm tra đáng tin cậy là đối chiếu baseline, lịch sử thay đổi, chức năng của code và các dấu hiệu compromise đi kèm.
Ba file này khác nhau về baseline
| File | Baseline phù hợp | Lưu ý |
|---|---|---|
index.php |
Đúng phiên bản WordPress core tin cậy | Có thể dùng checksum/core package để đối chiếu |
wp-config.php |
Bản cấu hình do chính tổ chức quản lý | Không có một bản public duy nhất để diff vì chứa cấu hình/secret riêng |
.htaccess |
Baseline web server + rule được phê duyệt | Plugin cache/security/hosting có thể thêm rule hợp lệ |
Quy trình safe diff trước khi sửa
- Ghi state hiện tại: path, hash, mtime và owner/process liên quan nếu có.
- Khóa clean source: với core dùng đúng WordPress version; với wp-config/.htaccess dùng baseline nội bộ hoặc backup đã xác minh.
- Sanitize secret: không đưa database credential, salts, API key hoặc token vào ticket, screenshot hoặc tài liệu chia sẻ.
- Diff trên bản sao: so sánh working copy với clean source/baseline; không chỉnh trực tiếp production trong lúc phân tích.
- Classify finding: APPROVED_CHANGE, UNEXPLAINED_CHANGE hoặc CONFIRMED_MALICIOUS dựa trên provenance + behavior + timeline.
- Chỉ remediation khi có rollback: lưu snapshot/bản sao trước thay thế file hoặc rule.
Kiểm tra index.php và WordPress core bằng checksum
Với WordPress core, có thể dùng lệnh chỉ đọc:
wp core verify-checksums
Lệnh này đối chiếu file core hiện tại với checksum chính thức của WordPress.org. Mismatch là finding cần giải thích, không tự động là malware. Tài liệu chính thức: WP-CLI — Verify core checksums.
Kiểm tra wp-config.php
Đối chiếu cấu hình hiện tại với bản quản lý hoặc backup tin cậy. Tập trung vào đoạn mới xuất hiện, include tới file không rõ nguồn gốc, thay đổi ngoài quy trình và timestamp bất thường. Không công khai credential hoặc secret lấy từ file trong ticket, ảnh chụp hay báo cáo không được bảo vệ.
Với wp-config.php, clean-source rule là baseline của chính website, không phải lấy một file mẫu trên Internet rồi ghi đè. File mẫu WordPress không chứa các giá trị production riêng của site.
Kiểm tra .htaccess
So sánh rule hiện tại với cấu hình web server dự kiến và change history. Redirect hoặc rewrite lạ cần được truy ngược nguồn tạo, nhưng rule khác mặc định chưa chắc độc hại vì plugin cache, bảo mật và hosting có thể thêm cấu hình hợp lệ.
| Finding | Evidence nên lưu | Next action |
|---|---|---|
| Redirect/rewrite không có owner | Rule, mtime, backup/diff, URL bị ảnh hưởng | Đối chiếu hosting/plugin rồi mở rộng sang redirect workflow |
| Include tới file lạ | Path, hash, source line, timeline | Static review + provenance; không chạy file để thử |
| Rule hợp lệ từ plugin/hosting | Owner, docs/ticket, thời điểm tạo | Đánh dấu APPROVED_CHANGE |
Kiểm tra index.php
Nếu index.php chứa code bổ sung không thuộc đúng bản WordPress core dự kiến, ghi nhận evidence trước khi thay thế. Clean replacement nên lấy từ đúng version/source tin cậy, không từ một file ngẫu nhiên tải bên ngoài.
Đừng chỉ tìm một chuỗi mã độc cố định
Signature có thể hữu ích nhưng không đủ. Code hợp lệ đôi khi bị minify hoặc trông khó đọc, còn code trái phép có thể được chèn tinh vi vào phần bình thường. Nên kết hợp diff, provenance, timestamp, log và hành vi website.
Stop condition trước remediation
- Chưa xác định đúng WordPress version hoặc clean baseline.
- Không có snapshot/rollback cho file cấu hình quan trọng.
- Diff chứa secret chưa được sanitize.
- Thay đổi có thể thuộc hosting/plugin nhưng chưa xác minh owner.
- Finding cho thấy nhiều file/account/layer cùng bị ảnh hưởng — cần mở rộng incident scope.
Nếu phát hiện thay đổi trái phép thì làm gì?
Ghi nhận file, hash, timestamp và bằng chứng phù hợp trước remediation khi điều kiện cho phép. Bài loại bỏ WordPress backdoor và bảo toàn evidence giải thích nguyên tắc xử lý mà không phá hủy dấu vết cần thiết.
Redirect lạ có nhất thiết đến từ .htaccess?
Không. Redirect có thể phát sinh ở CDN, web server, PHP, database hoặc JavaScript. Nếu triệu chứng chính là chuyển sang domain khác, dùng workflow WordPress redirect sang trang lạ để kiểm tra theo từng lớp.
Sau khi thay file sạch có kết thúc cleanup không?
Chưa. Cần xác định cơ chế nào đã cho phép file bị sửa và liệu có persistence ở vị trí khác hay không. Quy trình tổng thể tại cleanup malware WordPress an toàn từng bước bao quát phần entry point, credential và verification.
Nguồn kỹ thuật tham khảo
Kết luận
Kiểm tra wp-config.php, .htaccess và index.php nên dựa trên baseline và bằng chứng thay vì filename hoặc một signature đơn lẻ. Clean-source rule phải đúng cho từng file, diff cần được thực hiện an toàn và mọi remediation phải có rollback; nếu xác nhận thay đổi trái phép, tiếp tục xử lý persistence, quyền truy cập và nguyên nhân gốc.
