Khi điều tra website bị compromise, tìm file PHP mới tạo hoặc vừa bị chỉnh sửa trong WordPress là một cách thu hẹp phạm vi, nhưng timestamp không đủ để kết luận file là malware. Update plugin, deploy, restore backup hoặc thao tác quản trị hợp lệ cũng có thể làm thay đổi thời gian file.
Khóa incident window và timezone trước khi lọc file
Bắt đầu từ lần cuối website được biết là bình thường và thời điểm đầu tiên xuất hiện redirect, spam, Admin lạ hoặc cảnh báo. Chuẩn hóa timezone giữa filesystem, access log, application log và ticket/deploy history; nếu không, correlation có thể lệch hàng giờ.
mtime, ctime và “file mới” không đồng nghĩa malware
| Tín hiệu | Ý nghĩa thực tế | Caveat |
|---|---|---|
| mtime | Nội dung file được sửa gần đây | Restore/copy/deploy có thể thay đổi mtime |
| ctime | Metadata/inode state thay đổi | Không phải “creation time” portable trên mọi filesystem |
| Filename mới | File xuất hiện ngoài baseline | Plugin/theme/update hợp lệ cũng tạo file mới |
Lọc file PHP theo thời gian — read-only
Trên môi trường Unix-like, có thể dùng lệnh chỉ đọc để tạo shortlist theo incident window:
find /path/to/wordpress -type f -name '*.php' -newermt '2026-09-05 00:00:00' -print
Thay đường dẫn và thời điểm theo môi trường thực tế. Kết quả chỉ là danh sách cần review, không phải malware verdict.
Ưu tiên vị trí có PHP nhưng không khóa vào một thư mục
Kiểm tra các khu vực phù hợp với kiến trúc website và những vị trí có thay đổi ngoài baseline. Không nên giả định malware luôn nằm trong uploads, plugin hoặc theme; phạm vi phải dựa trên evidence của incident.
So sánh với baseline và nguồn tin cậy

Với WordPress core hoặc plugin có checksum chính thức, integrity check giúp thu hẹp file khác baseline. Với core:
wp core verify-checksums
Với plugin có checksum trên WordPress.org:
wp plugin verify-checksums --all
Tài liệu: WP-CLI core verify-checksums và WP-CLI plugin verify-checksums.
Tạo hash manifest để so sánh
Với shortlist đã chọn, có thể ghi SHA-256 ở bản sao điều tra:
sha256sum path/to/file.php
| Path | mtime | SHA-256 | Baseline | State |
|---|---|---|---|---|
| wp-content/…/file.php | 2026-09-05 10:12 +0700 | … | Không có/khác | REVIEW |
| wp-includes/example.php | 2026-09-05 09:00 +0700 | … | Khớp core | EXPLAINED |
Đây là cấu trúc minh họa, không phải IOC thực tế.
Không kết luận từ tên file hoặc code khó đọc
Filename ngẫu nhiên có thể đáng chú ý nhưng không phải bằng chứng độc hại. Ngược lại, code trái phép có thể nằm trong file có tên hoàn toàn bình thường. Cần kết hợp hash, provenance, diff, log và behavior.
Kết nối file change với access log
Nếu timestamp đủ chính xác, đối chiếu với request và sự kiện quản trị quanh thời điểm đó. Bài cách đọc access log khi WordPress bị hack tập trung vào correlation mà không suy diễn từ một IP đơn lẻ.
Nếu file có dấu hiệu backdoor
Không chạy code nghi vấn trên production để thử. Ghi nhận evidence phù hợp rồi dùng workflow phát hiện PHP backdoor trong WordPress để đánh giá theo baseline, behavior và log.
File bị tạo lại sau khi xóa nói lên điều gì?
Đó là tín hiệu cần điều tra persistence hoặc nguồn deploy khác, không phải lý do để tiếp tục xóa lặp lại. Có thể kiểm tra cron job WordPress bất thường cùng các lớp persistence khác theo evidence.
Stop condition trước remediation
- Chưa chuẩn hóa timezone.
- Không có baseline hoặc clean source đáng tin cậy.
- File thuộc custom code nhưng chưa xác minh owner.
- Chưa lưu hash/path/timestamp cần thiết.
- Shortlist quá rộng vì incident window chưa rõ — cần quay lại timeline trước khi thay đổi.
Nguồn kỹ thuật tham khảo
Kết luận
Tìm file PHP mới tạo hoặc vừa chỉnh sửa là bước triage hữu ích khi được đặt trong timeline đã chuẩn hóa timezone. Timestamp giúp thu hẹp phạm vi; hash manifest, clean baseline, integrity check và log correlation mới giúp phân loại file đáng tin cậy mà không xóa nhầm thành phần hợp lệ.
