Truy Tìm Mã Độc Khiến Website Rớt Top Google

Truy Tìm Mã Độc Khiến Website Rớt Top Google

Hôm nay Digizone sẽ lên cho anh em 1 siêu phẩm kinh điển xử lý mã độc website (web shell) cho trang “Vật phẩm Phật giáo” đang do chiến tướng Trần Chí Quyết (Seosona) trấn giữ. Case này dị hợm ở chỗ các landing bán hàng mình vào thì bình thường, nhưng trên Google lại bị index các trang này với nội dung lạ hoắc. Vậy ngay bây giờ chúng ta hãy bắt đầu cuộc hành trình Truy Tìm Mã Độc Khiến Website Rớt Top Google.

Truy Tìm Mã Độc Khiến Website Rớt Top Google – Traffic Gần Về 0 Và Sự Phục Hồi Ngoạn Mục

1. 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 các page này (kể cả trang chủ) 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
Truy Tìm Mã Độc Khiến Website Rớt Top Google
Truy Tìm Mã Độc Khiến Website Rớt Top Google
Google index các bài viết có title xấu
Google index các bài viết có title xấu

2. KIỂM TRA

– Site này đang chạy trên Hosting của Vietnix nên 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 Vietnix 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 (xem hình).
– 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.
Mã điều khiển của C&C server (Command & Control Server)
Mã điều khiển của C&C server (Command & Control Server)
Đoạn mã độc bị chèn vào wp-load
Đoạn mã độc bị chèn vào wp-load
Backlink ẩn bị chèn, chỉ hiển thị với Googlebot
Backlink ẩn bị chèn, chỉ hiển thị với Googlebot

3. 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à bot của Google thì sẽ can thiệp để trả về nội dung bẩn (xem hình). 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 ở phía Google, khi 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 (trang bán hàng, trang chủ…) thành nội dung bẩn => bay sạch từ khoá, rớt tóp, rớt traffic.
– Mở trình duyệt và đổi User-Agent sang Google bot rồi truy cập trang chủ thì xác nhận đúng logic như trên (xem hình).

4. 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 anh Quyết 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.
Truy Tìm Mã Độc Khiến Website Rớt Top Google
Truy Tìm Mã Độc Khiến Website Rớt Top Google

5. 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.

6. KẾT QUẢ

– Traffic bắt đầu hồi phục, keyword rank top mạnh mẽ trở lại.
– Index của các landing page đã nhận lại đúng nội dung
– Vào bằng trình duyệt với User-Agent của GoogleBot cũng đã hiện đúng nội dung
Và cuối cùng, chúc thầy Quyết on top bền vững, kaka.
Cheers – Nguyễn Hưng (Bo Vietnix)