viernes, enero 30, 2015

Compilando Snort desde las fuentes

Snort es un un sistema de detección de intrusiones de red cuya función es detectar posibles amenazas de seguridad que existan en la red . Funciona leyendo todo el tráfico que circula por la red a la cual está conectado, procesándolo y posteriormente analizándolo a través de una serie de reglas buscando los patrones de tráfico que le indiquen éstas en búsqueda de posibles amenazas, que en caso de encontrarse lanzar la correspondiente alarma.

Hace algunos años escribí esta pequeña nota sobre la compilación de snort pero desde entonces ha cambiado bastante la manera de hacerlo.Además, Snort suele venir ya de serie en muchas distribuciones de Linux, con lo cual no es realmente necesario compilarlo como se cuenta en esta nota. Sin embargo, si se quiere experimentar con ciertas versiones, puede ser necesario compilarlo desde fuentes, saber cuales son sus dependencias y como integrar todo el paquete. En esta pequeña nota se cuenta como realizar todo el proceso para la versión de Snort estable disponible en la fecha de publicación.

El proceso de compilación lo he llevado a cabo tanto en una Debian Wheezy, sólo con los paquetes debhelper, build-essential , bison y flex instalados, así como en MacOS X 10.9 Mavericks con todo el entorno de Xcode y la línea de comandos instalada.

Para instalar Snort es necesario en primer lugar instalar varios paquetes que necesita, así como la librería de captura de datos que provee el propio snort llamada daq. Para empezar, hay que compilar ésta última librería que la única dependencia que tiene es libpcap en una versión superior a la 1.0.0 que se puede bajar de la página web de tcpdump. Para instalar la dependencia de libpcap necesaria para compilar daq hay que dar los siguientes pasos (en este caso usando la versión 1.6.2)

baldurgate:~ terron$wget http://www.tcpdump.org/release/libpcap-1.6.2.tar.gz
baldurgate:~ terron$wget http://www.tcpdump.org/release/libpcap-1.6.2.tar.gz.sig
baldurgate:~ terron$gpg --verify libpcap-1.6.2.tar.gz.sig1
baldurgate:~ terron$tar zxvf libpcap-1.6.2.tar.gz
baldurgate:~ terron$cd libpcap-1.6.2/
baldurgate:~ terron$./configure --prefix=/usr/local
baldurgate:~ terron$make
baldurgate:~ terron$su
baldurgate:~ terron#make install
baldurgate:~ terron#ldconfig -v2

Una vez que tenemos la librería libpcap instalada y compilada, pasamoa a compilar e instalar la librería daq

baldurgate:~ terron$wget https://www.snort.org/downloads/snort/daq-2.0.4.tar.gz
baldurgate:~ terron$tar zxvf daq-2.0.4.tar.gz
baldurgate:~ terron$cd daq-2.0.4
baldurgate:~ terron$./configure ./configure -—prefix=/usr/local
baldurgate:~ terron$make
baldurgate:~ terron$su
baldurgate:~ terron#make install
baldurgate:~ terron#ldconfig -v

Ahora es necesario instalar las librerías mínimas que necesita Snort para compilarse aparte de daq. Estas librerias son zlib, pcre y dnet. En el caso de quererse activarse más opciones es necesario compilar más librerías.

Compilar e instalar pcre

baldurgate:~ terron$wget http://sourceforge.net/projects/pcre/files/pcre/8.36/pcre-8.36.tar.gz
baldurgate:~ terron$wget http://sourceforge.net/projects/pcre/files/pcre/8.36/pcre-8.36.tar.gz.sig
baldurgate:~ terron$gpg --verify pcre-8.36.tar.gz.sig1
baldurgate:~ terron$tar zxvf pcre-8.36.tar.gz
baldurgate:~ terron$cd pcre-8.36
baldurgate:~ terron$./configure --prefix=/usr/local --enable-utf --enable-jit
baldurgate:~ terron$make
baldurgate:~ terron$make check
baldurgate:~ terron$su
baldurgate:~ terron#make install

Compilar e instalar libdnet:

baldurgate:~ terron$wget https://libdnet.googlecode.com/files/libdnet-1.12.tgz
baldurgate:~ terron$tar zxvf libdnet-1.12.tgz
baldurgate:~ terron$cd libdnet-1.12/
baldurgate:~ terron$./configure --prefix=/usr/local
baldurgate:~ terron$make
baldurgate:~ terron$su
baldurgate:~ terron#make install
baldurgate:~ terron#ldconfig -v

Me encontré con un bug curioso cuando compilé esta librería en Debian que es que no generaba el nombre correctamente, le faltaba el .so. Luego no arrancaba el Snort compilado contra ella. Lo solucioné sencillamente copiando la librería (como root).

baldurgate:~ terron#cd /usr/local/lib
baldurgate:~ terron#cp libdnet.1.0.1 libdnet.1.0.1.so
baldurgate:~ terron#ldconfig -v

Compilar e instalar zlib

baldurgate:~ terron$wget http://zlib.net/zlib-1.2.8.tar.gz
baldurgate:~ terron$tar zxvf zlib-1.2.8.tar.gz
baldurgate:~ terron$cd zlib-1.2.8/
baldurgate:~ terron$./configure --prefix=/usr/local
baldurgate:~ terron$make
baldurgate:~ terron$su
baldurgate:~ terron#make install
baldurgate:~ terron#ldconfig -v

Opcionalmente, también se puede compilar el soporte para lzma. Para ello se va a compilar el paquete xz que nos da soporte para esta librería

baldurgate:~ terron$wget http://tukaani.org/xz/xz-5.2.0.tar.gz
baldurgate:~ terron$wget http://tukaani.org/xz/xz-5.2.0.tar.gz.sig
baldurgate:~ terron$gpg --verify xz-5.2.0.tar.gz.sig1
baldurgate:~ terron$tar zxvf xz-5.2.0.tar.gz
baldurgate:~ terron$cd xz-5.2.0/
baldurgate:~ terron$./configure --prefix=/usr/local
baldurgate:~ terron$make
baldurgate:~ terron$make check
baldurgate:~ terron$su
baldurgate:~ terron#make install
baldurgate:~ terron#ldconfig -v

Compilar e instalar Snort

baldurgate:~ terron$wget https://www.snort.org/downloads/snort/snort-2.9.7.0.tar.gz
baldurgate:~ terron$tar zxvf snort-2.9.7.0.tar.gz
baldurgate:~ terron$cd  cd snort-2.9.7.0/
baldurgate:~ terron$make
baldurgate:~ terron$su
baldurgate:~ terron#make install

Ahora, como superusuario podemos probarlo. Por ejemplo, como un simple sniffer como tcpdump como snort -i interfaz bgp expresion

Notas

  1. Todas las verificaciones de claves gpg suponen que se tienen la clave pública con las cuales se van a verificar en el anillo local. En caso de que no exista se pueden traer con gpg --recv-keys
  2. Esto se hace para rehacer la caché de las librerias dinámicas, en principio Linux. En OS X no hace falta

jueves, enero 22, 2015

caffeinate: Evitar que el MacOS X entre en reposo de manera automática

Hasta la versión 10.7.x Lion de MacOS X era sencillo configurar el sistema para evitar que entrara en reposo cuando estaba conectado a la red eléctrica era sencillo. En las preferencias del sistema, en el panel Economizador había una opción que permitía controlar cuando el ordenador entraba en reposo. Como puede verse en la siguiente captura de pantalla, se configura el mismo para que cuando esté conectado, nunca entre en reposo.

Esta configuración es útil si estás bajando un archivo de Internet o si estás corriendo máquinas virtuales con un producto como VMware Fussión o VirtualBox.Sin embargo, llevaba un tiempo notando en el ordenador que tengo del trabajo, que tiene la versión 10.9 Mavericks del sistema, que éste entraba en reposo, sin más, parando máquinas virtuales que ejecuto bajo vmware fusion. El problema es que la opción que permitía en las antiguas versiones del sistema desconectar estar entrada en reposo había desaparecido

Existe un comando que evita que el sistema entre en reposo de manera automática. Se trata de caffeinate. Con esta orden se puede controlar cual va a ser el comportamiento de la gestión de energía del MacOX. Hay dos maneras de usarla:

  • Indicar al sistema que no entre en reposo durante un tiempo determinado. Por ejemplo, si tenemos el sistema conectado a corriente eléctrica y queremos que no entre en reposo durante 10 minutos
    baldurgate:Documents terron$caffeinate -s -t 10
  • Indicar al sistema que no entre en reposo hasta que no termine de ejecutarse la utilidad que se indica como parámetro en la línea de comandos de caffeinate. Por ejemplo, no quiero que el sistema, se apague hasta que no se ejecute el comando scp contra un servidor remoto.
    baldurgate:Documents terron$caffeinate -s scp large_file.tgz terron@10.10.10.10:.

Aprovechando este comando, lo que suelo hacer si no quiero que la máquina entre en estado de reposo es usar caffeinate con un ping cada minuto al router. Puesto que el comando ping nunca termina - en realidad nos vale cualquier comando que no termine -

baldurgate:Documents terron$caffeinate -s ping -i 60 192.168.1.1

Se puede crear distintos tipos de marcas que impidan en función del subsistema que queramos evitar que entre en reposo. En los ejemplos anteriores como uso la opción -s le indico que el sistema no entre en reposo sólo si está conectado a la corriente eléctrica. Con la opción -i se evita que el sistema entre en reposo con independencia de cual sea su fuente de alimentación, con -d se evita que el sistema ponga en reposo la pantalla y con -m se evita que el sistema ponga en reposo los discos. Por último existe la opción -u para indicar que el usuario está activo. En este caso, activa la patalla si estuviera en reposo y evita que por 5 segundos entre de nuevo en reposo, a menos que se especifique un timeout con -t

miércoles, enero 21, 2015

gmvault: Exportando el correo a otros formatos

Una vez que tenemos una copia de seguridad de nuestro correo, puede que nos interese restaurarlo en otro servicio que no sea gmail. Para ello gmvault tiene una opción que permite exportar el correo en cuatro formatos distintos: mbox, Maildir, dovecot Maildir o offlineimap. Por defecto, usa el formato mbox. El comando encargado de realizar la exportación es gmvault export. Al igual que los otros comandos, existen tres opciones que son comunes, que son -h / --help que muestra la ayuda, -d / --db-dir que especifica el camino hasta la base de datos y --debug / -debug que vuelca el contenido de depuración durante la ejecución del programa.

La opción -t / -type / --type tipo donde tipo es el formato al cual se quiere exportar la base de datos que puede ser maildir, mbox, dovecot o offlineimap. Por defecto usa el formato mbox.

-l / --label etiqueta que permite exportar sólo aquellas etiquetas en las que estemos interesados. Esta opción puede aparecer varias veces para que se filtre usando varias etiquetas.

Si se quiere exportar a formato Maildir todo el correo que tenga la etiqueta importante cuya copia de seguridad está almacenado en el directorio ~/mail.backupy almacenarlo en el directorio /Backup/importante se hace con la siguiente orden

(gmvault)baldurgate:~ terron$gmvault export -d ~/mail.backup -t maildir -l "importante" /Backup/importante

Referencias

sábado, enero 17, 2015

Pillars of Eternity

Supongamos que se consigue reunir a un equipo entre cuyos componentes están alguno de los diseñadores y programadores de juegos de rol como Fallout, Icewind Dale o Baldur's Gate. Se consigue financiación a través de una campaña en Kickstarter la cual recauda más de cuatro millones de dólares. A partir de aquí el estudio Obsidian ha desarrollado un nuevo juego de rol inspirado en esos clásicos nombrados al comienzo del artículo y que saldrá a la venta el próximo mes de Marzo. Se trata de Pillars of Eternity. Aquí tenéis un pequeño avance del mismo

viernes, enero 16, 2015

gmvault: Restaurando una copia de seguridad

Continuando con el tutorial sobre el uso de gmvault, en esta entrada se va a tratar el comando gmvault restore encargado de restaurar una copia de seguridad en una cuenta de correo de gmail. Prácticamente todas las opciones son comunes con el comando gmvault sync encargado de realizar las copias de seguridad, como puede verse consultando la ayuda con gmvault restore -h.

Estas opciones comunes son -h que muestra la ayuda del comando, --debug / -debug que activa la depuración, -d con la que se especifica el path al directorio donde está almacenado la copia de seguridad, -p que hace que el programa pregunte por una contraseña para realizar el login de manera interactiva, -o para activar la autenticación oauth, -2 / --2-legged-oauth para la autenticación que utiliza Google en las cuentas de Apps Bussines o Educación, --server para especificar el servidor imap, --port para especificar el puerto del servidor imap, --emails-only para que sólo se restaure los correos electrónicos, --chats-only para restaurar sólo las conversaciones almacenadas y --resume / --restart para continuar con un proceso de restauración interrumpido.

Sólo hay dos opciones específicas en la opción restore. La primera es -t / --type tipo donde tipo puede ser full o quick. En el primer caso el programa intentará restaurar toda la copia de seguridad en la cuenta de destino elegido, mientras en el segundo caso sólo se restaurará los últimos dos meses de correos almacenados en la copia de seguridad. Por defecto el tipo de restauración es full La segunda opción es -a / --apply-label etiqueta. En este caso se restaurará el correo aplicando la etiqueta etiqueta cuando se suba a los servidores de gmail.

Un ejemplo de uso sería restaurar toda una base de datos, aplicarle la etiqueta backup20150116 en cuenta1@gmail.com de la siguiente manera:

(gmvault)swordcoast:gmvault terron$ gmvault restore -t full -d ~/backup.gmail --apply-label "backup20150116" cuenta1@gmail.com

En el caso de la restauración si veo que está más limitada respecto a la opción de crear la copia de seguridad. Sería estupendo que se pudiesen usar filtros para poder seleccionar que correos se quieren restaurar o tener soporte en el programa para poder conectarse a servidores de imap distinto a los de Google, aunque entiendo cual es el alcance del programa.

Referencias


lunes, enero 12, 2015

Realizar copias de seguridad de gmail: gmvault (III)

gmvault permite consolidar la copia de seguridad de varias cuentas de correos sobre una misma base de datos. Para ello se utiliza la opción -m / --multiple-db-owner. Por ejemplo, sincronizar cuenta1@gmail.com y cuenta2@gmail.com sobre la misma base de datos se haría con el siguiente comando:

(gmvault)swordcoast:~ terron$ gmvault sync -m -d ~/backup.mail cuenta1@gmail.com
(gmvault)swordcoast:~ terron$ gmvault sync -m -d ~/backup.mail cuenta2@gmail.com

Sin la opción -m gmvault vinculará la base de datos sobre la cual se está haciendo la copia de seguridad al correo que se usó cuando se creó por primera vez la misma. Si se intenta usar con otra dirección de correo distinta, gmvault finalizará la ejecución con un error. En el caso de usar la opción -m gmvault no borrará de la base de datos aquellos correos que hayan sido borrados en el servidor de gmail a la hora de realizar la copia de seguridad.

gmvault permite también realizar la copia de seguridad de las conversaciones - siempre que se haya activado la opción de guardarlas - y del correo electrónico de manera independiente. Por defecto, realiza la copia de seguridad de los dos, pero sí sólo se está interesado en hacer una copia de seguridad de los correos y no de los chats se puede hacer con la opción --emails-only, mientras que si sólo se está interesado en realizar una copia de seguridad de los chats se puede hacer con la opción --chats-only.

Para terminar con las opciones de sincronización, gmvault permite almacenar el correo sin comprimir usando la opción --no-compression. Además, si se desea, se puede cifrar el correo con la opción -e / --encrypt. En este último caso es importante señalar que gmvault generará una clave para el cifrado que almacenará dentro del directorio de la copia de seguridad, en el subdirectorio .info en un fichero llamado .storage_key.sec. Hay que tener en cuenta que a la hora de restaurar la copia de seguridad, dicho clave debe de estar en el mismo camino: Por ejemplo si el directorio de copia es /Almacen/backup/gmail, la clave estará en el fichero /Almacen/backup/gmail/.info/.storage_key.sec

Referencias

sábado, enero 03, 2015

Realizar copias de seguridad de gmail: gmvault (II)

En la entrada que servía de introducción al uso de gmvault se comentó el proceso básico de instalación y uso del programa para realizar una copia de seguridad de una cuenta de gmail y su posterior restauración. Sin embargo, el programa es mucho más flexible a la hora de realizar estas operaciones y tiene opciones que permiten un control total de los mensajes sobre los cuales realizamos la copia de seguridad.

gmvault tiene cuatro comandos principales, las cuales pueden verse con ayuda de la opción -h

  • sync, se utiliza para sincronizar los correos desde el servidor. Se baja los correos y crea la estructura de base de datos donde se almacenan los mismos.
  • restore, se utiliza para restaurar una copia de seguridad local en los servidores de gmail.
  • check, compara la copia de seguridad local con el correo almacenado en los servidores de gmail, borrando de la copia local aquellos que no están presentes en los servidores.
  • export, con esta opción se permite exportar la información que tengamos almacenado en una copia de seguridad local a un formato que nos interese.

Los cuatro comandos anteriores tienen todos varias opciones comunes. La primera es -h que muestra las diferentes opciones que tiene cada comando. --debug / -debug activa las opciones de depuración de cada parte del programa. Por último -d dir / --db-dir dir que especifica el trayecto al directorio que se va a usar para almacenar la base de datos, en este caso especificada por dir.

En la anterior entrada comentaba que la autentificación se realizaba a través de xoauth1, pero también se puede usar una contraseña convencional con ayuda de la opción -p. La opción de usar xoauth está por defecto, aunque se puede especificar con -o. Relacionado con esta última está la opción -2 o --2-legged-oauth, que se utiliza en aquellas cuentas de Google Apps Bussines y las cuentas de Google de educación.

Existen dos opciones que permiten especificar la conexión a los servidores de imap, que son --server y --port. Por defecto el valor de estas opciones son imap.gmail.com y 993. Tengo que decir, que no he probado usar este programa contra otro servidor imap, aunque supongo que con ayuda de la opción -p, --server y --port se puede usar para copias de seguridad de otros servidores de correo imap o para poder reconstruir en otro servidor el correo bajado de gmail.

Por ejemplo, la siguiente orden permite sincronizar el correo en el directorio /Almacen/backup/correo de la cuenta correo@gmail.com, usando una contraseña que pedirá el programa, aunque como dice la ayuda, no es recomendable.

(gmvault)swordcoast:gmvault terron$ gmvault sync -p -d /Almacen/backup/correo correo@gmail.com

Aunque no es recomendable, el programa puede almacenar ofuscada la contraseña que pide con la opción -p, para poder usarla posteriormente sin necesidad de volver a pedirla de nuevo, y eso se hace con la ayuda de la opción --store-passwd.

Una opción muy interesante que se tiene a la hora de realizar una copia de seguridad del correo es el tipo de copia que se quiere hacer. El tipo de copia se especifica a través del parámetro -t y puede tomar los valores full,quick o custom. Con full se realiza una copia completa del correo que existe en el servidor, quick sólo realizará la copia de los correos con una antigüedad determinada, por defecto diez días. El tipo custom permite especificar una consulta, ya sea usando el lenguaje de consultas de IMAP (puede verse en la RFC 3501 o la extensiones de Google. También puede usar para especificar el filtro de correos la sintaxis de filtros de gmail. La consulta imap se le pasa a gmvault con ayuda del parámetro -r o --imap-req, mientras que la consulta con filtros de gmail usa el parámetro -g o --gmail-req

Es interesante la potencia que da a la hora de hacer una copia de seguridad la opción custom. Por ejemplo, supongamos que de la cuenta correo@gmail.com queremos realizar una copia de todo el año 2012 y además de los correos que se le han enviado a una determinada persona fulanito@gmail.com Eso puede hacerse con la siguiente orden:

(gmvault)swordcoast:~ terron$ gmvault sync -p -d ~/gmail.backup -t custom --imap-req "Since 1-Jan-2014 Before 1-Jan-2015 TO fulanito@gmail.com" correo@gmail.com

En el apartado 6.4.4 d la RFC 3501 se pueden ver la multitud de filtros que podemos usar en nuestras peticiones tipo custom para obtener la copia de los correos que nos interesan. El control que se permite llega al punto de poder filtrar por cualquier cabecera del mensaje de correo electrónico.

Si se está acostumbrado a usar los filtros de gmail, por ejemplo para hacer una copia de seguridad de todos los correos de fulanito@gmail.com.

gmvault sync -t custom -g "From:fulanito@gmail.com" -p -d ~/gmail.backup correo@gmail.com

Hacer notar que los filtros que se especifican con -g, --gmail-req o -r, --imap-req sólo funcionan si el tipo de sincronización que se configura a través del parámetro -t es custom.

Otra opción interesante es la posibilidad que tiene de empezar a bajar el correo desde el punto donde la ejecución del programa fue interrumpida. Internamente, gmvault guarda el último identificador del correo que se ha bajado. Con ayuda de las opciones --resume o --restart en vez de comenzar a bajarse el correo desde el comienzo, lo hace desde el último identificador que se bajó.

A la hora de realizar una copia de seguridad conviene que no se borre en la base de datos local los correos que han sido borrados en el servidor, ya que por defecto, el comportamiento de gmvault es el de sincronizar la cuenta remota con la copia de seguridad local, siendo la copia local un espejo de la remota. Si este comportamiento no es el deseado se puede desactivar con la opción -c o --check-db usando el valor no. De esta manera se puede realizar copias sin preocuparnos de perder lo que se ha borrado en el servidor.

Referencias

Notas

  1. Esta forma de autentificación dejará de estar soportada por Google en Mayo del 2015, para ser sustituida por XOAUTH2

Atardecer de fuego en la Tierra del Pan

He visto muchos atardeceres, pero reconozco que pocos me sorprendieron tanto como el que fotografié hace hace unas tres semanas en la zamorana localidad de Pajares de la Lampreana. Las fotos están hecho con un iPhone, no pude capturar todos los matices de rojo con los que se despedía el día ni pude buscar un encuadre más adecuado, pero la cálida luz del atardecer reconfortaba después de un día triste.