Русский
Русский
English
Статистика
Реклама

Flowmon

Эшелонированная защита. Fortinet amp Flowmon Networks

18.08.2020 10:04:18 | Автор: admin


В последнее время все больше компаний дозревают до эшелонированной защиты, когда одно решение защищает периметр сети, другое оконечные станции, третье постоянно мониторит сеть, обнаруживая аномалии, четвертое сканирует сеть на предмет незакрытых уязвимостей и так далее. Одновременно с этим возрастает потребность в различных интеграциях и хорошо, когда они из коробки, то есть писать сложные скрипты не нужно.
Мы не так давно писали о новой услуге TS Solution CheckFlow. Это бесплатный аудит сетевого трафика (как внутреннего, так и внешнего). Flowmon решение по анализу телеметрии и мониторингу сети, которое дает ценную информацию как для сетевых администраторов, так и для безопасников: аномалии, сканирования, нелегитимные сервера, петли, нелегитимные взаимодействия, вторжения в сеть, атаки нулевого дня и многое другое.
Также рекомендую обратиться к статье 9 типовых проблем в сети, которые можно обнаружить с помощью анализа с Flowmon.

Интеграция Flowmon & FortiGate


Интеграция была упомянута в нашем блоге. В общем и целом она заключается в том, что Next-Generation Firewall (такой, как FortiGate) защищает периметр, а Flowmon мониторит сетевую инфраструктуру, тем самым заказчик получает полную видимость сети. Однако Flowmon позволяет лишь обнаруживать, но не предотвращать атаки и аномалии, ведь он работает на телеметрии, которая добывается с помощью Netflow/IPFIX. Для вноса в карантин подозрительного или зараженного хоста может использоваться NGFW или же NAC (Network Access Control) решение.
Так вот, вендор Flowmon выпустил shell скрипт, который в ответ на инциденты безопасности может выполнить следующие действия на FortiGate:

  • Заблокировать зараженный хост по IP адресу (IP Ban);
  • Внести в хост карантин с помощью FortiClient по MAC адресу (Quarantine with FortiClient);
  • Динамический карантин на все зараженные хосты по МАС адресам (Access Layer Quarantine);

Настройка


1. В подробности самого скрипта я вдаваться не буду, скажу лишь, что есть две версии: одна для FortiGate выше версии 6.4.0, другая для более ранних версий. Код приведен ниже.

Код скрипта для FortiGate ниже версии 6.4.0
#!/bin/bash# Author: Jiri Knapek# Description: This script is to quarantine IP on Fortigate Firewalls for FortiOS before 6.4.# Version: 1.3# Date: 8/3/2020# Debug 1 = yes, 0 = noDEBUG=0[ $DEBUG -ne 0 ] && echo `date` "Starting mitigation script" >> /tmp/fg-mitigation.log# Management IP/hostname of Firewall/ Core deviceIP='10.10.30.210'API_KEY='fp8114zdNpjp8Qf8zN4Hdp57dhgjjf'# Default timeout for action is# value in seconds or neverTIMEOUT='300'# FortiGate API URLBAN="http://personeltest.ru/aways/$IP/api/v2/monitor/user/banned/add_users?access_token=$API_KEY"function usage {    cat << EOF >&2usage: mitigation_script.sh <options>Optional:    --fw        IP / hostname of Fortigate firewall--timeoutTimeout in seconds--keyFortiGate API key    EOF    exit}      params="$(getopt -o f:t:k:h -l fw:,timeout:,key:,help --name "mitigation_script.sh" -- "$@")"[ $DEBUG -ne 0 ] && echo `date` "Params $params" >> /tmp/fg-mitigation.logif [ $? -ne 0 ]then    usage    [ $DEBUG -ne 0 ] && echo `date` "Got to usage." >> /tmp/fg-mitigation.logfieval set -- "$params"unset paramswhile truedo    case $1 in        -f|--fw)            IP=("${2-}")            shift 2            ;;        -k|--key)            API_KEY=("${2-}")            shift 2            ;;        -t|--timeout)            TIMEOUT=("${2-}")            shift 2            ;;        -h|--help)            usage            ;;        --)            shift            break            ;;        *)            usage            ;;    esacdone# we dont support any other args[ $# -gt 0 ] && {    usage    [ $DEBUG -ne 0 ] &&  echo `date`  "INFO: Too many arguments. Got to usage." >> /tmp/fg-mitigation.log 2>&1}cat << EOF >&2-----  My params are ------------------FW = $IPAPI KEY = $API_KEYTIMEOUT = $TIMEOUTTOKEN = $TOKEN---------------------------------------EOF[ $DEBUG -ne 0 ] && cat >> /tmp/fg-mitigation.log << EOF >&2-----  My params are ------------------FW = $IPAPI KEY = $API_KEYTIMEOUT = $TIMEOUTTOKEN = $TOKEN---------------------------------------EOFecho "Stdin read started..." >&2LINE_NUM=1array=()while read linedo    IFS=$'\t'    array=($line)    echo "$LINE_NUM - ID ${array[0]} - type ${array[4]} - source ${array[10]}"    [ $DEBUG -ne 0 ] &&  echo "$LINE_NUM - ID ${array[0]} - type ${array[4]} - source ${array[10]}" >> /tmp/fg-mitigation.log 2>&1        LINE_NUM=$((LINE_NUM+1))    # BAN the source IP of the event    if [ $DEBUG -ne 0 ]; then        /usr/bin/curl -k -X POST -H "Content-Type": "application/json" --data "{ \"ip_addresses\": [\"${array[10]}\"], \"expiry\": $TIMEOUT}" $BAN >> /tmp/fg-mitigation.log 2>&1    else        /usr/bin/curl -k -X POST -H "Content-Type": "application/json" --data "{ \"ip_addresses\": [\"${array[10]}\"], \"expiry\": $TIMEOUT}" $BAN    fidone < /dev/stdinecho "---- Everything completed ----"[ $DEBUG -ne 0 ] &&  echo `date` "---- Everything completed ----" >> /tmp/fg-mitigation.log

