Operasi TA505, bagian empat. Kembar



Kami terus berbicara tentang kegiatan grup peretas TA505. Ungkapan terkenal "yang baru adalah yang lama terlupakan" adalah yang paling cocok sebagai epigraf untuk bab selanjutnya dari kisah tentang grup TA505. Benar, kali ini yang "lama" tidak begitu banyak "dilupakan" seperti yang dikerjakan ulang dan diperbaiki.

Pada awal September, kami menemukan beberapa pengunduh berbahaya yang dikemas dengan PE-packer khusus dari grup yang kami tulis sebelumnya . Pada pandangan pertama, mereka tampak seperti stager backdoor FlawedAmmyy yang terkenal. Tetapi analisis yang lebih dalam menunjukkan bahwa ini tidak benar. Bukan teknik yang paling canggih untuk menulis kode telah membawa kami ke muatan yang sangat berlawanan dalam hal kualitas eksekusi.

Pada artikel ini, kita akan melihat lebih dekat pada alat yang ditemukan dan menggambar paralel dengan apa yang sudah diketahui.

Bootloader twein


Pertama-tama, yang berikut ini penasaran: dari semua sampel bootloader yang berhasil kami kumpulkan, hanya satu yang memiliki tanda tangan digital:



Fig. 1. Tanda tangan digital dari bootloader

Sertifikat dikeluarkan atas nama PEAR SOLUTIONS LTD. Ngomong-ngomong, ini bukan pertama kalinya sebuah kelompok menandatangani alat-alatnya, menyerahkannya sebagai perangkat lunak yang sah untuk organisasi-organisasi fiktif. Berikut adalah beberapa nama lain yang menggunakan TA505 untuk keluarga malware lain:

  • ET HOMES LTD,
  • FIT DAN FLEX TERBATAS,
  • MISHA LONDON LTD,
  • SATOJI KAIDA MB,
  • SANGAT TELE TERBATAS.

Karena bootloader yang terdeteksi tidak berbeda di antara mereka, kami memilih yang bertanda tangan yang disebutkan di atas dan membahasnya dengan lebih rinci.

Sepanjang pekerjaan malware, hampir setiap tindakan disertai dengan menulis ke file log dan men-debug output dari semua yang terjadi:



Fig. 2. Output debug dan logging

Penelusuran semacam itu tidak hanya menyederhanakan analisis statis file, tetapi juga membantu mencari tahu apa yang salah dalam sistem analisis dinamis:



Fig. 3. Debug output di penganalisa online ANY.RUN

Troyan memeriksa tata bahasa keyboard - dan tidak berfungsi di Rusia dan negara-negara tetangga:



Fig. 4. Memeriksa tata letak bahasa keyboard
Kemudian ia menciptakan Global\system32_mutant_service mutex dan memeriksa ketersediaan Internet menggunakan permintaan GET HTTP ke google.com. Setelah itu, ia menentukan cara mengakses jaringan (alamat khusus atau NAT ) dengan menentukan alamat IP eksternal oleh layanan myexternalip.com, ipecho.net dan ifconfig.me dan membandingkan nilai yang diterima dengan yang ditentukan dalam parameter jaringan sistem sistem:



Fig. 5. Perbandingan alamat IP internal dan eksternal

Selanjutnya, malware menentukan versi pustaka %SystemRoot%\system32\crypt32.dll dan, jika nomor build dan nomor revisi masing-masing kurang dari 7601 dan 18741 , unduhan dan menginstal pembaruan KB3033929 sesuai dengan versi sistem operasi:



Fig. 6. Unduh dan instal pembaruan sistem

