Το προφίλ μας στο Google Plus
0

Snort στο pfSense και Snorby στο Security Onion

Στο κεντρικό άρθρο του deltaHacker 036 ασχολούμαστε με τα συστήματα intrusion detection και prevention, εστιάζοντας στο δημοφιλές και πανίσχυρο Snort. Για λόγους ευκολίας δουλεύουμε σε ένα pfSense router, εκμεταλλευόμενοι έτσι το βολικό web panel που παρέχεται για το Snort σ’ αυτό το περιβάλλον. Αυτό ακριβώς το setup είναι ό,τι πρέπει για κάποιον που τώρα ξεκινά ν’ ασχολείται με τα εν λόγω συστήματα, ωστόσο λείπει και κάτι σημαντικό: Ένα σύγχρονο κι εύχρηστο εργαλείο για την οργάνωση και διαχείριση των απειραριθμήσιμων alerts που παράγει το Snort…

Για τη διαχείριση των alerts του Snort διατίθεται μια πληθώρα δωρεάν αλλά κι επί πληρωμή εργαλείων. Μια καλή σύνοψη αυτών γίνεται σε σχετικό post, στο επίσημο blog του Snort. Εργαλεία σαν αυτά βοηθούν τους υπευθύνους ασφαλείας δικτύων να επιβάλλουν προαποφασισμένες πολιτικές ή/και να εντοπίζουν δυνητικούς κινδύνους, πριν αυτοί προκαλέσουν προβλήματα σε μεμονωμένους χρήστες ή ακόμη και σ’ ολόκληρα δίκτυα. Το Snorby είναι ένα από τα δωρεάν εργαλεία της κατηγορίας που –για εμάς τουλάχιστον– ξεχωρίζει. Ήδη από την αρχή της έρευνάς μας διαπιστώσαμε ότι, σε αντίθεση με άλλα συστήματα παρακολούθησης και φιλτραρίσματος alerts, το Snorby παρέχει ένα μοντέρνο, εύχρηστο κι ευέλικτο web panel. Ο διαχειριστής του δικτύου είναι πολύ εύκολο να οπτικοποιεί τα alerts του Snort, να τα κατηγοριοποιεί όπως τον βολεύει, αλλά και ν’ ανακαλύπτει –σχετικά εύκολα– εκείνα που αφορούν σε σοβαρές (δυνητικές) απειλές.

Ένα μόνο κακό έχει το Snorby: Η εγκατάστασή του είναι εύκολη στη θεωρία, όχι όμως και στην πράξη. Πρόκειται ουσιαστικά για ένα web application γραμμένο σε Ruby on Rails, το οποίο είναι κάπως ευαίσθητο ή αν θέλετε επιλεκτικό ως προς τα dependencies. Μετά από αρκετές αποτυχημένες προσπάθειες εγκατάστασης σε διάφορες εκδόσεις του Ubuntu Server, ήμασταν έτοιμοι να εγκαταλείψουμε τις προσπάθειες και να στραφούμε αλλού… Και κάπου τότε ανακαλύψαμε το Security Onion.

Σεμνό σχέδιο για απόλυτη εποπτεία
Το Security Onion είναι μια διανομή Linux προσανατολισμένη στο intrusion detection, στην επισκόπηση της ασφάλειας δικτύων, καθώς και στη διαχείριση αρχείων καταγραφής. Βασίζεται στο 64μπιτο Ubuntu Server 12.04 LTS και περιλαμβάνει μια σειρά από εφαρμογές IDS (Snort, Suricata, Bro κ.ά.), καθώς και συστήματα οργάνωσης και παρακολούθησης alerts κι αρχείων καταγραφής (Squil, Snorby, ELSA κ.ά.). Η ρύθμισή του *μετά* τη βασική εγκατάσταση του λειτουργικού, γίνεται από το περιβάλλον γραφικών και με τη βοήθεια ενός φιλικού script.

Η αλήθεια είναι πως το Security Onion δεν προορίζεται για μικρά, οικιακά δίκτυα. Αντίθετα, τα πιθανά σενάρια χρήσης εμπλέκουν ένα ή και περισσότερα μεγάλα δίκτυα, σε στρατηγικά σημεία των οποίων βρίσκονται ανεπτυγμένοι οι λεγόμενοι sensors. Ένα sensor μπορεί να ‘ναι μια άλλη εγκατάσταση του Security Onion ή κάποιο μεμονωμένο IDS, όπως είναι το Snort. Σε κάθε περίπτωση, τα sensors αναφέρουν πληροφορίες σε έναν Security Onion server — και σημειώστε ότι clients (sensors) και server επιτρέπεται να βρίσκονται όλοι στο ίδιο host.

Αν ενδιαφέρεστε για την ασφάλεια δικτύων καθώς και για τη διαχείριση δικτυακών assets, τότε σίγουρα αξίζει να παίξετε με το Security Onion. Εμείς, από τη στιγμή που έχουμε ήδη το Snort ρυθμισμένο στο pfSense box, θα δείξουμε σε λίγο πώς εκμεταλλευόμαστε το Security Onion μόνον όσον αφορά στα εργαλεία διαχείρισης alerts κι αρχείων καταγραφής. Αναλυτικότερα, θα δούμε πώς εγκαθιστούμε και πώς ρυθμίζουμε σωστά το Security Onion, μόνο και μόνο για να παίξουμε με το Snorby. Το εν λόγω εργαλείο διαβάζει alerts που έχουν σταλεί από sensors κι έχουν αποθηκευτεί σε μια τοπική (για το Security Onion) βάση της MySQL. Το μοναδικό sensor του σεναρίου μας είναι το Snort, στο pfSense box. Ακριβέστερα, ακόμη και για το ίδιο host είναι δυνατόν να έχουμε ένα διαφορετικό sensor για κάθε διαφορετικό network interface που επιβλέπει το Snort. Όλα αυτά τα sensors στέλνουν τις πληροφορίες τους στην απομακρυσμένη (γι’ αυτά) βάση του Snorby, με τη βοήθεια του Barnyard2 (στο pfSense εγκαθίσταται αυτόματα μαζί με το Snort).

