Vì sao website tái nhiễm mã độc sau khi đã làm sạch?

HPB
HPB Media Team
•
•
Khoảng 6 phút đọc

Tóm tắt: Website được làm sạch rồi nhiễm lại chỉ sau vài giờ gần như không bao giờ do “quét sót một file”. Nguyên nhân nằm ở các cơ chế được thiết kế riêng để sống sót qua đợt dọn dẹp. Bài viết mô tả năm cơ chế thường gặp và thứ tự xử lý đúng để cắt vòng lặp tái tạo.

Tái nhiễm khác với chưa sạch

Cần phân biệt hai tình huống. Chưa sạch là mã độc vẫn còn nguyên, chỉ là chưa được phát hiện. Tái nhiễm là website đã sạch ở một thời điểm, sau đó có thứ gì đó tạo lại mã độc.

Cách phân biệt: sau khi làm sạch, ghi lại danh sách tệp và thời điểm. Nếu tệp xấu xuất hiện trở lại với tên khác và thời điểm tạo mới hơn mốc làm sạch, đó là tái nhiễm — nghĩa là còn một cơ chế đang hoạt động, chứ không phải bạn quét sót.

Năm cơ chế khiến mã độc quay lại

1. Khai báo nạp mã tự động ở tầng cấu hình

Đây là cơ chế dai dẳng nhất. Một dòng khai báo trong tệp cấu hình PHP hoặc cấu hình máy chủ khiến một tệp được nạp trước mọi request, kể cả trước khi WordPress khởi động. Xoá tệp mã độc mà giữ lại dòng khai báo thì tệp sẽ được tạo lại. Trong một sự cố chúng tôi xử lý đầu tháng 09/2026, khai báo dạng này xuất hiện ở gần 50 vị trí trải trên hơn 20 website của cùng một tài khoản hosting.

2. Tiến trình chạy ngầm

Một tiến trình PHP chạy nền liên tục, không phụ thuộc vào việc có ai truy cập website hay không. Nhiệm vụ của nó là sinh lại tệp mã độc với tên ngẫu nhiên mới mỗi lần bị xoá. Nếu chỉ xoá tệp mà không dừng tiến trình, bạn sẽ thấy tệp mới xuất hiện gần như tức thì với tên hoàn toàn khác — nên tưởng là quét sót.

3. Tài khoản quản trị cửa hậu

Kẻ tấn công tạo sẵn nhiều tài khoản quản trị với email tự sinh theo chính tên miền của website. Chỉ cần một tài khoản còn sót là đủ để cài lại toàn bộ. Vì vậy rà soát danh sách người dùng là bước bắt buộc, không phải tuỳ chọn.

4. Bản sao đặt trong thư mục tải lên

Thư mục chứa ảnh và tài liệu thường được coi là vô hại nên hay bị bỏ qua khi dọn. Mã độc đặt bản cài đặt nén ở đây chính vì lý do đó: khi bạn cài lại theme và plugin, thư mục này không bị động tới, và bản sao vẫn còn nguyên.

5. Đường vào ban đầu chưa được bịt

Nếu lỗ hổng ban đầu vẫn còn, website sẽ bị xâm nhập lại từ đầu — đây không hẳn là tái nhiễm mà là một lần tấn công mới. Một nguồn rất hay gặp: tệp sao lưu để trong thư mục web, tải công khai được, bên trong chứa tệp cấu hình có mật khẩu cơ sở dữ liệu. Một nguồn khác là nhiều website dùng chung một mật khẩu cơ sở dữ liệu, khiến chỉ cần lộ một nơi là lan ngang toàn bộ.

Thứ tự xử lý đúng

Năm bước xử lý mã độc theo đúng thứ tự để cắt vòng lặp tái nhiễm
Làm sai thứ tự là nguyên nhân phổ biến nhất khiến website sạch rồi lại nhiễm ngay trong ngày.

Thứ tự này quan trọng hơn công cụ. Nếu xoá tệp trước khi gỡ khai báo nạp tự động và dừng tiến trình ngầm, bạn sẽ lặp lại công việc vô ích nhiều lần.

