Neseniai Danas Kaminsky'is, saugumo specialistas, paskelbė aptikęs kritinę DNS protokolo dizaino klaidą. Pranešimas sulaukė didelio atgarsio ir susidomėjimo, DNS programinės įrangos gamintojai suskubo ruošti pataisymus.
Danas Kaminsky'is pažeidžiamumo detalių neatskleidė ir pažadėjo jas atskleisti „BlackHat“ IT saugumo konferencijoje. Be abejo, DNS pažeidžiamumas sudomino ir įvairius saugumo specialistus, todėl prasidėjo masinis problemos aptarinėjimas bei pažeidžiamumo detalių paieškos. Realiausią pažeidžiamumo spėjimą pateikė atbulinės grąžos inžinierius Halvaras Flake'as. Taip pat saugumo specialistų komanda Matasano netyčia savo tinklaraštyje paskelbė tikrąsias pažeidžiamumo detales. Danas Kaminsky'is savo tinklaraštyje patvirtino, kad „katė pabėgo iš maišo“. Critical.lt skaitytojams suteikia progą vieniems pirmųjų įsigilinti į DNS pažeidžiamumo detales.
Pažeidžiamumo išnaudojimo tikslas yra „užnuodyti“ DNS saugomus serverio įrašus. Tai yra, vietoj realaus domeno IP adreso pakišti suklastotą IP adresą ir taip susikurti progą įvairioms tolesnėms atakoms. Pažeidžiamumas yra susijęs su tradicinėmis DNS serverių atmintinės užnuodijimo atakomis ir praktiškai apeina jų išnaudojimo būdų pataisymus.
Kiekvienoje DNS užklausoje yra naudojamas QID – užklausos identifikacijos numeris, kuris užtikrina, jog DNS serveris pateikia atsakymą į tą pačią užklausą: tai yra, kad klientas ir serveris susikalbėtų, tiek užklausoje, tiek atsakyme turi būti tas pats QID. Jeigu įsilaužėliui pavyktų klientui perduoti suklastotą užklausą su teisingu QID greičiau nei tą spės padaryti tikrasis DNS serveris, klientas priimtų tokią užklausą kaip tikrą. Kadangi DNS protokolas buvo sukurtas labai seniai, QID lauko dydis buvo pasirinktas tik 16 bitų, arba 65535 galimų lauko reikšmės variantų. DNS serveriai kiekvienai transakcijai (interneto vardo pavertimo į adresą užklausai ir atsakymui į ją), net tokiai pačiai, sukuria vis skirtingą QID, todėl įsilaužėliai gali pasinaudoti „gimtadienio paradoksu“ paremta ataka ir ganėtinai lengvai atspėti teisingą QID. Įsilaužėliui pakanka bent vienos teisingai atspėtos užklausos, kad galėtų užnuodyti kešuojančio DNS serverio atmintinę.
Atakos scenarijus
Tarkim, kad įsilaužėlis nori užnuodyti DNS serverio ns.pavyzdys.lt atmintį netikru critical.lt domeno IP adresu.
Įsilaužėlis siunčia daugybę DNS užklausų neegzistuojantiems critical.lt subdomenams, pavyzdžiui atsitiktinis0001.critical.lt, atsitiktinis0002.critical.lt ir t. t. Gavęs tokią užklausą, DNS serveris ns.pavyzdys.lt kreipiasi į atsakingą DNS serverį, aptarnaujantį critical.lt domeną ir iš ten gauna atsakymą NXDOMAIN, reiškiantį, jog toks domenas neegzistuoja. Tuo pačiu metu įsilaužėlis bando aplenkti tikrąjį critical.lt domeno DNS serverį siųsdamas daugybę suklastotų DNS užklausų ns.pavyzdys.lt serveriui. Kai galiausiai įsilaužėliui pavyksta atspėti bent vieną QID greičiau nei tikrasis DNS serveris spėja atsiųsti atsakymą, ns.pavyzdys.lt serveris priima suklastotą DNS užklausą su įsilaužėlio pateiktu suklastotu IP adresu. Tarkim, įsilaužėlis vietoje tikro IP pakiša adresą 127.0.0.1. Tada visi klientai, besinaudojantys ns.pavyzdys.lt DNS serveriu ir besikreipiantys adresu atsitiktinis000X.critical.lt bus nukreipti į savo kompiuterį. Aišku, atsitiktinių neegzistuojančių subdomenų užnuodijimas didelės naudos neatneša. Todėl siekiant užnuodyti pasirinktą taikinį, pagelbėti gali DNS paketo papildomas šaltinio įrašas (additional RR), kuriame saugoma papildoma informacija, reikalinga efektyviam DNS atsakymui suformuoti. Šiame įraše galima nurodyti papildomą informaciją apie užklausiamą domeną, pavyzdžiui, galima nurodyti to domeno IP adresą. Saugumo sumetimais tai galima daryti tik tam pačiam domenui, kurio adresą prašoma pateikti DNS užklausoje. Dabar galime nurodyti netikrą critical.lt domeno IP adresą (tačiau negalime nurodyti google.lt) ir tas IP adresas bus įrašytas i DNS serverio atmintinę bei bus ten kol pasibaigs TTL (time to live) galiojimo laikas: visi klientai, naudojantys užnuodytą DNS serverį ir norintys kreiptis į domeną critical.lt gaus netikrą šio vardo IP adresą tol, kol nesibaigs TTL galiojimas.
Ši ataka gali būti panaudota, pavyzdžiui, prieš elektroninės bankininkystės vartotojus, siekiant nukreipti juos į suklastotas el. bankininkystės svetaines. Manoma, kad šiai atakai įvykdyti gali užtekti ir maždaug dešimties sekundžių.
Visiems interneto tiekėjams, administratoriams prižiūrintiems DNS serverius rekomenduojama kuo skubiau įsidiegti gamintojų pataisymus arba pereiti prie saugesnės DNS protokolo realizacijos DNSSEC. Beje, dauguma DNS programinės įrangos pataisymų tiesiog atsitiktinai parenka šaltinio prievadą, taip sumažinant užklausos padirbimo galimybę, nes įsilaužėliui tada reikia atspėti ne tik 16 bitų DNS užklausos identifikacijos numerį, bet ir 16 bitų šaltinio prievadą.