Analisis perilaku Trojan Pegasus di jaringan

Kode sumber untuk trojan perbankan Pegasus baru-baru ini diterbitkan . Terlepas dari penyebutan kelompok Carbanak atas nama arsip, para peneliti dari Minerva Labs membantah keterlibatan Trojan dalam kelompok ini dan membuktikan keterlibatan mereka dalam kelompok Buhtrap (Ratopak). Di dalam arsip adalah deskripsi singkat tentang pekerjaan Trojan, kode sumbernya, deskripsi sistem pembayaran bank dan data karyawan banyak bank Rusia.

Arsitektur kode sumber malware ini cukup menarik. Fungsionalitas dibagi menjadi beberapa modul yang dirangkai menjadi satu โ€œbinpackโ€ pada tahap kompilasi. Proses kompilasi juga mencakup penandatanganan file yang dapat dieksekusi dengan sertifikat dari file tric.pfx, yang tidak ada dalam arsip.

Yang tidak kalah penasaran adalah aktivitas jaringan Pegasus, yang, setelah infeksi, mencoba menyebar di dalam domain dan tahu bagaimana mem-proxy data antara mesin yang menggunakan pipa dan transportasi Mailslot. Kami fokus mempelajari fitur-fitur aktivitas jaringan Trojan dan dengan cepat menambahkan deteksi Pegasus ke produk PT Network Attack Discovery . Ini akan memungkinkan semua penggunanya untuk mendeteksi aktivitas trojan ini dan modifikasinya tepat waktu di jaringan mereka. Pada artikel ini, saya akan memberikan deskripsi rinci tentang mekanisme distribusi jaringan dan interaksi antara salinan Pegasus.



Intro


Setelah berada di mesin, modul InstallerExe utama menyuntikkan kode ke svchost.exe menggunakan teknik Proses Hollow dan, setelah menginisialisasi modul utama, Pegasus memulai beberapa proses paralel:

  1. Replikasi Domain - terlibat dalam intelijen dalam jaringan dan upaya untuk menyebar ke mesin Windows lainnya.
  2. Mailslot Listener mendengarkan pesan mailslot broadcast, di mana Pegasus mengirimkan akun yang ditambang. Nama slot dihasilkan pada waktu kompilasi.
  3. Pipe Server Listener mendengarkan Windows Pipe dengan nama yang dibuat atas nama mesin. Pipa-pipa ini terutama digunakan untuk mendeteksi salinan Pegasus lain pada jaringan dan interaksinya.
  4. Kata Sandi Log masuk secara berkala setiap beberapa menit mencoba untuk membuang data akun dengan modul dari Mimikatz.
  5. Network Connectivity bertanggung jawab untuk komunikasi dengan server CnC dan pengiriman pesan berkala.

// start transports which links data with our CB-manager pwInitPipeServerAsync(dcmGetServerCallback()); mwInitMailslotServer(dcmGetServerCallback()); ... // start broadcasting creds to other machines cmStartupNetworkBroadcaster(); 

Replikasi domain


Salah satu subsistem di Pegasus bertanggung jawab atas Gerakan Lateral pada jaringan Windows. Distribusi dibagi menjadi dua langkah penting:

  1. Deteksi mobil tetangga.
  2. Mencoba replikasi ke mesin.

Penemuan mesin tetangga di domain dilakukan melalui dua panggilan API:

NetServerEnum, yang membutuhkan layanan Browser dan panggilan ke WNetOpenEnum / WNetEnumResource.
Semua mesin yang ditemukan di domain harus dipindai jika sudah terinfeksi. Pegasus melakukan jajak pendapat nama pipa yang dihasilkan setiap 200 milidetik selama lebih dari 20 kali berturut-turut. Kami menggunakan perilaku abnormal ini sebagai salah satu indikator aktivitas Pegasus di domain. Karena tidak mendeteksi tanda-tanda infeksi, malware melanjutkan ke langkah berikutnya - upaya replikasi.

Replikasi adalah sebagai berikut. Menggunakan akun yang ditemukan (KM) pada host, Pegasus mencoba masuk ke mesin menggunakan protokol SMB ke $ IPC dan ADMIN $ bola, dan jika ada akses ke $ IPC dan tidak ada akses ke $ ADMIN, maka Pegasus menyimpulkan bahwa itu benar akun tidak cukup dan harus ditandai sebagai tidak valid. Setelah memperoleh akses ke ADMIN $ ball, yang merupakan alias untuk folder% windir%, malware mencoba menentukan arsitektur mesin untuk menggunakan modul yang sesuai di masa depan.

Algoritma penentuan arsitektur didasarkan pada header file PE pada mesin jarak jauh. Sebagai file seperti itu, Pegasus mencoba membaca 4 kilobyte pertama dari notepad.exe dari folder% windir%. Kelemahan yang jelas dari metode ini adalah bahwa pada Windows Server 2012, notepad terletak di jalur% windir% \ System32.

Lokasi notepad.exe di Windows 7:

 C:\Users\Administrator>where notepad.exe C:\Windows\System32\notepad.exe C:\Windows\notepad.exe 

Di Windows Server 2012:

 C:\Users\Administrator>where notepad.exe C:\Windows\System32\notepad.exe 

Jika tidak mendeteksi notepad.exe, Pegasus tidak dapat menginfeksi server, meskipun memiliki informasi akun dengan hak yang diperlukan. Tidak adanya notepad di% windir% dapat menghentikan distribusi Pegasus pada Windows Server 2012. Menggunakan regedit.exe dalam hal ini lebih dapat diandalkan.

Setelah berhasil mendefinisikan arsitektur server target, Pegasus memuat dropper RSE (Remote Service Exe) kecil berukuran sekitar 10 kilobyte, yang tugasnya memuatkan binpack dari modul Pegasus melalui pipa dalam bentuk yang jelas dan kontrol transfer ke modul Shellcode. Nama dropper terdiri dari pseudo-random dan terdiri dari serangkaian karakter heksadesimal dari 8 hingga 15 karakter. Generator pseudo-acak diinisialisasi tergantung pada nama mesin target dan akan sama antara mulai untuk menghindari kemungkinan kekacauan% โ€‹โ€‹windir% dengan salinan dropper sebelumnya.



Dropper diperiksa untuk integritas dan kemungkinan penghapusan oleh antivirus, setelah itu diluncurkan oleh salah satu dari dua mekanisme yang diterapkan - SCM atau WMI, dan pertama-tama Pegasus mencoba untuk memulai RSE melalui mekanisme WMI, dan hanya kemudian menggunakan Service Control Manager (SCM). Ini karena SCM meninggalkan lebih banyak jejak di log Windows. Pembuat Pegasus juga merencanakan metode distribusi lainnya - Wsh Remote, Powershell remoting, Penjadwal Tugas, dan modul untuk mengeksekusi perintah melalui RDP sedang dikembangkan.

Seperti disebutkan di atas, setelah peluncuran yang sukses, dropper memeriksa dan membuka pipa untuk mendengarkan dan mentransfer kontrol ke muatan yang masuk.



Karena kode Pegasus disuntikkan oleh metode Proses Hollow ke dalam proses svchost.exe, modul InstallerExe asli tidak boleh tetap pada disk jika terjadi infeksi primer, maupun dropper RSE jika terjadi distribusi. Jika pipet masih dapat diakses oleh jalur yang dikenal, Pegasus menghapusnya dengan caranya sendiri:

  1. menimpa isi file dengan data acak;
  2. menimpa dengan data kosong (nol);
  3. ganti nama file;
  4. penghapusan file.



Setelah infeksi berhasil, proses distribusi Replikasi Domain dimulai lagi.

Mailslot berfungsi


Setelah Pegasus mendapatkan akses ke data akun baik dari salinan Pegasus lain atau dari modul mod_LogonPasswords, ia akan mulai menyiarkan data AS berdasarkan domain. Distribusi dilakukan menggunakan mekanisme SMB berbasis Mailslot, yang memungkinkan penyiaran searah sebagian kecil data di seluruh domain. Distribusi berlangsung sesuai dengan nama slot yang dibuat secara acak dan sehingga semua mesin yang terinfeksi dalam domain dapat mengirim dan menerima data dengan satu nama, generator pseudo-acak untuk nama diinisialisasi dari variabel TARGET_BUILDCHAIN_HASH yang ditentukan dalam konfigurasi selama proses pembuatan.

Karena mekanisme Mailslot memberlakukan batasan pada ukuran paket maksimum, hanya satu KM dikirim pada suatu waktu sesuai dengan prinsip waktu pengiriman terakhir: di antara semua KM yang tersedia, domain yang tanggal pengiriman terakhirnya adalah yang tertua dikirim oleh domain.

Data dalam Mailslot tidak ditransmisikan dalam teks yang jelas, tetapi dibungkus dengan tiga lapis enkripsi XOR, dan kunci dikirimkan bersama dengan data. Lapisan data pertama adalah amplop NetMessageEnvelope dengan pemeriksaan integritas data oleh algoritma SHA1, digunakan untuk semua data yang dikirimkan melalui jaringan lokal. 4 byte data pada awal paket adalah kuncinya, yang diubah oleh pergeseran bit 5 bit ke kanan per siklus. Di dalam amplop adalah struktur data yang disandikan XOR dengan bidang AS langsung dan tanggal mereka ditambahkan. Kunci 8 dan byte juga terletak di awal struktur, tetapi diterapkan tanpa offset. Setelah decoding struktur KM, itu hanya tinggal deserialize bidang individu dari struktur ENC_BUFFER seperti nama komputer, nama domain, nama pengguna dan kata sandi. Bidang-bidang ini dienkripsi dengan kunci 8-byte dengan offset. Skrip untuk mendekripsi paket Mailslot dan contoh dari paket tersebut dapat ditemukan di sini: script , PCAP .