Penyerang TA505 merawat korban dan menambal sistem sesuai kebutuhan? Tidak semuanya. Menginstal pembaruan dikaitkan dengan penghentian dukungan untuk sertifikat keamanan kode yang ditandatangani menggunakan SHA-1 dan pengabaiannya demi algoritma SHA-2. Kemungkinan besar, peretas telah mengalami kesulitan menjalankan payload yang ditandatangani pada sistem yang tidak diperbarui. Menariknya, setelah menginstal pembaruan, trojan mengirimkan log tindakan yang dihasilkan ke server manajemen, menghentikan pekerjaannya dan membersihkan sendiri, membersihkan jejak yang tersisa.



Fig. 7. Shutdown setelah menginstal pembaruan sistem

Jika instalasi pembaruan tidak diperlukan, bootloader mengumpulkan dan mengirimkan informasi berikut ke server manajemen:

  • informasi sistem
  • informasi tentang perangkat lunak yang diinstal,
  • informasi tentang perangkat lunak yang ditandatangani di direktori% ProgramFiles% dan% ProgramFiles (x86)% (jika ada),
  • Informasi tentang driver yang ditandatangani di direktori% SystemRoot% \ drivers.

Perhatikan bahwa kode yang sah digunakan untuk mendapatkan informasi tentang tanda tangan.



Fig. 8. Memperoleh informasi sertifikat

Setelah itu, bootloader membuat direktori C:\Windows\Logs\diag dan memulai utas di mana ia melacak perubahan dalam direktori, mengirimkan pemberitahuan ke server pengelola:



Fig. 9. Memantau perubahan direktori

Kemudian ia menyiapkan informasi yang ada dan yang hilang tentang sistem (nama pengguna, versi sistem, domain, alamat IP, informasi kartu video, koneksi jaringan - NAT atau bukan NAT) dan menghasilkan file JSON dari jenis ini:

 { "adm": "0", "bid": "M3xwwhqLH/AUOhmU2+W55A==", "bit": "1", "bnet": "ldr", "cam": "0", "cis": "0", "dmn": "WORKGROUP", "hash_r": "0", "lip": "192.168.100.153", "lvl": "0", "nat": "1", "osb": "0", "osv": "Windows 7 Professional", "pc": "USER-PC", "proc_c": "0", "proc_n": "cpu", "rep": 0, "tmt": "0", "ver": "163", "video": "Standard VGA Graphics Adapter," } 

Kemudian, data ini akan dienkripsi dengan RC4 (kunci enkripsi gJypA9RWUlYpnBbzujVqE6fDcEAk0zoz dienkripsi dalam tubuh Troya), disandikan dengan Base64 dan dikirim melalui permintaan HTTP POST ke server pengelola:



Fig. 10. Permintaan HTTP POST ke server manajemen



Fig. 11. Daftar server kontrol di bootloader

Respons dari server didekripsi oleh RC4 (kunci enkripsi sama dengan yang digunakan untuk mengirim data) dan diperiksa: dua byte pertama harus sesuai dengan garis MZ, yang merupakan tanda dari file PE. Kami telah memenuhi urutan ini sebelumnya ketika kami menganalisis pemuat grup lain yang mengirimkan RAT FlawedAmmyy:



Fig. 12. Kode yang mirip untuk mendekripsi dan memeriksa file yang diunduh untuk bootloader yang dimaksud (kiri) dan bootloader FlawedAmmyy RAT (kanan)

Pemuatan muatan terjadi tidak hanya di utas utama, tetapi juga dalam yang dibuat secara terpisah. Dengan kata lain, ada dua muatan. Dalam satu kasus, mutex Global \ system32_host_service sudah diperiksa sebelumnya, dan jika tidak ada, komponen dimuat, yang disebut dalam informasi debug sebagai payload atau bot. Menariknya, setelah menerima respons dari server, file PE tidak memulai dengan cara apa pun. Sebagai gantinya, tubuhnya ditulis ke registri di bagian HKEY_LOCAL_MACHINE\SYSTEM di kunci 0x228028 . Kemudian bootloader menonaktifkan pengalihan sistem file Wow64DisableWow64FsRedirection aplikasi 32-bit menggunakan Wow64DisableWow64FsRedirection dan memulai proses %SystemRoot%\System32\services.exe dengan parameter -ww. Menggunakan parameter ini tidak masuk akal, tetapi ini menyelesaikan rantai instalasi dari muatan yang dihasilkan.



