você está aqui: Home  → Arquivo de Mensagens Curso Gratuito sobre Expressões Regulares, com o Prof.  Julio Neves

Osiris - Host Integrity Monitoring System

Colaboração: Ricardo Iramar dos Santos

Data de Publicação: 30 de Setembro de 2004

Introdução

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.

Pré-requisitos

osiris-4.0.3.tar.gz

Instalação

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$

Configuração

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.

Conclusão

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.

Referências

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.


Video: Introducing Python

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



Veja a relação completa dos artigos de Ricardo Iramar dos Santos