Naikkan IDS / NMS: Mikrotik dan Suricata dengan antarmuka web

Rupanya, saya memiliki karma seperti itu: tidak peduli bagaimana saya melakukan implementasi beberapa layanan pada open source, saya pasti akan menemukan banyak manual, yang masing-masing secara individual dalam kasus khusus saya tidak akan berfungsi, solusi yang sudah jadi tidak akan mulai atau suka, apa lagi yang akan terjadi -Tidak pernah dicerna, dan pada akhirnya Anda harus menerobos hasil sendiri.

Kali ini semua manual menggunakan ELK5 atau bahkan lebih tua, tetapi saya tidak benar-benar ingin menginstal perangkat lunak versi sebelumnya. Saya ingin mengambil perangkat lunak dengan periode dukungan yang paling menjanjikan: lebih disukai yang terbaru dari stabil.

Sebagai hasilnya, untuk dapat mengulangi prestasi sempurna tanpa mengulangi semua siksaan di masa depan, Anda harus menulis lembar contekan selangkah demi selangkah yang saya bagikan kepada Anda.

Jadi hari ini Mikrotik (RouterOS), Suricata 4.1, Elasticsearch + Filebeat + Kibana 6.5.

Alih-alih bergabung


Ketentuan:

  • Mikrotik pada i386 di mesin virtual pada host A. Semua antarmuka pada Mikrotik tersebar di VLAN, tuan rumah memiliki satu antarmuka jaringan fisik.
  • Sumber daya gratis untuk IDS / IPS / NMS pada host B dengan antarmuka jaringan fisik tunggal.
  • Saluran 20 megabyte keluar.
  • Keinginan untuk menerima analitik tentang lalu lintas yang melewati antarmuka eksternal Mikrotik.
  • Anggaran di rubel lobak dan kopeck Gambar.
  • Sejumlah waktu luang dari kerumitan.

Saya tidak akan berbicara di sini tentang apa IDS / IPS / NMS itu, mengapa itu diperlukan dan apa yang terjadi. Semua orang tahu ini tanpa saya, dan dia yang tidak tahu akan google.

Juga, saya tidak akan membenarkan pilihan saya antara Snort dan Suricata mendukung yang terakhir. Ini masalah selera.

Namun dangkal jelaskan cara kerjanya:

Suricata entah bagaimana menerima lalu lintas. Ada tiga opsi: a) melewati sendiri dalam mode inline, b) menerima salinan lalu lintas dari port switch dan c) menganalisis dump dengan lalu lintas. Suricata menganalisis lalu lintas yang diterima dan, berdasarkan analisis, memberikan data tentang apa yang ditemukannya dalam lalu lintas ini.

Suricata dapat mengeluarkan data dalam JSON. Dengan demikian, memiliki data terstruktur, mereka dapat diumpankan ke beberapa sistem untuk pemrosesan, sistematisasi, analisis dan visualisasi.
Untuk analisis dan visualisasi data, sejauh yang saya mengerti, tanpa menjadi spesialis dalam bidang ini, tumpukan ELK sempurna. Tumpukan ELK awalnya terdiri dari Elasticsearch, Logstash, Kibana. Sekarang Beat telah ditambahkan ke dalamnya (keluarga program antarmuka yang bertindak sebagai perantara antara sumber data dan Logstash atau Elasticsearch). Ke depan, saya akan mengatakan bahwa tidak ada Logstash, karena Beat secara sempurna memasukkan data langsung ke Elasticsearch, dan Elasticsearch memakannya dengan sempurna. Elasticsearch mentransfer data yang digigit ke Kibana, antarmuka web untuk seluruh tumpukan ELK. Kibana, menggunakan templat yang diteruskan kepadanya oleh Filebeat, memberikan pengguna dengan visualisasi data, yang disebut Dashboard. Mempertimbangkan fakta bahwa Elasticsearch, Logstash, Beat dan Kibana adalah buah dari karya satu produsen, seluruh kebun ini terhubung dengan baik satu sama lain, dan proses penautannya didokumentasikan dengan baik (dengan standar open source, tentu saja).

Dengan demikian, berdasarkan hal tersebut di atas, tugas tersebut dapat diuraikan sebagai berikut: mendapatkan salinan lalu lintas dari port router, mentransfernya ke Suricata, menerima data dalam format JSON dari Suricata, mentransfernya ke Filebeat, sehingga, pada gilirannya, mentransfernya ke Elasticsearch dan membantu Kibana membuat tampilan visual mereka.

Mikrotik RouterOS


