Kobalos muncul di alam liar



Pakar ESET berbicara tentang malware baru yang menargetkan cluster HPC di seluruh dunia. Ini menarik karena beberapa alasan. Meskipun ukuran basis kode relatif kecil (sampel yang dianalisis berukuran 25 KB), malware cukup kompleks untuk melakukan serangan di Linux, BSD, dan Solaris dan, berpotensi, cocok untuk serangan pada AIX dan Microsoft Windows . Fitur pembeda lainnya adalah kemampuan untuk mengubah server yang terinfeksi menjadi C&C baru atas perintah operator. Karena banyaknya trik dan ukuran kode yang kecil, para peneliti menamainya Kobalos - setelah roh Yunani kuno nakal yang pernah merampok Hercules dan memuja untuk menipu dan menakut-nakuti orang.



Studi yang diterbitkan oleh para ahli menjelaskan perkiraan vektor awal dari kompromi, otentikasi dan mekanisme distribusi, fungsi bawaan, dan memberikan analisis teknis dari kode berbahaya. Setelah itu, para ahli menunjukkan tanda-tanda kompromi dan metode yang diterapkan MITRE ATT & CK.



Kami memiliki gagasan bahwa orang-orang yang memiliki bahasa Inggris yang buruk, tetapi tidak peduli dengan penelitian terkini di bidang keamanan informasi, khususnya, untuk analisis malware, akan menarik dan berguna untuk menerjemahkan analisis semacam itu, di pendapat kami, malware yang tidak biasa.



ESET Research menganalisis Kobalos, malware multi-platform yang sebelumnya tidak dikenal, kompleks, yang dirancang untuk berjalan di Linux, FreeBSD, dan Solaris. Mengingat bahwa para korban sebagian besar adalah organisasi terkenal, tidak diragukan lagi bahwa mereka menjadi sasaran perangkat lunak tersebut. Saat diterapkan, Kobalos memberikan akses ke sistem file host dan terminal jarak jauh yang disusupi, memungkinkan penyerang untuk menjalankan perintah sewenang-wenang.



Kobalos memiliki kemampuan jaringan yang luar biasa. Ini dapat bekerja baik dalam mode pasif atau sebagai bot, yang secara aktif terhubung ke server C&C-nya. Sangat mengherankan bahwa server ini sendiri telah disusupi oleh Kobalos: kode penggunaannya ada di semua sampel malware ini.



Melalui penelitian jaringan yang luas, Penelitian ESET dapat mengidentifikasi dan memberi tahu para korban Kobalos. Tidak diketahui kapan perangkat lunak ini dikembangkan, tetapi aktivitas pertama yang diketahui, dikonfirmasi oleh korban, tercatat pada akhir 2019. Kelompok penyerang yang menjalankan Kobalos berlanjut sepanjang tahun 2020. Teknik serangan Linux terus berkembang, dan pembuat malware berusaha keras untuk meningkatkan desain mereka. Kobalos adalah salah satu program tersebut.



Kesimpulan utama



  • Kobalos adalah pintu belakang multi-platform yang berjalan di Linux, FreeBSD dan Solaris. Ada indikasi bahwa software ini mungkin ada di AIX dan bahkan Windows.


  • Kobalos , , , -. Kobalos , .
  • Kobalos , .
  • Kobalos C&C- . , .
  • OpenSSH. Kobalos.
  • Kobalos. , , - . , SSH.




Jika Anda telah mengikuti Riset ESET dalam beberapa tahun terakhir, Anda mungkin telah memperhatikan bahwa kami lebih suka mencari dan mendokumentasikan malware sisi server yang dikembangkan untuk Linux dan sistem operasi lain yang kurang umum. Salah satu dari laporan pertama tersebut didedikasikan untuk Operasi Windigo dan menjelaskan beberapa kelompok perangkat lunak yang bekerja sama untuk mengarahkan lalu lintas Internet, mengirim spam, dan aktivitas berbahaya lainnya. Operasi Windigo didasarkan pada Ebury, pintu belakang OpenSSH yang mencuri kredensial. Ebury dapat membahayakan klien dan server SSH tanpa memodifikasi file executable OpenSSH. Sebagai gantinya, ia memodifikasi pustaka yang mereka muat dan menambal fungsi agar dapat memulai dan mencuri kredensial setelah memuat pintu belakang. Tugas itu tidak mudah, tetapi penulis Ebury berhasil menyelesaikannya.



Setelah Operasi Windigo, kami menemukan dan mendeskripsikan beberapa malware lain di Linux, seperti Mumblehard , Moose , Shishiga , dan juga mendeskripsikan lusinan pintu belakang untuk OpenSSH di Sisi gelap laporan ForSSHe .



Hingga saat ini, kami belum menemukan malware Linux yang sulit dianalisis seperti Ebury. Tapi kali ini situasinya berbeda: tidak seperti Ebury, aksi Kobalos tidak terlihat berskala besar. Jumlah mobil yang dikompromikan oleh mereka ada puluhan, dan dalam kasus Ebury - puluhan ribu. Artikel ini memberikan analisis teknis lengkap tentang Kobalos, target penyerang, dan indikator penyusupan yang dapat membantu calon korban menemukan malware dan menghapusnya.



Korban



Setelah menganalisis malware, ESET melakukan pemindaian Internet ekstensif untuk mencari korban Kobalos. Kami mencari perilaku pintu belakang tertentu, yang ditandai dengan membuat koneksi TCP dengan host yang dikompromikan dari port keluar tertentu.



Mengingat kerumitan perangkat lunak ini, kami terkejut dengan jumlah korban yang sangat sedikit. Namun, tujuan itu sendiri jelas tidak dipilih secara kebetulan: ini adalah komputer berkinerja tinggi (HPC) dan server yang merupakan bagian dari jaringan ilmiah dan penelitian. Salah satu komputer ini memiliki setidaknya 512 GB RAM dan penyimpanan disk hampir petabyte. Kami juga menemukan organisasi korban terkenal lainnya, seperti vendor keamanan titik akhir (bukan kami!).





Gambar 1. Industri dan wilayah tempat organisasi yang dikompromikan berada.



Di beberapa organisasi, beberapa server terinfeksi sekaligus. Kami memberi tahu semua korban yang kami temukan dan bekerja sama untuk menghapus malware. Terima kasih kepada semua orang yang menanggapi dan membagikan informasi yang membantu kami dalam studi ini.



