Virüs - Trojan - Keylogger - BotNet
En Basitten Windows Servis Yapımı (Açıklamalı)
En Basitten Windows Servis Yapımı (Açıklamalı)
-
Merhaba sevgili müridler, bugün bir başka yazıyla karşınızdayım, zararlı yazılıma devam, ancak sanmayın ki bir gün arayla sürekli böyle yazı yazıcam :)
Önceki yazının linki : http://tahribat.com/Forum-En-Basitten-Keylogger-Yapimi-Aciklamali-156755/
Bazılarınız sorabilir , windows servisi yazmanın zararlı yazılımla ne ilgisi var, bizi temiz ahlaklı yazılımcı yapmaya mı çalışıyorsun diye, haklısınız hemen açıklayım.
Windows servisin kendisini direkt zararlı yazılım olarak kullanmayacağız, bunun yerine zararlı yazılımımızı başlatan bir aracı olarak kullanacağız, artıları ve eksilerini birazdan açıklayacağım.
Windows servisi nedir
Servisler Service Control Manager (SCM) tarafından başlatılan özel programlardır, amaçları kullanıcı etkileşimi olmadan arka planda çalışıp bazı sessiondan bağımsız işlemleri yerine getirmektir. bir servis kullanıcıdan bağımsız olarak çalışır. (session 0 da). Normal exe gibi çift tıklayarak başlatamazsınız,
driver olanları olduğu gibi process olanları da vardır. Driver'ları servis olarak başlatmak konumuz dışında çünkü henüz driver yazmıyoruz :)
1) Servis olarak çalışan program kullanıcı login olmasa da çalışır (doğal olarak pencereli program bile çalışsa bizim sessionda görünmez)
2) Servis olarak çalışan program tam yetkiyle çalışır
3) Servis seçimlik olarak windows açılırken otomatik olarak services.exe tarafından başlatılacağı gibi elle de başlatılabilir (demand start)
Neden windows servisi
Zararlı yazılımınızı açılışta çalıştırmanın başka yolları da var elbet, mesela registry e yazmak, startup a atmak vb, ancak bunların tespiti çok kolay, servis yazmak tespiti en zor olan değil tabiki ancak ilersi rootkit'e giriyor.
Serivisin artıları
1) Program msconfig'de vs startupta görünmez, sistemde trojan varmı diye merak edenlerin ilk baktığı yerdir
2) Program görev yöneticisinde direkt görünmez, sadece tüm kullanıcılara ait işlemleri göster gibi bi düğme var taskmgr de ona basınca çıkan listede gösterir, burda da yanında SYSTEM yazdığı için, profesyonellerin bile çoğu aldanabilir :)
3) İyi isimlendirilmiş, bilgileri iyi doldurulmuş yeri simgesi vs iyi ayarlanmış vb bir servisi tespit etmek, tespit etsek bile zararlı olduğunu anlamak normal process'lere göre çok daha zordur.
4) Servis services.exe tarafından başlatılır, parent'i odur, doğal olarak çok masum görünür.
5) Servis session bağımsız ve tam yetki ile çalışır.
Servisin eksileri
Aslında pek bir eksisi yok, en büyük eksisi UAC aktifken, servisin yüklenmesi için admin yetkisinin gerekmesidir, bunu da aşağıda nasıl hallederiz göstericem.
Servisimizin kodu, sadece 20 satır :F , tabi bu özellikle minimalize edilmiş koddur, iyi bir çocuk olup gerçek windows servisleri yazmak isterseniz, service main function, service control handler function örnekleri var msdn de süper örnekler.#include <windows.h> VOID WINAPI SvcMain( DWORD dwArgc, LPTSTR *lpszArgv ) { ShellExecute(NULL, "open", "calc.exe", NULL, NULL, SW_NORMAL); exit(0); } int main() { SERVICE_TABLE_ENTRY ServiceTable[2]; ServiceTable[0].lpServiceProc = (LPSERVICE_MAIN_FUNCTION)SvcMain; ServiceTable[0].lpServiceName = "tahribat"; ServiceTable[1].lpServiceName = NULL; ServiceTable[1].lpServiceProc = NULL; StartServiceCtrlDispatcher(ServiceTable); return 0; }
Açıklamaya geçmeden önce servisi yüklenmek için gerekli bat dosyasısc create tahribat type= own DisplayName= tahribat binpath= "c:\users\username\desktop\svc.exe" start= auto error= ignore sc start tahribat
Ne biçim programcısın servisi bat ile yüklüyosun apisi yokmu diyenler olabilir, açıklıyorum, bu bat dosyasını runas ile çalıştırırsak, windows admin yetkisi isterken cmd.exe istiyor diyor ve imzalı program olduğundan uyarı mavi çıkıyor, eğer biz exe'mize manifest dosyası ekleyerek admin yetkisi istetseydik turuncu olacaktı, üstelik exe mizin ismi kabak gibi çıkacaktı :D
Şimdi kodu kısaca açıklıyorum, zaten pek açıklancak bişey yok ama, Öncelikle her servisin bir start fonksiyonu vardır, exe'nin start fonksiyonu main biliyorsunuz, main fonksiyopnunda gördüğünüz gibi serviceproc olarak SvcMain fonksiyonunu gösterdik, daha sonra StartServiceCtrlDispatcher fonksiyonu ile bunu scm ye bildiriyoruz, bu fonksiyon bulunduğumuz thread'i scm ye bağlıyor ve service processinin yani exemizin kontrol threadi oluyor. Bizim control handler fonksiyonumuz yok çünkü hemen servisi durdurup sonlanıyoruz, ancak normalde servis bu kontrol threadi sayesinde exelere hizmet verir.Kontrol fonksiyonu RegisterServiceCtrlHandler ile set edilir. Ayrıca son olarak servisin durumu SetServiceStatus ile scm ye bildirilir, biz bunların hiç birini yapmadık, çünkü amacımız servis yazmak değil en basit servis kodu ile kendi exe mizi çalıştırmak, böylece bizim exemizde servis gibi çalışacak, ayrıca hiç biryerde görünmeyecek, başlangıçta çalışıyormuş gibi dikkat çekmiyecek, kuşlar böcekler.
Niye 2 tane service table entry si var, birisini güzelce doldurduk diğerini boş bıraktık derseniz, orda 100 tane de entry olabilirdi, sonuncusu her zaman null oluyor böylece tablonun bittiği anlaşılıyor.
Shellexecute zaten herkesin bildiği bi api, windowsta process yaratan bir kaç apiden birisi :) Biz burda calc.exe yi başlattık, şimdi bakalım calc.exe ve tahribat servisimiz sistemde nasıl görünüyor.
Servisin başlattığı calc.exe (normalde görünmüyor, sadece tüm işlemleri gösteri tıklarsanız görev yöneticisi kapanıp admin yetkisiyle açılıyor ve öyle gösteriyor)http://c1204.hizliresim.com/w/j/4jvhx.png
Msconfigten bir görüntüc1204.hizliresim.com/w/j/4jvk2.png
Servislerden bir görüntühttp://c1204.hizliresim.com/w/j/4jvlu.png
-
Ellerine dert görmesin hocam diğer konu gibi buda çok iyi :D
-
Sora bakarım .d
-
hocam anlatım cok iyi olmuşta savunma yönünden ne yapabiliriz dediğin gibi msconfig yapıyorum bişiden şüphelendimmi ama bu servis olayı baya sakatmiş ama şüphelenmediğim şeyde değildi bu yazıyı gorunce hepten olabiliceğini anladım :)
-
Dökümana kaldırın! Eyv hocam eline sağlık.
-
ben bu işleri bırakmıştım yaa naptın hoca sen :D birilerinin canını mı yakayım illa
-
Uuu süper konu :) teşekkür ederim hocam, sağolasın.