# IDS и IPS test системы актуально на апрель 2021
Схема для работы нужна такая:

С нашей win7-машинки будем подключаться к FW2.
FW-ы нужно обновить, т.к. IDS и IPS системы рассчитаны на последние версии FW-лов. Запускаем FW2.
После загрузки видим, что у нас версия FW2 – 2.4.4, а нужна минимум 2.4.5

Для обновления входим в консоль выбрав пункт 8 и пишем там: pfSense-upgrade. Он обновит данные и все, что необходимо из репозитория. Будет вопрос  - Y (хотите ли обновить пакет)
В процессе он перезагрузится несколько раз, установит всё необходимое и мы получим
обновленный pfSense
**IDS и IPS системы - теория**
У нас есть решение в виде сетевого экрана – пакет-FW (IP-paket-FW), так называемый нетворк-FW (сетевой FW) – для того, чтобы можно было фильтровать определенного рода сессии
Предположим, что у нас есть два интерфейса (черные квадратики) – WAN и LAN
FW pfSensa смотрит только на input трафик на обоих интерфейсах. Ему не нужно смотреть на output трафик – он его спокойно разрешает: ему не важно куда он движется, как он движется, что с ним происходит. Основной принцип – если трафик зашел в pfSense – значит дальше он выйдет! И не нужно его контролировать: как фэйс контроль в клубах – только разрешение на вход требуется.
Между интерфейсами есть форвад-трафик (форвардинг) – он вообще никак не контролируется
 
(на виндом FW output –трафик тоже смотрится)
FW – это устройство на уровне L4 – на транспортном.
На уровне L4 можно контролировать только это:
- source IP
- destination IP
- протокол
- порты
Системы IDS, IPS – это тот же самый FW – та же самая железка, таким же образом работает, таким же самым образом контролирует. Но, внутри появляется новый движочек:
IDS/IPS – это система, которая начинает смотреть на трафик, проходящий через нее.
IDS-система – система, которая только обнаруживает: т.е. увидела трафик и кричит «ALARM, ALARM, печаль-беда» и ничего не делает
IPS- система – система, которая кричит «Печаль-беда», а потом еще и блочит.
Но у каждой системы есть свои ++ и --
Например, в IPS можно спокойно залочить себя же сканированием (начнем сканировать -> система распознает, залочит и дальше мы не сможем ничего делать – даже зайти с этой же машинки на FW и отключить). Останется только сбросить настройки FW ( а если настраивали лет 50? + а если еще и бэкапов нет?? )
Например: идет трафик внутри инф-ры из LANa в WAN и начинает система смотреть внутрь трафика

Теперь посмотрим как будет выглядеть IP-пакет: у него заголовок head, data, crc – сумма
В заголовке: destin IP/ sours IP – адрес откуда /куда отправлено ; возможно есть протокол, чтобы посмотреть на уровни L4 и есть данные, связанные с meta-данными
++ сама DATA – содержимое для передачи
FW может смотреть только на первые две части (голубые):

Но есть системы, которые могут смотреть абсолютно на весь IP-пакет:

При анализе IP-пакета «вычисляется» аномальное поведение – сравнивается с неким эталоном: но тут есть момент – если сравнивать с нормальным «правильным» поведением – это будет огромный список. Поэтому - легче проводить сравнение с «неправильным» (сравнение с вредоносной частью, как делают антивирусы - некая сигнатура – кусочек вредоносного кода) В нашем случае мы можем выделить кусочек вредоносного трафика.
И, если этот кусочек будет обнаружен и опознан в нашем трафике, мы сможем сказать, что трафик – вредоносный.
Возьмем кусочек трафика:

И увидим, что здесь есть фрейм, и пакеты, и определенные 10-ричные значения. Мы можем взять кусочек трафика (как образец сигнатуры) 
и сказать: «что если есть такая последовательность данных, то трафик – вредоносный».
Вопрос: с чем нам сравнивать?? Где взять такие «образцы»? У производителей оборудования и антивирусов есть свои базы с вредоносными кодами и сигнатурами. Но мы имеем дело не с кодом, а с трафиком. Есть опенсорсные решения, есть решения, связанные с производителем оборудования (которые делают IDS/IPS- системы ) – они предоставляют части вредоносного трафика – это так называемые БАЗЫ ПРАВИЛ. Это не сигнатуры, это правила! Таких ПРАВИЛ для IDS/IPS- систем много. Будем настраивать эти правила.
FW2 обновился – видим версия 2.4.5

