OceanLotus: backdoor baru, skema lama

Kelompok OceanLotus (alias APT32 dan APT-C-00) dikenal karena serangannya di Asia Timur. Tahun lalu, sejumlah studi tentang pekerjaan grup diterbitkan, termasuk dokumen CyberReason , ulasan FireEye , dan deskripsi serangan lubang berair Volexity . Seperti yang dapat kita lihat, grup memperbarui vektor backdoor, infrastruktur dan infeksi.

OceanLotus terus menargetkan perusahaan dan lembaga pemerintah di Asia Timur. Menurut telemetri ESET, tujuan prioritas OceanLotus adalah di Vietnam, Laos, Kamboja dan Filipina.

Beberapa bulan yang lalu, kami menemukan dan menganalisis salah satu ruang belakang terbaru mereka. Ini mengimplementasikan beberapa alat yang membuatnya sulit untuk dianalisis dan menghindari deteksi - kami akan membahasnya dalam sebuah pos.



Distribusi


Penyerang menggunakan metode yang berbeda untuk meyakinkan korban untuk meluncurkan dropper berbahaya.

Ekstensi ganda dan ikon aplikasi palsu (Word, PDF, dll.)


Dropper cenderung menyebar melalui lampiran email. Kami mengamati nama file berikut:
- Mi17 Technical issues - Phonesack Grp.exe (Mi-17 - model helikopter Rusia)
- Chi tiet don khieu nai gui saigontel.exe (diterjemahkan dari bahasa Vietnam - “perincian klaim yang dikirim ke Saigontel”, Saigontel - perusahaan telekomunikasi Vietnam)
- Updated AF MOD contract - Jan 2018.exe
- remove_pw_Reschedule of CISD Regular Meeting.exe
- Sorchornor_with_PM_-_Sep_2017.exe
- 20170905-Evaluation Table.xls.exe
- CV_LeHoangThing.doc.exe (resume palsu juga ditemukan di Kanada)

Semua file ini memiliki kesamaan - meluncurkan dokumen umpan yang dilindungi kata sandi. Tidak jelas apakah kata sandi tersebut terkandung di suatu tempat dalam data surat yang dikirimkan, atau apakah dokumen tidak boleh dibuka.

Pemasang palsu


Beberapa installer palsu yang menyamar sebagai installer atau pembaruan perangkat lunak telah terlihat dalam kampanye lubang air. Salah satu contoh adalah penginstal ulang Firefox yang dijelaskan oleh 360 Labs on Freebuf (dalam bahasa Cina).

Sampel lain yang kami lihat disebut RobototFontUpdate.exe . Mungkin menyebar melalui situs yang disusupi, tetapi kami tidak memiliki bukti yang cukup tentang ini.

Semua file yang dijelaskan, apakah didistribusikan melalui pos atau diunduh ketika mengunjungi situs yang disusupi, mengirimkan komponen backdoor yang sama. Dalam sebuah posting, kami akan menganalisis sampel RobototFontUpdate.exe dan menunjukkan bagaimana mengelola untuk menjalankan muatan berbahaya pada sistem.

Analisis teknis


Proses instalasi dan eksekusi tergantung pada kebingungan multi-layer, yaitu enkripsi komponen, rekonstruksi file PE, pemuatan shellcode dan teknik pemuatan samping. Yang terakhir ini dijelaskan dalam studi Korplug ESET sebelumnya .

Ulasan Kemajuan


Serangan itu terdiri dari dua bagian: sebuah dropper dan sebuah kendaraan peluncuran. Setiap langkah dari setiap bagian dari proses akan dijelaskan secara rinci di bagian yang sesuai. Dua diagram di bawah ini memberikan gambaran singkat tentang perkembangan malware secara keseluruhan.


Gambar 1. Kemajuan pipet


Gambar 2. Progres backdoor

