Internet’in İşleyişi DDoS Saldırıları ile Durdurulabilir mi?

Geçtiğimiz hafta  haber sitelerine oldukca dikkat çekici bir haber düştü. Haberin başlığı  “Internet tarihinin en büyük DDoS Saldırısı…” şeklindeydi. Haberlerde okuduğumuz  15 Mart 2013 tarihinde SpamHaus’a yönelik gerçekleştirilen DDoS saldırısının boyutunun 300 Gbps’e ulaştığı ve belirli bölgelerde internet kullanıcılarının yavaşlık sorunu yaşadığı yönündeydi.
Saldırı ile ilgili internet kaynaklarının tamamına yakını olayın magazin yönüyle ilgilendiği için teknik detayını merak eden arkadaşlara yönelik BGA olarak hızlıca saldırının teknik detaylarını içeren bir blog girdisi hazırladık.
Yazıda anlatılan yöntem ve DNS, DNS’e yönelik DDOS saldırıları, DNS’in kullanıldığı DDoS saldırıları hakkında detay bilgi almak isteyenler BGA tarafından geçtiğimiz yıl yayınlanan DNS Servisine Yönelik DDoS Saldırıları konulu belgeyi okuyabilir.


Saldırının detayları  aşağıdaki linklerden okunabilir.

  • http://blog.cloudflare.com/the-ddos-that-almost-broke-the-internet adresinden okunabilir.
  • http://www.turk.internet.com/portal/yazigoster.php?yaziid=41654

DNS’in Önemi ve IP Spoofing


Internet
dünyasının çalışmasını sağlayan ana protokoller incelediğinde güvenlik
açısından en önemli protokollerden birinin DNS olduğu ortaya
çıkmaktadır. Basitçe DNS, günümüz e-posta iletişiminin ve internet
altyapısının sağlıklı çalışmasında kritik rol oynamaktadır.

DNS’in
UDP üzerine kurulmuş olması ve UDP üzerinden gerçekleştirilen
iletişimde kaynak IP adresinin gerçek olup olmadığını anlamanın kesin
bir yolunun olmaması saldırganın kendini gizleyerek saldırı
gerçekleştirmesini kolaylaştırmakta ve engellemeyi zorlaştırmaktadır.

DNS Protokolünde IP Sahteciliği ( IP Spoofing)


DNS,
UDP tabanlı bir protokol olduğu için hem DNS istekleri hem de DNS
cevaplarında kullanılan ip adresleri istenildiği gibi belirlenebilir. IP
spoofing yapılabiliyor olması demek hem DNS isteklerinin hem de
cevaplarının sahte olabileceği anlamına gelmektedir. 

Sahte DNS isteği
üretmeyi engelleyecek herhangi bir yöntem bulunmamaktadır (URPF [2]
hariç) UDP
katmanında IP spoofing için bir önlem olmaması nedeniyle DNS ip
sahteciliğini önlemek için uygulama seviyesinde iki temel önlem
almıştır. 

Bu önlemlerden ilki DNS TXID başlık bilgisinin random olması
diğeri de kaynak port numarasının random olarak belirlenmesidir.


Amplified DNS DoS Saldırıları


Bu
saldırı tipinde gönderilen DNS isteğine dönecek cevabın kat kat fazla
olması özelliğini kullanır. Sisteme gönderilecek 50 byte’lık bir DNS
isteğine 500 Byte~cevap döndüğü düşünülürse saldırgan elindeki bant
genişliğinin 10 katı(Bazı durumlarda 50-100 kat) kadar saldırı trafiği oluşturabilir.

NOT: RFC’e
göre DNS(UDP) paketleri 512 bytedan büyük olamaz. 512 bytedan büyük DNS
paketlerinde UDP’den TCP’e geçiş yapılır ya da sistem destekliyorsa
EDNS0(RFC 2671) özelliği kullanılır.
Günümüzde
çok az sayıda da olsa bazı ağ/güvenlik cihazları 512 bytedan büyük
DNS(UDP) paketlerini engellemektedir.(Cisco PIX cihazlarda 512 bytedan
büyük udp paketlerinin engellenmesi öntanımlı olarak gelir),

 

 

Adım Adım DNS Amplification DoS Saldırısı

1.Adım:
Saldırgan rekursif sorguya açık DNS sunucu bulur ve daha önce
hazırladığı özel alan adını sorgulatır (Spamhaus/Cloudflare saldırısında rip.net ANY dns sorgusu kullanılmıştır). Bu isteğin boyutu ortalama 50 Byte tutmaktadır.

2.Adım: Ara DNS sunucu kendi ön belleğinde olmayan bu isteği gidip ana DNS sunucuya sorar (50 Byte)

3.Adım: Ana DNS sunucu test.bga.com.tr için gerekli cevabı döner (Saldırıda 2.500 Byte )

4.
Adım:
Ara DNS sunucu cevabı  ön belleğine alarak bir kopyasını
Saldırgana döner. Burada amaç ARA DNS sunucunun dönen 2.500 Byte’lık
cevabı ön belleğe almasını sağlamaktır.

