szukaj

17.06.2024 | 10:24

avatar

Grzegorz Wróbel

Budowa bezpiecznego homelabu – stawiamy platformę SIEM z użyciem Wazuha

Czy SIEM kojarzy się Wam wyłącznie z komercyjnymi platformami do żmudnego kolekcjonowania i analizy logów lub zdarzeń z monitorowanych systemów? Nic bardziej mylnego. Może to być całkiem intuicyjna platforma z dużym potencjałem nawet w tak małym środowisku jak homelab. W dodatku możliwa do instalacji i utrzymania przez każdego, a my pokażemy Wam, jak to zrobić! 

Wcześniej pisaliśmy o tym po co komu serwerownia w domu i jak się do tego hobby zabrać oraz jak łatwo zadbać o bezpieczeństwo serwerów na Linuksie w domowej serwerowni. W dzisiejszym artykule przejdziemy ścieżkę instalacji Wazuha z pomocą Ansible. Następnie dodamy hosty do monitorowania i zweryfikujemy, jak wstępnie platforma ocenia ich poziom bezpieczeństwa. W artykule omówimy następujące zagadnienia:

  1. Co to jest SIEM i dlaczego wybraliśmy Wazuha
  2. Jak przygotować Ansible do pracy
  3. Przeprowadzimy automatyczną instalację z wykorzystaniem gotowych playbooków Ansible
  4. Dodamy pierwsze dwa hosty z wykorzystaniem agentów Wazuha dla Ubuntu i Windowsa
  5. Zobaczymy, jak Wazuh weryfikuje stan zabezpieczeń monitorowanego systemu oraz identyfikuje podatności

Co to jest SIEM i dlaczego akurat Wazuh? 

SIEM to w skrócie wielomodułowa platforma, która integruje szereg istotnych zadań mających na celu gromadzenie i analizę informacji, wykrywanie anomalii oraz powiadomienie o wykrytym incydencie. Zebrane dane mogą być prezentowane w trybie rzeczywistym lub w formie skondensowanego raportu. Platformy tego rodzaju pozwalają na bieżące monitorowanie zdarzeń w infrastrukturze sieciowej praktycznie w każdym jej segmencie. 

INFO: Jeśli chcecie posłuchać o znaczeniu SIEM-a w organizacji wraz z omówieniem zalet oraz wad tego rozwiązania, polecam posłuchać podcastu fundacji Bezpieczna Cyberprzestrzeń: Cyber, Cyber… – 369 – Czy SIEM ma sens?

Czy jest sens instalować platformę SIEM w homelabie? Moim zdaniem tak. Szczególnie w przypadku platformy Wazuh (udostępnianej na licencji open source), która jest łatwa w instalacji i zarządzaniu w małych środowiskach. Ma to szczególne znaczenie dla osób na początku swojej ścieżki zawodowej w branży bezpieczeństwa. Jest też ponadto ciekawym rozwiązaniem, które pozwoli monitorować i zabezpieczać nasze środowisko przed niechcianymi zagrożeniami – dlatego w pewnym stopniu może pełnić sensowną alternatywę dla tanich lub darmowych rozwiązań antywirusowych.

Wazuh posiada kilka możliwości zainstalowania, począwszy od standardowej procedury krok po kroku, a kończąc na na kilku alternatywnych wariantach. W naszym przypadku skorzystamy z Ansible, który w tym przypadku nie powinien być przeszkodą nawet dla osób niemających wcześniej styczności z tym rozwiązaniem. Instalujemy wszystkie trzy moduły Wazuha – Indexer, Server oraz Dashboard – na jednej maszynie wirtualnej. Dlatego ważne jest spełnienie następujących warunków:

  • Gotowa do użycia wirtualna maszyna z zainstalowanym systemem Ubuntu Server 22.04.3 LTS wraz z możliwością zalogowania się przez protokół SSH (można skorzystać zarówno z VirtualBoxa, jak i rozwiązań typu Proxmox)
  • Wirtualna maszyna powinna posiadać następujące parametry sprzętowe:
    • CPU: 2 rdzenie (rekomendowane 4)
    • RAM: 16 GB (więcej nie zaszkodzi :))
    • Przestrzeń dyskowa: 64 GB (co najmniej)

Przygotowanie do pracy z Ansible

