Como configurar um agregador de log para autenticar dados?

8

Antecedentes : A agregação remota de log é considerada uma maneira de melhorar a segurança. Geralmente, isso resolve o risco de que um invasor que comprometa um sistema possa editar ou excluir logs para frustrar a análise forense. Eu tenho pesquisado opções de segurança em ferramentas de log comuns.

Mas algo parece errado. Não consigo ver como configurar qualquer um dos registradores remotos comuns (por exemplo, rsyslog, syslog-ng, logstash) para autenticar que uma mensagem recebida realmente se origina do host pretendido. Sem algum tipo de restrição de diretiva, um criador de log poderia falsificar mensagens em nome de outro criador de log.

O autor do rsyslog parece avisar sobre a autenticação de dados de log :

One final word of caution: transport-tls protects the connection between the sender and the receiver. It does not necessarily protect against attacks that are present in the message itself. Especially in a relay environment, the message may have been originated from a malicious system, which placed invalid hostnames and/or other content into it. If there is no provisioning against such things, these records may show up in the receivers’ repository. -transport-tls does not protect against this (but it may help, properly used). Keep in mind that syslog-transport-tls provides hop-by-hop security. It does not provide end-to-end security and it does not authenticate the message itself (just the last sender).

Portanto, a pergunta de acompanhamento é: o que é uma configuração boa / prática (em qualquer ferramenta de registro comum de sua escolha - rsyslog, syslog-ng, logstash, etc) que fornece alguma autenticidade?

Ou ... se ninguém autenticar dados de registro, então por que não ?

-

(Além: Ao discutir / comparar, pode ser útil usar alguns diagramas ou terminologia de RFC 5424: Seção 4.1: Exemplo de cenários de implantação - por exemplo, "originador" vs "relé" vs "colecionador")

    
por Tim Otten 27.08.2015 / 19:01

2 respostas

1

Esta é uma ótima pergunta.

Eu uso o logstash para realizar algo parecido com o que você está propondo. Usando logstash (ou logstash-forwarder) para enviar logs para seu sistema de coleta central, adicione uma configuração de logstash para adicionar um campo-chave à mensagem, com seu valor sendo uma cadeia longa e aleatória que é exclusiva para cada servidor.

Em seguida, no lado do recebimento, você pode adicionar uma regra correspondente para descartar (ou alertar) qualquer mensagem em que a chave de um host específico não corresponda ao esperado para o nome do host.

Isso não é à prova de balas, mas é um passo sólido na direção certa.

    
por 28.08.2015 / 13:27
3

A coisa certa a se usar para isso é o TLS com certificados de cliente de máquina.

O rsyslog está fazendo isso desde 2008 e tem ótimas instruções: link

O processo é extremamente simples, conforme essas coisas acontecem:

  1. Configurar uma CA
  2. Emita certificados para todos os seus computadores dos quais você deseja registros
  3. Configurar o rsyslog para usar essa autenticação

Em seguida, seus computadores não podem representar um ao outro e ninguém pode fazer login no seu servidor de registros sem um dos seus certificados.

Eu vejo que você já descobriu isso, mas você ainda está preocupado com a advertência deles. Eu não me preocuparia muito com isso. Log injeção é certamente uma coisa, mas é muitas coisas, incluindo injeção através da aplicação e injeção no processo de registro. O rsyslog autenticado não irá protegê-lo se alguém tiver um ataque de injeção de log em seu aplicativo, mas nada será possível; apenas consertar o aplicativo pode ajudar nisso. Isso apenas protegerá você contra logs falsos.

As outras advertências podem ser facilmente mitigadas por não usar relés, o que realmente não há motivo para fazer. Se você não tiver retransmissões e usar a opção x509 / name para o driver de conexão gtls no servidor rsyslog, não terá problemas.

Veja também o documento de configuração gtls: link

    
por 29.08.2015 / 00:31