Код скрипта для FortiGate версии 6.4.0 и выше
#!/bin/bash# Author: Jiri Knapek# Description: This script is to quarantine IP or MAC on Fortigate Firewalls and Security Fabric# Version: 2.0# Date: 7/8/2020# Debug 1 = yes, 0 = noDEBUG=0[ $DEBUG -ne 0 ] && echo `date` "Starting mitigation script" >> /tmp/fg-mitigation.log# Flowmon API accessUSER='admin'PASS='admin'# Management IP/hostname of Firewall/ Core deviceIP='10.10.30.210'WEBHOOK='FlowmonADS'API_KEY='fp8114zdNpjp8Qf8zN4Hdp57dhgjjf'MAC=0URL="http://personeltest.ru/aways/$IP/api/v2/monitor/system/automation-stitch/webhook/$WEBHOOK"function usage {    cat << EOF >&2usage: mitigation_script.sh <options>Optional:    --fw        IP / hostname of Fortigate firewall    --user      Username to be used for Flowmon API authentication    --pass      Password for the user--keyFortiGate API key--mac    Add this parameter to enable MAC mitigationEOF    exit}params="$(getopt -o f:u:p:k:h:m: -l fw:,key:,pass:,user:,help,mac: --name "mitigation_script.sh" -- "$@")"[ $DEBUG -ne 0 ] && echo `date` "Params $params" >> /tmp/fg-mitigation.logif [ $? -ne 0 ]then    usage    [ $DEBUG -ne 0 ] && echo `date` "Got to usage." >> /tmp/fg-mitigation.logfieval set -- "$params"unset paramswhile truedo    case $1 in        -f|--fw)            IP=("${2-}")            shift 2            ;;        -k|--key)            API_KEY=("${2-}")            shift 2            ;;        -p|--pass)            PASS=("${2-}")            shift 2            ;;        -u|--user)            USER=("${2-}")            shift 2            ;;        -m|--mac)            MAC=1            shift 2            ;;        -h|--help)            usage            ;;        --)            shift            break            ;;        *)            usage            ;;    esacdone# we dont support any other args[ $# -gt 0 ] && {    usage    [ $DEBUG -ne 0 ] &&  echo `date`  "INFO: Got to usage." >> /tmp/fg-mitigation.log 2>&1}if [ $MAC -ne 0 ];then    # authenticate to localhost    OUTPUT="$(/usr/bin/curl "https://localhost/resources/oauth/token" -k -d 'grant_type=password' -d 'client_id=invea-tech' -d "username=$USER" -d "password=$PASS")"    TOKEN=""    echo "${OUTPUT}" > /tmp/access_token.json    if [[ $OUTPUT == *"access_token"* ]]; then        [ $DEBUG -ne 0 ] && echo `date` "Successfully authenticated to Flowmon Collector!" >> /tmp/fg-mitigation.log        TOKEN="$(cat /tmp/access_token.json | jq '.access_token')"        TOKEN="${TOKEN//\"}"        TOKEN="Authorization: bearer "$TOKEN    fificat << EOF >&2-----  My params are ------------------FW = $IPAPI KEE = $API_KEYURL = $URLMAC = $MACTOKEN = $TOKEN---------------------------------------EOF[ $DEBUG -ne 0 ] && /tmp/fg-mitigation.log << EOF >&2-----  My params are ------------------FW = $IPAPI KEE = $API_KEYURL = $URLMAC = $MACTOKEN = $TOKEN---------------------------------------EOFecho "Stdin read started..." >&2LINE_NUM=1array=()while read linedo    IFS=$'\t'    array=($line)    echo "$LINE_NUM - ID ${array[0]} - type ${array[4]} - source ${array[10]}"    [ $DEBUG -ne 0 ] &&  echo "$LINE_NUM - ID ${array[0]} - type ${array[4]} - source ${array[10]}" >> /tmp/fg-mitigation.log 2>&1    # Call a webhook    if [ $MAC -ne 0 ];    then        MAC_ADDR="$(/usr/bin/curl "https://localhost/rest/ads/event/${array[0]}" -G -k -H "$TOKEN"  | jq '.macAddress')"        if [ $DEBUG -ne 0 ]; then            /usr/bin/curl -k -X POST -H "Authorization: Bearer $API_KEY" --data "{ \"srcip\": \"${array[10]}\", \"mac\": $MAC_ADDR, \"fctuid\": \"A8BA0B12DA694E47BA4ADF24F8358E2F\"}" $URL >> /tmp/fg-mitigation.log 2>&1        else            /usr/bin/curl -k -X POST -H "Authorization: Bearer $API_KEY" --data "{ \"srcip\": \"${array[10]}\", \"mac\": $MAC_ADDR, \"fctuid\": \"A8BA0B12DA694E47BA4ADF24F8358E2F\"}" $URL        fi    else        if [ $DEBUG -ne 0 ]; then            /usr/bin/curl -k -X POST -H "Authorization: Bearer $API_KEY" --data "{ \"srcip\": \"${array[10]}\",  \"fctuid\": \"A8BA0B12DA694E47BA4ADF24F8358E2F\"}" $URL >> /tmp/fg-mitigation.log 2>&1        else            /usr/bin/curl -k -X POST -H "Authorization: Bearer $API_KEY" --data "{ \"srcip\": \"${array[10]}\",  \"fctuid\": \"A8BA0B12DA694E47BA4ADF24F8358E2F\"}" $URL        fi    fi    LINE_NUM=$((LINE_NUM+1))done < /dev/stdinecho "---- Everything completed ----"[ $DEBUG -ne 0 ] &&  echo `date` "---- Everything completed ----" >> /tmp/fg-mitigation.log


