CVE-2020-1350 (SIGRed) - Эксплойт DoS DNS Windows
Авторство бага полностью принадлежит Check Point Research (@_cpresearch_), которые сделали невероятное описание этой уязвимости (респект @sagitz_ за пост).
Их описание можно найти здесь.
Этот эксплойт написан @maxpl0it
Краткое описание работы:
- В локальной сети вы инициируете DNS-запрос (точнее, запрос SIG-записей) для вредоносного домена (например, 9.evil_domain.com)
- Это отправляется на DNS-сервер уязвимого Windows-сервера
- Уязвимый сервер отправляет запрос на DNS, которому он перенаправляет запросы (обычно стандартные IP-адреса Google)
- DNS Google отвечает серверами имен для вредоносного домена
- Затем уязвимый сервер выступает в роли DNS-клиента и отправляет запрос на вредоносный DNS-сервер
- Вредоносный сервер отвечает полезной нагрузкой, которая переполняет двухбайтовое число, что приводит к выделению меньшего объема памяти, чем требуется
- Сигнатура копируется, и все ломается (конечно), что приводит к краху DNS-сервера уязвимого сервера
Общая настройка:
- Этот эксплойт требует настроить домен с собственными серверами имен, указывающими на ваш сервер.
- Настройте сервер и запустите этот скрипт. Он будет прослушивать порт 53 как по TCP, так и по UDP.
- Если вы получите ошибку о том, что порты заняты, используйте netstat -pa, чтобы выяснить, что слушает порты домена (вероятно, systemd-resolved), и отключите + остановите его. Если на сервере ничего не слушает, убедитесь, что вы убили все экземпляры этого скрипта перед повторным запуском.
Например, я запустил python sigred_dos.py ibrokethe.net, чтобы запустить вредоносный DNS-сервер
Настройка тестирования:
Если у вас есть доступ к Windows-серверу, вы можете настроить условный пересылатель, чтобы указать ibrokethe.net на IP-адрес хоста, запускающего скрипт. Это эффективно пропускает шаги 3 и 4 в описании.
Выполнение:
Чтобы запустить уязвимость на DNS-сервере Windows, выполните nslookup -type=sig 9.your_domain_name_here dns_server_to_target
Поддомен '9' действительно требуется здесь. Вам не нужно вносить никаких изменений в записи домена, так как скрипт обрабатывает это.
В качестве примера: я запустил nslookup -type=sig 9.ibrokethe.net 127.0.0.1, так как запускал это на сервере.