Най-доброто ръководство за предотвратяване на DNS-базирани DDoS атаки

Що се отнася до DNS, Крикет Лиу буквално написа книгата. Той е съавтор на всички пет издания на книгата на O'Reilly "DNS и BIND", която обикновено се счита за окончателното ръководство за всички неща, свързани със системата за имена на домейни. Понастоящем Крикет е главен инфраструктурен директор на Infoblox.

DNS очевидно е критичен компонент на компютърната мрежа, но има моменти, когато тези инструменти могат да се използват за злоупотреби. В форума за нови технологии тази седмица Cricket разглежда нарастващия проблем на DNS-базирани DDoS атаки и как да се справя с тях. - Пол Венеция

DNS-базирани DDoS атаки: Как работят и как да ги спрем

Базираната на DNS DDoS (разпределена атака за отказ на услуга) се превърна в една от най-често срещаните деструктивни атаки в Интернет. Но как работят те? И какво можем да направим, за да се защитим срещу тях?

В тази статия ще опиша как DDoS атакува както експлоатация, така и насочване на DNS инфраструктура. Ще ви покажа и какво можете да направите, за да защитите себе си и другите.

Голямата измама

Генерирането на DDoS атака с помощта на DNS инфраструктура е изключително просто: Хакерите изпращат заявки към сървъри за имена през Интернет и тези сървъри за имена връщат отговори. Вместо да изпращат заявките от собствените си IP адреси, обаче, нападателите фалшифицират адреса на своята цел - който може да бъде уеб сървър, рутер, друг сървър за имена или почти всеки възел в Интернет.

Подправянето на DNS заявки е особено лесно, тъй като те обикновено се пренасят през UDP (безжичен потребителски протокол за потребителски програми). Изпращането на DNS заявка от произволен IP адрес е почти толкова просто и има приблизително същия ефект като писането на чужд адрес за връщане на пощенска картичка.

Запитванията за подправяне обаче не са достатъчни, за да обезсилят целта. Ако отговорите на тези заявки не бяха по-големи от самите заявки, нападателят би направил също толкова добре, за да залее целта с подправени заявки. Не, за да увеличите максимално щетите върху целта, всяка заявка трябва да връща много голям отговор. Оказва се, че е много лесно да се подбуди.

От появата на EDNS0, набор от разширения за DNS, въведени през 1999 г., базирани на UDP DNS съобщения могат да носят много данни. Отговорът може да бъде до 4096 байта. Повечето заявки, от друга страна, са с дължина под 100 байта.

Някога беше относително трудно да се намери толкова голям отговор в пространството от имена в Интернет. Но сега, когато организациите започнаха да разгръщат DNSSEC, разширенията за защита на DNS, това е много по-лесно. DNSSEC съхранява криптографски ключове и цифрови подписи в записи в пространството от имена. Те са положително огромни.

Можете да видите пример за отговор от зоната isc.org, която съдържа DNSSEC записи в моя блог. Размерът на отговора е 4 077 байта, в сравнение със заявка от само 44 байта.

Сега, хакерски атакуващи от интернет изпращат тази подправена заявка от IP адреса на вашия уеб сървър до сървърите за имена isc.org. За всяка 44-байтова заявка вашият уеб сървър получава 4 077-байтов отговор за коефициент на усилване от почти 93 пъти.

Нека направим бързо изчисление, за да разберем колко лошо може да стане това. Да предположим, че всеки нападател има относително скромна 1Mbps връзка с интернет. Той може да изпраща около 2840 44-байтови заявки през тази връзка в секунда. Този поток от запитвания би довел до отговори на стойност почти 93Mbps, достигащи до вашия уеб сървър. Всеки 11 нападатели представляват 1Gbps.

Къде антисоциалните нападатели ще намерят 10 приятели, които да им помогнат да извършат атака? Всъщност нямат нужда от такива. Те ще използват ботнет от хиляди компютри.

Крайният ефект е опустошителен. В своя тримесечен глобален доклад за DDoS Attack, Prolexic (компания за смекчаване на DDoS) съобщава за скорошна DNS-базирана атака срещу клиент, която достигна 167Gbps. Освен това Prolexic съобщи, че средната честотна лента за DDoS атаки се е увеличила със 718% до 48Gbps за едно тримесечие .

Но почакай! Не може ли сървърите за имена isc.org да бъдат модифицирани, за да разпознаят, че те се заявяват отново и отново за едни и същи данни, от един и същ IP адрес? Не можеха ли да потушат атаката?

Със сигурност могат. Но сървърите за имена isc.org не са единствените, които атакуващият може да използва, за да увеличи трафика си. Разбира се, има и други авторитетни сървъри за имена, които атакуващият би могъл да използва, но още по-лошо са отворените рекурсивни сървъри за имена.

Отвореният рекурсивен сървър за имена е просто сървър за имена, който ще обработва рекурсивни заявки от всеки IP адрес. Мога да му изпратя тази заявка за данни на isc.org и тя ще ми отговори, а вие можете да направите същото.