Hampir semua komponen ini dikaburkan. Kebingungan didasarkan pada perintah transisi pasangan kondisional pelengkap. Untuk masing-masing bentuk: JZ / JNZ, JP / JNP, JO / JNO dan seterusnya, masing-masing pasangan melakukan transisi ke tujuan yang sama. Urutan diselingi dengan kode sampah yang menggunakan penunjuk tumpukan tetapi tidak mengubah nilai bendera bersyarat. Ternyata transisi terjadi dalam cabang yang sama. Hal ini menyebabkan masalah selama proses dekompilasi karena penggunaan nilai-nilai penunjuk tumpukan positif.


Gambar 3. Transisi bersyarat pelengkap

Selain itu, beberapa elemen dasar program menambahkan satu alamat ke stack, setelah itu mereka berakhir di JMP / CALL, sementara elemen dasar lainnya menambahkan dua alamat dan diakhiri dengan perintah RET. Penambahan item kedua adalah fungsi yang dipanggil, dan yang pertama adalah alamat elemen program dasar berikutnya di mana transisi akan dilakukan. Dengan demikian, elemen dasar dari program ini dibuat tanpa objek induk.


Gambar 4. Teknik PUSH / JMP

Sebagai hasil dari kombinasi dua teknik kebingungan, grafik "indah" diperoleh:


Gambar 5. Mengaburkan urutan run

Memperhatikan kode sampah cukup sederhana. Itu dapat diabaikan dalam analisis sampel, jika Anda tahu skema aplikasi.

Pipet


Langkah 1. Umpan Dokumen


Dalam beberapa bulan terakhir, OceanLotus telah menggunakan beberapa umpan. Salah satunya adalah perangkat lunak palsu untuk memperbarui Roboto Slab regular TrueType Roboto Slab regular . Memilih font agak aneh, karena tidak mendukung banyak bahasa Asia Timur.


Gambar 6. Ikon pembaruan font RobototFontUpdate

Ketika dieksekusi, file biner mendekripsi sumber dayanya (XOR, 128 byte, kunci hard-coded) dan mengembalikan data yang didekripsi (LZMA). File RobotoSlab-Regular.ttf yang sah

(SHA1: 912895e6bb9e05af3a1e58a1da417e992a71a324 ) ditulis ke folder %temp% dan diluncurkan menggunakan fungsi Win32 API ShellExecute .

Kode shell yang didekripsi dari sumber dieksekusi. Setelah eksekusi, pembaruan font palsu mengimplementasikan aplikasi lain yang tujuan utamanya adalah untuk menghapus dropper. Aplikasi yang dihapus ini %temp%\[0-9].tmp.exe sebagai %temp%\[0-9].tmp.exe .

Tahap 2. Kode shell


Pada setiap tahap, shellcode yang sama digunakan.

Shellcode adalah pemuat PE khusus. Ini mengembalikan file yang dapat dieksekusi dalam memori - mendekripsi semua bagian dan menghitung gerakan yang diperlukan dan indentasi lainnya. RtlMoveMemory menggunakan tiga fungsi Windows API: VirtualAlloc , RtlMoveMemory dan RtlZeroMemory .

Fungsi RtlZeroMemory digunakan untuk RtlZeroMemory bidang dalam header PE. Mengandalkan dump memori otomatis akan gagal, karena header MZ / PE rusak.
Kode shell memanggil fungsi login PE yang didekripsi, dan kemudian DLLEntry ekspor DLLEntry .

Tahap 3. Penetes sungguhan


{103004A5-829C-418E-ACE9-A7615D30E125}.dll
Sumber dekripsi yang dapat dieksekusi ini menggunakan algoritma AES dalam mode CBC melalui Windows API. Kunci kode keras berukuran 256 bit. Setelah dekripsi, data terkompresi didekompresi (algoritma LZMA).

Jika proses dimulai dengan hak administrator, malware menyediakan kegigihan dengan menciptakan layanan. Jika tidak, kunci registri Run klasik digunakan ( HKCU\SOFTWARE\Microsoft\ Windows\CurrentVersion\Run;DeviceAssociationService;rastlsc.exe ).

