ESET: Skema Pengiriman Backdoor OceanLotus Cybergroup Baru

Dalam sebuah posting, kami akan menjelaskan bagaimana cybergroup OceanLotus (APT32 dan APT-C-00) baru-baru ini menggunakan salah satu eksploitasi publik untuk CVE-2017-11882 , kerentanan korupsi memori di Microsoft Office, dan bagaimana malware grup memberikan kegigihan dalam sistem yang dikompromikan tanpa meninggalkan jejak apa pun. . Selanjutnya, kami menjelaskan bagaimana, dari awal 2019, grup menggunakan arsip self-extracting untuk menjalankan kode.

OceanLotus berspesialisasi dalam spionase dunia maya, dengan sasaran prioritas di Asia Tenggara. Penyerang memalsukan dokumen yang menarik perhatian calon korban untuk meyakinkan mereka untuk melakukan pintu belakang, dan juga bekerja pada pengembangan alat. Metode yang digunakan untuk membuat umpan berbeda dalam serangan yang berbeda - dari file dengan "ekstensi ganda", arsip yang mengekstraksi sendiri, dokumen dengan makro hingga eksploit terkenal.


Menggunakan exploit di Microsoft Equation Editor


Pada pertengahan 2018, OceanLotus meluncurkan kampanye menggunakan kerentanan CVE-2017-11882. Salah satu dokumen jahat cybergroup dianalisis oleh 360 pakar Threat Intelligence Center (sebuah studi dalam bahasa China ), termasuk deskripsi terperinci dari eksploit tersebut. Dalam posting di bawah ini, ikhtisar dokumen berbahaya tersebut.

Tahap pertama


Laporan FW Report on demonstration of former CNRP in Republic of Korea.doc (SHA-1: D1357B284C951470066AAA7A8228190B88A5C7C3 ) mirip dengan yang disebutkan dalam penelitian di atas. Sangat menarik karena menargetkan pengguna yang tertarik dengan politik Kamboja (CNRP - Partai Keselamatan Nasional Kamboja, dibubarkan pada akhir 2017). Meskipun ekstensi .doc, dokumen ini memiliki format RTF (lihat gambar di bawah), berisi kode sampah, dan juga terdistorsi.


Gambar 1. Sampah di RTF

Meskipun ada elemen yang terdistorsi, Word berhasil membuka file RTF ini. Seperti dapat dilihat dari Gambar 2, berikut adalah struktur EQNOLEFILEHDR dengan offset 0xC00, diikuti oleh header MTEF, dan kemudian entri MTEF (Gambar 3) untuk font.


Gambar 2. Nilai Catatan FONT


Gambar 3. Format perekaman FONT

Kemungkinan melimpah di bidang nama , karena ukurannya tidak diperiksa sebelum menyalin. Nama yang terlalu panjang memicu kerentanan. Seperti dapat dilihat dari isi file RTF (offset 0xC26 pada Gambar 2), buffer diisi dengan kode shell, diikuti oleh perintah dummy ( 0x90 ) dan alamat pengirim 0x402114 . Alamatnya adalah item dialog di EQNEDT32.exe yang menunjuk ke pernyataan RET . Ini menyebabkan EIP menunjuk ke awal bidang nama yang berisi shellcode.


Gambar 4. Mulai mengeksploitasi shellcode

Alamat 0x45BD3C menyimpan variabel yang 0x45BD3C hingga mencapai pointer ke struktur MTEFData saat ini dimuat. Ini adalah sisa dari shellcode.

Tujuan dari kode shell adalah untuk mengeksekusi fragmen kedua dari kode shell yang tertanam dalam dokumen terbuka. Pertama, shellcode sumber mencoba menemukan deskriptor file dari dokumen terbuka, NtQuerySystemInformation semua deskriptor sistem ( NtQuerySystemInformation dengan argumen SystemExtendedHandleInformation ) dan memeriksa apakah deskriptor PID dan proses WinWord PID dan jika dokumen dibuka dengan akses mask - 0x12019F .