Не трябва да има много отворени рекурсивни сървъри на имена в Интернет. Функцията на рекурсивния сървър за имена е да търси данни в пространството от имена в Интернет от името на DNS клиенти, като тези на вашия лаптоп или смартфон. Мрежовите администратори, които са настроили рекурсивни сървъри на имена (като вашия ИТ отдел), обикновено ги предвиждат за използване от определена общност (например вие и вашите колеги служители). Освен ако не използват услуги като OpenDNS или Google Public DNS, те не искат да ги използват от гражданите на Молдова. Така че публично настроените, мислещи за сигурността и най-вече компетентните администратори конфигурират контролите за достъп на своите рекурсивни сървъри на имена, за да ограничат използването им до оторизирани системи.

Като се има предвид това, колко голям проблем може да бъде отварянето на рекурсивни сървъри на имена? Доста голям. Проектът Open Resolver Project събра списък с 33 милиона отворени рекурсивни сървъри на имена. Хакерите могат да задействат фалшиви заявки при толкова много от тях, колкото им харесва да бълват данни на isc.org във вашия уеб сървър, сървър за имена или граничен рутер, докато не се задави.

Така работят DDoS атаките, базирани на DNS. За щастие имаме няколко начина за борба с тях.

Как да преживеем бурята

Първият бизнес ред е да инструментирате вашата DNS инфраструктура, така че ще знаете кога сте атакувани. Твърде много организации нямат представа какво е натоварването им, така че никога не биха разбрали дали първо са били атакувани.

Определянето на натоварването на вашата заявка може да бъде толкова просто, колкото използването на вградената поддръжка на статистически данни на BIND. BIND сървърът за име ще изхвърля данни в своя файл със статистика, когато стартирате rndc статистика,например или на конфигурируем статистически интервал. Можете да разгледате статистическите данни за честота на заявки, грешки в сокета и други индикации за атака. Не се притеснявайте, ако все още не сте сигурни как ще изглежда атака - част от целта на мониторинга на DNS е да се установи базова линия, така че да можете да идентифицирате какво е ненормално.

След това разгледайте вашата инфраструктура, насочена към интернет. Не се ограничавайте до външните си авторитетни сървъри за имена; изследвайте вашата инфраструктура на комутатора и рутера, защитните стени и връзките ви с интернет. Идентифицирайте всички единични точки на повреда. Определете дали можете лесно (и рентабилно) да ги премахнете.

Ако е възможно, помислете за широко географско разпространение на вашите външни авторитетни сървъри за имена. Това помага да се избегнат единични точки на провал, разбира се, но помага и когато не сте под атака. Рекурсивният сървър за имена, разрешаващ име на домейн в една от вашите зони, ще се опита да направи запитване към най-близкия до него авторитетен сървър на имена, така че географското разпространение ще има тенденция да осигурява по-добра производителност на вашите клиенти и кореспонденти. Ако вашите клиенти са групирани в определени географии, опитайте да поставите авторитетен сървър за имена близо до тях, за да предоставите най-бързите отговори.

Може би най-основният начин за борба с DoS атаките е прекомерното осигуряване на вашата инфраструктура. Добрата новина е, че прекомерното предоставяне на вашите сървъри за имена не е непременно скъпо; способен сървър за имена може да обработва десетки или дори стотици хиляди заявки в секунда. Не сте сигурни какъв е капацитетът на сървърите ви за имена? Можете да използвате инструменти за заявки като dnsperf, за да тествате производителността на сървърите си за имена - за предпочитане да използвате тестова платформа, подобна на вашите производствени сървъри за имена в лаборатория, а не самите производствени сървъри.

Решаването на това колко да надвишавате сървърите си за имена е субективно: Какво струва вашето онлайн присъствие? Има ли други компоненти на вашата инфраструктура, насочена към интернет, които ще се провалят преди сървърите за имена? Очевидно е глупаво да харчите пари за изграждане на първокласна DNS инфраструктура зад граничен рутер или защитна стена, която ще се провали много преди сървърите ви с имена дори да се потят.

Ако парите не са обект, може да е полезно да знаете, че най-съвременните DDoS атаки срещу DNS инфраструктура могат да надхвърлят 100Gbps.

Използването на Anycast може също да помогне да се противопоставите на DDoS атака. Anycast е техника, която позволява на множество сървъри да споделят един IP адрес и работи особено добре с DNS. Всъщност сървърите за коренни имена в Интернет използват Anycast от години, за да предоставят данни за коренната зона по целия свят, като същевременно позволяват списъкът с корени да се побере в едно DNS съобщение, базирано на UDP.

За да разположат Anycast, хостовете, поддържащи вашите сървъри за имена, ще трябва да изпълняват протокол за динамично маршрутизиране, като OSPF или BGP. Процесът на маршрутизиране ще рекламира на своите съседни маршрутизатори маршрут до нов, виртуален IP адрес, на който сървърът ви за име слуша. Процесът на маршрутизиране също трябва да бъде достатъчно умен, за да спре рекламата на този маршрут, ако локалният сървър за имена престане да реагира. Можете да залепите вашия демон за маршрутизация за здравето на вашия сървър за имена, използвайки код на вашата собствена конструкция - или можете да закупите продукт, който се грижи за това вместо вас. NIOS на Infoblox, неслучайно, включва поддръжка на Anycast.

Как Anycast се защитава срещу DDoS атаки? Е, да речем, че имате шест външни сървъра за имена в две групи Anycast (т.е. три споделящи един Anycast IP адрес и три споделящи друг). Всяка група съдържа по един член в САЩ, един в Европа и един в Азия. Хостът, монтиращ DDoS атака срещу вас, може да изпраща трафик само - и следователно само атака - на един член от всяка група от всяка точка в Интернет наведнъж. Освен ако нападателите не могат да осигурят достатъчно трафик от Северна Америка, Европа и Азия едновременно, за да затрупат вашата инфраструктура, те няма да успеят.

И накрая, има начин да се възползвате от широкото географско разпространение и Anycast едновременно, без значителни капиталови разходи: Използвайте облачен DNS доставчик. Компании като Dyn и Neustar управляват собствени сървъри за имена на Anycast в центрове за данни по целия свят. Плащате им, за да хостват вашите зони и да отговарят на запитвания за вашите данни. И можете да продължите да поддържате директен контрол върху данните за вашата зона, като поискате от доставчика да конфигурира своите сървъри за имена като вторични за вашите зони, зареждайки данните от главния сървър за имена, който сте определили и управлявате вътрешно. Просто бъдете сигурни, че стартирате главния скрит (т.е. без запис NS, сочещ към него), или рискувате атакуващият да го насочи като единична точка на отказ.

Една дума предпазливост при използване на DNS доставчици, базирани на облак: Повечето ви таксуват поне отчасти въз основа на броя заявки, които техните сървъри за имена получават за данни във вашите зони. При DDoS атака тези заявки могат да се увеличат драстично (напълно извън вашия контрол и изобщо не във ваша полза), така че се уверете, че те разполагат с разпоредби за справяне с DDoS атаки, без да прехвърлят разходите за трафика към вас.

Как да избегнем да станем съучастници в DDoS атаки

Сега знаете как да конфигурирате вашата DNS инфраструктура, за да устои на DDoS атака. Почти толкова важно е обаче да се уверите, че не сте съучастник в DDoS атака срещу някой друг.

Не забравяйте описанието на това как DNS сървърите могат да усилят трафика? Атакуващите могат да използват както отворени рекурсивни сървъри на имена, така и авторитетни сървъри на имена като усилватели, изпращайки фалшиви заявки, които карат сървърите за имена да изпращат отговори над 100 пъти по-големи от заявката до произволни цели в Интернет. Сега, разбира се, не искате да бъдете цел на такава атака, но не искате да бъдете и съучастник. Атаката използва ресурсите на сървърите ви за имена, както и вашата честотна лента. Ако целта предприеме мерки за блокиране на трафика от вашия сървър за имена към неговата мрежа, след като атаката приключи, целта може да не е в състояние да разреши имена на домейни във вашите зони.

Ако стартирате отворен рекурсивен сървър за имена, решението е просто: Не. Има много малко организации, които имат някакво оправдание за пускане на сървър за имена, отворен за рекурсивни заявки. Google Public DNS и OpenDNS са две, които ви идват на ум, но ако четете това, предполагам, че вероятно не сте те. Останалите от нас трябва да прилагат контроли за достъп до нашите рекурсивни сървъри на имена, за да се уверят, че само оторизирани заявки ги използват. Това вероятно означава ограничаване на DNS заявки до IP адреси в нашите вътрешни мрежи, което е лесно да се направи при всяко изпълнение на сървър за име, което си заслужава. (Microsoft DNS сървърът не поддържа базирани на IP адреси контроли за достъп до заявки. Прочетете какво искате в това.)

Но какво, ако стартирате авторитетен сървър за имена? Очевидно е, че не можете да ограничавате IP адресите, от които ще приемате заявки - или не много, така или иначе (може да откажете заявки от очевидно фалшиви IP адреси, като например RFC 1918 адреси). Но можете да ограничите отговорите.

Две дългогодишни "бели шапки" в Интернет, Пол Викси и Върнън Шрайвър, осъзнаха DDoS атаките, които използват авторитетни сървъри за имена за усилване, показват определени модели на заявки. По-специално, нападателите изпращат сървъри за имена една и съща заявка от един и същ фалшив IP адрес (или адресен блок) отново и отново, търсейки максимално усилване. Никой добре възпитан рекурсивен сървър на имена не би направил това. То щеше да кешира отговора и да не поиска отново, докато изтече времето за запис на отговорите.