
Обнаружение уязвимости CVE-2019-0708 bluekeep
Это быстрый и «грязный» сканер для уязвимости CVE-2019-0708 в Microsoft Remote Desktop. Прямо сейчас в публичном интернете около 700 000 машин уязвимы к этой уязвимости, по сравнению с примерно 2 000 000 машин, у которых Remote Desktop открыт, но которые пропатчены и защищены от эксплуатации. Многие ожидают, что в ближайшие несколько месяцев появится разрушительный интернет-червь, похожий на WannaCry и notPetya. Поэтому сканируйте свои сети и устанавливайте обновления на своих системах. Этот инструмент упрощает сканирование сетей для поиска уязвимых машин.
Чтобы использовать этот инструмент, вы можете скачать «бинарный» файл для запуска из командной строки или скачать исходный код и скомпилировать его. Для Windows доступен предварительно скомпилированный бинарный файл.
Этот инструмент полностью основан на патче rdesktop из https://github.com/zerosum0x0/CVE-2019-0708.
Я просто сократил код, чтобы его можно было легко компилировать на macOS и Windows,
а также добавил возможность сканирования нескольких целей.
Этому всего пара дней, и оно экспериментальное. Тем не менее, я тестирую его, сканируя
весь интернет (с помощью masscan, поэтому я довольно быстро прорабатываю множество проблем.
Вы можете попробовать связаться со мной в твиттере (@erratarob) для помощи/комментариев.
Чтобы отсканировать сеть, запустите его следующим образом:
rdpscan 192.168.1.1-192.168.1.1.255
Он выводит одну строку результата для каждого адреса, указывая VULNERABLE, если система уязвима к этой ошибке, SAFE, если она (вероятно) безопасна, или UNKNOWN, если программа не смогла выяснить статус, например, при отсутствии ответа от цели. Поскольку большинство целей не отвечают, статистически большинство будет *UNKNOWN".
Он довольно медленный. Вы можете увеличить скорость, добавив параметр командной строки
--workers 1000. Но вы можете увеличить скорость ещё сильнее, запустив перед ним
masscan, чтобы быстро найти машины с открытым портом 3389, а затем использовать
только rdpscan для проверки этих машин на уязвимость.
masscan 10.0.0.0/8 -p3389 --rate 1000000 >ips.txt
rdpscan --file ips.txt > results.txt
Или за один шаг, передавая вывод одной команды другой через конвейер:
masscan 10.0.0.0/8 -p3389 --rate 1000000 | rdpscan --file -
Вы можете получить более подробную диагностическую информацию с помощью параметра -d, который выводит
данные в stderr. Вот как я обычно запускаю программу:
rdpscan --file ips.txt 2> diag.txt 1> results.txt
Сложнее всего установить библиотеки OpenSSL так, чтобы они не конфликтовали с другими версиями в системе. На Debian Linux я делаю так:
$ sudo apt install libssl-dev
Как только вы решите эту проблему, просто скомпилируйте все .c-файлы вместе:
$ gcc *.c -lssl -lcrypto -o rdpscan
Я поместил в каталог Makefile, который делает это, так что, скорее всего, вы сможете просто выполнить:
$ make
Код написан на C, поэтому нужен установленный C-компилятор, например, выполните следующее:
$ sudo apt install build-essential
В этом разделе описаны наиболее очевидные ошибки сборки.
ssl.h:24:25: fatal error: openssl/rc4.h: No such file or directory
Это означает, что у вас либо не установлены заголовочные файлы OpenSSL, либо они не находятся в каком-либо пути. Помните, что даже если у вас установлены бинарные файлы OpenSSL, это не значит, что у вас установлены компоненты для разработки. Вам нужны и заголовочные файлы, и библиотеки.
Чтобы установить это в Debian, выполните:
$ sudo apt install libssl-dev
Чтобы исправить проблему с путями, добавьте флаг компиляции -I/usr/local/include или что-то подобное.
Пример проблемы компоновщика:
Undefined symbols for architecture x86_64:
"_OPENSSL_init_ssl", referenced from:
_tcp_tls_connect in tcp-fac73c.o
"_RSA_get0_key", referenced from:
_rdssl_rkey_get_exp_mod in ssl-d5fdf5.o
"_SSL_CTX_set_options", referenced from:
_tcp_tls_connect in tcp-fac73c.o
"_X509_get_X509_PUBKEY", referenced from:
_rdssl_cert_to_rkey in ssl-d5fdf5.o
Я получаю это на macOS из-за наличия нескольких версий OpenSSL. Я исправляю это жёстким прописыванием путей:
$ gcc *.c -lssl -lcrypto -I/usr/local/include -L/usr/local/lib -o rdpscan
Судя по комментариям других, следующая командная строка может работать на macOS, если вы использовали Homebrew для установки. Однако я всё равно получаю указанные выше ошибки компоновки, потому что установил другие конфликтующие компоненты OpenSSL.
gcc $(brew --prefix)/opt/openssl/lib/libssl.a $(brew --prefix)/opt/openssl/lib/libcrypto.a -o rdpscan *.c
В разделе выше даны краткие советы по запуску программы. В этом разделе приведена более подробная справка.
Чтобы отсканировать одну цель, просто передайте её адрес:
./rdpscan 192.168.10.101
Вы можете передавать IPv6-адреса и DNS-имена. Можно передавать несколько целей. Пример:
./rdpscan 192.168.10.101 exchange.example.com 2001:0db8:85a3::1
Вы также можете сканировать диапазоны адресов, используя либо начальный-конечный IPv4-адреса, либо спецификацию IPv4 CIDR. IPv6-диапазоны не поддерживаются, поскольку они слишком велики.
./rdpscan 10.0.0.1-10.0.0.25 192.168.0.0/16
По умолчанию он сканирует только 100 целей одновременно. Вы можете увеличить это число
с помощью параметра --workers. Однако, независимо от того, насколько высоко вы установите этот
параметр, на практике одновременно будет работать максимум около 500–1500 воркеров,
в зависимости от вашей системы.
./rdpscan --workers 1000 10.0.0.0/24
Вместо указания целей в командной строке вы можете загрузить их из файла,
используя хорошо названный параметр --file:
./rdpscan --file ips.txt
Формат файла — один адрес, имя или диапазон на строку. Он также может
обрабатывать текст, сгенерированный masscan. Лишние пробельные символы обрезаются,
пустые строки игнорируются, любые строки комментариев игнорируются. Комментарий — это
строка, начинающаяся с символа # или символов //.
Вывод отправляется в stdout со статусом VULNERABLE, SAFE,
или UNKNOWN. Для каждого могут быть дополнительные причины.
149.129.120.24 - UNKNOWN - FIN received
45.60.213.160 - SAFE - not RDP but HTTP
208.43.229.89 - SAFE - CredSSP required
170.104.127.137 - UNKNOWN - FIN received
86.188.190.117 - UNKNOWN - connect timeout
62.15.34.157 - SAFE - Target appears patched
216.15.251.120 - VULNERABLE -- got appid
69.62.158.174 - VULNERABLE -- got appid
92.111.20.13 - SAFE - Target appears patched