Fig. 13. Mengatur payload

Kami akan membicarakan tentang muatan kedua nanti.

Twein plugins


Meneliti trojan yang dibahas di atas, kami melihat fungsi yang menghapus dua file dari direktori %SystemRoot% - twein_32.dll dan twein_64.dll :



Fig. 14. Menghapus file twein_32.dll dan twein_64.dll

File-file ini tidak ditemukan di tempat lain, mereka tidak muncul dalam logika bootloader. Namun, nama-nama perpustakaan mengingatkan kita pada kelompok malware lain, yang sekarang akan kita pertimbangkan.
Dua bulan sebelumnya, kami menemukan Trojan dari grup TA505, berukuran sekitar 9 MB. File ini dikemas oleh UPX . Trojan diinstal ke dalam sistem sebagai layanan WMDICToss . Sumber daya berisi tiga file: systemdiron.bat , twein__32.dll dan twein__64.dll , yang dienkripsi dengan XOR linier.



Fig. 15. Dekripsi salah satu sumber daya pipet

Perhatikan bahwa nama kedua file tersebut hampir bersamaan dengan yang telah disebutkan sebelumnya: perbedaannya hanya pada jumlah garis bawah.

Salah satu sumber yang didekripsi dengan nama systemdiron.bat diharapkan menjadi skrip perintah yang menyediakan peluncuran komponen lain tergantung pada kapasitas sistem:

 @echo off if defined PROCESSOR_ARCHITEW6432 (goto LABEL_X64) if %PROCESSOR_ARCHITECTURE%==IA64 (goto LABEL_X64) if %PROCESSOR_ARCHITECTURE%==AMD64 (goto LABEL_X64) if %PROCESSOR_ARCHITECTURE%==x86 (goto LABEL_X86) goto LABEL_NON :LABEL_X64 echo OS type: x64 copy c:\temp\tmp.log c:\i.txt rundll32.exe C:\Windows\twein__64.dll,Install copy c:\temp\tmp.log c:\i.txt rundll32.exe C:\Windows\twein__32.dll,Install del c:\temp\tmp.log del c:\i.txt shutdown.exe -r -t 00 goto LABEL_END :LABEL_X86 echo OS type: x86 copy c:\temp\tmp.log c:\i.txt rundll32.exe C:\Windows\twein__32.dll,Install del c:\temp\tmp.log del c:\i.txt shutdown.exe -r -t 00 goto LABEL_END :LABEL_NON echo OS type: undefined goto LABEL_END :LABEL_END pause 

Kedua perpustakaan twein bertindak sama. Dikemas dengan pengepak karakteristik grup TA505. Nama perpustakaan asli: av_block.dll . Analisis ini sangat rumit dengan penggunaan obfuscator, dan proporsi kode yang dikaburkan adalah sekitar 80%. Sebagai hasil dari ini, eksekusi program dipenuhi dengan banyak transisi, decoding dari langkah-langkah kode berikutnya, panggilan fungsi non-linear.

Perpustakaan berisi daftar string seperti Base64 yang mengesankan, yang didekripsi sebagai berikut:

1. String input dibagi menjadi blok 4 byte;
2. Setiap blok didekodekan menggunakan algoritma penggantian dan shift:

 import binascii def block_decode(input_str, len_of_block): alphabet = '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3E\x00\x00\x00\x3F\x34\x35\x36\x37\x38\x39\x3A\x3B\x3C\x3D\x00\x00\x00\x00\x00\x00\x00\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x00\x00\x00\x00\x00\x00\x1A\x1B\x1C\x1D\x1E\x1F\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2A\x2B\x2C\x2D\x2E\x2F\x30\x31\x32\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' int_result = 0 for i in range(len_of_block): alph = ord(alphabet[ord(input_str[i])]) alph <<= 0x6 * i int_result += alph str_result = hex(int_result)[2:] if len(str_result) % 2 != 0: str_result = '0' + str_result return binascii.unhexlify(str_result).decode('latin1')[::-1] 


