Вы находитесь на странице: 1из 7

Herramientas de seguridad:

Logcheck
Gunnar Wolf
Departamento de Seguridad en Cómputo

1.- Introducción -- La problemática a


resolver
Como administradores de sistemas todos sabemos que tenemos que leer las bitácoras --logs,
si prefieren decirle así-- de nuestros sistemas. Sin embargo, con las ocupaciones diarias,
muchas veces lo olvidamos, y pueden pasar días o semanas sin que veamos nuestras
bitácoras... Y nadie sabe qué obscuras criaturas pueden estar penetrando nuestro sistema.
Además, cuando leemos las bitácoras --y esto es mucho más acentuado en determinadas
versiones de Unix que en otras-- la proporción de información útil a ruido puede ser
alarmantemente baja... Si registramos cada que un usuario se conecta y tenemos 50 usuarios
--no me voy muy elevado-- con clientes POP3 configurados para conectarse cada 5 minutos,
tendremos 600 líneas por hora que no nos interesarán. Si damos servicio de FTP y a mucha
gente le interesan nuestros archivos, habrá una cantidad tremenda de información por leer...
Hacer todo esto a ojo es muy pesado, sería muy bueno tener las bitácoras en un formato más
fácil de leer y consultar.

2.- Generalidades de Logcheck


Logcheck revisa periódicamente las bitácoras del sistema , analizando cada una de las líneas
y clasificándola según diferentes niveles de alerta, reportándolo al administrador del sistema
en un formato fácil de leer, descartando las líneas que no tengan relevancia, y --típicamente--
enviándolo por correo. Logcheck checará cada línea contra cuatro niveles de seguridad:
Ignorar, actividad inusual, violación de seguridad y ataque.

Logcheck no es un programa reciente --la última revisión es de 1997. Sin embargo, su


filosofía básica lo hacen aún válido y muy útil, y probablemente no han aparecido nuevas
versiones pues no hay nada que agregar, y siendo un programa tan simple, ninguna
vulnerabilidad ha sido encontrada desde entonces.

2.1.- Dónde y cómo conseguirlo


Portsentry forma parte del proyecto Abacus. Su página es
http://www.psionic.com/abacus/logcheck/
y para bajar los programas la página es
http://www.psionic.com/download/

En esta última encontraremos tanto el archivo con los fuentes (logcheck-1.1.1.tar.gz) como
la firma PGP (logcheck-1.1.1.tar.gz.asc) garantizando contra su llave --también disponible en
esta página-- la autenticidad del paquete. En el paquete vienen los fuentes del programa. Para
información acerca de la compilación y configuración, consulta las secciones 2.3 y 2.4.

Si administras sistemas Linux RedHat o similares, te recomiendo instalarlo desde el RPM


para mantener una instalación más limpia que te permita hacer modificaciones y
actualizaciones a tu sistema en un futuro. Puedes encontrarlo en

http://rpmfind.net/linux/RPM/portsentry.html

2.2.- En qué sistemas funciona

Logcheck es un programa muy sencillo, y hacer ports entre diferentes sistemas Unix debe ser
muy sencillo. Dentro del árbol fuente, bajo el subdirectorio systems, aparecen los siguientes
sistemas

• bsdos (sistemas BSDI 2.1)


• digital (Digital Unix)
• generic (Unix genérico)
• hpux (HP UX)
• linux
• Sun (Solaris)
En el sitio Web menciona a otras varias variantes de Unix.

El autor, Craig Rowland, advierte que los ports de Digital, HP UX y Sun pueden presentar
problemas pues no ha tenido tiempo de probarlo en dichas plataformas. Claro, es posible que
funcione en otros sistemas operativos - Sugiero fuertemente que si lo logran compilar y
ejecutar correctamente en otro sistema, contribuyan con sus experiencias al equipo
desarrollador.

2.3.- Compilación

La compilación e instalación no podían ser más sencillas - No hay siquiera un script de


configuración, como es típico en los programas para Unix. En vez de ésto, basta darle,
entrando como root,

make <sistema>

Claro está, substituyendo <sistema> por nuestro tipo de sistema operativo. Dandole make
sin parámetros nos muestra las cadenas que identifican a cada sistema operativo. Por
ejemplo, en un sistema Linux:

[root@hostname logcheck-1.1.1]# make linux