2. Я использую ForiGate версии 6.4.3. В самом скрипте в 13 и 14 строке следует добавить ваши логин и пароль к Flowmon, а также добавить API ключ из п.5, IP-адрес FortiGate и имя Webhook (имя механизма автоматизации).



3. В веб-интерфейсе FortiGate следует добавить во вкладке Security Fabric > Automation > New Automation Stitch. Имя FlowmonADS, Status Enabled, Trigger Incoming Webhook, Action IP BAN, Access Layer Quarantine, Quarantine with FortiCLient (если используете).



4. Затем вы увидите окно как на скриншоте ниже с URLом FortiGate для данного Webhooka, поле для API токена админа (мы его создадим позже) и пример запроса.



5. Далее следует создать профиль администратора, который будет иметь права. Вкладка System > Admin Profiles > Create New.



6. Назначить права Security Fabric Read, Firewall Read/Write, System Read/Write, Security Profile Read/Write.



7. После во вкладке System > Administrators создаем нового администратора с профилем api_admin. Дополнительно в поле Trusted Hosts можно указать доверенные сети или IP-адрес устройства Flowmon.
Примечание: параметр Trusted Hosts позволяет жестко задать сегменты IP адресов, из которых api_admin сможет отправлять API запросы на FortiGate, тем самым это рекомендуемая настройка.



8. После этого шага генерируется API ключ, который надо добавить в первоначальный скрипт вместе с другими данными, указанными в пункте 1 и в webhook в пункте 4.



9. Далее переходим во Flowmon в модуль ADS (Anomaly Detection System) во вкладку System > System Settings > Custom Scripts > New Custom Script > Выбрать файл с расширение .sh. Далее следует задать параметры --fw (IP-адрес FortiGate), --key (API токен), --mac (ничего), --pass (пароль от REST API Flowmon), --user (пользователь REST API Flowmon). После следует нажать кнопку Save.
Примечание: --pass и --user по умолчанию admin / admin.



10. Финальным шагом является установление событий, на которые данные программный код и будет срабатывать. Во вкладке Settings > Processing > Custom Scripts > New Custom Script Action следует поменять параметр Perspective на Security Issues, установить порог срабатывания (Minimal priority to be reported) и проверить параметры из прошлого шага.



Проверка


В случае срабатывания события из категории Security Issues на Flowmon, FortiGate заблокирует данный хост. Далее в удобном виджете Quarantine можно посмотреть потенциально зараженные хосты, провалившись внутрь. Либо же через команду в CLI diagnose user quarantine list.



После ИБ администратор может приступить к расследованию инцидента с помощью Flowmon ADS, установив первоначально зараженный хост, по каким портам распространяется зловред и его поведение. С помощью же решений по защите рабочих станций, например, FortiEDR можно вылечить машину и провести расследование инцидента безопасности.
Для того, чтобы вынести хост из карантина, его следует выбрать и нажать кнопку Remove.

Заключение


Повсеместный подход к эшелонированной защите подталкивает многих вендоров на интеграцию с другими решениями из коробки. В данной статье были рассмотрены интеграция, настройка и демонстрация совместной работы Flowmon и FortiGate.
В ближайшее время у нас планируется вебинар, на котором более подробно расскажем, как Flowmon и Fortinet дополняют друг друга, их интеграцию между собой, а также ответим на интересующие вас вопросы. Регистрация доступна по ссылке.
Если вам интересна данная тематика, то следите за обновлениями в наших каналах (Telegram, Facebook, VK, TS Solution Blog)!
Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru