iwystic
Veteran
10 Rozet
Seviye 10
İlk Paylaşım
Sharer I
Sharer II
Sharer III
İlk Mesaj
İlk Beğeni
İlk Çözüm
Yardımsever
Mentor
Usta Mentor
Hızlı Yardım
Profilini Tamamla
Doğrulanmış Üye

Merhaba değerli RC üyeleri,
Bugün yeni bir seriye başlıyorum. Adından da anlaşıldığı gibi...
Sıfırdan başlayıp kademe kademe bir Backdoor Trojan oluşturacağız.
NOT: Her şeyden önce, bu seri ile sizlere hazır bir ortalama düzey trojan sunmak değil, trojanların çalışma mantığı ve trojan oluşturmak için gerekli temellerin öğretilmesi amaçlanmıştır. Ayrıca, bu seri bir çok deneme-yanılma işlemi ile oluşturulmuştur. Bazen bir işlemin sürmesi 5 dakika bile almıştır.
Aynı şekilde birinci, ikinde denemede çalışmayan kod üzerinde değişiklik yapılmadığı halde sonraki denemelerde çalışmıştır.
Sizlere önerim bu tür bir virüs oluşturacaksanız. .NET dillerini kullanmanız, Python duruma göre yetersiz veya yavaş olabiliyor.
İlk olarak, hangi dilde kodlama yapacağım hakkında çok fazla bir fikrim yoktu. Bildiğim dillerden C# bu iş için idealdi; ancak ben yine de anlatımı daha basit olsun ve zaten iyi bildiğim bir dil olduğu için Python’u seçtim. Uzun lafın kısası, sizlerle Python kullanarak gelişmiş düzeyde bir virüs oluşturacağız. Tabii bu bir öğretici yazı; yani “Tutorial” olduğu için pyqt5 gibi kütüphaneleri kullanarak karışık olan işlerimizi iyice karıştırıp arayüzü olan bir virüs yapmak yerine,
klasik métasploit’teki gibi server-reverse_shell şeklinde olan basit mantığı kullanacağız.
Pekala, konu tanımına başlayalım.
İçerik:
- Backdoor Trojanların Çalışma Mantığı
- Basitçe Server Oluşturmak
- Reverse Shell ile Server’a Bağlanmak
- Backdoor Mantığı ile Küçük Bir Mesajlaşma Uygulaması Yapmak
- Server Üzerinden Karşıdaki Makine Terminalinde Kod Çalıştırma İşlemi
İlk olarak söylemek isterim ki, bu öğretici seri için epey bir çalışma yaptım. Bir sürü Python kütüphanesini araştırdım ve saatlerce konu ile alakalı yazı okudum, video izledim. Tüm bu birikimimi sizlere olabildiğince en basit şekilde aktarmaya çalışacağım.
Lütfen takıldığınız yerler hakkında soru sormaktan çekinmeyin.
Backdoor Trojanların Çalışma Mantığı
Öncelikle, Trojan’ın ne olduğuna bir göz atalım. Trojan virüsü, başka bir dosya gibi görünüp aslında hedefin cihazına sızan bir virüs türüdür. İsmini Homeros’un ünlü eseri olan Odysseia’da Troya’ya girmek için kurnazca içine asker yerleştirilip bir hediye gibi sunulan, ardından gece olunca içinden çıkan askerlerin içten kaleyi fethetmesini sağlayan büyük, ahşap bir at olan Truva atından almıştır.
Truva Atı Virüsü: Kurbanın cihazı üzerinde tam yetki sağlama, dosyalarını, resimlerini çalma, anlık görüntü kaydetme, kayıtlı şifreleri çalma ve kredi kartı bilgilerini çalma gibi eylemleri gerçekleştirebilir.

Virüsün çalışma mantığı ise, temel olarak; önce bir server kurulur, bu servera bağlantı sağlayacak bir reverse_shell kurulur ve reverse_shell’i kurbanın çalıştırması gerekir. Başlangıçta da bahsettiğim üzere biz bu olayı 0’dan yapacağız ve mantığını daha iyi öğreneceğiz.
Basitçe Server Oluşturmak
Bir server oluşturmak için önce bir yeni python dosyası oluşturalım. Ben server.py adını veriyorum.
Server oluşturmak için öncelikle, programımıza socket kütüphanesini dahil etmeliyiz. Bunun için de, kodumuza aşağıdaki kısım ile başlıyoruz.
Dostlar, ben server panelimizin daha güzel görünmesi için ayrıyeten, colorama kütüphanesini de kodumuza ekliyorum.
Bunu sizin yapmanıza gerek yok.

Ardından, TCP üzerinden bağlantımızı almak için birkaç işlem yapacağız. Burada bazı uzun kodları yazmamak için onları bir değişkene atıyorum.
Ben “soket” isimli değişkeni kullandım. Sonrasında, bağlantı için gerekli olan kodları yazdım. TCP uygulamaları vb. durumlar için, Python’daki bu kod dizini neredeyse tüm kodlama dillerinde benzer veya aynıdır.

Ardından, virüsü kendi yerel ağımda çalıştıracağım için, gerekli socket ve port ayarlarını yapıyorum.
Bu ayarları ve daha fazlasını detaylıca web üzerinde bulabilirsiniz.

Şimdi, hangi IP adresi ve hangi port üzerinden kurbanı dinleyeceksek, o kısımları belirtmemiz lazım. Aşağıda bunu nasıl yaptığımı görebilirsiniz.
Ben, kendi local ağımın IP numarasını ve dinlemek istediğim 7171 portunu giriyorum.
Burada önemli olan şey, zaten kullanımda olan bir portu dinlemeye almaya çalışmamak.

Ardından, kaç tane bağlantıyı dinleyeceğimizi seçiyoruz. İster 10 tane bağlantı kurun, ister 1 tane.
Ben şu anlık 1 tane kuruyorum ki, temelleri anlayalım.

Şimdi, bağlantıyı tam olarak kabul etmek için kurbanı tanımlamak ve bağlantı isteğine açık olmamız lazım.
Ben üstüne bir de hangi IP adresinden bağlantı geldiğini öğrenmek için, aynı zamanda IP değişkeni de tanımlıyorum.

Şu anlık temel seviyede server’ımız kuruldu. Şimdi birkaç ufak dokunuşlar yapalım. Server’a herhangi bir bağlantı sağlandığında bize uyarı versin.
Ardından, server’ı kapatalım. Aynı şekilde server’a birisinin bağlanmasını beklerken de bir mesaj görünsün ekranda ki neyin ne olduğunu bilelim.
Şimdi soracaksınız; “Neden server’ı kapatıyoruz?” Güzel soru, çünkü, şu an daha yapabileceğimiz bir şeyler eklemedik. Boşu boşuna açık durmasına gerek yok. Zaten ilerleyen zamanlarda kapatmayacağız.

Şimdi ise server’ı çalıştıralım. Çalışıyor mu diye kontrol edelim. Öncesinde chmod +x server.py komutu ile daha rahat şekilde çalıştırabilir hale getirelim.
İlk denememde çalışmadı.
#! /usr/bin/env python
# -*- coding: UTF-8 -*-
Satırlarını eklemeyi unutmuşum da
Aynı zamanda birkaç ufak yazım hatası yapmışım, çalışan kodun son hali şöyle:

Çalışmış hali:

Evet, gördüğünüz üzere server’ımız çalışıyor. Şimdi ise, sırada bağlantı sağlamak için bir reverse shell’e ihtiyacımız var.
Reverse Shell ile Server’a Bağlanmak
Bu kısımda ise bağlantıyı kurmamızı sağlayacak reverse shell’imizi, yani asıl virüs kısmını oluşturacağız. İlk olarak bunun için bir dosya oluşturarak başlıyoruz.
Aynı şekilde başlangıçta socket kütüphanesini import ediyoruz; ancak normal bir durumda colorama kütüphanesini eklemememiz gerek;
lakin benim virüsü deneyeceğim bilgisayarda colorama kütüphanesi yüklü, bu sebepten bir sıkıntı çıkmaz.

Ardından, önceki bölümde TCP bağlantısını sağlamak için kullandığımız satırı yeniden yazıyoruz, kopyala yapıştır yapıyoruz.

Sonrasında, bu reverse shell’in hangi IP adresine hangi port üzerinden bağlantı kuracağını ayarlıyoruz.

Ardından işlemi bitiriyoruz. Bahsettiğim gibi, ileride çok fazla bağlantıyı kesmemeye çalışacağız.

Önce Server’ı, sonra da trojan’ı çalıştırıyoruz.

(trojan.py çalıştırılmadı.)

(trojan.py çalıştırıldı)
Gördüğünüz gibi bağlantımız sağlandı. Pekâlâ, şimdilik virüs mantığı ile çalışan, ama virüsten uzak bir gizli mesajlaşma uygulaması yapalım.
Backdoor Mantığı ile Küçük Bir Mesajlaşma Uygulaması Yapmak
Öncelikle, bu programın kodlarını GitHub’da verip vermemek konusunda kararsızım; fakat barizdir ki önemli veya gizli konular konuşulacağı zaman bu program sayesinde birisi ile konuşabilirsiniz. Tek kötü tarafı, biraz aşırı ilkel ve arayüzü olmayan bir mesajlaşma uygulaması olur.
Ek olarak, eğer local ağ üzerinden değil de dış ağdan birisi ile iletişime geçiyorsanız, üstüne bir de statik IP parası eklenir.
İlk olarak, bu mesajlaşmadaki veri alış-verişini gerçekleştirmemiz lazım. Socket kütüphanesinin bu olayı gerçekleştirmemizi sağlayan modülleri var, bunlar sayesinde programı bir bilgi alışverişi sağlayan duruma getireceğiz.
İlk olarak, isterseniz kurbanın bilgilerini kendi server’ımızda yazdıralım; ardından da, raw_input ile yazacağımız mesajı girelim.