Jika kode dropper dijalankan dengan hak administrator, ia mencoba menulis file yang tercantum di bawah ini ke folder C:\Program Files\Symantec\Symantec Endpoint Protection\12.1.671.4971.104a\DeviceAssociationService\ , jika tidak, tuliskan ke folder %APPDATA%\Symantec\Symantec Endpoint Protection\12.1.671.4971.104a\DeviceAssociationService\ :

- rastlsc.exe (SHA1: 2616da1697f7c764ee7fb558887a6a3279861fac , salinan aplikasi yang sah Symantec Network Access Control, dot1xtra.exe )
- SyLog.bin (SHA1: 5689448b4b6260ec9c35f129df8b8f2622c66a45 , terenkripsi backdoor)
- rastls.dll (SHA1: 82e579bd49d69845133c9aa8585f8bd26736437b , DLL jahat yang rastlsc.exe oleh rastlsc.exe )

Path bervariasi dari sampel ke sampel, tetapi tata letaknya sama. Bergantung pada haknya, malware membuang file di %ProgramFiles% atau %appdata% . Kami juga mengamati:

- \Symantec\CNG Key Isolation\
- \Symantec\Connected User Experiences and Telemetry\
- \Symantec\DevQuery Background Discovery Broker Tasks\

Jalur ini digunakan oleh berbagai produk Symantec.

Setelah mencapai kegigihan dan mengimplementasikan file yang dapat dieksekusi, file yang sah,
rastlsc.exe , dijalankan menggunakan CreateProcessW .

Kami juga mengamati versi ( {BB7BDEC9-B59D-492E-A4AF-4C7B1C9E646B}.dll ) yang mengeksekusi rastlsc.exe dengan parameter krv . Kami akan membahas lebih detail di bawah ini.

Komponen pintu belakang: isi rastlsc.exe


Tim OceanLotus menggunakan teknik lama dan terkenal di salah satu executable produk Symantec. Intinya adalah menggunakan proses memuat perpustakaan file .exe yang sah dan ditandatangani dengan menulis perpustakaan jahat ke folder yang sama. Ini akan membuat perilaku jahat terlihat sah saat tindakan ini dilakukan saat eksekusi tepercaya sedang berjalan.

Seperti disebutkan di atas, file rastlsc.exe sah rastlsc.exe ulang dan dieksekusi.
Itu mengimpor file rastls.dll , yang dalam hal ini memiliki konten berbahaya.


Gambar 7. Rastlsc.exe yang ditandatangani secara digital dari Symantec

Kami juga melihat isi menggunakan executable yang sah dan ditandatangani lainnya, termasuk mcoemcpy.exe dari McAfee, yang memuat McUtil.dll . Teknik ini sebelumnya digunakan oleh PlugX, yang menarik perhatian Vietnam CERT (dalam bahasa Vietnam).

Tahap 1. Mengisi perpustakaan, rastls.dll


Nama internal file dll adalah {7032F494-0562-4422-9C39-14230E095C52}.dll , tetapi kami telah melihat versi lain, misalnya, {5248F13C-85F0-42DF-860D-1723EEAA4F90}.dll . Semua fungsi yang diekspor mengarah ke pelaksanaan fungsi yang sama.


Gambar 8. Semua ekspor rasltls.dll mengarah ke satu fungsi

Ekspor mencoba membaca file SyLog.bin terletak di folder yang sama. Versi lain telah mencoba untuk membuka file OUTLFLTR.DAT . Jika file ada, itu akan didekripsi menggunakan algoritma AES dalam mode CBC dengan kunci 256-bit yang dikodekan, dan kemudian data terkompresi yang diterima akan didekompresi (kompresi LZMA).

Varian McUtil.dll menggunakan teknik yang berbeda. Pada pandangan pertama, fungsi utama tidak melakukan apa pun yang berbahaya, tetapi sebenarnya ia menggantikan bagian mcoemcpy.exe file mcoemcpy.exe sah, file biner. Ini menghasilkan shellcode yang tugasnya memanggil fungsi untuk membaca shellcode terenkripsi dari tahap kedua dari file mcscentr.adf .

