Snort+BASE+Slackware 10.l Instalacion y configuracion base de un Sistema Detector de Intrusos (IDS) con snort y BASE como consola de analisis para la base de datos de eventos y alertas. Antes de iniciar se recomienda tener a la mano la informacion de la red que se pretende monitorear. En este caso se tiene un servidor Linux Slackware 10.1 que es el que hace de firewall/proxy para una red local. ------------------------------------------------------- Internet: ------------------------------------------------------- Dispositivo eth2 Tipo Ethernet Red --- Broadcast --- Direccion IP --- Netmask Address --- Default Gateway --- MAC Address 00:48:54:53:BC:DB ------------------------------------------------------- ------------------------------------------------------- LAN: ------------------------------------------------------- Dispositivo eth1 Tipo Ethernet Red 192.168.0.0/24 Broadcast 192.168.0.255 Direccion IP 192.168.0.254 Netmask Address 255.255.255.0 MAC Address 00:60:A4:D4:57:72 ------------------------------------------------------- La interfaz de red en la que escuchara snort sera la interfaz conectada a Internet, en este caso eth2. Nota, el paquete de snort que se va a instalar por default esta configurado para usar la interfaz de red eth0, si tu interfaz externa no es eth0 entonces hay que cambiar la variable IFACE para que use la interfaz de tu entorno. En el archivo /etc/rc.d/rc.snort cambiar: Por ejemplo: IFACE=eth2 Claro esto se hara despues de instalar snort. :). Requerimientos previos. - Tener los paquetes requeridos * Apache: Servidor web para la administracion web de BASE. * PHP: Debe de estar mod_php como modulo de apache. * MySQL: Se recomienda leer este documento para la configuracion previa http://tuxjm.net/docs/MySQL-basic4Slack10.1.txt - Revisar que apache y mysql inicien al arranque del sistema. # ls -l /etc/rc.d/rc.{httpd,mysqld} -rw-r--r-- 1 root root 401 2003-03-05 13:28 /etc/rc.d/rc.httpd -rw-r--r-- 1 root root 2260 2005-06-27 16:27 /etc/rc.d/rc.mysqld - Si no activarlos: # chmod +x /etc/rc.d/rc.{httpd,mysqld} - y confirmar: # ls -l /etc/rc.d/rc.{httpd,mysqld} -rwxr-xr-x 1 root root 401 2003-03-05 13:28 /etc/rc.d/rc.httpd* -rwxr-xr-x 1 root root 2260 2005-06-27 16:27 /etc/rc.d/rc.mysqld* Como usaremos BASE vamos a requerir algunos paquetes extras para la generacion de imagenes y graficas, estos paquetes son: El paquete requerido es GD, el cual no es paquete oficial pero si esta en el repositorio de tuxjm.net, este paquete requiere de: - libpng: Paquete oficial de Slackware - libjpeg: Paquete oficial de Slackware - zlib: Paquete oficial de Slackware Despues de instalar los paquetes antes listados instalaremos los siguientes pero antes configuraremos swaret para usar el repositorio de tuxjm.net para de ahi descargar los paquetes que requeriremos. Los programas anteriores son paquetes oficiales de Slackware, los paquetes que siguen son mantenidos por YO :D, se recomienda usar swaret y agregar el repositorio de tuxjm.net a tu swaret.conf - En tu archivo /etc/swaret.conf agrega las lineas: REPOS_ROOT=TuxJMdotNET%http://tuxjm.net/downloads/packages/slackware-10.1 REPOS_ROOT=TuxJMdotNETtEsting%http://tuxjm.net/downloads/packages/testing y DEP_ROOT=http://tuxjm.net/downloads/packages/slackware-10.1 - Y cambiar la linea de la verificacion de la llave GPG con la que los paquetes estan firmados: GPGCHECK=1 La llave publica con la que estan firmados los paquetes es: 0x28BF51B9 La pueden descargar de el servidor de MIT: http://pgp.mit.edu:11371/pks/lookup?op=get&search=0x28BF51B9 o de http://www.tuxjm.net http://tuxjm.net/downloads/packages/slackware-10.1/GPG-KEY-TUXJM # wget http://tuxjm.net/downloads/packages/slackware-10.1/GPG-KEY-TUXJM - Despues importarla con swaret asi: # swaret --gpg -i GPG-KEY-TUXJM swaret 1.6.2-1 => Importing GPG Key... DONE! - Despues de eso ejecutar: # swaret --update swaret 1.6.2-1 [ http://ftp.planetmirror.com/pub/slackware/slackware-10.1 ] ### Fetching CHECKSUMS List File... DONE! FILELIST List File is up-to-date! Packages Descriptions up-to-date! Extra Packages Descriptions up-to-date! Patches Descriptions up-to-date! ChangeLog up-to-date! [ http://tuxjm.net/downloads/packages/slackware-10.1 ] ### Fetching 'TuxJMdotNET' CHECKSUMS List File... DONE! ### Fetching 'TuxJMdotNET' FILELIST List File... DONE! ### Fetching 'TuxJMdotNET' PACKAGES List File for Packages... DONE! => Generating 'TuxJMdotNET' List Files... DONE! [ http://tuxjm.net/downloads/packages/testing ] ### Fetching 'TuxJMdotNETtEsting' CHECKSUMS List File... DONE! ### Fetching 'TuxJMdotNETtEsting' FILELIST List File... DONE! ### Fetching 'TuxJMdotNETtEsting' PACKAGES List File for Packages... DONE! => 'TuxJMdotNETtEsting'... DONE! => Generating 'TuxJMdotNETtEsting' List Files... DONE! - Para actualizar la lista de paquetes de los repositorios. Si bajo las listas de paquetes satisfactoriamente como se mostro arriba ya podras instalar paquetes de ese repositorio. - Instalar GD: # swaret --install gd - Instalar Snort: # swaret --install snort - Asegurarse que snort inicie al arranque de el sistema, para esto hay que asegurarnos que el script /etc/rc.d/rc.snort tenga permisos de ejecucion: # ls -l /etc/rc.d/rc.snort Si no los tiene hay que ponerselos: # chmod +x /etc/rc.d/rc.snort Y ahora agregar esto al archivo /etc/rc.d/rc.local # Start the snort daemon: if [ -x /etc/rc.d/rc.snort ]; then . /etc/rc.d/rc.snort start fi - Configurar /etc/snort/snort.conf para HOME_NET Como se menciono antes la red interna que esta atras de el firewall es: 192.168.0.0/24, entonces seria: var HOME_NET 192.168.0.0/24 - Crear y configurar bases de datos: Nota aqui uso un usuario diferente para administrar el servidor MySQL, como lo recomiendo en el documento de arriba. en este caso seria el usuario "mydbadmin" entonces si tu usas otro usuario debes sustituir donde dice "mydbadmin" por tu usuario administrador de MySQL, que podria ser "root". $ mysql -u mydbadmin -p mysql> create database snort; >Query OK, 1 row affected (0.01 sec) mysql> grant INSERT,SELECT on snort.* to snort@localhost; >Query OK, 0 rows affected (0.02 sec) mysql> SET PASSWORD FOR snort@localhost=PASSWORD('CONTRASÑADBSNORT'); >Query OK, 0 rows affected (0.25 sec) mysql> grant CREATE, INSERT, SELECT, DELETE, UPDATE on snort.* to snort@localhost; >Query OK, 0 rows affected (0.02 sec) mysql> grant CREATE, INSERT, SELECT, DELETE, UPDATE on snort.* to snort; >Query OK, 0 rows affected (0.02 sec) mysql> exit >Bye - Crear y llenar tablas: # mysql -u mydbadmin -p < /usr/doc/snort-2.3.3/schemas/create_mysql snort - Agregar informacion de la db a /etc/snort/snort.conf output database: alert, mysql, user=snort password=CONTRASÑADBSNORT dbname=snort host=localhost *NOTA= todo en una sola linea. Con esto snort registrara la actividad y alertas a la base de datos "snort". Antes de poder iniciar el servicio de snort, se recomienda hacer algunos cambios de permisos a el archivo de configuracion /etc/snort/snort.conf, estos cambios de permisos son para que solo el usuario root y snort puedan leer y escribir en dicho archivo, esto es porque dicho archivo contiene informacion sensible, como la contraseña para conectarse a la base de datos de snort, entocnes haremos: # chown root:snort /etc/snort/snort.conf # chmod 640 /etc/snort/snort.conf Y comprobar que los permisos sean los correctos: # ls -l /etc/snort/snort.conf -rw-r----- 1 root snort 27494 2005-08-07 12:30 /etc/snort/snort.conf - Instalar Oinkmaster. Antes es recomedable actualizar las reglas de snort, para esto primero hay que registrarse en http://www.snort.org y hacer una peticion de un codigo "oinkcode". - Instalar oinkmaster # swaret --install oinkmaster Ahora debes de editar el archivo /etc/oinkmaster.conf para que use tu "oinkcode" que te asignaron: # vim /etc/oinkmaster.conf y agregar una linea como: url = http://www.snort.org/pub-bin/oinkmaster.cgi//snortrules-snapshot-2.3. tar.gz En lugar de poner el codigo que se te asigno. Ahora hay que correr oinkmaster para que actualize las reglas de snort, y las guarde en /etc/snort/rules/ # oinkmaster.pl -i -o /etc/snort/rules/ - Si no marca algun error al actualizar las reglas entonces es hora de iniciar snort: # /etc/rc.d/rc.snort start y ver los logs para ver que no haya marcado algun error. # tail -f /var/log/messages Si todo fue bien, deberias de ver un mensaje como este: Aug 8 15:54:10 proxy snort: Snort initialization completed successfully (pid=4889) Paso opcional para ver que snort este registrando eventos en la base de datos snort: # echo "SELECT count(*) FROM event" | mysql snort -u mydbadmin -p Enter password: count(*) 0 Instalacion y configuracion de BASE y sus requerimientos. - instalar adodb # swaret --install adodb - Instalar jpgraph # swaret --install jpgraph - Instalar y configurar BASE: # swaret --install base Este paquete require algunos modulos de PEAR, que el mismo script doinst los baja de internet y los instala: para mas informacion de como lo hace ver: http://tuxjm.net/downloads/source/testing/base/doinst.sh - Ahora configuraremos algunos permisos de el archivo de configuracion de BASE /etc/base/base_conf.php esto es porque dicho archivo contiene nformacion sensible, como la contraseña para conectarse a la base de datos de snort, entocnes haremos: # chown root:nobody /etc/base/base_conf.php # chmod 640 /etc/base/base_conf.php Y comprobamos los permisos: # ls -l /etc/base/base_conf.php -rw-r----- 1 root nobody 11650 2005-08-12 16:04 /etc/base/base_conf.php - Editar el archivo de configuracion de BASE: # vim /etc/base/base_conf.php - Cambiar las opciones que se refieren a el acceso a la base de datos: $alert_dbname = "snort_log"; $alert_host = "localhost"; $alert_port = ""; $alert_user = "snort"; $alert_password = "mypassword"; /* Archive DB connection parameters */ $archive_exists = 0; # Set this to 1 if you have an archive DB $archive_dbname = "snort_archive"; $archive_host = "localhost"; $archive_port = ""; $archive_user = "snort"; $archive_password = "mypassword"; - Cambiarlo por: $alert_dbname = "snort"; $alert_host = "localhost"; $alert_port = ""; $alert_user = "snort"; $alert_password = "CONTRASÑADBSNORT"; /* Archive DB connection parameters */ $archive_dbname = "snort"; $archive_host = "localhost"; $archive_port = ""; $archive_user = "snort"; $archive_password = "CONTRASÑADBSNORT"; Y ahora hay que hacer una configuracion a apache para restringir el acceso a el directorio de BASE: Esta configuracion se creara en el archivo /etc/apache/acid.conf # vim /etc/apache/base.conf Para que apache cargue esta configuracion agregaremos al final de el archivo /etc/apache/httpd.conf estas lineas: # ==> BASE configuration settings <== # Include /etc/apache/base.conf - Y reiniciar apache: # /etc/rc.d/rc.httpd restart Si no reporta ningun error puedes entrar a la configuracion asi: http://ip.server/base/ Y veras un mensaje como este: The underlying database snort@localhost appears to be incomplete/invalid. The database version is valid, but the BASE DB structure (table: acid_ag)is not present. Use the Setup page to configure and optimize the DB. Entonces hay que dar click en el link que dice "Setup page" Y saldra la linea que dice: Operation Description Status BASE tables Adds tables to extend the Snort DB to support the BASE functionality Search Indexes (Optional) Adds indexes to the Snort DB to optimize the speed of the queries DONE - Dar click en el boton que dice "Create BASE AG" Y en la pantalla siguiente veras un mensaje similar a este: Successfully created 'acid_ag' Successfully created 'acid_ag_alert' Successfully created 'acid_ip_cache' Successfully created 'acid_event' Successfully created 'base_roles' Successfully created 'base_users' Operation Description Status BASE tables Adds tables to extend the Snort DB to support the BASE functionality DONE Search Indexes (Optional) Adds indexes to the Snort DB to optimize the speed of the queries DONE Y la linea: Goto the Main page to use the application. - y dar click en "Main page" Y listo ya deberas de ver la consola de BASE. - Cambiar el idioma de la interfaz web de BASE; En el archivo de configuracion /etc/base/base_conf.php Cambiar: $BASE_Language = "english"; por: $BASE_Language = "spanish"; Con esto si entras nuevamente a la pagina de BASE ya estara en el idioma Español. - Configuracion de BASE para autenticacion de usuarios. - Crear un nuevo rol (Papel): Hacer click en el link de "Administracion" Dar click en el link que dice "Crear Papel" y poner por ejemplo: ID de Papel: 1 Nombre de Papel: Monitoreo Descripcion: Papel para monitorear Y dar click en el boton de Submit Query. Y si todo fue bien nos mostrara un mensaje que dice: Papel añadido con exito - Agregar un nuevo usuario para BASE: Hacer click en "Crear Usuario" y poner por ejemplo: Usuario: usuariomonitor Nombre Completo: Usuario Monitor Clave: contraseña-de-usuario-monitor Papel: Monitoreo Y dar click en el boton de Submit Query. Y si todo fue bien nos mostrara un mensaje que dice: Añadido con éxito Ahora que ya agregamos un Papel (rol) y un usuario para ese Papel: Tendremos que cambiar algo en la configuracion de /etc/base/base_conf.php Para poder autenticarnos con el usuario que acabamos de crear. # vim /etc/base/base_conf.php Cambiar: $Use_Auth_System = 0; Por: $Use_Auth_System = 1; Y volver a entrar a la pagina de BASE, por ejemplo http://localhost/acid/ Y entonces veremos algo asi: Usuario: Clave: Submit Query Reset Entonces ingresaremos con el usuario que acabamos de crear y la Clave que le asignamos. Pudes probar unos scaneos con nmap o nessus para que genere eventos de intentos de intrusion, y ver que los reporte. Esto es una configuracion base y funcional, si quieres saber mas opciones de configuracion se recomienda dar un vistaso a la lista de correo de snort, o los foros, y tambien podrias cambiar alguna informacion en el archivo de configuracion de BASE /etc/base/base_conf.php, pero primero ve que hace cada cosa y por supuesto primero haz un respaldo de los archivos que modifiques. FIN. Autor: Jorge Armando Medina. email: jmedina@tuxjm.net Sitio Web: http://www.tuxjm.net Visita la pagina del Grupo de Usuarios Linux Tijuana en: http://www.linuxtj.org