Vektor awal kompromi



Kami tidak tahu secara langsung bagaimana sistem dikompromikan sehingga penyerang dapat memperoleh akses administratif untuk menginstal Kobalos. Kami hanya dapat berspekulasi berdasarkan bukti yang dikumpulkan.



Pada mesin yang disusupi yang sysadminnya mengambil bagian dalam penyelidikan, kami menemukan bahwa program pencurian kredensial SSH disajikan sebagai klien OpenSSH yang ter-Trojan. Mengajukan /usr/bin/ssh



diganti dengan executable yang dimodifikasi yang mencatat nama pengguna, kata sandi, nama host target dan menyimpannya ke file terenkripsi. Oleh karena itu, kami yakin bahwa pencurian identitas adalah salah satu cara distribusi Kobalos. Ini juga dapat menjelaskan mengapa banyak jaringan akademis yang dikompromikan: jika ada klien SSH yang digunakan oleh mahasiswa atau peneliti dari beberapa universitas, maka kredensial untuk semua sistem pihak ketiga ini dapat dicuri.



Titik masuk lain yang mungkin adalah eksploitasi kerentanan yang diketahui: beberapa mesin yang disusupi menjalankan OS dan aplikasi lama, tidak didukung atau tidak ditambal, sehingga opsi menggunakan eksploitasi yang diketahui kemungkinan besar. Tetapi Anda juga tidak boleh mengecualikan kemungkinan menggunakan kerentanan yang saat ini tidak diketahui.



Serangan pada jaringan untuk komputasi kinerja tinggi



ESET telah berbagi informasi dengan organisasi yang memainkan peran penting dalam menyelesaikan insiden dalam sistem penelitian dan akademik, seperti Tim Keamanan Komputer CERN. Mereka mengonfirmasi bahwa dari akhir 2019 hingga pertengahan 2020, komunitas HPC dilanda gelombang tiga serangan berbeda, beberapa di antaranya diumumkan secara publik .



Setelah penyelidikan berbulan-bulan, masih belum jelas apakah ketiga gelombang ini terkait satu sama lain, atau hanya kebetulan yang tidak terduga. Operator malware menggunakan taktik, teknik, dan tingkat kesulitan yang berbeda. Di sisi lain, aneh bahwa dalam serangan yang berbeda beberapa alamat IP bertepatan.



  1. Gelombang pertama menggunakan Kobalos, yang dijelaskan dalam penelitian ini.
  2. Gelombang kedua berfokus pada penambangan cryptocurrency dengan seperangkat alat yang sangat berbeda.
  3. Gelombang ketiga adalah yang terbesar, tetapi muatannya belum ditentukan.


Tanda-tanda tidak langsung dari gangguan akibat gelombang kedua dan ketiga dijelaskan oleh Tim Tanggap Insiden Keamanan Komputer Infrastruktur Jaringan Eropa dalam bentuk insiden # EGI20200421 dan # EGI2020512 .



Tidak jelas mengapa komunitas HPC dominan di antara korban serangan ini. HPC memang menarik, tentu saja, tetapi biasanya lebih sulit ditembus daripada server R&D lainnya. Melalui proses tanggapan insiden berbasis komunitas yang terdistribusi, CERN dan tim lain yang terlibat telah mengidentifikasi sejumlah arsitektur usang dan praktik keamanan yang kurang optimal yang telah memainkan peran kunci dalam penyebaran serangan. Selain itu, sebagian besar korban dari komunitas HPC kurang siap untuk melakukan investigasi, terutama dalam hal kegiatan sistem pemantauan.



Ulasan Kobalos



Kobalos memiliki banyak kemampuan untuk mengakses sistem yang dikompromikan dan menyembunyikan jejak penggunaannya.



Akses ke sistem yang disusupi



Pertama, Kobalos menyediakan perintah umum untuk membaca dan menulis ke sistem file, serta untuk meluncurkan terminal dan menjalankan perintah sewenang-wenang. Sayangnya, tidak ada muatan khusus dalam program yang menunjukkan maksud dari penulis. Kemungkinan besar, operator menjalankan shell perintah melalui terminal dan menjalankan perintah yang mereka butuhkan.



Ketersediaan



Kedua, Kobalos memiliki sejumlah fitur yang memungkinkan Anda membuat koneksi jaringan antara operator dan malware yang dijalankan. Perangkat lunak ini menyediakan aksesibilitas eksternalnya dalam beberapa cara:



  1. Membuka port TCP dan menunggu koneksi masuk (mode ini terkadang disebut pintu belakang pasif).
  2. Menghubungkan ke instans Kobalos lain yang dikonfigurasi sebagai server C&C.
  3. Menunggu koneksi ke layanan sah yang sudah berjalan, keluar dari port TCP tertentu.


Metode terakhir membutuhkan penggantian layanan yang berjalan dengan yang lain yang berisi kode Kobalos. Dalam semua kasus di mana kami mencatat penggunaan metode ini, penyerang harus memodifikasi server OpenSSH yang sedang berjalan. File sshd



diganti seluruhnya, sehingga program terus bekerja bahkan saat layanan atau sistem di-restart.



Otentikasi dan enkripsi jaringan



Ketiga, untuk menjalankan pintu belakang, Anda perlu mengautentikasi kliennya, yang harus memiliki kunci dan sandi RSA-512 pribadi. Setelah memeriksanya, Kobalos membuat dan mengenkripsi dua kunci publik 16-byte menggunakan algoritma RSA-512 dan mengirimkannya ke penyerang. Kedua kunci ini digunakan untuk enkripsi RC4 dari lalu lintas masuk dan keluar berikutnya.



Perubahan port



Keempat, selama otentikasi, operator dapat terus berinteraksi melalui koneksi TCP lainnya. Atas permintaan, Kobalos dapat mulai mendengarkan port yang diinginkan dan mentransfer semua komunikasi berikutnya ke port tersebut. Data yang melewati saluran ini dienkripsi menggunakan kunci RC4 yang dibuat selama otentikasi.



Melakukan proxy ke mesin lain yang disusupi



