2. Ελαστική στοίβα: ανάλυση αρχείων καταγραφής ασφαλείας. Logstash

2. Ελαστική στοίβα: ανάλυση αρχείων καταγραφής ασφαλείας. Logstash

Στο παρελθόν άρθρο συναντηθήκαμε Στοίβα ELK, από ποια προϊόντα λογισμικού αποτελείται. Και η πρώτη εργασία που αντιμετωπίζει ένας μηχανικός όταν εργάζεται με τη στοίβα ELK είναι η αποστολή αρχείων καταγραφής για αποθήκευση στο elasticsearch για μετέπειτα ανάλυση. Ωστόσο, αυτό είναι απλώς lip service, το elasticsearch αποθηκεύει αρχεία καταγραφής με τη μορφή εγγράφων με συγκεκριμένα πεδία και τιμές, πράγμα που σημαίνει ότι ο μηχανικός πρέπει να χρησιμοποιήσει διάφορα εργαλεία για να αναλύσει το μήνυμα που αποστέλλεται από τα τελικά συστήματα. Αυτό μπορεί να γίνει με διάφορους τρόπους - γράψτε μόνοι σας ένα πρόγραμμα που θα προσθέσει έγγραφα στη βάση δεδομένων χρησιμοποιώντας το API ή χρησιμοποιήστε έτοιμες λύσεις. Σε αυτό το μάθημα θα εξετάσουμε τη λύση Logstash, που αποτελεί μέρος της στοίβας ELK. Θα εξετάσουμε πώς μπορούμε να στείλουμε αρχεία καταγραφής από συστήματα τελικού σημείου στο Logstash και, στη συνέχεια, θα ρυθμίσουμε ένα αρχείο διαμόρφωσης για ανάλυση και ανακατεύθυνση στη βάση δεδομένων Elasticsearch. Για να γίνει αυτό, λαμβάνουμε αρχεία καταγραφής από το τείχος προστασίας Check Point ως το εισερχόμενο σύστημα.

Το μάθημα δεν καλύπτει την εγκατάσταση της στοίβας ELK, καθώς υπάρχει ένας τεράστιος αριθμός άρθρων σχετικά με αυτό το θέμα· θα εξετάσουμε το στοιχείο διαμόρφωσης.

Ας συντάξουμε ένα σχέδιο δράσης για τη διαμόρφωση του Logstash:

  1. Έλεγχος ότι το elasticsearch θα δέχεται αρχεία καταγραφής (έλεγχος της λειτουργικότητας και του ανοίγματος της θύρας).
  2. Εξετάζουμε πώς μπορούμε να στείλουμε συμβάντα στο Logstash, να επιλέξουμε μια μέθοδο και να την εφαρμόσουμε.
  3. Διαμορφώνουμε το Input στο αρχείο διαμόρφωσης Logstash.
  4. Ρυθμίζουμε το Output στο αρχείο διαμόρφωσης Logstash σε λειτουργία εντοπισμού σφαλμάτων για να κατανοήσουμε πώς φαίνεται το μήνυμα καταγραφής.
  5. Ρύθμιση φίλτρου.
  6. Ρύθμιση της σωστής Εξόδου στο ElasticSearch.
  7. Το Logstash ξεκινά.
  8. Έλεγχος των κορμών στο Kibana.

Ας δούμε κάθε σημείο με περισσότερες λεπτομέρειες:

Έλεγχος ότι το elasticsearch θα δέχεται αρχεία καταγραφής

Για να το κάνετε αυτό, μπορείτε να χρησιμοποιήσετε την εντολή curl για να ελέγξετε την πρόσβαση στο Elasticsearch από το σύστημα στο οποίο έχει αναπτυχθεί το Logstash. Εάν έχετε διαμορφώσει τον έλεγχο ταυτότητας, τότε μεταφέρουμε επίσης τον χρήστη/κωδικό μέσω curl, προσδιορίζοντας τη θύρα 9200 εάν δεν την έχετε αλλάξει. Εάν λάβετε μια απάντηση παρόμοια με την παρακάτω, τότε όλα είναι εντάξει.

[elastic@elasticsearch ~]$ curl -u <<user_name>> : <<password>> -sS -XGET "<<ip_address_elasticsearch>>:9200"
{
  "name" : "elastic-1",
  "cluster_name" : "project",
  "cluster_uuid" : "sQzjTTuCR8q4ZO6DrEis0A",
  "version" : {
    "number" : "7.4.1",
    "build_flavor" : "default",
    "build_type" : "rpm",
    "build_hash" : "fc0eeb6e2c25915d63d871d344e3d0b45ea0ea1e",
    "build_date" : "2019-10-22T17:16:35.176724Z",
    "build_snapshot" : false,
    "lucene_version" : "8.2.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}
[elastic@elasticsearch ~]$

Εάν δεν ληφθεί η απάντηση, τότε ενδέχεται να υπάρχουν διάφοροι τύποι σφαλμάτων: η διαδικασία elasticsearch δεν εκτελείται, έχει καθοριστεί λάθος θύρα ή η θύρα έχει αποκλειστεί από ένα τείχος προστασίας στο διακομιστή όπου είναι εγκατεστημένο το elasticsearch.

Ας δούμε πώς μπορείτε να στείλετε αρχεία καταγραφής στο Logstash από ένα τείχος προστασίας σημείου ελέγχου

Από τον διακομιστή διαχείρισης Check Point μπορείτε να στείλετε αρχεία καταγραφής στο Logstash μέσω syslog χρησιμοποιώντας το βοηθητικό πρόγραμμα log_exporter, μπορείτε να διαβάσετε περισσότερα σχετικά εδώ άρθρο, εδώ θα αφήσουμε μόνο την εντολή που δημιουργεί τη ροή:

cp_log_export προσθήκη ονόματος check_point_syslog target-server < > target-port 5555 πρωτόκολλο μορφή tcp γενική λειτουργία ανάγνωσης ημι-ενοποιημένη

< > - διεύθυνση του διακομιστή στον οποίο εκτελείται το Logstash, target-port 5555 - θύρα στην οποία θα στείλουμε αρχεία καταγραφής, η αποστολή αρχείων καταγραφής μέσω tcp μπορεί να φορτώσει τον διακομιστή, επομένως σε ορισμένες περιπτώσεις είναι πιο σωστό να χρησιμοποιήσετε το udp.

Ρύθμιση του INPUT στο αρχείο διαμόρφωσης Logstash

2. Ελαστική στοίβα: ανάλυση αρχείων καταγραφής ασφαλείας. Logstash

Από προεπιλογή, το αρχείο διαμόρφωσης βρίσκεται στον κατάλογο /etc/logstash/conf.d/. Το αρχείο διαμόρφωσης αποτελείται από 3 σημαντικά μέρη: INPUT, FILTER, OUTPUT. ΣΕ ΕΙΣΑΓΩΓΉ υποδεικνύουμε από πού θα λαμβάνει αρχεία καταγραφής το σύστημα, μέσα FILTER αναλύστε το αρχείο καταγραφής - ρυθμίστε τον τρόπο διαίρεσης του μηνύματος σε πεδία και τιμές, σε ΠΑΡΑΓΩΓΉ διαμορφώνουμε τη ροή εξόδου - όπου θα σταλούν τα αναλυμένα αρχεία καταγραφής.

Αρχικά, ας διαμορφώσουμε το INPUT, ας εξετάσουμε ορισμένους από τους τύπους που μπορούν να είναι - αρχείο, tcp και exe.

TCP:

input {
tcp {
    port => 5555
    host => “10.10.1.205”
    type => "checkpoint"
    mode => "server"
}
}

mode => "διακομιστής"
Υποδεικνύει ότι το Logstash δέχεται συνδέσεις.

port => 5555
host => “10.10.1.205”
Δεχόμαστε συνδέσεις μέσω της διεύθυνσης IP 10.10.1.205 (Logstash), θύρα 5555 - η θύρα πρέπει να επιτρέπεται από την πολιτική του τείχους προστασίας.

τύπος => "σημείο ελέγχου"
Επισημαίνουμε το έγγραφο, πολύ βολικό εάν έχετε πολλές εισερχόμενες συνδέσεις. Στη συνέχεια, για κάθε σύνδεση μπορείτε να γράψετε το δικό σας φίλτρο χρησιμοποιώντας το λογικό αν.

Αρχείο:

input {
  file {
    path => "/var/log/openvas_report/*"
    type => "openvas"
    start_position => "beginning"
    }
}

Περιγραφή ρυθμίσεων:
διαδρομή => "/var/log/openvas_report/*"
Υποδεικνύουμε τον κατάλογο στον οποίο πρέπει να διαβαστούν τα αρχεία.

τύπος => "openvas"
Τύπος συμβάντος.

start_position => "αρχή"
Όταν αλλάζετε ένα αρχείο, διαβάζει ολόκληρο το αρχείο· εάν ορίσετε "end", το σύστημα περιμένει να εμφανιστούν νέες εγγραφές στο τέλος του αρχείου.

Exec:

input {
  exec {
    command => "ls -alh"
    interval => 30
  }
}

Χρησιμοποιώντας αυτήν την είσοδο, εκκινείται μια (μόνο!) εντολή φλοιού και η έξοδος της μετατρέπεται σε μήνυμα καταγραφής.

εντολή => "ls -alh"
Η εντολή της οποίας η έξοδος μας ενδιαφέρει.

διάστημα => 30
Διάστημα επίκλησης εντολών σε δευτερόλεπτα.

Για να λάβουμε αρχεία καταγραφής από το τείχος προστασίας, καταχωρούμε ένα φίλτρο tcp ή udp, ανάλογα με τον τρόπο αποστολής των αρχείων καταγραφής στο Logstash.

Διαμορφώνουμε το Output στο αρχείο διαμόρφωσης Logstash σε λειτουργία εντοπισμού σφαλμάτων για να κατανοήσουμε πώς φαίνεται το μήνυμα καταγραφής

Αφού ρυθμίσουμε το INPUT, πρέπει να καταλάβουμε πώς θα μοιάζει το μήνυμα καταγραφής και ποιες μέθοδοι πρέπει να χρησιμοποιηθούν για τη διαμόρφωση του φίλτρου καταγραφής (αναλυτής).

Για να το κάνουμε αυτό, θα χρησιμοποιήσουμε ένα φίλτρο που εξάγει το αποτέλεσμα στο stdout για να προβάλουμε το αρχικό μήνυμα. Το πλήρες αρχείο διαμόρφωσης αυτή τη στιγμή θα μοιάζει με αυτό:

input 
{
         tcp 
         {
                port => 5555
  	  	type => "checkpoint"
    		mode => "server"
                host => “10.10.1.205”
   	 }
}

output 
{
	if [type] == "checkpoint" 
       {
		stdout { codec=> json }
	}
}

Εκτελέστε την εντολή για να ελέγξετε:
sudo /usr/share/logstash/bin//logstash -f /etc/logstash/conf.d/checkpoint.conf
Βλέπουμε το αποτέλεσμα, η εικόνα μπορεί να κάνει κλικ:

2. Ελαστική στοίβα: ανάλυση αρχείων καταγραφής ασφαλείας. Logstash

Αν το αντιγράψετε θα μοιάζει με αυτό:

action="Accept" conn_direction="Internal" contextnum="1" ifdir="outbound" ifname="bond1.101" logid="0" loguid="{0x5dfb8c13,0x5,0xfe0a0a0a,0xc0000000}" origin="10.10.10.254" originsicname="CN=ts-spb-cpgw-01,O=cp-spb-mgmt-01.tssolution.local.kncafb" sequencenum="8" time="1576766483" version="5" context_num="1" dst="10.10.10.10" dst_machine_name="[email protected]" layer_name="TSS-Standard Security" layer_name="TSS-Standard Application" layer_uuid="dae7f01c-4c98-4c3a-a643-bfbb8fcf40f0" layer_uuid="dbee3718-cf2f-4de0-8681-529cb75be9a6" match_id="8" match_id="33554431" parent_rule="0" parent_rule="0" rule_action="Accept" rule_action="Accept" rule_name="Implicit Cleanup" rule_uid="6dc2396f-9644-4546-8f32-95d98a3344e6" product="VPN-1 & FireWall-1" proto="17" s_port="37317" service="53" service_id="domain-udp" src="10.10.1.180" ","type":"qqqqq","host":"10.10.10.250","@version":"1","port":50620}{"@timestamp":"2019-12-19T14:50:12.153Z","message":"time="1576766483" action="Accept" conn_direction="Internal" contextnum="1" ifdir="outbound" ifname="bond1.101" logid="0" loguid="{0x5dfb8c13,

Εξετάζοντας αυτά τα μηνύματα, καταλαβαίνουμε ότι τα αρχεία καταγραφής μοιάζουν με: πεδίο = τιμή ή κλειδί = τιμή, που σημαίνει ότι ένα φίλτρο που ονομάζεται kv είναι κατάλληλο. Για να επιλέξετε το σωστό φίλτρο για κάθε συγκεκριμένη περίπτωση, θα ήταν καλή ιδέα να εξοικειωθείτε με αυτά στην τεχνική τεκμηρίωση ή να ρωτήσετε έναν φίλο.

Ρύθμιση φίλτρου

Στο τελευταίο στάδιο που επιλέξαμε kv, η διαμόρφωση αυτού του φίλτρου παρουσιάζεται παρακάτω:

filter {
if [type] == "checkpoint"{
	kv {
		value_split => "="
		allow_duplicate_values => false
	}
}
}

Επιλέγουμε το σύμβολο με το οποίο θα διαιρέσουμε το πεδίο και την τιμή - "=". Εάν έχουμε πανομοιότυπες εγγραφές στο αρχείο καταγραφής, αποθηκεύουμε μόνο μία παρουσία στη βάση δεδομένων, διαφορετικά θα καταλήξετε με μια σειρά από πανομοιότυπες τιμές, δηλαδή εάν έχουμε το μήνυμα "foo = some foo=some" γράφουμε μόνο foo = μερικά.

Ρύθμιση της σωστής Εξόδου στο ElasticSearch

Αφού διαμορφωθεί το Φίλτρο, μπορείτε να ανεβάσετε αρχεία καταγραφής στη βάση δεδομένων ελαστική αναζήτηση:

output 
{
if [type] == "checkpoint"
{
 	elasticsearch 
        {
		hosts => ["10.10.1.200:9200"]
		index => "checkpoint-%{+YYYY.MM.dd}"
    		user => "tssolution"
    		password => "cool"
  	}
}
}

Εάν το έγγραφο είναι υπογεγραμμένο με τον τύπο σημείου ελέγχου, αποθηκεύουμε το συμβάν στη βάση δεδομένων elasticsearch, η οποία δέχεται συνδέσεις στις 10.10.1.200 στη θύρα 9200 από προεπιλογή. Κάθε έγγραφο αποθηκεύεται σε ένα συγκεκριμένο ευρετήριο, σε αυτήν την περίπτωση αποθηκεύουμε στο ευρετήριο "σημείο ελέγχου-" + τρέχουσα ημερομηνία ώρας. Κάθε ευρετήριο μπορεί να έχει ένα συγκεκριμένο σύνολο πεδίων ή δημιουργείται αυτόματα όταν ένα νέο πεδίο εμφανίζεται σε ένα μήνυμα· οι ρυθμίσεις πεδίου και ο τύπος τους μπορούν να προβληθούν στις αντιστοιχίσεις.

Εάν έχετε διαμορφώσει τον έλεγχο ταυτότητας (θα το δούμε αργότερα), πρέπει να καθοριστούν τα διαπιστευτήρια για την εγγραφή σε ένα συγκεκριμένο ευρετήριο, σε αυτό το παράδειγμα είναι "tssolution" με τον κωδικό πρόσβασης "cool". Μπορείτε να διαφοροποιήσετε τα δικαιώματα χρήστη για την εγγραφή αρχείων καταγραφής μόνο σε ένα συγκεκριμένο ευρετήριο και όχι περισσότερο.

Εκκινήστε το Logstash.

Αρχείο διαμόρφωσης Logstash:

input 
{
         tcp 
         {
                port => 5555
  	  	type => "checkpoint"
    		mode => "server"
                host => “10.10.1.205”
   	 }
}

filter {
        if [type] == "checkpoint"{
	kv {
		value_split => "="
		allow_duplicate_values => false
	}
        }
}

output 
{
if [type] == "checkpoint"
{
 	elasticsearch 
        {
		hosts => ["10.10.1.200:9200"]
		index => "checkpoint-%{+YYYY.MM.dd}"
    		user => "tssolution"
    		password => "cool"
  	}
}
}

Ελέγχουμε το αρχείο ρυθμίσεων για ορθότητα:
/usr/share/logstash/bin//logstash -f checkpoint.conf
2. Ελαστική στοίβα: ανάλυση αρχείων καταγραφής ασφαλείας. Logstash

Ξεκινήστε τη διαδικασία Logstash:
sudo systemctl start logstash

Ελέγχουμε ότι η διαδικασία έχει ξεκινήσει:
sudo systemctl κατάσταση logstash

2. Ελαστική στοίβα: ανάλυση αρχείων καταγραφής ασφαλείας. Logstash

Ας ελέγξουμε αν η πρίζα είναι ανοιχτή:
netstat -nat |grep 5555

2. Ελαστική στοίβα: ανάλυση αρχείων καταγραφής ασφαλείας. Logstash

Έλεγχος των κορμών στο Kibana.

Αφού εκτελούνται όλα, μεταβείτε στο Kibana - Discover, βεβαιωθείτε ότι όλα έχουν ρυθμιστεί σωστά, η εικόνα μπορεί να κάνει κλικ!

2. Ελαστική στοίβα: ανάλυση αρχείων καταγραφής ασφαλείας. Logstash

Όλα τα αρχεία καταγραφής είναι στη θέση τους και μπορούμε να δούμε όλα τα πεδία και τις τιμές τους!

Συμπέρασμα

Εξετάσαμε πώς να γράψουμε ένα αρχείο διαμόρφωσης Logstash και ως αποτέλεσμα πήραμε έναν αναλυτή όλων των πεδίων και των τιμών. Τώρα μπορούμε να εργαστούμε με την αναζήτηση και τη σχεδίαση για συγκεκριμένα πεδία. Στη συνέχεια στο μάθημα θα εξετάσουμε την οπτικοποίηση στο Kibana και θα δημιουργήσουμε έναν απλό πίνακα ελέγχου. Αξίζει να αναφέρουμε ότι το αρχείο διαμόρφωσης Logstash χρειάζεται να ενημερώνεται συνεχώς σε ορισμένες περιπτώσεις, για παράδειγμα, όταν θέλουμε να αντικαταστήσουμε την τιμή ενός πεδίου από έναν αριθμό σε μια λέξη. Σε επόμενα άρθρα θα το κάνουμε αυτό συνεχώς.

Μείνετε συντονισμένοι λοιπόνTelegram, Facebook, VK, Ιστολόγιο TS Solution), Γιάντεξ Ζεν.

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο