7. Lokien hälytys järjestelmä

Visualisointi

Tein visualisaation viikon kerätyistä tiedoista kuva alla, jossa näkyy kiinasta tulleet yritykset.

Tein vielä sudo käyttäjänä suoritettavista komennoista visualisaation kuva alla.

Perustamme näille kahdelle visualisoiduille tiedoille hälytys toimintoja, jotka kertovat, jos ulkopuolinen käyttäjä on pääsyt koneelle käsiksi ja yrittänyt suorittaa sudo komentoja.

Aika tehtävässä visualisointi 6.11.2019 kello 10.00 – 11.15.

 

Hälytykset

Ensin asensin Git:in komennolla “sudo apt-get install git“, jotta saan ElastAlertin asennettua Githubista. Kloonasin ElastAlertin paikalliselle koneelle /home/joni/Downloads/ElastAlert kansioon komennolla “git clone https://github.com/Yelp/elastalert.git“. Setupin asentamiseen tarvitaan pythonin paketin hallinta pip, joten latasin sen komennolla “sudo apt-get install python-pip“. Pythonin paketin hallinasta latasin setuptools version 11.3 komennolla “pip install “setuptools>=11.3“. Sitten saan auki Githubista lataamani setup.py tiedoston, joka asentaa ElastAlertin komennolla “sudo python setup.py install“.

Kokeilimme komennolla “elastalert-create-index” tehdä Kibana:aan ElastAlert index, mutta tämä ei toiminut koska tarvittiin vielä riippuvuudet jotka asennettiin komennoilla “pip install “zipp>=0.5”” “pip install “pathlib2”” “pip install “contextlib2”” “pip install “oauthlib>=3.0.0”” ja “pip install “docutils<0.16,>=0.10”“.

Seuraavaksi piti vielä Githubista ladattuun config.yaml elastalert kansiossa lisätä ElasticSearhin sijainti:

joni@ELK-Palvelin:~/Downloads/ElasAlert/elastalert$ cat config.yaml
rules_folder: example_rules
es_host: localhost
es_port: 9200
run_every:
  minutes: 1
buffer_time:
  minutes: 3
alert_time_limit:
  minutes: 5
writeback_index: elastalert_status
writeback_alias: elastalert_alerts

Kokeilimme aluksi tehdä auth.log sääntö tiedoston, joka lähettää E-maililla ilmoituksia sisältö alla:

joni@ELK-Palvelin:~/elastalert/example_rules$ cat authalert.yaml
Rule name, must be unique
name: SSH abuse test nr. 1

Alert on x events in y seconds
type: frequency

Alert when this many documents matching the query occur within a timeframe
num_events: 5

num_events must occur within this amount of time to trigger an alert
timeframe:
  minutes: 20

index: filebeat-*
A list of elasticsearch filters used for find events
These filters are joined with AND and nested in a filtered query
For more info: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl.html
filter:
  - query:
    query_string:
      query: "host.name: ELK-Palvelin"

alert:
  - "email" 

email:
  -"niko.hakala2013@gmail.com"

Kokeilimme saada auth.log hälytykset toimimaan, mutta ei toiminut millään error alla:

 Traceback (most recent call last):   File "/usr/local/bin/elastalert-test-rule", line 11, in <module>     load_entry_point('elastalert==0.2.1', 'console_scripts', 'elastalert-test-rule')()   File "/home/joni/.local/lib/python2.7/site-packages/pkg_resources/__init__.py", line 489, in load_entry_point     return get_distribution(dist).load_entry_point(group, name)   File "/home/joni/.local/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2852, in load_entry_point     return ep.load()   File "/home/joni/.local/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2443, in load     return self.resolve()   File "/home/joni/.local/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2449, in resolve     module = __import__(self.module_name, fromlist=['__name__'], level=0)   File "/usr/local/lib/python2.7/dist-packages/elastalert-0.2.1-py2.7.egg/elastalert/test_rule.py", line 61     print('Invalid filter provided:', str(ea), file=sys.stderr) 

Eli palvelin varmaan ajoi vanhalla Python2.7 versiolla ElastAlert ohjelmaa eikä toimi sen takia. Otimme vanhat config tiedostot talteen “config.yaml” ja “authalert.yaml” talteen.

Poistimme ElastAlertin kansion komennolla “sudo rm -r elastalert” ja kokeilimme asentaa sen alusta pip3:a käyttäen komennoilla ” git clone https://github.com/Yelp/elastalert.git “, “sudo apt-get install python3-pip“, ” pip3 install “setuptools>=11.3 “,” python3 setup.py install” ja ” elastalert-create-index“.