3) blok dikumpulkan dalam satu baris;
4) hasilnya didekripsi oleh algoritma eexec dengan kunci byte ganda, dilewatkan sebagai parameter:



Fig. 16. Implementasi dari algoritma eexec

Sebagian besar baris adalah nama dan jalur ke file produk anti-virus, namun beberapa dari mereka tidak termasuk alat keamanan sama sekali: MS Exchange Server, Server MySQL, SAP, Apache, PostgreSQL, Elasticsearch, dll. Bahkan ada jalur unik seperti itu:

  • C: \ Users \ tislam \ Desktop \ salik app \ Aye_salik_data \ Aye_salik_data \ bin \ Debug \ Aye_salik_data.exe
  • C: \ oem13c \ agent13c \ agent_13.2.0.0.0 \ perl \ bin \ perl.exe
  • C: \ Users \ adadmin \ Ubiquiti UniFi \ bin \ mongod.exe
  • C: \ Users \ sakella \ AppData \ Local \ Microsoft \ OneDrive \ OneDrive.exe
  • D: \ Add-ons \ IMI_CREDIT_POLICY Uji v 02.01 \ IMI_CREDIT_POLICY.exe

Jika perangkat lunak ditemukan dalam sistem dari daftar, file dan direktori dihapus.

Untuk mengamankan diri mereka dalam sistem, perpustakaan menetapkan diri mereka sebagai antarmuka Windows Sockets Service Provider (SPI), yang disebut sebagai Intel dan IntelFiltr. Selain itu, mereka mengubah urutan penangan dalam rantai protokol untuk menjadi SPI pertama yang menangani permintaan klien.

Pada 2015, rekan FireEye kami memperkenalkan analisis bot LatentBot . Sangat aneh bahwa algoritma enkripsi string di LatentBot dan perpustakaan twein yang ditinjau sepenuhnya sama. Selain itu, LatentBot menggunakan modul keamanan sebagai salah satu plug-in, yang mencari alat keamanan di sistem menggunakan jalur dan nama produk yang ditentukan, meskipun terbatas untuk memeriksa ketersediaan.

Rootkit twein


Kembali ke bootloader, yaitu payload kedua. Dari baris debug mencoba membuka rootkit ... dan Driver% S diinstal, mudah untuk menebak format muatan berikutnya. Setelah berhasil memuat, driver akan ditulis ke direktori %SystemRoot%\System32\drivers dengan nama yang dibentuk secara pseudo-acak dari nama-nama file sah lainnya. Kemudian layanan akan dibuat dan diluncurkan:



Fig. 17. Menginstal dan memulai layanan

Pada tahap akhir pekerjaannya, bootloader akan mengonfigurasi driver untuk dimasukkan dalam daftar hitam di kunci registri: nama proses anti-virus, alat analisis, dan vendor perlindungan dalam tanda tangan file digital akan dimasukkan dalam nilai numerik tertentu dari kunci cabang HKEY_LOCAL_MACHINE\SYSTEM :



Fig. 18. Konfigurasi driver daftar hitam

Dalam proses meneliti bootloader, kami tidak dapat memperoleh driver sampel dari server manajemen. Namun, kami menemukan penyebutan rootkit yang dipompa oleh bootloader lain yang serupa.

Pengemudi ditandatangani secara digital atas nama Lizas Limited dengan administrator@lizaslimited.site sebagai email:



Fig. 19. Pengemudi yang ditandatangani secara digital

