DNS Amplification DoS Saldırısı

BGA Security Wiki sitesinden
Şuraya atla: kullan, ara

Amaç:

Recursive(özyinelemeli) sorgulara açık sistemler kullanılarak hedef sistemlere yönelik DoS saldırısı gerçekleştirmek.

Lab Senaryosu:

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 ~500Byte cevap döndüğü düşünülürse saldırgan elindeki bant genişliğinin 10 katı kadar saldırı trafiği oluşturabilir.

Amplifi.png


Adımlar:

1. Saldırgan Recursive sorguya açık DNS sunucuyu bulur ve daha önce hazırladığı özel alan adını sorgulatır (Gerçek hayatta özel bir alan adı değil “.” sorgulanır.). Bu isteğin boyutu 50 Byte tutmaktadır.

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

3. Ana DNS sunucu test.bga.com.tr için gerekli cevabı döner. (500~byte)

4. Ara DNS sunucu cevabı ön belleğine alarak bir kopyasını saldırgana döner. Burada amaç ara DNS sunucunun dönen 500 Byte’lık cevabı ön belleğe almasını sağlamaktır.

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

6. Ara DNS sunucu ön belleğinden 500 byte cevap döner.

7. Saldırgan kurban’ın IP adresinden geliyormuş gibi sahte DNS paketler 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 X53 Byte

8. Ara DNS sunucu gelen her paket için 500 Byte’lık cevabı kurban sistemlere dönmeye çalışacaktır. Böylece Ara DNS sunucu 100.000X500 Byte trafik üreterek saldırganın kendi trafiğinin 10 katı kadar çoğaltarak kurbana saldırıyor gözükecektir.

$ dig . @ns1.tr.net
; <<>> DiG 9.7.0-P1 <<>> . @ns1.tr.net
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 27323
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 13, ADDITIONAL: 14
;; WARNING: recursion requested but not available
;; QUESTION SECTION:
;. IN A
;; AUTHORITY SECTION:
. 512544 IN NS k.root-servers.net.
. 512544 IN NS l.root-servers.net.
. 512544 IN NS m.root-servers.net.
. 512544 IN NS a.root-servers.net.
. 512544 IN NS b.root-servers.net.
. 512544 IN NS c.root-servers.net.
. 512544 IN NS d.root-servers.net.
. 512544 IN NS e.root-servers.net.
. 512544 IN NS f.root-servers.net.
. 512544 IN NS g.root-servers.net.
. 512544 IN NS h.root-servers.net.
. 512544 IN NS i.root-servers.net.
. 512544 IN NS j.root-servers.net.
;; ADDITIONAL SECTION: 
a.root-servers.net. 598944 IN A 198.41.0.4
a.root-servers.net. 598944 IN AAAA 2001:503:ba3e::2:30
b.root-servers.net. 598944 IN A 192.228.79.201
c.root-servers.net. 598944 IN A 192.33.4.12
d.root-servers.net. 598944 IN A 128.8.10.90
d.root-servers.net. 598944 IN AAAA 2001:500:2d::d
e.root-servers.net. 598944 IN A 192.203.230.10
f.root-servers.net. 598944 IN A 192.5.5.241
f.root-servers.net. 598944 IN AAAA 2001:500:2f::f
g.root-servers.net. 598944 IN A 192.112.36.4
h.root-servers.net. 598944 IN A 128.63.2.53
h.root-servers.net. 598944 IN AAAA 2001:500:1::803f:235
i.root-servers.net. 598944 IN A 192.36.148.17
i.root-servers.net. 598944 IN AAAA 2001:7fe::53
;; Query time: 14 msec
;; SERVER: 195.155.1.3#53(195.155.1.3)
;; WHEN: Mon Jan 23 13:52:52 2012
;; MSG SIZE rcvd: 512

Örnek DNS Amplification DoS Saldırısı

  • DoS yapılacak Hedef Sistem: kurban.example.com (V)
  • Aracı olarak kullanılacak DNS sunucu: dns-sunucu.example.com (A)
  • Saldırgan ( C )
./amfdns –a dns-sunucu.example.com –t A –q . –target kurban.example.com

DNS Flood DDoS Saldırılarını Yakalama

http://www.adotout.com/dnsflood.html” yazılımını kullanılabilir.

root@bt:~/dns_flood_detector# dns_flood_detector -i eth0 -t 100 -v -b
[22:16:17] source [85.95.238.172] - 0 qps tcp : 419 qps udp
[22:16:27] source [85.95.238.172] - 0 qps tcp : 139 qps udp

DNS Flood DDoS Saldırılarını Engelleme

DNS Flood saldırılarını engellemek için kullanılan temel yöntemler:

  • DNS Caching
  • DNS Anycast
  • Rate Limiting
  • DFAS

Rate Limiting Yöntemi

Rate limiting yöntemi ile belirli IP adreslerinden yapılacak UDP/DNS Flood saldırılarında kaynak IP adresi engellemesi amaçlanır. Ancak UDP tabanlı protokollerde kaynak IP adresinin gerçek olup olmadığını anlamak çok zor olduğu için genellikle bu yöntem işe yaramaz bir yöntemdir. Bu yöntemi kullanan bir hedefe doğru saldırgan, istediği IP adresinden geliyormuş gibi paketler göndererek istediği IP adresinin engellenmesini sağlayabilir (Türkiye IP bloklarından paket göndermek gibi).