Пока система работает как обычный FW. Сделаем из него Next Generation FW
Открываем win7-машинку и коннектимся к нашему FW2.
Логинимся в pfSense. Фактически у нас здесь сейчас чистый FW – наша задача: сделать из него систему, которая будет детектить (а возможно и предотвращать) вредоносный трафик.
Нам придется настроить систему и попытаться ее атаковать, чтобы посмотреть как она будет работать. Атаковать мы будем сначала сканированием (просканируем изнутри через кали-линекс)
Переходим в package-менеджер:
 будем ставить доп.пакет на avaliable packages.
Имеется большое количество пакетов для установки: можно выбрать нужный, + есть поиск по названию:

На FW2 ставим: сурикату
 далее устанавливаем.
Заходим на FW1 и переходим в shell (пункт 8) - обновляем первый FW
Возвращаемся к FW2, и переходим к настройке системы.


Сначала делаются Глобал настройки, потом апдейты и только потом уже – интерфейсы. (сначала задают параметры – глобал- откуда брать обновления; потом уже обновляем базы при необходимости и только после этого добавляем интерфейс)
У сурикаты есть база, откуда она может брать правила. Базы в виде - install ETOpen Emerging Treats rules (актуальны здесь и сейчас, PRO-версия платная)
И есть еще правила install snort rules но по подходят только для версии 2.9 (для версии 3 – уже нет)
**snort oinkmaster cod** - регистрационный код для авторизации на сайте, чтобы использовать правила
Регистрация по голубой строчке: 
Открываем и регистрируемся на сайте Snort (если сайт не грузится – можно автоматически получить днс, или прописать 8.8.8.8 в настройках интернета)
При регистрации не ставить нижние галочки – иначе заспамят:

После регистрации, заходим на акк и выбираем oinkcode:

(если одновременно обновляться с одного и того же оинкода на несколько пользаков – акк на время уходит в бан – банят всех участников)
Копируем код и вставляем в настройки в соответствующее поле: 
И еще нужен файлик: snort rules filename - Это нужно имя файла – вот такое, например: 
Имя можно взять на сайте снорта: переходим в downloads
Здесь есть такая штучка, как Snort v2.9 –

В списке копируем последнюю строчку с названием:

И вставляем ее в соответствующее поле в настройках сурикаты:

У сурикаты включаем бесплатные правила и правила снорт:

Нужно будет указать, что есть такая версия как: комьюнити правила
  - чтобы старые правила (недействительные ) скрывал

Теперь смотрим ниже:
Интервал апдейта: можно выбрать 1 день и время для обновления

 - когда обновились правила – он обновляем их «на лету» и не нужно перезапускать сервис
 - можно к сурикате привязать гео-апдейт – будет показывать с какой стороны идет атака
Лицензионный ключ:
 внести в pfSense (копипаст тут не работает)
Итог:

Далее, есть еще одна важная вещь: Включить запись системных логов, чтобы можно было с ними работать и отправлять

Сохраняем и переходим в updates и нажимаем – апдейт:

После установки обновления сурикаты – переходим в interfaces

Как работают интерфейсы
Система IDS/IPS может слушать трафик либо на LAN-интерфейсе, либо на WAN-интерфейсе. Это нужно смотреть куда идет у нас тот или иной трафик ( с какой на какую сеть) IDS/IPS будет фильтровать, или обрабатывать, либо еще что-то с ним делать. Правила как раз и сделаны, чтобы просматривать: где, на каком интерфейсе вся эта штука работает
У нас есть:
 - интерфейс е1 – на самом деле не е1, а е1/1, е1/2, е1/3 и т.д. (внутренние интерфейсы). Когда на внутренний интерфейс ставится какой-то анализатор трафика (снорт или суриката), а злоумышленник сканирует всё, что внутри на уровне L2? То наша система покажет нам, что кто-то пытался нас атаковать. Но обнаружить мы сможем это не сразу, потому что пропускная способность интернета примерно 300мбит/сек – а системе нужно обработать каждый пакетик трафика, а это требует много ресурсов и скорость фактически должна сильно падать. Этого не происходит, потому что процесс сравнения происходит «выборочно». В правилах для любой IDS/IPS системы (суриката, снорт или другая) есть определенного рода фильтры: сначала идет фильтр, а потом то, по чему мы это все будем сравнивать