Jika saya memiliki perangkat keras router Mikrotik, maka masalah port mirroring (port mirroring) tidak akan sama sekali. Semuanya akan diputuskan dengan mengaktifkan mirroring traffic yang melewati antarmuka eksternal ke porta bebas Mikrotik itu sendiri. Jika tidak ada port gratis di Mikrotik, Anda dapat mengaktifkan mirror port pada sakelar. Tetapi dalam kasus saya, Mikrotik tidak memiliki port fisik sama sekali, dan port pada saklar menerima lalu lintas dari seluruh host, di mana, selain Mikrotik, ada beberapa mesin virtual lainnya.

Dan kemudian saya sekali lagi secara mental berkata: "Terima kasih, Mikrotik!". Terima kasih untuk sniffer bawaan di RouterOS. Secara tradisi, kami melakukannya tanpa tangkapan layar, hanya perintah konsol.

Buka terminal di WinBox dan nyalakan sniffer:

/tool sniffer set filter-interface=if-out filter-stream=yes streaming-enabled=yes streaming-server=192.168.1.253
/tool sniffer start


Tunjukkan alih-alih jika-keluar nama antarmuka dari mana Anda berencana untuk mencegat lalu lintas, dan bukannya 192.168.1.253 - alamat IP mesin di mana lalu lintas yang disadap akan dikirim melalui TZSP .

Dengan Mikrotik'om semua.

Suricata


Secara umum, saya tidak terlalu berkepala Linux, jadi kebanyakan saya suka distribusi pop. Yah, mungkin aku suka Debian yang lebih asketis. Jadi saya mulai dengan itu. Yah, dan tentu saja, karena headness non-linux, saya juga ingin menginstal binari dari repositori. Perakitan selalu malas bagi saya. Jadi, jika dimungkinkan untuk memilih Debian, - jangan memilih . Saya tidak ingat sekarang di mana saya memiliki lelucon dalam menginstal seluruh pertanian di bawah Debian, tetapi dia melakukannya. Dan keseluruhan cerita selanjutnya tentang menginstal semuanya di bawah Ubunta.

Mesin virtual 4-core dengan 4 gigs RAM telah dibuat, Ubuntu Server 18.04.1 LTS (x64) telah diunduh dan diinstal di dalamnya

Perjanjian : semua tindakan lebih lanjut dilakukan atas nama pengguna super, jadi masuk sebagai root atau tambahkan sudo ke setiap perintah.

Karena pada setiap tahap saya membuat snapshot, dan kemudian berulang kali kembali ke mereka, pada akhirnya saya menyalakan banyak gangguan dengan waktu tidak sinkron di mesin virtual dengan waktu nyata.
Karenanya, kami segera mengatur zona waktu yang benar dan sinkronisasi NTP:

systemctl start systemd-timesyncd
systemctl status systemd-timesyncd
dpkg-reconfigure tzdata


Untuk memastikan bahwa tidak ada masalah ketergantungan saat memasang Suricata, tambahkan repositori universe ke /etc/apt/sources.list :

nano /etc/apt/sources.list
...
deb archive.ubuntu.com/ubuntu semesta utama bionik
deb archive.ubuntu.com/ubuntu semesta utama bionic-security
deb archive.ubuntu.com/ubuntu bionic-update semesta utama

Kami juga menambahkan repositori, tempat kami akan mendapatkan Suricata:
add-apt-repository ppa:oisf/suricata-stable

Memperbarui basis data paket:
apt-get update

Instal Suricata:
apt-get install -y suricata

Langkah selanjutnya adalah menetapkan aturan untuk Suricata dan pembaruannya:
apt-get install -y python-pip
pip install pyyaml
pip install https://github.com/OISF/suricata-update/archive/master.zip


Kami memulai pembaruan suricata-update itu sendiri :
pip install --pre --upgrade suricata-update

Berjalan tanpa konfigurasi tambahan akan memberi kita pengaturan Emerging Threats Open:
suricata-update

Untuk melihat daftar sumber, lakukan:
suricata-update list-sources

Memperbarui sumber aturan:
suricata-update update-sources

Mari kita lihat apa yang telah diperbarui di sumber, jalankan lagi:
suricata-update list-sources

Kami menyertakan semua sumber gratis:
suricata-update enable-source ptresearch/attackdetection
suricata-update enable-source oisf/trafficid
suricata-update enable-source sslbl/ssl-fp-blacklist


Dan lagi kami memperbarui aturan:
suricata-update

Suricata diinstal.

Sekarang Anda perlu mendapatkan traffic.

Lalu lintas


Trafr adalah aplikasi yang ditulis oleh Mikrotik untuk mengubah lalu lintas TZSP ke pcap. Aplikasi ini 32-bit, jadi untuk meluncurkannya Anda harus mengaktifkan dukungan untuk aplikasi 32-bit dalam 64-bit Ubunta:

dpkg --add-architecture i386
apt-get update && apt-get install -y libc6:i386


Unduh dan buka paket :

wget http://www.mikrotik.com/download/trafr.tgz
tar xzf trafr.tgz