DFAS

TCP üzerinden gerçekleştirilecek olan DDoS saldırılarını engellemek göreceli olarak daha kolaydır diyebiliriz. Bunun temel nedeni TCP üzerinden yapılacak saldırılarda saldırganın gerçek IP adresiyle mi yoksa sahte IP adresiyle mi saldırıp saldırmadığının anlaşabiliyor olmasıdır (basit mantık 3′lü el sıkışmayı tamamlıyorsa IP gerçektir). UDP üzerinden gerçekleştirilecek DDoS saldırılarını (UDP Flood, DNS Flood vs) engellemek, saldırıyı gerçekleştiren IP adreslerinin gerçek olup olmadığını anlamanın kesin bir yolu olmadığı için zordur. UDP kullanarak gerçekleştirilen saldırılarda genellikle davranışsal engelleme yöntemleri ve ilk paketi engelle ikinci paketi kabul et (DFAS) gibi bir yöntem kullanılır.

DFAS Yönteminin Temeli

TCP ya da UDP üzerinden gerçekleştirilecek olan DDoS saldırısı için DFAS yönteminin temeli şu adımlardan oluşur:

  • İlk gelen paket için cevap verme.
  • Aynı paket tekrar gelirse pakete uygun cevap ver ve ilgili IP adresine ait oturumu tutmaya başla ya da ilk pakete hatalı cevap dön (sıra numarası yanlış SYN-ACK) ve karşı taraftan RST paketi gelmesini bekle.
  • Ardından istemcinin gönderdiği TCP isteğine DDoS engelleme sistemi tarafından hatalı bir cevap dönülerek karşı taraftan RST paketi beklenir ve RST paketi alındıktan sonra IP adresinin gerçek olduğu belirlenerek paketlere izin verilir.
[root@netdos1 ~]# tcpdump -i em0 -tn host 5.6.7.8
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on em0, link-type EN10MB (Ethernet), capture size 96 bytes
IP 1.2.3.4.19399 > 5.6.7.8.53: 8818+ A? www.example.com (37)
IP 5.6.7.8.53 > 1.2.3.4.19399: 8818*| 0/0/0 (37)
IP 1.2.3.4.34096 > 5.6.7.8.53: Flags [S], seq 3183103590, win 65535, options [mss 1460,nop,wscale 3,sackOK,TS val 4045396826 ecr 0],length 0
IP 5.6.7.8.53 > 1.2.3.4.34096: Flags [S.], seq 4110155774, ack 3060256364, win 65535, options [mss 1460,nop,wscale 3,sackOK,TS val4045396826 ecr 0], length 0
IP 1.2.3.4.34096 > 5.6.7.8.53: Flags [R], seq 3060256364, win 0, length 0
IP 1.2.3.4.34096 > 5.6.7.8.53: Flags [S], seq 3183103590, win 65535, options [mss 1460,nop,wscale 3,sackOK,TS val 4045399827 ecr 0],length 0
IP 5.6.7.8.53 > 1.2.3.4.34096: Flags [R.], seq 184811522, ack 122847228, win 0, length 0

DFAS yöntemi gelen giden tüm paketler için değil saldırı anında ilk paketler için gerçekleştirilir.

Saldırı Anında Sistemin DNS İsteklerine Döndüğü Cevap:

  • IP 1.2.3.4.51798 > 5.6.7.8.53: 53698+ A? www.example.com. (37)
  • IP 5.6.7.8.53 > 1.2.3.4.51798: 53698 ServFail- 0/0/0 (37)
  • IP 1.2.3.4.34623 > 5.6.7.8.53: 61218+ A? www.example.com (37)
  • IP 5.6.7.8.53 > 1.2.3.4.34623: 61218*- 1/0/0 A 1.21.2.72 (53)

Örnek:

Bir müddet aşağıdaki gibi UDP Flood (DNS portundan) gerçekleştirdikten sonra

hping --flood -p 53 --udp hedef_dns

root@bt:~# tcpdump -i eth0 -tn udp port 53 -v
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
IP (tos 0x0, ttl 64, id 5558, offset 0, flags [none], proto UDP (17), length 65) 85.95.238.172.51518 > 1.2.227.77.53: 37837+ A? www.example.com. (37)
IP (tos 0x0, ttl 119, id 5558, offset 0, flags [none], proto UDP (17), length 65) 1.2.227.77.53 > 85.95.238.172.51518: 37837*| 0/0/0 (37)
IP (tos 0x0, ttl 64, id 5559, offset 0, flags [none], proto UDP (17), length 65) 85.95.238.172.44470 > 1.2.227.77.53: 29161+ A? www.example.com. (37)
IP (tos 0x0, ttl 119, id 5559, offset 0, flags [none], proto UDP (17), length 65) 1.2.227.77.53 > 85.95.238.172.44470: 29161*| 0/0/0 (37)

Aşağıdaki gibi sorgulamalar TCP DNS'e yönlenmektedir.

root@bt:~# dig www.example.com @1.2.227.77
;; Truncated, retrying in TCP mode.
; <<>> DiG 9.7.0-P1 <<>> www.example.com @1.2.227.77
;; global options: +cmd
;; connection timed out; no servers could be reached