Ansible zainstalujmy na naszym systemie codziennego użytku lub dedykowanej maszynie wirtualnej z Linuxem (na potrzeby artykułu rekomenduję skorzystać z Ubuntu). Realizowane kroki będziemy opierać na wytycznych z dokumentacji Wazuha w związku z tym w pierwszej kolejności instalujemy niezbędne pakiety i repozytorium Ansible.

sudo apt-get update
sudo apt-get install lsb-release software-properties-common
sudo apt-add-repository -y ppa:ansible/ansible
sudo apt-get update
sudo apt-get install ansible

INFO: Możecie oczywiście pominąć instalację Wazuha z wykorzystaniem Ansible i skorzystać z gotowego obrazu wirtualnej maszyny w formacie OVA, który posiada wszystkie moduły w postaci jednej wirtualnej maszyny. Jest to droga na skróty, ale pozwalająca szybciej przetestować funkcjonalność Wazuha. Format ten możecie uruchomić w VirtualBoxie lub zaimportować do Proxmoxa (np. z wykorzystaniem tego poradnika).

W Ansible komunikacja opiera się na protokole SSH. Dlatego żeby każdorazowo nie podawać hasła przy wykonywaniu połączenia do hosta, wygenerujemy klucz SSH i dodamy go na wirtualnej maszynie przygotowanej dla Wazuha. W tym celu należy wykonać poniższe polecenie, które wygeneruje zestaw kluczy:

$ ssh-keygen -t ed25519 -a 100

Zostaniemy poproszeni o podanie hasła, którym będziemy się uwierzytelniać przy każdym użyciu, jeśli hasło nie zostanie zapamiętane w pamięci. Jeśli nie zmienimy ścieżki i nazwy klucza prywatnego, zostaną użyte domyślne lokalizacje dla klucza prywatnego i publicznego, podobnie jak w przykładzie poniżej.

W kolejnym kroku musimy dodać wygenerowany klucz publiczny na systemie przygotowanym dla Wazuha, a także wymusimy w konfiguracji uwierzytelnienie w oparciu o klucz publiczny. Po zalogowaniu na wirtualnej maszynie, wykonaj następujące polecenia, które stworzą katalog oraz plik zawierający klucze uprzywilejowane do uwierzytelnienia się za pośrednictwem klucza SSH. 

mkdir ~/.ssh
chmod 700 ~/.ssh/
touch .ssh/authorized_keys
chmod 644 .ssh/authorized_keys

Wróćmy na chwilę do powłoki w systemie, na którym wygenerowaliśmy zestaw kluczy.  Następnie musimy wykonać poniższe polecenie, aby eksportować klucz publiczny na wirtualną maszynę. Zwróćcie uwagę, aby  poprawić adres IP oraz ścieżkę na właściwą dla Waszego środowiska.

cat /home/grzegorz/.ssh/id_ed25519.pub | ssh [email protected] "cat >> ~/.ssh/authorized_keys"

Przejdźmy do powłoki na wirtualnej maszynie, aby dokończyć konfigurację SSH. W tym celu, wykorzystując preferowany edytor plików z uprawnieniami sudo, otwórzmy plik konfiguracyjny serwera SSH.

nano /etc/ssh/sshd_config

Sprawdźmy, czy poniższe parametry nie są poprzedzone znakiem # oraz czy posiadają następujące wartości.

PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

Jeśli wszystko się zgadza, wystarczy zrestartować usługę SSH poniższym poleceniem:

sudo systemctl restart sshd

Od tego momentu możemy logować się do powłoki serwera bez konieczności podawania hasła za każdym razem. Przejdźmy zatem do konfiguracji Ansible i stwórzmy w katalogu domowym naszego użytkownika „ansible”, a w nim plik „inventory” – będzie on zawierał listę hostów, do których Ansible będzie mógł wykonywać połączenia SSH i realizować playbooki. 

mkdir ~/ansible
cd ~/ansible
touch inventory

Następnie otwórz plik „inventory” preferowanym edytorem tekstu i dodaj do niego następującą zawartość. Upewnij się, że podałeś poprawne adresy IP oraz nazwy użytkowników. 

[all_in_one]
192.168.64.120	ansible_user=wazuh

Aby sprawdzić, czy Ansible poprawnie komunikuje się z wszystkimi hostami, wystarczy uruchomić poniższą komendę.

ansible all -m ping -i invetory 

W odpowiedzi powinniśmy uzyskać następujący wynik:

W ten sposób możemy przejść już do kolejnego kroku, czyli instalacji Wazuha. 

