Como salvar em CSV os logs de segurança do Windows de maneira fácil e rápida

A Microsoft praticamente não mudou (até o Windows Server 2008) o modo que armazena os logs no Windows desde o Windows NT. Os logs são armazenados em arquivos de extensão evt, que não são indexados o que torna eventuais pesquisas muito  lentas.

Dos vários logs que o Windows armazena, o que mais cresce é o log de segurança. Lá são armazenados os registros de operações como troca de senha, criação e modificação de grupos, logons e logoffs em computadores. Se seu domínio tem muitos usuários (mais de 1000), os logs crescem muito rápido. No domínio da empresa que trabalho (com mais de 10.000 usuários), existem 3 controladores de domínio, cada um com 3 GB de log, que não mantém mais de 24 horas de logs!

Um outro problema dos logs de segurança é a necessidade de mantê-los acessíveis por longo período para atender pedidos de auditoria. Isso implica em exportá-los periodicamente já que o tamanho máximo do arquivo de log no Windows é 4 GB.

Na interface do Visualizador de Eventos é possível exportar os logs em formato CSV, mas não é produtivo, nem viável, todo dia realizar a exportação dos logs. A alternativa neste caso é utilizar alguma ferramenta para isso.

Existem várias dezenas de ferramentas pagas para realizar esta tarefa e pelo menos uma gratuita que eu conheço: o EventCombMT. As pagas normalmente são mais caras que o próprio Windows e o EventCombMT está ultrapassado, já que a última versão é de quase 10 anos atrás.

Uma alternativa é criar o seu próprio exportador de logs. Existem métodos para isso usando Visual Basic Script ou PowerShell. Eu optei pela última, que apesar da sintaxe exótica é a linguagem de script mais poderosa que eu já vi. Com ela dá para fazer tudo o que você quiser dentro do Windows.

O script em anexo exporta o log em formato CSV e troca as quebras de linha de dentro dos campos de texto por espaço tornando viável a pesquisa. Além disso compacta o arquivo usando o método de compressão PPMD que comprime até 200 vezes para 1, economizando muito espaço de armazenamento.

Se você quiser usar o script que eu fiz, faça download aqui.

Você precisará instalar o 7-Zip e precisará alterar as variáveis $log,  $diretorio e $repositoriologs de acordo com suas necessidades.

Você deve agendar o script para rodar em cada um dos seus domain controllers de 6 em 6 horas, tomando cuidado de usar uma chave de administrador para executar o agendamento e marcar a combobox para Executar com privilégios mais altos (em inglês Run with highest privileges).

Será gerado no final um arquivo 7z que pode ser lido diretamente sem precisar descompactar com o comando abaixo:

"c:Program Files (x86)7-Zip7z.exe" ^
e -so -bd arquivos_dos_logs.7z 2> nul | ^
find /I "string a ser procurada"

Para fazer o mesmo no Linux basta instalar o pacote para descomprimir arquivos to tipo 7z e criar o arquivo /bin/7zcat (com o conteúdo abaixo) e torná-lo executável:

#!/bin/bash
PATH=${GZIP_BINDIR-'/bin'}:$PATH
exec 7z e -so -bd "$@" 2>/dev/null | cat

Depois executar o comando 7zcat arquivos_dos_logs.7z 2> /dev/null | grep “string a ser procurada”

Para descobrir o que significa cada código de evento, acesse este artigo da Microsoft.

Deixe um comentário