
W związku z zakończeniem sprzedaży w Rosji systemu logowania i analityki Splunk, pojawiło się pytanie, czym można to rozwiązanie zastąpić? Poświęcając czas na zapoznanie się z różnymi rozwiązaniami, zatrzymałem się na rozwiązaniu dla prawdziwego mężczyzny — „stak ELK”. Ten system wymaga czasu na konfigurację, ale w rezultacie można uzyskać bardzo potężny system analizy stanu i reakcji na incydenty bezpieczeństwa informacji w organizacji. W tym cyklu artykułów przyjrzymy się podstawowym (lub może nie) możliwościom staku ELK, zapoznamy się z tym, jak można parsować logi, jak tworzyć wykresy i pulpity nawigacyjne oraz jakie interesujące funkcje można zrealizować na przykładzie logów z zapory sieciowej Check Point lub skanera bezpieczeństwa OpenVas. Na początek, przyjrzyjmy się, czym jest stak ELK i z jakich komponentów się składa.
„stak ELK” — to skrót od trzech projektów z otwartym kodem źródłowym: Elasticsearch, Logstash i Kibana. Opracowywane przez firmę Elastic wraz ze wszystkimi powiązanymi projektami. Elasticsearch — to rdzeń całego systemu, który łączy w sobie funkcje bazy danych, systemu wyszukiwania i analizy. Logstash — to pipeline do przetwarzania danych po stronie serwera, który otrzymuje dane z kilku źródeł jednocześnie, parsuje log, a następnie przesyła do bazy danych Elasticsearch. Kibana umożliwia użytkownikom wizualizację danych za pomocą wykresów i diagramów w Elasticsearch. Ponadto przez Kibana można zarządzać bazą danych. Następnie bardziej szczegółowo przyjrzymy się każdemu z tych systemów osobno.

Logstash
Logstash – to narzędzie do przetwarzania logów wydarzeń z różnych źródeł, umożliwiające wyróżnienie pól i ich wartości w wiadomości, a także pozwalające na konfigurację filtracji i edytowania danych. Po wszystkich manipulacjach Logstash przekierowuje zdarzenia do docelowego magazynu danych. Narzędzie konfiguruje się tylko za pomocą plików konfiguracyjnych.
Typowa konfiguracja Logstash składa się z pliku (lub plików) zawierającego kilka strumieni wejściowych informacji (input), kilka filtrów dla tych informacji (filter) oraz kilka strumieni wyjściowych (output). Wygląda to jak jeden lub kilka plików konfiguracyjnych, które w najprostszym wariancie (który w ogóle nic nie robi) wyglądają tak:
input {
}
filter {
}
output {
}
W INPUT konfigurujemy, na który port będą przychodzić logi i jakiego protokołu używać, lub z jakiego folderu odczytywać nowe lub stale dopisywane pliki. W FILTER konfigurujemy parser logów: analizę pól, edytowanie wartości, dodawanie nowych parametrów lub usuwanie. FILTER to pole do zarządzania wiadomościami, które przychodzą do Logstash z wieloma opcjami edycji. W OUTPUT konfigurujemy, dokąd wysyłamy już przeanalizowany log; jeśli jest to Elasticsearch, wysyłane jest zapytanie JSON, w którym przesyłane są pola z wartościami, lub w ramach debugu można je wyświetlać w stdout lub zapisywać w pliku.

ElasticSearch
Początkowo, Elasticsearch to rozwiązanie do wyszukiwania pełnotekstowego z dodatkowymi funkcjonalnościami, takimi jak łatwa skalowalność, replikacja i inne, co uczyniło produkt bardzo wygodnym i dobrym rozwiązaniem dla intensywnie obciążonych projektów z dużymi ilościami danych. Elasticsearch jest nierelacyjnym magazynem (NoSQL) dokumentów w formacie JSON i systemem wyszukiwania opartym na pełnotekstowym wyszukiwaniu Lucene. Platforma sprzętowa to Java Virtual Machine, dlatego system wymaga dużej ilości zasobów CPU i pamięci RAM do działania.
Każda przychodząca wiadomość, zarówno z Logstash, jak i za pomocą zapytania API, jest indeksowana jako „dokument” – odpowiednik tabeli w relacyjnych SQL. Wszystkie dokumenty są przechowywane w indeksie – odpowiednik bazy danych w SQL.
Przykład dokumentu w bazie:
{
"_index": "checkpoint-2019.10.10",
"_type": "_doc",
"_id": "yvNZcWwBygXz5W1aycBy",
"_version": 1,
"_score": null,
"_source": {
"layer_uuid": [
"dae7f01c-4c98-4c3a-a643-bfbb8fcf40f0",
"dbee3718-cf2f-4de0-8681-529cb75be9a6"
],
"outzone": "External",
"layer_name": [
"TSS-Standard Security",
"TSS-Standard Application"
],
"time": "1565269565",
"dst": "103.5.198.210",
"parent_rule": "0",
"host": "10.10.10.250",
"ifname": "eth6",
]
}
Cała praca z bazą danych opiera się na zapytaniach JSON za pomocą REST API, które albo wydają dokumenty według indeksu, albo jakieś statystyki w formacie: pytanie — odpowiedź. Aby wizualizować wszystkie odpowiedzi na zapytania, stworzono Kibana, która jest serwisem webowym.
Kibana
Kibana umożliwia wyszukiwanie danych i zapytania dotyczące statystyk z bazy danych Elasticsearch, na podstawie odpowiedzi budowane są liczne piękne wykresy i pulpity nawigacyjne. System posiada również funkcjonalność administracyjną dla bazy danych Elasticsearch, w kolejnych artykułach przyjrzymy się temu serwisowi bardziej szczegółowo. A teraz pokażemy przykład pulpitów nawigacyjnych dla zapory sieciowej Check Point i skanera luk OpenVAS, które można zbudować.
Przykład pulpitu nawigacyjnego dla Check Point, obrazek klikalny:
Przykład pulpitu nawigacyjnego dla OpenVAS, obrazek klikalny:
Podsumowanie
Przyjrzeliśmy się, z czego składa się stack ELK, zapoznaliśmy się nieco z podstawowymi produktami, w dalszej części kursu osobno omówimy pisanie pliku konfiguracyjnego Logstash, konfigurację pulpitów za pomocą Kibana, zapytania API, automatyzację i wiele więcej!
Więc śledźcie aktualizacje (, , , ), .
Źródło: habr.com
