Documentos de Académico
Documentos de Profesional
Documentos de Cultura
ArCERT
Coordinación de Emergencias en Redes Teleinformáticas
www.arcert.gov.ar
versión 2.0
16 de marzo de 2006
Resumen
En este documento describiremos como mejorar la seguridad en una instalación de GNU/Linux. El temario
incluye configuración adecuada del BIOS, particionamiento, instalación minima, deshabilitación de servicios no
utilizados, desinstalación de software no utilizado, revisión de logs, detección de intrusiones, firewall de host,
actualizaciones de seguridad, sincronización de hora, etc. Utilizaremos como base la distribución Debian, versión
Sarge (o stable). Muchos de los conceptos vertidos en esta guı́a podrán ser aplicados a cualquier distribución de
Linux, o sistema operativo tipo Unix (*BSD, Solaris, etc.).
En ningún caso podrá responsabilizarse a ArCERT o a la ONTI en forma institucional, o a sus agentes a tı́tulo
individual y/o personal, de ningún daño puntual ni general, directo o indirecto, consecuencial o incidental, o de
cualesquiera otra categorı́as, derivado de la ejecución de las actividades planteadas para este tutorial.
Reforzando la instalación de Debian GNU/Linux
Índice
1. Introducción 3
2. Pre-Instalación 3
3. Instalación 3
3.1. Particiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
3.2. El usuario normal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
4. Boot Loader 6
5. Limpieza 8
5.1. Servicios de red innecesarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
5.2. Otros paquetes no utilizados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
5.3. Módulos de Kernel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
6. Deshabilitando el CTRL-ALT-Del 10
7. Opciones de Montaje 11
8. Usuarios y permisos 11
8.1. Usuarios con shell interactı́vo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
8.2. El bit SUID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
8.3. Permisos de tareas planificadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
8.4. Sudo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
13. Firewall 16
15. Mantenimiento 17
15.1. Sincronización horaria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
15.2. Back-up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
15.3. Auditorı́as regulares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
15.4. Chequeos de integridad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
15.5. Manejo de bitácoras (logs) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
18. CheckList 21
1. Introducción
¿Por qué necesitamos reforzar la instalación de un sistema operativo? Salvo raras excepciones1 , los sistemas
operativos en general no dedican un gran esfuerzo en la seguridad al momento de la instalación. ¿Y cuál es el
resultado de este hecho? Con el crecimiento que ha tenido Internet en los últimos años, la ventana de tiempo entre
que un sistema operativo recién instalado (sin parches) se conecta a Internet, y que el mismo sufre una intrusión,
ha bajado de dı́as a mediados de los 90’, a horas en el 2000, y minutos en la actualidad. En este documento nos
ocuparemos de mejorar la seguridad en una instalación de GNU/Linux. Utilizaremos como base la distribución
Debian, versión Sarge (o stable), por ser una de las más usadas en ambientes de servidor, y porque la consideramos
como una de las más adecuadas para esa misma función. Muchos de los conceptos vertidos en esta guı́a podrán ser
aplicados a cualquier distribución de Linux, o sistema operativo tipo Unix (*BSD, Solaris, etc.). Sin embargo, se
deberán tomar los recaudos necesarios para que dicha adaptación no deje puertas abiertas debido a las diferencias
entre las distintas distribuciones.
2. Pre-Instalación
Comenzaremos por considerar dos temas esenciales. Se dice que quien tiene acceso fı́sico a un equipo tendrá ac-
ceso total al mismo. Si bien ésta afirmación no siempre es exacta, y algunas de las tareas que realizaremos tienen
por objetivo contrarrestarla, es absolutamente recomendable que el acceso fı́sico al servidor y su consola esté res-
tringido sólo al personal autorizado. Como segundo recaudo, el equipo no deberá conectarse a la red hasta haber
finalizado con las tareas de aseguramiento. En caso de ser necesario algún tipo de conexión (como ser que el equipo
debe iniciarse mediante netboot), estas tareas deberán realizarse en una red cerrada, asegurada, y preferentemente
aislada. Antes de realizar la instalación del sistema operativo elegido, hay algunas tareas que podemos realizar.
En particular, mediante la configuración del BIOS del equipo en cuestión, podremos restringir algunos puntos de
entrada que no sean necesarios para la operatoria normal del sistema. Entre otros, podemos nombrar los siguientes.
Puertos paralelos
Puertos seriales
Puertos USB
Disqueteras
Lectoras de CD/DVD
En la Figura 1 podemos observar un ejemplo de cómo se deshabilitan algunos puertos innecesarios en el BIOS.
Otra tarea importante consiste en configurar el orden de selección de dispositivos para el boot del equipo. Para
poder realizar la instalación, deberemos seleccionar el medio disponible para la misma, normalmente CD-ROM,
pero una vez finalizada la misma, deberemos seleccionar únicamente el disco de arranque del sistema. En caso de
no ser posible, como en el ejemplo de la Figura 2, deberemos ordenar los dispositivos para que el elegido sea el
primero de la lista. Inclusive podemos deshabilitar todos los dispositivos de almacenamiento menos el dispositivo
de boot. Por ejemplo, una vez instalado el sistema operativo, se puede deshabilitar el CD-ROM del BIOS, ya que
el mismo será detectado de todas maneras por el sistema operativo.
Por último, deberemos configurar una contraseña para restringir la realización de cambios en la configuración
del BIOS.
3. Instalación
Para realizar un buen proceso de aseguramiento de un servidor GNU/Linux Debian, incluiremos su instalación.
Durante el proceso de instalación, cuya descripción completa puede encontrarse en la bibliografı́a, deberemos tener
en cuenta algunos detalles que nos permitirán asegurar un resultado exitoso.
1 Por ejemplo, OpenBSD. http://www.openbsd.org
3.1. Particiones
En primer lugar, deberemos diseñar cuidadosamente el sistema de archivos. No existe una regla general, pero
podemos seguir algunos consejos para mejorar tanto la seguridad como el rendimiento. Algunos de estos consejos
consisten en:
Si el sistema va a alojar múltiples usuarios interactivos, /home deberı́a tener su propia partición.
En equipos que brinden servicios crı́ticos, /var/log podrı́a llenarse y perjudicar el buen funcionamiento
de los mismos, por lo que podrı́a separarse en otra partición .
Por esta misma razón, /tmp utilizará una partición separada.
En general, /var (pensado para todas las operaciones más dinámicas) y /usr (donde normalmente se
alojan los archivos menos susceptibles a cambios) tendrán su propio espacio.
Las particiones pueden montarse con ciertas opciones que restringen su funcionalidad (ver Figura 3). Las
restricciones más interesantes que pueden aplicarse en el momento de la instalación son (hablaremos más
tarde sobre esto en ’Opciones de Montaje’):
• nodev: No permite la creación de dispositivos (devices).
• nosuid: No permite la utilización de los bits suid y sgid.
• noexec: No permite la ejecución de archivos
En general, podemos definir que:
En ninguna partición, salvo / (o donde resida /dev), se necesitan dispositivos.
/, /usr y /var, en general, son las únicas particiones desde las cuales se deberı́a poder ejecutar archivos.
Además, sólo /usr y /var pueden necesitar el uso de suid. Estas restricciones pueden y suelen variar
según las diferentes distribuciones de GNU/Linux.
En algunos casos puede ser recomendable montar /usr como ro (sólo lectura), pero habilitar esta opción
durante la instalación hará que ésta sea imposible de realizarse, ya que habrá que escribir en dicha partición.
Evitar la ejecución de binarios en /tmp con la opción noexec es una buena idea. Pero hay que tener en
cuenta que, en algunos casos, Debian ejecutará ahı́ algunas acciones cuando instala paquetes.
En nuestro ejemplo usaremos el esquema de la Figura 4, que es la distribución propuesta por Debian para
Multi-user workstation (estación de trabajo multiusuario).
4. Boot Loader
Vamos a asegurar el boot loader, en nuestro caso el grub, que es el programa encargado de cargar el kernel en
memoria y ejecutarlo. Para evitar que alguien con acceso fı́sico a la consola de nuestro equipo (situación que deber
ser evitada a toda costa) pueda modificar los parámetros de inicialización del kernel, protegeremos el boot loader
contra modificaciones.
Primero, generaremos un hash del pasword que utilizaremos:
debian:˜# grub-md5-crypt
Password:
Retype password:
$1$1nxTK1$0kdd0C8txj7nDPx5SnVx./
Una vez obtenido el hash, procederemos a insertarlo en la siguiente lı́nea en el archivo /boot/grub/menu.lst:
En este mismo archivo, editaremos el valor de la variable lockalternative, para que el password que
acabamos de crear no sólo se aplique a las modificaciones explı́citas de los parámetros de inicio del kernel, sino
que además sea necesaria para iniciar el sistema en modo single user, también conocido como Recovery Mode.
Por otro lado, hay que modificar los permisos de /boot/grub/menu.lst para evitar que los usuarios no
privilegiados accedan al hash:
Para completar este proceso, deberemos ejecutar el comando update-grub y ası́ hacer efectivo el cambio
del lockalternative:
debian:˜# update-grub
Searching for GRUB installation directory ... found: /boot/grub .
Testing for an existing GRUB menu.list file... found: /boot/grub/menu.lst .
Found kernel: /boot/vmlinuz-2.6.8-2-686
Updating /boot/grub/menu.lst ... done
5. Limpieza
Para continuar con la configuración del equipo vamos a minimizar la instalación, desintalando paquetes que no
se utilicen, cerrando servicios de red, y optimizando la carga de módulos del kernel.
Como podemos observar, los servicios time, discard y daytime se encuentran habilitados y levantados vı́a inetd.
Para deshabilitarlos, procederemos a editar el archivo /etc/inetd.conf, y comentar las lı́neas correspondientes. Los
cambios se producirán al reiniciar el servicio.
Por otra parte existen servicios no levantados por inetd que seguramente podremos eliminar (aunque esté escu-
chando sólo en localhost), como el caso de exim4 si no necesitamos un MTA2 :
Esto borrará la configuración y los paquetes relacionados con exim4, ası́ como sus dependencias reversas.
Por último, bootpc corresponde al cliente DHCP. No se aconseja que los servidores obtengan su configuración
de red vı́a DHCP. Puede borrarse eliminando el paquete dhcp-client.
Ası́ se debe proceder con cada uno de los servicios de red que tenga el sistema y que no sean necesarios.
dpkg -l | more
Esto mostrará una larga lista (paginada con more) con el nombre del paquete, su versión y una breve descrip-
ción, tal como se ve en la Figura 6.
Como verán, los paquetes son muchos y muy variados. Deberemos utilizar nuestra experiencia e imaginación
para detectar los paquetes innecesarios de esta larga lista, siguiendo algunas reglas de sentido común. Por ejemplo:
Si sólo vamos a utilizar ethernet, todos los paquetes que tengan que ver con PPP3 no serán necesarios (ppp,
pppconfig, pppoe, pppoeconf).
Los paquetes para desarrollo como los compiladores o intérpretes (perl, gcc) y las bibliotecas terminadas
en -dev sólo son utilizados en casos particulares, por lo que pueden borrarse.
La automatización de detección de hardware nomalmente no es necesaria, y hasta puede ser perjudicial
(hotplug, discover1-data). En caso de desinstalarlos, tendremos que prestar particular atención a la
subsección ’Módulos de Kernel’.
Los paquetes relacionados con dispositivos que no tenemos o no utilizamos son prescindibles (usbutils,
eject, setserial, fdutils)
Los programas que no utilizamos pueden borrarse (aptitude, info, ipchains, mailx, nano, telnet,
makedev)
Las bibliotecas usadas por los paquetes que borramos tampoco son necesarias (libdiscover1,libusb).
Para identificar estas bibliotecas nos puede ser de utilidad un paquete llamado deborphan4 .
Un punto importante es evitar borrar paquetes de tipo essential. Estos paquetes son, por lo general, necesarios para
el correcto funcionamiento del sistema operativo y requieren una confirmación particular.
Puede ocurrir que encontremos archivos de los que desconocemos el paquete que los instaló. Para esto puede
ser útil el comando dpkg -S. Por ejemplo, el archivo /usr/bin/e2pall pertenece al paquete tetex-bin:
debian:˜# dpkg -S /usr/bin/e2pall
tetex-bin: /usr/bin/e2pall
Una mención especial merece el paquete gcc-3.3-base, que sólo contiene documentación descriptiva y se
incluye únicamente por razones de dependencias de paquetes, por lo que puede ser conservado sin mayores pro-
blemas.
El siguiente paso será desinstalar los paquetes seleccionados. Para ello, utilizaremos el siguiente comando:
debian:˜# apt-get remove --purge aptitude dhcp-client [...]
Ası́ se eliminará tanto los paquetes como sus archivos de configuración, esto último gracias al modificador
--purge. Estemos atentos a la lista de paquetes que realmente se van a remover ya que también se borran
aquellas dependencias reversas de los paquetes definidos.
De esta manera, reducimos la cantidad de programas instalados en nuestro sistema, lo que se traduce en una
menor probabilidad de vernos afectados por algún bug.
4
Para cerciorarnos de que se levanta todo lo necesario al arrancar, podemos reiniciar el sistema y comprobarlo.
Hay que tener en cuenta que existen muchas aplicaciones que levantan módulos por demanda. Por ejemplo
ipv6, que es el soporte para IP versión 6, puede ser levantado por demonios que intenten escuchar en una intefaz
IPv6. Este es el caso de SSH que por defecto levantará con este soporte. Para evitar esto puede configurar estas
aplicaciones para que sólo utilizen IPv4, o bien, eliminar la posibilidad que el módulo ipv6 se cargue. Ésto último
se consigue realizando la siguente modificación en /etc/modprobe.d/aliases:
6. Deshabilitando el CTRL-ALT-Del
Este método de reinicializar el equipo siempre ha sido útil y atractivo en GNU/Linux, pero posiblemente no
queremos que cualquiera con acceso a la consola puede utilizarlo. Vamos a deshabilitarlo comentando la lı́nea
correspondiente en el archivo /etc/inittab:
Sólo resta avisarle al proceso init que debe releer el archivo de configuración:
debian:˜# telinit q
O su equivalente,
debian:˜# kill -1 1
7. Opciones de Montaje
Las particiones realizadas en la seccion ’Instalación’ nos permiten montar los sistemas de archivos con dis-
tintas opciones, algunas de las cuales vimos en aquel apartado. La lista de particiones a montar se encuentra en
/etc/fstab. Si seleccionamos las opciones de nodev, nosuid y noexec durante la instalación el archivo que-
dará algo ası́:
Si no utilizaremos el CD-ROM o la disquetera, podemos eliminar las últimas dos lı́neas de este archivo. Pero si
decidimos conservar alguna de las dos, al menos deberemos eliminar la opción user, que cumple la función de
permitir a un usuario no privilegiado montar y desmontar dicho dispositivo.
Otras opciones útiles pueden ser (para más información, man mount):
defaults: Son las opciones por defecto, es decir: rw, suid, dev, exec, auto, nouser, y async.
8. Usuarios y permisos
8.1. Usuarios con shell interactı́vo
Comenzaremos por revisar los usuarios creados durante el proceso de instalación. Para esto tenemos que ana-
lizar el archivo /etc/passwd, como se ve en la Figura 8.
Como podemos observar, existen varios usuarios, todos considerados del sistema (en el caso de Debian, se
caracterizan por tener un user id menor que 1000), que poseen como shell a /bin/sh, siendo esto totalmente
innecesario dado que ninguno de estos usuarios será utilizado de manera interactiva. Utilizaremos el siguiente
comando para modificar esta situación:
Y ası́ para cada uno de los usuarios no interactivos; en este caso root y operador son la obvia excepción. El
comando /bin/false siempre devuelve error y evita el login.
5 Input/Output (operaciones de Entrada/Salida)
De toda la lista de archivos con este particular permiso sólo son totalmente necesarios algunos de ellos:
exim4: para el correcto funcionamiento del e-mail interno, si es que decidimos no borrarlo del sistema.
unix chkpwd: se utiliza para que los programas puedan verificar el password ingresado por el usuario, sin la
necesidad de tener cada uno el bit suid.
Para el resto de los programas no es extrictamente necesario este permiso, salvo en casos particulares en los que
habrá que evaluar los beneficios y desventajas (por ejemplo, el uso de crontabs por parte de los usuarios). Para el
resto:
Figura 9: Archivos con el bit suid y guid (find / -path /proc -prune -o -type f -perm +6000
-ls)
root
Si este archivo existe, sólo los que estén listado en él podrán usar cron.
El comando at, utilizado para la ejecución diferida de tareas, es un caso muy similar al de cron. El archivo
/etc/at.allow se utiliza limitar su uso y su funcionamiento es identico a /etc/cron.allow.
8.4. Sudo
Una herramienta que permite tener un control mucho más estricto sobre las tareas que realizan los usuarios que
requieran privilegios administrativos es sudo. Con esta herramienta podremos configurar, entre otras cosas:
Qué usuarios pueden elevar sus privilegios (o simplemente ejecutar acciones como otros usuarios).
Restricciones horarias.
Sudo es una herramienta versátil y bien documentada. Se puede encontrar más ejemplos y detallada información
en la página principal de sudo6 .
# before they can use ‘su’. You can also add "group=foo" to
# to the end of this line if you want to use a group other
# than the default "root".
# (Replaces the ‘SU_WHEEL_ONLY’ option from login.defs)
auth required pam_wheel.so
Ahora sólo los usuarios que pertenezcan al grupo wheel podrán utilizar el comando su. No debemos olvidarnos
de crear el grupo y agregar los usuarios necesarios al mismo:
debian:˜# addgroup --system wheel
Adding group ‘wheel’ (104)...
Hecho.
debian:˜# usermod -G wheel operador
PermitRootLogin no
Recordemos que hay que reiniciar el servicio de SSH para que esto tenga efecto.
De esta manera, para acceder remotamente al equipo deberemos utilizar algún otro usuario.
Durante su instalación, deberemos responder algunas preguntas. La primera es sobre la versión de SSH a ejecutar.
Elegimos sólo permitir la versión 2 del protocolo, ya que las versiones anteriores tienen importantes defectos de
diseño que pueden comprometer la seguridad del equipo. La siguiente pregunta nos consulta sobre el bit suid en
el programa ssh-keysign. Por un lado, no utilizaremos el método de autenticación basada en host, y por otro,
intentamos evitar el uso de este bit, por lo que elegimos la opción no. La última pregunta es sobre si queremos
iniciar el servidor de SSH.
Será conveniente restringir desde dónde se puede acceder a dicho protocolo. Más allá del uso de un firewall lo
haremos vı́a tcpwrapper, soportado por OpenSSH. Usaremos la polı́tica todo denegado excepto lo expresamente
permitido. En el archivo /etc/hosts.deny:
7 Secure SHell: Protocolo que brinda, entre otras cosas, acceso remoto seguro a un shell
sshd : ALL
Y en /etc/hosts.allow, las IPs o redes de las cuales permitimos el acceso:
sshd : 192.168.31.0/24
Este método también puede utilizarse con cualquier servicio que utilice la librerı́a libwrap (hoy incluida en la libC),
o mediante la utilización del programa tcpd.
La interoperabilidad con otras aplicaciones semejantes son puntos importantes para no quedar atado a una
aplicación. Va a ser necesario que maneje formatos y protocolos internos que sean estandares o de fácil
migración a otros formatos.
Una vez seleccionada la aplicación es recomendable seguirle los pasos de cerca en cuanto a sus nuevas versio-
nes y bugs. Si la aplicación es un paquete Debian puede subscribirse a PTS10 . También es buena idea subscribirse
a la lista de los desarrolladores si ésta fuera pública.
13. Firewall
El servidor deberá estar operativo en una zona particular de la red, comúnmente llamada DMZ11 cuando se
trate de servicios externos, que será la única zona que recibirá conexiones desde afuera. Para restringir el acceso
suele usarse un firewall.
Pero además, cada host de nuestra red deberá tener un firewall propio, muchas veces llamado firewall de host.
Como en todas las instalaciones de GNU/Linux, la herramienta utilizada para filtrar los paquetes de red en el host
será iptables.
Para facilitar la configuración, una opción es utilizar la herramienta shorewall, que si bien los ejemplos están
pensados para un firewall en el sentido clásico (un gateway con filtrado de paquetes en modo stateful), es perfec-
tamente adaptable al uso como firewall de host. También puede usarse fwbuilder, que es una herramienta gráfica
para generar las reglas de iptables.
Algunas recomendaciones a la hora de configurar el firewall:
Permitir conexiones de entrada sólo a los puertos que tengan servicios publicos y que provengan de clientes
en las redes que correspondan (por ejemplo, restringir el acceso desde otras máquinas de la DMZ, si el
servicio es para Internet).
Permitir la salida a Internet sólo a los sitios necesarios para la actualización del equipo y los servicios que
ası́ lo requieran, como conexiones al puerto smtp desde los servidores de correo electrónico. En algunos
casos se puede poner un servidor de actualizaciones interno (con apt-proxy, por ejemplo), de manera que
sólo éste requiera salida.
Permitir la salida a otras máquinas de la DMZ sólo cuando sea para un servicio interno particular (por
ejemplo, a una base de datos).
Una vez agregadas estas referencias, debemos actualizar la base de datos local de paquetes (como en la Figura 10)
con el comando:
Posiblemente sea de utilidad que el administrador se subscriba a la lista de DSA12 , para estar al tanto de las
actualizaciones en materia de seguridad.
10 Package Tracking System (Sistema de Seguimiento de Paquetes) http://www.debian.org/doc/manuals/developers-reference/ch-
resources.en.html#s-pkg-tracking-system
11 DeMilitarized zone (zona desmilitarizada)
12 Debian Security Announce (Anuncios de Seguridad en Debian) http://lists.debian.org/debian-security-announce/
Figura 10: Actualización de la base de datos local para paquetes (apt-get update)
Con este último paso podemos considerar que hemos finalizado la instalación del sistema operativo, y estamos
listos para comenzar a utilizarlo. El siguiente paso consistirá en configurar y asegurar los servicios que este
equipo deba brindar (Web, Mail, etc.), pero eso lo dejamos para otros documentos. Luego de configurados los
servicios, será el momento de realizar un back-up (véase ’Back-up)’ completo del sistema.
15. Mantenimiento
El sistema que acabamos de instalar no está terminado, ya que evolucionará con el tiempo. Seguramente se
le incorporará, quitará o modificará algún servicio o configuración. Por este motivo, habrá que tener en cuenta
los conceptos de esta guı́a durante toda la vida del servidor. En particular, no debemos olvidarnos de realizar las
actualizaciones de seguridad como se describe en la sección ’Actualizaciones de seguridad’.
Además habrá que hacer el seguimiento del servidor y tener una actitud proactiva con respecto a su seguridad.
De ello hablaremos en esta sección.
ntpd, servidor NTP para Unix-like. OpenNTPD, puede ser una alternativa de configuración más sencilla.
15.2. Back-up
Dentro de las tareas de mantenimiento, se encuentra la realización de back-ups periódicos del equipo. La
discusión sobre los diferentes métodos existentes puede ser muy amplia. Sin embargo presentamos algunas reco-
mendaciones para su ejecución:
Para realizar back-up de muchos equipos de manera combinada, será necesario contar con un buen gestor
de archivos de respaldo. Amanda14 es una buena opción libre, compatible con muchos sistemas Unix-like
(SCO, FreeBSD, IRIX, AIX, HP-UX, GNU/Linux), pero requiere Samba para trabajar con Windows. Otra
herramienta muy usada, que sı́ tiene soporte para Windows, es bacula15 .
La practicidad de las cintas nunca será superada por los medios ópticos (a menos que estos crezcan en
capacidad más de lo que lo han hecho en los últimos años), o poseamos un intercambiador de CDs de gran
capacidad.
Es recomendable realizar backups full de manera periódica, e intercalarlos con back-ups parciales.
Para que un back-up sea útil, es indispensable que pueda ser recuperado. Y para estar seguros de ésto, es
necesario que la polı́tica de back-up incluya simulaciones periódicas donde restauremos nuestros sistemas
desde las cintas.
Considerar la posibilidad de guardar copias de los back-ups en sitios remotos, para contingencias mayores.
Tener en cuenta que la sensibilidad de la información contenida en una cinta de back-up es igual a la infor-
mación más sensible que haya sido almacenada, por lo que habrá que tomar los recaudos del caso.
Los métodos más comunes de back-up en GNU/Linux son utilizar tar, cpio, o dump. Si no utilizamos un
gestor de back-up, dump es una opción muy interesante por su manejo de niveles para copias incrementales
y su integración con el sistema de archivos ext2/ext3. Como desventajas, tiene su lentitud, y que no es
compatible con todos los filesystems existentes.
La única forma de obtener una imagen exacta del disco, con la certeza de que no contendrá ningún tipo de
inconsistencia, ni a nivel lógico del disco, ni a nivel transaccional de las aplicaciones, es realizar back-ups
offline.
Tripwire, prácticamente la más antigua de todas (sólo de uso libre para Linux, y bajo ciertas condiciones de
licenciamiento)
Integrit, es un clon libre de tripwire.
Debsums, que verifica la integridad de los archivos en base al hash contenido en el paquete Debian que lo
provee. No todos los paquetes tienen los hashes necesarios, por lo que la herramienta no resulta práctica.
En general estas herramientas proveen varias opciones de verificación, incluyendo hashes con uno o más algoritmos
criptográficos, verificación de MAC time (Modificación, Acceso y Cambio), permisos, tamaño, etc. Todas proveen
una configuración de ejemplo (en el caso de AIDE, /etc/aide/aide.conf) que servirá de punto de partida
para una configuración adecuada al sistema que acabamos de instalar.
Algunas de las cosas que habrá que modificar seguramente incluirán:
Ni /etc, donde se encuentran todos los archivos de configuración, ni /boot, donde se encuentran los
archivos de inicio del sistema operativo, están contemplados en el archivo de ejemplo.
/var/log tiene algunas configuraciones especı́ficas, que seguramente causarán varios falsos positivos si
la actividad de nuestro host modifica los logs constantemente.
/home sólo está contemplado como un ejemplo. Si el sistema posee muchos usuarios independientes, se-
guramente querremos verificar como mucho que no cambie el dueño (owner) de los archivos. Si no tiene
usuarios además del administrador, vamos a querer observar cualquier tipo de cambio.
Un buen método para ajustar la configuración es agregar todos los directorios dependientes del raı́z faltantes
(/boot, /home/, etc.) con todas las verificaciones posibles, e ir ajustándolas a medida que recibimos las aler-
tas. Como mencionamos en caso de la auditorı́a interna, será conveniente que los reportes de estas verificaciones
16 Advanced Intrusion Detection Environment (Ambiente avanzado para la detección de intrusos)
sean recibidos en un host remoto, donde se tenga la seguridad de que podrán ser recuperados en caso de que una
intrusión intente borrarlos.
Además, para el caso de las verificaciones de integridad de los archivos, todos los métodos se basan en la
creación de una base de datos con el estado inicial del sistema, y la posterior comparación con ésta. Si queremos
que esta verificación sea efectiva, y no pueda ser falseada durante una intrusión, deberemos montar la base de datos
en un dispositivo de sólo lectura. Por ejemplo, en un CD-ROM (o alguna clase de dispositivo al que se le pueda
bloquear la escritura por hardware: un disquete, un pen-drive, una tarjeta flash, etc.).
Ası́, para cada tipo y severidad de log habrá un tratamiento, por ejemplo, escribir un mensaje en un archivo. Estos
archivos, normalmente residen en el directorio /var/log. Como mencionamos en otros apartados, será conve-
niente que estos mensajes sean guardados en un repositorio externo, para evitar que sean falseados en caso de una
intrusión. La forma más común de realizar esta tarea es enviarlos a otro host mediante el mismo protocolo syslog,
de la siguiente manera:
*.* @loghost.ourdomain
De esta manera, todos los mensajes (de cualquier tipo y nivel), serán reenviados al host loghost.ourdomain. Una
alternativa mucho más segura, aunque pocas veces utilizada, es enviar los mensajes a través de un puerto serial a
un loghost totalmente desconectado de la red.
Existen alternativas17 al sistema syslog, como syslog-ng18 , que permite mucha mayor flexibilidad en las accio-
nes a tomar con los mensajes recibidos.
Por último, mencionaremos una herramienta que puede ayudar a la lectura de los logs almacenados, que suelen
tener un volumen importante. Esta herramienta es logcheck. La misma se basa en varias reglas, alojadas en el
directorio /etc/logcheck, que definen por medio de expresiones regulares qué mensajes son importantes, y
cuáles son inofensivos. Luego de seleccionar los mensajes según las reglas definidas, un resumen es enviado por
e-mail. De la misma manera que en los casos anteriores, podrı́a ser conveniente que este reporte sea enviado a un
host remoto.
Otra opción muy similiar es logwatch19 .
hemos cubierto. Se recomienda utilizar el mismo como una guı́a para ayudar a estas tareas, pero nunca para reem-
plazar la inspección personal de las mismas.
Para instalar esta herramienta, al igual que con todos los paquetes, realizaremos la siguiente operación:
debian:˜# apt-get install bastille
Luego de finalizada la instalación, podemos ejecutar el modo interactivo mediante el siguiente comando:
debian:˜# InteractiveBastille
A continuación, se nos presentarán una serie de preguntas sobre las tareas a realizar, con una explicación de sus
efectos posteriores. Por ejemplo, en la Figura 13 se observa a la aplicación consultando sobre la deshabilitación
del bit suid en diversos programas.
18. CheckList
Pre-instalación