Sıfırdan Backdoor Trojan Yapımı #1

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
Katılım
27 Ağu 2019
Konular
290
Mesajlar
4,890
Çözümler
491
Tepkime puanı
10,809
RC Point
0
caldim.png

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.


4dKDtQ.png

İç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


4dKDtQ.png

İ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.


4dKDtQ.png

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.

1608280692468.png

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.

4dKDtQ.png

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.

4dKDtQ.png

1608280862027.png

4dKDtQ.png

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.

4dKDtQ.png

1608281008892.png

4dKDtQ.png

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.

4dKDtQ.png

1608281169355.png

4dKDtQ.png

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.

4dKDtQ.png

1608281262967.png

4dKDtQ.png

Ş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.

4dKDtQ.png

1608281357605.png

4dKDtQ.png

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.

4dKDtQ.png

1608281498256.png

4dKDtQ.png

Ş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.

4dKDtQ.png

1608281619073.png

4dKDtQ.png

Ş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.

4dKDtQ.png

1608281793987.png

4dKDtQ.png

Ş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 :D
Aynı zamanda birkaç ufak yazım hatası yapmışım, çalışan kodun son hali şöyle:

4dKDtQ.png

1608281941462.png

4dKDtQ.png

Çalışmış hali:

4dKDtQ.png

1608282650495.png

4dKDtQ.png

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.

4dKDtQ.png

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.

4dKDtQ.png

1608282831763.png

4dKDtQ.png

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.

4dKDtQ.png

1608282923158.png

4dKDtQ.png

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

4dKDtQ.png

1608283004798.png

4dKDtQ.png

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

4dKDtQ.png

1608283246170.png

4dKDtQ.png

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

4dKDtQ.png

1608283352269.png

4dKDtQ.png

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

4dKDtQ.png

1608283413452.png

4dKDtQ.png

(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.

4dKDtQ.png

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.

4dKDtQ.png

1608283726606.png

4dKDtQ.png

Çalıştıralım:

4dKDtQ.png

1608284113055.png

4dKDtQ.png

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.

4dKDtQ.png

1608283878452.png

4dKDtQ.png

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.

4dKDtQ.png

1608283963147.png

4dKDtQ.png

Çalıştıralım:

4dKDtQ.png

1608284069096.png

4dKDtQ.png

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.

4dKDtQ.png

1608284263667.png

4dKDtQ.png

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.

4dKDtQ.png

1608284312415.png

4dKDtQ.png

Pekala, şimdi denemeye hazır.

4dKDtQ.png

1608284371841.png

4dKDtQ.png

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.

4dKDtQ.png

1608284470991.png

4dKDtQ.png

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

4dKDtQ.png

1608284608892.png

4dKDtQ.png

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

4dKDtQ.png

1608284637804.png

4dKDtQ.png

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.

4dKDtQ.png

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.

4dKDtQ.png

1608284719054.png

4dKDtQ.png

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

4dKDtQ.png

1608284758230.png

4dKDtQ.png

Ş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.

4dKDtQ.png

1608284787573.png

4dKDtQ.png

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

4dKDtQ.png

1608284827750.png

4dKDtQ.png

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.

4dKDtQ.png

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.​
 

Ekli dosyalar

  • 1608282581630.png
    1608282581630.png
    99.9 KB · Görüntüleme: 8
  • 1608282641995.png
    1608282641995.png
    98 KB · Görüntüleme: 8
  • 1608283079883.png
    1608283079883.png
    113.4 KB · Görüntüleme: 9
  • 1608283318784.png
    1608283318784.png
    126.9 KB · Görüntüleme: 10
  • 1608283809165.png
    1608283809165.png
    75 KB · Görüntüleme: 8
  • 1608284543037.png
    1608284543037.png
    139.3 KB · Görüntüleme: 7

Rico

Hayatımı sadece ben değiştirebilirim
Ultra Member
Katılım
4 Eyl 2019
Konular
86
Mesajlar
885
Çözümler
49
Tepkime puanı
1,822
Konum
Moskova
RC Point
0
çok emek var yararlı ++
 
Üst