Pada bulan Maret 2019, VirusTotal, sebuah layanan pemindaian online yang populer, mengunggah sampel malware baru untuk macOS dari cybergroup OceanLotus. File executable backdoor memiliki kemampuan yang sama dengan versi malvari sebelumnya yang kami pelajari untuk macOS, tetapi strukturnya telah berubah dan menjadi semakin sulit dideteksi. Sayangnya, kami tidak dapat menemukan pipet yang terkait dengan sampel ini, jadi kami belum tahu vektor infeksi.
Baru-baru ini, kami menerbitkan
posting tentang OceanLotus dan bagaimana operator berusaha untuk memastikan kegigihan, mempercepat eksekusi kode, dan meminimalkan jejak kehadiran pada sistem Windows. Diketahui juga bahwa cybergroup ini memiliki komponen untuk macOS. Posting ini menjelaskan secara rinci perubahan dalam versi terbaru dari Malware untuk macOS dibandingkan dengan versi sebelumnya (
dijelaskan oleh Trend Micro ), serta bagaimana analisis dapat mengotomatiskan dekripsi string menggunakan IDA Hex-Rays API.
Analisis
Tiga bagian berikut menjelaskan analisis sampel dengan
E615632C9998E4D3E5ACD8851864ED09B02C77D2
SHA-1. File ini disebut
flashlightd , produk antivirus ESET mendeteksinya sebagai OSX / OceanLotus.D.
Perlindungan anti-debugging dan kotak pasir
Seperti semua binari OceanLotus macOS, sampel dikemas dengan UPX, tetapi sebagian besar alat identifikasi pengepak tidak mengenalinya. Mungkin karena mereka terutama mengandung tanda tangan, tergantung pada keberadaan string "UPX", di samping itu, tanda tangan Mach-O kurang umum dan tidak sering diperbarui. Fitur ini membuat deteksi statis sulit. Menariknya, setelah membongkar, titik masuk adalah di awal bagian
__cfstring
di segmen
.TEXT
. Ada atribut flag di bagian ini, seperti yang ditunjukkan pada gambar di bawah ini.
Gambar 1. Atribut bagian MACH-O __cfstringSeperti yang ditunjukkan pada Gambar 2, lokasi kode di bagian
__cfstring
memungkinkan
__cfstring
untuk mengelabui beberapa alat pembongkaran dengan menampilkan kode sebagai string.
Gambar 2. Kode backdoor didefinisikan oleh IDA sebagai dataSetelah memulai file biner menciptakan aliran sebagai sarana perlindungan terhadap debugging, satu-satunya tujuan adalah untuk terus-menerus memeriksa keberadaan debugger. Untuk utas ini:
- Mencoba melepaskan kaitan debugger apa pun dengan memanggil
ptrace
dengan PT_DENY_ATTACH
sebagai parameter permintaan - Cek apakah beberapa port pengecualian terbuka dengan memanggil
task_get_exception_ports
- Memeriksa apakah debugger terhubung, seperti yang ditunjukkan pada gambar di bawah ini, dengan memeriksa keberadaan bendera
P_TRACED
dalam proses saat ini
Gambar 3. Memeriksa koneksi debugger menggunakan fungsi sysctlJika watchdog mendeteksi keberadaan debugger, fungsi
exit
disebut. Selain itu, sampel kemudian memeriksa lingkungan dengan menjalankan dua perintah:
ioreg -l | grep -e "Manufacturer" sysctl hw.model
Setelah itu, sampel memeriksa nilai kembali terhadap daftar string dari sistem virtualisasi yang dikenal:
acle ,
vmware ,
virtualbox atau
paralel . Akhirnya, perintah berikut memeriksa apakah mesin 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]);}
Penambahan kunci
Terlepas dari kenyataan bahwa tim backdoor tidak berubah sejak studi Trend Micro, kami melihat beberapa modifikasi lainnya. Server C & C yang digunakan dalam sampel ini cukup baru, tanggal pembuatannya adalah 10/22/2018.
- daff.faybilodeau [.] com
- sarc.onteagleroad [.] com
- au.charlineopkesston [.] com
URL sumber daya diubah 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 dari tabel di bawah ini.