Настраиваем интерфейсы:
Добавляем интерфейс (кнопка add) вписываем LAN:

Далее настройки, связанные с логированием: они нужны, чтобы понять, что данный конкретный лог (когда к вам приходит список логов) относится к безопасности системы. Можно выставить приоритетные логи – со стороны сурикаты есть смысл выбрать для них название – ALERT и раздел – SECURITY
 - суриката может извлекать из трафика определенного рода объекты (например – передаете картинку и суриката может эту картинку спокойно вытащить)
Получаем:

eve output setting -корневая фишка сурикаты: мы можем со стороны сурикаты напрямую без разного преобразования и парсинга логов, отправлять сразу в Json ( в систему мониторинга безопасности системы). В нашем случае, нам это пока не нужно, потому что у нас нет внешнего сервера, на который нужно отправлять данные
 здесь мы можем сделать блок-offenders – фактически включить IPS – режим
 - тюнинг производительность. Трогать не рекомендуется, только в редких случаях

 - есть определения у любой IDS/IPS системы, как home и Network – т.е. какая твоя сеть внутренняя и какая External. Зачем это? - в правилах есть особенность, что там указывается home network и external network (либо все сети, либо же home network и external) – бывает такое, что экплойт работает снаружи, и смысла проверять трафик внутри нет… и IDS/IPS системы и работают так, чтобы не весь трафик сканировать, а только определенную его часть. И эта часть и является элементом фильтрации.
Здесь мы указываем оба по дефолту, но всегда можно посмотреть какие у нас есть (выбор по стрелке) –
 
Итоговая:


СОХРАНЯЕМ.
Получаем такие настройки интерфейсов:






Теперь посмотрим настройки для апдейтов: Они у нас обновились

Глобальные настройки тоже все есть

Мы настроили сурикату, но не выбирали правила по которым она будет работать. Зайдем в настройки системы – карандашик –

У нас есть LAN settins - его настроили (глобал для LAN сеттинга) и есть LAN categories - это фактически та ситема – какие правила будут работать на том или ином интерфейсе. Для надежности – выбираем ВСЕ! selecr all -> save

Посмотрим, для примера, как выглядит правило: 
Откроем и увидим код:

Итак, в правиле есть:
- «что делать»: действие, которое выполняется - Alert или дропать
- протокол – **udp**
- с какой сети и до какой сети **$HOME_NET**
- по какому порту ANY
- и в какую сеть это всё выходит: **$EXTERNAL_NET any**
Эта часть очень сильно похожа на FW.
Далее: есть такая часть как меседж - **(msg:"ET p2p bi...** - основная часть нашей сигнатуры (правила) . правило может состоять из нескольких сигнатур (как наш пример) –

смотрится сам запрос, чтобы определить относится ли наш трафик к нашему запросу  - эта часть легло копируется, и его можно просмотреть.
У нас есть трафик, и если в трафике есть определенная последовательность данных, то это условие может сработать
след.условие - depth:14 - длина 14
и еще одно: content: 
Есть 2 глобальных условия, которые позволят за-алертить систему, чтобы не было ложно-положительных срабатываний
Чтобы система не сработала «просто так» есть еще один контент: на каком расстоянии от начала данных
distance:55
И следующая часть:  - тип трафика, который идет внутри – здесь определяются дополнительные условия, которые работают в этом правиле
 - где можно посмотреть данные об уязвимости, (подробнее )
**Главное:  - как идет трафик: должен идти из домашней сети во внешнюю сеть**
Если в правили все прописанные (нижние) условия удовлетворяются, а  нет, то в этом случае правило у нас не сработает
Как FW система бы работала, если бы не было части в скобке (со 2 строчки и до конца)

Правила можно увидеть по пути: интерфейсы – настройка – LAN Rules: все, которые у нас есть – видно какие включены, какие нет
 
Главное: не включать на pfSense чтобы он их отобразил. При данном действии pfSensу встанет в стопор и ничего нельзя будет сделать
Здесь мы можем выбирать правила из категории «правил»

Можем запустить нашу сурикату: посмотрим как всё выглядит в работе

Теперь можно перейти в алерты: и увидим какие алерты начинают сыпаться

Видим, что есть алерты, просто информирующие нас, что чек-сумма не совпадает и такие можно отключить, чтобы не засоряли важные данные:

После отключения надо нажать clear чтобы ничего не осталось
когда наша суриката обнаружит, что есть какой-то вредоносный трафик – она запишет определенную информацию ДО, и определенную информацию ПОСЛЕ (просто запишет тот кусочек информации, который обнаружила)
**Абсолютно то же самое нужно сделать и для нашего снорта**
Заходим в pfSense FW1 и делаем то же что и для FW2:
Устанавливаем:

На двух наших FW-ах устанавливаем две разные системы и будем сравнивать какая удобнее и лучше работает: суриката или снорт.
Переходим: сервисы - снорт
Меню настроек такое же: но дальше по-другому

 код вставляем тот же ( с сайта)

 - по ID-шнику приложения можно смотреть, что за приложение генерит этот трафик (круто находит
торенты )
 и 
Сохраняем, переходим в апдейт и запускает обновление:

Видим, что все правила обновились

Настраиваем
Здесь немножко больше правил...
Переходим snort interfaces - Здесь будем делать на е0 интерфейсе, на внешнем. И посмотрим как внешний интерфейс будет себя вести

На внешнем интерфейсе ни в коем случае не размещаем IPS-систему, иначе она зарежет весь трафик – один запрос сможет вывести всю систему из строя
Переходим на FW1 – проверяем глобальные настройки – что мы сделали все правильно – проверить апдейты – что всё обновилось и только после этого можно настраивать
Добавляем интерфейс: и тут будет WAN Em0



 - позволяет сделать IPS систему (блокировать ненужный трафик)
Дaлее: сеттинг отоичается от сурикаты (значительно проще – меньше настроек режима). Ничего не трогаем -


Сохраняем и переходим в категории: какие правила мы будем прописывать сюда -

Мы можем выбрать select all все абсолютно правила и сохранить(save).
Теперь остается снорт-интерфейс включить:

Если не включится – можно:
в алертах убрать обе галочки, чтобы не передавал логии
Если не сработало – переобновить апдейты (возможно криво встали): force update

Теперь тестируем систему - вспоминаем эксплойты, сканеры…
Включаем внешнюю кали: нужно просканировать внешнюю сетку, и просканить изнутри – как наша система отреагирует на сканирование??
Далее – задача сделать так, чтобы наша система обнаружила сканирование. Здесь возникнет 2 момента: интересные для реализации.
Сканируем извне FW1…. Есть интересная утилита – atop (мониторинг линекс тачки в режиме реального времени) – устанавливаем ее на кали:

И запускаем (atop) – 
видим данные по нашей системе: сколько места, где и чем занято (жесткий диск на 100% занят), как читаются данные, что-куда записывается; как сеть работает… видим какие ресурсы «страдают»

 28 дней назад выключалась инф-ра
Сканим FW1:
Внешний IP-шник внешнего FW - 

Заходим на FW и смотрим, что сказал снорт:
services/snort/interfaces -> alerts
Видим:

Система детекта видит, что нас сканируют – с информацией – какой IP-шник тебя сканит

Сканирование nmap-ом с подменой IP-шников: не получилось
 указываем IP который нужно спуфить

Сканирование nmap-ом с неполным соединением: скрытое сканирование

Смотрим алерты: видим, что обнаруживает всё в режиме реального времени

Скрытое сканирование stels: другой вариант
-sL - не сканировать порты
-sL - просто создать список работающих
хостов, но не сканировать порты nmap;
-sP - только проверять доступен ли хост с помощью ping;
-PN - считать все хосты доступными, даже если они не отвечают на
ping;
-sS/sT/sA/sW/sM - TCP сканирование;
-sU - UDP сканирование nmap;
-sN/sF/sX - TCP NULL и FIN сканирование;
-sC - запускать скрипт по умолчанию;
-sI - ленивое Indle сканирование;
-p - указать диапазон портов для проверки;
-sV - детальное исследование портов для определения версий служб;
-O - определять операционную систему;
-T[0-5] - скорость сканирования, чем больше, тем быстрее;
-D - маскировать сканирование с помощью фиктивных IP;
-S - изменить свой IP адрес на указанный;
-e - использовать определенный интерфейс;
--spoof-mac - установить свой MAC адрес;
-A - определение операционной системы с помощью скриптов
Делаем:

 алерты…
Теперь еще раз по-другому:

не обнаружил хостов
Ленивое сканирование:
 не сработало…
Сканирование из внутренней инф-ры: внутри Берем внутренн.. тачку – если злоумышленник проник внутрь структуру и хочет увидеть кто у нас есть

Сканить надо дефолтный гетвей –
 Нет алертов
 работает
Ничего не обнаруживается …. – потому что есть правила home и exter//// и сканирование по стандартным правилам делается с extral network ДО home (чтобы трафик шел). А у нас получается home-home – чтобы обойти – делаем «костыль»:
Если мы скажем нашему FW2, что и home и extral относятся все сети наши - тогда суриката будет смотреть ВЕСЬ трафик (будет работать медленнее, но будет обрабатывать абсолютно весь трафик)
Для этого нам придется чуть поменять настройки
Мы указывали:

А теперь скажем, что home – это все сети наши после FW

И external net - это все сети, которые есть
Но обычным выбором по стрелке – не дает изменить, и дополнить список – тоже нельзя.
1. Переходим FW – aliases


Добавить список IP-листов – и добавляем весь интернет (чтобы сканил весь)

т.к. 0 нет – выбираем 1 и вторую 1 – таким образом говорим – что это вся сеть
Сохраняем!
Вот добавили алиас:

( так можно забанить весь интернет… не говорить РосКомНадзору), а то всё забанят )
Переходим в сурикату: pass lists и добавляем новый пасс-лист

Убираем все галочки:

И внизу выбираем – алиас:

И только теперь мы можем перейти в interfaces и сейчас уже сможем выбрать:
 save
Перезапускаем интерфейс  лучше: стор и потом запуск
Запускаем сканирование из нутрии: 
И видим алерты:

А теперь более сложные вещи: будет ли обнаруживать FW2, если мы будет кого-то во вне сканировать (снаружи) – сможет ли IDS система обнаружить что кто-то изнутри компании ломает кого-то снаружи

Не видит (нет алертов)

Поправим интерфейсы: sтор суриката
 save Запускаем
Сканируем еще раз:

Алертов не видим, т.к. он слушает только на LAN интерфейсе

В агрессивном сканировании увидел только на 80 порту:

Если в настройках стоит «весь трафик» то суриката на FW2 сканирует весь трафик внутри и снаружи и «изнутри-вовне» - тоже есть алерты
**Теперь другая атака:** с внешней кали на внутреннюю win7 (каким-нибудь реверс-шеллом)
Внешняя:


 






переходим на внутренюю винду

Скачиваем реверс-тест…
Мы только еще скачали, а в алертах уже пишется:

И на FW1 нам сказал: что не то что-то скачано

Если был бы ssl-трафик, но это бы не было обнаружено
Дальше, запускаем реверс-тест:
Появился метерпретер:

Суриката сказала, что запустилась MALWARE:

Снорт сказал:

Система может обнаружить какие-то уже известные штуки (прописанные в правилах) на изменения уже не сработает. Чтобы обнаружить с какой машинки в тебя – нужно самому прописать правила снорта (статья в телеге) - https://xakep.ru/2018/11/14/snortrules/
И есть отдельная IDS/IPS система – SELKS инструкция есть на гибхабе – скачивать без графического интерфейса
