Aquí estamos de nuevo con nuestra serie de artículos dedicados a la seguridad Linux.
Por un momento, pensad qué pasaría si manipulan los archivos ejecutables que utilizais.
Se podría hacer cualquier cosa, desde robar vuestras contraseñas, instalar puertas traseras para obtener acceso root y todo lo que se nos ocurra, y de imaginación vamos bien.
Rkhunter y chkrootkit muestran algunos archivos ejecutables que pueden estar manipulados, pero eso no es suficiente, ya que hay muchos más que se escapan de nuestro control.
Existe una herramienta en linux, bastante simple, llamada "integrit", que se encarga de realizar justo la tarea que necesitamos.

Para instalar integrit:


apt-get install integrit


Configuración de integrit:

La configuración de Integrit, se realiza por medio de archivos de configuración ubicados en /etc/integrit/. Los archivos son :


/etc/integrit/integrit.conf  
/etc/integrit/integrit.debian.conf


Os pego una configuración standard y paso a explicar sus opciones:


/etc/integrit/integrit.conf  

------------------------8<--------------------------

# /etc/integrit.conf : configuration file for integrit
#
# See integrit(1) and /usr/share/doc/integrit/examples/
# for more information.
#
# *** WARNING ***
#
# This is a simple default configuration file for Debian systems.
# It contains only comments, therefore integrit will not run with
# it. To make integrit functional, you must edit this file according
# to your needs.
#
# Please read README.Debian before running integrit.
#
# *** WARNING ***

#
root=/
known=/var/lib/integrit/known.cdb
current=/var/lib/integrit/current.cdb
#
# # Here's a table of letters and the corresponding checks / options:
# # Uppercase turns the check off, lowercase turns it on.
# #
# #       s    checksum
# #       i    inode
# #       p    permissions
# #       l    number of links
# #       u    uid
# #       g    gid
# #       z    file size (redundant if checksums are on)
# #       a    access time
# #       m    modification time
# #       c    ctime (time UN*X file info last changed)
# #       r    reset access time (use with care)
#
# # ignore directories that are expected to change
#
!/media
!/dev
!/sys
!/etc
!/home
!/lost+found
!/mnt
!/proc
!/root
!/tmp
#
# # ignore inode, change time and modification time
# # for ephemeral module files.
#
/lib64 IMC
/lib IMC
/boot IMC
/opt IMC

#
# # to cut down on runtime and db size:
#
=/usr/include
=/usr/X11R6/include
#
=/usr/doc
=/usr/info
=/usr/share
#
=/usr/X11R6/man
=/usr/X11R6/lib/X11/fonts
/usr/local/bin sugzpIMC
/usr/bin sugzpIMC
/bin sugzpIMC
/usr/local/sbin sugzpIMC
/usr/sbin sugzpIMC
/sbin sugzpIMC
/usr/local/games sugzpIMC
/usr/games sugzpIMC
#
# # ignore user-dependant directories
#
!/usr/local
!/usr/src
!/var
!/srv
!/run
----------------8<--------------------


Para chequear, por ejemplo, los binarios de /sbin, podemos ver que activamos las opciones sugzp y desactivamos IMC. En la leyenda del archivo conf, viene para qué sirve cada opción. Deberemos activar o desactivar opciones a nuestro gusto y según nuestras necesidades.


Una vez configurado éste archivo, pasamos a:



/etc/integrit/integrit.debian.conf

-------------------8<----------------------

# Configuration of the example daily cron job /etc/cron.daily/integrit

# Set the configuration file(s) for integrit.  /etc/cron.daily/integrit
# will run ``integrit -uc -C <file>'' for each file specified in CONFIGS.
# An empty CONFIGS variable disables /etc/cron.daily/integrit.  Multiple
# file names are separated with spaces, e.g.:
# CONFIGS="/etc/integrit/usr.conf /etc/integrit/lib.conf"
CONFIGS="/etc/integrit/integrit.conf"

# Set the mail address reports are sent to
EMAIL_RCPT="root"

# Set the subject line for the report mails
EMAIL_SUBJ="[integrit] `hostname -f`: report on changes in the filesystems"

# If ALWAYS_EMAIL is set to ``true'', a report is mailed on every run.
# Normally a report is only generated when integrit(1) exits non-zero.
ALWAYS_EMAIL=yes

-------------------8<------------------------


Como podemos ver, las opciones son triviales.
Una vez configurados estos dos archivos, ejecutamos el siguiente comando como root:


integrit -u -C /etc/integrit/integrit.conf



Integrit, utiliza dos bases de datos donde almacena los hashes y datos del sistema de archivos. La primera, la deberemos poner en un soporte de solo lectura. La segunda, se actualiza automáticamente cada vez que chequeamos el estado del sistema de archivos configurado. Para dicha tarea, podeis utilizar cdroms, cintas de backup o cualquier soporte magnético u óptico que permita por hardware activar la opción de solo lectura.


Acto seguido, copiamos al soporte que será de solo lectura la base de datos /var/lib/integrit/current.cdb. Luego tenemos que cambiar en integrit.conf la siguiente variable:

known=/var/lib/integrit/known.cdb

por

known=/media/javier/sololectura/current.cdb

Estos últimos pasos los tendremos que repetir con cada cambio que hagamos al sistema de archivos o integrit nos arrojará falsos positivos.

Os recomiendo crear un cronjob para chequear todos los días vuestro sistema con integrit. Esto se hace como sigue:

- Creamos /etc/cron.d/integrit
- Introducimos lo siguiente en dicho archivo:

-------------------------8<----------------------



# /etc/cron.d/integrit: checks integrit

SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

12 0    * * *   root  integrit -C /etc/integrit/integrit.conf -c
    
-------------------------8<----------------------


Dicho cronjob, se ejecutará a las 12:00 todos los días y se nos notificará por email del resultado. No olvideis que debereis tener una partición ntfs montada como solo lectura desde otro equipo o bien tener a esa hora siempre conectado el soporte que contenga el archivo current.db montado como solo lectura.

Un ejemplo de la salida de integrit al chequear sería el siguiente:


integrit: ---- integrit, version 4.1 -----------------
integrit:                      output : human-readable
integrit:                   conf file : /etc/integrit/integrit.conf
integrit:                    known db : /media/javier/readonly/current.cdb
integrit:                  current db : /var/lib/integrit/current.cdb
integrit:                        root : /
integrit:                    do check : yes
integrit:                   do update : no
changed: /lib/ufw/user6.rules   s(b5affe5220df0bae649f9957d6eab4c10159d1b0:7ffb9628db2e406a32abfb1574de63b392d5155b)
changed: /lib/ufw/user.rules   s(f858ac3d79f99c2f015d4e3392046061ece9091c:b09e21dc5dcbe76416422a48631f94b55f2a11cf)
integrit: not doing update, so no check for missing files


En este caso, detectó cambios en las reglas de nuestro firewall, ufw.

Si queremos ejecutar interactivamente un chequeo de integrit, deberemos introducir la siguiente línea de comandos como root:


integrit -C /etc/integrit/integrit.conf -c


Hasta aquí el artículo sobre integrit.
Si teneis dudas o consultas, dejadme un comentario.
Gracias por vuestra lectura y hasta la proxima!!




Currently unrated
  • Share

Comments

There are currently no comments

New Comment

* Please fill all required form field, thanks!