#32 Gray Hat C#. Руководство для хакера по созданию и автоматизации инструментов безопасности. Автоматизация Nessus. Выполнение сканирования Nessus.
Здравствуйте, дорогие друзья.
В листинге ниже показано, как начать использовать NessusSession и NessusManager для запуска сканирования и печати результатов.
Мы начинаем нашу автоматизацию с отключения проверки сертификата SSL (поскольку ключи SSL сервера Nessus являются самозаверяющими, они не пройдут проверку), назначая анонимный метод, который возвращает true только для ServerCertificateValidationCallback [1]. Этот обратный вызов используется сетевыми библиотеками HTTP для проверки сертификата SSL. Простое возвращение true приводит к принятию любого сертификата SSL. Затем мы создаем NessusSession [2] и передаем ему IP-адрес сервера Nessus, а также имя пользователя и пароль для API Nessus. Если аутентификация прошла успешно, мы передаем новый сеанс другому NessusManager.
Когда у нас есть аутентифицированный сеанс и менеджер, мы можем начать взаимодействовать с сервером Nessus. Сначала мы получаем список политик сканирования, доступных с помощью GetScanPolicies() [3], а затем создаем пустую строку со строкой string.Empty для хранения идентификатора политики сканирования для базовой политики сканирования и перебираем шаблоны политик сканирования. Перебирая политики сканирования, мы проверяем, соответствует ли имя текущей политики сканирования строке Basic [4]; это хорошая отправная точка для политики сканирования, которая позволяет нам выполнять небольшой набор неаутентифицированных проверок хостов в сети. Мы сохраняем идентификатор базовой политики сканирования для последующего использования.
Теперь создадим и запустим сканирование с базовым идентификатором политики сканирования, как показано в листинге ниже.
В точке [1] мы вызываем CreateScan(), передавая идентификатор политики, IP-адрес, имя и описание метода, и сохраняем его ответ в JObject. Затем мы извлекаем идентификатор сканирования из Jobject [2], чтобы передать его в функцию StartScan() [3] для запуска сканирования.
Мы используем GetScan() для мониторинга сканирования, передавая ему идентификатор сканирования, сохраняя его в результатах сканирования JObject и использование цикла while для постоянной проверки того, завершен ли текущий статус сканирования [4]. Если сканирование не завершено, мы печатаем его статус, засыпаем на пять секунд и снова вызываем GetScan() [5]. Цикл повторяется до тех пор, пока отчеты о сканировании не будут завершены, после чего мы перебираем и печатаем каждую уязвимость, возвращенную GetScan(), в цикле foreach, что может выглядеть примерно так, как в листинге ниже. Сканирование может занять несколько минут, в зависимости от Вашего компьютера и скорости сети.
Результаты сканирования говорят нам, что цель использует слабые режимы SSL (протоколы 2 и 3) [1] и самоподписанный сертификат SSL на открытом порту [2]. Теперь мы можем убедиться, что в конфигурациях SSL сервера используются полностью актуальные режимы SSL, а затем отключить слабые режимы (или вообще отключить службу). После завершения мы можем повторно запустить автоматическое сканирование, чтобы убедиться, что Nessus больше не сообщает об используемых слабых режимах SSL.
Резюме
В этой главе показано, как автоматизировать различные аспекты API Nessus, чтобы выполнить сканирование подключенного к сети устройства без аутентификации. Для этого нам нужно было иметь возможность отправлять запросы API на HTTP-сервер Nessus. Для этого мы создали класс NessusSession; затем, как только мы смогли пройти аутентификацию с помощью Nessus, мы создали класс NessusManager для создания, запуска и составления отчетов о результатах сканирования. Мы обернули все кодом, который использовал эти классы для автоматического управления API Nessus на основе информации, предоставленной пользователем.
Это далеко не все возможности Nessus, более подробную информацию Вы найдете в документации Nessus API. Многим организациям требуется выполнять сканирование хостов в сети с проверкой подлинности, чтобы получить полные списки исправлений для определения работоспособности хостов, и обновление нашей автоматизации для решения этой проблемы было бы хорошим упражнением.
На этом все. Всем хорошего дня!