Security Onion – Elasticsearch parsowanie logów z syslog

You need to add a widget, row, or prebuilt layout before you’ll see anything here. 🙂

W Security Onion 2 Elasticsearch otrzymuje nieprzeanalizowane logi z Logstash lub Filebeat . Elasticsearch analizuje i przechowuje te logi. Parsery są przechowywane w /opt/so/conf/elasticsearch/ingest/. Własne parsery można umieścić w /opt/so/saltstack/local/salt/elasticsearch/files/ingest/. Jeżeli twój parser będzie posiadał nazwę identyczną ze standardową to zostanie nadpisany.

Do parsowania logów używamy różnych procesorów. Jednym z nich jest Grok. Pisząc lub edytując własny parser z użyciem Grok możemy skorzystać z debugera w Kibana > Dev Tools > Grok Debugger

„Sample Data” – to fragment logów który parsujemy
„Grok Pattern” – wzorzec
„Custom Patterns” – wzorce niestandardowe używane w Grok pattern.

W Grok pattern możemy użyć też standardowych wzorców.

Na podstawie wzorca zmodyfikowałem plik /opt/so/conf/elasticsearch/ingest/syslog zapisując go w /opt/so/saltstack/local/salt/elasticsearch/files/ingest/syslog, aby prawidłowo parsował mój log „<132>Aug 17 16:11:31:000 2022 switch MODULE_UTILS_SSH/5/:SSH: User admin login successfully from x.x.x.x”

{
  "description" : "syslog pipeline",
  "processors" : [
    {
      "dissect": {
        "field": "message",
        "pattern" : "%{message}",
        "on_failure": [ { "drop" : { } } ]
      },
      "remove": {
        "field": [ "type", "agent" ],
        "ignore_failure": true
      }
    }, {
      "grok": {
        "field": "message",
          "patterns": [
            "^<%{INT:syslog.priority:int}>%{TIMESTAMP_ISO8601:syslog.timestamp} +%{IPORHOST:syslog.host} +%{PROG:syslog.program}(?:\\[%{POSINT:syslog.pid:int}\\])?: %{GREEDYDATA:real_message}$",

            "^<%{INT:syslog.priority}>%{DATA:syslog.timestamp} %{WORD:source.application}(\\[%{DATA:pid}\\])?: %{GREEDYDATA:real_message}$",

            "^%{SYSLOGTIMESTAMP:syslog.timestamp} %{SYSLOGHOST:syslog.host} %{SYSLOGPROG:syslog.program}: CEF:0\\|%{DATA:vendor}\\|%{DATA:product}\\|%{GREEDYDATA:message2}$",

            "^<%{INT:syslog.priority:int}>%{DATE_MY:syslog.timestamp} +%{IPORHOST:syslog.host} %{GREEDYDATA:real_message}$"

          ],

          "pattern_definitions" : {
            "DATE_MY" : "%{MONTH} %{MONTHDAY} %{HOUR}:%{MINUTE}:%{SECOND}:%{INT} %{YEAR}"
          },
          "ignore_failure": true
      }
    },
    {
      "convert" : {
        "if": "ctx?.syslog?.priority != null",
        "field" : "syslog.priority",
        "type": "integer"
      }
    },
    {
...

Patterns są przetwarzane od góry do doły aż zostanie znaleziony pasujący wzorzec.

Aby zmiany zostały uwzględnione przeładowałem Elasticsearch:

$ sudo so-elasticsearch-restart

Proxmox – ZFS użycie pamięci

ZFS domyślnie wykorzystuje 50% pamięci hosta na Adaptive Replacement Cache (ARC). Przydzielanie wystarczającej ilości pamięci dla ARC ma kluczowe znaczenie dla wydajności IO, więc należy ją zmniejszać ostrożnie. Ogólną zasadą jest przydzielenie co najmniej 2 GiB + 1 GiB na 1 TiB przestrzeni dyskowej. Na przykład, jeśli masz pulę z 8 TiB dostępnej przestrzeni dyskowej, powinieneś użyć 10 GiB pamięci dla ARC

Możesz zmienić limit wykorzystania ARC dla bieżącego rozruchu (ponowne uruchomienie resetuje tę zmianę ponownie), wpisując bezpośrednio do parametru modułu zfs_arc_max:

# echo "$[10 * 1024*1024*1024]" >/sys/module/zfs/parameters/zfs_arc_max

Aby na stałe zmienić ilość pamięci ARC wpisujemy do /etc/modprobe.d/zfs.conf

options zfs zfs_arc_max=10737418240

W przypadku, gdy ustawiana wartość zfs_arc_max jest mniejsza lub równa zfs_arc_min (co domyślnie wynosi 1/32 pamięci systemowej), zfs_arc_max zostanie zignorowane, chyba że ustawisz również zfs_arc_min na co najwyżej zfs_arc_max – 1.

# echo "$[10 * 1024*1024*1024 - 1]" >/sys/module/zfs/parameters/zfs_arc_min

lub zapisując na stałe do /etc/modprobe.d/zfs.conf

options zfs zfs_arc_max=10737418239

Jeśli głównym systemem plików Proxmoxa jest ZFS, musisz aktualizować initramfs i rebootować Proxmoxa za każdym razem, gdy zmienisz te wartości:

# update-initramfs -u
# reboot

Notatka na podstawie: https://pve.proxmox.com/wiki/ZFS_on_Linux#sysadmin_zfs_limit_memory_usage

Home Assistant – Mikrotik zmiana danych integracji

Aby zmienić adres ip, użytkownika lub hasło do integracji z mikrotikiem logujemy się do HA i za pomocą edytora plików np. Studio Code Server, który możemy sobie doinstalować w dodatkach, otwieramy plik .storage/core.config_entries. Wyszukujemy w nim odpowiednią sekcję, szukając jakiś danych powiązanych z naszym Mikrotikiem np. ip, port, nazwę użytkownika do integracji z mikrotik. Zmieniamy wpisy, które nas interesują, zapisujemy i uruchamiamy ponownie HA.

Wazuh – Indeksowanie i przeglądanie wszystkich logów

W Wazuh domyślnie można przeglądać tylko logi z rozpoznanych alertów. Możemy jednak tak ustawić aby Wazuh indeksował i umożliwił przeglądanie wszystkich wysyłanych do niego logów.

w pliku konfiguracji /var/ossec/etc/ossec.conf ustawiamy

# nano /var/ossec/etc/ossec.conf

<logall_json>yes</logall_json>

# systemctl restart wazuh-manager 

Zmieniamy konfigurację Filebeat aby czytał i wysyłał alerty i archiwa

# nano /etc/filebeat/filebeat.yml

filebeat.modules:
 - module: wazuh
  alerts:
   enabled: true
  archives:
   enabled: true

# systemctl restart filebeat

Logujemy się do dashboard Wazuh i dodajemy wzór indeksu.

Menu -> Management -> Stack Management -> Index Patterns -> Create index pattern

  1. W polu „Index pattern name” wpisujemy wazuh-archives-* i naciskamy „Next”
  2. W polu „timestamp” wybieramy „timestamp” ale nie „@timestamp”
  3. Wybieramy „Create index pattern”

Teraz w „Security events” po prawej stronie u góry możemy wybierać wzór indexu „Index pattern”

Bacula – SD Calls Client

W niektórych konfiguracjach sieciowych, gdzie klient bacula-fd jest w podsieci z której nie ma dostępu do repozytorium bacula-sd możemy odwrócić połączenie i to bacula-sd nawiązuje połączenie z clientem bacula-fd. Dzieki takiej konfiguracji ewentualny zainfekowany klient nie będzie miał dostępu do repozytorium bacula-sd.

W konfiguracji bacula-dir.conf w sekcji Client dodajemy SDCallsClient = yes

Client {
  Name = SerwerPlikow
  Address = X.X.X.X
  FDPort = 9102

  AutoPrune = no               
  . . . 
  SDCallsClient = yes
}

Debian – własny certyfikat CA w systemie

Dodanie certyfikatu

  1. Skopiuj swój certyfikat CA do katalogu /usr/local/share/ca-certificates/
    Plik certyfikatu musi mieć rozszerzenie crt
  2. Aktualizacja CA store: $ update-ca-certificates

Usunięcie

  1. Usunąć plik z CA $ rm /usr/local/share/ca-certificates/myCA.crt
  2. Aktualizacja CA store: $ update-ca-certificates –fresh

Zimbra – odblokowanie kont

W zależności od ustawień w panelu administracyjnym „Strona główna -> Konfiguruj -> Klasa usługi -> default -> Zaawansowane ->Polityka błędnego logowania, Zimbra może zablokować konto, jeżeli kilkakrotnie zostało źle podane hasło. Musimy ręcznie odblokować takie konto, ustalając wcześniej przyczynę blokady.

Sprawdzamy status konta:

$ su zimbra
$ zmprov ga admin@nazwadomeny.pl  zimbraAccountStatus

Gdy status jest ustawiony na Locked lub Lockout to sprawdzamy przyczynę blokady.

Szukanie blokady z powodu zbyt dużej ilości błędnych logowań

$ grep -E "account=admin@.* error=account lockout due to too many failed logins" /opt/zimbra/log/audit.log

Przyczynę zablokowania możemy szukać w szerokim kontekście grep -C 10 przeszukując też inne logi, próbując ustalić co się wydarzyło.

$ grep -C 10  -E "authentication failed.+admin@" /opt/zimbra/log/mailbox.log  /opt/zimbra/log/audit.log /var/log/zimbra.log

Odblokowanie konta

$ su zimbra
$ zmprov ma admin@nazwadomeny.pl zimbraAccountStatus active

Iperf – Test przepustowości

Badanie przepustowości sieci pomiędzy dwoma linuksami.

Testowanie TCP

# Linux 1 - uruchomienie serwera ipref
$ iperf -s

# Linux 2 - uruchomienie klienta ipref
$ iperf -c <IP serwera ipref>

Testowanie UDP

# Linux 1 - uruchomienie serwera ipref
$ iperf -s -u

# Linux 2 - uruchomienie klienta ipref
$ iperf -c <IP serwera ipref> -u -b 1000M

Debian – Instalacja .Net Core 6 SDK

Instalacja repozytoriów

$ wget https://packages.microsoft.com/config/debian/11/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
$ sudo dpkg -i packages-microsoft-prod.deb
$ rm packages-microsoft-prod.deb

Instalacja .Net Core 6 SDK

$ sudo apt update
$ sudo apt install dotnet-sdk-6.0

Możemy zainstalować samo środowisko uruchomieniowe, bez SDK

$ sudo apt update
$ sudo apt install dotnet-runtime-6.0

Na podstawie: https://docs.microsoft.com/pl-pl/dotnet/core/install/linux-debian

PostgreSQL – Debian instalacja

Instalacja serwera z repozytoriów PostgreSQL

# Przygotowanie pliku z repozytorium
$ sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'

# Import klucza repozytorium
$ wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -


$ sudo apt-get update


# Instalacja najnowszej wersji posgresql
$ sudo apt-get -y install postgresql

Instalacja pgAdmin

# Przygotowanie pliku z repozytorium
$ sudo sh -c 'echo "deb https://ftp.postgresql.org/pub/pgadmin/pgadmin4/apt/$(lsb_release -cs) pgadmin4 main" > /etc/apt/sources.list.d/pgadmin4.list && apt update'

# Import klucza repozytorium
$ sudo curl https://www.pgadmin.org/static/packages_pgadmin_org.pub | sudo apt-key add

# Instalacja pgAdmin w wersji web
$ sudo apt install pgadmin4-web 

# Konfiguracja
$ sudo /usr/pgadmin4/bin/setup-web.sh

Aby uruchomić pgAdmin w przeglądarce wpisujemy adres: http://<adres_ip_do serwera_pgAdmin>/pgadmin4

Dodajemy bazę danych i użytkownika.

$ sudo postgres
$ psql
postgres=# create database mojaBaza;
postgres=# create user witek with encrypted password '123456';
postgres=# grant all privileges on database mojaBaza to witek;