O tripwire e a integridade de sistemas GNU/Linux Elmer Sens José Ricardo Simões Rodrigues Junho de 2003. Resumo Neste breve artigo pretendemos abordar a utilização de uma poderosa e gratuita ferramenta de software de auditoria para verificar se crackers alteraram arquivos e programas de servidores ou estações executando GNU/Linux. Sumário 1 Introdução 2 1.1 tripwire e hash........................... 2 2 Obtenção e instalação 2 3 Configuração do tripwire 3 3.1 /etc/tripwire/twcfg.txt..................... 3 3.2 /etc/tripwire/twpol.txt..................... 4 3.3 /etc/tripwire/twinstall.sh................... 5 4 Execução do tripwire 6 5 Verificação de integridade do sistema 7 5.1 O Relatório do tripwire...................... 7 6 Atualizando a base de dados 8 7 Automatizando tudo 8 8 Conclusões 9 9 Bibliografia consultada 10 Os autores são estudantes do curso de Pós Graduação Lato Sensu em Administração de Redes Linux da Universidade Federal de Lavras. O presente artigo foi escrito como atividade da disciplina Segurança em Redes e Criptografia ministrada pelo Prof. Joaquim Quinteiro Uchôa. Endereços para correspondência eletrônica: elmer@linuxmail.org e simoes@uni.de, respectivamente 1
1 Introdução A integridade dos arquivos e programas de um sistema, principalmente de um servidor, é imprescindível. Quase sempre um cracker usa a primeira invasão do sistema para implantar os ditos rootkits que nada mais são que programas conhecidos como ps, ls, more, login, cat, etc, com modificações que, por exemplo, capturam senhas de usuários. Outra possibilidade é a de se substituir os atuais programas instalados por outros de versões mais antigas com conhecidas vulnerabilidades, a implantação de trojans e alteração de arquivos de configuração. A funcionalidade do tripwire é justamente notificar o administrador da ocorrência de modificações em arquivos vitais do sistema, e, consequentemente, minimizar o impacto de invasões que não puderam ser impedidas por seu firewall, por exemplo. O tripwire possui versões comerciais para os unices em geral e MS Windows NT, vide http://www.tripwire.com bem como uma licença para fins acadêmicos e de pesquisa; a versão GNU/Linux é licenciada sob a GNU/GPL (vide licença em http://www.fsf.org/licenses/licenses.pt.html). 1.1 tripwire e hash Em criptografia existe uma técnica denominada função hash que, tendo como entrada um conjunto de bits de um arquivo qualquer, mediante cálculos matemáticos, produz como saída uma cadeia de bits de tamanho fixo denominada hash. Boas funções hash devem, em teoria, tornar impossível a obtenção da cadeia de bits original a partir do hash. A técnica de obtenção de hashes é usada, por exemplo, no armazenamento de senhas em sistemas GNU/Linux, de modo que não se armazena a senha propriamente dita, apenas seu hash, o qual é comparado com o hash da senha que o usuário digita quando do login. O tripwire gera uma base de dados contendo informações como hash, permissões e data de modificação de cada arquivo pré-estabelecido para proteção. No processo de verificação, una nova base de dados é gerada e comparada à primeira, emitindo um relatório para o administrador. Nem sempre as informações constantes do relatório são indícios de violação do sistema. Se escolhermos proteger os arquivos /etc/passwd e /etc/shadow, caso haja a necessidade de inclusão de novos usuários ou mesmo um usuário modificar sua senha, o tripwire relatará uma violação. 2 Obtenção e instalação O tripwire pode ser obtido em qualquer repositório de arquivos, como o já tradicional http://www.rpmfind.net ou no CD de instalação de sua distribuição GNU/linux predileta. Usando o conveniente aplicativo gerenciador de pacotes rpm, a instalação é feita digitando-se os comandos da figura 1 na página seguinte. A instalação do exemplo foi feita a partir de um CD da distribuição Red Hat 7.2 em um sistema Conectiva 8.0. A versão do tripwire é a 2.3.1-5. Instalado o software, podemos iniciar a configuração. 2
Figura 1: Instalação do tripwire usando rpm 3 Configuração do tripwire O funcionamento do tripwire é controlado por dois arquivos de configuração: /etc/tripwire/twcfg.txt e /etc/tripwire/twpol.txt. No primeiro arquivo temos parâmetros gerais como caminho para executáveis do software e no segundo temos as políticas de proteção dos arquivos, indicando quais dever ser protegidos. 3.1 /etc/tripwire/twcfg.txt Após a instalação, são copiados arquivos de exemplo que poder ser mudados de acordo com nossas necessidades. A figura 2 (veja texto selecionado) mostra duas modificações essenciais a serem feitas no arquivo twcfg.txt. Figura 2: Arquivo /etc/tripwire/twcfg.txt modificado A primeira é a inclusão da variável TEMPDIRECTORY que instrui o tripwire a usar o diretório /temp/tripwire ao invés do diretório /temp, onde todos 3
os usuários podem gravar e ler. Use mkdir /temp/tripwire e chmod 700 /temp/tripwire para criar o diretório com as permissões corretas. A segunda é o uso da opção GOBALEMAIL que faz o envio de um relatório recém-gerado aos endereços especificados. Isso é necessário se quisermos a geração automatizada de relatórios usando o cron para análise remota. 3.2 /etc/tripwire/twpol.txt Veja, na figura 3, o arquivo /etc/tripwire/twpol.txt instalado originalmente. Figura 3: Arquivo /etc/tripwire/twpol.txt original O arquivo /etc/tripwire/twpol.txt contém, em resumo, regras que agrupam arquivos e diretórios e o nível de segurança de cada arquivo ou diretório. Na figura 3 temos a seção denominada Networking Programs com aplicativos voltados para a rede. Abaixo da definição rulename é especificado o nível de segurança deste grupo de arquivos mediante uso da palavrra-chave severity. O valor SIG HI indica que a regra se aplica a arquivos de extrema importância para 4
o sistema. Outros valores possível são SIG LOW e SIG MED, significância baixa e média, respectivamente. O valor SEC CRIT associado aos arquivos da regra denota que não devem ser alterados em qualquer circunstância. Outros valores possíveis são listados no preâmbulo do arquivo /etc/tripwire/twpol.txt. É importante que seja feita uma análise cuidadosa do conteúdo do arquivo /etc/tripwire/twpol.txt pois alguns arquivos listados na configuração de exemplo podem não estar presentes em sua instalação. Comente-os usando # para evitar as mensagens de erro produzidas no momento da geração ou verificação da base de dados. Evidentemente, é possível a inclusão de mais arquivos. Escolha um dos grupos pré-definidos e adicione o arquivo com caminho completo. 3.3 /etc/tripwire/twinstall.sh Finalizadas as alterações necessárias nos arquivos de configuração e de políticas, é necessário iniciar o tripwire executando o shell script /etc/tripwire/ twinstall.sh o qual objetiva gerar duas senhas, local e site, e que serão usadas para autorizar a manutenção do tripwire e proteger os arquivos de configuração. A proteção aos arquivos twpol.txt e twcfg.txt é necessária pois um intruso poderia modificá-los a exemplo do que pode acontecer com os logs de uma invasão. Execute /etc/tripwire/twinstall.sh conforme a figura 4 e digite as duas senhas (passphrases) pedidas. Figura 4: Execução do bash script /etc/tripwire/twinstall.sh Após sua execução, serão criados os arquivos /etc/tripwire/tw.cfg e /etc/tripwire/tw.pol versões protegidas de /etc/tripwire/twcfg.txt e /etc/tripwire/twpol.txt. Os arquivos tw.cfg e tw.pol são binários e não podem ser lidos diretamente. Para tanto deve ser usado o utilitário twadmin com a sintaxe seguinte: 5
# twadmin -m f -c /etc/tripwire/tw.cfg # twadmin -m p -p /etc/tripwire/tw.pol Os arquivos /etc/tripwire/twcfg.txt e /etc/tripwire/twpol.txt não são mais necessários e podem ser apagados seguramente, o que é recomendado. 4 Execução do tripwire A base de dados inicial deverá, a seguir, ser gerada para proteger os arquivos indicados segundo a política definida. É fundamental que a primeira base de dados seja feita em um sistema idôneo e que não tenha sofrido qualquer tipo de intrusão ou logo após a instalação do sistema. Figura 5: Primeira execução do tripwire Para gerar a base de dados inicial, use o comando tripwire --init conforme figura 5. O processamento pode levar alguns minutos dada a quantidade de cálculos matemáticos envolvidos e o número de arquivos a serem processados. Eventualmente, não existindo em seu sistema algum arquivo listado em sua política, o tripwire retornará uma mensagem similar à seguinte: # Warning: File system error. # Filename: /nome/do/arquivo # No such file or directory # Continuing... Tais mensagens são apenas avisos e não interrompem a execução do programa. Para evitá-las, proceda como descrito na seção 3.2 na página anterior. Não ocorrendo problemas, a base de dados será gerada em /var/lib/tripwire/hostname.domain.twd a qual não pode ser lida diretamente. Para garantir a integridade total de sua base de dados, é recomendado que você guarde uma cópia desse arquivo e de toda a árvore abaixo de /etc/tripwire em uma mídia removível como CD-R. 6
5 Verificação de integridade do sistema A partir de agora, podemos gerar relatórios de integridade do sistema de arquivos com o comando tripwire --check. Em nosso sistema, o resultado foi o apresentado na figura 6. Figura 6: Parte da saída da execução do comando tripwire --check É possível o envio de uma cópia do relatório por e-mail (vide seção 3.1 na página 4) usando o comando tripwire --check --email-report. Assim é gerado um arquivo protegido no diretório /var/lib/report que é acessível via comando twprint --print-report -r /caminho/do/arquivo/- de/relatório Veja, na figura 6, que foi adicionado um arquivo listado na linha Tripwire Data Files. Trata-se do arquivo de relatório em /var/lib/report. Agora, iremos modificar um dos arquivos protegidos com o intuito de verificar o relatório do tripwire. Adicionamos um usuário ao sistema e executamos tripwire --check novamente. Nas figuras 7 na página seguinte e 8 na página 9 temos relatório do tripwire apontando que dois arquivos foram modificados: /etc/passwd e /etc/shadow. 5.1 O Relatório do tripwire O relatório do tripwire contem quatro partes, cada uma com uma ou mais seções, conforme a tabela 1 na página 10. 7
Figura 7: Parte da saída da execução do comando tripwire --check apontando arquivos modificados 6 Atualizando a base de dados Após auditoria feita no sistema e verificada a ausência de intrusão real, apenas modificações do arquivo decorrentes da ação do administrador, a base de dados deve ser atualizada para refletir a situação atual do sistema. Use o comando a seguir, digitando tudo em uma linha: # tripwire --update --twrfile /var/lib/tripwire/report/ hostname-timestamp.twr Caso hajam alterações de arquivos protegidos, é prudente impedir que as informações relativas ao objeto sejam atualizados. Entre no modo de edição dos arquivos a serem atualizados com o comando: # tripwire --update --r /var/lib/tripwire/report/ hostname-timestamp.twr -V /usr/bin/emacs Substitua o argumento da opção -V na parte final do comando por seu editor favorito. O tripwire irá abrir um arquivo temporário em seu editor. Desmarque os arquivos que não devem ser atualizados na base de dados, feche o editor, informe sua senha e a base será atualizada. 7 Automatizando tudo Escreva um shell script como a listagem da figura 9 na próxima página e agende sua execução com o cron. Arquive-o na pasta /etc/cron.daily para ex- 8
Figura 8: Detalhe dos arquivos modificados ecução diária. Adapte-o à suas necessidades adicionando, por exemplo uma linha que envie o relatório por e-mail, conforme descrito na seção 3.1 na página 4. #!/bin/sh HOST_NAME= uname -n if [! -e /var/lib/tripwire/{$host_name}.twd]; then echo "** ERRO: Base de dados de {$HOST_NAME} n~ao encontrada. **" echo "** Execute: /etc/tripwire/twinstall.sh ***" echo "** e/ou tripwire --init. **" else test -f /etc/tripwire/tw.cfg && /usr/bin/tripwire --check fi Figura 9: Exemplo de Shell script para automatização das verificações 8 Conclusões O tripwire é mais uma frente de defesa de nossos sistemas. Deve sempre ser aliado à implementação de um firewall robusto, um IDS e uma política de segurança e uso rígida. A gratuidade do software é uma característica inerente ao software livre e é outro atrativo. Muitas outras funcionalidades estão presentes no tripwire. Nunca é demais recomendar a leitura de páginas de manual: twintro, twadmin, twprint, twconfig, tripwire, twpolicy, twfiles, todos com informações muito úteis, 9
Tabela 1: Seções do Relatório do tripwire Seção Propósito Report Summary Lista host name, IP, arquivos de política e de configuração, base de dados e comandos usados para geração do relatório. Rule Summary Sumário das adições, modificações e apagamentos e total de violações encontradas. Essa seção ajuda a encontrar erros rapidamente. Object Detail Contém dados específicos das violações reportadas na seção Report Summary. Aqui devemos verificar se trata-se de uma violação real (um cracking)ou simples alteração devida às atividades normais do sistema. Error Report Mostra erros encontrados, quase sempre, em razão de arquivos listados em twpol.txt e inexistentes em seu sistema. as quais ajudaram na feitura deste trabalho. Vale também uma visita ao sítio da versão free do tripwire: www.tripwire.org. 9 Bibliografia consultada LITT, Steve. Tripwire. Linux Productivity Magazine, [s.l], v. 2, N. 4, Abril de 2003. Disponível em <http://www.troubleshooters.com/lpm/200304/ 200304.htm>. Acesso em 20 de junho de 2003. 10