Untuk mengkonfirmasi deteksi deskriptor yang benar (dan bukan deskriptor dokumen terbuka lainnya), konten file ditampilkan menggunakan fungsi CreateFileMapping , dan kode shell memeriksa untuk melihat apakah empat byte terakhir dari dokumen sesuai dengan " yyyy " (metode Egg Hunting). Segera setelah kecocokan ditemukan, dokumen tersebut disalin ke folder sementara ( GetTempPath ) sebagai ole.dll . Kemudian 12 byte terakhir dari dokumen dibaca.


Gambar 5. Penanda akhir dokumen

Nilai 32-bit antara AABBCCDD dan marker AABBCCDD adalah offset dari AABBCCDD berikutnya. Ini disebut menggunakan fungsi CreateThread . Diekstraksi shellcode yang sama yang digunakan oleh OceanLotus sebelumnya. Skrip emulasi Python yang kami rilis pada Maret 2018 masih berfungsi untuk membuang tahap kedua.

Tahap kedua


Pengambilan Komponen


Nama file dan direktori dipilih secara dinamis. Kode secara acak memilih nama file yang dapat dieksekusi atau DLL di C:\Windows\system32 . Dia kemudian membuat permintaan ke sumber dayanya dan mengambil bidang FileDescription untuk digunakan sebagai nama folder. Jika ini tidak berhasil, kode secara acak memilih nama folder dari %ProgramFiles% atau C:\Windows directories (dari GetWindowsDirectoryW). Itu menghindari penggunaan nama yang mungkin bertentangan dengan file yang ada, dan memastikan bahwa itu tidak mengandung kata-kata berikut: windows , Microsoft , desktop , system , system32 atau syswow64 . Jika direktori sudah ada, "NLS_ {6 karakter}" ditambahkan ke nama.

Sumberdaya 0x102 dianalisis dan file-file dibuang di %ProgramFiles% atau %AppData% , ke folder yang dipilih secara acak. Waktu pembuatan diubah untuk memiliki nilai yang sama dengan kernel32.dll .

Sebagai contoh, di sini adalah folder dan daftar file yang dibuat dengan memilih file yang dapat dieksekusi C:\Windows\system32\TCPSVCS.exe sebagai sumber data.


Gambar 6. Mengekstraksi berbagai komponen

Struktur sumber daya 0x102 di pipet cukup rumit. Singkatnya, ini berisi:
- nama file
- Ukuran dan isi file
- Format kompresi ( COMPRESSION_FORMAT_LZNT1 digunakan oleh fungsi RtlDecompressBuffer )

File pertama direset sebagai TCPSVCS.exe , yang merupakan AcroTranscoder.exe sah (menurut FileDescription , SHA-1: 2896738693A8F36CC7AD83EF1FA46F82F32BE5A3 ).

Anda mungkin telah memperhatikan bahwa beberapa file DLL lebih besar dari 11 MB. Ini karena buffer besar yang berdekatan dari data acak terletak di dalam file yang dapat dieksekusi. Ada kemungkinan bahwa ini adalah cara untuk menghindari deteksi oleh beberapa produk keamanan.

Ketekunan


0x101 daya 0x101 dalam dropper berisi dua bilangan bulat 32-bit yang menentukan cara mempertahankan kegigihan. Nilai yang pertama menunjukkan bagaimana malware akan mempertahankan kegigihan tanpa hak administrator.


Tabel 1. Mekanisme ketekunan tanpa hak administrator

Nilai integer kedua menunjukkan bagaimana malware harus memastikan kegigihan saat bekerja sebagai administrator.


Tabel 2. Mekanisme ketekunan dengan hak administrator

Nama layanan adalah nama file tanpa ekstensi; nama tampilan adalah nama folder, tetapi jika sudah ada, string " Revision 1 " ditambahkan padanya (jumlahnya bertambah hingga ditemukan nama yang tidak digunakan). Operator memastikan bahwa kegigihan melalui layanan stabil - jika terjadi kegagalan, layanan harus dimulai kembali setelah 1 detik. Kemudian, nilai WOW64 dari kunci registri layanan baru diatur ke 4, yang menunjukkan bahwa itu adalah layanan 32-bit.

Tugas terjadwal dibuat melalui beberapa antarmuka COM: ITaskScheduler , ITask , ITaskTrigger , IPersistFile dan ITaskScheduler . Intinya, program jahat membuat tugas tersembunyi, mengatur informasi akun bersama dengan informasi tentang pengguna atau administrator saat ini, dan kemudian mengatur pemicu.

Ini adalah tugas harian dengan durasi 24 jam dan interval antara dua kali 10 menit, yang berarti akan dilakukan terus menerus.

Bit berbahaya


Dalam contoh kami, file yang dapat dieksekusi TCPSVCS.exe ( AcroTranscoder.exe ) adalah perangkat lunak yang sah yang mengunduh DLL yang dibuang bersama file tersebut. Dalam hal ini, Flash Video Extension.dll menarik.

Fungsi DLLMain hanya memanggil fungsi lain. Beberapa predikat fuzzy hadir:


Gambar 7. Predikat fuzzy

Setelah pemeriksaan yang menyesatkan ini, kode menerima bagian TCPSVCS.exe file TCPSVCS.exe , mengubah proteksinya ke PAGE_EXECUTE_READWRITE dan menimpanya, menambahkan instruksi boneka:


Gambar 8. Urutan instruksi

Pada akhirnya, instruksi CALL ditambahkan ke alamat fungsi FLVCore::Uninitialize(void) diekspor oleh Flash Video Extension.dll . Ini berarti bahwa setelah memuat DLL jahat, ketika runtime memanggil TCPSVCS.exe di TCPSVCS.exe , penunjuk instruksi akan menunjuk ke NOP, menghasilkan panggilan FLVCore::Uninitialize(void) , langkah berikutnya.

Fungsi ini hanya membuat mutex yang dimulai dengan {181C8480-A975-411C-AB0A-630DB8B0A221} diikuti oleh nama pengguna saat ini. Dia kemudian membaca file yang dibuang dengan ekstensi * .db3, yang berisi kode posisi-independen, dan menggunakan CreateThread untuk mengeksekusi konten.

Isi file * .db3 adalah shellcode yang biasa digunakan oleh grup OceanLotus. Sekali lagi, kami berhasil membongkar muatannya menggunakan skrip emulator yang kami terbitkan di GitHub .

Script mengambil tahap akhir. Komponen ini adalah pintu belakang yang sudah kami analisis dalam studi OceanLotus sebelumnya . Ini dapat ditentukan oleh GUID {A96B020F-0000-466F-A96D-A91BBF8EAC96} file biner. Konfigurasi malware masih dienkripsi dalam sumber daya PE. Ini memiliki konfigurasi yang kira-kira sama, tetapi server C&C berbeda dari yang sebelumnya:

- andreagahuvrauvin[.]com
- byronorenstein[.]com
- stienollmache[.]xyz


OceanLotus sekali lagi menunjukkan kombinasi teknik yang berbeda untuk menghindari deteksi. Mereka kembali dengan garis besar โ€œhalusโ€ dari proses infeksi. Dengan memilih nama acak dan mengisi file yang dapat dieksekusi dengan data acak, mereka mengurangi jumlah IoC tepercaya (berdasarkan hash dan nama file). Selain itu, berkat penggunaan pemuatan DLL pihak ketiga, penyerang hanya perlu menghapus biner AcroTranscoder sah.

Arsip yang mengekstraksi sendiri