Selain perubahan konfigurasi ini, sampel tidak menggunakan perpustakaan
libcurl untuk penyaringan jaringan, tetapi perpustakaan eksternal. Untuk menemukannya, pintu belakang mencoba mendekripsi setiap file dalam direktori saat ini menggunakan AES-256-CBC dengan
gFjMXBgyXWULmVVVzyxy
kunci
gFjMXBgyXWULmVVVzyxy
dengan nol. Setiap file didekripsi dan disimpan sebagai
/tmp/store
, dan upaya untuk memuatnya sebagai pustaka dibuat menggunakan fungsi
dlopen . Ketika upaya dekripsi mengarah ke panggilan
dlopen
berhasil, pintu belakang mengambil fungsi
Boriry
dan
Boriry
diekspor, yang tampaknya bertanggung jawab untuk komunikasi jaringan dengan server. Kami tidak memiliki dropper atau file lain dari lokasi sumber sampel, jadi kami tidak dapat menganalisis perpustakaan ini. Selain itu, karena komponen dienkripsi, aturan YARA berdasarkan baris ini tidak akan cocok dengan file yang ditemukan pada disk.
Seperti yang dijelaskan dalam artikel di atas,
cliendID dibuat. Identifier ini adalah hash MD5 dari nilai pengembalian salah satu dari perintah berikut:
-
ioreg -rd1 -c IOPlatformExpertDevice | awk '/IOPlatformSerialNumber/ { split($0, line, "\""); printf("%s", line[4]); }'
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]); }'
ioreg -rd1 -c IOPlatformExpertDevice | awk '/IOPlatformUUID/ { split($0, line, "\""); printf("%s", line[4]); }'
-
ifconfig en0 | awk \'/ether /{print $2}\'
ifconfig en0 | awk \'/ether /{print $2}\'
(dapatkan alamat MAC)
- perintah tidak dikenal ("
\x1e\x72\x0a
"), yang digunakan dalam sampel sebelumnya
Sebelum hashing, karakter "0" atau "1" ditambahkan ke nilai yang dikembalikan, yang menunjukkan keberadaan hak akses root.
ClientID ini disimpan di
/Library/Storage/File System/HFS/25cf5d02-e50b-4288-870a-528d56c3cf6e/pivtoken.appex
jika kode tersebut berjalan 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.
String decoding
Seperti pada versi sebelumnya, string dienkripsi menggunakan AES-256-CBC (kunci heksadesimal:
9D7274AD7BCEF0DED29BDBB428C251DF8B350B92
dengan nol, dan IV diisi dengan nol) menggunakan fungsi
CCCrypt . Kunci telah diubah dari versi sebelumnya, tetapi karena grup masih menggunakan algoritma enkripsi string yang sama, dekripsi dapat otomatis. Selain posting ini, kami merilis skrip IDA yang menggunakan API Hex-Rays untuk mendekripsi string yang ada dalam file biner. Skrip ini dapat membantu dalam analisis OceanLotus di masa mendatang dan analisis sampel yang ada yang belum dapat kami peroleh. Script didasarkan pada metode universal untuk menerima argumen yang diteruskan ke suatu fungsi. Dia juga mencari pengaturan tujuan. Metode ini dapat digunakan kembali untuk mendapatkan daftar argumen fungsi dan kemudian meneruskannya ke panggilan balik.
Mengetahui prototipe fungsi
dekripsi , 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 bekerja dengan benar, ia harus memiliki alfabet yang ditentukan pengguna yang digunakan oleh fungsi decoding base64 dan variabel global yang berisi panjang kunci harus ditentukan (dalam hal ini, DWORD, lihat Gambar 4).
Gambar 4. Definisi variabel global key_lenDi jendela Fungsi, Anda dapat mengklik kanan fungsi dekripsi dan mengeklik "Ekstrak dan dekripsi argumen". Script harus meletakkan baris yang didekripsi dalam komentar, seperti yang ditunjukkan pada Gambar 5.
Gambar 5. Teks yang didekripsi ditempatkan dalam komentarDengan demikian, baris yang didekripsi ditempatkan bersama-sama di jendela
xrefs IDA untuk fungsi ini, seperti yang ditunjukkan pada Gambar 6.
Gambar 6. Xrefs ke fungsi f_decryptScript terakhir dapat ditemukan di
repositori Github .
Kesimpulan
Seperti yang telah disebutkan, OceanLotus terus meningkatkan dan memperbarui set alatnya. Kali ini, cybergroup meningkatkan malware untuk bekerja dengan pengguna Mac. Kode ini tidak banyak berubah, tetapi karena banyak pengguna Mac mengabaikan produk keamanan, melindungi Malware dari deteksi adalah hal yang sangat penting.
Produk ESET telah mendeteksi file ini pada saat penelitian. Karena pustaka jaringan yang digunakan untuk komunikasi C&C sekarang dienkripsi pada disk, protokol jaringan yang tepat yang digunakan oleh penyerang belum diketahui.
Indikator kompromi
Indikator kompromi serta atribut MITER ATT & CK juga tersedia di
GitHub .