Instalacja Wazuha z wykorzystaniem Ansible

Kolejnym etapem jest pobranie i uruchomienie gotowych playbooków do instalacji komponentów Wazuha za pomocą Ansible. W tym celu w stworzonym katalogu Ansible pobieramy i rozpakowujemy je. 

mkdir ~/ansible/roles
cd ~/ansible/roles
git clone --branch v4.7.2 https://github.com/wazuh/wazuh-ansible.git
cd ~/ansible/roles/wazuh-ansible/

Instalację Wazuha rozpoczniemy od modułów „Indexer” oraz „Dashboard”. W tym celu wykorzystajmy wskazówkę z oficjalnej dokumentacji, aby stworzyć wspólny playbook do instalacji obydwóch modułów za jednym razem. W tym celu utwórzmy plik yaml pod ścieżką: ~/ansible/roles/wazuh-ansible/playbooks/wazuh-indexer-and-dashboard.yml wraz z następującą zawartością:

- hosts: all_in_one
  roles:
    - role: ../roles/wazuh/wazuh-indexer
      perform_installation: false
  become: no
  vars:
    indexer_node_master: true
    instances:
      node1:
        name: node-1       # Important: must be equal to indexer_node_name.
        ip: 127.0.0.1
        role: indexer
  tags:
    - generate-certs

- hosts: all_in_one
  become: yes
  become_user: root
  roles:
    - role: ../roles/wazuh/wazuh-indexer
    - role: ../roles/wazuh/wazuh-dashboard

  vars:
    single_node: true
    indexer_network_host: 127.0.0.1
    ansible_shell_allow_world_readable_temp: true
    instances:           # A certificate will be generated for every node using the name as CN.
      node1:
        name: node-1
        ip: 127.0.0.1
        role: indexer

Upewnijmy się, że znajdujemy się we właściwym katalogu, następnie skorzystajmy z komendy ansible-playbook w celu instalacji.

cd ~/ansible/roles/wazuh-ansible/playbooks
ansible-playbook wazuh-indexer-and-dashboard.yml -b -K -i ~/ansible/inventory

Parametry -b oraz -K wykonają polecenia w trybie uprzywilejowanym i poproszą o podanie hasła administratora (sudo) przed rozpoczęciem wykonywania playbooka. Natomiast parametr -i wskazuje plik „inventory” zawierający adres IP oraz użytkownika serwera, na którym chcemy zainstalować Wazuha.

Drugim krokiem jest instalacja modułu „Manager”, który wykonamy podobnie do poprzedniego. W tym przypadku playbook będzie już gotowy pod ścieżką ~/ansible/roles/wazuh-ansible/playbooks/wazuh-manager-oss.yml.Otwórzmy go preferowanym edytorem tekstu i  ustawmy dla parametru hosts nazwę grupy z naszego pliku „inventory” (w naszym przypadku “all_in_one”) oraz dla parametru filebeat_output_indexer_hosts zostawmy pojedynczy node modułu Indexer. Zawartość powinna wyglądać następująco:

---
- hosts: all_in_one
  roles:
    - role: ../roles/wazuh/ansible-wazuh-manager
    - role: ../roles/wazuh/ansible-filebeat-oss
      filebeat_node_name: node-1
      filebeat_output_indexer_hosts:
      - "127.0.0.1:9200"

Następnie wykonajmy go w analogiczny sposób.

cd ~/ansible/roles/wazuh-ansible/playbooks
ansible-playbook wazuh-manager-oss.yml -b -K -i ~/ansible/inventory

Aby zweryfikować, czy serwer został poprawnie zainstalowany, wystarczy uruchomić interfejs webowy Wazuha, który w moim przypadku znajduje się pod adresem https://192.168.64.120. W domyślnej konfiguracji logujemy się użytkownikiem “admin” oraz hasłem “changeme”. 

Instalacja pierwszego agenta Wazuha na Ubuntu

Instalacja agentów w Wazuhu jest prostym procesem, niezależnie od wybranej wersji systemu (do wyboru Linux, Windows oraz MacOS). Gotowy kreator wymaga jedynie wypełnienia trzech pól, aby w efekcie wygenerować gotowy do użycia skrypt instalacyjny.

Wygenerowany skrypt będzie wymagał ręcznego uruchomienia w powłoce systemowej hosta, na którym chcemy zainstalować agenta. W przypadku systemu Linux sekwencja komend będzie wyglądać następująco:

wget https://packages.wazuh.com/4.x/apt/pool/main/w/wazuh-agent/wazuh-agent_4.7.2-1_amd64.deb && sudo WAZUH_MANAGER='192.168.64.120' WAZUH_AGENT_NAME='poligon-srv' dpkg -i ./wazuh-agent_4.7.2-1_amd64.deb


sudo systemctl daemon-reload
sudo systemctl enable wazuh-agent
sudo systemctl start wazuh-agent

Po chwili w zakładce Agents interfejsu Wazuha powinien znaleźć się pierwszy host objęty monitoringiem. 

Instalacja agenta Wazuh na Windowsie

Idąc za ciosem, zainstalujmy od razu agenta na systemie Windows 11 poprzez kliknięcie na link „Deploy new agent” w zakładce Agents. Zostaniemy przekierowani do znanego nam kreatora, gdzie wystarczy wybrać opcję „MSI 32/64 bits” w kategorii Windows. Reszta pól będzie wymagać podania adresu IP serwera Wazuha, nazwy dla agenta oraz wybrania domyślnej grupy. 

W efekcie wygenerowana zostanie gotowa do wykorzystania komenda Powershella. Aby z niej skorzystać, musimy uruchomić konsolę Powershell  z uprawnieniami administratora na systemie Windows, dla którego instalujemy agenta Wazuha. Po wykonaniu skryptu, wystarczy uruchomić proces agenta poleceniem NET START WazuhSvc.

Alternatywną metodą instalacji jest bezpośrednie pobranie instalatora ze ścieżki podanej przez instalator. W naszym przypadku będzie to adres URL: https://packages.wazuh.com/4.x/windows/wazuh-agent-4.7.2-1.msi. Po pobraniu możemy uruchomić graficzny instalator, dla którego podajemy te same wartości jak w webowym kreatorze Wazuha. 

Niezależnie od wyboru metody instalacji po chwili w platformie Wazuha będziemy mogli zobaczyć kolejnego, podłączonego agenta. 

Jak bezpieczne są nasze systemy? 

Wprawne oko Czytelnika na pewno zauważy, że dla każdego z dodanych agentów można podejrzeć wyniki skanowania SCA (ang. Security Configuration Assessment) w oparciu o wytyczne standardu CIS (wspominaliśmy w poprzednim artykule poświęconym systemowi Linux). 

Wazuh domyślnie przeprowadza skanowanie systemu i weryfikuje jego zgodność z wytycznymi CIS (lista polityk). Zobaczmy, jak to będzie wyglądało w przypadku podłączonych „świeżych” systemów Ubuntu oraz Windows. 

Po przejściu do wyników skanowania uzyskamy kompletną listę wszystkich sprawdzeń. Każde z nich można rozwinąć z pozycji listy, aby wyświetlić sugerowane wartości, formę weryfikacji, a także opis precyzujący znaczenie rekomendacji dla bezpieczeństwa systemu.

Podobne wyniki będziemy mogli podejrzeć w przypadku Linuxa, jak na poniższym przykładzie rekomendowanych praw dostępu do pliku /etc/passwd.

Takie informacje możemy wykorzystać do zabezpieczenia oraz monitorowania systemów. Polityki SCA w Wazuhu pozwalają także na łatwe dostosowywanie do naszych potrzeb.

Monitorowanie podatności w systemach

Oczywiście analiza stanu bezpieczeństwa konfiguracji systemu to nie jedyna z bazowych możliwości, które oferuje Wazuh. Sporo z nich można w bardzo łatwy sposób uruchomić w konfiguracji agenta, co zobaczymy na przykładzie uruchomienia skanera podatności. 

W tym celu musimy zalogować się do serwera Wazuh, a następnie edytować plik konfiguracyjny /var/ossec/etc/ossec.conf z uprawnieniami sudo. Znajduje się tam sekcja <vulnerability-detector>, która odpowiada za mechanizm wykrywania podatności na monitorowanych przez Wazuha hostach. Jego uruchomienie wymaga zmiany wartości parametru <enabled> na “yes” dla dostępnych baz podatności, których chcemy używać.

W naszym przypadku będą to następujące fragmenty konfiguracji – wprowadzone zmiany zostały pogrubione.

<vulnerability-detector>
    <enabled>yes</enabled>
    <interval>5m</interval>
    <min_full_scan_interval>6h</min_full_scan_interval>
    <run_on_start>yes</run_on_start>

    <!-- Ubuntu OS vulnerabilities -->
    <provider name="canonical">
    <enabled>yes</enabled>
    <os>trusty</os>
    <os>xenial</os>
    <os>bionic</os>
    <os>focal</os>
    <os>jammy</os>
    <update_interval>1h</update_interval>
    </provider>

    <!-- Windows OS vulnerabilities -->
    <provider name="msu">
    <enabled>yes</enabled>
    <update_interval>1h</update_interval>
    </provider>

    <!-- Aggregate vulnerabilities -->
    <provider name="nvd">
    <enabled>yes</enabled>
    <update_interval>1h</update_interval>
    </provider>
  </vulnerability-detector>

Po zapisaniu zmian niezbędne jest wykonanie restartu modułu Manager następującym poleceniem:

sudo systemctl restart wazuh-manager.service

W ten sposób uruchomiliśmy mechanizm wykrywania podatności dla systemu Ubuntu oraz Windows 11. Dodatkowo w ostatnim odblokowaliśmy źródło danych o podatnościach z bazy NVD. Efekt będzie widoczny już po chwili w interfejsie Wazuha. Poniższe zrzuty ekranu prezentują przykładowe wyniki analizy podatności dla monitorowanych systemów Windows 11 oraz Ubuntu 22.04.

Wazuh otwiera szereg furtek do samodzielnej nauki

Jestem pewien, że już po wstępnej konfiguracji zauważycie, jak dużo nowej wiedzy może wnieść sama instalacja oraz podstawowa konfiguracja Wazuha. Przeprowadzenie tego procesu nie jest skomplikowane, a w efekcie otwiera szereg możliwości dla dalszej, samodzielnej zabawy z kolejnymi modułami i narzędziami dostępnymi w Wazuhu.

Dla szukających inspiracji dalszego wykorzystania Wazuha w praktyce – poza czekaniem na kolejny artykuł – zachęcam do zajrzenia na stronę Proof of Concept guides w dokumentacji Wazuha. Warto również rzucić okiem na oficjalny blog pełen fajnych rozwiązań możliwych do wykorzystania

Pamiętajcie także o discordowym serwerze Zaufanej Trzeciej Strony, znajdzie się tam sporo osób, które chętnie podzielą się swoimi doświadczeniami w tematyce homelabowej i nie tylko.

Powrót

Komentarze

  • avatar
    2024.06.17 11:16 Wojciech Marusiak

    Dzięki za świetny artykuł! Ląduje do ulubionych i do zabawy w labie :)

    Odpowiedz
  • avatar
    2024.06.18 07:40 Andy

    Dobrze rozumiem, że polecacie ansibla do instalacji Wazuha czy to tylko dla rozgrzewki, żeby nie było za łatwo? :)

    Odpowiedz
  • avatar
    2024.06.24 16:09 Krzysiek

    tak tylko podpowiadając – „ssh-copy-id” ułatwia i upraszcza procedurę kopiowanie kluczy publicznych na zdalne serwery

    Odpowiedz
  • avatar
    2024.07.21 19:13 Radek

    W nowej wersji zmieniona jest nazwa sekcji z vulnerability-detector na vulnerability-detection
    Chyba warto to zaznaczyć w tekście.

    Odpowiedz
  • avatar
    2024.08.25 14:25 Obserwator

    touch .ssh/authorized_keys
    chmod 644 .ssh/authorized_keys
    cat /home/grzegorz/.ssh/id_ed25519.pub | ssh [email protected] „cat >> ~/.ssh/authorized_keys”
    Co za czereśniak miał takie pomysły?

    Prawidłowo to się robi tak:
    ssh-copy-id -i /home/grzegorz/.ssh/id_ed25519.pub [email protected]
    Serwer SSHD wtedy sam stworzy .ssh/authorized_keys i nada mu prawidłowe uprawnienia.
    I na pewno nie będzie to 644, tylko 600:
    s -l /root/.ssh/authorized_keys
    -rw——- 1 root root 3052 2019-08-23 /root/.ssh/authorized_keys

    To by było na tyle

    Odpowiedz

Zostaw odpowiedź

Jeśli chcesz zwrócić uwagę na literówkę lub inny błąd techniczny, zapraszamy do formularza kontaktowego. Reagujemy równie szybko.

Budowa bezpiecznego homelabu – stawiamy platformę SIEM z użyciem Wazuha

Komentarze