Kelima, Kobalos dapat digunakan sebagai proxy untuk terhubung ke server lain yang dikomprominya. Ini bukan proxy TCP biasa: memerlukan enkapsulasi data dalam paket khusus, dan juga mendukung perubahan port di atas: untuk ini, perintah dikirim yang "mengalihkan" koneksi.



Proxy dapat dirantai, yang berarti operator dapat menggunakan beberapa mesin yang disusupi Kobalos untuk terhubung ke server target.



Seperangkat kemungkinan





Gambar 2. Gambaran umum kapabilitas Kobalos dan kemungkinan skenario untuk mengakses server yang disusupi.



Skenario pertama adalah koneksi langsung ke server yang disusupi untuk mengakses sumber daya mereka. Dalam diagram, pintu belakang berjalan di dalam proses server OpenSSH dan mengharapkan koneksi memiliki port sumber. Operator harus menggunakan port TCP sumber yang benar untuk berkomunikasi dengan pintu belakang.



Skenario kedua bisa dibilang yang paling menantang, tetapi dilengkapi dengan fitur-fitur unik Kobalos. Operator dapat menjalankan server C&C dari server manapun yang menjalankan perangkat lunak ini. Tidak ada kode tambahan yang diperlukan untuk ini, semua fungsionalitas sudah ada di dalamnya. Setelah diluncurkan, server C&C memeriksa daftar bot yang terhubung, dan operator dapat terhubung ke salah satunya. Node terakhir membutuhkan autentikasi dan menerapkan enkripsi ujung ke ujung menggunakan pertukaran kunci RC4. Untuk memastikan skema kerja seperti itu, instans Kobalos di server B harus memiliki alamat IP dan port server C&C yang berjalan di server A. Server B bertukar lalu lintas hanya dengan server A, menyembunyikan alamat IP operator.



Dalam skenario ketiga, Server A digunakan untuk proxy koneksi ke Server C. Ini juga berlaku otentikasi dan enkripsi ujung-ke-ujung paksa. Operator dapat mengatur port sumber saat menghubungkan dari Server A ke C. Ini berarti bahwa Server A dapat digunakan untuk terhubung ke instans Kobalos yang sedang menunggu koneksi dari port tertentu.



Analisis Teknis Kobalos



Untuk pertama kalinya, kami menganalisis server OpenSSH yang di-trojan. Ukuran kode dan data berbahaya Kobalos cukup kecil: sekitar 25 KB untuk sampel x86-64. Anehnya, semua kode tersebut dikemas menjadi satu fungsi. Hanya ada satu panggilan ke fungsi ini dalam kode OpenSSH yang sah.



Kobalos adalah perangkat lunak yang kompleks. Jelas, para pengembangnya berusaha keras dalam pembuatannya. Penulis telah mengimplementasikan banyak fitur dan mengimplementasikan kebingungan mereka sendiri.



Kebingungan



Perataan aliran kontrol yang luar biasa



Fakta bahwa kode cocok dengan satu fungsi tidak berarti bahwa aliran kontrol linier. Kobalos secara rekursif memanggil fungsinya untuk melakukan subtugas yang diperlukan.





Gambar 3. Grafik aliran kendali Kobalos.



Parameter pertama dari fungsi tersebut adalah tindakan yang harus dilakukan. Kobalos dapat melakukan 37 tindakan. Ini tercantum dalam lampiran Fitur Bawaan Kobalos , yang membantu Anda menganalisis versi perangkat lunak ini saat ini dan kemungkinan yang akan datang. Fungsi ini juga berfungsi sebagai penangan sinyal SIGCHLD



untuk menghentikan proses turunan dengan anggun dan SIGALRM



menangani batas waktu koneksi.



Sejauh menyangkut kode sumber Kobalos, itu mungkin seperti mengkompilasi kode C di bawah ini. Bagian dari konversi dapat diotomatiskan dengan fungsi yang disejajarkan oleh kompilator, tetapi menetapkan pengidentifikasi numerik ke semua fungsi dan menangani jumlah argumen yang sama dalam fungsi membutuhkan pekerjaan manual atau perkakas khusus.



Sebelum Setelah
int add(int a, int b) {
return a + b;
}

int mul(int a, int b) {
return a * b;
}

int square(int a) {
return mul(a, a);
}

int get_magic(void) {
return add(square(59), 56);
}

int main(void) {
return get_magic();
}

      
      





int f(int action, int a, int b) {
int ret;
switch(action) {
case 1000:
ret = a + b;
break; case 1001:
ret = a * b;
break; case 1002:
ret = f(1001, a, a);
break; case 1003:
ret = f(1002, 59, 0);
ret = f(1000, ret, 56);
break;
}
return ret;
}

int main(void) {
return f(1003, 0, 0);
}

      
      







Gambar 4. Kode C ini menunjukkan tampilan kode sumber Kobalos setelah menyelaraskan aliran kontrol.



Nilai string terenkripsi



Kode dan data Kobalos tidak mengandung nilai string teks biasa. Hanya beberapa string pendek yang dienkripsi dengan RC4 digunakan di sini. Mereka didekripsi segera setelah interaksi awal dengan program, tetapi sebelum otentikasi. Untuk semua sampel yang kami analisis, satu kunci digunakan - AE 0E 05 09 0F 3A C2 B5 0B 1B C6 E9 1D 2F E3 CE



.



Nilai string yang didekodekan:



  1. % s% s
  2. / dev / ptmx
  3. ptem
  4. ldterm
  5. ttcompat
  6. / dev / tty
  7. % s
  8. % d
  9. /
  10. \
  11. % DD
  12. win3.11
  13. win95
  14. winNT
  15. menang ??
  16. \\. \ pipa \ 2
  17. % s% s.% s
  18. / dev / ptc


Dalam sampel Kobalos yang kami analisis, hanya nilai tebal (1 dan 6-9) yang digunakan. Yang lainnya tidak disebutkan, meskipun mungkin digunakan di beberapa versi lain. Khususnya:



  • Baris 10 dan 12-16 tampaknya khusus untuk Windows.
  • Baris 18 adalah jalur ke driver perangkat pseudo-terminal di AIX.
  • Baris 3-5 digunakan oleh pemanggilan sistem pseudo-terminal Solaris.


