
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 bootloaderSertifikat 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 loggingPenelusuran 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.RUNTroyan memeriksa tata bahasa keyboard - dan tidak berfungsi di Rusia dan negara-negara tetangga:
Fig. 4. Memeriksa tata letak bahasa keyboardKemudian 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 eksternalSelanjutnya, 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 sistemPenyerang 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 sistemJika 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 sertifikatSetelah 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 direktoriKemudian 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 bootloaderRespons 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 payloadKami 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.dllFile-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 pipetPerhatikan 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 eexecSebagian 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 layananPada 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 hitamDalam 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 digitalSelama 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 pengemudiDengan 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 registriMenariknya, di beberapa versi rootkit Necurs, nilai numerik yang sama digunakan sebagai kode permintaan ioctl.
Fig. 23. Mengelola rootkit Necurs menggunakan permintaan ioctlTrik 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 dibuatKomponen 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 bantuKesimpulan
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
IOCa28a54abc30805cc6ea2ce0732989287 - Twein bootloader
f6b6526b8d494dce14568e3703368432 - twein penetes plugin
983dd279722154a12093410067fe070e - rootkit Twein
Artikel sebelumnya dalam seri: