Trang Chủ >Kiến thức dịch vụ > KB & Tips > Cpanel-based servers bị redirect về websex (phần 2)

Cpanel-based servers bị redirect về websex (phần 2)

Ngoài phương thức chèn thêm các Apache module hoặc thay đổi cấu hình của Apache như đã giới thiệu ở loạt bài trước, hiện tại các attacker đã phát triển thêm một phương thức mới đó là thay thế các Apache binary với một version đã nhiễm độc. Đây là loại backdoor vô cùng phức tạp (gọi là Linux/Cdorked.A) mà ESET đã nghiên cứu và cho ra báo cáo như sau:

Xác định backdoor

Việc sử dụng các tool như “rpm -Va” hay “rpm -qf” hay “dpkg -S” để kiểm tra các Apache modules đã bị thay đổi chưa là không hiệu quả và kĩ thuật này không làm việc được với loại backdoor này vì Cpanel cài đặt Apache trong thư mục /usr/local/apache và không sử dụng trình quản lý gói RPM và đặc biệt buồn là không có một câu lệnh nào có thể xác định chính xác Apache binary đã bị thay đổi hay chưa!

Lý do là timestamp của binary file luôn được giữ, vì thế sẽ không thể thấy được ngày thay đổi file. Một cách đang tin cậy để xác đinh file binary thay đổi hay chưa là sử dụng “open_tty” trong thư mục của apache:

# grep -r open_tty /usr/local/apache/

Nếu tìm thấy open_tty trong Apache binary, nó cho ta thấy 99% là Apache đã bị thay đổi vì nguyên gốc file Apache binary không hề chứa lời gọi đến “open_tty”. Một điểm thú vị khác là ta cũng không thể thay thế đơn thuần một file binary bị nhiễm độc bằng file nguyên gốc của nó vì chúng đã được set thuộc tính immutable (không thể thay đổi). Vì vậy cần phải thực hiện lệnh sau trước khi thay thế:

# chattr -ai /usr/local/apache/bin/httpd

Sự lây nhiễm của backdoor

Một khi binary đã bị nhiễm độc, nó không thay đổi bất kì thứ gì trong việc sử dụng site hay tạo ra điều gì khác biệt. Tuy nhiên với các request ngẫu nhiên (xảy ra trong 1 ngày trên mỗi 1 địa chỉ IP), thay vì hiển thị nội dung site, nó add thêm các mã độc redirect và trình duyệt sẽ load nội dung từ các domain ngẫu nhiên giống như sau:

http://893111632ce77ff9.aliz.co.kr/index.php (62.212.130.115)
http://894651446c103f0e.after1201.com (62.212.130.115)
http://328aaaf8978cc492.ajintechno.co.kr (62.212.130.115)
http://23024b407634252a.ajaxstudy.net (62.212.130.115)
http://cdb9156b281f7b01.ajuelec.co.kr (62.212.130.115)
http://894651446c103f0e.after1201.com (62.212.130.115)
..

Và rất nhiều cái khác như bên dưới. Nếu trình duyệt yêu cầu 1 file .js nó sẽ trả về lỗi 302 và trỏ tới:

Location: http://dcb84fc82e1f7b01.alarm-gsm.be/index.php?j=originalfilebase64

Ở đây, “originalfilebase64″  là một chuỗi encoded base64 của một URL được request. Nó cho phép malware hiển thị cùng nội dung gốc. Một khi malware được load, nó sẽ redirect người dùng đến những site hầu hết là porn site. Những URL này thay đổi thường xuyên và có rất rất nhiều biến thể của chúng.

Đặc tính Backdoor

ESET đã phân tích file binary và phát hiện có backdoor ẩn trong httpd binary file, có thể mô tả ngắn gọn như sau:

Linux/Cdorked.A là một trong những Apache backdoor phức tạp nhất từng có. Mặc dù đã xử lý hàng tá dữ liệu, hệ thống Livegrid đã báo cáo hàng trăm server bị xâm nhập, hàng ngàn website bị lây nhiễm nhưng backdoor này không để lại dấu vết gì trên hệ thống ngoài file binary httpd bị thay đổi. Tất cả các thông tin về backdoor này được lưu trong shared memory, cấu hình được đẩy vào thông qua các request obfuscated, cái mà không để lại thông tin gì trong Apache log. Điều đó có nghĩa, không lệnh nào cũng như không thông tin điều khiển nào được lưu trên hệ thống.