Çalıştıralım:

Gördüğünüz gibi, çalıştı ve kurbanın hangi IP adresinden geldiğini yazdı; Ancak, girdiğimiz mesajı diğer terminalde görmedik.
Bunun için socket’i kullanacağız. Send.mesaj() ile yazdığımız mesajı kurbana gönderebiliriz.

Mesajı gönderebiliyoruz; ancak karşı tarafta bu mesajı karşılamak için bir komut yok.
O yüzden şimdi trojan.py’ye bu gönderdiğimiz mesajı alması için gerekli kodları ekliyoruz.
Receive modülünün sonuna kaç byte olarak gelecekse veri, onu giriyoruz ve mesajı yazdırıyoruz.

Çalıştıralım:

Evet, mesajımız iletildi ve yazdırıldı. Şu anlık tek taraflı olarak mesaj gönderebiliyoruz; ancak bunu karşılıklı yapmamız gerek. Bu yüzden de ilk olarak server üzerinden karşı tarafın gönderdiği mesajı almak için gerekli kodları giriyoruz.
Buradaki receive kodları, trojan.py dosyası üzerindekiler ile aynı. Sonuna da soket.close() ile kapatalım.

Yalnız bir sorunumuz var; Trojan’ınımız bize mesaj gönderemiyor. Şimdi ise trojan üzerinden mesaj göndermek için gerekli olan kodları halledelim.

Pekala, şimdi denemeye hazır.

Görüldüğü üzere, tek seferlik de olsa bir mesaj alışverişi yaptık. Şimdi bunu asıl kullanışlı hale döngüler ve şart blokları ile getireceğiz.
İlk olarak, While döngüsünü kullanıyorum ki tek seferde mesajlaşmamız bitmesin. Gerekli yerleri while döngüsüne alıyoruz.

Ardından, döngümüz sonsuzluğa uzamasın diye çıkış blokları ekliyoruz. Bunun için de If-Else bloklarını kullanıyoruz.

Evet, şimdi daha güzel bir görüntüye sahip olacağımızı umuyorum. Hadi şimdi bakalım uygulamaya.

Evet, gayet göründüğü üzere şimdilik gayet güzel çalışıyor. İlerleyen zamanlarda kullanım basitliği olsun diye port ve IP adresini input olarak almaya başlayacağız, o zaman belki bunu yeniden gözden geçiririz.
Neyse, hadi bu bölümün son alt başlığına geçelim.
Server Üzerinden Karşıdaki Makine Terminalinde Kod Çalıştırma İşlemi
Backdoor mantığını anladık ve kullandık ama “virüs” olabilmesi için karşı tarafa böyle mesaj göndermek yetmez. Daha ne yapmamız lazım?
Tabii ki de en basit şekliyle komut satırı üzerinden karşı cihazda kodları çalıştırabilmemiz lazım. Bu bölümde bunları yapacağız. Haydi başlayalım o zaman.
İlk olarak, bir virüs olarak kullanılabilmesi için programımızda şu ana kadar geliştirdiğimiz mesajlaşma uygulamasındaki bazı kısımları siliyoruz. Aynı şekilde değişkenlerimizi mesaj yerine kod olarak adlandırıyoruz.

Aynı şekilde aynı işlemleri server.py dosyasına da uyguluyoruz.

Şu anlık trojan.py dosyamız, virüs olarak çalışılmak üzere hazır. Şimdi ise server üzerinden aldığı kodları bulunduğu cihazın shell’inde çalıştırması ve çalıştırılan koda gelen cevabı bize göndermesi için gerekli olan kodları giriyoruz. Öncelikle subprocess kütüphanesini import etmemiz lazım tabi. Küçük bir araştırma ile web üzerinden neyin ne işe yaradığını okuyabilirsiniz, ben çok uzatmak istemiyorum.

Yazılımlarımız hazır, şimdi deneme yapalım.

Gördüğünüz gibi, bizim server’dan girdiğimiz komut trojan.py üzerinde çalışıyor ve detayları server üzerinde görebiliyoruz. Ayrıca bilerek yazdığımız kodu trojan’ın üzerinde yazdırdım ki daha anlaşılır dursun. Bundan sonra asıl eğlence başlayacak diyebilirim.
Ancak, şu an çok basit anlamda bir virüsümüz olsa bile bir sürü hata ve sıkıntı ile karşılaşmamız çok olası. Bu yüzden ileriki derslerde önce bug’ları düzelteceğiz, ardından ise yeni yeni özellikler ekleyeceğiz. Kullanıcı’nın cihazında ayrıcalıklarımızı arttıracağız, ekran resmini alacağız ve belgelerine ulaşacağız. Yani uzun lafın kısası bir sonraki bölümlerde asıl karmaşık olan yerleri halletmeye çalışacağız. Eğer bir aksilik çıkmazsa 2 gün içinde diğer bölümü de yayınlamayı düşünüyorum.
Takıldığınız yerlerde bana sormayı unutmayın.
Beklemede kalın, kendinize dikkat edin.