OceanLotus: Pembaruan malware untuk macOS

Pada bulan Maret 2019, sampel baru malware macOS dari grup cyber OceanLotus diunggah ke VirusTotal, layanan pemindaian online yang populer. File yang dapat dijalankan di pintu belakang memiliki kemampuan yang sama dengan malware macOS versi sebelumnya yang kami pelajari, namun strukturnya telah berubah dan menjadi lebih sulit untuk dideteksi. Sayangnya, kami tidak dapat menemukan dropper yang terkait dengan sampel ini, sehingga kami belum mengetahui vektor infeksinya.

Kami baru saja menerbitkannya posting tentang OceanLotus dan bagaimana operator mencoba memberikan persistensi, mempercepat eksekusi kode, dan meminimalkan jejak kaki pada sistem Windows. Diketahui pula bahwa grup cyber ini juga memiliki komponen untuk macOS. Postingan ini menjelaskan secara detail perubahan malware versi terbaru untuk macOS dibandingkan dengan versi sebelumnya (dijelaskan oleh Trend Micro), dan juga menjelaskan bagaimana Anda dapat mengotomatiskan dekripsi string selama analisis menggunakan IDA Hex-Rays API.

OceanLotus: Pembaruan malware untuk macOS

analisis

Tiga bagian berikutnya menjelaskan analisis sampel dengan hash SHA-1 E615632C9998E4D3E5ACD8851864ED09B02C77D2. File tersebut bernama senter, produk antivirus ESET mendeteksinya sebagai OSX/OceanLotus.D.

Perlindungan anti-debugging dan kotak pasir

Seperti semua biner MacOS OceanLotus, sampel dikemas dengan UPX, namun sebagian besar alat identifikasi pemaket tidak mengenalinya. Ini mungkin karena sebagian besar berisi tanda tangan yang bergantung pada keberadaan string “UPX”, selain itu, tanda tangan Mach-O kurang umum dan tidak sering diperbarui. Fitur ini membuat deteksi statis menjadi sulit. Menariknya, setelah dibongkar, titik masuknya berada di awal bagian __cfstring di segmen .TEXT. Bagian ini memiliki atribut bendera seperti terlihat pada gambar di bawah.

OceanLotus: Pembaruan malware untuk macOS
Gambar 1. Atribut bagian MACH-O __cfstring

Seperti yang ditunjukkan pada Gambar 2, lokasi kode di bagian tersebut __cfstring memungkinkan Anda mengelabui beberapa alat pembongkaran dengan menampilkan kode sebagai string.

OceanLotus: Pembaruan malware untuk macOS
Gambar 2. Kode backdoor terdeteksi oleh IDA sebagai data

Setelah dieksekusi, biner membuat thread sebagai anti-debugger yang tujuan utamanya adalah terus memeriksa keberadaan debugger. Untuk aliran ini:

— Mencoba melepas kaitan debugger apa pun, menelepon ptrace с PT_DENY_ATTACH sebagai parameter permintaan
- Memeriksa apakah beberapa port eksklusif terbuka dengan memanggil suatu fungsi task_get_exception_ports
- Memeriksa apakah debugger terhubung, seperti yang ditunjukkan pada gambar di bawah, dengan memeriksa keberadaan flag P_TRACED dalam proses saat ini

OceanLotus: Pembaruan malware untuk macOS
Gambar 3. Memeriksa koneksi debugger menggunakan fungsi sysctl

Jika pengawas mendeteksi keberadaan debugger, fungsi tersebut dipanggil exit. Selain itu, sampel kemudian memeriksa lingkungan dengan menjalankan dua perintah:

ioreg -l | grep -e "Manufacturer" и sysctl hw.model

Sampel kemudian memeriksa nilai yang dikembalikan terhadap daftar string yang dikodekan secara permanen dari sistem virtualisasi yang dikenal: tepat, vmware, virtualbox или paralel. Terakhir, perintah berikutnya memeriksa apakah mesin tersebut adalah salah satu dari “MBP”, “MBA”, “MB”, “MM”, “IM”, “MP” dan “XS” berikut. Ini adalah kode model sistem, misalnya, “MBP” berarti MacBook Pro, “MBA” berarti MacBook Air, dll.

system_profiler SPHardwareDataType 2>/dev/null | awk '/Boot ROM Version/ {split($0, line, ":");printf("%s", line[2]);}

Tambahan utama

Meskipun perintah pintu belakang tidak berubah sejak penelitian Trend Micro, kami melihat beberapa modifikasi lainnya. Server C&C yang digunakan dalam sampel ini cukup baru dan dibuat pada 22.10.2018/XNUMX/XNUMX.

- daff.faybilodeau[.]com
- sarc.onteagleroad[.]com
- au.charlineopkesston[.]com

URL sumber daya telah berubah menjadi /dp/B074WC4NHW/ref=gbps_img_m-9_62c3_750e6b35.
Paket pertama yang dikirim ke server C&C berisi lebih banyak informasi tentang mesin host, termasuk semua data yang dikumpulkan oleh perintah pada tabel di bawah.

OceanLotus: Pembaruan malware untuk macOS