Pastikan lalu lintas sedang ditangkap:

./trafr -s

Setelah peluncuran seperti itu, keluaran simbolis dalam mode grafis pecah di konsol mesin virtual, saya harus reboot. Tidak ada masalah menghubungkan jarak jauh melalui ssh ke Putty.

Jika Anda melihat kerlipan tak menentu di layar, lalu lintas datang, dan lalu lintas menangkapnya. Jika demikian, transfer lalu lintas ke tempat tinggal permanen dan jalankan dengan transmisi lalu lintas yang tertangkap melalui pipa segera ke Suricata:

mv trafr /usr/local/bin/
/usr/local/bin/trafr -s | suricata -c /etc/suricata/suricata.yaml -r /dev/stdin


Sekarang kami memeriksa bahwa lalu lintas tiba di Suricata, untuk ini kami lakukan hal berikut di terminal tetangga:

tail -f /var/log/suricata/fast.log

Anda akan melihat gulir pintar dari teks yang bermakna - log penerimaan lalu lintas meerkat.

Juga tidak akan salah untuk memastikan bahwa lalu lintas Suricata tidak hanya menerima, tetapi juga menganalisis:

tail -f /var/log/suricata/eve.json

Ini persis keluaran acara dari Suricata dalam format JSON yang akan kami berikan ke Filebeat.

Elasticsearch + Filebeat + Kibana 6.5


Kami menginstal kunci PGP yang diperlukan untuk menggunakan repositori Elastik dan menginstal dependensi yang diperlukan:

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
echo "deb https://artifacts.elastic.co/packages/6.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list
apt-get update && apt-get install -y openjdk-8-jre apt-transport-https wget nginx


Harap dicatat bahwa Java adalah versi 8. Apa pun di atas 8 tidak didukung. Karena itu, jika Anda berhasil menginstal Java yang lebih baru sebelumnya, hancurkan dan masukkan 8.

Kami memastikan bahwa Java diinstal sebagaimana mestinya:

java -version

