Група изследователи от Калифорнийския университет в Ривърсайд публикува нов вариант на атаката SAD DNS (CVE-2021-20322), който работи незаслужено, независимо от защитата, добавена миналата година за блокиране на уязвимостта CVE-2020-25705. Новият метод е по същество подобен на уязвимостта от миналата година и се различава само по използването на друг тип ICMP пакети за проверка на активни UDP портове. Предложената атака позволява подмяна на фалшиви данни в кеша на DNS сървъра, което може да се използва за замяна на IP адреса на произволен домейн и пренасочване на исканията към домейна на сървър на злоумышленик.
Предложеният метод е работещ само в мрежовия стек на Linux поради привързването към особеностите на механизма за обработка на ICMP пакети в Linux, който е източник на изтичане на данни, улесняващи определянето на номера на UDP порта, използван сървър за изпращане на външно запитване. Промените, които блокират изтичането на данни, бяха приети в ядрото на Linux в края на август (поправката е включена в ядрото 5.15 и в септемврийските ъпдейти на LTS клоновете на ядрото). Поправката се състои в преминаване на използването в мрежовите кешове на алгоритъма за хеширане SipHash вместо Jenkins Hash. Статусът на отстраняването на уязвимостта в дистрибуциите може да бъде оценен на данните страници: Debian, RHEL, Fedora, SUSE, Ubuntu.
Според изследователите, открили проблема, уязвимостта е подложена на около 38% от наличните в мрежата отворени резолвери, включително популярни DNS услуги, като OpenDNS и Quad9 (9.9.9.9). Що се отнася до сървърния софтуер, атаката може да бъде извършена при използването на Linux сървър, с пакети като BIND, Unbound и dnsmasq. На DNS сървъри, работещи под Windows и BSD системи, проблемът не се проявява. За успешното извършване на атаката е необходимо да се използва спуфинг на IP, т.е. е необходимо доставчикът на атакуващия да не блокира пакети с фалшив изходящ IP адрес.
Напомняме, че атаката SAD DNS позволява заобикаляне на защитата, добавена в DNS-серверите за блокиране на класическия метод на отравяне на DNS кеша, предложен през 2008 година от Дън Камински (Dan Kaminsky). Методът на Камински манипулира с малкия размер на полето с идентификационния номер на DNS запитването, който е само 16 бита. За да се подбере правилният идентификатор на DNS транзакцията, необходим за спуфинг на името на хоста, е достатъчно да се изпратят около 7000 запитвания и да се симулират около 140 хиляди фиктивни отговора. Атаката е свързана с изпращането на много пакети с фиктивна привързаност към IP и с различни идентификатори на DNS транзакцията до DNS резолвера. За да се предотврати кеширането на първия отговор, във всеки фиктивен отговор се посочва малко променено име на домейн (1.example.com, 2.example.com, 3.example.com и т.н.).
За защита от този вид атака производителите на DNS-сервери реализираха случайно разпределение на номерата на изходните мрежови портове, от които се изпращат запитванията за резолвинг, което компенсира недостатъчно голямото размер на идентификатора. След реализирането на защитата за изпращане на фиктивен отговор освен подбора на 16-битен идентификатор стана необходимо да се подбере и един от 64 хиляди порта, което увеличи броя на вариациите за подбор до 2^32.
Методът SAD DNS позволява драстично да се опрости определянето на номера на мрежовия порт и да се сведе атаката до класическия метод на Камински. Атакуващият може да определи обратиться към неизползвани и активни UDP портове, използвайки изтичането на информация за активността на мрежовите портове при обработка на отговорни ICMP пакети. Методът позволява на 4 реда да се намали броя на вариантите за подбиране — 2^16+2^16 вместо 2^32 (131_072 вместо 4_294_967_296). Изтичането на информация, позволяваща бързо да се определи активните UDP портове, е предизвикано от недостатъчната обработка в кода на ICMP пакетите с запитвания за фрагментиране (флаг ICMP Fragmentation Needed) или пренасочване (флаг ICMP Redirect). Изпращането на подобни пакети променя състоянието на кеша в мрежовия стек, което позволява на база на реакцията на сървъра да се определи кой от UDP портовете е активен, а кой не.
Сценарий на атака: Когато DNS резолверът се опитва да определи доменно име, той изпраща UDP запитване до обслужващия домейн DNS сървър. В момента, в който резолверът очаква отговор, атакуващият може бързо да определи номера на изходния порт, който е бил използван за изпращане на запитването, и да изпрати фалшив отговор на него, представяйки се за обслужващ домейн DNS сървър, използвайки фалшифициране. IP адресиDNS резолверът ще постави в кеша данните, предоставени във фалшивия отговор, и за известно време при всички други DNS запитвания за доменното име ще връща подставения от атакуващия IP адрес.
Източник: opennet.ru