Selain perubahan konfigurasi ini, sampel tidak menggunakan perpustakaan untuk pemfilteran jaringan libcurl, tetapi perpustakaan eksternal. Untuk menemukannya, pintu belakang mencoba mendekripsi setiap file di direktori saat ini menggunakan AES-256-CBC dengan kuncinya gFjMXBgyXWULmVVVzyxy, diisi dengan angka nol. Setiap file didekripsi dan disimpan sebagai /tmp/store, dan upaya untuk memuatnya sebagai perpustakaan dilakukan menggunakan fungsi tersebut jatuh. Ketika upaya dekripsi menghasilkan panggilan berhasil dlopen, pintu belakang mengekstrak fungsi yang diekspor Boriry и ChadylonV, yang tampaknya bertanggung jawab atas komunikasi jaringan dengan server. Kami tidak memiliki dropper atau file lain dari lokasi asli sampel, jadi kami tidak dapat menguraikan perpustakaan ini. Selain itu, karena komponen dienkripsi, aturan YARA berdasarkan string ini tidak akan cocok dengan file yang ditemukan di disk.

Seperti yang dijelaskan dalam artikel di atas, ini menciptakan ID klien. ID ini adalah hash MD5 dari nilai kembalian salah satu perintah berikut:

- ioreg -rd1 -c IOPlatformExpertDevice | awk '/IOPlatformSerialNumber/ { split($0, line, """); printf("%s", line[4]); }'
- ioreg -rd1 -c IOPlatformExpertDevice | awk '/IOPlatformUUID/ { split($0, line, """); printf("%s", line[4]); }'
- ifconfig en0 | awk '/ether /{print $2}' (dapatkan alamat MAC)
- tim tidak dikenal ("x1ex72x0a"), yang digunakan dalam sampel sebelumnya

Sebelum melakukan hashing, "0" atau "1" ditambahkan ke nilai kembalian untuk menunjukkan hak akses root. Ini clientID disimpan di /Library/Storage/File System/HFS/25cf5d02-e50b-4288-870a-528d56c3cf6e/pivtoken.appex, jika kode dijalankan sebagai root atau di ~/Library/SmartCardsServices/Technology/PlugIns/drivers/snippets.ecgML dalam semua kasus lainnya. File biasanya disembunyikan menggunakan fungsi _chflags, stempel waktunya diubah menggunakan perintah touch –t dengan nilai acak.

Menguraikan string

Seperti opsi sebelumnya, string dienkripsi menggunakan AES-256-CBC (kunci heksadesimal: 9D7274AD7BCEF0DED29BDBB428C251DF8B350B92 diisi dengan nol, dan IV diisi dengan nol) melalui fungsi tersebut CCCrypt. Kuncinya telah berubah dari versi sebelumnya, tetapi karena grup masih menggunakan algoritma enkripsi string yang sama, dekripsi dapat dilakukan secara otomatis. Selain postingan ini, kami merilis skrip IDA yang menggunakan Hex-Rays API untuk mendekripsi string yang ada dalam file biner. Skrip ini dapat membantu analisis OceanLotus di masa mendatang dan analisis sampel yang ada yang belum dapat kami peroleh. Skrip ini didasarkan pada metode universal untuk menerima argumen yang diteruskan ke suatu fungsi. Selain itu, ia mencari penetapan parameter. Metode ini dapat digunakan kembali untuk mendapatkan daftar argumen fungsi dan kemudian meneruskannya ke callback.

Mengetahui prototipe fungsi mendekripsi, skrip menemukan semua referensi silang ke fungsi ini, semua argumen, lalu mendekripsi data dan menempatkan teks biasa di dalam komentar di alamat referensi silang. Agar skrip berfungsi dengan benar, skrip harus disetel ke alfabet khusus yang digunakan oleh fungsi decoding base64, dan variabel global harus ditentukan yang berisi panjang kunci (dalam hal ini DWORD, lihat Gambar 4).

OceanLotus: Pembaruan malware untuk macOS
Gambar 4. Definisi variabel global key_len

Di jendela Fungsi, Anda dapat mengklik kanan fungsi dekripsi dan mengklik “Ekstrak dan dekripsi argumen.” Script harus menempatkan baris yang didekripsi di komentar, seperti yang ditunjukkan pada Gambar 5.

OceanLotus: Pembaruan malware untuk macOS
Gambar 5. Teks yang didekripsi ditempatkan di komentar

Dengan cara ini string yang didekripsi ditempatkan dengan nyaman bersama-sama di jendela IDA xrefs untuk fungsi ini seperti yang ditunjukkan pada Gambar 6.

OceanLotus: Pembaruan malware untuk macOS
Gambar 6. Fungsi Xrefs ke f_decrypt

Skrip terakhir dapat ditemukan di Gudang Github.

Keluaran

Seperti yang telah disebutkan, OceanLotus terus meningkatkan dan memperbarui perangkatnya. Kali ini, kelompok cyber tersebut telah meningkatkan malware tersebut agar dapat bekerja dengan pengguna Mac. Kodenya tidak banyak berubah, tetapi karena banyak pengguna Mac mengabaikan produk keamanan, melindungi malware dari deteksi adalah hal yang tidak terlalu penting.

Produk ESET sudah mendeteksi file ini pada saat penelitian. Karena perpustakaan jaringan yang digunakan untuk komunikasi C&C sekarang dienkripsi pada disk, protokol jaringan pasti yang digunakan oleh penyerang belum diketahui.

Indikator kompromi

Indikator kompromi serta atribut MITRE ATT&CK juga tersedia GitHub.

Sumber: www.habr.com

Tambah komentar