Τώρα, σε περίπτωση που εγκαταστήσετε το Security Onion από το επίσημο ISO image, τότε αυτό που ουσιαστικά παίρνετε είναι ένα προσαρμοσμένο Xubuntu 12.04 64bit με έξτρα repositories κι έξτρα προεγκατεστημένα πακέτα. Σε πολύ λίγο θα εγκαταστήσουμε το Security Onion σε εικονική μηχανή — και το ίδιο προτείνουμε και σ’ εσάς. Η συγκεκριμένη όμως διανομή είναι κάπως απαιτητική σε πόρους συστήματος, οπότε λογικά θα θέλουμε να κάνουμε οικονομία όπου κι όπως μπορούμε. Το περιβάλλον γραφικών του “στάνταρτ” Security Onion δεν το χρειαζόμαστε –ούτως ή άλλως στο Snorby θα συνδεόμαστε δικτυακά από κάποιον web browser–, άρα αμέσως αμέσως καταλαβαίνουμε ότι αξίζει ν’ απαλλαγούμε από το Xfce (το περιβάλλον γραφικών του Xubuntu). Για λόγους οικονομίας πόρων, λοιπόν, θα ξεκινήσουμε εγκαθιστώντας το “σκέτο” Ubuntu Server 12.04 LTS, το οποίο στερείται του όποιου περιβάλλοντος γραφικών. Αμέσως μετά θα βάλουμε τα έξτρα repositories και τις έξτρα εφαρμογές που θα μετατρέψουν το VM μας σ’ ένα πληρέστατο αλλά “αδυνατισμένο” Security Onion server.

Προσοχή: Μην επιχειρήσετε να εγκαταστήσετε κάποια έκδοση του Ubuntu Server διαφορετική από την 12.04, αφού το Security Onion είναι βασισμένο ειδικά σ’ αυτή.


Βήμα 1 – Λήψη κατάλληλου Ubuntu Server ISO image
Βήμα 2 – Προδιαγραφές εικονικής μηχανής
Βήμα 3 – Εγκατάσταση Ubuntu Server
Βήμα 4 – Αναβάθμιση συστήματος
Βήμα 5 – Repositories του Security Onion κι εγκατάσταση
Βήμα 6 – Ρύθμιση του Security Onion
Βήμα 7 – Ρύθμιση iptables και MySQL, στο Security Onion
Βήμα 8 – Δημιουργία χρήστη για τη βάση του Snorby
Βήμα 9 – Πρώτη σύνδεση στο web panel του Snorby
Βήμα 10 – Ρύθμιση & ενεργοποίηση του Barnyard2, στο pfSense
Βήμα 11 – Χρήση του Snorby, στο Security Onion

Βήμα 1 – Λήψη κατάλληλου Ubuntu Server ISO image
Κατεβάζουμε το ISO image για το πλέον πρόσφατο revision του Ubuntu Server 12.04 LTS — και συγκεκριμένα εκείνο της 64μπιτης εκδοχής. Τη στιγμή που γράφεται το παρόν, το εν λόγω image είναι το

ubuntu-12.04.5-server-amd64.iso

και το λαμβάνουμε από το ακόλουθο URL:

http://releases.ubuntu.com/12.04.5/ubuntu-12.04.5-server-amd64.iso

Εναλλακτικά, υπάρχει κι επίσημο torrent:

http://releases.ubuntu.com/12.04/ubuntu-12.04.5-server-amd64.iso.torrent

(λίστα με τα βήματα)

Βήμα 2 – Προδιαγραφές εικονικής μηχανής
Από το περιβάλλον του hypervizor της προτίμησής μας δημιουργούμε ένα κατάλληλο virtual machine, για την εγκατάσταση του Ubuntu Server. Δείτε τις γενικές προδιαγραφές του δικού μας VM.

  • Μνήμη RAM: 2GB
  • Επεξεργαστής: Ένας, με δύο πυρήνες
  • Δίσκος: 64GB, δυναμικός
  • Network Adapter: Bridged, για την ακρίβεια με την κάρτα δικτύου που έχει ο host κι επικοινωνεί με το pfSense box

Το host computer στο οποίο εργαστήκαμε ήταν ένα ταπεινό PC με διπύρηνο Core i3 (hyperthreaded) και 8GB μνήμης RAM. Ο hypervizor που επιλέξαμε ήταν το VMware Workstation 10.0.3. Να σημειώσουμε ότι μερικές εβδομάδες νωρίτερα είχαμε κάνει ανάλογες δοκιμές, στον ίδιο υπολογιστή, με το VirtualBox 4.3.16. Αμφότεροι οι hypervizors δούλεψαν άψογα κι αυτό σίγουρα δεν προκαλεί καμία έκπληξη, σε κανέναν :)

Σημείωση. Όταν έχουμε ένα μεσαίο προς μεγάλο δίκτυο, οι απαιτήσεις του Security Onion σε υπολογιστικούς πόρους κάθε άλλο παρά ευκαταφρόνητες είναι. Αν πάλι μιλάμε για ένα μικρό, ενδεχομένως οικιακό, τοπικό δίκτυο, όπου μάλιστα υπάρχουν λίγα μόνο sensors (π.χ., ένα για κάθε network adapter του pfSense box), τότε άνετα μπορούμε να ξεκινήσουμε την αξιολόγηση του Security Onion με κάποιο VM που θα έχει προδιαγραφές ίδιες ή έστω κοντά στις προαναφερθείσες.

(λίστα με τα βήματα)

Βήμα 3 – Εγκατάσταση Ubuntu Server
Η διαδικασία της εγκατάστασης είναι η τυπική για το Ubuntu Server. Σε τρία μόνο σημεία χρειάζεται προσοχή:

  1. Στην ερώτηση για κρυπτογράφηση του home directory πρέπει ν’ απαντήσουμε αρνητικά.
  2. Στο στάδιο του partitioning, θα υποδείξουμε στον εγκαταστάτη να χρησιμοποιήσει ολόκληρο το δίσκο (και δεν ρυθμίζουμε LVM).
  3. Κατά την επιλογή συλλογών λογισμικού για εγκατάσταση, μαρκάρουμε μόνο το “OpenSSH server”.

Κατά την εγκατάσταση του Ubuntu Server για την 'υποδοχή' του Security Onion, φροντίζουμε ώστε να *μην* επιλέξουμε την κρυπτογράφηση του home directory.

Θέλουμε το Ubuntu Server να καταλάβει ολόκληρο το δίσκο και να μη ρυθμιστεί το LVM.

Η μόνη έξτρα συλλογή πακέτων που επιθυμούμε να εγκατασταθεί, είναι εκείνη που αφορά στον OpenSSH server.

Προτείνεται εξάλλου να σημειώσουμε κάπου το MAC address από το network adapter του VM, και κατόπιν να πούμε στο pfSense ν’ αναθέτει πάντα την ίδια διεύθυνση IP στον adapter με το εν λόγω MAC. (Στο web panel του pfSense, δώστε Status –> DHCP Leases και πράξτε τα δέοντα.)

Ενώ το Ubuntu Server/Security Onion VM είναι ρυθμισμένο ώστε να παίρνει δυναμικά διεύθυνση IP, το pfSense μας φροντίζει να του αποδίδει πάντα την ίδια διεύθυνση (10.10.10.230).

(λίστα με τα βήματα)

Βήμα 4 – Αναβάθμιση συστήματος
Μετά την ολοκλήρωση της εγκατάστασης έρχεται η στιγμή για το πρώτο login, πιθανότατα μέσω SSH, στο λογαριασμό του χρήστη που δημιουργήσαμε από τον installer του Ubuntu Server. Παρατηρούμε ότι υπάρχουν δεκάδες πακέτα για τα οποία διατίθενται νεότερες εκδόσεις. Κατά τα γνωστά, πριν αναβαθμίσουμε φρεσκάρουμε την τοπική βάση με όλα διαθέσιμα πακέτα, από όλα τα προκαθορισμένα repositories:

delta@seconion:~$ apt-get update

(“delta” είναι το username του χρήστη μας). Αν προηγουμένως ο installer του Ubuntu κατάλαβε ότι βρισκόσαστε στην Ελλάδα –που σίγουρα θα το κατάλαβε αν πράγματι βρισκόσαστε στην Ελλάδα κι όχι, π.χ., στο Ανατολικό Τιμόρ–, στο αρχείο /etc/apt/sources.list θα ‘χει ήδη βάλει μια σειρά από τοπικά, ελληνικά mirrors. Το θέμα μ’ αυτή την πρωτοβουλία είναι ότι, τώρα, η διαδικασία φρεσκαρίσματος αποτυγχάνει με το ακόλουθο μήνυμα:

Some index files failed to download.
They have been ignored, or old ones used instead.

Ευτυχώς το πρόβλημα ξεπερνιέται εύκολα, αλλάζοντας όλα τα ελληνικά mirrors μέσα στο αρχείο /etc/apt/sources.list:

delta@seconion:~$ sudo sed -i 's/gr./us./g' /etc/apt/sources.list

Όπως υποψιάζεστε απ’ αυτό το “us”, εμείς προτιμήσαμε τα αμερικάνικα mirrors. Μπορείτε βεβαίως να προτιμήσετε κάποια που είναι γεωγραφικά εγγύτερα (αντί για “us” βάλτε, π.χ., “de”). Επιχειρούμε να φρεσκάρουμε ξανά…

delta@seconion:~$ apt-get update

…κι αυτή τη φορά όλα βαίνουν καλώς! Για την αναβάθμιση των πακέτων αρκεί να πληκτρολογήσουμε

delta@seconion:~$ sudo apt-get dist-upgrade

Ακολούθως επανεκκινούμε το Ubuntu Server και συνδεόμαστε ξανά. Παρατηρήστε το μήνυμα που πληροφορεί ότι το λειτουργικό θα υποστηρίζεται επισήμως έως τον Απρίλιο του 2017. Μάλλον, λοιπόν, δεν πειράζει και πολύ που το Security Onion βασίζεται στην έκδοση 12.04 του Ubuntu κι όχι σε κάποια νεότερη.

Δεν είναι και λίγα τα updates που μας περιμένουν, αμέσως μετά την εγκατάσταση του Ubuntu Server 12.04.5 LTS. Καλό αυτό :)

Η πρώτη απόπειρα για ανανέωση της τοπικής database με τα περιεχόμενα των repositories, απλά αποτυγχάνει. Υπάρχει κάποιο θέμα με τα εγχώρια mirrors, αλλά δεν είναι και κάτι που δεν μπορούμε να διορθώσουμε.

Το Ubuntu Server 12.04 LTS υποστηρίζεται επισήμως έως και τον Απρίλιο του 2017. Καθόλου δεν πειράζει, λοιπόν, που το Security Onion δεν βασίζεται (ακόμα) στην πλέον πρόσφατη έκδοση του Ubuntu.

(λίστα με τα βήματα)

Βήμα 5 – Repositories του Security Onion κι εγκατάσταση
Με βάση και τις επίσημες οδηγίες για την εγκατάσταση του Security Onion, αρχικά φροντίζουμε ώστε η MySQL να μη ρωτά για το password του χρήστη root (της MySQL):

delta@seconion:~$ echo "debconf debconf/frontend select noninteractive" | sudo debconf-set-selections

Προκειμένου τώρα να προσθέσουμε στο σύστημα τα repositories του Security Onion, πληκτρολογούμε τα ακόλουθα:

delta@seconion:~$ sudo apt-get -y install python-software-properties
delta@seconion:~$ sudo add-apt-repository -y ppa:securityonion/stable

Βεβαίως, μετά την προσθήκη ενός οποιουδήποτε repository καλό είναι να ενημερώνουμε την τοπική βάση με τα διαθέσιμα πακέτα:

delta@seconion:~$ sudo apt-get update

Για την εγκατάσταση του ίδιου του Security Onion υπάρχει το βολικό meta-package ονόματι securityonion-all:

delta@seconion:~$ sudo apt-get -y install securityonion-all

Αναλόγως της ταχύτητας σύνδεσης προς το Internet, η εγκατάσταση των πακέτων του Security Onion ίσως χρειαστεί αρκετά λεπτά για να ολοκληρωθεί. Αμέσως μετά, κάντε και μια επανεκκίνηση στο VM.

(λίστα με τα βήματα)

Βήμα 6 – Ρύθμιση του Security Onion
Από το περιβάλλον γραφικών ενός physical ή virtual host με Linux ή κάποιο άλλο Unix-like OS, συνδεόμαστε μέσω SSH στο VM με το Security Onion.

Προσοχή: Ειδικά γι’ αυτή τη σύνδεση πρέπει να ‘ναι ενεργοποιημένο το X11 forwarding, ώστε από την κονσόλα του SSH client να ‘χουμε δυνατότητα χρήσης εφαρμογών γραφικών του server.

Δείτε, π.χ., πώς συνδεθήκαμε εμείς στο VM με το Security Onion, από το τερματικό ενός VM με το elementary OS:

sub0@elementary:~$ ssh -X delta@seconion

Σημειώνουμε ότι…

  • sub0 είναι ο χρήστης μας στο VM με το elementary OS
  • το X11 forwarding ενεργοποιείται με την παράμετρο -X
  • delta είναι ο χρήστης μας στο VM με το Ubuntu Server/Security Onion
  • seconion είναι το hostname του προαναφερθέντος VM, όπως το ξέρει ο nameserver του pfSense (αν δεν έχετε φροντίσει γι’ αυτή την αντιστοίχιση, στη θέση του hostname θα βάλετε απλά το IP του host)

Τώρα, για τη ρύθμιση του Security Onion αρκεί να πληκτρολογήσουμε…

delta@seconion:~$ sudo sosetup

και ν’ απαντήσουμε στις ερωτήσεις των παραθύρων που θα παρουσιαστούν μπροστά μας. Μπορείτε βεβαίως να κάνετε ελεύθερα τις επιλογές σας, προσέξτε ωστόσο λίγο τα ακόλουθα σημεία που αφορούν στις δικές μας επιλογές και κατά πάσα πιθανότητα θα έχουν νόημα και για το δικό σας setup.

Μετά τον εμπλουτισμό των repositories του Ubuntu Server μ' εκείνα του Security Onion, καθώς και την εγκατάσταση όλων των σχετικών πακέτων, σειρά έχει το script ονόματι sosetup. Είναι εξαιρετικά φιλικό και λειτουργεί στο περιβάλλον γραφικών, οπότε το τρέχουμε από το desktop κάποιας διανομής Linux κι αφού πρώτα συνδεθούμε στο Ubuntu Server VM μέσω SSH και με ενεργοποιημένο το X11 forwarding.

  • Αν και η μοναδική κάρτα δικτύου του VM με το Security Onion είναι ήδη ρυθμισμένη (χάρη στον installer του Ubuntu Server), είναι πολύ καλή ιδέα να επιτρέψουμε στο sosetup να κάνει τις δικές του ρυθμίσεις (κλικ στο “Yes, configure /etc/network/interfaces”).
  • Το sosetup προτείνει στατική διεύθυνση IP για το ένα και μοναδικό network interface του VM, ωστόσο εμείς επιλέξαμε το DHCP: Ούτως ή άλλως είχαμε ρυθμίσει κατάλληλα τον DHCP server του pfSense box, ώστε όταν βλέπει DHCP client με MAC address εκείνο της κάρτας του Ubuntu Server, να του αντιστοιχεί πάντα την ίδια διεύθυνση IP.
  • Αφού το sosetup ρυθμίσει τα της δικτύωσης, προτείνει να επανεκκινήσουμε το σύστημα (οι ρυθμίσεις που γίνονται δεν αφορούν μόνο στη διευθυνσιοδότηση). Το reboot βέβαια δεν είναι υποχρεωτικό να γίνει τώρα, αλλά καλό είναι να τελειώνουμε μ’ αυτό οπότε κάνουμε ένα κλικ στο “Yes, reboot”.
  • Μετά την επανεκκίνηση συνδεόμαστε ξανά στο VM του Security Onion (ssh -X delta@seconion) και τρέχουμε και πάλι το sosetup (sudo sosetup).
  • Αυτή τη φορά μπορούμε απλά να προσπεράσουμε τις ρυθμίσεις που αφορούν στη δικτύωση (κλικ στο “Yes, skip network configuration”).
  • Τα είδη του setup που πρόκειται ν’ ακολουθήσει είναι Quick και Advanced. Επιλέγουμε το δεύτερο, αφού έτσι θα έχουμε τη δυνατότητα να καθορίσουμε ποιες υπηρεσίες του Security Onion θα ‘ναι ενεργές και ποιες όχι.
  • Υπάρχουν τρεις διαμορφώσεις (configurations) για ένα Security Onion box/VM: Η Server, η Sensor και η Standalone. Η διαμόρφωση Server είναι ό,τι πρέπει για τις ανάγκες μας. Πράγματι, έχουμε να επιβλέπουμε μόνο ένα –και μάλιστα μικρό– τοπικό δίκτυο, ενώ τρέχουμε ήδη το Snort στο pfSense box (εκεί θα βρίσκονται τα sensors του Security Onion). Ουσιαστικά, το Snorby είναι το μόνο που μας ενδιαφέρει επί του παρόντος από το Security Onion — και η διαμόρφωση Server φροντίζει ώστε να ‘ναι ρυθμισμένο για ‘μας κι έτοιμο για χρήση.
  • Λίγα παράθυρα παρακάτω μάς ζητείται μια διεύθυνση email. Πληκτρολογούμε όποια θέλουμε –κι ας μην είναι πραγματική–, ωστόσο τη σημειώνουμε κάπου αφού θ’ αποτελεί το username για τη σύνδεση στο web panel του Snorby.
  • Μετά τη διεύθυνση email καθορίζουμε κι ένα password, το οποίο θα ισχύει τόσο για το Snorby όσο και για άλλες εφαρμογές παρακολούθησης που διαθέτει το Security Onion (Squil, ELSA κ.ά.).
  • Κάποια στιγμή ερωτόμαστε για το ποια μηχανή IDS επιθυμούμε να χρησιμοποιήσουμε. Εμείς επιλέξαμε το Snort, σημειώστε ωστόσο ότι, επειδή προηγουμένως ζητήσαμε διαμόρφωση Server, το εν λόγω IDS *δεν* πρόκειται να ενεργοποιηθεί μετά την ολοκλήρωση των εργασιών του sosetup. Οφείλουμε να υποδείξουμε κι ένα επιθυμητό ruleset. Πήγαμε με το Emerging Threats GPL, για το οποίο δεν χρειάζεται καν Oinkcode.
  • Το ELSA (Enterprise Log Search and Archive) είναι πανίσχυρο κι εξαιρετικά βολικό για τον εντοπισμό χρήσιμων πληροφοριών μέσα σε εκτενή log files. Δεν το χρειαζόμασταν για τις ανάγκες του παρόντος, γι’ αυτό και στη σχετική ερώτηση του sosetup επιλέξαμε να μην ενεργοποιηθεί. Κάναμε ωστόσο μια νοητή (κι όχι μόνο) υποσημείωση να το ψάξουμε περισσότερο στο κοντινό (;) μέλλον, ενδεχομένως να ετοιμάσουμε κι ένα άρθρο για το περιοδικό ή για το site.
  • (λίστα με τα βήματα)

    Βήμα 7 – Ρύθμιση iptables και MySQL, στο Security Onion
    Παραμένουμε συνδεδεμένοι στο VM με το Security Onion και πρέπει τώρα να φτιάξουμε ένα νέο χρήστη για τη MySQL, ο οποίος θα έχει δικαιοδοσία στη βάση δεδομένων που χρησιμοποιεί το Snorby. Σε αυτόν ακριβώς το λογαριασμό θα συνδέεται το Barnyard2 του Snort, απομακρυσμένα κι από το pfSense box, ώστε να αποθηκεύει τα alerts του IDS.

    Προς το παρόν όμως η MySQL του Security Onion δέχεται συνδέσεις μόνον από το localhost. Επίσης, το firewall (iptables) του Ubuntu Server μπλοκάρει τα πακέτα προς το προκαθορισμένο port της MySQL, που είναι το 3306/TCP. Προφανώς, αυτή η κατάσταση πρέπει ν’ αλλάξει.

    Ξεκινάμε με το firewall:

    delta@seconion:~$ sudo ufw allow proto tcp from 10.10.10.254/32 to any port 3306
    

    To 10.10.10.254 είναι η διεύθυνση IP του pfSense box για το εσωτερικό μας δίκτυο. Η πιθανότητα να ‘ναι ίδια και για το δικό σας setup εκτιμάται κοντά στο μηδέν — αν και Ποτέ δεν Ξέρεις (TM). Σε κάθε περίπτωση, ελέγξτε και τροποποιήστε τον κανόνα του ufw αναλόγως (ufw: Uncomplicated Firewall, front-end για το iptables). Τσεκάρουμε όλους τους κανόνες του iptables πληκτρολογώντας:

    delta@seconion:~$ sudo ufw status
    Status: active
    To                         Action      From
    --                         ------      ----
    22/tcp                     ALLOW       Anywhere
    514                        ALLOW       Anywhere
    1514/udp                   ALLOW       Anywhere
    443/tcp                    ALLOW       Anywhere
    444/tcp                    ALLOW       Anywhere
    7734/tcp                   ALLOW       Anywhere
    7736/tcp                   ALLOW       Anywhere
    3306/tcp                   ALLOW       10.10.10.254
    22/tcp                     ALLOW       Anywhere (v6)
    514                        ALLOW       Anywhere (v6)
    1514/udp                   ALLOW       Anywhere (v6)
    443/tcp                    ALLOW       Anywhere (v6)
    444/tcp                    ALLOW       Anywhere (v6)
    7734/tcp                   ALLOW       Anywhere (v6)
    7736/tcp                   ALLOW       Anywhere (v6)
    

    Όπως διαπιστώνουμε, οι συνδέσεις στο port 3306/TCP πράγματι επιτρέπονται για το host με IP το 10.10.10.254. Κάνουμε στη συνέχεια μια μικρή αλλαγή στο αρχείο ρυθμίσεων της MySQL, ώστε η υπηρεσία να μην αφουγκράζεται για αιτήματα πελατών μόνον από το loopback interface. Συγκεκριμένα, ανοίγουμε το αρχείο /etc/mysql/my.cnf με το nano…

    delta@seconion:~$ sudo nano /etc/mysql/my.cnf
    

    εντοπίζουμε την ακόλουθη γραμμή (π.χ., αναζητώντας με [CTRL+W])

    bind-address = 127.0.0.1
    

    και την αλλάζουμε ώστε να γίνει σαν την ακόλουθη:

    bind-address = 0.0.0.0
    

    Αποθηκεύουμε κι εγκαταλείπουμε το nano ([CTRL+O], [Enter] και μετά [CTRL+X]). Προκειμένου να ληφθεί υπόψη η αλλαγή, απλά επανεκκινούμε την υπηρεσία της MySQL:

    delta@seconion:~$ sudo service mysql restart
    

    Βεβαιωνόμαστε ότι όλα είναι καλά με τη βοήθεια του netstat:

    delta@seconion:~$ sudo netstat -antp
    Active Internet connections (servers and established)
    Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
    tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      56793/mysqld    
    tcp        0      0 0.0.0.0:9876            0.0.0.0:*               LISTEN      1766/apache2    
    tcp        0      0 0.0.0.0:7734            0.0.0.0:*               LISTEN      51106/tclsh     
    tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1099/sshd       
    tcp        0      0 0.0.0.0:7736            0.0.0.0:*               LISTEN      51106/tclsh     
    tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      1766/apache2    
    tcp        0      0 0.0.0.0:444             0.0.0.0:*               LISTEN      1766/apache2    
    tcp       38      0 127.0.0.1:55146         127.0.0.1:7736          CLOSE_WAIT  15982/tclsh     
    tcp        0    192 10.10.10.230:22         10.10.10.250:57756      ESTABLISHED 54524/sshd: delta [
    tcp        0      0 127.0.0.1:3306          127.0.0.1:51196         TIME_WAIT   -               
    tcp6       0      0 :::22                   :::*                    LISTEN      1099/sshd       
    delta@seconion:~$
    

    Πάνω πάνω φιγουράρει η δικτυακή υπηρεσία mysqld, η οποία ακούει για αιτήσεις πελατών από το port 3306/TCP κάθε network interface (κι όχι μόνο του loopback, όπως συνέβαινε πριν την αλλαγή).

    (λίστα με τα βήματα)

    Βήμα 8 – Δημιουργία χρήστη για τη βάση του Snorby
    Όπως αναφέραμε και στην αρχή του προηγουμένου βήματος, οφείλουμε να φτιάξουμε ένα νέο χρήστη για τη βάση δεδομένων της MySQL ονόματι “snorby”, την οποία χρησιμοποιεί το Snorby. (Μερικές φορές τα πεζοκεφαλαία είναι περισσότερο κρίσιμα απ’ όσο θα θέλαμε, αλλά ποιοι είμαστε εμείς για να παραπονιόμαστε;) Παρακολουθήστε πώς εργαζόμαστε:

    delta@seconion:~$ sudo mysql
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 52
    Server version: 5.5.38-0ubuntu0.12.04.1 (Ubuntu)
    
    Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
    
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | performance_schema |
    | securityonion_db   |
    | snorby             |
    +--------------------+
    5 rows in set (0.05 sec)
    
    mysql> create user 'snort'@'10.10.10.254' identified by 'snort_user_password';
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> grant all privileges on snorby.* to 'snort'@'10.10.10.254';
    Query OK, 0 rows affected (0.01 sec)
    
    mysql> flush privileges;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> exit
    Bye
    delta@seconion:~$
    

    Με τα παραπάνω δημιουργήσαμε το νέο χρήστη της MySQL με username το snort και password το snort_user_password. Προφανώς, μπορείτε να ονομάσετε το χρήστη σας όπως αλλιώς θέλετε, ενδεχομένως να του δώσετε κι ένα καλύτερο password. Και λέμε “ενδεχομένως”, αφού στο Ubuntu Server VM με το Security Onion θα έχουν πρόσβαση μόνον όσοι βρίσκονται εντός του τοπικού δικτύου, κι όταν λέμε “μόνον όσοι” σκεφτόμαστε, χμ, εσένα και μόνον, αγαπητέ αναγνώστη.

    Αλλά μπορεί και να κάνουμε λάθος.

    Στο χρήστη snort δώσαμε πλήρη δικαιώματα επί της προϋπάρχουσας βάσης ονόματι “snorby”, την οποία διαβάζει το Snorby προκειμένου να παράγει όλες αυτές τις όμορφες και χρήσιμες αναφορές — για να μην αναφερθούμε τώρα και σ’ αυτά τα θεσπέσια διαγράμματα. Δεν υπερβάλλουμε. Θα το διαπιστώσετε σε λίγο.

    (λίστα με τα βήματα)

    Βήμα 9 – Πρώτη σύνδεση στο web panel του Snorby
    Από τον browser της προτίμησής μας κι από ένα οποιοδήποτε μηχάνημα του τοπικού δικτύου, αρκεί να επισκευθούμε τη διεύθυνση

    https://seconion:4444 
    

    όπου στη θέση του “seconion” εσείς θα βάλετε τη διεύθυνση IP του Security Onion VM. Στα screenshots θα παρατηρήσετε ότι εμείς γράφουμε πράγματι “seconion”, αντί για τη διεύθυνση IP: Όπως έχουμε ήδη αναφέρει καμιά δεκαριά φορές ως τώρα, έχουμε φροντίσει ώστε ο nameserver του pfSense box να κάνει το σχετικό resolving. Εντελώς αναμενόμενα, ο browser διαμαρτύρεται για το self-signed SSL certificate που του παρουσιάζει ο web server. Καλά κάνει, όμως σ’ αυτή την περίπτωση εννοείται ότι το δεχόμαστε ως ασφαλές. Για το login στο web panel του Snorby θα πληκτρολογήσουμε το email και το password που προηγουμένως δώσαμε στο sosetup. Παρατηρήστε λίγο το περιβάλλον του Snorby. Μιας και προς το παρόν δεν υπάρχει κάποιο sensor να στέλνει πληροφορίες στη σχετική βάση, δεν υπάρχει και κάποιο event. Αυτή η κατάσταση σε λίγο θ’ αλλάξει, αρκεί πρώτα να ρυθμίσουμε το Barnyard2 στο Snort του pfSense. Πριν, αξίζει ίσως να ρίξουμε μια ματιά στις ρυθμίσεις του Snorby. Κάντε ένα κλικ στο Settings, πάνω δεξιά στην πρώτη σελίδα του web panel. Επίσης, δώστε και Administration –> General Settings.

    Κατά το πρώτο login στο web panel του Snorby ο browser θα παραπονεθεί, εξαιτίας του self-signed certificate που του παρουσιάζεται. Λογικό κι αναμενόμενο.

    Αφού αποδεχτούμε το πιστοποιητικό συνδεόμαστε στο περιβάλλον του Snorby πληκτρολογώντας το email και το password που δώσαμε προηγουμένως, όταν τρέξαμε το sosetup.

    Είναι κάπως άδεια κι αδιάφορη η κεντρική σελίδα του Snorby, αφού προς το παρόν δεν υπάρχει κάποιο sensor να στέλνει πληροφορίες στη σχετική βάση της MySQL.

    (λίστα με τα βήματα)

    Βήμα 10 – Ρύθμιση & ενεργοποίηση του Barnyard2, στο pfSense
    Συνδεόμαστε τώρα στο web panel του pfSense και δίνουμε Services –> Snort. Επιτρέπεται να έχουμε ένα διαφορετικό sensor για κάθε ένα από τα network interfaces που επιβλέπει το Snort, το οποίο sensor θα στέλνει πληροφορίες στο Snorby του Security Onion. Πρακτικά, το Snorby είναι σε θέση να παίρνει τις πληροφορίες από το Snort χάρη στο Barnyard2 — και μπορούμε να έχουμε ένα Barnyard2 instance για κάθε interface που επιβλέπει το Snort.

    Ας ρυθμίσουμε, π.χ., το Barnyard2 για το WAN interface. Στην καρτέλα ονόματι Snort Interfaces, κάνουμε κλικ στο [e] (στα δεξιά της αντίστοιχης γραμμής) κι αμέσως μετά άλλο ένα στην καρτέλα WAN Barnyard2. Βεβαίως, αρχικά τσεκάρουμε το Enable Barnyard2. Μετά φροντίζουμε ώστε τα κουτάκια Show Υear και Archive Unified2 Logs να ‘ναι επίσης τσεκαρισμένα. Στη θυρίδα Sensor Name, λίγο πιο κάτω, γράφουμε ένα χαρακτηριστικό όνομα για το νέο Sensor. Το όνομα προτείνεται να ‘ναι σύντομο και να μην περιλαμβάνει κενά. Ένα καλό –τουλάχιστον για τα γούστα μας– γενικό όνομα, έχει τη μορφή pfSense_interface. Γι’ αυτό κι ονομάσαμε “pfSense_WAN” (χωρίς τα εισαγωγικά), το Sensor του WAN interface. Στο πλαίσιο MySQL Database Output Settings κάνουμε ένα κλικ στο Enable MySQL Database. Προφανώς, στη συνέχεια συμπληρώνουμε κατάλληλα τα πεδία Database Host, Database Name, Database User Name και Database User Password. Εμείς, π.χ., θέσαμε τα ακόλουθα:

    Database Host = 10.10.10.230
    Database Name = snorby
    Database User Name = snort
    Database User Password = snort_user_password
    

    Μια δυνατότητα που εξ ορισμού είναι απενεργοποιημένη, είναι η Disable Signature Reference Table. Κατά τις δοκιμές μας χρειάστηκε να την ενεργοποιήσουμε (με κλικ στο αντίστοιχο κουτάκι), αφού σε διαφορετική περίπτωση με το που είχαμε παραπάνω από ένα Barnyard2 instances μετά από λίγο σταματούσαν να λειτουργούν.

    Τις επιλογές μας τις επικυρώνουμε μ’ ένα κλικ στο κουμπί [Save], στο κάτω μέρος της σελίδας. Στο πάνω μέρος της ίδιας σελίδας εμφανίζεται ένα μήνυμα, το οποίο πληροφορεί ότι προκειμένου να ενεργοποιηθεί το Barnyard2 θα πρέπει πρώτα να επανεκκινήσουμε το Snort για το αντίστοιχο network interface (WAN). Πράγματι, αν παρατηρήσουμε τις πληροφορίες στην καρτέλα Snort Interfaces, θα δούμε ότι ενώ το Snort τρέχει για το WAN (πράσινο εικονίδιο), δεν ισχύει το ίδιο για το Barnyard2 (κόκκινο εικονίδιο). Για την επανεκκίνηση κάνουμε ένα κλικ στο πράσινο εικονίδιο, το οποίο σχεδόν αμέσως γίνεται κόκκινο (το Snort απενεργοποιείται για το WAN). Με άλλο ένα κλικ και μετά από λίγα δευτερόλεπτα, το εικονίδιο πρασινίζει και πάλι (το Snort ενεργοποιείται για το WAN). Αν όλα έχουν πάει καλά, θα έχει πρασινίσει και το εικονίδιο του Barnyard2. Τώρα, οποτεδήποτε θέλουμε να βεβαιωθούμε ότι το Barnyard2 στέλνει πράγματι πληροφορίες στη βάση του Snorby, στο Security Onion VM αρκεί να πληκτρολογούμε κάτι τέτοιο:

    delta@seconion:~$ sudo netstat -antp | grep mysql
    tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      22505/mysqld
    tcp        0      0 10.10.10.230:3306       10.10.10.254:54195      ESTABLISHED 22505/mysqld
    tcp        0      0 10.10.10.230:3306       10.10.10.254:18600      ESTABLISHED 22505/mysqld
    tcp        0      0 10.10.10.230:3306       10.10.10.254:32366      ESTABLISHED 22505/mysqld
    delta@seconion:~$
    

    Στο παραπάνω παράδειγμα φαίνονται τρεις διαφορετικές συνδέσεις από το 10.10.10.254 (το pfSense box) προς το port 3306/TCP του μηχανήματος 10.10.10.230 (το Ubuntu Server VM με το Security Onion). Υπάρχουν, λοιπόν, τρία διαφορετικά Barnyard2 instances –ένα για κάθε network interface του pfSense box–, τα οποία στέλνουν διαρκώς πληροφορίες στη βάση του Snorby.

    Στο pfSense box μας, το Snort επιβλέπει τρία διαφορετικά network interfaces. Μπορούμε, λοιπόν, να έχουμε τρία διαφορετικά sensors, τα οποία με τη βοήθεια του Barnyard2 θα 'αναφέρουν' στο Security Onion.

    Ενεργοποίηση του Barnyard2 για το WAN interface του pfSense box.

    Θέλουμε το Barnyard2 να στέλνει τα alerts στην απομακρυσμένη βάση της MySQL, η οποία βρίσκεται στο Security Onion VM και τη διαβάζει το Snorby. Κατά τις δοκιμές μας, εξάλλου, χρειάστηκε να τσεκάρουμε το 'Disable Signature Reference Table'. Σε διαφορετική περίπτωση, όταν είχαμε περισσότερα από ένα ενεργά instances του Barnyard2 μετά από λίγο τερματίζονταν.

    (λίστα με τα βήματα)

    Βήμα 11 – Χρήση του Snorby, στο Security Onion
    Χάρη στο εύχρηστο web panel του Snorby και κυρίως χάρη στις βολικές λειτουργίες που παρέχει, π.χ., από τις περιοχές Dashboard και Events, αποκτάμε άριστη εποπτεία για το τι συμβαίνει στο δίκτυο πίσω από το pfSense box — αλλά και για την επικοινωνία με hosts σε άλλα δίκτυα ή/και στο Internet. Δείτε στα λίγα screenshots που ακολουθούν μερικές “όψεις” του δικού μας τοπικού δικτύου. Υπόψιν ότι, αναλόγως της δικτυακής δραστηριότητας, ίσως χρειαστεί κάποιος χρόνος έως ότου συλλεχθούν αρκετά δεδομένα, τα οποία το Snorby θα είναι σε θέση να οπτικοποιήσει. Εξάλλου, μη σας προκαλέσει εντύπωση αν στο δικό σας δίκτυο δεν έχετε *τόσα* πολλά High Severity events, σε σύγκριση με όσα έχουμε εμείς. Για την ακρίβεια, στοιχηματίζουμε ότι θα έχετε πολύ λιγότερα. Όχι επειδή στο δίκτυό μας έχουμε δεκάδες μηχανήματα και συσκευές, αλλά επειδή εδώ υπάρχει ένα Raspberry Pi που λειτουργεί αδιάκοπα ως Tor relay, ενώ στο Snort είναι φορτωμένοι όλοι οι κανόνες που αφορούν στο Tor.

    Τέλος, είναι περιττό να υπογραμμίσουμε ότι το Security Onion δεν είναι χρήσιμο μόνο για το Snorby. Διαθέτει κι άλλες εφαρμογές που σίγουρα αξίζει να ψάξουμε — και στο μυαλό μας έχουμε ακόμα το ELSA. Το πιθανότερο είναι ότι θα επανέλθουμε. Ασχέτως του προγραμματισμού μας, σας ευχόμαστε καλή εξερεύνηση — και κυρίως καλή διασκέδαση!

    Λίγα λεπτά μετά την ενεργοποίηση του Barnyard2 για το WAN interface του pfSense box, το Snorby στο Security Onion έχει ένα νέο sensor να του αναφέρεται.

    Τρία sensors από το pfSense box στέλνουν πληροφορίες στη βάση του Snorby. Παρατηρήστε ότι, εκτός από τα ονόματα, τα sensors διαφοροποιούνται και στο χρώμα. Έχουμε εξάλλου χιλιάδες alerts, κατηγοριοποιημένα στα τρία διαφορετικά επίπεδα severity (κρισιμότητα) του Snorby: High, Medium και Low. Η συγκεκριμένη όψη των alerts αφορά στις τελευταίες 24 ώρες και η ξαφνική, απότομη πτώση, οφείλεται σε διακοπή ρεύματος.

    Όψη για τα alerts της χθεσινής μέρας. Το γράφημα είναι δυναμικό, υπό την έννοια ότι μπορούμε να περιλαμβάνουμε ή όχι σ' αυτό ένα ή περισσότερα sensors. Στο screenshot δεν έχουμε συμπεριλάβει το sensor ονόματι 'seconion', το οποίο είναι το προκαθορισμένο για το Snorby και για τις δοκιμές μας ούτως ή άλλως είναι ανενεργό.

    Σ' αυτό το γράφημα απεικονίζονται τα τρία προκαθορισμένα severity levels του Snorby, για τις τελευταίες 24 ώρες. Τα severities κρισιμότητας High δείχνουν ανησυχητικά πολλά -- και να φανταστείτε ότι η πλειονότητά τους δεν είναι καν false-positives. Αλλά η κατάσταση με το τοπικό μας δίκτυο δεν είναι τόσο ζοφερή όσο δείχνει. Απλά, στο Snort έχουμε ενεργοποιημένους policy-related κανόνες και υπάρχει πληθώρα παραβιάσεων που αφορούν στα Dropbox και BitTorrent Sync. Επίσης, ενεργοποιημένοι στο Snort είναι και οι κανόνες που αφορούν στο Tor, τη στιγμή που στο τοπικό μας δίκτυο υπάρχει ένα Raspberry Pi με χρέη Tor relay.

    (λίστα με τα βήματα)

Leave a Reply

You must be logged in to post a comment.

Σύνδεση

Αρχείο δημοσιεύσεων