Periode untuk mengirim pesan Mailslot dalam versi rilis berkisar dari 20 detik hingga 11 menit.

 // some random wait before making next step DbgPrint("going to sleep"); #ifdef _DEBUG // debug - 2-5 s Sleep(rg.rgGetRnd(&rg, 2000, 5000)); #else // release - 20 - 650 s //Sleep(rg.rgGetRnd(&rg, 2000, 65000) * 10); Sleep(rg.rgGetRnd(&rg, 2000, 15000)); #endif 

Selain bertukar akun, mekanisme Mailslot digunakan untuk mencari mesin yang terinfeksi dengan akses Internet dan untuk mengiklankan akses Internet. Amplop NetMessageEnvelope menyimpan jenis pesan yang dikirim. Pertukaran data antara mesin tanpa akses dan mesin dengan akses Internet dilakukan melalui pipa.

Pipa bekerja


Untuk komunikasi dua arah atau transfer data dalam jumlah besar, salinan Pegasus menggunakan pipa sebagai saluran komunikasi. Nama pipa, meskipun juga dihasilkan oleh generator pseudo-acak, tetapi tergantung pada nama mesin dan membangun dan, dengan demikian, memungkinkan bagian klien dan server untuk menggunakan nama yang sama.

Dalam komunikasi satu arah, misalnya, mentransfer binpack selama replikasi ke komputer lain, data tidak dienkripsi dan dikirimkan secara jelas. Binpack dimulai dengan struktur SHELLCODE_CONTEXT dengan panjang 561 byte.



Selama transmisi dua arah, misalnya, memproksi data antara salinan Pegasus tanpa akses Internet dan server CnC, struktur amplop NetMessageEnvelope yang sama dengan enkripsi XOR digunakan seperti dalam kasus Mailslot, karena memungkinkan Anda untuk membedakan berbagai jenis pesan di bidang id.

Secara arsitektur, proksi data dilakukan melalui permintaan untuk mentransfer sebagian data (PMI_SEND_QUERY), menerima id permintaan sebagai tanggapan dan menanyakan status tugas dengan id (PMI_CHECK_STATUS_QUERY). Sebagai aturan, struktur Amplop lain ditransfer sebagai beban, menambahkan berbagai fungsi dan lapisan enkripsi lainnya.

Selain itu, bekerja dengan pipa tidak berakhir pada interaksi antara mesin yang terinfeksi. Modul mod_KBRI_hd menyuntikkan kode ke dalam proses cmd.exe yang memotong panggilan MoveFileExW dan menganalisis semua data yang disalin, karena ini adalah bagian dari proses pembayaran. Jika file yang disalin berisi data yang menarik bagi penyerang - data dengan pembayaran, pemberitahuan tentang ini dikirim ke server CnC. Komunikasi antara modul mod_KBRI disuntikkan ke cmd.exe dan salinan Pegasus dilakukan di dalam mesin yang terinfeksi melalui pipa yang namanya tidak dihasilkan tetapi hardcoded dalam kode sumber:

 \.\pipe\pg0F9EC0DB75F67E1DBEFB3AFA2 

Fungsionalitas modul juga termasuk penggantian akun data dengan cepat sesuai dengan templat. Contoh pola untuk mencari di tangkapan layar.

Lalu lintas Cnc


Aliran terpisah bertanggung jawab untuk pertukaran data langsung dengan server CnC, yang memeriksa antrian potongan data dari proses internal atau salinan malware lainnya setiap beberapa menit dan mengirimkannya ke server.

Selama inisialisasi modul mod_NetworkConnectivity, ia melakukan pemeriksaan multistage koneksi jaringan:

1) Mendeteksi pengaturan server proxy dan mencoba terhubung ke www.google.com :

  • Di cabang registri \\ Perangkat Lunak \\ Microsoft \\ Windows \\ CurrentVersion \\ Pengaturan Internet.
  • Melalui WPAD (hubungi WinHttpGetProxyForUrl).
  • Melalui konfigurasi proksi untuk pengguna saat ini (hubungi WinHttpGetIEProxyConfigForCurrentUser).

2) Memeriksa koneksi dengan server pembaruan Microsoft dan data yang dikembalikan ( authrootseq.txt , authrootstl.cab , rootupd.exe )

3) Menguji koneksi HTTPS dengan salah satu dari 6 alamat:


Hanya setelah melewati semua pemeriksaan, Pegasus percaya bahwa ia memiliki akses yang diperlukan ke jaringan eksternal dan dapat mengumumkannya melalui domain Mailslot dengan pesan. Selain itu, Pegasus dapat menyamar dan berkomunikasi dengan server CnC hanya selama jam kerja - dari jam 9 pagi sampai 7 malam waktu setempat.

Pegasus mengirimkan potongan data yang dibungkus dalam sebuah amplop dengan perhitungan hash dari jumlah dalam bentuk terenkripsi menggunakan enkripsi DES dalam mode CRYPT_MODE_CBC / PKCS5_PADDING. Kunci enkripsi hanya bergantung pada variabel selama kompilasi, dan dengan demikian kami dapat mendekripsi lalu lintas antara malware dan server hanya dengan mengetahui BUILDCHAIN_HASH-nya. Dalam kode sumber di dalam arsip, variabel ini memiliki nilai 0x7393c9a643eb4a76. Sebuah skrip untuk mendekripsi Check-in ke server dan contoh dari paket semacam itu dapat ditemukan di sini: script , PCAP .

Ini mentransfer konten tersebut (struktur INNER_ENVELOPE) ke server CnC selama Check-in, atau bersama-sama dengan data apa pun. Awalnya, ada 28 byte amplop dengan bidang panjang dan jumlah SHA1.



Data yang sama ditransfer antara mesin selama proksi melalui pipa, tetapi dibungkus dengan amplop NetMessageEnvelope yang kita tahu dengan jumlah hash dan enkripsi XOR.

Operator CnC dapat mengirim perintah untuk dieksekusi ke salinan dan pesan Pegasus dengan perintah atau data lain, misalnya, EID_CREDENTIALS_LIST dapat berisi lapisan enkripsi bidang mereka sendiri, seperti yang kita lihat dalam contoh akun penyiaran.

Deteksi


Pertama-tama, kami tertarik untuk mendeteksi aktivitas Pegasus di jaringan dan, setelah mempelajari kode sumber dengan hati-hati dan berjalan di lingkungan pengujian, kami menemukan anomali jaringan dan artefak yang dengan jelas menunjukkan adanya malware kompleks di jaringan. Pegasus benar-benar dapat disebut serbaguna - secara aktif menggunakan protokol SMB untuk mengirim pesan dan menjalin komunikasi dengan salinan lain, menyebar ke mesin lain dan berkomunikasi dengan server CnC dengan caranya sendiri yang khusus. Dengan menginstal jaringan peer-to-peer di domain, salinan Pegasus membuka jalan ke jaringan eksternal dan berkomunikasi dengan server CnC dengan mem-proxy lalu lintas satu sama lain. Menggunakan sertifikat untuk menandatangani file yang dapat dieksekusi dan mengakses sumber daya Microsoft dan Mozilla selama verifikasi koneksi membuat sulit untuk mendeteksi aktivitas dan deteksi pada host.

Proyek kode sumber Pegasus terstruktur dan dijelaskan dengan cukup baik, sehingga dalam waktu dekat kita dapat mengharapkan peminjaman bagian-bagian dari kodenya oleh program jahat lainnya dan penampilan modifikasi.

Banyak mekanisme untuk mengeksekusi perintah dari jarak jauh dan mencari data akun tetap tidak terealisasi, para pengembang juga akan menambahkan kemampuan untuk mengubah shellcode selama implementasi dengan cepat. Dan ini bukan semua ide mereka.

Kami telah mengembangkan beberapa tanda tangan untuk PT NAD dan IDS Suricata, yang memungkinkan kami untuk mengidentifikasi aktivitas jaringan spesifik Pegasus pada tahap yang berbeda, mulai dari detik-detik pertama aktivitasnya. Anda dapat menemukan tanda tangan terbuka untuk Suricata IDS di github dan Twitter kami , mereka akan secara otomatis masuk ke Suricata Anda jika Anda menggunakan mekanisme pembaruan pembaruan suricata.

Anda dapat melihat bagaimana tanda tangan untuk aktivitas Pegasus bekerja di tangkapan layar di bawah ini. Ini adalah produk PT Network Attack Discovery baru kami yang mengidentifikasi insiden dan membantu menyelidiki mereka:



Selain itu, indikator kompromi (IC) berikut dapat digunakan untuk deteksi:

  MAILSLOT \ 46CA075C165CBB2786 
 pipa \ pg0F9EC0DB75F67E1DBEFB3AFA2

 hxxp: //denwer/pegasus/index.php
 hxxp: //mp3.ucrazy.org/music/index.php
 hxxp: //support.zakon-auto.net/tuning/index.asp
 hxxp: //video.tnt-online.info/tnt-comedy-tv/stream.php 

Diposting oleh Cyril Shipulin dari @attackdetection, Twitter | Telegram

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


All Articles