Poistimme vanhan Index suodattimen Kibana:n graafisesta käyttöliittymästä Management –> Index Management –> valitaan poistettava index –> Manage Index –> Delete indices.

Suoritimme komennon ” elastalert-create-index“, joka vastasi virheellä: “AttributeError: module ‘yaml’ has no attribute ‘FullLoader'”, eli Pythonista puuttui YAML moduuli jonka asensimme komennolla “pip3 install -U PyYAML“, vanha vika poistui ja pääsimme jatkamaan asennusta.

Komennolla “python3 -m elastalert.elastalert –verbose –rule authalert.yaml” laitoimme python3 skriptin joka hälyttää authalert.yaml tiedoston asetuksien mukaan päälle. Alla skriptin antama syöte.

joni@ELK-Palvelin:~/elastalert$ python3 -m elastalert.elastalert --verbose --rule authalert.yaml
1 rules loaded
INFO:elastalert:Starting up
INFO:elastalert:Disabled rules are: []
INFO:elastalert:Sleeping for 59.999855 seconds
INFO:elastalert:Queried rule SSH abuse test nr. 1 from 2019-11-09 23:41 EET to 2019-11-09 23:44 EET: 82 / 82 hits
ERROR:root:Error while running alert email: Error connecting to SMTP host: [Errno 111] Connection refused
INFO:elastalert:Ignoring match for silenced rule SSH abuse test nr. 1
INFO:elastalert:Ignoring match for silenced rule SSH abuse test nr. 1
INFO:elastalert:Ignoring match for silenced rule SSH abuse test nr. 1
INFO:elastalert:Ignoring match for silenced rule SSH abuse test nr. 1
INFO:elastalert:Ignoring match for silenced rule SSH abuse test nr. 1
INFO:elastalert:Ran SSH abuse test nr. 1 from 2019-11-09 23:41 EET to 2019-11-09 23:44 EET: 82 query hits (0 already seen), 16 matches, 0 alerts sent
INFO:elastalert:Background configuration change check run at 2019-11-09 23:45 EET
INFO:elastalert:Disabled rules are: []
INFO:elastalert:Sleeping for 59.999721 seconds
ERROR:root:Error while running alert email: Error connecting to SMTP host: [Errno 111] Connection refused
INFO:elastalert:Background alerts thread 0 pending alerts sent at 2019-11-09 23:45 EET
INFO:elastalert:Queried rule SSH abuse test nr. 1 from 2019-11-09 23:42 EET to 2019-11-09 23:45 EET: 70 / 70 hits
ERROR:root:Error while running alert email: Error connecting to SMTP host: [Errno 111] Connection refused
INFO:elastalert:Ignoring match for silenced rule SSH abuse test nr. 1
INFO:elastalert:Ignoring match for silenced rule SSH abuse test nr. 1
INFO:elastalert:Ran SSH abuse test nr. 1 from 2019-11-09 23:42 EET to 2019-11-09 23:45 EET: 70 query hits (53 already seen), 3 matches, 0 alerts sent
^CINFO:elastalert:SIGINT received, stopping ElastAlert…

Lokien keräys toimi, mutta lokitiedosta päätellen hälytykset pitää vielä lähettää, jollain E-mail palvelulla eteenpäin.

Aika tehtävässä hälytykset 9.11.2019 kello 19.00 – 0.00

 

PostFix Asennus

Jotta G-mailia voitaisiin käyttää PostFixin kanssa tietoturvallisesti teimme niko.hakala2013@gmail.com osoitteelle seuraavat vaiheet: 2 vaiheinen tunnistautuminen Gmailiin päälle ja luodaan sovellus kohtainen salasana.

PostFix asennus justmeandopensourcen githubin mukaisesti. Aloitimme asentamalla kaikki mitä tarvitaan PostFix:iin komennolla “sudo apt-get install postfix mailutils libsasl2-2 ca-certificates libsasl2-modules“, PostFix palvelun tarkoitus on välittää eteenpäin E-mail viestejä.

Asennus ohjelma kysyy mihin tarkoitukseen asennus tehdään, valitsimme tähän Internet Site.

Sitten valittiin palvelimen nimi ja eteenpäin asennus ohjelma asensi paketit loppuun tämän jälkeen.

Sitten navigoidaan PostFixin kansioon /etc/postfix tiedostoon main.cf ja vaihdetaa inet_protocols = all –> inet_protocols = ipv4, poistetaan tyhjä relahost rivi “relayhost =” ja lisätään justmeandopensourcen githubin mukaiset rivit config tiedostoon, joka näkyy alla.

relayhost = [smtp.gmail.com]:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_tls_CApath = /etc/ssl/certs
smtpd_tls_CApath = /etc/ssl/certs
smtp_use_tls = yes

Sitten luodaan salasana kansio justmeandopensourcen githubin mukaisesti kansioon /etc/postfix tiedosto sasl_passwd komennolla “sudoedit sasl_passwd“, tiedoston sisältö alla aaaa aaaa aaaa aaaa = esimerkki salasana.

[smtp.gmail.com]:587    niko.hakala2013@gmail.com:aaaa aaaa aaaa aaaa

sasl_passwd tiedoston oikeudet muutetaan viellä komennoilla “sudo chmod 400 /etc/postfix/sasl_passwd“, “sudo postmap /etc/postfix/sasl_passwd” ja uudelleen käynnistetään komennolla “sudo systemctl restart postfix“.

Kokeilimme vielä PostFixin toimivuuden komennolla “echo “Test” | mail -s “Test Email” niko.hakala2013@gmail.com“, joka lähetti onnistuneesti sähköposti viestin.

Aika tehtävässä PostFix asennus 11.11.2019 kello 18.00 – 19.00

 

Hälytykset e-mailiin

SSH kirjautumis yrityksien hälytykset

Ensimmäisen hälytyksen tarkoitus olisi ilmoittaa aina kun palvelimelle kirjaudutaan onnistuneesti.

Teimme elastalertin kansioon example_rules tiedostoon authalert.yaml hälytyksen, joka lähettää sähköpostilla tietoja jokaisesta onnistuneesta kirjautumisesta.

joni@ELK-Palvelin:~/elastalert/example_rules$ cat authalert.yaml
 name: SSH abuse test nr. 1
 type: frequency
 num_events: 1
 timeframe:
   minutes: 5
 index: filebeat-*
 filter:
 query:
   query_string:
     query: "event.outcome: success" 
 alert:
 "email" 
 email:
 "niko.hakala2013@gmail.com" 

Hälytyksen saimme päälle komennolla “python3 -m elastalert.elastalert –verbose –rule authalert.yaml“. Sitten kokeilimme kirjautua uudestaan toisella SSH yhteydellä. Hälytys järjestelmä toimi oletetusti ja lähetti sähköpostia osoitteeseen niko.hakala2013@gmail.com.

Koko hälytys sähköposti viestin sisältö alla.

SSH abuse test nr. 1
 At least 1 events occurred between 2019-11-11 18:15 EET and 2019-11-11 18:20 EET
 @timestamp: 2019-11-11T18:20:43+02:00
 _id: iXFEW24BY4pI7NAbfTai
 _index: filebeat-7.4.1-2019.10.27-000001
 _type: _doc
 agent: {
     "ephemeral_id": "67192-e72-60a-a62-47369d5c",
     "hostname": "ELK-Palvelin",
     "id": "70s61-7kj6-4gdc-95d21-5fggceb93",
     "type": "filebeat",
     "version": "7.4.1"
 }
 ecs: {
     "version": "1.1.0"
 }
 event: {
     "action": "ssh_login",
     "category": "authentication",
     "dataset": "system.auth",
     "module": "system",
     "outcome": "success",
     "timezone": "+02:00",
     "type": "authentication_success"
 }
 fileset: {
     "name": "auth"
 }
 host: {
     "architecture": "x86_64",
     "containerized": false,
     "hostname": "ELK-Palvelin",
     "id": "14bb23j3kh5sdgb3506dd67f8",
     "name": "ELK-Palvelin",
     "os": {
         "codename": "bionic",
         "family": "debian",
         "kernel": "4.15.0-66-generic",
         "name": "Ubuntu",
         "platform": "ubuntu",
         "version": "18.04.3 LTS (Bionic Beaver)"
     }
 }
 input: {
     "type": "log"
 }
 log: {
     "file": {
         "path": "/var/log/auth.log"
     },
     "offset": 1836921
 }
 num_hits: 2
 num_matches: 2
 process: {
     "name": "sshd",
     "pid": 8399
 }
 service: {
     "type": "system"
 }
 source: {
     "ip": "192.168.10.60",
     "port": 59732
 }
 system: {
     "auth": {
         "ssh": {
             "event": "Accepted",
             "method": "password"
         }
     }
 }
 user: {
     "name": "joni"
 }

Sudo komentojen hälytykset

Toisen hälytyksen tarkoitus olisi ilmoittaa, jos jollain muulla kuin joni käyttäjällä tehdään sudo komento eli murtautuja on pääsyt suorittamaan komentoja järjestelmällä. Hälytys lähettää myös viestin, vaikka sudo komennon suorittaminen ei onnistuisikaan.

Teimme uuden hälytyksen ElastAlertin kansioon example_rules tiedostoon sudoalert.yaml tiedoston sisältö alla.

joni@ELK-Palvelin:~/elastalert/example_rules$ cat sudoalert.yaml 
name: Sudo Command Alert
 type: frequency
 num_events: 1
 timeframe:
   minutes: 5
 index: filebeat-*
 filter:
 query_string:
   query: "system.auth.sudo.command: * AND NOT user.name: joni" 
 alert:
 "email" 
 email:
 "niko.hakala2013@gmail.com" 

Hälytyksen saimme päälle komennolla “python3 -m elastalert.elastalert –verbose –rule authalert.yaml“.

Hälytyksen toimivuuden kokeilimme tekemällä uuden käyttäjän hyokkaaja ja kokeilemalla sudo komentoa ilman sudo oikeutta. Tilanne kuva alla.

Hälytys toimi ja lähetti sähköposti viestin komennosta “sudo apt-get install pwgen” niko.hakala2013@gmail.com osoitteeseen ja joni käyttäjällä suoritetusta komennosta “sudo adduser hyokkaaja” ei tullut ilmoitusta eli toimi niin kuin pitää.

Sudo command alert sähköposti kokonaisuudessaan alla:

Sudo Command Alert
 At least 1 events occurred between 2019-11-11 20:19 EET and 2019-11-11 20:24 EET
 @timestamp: 2019-11-11T20:24:35+02:00
 _id: MnG2W24BY4pI7NAbAqCW
 _index: filebeat-7.4.1-2019.10.27-000001
 _type: _doc
 agent: {
     "ephemeral_id": "23522-e1242-340a-a566-6435634d5c",
     "hostname": "ELK-Palvelin",
     "id": "2e1231-7c6-4dc-951-5ggd23as53",
     "type": "filebeat",
     "version": "7.4.1"
 }
 ecs: {
     "version": "1.1.0"
 }
 event: {
     "dataset": "system.auth",
     "module": "system",
     "timezone": "+02:00"
 }
 fileset: {
     "name": "auth"
 }
 host: {
     "architecture": "x86_64",
     "containerized": false,
     "hostname": "ELK-Palvelin",
     "id": "1hg42dus7ffau82fe3dd67f8",
     "name": "ELK-Palvelin",
     "os": {
         "codename": "bionic",
         "family": "debian",
         "kernel": "4.15.0-66-generic",
         "name": "Ubuntu",
         "platform": "ubuntu",
         "version": "18.04.3 LTS (Bionic Beaver)"
     }
 }
 input: {
     "type": "log"
 }
 log: {
     "file": {
         "path": "/var/log/auth.log"
     },
     "offset": 2048403
 }
 num_hits: 1
 num_matches: 1
 process: {
     "name": "sudo"
 }
 service: {
     "type": "system"
 }
 system: {
     "auth": {
         "sudo": {
             "command": "/usr/bin/apt-get install pwgen",
             "error": "user NOT in sudoers",
             "pwd": "/home/joni/elastalert/example_rules",
             "tty": "pts/0",
             "user": "root"
         }
     }
 }
 user: {
     "name": "hyokkaaja"
 }

Aika tehtävässä hälytykset e-mailiin 1.11.2019 kello 19.00 – 20.20

 

 

Lähteet

ElastAlert github sivu: https://github.com/Yelp/elastalert

ElastAlect asennus ohjeita:
https://elastalert.readthedocs.io/en/latest/running_elastalert.html

ElastAlert filtereihin malleja: https://elastalert.readthedocs.io/en/latest/recipes/writing_filters.html

Python 2.7 ongelmaan vinkkejä: https://github.com/Yelp/elastalert/issues/2390

YAML erroriin vinkkejä: https://stackoverflow.com/questions/55551191/module-yaml-has-no-attribute-fullloader

PostFix asennus ohjeita: www.youtube.com/watch?v=vhRxUrg2OxM&t=979s

PostFix config tiedosto ja asennus ohjeita: https://github.com/justmeandopensource/elk/blob/master/docs/elastic-kibana-filebeat-elastalert-notes.md

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s