Tình trạng
- Website đang rank top ngon bỗng nhiên các từ khoá bị out xa top liên tục.
- Traffic giảm đột ngột, gần về 0.
- Các landing page bán hàng truy cập với nội dung bình thường, tuy nhiên trên Google lại index với nội dung lạ hoắc.
- Kiểm tra phần bài danh sách bài post trong wp-admin không thấy bài lại.
- Kiểm tra nội dung trong database cũng không chứa các nội dung lạ như Google index
Kiểm tra
Site này đang có sẵn Imunify. Imunify là công cụ scan shell có phí nên quét theo thời gian thực khá chuẩn. Mình vào kiểm tra History thì thấy không ghi nhận mã độc nào. Chạy scan cũng không phát hiện ra gì.
Kiểm tra checksum bộ core WordPress cũng hoàn toàn hợp lệ. Cảm giác game bắt đầu khó.
Khi Imunify scan không ra shell thì thường các shell được giấu rất tinh vi để bypass. Mình phải móc script Scan Shell của mình ra để scan manual. Phần kết quả scan của các file có tính năng upload mình phát hiện có file “wp-amox.php” khả nghi.
Sau khi đọc mã nguồn và truy cập thử bằng trình duyệt thì xác định chính xác đây là shell có nhiệm vụ quản lý file và dùng để upload các shell khác lên server.
Khoanh vùng thời gian upload file này thì phát hiện ra thêm plugin đáng nghi ngờ khác là “Custom Justin”. Đọc mã nguồn và xác định đây chính xác là mã độc chính.
Phân tích mã độc
Đoạn code này hook vào giai đoạn “init” để xác định kết quả sẽ trả về cho người truy cập. Mỗi truy cập dù là của người hay của bot sẽ đều bị đi qua plugin này để kiểm soát.
Code kiểm tra nếu là truy cập có User-Agent là Google bot thì sẽ can thiệp để trả về nội dung bẩn.
Ngoài ra thì sẽ trả về nội dung website như bình thường. Điều này khiến cho người dùng, admin khi vào website không phát hiện ra điều gì bất thường. Nhưng khi Google truy cập nhận được các nội dung sẽ tiến hành index chúng, và thay thế các nội dung hợp lệ cũ của các landing page thành nội dung bẩn => bay sạch từ khoá, rớt tóp, rớt traffic.
Truy cập website “Vật phẩm Phật giáo” bằng trình duyệt với User-Agent của Google Bot trả về giao diện hết hồn.
Truy vết
Kiểm tra trong admin thì thấy plugin này có giao diện để config nên chắc hẳn đối tượng đã phải truy cập vào để cấu hình. Tiến hành trace log liên quan đến plugin và lập danh sách IP khả nghi.
Sau khi kiểm tra và phân tích, phát hiện ra có 1 IP có hành vi đáng ngờ: cố gắng truy cập vào admin vào buổi sáng nhưng thất bại. Tiếp sau đó là 1 loạt request vào file XML-RPC, sau đó đến trưa thì cố gắng đăng nhập lại admin, tuy nhiên lần này đã đăng nhập thành công chỉ sau 1 lần thử. Điều đặc biệt khác cho thấy lần đăng nhập thành công này có Referer từ Google Docs!
Các dữ kiện trên cho thấy đối tượng đã tiến hành bruteforce thành công tài khoản admin thông qua XML-RPC. Đối tượng đã sử dụng công cụ dò mật khẩu tự động và tool lưu kết quả tìm được lên Google Docs. Sau đó đối tượng vào Google Docs, bấm vào link kết quả để đăng nhập thành công vào website.
Kiểm tra lại danh sách người dùng trên website cho thấy có gần 10 dùng, tất cả đều là quyền admin. Khi xác nhận lại với chủ site thì đây chỉ là những user bình thường vào để post bài, nên việc cấp quyền admin như vậy đã vô tình tạo ra rủi ro lớn dẫn tới website bị chiếm quyền.
Sau khi login thành công thì log cho thấy đối tượng tiến hành upload plugin và sau đó là config plugin.
Xử lý
Sau khi xác định chính xác nguyên nhân là do bị chiếm quyền admin rồi upload mã độc. Mình đã tiến hành các bước bảo mật lại khu vực này:
- Xoá mã độc, plugin, các backdoor được chèn vào.
- Hạ quyền user về quyền editor
- Đổi toàn bộ password
- Tắt XML-RPC
- Bật reCaptcha ở form login admin để tránh tấn công tự động (bao gồm dò mật khẩu)
- Bật xác thực đa yếu tố (2FA) cho admin
- Config wp-config để không cho phép edit theme/upload plugin mới.
- Disable thực thi PHP cho các thư mục uploads.
- Setup theo dõi và cảnh báo danh sách file PHP mới bị chỉnh sửa/upload lên server.
Kết quả
Vào bằng trình duyệt với User-Agent của GoogleBot cũng đã hiện đúng nội dung.
Index của các landing page đã nhận lại đúng nội dung.
Traffic bắt đầu hồi phục, keyword rank top mạnh mẽ trở lại.
Trích: Nguyễn Hưng (Bo) – Admin Vietnix