Selama penelitian, kami menemukan banyak kesamaan dengan rootkit terkenal dari botnet Necurs, yang secara aktif digunakan oleh grup TA505 untuk mengirim spam dan menyebarkan malware. Mari kita perhatikan lebih detail fitur paling menarik dari karyanya.

Pengemudi mendaftarkan penangan acara untuk memulai proses dan memuat gambar PE menggunakan PsSetCreateProcessNotifyRoutine dan PsSetLoadImageNotifyRoutine . Dengan kata lain, ini memungkinkan pengemudi untuk mengontrol peluncuran semua proses dan layanan baru. Menggunakan daftar hitam yang kami sebutkan sebelumnya, rootkit mengakhiri proses yang tidak diinginkan dengan ZwTerminateProcess dan mencegah driver lain yang berpotensi berbahaya untuk memuat, menimpa nilai titik masuk pada instruksi:

 mov eax, 0C0000001 retn 8 

Akibatnya, layanan akan dibongkar dengan kesalahan STATUS_UNSUCCESSFULL .



Fig. 20. Proses penyelesaian



Fig. 21. Menimpa titik masuk pengemudi

Dengan menggunakan CmRegisterCallback, pengemudi memotong acara akses registri sistem. Secara khusus, karyanya lebih lanjut diparameterisasi dengan nilai numerik dari kunci yang diakses dalam peristiwa yang dicegat.



Fig. 22. Manajemen rootkit akses kunci registri

Menariknya, di beberapa versi rootkit Necurs, nilai numerik yang sama digunakan sebagai kode permintaan ioctl.



Fig. 23. Mengelola rootkit Necurs menggunakan permintaan ioctl

Trik ini dapat dianggap sebagai langkah menuju kerahasiaan yang lebih besar: akses ke registri menyebabkan lebih sedikit kecurigaan daripada permintaan ioctl ke DeviceObject.

Badan rootkit berisi pustaka DLL tambahan yang dienkripsi dengan XOR bita tunggal. Saat membuat proses baru, driver menyuntikkan pustaka bersama dengan file PE lainnya, yang diekstrak dari registri dan didekripsi lagi dengan XOR byte tunggal.



Fig. 24. Dekripsi dan injeksi perpustakaan bantu ke dalam proses yang dibuat

Komponen tambahan adalah pemuat reflektif khusus yang menempatkan file PE kedua dengan benar dalam memori, yang bertindak sebagai payload, dan mentransfer kontrol ke sana. Sekarang menjadi jelas bagaimana sebenarnya muatan yang ditulis ke registri oleh bootloader dari bagian pertama artikel mulai berfungsi.



Fig. 25. Mengisi tabel impor dengan perpustakaan bantu

Kesimpulan


Dalam artikel itu, kami berkenalan dengan fitur-fitur karya banyak trojan kembar. Mengapa kembar Bootloader berbahaya yang digunakan untuk memulai penelitian kami sangat mirip dengan bootloader backdoor FlawedAmmyy yang terkenal dalam kualitas penulisan kode dan nuansa implementasi. Perpustakaan twein yang ia coba hapus dari sistem kemungkinan besar adalah yang kita cari selanjutnya. Perpustakaan sangat mirip dengan plugin keamanan LatentBot. Salah satu muatan bootloader adalah driver yang merupakan turunan dari rootkit Necurs yang populer.

Beberapa keluarga malware berusia di atas 5 tahun, namun, penyerang terus memperbarui dan memperbaikinya, dengan mempertimbangkan pengembangan sistem operasi dan alat keamanan.

Penulis : Alexey Vishnyakov dan Daniil Koloskov, Positive Technologies

IOC
a28a54abc30805cc6ea2ce0732989287 - Twein bootloader
f6b6526b8d494dce14568e3703368432 - twein penetes plugin
983dd279722154a12093410067fe070e - rootkit Twein

Artikel sebelumnya dalam seri:


Source: https://habr.com/ru/post/id475328/


All Articles