Anda di halaman 1dari 37

Reforzando la instalacin de GNU/Linux

versin 1.1

Temas
Introduccin................................................................................... 2 Pre-Instalacin................................................................................ 2 Instalacin..................................................................................... 4 Sistema de archivos........................................................................4 Usuarios......................................................................................7 Seleccin de paquetes.................................................................... 7 Ajuste del boot............................................................................. 8 Configuracin..................................................................................8 Boot Loader................................................................................. 8 Limpieza.....................................................................................9 Paquetes.................................................................................. 9 Servicios................................................................................. 13 Mounts................................................................................... 14 Seleccin de Paquetes................................................................... 15 Usuarios, permisos y configuraciones................................................. 16 Usuarios................................................................................. 16 Permisos.................................................................................17 Configuracin del Kernel............................................................. 19 Reboot mediante CTRL-ALT-Del..................................................... 19 Crontab.................................................................................. 20 Manejo de Logs.........................................................................20 Administracin remota.................................................................. 21 SSH....................................................................................... 21 Root login............................................................................... 23 Actualizacin.................................................................................24 Mantenimiento...............................................................................28 Otras Tareas y Herramientas.............................................................. 28 Backup................................................................................... 28 Bastille Linux........................................................................... 29 Paquetes Harden....................................................................... 30 Sudo......................................................................................30 Auditora interna.......................................................................31 Integridad............................................................................... 33 NTP.......................................................................................35 Firewall..................................................................................35 Otras fuentes de informacin............................................................. 35 CheckList..................................................................................... 36 Pre-instalacin.......................................................................36 1

Instalacin............................................................................36 Configuracin........................................................................ 36 Otras tareas y herramientas.......................................................36 Mantenimiento.......................................................................37

Introduccin
Por qu necesitamos reforzar la instalacin de un sistema operativo? Salvo raras excepciones1, los sistemas operativos en general no dedican un gran esfuerzo en la seguridad al momento de la instalacin. Y cul es el resultado de este hecho? Con el crecimiento que ha tenido Internet en los ltimos aos, la ventana de tiempo entre que un sistema operativo recin instalado (sin parches) se conecta a Internet, y que el mismo sufre una intrusin, ha bajado de das 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 instalacin de GNU/Linux. Utilizaremos como base la distribucin Debian, versin sarge (o testing), por ser una de las ms usadas en ambientes de servidor, y porque la consideramos como una de las ms adecuadas para esa misma funcin. Todos los conceptos vertidos en esta gua podrn ser aplicados a cualquier distribucin de Linux, o sistema operativo tipo Unix (*BSD, Solaris, etc.). Sin embargo, se debern tomar los recaudos necesarios para que dicha adaptacin no deje puertas abiertas debido a las diferencias entre las distintas distribuciones.

Pre-Instalacin
Comenzaremos por considerar dos temas esenciales. Se dice que quien tiene acceso fsico a un equipo tendr acceso total al mismo. Si bien sta afirmacin no siempre es exacta, y algunas de las tareas que realizaremos tienen por objetivo contrarrestarla, es absolutamente recomendable que el acceso fsico al servidor y su consola est restringido 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 algn tipo de conexin (por ejemplo, porque el equipo debe iniciarse mediante netboot), estas tareas debern realizarse en una red cerrada, asegurada, y preferentemente aislada. Antes de realizar la instalacin del sistema operativo elegido, hay algunas tareas que podemos realizar. En particular, mediante la configuracin del BIOS del
1

Por ejemplo, OpenBSD. http://www.openbsd.org

equipo en cuestin, podremos restringir algunos puntos de entrada que no sean necesarios para la operatoria normal del sistema. Entre otros, podemos nombrar los siguientes. v Puertos paralelos y seriales v Puertos USB v Disqueteras y lectoras de CD/DVD En la Figura 1 podemos observar un ejemplo de cmo se deshabilitan algunos puertos innecesarios en el BIOS.
Figura 1 - Dispositivos en el BIOS

Otra tarea importante consiste en configurar el orden de seleccin de dispositivos para el boot del equipo. Para poder realizar la instalacin, deberemos seleccionar el medio disponible para la misma, normalmente CDROM, 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.
Figura 2 - Orden de boot

Por ltimo, deberemos configurar, si el BIOS as lo permitiese, una contrasea para restringir la realizacin de cambios en la configuracin del mismo.

Instalacin
Para realizar un buen proceso de aseguramiento de un servidor GNU/Linux Debian, incluiremos su instalacin. Durante el proceso de instalacin, cuya descripcin completa puede encontrarse en la bibliografa, deberemos tener en cuenta algunos detalles que nos permitirn asegurar un resultado exitoso.

Sistema de archivos
En primer lugar, deberemos disear 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:

v Si el sistema va a alojar mltiples usuarios interactivos, /home debera tener su propia particin. v En equipos que brinden servicios crticos, /var/log podra llenarse y perjudicar el buen funcionamiento de los mismos, por lo que podra separarse. v Por esta misma razn, /tmp utilizar una particin separada. v En general, /var (pensado para todas las operaciones ms dinmicas) y / usr (donde normalmente se alojan los archivos menos susceptibles a cambios) tendrn su propio espacio. v Las particiones pueden montarse con ciertas opciones que restringen su funcionalidad (ver Figura 3). Las restricciones ms interesantes para nuestro objetivo son: nodev: No permite la creacin de dispositivos (devices). nosuid: No permite la utilizacin de los bits suid y sgid. noexec: No permite la ejecucin de archivos En general, podemos definir que: En ninguna particin, salvo /, se necesitan dispositivos. /, /usr, y /var, en general, son las nicas particiones desde las cuales se debera poder ejecutar archivos. Adems, slo /usr y /var pueden necesitar el uso de suid. Estas restricciones pueden y suelen variar segn las diferentes distribuciones de GNU/Linux. En algunos casos puede ser recomendable instalar /usr como RO (slo lectura), pero esto puede traer (y en este caso traer) problemas durante la instalacin.

Figura 3 - Opciones de montado de particiones

En la Figura 4 podemos ver una posible distribucin de las particiones que se crearn durante la instalacin.

Figura 4 - Particiones

Usuarios
Como veremos ms adelante, el uso del usuario root se deber restringir lo ms posible, por lo que la instalacin es el momento correcto para la creacin de al menos un usuario no privilegiado.

Seleccin de paquetes
Para finalizar la instalacin, saltearemos la fase de seleccin de paquetes, como lo indica la Figura 5, al no escoger ningn paquete ni grupo de paquetes en esta etapa.

Figura 5 - Seleccin de paquetes

Ajuste del boot


Esta etapa de instalacin no estar completa sin ajustar las opciones de boot del equipo. Por ejemplo, si para poder realizar la instalacin se habilit del boot por CD-ROM, ste es el momento para deshabilitarlo.

Configuracin
Boot Loader
Comenzando con la configuracin del equipo, vamos a asegurar el boot loader, en nuestro caso el grub, programa encargado de ejecutar inicialmente el kernel de Linux. Para evitar que alguien con acceso a la consola de nuestro equipo (situacin que de todas maneras debera ser restringida) pueda modificar los parmetros de inicializacin del kernel, protegeremos el boot loader contra modificaciones. Primero, generaremos un hash del pasword que utilizaremos:
hardened:~# grub-md5-crypt Password: Retype password: $1$/eQbw0$IRWJlRW4DoFmPUkDykONW/

Una vez obtenido el hash, procederemos a insertar la siguiente lnea en el archivo /boot/grub/menu.lst:
hardened:~# vi /boot/grub/menu.lst
## password ['--md5'] passwd # If used in the first section of a menu file, disable all interactive editing # control (menu entry editor and command-line) and entries protected by the # command 'lock' # e.g. password topsecret # password --md5 $1$gLhU0/$aW78kHK1QfV3P2b2znUoe/ # password topsecret password -md5 $1$/eQbw0$IRWJlRW4DoFmPUkDykONW/

En este mismo archivo, editaremos el valor de la variable lockalternative, para que el password que acabamos de crear no slo se aplique a las modificaciones explcitas de los parmetros de boot del kernel, sino que adems sea necesaria para elegir el modo single user, tambin conocido como Recovery Mode.
## should update-grub lock alternative automagic boot options ## e.g. lockalternative=true ## lockalternative=false # lockalternative=true

Para completar este proceso, deberemos ejecutar el comando update-grub para hacer efectivo el ltimo de los cambios realizados.
hardened:~# 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-1-686-smp Updating /boot/grub/menu.lst ... done hardened:~#