Kami tidak dapat mengecualikan opsi untuk mencoba memberikan informasi yang salah kepada peneliti tentang keberadaan versi untuk sistem operasi lain. Mengingat bahwa kami telah mengonfirmasi dukungan untuk tiga sistem operasi, tidak mengherankan jika ada lebih banyak sistem operasi. Di sisi lain, Windows 3.11 dan Windows 95 berusia lebih dari 25 tahun. Apakah ada versi Kobalos untuk sistem warisan ini?



Menentang investigasi



Setelah diautentikasi, beberapa teknik diterapkan ke proses pintu belakang untuk menghalangi penyelidikan:



  • Nilai RLIMIT_CORE



    dihapus untuk mencegah kernel dump dibuat saat terjadi crash proses.
  • Sebagian besar sinyal diabaikan untuk mempersulit proses.




Gambar 5. Kobalos menghindari kernel dumps saat crash dan mengabaikan sebagian besar sinyal.



Penting untuk dicatat bahwa konfigurasi RLIMIT_CORE



tidak ada salahnya untuk membuang proses secara manual, misalnya, menggunakan gcore



gdb. Batas ini digunakan oleh kernel untuk menentukan ukuran maksimum dump memori saat proses lumpuh.



Stempel waktu



Analisis sistem file dari server yang disusupi menunjukkan bahwa setelah pengaturan, stempel waktu dari file yang diganti (seperti ssh



untuk menambahkan modul pencurian kredensial atau sshd



untuk menerapkan Kobalos) dirusak untuk menghindari kecurigaan.



Konfigurasi



Kobalos memiliki konfigurasi statis yang mengaktifkan atau menonaktifkan fungsi perangkat lunak. Tabel 1 mencantumkan bidang yang kami anggap sebagai bagian dari konfigurasi. Gambar 6 menunjukkan contoh dunia nyata.



Tabel 1. Struktur konfigurasi statis Kobalos:

Ukuran (byte) Deskripsi
2 Mungkin nomor versi. Ditransmisikan pada otentikasi yang berhasil. Dalam semua sampel yang ditemukan, itu penting 0xB03



(mengingat itu dikirim dalam format dari yang tertinggi ke yang terendah, seperti semua data Kobalos lainnya).
320 Modul kunci publik RSA. Dienkripsi dalam format biner khusus.
2 Port TCP untuk mendengarkan. Jika disetel ke nol, maka Kobalos tidak akan mendengarkan di port, tetapi akan menggunakan metode lain untuk menunggu koneksi ke pintu belakang.
2 C&C-, . , — .
2 . ( ) ( ).
4 IP- C&C- . Kobalos .
2 x 16 TCP-, C&C-.
16 MD5- , .




Gambar 6. Contoh konfigurasi sampel Kobalos yang disematkan di sshd.



Beberapa konfigurasi akan berbeda jika Kobalos dijalankan secara internal sshd



atau sebagai file yang dapat dieksekusi terpisah. Dalam kasus terakhir, alamat server C&C jarak jauh ( remote_c2_addr



) atau port mendengarkan ( listen_port



) diperlukan .



Penyebaran dan pelestarian



Jika Kobalos digunakan untuk menjalankan sebagai bagian dari server OpenSSH, file tersebut sshd



harus dikompilasi ulang untuk menambahkan kode berbahaya. Kami membandingkan OpenSSH versi Trojan dan versi yang harus diinstal pada sistem, misalnya, dari manajer paket. Sepertinya operator sedang mengkompilasi Kobalos berdasarkan OpenSSH sumber yang benar sudah diinstal di server. Eksekusi yang terinfeksi kemungkinan besar akan dikompilasi pada mesin korban sebelum mengganti aslinya. Kemungkinan besar, skema seperti itu dipilih demi memastikan keamanan perangkat lunak dengan mencegah ketidakcocokan versi, yang dapat menyebabkan ketidakcocokan pustaka.



Perlu dicatat bahwa untuk mengganti sshd



membutuhkan hak akses root. Namun, ada versi Kobalos sebagai file terpisah yang terhubung ke server C&C atau mendengarkan di port TCP. Anda tidak memerlukan hak administrator untuk menjalankannya, tetapi akses ke sistem file dan serangkaian perintah akan dibatasi oleh tingkat akses pengguna saat ini.



Interaksi pintu belakang



Koneksi pintu belakang



Salah satu fitur penting dari Kobalos adalah fleksibilitas dalam membangun koneksi antara operator dan host yang dikompromikan. Ini dapat dilakukan dengan tiga cara:



  1. Mendengarkan port TCP yang ditentukan (mode pasif).
  2. Dengan menghubungkan ke server C&C (mode aktif) dan menunggu operator untuk terhubung melalui server ini.
  3. Dengan mengganti layanan yang ada yang mendengarkan pada port TCP, dan menunggu sambungan dari port TCP sumber tertentu.


Dengan menggunakan konfigurasi statis Kobalos, beberapa metode dapat diaktifkan sekaligus, namun pada setiap sampel yang kami analisis, hanya satu yang diaktifkan.



Metode terakhir membutuhkan modifikasi daemon yang dapat dieksekusi. Versi trojan akan memanggil kode Kobalos setiap kali menerima koneksi TCP baru, seperti yang ditunjukkan pada Gambar 7. Backdoor dapat menerimanya jika koneksi berasal dari port TCP tertentu. Jika nomor port cocok, fungsi tidak mengembalikan apa-apa, dan subproses berakhir ketika koneksi ditutup. Jika port tidak sesuai dengan yang ditentukan, maka program tidak melakukan apa pun dan mentransfer pekerjaan ke kode layanan yang sah, yang terus berfungsi dengan baik.





Gambar 7. Memanggil fungsi dari fungsi OpenSSH yang di-trojan setelah menerima koneksi TCP baru. Ini adalah yang paling sering kami lihat dan hanya disalahgunakan oleh server OpenSSH. Namun, datanya mungkin salah, karena inilah cara kami mendeteksi saat memindai Internet. Seperti yang ditunjukkan pada Gambar 8, Kobalos mendengarkan pada port TCP 55201. kobalos



main

















Gambar 8. Perbandingan port sumber dengan 55201.



Kobalos menerapkan metode tambahan untuk memfilter koneksi TCP yang masuk, membandingkan port sumber dengan daftar 16 port:





Gambar 9. Perbandingan port sumber dengan daftar 16 port.



