Mostrando entradas con la etiqueta logs. Mostrar todas las entradas
Mostrando entradas con la etiqueta logs. Mostrar todas las entradas

martes, 27 de mayo de 2014

Detectar automáticamente cambios de ficheros en el servidor mediante AIDE

En esta entrada veremos un pequeño tutorial para detectar las modificaciones en los ficheros de un sistema Linux mediante AIDE.

AIDE (Advanced Intrusion Detection Environment) es un comprobador de integridad de ficheros y directorios para Unix y Linux. Digamos que es la versión GNU de Tripwire y básicamente lo que hace es crear una base de datos con un listado de ficheros a partir de reglas de expresiones regulares. Tiene varios algoritmos de digest y también puede utilizar todos los atributos de archivo habituales para buscar incoherencias.

AIDE está incluido en las siguientes distribuciones, utiliza el comando correspondiente para instalarlo:

  • Debian GNU/Linux | Ubuntu: apt-get install aide or aptitude install aide
  • Gentoo: emerge aide
  • MacPorts: port install aide
  • FreeBSD: pkg_add -r aide
  • Red Hat | CentOS | Fedora: yum install aide
  • openSUSE: zypper install aide
  • IPCop: see here for installation guidelines
Lo primero que haremos será inicializar y mover la base de datos:
root@mininet-vm:~# aideinit
Running aide --init... AIDE, version 0.15.1

### AIDE database at /var/lib/aide/aide.db.new initialized.

root@mininet-vm:~# mv /var/lib/aide/aide.db.new.gz /var/lib/aide/db.gz

Después chequearemos con AIDE si ha habido alguna actualización. Se mostrarán todas las modificaciones:

root@pc1242:~# cd /var/lib/aide/
root@pc1242:/var/lib/aide# aide --check -c aide.conf.autogenerated

AIDE 0.15.1 found differences between database and filesystem!!
Start timestamp: 2014-05-09 06:05:01

etc..


Si son cambios legítimos ejecutaremos un update:

root@pc1242:/var/lib/aide# aide --update

Y luego tendremos que copiar la nueva base de datos a la original:

root@pc1242:/var/lib/aide# cp aide.db.new.gz aide.db.gz

Cada vez que tengamos que comprobar si ha habido algún cambio tendremos que repetir manualmente este proceso.

En el caso de que queramos automatizarlo podemos generar un script que se lance cada X horas y que nos avise si ha habido ningún cambio ("added|changed") o no ("Looks okay"):

#!/bin/bash
/usr/bin/aide --check -c /etc/aide/aide.conf > /tmp/aide
logfile=/tmp/aide
x=$(grep "Looks okay" $logfile | wc -l)
if [ $x -eq 1 ]
then
echo "All Systems Look OK" | /bin/mail -s "AIDE OK" your_email
else
echo "$(egrep "added|changed" /tmp/aide)" | /bin/mail -s "AIDE PROBLEM" your_email

fi
exit

Fuente: Automatically Detect File Changes on Your Server
Proyecto: http://aide.sourceforge.net/
Fuente2: http://www.hackplayers.com/2014/05/detectar-automaticamente-cambios-de-ficheros.html

lunes, 26 de mayo de 2014

Ver logs en tiempo real (espiar nuestras huellas)

Buenos días.

Hoy me encontraba realizando pruebas a un sistema donde casualmente por interfaz todo funcionaba muy bonito pero por debajo (log) mostraba diferentes errores.

La tarea a auditar estos aplicativos cuando no se tiene un patrón de reproducción se vuelve tediosa pues en este caso se tendría que realizar diferentes movimientos en el aplicativo e ir comparando contra el log. Cabe anotar que esto sucede muchas veces cuando el desarrollo es poco específico a la hora de escribir logs.

Partiendo de este punto tenemos dos problemas a atacar:

1. Tratar de reproducir el error a ciegas.
2. Comparar contra el log a ver cuando se reproduce.

Como sabemos ir mirando el log contra cualquier acción del sistema se vuelve una tarea laboriosa y quizás imposible pues un software normalmente esta compuesto de muchos módulos, así que vamos a ver una solución a este problema.

Que es un log?

Un fichero de log o registro es un archivo en el que se van anotando todos los sucesos que ocurren en determinado sistema, sirve como guía a la hora de fallar servicios o programas en un sistema.

Mostrar en pantalla los cambios de un fichero

Parar monitorear los logs en tiempo real recurrimos a una consola y un simple comando en nuestro sistema linux:
tail -f RUTA-AL-FICHERO
Ejemplo:
tail -f /var/www/apache2/logs/error_log
Con esto estaríamos verificando cada escritura de error en el log. 

Hasta aquí hemos ganado buen camino de la verificación pero dado que el aplicativo escriba mucha información esto hará mas difícil encontrar en que momento falla.

Para esta situación vamos a  usar la siguiente línea de comando:

tail -f RUTA-AL-FICHERO | grep "palabra clave a buscar el error"
Ejemplo:
tail -f /var/www/apache2/logs/error_log | Error
Con esto solo mostrara el momento en el que ha fallado y podremos disminuir el tiempo de estar mirando que esta escribiendo cuando pulsamos determinada acción.


Como lo hago en windows?

La opción mas rápida sería usar la versión tail para windows y también existe la versión grep pero existe una limitación y es que  no están en modo consola  haciendo mas difícil el uso integrado de dichas herramientas.

Para solucionar esto existe cygwin64 , y es exactamente igual la linea de comandos. Solo existe otra limitación donde se deben pegar los logs en un directorio con acceso a este.

Fuente:
http://andalinux.wordpress.com/2009/03/10/espiar-cambios-en-un-fichero-de-log/

Saludos jadcodianos.

miércoles, 14 de mayo de 2014

Hacer el seguimiento de un log en UNIX

Una buena costumbre en todo programa informático es la creación de un buen log del sistema que estás creando. Cuanto más detallado sea, más fácil será encontrar un error inesperado o una incidencia compleja.
El problema viene a veces que sumergirse en el log de un sistema que está en continuo uso puede ser algo tedioso. Más de una vez me he encontrado a un compañero bajándose todo el fichero de log (de varios megas) para revisar una traza de algo que acaba de probar.

Realizar esa acción una vez… bueno, pero hacerlo constantemente con cada prueba que se realiza, puede ser algo desesperante.

Bueno, pues como el conocimiento se comparte, aquí va un comando que ejecutaremos en un terminal remoto (PUTTY o similar) que facilita mucho el seguimiento en vivo de un log en un sistema UNIX (y derivados):

tail -F nombre_fichero.log

Con esta instrucción veremos en tiempo real el fichero que le 
indiquemos, haciendo scroll automático con las nuevas trazas que vayan 
apareciendo. Y si estamos buscando una palabra o identificador en 
concreto y queremos obviar  el resto de trazas, utilizaremos el 
siguiente comando:

tail -F nombre_fichero.log | grep palabra

Al igual que la anterior, veremos el contenido del fichero en tiempo real, pero únicamente aparecerán las líneas que contengan la palabra que indiques.


En ambos casos, para detener la instrucción y volvamos a la línea de comando, pulsaremos Ctrl-C

Fuente:
http://fsandin.wordpress.com/2010/12/29/hacer-el-seguimiento-de-un-log-en-unix/

Documentos de apoyo:
http://www.ubuntu-es.org/node/137747
http://www.marioalberto.com.mx/linux/linux.php