Limpieza
Para continuar con la configuracin del equipo vamos a revisar que tan mnima es la instalacin que acabamos de realizar.

Paquetes
Veamos que paquetes estn realmente instalados en nuestro servidor. Utilizando el comando dpkg podremos averiguar algunos datos:

hardened:~# dpkg -l Desired=Unknown/Install/Remove/Purge/Hold | Estado=No/Instalado/Config-files/Unpacked/Failed-config/Half-installed |/ Err?=(none)/Hold/Reinst-required/X=both-problems (Status,Err: maysc.=malo) ||/ Nombre Versin Descripcin +++-==============-==============-============================================ ii adduser 3.59 Add and remove users and groups ii apt 0.5.27 Advanced front-end for dpkg ii apt-utils 0.5.27 APT utility programs ii aptitude 0.2.15.2-1 curses-based apt frontend ii at 3.1.8-11 Delayed job execution and batch processing ii base-config 2.40.4 Debian base system configurator ii base-files 3.1 Debian base system miscellaneous files ii base-passwd 3.5.7 Debian base system master password and group ii bash 2.05b-15 The GNU Bourne Again SHell ii bsdmainutils 6.0.15 collection of more utilities from FreeBSD ii bsdutils 2.12-7 Basic utilities from 4.4BSD-Lite ii console-common 0.7.46 Basic infrastructure for text console config ii console-data 2002.12.04dbs- Keymaps, fonts, charset maps, fallback table ii console-tools 0.2.3dbs-54 Linux console and font utilities ii coreutils 5.2.1-2 The GNU core utilities ii cpio 2.5-1.1 GNU cpio -- a program to manage archives of ii cramfsprogs 1.1-6 Tools for CramFs (Compressed ROM File System ii cron 3.0pl1-86 management of regular background processing ii dash 0.5.1-3 The Debian Almquist Shell ii debconf 1.4.30.5 Debian configuration management system ii debconf-i18n 1.4.30.5 full internationalization support for debcon ii debianutils 2.8.4 Miscellaneous utilities specific to Debian ii dhcp-client 2.0pl5-19 DHCP Client ii diff 2.8.1-6 File comparison utilities ii discover1 1.6.6 hardware identification system ii discover1-data 1.2004.08.11 hardware lists for libdiscover1 ii dpkg 1.10.23 Package maintenance system for Debian ii dselect 1.10.23 a user tool to manage Debian packages ii e2fslibs 1.35-6 The EXT2 filesystem libraries ii e2fsprogs 1.35-6 The EXT2 file system utilities and libraries ii ed 0.2-20 The classic unix line editor ii eject 2.0.13deb-7 ejects CDs and operates CD-Changers under Li ii exim4 4.34-4 An MTA (Mail Transport Agent) ii exim4-base 4.34-4 EXperimental Internal Mailer -- a Mail Trans ii exim4-config 4.34-4 Debian configuration for exim4 ii exim4-daemon-l 4.34-4 Lightweight version of the Exim (v4) MTA ii fdutils 5.4-20040228-1 Linux floppy utilities ii findutils 4.1.20-4 utilities for finding files--find, xargs, an ii gcc-3.3-base 3.3.4-6sarge1. The GNU Compiler Collection (base package) ii gettext-base 0.14.1-5 GNU Internationalization utilities for the b ii grep 2.5.1.ds1-3 GNU grep, egrep and fgrep ii groff-base 1.18.1.1-1 GNU troff text-formatting system (base syste ii grub 0.95+cvs200406 GRand Unified Bootloader ii gzip 1.3.5-9 The GNU compression utility ii hostname 2.13 A utility to set/show the host name or domai ii hotplug 0.0.20040329-1 Linux Hotplug Scripts ii ifupdown 0.6.4-4.8 High level tools to configure network interf ii info 4.7-2.1 Standalone GNU Info documentation browser ii initrd-tools 0.1.74 tools to create initrd image for prepackaged ii initscripts 2.86-1 Standard scripts needed for booting and shut ii ipchains 1.3.10-15 Network firewalling for Linux 2.2.x ii iptables 1.2.9-10 Linux kernel 2.4+ iptables administration to ii iputils-ping 20020927-2 Tools to test the reachability of network ho ii iso-codes 0.40-1 ISO language, territory, currency codes and ii kernel-image-2 2.6.8-2 Linux kernel image for version 2.6.8 on PPro ii klogd 1.4.1-15 Kernel Logging Daemon ii language-env 0.57.2 simple configuration tool for native languag ii libacl1 2.2.23-1 Access control list shared library ii libattr1 2.4.16-1 Extended attribute shared library ii libblkid1 1.35-6 Block device id library

10

ii ii ii ii ii ii ii ii ii ii ii ii ii ii ii ii ii ii ii ii ii ii ii ii ii ii ii ii ii ii ii ii ii ii ii ii ii ii ii ii ii ii ii ii ii ii ii ii ii ii ii ii ii ii ii ii ii ii ii ii ii ii ii ii ii ii

libc6 libcap1 libcomerr2 libconsole libdb1-compat libdb3 libdb4.2 libdiscover1 libgcc1 libgcrypt7 libgdbm3 libgnutls10 libgpg-error0 liblocale-gett liblockfile1 liblzo1 libncurses5 libnewt0.51 libopencdk8 libpam-modules libpam-runtime libpam0g libpcap0.7 libpcre3 libpopt0 libsigc++-1.2libss2 libssl0.9.7 libstdc++5 libtasn1-2 libtext-charwi libtext-iconvlibtext-wrapi1 libtextwrap1 libusb-0.1-4 libuuid1 libwrap0 locales login logrotate mailx makedev man-db manpages manpages-es mawk module-init-to modutils mount nano ncurses-base ncurses-bin net-tools netbase netkit-inetd nvi passwd pciutils perl perl-base perl-modules ppp pppconfig pppoe pppoeconf procps

2.3.2.ds1-16 1.10-14 1.35-6 0.2.3dbs-54 2.1.3-7 3.2.9-20 4.2.52-17 1.6.6 3.4.1-4sarge1 1.1.90-9 1.8.3-2 1.0.4-3 1.0-1 1.01-17 1.06 1.08-1.2 5.4-4 0.51.6-5 0.5.5-8 0.76-22 0.76-22 0.76-22 0.7.2-7 4.5-1.1 1.7-4 1.2.5-1 1.35-6 0.9.7d-4 3.3.4-6sarge1. 0.2.10-3 0.04-1 1.2-3 0.06-1 0.1-1 0.1.8-16 1.35-6 7.6.dbs-6 2.3.2.ds1-16 4.0.3-30.1 3.7-2 8.1.2-0.200405 2.3.1-75 2.4.2-19 1.67-2 1.28-13 1.3.3-11 3.1-pre5-7 2.4.26-1 2.12-7 1.2.4-2 5.4-4 5.4-4 1.60-10 4.18 0.10-9 1.79-21 4.0.3-30.1 2.1.11-15 5.8.4-2.2 5.8.4-2.2 5.8.4-2.2 2.4.2+20040428 2.3.6 3.5-3 1.0.4 3.2.1-2

