Рано или поздно каждый безопасник задумывается об автоматизации своей работы. Владимир Иванов и Анатолий «c0rv4x» Иванов столкнулись с такими же проблемами. Они начали с небольших шагов по автоматизации и мониторингу рутинных задач пентестинга, а затем превратили свои разработки в сервис ScanFactory.
Неважно, занимаетесь ли вы аудитом, работаете безопасником или участвуете в программах bugbount — на первом этапе теста на проникновение вы часто будете выполнять одни и те же подготовительные шаги: сбор поддоменов, сканирование IP-адресов, перебор директории и так далее. Автоматизировать все это очень заманчиво. Я установил параметры, нажал кнопку «сканировать» — и можно продолжать заниматься своими делами, пока не придут отчеты.
Создатели ScanFactory, как и другие опытные пентестеры, тоже столкнулись с этой проблемой и сначала начали решать ее самостоятельно, а потом это превратилось в нечто большее.
Project Black — опенсорсный проект, созданный Анатолием Ивановым во время работы в Positive Technologies.
«ScanFactory создавалась в первую очередь как продукт, призванный сэкономить время и деньги компании. Он будет полезен как blue team, так и red team — людям, которые выполняют одни и те же задачи в области тестирования на проникновение в инфраструктуры », — говорит Владимир Иванов. «Мы очень гордимся своим творением», — продолжает он. «И даже немного пугающе по поводу возможностей, которые нам предоставили, поскольку мы покрываем большинство базовых сценариев тестирования на проникновение».
ScanFactory сейчас находится в стабильной бета-версии и уже используется в компаниях в качестве пульта дистанционного управления. Как и в любом B2B продукте, все вопросы решаются индивидуально с клиентом, проект строится под его нужды и, по словам разработчиков, запускается в течение одного дня. Они также готовы создавать и интегрировать функции, которые могут понадобиться крупному заказчику.
Что можно автоматизировать?
Если вам интересно, что вообще делает пентестер, то в общих чертах вы можете ответить следующим образом: исходя из опыта, он ищет вариант взаимодействия с приложением, не предусмотренный логикой, и попытки продвинуть его до полной уязвимости. Поэтому первая задача — собрать как можно больше точек входа в исследуемую инфраструктуру.
На этом этапе выявляется одна из слабостей человека: он не может построить в голове схему из всех вариантов, где могут быть потенциальные уязвимости по внешнему периметру. Возможности человека ограничены!
Поэтому бывает, что некоторые слабые места не замечаются исследователями и долгое время остаются незамеченными. При тестировании очень важны личные качества человека (например, трудолюбие) и опыт: с какими вариантами необычного поведения приложений он сталкивался и какие методы их использования уже использовал.
Для автоматизации, конечно же, существует множество программ, и выбор инструментов есть почти в каждой области. В нашем распоряжении веб-сканеры (Burp, Acunetix, Netsparker), сканеры инфраструктуры (Nessus), а также всевозможные сетевые сканеры, дирбастеры, сканеры CMS и многое другое. Практически каждый день появляется что-то новое. Если автоматизировать все, что существует, это значительно расширит охват именно этого графа уязвимостей.
При этом перед одним человеком стоит задача совместить все эти средства. Грубо говоря, выходные данные одной программы должны поступать на вход другой, а результаты должны поступать в следующую. Однако эти программы не имеют единого высокоуровневого интерфейса и обычно не разрабатываются как часть пакета. Таким образом, автоматизация становится нетривиальной задачей. «У нас есть программно связанные программы, которые ранее никто не мог связать», — с гордостью говорит Владимир Иванов.
Идея решения этой проблемы лежит в основе ScanFactory. В общем, ScanFactory — это SaaS для автоматической оценки безопасности внешней инфраструктуры. Он сканирует периметр, обнаруживает и сообщает о проблемах безопасности, а также отслеживает новые проблемы в будущем.
Как работать со ScanFactory
Во-первых, представим себе испытание на проникновение в вакуумную сферическую область. Клиент утверждает, что область действия охватывает все поддомены основного веб-сайта компании, например, * .company.corp.
Наши действия будут следующими.
- Составляем список всех поддоменов и получаем их IP-адреса.
- Запускаем сканер портов, например Nmap. На вход отправляем IP из предыдущего шага, а на выходе получаем открытые порты и список запущенных сервисов.
- Найденные веб‑сервисы отправляем в дирбастер, чтобы собрать интересные файлы и директории, а на бинарных — брутим пароли.
- Проходимся по веб‑сервисам краулером с целью собрать формы, домены и HTTP-запросы. Для каждого нового домена повторим алгоритм с шага 2.
- HTTP-запросы отправляем в фаззер, чтобы найти скрытые параметры и проанализировать их. И дальше в таком же ключе.
При использовании ScanFactory все эти действия выполняются в несколько кликов. Создаем новый проект и указываем скоуп со звездочкой: *.company.corp.
Создание нового проекта в ScanFactory
Здесь же можно указать черный список IP-адресов и доменов, находящихся вне скоупа.
Затем на странице проекта достаточно просто нажать на кнопку запуска.
Страница проекта в ScanFactory
Теперь вы можете сварить кофе и заняться другими делами, пока ждете результатов. Вы можете увидеть пример отсканированного проекта с обнаруженными пробелами на странице Live Demo.
Страница ScanFactory с найденными уязвимостями
Как ScanFactory ищет сложные уязвимости
Вот как Владимир Иванов описывает сценарий, в котором ScanFactory позволяет найти, проверить и разработать цепочку из нескольких уязвимостей, которые, скорее всего, останутся незамеченными после сканирования вручную:
У нас есть основанный на Selenium краулер, который ходит по сайтам. Он заходит на сайт, рендерит страницу и видит, что там автоматически подгружается файл на JS. Краулер смотрит внутрь него и видит, что в комментариях к скрипту разработчик оставил ссылку или домен какого‑то тестового стенда, который еще нигде не встречался и о котором не было известно.
Этот домен помещается в базу. Далее планировщик видит, что в базе появился новый домен. Он берет этот домен и создает список задач уже для него. Сканируются порты, и дирбастер находит скрытую папку со скриптами. В одном из них — давно забытая POST-форма. Специальная утилита находит в форме скрытый параметр, при отправке которого ответ на странице изменится.
Полученный HTTP-запрос со скрытым параметром сохраняется и отправляется в BurpSuite, который и находит SQL-инъекцию.
Еще один сценарий уязвимости, которую может обнаружить ScanFactory
Во время одного из первых тестов ребята столкнулись с проблемой сканирования сайтов с большим количеством похожих страниц. Например, в блогах и на новостных сайтах они могут исчисляться тысячами. Следовательно, похожие страницы следует игнорировать, а атаковать только одну. Для сравнения страниц между собой ScanFactory использует технологию нечеткого хеширования, основанную на алгоритме SimHash, используемом Google.
info
SimHash на основе элементов HTML-дерева считает хеш‑функцию так, что у двух похожих страниц будут похожие хеши. Если страницы отличаются меньше, чем на пороговое значение, то соответствующие запросы можно не сканировать дважды. Но как определить пороговое значение — тема для отдельной статьи.
Кроме того, система автоматически генерирует специальные словари для каждого клиента. Когда он просматривает сайты, поисковый робот извлекает со страниц часто встречающиеся ключевые слова. Результатом является список слов, относящихся к компании и отрасли. Эти словари используются при подборе паролей, а также для поиска скрытых поддоменов.
Архитектура ScanFactory
Внутри ScanFactory есть сложная система взаимодействующих утилит пентестера, их более 20. Каждая утилита запускается в отдельном контейнере Docker, а ядро управляет системой. Ядро точно описывает, как происходит сканирование, всю последовательность запуска программы, частоту каждого и другие параметры для каждого.
Список используемого софта
- Burp Suite + 12 плагинов
- Nessus
- Amass + шесть платных API
- GoAltdns
- Nmap
- Nuclei
- Краулер на основе Selenium
- Dirsearch
- ffuf
- Patator
- SubFinder
- subjack
- waybackurls
- WPScan
Важная задача, которую удалось решить разработчикам, — это расстановка приоритетов задач. ScanFactory основан на очередях. Как только появляется HTTP-запрос, в котором, например, есть форма с интересными параметрами, задача его обработки становится приоритетной — сервис просканирует страницу раньше других.
Каждая утилита, бесплатная или коммерческая, имеет оболочку Python. Он подписывается на очередь и получает новую задачу через очередь — ссылку на внутренний объект. Есть разные типы объектов: проекты, хосты, HTTP-запросы и другие. Wrapper принимает их, анализирует и выводит данные, которые сводятся к одному типу, а затем проходит через серию внутренних микросервисов. В итоге данные сохраняются в MongoDB.
Все дополнительные функции реализуются через микросервисы, включая вышеупомянутое сравнение похожих страниц, поиск данных в ответе HTTP и так далее. Например, при обнаружении нового домена необходимо проверить, входит ли он в область действия, определить приоритет его сканирования и выполнить другие операции. Все это делается с помощью микросервисов.
Чтобы упростить масштабирование, разработчики используют Kubernetes. Эта технология позволяет ScanFactory масштабировать ресурсы в зависимости от количества задач в очереди. Например, если нужно просканировать пул IP-адресов, для этого сначала увеличивается число контейнеров Nmap, потом число контейнеров с обработчиком HTTP-ответа, а затем ресурсы освобождаются, пока система ждет следующих задач.
За два года разработки ребятам удалось решить огромное количество возникающих проблем.Разработка модели данных. Как оптимально хранить HTTP-запросы и ответы? Установка приоритетов для задач сканирования. Как обнаружить аномалии при фаззинге? Оптимизация сканирования больших проектов. Как нормализовать результаты разных программ?
Конкуренты
«Наша команда постоянно следит за сообществом информационной безопасности на предмет новых методов решения проблем. Это важный процесс, потому что каждый день появляется что-то новое, и мы хотим, чтобы наш продукт представлял собой сборник лучших технологий из того, что у нас есть сейчас », — говорит Анатолий Иванов.
менно поэтому архитектуру интеграции новых утилит разработчики стараются сделать максимально простой, чтобы можно было добавлять новую утилиту за несколько дней. «Новые решения, программы или технологии легко интегрировать. Будь то самописная утилита, свежий эксплоит или набор репортов с багбаунти», — объясняет Анатолий.
Главное отличие ScanFactory от конкурентов — это как раз прозрачность в выборе софта и алгоритмов работы. Чаще всего такие решения проприетарные, например Nessus фирмы Tenable или Qualys WAS. С ними никогда не знаешь, что они будут делать после нажатия на кнопку Scan.
«Чаще всего в таких решениях каждый объект внешней инфраструктуры трактуется как отдельный, то есть никак не связан с другими», — говорит Анатолий Иванов. — Грубо говоря, запускается один большой контейнер, и сотрудники выполняют один и тот же контрольный список, составленный разработчиком для одного домена. Существует условный список уязвимостей безопасности, которые они пытаются найти. Мы также пытаемся научить систему связывания разнородных данных, превращая ее в уязвимость, как это делает пентестер ».
Впечатления
С точки зрения пентестера такой сканер, как ScanFactory, является потенциальным помощником, которому можно было бы доверить рутинную часть аудита. Например, я всегда хотел автоматизировать сбор и запуск всех типов сканеров на слое «установите область и нажмите кнопку».
Особенно интересно было посмотреть, как одна за другой запускаются и выполняются задачи и утилиты. Все это можно просматривать в реальном времени с помощью графиков и статистики. После завершения сканирования вы получите график и статистику обнаруженных уязвимостей и их уровня серьезности. График показывает, когда и какие ошибки были обнаружены.
Результаты сканирования проекта. Статистика найденных уязвимостей и их уровня опасности
Впрочем, наглядности в представлении найденной информации могло бы быть и побольше. Я бы не отказался видеть всю просканированную инфраструктуру компании: что и на каком IP или домене нашлось. Сейчас можно просматривать и выгружать только то, что система посчитала алертом. В этот же список попадают и результаты работы утилит.
Но ScanFactory позволяет просматривать и загружать любые предупреждения, обнаруженные во время сканирования. Скачивание предупреждений — очень полезная вещь, особенно для дальнейшей автоматизации. Например, сканер можно интегрировать с Jira, чтобы любые обнаруженные проблемы немедленно регистрировались там.
Найденные поддомены в алертах ScanFactory
В целом, конечно, этот продукт не совсем для меня. Он был создан как инструмент для компаний, которые хотят усилить безопасность своей инфраструктуры и иметь возможность отслеживать возникающие проблемы безопасности.
Например, если из-за недосмотра администратора в производственную среду внезапно начинает поступать что-то, что не должно просматриваться, сканер обнаружит это и немедленно уведомит вас. Проблема не продлится до следующего аудита или, чего доброго, взлома. А аудит, кстати, не дает всех гарантий: люди по-разному думают, используют разные инструменты, обращают внимание на разные аспекты и могут что-то упустить.
ScanFactory, по сути, берет на себя рутину, которую обычно выполняют безопасники со стороны поставщика. Отдать его роботам — разумное решение. Пусть ходят по периметру 24 часа в сутки, 365 дней в году!
Никто не говорит, что ScanFactory заменит плановые аудиты. Автоматизация не найдет сложных логических ошибок, и каждая система не будет обрабатывать препятствия, такие как аутентификация, и не будет распространять все методы API (хотя они работают над этим). Сканер — еще одно хорошее и надежное звено для создания и поддержки безопасного продукта.