make install SYSTYPE=linux
make[1]: Entering directory `/home/gwolf/logcheck-1.1.1'
Making linux
cc -O -o ./src/logtail ./src/logtail.c
./src/logtail.c: In function `main':
./src/logtail.c:51: warning: return type of `main' is not `int'
Creating temp directory /usr/local/etc/tmp
Setting temp directory permissions
chmod 700 /usr/local/etc/tmp
Copying files
cp ./systems/linux/logcheck.hacking /usr/local/etc
cp ./systems/linux/logcheck.violations /usr/local/etc
cp ./systems/linux/logcheck.violations.ignore /usr/local/etc
cp ./systems/linux/logcheck.ignore /usr/local/etc
cp ./systems/linux/logcheck.sh /usr/local/etc
cp ./src/logtail /usr/local/bin
Setting permissions
chmod 700 /usr/local/etc/logcheck.sh
chmod 700 /usr/local/bin/logtail
chmod 600 /usr/local/etc/logcheck.violations.ignore
chmod 600 /usr/local/etc/logcheck.violations
chmod 600 /usr/local/etc/logcheck.hacking
chmod 600 /usr/local/etc/logcheck.ignore
Done. Don't forget to set your crontab.
make[1]: Leaving directory `/home/gwolf/logcheck-1.1.1'
[root@hostname logcheck-1.1.1]#

Con esto, el programa queda compilado e instalado en el directorio /usr/local/etc.

No podemos dejar de hacer énfasis en esto: El programa se configura e instala muy


fácilmente. Sin embargo, es vital para un administrador el leer la información completa que
acompaña a los programas que instala, especialmente si los utilizará para ayudarlo en la
administración. Por ello la recomendación de leer con calma y tiempo la documentación
incluída con el sistema: INSTALL, README, README.keywords y
README.how.to.interpret.

2.4.- Configuración

Logcheck opera encontrando expresiones regulares; de hecho, itera sobre cada uno de los
archivos de bitácora tres veces (para localizar mensajes inusuales, violaciones de seguridad y
alertas de ataque) utilizando egrep para buscar los patrones. Te sugerimos consultar el
manual de egrep (man egrep) para poder construir reglas de revisión más poderosas más
fácilmente.
2.4.1.- Archivos

Al instalar Logcheck quedan en el directorio de instalación los siguientes archivos:

logcheck.sh
es el programa que correrá cada vez que sea invocado logcheck. Es un script en shell
normal, e incluye la configuración en un formato fácil de comprender.
logcheck.hacking
tiene la lista de cadenas con las que una línea será identificada como intento de entrar al
sistema o de conseguir información acerca de él, y por tanto serán reportadas como ataques
activos, llamando la atención de manera especial al administrador.
logcheck.ignore
tiene la lista de expresiones que son muy comunes y no vale la pena reportarlas al
administrador.
logcheck.violations
tiene la lista de expresiones que pueden ser consideradas moderadamente peligrosas, y son
etiquetadas como violaciones de seguridad.
logcheck.violations.ignore
permite ser más específico: Si una línea concuerda con una de las expresiones de
logcheck.violations pero también concuerda con una de éste archivo, la línea es
ignorada.
tmp
es el directorio temporal utilizado por el programa para procesar los datos.
Además de estos archivos, logcheck instala el programa logtail en /usr/local/bin. Este
programa mantiene la información de qué logs han sido analizados y hasta qué punto, para
no perder ni repetir ni una línea.

Logcheck por default analizará los archivos /var/log/messages, /var/log/secure y /


var/log/maillog.

2.4.2.- Opciones en logcheck.sh

En el archivo logcheck.sh encontraremos las siguientes opciones de configuración:

PATH
indica dónde buscará el sistema los binarios. Recuerda que correrá desde cron, por lo que no
hace daño definirlo, y tal vez limitarlo al mínimo necesario.
SYSADMIN
es la persona que recibirá el reporte por correo. Si no lleva una dirección completa, asume
que es una dirección local.
LOGTAIL
indica el path completo para el programa logtail
TMPDIR
especifica el directorio temporal en el que el programa hará su trabajo temporal. Este debe
ser un directorio seguro, que no tenga acceso de escritura más que para el usuario que esté
ejecutando Logcheck.
GREP
indica el nombre del comando grep a ejecutar. En muchos sisetmas Unix hay diferentes
grep con diferentes características, sugerimos instalar el egrep de GNU.
MAIL
es el comando empleado para mandar un correo. Típicamente será mail, aunque en algunos
sistemas puede ser Mail o mailx.
HACKING_FILE
es el pathname y nombre completos del archivo logcheck.hacking (ver2.4.1)
VIOLATIONS_FILE
es el pathname y nombre completos del archivo logcheck.violations (ver2.4.1)
VIOLATIONS_IGNORE_FILE
es el pathname y nombre completos del archivo logcheck.violations.ignore (ver2.4.1)
IGNORE_FILE
es el pathname y nombre completos del archivo logcheck.ignore (ver2.4.1)

2.4.3.- Ejecución

Logcheck no es un programa que funcione contínuamente, sino que es llamado cada que el
administrador lo vea adecuado. Como cada reporte será enviado por correo, lo más común es
hacerlo cada hora. Para ello es necesario crear una entrada en el crontab de root o de algún
usuario que tenga permiso de leer los archivos localizados en /var/log y crear o, por lo
menos, modificar los archivos que indiquen la posición. Éstos son <archivo>.offset --
típicamente messages.offset, secure.offset y maillog.offset.

La línea a ser agregada en el crontab será similar a la siguiente:

0 * * * * /bin/sh /usr/local/etc/logcheck.sh

Con esto, cada hora el administrador recibirá un mensaje similar al siguiente:

From root@hostname.dominio.com Wed Sep 27 21:46:33 2000


Date: Wed, 27 Sep 2000 19:00:04 -0500
From: root <root@hostname.dominio.com>
To: root@hostname.dominio.com
Subject: hostname.dominio.com 09/27/00:19.00 system check

Security Violations
=-=-=-=-=-=-=-=-=-=
Sep 27 18:23:07 hostname PAM_pwdb[14075]: authentication failure; (uid=0)
-> root for ssh service
Sep 27 18:23:11 hostname PAM_pwdb[14075]: (ssh) session opened for user
root by (uid=0)
Sep 27 18:23:11 hostname sshd[14075]: log: Password authentication for
root accepted.
Sep 27 18:23:11 hostname sshd[14075]: log: ROOT LOGIN as 'root' from
hostname2.dominio.com
Sep 27 18:23:43 hostname PAM_pwdb[14075]: (ssh) session closed for user
root

Unusual System Events


=-=-=-=-=-=-=-=-=-=-=
Sep 27 18:02:26 hostname proftpd[13963]: hostname.dominio.com (lab1
-15.dominio.com
[192.168.1.16]) - FTP no transfer timeout,
disconnected.
Sep 27 18:14:40 hostname proftpd[14030]: hostname.dominio.com (lab1
-15.dominio.com
[192.168.1.16]) - FTP no transfer timeout,
disconnected.
Sep 27 18:22:19 hostname proftpd[13875]: hostname.dominio.com (lab2
-21.dominio.com
[192.168.2.21]) - FTP no transfer timeout,
disconnected.
Sep 27 18:23:07 hostname PAM_pwdb[14075]: authentication failure; (uid=0)
-> root
for ssh service
Sep 27 18:23:11 hostname PAM_pwdb[14075]: (ssh) session opened for user
root
by (uid=0)
Sep 27 18:23:11 hostname sshd[14075]: log: ROOT LOGIN as 'root' from
dir-03.dominio.com
Sep 27 18:00:12 hostname sendmail[13610]: RAB13605: SAA13610: DSN: Host
unknown
(Name server: mail.internet.com: host not
found)

En caso de haberse registrado algún evento que concuerde con alguna línea de
logcheck.hacking, para que el reporte sea visto más rápidamente por el administrador
cambiarán los encabezados, quedando así:

From root@hostname.dominio.com Wed Sep 27 21:52:58 2000


Date: Wed, 27 Sep 2000 21:00:05 -0500
From: root <root@hostname.dominio.com>
To: root@hostname.dominio.com
Subject: hostname.dominio.com 09/27/00:21.00 ACTIVE SYSTEM ATTACK!

Active System Attack Alerts


=-=-=-=-=-=-=-=-=-=-=-=-=-=
Sep 27 20:10:48 hostname portsentry[14722]: attackalert: SYN/Normal scan
from
host: ejemplo.dominio.com/192.168.0.111 to TCP port:
1019
Sep 27 20:10:48 hostname portsentry[14722]: attackalert: Host
192.168.0.111
has been blocked via wrappers with string: "ALL:
192.168.0.111"
Sep 27 20:10:48 hostname portsentry[14722]: attackalert: Host
192.168.0.111
has been blocked via dropped route using command: "/sbin/
ipchains
-I input -s 192.168.0.111 -j DENY -l"
(...)
Security Violations
=-=-=-=-=-=-=-=-=-=
Sep 27 20:09:19 hostname PAM_pwdb[14589]: authentication failure; (uid=0)
->
root for ssh
service
Sep 27 20:09:22 hostname PAM_pwdb[14589]: (ssh) session opened for user
root by (uid=0)
Sep 27 20:09:22 hostname sshd[14589]: log: Password authentication for
root accepted.
(...)

Unusual System Events


=-=-=-=-=-=-=-=-=-=-=
Sep 27 20:10:47 hostname sshd[14624]: fatal: Did not receive ident
string.
Sep 27 20:19:43 hostname PAM_pwdb[14985]: authentication failure;
(uid=0) -> llec for ssh
service
Sep 27 20:09:34 hostname in.telnetd[14610]: connect from 192.168.0.111
(...)