Setelah file RTF, grup beralih ke arsip self-extracting (SFX) dengan ikon dokumen umum untuk lebih membingungkan pengguna. Ini ditulis oleh Threatbook ( tautan dalam bahasa Cina ). Setelah memulai, file RAR yang diekstraksi sendiri dibuang dan DLL dengan ekstensi .ocx dieksekusi, muatan finalnya yang sebelumnya didokumentasikan {A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll . Sejak pertengahan Januari 2019, OceanLotus telah menggunakan kembali teknik ini, tetapi seiring waktu, beberapa konfigurasi telah berubah. Di bagian ini kita akan berbicara tentang teknologi dan perubahan.

Pembuatan umpan


Dokumen THICH-THONG-LAC-HANH-THAP-THIEN-VIET-NAM (1).EXE (SHA-1: AC10F5B1D5ECAB22B7B418D6E98FA18E32BBDEAB ) pertama kali ditemukan pada tahun 2018. File SFX ini dibuat dengan bijak - deskripsi ( Info Versi ) mengatakan bahwa ini adalah gambar JPEG. Skrip SFX adalah sebagai berikut:


Gambar 9. Perintah SFX

Malware me-reset {9ec60ada-a200-4159-b310-8071892ed0c3}.ocx (SHA-1: EFAC23B0E6395B1178BCF7086F72344B24C04DCC ), serta gambar 2018 thich thong lac.jpg.

Gambar umpan adalah sebagai berikut:


Gambar 10. Gambar umpan

Anda mungkin telah memperhatikan bahwa dua baris pertama dalam skrip SFX memanggil file OSX dua kali, tetapi ini bukan kesalahan.

{9ec60ada-a200-4159-b310-8071892ed0c3} .ocx (ShLd.dll)


Aliran kontrol file OSX sangat mirip dengan komponen OceanLotus lainnya - ada banyak urutan perintah JZ/JNZ dan PUSH/RET bergantian dengan kode sampah.


Gambar 11. Kode yang dikaburkan

Setelah memfilter kode sampah, ekspor DllRegisterServer dipanggil oleh regsvr32.exe terlihat seperti ini:


Gambar 12. Kode penginstal dasar

Bahkan, pertama kali DllRegisterServer dipanggil DllRegisterServer ekspor menetapkan nilai registri HKCU\SOFTWARE\Classes\CLSID\{E08A0F4B-1F65-4D4D-9A09-BD4625B9C5A1}\Model untuk offset terenkripsi di DLL ( 0x10001DE0 ).

Ketika suatu fungsi disebut kedua kalinya, ia membaca nilai yang sama dan berjalan di alamat itu. Dari sini, sumber daya dibaca dan dieksekusi dan banyak tindakan dalam RAM.

Shellcode adalah pemuat PE yang sama yang digunakan dalam kampanye OceanLotus sebelumnya. Itu dapat ditiru dengan menggunakan skrip kami . Akibatnya, ia membuang db293b825dcc419ba7dc2c49fa2757ee.dll , memuatnya ke dalam memori dan menjalankan DllEntry .

DLL mengekstraksi konten sumber dayanya, mendekripsi (AES-256-CBC) dan membongkar (LZMA) itu. Sumber daya memiliki format khusus yang mudah untuk didekompilasi.


Gambar 13. Struktur konfigurasi pemasang (KaitaiStruct Visualizer)

Konfigurasi diatur secara eksplisit - tergantung pada tingkat privilege, data biner akan ditulis ke %appdata%\Intel\logs\BackgroundUploadTask.cpl atau %windir%\System32\BackgroundUploadTask.cpl (atau SysWOW64 untuk sistem 64-bit).

Kegigihan kemudian dipastikan dengan membuat tugas bernama BackgroundUploadTask[junk].job , di mana [junk] adalah sekumpulan byte 0x9D dan 0xA0 .

Nama aplikasi dari tugas adalah %windir%\System32\control.exe , dan nilai parameter adalah path ke file biner yang dibongkar. Tugas tersembunyi dijalankan setiap hari.

Secara struktural, file CPL adalah DLL dengan nama internal ac8e06de0a6c4483af9837d96504127e.dll , yang mengekspor fungsi CPlApplet . File ini mendekripsi sumber daya satu-satunya {A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll , lalu memuat DLL ini dan menyebut satu-satunya ekspor DllEntry .

File konfigurasi pintu belakang


Konfigurasi backdoor dienkripsi dan tertanam di sumber dayanya. Struktur file konfigurasi sangat mirip dengan yang sebelumnya.


Gambar 14. Struktur konfigurasi backdoor (KaitaiStruct Visualizer)

Terlepas dari struktur yang serupa, nilai-nilai banyak bidang diperbarui dibandingkan dengan data yang diberikan dalam laporan lama kami .

Elemen pertama array biner berisi DLL ( HttpProv.dll MD5: 2559738D1BD4A999126F900C7357B759 ) yang diidentifikasi oleh Tencent . Tetapi karena nama ekspor telah dihapus dari biner, hash tidak cocok.

Penelitian tambahan


Mengumpulkan sampel, kami memperhatikan beberapa karakteristik. Sampel yang baru saja dijelaskan muncul sekitar Juli 2018, dan yang lain baru-baru ini menyukainya, pada pertengahan Januari - awal Februari 2019. Arsip SFX digunakan sebagai vektor infeksi, membuang dokumen umpan yang sah dan file OSX berbahaya.

Meskipun OceanLotus menggunakan cap waktu palsu, kami perhatikan bahwa cap waktu file SFX dan OCX selalu sama ( 0x57B0C36A ( 0x57B0C36A @ 19:15 UTC) dan 0x498BE80F (02/06/2009 @ 7:34 am UTC) ) masing-masing). Ini mungkin menunjukkan bahwa penulis memiliki "konstruktor" tertentu yang menggunakan template yang sama dan hanya mengubah beberapa karakteristik.

Di antara dokumen-dokumen yang telah kami pelajari sejak awal 2018, ada berbagai nama yang menunjukkan negara-negara yang menjadi tujuan serangan:

- Informasi Kontak Baru Media Kamboja (Baru) .xls.exe
- ๆŽๅปบ ้ฆ™ (ไธชไบบ ็ฎ€ๅކ) .exe (dokumen pdf palsu dari CV)
- umpan balik, Rally di AS dari 28-29 Juli, 2018.exe

Sejak ditemukannya backdoor {A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll dan publikasi analisisnya oleh beberapa peneliti, kami telah mengamati beberapa perubahan dalam data konfigurasi malware.

Pertama, penulis mulai menghapus nama dari DLL DLL tambahan ( DNSprov.dll dan dua versi HttpProv.dll ). Kemudian operator berhenti mengemas DLL ketiga (versi kedua HttpProv.dll ), memilih untuk hanya menyematkan satu.

Kedua, banyak bidang konfigurasi backdoor diubah, mungkin untuk menghindari deteksi, karena banyak IoC menjadi tersedia. Di antara bidang-bidang penting yang dimodifikasi oleh penulis adalah sebagai berikut:

  • Kunci registri AppX berubah (lihat IoC)
  • string pengkodean mutex ("def", "abc", "ghi")
  • nomor port

Akhirnya, di semua versi baru yang dianalisis, K & C baru terdaftar di bagian IOC.

Kesimpulan


OceanLotus terus berkembang. Cybergroup berfokus pada penyempurnaan dan perluasan alat dan umpan. Penulis menutupi muatan berbahaya dengan bantuan dokumen yang menarik perhatian yang relevan dengan korban yang diduga. Mereka mengembangkan desain baru dan juga menggunakan alat yang tersedia untuk umum, seperti eksploitasi Editor Persamaan. Selain itu, mereka menyempurnakan alat untuk mengurangi jumlah artefak yang tersisa di mesin korban, sehingga mengurangi kemungkinan deteksi oleh perangkat lunak antivirus.

Indikator kompromi


Indikator kompromi serta atribut MITER ATT & CK tersedia di Welivesecurity dan di GitHub .

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


All Articles