Kami mendapatkan kira-kira kesimpulan berikut:
versi java "1.8.0_191"
Java (TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot (TM) 64-Bit Server VM (build 25.191-b12, mode campuran)

Buat pengguna dan kata sandi untuk mengakses Kibana. Alih-alih admin, pilih sesuatu yang Anda sukai:

echo "admin:`openssl passwd -apr1`" | sudo tee -a /etc/nginx/htpasswd.users

Karena ELK akan berputar di localhost, konfigurasikan proxy terbalik di nginx:

nano /etc/nginx/sites-available/kibana
server {
dengarkan 80;

server_name suricata.server;

auth_basic "Akses Terbatas";
auth_basic_user_file /etc/nginx/htpasswd.users;

lokasi / {
proxy_pass localhost : 5601;
proxy_http_version 1.1;
proxy_set_header Tingkatkan $ http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $ host;
proxy_cache_bypass $ http_upgrade;
}
}

rm /etc/nginx/sites-enabled/default
ln -s /etc/nginx/sites-available/kibana /etc/nginx/sites-enabled/kibana


Mulai ulang nginx:

systemctl restart nginx

Kami menempatkan Elasticsearch:

apt-get install -y elasticsearch

Nyalakan autorun saat memuat OS:

systemctl daemon-reload
systemctl enable elasticsearch.service


Kami meluncurkan:

systemctl start elasticsearch.service

Periksa apakah sudah naik:

curl -X GET "localhost:9200/"

Bergantung pada kinerja perangkat keras Anda, memulai ES mungkin membutuhkan waktu. Jika koneksi kami ditolak , cukup ulangi permintaan dan tunggu sampai kami mendapatkan sesuatu seperti:
{
"Nama": "lcZuxxm",
"Cluster_name": "elasticsearch",
"Cluster_uuid": "kmJHqJnlQe2Rk7F-CRi4EA",
"Versi": {
"Nomor": "6.5.1",
"Build_flavor": "default",
"Build_type": "deb",
"Build_hash": "8c58350",
"Build_date": "2018-11-16T02: 22: 42.182257Z",
"Build_snapshot": false,
"Lucene_version": "7.5.0",
"Minimum_wire_compatibility_version": "5.6.0",
"Minimum_index_compatibility_version": "5.0.0"
},
Tagline: Anda Tahu, untuk Pencarian
}

Kami menempatkan Kibana:

apt-get install -y kibana

Nyalakan autorun saat memuat OS:

systemctl daemon-reload
systemctl enable kibana.service


Kami meluncurkan:

systemctl start kibana.service

Sekarang Anda dapat pergi ke 192.168.1.253 (tentu saja, alamat IP adalah yang ditugaskan untuk mesin Anda dengan meerkat). Halaman sampul Kibana harus terbuka.

Kami menempatkan Filebeat:

apt-get install -y filebeat

Nyalakan autorun saat memuat OS:

systemctl daemon-reload
systemctl enable filebeat


Kami mengaktifkan modul Suricata, yang merupakan bagian dari set modul Filebeat:

filebeat modules enable suricata

Pasang plugin untuk Suricata di Elasticsearch:

/usr/share/elasticsearch/bin/elasticsearch-plugin install ingest-geoip
/usr/share/elasticsearch/bin/elasticsearch-plugin install ingest-user-agent

Lihat UPD 22 Mei 2019.

Mulai Ulang Elasticsearch:

systemctl restart elasticsearch.service

Kami melakukan konfigurasi awal Filebeat, sekaligus memuat template ke Kibana:

filebeat setup -e

Kami memverifikasi bahwa Filebeat telah menemukan /var/log/suricata/eve.json dan sedang memprosesnya. Untuk melakukan ini, jalankan Filebeat dalam mode keluaran data dengan penanda terbitan :

filebeat -e -d "publish"

Yang pertama adalah output json-diformat dari Filebeat itu sendiri, kemudian output teks sederhana dari log-nya, dan hanya setelah beberapa saat output dari Suricata, jadi tunggu dan pastikan semuanya bekerja. Setelah itu, batalkan Filebeat dan kembali ke bash.

Nyalakan autorun saat memuat OS:

systemctl daemon-reload
systemctl enable filebeat.service


Jalankan Filebeat:

systemctl start filebeat.service

Pergi ke Kibana, pilih Dashboard dari menu di sebelah kiri, pilih filebeat- * index. Pilih Dashboard lagi, pilih [Suricata] Alert Overview dari daftar, dan akan mendapatkan sesuatu seperti ini:

gambar

Opsional


Jangan lupa untuk logrotate, dan tidak peduli seberapa luas hard drive, Suricata akan mencetak skor dengan sangat cepat:

nano /etc/logrotate.d/suricata
/var/log/suricata/*.log /var/log/suricata/*.json
{
setiap minggu
putar 3
missingok
nocompress
buat
skrip yang dibagikan
postrotate
/ bin / kill -HUP `cat /var/run/suricata.pid 2> / dev / null` 2> / dev / null || benar
naskah akhir
}

Selain itu, ada desas-desus bahwa seseorang secara teratur sniffer di Mikrotik dengan status berlari berhenti untuk memberikan lalu lintas. Kemudian kami menulis skrip untuk memulai kembali sniffer dan menjalankannya sesuai jadwal:

/tool sniffer stop
:delay 30s
/tool sniffer start


Kesimpulan


Terus terang, saya tidak cukup puas dengan stabilitas bundel di atas. Yaitu: layak untuk dinyalakan kembali, dan mukjizat dimulai. Suatu kali, semuanya kecuali pasangan berhenti memproses aturan saya. Saya harus menginstal ulang semuanya. Kedua kalinya, Elasticsearch umumnya berhenti menerima data dari Filebeat, dan harus memutar kembali ke snapshot keadaan sebelum reboot.

Saya belum memecahkan masalah ini.

Selain itu, ada rencana untuk mengimplementasikan IPS berdasarkan alamat IP dari penjahat yang diidentifikasi oleh Suricata yang ditransfer ke Mikrotik.

UPD : Tuduhan ketidakstabilan dijatuhkan. Kesimpulan saya tentang penghentian pemrosesan aturan adalah keliru. Faktanya, alasan kekosongan di Dashboard setelah reboot adalah karena fakta bahwa Filebeat dan Elasticsearch membutuhkan waktu yang sangat nyata untuk mem-parsing file json multi-gigabyte dari meerkat. Jika Anda membuka Dasbor dengan acara untuk periode yang menyertakan tanggal file eve.json dibuat , Anda bisa melihat bagaimana kolom bagan tumbuh saat file diproses. Seiring dengan peristiwa yang diproses, peringatan muncul di Dasbor yang sesuai. Selain itu, sniffer di RouterOS pada x86 tidak pernah digantung.

UPD 22 Mei 2019 : Dimulai dengan versi Elasticsearch 6.7, plugin ingest-geoip dan ingest-user-agent telah dikonversi ke modul. Karenanya, item dengan pemasangannya dilewati.

Juga, ketika memutakhirkan, Anda mendapatkan kesalahan startup Elasticsearch. Anda akan melihat kesalahan dalam log:

database yang diharapkan [GeoLite2-ASN.mmdb] tidak ada di [/ etc / elasticsearch / ingest-geoip]

Untuk memulihkan kinerja, kami melakukan:

/usr/share/elasticsearch/bin/elasticsearch-plugin remove --purge ingest-geoip

Source: https://habr.com/ru/post/id431600/


All Articles