Kode pseudo berikut digunakan untuk membuat kode shell:

x = False i = 0
buff = genRandom()
opc1 = [0x58,0x59,0x5a,0x5b]
opc2 = [0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57]
opc3 = [0x90,0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,
0x49,0x4a,0x4b]
while i < len(buff):
currentChar = buff[i] if currentChar < 0xc8:
buff[i] = opc1[currentChar % len(opc1)]
else:
if x:
buff[i] = opc2[currentChar % len(opc2)]
else:
buff[i] = opc3[currentChar % len(opc3)] x = x == False
i+=1


Di bawah ini pada gambar Anda dapat melihat daftar hasil assembler:


Gambar 9. Shellcode yang dihasilkan

Langkah 2–4. Shellcode, launcher dan shellcode lagi


{E1E4CBED-5690-4749-819D-24FB660DF55F}.dll mendekripsi dan mengunduh {E1E4CBED-5690-4749-819D-24FB660DF55F}.dll . Perpustakaan memuat sumber daya dan mencoba memulai layanan DeviceAssociationService. Informasi yang didekripsi juga mengandung shellcode. Yang terakhir mendekripsi tahap terakhir: pintu belakang.

Varian {92BA1818-0119-4F79-874E-E3BF79C355B8}.dll memeriksa apakah rastlsc.exe dijalankan dengan krv sebagai parameter pertama. Jika demikian, tugas dibuat, dan rastlsc.exe dieksekusi lagi, tetapi tanpa parameter ini.

Tahap 5. Backdoor


{A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll

Pertama, malware mencoba mengunduh sumber dayanya dan mendekripsi menggunakan algoritma RC4. Sumber daya yang dihasilkan berisi data yang digunakan untuk mengonfigurasi backdoor. Format konfigurasi tidak sulit ditemukan. Menggunakan kaitai struct dan damper strukturnya, kami mendapatkan yang berikut:


Gambar 10. Struktur konfigurasi

Catatan : dengan pengecualian garis domain_encoding_str dan pustaka httpprov, data berubah dari sampel ke sampel. Kunci registri hampir sama, tetapi mereka memiliki skema serupa: \HKCU\SOFTWARE\Classes\AppX[a-f0-9]{32} , tidak ada yang luar biasa.

Program jahat menerima 10 byte pertama dari nama pengguna (UTF-16), mengkodekannya dengan string tiga huruf mutex_encoding_str di UTF-16 dan mengkodekannya dalam heksadesimal. Hasilnya digunakan sebagai nama mutex. Misalnya, untuk pengguna yang namanya dimulai dengan abc dan kunci dalam bentuk vwx , mutex akan menjadi \Sessions\1\BaseNamedObjects\170015001b .

Backdoor mencakup pemuat PE yang memuat pustaka HTTPProv.dll ke dalam memori, memanggil titik masuk, dan kemudian memanggil fungsi ekspor CreateInstance .

Komunikasi


Backdoor menggunakan protokol komunikasi TCP standar melalui port 25123 . Untuk mendapatkan alamat IP server, backdoor terlebih dahulu membuat kueri DNS tertentu.

Program jahat memilih salah satu dari tiga domain dari konfigurasi dan menambahkan subdomain khusus yang dihasilkan menggunakan dua nilai. Nilai pertama adalah nama komputer dalam panjang 16 byte. Yang kedua adalah ID versi empat byte. Kode Python 2 di bawah ini adalah algoritma pengkodean:

letters=domain_encoding_str # “ghijklmnop” hex_pc_name=pc_name.encode(“UTF-16LE”).encode(“hex”) s=''
for c in hex_pc_name:
if 0x2f < ord(c) < 0x3a:
s+=letters[ord(c) - 0x30]
else:
s+=c


Misalnya, jika nama komputer adalah random-pc , dan ID versi adalah 0x0a841523, maka domain berikut ini dihasilkan:
niggmhggmeggmkggmfggmdggidggngggmjgg.ijhlokga.dwarduong[.]com

Ekspresi reguler berikut dapat digunakan untuk memberi label server C&C dari backdoor ini:
[ghijklmnopabcdef]{4-60}\.[ghijklmnopabcdef]{8}\.[az]+\.[az]+

Jika alamat IP milik domain tertentu, malware mencoba membuat koneksi TCP melalui port 25123 . Setiap sampel memiliki tiga nama domain berbeda yang digunakan untuk menemukan server C&C.

Proses komunikasi dienkripsi melalui RC4 dan dikompresi menggunakan LZMA. Dimungkinkan untuk mendekripsi lalu lintas, karena kunci ditambahkan ke awal paket. Formatnya adalah sebagai berikut:
[ RC4 (4 )][ ]

Setiap byte kunci dihasilkan oleh fungsi rand . Setelah mendekripsi dan membongkar paket, data memiliki format berikut:
[dw:][dw:][dw: ][dw: ][dw:] [dw:]

Pertama kali klien terhubung ke server, UUID ditransmisikan, yang digunakan sebagai pengidentifikasi sesi. Yang terakhir disimpan dalam kunci registri sebagai data biner: HKCU\SOFTWARE\Classes\ AppXc52346ec40fb4061ad96be0e6cb7d16a\DefaultIcon

Seperti yang kami katakan sebelumnya, pintu belakang juga berisi perpustakaan yang disebut HTTPprov . Ini digunakan sebagai cara alternatif untuk berkomunikasi dengan server. File DLL mengirimkan permintaan POST melalui HTTP. Ini juga mendukung HTTPS dan proksi menggunakan SOCKS5, SOCKS4a dan SOCKS4. Perpustakaan dihubungkan secara statis dengan libcurl .

Setelah inisialisasi, entri registri akan dibuat - perintah untuk pintu belakang untuk lebih lanjut menggunakan HTTP untuk berkomunikasi dengan server perintah: HKCU\SOFTWARE\Classes\ CLSID{E3517E26-8E93-458D-A6DF-8030BC80528B} .

Aplikasi klien standar digunakan: Mozilla/4.0 ( ; MSIE 8.0; Windows NT 6.0; Trident/4.0) .

Karakteristik utama perpustakaan ini adalah algoritma enkripsi khusus untuk pengidentifikasi sumber daya universal. Bagian sumber daya dari URI dibuat menggunakan pseudocode berikut:

buffEnd = ((DWORD)genRand(4) % 20) + 10 + buff; while (buff < buffEnd){
b=genRand(16);
if (b[0] - 0x50 > 0x50)
t=0;
else
*buf++= UPPER(vowels[b[1] % 5]);
v=consonants[b[1]%21]); if (!t)
v=UPPER(v);
*buff++= v;
if (v!='h' && b[2] - 0x50 < 0x50)
*buff++= 'h';
*buff++= vowels[b[4] % 5];
if (b[5] < 0x60)
*buff++= vowels[b[6] % 5];
*buff++= consonants[b[7] % 21];
if (b[8] < 0x50)
*buff++= vowels[b[9] % 5];
*buff++= '-';
};
*buff='\0';


Catatan : untuk kejelasan, bagian yang bertanggung jawab untuk memeriksa panjang string telah dihapus dari kode.

Untuk mendapatkan pengenal dari string yang dihasilkan, dua angka ditambahkan menggunakan algoritma verifikasi jumlah khusus:

checksum=crc32(buff)
num2=(checksum >> 16) + (checksum & 0xffff) * 2
num1=(num2 ^ 1) & 0xf
URL=GENERATED_DOMAIN+ “/” + num1 + “/” + num2 + “-” + buff


Menambahkan generator URI perpustakaan HTTPprov , kami mendapatkan URL berikut:
hXXp://niggmhggmeggmkggmfggmdggidggngggmjgg.ijhlokga.aisicoin[.]com/ 13/139756-Ses-Ufali-L

Tim


Setelah menerima pengidentifikasi sesi SESSIONID, pintu belakang membuat sidik jari sistem. Paket ini dibangun sebagai berikut (inden dalam paket - deskripsi):

0x000 - byte: nilai berubah di setiap versi
0x001 - 0x01: byte kode-keras
0x002 - bool: hak istimewa tinggi
0x003 - dword: ID versi
0x007 - string (UTF-16), nama komputer (maks. 0x20)
0x027 - string (UTF-16), nama pengguna
0x079 - hasil dari kueri registri di HKLM\SOFTWARE\Microsoft\Windows NT\ CurrentVersion Nilai HKLM\SOFTWARE\Microsoft\Windows NT\ CurrentVersion : ProductName , CSDVersion , CurrentVersion , ReleaseId , CurrentBuildNumber dan hasil dari panggilan IsWow64Process (x86|x64)
0x179 - format selanjutnya dari string% s (% s); digantikan oleh ( GetVolumeInformationW:VolumeNameBuffer ), VolumePathNames
0x279 - Disk fisik, kontrol I / O pada perangkat PhysicalDriveIOControl 0x2D1400 (IOCTL_STORAGE_QUERY_ PROPERTY) (VolSerialNumber)
0x379 - wmi SELECT SerialNumber FROM Win32_BaseBoard
0x3f9 - Dapatkan tanggal dan waktu saat ini GetSystemTimeAsFileTime
0x400 - bool: tidak diketahui
0x401 - dword: diterima setelah mendekripsi sumber

Berikut adalah contoh sidik jari sistem:


Gambar 11. Sidik jari sistem

Ini adalah backdoor lengkap yang menyediakan operator dengan sejumlah fitur: memanipulasi file, registri dan proses, mengunduh komponen tambahan, memperoleh sidik jari digital dari sistem. Di bawah ini adalah angka dan deskripsi dari perintah yang didukung:

0 - sidik jari digital
1 - mengatur ID sesi
2 - membuat proses dan mendapatkan hasil (menggunakan saluran program)
3 - mengatur penghitung upaya koneksi
4 - menunda waktu pemungutan suara
5 - membaca file atau kunci registri dan mempertimbangkan MD5
6 - membuat proses
7 - membuat file, entri registri, atau streaming dalam memori
8 - menulis ke registri
9 - polling registri
10 - mencari file dalam sistem
11 - mentransfer file ke direktori lain
12 - menghapus file dari disk
13 - mendapatkan daftar disk yang ditandai dalam sistem menggunakan fungsi
GetLogicalDriveStringW
14 - membuat direktori
15 - menghapus direktori
16 - membaca file dari offset
17 - memanggil loader PE (beralih ke komunikasi melalui HTTPprov )
18 - [tidak diketahui]
19 - 0: polling nilai dalam registri; 1: implementasi dan implementasi program
20 - mengatur variabel lingkungan
21 - meluncurkan shellcode di utas baru
22 - mengembalikan variabel lingkungan
23 dalam versi baru - restart sendiri jika variabel lingkungan APPL tidak ada

Kesimpulan


OceanLotus tetap sangat aktif dan terus memperbarui toolkit.
Kelompok ini berupaya menyembunyikan kegiatannya, untuk ini para penyerang dengan hati-hati memilih para korban, membatasi penyebaran malware, menggunakan beberapa server agar tidak menarik perhatian ke domain atau alamat IP yang sama. Dekripsi komponen yang diimplementasikan dan teknik pemuatan samping, meskipun popularitasnya luas, memungkinkan untuk menghindari deteksi, karena pekerjaan penyerang dalam kasus ini disamarkan sebagai aplikasi yang sah.

Indikator Kompromi (IoC)


Sampel


Tabel 1: pipet




Tabel 2: Perpustakaan




Jaringan


Alamat IP


46.183.220.81
46.183.220.82
46.183.222.82
46.183.222.83
46.183.222.84
46.183.223.106
46.183.223.107
74.121.190.130
74.121.190.150
79.143.87.230

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


All Articles