Daftar 16 port:



dua puluh 567 2734 22392
21 982 5392 33921
53 1821 11568 44983
230 1912 19678 55201


Namun, tidak ada sampel yang ditemukan yang menggunakan filter ini. Ini mungkin telah digunakan di versi sebelumnya dari pintu belakang.



Autentikasi



Setelah koneksi dibuat, otentikasi dilakukan. Untuk pekerjaan lebih lanjut, Anda memerlukan kunci RSA pribadi dan kata sandi 32-byte. Klien Kobalos mengirimkan paket 320-byte awal ke server yang terinfeksi, strukturnya dijelaskan pada Tabel 2.



Tabel 2. Struktur paket otentikasi (dienkripsi menggunakan kunci RSA pribadi) :

Ukuran (byte) Deskripsi Nilai
empat Parameter misterius 0x7FFF000A





2 Port mengikat Jika 0x0000



, maka Kobalos memilih port acak 0xFFFF



, jika menggunakan koneksi TCP yang sudah ada.
satu Pengenal saluran komunikasi Sepertinya selalu ditetapkan sebagai 0xFF



.
32 Kata sandi Nilai kata sandi cocok dengan hash MD5 dalam konfigurasi statis.
280 isi


64 byte pertama dari paket didekripsi menggunakan konfigurasi modulus dan eksponen kunci publik RSA-512 0x10001



(lihat Gambar 11). Kemudian, seperti yang ditunjukkan pada Gambar 10, hashing MD5 diterapkan ke sandi 32-byte, dan hasilnya dibandingkan dengan informasi dari konfigurasi statis.





Gambar 10. Setelah menerima 320 byte, otentikasi dilakukan.





Gambar 11. Memuat kunci publik RSA-512.



Menggunakan kunci RSA publik, Kobalos mengenkripsi dan menyetel kunci RC4 yang digunakan untuk komunikasi lebih lanjut: satu untuk lalu lintas masuk, satu lagi untuk lalu lintas keluar. Kobalos mengirimkan kunci terenkripsi sebagai tanggapannya.



Tabel 3. Struktur respons Kobalos (dienkripsi dengan kunci publik RSA) :

Ukuran (byte) Deskripsi Nilai
empat Parameter misterius 0x7FFF000A





16 Kunci RC4 untuk lalu lintas masuk Kunci RC4 digunakan untuk lalu lintas ke host yang disusupi.
16 Kunci RC4 untuk lalu lintas keluar Kunci RC4 digunakan untuk lalu lintas dari host yang disusupi.
2 Port terikat Port TCP digunakan sebagai saluran aktif. Nilai 0xFFFF



berarti menggunakan koneksi saat ini.
282 isi


Saluran aktif



Setelah melewati otentikasi, saluran aktif dapat menggunakan port yang berbeda. Anda mungkin telah memperhatikan bahwa dengan otentikasi klien, Anda perlu memberikan "port pengikat" dalam pesan terenkripsi.



  • Jika nilainya berbeda dari 0xFFFF



    , maka Kobalos akan mulai mendengarkan port TCP yang ditentukan.
  • Jika nilainya nol, maka pintu belakang akan mulai mendengarkan port acak di atas 1024.


Seperti disebutkan di atas, dalam respons otentikasi, bersama dengan pasangan kunci RC4, nomor port yang baru dibuka ditransmisikan. Jika diinginkan, koneksi TCP tambahan dapat dibuat: jika nilai dikirim sebagai port pengikat 0xFFFF



, koneksi saat ini digunakan.



Komunikasi selanjutnya melalui koneksi TCP ini dikemas dalam paket, formatnya dijelaskan pada Tabel 4.



Tabel 4. Struktur paket Kobalos :

Ukuran (byte) Nilai
satu Arti misterius ( 0x7F



)
2 Muatan
satu Pengenal saluran komunikasi.
satu Pengenal saluran komunikasi.
payload_size Payload (dienkripsi dengan RC4).


Kobalos adalah yang pertama mengirimkan paket ke operator yang terhubung. Paket berisi informasi dasar tentang mesin, seperti nama host dan versi kernel. Gambar 12 menunjukkan tingkat enkapsulasi dalam sebuah paket.





Gambar 12. Informasi yang dikirim ke operator dari host yang disusupi.



Gambar 13 menunjukkan proses komunikasi antara Kobalos dan pelanggannya.





Gambar 13. Diagram urutan protokol jaringan Kobalos.



Manajemen pintu belakang



Setelah otentikasi, operator dapat mengeluarkan perintah yang berbeda ke pintu belakang. Kami telah membaginya menjadi beberapa kategori:



  1. Terhubung ke server lain yang terinfeksi Kobalos dan bertindak sebagai proxy.
  2. Membaca dan menulis file apa pun ke sistem file.
  3. Meluncurkan dan mengakses pseudo-terminal pada host yang disusupi.
  4. Meluncurkan dan mengelola server Kobalos C&C dengan akses ke bot yang terhubung.


Perintah dienkapsulasi di saluran aktif. Mereka mulai dengan byte pengenal, diikuti dengan parameter yang diurai oleh perintah ini. Perintah yang dijelaskan dalam pekerjaan ini diproses oleh Kobalos, yaitu operator mengirimkannya ke sistem yang dikompromikan menggunakan klien khusus. Balasan Kobalos dalam format yang sama, dengan byte pengenal pertama, dan balasan diproses oleh klien yang sama. Misalnya, setelah otentikasi, perintah "kirim informasi host" ( 0x04



) dapat diberikan .



Menggunakan sebagai proxy



Operator dapat menggunakan Kobalos yang diinstal di mesin yang disusupi untuk terhubung ke instance lain dari pintu belakang di sistem lain. Mode proxy menggunakan ukuran paket khusus yang dijelaskan di atas untuk otentikasi dan enkapsulasi, yaitu, ini bukan proxy TCP normal.



Saat menghubungkan ke mesin pihak ketiga, operator dapat memilih port TCP sumber. Ini memungkinkan Anda untuk terhubung ke instans Kobalos yang sedang menunggu koneksi dari port tertentu. Menghubungkan kembali saluran aktif melalui port alternatif juga didukung. Untuk ini, perintah khusus diberikan.



