Ранее мы писали о выпущенных обновлениях для закрытия уязвимости CVE-2019-0708 Remote Desktop Services Remote Code Execution Vulnerability. Развёртывание этих обновлений не вызывает само по себе какой-то сложности. Однако, учитывая серьёзность уязвимости, будет совсем не лишним провести дополнительное сканирование всех своих сетей на предмет выявления всё ещё уязвимых хостов. Для проведения подобных проверок есть разные методики и инструменты. В этой заметке мы рассмотрим то, как выполнить сканирование сетей с помощью scanner-модуля из состава комплекса Metasploit, поставляемого в специальном дистрибутиве ОС Kali Linux 2019.2. Помимо этого, в этой же ОС, мы выполним сборку и использование дополнительной утилиты сканирования rdpscan.
Разворачиваем Kali Linux
Те, кто до сих пор не знаком со специализированным дистрибутивом ОС Kali Linux, могут получить базовую информацию об этой сборке из статьи Википедии. Для проведения разовых проверок уровня информационной безопасности сетей или отдельной взятых хостов или сервисов с помощью ПО, входящего в состав Kali Linux, можно воспользоваться Live-Boot режимом без установки этой ОС на диск какого-либо компьютера.
В нашем случае для задач тестирования развёрнута выделенная виртуальная машина Hyper-V Gen2 на хосте виртуализации с ОС Windows Server 2012 R2.
Скачать загружаемый образ актуальной версии Kali Linux "без СМС и регистраций" можно с официального сайта проекта: Kali Linux Downloads
Установка Kali Linux на диск виртуальной машины не составит никакого труда для администратора, который уже имел дело с программой установки Linux Debian.
Сразу после установки нам потребуется выпустить систему в Интернет для возможности обновления всех предустановленных пакетов, в число которых входит и интересующий нас комплекс Metasploit. Обновление выполняется стандартным для APT-систем способом:
# apt-get update
# apt-get upgrade
Разумеется, чтобы обновление пакетов работало, в систему должны быть подключены репозитории Kali Linux:
# cat /etc/apt/sources.list
deb http://http.kali.org/kali kali-rolling main non-free contrib
deb-src http://http.kali.org/kali kali-rolling main non-free contrib
Возможно также и полное обновление Kali Linux с предыдущих версий, как это описано, например, здесь:
# apt update && apt -y full-upgrade
Убедившись в том, что пакетная база системы обновлена, можем переходить к использованию предустановленных в Kali инструментов, например, к интересующему нас комплексу Metasploit.
Используем модуль Metasploit
Входим в интерактивный режим работы со специальной консолью Metasploit:
# msfconsole
Данная консоль имеет собственный набор команд и опций. Проверим, какие глобальные опции используются в консоли:
> show options
Среди имеющихся опций нас могут заинтересовать опции логирования, выполняемых в консоли действий - ConsoleLogging и SessionLogging. Как видим, в конфигурации по умолчанию эти опции выключены. Включаем логирование консоли и каждой сессий и сохраняем настройки:
> set ConsoleLogging true
> set SessionLogging true
> save
Логи консоли по умолчанию сохраняются в домашнем каталоге текущего пользователя в расположении: ~/.msf4/logs/console.log. Логи сессий в подкаталоге ~/.msf4/logs/sessions
После установки глобальных опций логирования лучше завершить сессию командой exit и запустить новую сессию, так как настройки логирования сессий должны начать действовать только для последующих сессий.
После повторного входа проверяем то, что заданные нами ранее настройки логирования включены:
Справедливости ради стоит отметить тот факт, что мой небольшой опыт использования этой консоли в Kali Linux так и не позволил воспользоваться логами сессий. Сессионные логи, не смотря на выставленные опции логирования, так ни разу и не создались. Возможно, это какое-то ограничение данной свободно распространяемой версии Metasploit, а возможно для включения сессионного логирования требуется какое-то дополнительное "шаманство", о котором я просто не знаю.
Как бы там ни было, получить лог работы консоли можно и сторонними средствами. Например, можно использовать логирование SSH-сессии, имеющееся в клиенте PuTTY для Windows, открыв свойства текущего подключения и указав опции логирования сессии.
Логирование процесса сканирования сетей может быть важным для последующей обработки результатов в том случае, если объём сканирования существенен и занимает немало времени. Ведь у администратора не всегда есть возможность наблюдать за длительным процессом сканирования.
Вернёмся к консоли Metasploit и с помощью команды search выполним поиск модуля сканирования уязвимости BlueKeep по её названию командой вида:
> search bluekeep
В ответ мы получим имя модуля сканирования, который нас интересует.
Чтобы переключиться на этот модуль, выполнима команду use с указанием имени модуля:
> use auxiliary/scanner/rdp/cve_2019_0708_bluekeep
Модуль имеет собственный набор опций, получить значение которых можно командой show, находясь на уровне этого модуля:
> show options
Как видим, модуль имеет три обязательных опции, две из которых уже определены в конфигурации по умолчанию. Чтобы изменить эти опции, используем команду set. Например, зададим сегмент сети, которую нужно сканировать, и количество потоков сканирования:
> set RHOSTS 10.1.3.0/24
> set THREADS 10
Теперь только остаётся запустить процесс сканирования с помощью простой команды:
> run
На консоль будет ведена информация о результатах сканирования и обнаруженных уязвимых хостах:
По окончании процесса сканирования завершаем работу с консолью командой exit, анализируем лог сканирования и принимаем меры по устранению уязвимости обнаруженных хостов.
На этом заметку об описании метода выявления уязвимых хостов можно было бы считать законченной, однако от некоторых коллег поступила информация о том, что были замечены случаи, когда метод выявлял не все уязвимые хосты. Поэтому в контексте нашей задачи мы рассмотрим ещё один инструмент для сканирования сетей на выявление уязвимости BlueKeep - утилиту rdpscan.
Собираем и используем утилиту rdpscan
Загрузить актуальную версию уже скомпилированной утилиты rdpscan под операционные системы Windows и macOS можно по ссылке: Github - robertdavidgraham - rdpscan – releases. Однако в нашем случае для задачи сканирования используется выделенная система на базе Kali Linux, поэтому нам потребуется выполнить загрузку и самостоятельную сборку этой утилиты из исходных колов под Linux.
Выполним установку пакетов, необходимых для загрузки исходных кодом и сборки:
# apt-get install git libssl-dev build-essential
В Kali Linux актуальной версии пакеты git и build-essential уже предустановлены, поэтому в нашем случае в систему будет доустановлен только пакет libssl-dev.
Создадим в домашнем каталоге текущего пользователя отдельный подкаталог и загрузим в него исходные коды утилиты rdpscan:
# mkdir ~/rdpscan
# git clone --depth=1 https://github.com/robertdavidgraham/rdpscan.git ~/rdpscan
Перейдём в каталог с исходными кодами и вызовем процедуру сборки утилиты:
# cd ~/rdpscan
# make
В нашем случае в процессе сборки появилось предупреждение, однако на конечный результат это не повлияло, и в каталоге сборки появился исполняемый файл утилиты rdpscan.
Посмотрим то, какие опции умеет для работы принимать эта утилита:
# ./rdpscan --help
Как видим, здесь, также как и в случае с модулем Metasploit, доступна возможность указания TCP-порта, работающего с RDP-протоколом. Также есть возможность загрузки списка сканируемых хостов из файла, и имеются разны варианты полноты вывода информации.
Выполним простой запуск сканирования небольшой сети, выполняемый в 10 потоков:
# ./rdpscan --workers 10 10.1.1.0/24
В результате работы утилиты мы увидим уязвимые хосты, а также хосты, отвечающие на запрос в безопасном режиме.
Чтобы сократить вывод, отображая только хосты с обнаруженной уязвимостью, можем использовать вызов следующего вида:
# ./rdpscan --workers 10 10.1.1.0/24 | grep 'VULN' | cut -f1 -d'-'
Если требуется сохранить результаты работы утилиты в лог-файл для последующего анализа, то можем просто перенаправить вывод утилиты в файл:
# ./rdpscan --workers 10 10.1.1.0/24 > rdpscan.log
Ну и опять же, анализируем лог сканирования и безотлагательно принимаем меры по устранению уязвимости обнаруженных хостов.
В качестве заключения могу отметить, что из моего скромного опыта использования выше обозначенного модуля сканирования BlueKeep в Metasploit и утилиты rdpscan, оба инструмента выполнили свою задачу с одинаковым результатом. Поэтому выбор инструмента сканирования в данном случае - дело сугубо субъективное.
rdesktop не рассматривали? тоже, как вариант, хорошо сканирует
У нас не было задачи испробовать все сканеры на свете.
просто rdpscan основан на rdesktop потому и спросил
Надо было по "модному", через docker собрать :)