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.


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

Adicionar comentário

* Campos obrigatórios
5000
Powered by Commentics

Comentários

Nenhum comentário ainda. Seja o primeiro!


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