Salah satu tugas dalam kasus ini adalah memastikan tingkat anonimitas operator tertentu. Node akhir hanya melihat alamat IP dari mesin lain yang disusupi, bukan alamat IP operator. Untuk lebih menyembunyikan alamat operator, Anda dapat membuat rantai mesin proxy yang disusupi. Gambar 14 menunjukkan skenario seperti itu.





Gambar 14. Kobalos digunakan sebagai proxy.



Perintah kontrol proxy dijelaskan pada Tabel 5.



Tabel 5. Perintah untuk menggunakan Kobalos sebagai proxy :

Perintah Deskripsi Pilihan
0x01 Membuat koneksi ke host lain yang dikompromikan oleh Kobalos. Alamat jarak jauh. Port sumber. Port akhir. Pesan otentikasi (320 byte).
0x03 . , TCP-. .
0x05 .




Setelah otentikasi, operator dapat membaca atau menulis file apapun ke sistem. Dalam protokol jaringan Kobalos, muatan yang dienkapsulasi ditentukan menggunakan integer 16-bit. Artinya, operator hanya dapat mengirimkan 64K paket. Misalnya, jika dia ingin menulis 200 KB ke sebuah file, dia harus menjalankan empat perintah tulis yang berhasil. Perintah baca memiliki batasan yang lebih ketat: hanya 1000 byte yang dapat dibaca dan dikirim dalam satu waktu.



Tabel 6 menjelaskan perintah untuk bekerja dengan sistem file.



Tabel 6. Perintah untuk membaca dan menulis file :

Perintah Deskripsi Pilihan
0x18 Membuka file untuk menulis; jika tidak, maka file tersebut dibuat. Posisi pencarian. Jalur ke file.
0x1A Menulis ke file. Data untuk ditulis. Mereka akan ditimpa dari posisi pencarian.
0x1C Menutup file setelah merekam.
0x1D Membuka dan membaca file. Posisi pencarian. Jalur ke file.
0x20 Menutup file setelah membaca.


Membuat pseudo-terminal



Fungsionalitas ini memungkinkan operator terotentikasi untuk membuat shell di pseudo-terminal baru dan menjalankan perintah arbitrer. Untuk melakukan ini, gunakan perintah dari Tabel 7.



Tabel 7. Perintah untuk membuat dan mengelola pseudo-terminal :

Perintah Deskripsi Pilihan
0x12 Peluncuran pseudo-terminal baru. Jalur ke shell (misalnya /bin/sh



). Argumen.
0x0D Menentukan ukuran jendela pseudo-terminal. Nilai struktur winsize



diterima oleh TIOCSWINSZ .
0x14 Menutup terminal semu.
0x16 Menulis ke pseudo-terminal. Data untuk ditulis.


Data dari terminal dikirim ke operator, dan setelah data muncul pengenal perintah penutup 0x17



. Ini diterapkan di klien yang digunakan operator.



Gunakan sebagai server C&C



Salah satu fitur Kobalos yang paling tidak biasa adalah kode server C&C sudah terpasang di backdoor itu sendiri. Ini memungkinkan penyerang untuk mengubah mesin yang terinfeksi menjadi server C&C (untuk bot lain) dengan satu perintah. Setelah memulai server, operator dapat menyetel alamat IP dan portnya dalam konfigurasi instans Kobalos di masa mendatang yang akan diterapkan di host lain. Ini memungkinkan:



  • Gunakan sumber daya yang disusupi sebagai server C&C, daripada menyewa server dari penyedia reguler. Ini mengurangi kemungkinan tidak tersedianya server.
  • Gunakan server C&C sebagai node perantara untuk mesin di belakang firewall yang tidak memiliki koneksi langsung dari Internet.


Saat operator mengirimkan perintah "transisi ke mode C&C" ( 0x21



) , nomor port akan diteruskan sebagai parameter. Kobalos mulai mendengarkannya, dan bot menggunakan port ini untuk terhubung ke instance server C&C. Namun, pintu belakang juga mendengarkan nomor port berikutnya yang lebih tinggi. Misalnya, jika bot menggunakan TCP port 7070, maka dalam mode C&C Kobalos juga mendengarkan pada 7071. Porta kedua digunakan oleh operator untuk mengontrol fungsi C&C, seperti membuat daftar bot dan membuat terowongan ke sana. Diagram tersebut ditunjukkan pada Gambar 15.





Gambar 15. Operator Kobalos memanggil bot yang melaporkan dirinya ke server C&C.



Tabel 8 menjelaskan perintah untuk mengontrol kapabilitas server C&C.



Tabel 8. Perintah untuk mengontrol fungsi server C & C :

Perintah Deskripsi Pilihan
0x21 Peluncuran server C&C. Port TCP untuk server C&C.
0x23 Dapatkan jumlah koneksi aktif dan total sejak C&C dimulai.
0x25 Daftar semua bot yang siap menjalankan perintah.
0x29 Memutuskan sambungan server C&C.
0x2B Hubungkan ke bot. Indeks bot dari daftar bot yang siap terhubung. Pesan otentikasi (320 byte).
0x2D Menghubungkan ke bot tanpa otentikasi. Indeks bot dari daftar bot yang siap terhubung.


Perintah 0x23



- 0x2D



diproses oleh subproses server C&C. Seperti yang ditunjukkan pada Gambar 16, setelah dikirim pada saluran aktif, data dialihkan melalui TCP ke antarmuka loopback dari port kontrol (satu lebih banyak dari nomor port yang digunakan oleh bot) dari server C&C.





Gambar 16. Paket yang terkait dengan manajemen server C&C diteruskan melalui TCP ke subproses.



Perintah lainnya



Variabel lingkungan



Untuk proses backdoor, terdapat perintah untuk mengatur variabel lingkungan. Dibutuhkan string sebagai parameter dan diteruskan ke putenv , yang mengharapkan data dalam format "VAR = value".



Tabel 9. Perintah lain yang dipahami Kobalos :

Perintah Deskripsi Pilihan
0x0E Menetapkan variabel lingkungan untuk sesi. String untuk diteruskan putenv



.


Operasi kosong



Ada dua perintah lagi yang diterapkan, tetapi mereka tidak melakukan apa-apa. Kami memiliki dua penjelasan untuk ini:



  • Penulis menghapus fungsionalitas perintah seperti yang digunakan di versi sebelumnya dan tidak lagi diperlukan.
  • Perintahnya khusus untuk platform dan tidak berlaku untuk versi Linux dan FreeBSD dari Kobalos yang kami analisis.




