Baru-baru ini, semakin banyak perusahaan yang matang untuk perlindungan echelone, ketika satu solusi melindungi perimeter jaringan, stasiun akhir yang lain, yang ketiga terus memantau jaringan, mendeteksi anomali, yang keempat memindai jaringan untuk kerentanan yang belum ditambal, dan seterusnya. Pada saat yang sama, kebutuhan akan berbagai integrasi tumbuh dan ada baiknya jika mereka sudah tidak biasa, yaitu, Anda tidak perlu menulis skrip yang rumit.
Kami baru-baru ini menulis tentang layanan TS Solution baru - CheckFlow . Ini adalah audit lalu lintas jaringan gratis (baik internal maupun eksternal). Flowmon- analisis telemetri dan solusi pemantauan jaringan yang memberikan informasi berharga bagi administrator jaringan dan penjaga keamanan: anomali, pemindaian, server tidak sah, loop, interaksi tidak sah, intrusi jaringan, serangan zero-day, dan banyak lagi.
Saya juga merekomendasikan untuk merujuk ke artikel 9 masalah jaringan umum yang dapat dideteksi dengan analisis dengan Flowmon .
Integrasi Flowmon & FortiGate
Integrasi disebutkan di blog kami . Secara umum, ini terdiri dari fakta bahwa Next-Generation Firewall (seperti FortiGate) melindungi perimeter, dan Flowmon memantau infrastruktur jaringan, sehingga memberikan visibilitas jaringan penuh kepada pelanggan. Namun, Flowmon hanya dapat mendeteksi, tetapi tidak dapat mencegah serangan dan anomali, karena berfungsi pada telemetri, yang diperoleh menggunakan Netflow / IPFIX. Solusi NGFW atau NAC (Network Access Control) dapat digunakan untuk mengkarantina host yang mencurigakan atau terinfeksi.
Jadi, vendor Flowmon merilis skrip shell yang, sebagai tanggapan atas insiden keamanan, dapat melakukan tindakan berikut di FortiGate:
- Blokir host yang terinfeksi dengan alamat IP (Larangan IP);
- Karantina host menggunakan FortiClient di alamat MAC (Karantina dengan FortiClient);
- Karantina dinamis untuk semua host yang terinfeksi dengan alamat MAC (Karantina Lapisan Akses);
Pengaturan
1. Saya tidak akan membahas detail skrip itu sendiri, saya hanya akan mengatakan bahwa ada dua versi: satu untuk FortiGate di atas versi 6.4.0, yang lainnya untuk versi sebelumnya. Kode ditampilkan di bawah ini.
Kode skrip untuk FortiGate di bawah versi 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 = 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
Kode skrip untuk FortiGate versi 6.4.0 dan lebih tinggi
#!/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='s4mQH9j88kt1hkd4dsyjtsg8thghc4'
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" -- "$@")"
if [ $? -ne 0 ]
then
usage
[ $DEBUG -ne 0 ] && echo `date` "Got to usage." >> /tmp/fg-mitigation.log
fi
[ $DEBUG -ne 0 ] && echo `date` "Params $params" >> /tmp/fg-mitigation.log
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 ] && cat >> /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. Saya menggunakan FortiGate versi 6.4.2. Di skrip itu sendiri, pada baris 13 dan 14, Anda harus menambahkan nama pengguna dan kata sandi Anda ke Flowmon , serta menambahkan kunci API dari klausul 5 , alamat IP FortiGate dan nama Webhook (nama mekanisme otomatisasi).
3. Dalam antarmuka web, FortiGate harus ditambahkan di bawah Security Fabric> Automation> New Automation Stitch tab . Nama - FlowmonADS , Status - Diaktifkan , Pemicu - Webhook Masuk , Tindakan - IP BAN, Karantina Lapisan Akses, Karantina dengan FortiCLient (jika digunakan).
4. Kemudian Anda akan melihat jendela seperti pada gambar di bawah dengan URL FortiGate untuk Webhook ini, bidang untuk API token admin (kami akan membuatnya nanti) dan contoh permintaan.
5. Selanjutnya, Anda harus membuat profil administrator, yang akan memiliki hak. Tab Sistem> Profil Admin> Buat Baru .
6. Tetapkan hak ke Security Fabric - Baca, Firewall - Baca / Tulis, Sistem - Baca / Tulis, Profil Keamanan - Baca / Tulis .
7. Setelah itu, di tab System> Administrators , buat administrator baru dengan profil api_admin . Selain itu, di bidang Host Tepercaya , Anda dapat menentukan jaringan tepercaya atau alamat IP Flowmon.
Catatan : Parameter Host Tepercayamemungkinkan Anda untuk membuat kode segmen IP dari mana api_admin dapat mengirim permintaan API ke FortiGate, jadi ini adalah pengaturan yang direkomendasikan.
8. Setelah langkah ini, kunci API dibuat , yang harus ditambahkan ke skrip awal bersama dengan data lain yang ditentukan di paragraf 1 dan di webhook di paragraf 4.
9. Selanjutnya, buka Flowmon di modul ADS (Sistem Deteksi Anomali) di tab Sistem> Sistem Pengaturan> Skrip Kustom> Skrip Kustom Baru> Pilih file dengan ekstensi .sh . Selanjutnya, Anda harus mengatur parameter --fw (FortiGate IP address), --key (API token), --mac (nothing), --pass (password dari REST API Flowmon), --user (REST API user Flowmon). Kemudian klik tombol Simpan .
Catatan : --pass dan --user adalah admin / admin secara default.
10. Langkah terakhir adalah untuk menetapkan event dimana kode program yang diberikan akan dipicu. Di tab Pengaturan> Pemrosesan> Skrip Kustom> Tindakan Skrip Kustom Baru , ubah parameter Perspektif ke Masalah Keamanan , setel ambang batas (Prioritas minimal yang akan dilaporkan) dan periksa parameter dari langkah sebelumnya.
Memeriksa
Jika peristiwa dari kategori Masalah Keamanan dipicu di Flowmon, FortiGate akan memblokir host ini. Selanjutnya, di widget Karantina yang nyaman, Anda dapat melihat host yang berpotensi terinfeksi dengan masuk ke dalamnya. Atau melalui perintah di CLI mendiagnosis daftar karantina pengguna .
Setelah keamanan informasi, administrator dapat mulai menyelidiki insiden menggunakan Flowmon ADS, mengidentifikasi host yang pertama kali terinfeksi, melalui port mana malware menyebar dan perilakunya. Dengan bantuan solusi untuk melindungi workstation, misalnya, FortiEDR, Anda dapat menyembuhkan mesin dan melakukan penyelidikan atas insiden keamanan.
Untuk menghapus host dari karantina, pilih dan klik tombol Hapus atau Hapus Semuauntuk memindahkan semua inang keluar dari karantina.
Kesimpulan
Pendekatan pertahanan yang mendalam di mana-mana mendorong banyak vendor untuk berintegrasi dengan solusi lain di luar kotak. Artikel ini membahas cara mengintegrasikan, mengkonfigurasi, dan mendemonstrasikan bagaimana Flowmon dan FortiGate bekerja sama.
Dalam waktu dekat, kami sedang merencanakan webinar, di mana kami akan memberi tahu lebih detail bagaimana Flowmon dan Fortinet saling melengkapi, integrasinya satu sama lain, dan juga menjawab pertanyaan Anda. Pendaftaran tersedia di sini .
Jika Anda tertarik dengan topik ini, pantau terus saluran kami (Telegram, Facebook, VK, TS Solution Blog)!