Napad z DNS odbojem (DNS reflection, DNS amplification) je zelo star način poplavljanja žrtve s prometom. Tako star, da smo ga pravzaprav že odpisali. Letos se je vrnil močnejši.
Ideja je preprosta: pošlješ vprašanje DNS strežniku, svoj izvorni naslov pa ponarediš in vstaviš žrtvinega, zato DNS strežnik odgovor pošlje žrtvi.
Če želiš ta enostavni trik spremeniti v napad, morata biti izpolnjena dva pogoja:
- pakete moraš pošiljati iz omrežja ponudnika, ki omogoča potvarjanje naslovov (spoofing) in
- najti moraš dovolj uslužnih DNS strežnikov, ki so pripravljeni odgovarjati komurkoli na internetu (open resolvers).
Potvarjanje naslovov
Vsak IP paket vsebuje naslov izvora in cilja komunikacije. “Spoofing” naredite tako, da iz svojega računalnika pošljete komunikacijski paket s tujim IP naslovom kot naslovom izvora. Da to storite, potrebujete poseben program.
Med širitvijo interneta v 90. letih prejšnjega stoletja se je problem potvarjanja naslovov vztrajno ponavljal, zato smo kmalu pričeli nastavljati prepreke. Dober skrbnik omrežja nastavi na usmerjevalnikih filtre, ki ven spustijo le pakete, ki imajo pravilne izvorne naslove (egress filtering), na poti v lokalno omrežje pa zavrže pakete, ki se delajo, da prihajajo iz lokalnega omrežja samega (ingress filtering). S prvim v glavnem preprečujemo napade iz našega lastnega omrežja, z drugim pa se branimo napadov, ki želijo izkoriščati zaupanje med napravami na lokalnem omrežju. Internetni ponudniki lahko podobno naredijo za svoje celotno omrežje in nastavijo omejitve pri izmenjavi podatkov z drugimi ponudniki. Pri anti-spoofing ukrepih lahko vsak poskrbi le za “svoj vrtiček”. Ko IP paket pride na rob našega omrežja nimamo skoraj nobene možnosti preveriti, ali je prišel iz dobro vzdrževanega omrežja ali ne. Komunikacija običajno poteka preko cele verige omrežij različnih ponudnikov, mi pa se za neka pravila lahko dogovorimo le z neposrednimi sosedi. Poskrbimo za lastno “higieno” in upamo, da bodo drugi tudi.
Napade, ki uporabljajo potvorjene izvorne naslove, lahko imenujemo tudi slepe, saj napadalec odgovora na poslani paket ne vidi; odgovor gre namreč na naslov, ki ga je namenoma vstavil v paket. Slepe napade pa je lažje izvajati s protokolom UDP, ki ne zahteva prejšnje vzpostavitve povezave. Tam je vsak paket sam zase. DNS je zato primerna infrastruktura za napadalca, saj skoraj vsa komunikacija poteka po protokolu UDP, s kratkim vprašanjem in daljšim odgovorom.
Protokol TCP je drugačen in na začetku zahteva izmenjavo treh paketov (three-way handshake), kjer se mora ujemati zaporedna številka paketa (sequence number). Kadar je ta predvidljiva ali se vedno začne pri 0, lahko napadalec s poskušanjem včasih dokonča TCP rokovanje. Pri tem mora biti dovolj hiter, sicer bo žrtev videla, da prejema nezahtevane TCP pakete in bo sporočila, da ne želi vzpostaviti zveze (mišljen je računalnik, ne človek, ki ga uporablja). V izogib tovrstnim napadom se zaporedna številka pri TCP nastavi naključno.
Odprta DNS infrastruktura
Da lahko udobno uporabljamo internet, potrebujemo DNS strežnik, ki bo za nas iskal IP naslove. Gre za rekurzivni DNS strežnik (“resolver”). Vsak ponudnik ima nekaj rekurzivnih DNS strežnikov, ki jih uporabljajo njegovi naročniki. Nekateri svoje “rekurzivce” namenoma odprejo še bolj široko:Arnesov 193.2.1.66 je tako dostopen iz vseh slovenskih omrežij, najbolj znani popolnoma odprti pa so strežniki OpenDNS (208.67.222.222 in 208.67.220.220) in Google Public DNS (8.8.8.8 in 8.8.4.4).
Na internetnu pa se najdejo tudi rekurzivni DNS strežniki, ki so odprti po pomoti. Čeprav to ni njihov namen, gredo poslušno odkrivati DNS preslikave in jih sporočajo komurkoli, ki jim zastavi vprašanje. To delo opravljajo zato, ker jih upravitelj ni primerno nastavil, oz. jih postavil na ustrezno mesto svojega omrežja. Ti strežniki so “open resolvers”, in ravno te se izrablja za napade z DNS odboji.
Poleg rekurzivnih pa poznamo še avtoritativne DNS strežnike, ki hranijo podatke o posamezni domeni, oz. njeni zoni. V zoni je definirana domena: preslikave imen v IP naslove, sinonimi omrežnih naslovov, usmerjanje pošte za domeno in tako naprej. Ti strežniki morajo biti dostopni vsem, saj prav do njih pri poizvedovanju pridejo rekurzivni strežniki s svojimi vprašanji. Avtoritativne strežnike za svoje domene lahko postavimo in upravljamo sami, ali pa to storitev najamemo pri svojem ponudniku, ali pa pri kateremkoli ponudniku DNS gostovanja na spletu.
Napad z DNS odbojem
Napad z DNS odbojem mora napadalec sprožiti iz omrežja, ki ne preverja izvornih naslovov. Morda najde kakšnega, ki to dovoli po pomoti, lahko pa kupi “storitev” na trgu (dostikrat v Rusiji ali Ukrajini). Nato mora napadalec poiskati dovolj odprtih rekurzivnih DNS strežnikov, ki bodo napad zanj posredovali do žrtve. Recimo nekaj sto. Izbere si še DNS poizvedbo, ki da dovolj dolg odgovor in že lahko prične streljati pakete proti odprtim DNS strežnikom, ki bodo napad posredovali do žrtve.
Preiskovanje vira napada je pri DNS odboju težje kot pri klasičnem DDoS napadu z botnetom. Tam vedno obstaja možnost, da bomo odkrili nadzorni strežnik, preko katerega napadalec daje ukaze. Sledenje viru DNS odboja pa zahteva pravočasno sledenje preko poti večih omrežij in se zato dostikrat konča le z omejevanjem škode.
Tovrstnih slepih napadov že vrsto let ni bilo. Kaj se je torej spremenilo? Ponujata se vsaj dve opažanji. Prvo je, da se je število odprtih rekurzivnih DNS strežnikov v zadnjih letih povečalo. Drugi del odgovora pa prinaša DNSSEC, razširitev DNS protokola, ki omogoča digitalno podpisovanje domen.
Na začetku smo zapisali, da se napad lahko imenuje tudi “DNS amplification” – napadalec pošlje majhno vprašanje in doseže, da se proti žrtvi usmeri veliko daljši odgovor. Primer: poizvedba ripe.net IN ANY? je dolga 26 bytov in je včasih dala odgovor, ki je bil dolg 250 bytov. Napadalec je lahko včasih računal torej s faktorjem ojačanja 10. Zaradi DNSSEC podatkov v odgovoru pa je danes odgovor na isto poizvedbo dolg kar 2630 bytov, faktor ojačanja je torej kar 100!
Zaščita
Upravljalci ISC BIND strežnika naj omejijo dostop do rekurzivnega strežnika z direktivo allow-recursion le na lastna omrežja. Windows DNS strežnik žal te možnosti nima, zato morate omejitve nastaviti na požarni pregradi svojega omrežja. Če želite na Windows operacijskem sistemu zaganjati tako avtoritativni, kot tudi rekurzivni strežnik, ju boste morali ločiti in prvega dati na javni del omrežja, drugega pa na internega.