Gambar 17. Tim dan tidak melakukan apa pun. Penjelasan kedua sepertinya lebih mungkin karena kita mengetahui nilai string untuk Solaris, AIX, dan Windows (lihat bab Nilai String Terenkripsi). 0x07



0x09











Program pencurian kredensial OpenSSH



Pada sebagian besar sistem yang dikompromikan oleh Kobalos, pintu belakang juga menggunakan program untuk mencuri kredensial SSH melalui klien SSH yang telah di-Trojan. Kami menemukan versi yang berbeda dari file ini, termasuk Linux dan FreeBSD. Tidak seperti Kobalos, kapabilitas program ini hampir tidak disamarkan. Fungsi utamanya adalah mencuri nama host, nomor port, dan nama pengguna dan kata sandi untuk membuat koneksi SSH dari host yang dikompromikan. Data disimpan ke file terenkripsi. Versi terbaru dari Trojan juga dapat mengirimkan informasi melalui jaringan melalui UDP, tetapi fitur ini tidak diaktifkan di konfigurasi sebagian besar sampel yang ditemukan.



Tetapi pada saat publikasi studi kami sebelumnya tentang pintu belakang OpenSSH "Sisi gelap ForSSHE", kami tidak tahu tentang Trojan ini, jadi tidak disebutkan dalam pekerjaan itu. Kami juga tidak dapat menautkannya ke salah satu program pencurian kredensial OpenSSH yang dijelaskan dalam sumber terbuka.



Lokasi file data yang dicuri bergantung pada versi program. Semua sampel membuat /var/run



file dengan ekstensi .pid di direktori . Ini digunakan di banyak file di direktori ini. Anda dapat melihat contoh nama file dan jalur ke sana dari sampel yang berbeda di bab "Tanda-tanda penyusupan".



Semua sampel yang ditemukan mengenkripsi konten file menggunakan satu sandi sederhana. Seperti yang ditunjukkan pada Gambar 18, Trojan hanya menambahkan 123 ke setiap byte data yang disimpannya.





Gambar 18. Mengenkripsi dan Menulis Kredensial SSH yang Dicuri ke File.



Versi FreeBSD menggunakan format dan sandi yang sama. Namun, penerapannya sedikit berbeda, misalnya, dalam program, jalur ke file dienkripsi menggunakan XOR byte tunggal.



Mengembangkan keluarga program



Setelah kami memberi tahu salah satu organisasi korban, mereka menemukan versi terbaru dari Trojan pencuri kredensial. Ini berisi konfigurasi terenkripsi dan memungkinkan informasi yang dicuri untuk dikirim melalui UDP ke host jarak jauh yang ditentukan dalam konfigurasi. Ebury dan program pencurian kredensial SSH lainnya seperti Bonadan, Kessel, dan Chandrila juga memiliki kemampuan ini. Mungkin UDP dipilih untuk melewati firewall dan tidak membuat koneksi TCP ke host yang berpotensi tidak tepercaya. Trojan hanya menggunakan satu metode transmisi - melalui file atau jaringan, karena nama host target dan jalur ke file disimpan dalam variabel yang sama.



Gambar 19 menunjukkan kode yang didekompilasi untuk mengirim data melalui UDP. Dan gambar 20 menunjukkan konfigurasi dari sampel yang ditemukan. Itu dikonfigurasi untuk memasukkan informasi yang dicuri ke dalam /var/run/sshd/sshd.pid



.





Gambar 19. Trojan mengirimkan kredensial melalui UDP .





Gambar 20. Contoh konfigurasi yang menggunakan file untuk menangkap data yang dicuri.



Anehnya, konfigurasi tersebut juga berisi nama host korban. Ini mungkin digunakan oleh operator untuk menunjukkan sumber data. Ini juga berarti bahwa setiap server yang disusupi menerima contoh unik dari Trojan.



Kesimpulan



Banyak fitur dan teknik pengelakan jaringan yang diterapkan dengan baik menunjukkan bahwa penulis Kobalos jauh lebih terampil daripada banyak penulis malware untuk Linux dan sistem non-Windows lainnya. Penargetan - organisasi yang cukup terkenal - juga memberi tahu kita bahwa operator Kobalos tidak bermaksud menginfeksi sebanyak mungkin sistem. Jejak rendah dan teknik bypass jaringan bisa menjadi alasan backdoor tidak diketahui sampai kami memberi tahu korban tentang hasil pemindaian jaringan kami.



Kami tidak bisa menjawab pertanyaan tentang niat para penyerang. Kemampuan pintu belakang memungkinkan Anda menggunakannya untuk menyelesaikan masalah apa pun. Tidak ada perangkat lunak tambahan yang ditemukan pada mesin yang disusupi kecuali untuk Trojan yang mencuri kredensial SSH. Oleh karena itu, kami menganggap SSH sebagai titik masuk, dan bukan muatannya. Menurut informasi dari sysadmin sistem informasi HPC yang dikompromikan dari sysadmin sistem HPC yang dikompromikan, tidak ada yang mencoba menambang cryptocurrency atau meluncurkan tugas lain yang membutuhkan daya komputasi yang besar.



Apa yang dikejar para penyerang?



Kami juga tidak dapat mengetahui sudah berapa lama software ini digunakan. Kami menemukan baris yang terkait dengan Windows 3.11 dan Windows 95 yang keluar lebih dari 25 tahun yang lalu. Apakah ada Kobalos versi Windows? Program ini dibuat lama sekali? Kami mengetahui adanya infeksi baru pada 2019 dan 2020, tetapi tidak menemukan bukti penggunaan sebelumnya.



Meskipun penulis perangkat lunak ini tampaknya sangat ahli dalam pengoperasian protokol jaringan dan sistem operasi korban mereka, Kobalos memiliki beberapa kelemahan. Pertama, masalah dengan kriptografi kemungkinan besar disebabkan oleh perkembangan industri ini, jika Kobalos benar-benar dikembangkan dalam waktu yang sangat lama. Kedua, Anda mungkin memperhatikan bahwa ada instance yang mendengarkan secara pasif, terutama jika mereka memerlukan port TCP sumber tertentu. Kami berhasil memanfaatkan fitur ini dan memberi tahu korban untuk mengurangi jumlah host yang terinfeksi dan lebih memahami ancaman yang baru ditemukan ini.