Một chi tiết đáng lưu ý ở bước đầu tiên: mã độc có thể đổi quyền thư mục để công cụ quét bỏ qua thư mục đó mà không báo lỗi. Kết quả quét trả về “sạch” trong khi thực tế cả nhánh thư mục chưa hề được đọc. Vì vậy bước mở quyền phải làm trước, và phải kiểm tra rằng lệnh quét thực sự đọc được toàn bộ.

Vì sao quét theo tên file là không đủ

Nhiều quy trình dọn dẹp dựa vào danh sách tên tệp đã biết. Cách này bỏ sót nhiều biến thể phổ biến:

  • Webshell mang tên rất đời thường như common.php, header.php, core.php, đặt lẫn giữa các tệp hợp lệ.
  • Tệp trạng thái không có đuôi .php, nên không lọt vào bộ lọc tìm kiếm theo phần mở rộng.
  • Mã PHP giấu trong tệp mang đuôi .css, .js hoặc đuôi ảnh.
  • Tệp có kích thước lớn bất thường, phần đầu là mã HTML vô hại để đánh lừa người xem lướt qua.

Cách quét đáng tin cậy hơn gồm ba hướng: đối chiếu checksum lõi WordPress bản chính thức; quét theo nội dung thay vì theo tên; và tìm những tệp không phải PHP nhưng phần đầu lại chứa thẻ mở PHP.

Sau khi cắt được vòng lặp

Công việc chưa kết thúc khi kết quả quét về không. Cần làm tiếp: đổi khoá bảo mật phiên đăng nhập để vô hiệu mọi phiên đang mở; đổi mật khẩu cơ sở dữ liệu, và tách riêng mật khẩu cho từng website nếu trước đó dùng chung; chuyển toàn bộ tệp sao lưu ra khỏi thư mục web; rà lại danh sách người dùng lần cuối; và theo dõi thêm ít nhất một tuần.

Về lâu dài, phần lớn sự cố tái nhiễm bắt nguồn từ việc không có ai theo dõi định kỳ. Xem dịch vụ chăm sóc website để biết các hạng mục kiểm tra theo tuần và theo tháng.

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

Khôi phục từ bản sao lưu cũ có xử lý được không?

Chỉ khi bạn chắc chắn bản sao lưu đó có trước thời điểm xâm nhập. Trong nhiều sự cố, tệp nhiễm sớm nhất có từ hơn một năm trước thời điểm phát hiện — nghĩa là mọi bản sao lưu gần đây đều đã chứa mã độc. Ngoài ra, khôi phục không bịt lỗ hổng ban đầu.

Cài plugin bảo mật sau khi dọn có ngăn được tái nhiễm không?

Giúp ích nhưng không đủ. Plugin bảo mật chạy bên trong WordPress nên không thấy được mã nạp trước khi WordPress khởi động, cũng không dừng được tiến trình chạy ngầm ở tầng hệ điều hành.

Mất bao lâu để xử lý dứt điểm?

Phụ thuộc số lượng website trên cùng tài khoản, mức độ lan rộng và quyền truy cập bạn có. Không nên tin vào cam kết thời gian cố định khi chưa khảo sát — phần lớn thời gian nằm ở bước xác định phạm vi, không phải ở bước xoá tệp.


Website của bạn đã xử lý nhưng vẫn tái nhiễm? Gửi tên miền, mô tả các lần xử lý trước và thời điểm phát hiện lại. HPB Media sẽ trao đổi phạm vi kiểm tra trước khi báo giá — xem dịch vụ xử lý mã độc website hoặc liên hệ tư vấn.

Chia sẻ bài viết:
Facebook Zalo
TÁC GIẢ BÀI VIẾT

HPB Media Team

Đội ngũ chuyên gia kỹ thuật và digital marketing tại HPB Media. Chúng tôi chuyên sâu các giải pháp thiết kế website chuẩn SEO, tối ưu tốc độ tải trang Core Web Vitals và bảo mật - diệt mã độc WordPress cho các doanh nghiệp.


Gọi điện ngay

Liên hệ tư vấn