$put_perv_real = "/home/www/dvakompa-ru/dopol/"; ?>
https://habr.com/ru/company/selectel/blog/658175/
В последнее время участились случаи взлома сервисов, хакерских атак сайтов, утечки персональных данных. Не во всех кейсах это результат внешних атак, но ситуация подтверждает: сейчас как никогда важно убедиться в надежности периметра сети вашего сервиса.
Периметр любой сети — первый эшелон защиты, отправная точка построения системы защиты информации. Цель этого текста — показать подход, позволяющий провести инвентаризацию доступных «снаружи» и потенциально уязвимых сервисов. Мы оценим их уровень защищенности и выработаем план по повышению безопасности сетевого периметра.
К концу статьи мы повысим уровень защищенности от статуса «не знаю, как настроен сетевой периметр» до «опубликованы минимально необходимые сервисы с учетом необходимых настроек безопасности». В работе будем использовать бесплатное программное обеспечение.
Чек-лист для оценки защищенности вашей сети — под катом.
Анализ защищенности периметра нужно проводить на регулярной основе. Появляются новые уязвимости в ПО, изменяются конфигурации сетевого оборудования периметра и конфигурации публикуемых сервисов. Все это требует повторного сканирования.
В настоящее время есть «коробочные» решения по анализу периметра. Так, один их них проводит внешнее сканирование определенного пула IP-адресов по расписанию. По итогу формирует отчет по найденным уязвимостям и дает рекомендации по их устранению.
Мы же предлагаем более дешевый, но не менее эффективный способ настроить подобную систему самостоятельно.
Сетевой периметр в безопасности. Что мы подразумеваем под этим состоянием, к чему придем в завершение текста:
Анализ текущего состояния сети пройдет по следующим шагам:
Первый шаг в понимании топологии периметра сети — определение физической и логической схем сети. На этом этапе необходимо собрать максимальное количество информации о том, какое сетевое оборудование используется, как оно скоммутировано, какие белые сети используются на пограничном оборудовании.
Источниками информации об используемых белых сетях могут выступить:
Результатом сбора информации должен быть список выделенных вам белых IP-адресов. С помощью анализа конфигурации пограничного оборудования можно сразу определить перечень используемых IP-адресов – в этом случае в качестве целей сканирования следует рассматривать их.
Если у вас нет сетевой схемы или она устарела, рекомендуем начать ее составлять или актуализировать после этого этапа. Рабочая сетевая схема помогает при дебагах сети, планировании расширения, передаче роли администратора и других операциях сетью.
Теперь у нас есть список целей для сканирования, самое время подготовить хост, с которого будет осуществляться сканирование.
Так как мы будем проверять состояние периметра в роли внешнего злоумышленника, лучший вариант — развернуть виртуальную машину в облаке, снаружи периметра. Высоких требований к серверу нет — под подобные задачи подойдет процентный инстанс, например, из линейки Shared Line Selectel.
Требуемый состав ПО для сканирования, которое нужно установить на сервер, следующий:
Есть несколько вариантов подготовки тестового хоста. Вы можете:
sudo apt update && sudo apt upgrade && sudo apt install nmap nikto -y
Серверы с гибкой производительностью ядра – 10, 20, 50 %
Перед этим необходимо проанализировать возможное влияние сканирования на работающие сервисы.
Сканирование не предполагает деструктивного воздействия на боевые системы, но все же его лучше проводить в период наименьшей нагрузки на сервисы, предварительно оповестив системных администраторов.
До сканирования следует выполнить следующие действия:
Здесь и далее в примерах команд мы будем использовать IP-адреса x.x.x.x и DNS-имена servicename.test. При воспроизведении инструкции используйте определенный вами пул IP-адресов (в виде диапазонов или сетей) и DNS-имен веб-приложений.
Итак, у нас есть установленный сканер nmap, а белый IP-адрес добавлен в список исключений IDS/IPS. Интенсивность сканирования — количество запросов в единицу времени — можно регулировать, установив один из параметров ниже. Чем выше показатель, тем больше грузится сеть и ресурсы, к которым обращается сканер, также повышается вероятность обнаружения со стороны IDS.
Параметр | Описание |
---|---|
-T0,-T1 | Оба режима используются для обхода IDS, время сканирования будет сильно увеличено. |
-T2 | Снижает интенсивность сканирования, чтобы потреблять меньше ресурсов и меньше нагружать сеть. |
-T3 | Режим устанавливается по умолчанию. |
-T4 | Режим повышает интенсивность сканирования. Актуален, если вы используете быструю и надежную сеть. |
-T5 | Режим предполагает, что вы готовы пожертвовать точностью ради скорости. |
Далее стоит определиться со списком сканируемых портов. По умолчанию nmap сканирует первую тысячу портов.
Если после анализа настроек NAT и Firewall у вас есть полный список опубликованных портов, можно в параметрах сканирования указывать конкретные значения — например, -p 80, 443, 1194. Если такой информации нет, можно явно указывать все порты (-p 0-65535). В таком случае сканирование будет идти долго, но можно будет получить полную картину по опубликованным портам.
Статусы портов в результатах сканирования с помощью nmap могут быть следующими:
Статус | Описание |
---|---|
open | Приложение активно принимает соединения TCP, дейтаграммы UDP или ассоциации SCTP на этом порту. |
closed | Закрытый порт доступен (он принимает и отвечает на зондовые пакеты nmap), но его не прослушивает ни одно приложение. |
filtered | Nmap не может определить, открыт ли порт, потому что фильтрация пакетов не позволяет его зондам достичь порта. Фильтрация может осуществляться с помощью выделенного брандмауэра, правил маршрутизатора или программного обеспечения брандмауэра на хосте. |
unfiltered | Нефильтрованное состояние означает, что порт доступен, но nmap не может определить, открыт он или закрыт. |
open|filtered | Nmap помечает порты таким состоянием, когда не может определить, открыт порт или отфильтрован. Это происходит для типов сканирования, при которых открытые порты не дают ответа. Отсутствие ответа может также означать, что пакетный фильтр отклонил зонд. Таким образом, nmap не знает наверняка, открыт порт или фильтруется. |
closed|filtered | Это состояние используется, когда nmap не может определить, закрыт порт или фильтруется. |
На данном этапе все готово к началу сканирования. Ниже опишем несколько вариантов сканирования с записью результатов в файл nmap.txt.
Запустим команду:
$ sudo nmap x.x.x.x --open -T4 -p 0-65535 -v > nmap.txt
В результате сканирования обнаружены два открытых порта: 22/TCP, 80/TCP. 18 портов фильтруется, остальные закрыты. Первичное обнаружение открытых портов и работа по ним позволяет существенно сократить время более углубленного сканирования. Продолжая сканирование, будем указывать эти порты.
Попробуем узнать версии операционной системы и приложений, работающих на целевом хосте. Для этого запустим nmap со следующими параметрами:
$ sudo nmap x.x.x.x -p 22,80 -sV -O -v > nmap.txt
Этот вид сканирования проходит быстрее, чем предыдущий, за счет уменьшения количества сканируемых портов. Красным цветом выделены обнаруженные открытые порты, информация о сервисах, работающих на открытых портах, а также версия ядра Linux.
На основании информации о версиях ОС, ее ядра, а также версиях ПО можно понять, является ли используемые ОС и ПО устаревшими и есть ли в них известные уязвимости. За последней информацией можно обратиться к ресурсу CVE.
Nmap позволяет использовать скриптовый движок NSE — Nmap Scripting Engine. С его помощью можно существенно увеличить объем получаемой информации за счет применения множества разнообразных проверок, написанных на языке lua и добавленных в базу скриптов nmap. Дополнительную информацию о применении NSE можно найти здесь.
Рассмотрим пример сканирования с помощью скриптов категории vuln.
Запустим расширенное сканирование следующей командой:
$ sudo nmap x.x.x.x -T4 -A -p 22,80 --script “vuln” -v > nmap.txt
В результате сканирования найдена уязвимость веб-сервера Apache cve2011-3192, более подробную информацию о ней можно также найти здесь.
По известному DNS-имени веб-приложения можно также вывести список расположений, доступных из интернета. Это может быть полезным для проверки настроек разграничения доступа к определенным ресурсам.
Запустим следующую команду для сканирования веб-приложения, в котором необходимо авторизоваться для доступа к содержимому сайта:
$ sudo nmap --script http-enum servicename.test -v > nmap.txt
В результате видны каталоги и файлы сайта, которые доступны без авторизации.
Таким образом, после проведения сканирования удалось получить следующие данные об исследуемых хостах:
Возможности nmap не ограничиваются приведенными примерами. Для более широкого сканирования, например, можно использовать иные категории скриптов. Более полную информацию можно найти на сайте.
У нас есть список доступных белых IP-адресов и открытых в интернет портов. Также мы выяснили, какие сервисы доступны «снаружи», какие у них версии операционных систем и программного обеспечения. На данном этапе предлагаем провести сканирование опубликованных веб-приложений с помощью инструмента Nikto.
Nikto — сканер уязвимостей веб-серверов с открытым исходным кодом. Он выполняет всесторонние тесты, выявляя следующие уязвимости:
Nikto не может работать в скрытом режиме. Адрес, с которого будет производиться сканирование, необходимо добавить в исключения IPS, чтобы он не был заблокирован в ходе тестирования.
Список целей сканирования можно получить из DNS-записей, которые доступны в личном кабинете DNS-регистратора, или в настройках DNS-сервера (если вы управляете NS-сервером арендованной зоны).
Ключи, с которыми возможен запуск сканера, можно найти в man или в описании в репозитории одного из разработчиков продукта. Параметры запуска сканирования индивидуальны и зависят от особенностей архитектуры веб-приложений.
Самый простой запуск сканирования с сохранением результата в html-файл выглядит так:
$ sudo nikto -host servicename.test -o result.html -Format htm
Параметр | Назначение |
---|---|
-host servicename.test | целевой объект сканирования |
-ssl | использование ssl |
-Tuning 2490ab | расширенное сканирование, а именно: 2 — поиск миcконфигов и/или файлов по умолчанию 4 — поиск уязвимостей инъекций (XSS/Script/HTML) 9 — поиск уязвимостей SQL-инъекций 0 — возможность загрузки файлов на сервер a — отсутствие аутентификации b — определение версий ПО |
-o result.html | файл для записи результата |
-Format htm | формат записи результата (html) |
-Display V | расширенный вывод сканирования |
-C all | сканировать все cgi-dirs |
Команда запуска сканирования будет выглядеть следующим образом:
$ sudo nikto -host servicename.test -ssl -Tuning 2490ab -o result.html -Format htm
В результате сканирования получаем html-файл с подробно описанными результатами.
Рассмотрим часть отчета, чтобы понять принцип анализа результатов сканирования:
В каждом из блоков отчета содержится:
Информацию о соответствии записей OSVDB и CVE можно найти по ссылке.
В примерах указаны следующие описания:
Uncommon header 'x-frame-options' found, with contents: SAMEORIGIN
Информацию по данному описанию можно найти, например, на данном ресурсе. И кастомизировать параметр заголовка HTTP по результатам анализа.
Uncommon header 'x-robots-tag' found, with contents: none
Аналогично стоит проанализировать информацию по второму отмеченному в отчете заголовку, основываясь, например, на информацию ресурса. После тут тоже стоит кастомизировать параметр заголовка HTTP.
Полученный с помощью Nikto результат следует подробно изучить и внести соответствующие правки в конфигурацию прокси-сервера/веб-сервера/веб-приложения.
Итак, по результатам сканирований у нас есть следующая информация:
Для повышения уровня защищенности периметра сети необходимо проанализировать всю собранную информацию и определить план работ. Ниже приводим чек-лист, который можно использовать в качестве опорного плана. Учтите, что в зависимости от особенностей архитектуры периметра, используемых решений, построенных процессов он должен меняться.
Убедитесь, что вы можете поставить галочку напротив каждого из пунктов. Если нет, подумайте, как это исправить.
Регулярно следите за актуальностью используемых версий ОС и ПО. При появлении стабильных версий планируйте обновление и реализацию совместимости с имеющейся инфраструктурой.
Любая публикация порта в открытую сеть повышает риски нарушения ИБ публикуемого ресурса и всей инфраструктуры. Поэтому стоит публиковать ресурсы, только если вы убедились в реальной необходимости и предварительно настроили средства защиты.
Например, HTTPS вместо HTTP, SMTPS вместо SMTP, FTPS вместо FTP, SSH вместо TELNET, SNMPv3 вместо SNMP первой и второй версий.
Если требуется удаленное подключение к хостам для управления, лучший вариант — настройка vpn. Допустимый вариант: ограничение адресов для доступа к портам управления с помощью Firewall.
Перечень актуальных HTTP-заголовков, которые можно использованы для повышения уровня защищенности, можно найти, например, здесь. Публикацию ресурсов можно осуществить, например, с помощью nginx, настроив параметры HTTP-заголовков.
Можно использовать open source-решения (Suricata, Snort) или, например, обеспечить защиту сервисов через провайдера. Подобные решения Selectel предоставляет в рамках услуг по аренде межсетевых экранов и Аттестованного ЦОД.
Решения класса Web Application Firewall являются наилучшим вариантом для обеспечения безопасной публикации веб-приложений. Выбрать подходящий можно на сайте Selectel.
Для ограничения пула IP-адресов, которым разрешен доступ к критическим ресурсам, можно использовать фильтрацию по GeoIP на основе списка стран с целевой аудиторией для подключения. Однако этот подход не сработает, если атакующая сторона использует прокси-серверы в разрешенных странах.
Ранее мы подробно описывали, как реализовать подобную фильтрацию. Также ее можно осуществить с помощью параметров nginx.
Также многие Firewall поддерживают этот функционал — например, UserGate (можно арендовать в Selectel) и pfSense (можно установить на виртуальный или выделенный сервер).
Для SSH, например, можно найти информацию о настройке fail2ban здесь.
Реализация возможна, например, с помощью nginx в качестве обратного прокси-сервера для публикации ресурсов.
Базовую защиту от атак обеспечивают современные межсетевые экраны — например, UserGate. Для более серьезной защиты нужно приобретать отдельные услуги.
Регулярное внешнее сканирование ресурсов поможет поддерживать уровень ИБ на высоком уровне. Можно развернуть свой хост для сканирования, как было описано в тексте, или, например, воспользоваться соответствующей услугой в Аттестованном периметре ЦОД Selectel.
Актуальную информацию можно получать, например, из следующих источников — список новых уязвимостей ПО или БДУ, а также на сайтах вендоров конкретных решений.
Например, пароли со следующими характеристиками: длина не менее 12 символов с алфавитом, содержащим строчные, заглавные буквы, цифры, спецсимволы.
Необходимо настроить сбор логов межсетевого экрана, систем обнаружения и предотвращения вторжения, логи сервисов и ОС. Для более эффективного реагирования должна быть настроена корреляции всей собранной информации. Для мониторинга информационной безопасности можно использовать open source-решение, например Wazuh, или воспользоваться «коробочным» решением, существующим на рынке.