De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.
Colaboração: Ricardo Iramar dos Santos
Data de Publicação: 30 de Setembro de 2004
Aqui no escritório precisamos de uma solução para verificar a integridade dos arquivos constantemente que fosse client/server (logs centralizados) e multi-plataforma (Linux e Windows).
Primeiro tentei com o Samhain (http://la-samhna.de/samhain/), mas ele não funcionou como client/server nem seguindo a documentação a risca. Bem, pensei que o problema era entre a cadeira e o monitor (/me), por coincidência um amigo (web_knows/Ribamigo) também estava testando o Samhain, adivinha? Também não conseguiu. Toda essa histórinha é só para falar que se você conseguir instalar o Samhain e funcionar na configuração client/server favor mandar um mail para <agent smith (a) globo com> informando a façanha.
Como o Samhain não funcionava parti para uma outra solução chamada Osiris (http://osiris.shmoo.com) que funcionou de primeira e atendeu a todas as nossas expectativas.
O Osiris é totalmente modular, isto é, dividido em três partes que são: osirisimd (daemon que gerência tudo), osirisd (daemon responsável pela verificação) e osiris (aplicativo de linha de comando). Por enquanto só os nomes e funções é o que nos interessa.
Vamos parar de papo e começar logo.
O source dos três componentes do Osiris estão todos em um único arquivo (osiris-4.0.3.tar.gz), portanto será necessário copia-lo tanto para o server (matrix) como client (trinity).
Iremos instalar primeiro o daemon osirismd no server pois ele será o responsavel por gerenciar os logs gerados pelos clients.
Primeiro crie um usuário e um grupo com nome osiris no seu server, o osirismd por padrão é executado por esse usuário e grupo por questões de segurança.
Agora a instalação do osirismd própriamente dita.
ricardo@matrix:~/src/Osiris$ tar zxvf osiris-4.0.1.tar.gz ricardo@matrix:~/src/Osiris$ cd osiris-4.0.1 ricardo@matrix:~/src/Osiris/osiris-4.0.1$ ./configure (...) ricardo@matrix:~/src/Osiris/osiris-4.0.1$ make console (...) ricardo@matrix:~/src/Osiris/osiris-4.0.1$ su ricardo@matrix:~/src/Osiris/osiris-4.0.1# make install (...) Install osiris agent? (y/n) [y] n Install management console? (y/n) [y] Install CLI? (y/n) [y] Installation directory for binaries: [/usr/local/sbin] (...) Start management console now? (y/n) [y] n --> to start management console, run: /usr/local/sbin/osirismd Start scan agent now? (y/n) [y] n --> to start the scan agent, do sudo /usr/local/sbin/osirisd (...) ricardo@matrix:~/src/Osiris/osiris-4.0.1#
Se você utiliza Slackware faça a limpeza abaixo, pois o Slackware segue o padrão BSD para inicialização e não SystemV apesar de suportar.
ricardo@matrix:~/src/Osiris/osiris-4.0.1# cd /etc/rc.d ricardo@matrix:/etc/rc.d# mv osirismd rc.osirismd ricardo@matrix:/etc/rc.d# rm -R rc[3-5].d ricardo@matrix:/etc/rc.d# echo "./rc.osirismd start" >> rc.local ricardo@matrix:/etc/rc.d# exit ricardo@matrix:~/src/Osiris/osiris-4.0.1$
Para essa versão do osiris (4.0.1) existe um bug nesses script rc.osrismd. Edite este arquivo e altere a linha "killall osirisd -TERM" para "killall osirismd -TERM". Perceba que a pessoa deve ter copiado o script do outro daemon e esqueceu de alterar o nome do arquivo. Agora vamos instalar o client em uma outra maquina, o procedimento é bem parecido. Não se esqueça de criar o usuário e o grupo com nome osiris nas maquinas clients também.
ricardo@trinity:~/src/Osiris$ tar zxvf osiris-4.0.1.tar.gz ricardo@trinity:~/src/Osiris$ cd osiris-4.0.1 ricardo@trinity:~/src/Osiris/osiris-4.0.1$ ./configure (...) ricardo@trinity:~/src/Osiris/osiris-4.0.1$ make agent (...) ricardo@trinity:~/src/Osiris/osiris-4.0.1$ cd src/install/ ricardo@trinity:~/src/Osiris/osiris-4.0.1/src/install$ tar zxvf osiris- agent-4.0.1-release-unknown-Linux-2.4.26.tar.gz (...) ricardo@trinity:~/src/Osiris/osiris-4.0.1/src/install$ cd osiris-agent- 4.0.1-release ricardo@trinity:~/src/Osiris/osiris-4.0.1/src/install/osiris-agent-4.0. 1-release$ su ricardo@trinity:~/src/Osiris/osiris-4.0.1/src/install/osiris-agent-4.0. 1-release# ./install.sh Install osiris agent? (y/n) [y] Installation directory for binaries: [/usr/local/sbin] (...) Start scan agent now? (y/n) [y] n --> to start the scan agent, do sudo /usr/local/sbin/osirisd (...) ricardo@trinity:~/src/Osiris/osiris-4.0.1/src/install/osiris-agent-4.0. 1-release#
Faça a limpeza novamente pelo mesmo motivo.
ricardo@trinity:~/src/Osiris/osiris-4.0.1/src/install/osiris-agent-4.0. 1-release# cd /etc/rc.d ricardo@trinity:/etc/rc.d# mv osirisd rc.osirisd ricardo@trinity:/etc/rc.d# rm -R rc[3-5].d ricardo@trinity:/etc/rc.d# echo "./rc.osirisd start" >> rc.local ricardo@trinity:/etc/rc.d# exit ricardo@trinity:~/src/Osiris/osiris-4.0.1/src/install/osiris-agent-4.0. 1-release$
Primeiro precisamos iniciar o daemon osirismd no server para iniciar as configurações.
ricardo@matrix:/etc/rc.d#./rc.osirismd start Starting osirismd:osirismd: missing configuration file, ==> created default in: /usr/local/osiris/osirismd.conf. unable to load server certificate (/usr/local/osiris/certs/osirismd.crt ) ==> creating one. Generating RSA key, 2048 bit long modulus. ...+++ ..................+++
A primeira configuração deve ser feita localmente através da linha de comando pois por padrão e segurança a primeira conexão com o daemon só poderá ser feita desta forma. Nesta primeira conexão será criado os certificados para podermos fazer uma conexão segura. Nesta primeira configuração iremos logar com o usuário admin que por padrão esta sem senha. Em seguida iremos alterar a sua senha como pode ser visto abaixo.
ricardo@trinity:~$ /usr/local/sbin/osiris Osiris Shell Interface - version 4.0.1-release (...) Are you sure you want to continue connecting (yes/no)? y >>> authenticating to (localhost) User: admin Password: connected to management console, code version (4.0.1-release). hello. WARNING: your password is empty, use the 'passwd' command to set your password. osiris-4.0.1-release: passwd admin Password: >>> user: (admin) updated. current login was edited, you must re-authenticate. >>> authenticating to (localhost) Password: connected to management console, code version (4.0.1-release). hello. osiris-4.0.1-release:
Agora você já esta na linha de comando do osiris, o funcionamente é bem simples, veja abaixo dois comandos básicos.
osiris-4.0.1-release: users [ name ] admin total: 1 users. osiris-4.0.1-release: help [ Management Commands ] mhost host new-user edit-filters edit-mhost edit-host edit-user print-filters print-mhost-config list-hosts list-users test-notify new-host delete-user [ Host commands ] status list-configs start-scan list-db watch-host import-config stop-scan base-db disable-host push-config set-base-db host-details edit-config list-logs print-db print-host-config print-config print-log print-db-errors rm-host rm-config print-db-header init drop-config rm-db config verify-config new-config [ Misc commands ] help version quit ssl For help with a specific command, try: help <command> osiris-4.0.1-release:
Antes de iniciarmos as configurações dos clients precisamos fazer a configuração básica do server.
osiris-4.0.1-release: edit-mhost [ edit management host (localhost) ] > syslog facility [DAEMON]: > control port [2266]: > http host name (uses system name by default) []: > http control port [2267]: > notification email []: agent.smith@meudominio.com.br > notification smtp host [127.0.0.1]: > notification smtp port [25]: > authorized hosts: 127.0.0.1
A maioria das opções são as padrões, não pe necessário alterar a não ser que você saiba o que esta fazendo. Para que as notificações por e-mail você precisar ter um smtp local (nosso caso) ou interno que não use autenticação para envio de e-mails.
Modify authorization list (y/n)? [n] y s) show current listing. a) add a new authorized host. r) remove authorized host. q) quit > a > authorized hostname/IP (*=wildcard): 192.168.0.*
No caso acima adicionei a rede 192.168.0.* na lista de hosts autorizados a se conectar ao server.
s) show current listing. a) add a new authorized host. r) remove authorized host. q) quit > q [ management config (localhost) ] syslog_facility = DAEMON control_port = 2266 http_port = 2267 http_host = notify_email = agent.smith@meudominio.com.br notify_smtp_host = 127.0.0.1 notify_smtp_port = 25 hosts_directory = allow = 127.0.0.1 allow = 192.168.0.* Is this correct (y/n)? y >>> management host configuration has been saved. osiris-4.0.1-release:
Pronto, o server já esta configurado para recerber os hosts. Inicio o agent na máquina client para podermos adicionar a mesma no server.
ricardo@trinity:/etc/rc.d#./rc.osirisd start Starting osirisd:
Volte para a linha de comando no server para adicionarmos o client nas configurações. Informe o nome, IP e descrição para o seu client e mantenha as outras opções padrões.
osiris-4.0.1-release: new-host [ new host ] > name this host []: trinity > hostname/IP address []: 192.168.0.101 > description []: trinity scan agent > agent port [2265]: > enable log files for this host? (yes/no) [no]:
No passo abaixo referente a base de verificações aceite todas as opções padrões. Esse passo é totalmente auto-explicativo.
Scan Databases: => keep archives of scan databases? Enabling this option means that the database generated with each scan is saved, even if there are no changes detected. Because of disk space, this option is not recommended unless your security policy requires it. (yes/no) [no]: => auto-accept changes? Enabling this option means that detected changes are reported only once, and the baseline database is automatically set when changes are detected. (yes/no) [yes]: => purge database store? Enabling this option means that none of the scan databases are saved. That is, whenever the baseline database is set, the previous one is deleted. (yes/no): [yes]:
Abaixo configure as opções de notificação conforme a sua necessidade.
Notifications: => enable admin email notification for this host? (yes/no) [no]: yes => send notification on scheduled scans failures? (yes/no) [no]: yes => send scan notification, even when no changes detected (yes/no) [no]: => send notification when agent has lost session key (yes/no) [no] : yes => notification email (default uses mhost address) []:
Neste próximo passo iremos configurar quando a primeira verificação será iniciada e a frequência com a qual deve ser feita. A opção padrão para a primeira verificação é o horário atual da máquina e a frequência é de 1440 minutos (24 horas, ou melhor, uma vez ao dia).
> configure scan scheduling information? (yes/no) [no]: yes [ scheduling information for trinity ] Scheduling information consists of a start time and a frequency value. The frequency is a specified number of minutes between each scan, starting from the start time. The default is the current time. Specify the start time in the following format: mm/dd/yyyy HH:MM enter the start date and time using 'mm/dd/yyyy HH:MM' format: [Sun Aug 29 09:14:21 2004] enter scan frequency in minutes: [1440]
Confirme suas opções e siga em frente.
> activate this host? (yes/no) [yes]: host => trinity hostname/IP address => 192.168.0.101 description => trinity scan agent agent port => 2265 host type => generic log enabled => no archive scans => no auto accept => yes purge databases => yes notifications enabled => yes notifications always => no notify on rekey => yes notify on scan fail => yes notify email => (management config) scans starting on => Sun Aug 29 09:14:21 2004 scan frequency => daily (every 1440 minutes). enabled => yes Is this correct (y/n)? y >>> new host (trinity) has been created.
Com tudo configurado inicie o host para a primeira verificação. Note que foi utilizado um arquivo padrão "default.linux" para a configuração dos arquivos que devem ser checados, falaremos mais sobre isso mais tarde.
Initialize this host? (yes/no): yes Initializing a host will push over a configuration, start a scan, and set the created database to be the trusted database. Are you sure you want to initialize this host (yes/no): yes OS Name: Linux OS Version: 2.4.26 use the default configuration for this OS? (yes/no): yes >>> configuration (default.linux) has been pushed. >>> scanning process was started on host: trinity osiris-4.0.1-release:
Com o comando abaixo "databases trinity" verificamos se a base para o host client trinity foi criada corretamente.
osiris-4.0.1-release: databases trinity This may take a while... [ name ] [ created ] * 1 Sun Aug 29 09:26:27 total: 1 (*) denotes the base database for this host. osiris-4.0.1-release:
Note que abaixo de "[ created ]" esta a data em que a base foi gerada, se você ver "(incomplete)" é porque a base ainda esta sendo gerada. Aguarde alguns segundos e verifique novamente até que apareça a data. Vamos agora selecionar o host "trinity" para podermos analisa-lo da seguinte forma.
osiris-4.0.1-release: host trinity trinity is alive. osiris-4.0.1-release[trinity]:
Perceba que agora o nome do host aparece no prompt do Osiris. Com o host selecionado podemos executar o comando "list-db" para ver as verificações que já foram efetuadas.
osiris-4.0.1-release[trinity]: list-db This may take a while... [ name ] [ created ] * 1 Thu Sep 2 11:12:50 2 Fri Sep 3 09:28:35 total: 2 (*) denotes the base database for this host.
Note que neste exemplo já temos duas verificações. Para analisarmos detalhadamente utilizaremos o comando "print-db" seguido do "name" da verificação, em nosso exemplo será a "2".
osiris-4.0.1-release[trinity]: print-db 2 This may take a while... 100% [========================================>] 2146304 bytes h) show database header. r) list file records. d) list file record details. s) list system records. x) list errors. q) quit [trinity:database: 2]:
O prompt foi alterado novamente para identificarmos facilmente que estamos analisando a base "2" do host "trinity". As diversas opções podem ser acessadas pela letra que precede o item, para economizar tempo vamos direto para a última para voltar ao prompt anterior.
[trinity:database: 2]: q osiris-4.0.1-release[trinity]:
Mas se eu quiser saber as modificações que se ocorreram nos arquivos? Basta ver os logs da seguitne forma.
osiris-4.0.1-release[trinity]: list-logs This may take a while... [ name ] [ date ] log.temp Fri Sep 3 09:46:28 total: 1 osiris-4.0.1-release[trinity]: print-log log.temp -------- begin log file -------- compare time: Fri Sep 3 09:46:28 2004 host: trinity scan config: default.linux (9e115472) log file: no log file generated, see system log. base database: 1 compare database: 2 [204][trinity][cmp][/boot/boot_message.txt][checksum][6fb775e855c776c4a f514fecc7d22ee2cc0167ab,c3d549bfe6106701d64515b9f326764a6db65494] [211][trinity][cmp][/boot/boot_message.txt][mtime][Sun Aug 29 11:54:43 2004,Fri Sep 3 09:45:06 2004] [213][trinity][cmp][/boot/boot_message.txt][ctime][Sun Aug 29 11:54:43 2004,Fri Sep 3 09:45:06 2004] [215][trinity][cmp][/boot/boot_message.txt][bytes][179,187] Change Statistics: ---------------------------------- checksums: 1 SUID files: 0 root-owned files: 1 file permissions: 0 new: 0 missing: 0 total differences: 4 -------- end log file -------- osiris-4.0.1-release[trinity]:
Pronto! Agora você já esta apto a usar o básico do Osiris, neste exemplo usamos a configuração padrão para a verificação dos arquivos. Este arquivo de configuração fica em /usr/local/osiris/configs/default.linux. Se você pretender personalizar essa configuração acesse o site do Osiris e veja nas documentações a descrição das diretivas deste arquivo.
Ao contrário do Samhain o Osiris atendeu a todas as minhas espectativas e o melhor, funcionou 100% (exceto o bug do script de inicialização). Ninguém é perfeito! Não tem muito o que falar, o software fala por si mesmo. Simplesmente ele faz o que promete fazer.
Dúvidas, críticas e sugestões devem ser enviadas para <agent smith (a) globo com>.
Quer saber mais um pouco sobre o autor desta documentação? Acesse minha home page em http://www.agentsmith.kit.net.
Colaboração: Luis Felipe Strano Moraes
Video de 24 minutos com entrevistas com personalidades de destaque da comunidade Python entremeados com a história A Python Love Story. O vídeo foi criado para ser usado como uma atividade introdutória em um curso de ciência da computação usando Python.
Para saber mais sobre o filme e fazer o download visite a página do projeto
This policy contains information about your privacy. By posting, you are declaring that you understand this policy:
This policy is subject to change at any time and without notice.
These terms and conditions contain rules about posting comments. By submitting a comment, you are declaring that you agree with these rules:
Failure to comply with these rules may result in being banned from submitting further comments.
These terms and conditions are subject to change at any time and without notice.
Comentários