[Информационная безопасность, Системное администрирование, IT-инфраструктура, Сетевое оборудование] Эшелонированная защита. Fortinet & Flowmon Networks
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
В последнее время все больше компаний дозревают до эшелонированной защиты, когда одно решение защищает периметр сети, другое — оконечные станции, третье — постоянно мониторит сеть, обнаруживая аномалии, четвертое сканирует сеть на предмет незакрытых уязвимостей и так далее. Одновременно с этим возрастает потребность в различных интеграциях и хорошо, когда они “из коробки”, то есть писать сложные скрипты не нужно.
Мы не так давно писали о новой услуге 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
SPL
#!/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 = no
DEBUG=0
[ $DEBUG -ne 0 ] && echo `date` "Starting mitigation script" >> /tmp/fg-mitigation.log
# Management IP/hostname of Firewall/ Core device
IP='10.10.30.210'
API_KEY='fp8114zdNpjp8Qf8zN4Hdp57dhgjjf'
# Default timeout for action is
# value in seconds or never
TIMEOUT='300'
# FortiGate API URL
BAN="https://$IP/api/v2/monitor/user/banned/add_users?access_token=$API_KEY"
function usage {
cat << EOF >&2
usage: mitigation_script.sh <options>
Optional:
--fw IP / hostname of Fortigate firewall
--timeout Timeout in seconds
--key FortiGate 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.log
if [ $? -ne 0 ]
then
usage
[ $DEBUG -ne 0 ] && echo `date` "Got to usage." >> /tmp/fg-mitigation.log
fi
eval set -- "$params"
unset params
while true
do
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
;;
esac
done
# 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 = $IP
API KEY = $API_KEY
TIMEOUT = $TIMEOUT
TOKEN = $TOKEN
---------------------------------------
EOF
[ $DEBUG -ne 0 ] && cat >> /tmp/fg-mitigation.log << EOF >&2
----- My params are ------------------
FW = $IP
API KEY = $API_KEY
TIMEOUT = $TIMEOUT
TOKEN = $TOKEN
---------------------------------------
EOF
echo "Stdin read started..." >&2
LINE_NUM=1
array=()
while read line
do
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
fi
done < /dev/stdin
echo "---- Everything completed ----"
[ $DEBUG -ne 0 ] && echo `date` "---- Everything completed ----" >> /tmp/fg-mitigation.log
Код скрипта для FortiGate версии 6.4.0 и выше
SPL
#!/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 = no
DEBUG=0
[ $DEBUG -ne 0 ] && echo `date` "Starting mitigation script" >> /tmp/fg-mitigation.log
# Flowmon API access
USER='admin'
PASS='admin'
# Management IP/hostname of Firewall/ Core device
IP='10.10.30.210'
WEBHOOK='FlowmonADS'
API_KEY='fp8114zdNpjp8Qf8zN4Hdp57dhgjjf'
MAC=0
URL="https://$IP/api/v2/monitor/system/automation-stitch/webhook/$WEBHOOK"
function usage {
cat << EOF >&2
usage: 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
--key FortiGate API key
--mac Add this parameter to enable MAC mitigation
EOF
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.log
if [ $? -ne 0 ]
then
usage
[ $DEBUG -ne 0 ] && echo `date` "Got to usage." >> /tmp/fg-mitigation.log
fi
eval set -- "$params"
unset params
while true
do
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
;;
esac
done
# 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
fi
fi
cat << EOF >&2
----- My params are ------------------
FW = $IP
API KEE = $API_KEY
URL = $URL
MAC = $MAC
TOKEN = $TOKEN
---------------------------------------
EOF
[ $DEBUG -ne 0 ] && /tmp/fg-mitigation.log << EOF >&2
----- My params are ------------------
FW = $IP
API KEE = $API_KEY
URL = $URL
MAC = $MAC
TOKEN = $TOKEN
---------------------------------------
EOF
echo "Stdin read started..." >&2
LINE_NUM=1
array=()
while read line
do
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/stdin
echo "---- 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 для данного Webhook’a, поле для 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)!
===========
Источник:
habr.com
===========
Похожие новости:
- [Информационная безопасность] Чуть сложнее, чем кажется: как атакует группировка TinyScouts
- [Информационная безопасность] Все, что вы хотели знать о Sigma-правилах. Часть 3
- [Системное администрирование, *nix] Лучшие практики bash-скриптов: краткое руководство по надежным и производительным скриптам bash (перевод)
- [Информационная безопасность] Security Week 34: расшифровка переговоров через VoLTE
- [PHP, IT-инфраструктура, Сетевые технологии, API, Облачные сервисы] Synology SSO Server – управление авторизацией и доступ к сервисам с сайта
- [Delphi, IT-инфраструктура] Как я сделал электронную очередь за 0 рублей на чистом энтузиазме, чего это стоило и что из этого вышло
- [Информационная безопасность] Спутниковую связь по-прежнему легко прослушать. Перехват трафика кораблей и самолётов
- [Информационная безопасность, IT-компании] Konica Minolta подверглась атаке вируса-вымогателя
- [Системное администрирование, Браузеры, Софт, IT-компании] Microsoft рассказала, что новую версию браузера Edge для Windows 10 нельзя удалить из системы
- [Информационная безопасность, Python, Программирование, Робототехника, Научно-популярное] pyOpenRPA туториал. Управление WEB приложениями
Теги для поиска: #_informatsionnaja_bezopasnost (Информационная безопасность), #_sistemnoe_administrirovanie (Системное администрирование), #_itinfrastruktura (IT-инфраструктура), #_setevoe_oborudovanie (Сетевое оборудование), #_fortinet, #_fortigate, #_it_security, #_monitoring, #_ts_solutin, #_span, #_netflow, #_flowmon, #_blog_kompanii_ts_solution (
Блог компании TS Solution
), #_informatsionnaja_bezopasnost (
Информационная безопасность
), #_sistemnoe_administrirovanie (
Системное администрирование
), #_itinfrastruktura (
IT-инфраструктура
), #_setevoe_oborudovanie (
Сетевое оборудование
)
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 03:21
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
В последнее время все больше компаний дозревают до эшелонированной защиты, когда одно решение защищает периметр сети, другое — оконечные станции, третье — постоянно мониторит сеть, обнаруживая аномалии, четвертое сканирует сеть на предмет незакрытых уязвимостей и так далее. Одновременно с этим возрастает потребность в различных интеграциях и хорошо, когда они “из коробки”, то есть писать сложные скрипты не нужно. Мы не так давно писали о новой услуге TS Solution — CheckFlow. Это бесплатный аудит сетевого трафика (как внутреннего, так и внешнего). Flowmon — решение по анализу телеметрии и мониторингу сети, которое дает ценную информацию как для сетевых администраторов, так и для «безопасников»: аномалии, сканирования, нелегитимные сервера, петли, нелегитимные взаимодействия, вторжения в сеть, атаки “нулевого дня” и многое другое. Также рекомендую обратиться к статье 9 типовых проблем в сети, которые можно обнаружить с помощью анализа с Flowmon. Интеграция Flowmon & FortiGate Интеграция была упомянута в нашем блоге. В общем и целом она заключается в том, что Next-Generation Firewall (такой, как FortiGate) защищает периметр, а Flowmon мониторит сетевую инфраструктуру, тем самым заказчик получает полную видимость сети. Однако Flowmon позволяет лишь обнаруживать, но не предотвращать атаки и аномалии, ведь он работает на телеметрии, которая добывается с помощью Netflow/IPFIX. Для вноса в карантин подозрительного или зараженного хоста может использоваться NGFW или же NAC (Network Access Control) решение. Так вот, вендор Flowmon выпустил shell скрипт, который в ответ на инциденты безопасности может выполнить следующие действия на FortiGate:
Настройка 1. В подробности самого скрипта я вдаваться не буду, скажу лишь, что есть две версии: одна для FortiGate выше версии 6.4.0, другая для более ранних версий. Код приведен ниже. Код скрипта для FortiGate ниже версии 6.4.0SPL#!/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 = no DEBUG=0 [ $DEBUG -ne 0 ] && echo `date` "Starting mitigation script" >> /tmp/fg-mitigation.log # Management IP/hostname of Firewall/ Core device IP='10.10.30.210' API_KEY='fp8114zdNpjp8Qf8zN4Hdp57dhgjjf' # Default timeout for action is # value in seconds or never TIMEOUT='300' # FortiGate API URL BAN="https://$IP/api/v2/monitor/user/banned/add_users?access_token=$API_KEY" function usage { cat << EOF >&2 usage: mitigation_script.sh <options> Optional: --fw IP / hostname of Fortigate firewall --timeout Timeout in seconds --key FortiGate 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.log if [ $? -ne 0 ] then usage [ $DEBUG -ne 0 ] && echo `date` "Got to usage." >> /tmp/fg-mitigation.log fi eval set -- "$params" unset params while true do 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 ;; esac done # 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 = $IP API KEY = $API_KEY TIMEOUT = $TIMEOUT TOKEN = $TOKEN --------------------------------------- EOF [ $DEBUG -ne 0 ] && cat >> /tmp/fg-mitigation.log << EOF >&2 ----- My params are ------------------ FW = $IP API KEY = $API_KEY TIMEOUT = $TIMEOUT TOKEN = $TOKEN --------------------------------------- EOF echo "Stdin read started..." >&2 LINE_NUM=1 array=() while read line do 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 fi done < /dev/stdin echo "---- Everything completed ----" [ $DEBUG -ne 0 ] && echo `date` "---- Everything completed ----" >> /tmp/fg-mitigation.log Код скрипта для FortiGate версии 6.4.0 и вышеSPL#!/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 = no DEBUG=0 [ $DEBUG -ne 0 ] && echo `date` "Starting mitigation script" >> /tmp/fg-mitigation.log # Flowmon API access USER='admin' PASS='admin' # Management IP/hostname of Firewall/ Core device IP='10.10.30.210' WEBHOOK='FlowmonADS' API_KEY='fp8114zdNpjp8Qf8zN4Hdp57dhgjjf' MAC=0 URL="https://$IP/api/v2/monitor/system/automation-stitch/webhook/$WEBHOOK" function usage { cat << EOF >&2 usage: 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 --key FortiGate API key --mac Add this parameter to enable MAC mitigation EOF 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.log if [ $? -ne 0 ] then usage [ $DEBUG -ne 0 ] && echo `date` "Got to usage." >> /tmp/fg-mitigation.log fi eval set -- "$params" unset params while true do 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 ;; esac done # 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 fi fi cat << EOF >&2 ----- My params are ------------------ FW = $IP API KEE = $API_KEY URL = $URL MAC = $MAC TOKEN = $TOKEN --------------------------------------- EOF [ $DEBUG -ne 0 ] && /tmp/fg-mitigation.log << EOF >&2 ----- My params are ------------------ FW = $IP API KEE = $API_KEY URL = $URL MAC = $MAC TOKEN = $TOKEN --------------------------------------- EOF echo "Stdin read started..." >&2 LINE_NUM=1 array=() while read line do 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/stdin echo "---- 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 для данного Webhook’a, поле для 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)! =========== Источник: habr.com =========== Похожие новости:
Блог компании TS Solution ), #_informatsionnaja_bezopasnost ( Информационная безопасность ), #_sistemnoe_administrirovanie ( Системное администрирование ), #_itinfrastruktura ( IT-инфраструктура ), #_setevoe_oborudovanie ( Сетевое оборудование ) |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 03:21
Часовой пояс: UTC + 5