Svchost sangat penting dalam implementasi proses layanan bersama, di mana sejumlah layanan dapat berbagi proses untuk mengurangi konsumsi sumber daya. Pengelompokan beberapa layanan ke dalam satu proses akan menghemat sumber daya komputasi, dan pertimbangan ini menjadi perhatian khusus bagi perancang NT karena pembuatan proses Windows membutuhkan lebih banyak waktu dan menghabiskan lebih banyak memori dibandingkan sistem operasi lain, misalnya pada keluarga Unix. 1
Artinya secara singkat bahwa; Pada sistem operasi Windows, svchost.exe mengelola layanan dan layanan sebenarnya berjalan di bawah svchost.exe sebagai thread. Phant0m menargetkan layanan Log Peristiwa dan menemukan proses yang bertanggung jawab atas layanan Log Peristiwa, ia mendeteksi dan mematikan thread yang bertanggung jawab atas layanan Log Peristiwa. Jadi, meskipun layanan Event Log tampaknya berjalan di sistem (karena Phant0m tidak menghentikan proses), layanan tersebut tidak benar-benar berjalan (karena Phant0m mematikan thread) dan sistem tidak mengumpulkan log.
Phant0m menggunakan dua opsi berbeda untuk mendeteksi ID Proses layanan Log Peristiwa. Yang pertama mendeteksi melalui SCM (Service Control Manager) dan yang kedua mendeteksi melalui WMI (Windows Management Instrumentation). Dengan metode mana Anda ingin Phant0m mendeteksi ID Proses layanan Log Peristiwa, ubah baris berikut di file main.cpp.
Misalnya, jika Anda ingin ID Proses terdeteksi melalui SCM, Anda harus mengeditnya sebagai berikut. (Jangan tetapkan semua nilai secara bersamaan, tetapkan hanya satu teknik yang Anda inginkan.)
// PID detection techniques configuration section.
# define PID_FROM_SCM 1 // If you set it to 1, the PID of the Event Log service is obtained from the Service Manager.
# define PID_FROM_WMI 0 // If you set it to 1, the PID of the Event Log service is obtained from the WMI.
Misalnya, jika Anda ingin thread dimatikan menggunakan Teknik-1, Anda harus mengeditnya sebagai berikut. (Jangan tetapkan semua nilai secara bersamaan, tetapkan hanya satu teknik yang Anda inginkan.)
// TID detection and kill techniques configuration section.
# define KILL_WITH_T1 1 // If you set it to 1, Technique-1 will be use. For more information; https://github.com/hlldz/Phant0m
# define KILL_WITH_T2 0 // If you set it to 1, Technique-2 will be use. For more information; https://github.com/hlldz/Phant0m
Phant0m menggunakan dua opsi berbeda untuk mendeteksi dan mematikan thread layanan Log Peristiwa.
Ketika setiap layanan didaftarkan pada mesin yang menjalankan Windows Vista atau lebih baru, Service Control Manager (SCM) memberikan tag numerik unik ke layanan tersebut (dalam urutan menaik). Kemudian, pada waktu pembuatan layanan, tag tersebut ditetapkan ke TEB thread layanan utama. Tag ini kemudian akan disebarkan ke setiap thread yang dibuat oleh thread layanan utama. Misalnya, jika thread layanan Foo membuat thread pekerja RPC (catatan: thread pekerja RPC tidak menggunakan mekanisme kumpulan thread lebih lanjut nanti), thread tersebut akan memiliki Tag Layanan dari layanan Foo. 2
Jadi, dalam teknik ini Phant0m akan mendeteksi thread layanan Event Log dengan NtQueryInformationThread API untuk mendapatkan alamat TEB thread dan membaca SubProcessTag dari TEB. Kemudian mematikan thread yang terkait dengan layanan Event Log. Kode untuk teknik ini ada di file the technique_1.h
.
Dalam teknik ini, Phant0m mendeteksi nama-nama DLL yang terkait dengan thread. Layanan Log Peristiwa Windows menggunakan wevtsvc.dll
. Jalur lengkapnya adalah %WinDir%System32wevtsvc.dll
. Jika thread menggunakan DLL itu, itu adalah thread Windows Event Log Service dan kemudian Phant0m mematikan thread tersebut. Kode untuk teknik ini ada di file the technique_2.h
.
Anda dapat menggunakan Phant0m baik sebagai EXE mandiri maupun sebagai DLL Reflektif. Buka proyek di Microsoft Visual Studio, buat pengaturan (pilih teknik deteksi dan penghentian) dan kompilasi. Anda juga dapat menggunakan versi DLL Reflektif dengan Cobalt Strike, untuk ini terdapat file Aggressor Script (phant0m.cna) di repositori.
Metode fork dan inject digunakan dengan bdllspawn
dalam jenis eksekusi Aggressor Script (phant0m.cna) untuk Cobalt Strike. Jika Anda ingin memasukkan Phant0m ke dalam proses yang ada dan menjalankannya, Anda dapat meninjau proyek ini (https://github.com/rxwx/cs-rdll-ipc-example) dan Anda dapat melakukannya dengan mudah. Anda juga dapat mengonversi kode ke DLL dan kemudian ke Shellcode dengan Donut.
CATATAN: Proyek ini hanya mendukung arsitektur x64.