Kami juga melaporkan hasil kerja Maciej Kotowicz dari MalwareLab pl , yang menganalisis Kobalos secara independen dan dengan siapa kami bertukar hasil survei. Dia bilang Oh My H@ck 2020.



. Kobalos



1003 INITIALIZE socket, filter Kobalos , ( enum).
1004 START_LISTENING C&C- .
1005 START_C2_SERVER socket_1, socket_2 C&C-.
1006 SEND_PACKET socket_fd, &channel_1,

&channel_2, data, data_len
Kobalos socket_fd.
1007 RECV_PACKET socket_fd, &channel_1,

&channel_2, data, data_len
Kobalos socket_fd.
1008 GET_RANDOM_INT random_int 32- . PRNG .
1009 GET_HOST_INFO out_buf, returns buf_len , IP- .
1010 SET_COMMON_SOCKOPT socket SO_REUSEADDR SO_KEEPALIVE

true, SO_LINGER —

15 .
1011 RC4_DECRYPT_STRING_INPLACE str, len str RC4- .
1012 CLEANUP_THINGS what_to_close, send_report . . .
1013 RC4_INIT context, key_size, key RC4 .
1014 RC4_CRYPT context, len, data_in, data_out RC4- .
1015 MD5 input, input_len, output_digest MD5-.
1016

to 1037
, .
1038 RSA_PUBLIC_DECRYPT
1039 LOAD_PUB_KEY key_bin_data, public_key Memuat BLOB dengan kunci RSA publik dari key_bin_data ke public_key.


Tanda-tanda kompromi



Nama-nama ditemukan oleh ESET



  • Linux / Kobalos
  • Linux / Agen. IV
  • Linux / SSHDoor.EV
  • Linux / SSHDoor.FB
  • Linux / SSHDoor.FC


Sampel



Kobalos



SHA-1 Target OS Dibangun ke dalam Ketersediaan
FBF0A76CED2939D1F7EC5F9EA58C5A294207F7FE



RHEL sshd Menunggu koneksi dari port sumber 55201.
479F470E83F9A5B66363FBA5547FDFCF727949DA



Debian Berdiri sendiri Terhubung ke

151.80.57 [.] 191: 7070
AFFA12CC94578D63A8B178AE19F6601D5C8BB224



FreeBSD sshd Menunggu koneksi dari port sumber 55201.
325F24E8F5D56DB43D6914D9234C08C888CDAE50



Ubuntu sshd Menunggu koneksi dari port sumber 55201.
A4050A8171B0FA3AE9031E0F8B7272FACF04A3AA



Arch Linux sshd Menunggu koneksi dari port sumber 55201.


Trojan untuk mencuri kredensial SSH



SHA-1 Target OS Menulis di
6616DE799B5105EE2EB83BBE25C7F4433420DFF7



RHEL /var/run/nscd/ns.pid



E094DD02CC954B6104791925E0D1880782B046CF



RHEL /var/run/udev/ud.pid



1DD0EDC5744D63A731DB8C3B42EFBD09D91FED78



FreeBSD /var/run/udevd.pid



C1F530D3C189B9A74DBE02CFEB29F38BE8CA41BA



Arch Linux /var/run/nscd/ns.pid



659CBDF9288137937BB71146B6F722FFCDA1C5FE



Ubuntu /var/run/sshd/sshd.pid





Kunci



Kunci publik RSA



-----BEGIN PUBLIC KEY----- MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAOUgD8sEF1kZ04QxCd60HrB+TxWnLQED
wzb0sZ8vMMD6xnUAJspdYzSVDnRnKYjTOM43qtLNcJOwVj6cuC1uHHMCAwEAAQ==
-----END PUBLIC KEY-----

      
      





Kunci RC4 statis untuk nilai string



AE0E05090F3AC2B50B1BC6E91D2FE3CE

      
      





Aturan YARA



rule kobalos
{
meta:
 = “Kobalos malware” author = “Marc-Etienne M.Léveillé” date = “2020-11-02”

reference = «http://www.welivesecurity.com» source = «https://github.com/eset/malware-ioc/» license = «BSD 2-Clause»

version = “1”

strings:
$encrypted_strings_sizes = {
05 00 00 00 09 00 00 00 04 00 00 00 06 00 00 00
08 00 00 00 08 00 00 00 02 00 00 00 02 00 00 00
01 00 00 00 01 00 00 00 05 00 00 00 07 00 00 00
05 00 00 00 05 00 00 00 05 00 00 00 0A 00 00 00
}
$password_md5_digest = { 3ADD48192654BD558A4A4CED9C255C4C }
$rsa_512_mod_header = { 10 11 02 00 09 02 00 }
$strings_RC4_key = { AE0E05090F3AC2B50B1BC6E91D2FE3CE }

condition:
any of them
}

rule kobalos_ssh_credential_stealer { meta:
 = “Kobalos SSH credential stealer seen in OpenSSH client” author = “Marc-Etienne M.Léveillé”
date = “2020-11-02”
reference = «http://www.welivesecurity.com» source = «https://github.com/eset/malware-ioc/» license = «BSD 2-Clause»

version = “1”

strings:
$ = “user: %.128s host: %.128s port %05d user: %.128s password: %.128s”

condition:
any of them

}

      
      





Teknik MITRE ATT & CK



Tabel dikompilasi menggunakan versi kedelapan dari kerangka kerja ATT & CK.



Taktik Pengenal Nama Deskripsi
Keberlanjutan T1554 Kompromi Biner Perangkat Lunak Klien Kobalos OpenSSH- sshd



.Kobalos SSH- .
T1205 Traffic Signaling Kobalos TCP- .
Defense Evasion T1070.003 Clear Command History Kobalos , .
T1070.006 Timestomp Kobalos .
T1027.002 Software Packing Kobalos .
Command And Control T1573.001 Encrypted Channel: Symmetric Cryptography RC4.
T1573.002 Encrypted Channel: Asymmetric Cryptography RSA-512.
T1090.003 Proxy: Multi-hop Proxy Kobalos , Kobalos.



All Articles