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
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.
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.
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
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.
Selain perubahan konfigurasi ini, sampel tidak menggunakan perpustakaan untuk pemfilteran jaringan gFjMXBgyXWULmVVVzyxy
, diisi dengan angka nol. Setiap file didekripsi dan disimpan sebagai /tmp/store
, dan upaya untuk memuatnya sebagai perpustakaan dilakukan menggunakan fungsi tersebut 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 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
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).
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.
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.
Gambar 6. Fungsi Xrefs ke f_decrypt
Skrip terakhir dapat ditemukan di
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
Sumber: www.habr.com