Pada Maret 2019, sampel malware baru diunggah ke VirusTotal, sebuah layanan pemindaian online populer, macOS Grup siber OceanLotus. File eksekusi backdoor memiliki kemampuan yang sama dengan versi malware sebelumnya yang telah kami teliti. macOSNamun, strukturnya telah berubah dan menjadi lebih sulit dideteksi. Sayangnya, kami tidak dapat menemukan pipet yang terkait dengan sampel ini, sehingga kami belum mengetahui vektor infeksinya.
Kami baru saja menerbitkannya dan bagaimana operator berupaya memastikan persistensi, mempercepat eksekusi kode, dan meminimalkan jejak keberadaan dalam sistem. WindowsDiketahui juga bahwa kelompok siber ini juga memiliki komponen untuk macOSPostingan ini merinci perubahan pada versi terbaru malware untuk macOS dibandingkan dengan versi sebelumnya (), dan juga menjelaskan bagaimana Anda dapat mengotomatiskan dekripsi string selama analisis menggunakan IDA Hex-Rays API.

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 orang macOS- Biner OceanLotus, sampel dikemas dengan UPX, tetapi sebagian besar alat identifikasi packer tidak mengenalinya sebagai demikian. Ini kemungkinan karena sebagian besar berisi tanda tangan yang bergantung pada keberadaan string "UPX". Selain itu, tanda tangan Mach-O kurang umum dan jarang diperbarui. Fitur ini membuat deteksi statis menjadi sulit. Menariknya, setelah dibongkar, titik masuk berada di awal bagian tersebut. __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 , 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 . 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 , 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 . 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).

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