5.Adım:
Test kullanıcısı (saldırganın kontrolünde) test.bga.com.tr alan adını
sorgular ve cevabın cachede olup olmadığını anlamaya çalışır.

6.Adım: Ara DNS sunucu ön belleğinden 2.500 Byte cevap döner

7.Adım: Saldırgan
Kurban’ın IP adresinden geliyormuş gibi sahte DNS paketleri gönderir.
DNS paketleri test.bga.com.tr’i sorgulamaktadır (ortalama 100.000 dns
q/s). Bu üretilen paketlerin Saldırgana maliyeti 100.000 X50 Byte olmaktadır.

8.Adım:
Ara DNS sunucu gelen her paket için 2.500 Byte’lık cevabı Kurban
sistemlere dönmeye çalışacaktır. Böylece Ara DNS sunucu 100.000X2.500 Byte
trafik üreterek saldırganın kendi trafiğinin 50 katı kadar çoğaltarak
Kurban’a saldırıyor gözükecektir.
Gerçekleştirilen Saldırının Simulasyonu
SpamHaus’a
(Dolayısıyla onu koruyan Cloudflare firmasına) gerçekleştirilen
saldırıda ripe.net ANY dns isteğinin kullanıldığı belirtiliyor.

Genele açık DNS sunucular ripe.net için gönderilecek ANY tipinde 50 Byte’lık bir DNS isteğine karşılık 2500 Byte’lık bir cevap dönmektedir.  

Yaklaşık
pratik olarak 50 kat daha fazla trafik üretebilmektedir. Kabaca elinde
10 Gbps’lik Botnet ağı  olan bir saldırgan bu yöntemi kullanarak 500
Gbps DDoS (DNS) trafiği oluşturabilir.

huzeyfe@bt:~$ dig ANY ripe.net  +edns=0 +bufsize=4096
;; Truncated, retrying in TCP mode.
;; Connection to 127.0.0.1#53(127.0.0.1) for ripe.net failed: connection refused.
; <<>> DiG 9.7.0-P1 <<>> ANY ripe.net +edns=0 +bufsize=4096
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 53646
;; flags: qr rd ra; QUERY: 1, ANSWER: 23, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;ripe.net.                      IN      ANY
;; ANSWER SECTION:
ripe.net.               3519    IN      SOA     pri.authdns.ripe.net. dns.ripe.net. 1364490904 3600 600 864000 3600
ripe.net.               21519   IN      A       193.0.6.139
ripe.net.               219     IN      AAAA    2001:67c:2e8:22::c100:68b
ripe.net.               3519    IN      NS      tinnie.arin.net.
ripe.net.               3519    IN      NS      sec1.apnic.net.
ripe.net.               3519    IN      NS      sec3.apnic.net.
ripe.net.               3519    IN      NS      ns3.nic.fr.
ripe.net.               3519    IN      NS      pri.authdns.ripe.net.
ripe.net.               3519    IN      NS      sns-pb.isc.org.
ripe.net.               219     IN      MX      200 postgirl.ripe.net.
ripe.net.               219     IN      MX      250 postlady.ripe.net.
ripe.net.               3519    IN      NSEC    256cns.ripe.net. A NS SOA MX AAAA RRSIG NSEC DNSKEY
ripe.net.               3519    IN      DNSKEY  257 3 5 …
SRzeytZjuXEK9LotoJDJJMYsLM9hNbcIuj/2bDbab2gxD1qtvM3JXcHo
7Hc2LlKgg2WngpdKn39ieuykY7yQF+M/CCxarYp6iZSKBAUjoNF8XQf2
KNNSXfgpeGZELFk3VO5w+Og32QHDJFAQxzjs/HqRJ5cUIhqGOLEmm2MD
kIr1gWja/8t12Zzk9aOODHYZHa+KypnBjtOwubYrtdywWa62zISkj2YJ 6E/ItQ==

;; Query time: 69 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Sun Mar 31 18:52:57 2013

;; MSG SIZE  rcvd: 2509

Basitce aşağıdaki scapy satırı tek bir ip adresinden yapılacak DNS amplification denemesini gösterecektir.

>>> sr1(IP(src=”KURBAN_IP_ADRESİ”,dst=”8.8.8.8″)/UDP(sport=RandShort())/DNS(rd=1,qd=DNSQR(qname=”ripe.net”,qtype=”ANY”)))

Genele Açık DNS Sunucular ve Barındırdığı Riskler

Genele
 açık DNS sunucular(public dns) kendisine gelen tüm istekleri
cevaplamaya çalışan türde bir dns sunucu tipidir. Bu tip dns sunucular
eğer gerçekten amacı genele hizmet vermek değilse genellikle
eksik/yanlış yapılandırmanın sonucu ortaya çıkar.
Bir
sunucunun genele açık hizmet(recursive DNS çözücü) verip vermediğini
anlamanın en kolay yolu o DNS sunucusu üzerinden google.com, yahoo.com
gibi o DNS sunucuda tutulmayan alan adlarını sorgulamaktır.