HTTP server bị nhiễm có thể được kích hoạt thông qua các HTTP GET request đặc biệt. Nó được gọi khi thực hiện một request đến một đường dẫn cụ thể với một chuỗi query dạng đặc biệt, đó là hostname và port để kết nối. IP của người dùng trong gói HTTP được sử dụng như 1 khóa để giải mã chuỗi truy vấn là một khóa XOR 4 byte. Hơn thế nữa, IP nằm trong X-Real-IP hay X-Forwarded-For headers sẽ ghi đè vào IP client như một khóa XOR, kết quả là ta nhận được một khóa trong X-Real-IP header có dạng “x00x00x00x00” ……..

 

Sau khi bị redirect, một web cookie được set trên trình duyệt người dùng và nó sẽ không bị redirect trở lại. Cookie cũng được set nếu request đến một trang tương tự trang quản trị admin. Backdoor này có khả năng check URL, server name, hay các referrer có chứa một trong số các chuỗi:‘*adm*’, ‘*webmaster*’, ‘*submit*’, ‘*stat*’, ‘*mrtg*’, ‘*webmin*’, ‘*cpanel*’, ‘*memb*’, ‘*bucks*’, ‘*bill*’, ‘*host*’, ‘*secur*’, ‘*support*’.  nhằm tránh gửi những đoạn mã redirect đến người quản trị khiến nó trở nên rất khó để phát hiện.

 

Linux/Cdorked.A backdoor cho phép attacker toàn quyền điều khiển server, các nghiên cứu đã phát hiện có 23 lệnh trong đó được tải lên server thông qua POST request. Sử dụng những lệnh này attacker có thể dễ dàng thay đổi cấu hình, chèn thêm các module và thay thế cả binary file.

Như đã thấy, attacker không cần bất cứ file nào để hoạt động cho backdoor mà chỉ cần Apache binary. ESET đã phát triển một công cụ cho phép xác định sự xuất hiện của Linux/Cdorked.A như sau:

Tạo file dump_cdorked_config.c với nội dung:

// This program dumps the content of a shared memory block
// used by Linux/Cdorked.A into a file named httpd_cdorked_config.bin
// when the machine is infected.
//
// Some of the data is encrypted. If your server is infected and you
// would like to help, please send the httpd_cdorked_config.bin
// and your httpd executable to our lab for analysis. Thanks!
//
// Build with gcc -o dump_cdorked_config dump_cdorked_config.c
//
// Marc-Etienne M.Léveillé <leveille@eset.com>
//

#include <stdio.h>
#include <sys/shm.h>

#define CDORKED_SHM_SIZE (6118512)
#define CDORKED_OUTFILE "httpd_cdorked_config.bin"

int main (int argc, char *argv[]) {
    int maxkey, id, shmid, infected = 0;
    struct shm_info shm_info;
    struct shmid_ds shmds;
    void * cdorked_data;
    FILE * outfile;

    maxkey = shmctl(0, SHM_INFO, (void *) &shm_info);
    for(id = 0; id <= maxkey; id++) {
        shmid = shmctl(id, SHM_STAT, &shmds);
        if (shmid < 0)
            continue;

        if(shmds.shm_segsz == CDORKED_SHM_SIZE) {
            // We have a matching Cdorked memory segment
            infected++;
            printf("A shared memory matching Cdorked signature was found.n");
            printf("You should check your HTTP server's executable file integrity.n");

            cdorked_data = shmat(shmid, NULL, 0666);
            if(cdorked_data != NULL) {
                outfile = fopen(CDORKED_OUTFILE, "wb");
                if(outfile == NULL) {
                    printf("Could not open file %s for writing.", CDORKED_OUTFILE);
                }
                else {
                    fwrite(cdorked_data, CDORKED_SHM_SIZE, 1, outfile);
                    fclose(outfile);

                    printf("The Cdorked configuration was dumped in the %s file.nn", CDORKED_OUTFILE);
                }
            }
        }
    }
    if(infected == 0) {
        printf("No shared memory matching Cdorked signature was found.n");
        printf("To further verify your server, run "ipcs -m -p" and look");
        printf(" for a memory segments created by your http server.n");
    }
    else {
        printf("If you would like to help us in our research on Cdorked, ");
        printf("please send the httpd_cdorked_config.bin and your httpd executable file ");
        printf("to our lab for analysis at leveille@eset.com. Thanks!n");
    }
    return infected;
}
Hỗ trợ Kinh Doanh
0908.751868 Mr.Tài
sales@vcloud.vn
Hỗ Trợ Kỹ Thuật
0933 167 123 Mr.Trí
support@vcloud.vn
Tư vấn Máy Chủ
0933 167 123 Mr.Trí
support@vcloud.vn
ĐỐI TÁC