Mã độc XorDdos trỗi dậy, tấn công DDOS vào các thiết bị Linux
Trong 6 tháng qua Microsoft đã phát hiện mã độc XorDdos tăng 254%. Mã độc được phát hiện đầu tiên vào năm 2014 bởi nhóm nghiên cứu MalwareMustDie. Nó được đặt tên là XorDdos bởi mục đích tấn công DDOS và sử dụng thuật toán mã hóa XOR.
XorDdos có xu hướng tấn công vào các thiết bị chạy hệ điều hành Linux, các thiết bị IOT..Nó phát tán thông qua tấn công bruteforce (dò mật khẩu) giao thức SSH. Để vượt qua các giải pháp bảo mật, mã độc đã tạo ra rất nhiều biến thể khác nhau bằng cách random các byte trong file. Ngoài ra để chống forensic mã độc đã ghi đè các file log của hệ thống
Dưới đây là phần phân tích chuyên sâu về mã độc bao gồm các mục sau:
1. Bước tấn công đầu tiên
XorDdos sử dụng các shell độc hại để thử mật khẩu hợp lệ trên hàng nghìn các máy chủ. Vì thế chúng ta sẽ thấy rất nhiều log đăng nhập thất bại
Sau khi dò được mật khẩu thành công. Mã độc sẽ thực hiện một trong hai cách sau để cài mã độc:
- Cách 1: Copy file và chạy mã độc ELF trong thư mục / dev / shm
- Cách 2: Chay lệnh bash với các chức năng sau
- Duyệt tìm các thư mục có thể ghi
- /bin
- /home
- /root
- /tmp
- /usr
- /etc
- Sử dụng CURL để tải mã độc ELF từ hxxp://Ipv4PII_777789ffaa5b68638cdaea8ecfa10b24b326ed7d/1[.]txt và lưu ra file ygljglkjgfg0.
- Thay đổi file có quyền executable
- Chạy file mã độc ELF
- Đổi tên và chuyển file Wget vào các thư mục sau
- mv /usr/bin/wget /usr/bin/good
- mv /bin/wget /bin/good
- Cố gắng tải file mã độc ELF lần thứ 2, lần này nó sử dụng Wget trong thư mục good
- Sau khi chạy file ELF, nó sẽ chống forensic bằng các ghi đè nội dung vào các file log nhạy cảm
/root/.bash_history File chứa các lệnh từng chạy /var/log/wtmp File chứa thông tin đăng nhập /var/log/btmp File chứa thông tin đăng nhập false /var/log/lastlog File chứa thông tin đăng nhập gần đây /var/log/secure File chứa thông tin xác thực không thành công, thông tin đăng nhập sudo... /var/log/boot.log File chứa thông tin khởi động hệ thống /var/log/cron File chứa thông tin chạy cron, nhật ký chạy thành công, thất bại /var/log/dmesg File chứa thông tin về kernel, driver... /var/log/firewalld File chứa nhật ký tường lửa /var/log/maillog File chứa thông tin mail server /var/log/messages File chứa thông báo các hoạt động chung của hệ thống /var/log/spooler File chứa nội dung từ usernet /var/log/syslog File chứa các thông báo chung của hệ thống /var/log/yum.log File chứa các thông tin remo yum utility
- Duyệt tìm các thư mục có thể ghi
2. Phân tích XorDdos
Mã độc phân tích là một file ELF 32bit. Phân tích symbol ra được các file chức năng của mã độc như sau, mã độc được lập trình bằng C/C++.
- crtstuff.c
- autorun.c
- crc32.c
- encrypt.c
- execpacket.c
- buildnet.c
- hide.c
- http.c
- kill.c
- main.c
- proc.c
- socket.c
- tcp.c
- thread.c
- findip.c
- dns.c
Mã độc có các module có chức năng chống bị phát hiện
2.1.1 Daemon processes
Mã độc chạy chế độ daemon (tương tự như service trên Windows) để tồn tại cùng hệ thống thông qua các bước bên dưới:
- Mã độc gọi daemon(__nochdir, __noclose) để tự thiết lập nó chạy chế độ nền và gọi 2 API fork () và setid (). API fork () tạo ra một process con mới với group ID của tiến trình cha
- Sau khi gọi fork() thành công, mã độc tự kết thúc tiến trình bằng mã EXIT_SUCCESS (0). Mục đích để tiến trình con không có group, đây là điều kiện để gọi setsid() thành công. Sau đó nó gọi setsid() để thoát khỏi phiên của Terminal
- Chương trình con daemon nếu chạy với tham số __nochdir bằng 0 thì nó sẽ chuyển thư mục hiện tại thành thư mục root (“/“)
- Tham số _noclose bằng 0, nó sẽ chuyển hướng log lỗi, thông báo trong quá trình chạy với daemon vào thư mục dev / null.
- Chặn SIGHUP - khi một phiên bị kết thúc
2.1.2 Sử dụng thuật toán XOR
Mã độc sử dụng thuật toán XOR để mã hóa dữ liệu với key "BB2FA36AAA9541F0". Bảng bên dưới là các giá trị mã hóa sau khi được giải mã.
Khi tiến trình mã độc chạy, các tham số được truyền vào dưới dạng string, tham số đầu tiên luôn là đường dẫn của chính mã độc. Để giả mạo, mã độc đã xóa và ghi đè tham số đầu tiên. Ví dụ như Resolutionv.conf.
Một số mẫu XorDdos đã cài đặt rootkit. Rootkit có chức năng ẩn dấn mã độc bằng cách sửa các cấu trúc của hệ điều hành:
- Cung cấp quyền truy cập root
- Ẩn chính nó
- Ẩn các file của mã độc
- Ẩn các kết nối mạng, cổng mà mã độc kết nối đến
Function name | Description |
give_root | Cung câp quyền root bằng cách thiết lập một xác thực mới và gán UID, GID bằng 0 |
module_hide | Ẩn chính nó |
module_show | Hiện chính nó |
get_udp_seq_show | Ẩn các kết nối UDP4 bằng cách hook /proc/net/udp. Ẩn các kết nối UDP6 bằng cách hook /proc/net/udp6 |
get_tcp_seq_show | Ẩn các kết nối TCP4 bằng cách hook g /proc/net/tcp. Ẩn các kết nối TCP6 bằng cách hook /proc/net/tcp6 |
hide_udp4_port | Ẩn UDP4 ports |
unhide_udp4_port | Hiện UDP4 ports |
hide_udp6_port | Ẩn UDP6 ports |
unhide_udp6_port | Hiện UDP6 ports |
hide_tcp4_port | Ẩn TCP4 ports |
unhide_tcp4_port | Hiện TCP4 ports |
hide_tcp6_port | Ẩn TCP6 ports |
unhide_tcp6_port | Hiện TCP6 ports |
unhide_allz | Hiện tất cả các cổng đã ẩn |
2.1.5 Ẩn Process và Port
Mã độc sử dụng rootkit để ẩn process và port của nó nhằm trách phát hiện bởi các giải pháp bảo mật.
/proc là thư mục hệ thống chứa thông tin các tiến trình đang chạy. Ở chế độ usernode có thể lấy bất kỳ thông tin cụ thể của tiến trình bằng các đọc trong thư mục /proc.
- /proc/7728 – Chứa thông tin liên quan đến process id 7728
- /proc/698 – Chứa thông tin liên quan đến process id 698
Lệnh | Ý nghĩa |
0 | Kiểm tra rootkit có đang chạy không |
1, 2 | Ẩn hoặc hiện <PID> |
3 | Ẩn <port> |
2.2 Khởi động cùng hệ thống
Mã độc sử dụng cách khởi động cùng hệ thống khác nhau dựa trên sự hỗ trợ của các phiên bản Linux.
2.2.1 Init script
Mã độc drop script vào thư mục /etc/init.d. Khi hệ thống khởi động, các đoạn mã này sẽ được chạy, nó có nhiệm vụ chạy các chương trình mã độc
2.2.2 Cron script
Mã độc tạo cron script trong thư mục sau etc/cron.hourly/gcc.sh. Với nội dung sau:
Runlevel là một chế độ của hệ thống, nó có thường có giá trị từ 0-6, ví dụ như shutdow, rebot, usermode, system...Thư mục /etc/rc<run_level> chứa các liên kết đến các file, nó chỉ định cách file được quyền chạy ở chế độ nào.
Mã độc đã tạo một liên kết đến file Init script mà mã độc tạo trong thư mục /etc/init.d/<base_file_name> với các runlevel từ 1-5.
Mã độc sẽ cài đặt service để chạy cùng hệ thống. Các lệnh chkconfig –add <service_name> and update-rc.d được gọi khi một daemon process chạy.
Mã độc chạy với các tham số khác nhau tương ứng với các chức năng khác nhau, như dọn dẹp, giả mạo, khởi động cùng hệ thống...
Trước khi xử lý các tham số, đầu tiên nó gọi API readlink để lấy tham số đầu tiên (/proc/self/exe) để lấy full đường dẫn dùng cho các mục đích sau đó như tạo service khởi động cùng hệ thống, đọc giải mã nội dung trong file...Trong phần này sẽ giải thích ý nghĩa các tham số chính.
2.3.1 Không có tham số
Nếu không có tham số truyền vào, mã độc chạy với mục đích đăng ký khởi động cùng hệ thống. Đầu tiên nó kiểm tra xem có đang chạy ở các thư mục /usr/bin/, /bin/, /tmp/ không. Nếu không nó sẽ copy chính nó vào các thư mục này và thêm trong 3 thư mục /lib/ and /var/run/, /lib/libudev.so với tên file ngẫu nhiên độ dài 10 ký tự. Sau đó để các bản sao này là duy nhất (có mã hash khác nhau) nó đã ghi đè 10byte ngẫu nhiên vào cuối file theo các bước sau:
- Mở file để ghi
- Gọi lseek (fd, 0, SEEK_END) để trỏ về vị trí cuối file
- Tạo string random độ dài 10byte
- Ghi đè string vào cuối file
Chạy dưới dạng truyền vào một PID
- /usr/bin/jwvwvxoupv 4849
- Tìm tên đường dẫn theo $pid
- Xóa file theo $pid
- Xóa các init đã cài đặt:
- Xóa /etc/init.d/<file_name>
- For runlevels 1-5, unlinks and deletes /etc/rc<runlevel>.d/S90<file_name>
- Thưc hiện lệnh chkconfig –del <file_name>
- Thực hiện lệnh update-rc.d <file_name> remove
- Kết thúc tác vụ với $pid được cung cấp
Mã độc tạo và chạy với 2 tham số fake command và PID:
- /usr/bin/jwvwvxoupv “cat resolv.conf” 4849
- /usr/bin/jwvwvxoupv gnome-terminal 4849
- /usr/bin/jwvwvxoupv top 4849
- /usr/bin/jwvwvxoupv pwd 4849
- /usr/bin/kagbjahdic id 4849
- at resolv.conf
- netstat -an
- bash
- whoami
- id
- cd /etc
- ifconfig eth0
- ifconfig
- echo “find”
- uptime
- sh
- top
- gnome-terminal
- su
- netstat -antop
- grep “A”
- who
- ls -la
- pwd
- route -n
- ps -ef
- ls
- sleep 1
...............................Updating...................................
Nguồn: www.microsoft.com
Chỉnh sửa lần cuối: