Monitorización orientada a host con OSSEC I

sáb, 01 nov 2008 by Foron

En el mundo del software libre hay multitud de proyectos que, debido a su calidad, han terminado siendo comprados por empresas para ser usados como parte de sus soluciones comerciales. Dos ejemplos son sguil y ossec.

En la próxima serie de dos posts voy a comentar muy por encima lo principal de ossec.

Ossec es un proyecto relacionado con la seguridad informática, y particularmente con lo que se suele llamar HIDS. Dicho de otra forma, y simplificando mucho, se trata de una aplicación que monitoriza una máquina, y que detecta las anomalías que puedan producirse en el sistema. Para hacer esto usa sobre todo una herramienta para la detección de rootkits, otra para revisar la integridad de ficheros y ejecutables del sistema, y por último un potente sistema para analizar logs.

En cuanto a la arquitectura del sistema, usa básicamente un modelo de servidor/agentes, con lo que tendremos una máquina (servidor) encargada de recibir y actuar en base a la información que reciba de los agentes que, en definitiva, son las máquinas que están siendo monitorizadas. La forma de actuar del servidor es, por una parte, enviando noficaciones, y por otro lado, si así se configura, generando reglas firewall que se ejecutarán en los propios agentes.

Este primer post sólo va a describir la instalación de ossec. Dejamos para posts posteriores la configuración.

La instalación de ossec es muy sencilla. Es suficiente con ejecutar el típico install.sh del fichero de instalación que se puede descargar desde la web.

  sh install.sh

Una vez seleccionamos el idioma de instalación empieza el tema.

  1- What kind of installation do you want (server, agent, local or help)? server
    - Server installation chosen.
  2- Setting up the installation environment.
    - Choose where to install the OSSEC HIDS [/var/ossec]:  /usr/local/ossec-1.6
       - Installation will be made at  /usr/local/ossec-1.6 .
  3- Configuring the OSSEC HIDS.
    3.1- Do you want e-mail notification? (y/n) [y]:
     - What's your e-mail address? zzz@yyyyyyy.net
     - We found your SMTP server as: mail.yyyyyyy.net.
     - Do you want to use it? (y/n) [y]:
     --- Using SMTP server:  mail.yyyyyyy.net.
    3.2- Do you want to run the integrity check daemon? (y/n) [y]:
     - Running syscheck (integrity check daemon).
    3.3- Do you want to run the rootkit detection engine? (y/n) [y]:
     - Running rootcheck (rootkit detection).
    3.4- Active response allows you to execute a specific
         command based on the events received. For example,
         you can block an IP address or disable access for
         a specific user.
         More information at:
         http://www.ossec.net/en/manual.html#active-response
     - Do you want to enable active response? (y/n) [y]: n
       - Active response disabled.
    3.5- Do you want to enable remote syslog (port 514 udp)? (y/n) [y]:
     - Remote syslog enabled.
    3.6- Setting the configuration to analyze the following logs:
      -- /var/log/messages
      -- /var/log/auth.log
      -- /var/log/syslog
      -- /var/log/vsftpd.log
      -- /var/log/mail.info
      -- /var/log/dpkg.log
      -- /var/log/snort/alert (snort-full file)
      -- /var/log/apache2/error.log (apache log)
      -- /var/log/apache2/access.log (apache log)

     - If you want to monitor any other file, just change
       the ossec.conf and add a new localfile entry.
       Any questions about the configuration can be answered
       by visiting us online at http://www.ossec.net .

     --- Press ENTER to continue ---

A partir de aquí empieza a compilar los distintos componenetes. He elegido una instalación para el servidor que recibirá los eventos, y he activado tanto la detección de rootkits como la revisión de integridad, pero he dejado sin activar la respuesta activa, que básicamente se trata de añadir entradas a hosts.deny y reglas de firewall.

El syslog remoto lo vamos a usar para recibir mensajes desde los agentes.

Por cierto, mientras escribía estas líneas el sistema se ha terminado de compilar:

  - System is Debian (Ubuntu or derivative).
  - Init script modified to start OSSEC HIDS during boot.
  - Configuration finished properly.
  - To start OSSEC HIDS:
                 /usr/local/ossec-1.6/bin/ossec-control start
  - To stop OSSEC HIDS:
                 /usr/local/ossec-1.6/bin/ossec-control stop
  - The configuration can be viewed or modified at /usr/local/ossec-1.6/etc/ossec.conf
      Thanks for using the OSSEC HIDS.
      If you have any question, suggestion or if you find any bug,
      contact us at contact@ossec.net or using our public maillist at
      ossec-list@ossec.net
      ( http://www.ossec.net/main/support/ ).
      More information can be found at http://www.ossec.net
  ---  Press ENTER to finish (maybe more information below). ---

A partir de aquí, por un lado tendremos que configurar ossec (ossec.conf), y después tendremos que ir añadiendo los agentes con la utilidad /usr/local/ossec-1.6/bin/manage_agents.

Vamos a arrancar el servidor y a añadir un par de agentes, uno en linux y otro en windows. Bueno, el agente windows no lo voy a documentar aquí. Tiene un instalador gráfico que se descarga desde la web, y los pasos son muy similares.

  /usr/local/ossec-1.6/bin/ossec-control start
  Starting OSSEC HIDS v1.6 (by Third Brigade, Inc.)...
  Started ossec-maild...
  Started ossec-execd...
  Started ossec-analysisd...
  Started ossec-logcollector...
  Started ossec-remoted...
  Started ossec-syscheckd...
  Started ossec-monitord...
  Completed.

  # ps aux | grep osse
  ossecm    5579  0.0  0.0   2076   528 ?        S    17:45   0:00 /usr/local/ossec-1.6/bin/ossec-maild
  ossec     5587  0.0  0.1   2664  1312 ?        S    17:45   0:00 /usr/local/ossec-1.6/bin/ossec-analysisd
  root      5591  0.0  0.0   1796   468 ?        S    17:45   0:00 /usr/local/ossec-1.6/bin/ossec-logcollector
  root      5603  2.5  0.0   1944   512 ?        D    17:45   0:04 /usr/local/ossec-1.6/bin/ossec-syscheckd
  ossec     5607  0.0  0.0   1980   480 ?        S    17:45   0:00 /usr/local/ossec-1.6/bin/ossec-monitord
  ossecm    5610  0.0  0.0   2076   300 ?        S    17:45   0:00 /usr/local/ossec-1.6/bin/ossec-maild

  # ./manage_agents
  ***********************************************
  * OSSEC HIDS v1.6 Agent manager.  *
  * The following options are available:  *
  ***********************************************
     (A)dd an agent (A).
     (E)xtract key for an agent (E).
     (L)ist already added agents (L).
     (R)emove an agent (R).
     (Q)uit.
  Choose your action: A,E,L,R or Q: A

  - Adding a new agent (use '\q' to return to the main menu).
    Please provide the following:
      * A name for the new agent: agente1
      * The IP Address of the new agent: 172.17.0.131
      * An ID for the new agent[001]:
  Agent information:
      ID:001
      Name:agente1
      IP Address:172.17.0.131
  Confirm adding it?(y/n): y
  Agent added.

  # ./manage_agents

  ***********************************************
  * OSSEC HIDS v1.6 Agent manager.  *
  * The following options are available:  *
  ***********************************************
     (A)dd an agent (A).
     (E)xtract key for an agent (E).
     (L)ist already added agents (L).
     (R)emove an agent (R).
     (Q)uit.
  Choose your action: A,E,L,R or Q: E

  Available agents:
     ID: 001, Name: agente1, IP: 172.17.0.131
  Provide the ID of the agent to extract the key (or '\q' to quit): 001
  Agent key information for '001' is:
  XDAxIGZuMTMxIDE5Mi4xNjguMTXuMTMxIDZzY2IzZjg1Y2JmYjVmOaBhMWM0MWRkMTNjMWQ4OWY4MZMyMjkyYTRiOTk5YjJlZ4U5MjRm5zU0ZGE1N2I3NTk=

  ** Press ENTER to return to the main menu.

Y ya está. Ahora sólo queda instalar el agente en el servidor a monitorizar. La clave se usa para la comunicación agente/servidor.

  # ./install.sh
  ...
  1- What kind of installation do you want (server, agent, local or help)? agent
    - Agent(client) installation chosen.
  2- Setting up the installation environment.
    - Choose where to install the OSSEC HIDS [/var/ossec]: /usr/local/ossec-1.6
      - Installation will be made at  /usr/local/ossec-1.6 .
  3- Configuring the OSSEC HIDS.
    3.1- What's the IP Address of the OSSEC HIDS server?: 172.17.0.1
      - Adding Server IP 172.17.0.1
    3.2- Do you want to run the integrity check daemon? (y/n) [y]:
      - Running syscheck (integrity check daemon).
    3.3- Do you want to run the rootkit detection engine? (y/n) [y]:
      - Running rootcheck (rootkit detection).
    3.4 - Do you want to enable active response? (y/n) [y]: n
      - Active response disabled.
    3.5- Setting the configuration to analyze the following logs:
      -- /var/log/messages
      -- /var/log/auth.log
      -- /var/log/syslog
      -- /var/log/mail.info
      -- /var/log/dpkg.log
    - If you want to monitor any other file, just change
      the ossec.conf and add a new localfile entry.
      Any questions about the configuration can be answered
      by visiting us online at http://www.ossec.net .
  --- Press ENTER to continue ---

Y ahora copiamos la clave pública que antes hemos sacado del servidor:

  ./bin/manage_agents

  ***********************************************
  * OSSEC HIDS v1.6 Agent manager.  *
  * The following options are available:  *
  ***********************************************
     (I)mport key from the server (I).
     (Q)uit.
  Choose your action: I or Q: I
  * Provide the Key generated by the server.
  * The best approach is to cut and paste it.
  *** OBS: Do not include spaces or new lines.
  Paste it here (or '\q' to quit): XDAxIGZuMTMxIDE5Mi4xNjguMTXuMTMxIDZzY2IzZjg1Y2JmYjVmOaBhMWM0MWRkMTNjMWQ4OWY4MZMyMjkyYTRiOTk5YjJlZ4U5MjRm5zU0ZGE1N2I3NTk=
  Agent information:
     ID:001
     Name:agente1
     IP Address:172.17.0.131
  Confirm adding it?(y/n): y
  Added.
  ** Press ENTER to return to the main menu.

Arrancamos el agente... y ya está.

  /usr/local/ossec-1.6/bin/ossec-control start

Y no hay nada más que hacer para tener lo básico de ossec. Por supuesto, todo es muy configurable, y ampliable en base a lo que cada uno necesite.

Desde otra máquina, me intento conectar digamos que 10 veces usando ssh con usuarios invalidos..... sorpresa, recibo este correo.

  OSSEC HIDS Notification.
  2008 Sep 21 22:30:40

  Received From: (agente1) 172.17.0.131->/var/log/auth.log
  Rule: 5712 fired (level 10) -> "SSHD brute force trying to get access to the system."
  Portion of the log(s):

  Sep 21 19:06:32 fn131 sshd[5990]: Invalid user aaaaab from 172.17.0.2
  Sep 21 19:06:26 fn131 sshd[5986]: Failed password for invalid user aaaaa from 172.17.0.2 port 39010 ssh2
  Sep 21 19:06:23 fn131 sshd[5986]: Failed password for invalid user aaaaa from 172.17.0.2 port 39010 ssh2
  Sep 21 19:06:21 fn131 sshd[5986]: Failed none for invalid user aaaaa from 172.17.0.2 port 39010 ssh2
  Sep 21 19:06:21 fn131 sshd[5986]: Invalid user aaaaa from 172.17.0.2
  Sep 21 19:06:09 fn131 sshd[5984]: Failed password for invalid user aaaah from 172.17.0.2 port 39009 ssh2
  Sep 21 19:06:06 fn131 sshd[5984]: Failed none for invalid user aaaah from 172.17.0.2 port 39009 ssh2

Algunos ejemplos con distintos tipos de eventos:

  OSSEC HIDS Notification.
  2008 Oct 09 21:29:03

  Received From: servidor->syscheck
  Rule: 550 fired (level 7) -> "Integrity checksum changed."
  Portion of the log(s):

  Integrity checksum changed for: '/etc/dovecot/dovecot.conf'
  Size changed from '45438' to '45460'
  Old md5sum was: 'bd5c81584dad9725045ec0e52eb0c15c'
  New md5sum is : '439061951cdeb975c21d37b4cc5f8649'
  Old sha1sum was: '8d7ade9a74b9e8ff4d6758c14bdb070ccb15b198'
  New sha1sum is : '8e7d34ba6328a1e5d38645972b369e700f7d05b2'
   --END OF NOTIFICATION

  OSSEC HIDS Notification.
  2008 Oct 07 18:29:00

  Received From: servidor->/var/log/dpkg.log
  Rule: 2902 fired (level 7) -> "New dpkg (Debian Package) installed."
  Portion of the log(s):

  2008-10-07 18:29:00 status installed unzip 5.52-12
   --END OF NOTIFICATION

  OSSEC HIDS Notification.
  2008 Oct 05 17:42:23

  Received From: agente1->/var/log/messages
  Rule: 5104 fired (level 8 ) -> "Interface entered in promiscuous(sniffing) mode."
  Portion of the log(s):

  Oct  5 17:42:21 nurn kernel: device lo entered promiscuous mode
   --END OF NOTIFICATION

En el próximo post veremos un poco sobre la configuración de todas estas reglas.


Comments