DDoS Engellemede DFAS Yöntemi

Her saldırı tipi için kabul görmüş standart yöntemler vardır. Mesela SYN Flood saldırılarına karşı genellikle SYN cookie veya Syn proxy yöntemi tercih edilir. HTTP GET Flood saldırılarına karşı rate limiting, http user-agent kontrolü vs kullanılır.

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 adresle mi yoksa sahte adresle 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ı 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 ilk gelen paket için cevap verme aynı paket tekrar gelirse pakete uygun cevap ver ve ilgili ip adresine ait oturumu

tutmaya başla veya ilk pakete hatalı cevap dön(sıra numarası yanlış SYN-ACK) ve karşı taraftan RST gelmesini bekle.

DFAS yöntemi gelen giden tüm paketler için değil saldırı anında ilk paketler için gerçekleştirilir.
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)
DNS ve TCP İlişkisi

DNS paketleri 512 byte’ı geçmediği müddetçe UDP üzerinden taşınabilir. 512 byte’ı aşan DNS cevapları UDP üzerinden taşınamayacağı için TCP kullanılır.

Cevabın 512 Byte’dan fazla olduğu ve TCPüzerinden taşınması gerektiğini istemci DNS paketine ait başlık bilgisine bakarak anlamaktadır.

Aşağıdaki gibi DNS paketinde Truncated=1 olması durumunda dns isteğinde bulunan aynı isteği TCP/53 üzerinden yapmayı deneyecektir.
Domain Name System (response)
[Request In: 1]
[Time: 0.152073000 seconds]
Transaction ID: 0x28b3
Flags: 0x8380 (Standard query response, No error)
1… …. …. …. = Response: Message is a response
.000 0… …. …. = Opcode: Standard query (0)
…. .0.. …. …. = Authoritative: Server is not an authority for domain
…. ..1. …. …. = Truncated: Message is truncated
…. …1 …. …. = Recursion desired: Do query recursively
…. …. 1… …. = Recursion available: Server can do recursive queries
…. …. .0.. …. = Z: reserved (0)
…. …. ..0. …. = Answer authenticated: Answer/authority portion was not authenticated by the server
EDNS destekli DNS sunucularda dns cevapları ~4000 Byte olabilir.

Aşağıdaki örnekte saldırı altındaki sisteme gönderilen DNS isteği öncelikle truncated mesajı ile TCP’e çevriliyor.
Ardından istemcinin gönderdiği TCP isteğine DDoS engelleme sistemi tarafından hatalı bir cevap dönülerek karşı taraftan RST paketi bekleniyor ve RST paketi alındıktan sonra ip adresinin gerçek olduğu belirlenerek paketlere izin veriliyor.
[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
Aşağıdaki yöntem TCP üzerinden DFAS’ı örneklemektedir. Saldırı anında gerçek ip adresinden gönderilen ilk isteğe sistem cevap dönmemektedir. Bir müddet sonra istemcinin bilgisayarı aynı isteği aynı özellikte paketle tekrar iletmekte ve bu sefer DDoS sistemi devreye girerek cevap vermekte ve bağlantıya izin vermektedir.
[root@netdos1 ~]# tcpdump -i em0 -tn -v host 7.8.9.10
tcpdump: listening on em0, link-type EN10MB (Ethernet), capture size 96 bytes
IP 1.2.3.4.57084 > 7.8.9.10.80: Flags [S], cksum 0xd2d2 (correct), seq 3257462929, win 65535, options [mss 1460,nop,wscale
3,sackOK,TS val 3951592577 ecr 0], length 0
IP 1.2.3.4.57084 > 7.8.9.10.80: Flags [S], cksum 0xc719 (correct), seq 3257462929, win 65535, options [mss 1460,nop,wscale
3,sackOK,TS val 3951595578 ecr 0], length 0
IP 7.8.9.10.80 > 1.2.3.4.57084: Flags [S.], cksum 0xc30d (correct), seq 1263297686, ack 3257462930, win 8190, options [mss 1460],length 0
IP 1.2.3.4.57084 > 7.8.9.10.80: Flags [.], cksum 0xfac8 (correct), ack 1, win 65535, length 0