Eğer hedef DNS sunucu genele açık bir DNS sunucu olarak yapılandırıldıysa aşağıdakine benzer çıktı verecektir.
~# dig www.google.com @91.93.119.70
; <<>> DiG 9.5.0-P2.1 <<>> www.google.com @91.93.119.70
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 26294
;; flags: qr rd ra; QUERY: 1, ANSWER: 7, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;www.google.com. IN A
;; ANSWER SECTION:
www.google.com. 44481 IN CNAME www.l.google.com.
www.l.google.com. 118 IN A 66.102.13.147
www.l.google.com. 118 IN A 66.102.13.99
www.l.google.com. 118 IN A 66.102.13.105
www.l.google.com. 118 IN A 66.102.13.103
www.l.google.com. 118 IN A 66.102.13.104
www.l.google.com. 118 IN A 66.102.13.106
;; Query time: 16 msec
;; SERVER: 91.93.119.70#53(91.93.119.70)
;; WHEN: Sat Jul 24 13:23:59 2010
;; MSG SIZE rcvd: 148
Eğer DNS sunucu genele açık hizmet verecek şekilde yapılandırılmadıysa aşağıdakine benzer çıktı verecektir.
[root@seclabs ~]# dig @ns1.gezginler.net www.google.com
; <<>> DiG 9.6.1-P1 <<>> @ns1.gezginler.net www.google.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 33451
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 13, ADDITIONAL: 0
;; WARNING: recursion requested but not available
;; QUESTION SECTION:
;www.google.com. IN A
;; AUTHORITY SECTION:
. 518400 IN NS H.ROOT-SERVERS.NET.
. 518400 IN NS I.ROOT-SERVERS.NET.
. 518400 IN NS J.ROOT-SERVERS.NET.
. 518400 IN NS K.ROOT-SERVERS.NET.
. 518400 IN NS L.ROOT-SERVERS.NET.
. 518400 IN NS M.ROOT-SERVERS.NET.
. 518400 IN NS A.ROOT-SERVERS.NET.
. 518400 IN NS B.ROOT-SERVERS.NET.
. 518400 IN NS C.ROOT-SERVERS.NET.
. 518400 IN NS D.ROOT-SERVERS.NET.
. 518400 IN NS E.ROOT-SERVERS.NET.
. 518400 IN NS F.ROOT-SERVERS.NET.
. 518400 IN NS G.ROOT-SERVERS.NET.
;; Query time: 140 msec
;; SERVER: 208.43.98.30#53(208.43.98.30)
;; WHEN: Sat Aug 7 16:18:15 2010
;; MSG SIZE rcvd: 243
Bir IP aralığındaki tüm public DNS sunucuları bulmak için Nmap (Nmap Scripting Engine) kullanılabilir.
root@seclabs:~# nmap -PN -n -sU -p 53 –script=dns-recursion.nse 91.93.119.65/28
Starting Nmap 5.00 ( http://nmap.org ) at 2010-07-24 13:19 EDT
Interesting ports on 91.93.119.64:
PORT STATE SERVICE
53/udp open|filtered domain
Interesting ports on 91.93.119.65:
PORT STATE SERVICE
53/udp open|filtered domain
Interesting ports on 91.93.119.66:
PORT STATE SERVICE
53/udp open|filtered domain
Interesting ports on 91.93.119.67:
PORT STATE SERVICE
53/udp open|filtered domain
|_ dns-recursion: Recursion appears to be enabled
Interesting ports on 91.93.119.68:
PORT STATE SERVICE
53/udp open|filtered domain
Interesting ports on 91.93.119.69:
PORT STATE SERVICE
53/udp open|filtered domain
|_ dns-recursion: Recursion appears to be enabled
Interesting ports on 91.93.119.70:
PORT STATE SERVICE
….
53/udp open|filtered domain
|_ dns-recursion: Recursion appears to be enabled
Interesting ports on 91.93.119.77:
PORT STATE SERVICE
53/udp open|filtered domain
Interesting ports on 91.93.119.78:
PORT STATE SERVICE
53/udp open|filtered domain
|_ dns-recursion: Recursion appears to be enabled
Interesting ports on 91.93.119.79:
PORT STATE SERVICE
53/udp open|filtered domain
Nmap done: 16 IP addresses (16 hosts up) scanned in 34.65 seconds

Public DNS sunucular neden güvenlik açısından risklidir?


Public
dns sunucuların özellikle DNS flood saldırılarına karşı
sıkıntılıdırlar. Saldırgan public dns sunucuları kullanarak
amplification dns flood saldırılarında size ait dns sunuculardan ciddi
oranlarda trafik oluşturarak istediği bir sistemi zor durumda
bırakabilir.

DNS sunucu olarak ISC BIND kullanıyorsanız aşağıdaki tanımla recursive dns sorgularına yanıt vermeyi engelleyebilirsiniz.

options { allow-recursion { 127.0.0.1; };
Open Resolver Project grubunun çalışmasına göre dünya üzerinde ~22 milyon recursive DNS sunucu bulunmakta. Bu durum internet’in(ISP’lerin) DDoS saldırıları konusunda alması gerektiği yolun henüz başında olduğunu göstermeye yetecek bir kanıttır.