GNU C Library: Shared libraries and Timezone support for getting/setting POSIX.1e capabil The Common Error Description library Shared libraries for Linux console and font The Berkeley database routines [glibc 2.0/2. Berkeley v3 Database Libraries [runtime] Berkeley v4.2 Database Libraries [runtime] hardware identification library GCC support library LGPL Crypto library - runtime library GNU dbm database routines (runtime version) GNU TLS library - runtime library library for common error values and messages Using libc functions for internationalizatio NFS-safe locking library, includes dotlockfi A real-time data compression library Shared libraries for terminal handling Not Erik's Windowing Toolkit - text mode win Open Crypto Development Kit (OpenCDK) (runti Pluggable Authentication Modules for PAM Runtime support for the PAM library Pluggable Authentication Modules library System interface for user-level packet captu Perl 5 Compatible Regular Expression Library lib for parsing cmdline parameters Type-safe Signal Framework for C++ - runtime Command-line interface parsing library SSL shared libraries The GNU Standard C++ Library v3 Manage ASN.1 structures (runtime) get display widths of characters on the term Convert between character sets in Perl internationalized substitute of Text::Wrap text-wrapping library with i18n - runtime Userspace USB programming library Universally unique id library Wietse Venema's TCP wrappers library GNU C Library: National Language (locale) da System login tools Log rotation utility A simple mail user agent Creates device files in /dev The on-line manual pager Manual pages about using a GNU/Linux system Spanish man pages a pattern scanning and text processing langu tools for managing Linux kernel modules Linux module utilities Tools for mounting and manipulating filesyst free Pico clone with some new features Descriptions of common terminal types Terminal-related programs and man pages The NET-3 networking toolkit Basic TCP/IP networking system The Internet Superserver 4.4BSD re-implementation of vi Change and administer password and group dat Linux PCI Utilities Larry Wall's Practical Extraction and Report The Pathologically Eclectic Rubbish Lister. Core Perl modules. Point-to-Point Protocol (PPP) daemon A text menu based utility for configuring pp PPP over Ethernet driver configures PPPoE/ADSL connections The /proc file system utilities

11

ii psmisc ii sed ii setserial ii slang1a-utf8 ii sysklogd ii sysv-rc ii sysvinit ii tar ii tasksel ii tcpd ii telnet ii usbutils ii util-linux ii util-linux-loc ii wget ii whiptail ii zlib1g hardened:~#

21.5-1 4.1.2-1 2.17-36 1.4.9dbs-6 1.4.1-15 2.86-1 2.86-1 1.13.93-4 2.12 7.6.dbs-6 0.17-24 0.11+cvs200403 2.12-7 2.12-7 1.9.1-4 0.51.6-5 1.2.1.1-7

Utilities that use the proc filesystem The GNU sed stream editor Controls configuration of serial ports The S-Lang programming library with utf8 sup System Logging Daemon Standard boot mechanism using symlinks in /e System-V like init GNU tar Tool for selecting tasks for installation on Wietse Venema's TCP wrapper utilities The telnet client. USB console utilities Miscellaneous system utilities Locales files for util-linux retrieves files from the web Displays user-friendly dialog boxes from she compression library - runtime

Como vern, hemos marcado en rojo unos cuantos paquetes, que deberemos desinstalar. Esta lista no es exhaustiva, y puede cambiar con las diferentes versiones del instalador de Debian. Por este motivo, deberemos utilizar nuestra experiencia e imaginacin para detectar los paquetes innecesarios, siguiendo algunas reglas de sentido comn. Por ejemplo: v Si slo vamos a utilizar ethernet, todos los paquetes que tengan que ver con ppp no sern necesarios. v Si utilizaremos IP esttico, no es necesario el DHCP. v En general, todos los paquetes de internacionalizacin son innecesarios. v La automatizacin de deteccin de hardware normalmente no es necesaria, y hasta puede ser perjudicial. v Los paquetes relacionados con dispositivos que no tenemos o no utilizamos, pueden borrarse. Una mencin especial merece el paquete gcc-3.3-base, que slo contiene documentacin descriptiva y se incluye nicamente por razones de dependencias de paquetes, por lo que puede ser ignorado sin mayores problemas. El siguiente paso ser desinstalar los paquetes seleccionados. Para ello, utilizaremos el siguiente comando: hardened:~# dpkg P aptitude dhcp-client [] que eliminar tanto los paquetes como sus archivos de configuracin. De esta manera, reducimos la base de programas instalados, y as logramos bajar, el menos levemente, la probabilidad de que un bug afecte nuestra instalacin.

12

Como hemos desinstalado los programas que realizaban la deteccin automtica de hardware, es posible que parte del mismo deje de ser reconocido. Para solucionar este problema, deberemos forzar su deteccin. Por ejemplo, para que funcione correctamente la interface ethernet, deberemos editar el archivo / etc/modprobe.d/aliases: hardened:~# vi /etc/modprobe.d/aliases #alias alias alias net-pf-10 ipv6 net-pf-10 off eth0 pcnet32

reemplazando pcnet32 por el mdulo correspondiente a nuestra interface. Aprovechamos la edicin de este archivo para deshabilitar, siempre y cuando no sea necesario en nuestro entorno, el protocolo IPV6.

Servicios
De la misma manera que la instalacin nos dej con una importante cantidad de paquetes innecesarios, que pasar con los servicios? Veamos:
hardened:~# netstat -tulp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address name tcp 0 0 *:time tcp 0 0 *:discard tcp 0 0 *:daytime tcp 0 0 localhost.localdom:smtp udp 0 0 *:discard udp 0 0 *:bootpc hardened:~#

Foreign Address *:* *:* *:* *:* *:* *:*

State LISTEN LISTEN LISTEN LISTEN

PID/Program 608/inetd 608/inetd 608/inetd 602/exim4 608/inetd 708/dhclient

Como podemos observar, los servicios time, discard y daytime se encuentran habilitados. En la ltima columna podemos ver que todos corresponden al programa inetd. Para deshabilitarlos, procederemos a editar el archivo / etc/inetd.conf, y comentar las lneas correspondientes: hardened:~# vi /etc/inetd.conf #:INTERNAL: Internal services #echo stream tcp internal #echo dgram udp internal #chargen stream tcp internal #chargen dgram udp internal nowait wait nowait wait root root root root

13

#discard internal #discard internal #daytime internal #daytime internal #time internal #time internal

stream dgram stream dgram stream dgram

tcp udp tcp udp tcp udp

nowait wait nowait wait nowait wait

root root root root root root

Y para activar estos cambios, reiniciamos el servicio inetd.


hardened:~# /etc/init.d/inetd restart Restarting internet superserver: inetd. hardened:~# netstat -tulp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address name tcp 0 0 localhost.localdom:smtp *:* udp 0 0 *:bootpc *:* hardened:~#

State LISTEN

PID/Program 619/exim4 467/dhclient

Todava podemos observar dos servicios: v SMTP, que est asociado nicamente a la interface loopback, y mantendremos como sistema de mail local, y v BOOTPC, que corresponde al cliente DHCP. Si no utilizaremos DHCP en nuestro sistema, ste es el momento de desinstalarlo, al igual que con cualquier otro servicio que encontremos en esta etapa.

Mounts
Para finalizar esta etapa, revisaremos la tabla de sistemas de archivos a montar: hardened:~# vi /etc/fstab
# /etc/fstab: static file system information. # # <file system> <mount point> <type> <options> <dump> <pass> proc /proc proc defaults 0 0 /dev/sda1 / ext3 nosuid,errors=remount-ro 0 1 /dev/sda8 /home ext3 nodev,nosuid,noexec 0 /dev/sda7 /tmp ext3 nodev,nosuid 0 2 /dev/sda5 /usr ext3 nodev 0 2 /dev/sda6 /var ext3 nodev 0 2 /dev/sda9 none swap sw 0 0 /dev/hdc /media/cdrom0 iso9660 ro,user,noauto 0 0 /dev/fd0 /media/floppy0 auto rw,user,noauto 0 0

14

Si no utilizaremos el CD-ROM o la disquetera, podemos eliminar las ltimas dos lneas de este archivo. Pero si decidimos conservar alguna de las dos, al menos deberemos eliminar la opcin user, que cumple la funcin de permitir a un usuario no privilegiado montar y desmontar dicho dispositivo. Como podemos observar, en la columna options de las particiones del disco rgido, se han incluido las opciones de nodev, nosuid y noexec que seleccionamos durante la etapa de instalacin.

Seleccin de Paquetes
En esta etapa debemos tener en especial consideracin que fines va a cumplir el equipo, y seleccionar el software a instalar en consecuencia. La principal sugerencia para esta etapa consiste en instalar nicamente el software estrictamente necesario. Por ejemplo, en este caso utilizaremos el equipo como servidor Web. Que tipo de servidor Web? Supongamos que slo necesitamos un servidor Web con pginas estticas. Es necesario instalar un apache con PHP? La respuesta claramente es NO. En este caso, no slo no vamos a instalar PHP, sino que utilizaremos una alternativa ms pequea y segura: el thttpd. hardened:~# apt-get install thttpd Adems, el programa thttpd nos permitir de manera muy simple restringir el acceso al sistema de archivos del proceso thttpd, aprovechando la funcionalidad chroot del sistema operativo. Esta seleccin puede realizarse durante la instalacin como lo muestra la Figura 6.

15

Figura 6 - chroot thttpd

Siguiendo este ejemplo, deberemos considerar las necesidades de funcionamiento del equipo, e instalar nicamente el software necesario.

Usuarios, permisos y configuraciones


Usuarios
Comenzaremos por revisar los usuarios creados durante el proceso de instalacin:
hardened:~# cat /etc/passwd root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/bin/sh bin:x:2:2:bin:/bin:/bin/sh sys:x:3:3:sys:/dev:/bin/sh sync:x:4:65534:sync:/bin:/bin/sync games:x:5:60:games:/usr/games:/bin/sh man:x:6:12:man:/var/cache/man:/bin/sh lp:x:7:7:lp:/var/spool/lpd:/bin/sh mail:x:8:8:mail:/var/mail:/bin/sh news:x:9:9:news:/var/spool/news:/bin/sh uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh proxy:x:13:13:proxy:/bin:/bin/sh www-data:x:33:33:www-data:/var/www:/bin/sh backup:x:34:34:backup:/var/backups:/bin/sh list:x:38:38:Mailing List Manager:/var/list:/bin/sh irc:x:39:39:ircd:/var/run/ircd:/bin/sh gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh nobody:x:65534:65534:nobody:/nonexistent:/bin/sh Debian-exim:x:102:102::/var/spool/exim4:/bin/false

16

oper:x:1000:1000:Operador del Sistema,,,:/home/oper:/bin/bash hardened:~#

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 totalmente innecesario dado que ninguno de estos usuarios ser utilizado de manera interactiva. Utilizaremos el siguiente comando para modificar esta situacin: hardened:~# chsh -s /bin/false daemon Y as para cada uno de los usuarios identificados. Adems, queremos restringir el grupo de usuarios que puedan convertirse en root mediante el comando su. hardened:~# vi /etc/pam.d/su
# Uncomment this to force users to be a member of group root # 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 slo los usuarios que pertenezcan al grupo wheel podrn utilizar el comando su. No debemos olvidarnos de crear el grupo y agregar los usuarios necesarios al mismo! hardened:~# addgroup --system wheel Adding group `wheel' (104)... Hecho. hardened:~# usermod -G wheel oper

Permisos
Vamos a revisar algunos permisos importantes en los archivos. Uno de los principales peligros que encontramos en los permisos de los archivos ejecutables es el suid bit, que permite a cualquier usuario que tenga permiso de ejecucin sobre este archivo, ejecutarlo como si realmente fuese el usuario dueo del archivo, en lugar de l mismo. Un problema muy comn, es que un programa comnmente utilizado por los usuarios tenga como dueo a root, y tenga prendido el bit suid. Si este programa llegase a tener un bug, por ejemplo un buffer overflow o un stack overflow, podra llegar a convertirse en la

17

herramienta que necesita un posible atacante que haya logrado ingresar al sistema para convertirse en root. Veamos que podemos encontrar en el sistema que acabamos de instalar.
hardened:~# 168101 10 168156 24 168167 36 168169 29 168172 29 168173 18 168174 36 168175 27 168301 35 168408 8 168457 28 168513 10 77879 57 418049 6 340055 634 16086 36 16087 24 16089 77 16090 40 16107 32 16108 27 4020 16 hardened:~# find / -path -rwxr-sr-x -rwsr-xr-x -rwxr-sr-x -rwsr-xr-x -rwsr-xr-x -rwxr-sr-x -rwsr-xr-x -rwsr-xr-x -rwsr-xr-x -rwxr-sr-x -rwxr-sr-x -rwxr-sr-x -rwxr-sr-x -rwsr-xr-x -rwsr-xr-x -rwsr-xr-x -rwsr-xr-x -rwsr-xr-x -rwsr-xr-x -rwsr-xr-x -rwsr-xr-x -r-sr-xr-x /proc -prune -o -type f -perm +6000 -ls 1 root tty 9816 may 2 2004 1 root root 22872 sep 8 2004 1 root shadow 34936 sep 8 2004 1 root root 28056 sep 8 2004 1 root root 28088 sep 8 2004 1 root shadow 16696 sep 8 2004 1 root root 34904 sep 8 2004 1 root root 26616 sep 8 2004 1 root root 34488 ene 18 2002 1 root tty 7992 ago 26 2004 1 root crontab 26872 jul 28 2004 1 root mail 9860 jun 4 2004 1 root ssh 57304 jul 29 2004 1 root root 5672 ago 9 2004 1 root root 644472 jul 27 2004 1 root root 35512 sep 8 2004 1 root root 23416 sep 8 2004 1 root root 76888 may 2 2004 1 root root 39928 may 2 2004 1 root root 30764 dic 22 2003 1 root root 26604 dic 22 2003 1 root root 15000 jun 28 2004 /usr/bin/wall /usr/bin/newgrp /usr/bin/chage /usr/bin/chfn /usr/bin/chsh /usr/bin/expiry /usr/bin/gpasswd /usr/bin/passwd /usr/bin/at /usr/bin/bsd-write /usr/bin/crontab /usr/bin/dotlockfile /usr/bin/ssh-agent /usr/lib/pt_chown /usr/sbin/exim4 /bin/login /bin/su /bin/mount /bin/umount /bin/ping /bin/ping6 /sbin/unix_chkpwd

Veamos cuales de estos programas realmente necesitan ser ejecutados por usuarios no privilegiados, si los hubiese: passwd: para que los usuarios puedan cambiar su password. exim4: para el correcto funcionamiento del mail interno. login: para que los usuarios puedan ingresar al 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. v su: para que usuarios no privilegiados puedan convertirse en root. v v v v El resto de los programas son prescindibles, 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:
hardened:~# chmod ug-s /usr/bin/wall /usr/bin/newgrp /usr/bin/chage /usr/bin/chfn / usr/bin/chsh /usr/bin/expiry /usr/bin/gpasswd /usr/bin/at /usr/bin/bsd-write / usr/bin/crontab /usr/bin/dotlockfile /usr/bin/ssh-agent /usr/lib/pt_chown /bin/mount / bin/umount /bin/ping /bin/ping6 hardened:~# hardened:~# find / -path /proc -prune -o -type f -perm +6000 -ls 168175 27 -rwsr-xr-x 1 root root 26616 sep 8 2004 /usr/bin/passwd 340055 634 -rwsr-xr-x 1 root root 644472 jul 27 2004 /usr/sbin/exim4 16086 36 -rwsr-xr-x 1 root root 35512 sep 8 2004 /bin/login 16087 24 -rwsr-xr-x 1 root root 23416 sep 8 2004 /bin/su 4020 16 -r-sr-xr-x 1 root root 15000 jun 28 2004 /sbin/unix_chkpwd hardened:~#

18

Configuracin del Kernel


Vamos adems a ajustar algunos parmetros del kernel. Para ello utilizaremos el archivo /etc/sysctl.conf: hardened:~# vi /etc/sysctl.conf # Ignorar el uso de la tecla Peticin de sistema kernel.sysrq=0 # Normalmente, no hay razn para utilizar broadcasts ICMP net.ipv4.icmp_echo_ignore_broadcasts=1 # Tampoco debemos hacerle caso a respuestas ICMP que no # pedimos net.ipv4.icmp_ignore_bogus_error_responses=1 # Los ICMP redirects son necesarios en escasas excepciones net.ipv4.conf.all.accept_redirects=0 net.ipv4.conf.default.accept_redirects=0 # Tampoco aceptamos paquetes con source route net.ipv4.conf.all.accept_source_route=0 net.ipv4.conf.default.accept_source_route=0 Y para hacer efectivos los cambios inmediatamente: hardened:~# sysctl -p

Reboot mediante CTRL-ALT-Del


ste mtodo de reinicializar el equipo siempre a sido til y atractivo en GNU/Linux, pero realmente queremos que cualquiera con acceso a la consola puede utilizarlo? Mejor lo vamos a deshabilitar comentando la lnea correspondiente en el archivo /etc/inittab: hardened:~# vi /etc/inittab # What to do when CTRL-ALT-DEL is pressed. #ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now

Slo resta avisarle al proceso init que debe releer el archivo de configuracin. hardened:~# telinit q

19

Crontab
Si bien ya anteriormente le sacamos el bit SUID al programa crontab, no estar de ms restringir qu usuarios pueden tener acceso a su uso. hardened:~# vi /etc/cron.allow root

Manejo de Logs
Los Logs del sistema sern seguramente una de las herramientas ms valiosas a la hora de atender un intento de intrusin al equipo, exitoso o no. En la mayora de los sistemas tipo UNIX, y por supuesto tambin en GNU/Linux, se utiliza el sistema syslog para manejar los logs del sistema. Este sistema consiste en un demonio que recibe los diferentes mensajes de las aplicaciones y el sistema operativo. Los dos conceptos fundamentales del syslog.conf son facility y level. El primero es la aplicacin o el componente del sistemas operativo que genera logs. level hace referencia a la severidad del mensaje. Por cada combinacin de estos se realiza una accin. El formato entonces quedara: facility.level <Tab><Tab> accin As, segn lo indicado en el archivo /etc/syslog.conf para cada tipo y severidad, los logs sern tratados, por ejemplo, escribiendo un mensaje en un archivo. Estos archivos, normalmente residen en el directorio /var/log. Como mencionamos en apartados anteriores, ser conveniente que estos mensajes sean guardados en un repositorio externo, para evitar que sean falseados en caso de una intrusin. La forma ms comn de realizar esta tarea es enviarlos a otro host mediante el mismo protocolo syslog, de la siguiente manera: hardened:~# vi /etc/syslog.conf *.* @loghost.ourdomain

De esta manera, todos los mensajes (de cualquier tipo y nivel), sern reenviados al host loghost.ourdomain. Una alternativa mucho ms segura, aunque pocas veces utilizada, es enviar los mensajes a travs de un puerto serial a un loghost totalmente desconectado de la red. Otra opcin al sistema syslog es el syslog-ng, que permite mucha mayor flexibilidad en las acciones a tomar con los mensajes recibidos.

20

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 cules son inofensivos. Luego de seleccionar los mensajes segn las reglas definidas, un resumen es enviado por mail. De la misma manera que en los casos anteriores, podra ser conveniente que este reporte sea enviado a un host remoto.

Administracin remota
Vamos a ocuparnos de la administracin de nuestro equipo. En este caso, vamos a suponer que es necesario acceder remotamente al equipo. Por lo tanto, como primera medida, vamos a ocuparnos de este importante tema.

SSH
Vamos a instalar el servidor SSH. hardened:~# apt-get install ssh Este paquete instalar tanto el cliente como el servidor ssh. Durante su instalacin, deberemos responder algunas preguntas. Como vemos en la Figura 7, elegimos slo permitir la versin 2 del protocolo SSH. Las versiones anteriores tienen importantes defectos de diseo que pueden comprometer la seguridad del equipo.
Figura 7 - SSH versin 2

21

La siguiente opcin ser no instalar el programa ssh-keysign con el bit SUID (Figura 8). Por un lado, no utilizaremos el mtodo de autenticacin basada en host, y por otro, intentamos evitar el uso de SUID.
Figura 8 - ssh-keysign sin SUID

Y como mencionamos antes, este paquete incluye tanto el cliente como el servidor, y nosotros necesitamos instalar el servidor, que es opcional (Figura 9).
Figura 9 - Servidor SSH

22

Por ahora no es necesario ajustar la configuracin del servidor SSH. Sin embargo, si utilizaremos SSH slo con propsitos administrativos, ser conveniente restringir desde dnde se puede acceder a dicho protocolo. hardened:~# vi /etc/hosts.deny sshd : ALL

hardened:~# vi /etc/hosts.allow sshd : 192.168.31.0/24 Este mtodo tambin puede utilizarse con cualquier servicio que utilice la librera libwrap (hoy incluida en la libC), o mediante la utilizacin del programa tcpd.

Root login
Continuamos tomando algunos recaudos con respecto al usuario root. Como primera medida, desde donde puede acceder el usuario root? Decidimos que slo podr convertirse en root un usuario previamente autenticado, o que, para casos de emergencia, slo pueda acceder mediante el uso de la consola. Para lograr este debemos restringir el acceso del usuario root a travs del protocolo SSH. hardened:~# vi /etc/ssh/sshd_config # Authentication: LoginGraceTime 600 PermitRootLogin no StrictModes yes hardened:~# /etc/init.d/ssh restart De esta manera, para acceder remotamente al equipo deberemos utilizar algn usuario.

23

Actualizacin
Ahora que ya tenemos el sistema medianamente asegurado, es el momento de actualizar los paquetes instalados. A menos que tengamos disponible una copia del sitio de distribucin de Debian (cosa poco comn y un tanto extensa), deberemos obtener las actualizaciones a travs de Internet. Por esta razn, ste es el momento de conectar nuestro equipo a la red. A continuacin, vamos a editar el archivo que indica dnde encontrar las actualizaciones. hardened:~# vi /etc/apt/sources.list Aqu vamos a realizar una distincin entre las diferentes versiones de Debian. En el caso de la versin stable (Woody), las actualizaciones de seguridad se corresponden con los boletines de seguridad emitidos por Debian (DSA, o Debian Security Announce), y se localizan en un sitio especial de distribucin llamado security.
deb http://security.debian.org/ stable/updates main contrib

En el caso de la versin sarge (testing), si bien existe el mismo sitio security personalizado para esta versin, las actualizaciones toman un camino diferente, y con una demora de aproximadamente 10 das, se incorporan directamente en la fuente principal de paquetes. Por lo tanto, deberemos incorporar la misma a la lista de sitios.
deb http://ftp.debian.org/debian/ sarge main contrib deb http://security.debian.org/ sarge/updates main contrib

Una vez agregadas estas referencias, debemos actualizar la base de datos local de paquetes.
hardened:~# apt-get update

24

Des:1 http://ftp.debian.org sarge/main Packages [3292kB] Obj http://security.debian.org sarge/updates/main Packages Obj http://security.debian.org sarge/updates/main Release Obj http://security.debian.org sarge/updates/contrib Packages Obj http://security.debian.org sarge/updates/contrib Release Des:2 http://ftp.debian.org sarge/main Release [81B] Des:3 http://ftp.debian.org sarge/contrib Packages [61,3kB] Des:4 http://ftp.debian.org sarge/contrib Release [84B] Descargados 3354kB en 5m49s (9595B/s) Leyendo lista de paquetes... Hecho hardened:~#

Y ahora veremos qu paquetes necesitan actualizarse.


hardened:~# apt-get upgrade -s Leyendo lista de paquetes... Hecho Creando rbol de dependencias... Hecho Los siguientes paquetes se han retenido: exim4 exim4-base exim4-config exim4-daemon-light libopencdk8 ltrace Se actualizarn los siguientes paquetes: adduser apt apt-utils base-config base-files base-passwd bash binutils bsdmainutils bsdutils chkrootkit console-common console-data console-tools cpio dash debconf debconf-i18n dhcp-client diff dpkg dselect file findutils gcc-3.3-base gettext-base grep groff-base grub ifupdown initrd-tools initscripts iptables iso-codes klogd libc6 libconsole libdb3 libdb4.2 libgcc1 libmagic1 libnewt0.51 libpopt0 libsigc++-1.2-5c102 libssl0.9.7 libstdc++5 libusb-0.1-4 libwrap0 login lsof mailx makedev man-db manpages module-init-tools modutils mount netbase netkit-inetd nvi passwd perl perl-base perl-modules sed slang1a-utf8 ssh sysklogd sysv-rc sysvinit tar tcpd telnet thttpd tiger usbutils util-linux wget whiptail zlib1g 80 actualizados, 0 se instalarn, 0 para eliminar y 6 no actualizados. Inst libc6 [2.3.2.ds1-16] (2.3.2.ds1-20 Debian:testing) Conf libc6 (2.3.2.ds1-20 Debian:testing) Inst base-passwd [3.5.7] (3.5.9 Debian:testing) Conf base-passwd (3.5.9 Debian:testing) Inst base-files [3.1] (3.1.2 Debian:testing) Conf base-files (3.1.2 Debian:testing) Inst login [1:4.0.3-30.1] (1:4.0.3-31sarge1 Debian:testing) Conf login (1:4.0.3-31sarge1 Debian:testing) Inst passwd [1:4.0.3-30.1] (1:4.0.3-31sarge1 Debian:testing) Conf passwd (1:4.0.3-31sarge1 Debian:testing) Inst bash [2.05b-15] (2.05b-26 Debian:testing) Conf bash (2.05b-26 Debian:testing) Inst bsdutils [1:2.12-7] (1:2.12-10 Debian:testing) Conf bsdutils (1:2.12-10 Debian:testing) Inst diff [2.8.1-6] (2.8.1-11 Debian:testing) Conf diff (2.8.1-11 Debian:testing) Inst dpkg [1.10.23] (1.10.27 Debian:testing) Conf dpkg (1.10.27 Debian:testing) Inst findutils [4.1.20-4] (4.1.20-6 Debian:testing) Conf findutils (4.1.20-6 Debian:testing) Inst grep [2.5.1.ds1-3] (2.5.1.ds1-4 Debian:testing) Conf grep (2.5.1.ds1-4 Debian:testing) Inst mount [2.12-7] (2.12-10 Debian:testing) Conf mount (2.12-10 Debian:testing) Inst perl-modules [5.8.4-2.2] (5.8.4-8 Debian:testing) Inst libdb4.2 [4.2.52-17] (4.2.52-18 Debian:testing) Inst perl [5.8.4-2.2] (5.8.4-8 Debian:testing) [] Inst perl-base [5.8.4-2.2] (5.8.4-8 Debian:testing) Conf perl-base (5.8.4-8 Debian:testing) Inst sed [4.1.2-1] (4.1.2-8 Debian:testing) Conf sed (4.1.2-8 Debian:testing) Inst sysvinit [2.86-1] (2.86.ds1-1 Debian:testing) Conf sysvinit (2.86.ds1-1 Debian:testing)

25

Inst Conf Inst Conf Inst Inst Inst Inst Inst Conf Conf Inst Inst Inst Conf Inst Inst Conf Conf Inst Conf Inst Conf Inst Conf Inst Conf Inst Conf Inst Conf Inst Inst Inst Inst Inst Inst Inst Inst Inst Inst Inst Inst Inst Inst Inst Inst Inst Inst Inst Inst Inst Inst Inst Inst Inst Inst Inst Inst Inst Inst Inst Inst Inst Inst Inst Inst

tar [1.13.93-4] (1.14-2 Debian:testing) tar (1.14-2 Debian:testing) util-linux [2.12-7] (2.12-10 Debian:testing) util-linux (2.12-10 Debian:testing) debconf-i18n [1.4.30.5] (1.4.30.13 Debian:testing) debconf [1.4.30.5] (1.4.30.13 Debian:testing) console-data [2002.12.04dbs-43] (2002.12.04dbs-49 Debian:testing) console-tools [1:0.2.3dbs-54] (1:0.2.3dbs-56 Debian:testing) [] libconsole [1:0.2.3dbs-54] (1:0.2.3dbs-56 Debian:testing) debconf-i18n (1.4.30.13 Debian:testing) debconf (1.4.30.13 Debian:testing) console-common [0.7.46] (0.7.49 Debian:testing) dash [0.5.1-3] (0.5.2-4 Debian:testing) libgcc1 [1:3.4.1-4sarge1] (1:3.4.3-12 Debian:testing) libgcc1 (1:3.4.3-12 Debian:testing) gcc-3.3-base [1:3.3.4-6sarge1.2] (1:3.3.5-8 Debian:testing) libstdc++5 [1:3.3.4-6sarge1.2] (1:3.3.5-8 Debian:testing) gcc-3.3-base (1:3.3.5-8 Debian:testing) libstdc++5 (1:3.3.5-8 Debian:testing) apt [0.5.27] (0.5.28.1 Debian:testing) apt (0.5.28.1 Debian:testing) dselect [1.10.23] (1.10.27 Debian:testing) dselect (1.10.27 Debian:testing) initscripts [2.86-1] (2.86.ds1-1 Debian:testing) initscripts (2.86.ds1-1 Debian:testing) slang1a-utf8 [1.4.9dbs-6] (1.4.9dbs-8 Debian:testing) slang1a-utf8 (1.4.9dbs-8 Debian:testing) sysv-rc [2.86-1] (2.86.ds1-1 Debian:testing) sysv-rc (2.86.ds1-1 Debian:testing) zlib1g [1:1.2.1.1-7] (1:1.2.2-3 Debian:testing) zlib1g (1:1.2.2-3 Debian:testing) adduser [3.59] (3.63 Debian:testing) bsdmainutils [6.0.15] (6.0.17 Debian:testing) cpio [2.5-1.1] (2.5-1.2 Debian:testing) groff-base [1.18.1.1-1] (1.18.1.1-7 Debian:testing) ifupdown [0.6.4-4.8] (0.6.4-4.12 Debian:testing) iptables [1.2.9-10] (1.2.11-8 Debian:testing) sysklogd [1.4.1-15] (1.4.1-16 Debian:testing) klogd [1.4.1-15] (1.4.1-16 Debian:testing) libpopt0 [1.7-4] (1.7-5 Debian:testing) libwrap0 [7.6.dbs-6] (7.6.dbs-8 Debian:testing) mailx [1:8.1.2-0.20040524cvs-1] (1:8.1.2-0.20040524cvs-4 Debian:testing) man-db [2.4.2-19] (2.4.2-21 Debian:testing) manpages [1.67-2] (1.70-1 Debian:testing) netkit-inetd [0.10-9] (0.10-10 Debian:testing) tcpd [7.6.dbs-6] (7.6.dbs-8 Debian:testing) netbase [4.18] (4.21 Debian:testing) nvi [1.79-21] (1.79-22 Debian:testing) libdb3 [3.2.9-20] (3.2.9-22 Debian:testing) makedev [2.3.1-75] (2.3.1-77 Debian:testing) module-init-tools [3.1-pre5-7] (3.2-pre1-2 Debian:testing) modutils [2.4.26-1] (2.4.26-1.2 Debian:testing) binutils [2.14.90.0.7-8] (2.15-5 Debian:testing) file [4.09-1] (4.12-1 Debian:testing) [] libmagic1 [4.09-1] (4.12-1 Debian:testing) gettext-base [0.14.1-5] (0.14.1-10 Debian:testing) libnewt0.51 [0.51.6-5] (0.51.6-20 Debian:testing) libssl0.9.7 [0.9.7d-4] (0.9.7e-3 Debian:testing) lsof [4.71-1] (4.74.dfsg.3-2 Debian:testing) ssh [1:3.8.1p1-8] (1:3.8.1p1-8.sarge.4 Debian:testing) telnet [0.17-24] (0.17-29 Debian:testing) whiptail [0.51.6-5] (0.51.6-20 Debian:testing) apt-utils [0.5.27] (0.5.28.1 Debian:testing) base-config [2.40.4] (2.53.7 Debian:testing) chkrootkit [0.43-1] (0.44-2 Debian:testing) dhcp-client [2.0pl5-19] (2.0pl5-19.1 Debian:testing) grub [0.95+cvs20040624-8] (0.95+cvs20040624-16 Debian:testing)

26

Inst initrd-tools [0.1.74] (0.1.78 Debian:testing) Inst iso-codes [0.40-1] (0.44-1 Debian:testing) Inst libsigc++-1.2-5c102 [1.2.5-1] (1.2.5-4 Debian:testing) Inst libusb-0.1-4 [1:0.1.8-16] (2:0.1.10a-6 Debian:testing) Inst thttpd [2.23beta1-2.5] (2.23beta1-3 Debian:testing) Inst tiger [1:3.2.1-14] (1:3.2.1-22 Debian:testing) Inst usbutils [0.11+cvs20040318-3] (0.70-5 Debian:testing) Inst wget [1.9.1-4] (1.9.1-8 Debian:testing) Conf libdb4.2 (4.2.52-18 Debian:testing) Conf perl (5.8.4-8 Debian:testing) Conf perl-modules (5.8.4-8 Debian:testing) Conf libconsole (1:0.2.3dbs-56 Debian:testing) Conf console-tools (1:0.2.3dbs-56 Debian:testing) Conf console-common (0.7.49 Debian:testing) Conf console-data (2002.12.04dbs-49 Debian:testing) Conf dash (0.5.2-4 Debian:testing) Conf adduser (3.63 Debian:testing) Conf bsdmainutils (6.0.17 Debian:testing) Conf cpio (2.5-1.2 Debian:testing) Conf groff-base (1.18.1.1-7 Debian:testing) Conf ifupdown (0.6.4-4.12 Debian:testing) Conf iptables (1.2.11-8 Debian:testing) Conf klogd (1.4.1-16 Debian:testing) Conf sysklogd (1.4.1-16 Debian:testing) Conf libpopt0 (1.7-5 Debian:testing) Conf libwrap0 (7.6.dbs-8 Debian:testing) Conf mailx (1:8.1.2-0.20040524cvs-4 Debian:testing) Conf man-db (2.4.2-21 Debian:testing) Conf manpages (1.70-1 Debian:testing) Conf netkit-inetd (0.10-10 Debian:testing) Conf tcpd (7.6.dbs-8 Debian:testing) Conf netbase (4.21 Debian:testing) Conf nvi (1.79-22 Debian:testing) Conf libdb3 (3.2.9-22 Debian:testing) Conf makedev (2.3.1-77 Debian:testing) Conf module-init-tools (3.2-pre1-2 Debian:testing) Conf modutils (2.4.26-1.2 Debian:testing) Conf binutils (2.15-5 Debian:testing) Conf libmagic1 (4.12-1 Debian:testing) Conf file (4.12-1 Debian:testing) Conf gettext-base (0.14.1-10 Debian:testing) Conf libnewt0.51 (0.51.6-20 Debian:testing) Conf libssl0.9.7 (0.9.7e-3 Debian:testing) Conf lsof (4.74.dfsg.3-2 Debian:testing) Conf ssh (1:3.8.1p1-8.sarge.4 Debian:testing) Conf telnet (0.17-29 Debian:testing) Conf whiptail (0.51.6-20 Debian:testing) Conf apt-utils (0.5.28.1 Debian:testing) Conf base-config (2.53.7 Debian:testing) Conf chkrootkit (0.44-2 Debian:testing) Conf dhcp-client (2.0pl5-19.1 Debian:testing) Conf grub (0.95+cvs20040624-16 Debian:testing) Conf initrd-tools (0.1.78 Debian:testing) Conf iso-codes (0.44-1 Debian:testing) Conf libsigc++-1.2-5c102 (1.2.5-4 Debian:testing) Conf libusb-0.1-4 (2:0.1.10a-6 Debian:testing) Conf thttpd (2.23beta1-3 Debian:testing) Conf tiger (1:3.2.1-22 Debian:testing) Conf usbutils (0.70-5 Debian:testing) Conf wget (1.9.1-8 Debian:testing) hardened:~#

Como podemos ver, la lista de actualizaciones es bastante grande. Un caso particular son los paquetes resaltados, que han tenido algn problema de dependencias, y no podrn ser actualizados. Para ello, deberemos actualizarlos 27

manualmente, mediante el comando apt-get install [paquete], o bien utilizando el comando apt-get dist-upgrade, teniendo en cuenta que para esta ltima opcin ser conveniente revisar qu paquetes nuevos se instalarn para satisfacer las dependencias. Para el resto de las actualizaciones, procederemos mediante la actualizacin habitual. hardened:~# apt-get upgrade Con este ltimo paso podemos considerar que hemos finalizado la instalacin 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 Backup completo del sistema.

Mantenimiento
El sistema que acabamos de instalar no est terminado, ya que evolucionar con el tiempo. Seguramente se le incorporar, quitar o modificar algn servicio o alguna configuracin. Por este motivo, habr que tener en cuenta los conceptos de esta gua durante toda la vida del servidor. En particular, no debemos olvidarnos de realizar las actualizaciones de seguridad como se describe en la seccin anterior.

Otras Tareas y Herramientas


En esta seccin describiremos algunas herramientas que pueden colaborar con la tarea de mantener seguro el servidor.

Backup
Dentro de las tareas de mantenimiento, se encuentra la realizacin de backups peridicos del equipo. La discusin sobre los diferentes mtodos existentes puede ser muy amplia. Sin embargo presentamos algunas recomendaciones para su ejecucin: v Para realizar backup de muchos equipos de manera combinada, ser necesario contar con un buen gestor de archivos de respaldo. Lamentablemente, no hay ningn sistema de backup multiplataforma conveniente que sea libre. Pero si nos restringimos a un ambiente Linux, amanda es una opcin. v La practicidad de las cintas nunca ser superada por los medios pticos (a menos que estos crezcan en capacidad ms de lo que lo han hecho en los ltimos aos), o poseamos un intercambiador de CDs de gran capacidad. 28

v Es recomendable realizar backups full de manera peridica, e intercalarlos con backups parciales. v Para que un backup sea til, es indispensable que pueda ser recuperado. Y para estar seguros que nuestro juego de backups es til, es indispensable que la poltica de backup incluya testing de los mismos. v Considerar la posibilidad de guardar copias de los backups en sitios remotos, para contingencias mayores. v Tener en cuenta que la sensibilidad de la informacin contenida en una cinta de backup es igual a la informacin ms sensible que haya sido almacenada, por lo que habr que tomar los recaudos del caso. v Los mtodos ms comunes de backup en GNU/Linux son utilizar tar, cpio, o dump. Si no utilizamos un gestor de backup, dump es una opcin muy interesante por su manejo de niveles para copias incrementales y su integracin con el sistema de archivos ext2. Como desventajas, tiene su lentitud, y que no es compatible con todas las opciones de filesystem existentes. v La nica forma de obtener una imagen exacta del disco, con la certeza de que no contendr ningn tipo de inconsistencia, ni a nivel lgico del disco, ni a nivel transaccional de las aplicaciones, es realizar backups offline.

Bastille Linux
Esta herramienta, con bastante historia en GNU/Linux, consiste en una serie de preguntas que habr que responder, para luego automatizar varias de las tareas que hemos realizado en este manual, y algunas otras que no hemos cubierto. Se recomienda utilizar el mismo como una gua para ayudar a estas tareas, pero nunca para reemplazar la inspeccin personal de las mismas. Para instalar esta herramienta, al igual que con todos los paquetes, realizaremos la siguiente operacin: hardened:~# apt-get install bastille Luego de finalizada la instalacin, podemos ejecutar el modo interactivo mediante el siguiente comando: hardened:~# InteractiveBastille A continuacin, se nos presentarn una serie de preguntas sobre las tareas a realizar, con una explicacin de sus efectos posteriores. Por ejemplo, en la Figura 10 se observa a la aplicacin consultando sobre la deshabilitacin del bit SUID en diversos programas.

29

Figura 10 - Bastille

Paquetes Harden
Los paquetes Harden de Debian son una serie de paquetes que, al igual que Bastille Linux, nos ayudarn a asegurar un sitio, pero no reemplazarn una buena configuracin. Entre otros, podemos encontrar harden-tools, que incluye algunas herramientas como el Tiger, harden-doc, con documentacin sobre seguridad, y harden-servers, harden-clients, harden-remoteflaws y harden-localflaws, que eliminan o limitan la instalacin de paquetes con conocidos problemas de seguridad.

Sudo
En la seccin Administracin remota mencionamos la herramienta su para elevar los privilegios de un usuario. Una alternativa interesante que permite tener un control mucho ms estricto sobre las tareas que realizan los usuarios que requieran privilegios administrativos es sudo. Con esta herramienta podremos configurar: v Qu usuarios pueden elevar sus privilegios (o simplemente ejecutar acciones como otros usuarios). v Qu tareas pueden realizar. v Si necesitan ingresar un password, y si es el suyo propio o el del usuario impersonado. v Restricciones horarias. v Lugar desde donde est conectado el usuario. v Registro de las acciones realizadas.

30

Y mucho ms.

Auditora interna
Una aplicacin interesante para revisar la seguridad de nuestro servidor es Tiger. Esta herramienta realiza diversas verificaciones sobre la configuracin y el estado de varios elementos del sistema operativo. La forma ms recomendada para su instalacin es junto con algunos paquetes auxiliares:
hardened:~# apt-get install binutils chkrootkit lsof file libmagic1 tiger

Con su instalacin por defecto, Tiger realizar diariamente las verificaciones y enviar un reporte de los problemas encontrados. Al igual que con las verificaciones de integridad y logs que mencionamos ms adelante, ser conveniente arbitrar los medios necesarios para que dicho reporte sea enviado a un equipo remoto con las medidas de seguridad del caso. La opcin ms comn para este tipo de reportes es el envo por mail, pero tambin podran utilizarse otros medios ms seguros, como por ejemplo lneas seriales unidireccionales. A continuacin mostramos un ejemplo de un reporte enviado por esta herramienta.
Security scripts *** 3.2.1, 2003.10.10.18.00 *** Thu Apr 21 13:51:44 ART 2005 13:51> Beginning security report for localhost.localdomain (i686 Linux 2.6.8-1686-smp). # Performing check of passwd files... # Checking entries from /etc/passwd. --WARN-- [pass014w] Login (backup) is disabled, but has a valid shell. --WARN-- [pass014w] Login (list) is disabled, but has a valid shell. --WARN-- [pass014w] Login (nobody) is disabled, but has a valid shell. --WARN-- [pass006w] Integrity of password files questionable (/usr/sbin/pwck -r). # Checking the format of passwd and group files. --FAIL-- [pass009e] Group Debian-exim has more than 8 characters. --FAIL-- [pass009e] Login Debian-exim has more than 8 characters. # Performing check of group files... # Performing check of user accounts... # Checking accounts from /etc/passwd. --WARN-- [acc022w] Login ID nobody home directory (/nonexistent) is not accessible. --WARN-- [acc023w] Login ID oper's parent directory (/home/) has group `staff' write access. --WARN-- [acc021w] Login ID sshd appears to be a dormant account. # Performing check of /etc/hosts.equiv and .rhosts files... # Checking accounts from /etc/passwd... # Performing check of .netrc files... # Checking accounts from /etc/passwd...

31

# Performing common access checks for root (in /etc/default/login, /securetty, and /etc/ttytab... --WARN-- [root001w] Remote root login allowed in /etc/ssh/sshd_config # Performing check of PATH components... # Only checking user 'root' # Performing check of anonymous FTP... # Performing checks of mail aliases... # Checking aliases from /etc/aliases. # Performing check of `cron' entries... --WARN-- [cron004w] Root crontab does not exist # Performing check of 'inetd'... # Checking inetd entries from /etc/inetd.conf # Performing check of services with tcp wrappers... # Analysing inetd entries from /etc/inetd.conf # Performing check of 'services' ... # Checking services from /etc/services. --WARN-- [inet003w] The port for service postgres is also assigned to service postgresql. --WARN-- [inet003w] The port for service postgres is also assigned to service postgresql. # Performing NFS exports check... # Performing check of system file permissions... # Checking for known intrusion signs... # Testing for promiscuous interfaces with /sbin/ifconfig # Testing for backdoors in inetd.conf # Performing check of files in system mail spool... # Performing check for rookits... # Running chkrootkit (/usr/sbin/chkrootkit) to perform further checks... --WARN-- [rootkit004f] Chkrootkit has detected a possible rootkit installation Warning: Possible LKM Trojan installed # Performing system specific checks... # Performing checks for Linux/2... # Checking for single user-mode password... # Checking boot loader file permissions... --WARN-- [boot02] The configuration file grub.conf has group permissions. Should be 0600 --FAIL-- [boot02] The configuration file grub.conf has world permissions. Should be 0600 # Checking for vulnerabilities in inittab configuration... # Checking for correct umask settings for init scripts... # Checking Logins not used on the system ... # Checking network configuration # Checking OS release... # Checking installed packages vs Debian Security Advisories... # Checking md5sums of installed files

32

# Checking installed files against packages... --WARN-- [lin001w] File `/usr/sbin/ssh' does not belong to any package. # Performing check of root directory... # Checking device permissions... --WARN-- [dev003w] File /dev/core is a regular file in a device directory. --WARN-- [dev003w] The directory /dev/i2o resides in a device directory. --FAIL-- [dev002] /dev/log has world permissions --WARN-- [dev003w] The directory /dev/shm resides in a device directory. --WARN-- [dev003w] File /dev/stdout is a regular file in a device directory. # Checking for existence of log files... --FAIL-- [logf005f] Log file /var/log/btmp permission should be 660 --FAIL-- [logf005f] Log file /var/log/messages permission should be 640 # Checking for correct umask settings... # Checking listening processes --WARN-- [lin002i] The process `dhclient' is listening on socket 68 (UDP) on every interface. --WARN-- [lin003w] The process `exim4' is listening on socket 25 (TCP on loopback interface) is run by Debian-exim. --WARN-- [lin002i] The process `sshd' is listening on socket 22 (TCP) on every interface. # Checking sshd_config configuration files... # Checking printer configuration files... --ERROR-- [init006e] `/etc/printcap' does not exist (file src). --ERROR-- [init006e] `/etc/printcap' does not exist (file infile). # Performing common access checks for root... --FAIL-- [netw020f] There is no /etc/ftpusers file. # Checking ntpd configuration... # Checking setuid executables... --WARN-- [fsys002w] setuid program /usr/sbin/exim4 has relative pathnames. -rwsr-xr-x root root /usr/sbin/exim4

# Checking setgid executables... # Checking unusual file names... # Looking for unusual device files... # Checking symbolic links... # Checking for writable directories... --INFO-- [fsys008i] The following directories are world writable: /dev/shm/ /var/lock/ /var/log/debian-installer/cdebconf/ # Performing check of embedded pathnames... 13:53> Security report completed for localhost.localdomain.

Integridad
Cmo podemos descubrir si eventualmente el equipo resulta comprometido?

33

Un excelente mtodo es verificar la integridad de los archivos existentes en el sistema de archivos. Existen varias herramientas para realizar esta tarea: v Tripwire, prcticamente la ms antigua de todas (slo de uso libre para Linux, y bajo ciertas condiciones de licenciamiento) v Integrit. v 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 no resulta prctica la herramienta. v AIDE, o Advanced Intrusion Detection Environment, actualmente una de las ms usadas y recomendables para su uso. En general estas herramientas proveen varias opciones de verificacin, incluyendo hashes con uno o ms algoritmos criptogrficos, verificacin de MAC time (Modificacin, Acceso y Creacin), permisos, tamao, etc. Todas proveen una configuracin de ejemplo (en el caso de AIDE, /etc/aide/aide.conf) que servir de punto de partida para una configuracin adecuada al sistema que acabamos de instalar. Algunas de las cosas que habr que modificar seguramente incluirn: v Ni /etc, donde se encuentran todos los archivos de configuracin, ni /boot, donde se encuentran los archivos de inicio del sistema operativo, estn contemplados en el archivo de ejemplo. v /var/log tiene algunas configuraciones especficas, que seguramente causarn varios falsos positivos si la actividad de nuestro host modifica los logs constantemente. v /home slo est contemplado como un ejemplo. Si el sistema posee muchos usuarios independientes, seguramente querremos verificar como mucho que no cambie el dueo (owner) de los archivos. Si no tiene usuarios adems del administrador, vamos a querer observar cualquier tipo de cambio. Un buen mtodo para ajustar la configuracin es agregar todos los directorios dependientes del raz faltantes (/boot, /home/, etc.) con todas las verificaciones posibles, e ir ajustndolas a medida que recibimos las alertas. Como mencionamos en caso de la auditora interna, ser conveniente que los reportes de estas verificaciones sean recibidos en un host remoto, donde se tenga la seguridad de que podrn ser recuperados en caso de una intrusin intente borrarlos. Adems, para el caso de las verificaciones de integridad de los archivos, todos los mtodos se basan en la creacin de una base de datos con el estado inicial del sistema, y la posterior comparacin con sta. Si queremos que esta verificacin sea efectiva, y no pueda ser falseada durante una intrusin, deberemos montar la base de datos en un dispositivo de slo lectura. Por ejemplo, en un CD-ROM (o alguna clase de dispositivo al que se le pueda

34

bloquear la escritura por hardware: un disquete, un pen-drive, una tarjeta flash, etc.).

NTP
En las ltimas secciones insistimos en la importancia de enviar a un host remoto y seguro los mensajes generados por el sistema. La nica manera de correlacionar los eventos que observemos en diferentes equipos, ser si sus relojes estn perfectamente sincronizados. Por ello, es recomendable establecer un esquema de sincronizacin de relojes utilizando el protocolo NTP.

Firewall
Una herramienta que no mencionamos durante la instalacin y el aseguramiento, pero que es casi obligatoria en cada host, es el firewall, muchas veces llamado personal firewall. 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 configuracin, una opcin es utilizar la herramienta shorewall, que si bien los ejemplos estn pensados para un firewall en el sentido clsico (un gateway con filtrado de paquetes), es perfectamente adaptable al uso como firewall personal.

Otras fuentes de informacin


Para obtener ms informacin sobre seguridad en la distribucin Debian: http://www.debian.org/doc/manuals/securing-debian-howto/. El manual completo de instalacin de Debian puede obtenerse en: http://www.debian.org/releases/sarge/installmanual.

35

CheckList
A continuacin, se incluye un resumen de las tareas descriptas en este documento, a modo de lista de verificacin para el aseguramiento de un servidor. Pre-instalacin Restringir el acceso a consola. Aislar de la red. Deshabilitar puertos innecesarios. Deshabilitar dispositivos de almacenamiento, salvo el de boot. Seleccin de dispositivo de boot. Configurar password para cambios al BIOS. Instalacin Particionado. Opciones de montado (nodev, nosuid y noexec). Creacin de usuario/s no privilegiado/s. Seleccin de paquetes: mnima. Ajuste de opciones de boot en el BIOS (quitar CD-Rom). Configuracin Password y restricciones en el boot-loader. Desinstalacin de paquetes innecesarios. Ajuste para la correcta deteccin de hardware (mdulos). Inspeccin y deshabilitado de servicios innecesarios. Ajuste /etc/fstab. Instalacin de paquetes (servicios a brindar por el host). Ajuste de propiedades de los usuarios (shell). Eliminacin de suid en ejecutables. Ajustes sysctl (/proc/sys). Deshabilitacin de CTR-ALT-DEL. Restringir el uso de crontab. Instalacin y ajuste de SSH Slo versin 2. Restriccin de acceso (/etc/hosts.deny y hosts.allow) Restringir login como root. Restriccin del uso de su (wheel). Actualizacin de paquetes. Otras tareas y herramientas Backup. Hardening extra automatizado (Bastille Linux, paquetes harden). 36

Sudo. Autitora interna e integridad (Tiger, AIDE) Logs y reportes remotos. Sincronizacin de relojes. Firewall.

Mantenimiento Backup Revisin de logs.

37

Anda mungkin juga menyukai