kevin@scrye.com
& Dave Wreski,
dave@nic.com
mtgfx@correo.rcanaria.es
Este documento abarca algunas de las principales cuestiones que afectan a la seguridad de Linux. Se discute la filosofía general y los recursos nacidos en la red.
Otros muchos documentos COMO tocan cuestiones de seguridad y a esos documentos se apunta cuando es conveniente.
Este documento no pretende ser un documento actualizado sobre exploits. Constantemente ocurren gran cantidad de nuevos exploits. Este documento te dirá dónde buscar esa información actualizada y dará algunos métodos generales para impedir que tengan lugar tales exploits.
Periódicamente se insertarán nuevas versiones de este documento en comp.os.linux.answers. También se añadirán a los diversos sitios FTP anónimos que archivan esta información, incluyendo:
ftp://metalab.unc.edu/pub/Linux/docs/HOWTO
Además, normalmente puedes encontrar este documento en la página home de Linux en la World Wide Web:
http://metalab.unc.edu/mdw/linux.html
Por último, la versión más reciente de este documento estará disponible en diversos formatos en:
Nota de la traductora:
La versión traducida al castellano de este HOWTO, la pueden encontrar tanto
en http://lucas.hispalinux.es/
como
en las páginas web del Grupo de Usuarios de Linux de Canarias, en http://www.gulic.org/cosecha/Teresa/
Todos los comentarios, informes de error, información adicional y críticas de todo tipo deben dirigirse a:
y
Nota: Por favor, envía tus respuestas a ambos autores. También asegúrate de incluir "Linux", "security" o "HOWTO" en el asunto para evitar el filtro de spam de Kevin.
No se puede aceptar ninguna responsabilidad por los contenidos de este documento. El uso de los conceptos, los ejemplos y otro contenido es a riesgo propio. Además, esta es una primera versión, posiblemente con muchas inexactitudes o errores.
Muchos ejemplos y descripciones usan el paquete básico y la configuración de sistema RedHat(tm). Tus resultados pueden ser distintos.
Hasta donde sabemos, sólo se describen programas que, bajo ciertas condiciones, pueden ser usados o evaluados con fines personales. La mayoría de los programas estarán disponibles, completos con la fuente, en las condiciones de GNU.
Este documento está protegido de copia (c)1998,1999 Kevin Fenzi and Dave Wreski, y se distribuye bajo las siguientes condiciones:
Este documento intentará explicar algunos de los procedimientos y el software generalmente usados para ayudar a tu sistema Linux a ser más seguro. Antes de comenzar, es importante discutir primero algunos conceptos básicos y crear una base de seguridad.
En el siempre cambiante mundo de las comunicaciones globales de datos, las conexiones baratas a Internet y el desarrollo de software de consumo rápido, la seguridad se está convirtiendo cada vez más en un problema. Ahora la seguridad es un requisito básico porque la computación global es inherentemente insegura. Cuando tus datos van desde el punto A al punto B sobre Internet, por ejemplo, pueden pasar a través de diversos otros puntos por el camino, dando a otros usuarios la oportunidad de interceptarlos e incluso de alterarlos. Además, otros usuarios de tu sistema de forma maliciosa pueden transformar tus datos en algo que tú no pretendes. Los intrusos, también conocidos como "crackers", pueden obtener acceso no autorizado a tu sistema y entonces usar conocimientos avanzados para hacerse pasar por tí, robarte información o incluso denegarte el acceso a tus propios recursos. Si te estás preguntando cuál es la diferencia entre un "Hacker" y un "Cracker", ver el documento de Eric Raymond, "How to Become A Hacker", disponible en http://sagan.earthspace.net/~esr/faqs/hacker-howto.html.
En primer lugar, hay que tener en cuenta que ningún sistema de computadores puede ser "completamente seguro". Todo lo que se puede hacer es que cada vez le sea más difícil a alguien comprometer tu sistema. Para el usuario doméstico medio de Linux, no se requiere mucho para mantener a raya al cracker casual. Para los usuarios de Linux de perfil alto (bancos, compañías de telecomunicaciones, etc), se requiere mucho más trabajo.
Otro factor a tomar en cuenta es que mientras más seguro sea tu sistema, más intrusiva se convierte su seguridad. Necesitas decidir el punto de equilibrio en el que tu sistema seguirá siendo usable al tiempo que seguro para tus propósitos. Por ejemplo, puedes exigir a todo el que llama a tu sistema que use un modem de devolución de llamadas para rellamarlos a su número de casa. Esto es más seguro, pero si alguien no está en casa, se les hace difícil conectar. Se puede también establecer la configuración de tu sistema Linux sin red o sin conexión a Internet, pero esto limita su utilidad.
Si estás en un sitio de tamaño medio a grande, debes definir una política de seguridad estableciendo cuánta seguridad se requiere en ese sitio y qué auditorías hay que poner en marcha para comprobarla. Se puede encontrar un ejemplo bien conocido de política de seguridad en http://ds.internic.net/rfc/rfc2196.txt. Ha sido recientemente puesta al día y contiene un buen marco para establecer una política de seguridad para tu empresa.
Antes de intentar asegurar tu sistema, debes delimitar contra qué nivel de amenaza tienes que protegerlo, qué riesgos debes o no debes asumir y cuán vulnerable resultará tu sistema. Debes analizar tu sistema para conocer qué estás protegiendo, por qué lo estás protegiendo, qué valor tiene y quién tiene responsabilidad sobre sus datos y otros activos.
Además, tener una cuenta insegura en tu sistema puede dar como resultado
que toda tu red se vea comprometida. Si permites a un sólo usuario conectarse
usando un archivo .rhosts
, o usar un servicio inseguro, tal como
tftp
, te arriesgas a que un intruso meta 'un pie en la puerta'.
Una vez que el intruso tiene una cuenta de usuario en tu sistema, o en el
sistema de cualquier otro, puede usarla para lograr acceso a otro sistema u
otra cuenta.
Hay diversos tipos de intrusos y es útil tener en mente sus diferentes características a la hora de asegurar tus sistemas.
¿Qué es lo que está en juego si alguien irrumpe en tu sistema? Por supuesto, los intereses de un usuario doméstico PPP dinámico serán diferentes de los de una empresa que conecta su máquina a Internet u otra gran red.
¿Cuánto tiempo llevaría recuperar/recrear los datos perdidos? Una inversión inicial de tiempo ahora puede ahorrar diez veces más tiempo después si se tienen que recrear los datos perdidos. ¿Has comprobado tu estrategia de copias de seguridad y verificado tus datos últimamente?
Has de crear una política simple y genérica para tu sistema, que sus usuarios puedan fácilmente entender y seguir. Debe proteger los datos que estás salvaguardando así como la privacidad de los usuarios. Algunas cosas a considerar para añadir son: quién tiene acceso al sistema (¿puede mi amigo usar mi cuenta?), quién tiene permitido instalar software en el sistema, quién posee qué datos, la recuperación de desastres y el uso apropiado del sistema.
Una política de seguridad generalmente aceptada comienza con la frase
Lo que no está permitido está prohibido
Esto significa que, a menos que tú concedas acceso a un servicio a un usuario, este usuario no podrá usar ese servicio hasta que tú le des acceso. Asgúrate de que las políticas funcionan en tu cuenta regular de usuario. Decir: "Ah, no puedo resolver este problema de permisos, lo haré como root" te puede llevar a agujeros de seguridad que son muy obvios, e incluso a algunos que no han sido explotados todavía.
rfc1244 es un documento que describe cómo crear tu política de seguridad en tu propia red.
rfc1281 es un documento que muestra un ejemplo de política de seguridad con descripciones detalladas de cada paso.
Por último, podrías querer echar un vistazo al archivo de política del COAST en ftp://coast.cs.purdue.edu/pub/doc/policy para ver a qué se parecen algunas políticas de seguridad de la vida real.
Este documento discutirá diversos medios con los cuales puedes asegurar las cosas por las que has estado trabajando duro: tu equipo local, tus datos, tus usuarios, tu red e incluso tu reputación. ¿Qué le sucedería a tu reputación si un intruso borrara datos de algunos de tus usuarios? ¿O deformara tu sitio web? ¿O publicara el plan de proyecto corporativo para el próximo cuatrimestre de tu empresa? Si estás planificando la instalación de una red, hay muchos factores que debes tomar en cuenta antes de añadir una sola máquina a tu red.
Aunque tengas una sola cuenta telefónica PPP, o sólo un pequeño sitio, esto no significa que los intrusos no estén interesados en tus sistemas. Los sitios grandes y de perfil alto no son los únicos objetivos -- muchos intrusos simplemente quieren reventar tantos sitios como les sea posible, sin que importe su tamaño. Además, pueden usar un agujero de seguridad en tu sitio para lograr acceso a otros sitios a los que estás conectado.
Los intrusos tienen un montón de tiempo y pueden eludir averiguar cómo has oscurecido tu sistema intentando todas las posibilidades. Hay también otras muchas razones por las que un intruso puede estar interesado en tu sistema, que se discutirán después.
Quizás el área de seguridad sobre la cual los administradores se concentran más es la seguridad base del host. Por lo general esto implica estar seguro de que tu propio sistema es seguro, y esperar que cualquier otro de tu red haga lo mismo. Elegir buenas contraseñas, asegurar los servicios de red local del host, mantener buenos registros de las cuentas y mejorar los programas con exploits de seguridad conocidos, están entre las cosas que el administrador de seguridad local tiene la responsabilidad de hacer. Aunque esto es completamente necesario, puede convertirse en una tarea desalentadora desde que tu red sea mayor de unas cuantas máquinas.
La seguridad de la red es tan necesaria como la seguridad del host local. Con cientos, miles o más computadores en la misma red, no puedes confiar en que cada uno de estos sistemas sea seguro. Asegurarte de que sólo los usuarios autorizados pueden usar tu red, construir cortafuegos, usar encriptación fuerte y asegurarte de que no haya máquinas "rogue" (esto es, inseguras) en tu red, son parte los deberes de un administrador de seguridad de red.
Este documento discutirá algunas de las técnicas usadas para asegurar tu sitio y esperamos enseñarte algunas maneras de impedir a un intruso lograr acceso a lo que estás tratando de proteger.
Un tipo de seguridad que debe ser discutida es la "seguridad mediante oscuridad". Esto quiere decir, por ejemplo, mover un servicio vulnerable en seguridad a un puerto no estándar con la esperanza de que los atacantes no se den cuenta de que está ahí y así no lo exploten. Ten por seguro que pueden determinar que está ahí y lo explotarán. La seguridad mediante oscuridad no es seguridad en absoluto. Simplemente porque tengas un pequeño sitio, o un perfil relativamente bajo, no significa que un intruso no pueda estar interesado en lo que tienes. Discutiremos lo que estás protegiendo en las siguientes secciones.
Este documento se ha dividido en secciones que cubren diversas cuestiones amplias de seguridad. La primera, Seguridad Física, abarca cómo necesitas proteger tu equipo físico de la intromisión. La segunda, Seguridad Local, describe cómo proteger tu sistema de intromisiones de los usuarios locales. La tercera, Seguridad de Ficheros y Sistemas de Ficheros, te enseña a configurar tus sistemas de ficheros y los permisos sobre tus ficheros. La siguiente, Seguridad de Contraseñas y Encriptación, discute cómo usar la encriptación para asegurar mejor tu equipo y tu red. Seguridad del núcleo discute las opciones de núcleo que debes configurar o tener en cuenta para tener un sistema seguro. Seguridad de la red, describe cómo asegurar mejor tu sistema Linux de ataques a la red. Preparación para la Seguridad, discute cómo preparar tu(s) equipo(s) antes de ponerlos en línea. Después, ¿Qué hacer durante y después de una Ruptura, discute qué hacer cuando detectas que está ocurriendo algo que compromete al sistema o detectas que ha ocurrido recientemente. En Recursos de Seguridad, se enumeran algunos recursos básicos de seguridad. La sección P y R Preguntas Frecuentemente Hechas, responde algunas preguntas frecuentemente realizadas y, finalmente, una sección de conclusión en Conclusión.
Los dos principales puntos a tener presente cuando se lea este documento son:
/var/log/messages
y mantén el ojo sobre tu sistema.
El primer escalón de seguridad que se necesita tener en cuenta es la seguridad física de tus sistemas de computadores. ¿Quién tiene acceso físico directo a tu equipo? ¿Debe tenerlo? ¿Puedes proteger tu equipo de su entrometimiento? ¿Debes hacerlo?
Cuánta seguridad física necesitas en tu sistema depende mucho de tu situación y/o presupuesto.
Si eres un usuario doméstico, probablemente no necesites mucha (aunque podrías necesitar proteger tu equipo de la intromisión de niños o parientes fastidiosos). Si estás en un laboratorio, necesitas considerablemente más, pero los usuarios aún necesitan poder obtener el trabajo hecho con las máquinas. Muchas de las siguientes secciones te ayudarán con esto. Si estás en una oficina, puedes o no necesitar asegurar tu máquina algunas horas o mientras estás fuera. En algunas empresas, dejar tu consola sin asegurar es causa de despido.
Los métodos obvios de seguridad física tales como cierres de puertas, cables, cabinas cerradas y vigilancia por vídeo son todas buenas ideas, pero están más allá del alcance de este documento. :)
Muchas carcasas de los modernos PCs incluyen una opción de "cierre". Normalmente será una cerradura en el frente de la carcasa que te permite girar la llave que trae a una posición abierta o cerrada. El cierre de la carcasa puede ayudar a impedir que alguien te robe tu PC, o que abra la carcasa y manipule/robe directamente tu hardware. A veces también impide que alguien reinicie tu computador con su propio diskette u otro hardware.
Estos cierres de carcasa hacen cosas diferentes según el soporte en la placa base y de cómo esté construída la carcasa. En muchos PCs lo hacen de modo que hay que romper la carcasa para abrirla. En otros, lo hacen de modo que no te permite enchufar en ella nuevos teclados y ratones. Comprueba tu placa base o las instrucciones de la carcasa para más información. A veces esta puede ser una característica muy útil, aún cuando los cierres normalmente son de muy baja calidad y pueden ser vencidos fácilmente por atacantes con conocimientos de cerrajería.
Algunas carcasas (más notablemente las de SPARC y mac) tienen una mochila por detrás que, si pones un cable alrededor, los atacantes tendrán que cortar el cable o romper la caja para entrar. El mero hecho de poner una cerradura o un cierre de combinación, puede ser un buen elemento disuasorio para alguien que intente robar tu equipo.
El BIOS es el nivel más bajo de software que configura o manipula tu hardware para x86. LILO y otros métodos de inicio de Linux acceden al BIOS para determinar cómo iniciar tu equipo Linux. Otro hardware que se ejecuta en Linux tiene un software similar (OpenFirmware en Macs y los nuevos Suns, el inicio de Sun PROM, etc...). Puedes usar tu BIOS para impedir que los atacantes reinicien tu equipo y manipulen tu sistema Linux.
Muchos BIOS de PC permiten poner una contraseña de inicio. Esto no proporciona mucha seguridad (el BIOS se puede reconfigurar, o quitarse, si alguien entra en la caja), pero podría ser un buen elemento disuasorio (esto es, lleva tiempo y deja huellas de la intrusión). De modo similar, en S/Linux (Linux para las máquinas procesadoras SPARC(mr)), tu EEPROM puede configurarse para pedir una contraseña de inicio. Esto podría tumbar a los atacantes torpes.
Muchos BIOS de x86 también permiten especificar otras diversas configuraciones de seguridad buenas. Comprueba tu manual de BIOS o míralas la próxima vez que inicies. Por ejemplo, algunos BIOS no permiten iniciar desde unidades de discos floppy y algunos requieren contraseñas para acceder a algunas características del BIOS.
Nota: Si tienes un equipo servidor y estableces una contraseña de inicio, tu equipo no se iniciará sin atención. Recuerda que necesitarás venir y entrar la contraseña en el caso de un fallo de energía. ;(
Los distintos cargadores de inicio de Linux pueden tener también un juego de
contraseña de inicio. LILO, por ejemplo, tiene password
y
restricted
; password
requiere siempre la contraseña en
el momento del inicio, mientras que restricted
requiere una
contraseña para inicio sólo si se especifican algunas opciones (tales como
single
) en el indicador de LILO
.
Ten presente cuando establezcas todas estas contraseñas que necesitarás recordarlas. :) Recuerda también que estas contraseñas meramente retrasarán al atacante resuelto. No impedirán a alguien iniciar desde un floppy y montar tu partición de root. Si vas a usar seguridad junto con el cargador de inicio, podrías también desactivar el inicio desde un floppy en el BIOS de tu computador y proteger el BIOS con contraseña.
Si alguien tiene información relacionada con la seguridad desde un cargador
de inicio diferente, nos encantaría oirla. (grub
,
silo
, milo
, linload
, etc).
Nota: Si tienes un equipo servidor y estableces una contraseña de inicio, tu equipo no se iniciará sin atención. Recuerda que necesitaras venir y poner la contraseña en el caso de un fallo de corriente. ;(
Si te alejas de tu máquina de vez en cuando, es bueno poder "cerrar" tu
consola para que nadie la asalte o mire tu trabajo. Dos programas que hacen esto
son: xlock
y vlock
.
xlock
es un cierre X de presentación en pantalla. Debe estar
incluido en todas las distribuciones de Linux que soporten X. Comprueba la
página correspondiente del manual para más opciones, pero en general puedes
ejecutar xlock
desde cualquier terminal x de tu consola y se
cerrará la pantalla, que requerirá tu contraseña para abrirse.
vlock
es un programita simple que te permite cerrar algunas o
todas las consolas virtuales en tu sistema Linux. Puedes cerrar sólo aquella en
la que estás trabajando o todas. Si sólo cierras una, otros pueden entrar y usar
la consola; no podrán usar tu consola virtual hasta que la abras.
vlock
viene con Linux Redhat, pero tus resultados pueden ser
diferentes.
Cerrar la consola impedirá a alguien entrometerse en tu trabajo, pero desde luego no le impedirá reiniciar tu equipo o estropear de otro modo tu trabajo. Tampoco le impedirá acceder a tu equipo desde otra equipo en la red y causar problemas.
Más importante, no impide a alguien desconectar completamente el Sistema X Window, ir al indicador de conexión de una consola virtual normal, o al VC desde el cual se arrancó el X11, suspenderlo y así obtener tus privilegios. Por esta razón, deberías considerar usarlo sólo bajo control de xdm.
La primera cosa a comprobar siempre es cuándo fue reiniciado tu equipo. Dado que Linux es un sistema operativo (SO) robusto y estable, las únicas veces que tu equipo debe reiniciarse es cuando tú lo desmontas para mejoras en el SO, recambios de hardware o cosas así. Si tu equipo ha sido reiniciado sin tú hacerlo, eso puede ser un signo de que un intruso lo ha puesto en peligro. Muchos de los modos en que tu equipo puede verse comprometido requieren que el intruso reinicie o apague el equipo.
Comprueba los signos de intrusión en la carcasa y el área del computador. Aunque muchos intrusos limpian las huellas de su presencia de los logs, es una buena idea comprobarlos todos y anotar cualquier discrepancia.
También es una buena idea almacenar los datos de log en un lugar seguro, tal como un servidor dedicado a log dentro de tu red bien protegida. Una vez que un equipo ha estado comprometido, los datos de log serán de poca utilidad porque lo más probable es que también hayan sido modificados por el intruso.
El demonio syslog puede ser configurado para enviar automáticamente datos de log a un servidor central de syslog, pero normalmente se envían datos en texto plano, permitiendo a un intruso ver los datos cuando están siendo transferidos. Esto puede revelar información sobre tu red que no quieres que sea pública. Hay disponibles demonios syslog que encriptan los datos cuando se están enviando.
Sé consciente también de que falsificar mensajes de syslog es fácil - con un programa de exploit que haya sido publicado. Syslog incluso acepta entradas de log de red que dicen venir del host local sin indicar su origen verdadero.
Algunas cosas a comprobar en tus logs:
Discutiremos los datos de log del sistema más adelante en este COMO.
La siguiente cosa a mirar es la seguridad de tu sistema contra los ataques procedentes de usuarios locales. ¿Dijimos usuarios locales? ¡Sí!
Una de las primeras cosas que intentan los intrusos de un sistema como vía para explotar la cuenta de root es obtener acceso a una cuenta de usuario local. Con una seguridad local laxa, pueden entonces "mejorar" su acceso de usuario normal a acceso de root usando diversos bugs y servicios locales pobremente configurados. Si te aseguras de que tu seguridad local es adecuada, entonces el intruso tendrá que superar otro obstáculo.
Los usuarios locales también pueden ocasionar un montón de estragos en tu sistema, incluso (especialmente) si son realmente quienes dicen que son. Proporcionar cuentas a gente que no conoces o de la que no tienes información de contacto es una idea muy mala.
Asegúrate de que provees cuentas de usuario sólo con los requerimientos minimos para la tarea que necesiten hacer. Si proporcionas a tu hijo (10 años) una cuenta, podrías querer que él sólo tenga acceso a un procesador de textos o un programa de dibujo, pero que le sea imposible borrar datos que no son suyos.
Algunas buenas reglas empíricas sobre permitir a otra gente acceso legítimo a tu máquina Linux:
Muchas cuentas de usuario local que se usan en los compromisos de seguridad son las que no han sido usadas durante meses o años. Dado que nadie está usándolas, proporcionan el vehículo ideal de ataque.
La cuenta más buscada en tu equipo es la cuenta de root (superusuario). Esta cuenta tiene autoridad sobre toda el equipo, lo cual puede incluir también autoridad sobre otros equipos en la red. Recuerda que sólo debes usar la cuenta de root para tareas muy cortas y específicas y que mayormente debes ejecutar programas como un usuario normal. Incluso los pequeños errores que cometas mientras estés conectado como root pueden causar problemas. Mientras menos tiempo estés conectado con privilegios de root, más seguro estarás.
Varios trucos para evitar echar a perder como root tu propio equipo:
"rm foo*.bak"
, primero haz "ls foo*.bak"
y
asegúrate que vas a borrar los archivos que piensas que vas a borrar. Usar
echo
en lugar de comandos destructivos también funciona a veces.
PATH
) especifica los directorios
en los que el shell busca los programas. Procura limitar el comando path para
el usuario root tanto como sea posible y nunca incluyas .
(que
significa "el directorio actual") en tu PATH. Además, nunca tengas directorios
escribibles en tu path de búsqueda, dado que esto puede permitir a los
atacantes modificar o poner nuevos binarios en tu path de búqueda,
permitiéndoles ejecutar como root la próxima vez que ejecutes ese comando.
.rhosts
para el root.
/etc/securetty
contiene una lista de terminales
desde los que puede conectarse el root. Por defecto (con Linux Red Hat) esto
se pone sólo para las consolas virtuales locales (vtys). Ten mucho cuidado al
añadir cualquier otra cosa a este archivo. Tendrías que ser capaz de conectar
remotamente como tu cuenta de usuario regular y entonces hacer su
si lo necesitas (esperemos que sobre ssh
u otro canal encriptado), así que no hay necesidad de conectar direcamente
como root.
Si irremediablemente necesitas permitir que alguien (mejor de mucha
confianza) tenga acceso como root a tu máquina, hay algunas herramientas que te
pueden ayudar. sudo
permite a los usuarios usar su contraseña para
acceder como root a un conjunto restringido de comandos. Esto te posibilitaría,
por ejemplo, permitir que un usuario pueda extraer y montar medios removibles en
tu sistema Linux, pero no tener otros privilegios de root. sudo
también mantiene un log de todos los intentos sudo exitosos y fracasados,
permitiéndote rastrear quién usó qué comando para hacer qué. Por esta razón
sudo
funciona bien incluso en lugares donde muchas personas tienen
acceso de root, porque te ayuda a mantener un registro de los cambios
realizados.
Aunque sudo
puede usarse para dar a usuarios específicos
privilegios específicos para tareas específicas, tiene varios defectos. Debe
usarse sólo para un conjunto limitado de tareas, como reiniciar un servidor o
añadir nuevos usuarios. Cualquier programa que ofrece una salida al shell dará
acceso de root a un usuario que lo pida vía sudo
. Esto incluye a la
mayoría de los editores, por ejemplo. También un programa tan inocuo como
/bin/cat
puede usarse para sobreescribir archivos, lo que podría
permitir que el root fuese explotado. Considera sudo
como un medio
de contabilidad y no esperes que sustituya al usuario root y que encima sea
seguro.
Algunos minutos de preparación y planificación antes de poner tus sistemas online puede ayudar a protegerlos a ellos y a los datos almacenados en ellos.
nosuid
en
/etc/fstab
para particiones que sean escribibles por otros que no
sean root. También puedes querer usar nodev
y noexec
sobre particiones home de usuarios, así como /var
, prohibiendo de
este modo la ejecución de programas y la creación de dispositivos de carácter
o de bloque, que de todos modos nunca serían necesarios.
/etc/exports
con el acceso más restrictivo posible.
Esto significa no usar comodines, no permitir acceso de escritura de root y
exportar ficheros de sólo-lectura siempre que sea posible.
umask
de creación de archivos de usuarios para
que sean tan restrictivos como sea posible. Ver configuraciones
de umask.
ilimitado
como viene por defecto. Puedes controlar los límites
por usuario usando el módulo PAM de límites de recursos y
/etc/pam.d/limits.conf
. Por ejemplo, los límites para el grupo
usuarios
podrían parecerse a esto:
@users hard core 0
@users hard nproc 50
@users hard rss 5000
Esto significa prohibir la creación de ficheros core, restringir el número de procesos a 50 y restringir el uso de memoria por usuario a 5M.
/var/log/wtmp
y /var/run/utmp
contienen los registros de conexión de todos los usuarios en tu sistema. Debe
mantenerse su integridad porque pueden usarse para determinar cuándo y desde
dónde ha entrado un usuario (o un intruso potencial) en tu sistema. Estos
ficheros también deben tener permisos 644
sin afectar a la
operación normal del sistema.
/etc/passwd
o
/etc/shadow
). Ver la página para chattr
(1) del
manual para información sobre el bit inmutable.
Encuentra todos los programas SUID/SGID en tu sistema y mantén un registro de lo que son, para que seas consciente de cualesquiera cambios que te podrían indicar que hay un intruso potencial. Usa el comando siguiente para encontrar todos los programas SUID/SGID en tu sistema:
root# find / -type f \( -perm -04000 -o -perm -02000 \)
La distribución Debian ejecuta cada noche la tarea de determinar qué
ficheros SUID existen. Luego compara esto a lo de las noches previas. Puedes
verlo en /var/log/suid*
para este log.
Puedes quitar los permisos SUID o SGID a un programa sospechoso con
chmod
, después cambialo de nuevo si crees que es absolutamente
necesario.
root# find / -perm -2 ! -type l -ls
y asegúrate de que sabes por qué esos ficheros son
escribibles. En el curso normal de la operación, diversos ficheros serán
escribibles por todos, incluyendo algunos desde /dev
, y enlaces
simbólicos, así el ! -type l
que excluye a éstos del comando
previo find
.
Los ficheros sin propietario también pueden ser un indicio de que un intruso ha accedido a tu sistema. Puedes localizar en tu sistema los ficheros sin propietario, o que no pertenezcan a ningún grupo, con el comando:
root# find / -nouser -o -nogroup -print
.rhosts
debería ser parte de tus deberes
regulares de administración del sistema, puesto que estos ficheros no deben
estar permitidos en tu sistema. Recuerda: un cracker sólo necesita una cuenta
insegura para, potencialmente, lograr acceso a toda tu red. Puedes localizar
todos los ficheros .rhosts
en tu sistema con el siguiente
comando:
root# find /home -name .rhosts -print
Finalmente, antes de cambiar los permisos sobre cualesquiera ficheros de sistema, asegúrate de que entiendes lo que estás haciendo. Nunca cambies los permisos sobre un fichero porque parezca el modo más fácil de lograr que las cosas funcionen. Determina siempre por qué el fichero tiene ese permiso antes de cambiarlo.
El comando umask
puede usarse para determinar el modo por
defecto de creación de ficheros en tu sistema. Es el complemento octal del modo
de fichero deseado. Si los ficheros se crean sin tomar en cuenta sus
configuraciones de permisos, el usuario inadvertidamente podría dar permiso de
lectura o escritura a alguien que no debería tener este permiso. Normalmente,
las configuraciones de umask
incluyen 022
,
027
y 077
(que es el más restrictivo). Normalmente el
umask se pone en /etc/profile
, así se aplica a todos los usuarios
en el sistema. La máscara de creación de archivos puede calcularse restando el
valor deseado de 777. En otras palabras, un umask de 777 supondría que los
ficheros nuevos creados no contendrían permiso de lectura, escritura o ejecución
para nadie. Una máscara de 666 causaría que los ficheros nuevos creados tengan
una máscara de 111. Por ejemplo, puedes tener una línea que se parezca a ésta:
# Set the user's default umask
umask 033
Asegúrate de poner el umask de root en
077
, lo que discapacitará el permiso de lectura, escritura y
ejecución para otros usuarios, a menos que se cambie explicitamente usando
chmod
. En este caso, los directorios recién creados tendrían
permisos 744, obtenido restando 033 de 777. Los ficheros nuevos creados usando
el umask 033 tendrían permisos de 644.
Si estás usando Red Hat, y te sumas a su esquema de creación de ID de usuario
y de grupo (Grupos Privados de Usuario), sólo es necesario usar 002
para un umask
. Esto es debido al hecho de que la configuración por
defecto es de un usuario por grupo.
Es importante asegurar que tus ficheros de sistema no están abiertos a la edición casual por usuarios y grupos que no deberían estar realizando tal mantenimiento del sistema.
Unix separa el control de acceso sobre ficheros y directorios conforme a tres características: propietario, grupo y otro. Siempre hay exactamente un dueño, cualquier número de miembros del grupo y todos los otros.
Una rápida explicación de los permisos de Unix:
Dueño - Qué usuario(s) y grupo(s) mantiene(n) el control de las configuraciones de permisos del nodo y del padre del nodo.
Permisos - Los bits que pueden ser establecidos o reestablecidos para permitir ciertos tipos de acceso. Los permisos para directorios pueden tener un significado diferente al del mismo conjunto de permisos para ficheros.
Lectura:
Escritura:
Ejecución:
El "bit inmutable" tiene también un significado diferente cuando se aplica
a directorios que cuando se aplica a ficheros. Si el bit inmutable se pone en
un directorio, entonces el usuario sólo puede borrar los ficheros de los que
es dueño o para los que tiene concedido un permiso explícito de escritura,
incluso cuando tiene acceso de escritura al directorio. Esto está diseñado
para directorios como /tmp
, que son escribibles por todos, pero
donde puede no ser deseable permitir a cualquier usuario borrar ficheros a su
gusto. El bit inmutable se ve como t
en un listado largo de
directorio.
Esto describe el conjunto de permisos de identidad de usuario sobre el fichero. Cuando el modo de acceso al conjunto de identidad de usuario se configura como permisos de propietario, y el fichero es ejecutable, a los procesos que se ejecutan bajo él se les concede acceso a los recursos del sistema basándose en el usuario dueño del fichero, como opuesto al usuario que ha creado el proceso. Esto es la causa de muchos exploits por "desbordamiento de búfer" ("buffer overflow").
Si se configura en los permisos de grupo, este bit controla la posición del "paquete de identidad de grupo" de un fichero. Actúa de la misma manera que el SUID, excepto en que es el grupo el afectado. El fichero debe ser ejecutable para que esto tenga algún efecto.
Si pones el bit SGID en un directorio (con chmod g+s
directory
), los ficheros creados en ese directorio tendrán su
configuración de grupo para el grupo del directorio.
Tú - El dueño del fichero
Grupo - El grupo al que perteneces
Cualquiera - Cualquiera en el sistema que no es el propietario o un miembro del grupo
Ejemplos de Fichero:
-rw-r--r-- 1 kevin users 114 Aug 28 1997 .zlogin
1st bit - directorio? (no)
2nd bit - leer por dueño? (sí, por kevin)
3rd bit - escribir por dueño? (sí, por kevin)
4th bit - ejecutar por dueño? (no)
5th bit - leer por grupo? (sí, por usuarios)
6th bit - escribir por grupo? (no)
7th bit - ejecutar por grupo? (no)
8th bit - leer por cualquiera? (sí, por cualquiera)
9th bit - escribir por cualquiera?(no)
10th bit - ejecutar por cualquiera?(no)
Las siguientes líneas son ejemplos de los conjuntos mínimos de permisos que se requieren para realizar el acceso descrito. Si quieres puedes dar más permisos de los que están listados aquí, pues esto describe lo que hacen estos permisos mínimos sobre los ficheros:
-r-------- Permite acceso de lectura al fichero por el dueño
--w------- Permite al dueño modificar o borrar el fichero
(Date cuenta que cualquiera con permiso de escritura en el directorio donde está el fichero puede sobreescribirlo y borrarlo)
---x------ El dueño puede ejecutar ese programa, pero no scripts de shell, que requieren aún permiso de lectura
---s------ Se ejecutará con ID Usuario = dueño efectivo
--------s- Se ejecutará con ID Grupo = grupo efectivo
-rw------T No pone al día "última fecha modificada". Normalmente se usa para ficheros swap
---t------ Sin efecto. (anteriormente bit inmutable)
Ejemplo de Directorio:
drwxr-xr-x 3 kevin users 512 Sep 19 13:47 .public_html/
1st bit - directorio? (sí, contiene muchos ficheros)
2nd bit - leer por dueño? (sí, por kevin)
3rd bit - escribir por dueño? (sí, por kevin)
4th bit - ejecutar por dueño? (sí, por kevin)
5th bit - leer por grupo? (sí, por usuarios)
6th bit - escribir por grupo? (no)
7th bit - ejecutar por grupo? (sí, por usuarios)
8th bit - leer por cualquiera? (sí, por cualquiera)
9th bit - escribir por cualquiera?(no)
10th bit - ejecutar por cualquiera?(sí, cualquiera)
Las líneas que siguen son ejemplos de los conjuntos mínimos de permisos que se requieren para ejecutar el acceso descrito. Si quieres, puedes dar más permisos de los aquí listados, pues esto describe lo que hacen estos permisos mínimos sobre directorios:
dr-------- Los contenidos pueden listarse, pero los atributos del fichero no pueden ser leídos
d--x------ Se puede entrar en el directorio, y usarse en paths de ejecución completos
dr-x------ Los atributos del fichero pueden leerse por el dueño
d-wx------ Los ficheros pueden ser creados/borrados, incluso si el directorio no es el activo
d------x-t Impide el borrado de ficheros por otros con acceso de escritura. Se usa en /tmp
d---s--s-- Sin efecto
Los ficheros de configuración del sistema (normalmente en /etc
)
están usualmente en modo 640
(-rw-r-----
) y el dueño
es el root. Dependiendo de los requisitos de seguridad de tu sitio, puedes
ajustar esto. Nunca dejes los ficheros de sistema escribibles por un grupo o por
cualquiera. Algunos ficheros de configuración, incluyendo
/etc/shadow
, sólo deben ser legibles por el root y los directorios
en /etc
al menos no deben ser accesibles a otros.
Los scripts de shell SUID son un riesgo importante de seguridad y por esta razón el núcleo no les hace honores. Con independencia de lo seguro que tú consideres que es el script de shell, puede ser explotado para dar al cracker un shell de root.
Tripwire
Otra manera muy buena de detectar ataques locales sobre tu sistema (y también
a la red) es correr un chequeador de integridad como Tripwire
.
Tripwire
ejecuta varias comprobaciones tipo checksum en todos tus
ficheros binarios y de configuración importantes y los compara contra una base
de datos previa de valores de referencia bien conocidos. De este modo, todos los
cambios en los ficheros se notarán.
Es una buena idea instalar Tripwire
en un floppy y después
ponerle físicamente la protección contra escritura en el floppy. De este modo,
los intrusos no podrán entrometerse con el mismo Tripwire
ni
cambiar la base de datos. Una vez que tengas configurado Tripwire
,
es una buena idea ejecutarlo como parte de tus deberes normales de
administración de seguridad para ver si algo ha cambiado.
Puedes incluso añadir una entrada crontab
para ejecutar
Tripwire
desde tu floppy todas las noches y mandarte un "emilio"
con los resultados por la mañana. Algo como:
# set mailto
MAILTO=kevin
# run Tripwire
15 05 * * * root /usr/local/adm/tcheck/tripwire
te enviará por correo-e un informe cada mañana a las
5:15am.
Tripwire
puede ser una bendición para detectar intrusos antes de
que los notes de otro modo. Dado que cambian un montón de ficheros en el
resultado del sistema, tienes que tener cuidado con lo que es la actividad del
cracker y lo que es tu propia actividad.
Encontrarás grátis Tripwire
en http://www.tripwiresecurity.com/.
Los manuales y el soporte pueden comprarse.
Los "Caballos Troyanos" se denominan así por la artimaña que se cuenta en la "Iliada" de Homero. La idea es que un cracker distribuye un programa o binario que suena estupendo, y anima a otra gente a descargarlo y a ejecutarlo como root. Entonces el programa puede comprometer su sistema y ellos no se dan cuenta. Mientras piensan que el binario que acaban de bajarse hace una cosa (y muy bien podría hacerla), también compromete su seguridad.
Debes tener cuidado con qué programas instalas en tu máquina. Redhat proporciona comrpobaciones checksum MD5 y firmas PGP en sus ficheros RPM para que puedas verificar que estás instalando la cosa real. Otras distribuciones tienen similares métodos. ¡Nunca debes ejecutar como root cualquier binario desconocido, para el cual no tienes la fuente! Pocos atacantes quieren liberar el código fuente para escrutinio público.
Aunque puede ser complejo, asegúrate que obtienes la fuente de un programa desde su sitio de distribución auténtico. Si el programa se va a ejecutar como root, asegúrate de que o bien tú o bien alguien en quien confías ha mirado la fuente y la ha verificado.
Uno de los rasgos de seguridad más importantes usados hoy son las
contraseñas. Tanto para tí como para tus usuarios es importante tener
contraseñas seguras y no fácilmente averiguables. La mayoría de las
distribuciones de Linux más recientes incluyen programas passwd
que
no te permiten poner una contraseña fácilmente averiguable. Asegúrate de que tu
programa passwd
está actualizado y tiene esos atributos.
Está más allá del alcance de este documento una discusión profunda sobre encriptación, pero una introducción viene bien. La encriptación es muy útil, posiblemente incluso necesaria en este momento y época. Hay todo tipo de métodos de encriptar datos, cada uno con su propio conjunto de características.
La mayoría de los Unices (y Linux no es una excepción) usan principalmente un
algoritmo de encriptación de una sola vía, llamado DES (Data Encryption
Standard), para encriptar tus contraseñas. Esta contraseña encriptada se
almacena entonces (normalmente) en /etc/passwd
o (menos común) en
/etc/shadow
. Cuando intentas conectar, la contraseña que introduces
se encripta de nuevo y se compara con la que se entró en el fichero que almacena
tus contraseñas. Si casan, debe ser la misma contraseña y se te permite el
acceso. Aunque DES es un algoritmo de encriptación de doble vía (puedes
codificar y luego descodificar un mensaje, dadas las claves correctas), la
variante que la mayoría de los Unices usan es de una vía. Esto quiere decir que
no es posible revertir la encriptación para obtener la contraseña a partir de
los contenidos de /etc/passwd
(o /etc/shadow
).
Los ataques de fuerza bruta, tales como "Crack" o "John the Ripper" (ver la Sección crack ) a menudo pueden averiguar las contraseñas, a menos que tu contraseña sea lo suficientemente aleatoria. Los módulos PAM (ver abajo) te permiten usar una rutina de encriptación diferente con tus contraseñas (MD5 o parecidos). También puedes usar Crack en tu provecho. Considera el ejecutar periódicamente Crack contra tu base de datos de contraseñas, para encontrar contraseñas inseguras. Contacta entonces con el usuario afectado e instrúyelo para que cambie su contraseña.
Puedes ir a http://consult.cern.ch/writeup/security/security_3.html para más información sobre cómo elegir una buena contraseña.
La criptografía de clave pública, tal como la que usa PGP, usa una clave para encriptación y una clave para desencriptación. La criptografía tradicional, sin embargo, usa la misma clave para encriptación y desencriptación; esta clave debe ser conocida por las dos partes y ser transferida de alguna forma desde una a la otra con seguridad.
Para aliviar la necesidad de transmitir con seguridad la clave de encriptación, la encriptación de clave pública usa dos claves separadas: una clave pública y una clave privada. La clave pública de cada persona está disponible para que cualquiera haga la encriptación, mientras que, al mismo tiempo, cada persona mantiene su clave privada para descifrar los mensajes encriptados con la clave pública correcta.
Hay ventajas tanto en la criptografía de clave pública y de clave privada y se puede leer sobre sus diferencias en el RSA Cryptography FAQ, listado al final de esta sección.
PGP (Pretty Good Privacy) está bien soportado en Linux. Las versiones 2.6.2 y 5.0 se sabe que funcionan bien. Para una buena instrucción sobre PGP y cómo usarlo, echa un vistazo al FAQ de PGP: http://www.pgp.com/service/export/faq/55faq.cgi
Asegúrate de usar la versión que es aplicable en tu país. Debido a las restricciones a la exportación por parte del Gobierno de los USA, está prohibido que la encriptación fuerte sea transferida de forma electrónica fuera del país.
Los controles de USA sobre la exportación se rigen ahora por EAR (Export Administration Regulations). Ya no se gobiernan por ITAR.
Hay también una guía paso a paso para configurar PGP en Linux disponible en http://mercury.chem.pitt.edu/~angel/LinuxFocus/English/November1997/article7.html. Fue escrita para la versión internacional de PGP, pero es adaptable fácilmente a la versión de los Estados Unidos. También puedes necesitar un patch para algunas de las últimas versiones de Linux; el patch está disponible en ftp://metalab.unc.edu/pub/Linux/apps/crypto.
Hay funcionando un proyecto sobre una re-implementación libre de pgp con fuente abierta. GnuPG es un sustituto completo y grátis de PGP. Porque no usa IDEA ni RSA puede usarse sin restricciones. GnuPG está casi de acuerdo con RFC2440 (OpenPGP). Ver la página web GNU Privacy Guard para más información: http://www.gpg.org/.
Más información sobre criptografía puede encontrarse en el FAQ de criptografía de RSA, disponible en http://www.rsa.com/rsalabs/newfaq/. Aquí encontrarás información sobre términos tales como "Diffie-Hellman", "criptografía de clave pública", "certificados digitales", etc.
Con frecuencia los usuarios preguntan sobre las diferencias entre los diversos protocolos de seguridad y encriptación y sobre cómo usarlos. Aunque éste no es un documento sobre encriptación, es una buena idea explicar brevemente lo que es cada protocolo y dónde encontrar más información.
Junto a CIPE y otras formas de encriptación de datos, hay también diversas otras implementaciones de IPSEC para Linux. IPSEC es un esfuerzo de la IETF para crear comunicaciones criptográficamente seguras a nivel de red IP y para proporcionar autentificación, integridad, control de acceso y confidencialidad. Información sobre IPSEC e Internet puede encontrarse en http://www.ietf.org/html.charters/ipsec-charter.html. También puedes encontrar enlaces a otros protocolos que implican gestión de claves, una lista de correo sobre IPSEC y ficheros.
La implementación del x-kernel de Linux, que se está desarrollando en la Universidad de Arizona, usa un entorno basado en el objeto para implementar protocolos de red llamados x-kernel y puede encontrarse en http://www.cs.arizona.edu/xkernel/hpcc-blue/linux.html. Dicho más sencillo, el x-kernel es un método de pasar mensajes a nivel de núcleo, lo que contribuye a una implementación más fácil.
Otra implementación IPSEC de libre disposición es el FreeS/WAN IPSEC de Linux. Su página web afirma,
"Estos servicios te permiten construir túneles seguros a través de redes inseguras. Todo lo que pasa a través de la red insegura es encriptado por la máquina pasarela IPSEC y desencriptado por la pasarela en el otro extremo. El resultado es la Red Privada Virtual (Virtual Private Network) o VPN. Esta es una red que es efectivamente privada, aún cuando incluye equipos en diversos sitios diferentes conectados mediante la insegura Internet."
Está disponible para descargar en http://www.xs4all.nl/~freeswan/ y ha alcanzado ya la 1.0 en el momento de escribir esto.
Al igual que otras formas de criptografía, no se distribuye por defecto con el núcleo debido a restrictiones a la exportación.
ssh
(Shell Seguro) y
stelnet
ssh
y stelnet
son programas que te permiten
conectarte a sistemas remotos y tener una conexión encriptada.
ssh
es un paquete de programas usados como un sustituto seguro
para rlogin
, rsh
y rcp
. Usa la
criptografía de clave pública para encriptar comunicaciones entre dos hosts, asi
como para autentificar usuarios. Puede usarse para conectar de forma segura a un
host remoto o copiar datos entre hosts, al tiempo que se impiden los ataques
hombre-en-medio (sesión hijacking) y el engaño de DNS. Realizará una compresión
de datos en tus conexiones y comunicaciones X11 seguras entre hosts. La página
principal de ssh
puede encontrarse en http://www.cs.hut.fi/ssh/
También puedes usar ssh
desde tu estación de trabajo Windows a
tu servidor Linux ssh
. Hay varias implementaciones de cliente de
Windows libremente disponibles, incluyendo la que está en http://guardian.htu.tuwien.ac.at/therapy/ssh/
así como la implementación comercial de DataFellows, en http://www.datafellows.com/. Hay también
un proyecto de fuente abierta para re-implementar ssh llamado "psst...". Para
más información ver: http://www.net.lut.ac.uk/psst/
SSLeay es una implementación libre del protocolo Secure Sockets Layer de Netscape, desarrollado por Eric Young. Incluye diversas aplicaciones, tales como Secure para telnet, un módulo para Apache, diversas bases de datos y diversos algoritmos incluyendo DES, IDEA y Blowfish.
Usando esta librería se crea una sustitución segura de telnet que realiza la encriptación sobre una conexión telnet. A diferencia de SSH, stelnet usa SSL, el protocolo Secure Sockets Layer desarrollado por Netscape. Puedes encontrar Telnet Seguro y FTP Seguro, comenzando por el FAQ SSLeay, disponible en http://www.psy.uq.oz.au/~ftp/Crypto/.
SRP es otra implementación segura de telnet/ftp. De su página web:
"El proyecto SRP está desarrollando software de Internet seguro para uso libre en todo el mundo. Comenzando con una distribución de Telnet y FTP completamente segura, esperamos reemplazar los débiles sistemas de autentification en redes con sustitutos fuertes que no sacrifican la seguridad por la amigabilidad hacia el usuario. ¡La seguridad debe estar por defecto, no ser una opción!"
Para más información, ir a http://srp.stanford.edu/srp.
Las versiones más recientes de la distribución Red Hat de Linux vienen con un esquema unificado de autentificación llamado "PAM". PAM te permite cambiar tus métodos y requisitos de autentificación al vuelo y encapsular todos los métodos de autentificación local sin recompilar ninguno de tus binarios. La configuración de PAM está más allá del alcance de este documento, pero no dejes de echar una ojeada al sitio web de PAM para más información. http://www.kernel.org/pub/linux/libs/pam/index.html.
Sólo unas pocas de las cosas que puedes hacer con PAM:
Dedicar unas pocas horas a instalar y configurar tu sistema, puede impedir
muchos ataques incluso antes de que ocurran. Por ejemplo, usa PAM para
desactivar el uso por todo el sistema de ficheros .rhosts
en los
directorios home del usuario, añadiendo estas líneas a
/etc/pam.d/rlogin
:
#
# Disable rsh/rlogin/rexec for users
#
login auth required pam_rhosts_auth.so no_rhosts
El objetivo primero de este software es proporcionar una facilidad para la interconexión segura de subredes (contra indiscreciones, incluyendo el análisis de tráfico y la inyección de mensaje falsificado) a lo largo de una red insegura de paquetes tal como es Internet.
CIPE encripta los datos a nivel de red. Los paquetes que viajan entre hosts por la red están encriptados. El motor de encriptación se sitúa cerca del controlador que envía y recibe los paquetes.
Esto es distinto a SSH, que encripta los datos mediante conexión, al nivel de socket. Se encripta una conexión lógica entre programas que se ejecutan en diferentes hosts.
CIPE puede usarse para hacer túneles, con el fin de crear una Red Privada Virtual (VPN). La encriptación de nivel bajo tiene la ventaja de que puede hacerse funcionar de forma transparente entre las dos redes conectadas en la VPN, sin ningún cambio en el software de aplicación.
Resumido de la documentación de CIPE:
Los estándares IPSEC definen un conjunto de protocolos que pueden ser usados (entre otras cosas) para construir VPNs encriptadas. Sin embargo, IPSEC es más bien un conjunto de protocolos de peso pesado y complicado con un montón de opciones, las implementaciones del conjunto completo de protocolos se usan aún raramente y algunos problemas (tales como gestión de claves) no están todavía completamente resueltos. CIPE usa un enfoque más simple, en el cual muchas cosas que pueden ser parametrizadas (tal como la elección del algoritmo de encriptación real usado) son una elección que se fija en el momento de la instalación. Esto limita la flexibilidad, pero permite una implementación simple (y por tanto eficiente, fácil de depurar...).
Más información puede encontrarse en http://www.inka.de/~bigred/devel/cipe.html
Al igual que otras formas de criptografía, no es distribuída con el núcleo por defecto debido a restricciones a la exportación.
Kerberos es un sistema de autentificación desarrollado por el Proyecto Athena en el MIT. Cuando un usuario se conecta, Kerberos autentifica a este usuario (usando una contraseña) y proporciona al usuario una forma de probar su identidad a otros servidores y hosts esparcidos por toda de la red.
Después, esta autentificación se usa por programas como rlogin
para permitir al usuario conectar con otros hosts sin una contraseña (en lugar
del fichero .rhosts
). Este método de autentificación también puede
usarse por el sistema de correo para garantizar que el correo se entrega a la
persona correcta, así como para garantizar que el remitente es quien dice ser.
Kerberos y los otros programas que vienen con él, impide a los usuarios "engañar" al sistema haciéndole creer que son otros distintos. Desafortunadamente, instalar Kerberos es muy intrusivo, al requerir la modificación o sustitución de numerosos programas estándar.
Puedes encontrar más información sobre kerberos mirando en el kerberos FAQ y el código puede encontrarse en http://nii.isi.edu/info/kerberos/.
[De: Stein, Jennifer G., Clifford Neuman, y Jeffrey L. Schiller. "Kerberos: An Authentication Service for Open Network Systems." USENIX Conference Proceedings, Dallas, Texas, Winter 1998.]
Kerberos no debería ser tu primer paso para mejorar la seguridad de tu host. Es bastante embrollado y no se usa tan ampliamente como, digamos, SSH.
Las contraseñas sombra son un medio de mantener secreta, para los usuarios
normales, la información de tu contraseña cifrada. Normalmente, estas
contraseñas encriptadas se almacenan en el fichero /etc/passwd
de
lectura para todos. Cualquiera puede ejecutar sobre ellas programas que
averiguan contraseñas e intentar determinar lo que son. Las contraseñas sombra,
por el contrario, se archivan en /etc/shadow
, que sólo pueden leer
los usuarios privilegiados. Para usar contraseñas sombra, necesitas asegurarte
de que todas tus utilidades que necesiten acceso a la información de la
contraseña sean recompiladas para soportarlas. PAM (ver más arriba) también te
permite sólo enchufar un módulo de sombra; no requiere la re-compilación de los
ejecutables. Puedes acudir al Contraseña-Sombra COMO para información adicional
si es necesario. Está disponible en http://metalab.unc.edu/LDP/HOWTO/Shadow-Password-HOWTO.html
Su fecha es más bien reciente y no se necesita en las distribuciones que
soporten PAM.
Si por alguna razón tu programa passwd
no impone contraseñas
difíciles de averiguar, podrías querer ejecutar un programa rompedor de
contraseñas y asegurarte de que las contraseñas de tus usuarios son seguras.
Los programas rompedores de contraseñas operan sobre una idea simple: prueban cada palabra del diccionario, y después las variaciones de estas palabras, encriptando cada una y comprobándola frente a tu contraseña encriptada. Si obtienen una que case, saben cuál es tu contraseña.
Hay muchos programas por ahí... los dos más notables son "Crack" y "John the
Ripper" ( http://www.false.com/security/john/index.html).
Te llevarán un montón de tiempo de cpu, pero solo sabrás si un atacante podría
lograr usarlas si las ejecutas tú mismo primero y notificas a los usuarios con
contraseñas débiles. Ten en cuenta que un atacante tendría que usar primero
algún otro agujero para leer tu fichero /etc/passwd
, pero tales
agujeros son más comúnes de lo que podrías pensar.
Dado que la seguridad es sólo tan fuerte como el host más inseguro, vale la pena mencionar que si tienes algunos equipos Windows en tu red, deberías probar L0phtCrack, un programa de Crack para Windows. Está disponible en http://www.l0pht.com/
CFS es una forma de encriptar árboles de directorios completos y permitir a los usuarios almacenar en ellos ficheros encriptados. Usa un servidor NFS que se ejecuta sobre una máquina local. Los RPMS están disponibles en http://www.replay.com/redhat/ y más información sobre cómo funcionan está en ftp://ftp.research.att.com/dist/mab/.
TCFS mejora a CFS añadiendo más integración con el sistema de ficheros, de modo que el sistema de ficheros que está encriptado es transparente para los usuarios. Más información en: http://edu-gw.dia.unisa.it/tcfs/.
Tampoco necesita usarse con sistemas de achivos completos. Funciona en árboles de directorios también.
Es importante que asegures tu pantalla gráfica para impedir que los atacantes se apropien de tus contraseñas cuando las escribas, puedan leer los documentos o la información que estás leyendo en pantalla o, incluso, usar un agujero para lograr acceso de root. Ejecutar las aplicaciones X remotas sobre una red también puede ser peligroso, permitiendo a los reastreadores ver toda tu interacción con el sistema remoto.
X tiene varios mecanismos de control de acceso. El más simple de ellos está
basado en el host: usas xhost
para especificar a qué hosts se les
permite acceder a tu pantalla. Esto no es seguro en absoluto, porque si alguien
tiene acceso a tu máquina, puede hacer xhost + su máquina
y
obtenerlo fácilmente. Igualmente, si tienes que conceder acceso desde una
máquina que no es de confianza, desde ahí cualquiera puede comprometer tu
pantalla.
Cuando se usa xdm
(Gestor X de Pantalla) para conectar, se
obtiene un método de acceso mucho mejor: MIT-MAGIC-COOKIE-1. Se genera una
"cookie" de 128-bit y se almacena en tu fichero .Xauthority
. Si
necesitas conceder acceso a tu pantalla a una máquina remota, puedes usar el
comando xauth
y la información en tu fichero
.Xauthority
para proporcionar acceso sólo a esa conexión. Ver el
mini-cómo de Remote-X-Apps, disponible en http://metalab.unc.edu/LDP/HOWTO/mini/Remote-X-Apps.html.
Puedes usar también ssh
(ver ssh
, arriba) para permitir conexiones X seguras. Esto tiene la ventaja de que
también es transparente para el usuario final y significa que ningún dato no
encriptado fluye a lo largo de la red.
Echa un vistazo a la página Xsecurity
del manual para más
información sobre seguridad X. La apuesta más segura es usar xdm
para conectar tu consola y luego usar ssh
para ir a sitios remotos
sobre los que puedes ejecutar programas X.
Los programas SVGAlib normalmente son SUID-root para acceder a todo el hardware de vídeo de tu Linux. Esto los hace muy peligrosos. Si fallan, lo normal es que necesites reiniciar tu equipo para tener de nuevo una consola usable. Asegúrate de que cualesquiera programas SVGA que ejecutes sean auténticos y pueda al menos haber algo de confianza. Aún mejor, no ejecutes ninguno para nada.
El proyecto GGI de Linux está intentando solucionar diversos problemas con
los interfaces de vídeo en Linux. GGI cambiará una pequeña parte del código de
vídeo en el núcleo de Linux y así controlará el acceso al sistema de vídeo. Esto
significa que GGI será capaz en cualquier momento de restaurar en tu consola un
estado deseable conocido. También permitirá una clave de atención segura, para
que puedas estar seguro de que no hay ningún programa troyano de
login
ejecutándose en tu consola. http://synergy.caltech.edu/~ggi/
Se hace una descripción de las opciones de configuración del núcleo que se relacionan con la seguridad y una explicación de lo que hacen y de cómo usarlas.
Dado que el núcleo controla el funcionamiento en red de tu computadora, es importante que sea muy seguro y no se vea comprometido. Para impedir alguno de los más recientes ataques de redes, debes procurar mantener actualizada la versión de tu núcleo. Puedes encontrar nuevos núcleos en ftp://ftp.kernel.org/ o a través de tu vendedor de distribuciones.
Hay también un grupo internacional que proporciona un único crypto parche unificado para el núcleo de linux más extendido. Este parche da soporte para una gran cantidad de subsistemas criptográficos y otras cosas que no pueden incluirse en el núcleo principal debido a las restricciones de exportación. Para más información, visita su página web en: http://www.kerneli.org/
Para los núcleos 2.0.x, se aplican las opciones que siguen. Debes ver estas
opciones durante el proceso de configuración del núcleo. Muchos de los
comentarios que se hacen están tomados de
./linux/Documentation/Configure.help
, que es el mismo documento al
que se hace referencia cuando se usa la facilidad de Ayuda durante la etapa de
make config
de compilación del núcleo.
Esta opción debe estar encendida (on) si quieres ejecutar cualquier cortafuegos o enmascaramiento en tu equipo linux. Si sólo vas a ser una máquina cliente regular, es más seguro decir no.
Si activas el reenvío de IP, tu equipo Linux esencialmente se convierte en un enrutador. Si tu máquina está en una red, podrías estar reenviando datos desde una red a otra, y quizás subvirtiendo un cortafuegos que se puso ahí para impedir que esto sucediera. Los usuarios telefónicos normales deberán desactivar esto y los otros usuarios deberían meditar sobre las implicaciones de seguridad que tiene hacer esto. Los equipos cortafuegos deberán tenerlo activado y usarlo en conjunción con software de cortafuegos.
Puedes activar el reenvio de IP de una forma dinámica usando el siguiente comando:
root# echo 1 > /proc/sys/net/ipv4/ip_forward
y desactivarlo con el comando:
root# echo 0 > /proc/sys/net/ipv4/ip_forward
Recuerda que los ficheros, y sus tamaños, no
reflejan sus tamaños reales y que a pesar de ser de longitud cero, pueden
serlo o no.
Un "Ataque SYN" es un ataque de negación de servicio (DoS) que consume todos los recursos de tu equipo, obligándote a reiniciarlo. No se nos ocurre ni una sola razón por la que, normalmente, no querrías activar esto. En la serie de núcleo 2.1 esta opción config solamente permite las syn cookies, pero no las activa. Para activarlas, tienes que hacer:
root# echo 1 > /proc/sys/net/ipv4/tcp_syncookies
Esta opción es necesaria si vas a configurar tu equipo como cortafuegos, vas a hacer enmascaramiento o si deseas proteger a tu equipo de conexión telefónica de que alguien entre por la vía de tu interfaz de marcado PPP.
Esta opción te da información sobre los paquetes que ha recibido tu cortafuegos, como remitente, receptor, puerto, etc.
Esta opción debe estar activada. Los sistemas de enrutado de origen contienen dentro del paquete el camino completo hasta su destino. Esto quiere decir que los enrutadores a través de los cuales va el paquete no necesitan inspeccionarlo, sino sólo reenviarlo. Esto podría conducir a que entren datos en tu sistema que pueden ser un exploit potencial.
Generalmente esta opción está desactivada, pero si estás construyendo un cortafuegos, o un host de enmascaramiento, querrás activarla. Cuando se envían datos de un host a otro, no siempre se logra enviarlos como un único paquete de datos, sino más bien se fragmentan en diversas piezas. El problema con esto es que los números de puerto sólo se almacenan en el primer fragmento. Esto significa que cualquiera puede insertar en los restantes paquetes información que no se sabe que está ahí. Podría también impedir un ataque lágrima (teardrop) contra un host interno que todavía no esté parcheado contra él.
Esta es una opción disponible en la serie 2.1 del núcleo que firmará los paquetes NCP para mayor seguridad. Normalmente puedes dejarlo desactivado, pero está ahí por si lo necesitas.
Esta es una opción realmente esmerada que te permite analizar los primeros 128 bytes de los paquetes de un programa de espacio de usuario, para determinar si te gustaría aceptar o rechazar el paquete, basándote en su validez.
Para los núcleos 2.2.x, muchas de las opciones son las mismas, pero se han
desarrollado unas pocas nuevas. Muchos de los comentarios que se hacen aquí se
han tomado de ./linux/Documentation/Configure.help
, que es el mismo
documento al que se hace referencia cuando se usa la facilidad Ayuda durante la
etapa make config
de compilación del núcleo. Sólo se listan debajo
las opciones añadidas recientemente. Consulta la descripción del 2.0 para ver
una lista de otras opciones necesarias. El cambio más importante en la serie 2.2
del núcleo es el código IP de cortafuegos. Para instalar el IP del cortafuegos
ahora se usa el programa ipchains
, en vez del ipfwadm
que se usa en el núcleo 2.0.
Para la mayoría de la gente, lo seguro es decir no a esta opción. Esta opción te permite conectar en espacio de usuario un filtro a cualquier socket y determinar si los paquetes deben aceptarse o rechazarse. A menos que tengas una necesidad muy específica y seas capaz de programar tal filtro, debes decir no. También ten en cuenta que según este escrito, todos los protocolos fueron admitidos excepto TCP.
El reenvío de puerto es un añadido al Enmascaramiento de IP que permite algún reenvío de paquetes desde el exterior al interior de un cortafuegos por unos puertos dados. Esto podría ser útil si, por ejemplo, quieres ejecutar un servidor de web detrás del cortafuegos o enmascarar el host y que el servidor de web fuese accesible desde el mundo exterior. Un cliente externo envía una petición al puerto 80 del cortafuegos, el cortafuegos reenvía esta petición al servidor de web, el servidor de web tramita la petición y los resultados se envían a través del cortafuegos al cliente original. El cliente piensa que la misma máquina cortafuegos está ejecutando el servidor web. Esto también puede usarse para equilibrar cargas si tienes un grupo de servidores web idénticos detrás del cortafuegos. Información sobre esta característica está disponible en http://www.monmouth.demon.co.uk/ipsubs/portforwarding.html (para leer el WWW, necesitas tener acceso a un equipo en Internet que tenga un programa como lynx o netscape). Para información general, ver por favor ftp://ftp.compsoc.net/users/steve/ipportfw/linux21/
Usando esta opción, los programas de espacio de usuario pueden adjuntar un
filtro para cualquier socket y por ello decirle al núcleo que debe permitir o
no permitir a ciertos tipos de datos pasar a través del socket. El filtro de
socket de Linux funciona con todos los tipos de socket, excepto el TCP por
ahora. Ver el fichero de texto
./linux/Documentation/networking/filter.txt
para más información.
El enmascaramiento del núcleo 2.2 ha sido mejorado. Proporciona soporte adicional para protocolos especiales para enmascaramiento, etc. No dejes de leer el Cadenas IP COMO para más información.
Hay unos pocos dispositivos de bloque y de carácter disponibles en Linux que te ayudarán también con la seguridad.
Los dos dispositivos /dev/random
y /dev/urandom
se
proveen por el núcleo para proporcionar datos aleatorios en todo momento.
Ambos, /dev/random
y /dev/urandom
, deberían ser
bastante seguros de usar al generar claves PGP, desafíos ssh
y
otras aplicaciones para las que los números aleatorios sean un requisito. Dada
cualquier secuencia inicial de números, los atacantes serán incapaces de
predecir el número siguiente a partir de esas fuentes. Hay gran cantidad de
esfuerzo puesto en asegurar que los números que se obtienen de esas fuentes son
aleatorios en cualquier sentido de la palabra.
La única diferencia es que a /dev/random
se le agotan los bytes
aleatorios y te hace esperar hasta que sean acumulados más. Ten en cuenta que
algunos sistemas pueden bloquearse durante mucho tiempo de espera hasta que una
entrada generada por un nuevo usuario sea introducida en el sistema. Tienes que
tener cuidado antes de usar /dev/random
. (Quizás lo mejor que puede
hacerse es usarlo cuando estés generando información en clave sensible y decirle
al usuario que aporree el teclado repetidamente hasta que tú imprimas "OK,
suficiente".)
/dev/random
es entropía de alta calidad, generada al medir los
tiempos entre interrupciones, etc. Se bloquea hasta que estén disponibles
suficientes bits de datos aleatorios.
/dev/urandom
es similar, pero cuando el almacén de entropía se
ejecuta bajo, devolverá un embrollo criptográficamente potente de lo que hay.
Esto no es seguro, pero es suficiente para la mayoría de las aplicaciones.
Puedes leer desde los dispositivos usando algo como:
root# head -c 6 /dev/urandom | mmencode
Esto imprimirá seis caracteres aleatoriamente en la
consola, adecuados para la generación de contraseñas. Puedes encontrar
mmencode
en el paquete metamail
.
Ver /usr/src/linux/drivers/char/random.c
para una descripción
del algoritmo.
Gracias a Theodore Y. Ts'o, Jon Lewis y otros de Linux-kernel por ayudarme (a Dave) con esto.
La seguridad de la red está llegando a ser cada vez más importante en la medida en que la gente pasa cada vez más tiempo conectada. Comprometer la seguridad de la red es, con frecuencia, mucho más fácil que comprometer la seguridad física o la local y es mucho más común.
Hay un conjunto de buenas herramientas para ayudar con la seguridad de la red y muchísimas de ellas vienen en las distribuciones de Linux.
Una de las maneras más comunes por la que los intrusos logran acceder a más
sistemas en tu red es empleando un husmeador de paquetes sobre un host ya
comprometido. Este "husmeador" sólo escucha sobre el puerto Ethernet cosas como
passwd
y login
y su
que van en la
corriente de paquetes y entonces registra el tráfico después de esto. De esta
forma, los atacantes logran contraseñas para sistemas que aún no han intentado
abordar. Las contraseñas de texto-claro son muy vulnerables a este ataque.
Ejemplo: El host A ha sido comprometido. El atacante instala un husmeador. El
husmeador recoge las conexiones de administrador en el Host B desde el Host C.
Logra la contraseña personal del administrador cuando conecta a B. Entonces, el
administrador hace un su
para arreglar el problema. Ahora ellos
tienen la contraseña de root para el Host B. Más tarde el administrador deja a
alguien hacer telnet
desde su cuenta al Host Z en otro sitio. Ahora
el atacante tiene una contraseña/conexión en el Host Z.
En este momento el atacante siquiera necesita comprometer un sistema para hacer esto: podría también meter un portátil o un pc en un edificio y pinchar en tu red.
Usar ssh
u otros métodos de contraseña encriptada frustra este
ataque. Cosas como APOP para cuentas POP también previenen este ataque. (Los
logins POP normales son muy vulnerables a esto, como todo lo que envíe
contraseñas en texto-claro por la red.)
Antes de poner tu sistema Linux en CUALQUIER red lo primero que tienes que mirar es qué servicios necesitas ofrecer. Los servicios que no necesites ofrecer deben ser desactivados para que tengas una cosa menos de la que preocuparte y los atacantes tengan un lugar menos en el que buscar un agujero.
Hay un montón de formas de desactivar servicios bajo Linux. Puedes mirar en
tu fichero /etc/inetd.conf
y ver qué servicios se están ofreciendo
en tu inetd
. Desactiva cualquiera que no necesites descomentándolos
(#
al principio de la línea), y luego envia tu proceso inetd a
SIGHUP.
También puedes quitar (o descomentar) servicios en tu fichero
/etc/services
. Esto implicará que los clientes locales también
serán incapaces de encontrar el servicio (p.e., si quitas ftp
y
tratas de hacer ftp a un sitio remoto desde esa máquina, fallará y te dará un
mensaje de "servicio desconocido"). Normalmente no merece la pena quitar
servicios, dado que no proporciona seguridad adicional. Si una persona local
quiere usar ftp
, incluso aunque tú lo hayas descomentado, haría que
su propio cliente use el puerto común FTP y aún funcionaría mejor.
Algunos de los servicios que querrías dejar habilitados son:
ftp
telnet
(o ssh
)
pop-3
o imap
identd
Si sabes que no vas a usar algún paquete en particular, puedes borrarlo por
completo. En la distribución Red Hat, rpm -e nombrepaquete
borra el paquete entero. En la Debian dpkg --remove
hace lo mismo.
Además, realmente deberías desactivar las utilidades rsh/rlogin/rcp,
incluyendo login (usado por rlogin
), shell (usado por
rcp
) y exec (usado por rsh
) para que no se inicien en
/etc/inetd.conf
. Estos protocolos son extremadamente inseguros y
han sido la causa de exploits en el pasado.
Debes comprobar tu /etc/rc.d/rcN.d
, (donde N
es el
nivel de ejecución de tus sistemas) y ver si alguno de los servidores arrancados
en ese directorio no se necesita. Los ficheros en /etc/rc.d/rcN.d
son realmente enlaces simbólicos al directorio /etc/rc.d/init.d
.
Renombrar los ficheros en el directorio init.d
tiene el efecto de
inhabilitar todos los enlaces simbólicos en /etc/rc.d/rcN.d
. Si
sólo quieres deshabilitar un servicio para un nivel de ejecución particular,
renombra el fichero apropiado sustituyendo la S
mayúscula por una
s
minúscula, como esto:
root# cd /etc/rc6.d
root# mv S45dhcpd s45dhcpd
Si tienes ficheros estilo BSD rc
, tienes que probar
/etc/rc*
para los programas que no necesites.
La mayoría de las distribuciones de Linux vienen con grapadores de tcp
"grapando" todos tus servicios TCP. Un grapador de tcp (tcpd
) se
pide desde inetd
en lugar del servidor real. Entonces
tcpd
chequea el host que está requiriendo el servicio y, o bien
ejecuta el servidor real, o niega el acceso desde este host. tcpd
te permite restringir el acceso a tus servicios TCP. Debes hacer un
/etc/hosts.allow
y añadir sólo aquellos hosts que necesiten tener
acceso a los servicios de tu equipo.
Si eres un usuario telefónico doméstico, te sugerimos que niegues TODOS.
tcpd
también registra los intentos fallidos de acceder a servicios,
así que esto te puede dar la alerta si te están atacando. Si añades nuevos
servicios, debes asegurarte de configurarlos para usar grapadores de tcp si
están basados en TCP. Por ejemplo, un usuario telefónico normal puede impedir a
los extraños la conexión a su máquina, sin perder la capacidad de recuperar
correo y hacer conexiones de red a Internet. Para hacer esto, debes añadir lo
siguiente a tu /etc/hosts.allow
:
ALL: 127.
Y por supuesto /etc/hosts.deny contendría:
ALL: ALL
que impedirá conexiones externas a tu máquina, pero permitiéndote desde el interior conectar a los servidores en Internet.
Ten en cuenta que los grapadores de tcp sólo protegen servicios ejecutados
desde inetd
y unos pocos otros selectos. Muy bien podría haber
otros servicios ejecutándose en tu máquina. Puedes usar netstat -ta
para encontrar una lista de todos los servicios que está ofreciendo tu máquina.
Mantener al día la información DNS sobre todos los hosts en tu red puede ayudar a incrementar la seguridad. Si un host no autorizado llega a conectarse a tu red, puedes reconocerlo por su carencia de una entrada DNS. Muchos servicios pueden estar configurados para no aceptar conexiones de hosts que no tienen entradas DNS válidas.
identd
identd
es un pequeño programa que normalmente se ejecuta fuera
de tu servidor inetd
. Mantiene un registro de qué usuario está
ejecutando qué servicio TCP, y luego informa de esto a quien se lo pregunta.
Mucha gente no entiende la utilidad de identd
y por eso lo
desactiva o bloquea todas las peticiones de sitios. identd
no está
para ayudar a sitios remotos. No hay modo de saber si el dato que obtienes del
identd
remoto es correcto o no. No hay autentificación en las
peticiones de identd
.
¿Por qué habrías de ejecutarlo entonces? Porque te ayuda, y es otro
punto de datos para el seguimiento. Si tu identd
no está
comprometido, entonces sabes que está diciendo el nombre de usuario o uid de
sitios remotos que usan los servicios TCP. Si el administrador de un sitio
remoto te responde y te dice que el usuario tal-y-tal estaba tratando de hacer
hack en su sitio, puedes fácilmente emprender una acción en contra de este
usuario. Si no estás ejecutando identd
, tendrás que mirar en
montones y montones de registros de log, calcular quién estaba conectado en ese
momento y, en general, gastar mucho más tiempo en rastrear al usuario.
El identd
que viene con la mayoría de las distribuciones es más
configurable de lo que mucha gente piensa. Puedes deshabilitarlo para usuarios
específicos (ellos pueden hacer un fichero .noident
), puedes
registrar todas las solicitudes de identd
(lo recomendamos), además
puedes poner identd para que devuelva un uid en vez de un nombre de usuario o
incluso NO-USER.
Hay un conjunto de paquetes de software diferentes que hacen de puerto y dan servicio basados en la exploración de equipos o redes. SATAN, ISS, SAINT y Nessus son algunos de los más conocidos. Este software se conecta al equipo destino (o a todos los equipos destino en una red) en todos los puertos que puede, e intenta determinar qué servicio está ejecutándose ahí. Basado en esta información, puede decir si el equipo es vulnerable a un exploit específico en este servidor.
SATAN (Security Administrator's Tool for Analyzing Networks) (Herramienta de Administrador de Seguridad para Analizar Redes) es un explorador de puerto con una interfaz de web. Puede ser configurado para hacer comprobaciones ligeras, medias o fuertes en un equipo o una red de equipos. Es una buena idea instalar SATAN y explorar tu equipo o red y arreglar los problemas que encuentres. Asegúrate de que la copia de SATAN la obtienes de metalab o de un FTP o sitio web con buena reputación. Hubo una copia troyana de SATAN que fue distribuída en la red. http://www.trouble.org/~zen/satan/satan.html. Ten en cuenta que SATAN no ha sido actualizado desde hace bastante tiempo y algunas de las otras herramientas de más abajo podrían funcionar mejor.
ISS (Internet Security Scanner) (Explorador de Seguridad de Internet) es otro explorador basado en el puerto. Es más rápido que Satan y por eso podría ser mejor para redes grandes. Sin embargo, SATAN tiende a proporcionar más información.
Abacus es un conjunto de herramientas para proveer seguridad y detección de intrusión basadas en el host. Mira su página inicial en la web para más información. http://www.psionic.com/abacus
SAINT es una versión actualizada de SATAN. Está basada en el web y tiene tests mucho más actualizados que SATAN. Puedes averiguar más sobre esto en: http://www.wwdsi.com/saint
Nessus es un explorador de seguridad gratuito. Tiene un interfaz gráfico GTK para facilitar el uso. También está diseñado con una configuración de enchufado muy agradable para hacer tests de exploración de nuevos puertos. Para más información, echa un vistazo a: http://www.nessus.org/
Hay algunas herramientas diseñadas para alertarte sobre sondeos mediante SATAN e ISS y otro software de exploración. Sin embargo, con el uso frecuente de los grapadores de tcp, y asegurándote de mirar en tus ficheros de log con regularidad, deberías ser capaz de notar tales sondeos. Incluso en la configuración más baja, SATAN aún deja huellas en los logs de un sistema Red Hat.
Hay también exploradores de puerto "clandestinos". Un paquete con el bit TCP ACK activado (como se hace con las conexiones establecidas) probablemente entrará a través de un cortafuegos de filtrado de paquetes. El paquete RST devuelto desde un puerto que _no haya establecido una sesión_ puede considerarse como prueba de que hay vida en ese puerto. Yo creo que los grapadores de TCP no detectarán esto.
sendmail
, qmail
y MTAUno de los servicios más importantes que puedes proporcionar es un servidor de correo. Desafortunadamente, también es uno de los más vulnerables a los ataques, simplemente debido a la cantidad de tareas que debe realizar y los privilegios que normalmente necesita.
Si estás usando sendmail
es muy importante mantener las
versiones actualizadas. sendmail
tiene una historia muy larga de
exploits de seguridad. Asegúrate de que siempre estás ejecutando la versión más
reciente en http://www.sendmail.org/.
Recuerda que sendmail no tiene que estar ejecutándose para que puedas enviar correo. Si eres un usuario doméstico, puedes desactivar completamente sendmail y simplemente usar tu cliente de correo para enviar correo. Puedes también optar por remover el indicador "-bd" del fichero de inicio de sendmail, desactivando así las entradas de peticiones de correo. En otras palabras, puedes ejecutar sendmail desde el script de inicio usando lo siguiente:
# /usr/lib/sendmail -q15m
Esto hará que sendmail limpie cada quince minutos la
cola del correo con todos los mensajes que no pudieron entregarse con éxito al
primer intento.
Muchos administradores optan por no usar sendmail y en su lugar eligen uno de
los otros agentes de transporte de correo. Deberías considerar cambiarte a
qmail
. qmail
fue diseñado desde los cimientos pensando
en la seguridad. Es rápido, estable y seguro. Qmail puede encontrarse en http://www.qmail.org/
En competición directa con qmail está "postfix", escrito por Wietse Venema, el autor de tcp_wrappers y otras herramientas de seguridad. Anteriormente llamado vmailer, y patrocinado por IBM, éste es también un agente de transporte de correo escrito desde la base con la seguridad en mente. Puedes encontrar más información sobre vmailer en http://gulic.org/www.vmailer.org
Un ataque de "Negación de Servicio" ("Denial of Service") (DoS) es aquel en el que el atacante trata de mantener demasiado ocupado algún recurso para que no pueda responder a las peticiones legítimas o para denegar a los usuarios legítimos el acceso a tu equipo.
Los ataques DoS se han incrementado en los últimos años. Algunos de los más populares y recientes se listan debajo. Ten en cuenta que aparecen otros nuevos constantemente, de tal modo que estos sólo son unos pocos ejemplos. Lee las listas de seguridad de Linux y la lista y archivos de bugtraq para tener información más actual.
Si estás bajo un ataque de inundación de ping, usa una herramienta como
tcpdump
para determinar de dónde vienen los paquetes (o parece
que vienen) y contacta luego con tu proveedor con esta información. Las
inundaciones de ping pueden detenerse más fácilmente a nivel de enrutador o
usando un cortafuegos.
NFS es un protocolo de compartición de ficheros muy ampliamente usado.
Permite a los servidores ejecutar nfsd
y mountd
para
"exportar" sistemas de ficheros completos a otras máquinas usando el soporte de
sistema de ficheros NFS construído para sus núcleos (o usando algún otro soporte
de cliente si no son máquinas Linux). mountd
mantiene registro de
los sistemas de ficheros montados en /etc/mtab
y puede mostrarlos
con showmount
.
Muchos sitios usan NFS para servir directorios home a los usuarios, así que no importa a qué máquina del cluster se conecten, tendrán todos sus ficheros home.
Hay una pequeña cantidad de seguridad posible al exportar sistemas de
archivos. Puedes hacer que tu nfsd
haga un mapa del usuario de root
remoto (uid=0) para el usuario nobody
, denegándoles totalmente el
acceso a los ficheros exportados. Sin embargo, dado que los usuarios
individuales tienen acceso a sus propios ficheros (o al menos el mismo uid), el
usuario root remoto puede registrar o hacer su
a su cuenta y tener
total acceso a sus ficheros. Esto es sólo un pequeño obstáculo para un atacante
que tenga acceso a montar tus sistemas de archivo remoto.
Si tienes que usar NFS, asegúrate de que exportas sólo a aquellos equipos a los que realmente necesitas hacerlo. Nunca exportes tu directorio de root completo; exporta sólo los directorios que necesites exportar.
Ver el NFS COMO para más información sobre NFS, disponible en http://metalab.unc.edu/mdw/HOWTO/NFS-HOWTO.html
El servicio de información de red (antes YP) es un medio de distribuir
información a un grupo de equipos. El administrador de NIS mntiene las tablas de
información y las convierte en archivos de mapas NIS. Después, estos mapas se
sirven a la red, permitiendo a los equipos clientes del NIS obtener información
sobre conexión, contraseña, directorio home y shell (toda la información en un
fichero /etc/passwd
estándar). Esto permite a los usuarios cambiar
su contraseña una vez y que tenga efecto sobre todas los equipos en el dominio
NIS.
NIS no es seguro en absoluto. Nunca se pretendió que lo fuese. Se pensó para que fuese manejable y útil. Cualquiera puede averiguar el nombre de tu dominio NIS (cualquiera en la red), puede obtener una copia de tu fichero passwd y usar "crack" y "John the Ripper" contra las contraseñas de tus usuarios. También, es posible engañar a NIS y hacer todo tipo de trucos sucios. Si tienes que usar NIS, asegúrate de que eres consciente de los peligros.
Hay un sustituto mucho más seguro para NIS, llamado NIS+. Mira en el NIS COMO para más información: http://metalab.unc.edu/mdw/HOWTO/NIS-HOWTO.html
Los cortafuegos son un medio de controlar a qué información se le permite entrar y salir de tu red local. Normalmente, el host cortafuegos está conectado a Internet y a tu LAN local, y el único acceso desde tu LAN a Internet es a través del cortafuegos. De este modo, el cortafuegos puede controlar lo que pasa en una u otra dirección entre Internet y tu LAN.
Hay muchos tipos de cortafuegos y de métodos de configurarlos. Los equipos
Linux son muy buenos cortafuegos. El código del cortafuego puede construirse en
los núcleos 2.0 y superiores. Las herramientas de modo usuario
ipfwadm
para núcleos 2.0, o ipchains
para núcleos 2.2,
te permiten cambiar, al vuelo, los tipos de tráfico de red que permites. También
puedes registrar tipos particulares de tráfico de red.
Los cortafuegos son una técnica muy útil e importante para asegurar tu red.
Sin embargo, no pienses que porque tienes un cortafuegos, no necesitas asegurar
los equipos que están detrás de él. Esto es un error fatal. Mira el excelente
Cortafuegos COMO
en tu fichero metalab más reciente para más
información sobre cortafuegos y Linux. http://metalab.unc.edu/mdw/HOWTO/Firewall-HOWTO.html
Más información también puede encontrarse en el Mini-cómo del Enmascaramiento de IP: http://metalab.unc.edu/mdw/HOWTO/mini/IP-Masquerade.html
Más información en ipfwadm
. La herramienta que te permite
cambiar las configuraciones de tu cortafuegos, puede encontrarse en su página
home: http://www.xos.nl/linux/ipfwadm/
Si no tienes experiencia con cortafuegos, y piensas instalar uno no sólo por una mera política de seguridad, es de obligatoria lectura el libro 'Firewalls' de O'Reilly y Associados u otro documento online sobre cortafuegos. Mira en http://www.ora.com/ para más información. El National Institute of Standards and Technology ha recopilado un documento excelente sobre cortafuegos. Aunque data de 1995, es aún bastante bueno. Puedes encontrarlo en http://csrc.nist.gov/nistpubs/800-10/main.html. También de interés son:
Las Cadenas Cortafuegos IP de Linux es una actualización del código de cortafuegos de Linux 2.0 para el núcleo 2.2. Tiene una gran cantidad de características más que las implementaciones previas, incluyendo:
Si actualmente estás usando ipfwadm en el núcleo 2.0, hay scripts disponibles para convertir el formato del comando ipfwadm al formato que usa ipchains.
No dejes de leer el Cadenas IP COMO para más información. Está disponible en http://www.rustcorp.com/linux/ipchains/HOWTO.html
Las VPNs son una forma de establecer una red "virtual" por encima de una red ya existente. Esta red virtual a menudo está encriptada y el tráfico pasa sólo hacia y desde algunas entidades conocidas que se han unido a la red. Las VPNs se usan con frecuencia para conectar a alguien que trabaja en casa con la internet pública a la red interna de una compañía usando una red encriptada virtual.
Si estás ejecutando un cortafuegos de enmascaramiento de Linux y necesitas pasar paquetes de MS PPTP (producto punto a punto VPN de Microsoft), hay un parche del núcleo de linux para hacer esto. Ver: ip-masq-vpn.
Hay diversas soluciones VPN de Linux disponibles:
Ver también la sección sobre IPSEC para enlaces y más información.
Vale, has probado tu sistema, has determinado que es tan seguro como factible y estás preparado para ponerlo online. Hay unas pocas cosas que deberías hacer ahora para prepararte para una intrusión, de forma que rápidamente puedas desactivar al intruso, obtener copias de seguridad y funcionar.
La discusión de los métodos de respaldo y almacenaje está más allá del alcance de este documento, pero aquí van unas pocas palabras relativas a copias de respaldo y seguridad:
Si tienes menos de 650 Mb de datos para almacenar sobre una partición, una copia en CD-R de tus datos es un buen modo de proceder (es difícil de estropear después y si se almacena adecuadamente puede durar mucho tiempo). Las cintas y otros medios re-escribibles deben protegerse contra escritura en cuanto la copia de seguridad esté completa y después ser verificadas para impedir falsificación. Asegúrate de que almacenas tus copias de seguridad en un área segura desconectada de la línea. Una buena copia de seguridad te asegura un punto bien conocido desde el cual restaurar tu sistema.
Un ciclo de seis cintas es fácil de mantener. Esto incluye cuatro cintas para la semana, una cinta para los viernes y una cinta para viernes impares. Realiza una copia de seguridad incremental cada día y una copia de seguridad completa en la cinta propia de los viernes. Si haces cambios particularmente importantes o añades datos importantes al sistema, sería adecuado una copia de seguridad completa.
En el caso de una intrusión, puedes usar tu base de datos RPM como usarías
tripwire
, pero sólo si puedes asegurar también que no ha sido
modificada. Debes copiar la base de datos RPM a un floppy, y mantener esta copia
fuera de conexión en todo momento. La distribución Debian probablemente tiene
algo similar.
Los ficheros /var/lib/rpm/fileindex.rpm
y
/var/lib/rpm/packages.rpm
probablemente no quepan en un sólo
floppy. Pero si se comprimen, cada uno por separado debería caber en un floppy.
Ahora, cuando tu sistema está comprometido, puedes usar el comando:
root# rpm -Va
para verificar cada fichero del sistema. Ver la página
rpm
del manual, donde hay unas cuantas opciones que pueden
incluirse para hacerlo menos verboso. No olvides que también debes estar seguro
de que tu binario RPM no ha sido comprometido.
Esto significa que cada vez que se añade un nuevo RPM al sistema, la base de datos RPM necesitará ser rearchivada. Tendrás que decidir las ventajas frente a los inconvenientes.
Es muy importante que la información que viene de syslog
no haya
sido comprometida. Un buen comienzo es hacer legibles y escribibles los ficheros
en /var/log
sólo para un número limitado de usuarios.
Asegúrate de echar un vistazo a lo que se obtiene escrito ahí, especialmente
bajo la facilidad auth
. Múltiples fallos de conexión, por ejemplo,
pueden indicar un intento de asalto.
Dónde buscar tu fichero de log dependerá de tu distribución. En un sistema
Linux que se conforma al "Linux Filesystem Standard", tal como Red Hat, habrá de
buscarse en /var/log
y comprobar messages
,
mail.log
y otros.
Puedes averiguar hacia dónde está conectando tu distribución mirando en tu
fichero /etc/syslog.conf
. Éste es el fichero que le dice a
syslogd
(el demonio de conexión de sistema) dónde registrar los
diversos mensajes.
Puedes también desear configurar tu script o demonio de rotación de registro
para mantener los registros durante más tiempo, hasta que tengas tiempo de
examinarlos. Echa un vistazo al paquete logrotate
en las
distribuciones recientes de Red Hat. Otras distribuciones probablemente tengan
un procedimiento similar.
Si tus ficheros de log han sido estropeados, mira a ver si puedes determinar cuándo empezó el estropicio y que tipo de cosas parecen estar estropeadas. ¿Hay grandes períodos de tiempo de los que no puedes responder? Una buena idea es comprobar las cintas de seguridad (si tienes alguna) por si tienes ficheros de log no estropeados.
Los ficheros de log normalmente son modificados por el intruso para tapar sus huellas, pero aún así deben ser comprobados en busca de acontecimientos extraños. Puedes tener noticia de los intentos del intruso para lograr entrar, o de explotar un programa para obtener la cuenta del root. Podrías ver también registros de entradas antes de que el intruso tenga tiempo de modificarlas.
Debes asegurarte de separar la facilidad auth
de otros datos de
log, incluyendo los intentos de cambio de usuarios usando su
, los
intentos de conexión y otra información de contabilidad del usuario .
Si es posible, configura syslog
para enviar una copia de los
datos más importantes a un sistema seguro. Esto impedirá que un intruso encubra
sus huellas borrando sus intentos de login/su/ftp/etc. Ver la página
syslog.conf
del manual y las referidas a la opción @
.
Hay diversos programas syslogd
más avanzados por ahí. Echa un
vistazo a http://www.core-sdi.com/ssyslog/
para Secure Syslog. Secure Syslog te permite encriptar tus entradas syslog y
asgurarte de que nadie las ha estropeado.
Otro syslogd
con más características es syslog-ng. Te permite
mucha más flexibilidad en tu logging y también puede tener tus flujos de syslog
remoto para impedir las falsificaciones.
Finalmente, los ficheros de log son mucho menos útiles cuando nadie los lee. Tómate algún tiempo de vez en cuando para mirar tus ficheros de log y hazte una idea de qué pinta tienen en un día normal. Saber esto puede ayudar a notar las cosas inusuales.
La mayoría de los usuarios instalan Linux desde un CD-ROM. Debido a la naturaleza rápidamente cambiante de las mejoras de seguridad, siempre se están distribuyendo nuevos programas (mejorados). Antes de conectar tu máquina a la red, sería una buena idea revisar el sitio FTP de tu distribución y obtener todos los paquetes actualizados desde que recibiste el CD-ROM de tu distribución. Muchas veces estos paquetes contienen importantes mejoras de seguridad, por lo que es bueno tenerlos instalados.
¿Has seguido algunos de los consejos dados aquí (o en otro sitio) y has detectado una ruptura? Lo primero que hay que hacer es mantener la calma. Las acciones precipitadas pueden causar más daño que el que haría el atacante.
Descubrir un compromiso de seguridad que está en marcha puede ser una aventura tensa. La forma en la que reacciones puede tener grandes consecuencias.
Si el compromiso que estás viendo es físico, lo más probable es que hayas descubierto que alguien ha entrado en tu casa, oficina o laboratorio. Debes dar parte a las autoridades locales. En un laboratorio, podrías haber sorprendido a alguien intentando abrir una carcasa o reiniciar una máquina. Dependiendo de tu autoridad y procedimientos, podrías pedirle que parara o contactar con la gente de seguridad de tu local.
Si has detectado a un usuario local intentando comprometer tu seguridad, la primera cosa a hacer es confirmar que de hecho son quienes tú crees que son. Comprueba el sitio desde el cual se están conectando. ¿Es el sitio desde dónde normalmente se conectan? ¿No? Entonces usa un medio no-electrónico de darles un toque. Por ejemplo, llámalos por teléfono o dáte una vuelta por su oficina/casa y habla con ellos. Si confirman que están conectados, puedes pedirles que te expliquen qué estaban haciendo o pedirles que dejen de hacerlo. Si no están conectados, y no tienen ni idea de lo qué les estás diciendo, lo más probable es que este incidente requiera posterior investigación. Revisa tales incidentes y recoge un montón de información antes de hacer acusaciones.
Si has detectado un compromiso en la red, lo primero que hay que hacer (si eres capaz) es desconectar tu red. Si ellos están conectados vía modem, desenchufa el cable del modem; si están conectados vía ethernet, desenchufa el cable de Ethernet. Esto les impedirá hacer más daño y probablemente lo vean como un problema de la red y no como una detección.
Si eres incapaz de desconectar la red (si tienes un sitio ocupado o no tienes
control físico de tus máquinas), el siguiente mejor paso es usar algo como
tcp_wrappers
o ipfwadm
pare denegar el acceso desde el
sitio del intruso.
Si no puedes denegar el acceso a toda la gente procedente del mismo sitio que
el intruso, tendrás que cerrar la cuenta del usuario. Ten en cuenta que cerrar
una cuenta no es cosa fácil. Tienes que tener en cuenta los ficheros
.rhosts
, el acceso de FTP y un montón de posibles puertas traseras.
Después de que hayas hecho algo de lo anterior (desconectado la red, denegado el acceso desde el sitio y/o desactivar su cuenta), necesitas cargarte todos sus procesos de usuario y desactivarlos.
Debes controlar bien tu sitio en los siguientes minutos, dado que el atacante intentará volver a entrar. Quizás usando una cuenta diferente y/o desde una dirección de red diferente.
Vale, o has detectado un compromiso que ya ha ocurrido o lo has detectado y (esperemos) has echado al atacante ofensivo fuera de tu sistema. ¿Ahora qué?
Si eres capaz de determinar qué medios usó el atacante para entrar en tu sistema, debes intentar cerrar ese agujero. Por ejemplo, quizás tú ves varias entradas de FTP justo antes de que el usuario se conecte. Desactiva el servicio FTP y pruébalo y mira si hay una versión actualizada o si alguien de las listas sabe de una mejora.
Comprueba todos tus ficheros de log, haz una visita a tus listas y páginas de seguridad y mira si hay nuevos exploits comunes que puedas arreglar. Puedes encontrar las mejoras de seguridad de Caldera en http://www.caldera.com/tech-ref/security/. Red Hat no tiene todavía separadas sus mejoras de seguridad de sus mejoras de fallos, pero las erratas de la distribución están disponibles en http://www.redhat.com/errata
Ahora Debian tiene una lista de correo y una página web de seguridad. Ver: http://www.debian.com/security/ para más información.
Es muy probable que si un vendedor ha repartido una actualización de seguridad, la mayoría de los otros vendedores de Linux la tenga también.
Ahora hay un nuevo proyecto de auditar la seguridad de Linux. De forma metódica van pasando por todas las utilidades de espacio de usuario buscando posibles exploits y desbordamientos de seguridad. Dicen en su anuncio:
"Estamos intentando hacer una auditoría sistemática de las fuentes de Linux con vistas a que sea tan seguro como OpenBSD. Ya hemos descubierto (y mejorado) algunos problemas, pero más ayuda será bienvenida. La lista no está moderada y es también un recurso útil para discusiones generales de seguridad. La dirección de la lista es: security-audit@ferret.lmh.ox.ac.uk Para suscribirte, envía un correo-e a: security-audit-subscribe@ferret.lmh.ox.ac.uk"
Si no echas fuera al atacante, probablemente volverá. No sólo volverá a tu equipo, sino que volverá a cualquiera en tu red. Si estuviera ejecutando un husmeador de paquetes, hay muchas probabilidades de que tenga acceso a otras máquinas locales.
Lo primero es evaluar el daño. ¿Qué ha estado comprometido? Si estás
ejecutando un Chequeo de Integridad como Tripwire
, puedes usarlo
para realizar una comprobación de integridad y te será de ayuda lo que te diga.
Si no, tendrás que rebuscar en todos tus datos importantes.
Dado que los sistemas Linux están siendo cada vez más fáciles de instalar, podrías considerar salvar tus ficheros de configuración y luego limpiar tu(s) disco(s) y reinstalar, restaurando entonces tus ficheros de usuario y tus ficheros de configuración desde las copias de seguridad. Esto asegurará que tienes un sistema nuevo y limpio. Si tienes que hacer las copias de seguridad a partir del sistema comprometido, tienes que ser especialmente cuidadoso con todos los binarios que restaures, dado que pueden ser caballos troyanos puestos ahí por el intruso.
La re-instalación debe considerarse obligatoria cuando el intruso ha obtenido acceso de root. Además, querrás mantener cualquier evidencia que haya, por lo que puede tener sentido tener un disco libre en sitio seguro.
Luego tienes que preocuparte de cuánto tiempo hace que sucedió el compromiso y si las copias de seguridad mantienen algún trabajo dañado. Más sobre copias de seguridad en seguida.
Tener regularmente copias de seguridad es una bendición en asuntos de seguridad. Si tu sistema está comprometido, puedes restaurar los datos que necesites a partir de las copias de seguridad. Por supuesto, algún dato es valioso también para el atacante y no lo destruirá, sino que lo robará y tendrá sus propias copias; pero al menos tú aún tienes los datos.
Debes comprobar las diversas copias de seguridad realizadas anteriormente antes de restaurar un fichero que ha sido estropeado. ¡¡¡El intruso podría haber comprometido tus ficheros hace mucho tiempo y puedes haber hecho con éxito muchas copias de seguridad de un fichero comprometido!!!
Desde luego, también las copias de respaldo conciernen a un montón de seguridad. Asegúrate de que las almacenas en un lugar seguro. Controla quién tiene acceso a ellas. (Si un atacante puede obtener tus copias de seguridad, puede tener acceso a todos tus datos sin que tú te enteres.)
Vale, has echado al intruso y recubierto tu sistema, pero aún no está todo hecho. Aunque es improbable que la mayoría de los intrusos sean atrapados, debes dar parte del ataque.
Debes informar del ataque al contacto de administración del sitio desde donde
el atacante atacó tu sistema. Puedes mirar este contacto con whois
o en la base de datos de Internic. Deberías enviarles un correo electrónico con
todas las entradas de log aplicables y fechas y horas. Si descubriste cualquier
otra cosa distintiva sobre el intruso, también deberías mencionar esto. Después
de enviar el correo electrónico, podrías continuar (si así te parece) con una
llamada telefónica. Si ese administrador a su vez descubre a tu atacante, podría
hablar con el administrador del sitio desde donde viene y así sucesivamente.
Los buenos crackers a menudo usan muchos sistemas intermedios, algunos (o muchos) de los cuales incluso pueden no saber que han sido comprometidos. Tratar de rastrear a un cracker hasta su sistema home puede ser difícil. Ser amable con los administradores con los que hablas, puede ayudarte mucho para lograr ayuda por parte de ellos.
Debes también notificar a todas las organizaciones de seguridad a las que pertenezcas ( CERT o similares), así como al vendedor de tu sistema Linux.
Hay un MONTON de sitios buenos ahí fuera sobre la seguridad de Unix en general y la seguridad de Linux en particular. Es muy importante suscribirse a una (o más) de las listas de correo sobre seguridad y mantenerse al día en mejoras de seguridad. La mayoría de estas listas son de muy bajo volumen y muy informativas.
CERT es el Equipo de Respuesta para Emergencias de Computadores (Computer Emergency Response Team). A veces envían alertas sobre ataques y mejoras actuales. Ver ftp://ftp.cert.org/ para más información.
Replay ( http://www.replay.com/) tiene archivos de muchos programas de seguridad. Dado que están fuera de los USA, no tienen que obedecer las restricciones sobre criptografía de los USA.
Matt Blaze es el autor de los CFS y un gran defensor de la seguridad. El archivo de Matt está disponible en ftp://ftp.research.att.com/pub/mab
tue.nl
es un gran sitio FTP de seguridad en Holanda. ftp://ftp.win.tue.nl/pub/security/
Bugtraq: Para suscribirse a bugtraq, enviar un correo a listserv@netspace.org que contenga en el cuerpo del mensaje subscribe bugtraq. (Ver abajo los enlaces para archivos).
CIAC: Envía un correo a majordomo@tholia.llnl.gov. En el CUERPO (no en el asunto) del mensaje pon (una o ambas): subscribe ciac-bulletin
Red Hat tiene varias listas de correo, la más importante de las cuales es la lista redhat-announce. Puedes leer cosas sobre soluciones de seguridad (y otras) en cuanto salen. Envía un correo a majordomo@redhat.com y pon subscribe redhat-announce.
El proyecto Debian tiene una lista de correo sobre seguridad que cubre sus soluciones de seguridad. Ver http://www.debian.com/security/ para más información.
Hay bastantes libros buenos sobre seguridad por ahí. Esta sección lista unos pocos de ellos. Además de los libros específicos de seguridad, la seguridad está tratada en muchos otros libros sobre administración de sistemas.
Building Internet Firewalls, por D. Brent Chapman & Elizabeth D. Zwicky
1st Edition September 1995
ISBN: 1-56592-124-0
Practical UNIX & Internet Security, 2nd Edition, por Simson Garfinkel & Gene Spafford
2nd Edition April 1996
ISBN: 1-56592-148-8
Computer Security Basics, por Deborah Russell & G.T. Gangemi, Sr.
1st Edition July 1991
ISBN: 0-937175-71-4
Linux Network Administrator's Guide, por Olaf Kirch
1st Edition January 1995
ISBN: 1-56592-087-2
PGP: Pretty Good Privacy, por Simson Garfinkel
1st Edition December 1994
ISBN: 1-56592-098-8
Computer Crime A Crimefighter's Handbook, por David Icove, Karl Seger & William VonStorch (Consulting Editor Eugene H. Spafford)
1st Edition August 1995
ISBN: 1-56592-086-4
root
.
Respuesta: Alguna gente piensa que es mejor desactivar la capacidad para cargar controladores de dispositivos usando módulos, porque un intruso podría cargar un módulo troyano o un módulo que podría afectar la seguridad del sistema.
Sin embargo, para cargar módulos, debes ser root. Los ficheros objeto del módulo también son sólo escribibles por el root. Esto quiere decir que el intruso necesitará un acceso de root para insertar un módulo. Si el intruso logra acceso de root, hay cosas más serias de las que preocuparse que si él cargará algún módulo.
Los módulos están para cargar dinámicamente el soporte para un dispositivo particular que puede ser usado con poca frecuencia. En máquinas servidores, o cortafuegos por ejemplo, esto es muy improbable que suceda. Por esta razón, tendría más sentido compilar el soporte directamente en el núcleo para máquinas que actúen como servidores. Los módulos también son más lentos que el soporte compilado directamente en el núcleo.
Respuesta: Ver Seguridad
de Root. Esto se hace intencionadamente para impedir a los usuarios
remotos los intentos de conectar vía telnet
a tu máquina como
root
, lo cual es una vulneración seria de la seguridad. No te
olvides: los potenciales intrusos tienen el tiempo de su parte y pueden
ejecutar programas automatizados para averiguar tu contraseña.
Respuesta: Las contraseñas de sombra son un mecanismo para almacenar tu
contraseña en un fichero distinto del fichero /etc/passwd
normal.
Esto tiene varias ventajas. La primera es que el fichero sombra
/etc/shadow
sólo es legible por el root, a diferencia de
/etc/passwd
que tiene que quedar siendo legible por cualquiera.
La otra ventaja es que, como administrador, puedes activar o desactivar
cuentas sin que nadie sepa el estatus de las cuentas de los otros usuarios.
El fichero /etc/passwd
se usa entonces para almacenar los
nombres del grupo y el usuario y se usa por programas como
/bin/ls
para asignar la ID de usuario al nombre de usuario más
adecuado del listado de directorios.
El fichero /etc/shadow
sólo contiene, pues, el nombre de
usuario y su contraseña y quizás información sobre la cuenta, como cuándo
expira la cuenta, etc.
Para activar la contraseña sombra, ejecutar pwconv
como root y
entonces debe existir /etc/shadow
y ser usado por las
aplicaciones. Si estás usando RH 4.2 o superior, los módulos PAM se adaptarán
automáticamente al cambio de usar un /etc/passwd
normal a
contraseñas sombra sin más cambios.
Dado que estás interesado en asegurar tus contraseñas, quizás para empezar
también deberías estar interesado en generar buenas contraseñas. Para esto
puedes usar el módulo pam_cracklib
, que es parte de PAM. Esto
ejecuta tu contraseña sobre las librerías Crack para ayudarte a decidir,
mediante programas de rotura de contraseñas, si es fácilmente averiguable.
Respuesta:
1. Consigue SSLeay 0.8.0 o posterior de ftp://ftp.psy.uq.oz.au/pub/Crypto/SSL
2. Constrúyelo y pruébalo, ¡e instálalo!
3. Consigue la fuente Apache 1.2.5
4. Consigue las extensiones de Apache SSLeay de aquí
5. Desempaquétalo en el directorio fuente Apache-1.2.5 y el patch Apache como para el README.
6. Configúralo y constrúyelo.
Podrías también probar Replay Associates que tiene muchos paquetes preconstruidos y está situado fuera de los Estados Unidos.
Respuesta: La distribución Red Hat, especialmente RH5.0, contiene una gran cantidad de herramientas para cambiar las propiedades de las cuentas de usuario.
pwconv
y unpwconv
pueden usarse
para convertir entre contraseñas sombra y no-sombra.
pwck
y grpck
pueden usarse para
verificar la organización más adecuada de los ficheros passwd
y
group
.
useradd
, usermod
y
userdel
pueden usarse para añadir, borrar y modificar cuentas
de usuario. Los programas groupadd
, groupmod
y
groupdel
harán lo mismo para grupos.
gpasswd
.
Todos estos programas son "conscientes de la sombra" -- esto es, si activas
la sombra usarán /etc/shadow
para la información sobre la
contraseña, de otro modo, no.
Ver las respectivas páginas del manual para más información.
Te apuesto a que no conoces http://www.apacheweek.com/, ¿eh?
Puedes encontrar información sobre Autentificación de usuario en http://www.apacheweek.com/features/userauth así como sobre otros tipos de seguridad de servidores web de http://www.apache.org/docs/misc/security_tips.html
Suscribiéndote a las listas de correo de alerta de seguridad y manteniéndote
actualizado, puedes hacer mucho por asegurar tu equipo. Si prestas atención a
tus ficheros de log y ejecutas algo como tripwire
con regularidad,
puedes hacer aún más.
Un nivel razonable de seguridad en el computador no es difícil de mantener en un equipo doméstico. Mayor esfuerzo se requiere en equipos de empresas, pero Linux puede ser una plataforma segura. Debido a la naturaleza del desarrollo de Linux, las soluciones de seguridad con frecuencia llegan mucho más deprisa de lo que lo hacen en los sistemas operativos comerciales, haciendo a Linux una plataforma ideal cuando la seguridad es un requisito.
La información aquí recogida procede de muchas fuentes. Gracias a las siguientes personas que indirecta o directamente han contribuido:
Rob Riggs rob@DevilsThumb.com
S. Coffin scoffin@netcom.com
Viktor Przebinda viktor@CRYSTAL.MATH.ou.edu
Roelof Osinga roelof@eboa.com
Kyle Hasselbacher mailto:kyle@carefree.quux.soltec.net
David S. Jackson dsj@dsj.net
Todd G. Ruskell ruskell@boulder.nist.gov
Rogier Wolff R.E.Wolff@BitWizard.nl
Antonomasia ant@notatla.demon.co.uk
Nic Bellamy sky@wibble.net
Eric Hanchrow offby1@blarg.net
Robert J. Berger rberger@ibd.com
Ulrich Alpers lurchi@cdrom.uni-stuttgart.de
David Noha dave@c-c-s.com
¡Las siguientes personas han traducido este COMO a diversas lenguas!
Un agradecimiento especial a todos ellos por ayudar a diseminar la palabra
de Linux...
Polaco: Ziemek Borowski ziembor@FAQ-bot.ZiemBor.Waw.PL
Japonés: FUJIWARA Teruyoshi fjwr@mtj.biglobe.ne.jp
Indonesio: Tedi Heriyanto 22941219@students.ukdw.ac.id