Руслан Рахметов, Security Vision
Для реализации киберугроз злоумышленники эксплуатируют уязвимости - недостатки разработки, внедрения, настройки информационных систем или средств защиты. Использование уязвимостей - это один из самых популярных методов осуществления кибератак, наряду с социальной инженерией и использованием вредоносного ПО. Поэтому важно своевременно выявлять уязвимости и обрабатывать их - устанавливать патчи, удалять устаревшее ПО, внедрять компенсирующие меры. Ключевыми инструментами для выявления уязвимостей являются сканеры защищенности (сканеры уязвимостей), о которых мы расскажем в данной статье.
Начнем с определения: в соответствии с положениями стандарта ISO/IEC 27000:2018, уязвимость - это слабое место актива или средства контроля и управления, которое может быть использовано атакующими для реализации киберугрозы. В стандарте ГОСТ Р 56546-2015 уязвимость описана как недостаток программно-технического средства или информационной системы в целом, который может быть использован для реализации кибератак. Следует учитывать, что уязвимости - это не только привычные нам ошибки, допущенные при разработке ПО, но и небезопасные конфигурации, ошибки при проектировании информационных систем, недостатки организации корпоративных процессов. Уязвимости могут возникать в системном, прикладном, специальном ПО, в микропрограммах, сетевом оборудовании, средствах защиты. Основная характеристика уязвимости - это степень её опасности, которая рассчитывается по системе CVSS, при этом следует работать с новой версией CVSS v4, поскольку в ней появились дополнительные метрики для более детального описания свойств уязвимости.
Сканер уязвимости, или сканер защищенности - это инструмент для обнаружения уязвимостей в инфраструктуре компании и на её сетевом периметре (например, в веб-приложениях). Задача сканера - найти уязвимости на устройствах в заданном сетевом диапазоне и сформировать отчет, в котором будут отображены уязвимости и места их обнаружения (например, устройство srv-dc01.domain.local, системная библиотека C:\Windows\system32\drivers\srv.sys, уязвимость CVE-2017-0144 "EternalBlue", CVSS Base Score: 8.8). Кроме того, сканеры должны предоставлять информацию или ссылку на рекомендации по устранению уязвимостей - например, путем установки обновлений, применения временного workaround, отключения или удаления уязвимого компонента. Более продвинутые решения - такие как системы управления уязвимостями, которые часто объединены со сканерами защищенности в единое решение - позволяют вести учет активов, строить ресурсно-сервисную модель инфраструктуры, контролировать параметры безопасности устройств, выполнять комплаенс-проверки соответствия активов различным требованиям, визуализировать состояние защищенности инфраструктуры, строить детальные отчеты.
По принципу работы сканеры уязвимостей разделяются на следующие основные типы:
1. Считывание баннеров, применение скриптов для определения уязвимостей: сканеры, которые применяются для анализа установленного ПО без аутентификации, выполняют сканирование сетевых портов целевой системы и пытаются определить версию ответившего на сетевой запрос софта. Подобный способ часто называется сканированием методом «черного ящика» или «пентестом», поскольку сканер не получает никакой предварительной информации об активе и не аутентифицируется на нём для детального сбора информации - это подходит, в частности, для эмуляции действий атакующего, у которого нет валидные учетных данных для удаленного подключения к интересующему устройству. Например, веб-сервер может отвечать на любое внешнее подключение сообщением, которое содержит название веб-сервера и версию (например, Microsoft IIS 8.5, Apache HTTP Server 2.2.15 и т.д.). По информации о версии приложения сканер определяет, есть ли для неё опубликованные уязвимости. Кроме того, некоторые сканеры защищенности используют скрипты для более точного сканирования сети, определения уязвимостей и выполнения пентестов: например, сканер Nmap использует механизм NSE (Nmap Scripting Engine) с поддержкой Lua-скриптов, а сканеры Nessus и OpenVAS поддерживают разработку скриптов на языке NASL (Nessus Attack Scripting Language).
2. Аутентифицированное сканирование: сканеры используют валидную учетную запись для удаленного подключения к сканируемому активу и сбору информации об установленном ПО. Подобный способ часто называется сканированием методом «белого ящика» или «безагентным сканированием», а уровень привилегий сканирующей учетной записи позволяет собирать информацию с различной глубиной и детализацией. Например, удаленное сканирование с помощью аккаунта с правами локального администратора позволит получить максимум информации о системе, однако в случае, если сканируемое устройство заражено ВПО, то атакующие смогут получить доступ к данной учетной записи и развить свою атаку. Для ограничения прав сканирующей учетной записи используются различные технологии (например, для Windows - LAPS, для Linux - sudo wrappers), кроме того, можно настроить гранулярные права доступа непривилегированной учетной записи - об этом мы писали в статье на Хабре.
3. Сканирование с помощью агента: такое сканирование предполагает либо автоматическую установку агента сканирования на сканируемой системе, либо ручную предварительную установку. Агент сканирования - это небольшая утилита, которая получает задачи сбора данных об установленном ПО от сервера сканирования, а дальше выполняет их локально на сканируемом устройстве. Подобный метод, как правило, достаточно быстр и функционален, однако в этом способе есть и недостатки: во-первых, присутствие агента на каждом устройстве нужно предварительно обеспечить; во-вторых, работа агента может привести к некоторому снижению производительности устройства; в-третьих, заражение сервера сканирования может привести к тому, что агенты могут начать выполнять вредоносные команды атакующих (например, удаление всех установленных программ).
4. Ретро-сканирование: данный метод использует собранные предварительно данные об установленном на активах ПО и его версиях. Как только появляется информация о том, что определенная версия некоторого софта уязвима, сканер анализирует составленный перечень ПО и находит активы, на которых установлены такой уязвимый софт. Подобный косвенный метод позволяет достаточно быстро определить уязвимые активы без проведения внепланового скана или ожидания технологических окон для сканирования. Однако, пользователь мог уже обновить или удалить ПО самостоятельно, а инвентаризационная информация об установленном ПО уже могла устареть. Поэтому для критичных уязвимостей на важных активах рекомендуется проверять наличие (и последующее обновление) уязвимого ПО прямыми методами - с помощью аутентифицированного сканирования или через агента.
Кроме описанного функционала, важными характеристиками сканера защищенности являются:
1. Поддержка различных реестров уязвимостей: помимо поддержка классических CVE и NVD, сканеру важно поддерживать и реестр БДУ ФСТЭК России, который содержит уникальные данные об уязвимостях российского ПО, а также уязвимости, которые были обнаружены отечественными исследователями, но по различным причинам не внесены в реестры CVE и NVD.
2. Поддержка широкого круга российских и зарубежных продуктов: для сканера важно корректно работать с новыми отечественными ОС и определять наименование установленного ПО и его версий. Также сканер должен выявлять и portable-версии установленных программ - для этого потребуется доступ к определенным директориям на сканируемом устройстве.
3. Поддержка систем контейнеризации: технологии контейнеризации и управление ими (например, Docker, Kubernetes, podman) получили массовое распространение, поэтому важно обнаруживать уязвимости в образах, запущенных и остановленных контейнерах.
4. Поддержка режима пентест: важно, чтобы сканер позволял обнаруживать и контролируемо проверять возможность реальной эксплуатации уязвимостей с использованием опубликованных эксплойтов. Некоторые сканеры также позволяют проверять стойкость паролей за счет брутфорс-движка, а также анализировать используемые приложением алгоритмы шифрования.
5. Поддержка веб-сканирования: продвинутый сканер может поддерживать проведение проверок на распространенные веб-уязвимости, проверять раскрытие внутренней информации и настроек сайтов, выполнять подбор слабых паролей и перебор пользователей.