Mã độc XorDdos trỗi dậy, tấn công DDOS vào các thiết bị Linux

HustReMw

VIP Members
20/12/2016
251
544 bài viết
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.
anh-whitehat-vn.png

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
1654569276941.png

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

1654569294391.png

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:
  1. Cách 1: Copy file và chạy mã độc ELF trong thư mục / dev / shm
  2. 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_historyFile chứa các lệnh từng chạy
      /var/log/wtmpFile chứa thông tin đăng nhập
      /var/log/btmpFile chứa thông tin đăng nhập false
      /var/log/lastlogFile chứa thông tin đăng nhập gần đây
      /var/log/secureFile 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.logFile chứa thông tin khởi động hệ thống
      /var/log/cronFile chứa thông tin chạy cron, nhật ký chạy thành công, thất bại
      /var/log/dmesgFile chứa thông tin về kernel, driver...
      /var/log/firewalldFile chứa nhật ký tường lửa
      /var/log/maillogFile chứa thông tin mail server
      /var/log/messagesFile chứa thông báo các hoạt động chung của hệ thống
      /var/log/spoolerFile chứa nội dung từ usernet
      /var/log/syslogFile chứa các thông báo chung của hệ thống
      /var/log/yum.logFile chứa các thông tin remo yum utility
1654569317949.png

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
2.1 Khả năng trốn tránh phát hiện

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
1654569342758.png

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

1654569363788.png
2.1.3 Giả mạo tên tiến trình
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.

1654570635137.png

1654570684139.png
2.1.4 Kernel Rootkit
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
Dựa vào symbols của rootkit, phát hiện rootkit được phát triển dựa trên một mã nguồn mở có tên là rooty. Bảng dưới đây là các sysmbols tương đương của rootkit và rooty.

Function nameDescription
give_rootCung 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_showHiệ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_portHiện UDP4 ports
hide_udp6_portẨn UDP6 ports
unhide_udp6_portHiện UDP6 ports
hide_tcp4_portẨn TCP4 ports
unhide_tcp4_portHiện TCP4 ports
hide_tcp6_portẨn TCP6 ports
unhide_tcp6_portHiện TCP6 ports
unhide_allzHiệ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 strace -e open ps để kiểm tra các lệnh đang lấy gọi qua /proc để lấy thông tin tiến trình. Nếu mã độc ẩn thư thư mục $pid thì có thể ẩn các tìm kiếm thông tin liên quan đến process đó.

1654570768774.png
Trong trường hợp này, mã độc đã giao tiếp với rootkit /proc/rs_dev bằng cách gửi lệnh giao tiếp IOCTL kèm theo các thông tin bổ sung để thực hiện các hành vi tương ứng. IOCTL là một cách để giao tiếp giữa usermode và kernelmode, mã độc sử dụng số 0x9748712 để định danh, phân biệt với các lệnh IOCTL của hệ thống. Tiếp theo sau là Thông tin gửi xuống rootkit là lệnh và giá trị thực hiện.

LệnhÝ nghĩa
0Kiể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
1654670465034.png

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:
1654670500353.png
Sauđó nó tạo file /etc/crontab để chạy file /etc/cron.hourly/gcc.sh 3 phút 1 lần.
1654670525339.png
2.2.3 System V runlevel

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.
1654670557720.png
2.2.3 Auto-start services

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.
1654670582116.png
2.3 Luồng hoạt động dựa trên tham số

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
1654670613400.png
2.3.2 Tham số PID
Chạy dưới dạng truyền vào một PID
  • /usr/bin/jwvwvxoupv 4849
Với ví dụ trên, mã độc chia sẻ một vùng nhớ 64byte với key IPC 0xDA718716 để đồng bộ, kiểm tra xem có tiến trình nào khác của mã độc đang được chạy với tham số đó không. Nếu không tìm thấy nó sẽ chạy thêm tiến trình chính nó với không tham số và gọi 2 lần API Fork () để đảm bảo tiến trình cháu không có thông tin tiến trình cha. Tiến trình cháu sẽ bắt đầu khởi tạo các thông tin, chống forensic...Ngoài ra mã độc còn có tác vụ sau:
  • 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
2.3.3 Tham số fake command và PID

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
Fake command bao gồm:
  • 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
2.3.3 Tham số của một số tiến tình đặc biệt
...............................Updating...................................


Nguồn: www.microsoft.com
 
Chỉnh sửa lần cuối:
Mời các bạn tham gia Group WhiteHat để thảo luận và cập nhật tin tức an ninh mạng hàng ngày.
Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan
Thẻ
ddos linux mã độc xorddos
Bên trên