Seguridad en Sistemas Operativos

Transcripción

Seguridad en Sistemas Operativos
Seguridad en Sistemas
Operativos
Criptografía y Seguridad en Redes de
Comunicaciones
Profesor: Álvaro Alesanco Iglesias (revisado 05-05-2010)
1
Objetivos
Se plantea en esta práctica atacar algunos de los conceptos básicos de seguridad en la
configuración de un Sistema Operativo. Se emplearán como ejemplo los SO Windows
XP y Linux CentOS 5.4 de forma indistinta para ofrecer una perspectiva amplia de la
seguridad y hacerla independiente del SO elegido.
Trabajo a realizar
La práctica está dividida en dos partes: SO Windows y SO Linux. Cada una de las partes
tiene diferentes secciones en las que se deberá realizar un pequeño trabajo de
configuración. Cada sección empieza explicando de manera más o menos genérica un
punto que hay que tener en cuenta a la hora de securizar el SO. Después, en un recuadro,
se explica el trabajo que se ha de realizar.
Además del trabajo de configuración, será necesario entregar una hoja de
comprobaciones o “checklist” que permita a un administrador (en este caso, al propio
alumno) verificar las comprobaciones realizadas para securizar cada uno de los dos SO.
Dicha “checklist” debería ocupar un espacio reducido (tiene que ser una lista de
comprobación, no un resumen de la práctica), y debe enviarse por email al profesor con
formato .pdf
2
1. Securización de un equipo con SO Windows XP
El proceso de bastionado o securización de un equipo con Windows XP sigue los pasos
que se describen a continuación. El orden en el que se presentan los pasos no es de
obligado cumplimiento, pero al estar clasificados por prioridades es recomendable que se
siga dicho orden.
1.0. Configuración inicial: DHCP
Antes de pasar a securizar el SO propiamente dicho, habrá que asignar una dirección IP
al SO para que tenga conexión al exterior. En lugar de asignar una dirección estática,
vamos a hacerlo de forma dinámica ya que el laboratorio dispone de un servidor DHCP
dispuesto a tal efecto. Para ello, vamos a Inicio  Panel de control  Conexiones de red
 Botón derecho en el interfaz deseado  Propiedades  Protocolo Internet
(TCP/IP)  Propiedades  Automático (todo). Una vez hecho esto, el SO le pedirá
una dirección IP (así como el resto de configuración necesaria para funcionar, como el
router por defecto, y los DNS) y ya tendremos acceso al exterior.
1.1. Aplicación de parches y actualizaciones
Microsoft ofrece de forma habitual parches para corregir los fallos más frecuentes de sus
sistemas. De forma periódica agrupa dichos parches en lo que se denomina un Service
Pack o Paquete de Servicio, para facilitar la aplicación de los mismos. El Service Pack
más actualizado puede encontrarse en :
http://windowsupdate.microsoft.com/
o accediendo a “Inicio  Todos los programas  Windows Update”
El Service Pack se aplica de forma automática seleccionándolo de la lista de parches a
instalar. Es necesario reiniciar el equipo después de la aplicación de un Service Pack
Se deberá aplicar en primera instancia el último Service Pack disponible (el último
engloba los anteriores de forma automática evitando tener que instalarlos en cascada).
Será necesario a continuación instalar los últimos parches emitidos, ya que no están
incluidos en el propio Service Pack. Dichos parches pueden descargarse desde la URL
arriba mencionada.
Dicha operación se pone en primer lugar ya que es la más importante a la hora de
bastionar un equipo con SO Windows, pero en realidad es la última operación que
debería realizarse antes de poner el equipo en producción, ya que debe realizarse con
todos los programas y servicios instalados (si se aplicara nada más instalar Windows y a
continuación se instalara un IIS, éste no quedaría protegido por los cambios realizados
por el Service Pack).
3
A partir de Windows XP Service Pack 1, es posible configurar las actualizaciones
automáticas en los equipos, accediendo a “Inicio  Panel de Control  Actualizaciones
automáticas” (en la propia instalación de XP dan la opción de dejarlo por defecto
activado).
Microsoft ofrece también otra capacidad de actualización denominada “Microsoft
Update”, que actualiza además del SO los paquetes de programas más comunes (Office,
Windows Media Player):
http://update.microsoft.com/microsoftupdate
Respecto a los parches del SO (Windows update), ¿qué sería lo más urgente
instalar? (sólo toma nota, NO INSTALES)
1.2. Desactivación de servicios no utilizados
Para obtener una mayor seguridad y un empleo más eficaz de los recursos del sistema,
todos los servicios que no se utilicen deberán ser deshabilitados. Se presenta una lista de
servicios a mantener en un equipo Windows que no tiene conexión a una red Windows:
Actualizaciones automáticas.
Notificación de sucesos del sistema
Administrador de cuentas de
seguridad
Plug and Play
Cliente DNS
Registro de sucesos
Cliente DHCP (solo en el caso de
emplear un módem).
Servicios de cifrado
Conexiones de red
Servicios de Terminal Server
Iniciador de procesos DCOM
Servicios IPSEC
COM+ Event System.
Servidor
Llamada a procedimiento remoto
Sistema de sucesos COM+
Tabla 1. Ejemplo de algunos servicios activos en un XP
Se puede encontrar más información acerca de lo que hace cada servicio de Windows XP
en la “Windows XP Security Guide” de la NSA (ver enlaces Tema S2) y en
http://www.jasonn.com/turning_off_unnecessary_services_on_windows_xp
Esta lista de servicios es inicial, ya que a medida que se vayan instalando programas y
herramientas de seguridad irá aumentando.
Para deshabilitar un servicio se deberá acceder al panel de servicios del sistema mediante
“Inicio  Panel de Control  Herramientas Administrativas  Servicios”.
4
Ilustración 1: Panel de servicios existentes
Pulsando sobre el botón derecho sobre el servicio accederemos a sus propiedades, y
podremos seleccionar el modo de arranque, así como iniciarlo o detenerlo. Se
deshabilitará el servicio seleccionando la opción Deshabilitado para que de esta forma no
se inicie al arrancar Windows, y se detendrá pulsando en el botón Detener.
Ilustración 2: Deshabilitar un servicio
Deshabilita alguno de los servicios que no aparezcan en la tabla 1. No sólo se han
de deshabilitar sino también parar para que ahora dejen de funcionar
1.3. Deshabilitacion del protocolo NetBIOS sobre TCP/IP
En el caso de que el equipo no vaya a ser emplazado dentro de una red Windows, es muy
recomendable deshabilitar la capacidad de Windows de hablar el protocolo NetBIOS (el
empleado para crear redes Windows, e inseguro de raíz ) sobre redes TCP/IP.
5
Para ello se accederá a Inicio  Panel de Control  Conexiones de Red  Conexiones de Area
Local . Dentro de los interfaces que aparecen se seleccionará el de TCP/IP (casi siempre
el último), y se accederá al botón de Propiedades.
Ilustración 3: Selección del componente TCP/IP
Una vez dentro del menú se seleccionará la opción de Advanced, y dentro del menú
resultante el submenú WINS. En dicho submenú seleccionaremos la casilla Disable
NetBios over TCP/IP, como se ve en la Ilustración 4.
Ilustración 4: Deshabilitación de NetBIOS sobre TCP/IP
Una ver realizados estos cambios no deberían verse activos los puertos 137 y 139,
responsables de NetBIOS bajo TCP/IP (puede verse lanzando un CMD y ejecutando
“netstat –an | more”.
Antes de deshabilitar NetBIOS, comprueba que los puertos 139, 137 y 138 están
abiertos. ¿A qué protocolo están asociados? Una vez comprobado, deshabilita
NetBIOS. Vuelve a comprobar los puertos. Si todo ha ido bien, ahora no deberían
aparecer en la lista.
6
1.4.
Gestión de cuentas de usuario
Para acceder a la interfaz encargada de la gestión de las cuentas de usuario del equipo se
deberá lanzar la herramienta de Administración del Equipo mediante Inicio  Panel de
Control  Herramientas Administrativas  Administración del equipo. Se seleccionará
a continuación dentro de la herramienta el menú de Usuarios locales y grupos.
Ilustración 5: Gestión de cuentas de usuario
Se deberán eliminar o deshabilitar todas aquellas cuentas que no tengan un uso específico
en el sistema (sobre todo la cuenta de Invitado ). Se recomienda a su vez la creación de
una segunda cuenta con privilegios de Administrador sobre el equipo y su utilización
habitual en lugar de la original (para de esta forma poder distinguir intentos de acceso a
dicha cuenta).
A continuación se generarán los grupos de usuarios y las cuentas definidas al inicio de la
instalación. Todas las cuentas se pondrán con una contraseña diferente y se obligará al
usuario a cambiarla la primera vez que se autentique ante el equipo.
Borra las cuentas que no veas necesarias y crea una, llamada criptosec, con
permisos de administrador y login y password. Si no puedes hacerlo porque falla
algo, modifica lo que creas conveniente para llevar a cabo la tarea.
1.5.
Activación de mecanismos de log del sistema
Aunque el propio Windows XP mantiene unos ciertos logs del sistema, es recomendable
habilitar una serie de mecanismos de registro adicionales, que permitan tener un control
más granular sobre los sucesos del sistema. Para acceder a dicha configuración se deberá
lanzar la herramienta Directiva de Seguridad Local, disponible en Inicio  Panel de Control 
Herramientas Administrativas, bajo el submenú Directivas locales  Directivas de auditoria.
7
Ilustración 6: Control de los items de log del sistema.
Se recomienda configurar los permisos como se indica en la ilustración (los no
habilitados son a causa de la gran cantidad de registros que pueden generar).
Activa los logs tal y como se indica en la ilustración 6. Cambia de usuario y entra
en el sistema como criptosec. Una vez dentro, sal cerrando sesión y vuelve a
entrar como práctica. A continuación revisa los logs que se han generado (para
ver los logs, se ha de ir al visor de sucesos que se encuentra en herramientas
administrativas).
1.6.
Políticas de seguridad genéricas
Las políticas de seguridad son un conjunto de medidas destinadas a garantizar un elevado
nivel de seguridad dentro del equipo y agrupadas por grupos de objetivos comunes.
Dichas políticas son accesibles de forma parcial desde la herramienta de Directivas de
Seguridad Local, accesible a través de Inicio  Panel de Control  Herramientas
Administrativas  Directivas de Seguridad Local. Son especialmente interesantes las Directivas
de Cuenta y las Directivas Locales.
Ilustración 7: Políticas de Seguridad Locales
8
Deberán revisarse todas las opciones existentes en dichos submenús (sobre todo respecto
a las referentes a gestión de contraseñas y asignación de permisos base).
Haz que la cuenta de criptosec se bloquee después de 3 intentos y restablecerla
después de 2 minutos. Comprueba cómo realmente se bloquea.
a en este apartado.
1.7.
Deshabilitar Lan Manager / Habilitar NTLMv2
El protocolo LAN Manager es altamente vulnerable a ataques de intercepción y fuerza
bruta, por lo que su uso únicamente está justificado en redes heterogéneas en las que se
deban conectar equipos Windows 95 y 98. En redes puramente con Windows 2000 y XP
(Windows NT también lo soporta con el SP4 o superior) se recomienda encarecidamente
el emplear NTLMv2, que es mucho más robusto.
Para deshabilitar el LAN Manager y habilitar NTLMv2 se deberán acceder a la Directiva de
Seguridad Local  Directivas Locales  Opciones de Seguridad, y cambiar los siguientes valores
:
-
Seguridad de Redes : Nivel de autenticación de LAN Manager  Enviar solo
respuesta NTLMv2 / Rechazar LM.
-
Seguridad de Redes : Seguridad mínima de sesión para (Clientes | Servidores) 
Marcar las cuatro opciones.
Desactiva LAN Manager y habilita NTLMv2, tal y como se explica en este punto.
1.8.
Permisos del sistema de ficheros
Dado que el sistema de ficheros NTFS permite el establecer ACLs (Access Control Lists
o Listas de Control de Acceso), será recomendable que se establezcan los controles
necesarios para que cada usuario solo pueda acceder a la información que le sea
necesaria.
Es posible crear una ACL sobre una carpeta o fichero pulsando con el botón derecho y
accediendo a “Propiedades  Seguridad” (requiere que la partición sea NTFS, no
funcionará sobre particiones FAT o FAT32).
Inicialmente no se encuentra habilitada la vista de la pestaña de seguridad, por lo que lo
deberemos hacer si queremos utilizar estas funcionalidades. Para ello, en el menú
herramientas de una ventana de archivos cualquiera  Herramientas  opciones de
carpeta  Ver  Utilizar uso compartido simple de archivos  deseleccionar
Habilitar la edición de permisos de ficheros para poder utilizarla.
9
1.9.
Protección de ciertos comandos del sistema
La penetración de un intruso en un sistema viene dada en gran parte de los casos por el
aprovechamiento de una vulnerabilidad combinado con el uso de comandos del sistema
(cmd.exe para lanzar un shell con privilegios, tftp.exe para cargar ficheros en el equipo,
etc...).
Se recomienda eliminar los permisos de ejecución de dichos archivos, y activarlos
únicamente cuando sea necesario emplear la herramienta. En el caso de que sean
comandos de gran utilización, se plantea el realizar una copia fuera del PATH habitual, y
emplearlo de esta forma. Algunos de los comandos que pueden resultar peligrosos en
manos de un intruso pueden ser:
arp.exe
net.exe
regedit.exe
at.exe
netstat.exe
syskey.exe
cacls.exe
ping.exe
telnet.exe
cmd.exe
rcp.exe
tftp.exe
ftp.exe
rdisk.exe
tracert.exe
Tabla 2: Comandos de Windows 2000 a proteger
Quita los permisos de ejecución en los comandos arp.exe y at.exe y comprueba
que sucede ahora cuando los intentas ejecutar desde línea de comandos.
1.10. Gestión segura del equipo
Se proponen (aunque fuera del entorno de esta práctica) los siguientes medios para la
gestión segura de un equipo Windows

Terminal Services: Sólo para Windows 2000 Server, Windows XP y Windows
2003. El sistema nativo de Windows, que incluye cifrado de la conexión.

OpenSSH : Válido para todos los SO Windows, y de código abierto. No ofrece
entorno gráfico, pero ofrece la posibilidad de copia segura de ficheros.

Remote Administrator (comercial) : Válido para todos los SO Windows (no
tienen porqué ser XP o de la gama de servidores).

PCAnywhere (comercial) : Válido para todos los SO Windows
1.11. Activación de visualización avanzada
Una de las formas que tienen los virus para infectar un equipo es aprovecharse de la
“doble extensión”. Un atacante coge un fichero .exe , lo renombra a .jpg.exe , y le cambia
el icono por el de la extensión .jpg. Dado que Windows por defecto oculta la extensión
10
de los ficheros, el usuario recibirá un fichero con nombre “foto.jpg” (que en realidad será
“foto.jpg.exe”), confiando en dicho fichero e infectando el equipo.
Para protegernos de este tipo de ataques es posible dentro del Explorador de Windows
desactivar esta capacidad accediendo a “Herramientas  Opciones de Carpeta  Ver”, y
desactivando la opción de “Ocultar las extensiones de archivo para tipos de archivo
conocidos”.
En ese mismo menú, se recomienda desmarcar las opciones de “Ocultar archivos protegidos
del sistema” y marcar la de “Mostrar todos los archivos y carpetas ocultos”. De esta forma
limitaremos la capacidad de “esconderse” de posible código malicioso.
Activa la visualización avanzada.
1.12. Activación del Salvapantallas
En el caso de que el equipo sea accesible desde un teclado y pantalla, será necesario
instalar un salvapantallas y activar la opción de protección por contraseña. De esta forma,
pasado un tiempo de inactividad se bloqueará la sesión de forma automática.
El salvapantallas puede activarse pulsando sobre la pantalla con el botón derecho y
accediendo al menú de Properties  Screensaver.
Ilustración 10: Activación del salvapantallas
Activa el salvapantallas.
11
Instalación del resto de aplicaciones
1.13.
En este punto se procederá a la instalación del resto de aplicaciones y servicios que se
desea que ofrezca el equipo, cuidando en todo momento su correcta instalación y
configuración (sobre todo en el caso del IIS ).
Se vuelve a recordar la necesidad vital de aplicar el Service Pack junto con todos los
últimos parches de forma previa a la puesta en producción del equipo (más de un
programa o servicio tiene parches propios que no serán instalados hasta que no se instala
dicho servicio).
Se recomienda la instalación de los siguientes programas (o equivalentes) :
1.
2.
3.
4.
5.
6.
7.
8.
9.
Cortafuegos ( ZoneAlarm o Agnitum Oupost, por ejemplo).
Antivirus (el que se desee).
Ad-Aware (anti-spyware).
HijackThis (Analizador del arranque de Windows).
Pstools (analizadores de procesos).
Process Explorer (alternativa al Administrador de Tareas).
Fport (asocia programas a puertos abiertos.
FileMon (monitoriza el acceso a programas).
RegMon (monitoriza el acceso al registro de Windows).
12
2. Securización de un equipo con CentOS 5.4
Una vez instalado el Sistema Operativo de forma segura, es necesario realizar una serie
de operaciones destinadas a la securización del mismo. En un principio el orden de
realización de las mismas es indiferente, aunque se recomienda seguir el indicado ya que
prioriza las tareas más importantes.
2.1. Instalación de parches y actualizaciones
Toda pieza de software esta sujeta a la existencia de posibles fallos de programación o
bugs. Algunos de ellos son únicamente molestos, pero otros pueden conllevar graves
riesgos de seguridad para nuestro sistema.
Es totalmente imprescindible tener el sistema actualizado con los últimos parches de
seguridad. Dichos paquetes pueden ser descargados desde:
http://ftp.gui.uva.es/sites/centos.org/5.4/updates/SRPMS/
aunque cada version de Linux tendrá su diferente URL.
CentOS provee una herramienta para la automatización de la instalación de parches y
software denominada yum. Gracias a yum, actualizar el SO es tan sencillo como :
# yum update
Este comando lanzará el sistema de actualización y descargará los paquetes necesarios
para actualizar el sistema. Otras versiones de Linux tienen otros comandos (apt-get ,
up2date, etc … ), pero la filosofía es la misma. Es posible ejecutar yum de forma
automatizada (viene por defecto) para que se ejecute cada noche y actualice el equipo.
Yum tiene un interface gráfico, YumEx, que permite hacer aún más fácil las tareas de
instalación y actualización de software (que puede instalarse con “yum install yumex”).
No hace falta hacer nada en este apartado.
2.2. Creación de cuenta adicional de root
Es altamente recomendable generar una segunda cuenta con permisos de superusuario en
el sistema. De esta forma se mantiene una cuenta de seguridad en el caso de pérdida de la
original (olvido de la contraseña, compromiso de la cuenta, etc ... ).
Esta cuenta debería ser la usada en las tareas de administración habituales del equipo, ya
que de esta forma cualquier intento de acceso a la cuenta de root podrá ser detectado
fácilmente como un intento de intrusión.
13
Puede crearse una cuenta adicional con permisos de superusuario con los siguientes
comandos :
[root@localhost root]# useradd admin -g 0 -u 0 -o
[root@localhost root]# passwd admin
Changing password for user admin.
New password: *********
Retype new password: *********
passwd: all authentication tokens updated successfully.
[root@localhost root]#
Crear una nueva cuenta de superusuario tal y como se indica anteriormente
2.3. Deshabilitación de servicios no deseados
Uno de los primeros aspectos a tener en cuenta en la securización de un equipo consiste
en la eliminación de los servicios no deseados. Se puede afirmar que un equipo que no
ofrece servicios a la red hace prácticamente imposible que pueda ser atacado, por lo que
la minimización de dichos servicios incrementa directamente la seguridad del equipo.
Los servicios y procesos activos en el sistema pueden ser vistos con los siguientes
comandos :
•
netstat –an : Muestra tanto los puertos abiertos del sistema como las conexiones
que está realizando.
•
ps –ef | more : Muestra los procesos activos en el sistema.
•
lsof | grep LISTEN : Muestra los procesos que mantienen conexiones activas en
el sistema (de gran utilidad para averiguar qué proceso tiene abierto un puerto).
Puede encontrarse una lista con los servicios disponibles en el directorio
/etc/rc.d/init.d/. En una instalación personalizada de Linux, los servicios básicos activos
necesarios son los siguientes (luego tendremos que añadir yum y sshd como básicos) :
crond
network
random
syslog
Deberán desactivarse el resto de servicios activos en el sistema esta operación puede
realizarse mediante la herramienta setup de CentOS (accediendo al menú System Services
) , o de forma genérica accediendo al directorio con los servicios de arranque del sistema
( /etc/rc.d/rc3.d/ o /etc/rc.d/rc5.d/ , en función de si el arranque se realiza en modo
texto o en modo gráfico, cosa que se puede comprobar con el comando runlevel). Dentro
de dicho directorio se encuentran los distintos servicios disponibles en el arranque (véase
Ilustración 1).
14
Ilustración 1: Servicios disponibles en el arranque
Los servicios que empiezan por una “S” se iniciarán cuando se arranque el equipo,
mientras que los que comienzan por una “K” serán desactivados. El número que se
encuentra después de la inicial indica el orden por el que se inician o paran (muy
importante a la hora de encender o apagar servicios que dependan de otros).
Siguiendo estos pasos, la próxima vez que se arranque el equipo se iniciarán únicamente
los servicios establecidos. Si se desea parar un servicio sin tener que reiniciar el equipo,
puede hacerse invocando el script de control, situado en /etc/rc3.d/init.d/ . Por
ejemplo, para parar los servicios de red ejecutaremos:
/etc/rc3.d/init.d/network stop
Una vez reiniciado el equipo, si se han desactivado todos los servicios superfluos no se
debería tener ningún puerto abierto en el equipo ( premisa básica para establecer un
perímetro de seguridad ).
Identifica el runlevel y deshabilita los servicios snmpd y sendmail.
2.4. Eliminación de usuarios y grupos no necesarios
Como ya se ha comentado, la información referente a los usuarios y grupos del sistema
se encuentra recogida en los ficheros /etc/passwd y /etc/group. Para facilitar la gestión
de los mismos, se recomienda eliminar todos los usuarios y grupos que no se consideren
necesarios para el correcto funcionamiento del equipo.
Los siguientes usuarios y grupos no son necesarios en un sistema Linux:
Usuarios
Adm
lp
Grupos
Adm
Lp
15
Sync
Shutdown
Halt
News
Uucp
Operator
games
News
Uucp
Games
Dip
Pppusers
Popusers
slipusers
Dichos usuarios y grupos pueden ser eliminados del sistema mediante los comandos
userdel y groupdel. Se verificará a continuación el borrado correcto de los usuarios
visualizando los ficheros correspondientes. [Nota: Estos usuarios pueden variar en
función de la distribución de Linux empleada, por lo que se deberá tomar como bueno el
principio de “dejamos solo los usuarios que sirvan para algo”, y aplicarlo en
consecuencia)].
Para deshabilitar temporalmente una cuenta, podemos hacerlo modificando el fichero
/etc/passwd
admin:x:0:0::/home/admin:/bin/bash
En lugar de x, poned * y la cuenta se deshabilitará.
Elimina los usuarios que no son necesarios en un sistema Linux. Deshabilita la
cuenta de admin que has creado en el punto 2.2 y comprueba que está
deshabilitada. Después, habilítala otra vez.
2.5. Protección de GRUB
La seguridad física es un factor muy importante para nuestro sistema. Si un intruso logra
situarse delante de nuestro equipo y reiniciarlo, cuando obtenga el prompt del GRUB,
tan solo tiene que seguir estos pasos:
1) Seleccionar el kernel con el que se quiere arrancar y pulsar “e” para editar el
arranque.
2) Seleccionar la línea que contiene el kernel entre las que se ofrecen y volver a
pulsar “e” para editarla.
3) Ir al final de la línea y añadir la palabra “single” (con un espacio delante) y pulsar
“Enter” para volver al menú anterior.
4) Pulsar “b” (boot) para arrancar con este kernel.
Con estas órdenes logrará arrancar el equipo en modo monousuario, y obtendrá un shell
de superusuario sin tener que introducir contraseña alguna, vulnerando de forma limpia y
totalmente sencilla nuestro sistema (si el gestor fuera LILO es todavía más sencillo ya que
únicamente hay que teclear “Linux single” en el arranque).
Para proteger el gestor de arranque, podemos crear una contraseña para GRUB con el
comando:
# grub-md5-crypt
16
Password:<ENTER-YOUR-PASSWORD>
Retype password:<ENTER-YOUR-PASSWORD>
$1$NYoR71$Sgv6pxQ6LG4GXpfihIJyL0
La última línea es el hash md5 de la contraseña introducida. Tendremos que copiarla e
insertarla en el fichero /boot/grub/menu.lst de la forma siguiente:
default=0
timeout=10
password --md5 $1$NYoR71$Sgv6pxQ6LG4GXpfihIJyL0
splashimage=(hd0,0)/grub/splash.xpm.gz
title Fedora Core (2.6.10-1.14_FC2smp)
root (hd0,0)
kernel /vmlinuz-2.6.10-1.14_FC2smp ro root=/dev/md2 rhgb quiet
initrd /initrd-2.6.10-1.14_FC2smp.img
De esta forma, cada vez que se quiera editar la secuencia de arranque será necesario
introducir la contraseña especificada.
Estas medidas tendrán que ser complementadas con la modificación de la configuración
de la BIOS para que únicamente pueda arrancarse desde el disco duro del sistema (si
cualquier usuario o intruso puede arrancar desde un CDROM o disquete, la situación
vuelve a la inseguridad inicial).
Reinicia el SO y cambia la contraseña tal y como aquí se explica. Para que no
tengas que preguntarla en la siguiente sesión, la nueva contraseña de root será
qwerty. Establece una contraseña para el GRUB (tambien qwerty) y comprueba
que ya no puedes cambiar el inicio si no introduces la contraseña.
2.6. Instalar OpenSSH ( Secure Shell )
En la mayoría de los casos será necesario disponer de un medio de administración
remota de los equipos (por estar los mismos en otra localización física, por no tener
monitores por razones de espacio, etc ...). Es necesario disponer de un medio de
administración que nos ofrezca unas garantías de seguridad suficientes.
El medio de administración más empleado en la antigüedad es telnet, que tiene graves
problemas de seguridad, ya que no cifra ni la información de autenticación (el nombre de
usuario y la contraseña) ni la comunicación en sí misma, además de ser vulnerable a
ataques de secuestro o hijacking de la conexión. La alternativa a telnet es el OpenSSH (
Secure Shell ).
OpenSSH es la herramienta a emplear para administrar de forma remota equipos Unix /
Linux con seguridad. OpenSSH cifra tanto la información de autenticación (el nombre de
usuario y la contraseña) como el tráfico de la sesión. De forma añadida, permite
establecer autenticación mediante clave pública además de mediante contraseña, lo que
añade un nivel extra de seguridad al sistema.
17
OpenSSH incluye también un servicio de copiado de ficheros de forma segura
denominado scp, que permite realizar transferencia de ficheros entre dos equipos
ofreciendo confidencialidad, autenticidad e integridad de la información transmitida, así
como un sustituto seguro de los comando “r” de Unix.
OpenSSH viene instalado por defecto con cualquier instalación de Linux (si no está
instalado, puede ejecutarse “yum –y install openshh-server” o descargando el código fuente de
la web de OpenSSH).
Se puede verificar el correcto funcionamiento con : ssh –l root localhost
Llegados a este punto tenemos el servicio SSH activo y funcionando de forma correcta.
Sin embargo, es recomendable modificar la configuración tanto del cliente como del
servidor para optimizar la seguridad del mismo. Los ficheros de configuración del SSH
son los siguientes :
•
•
/etc/ssh/ssh_config (configuración del cliente).
/etc/ssh/sshd_config (configuración del demonio).
Valores interesantes ssh_config :
•
Las opciones son autoexplicativas: Es MUY importante asegurar que no se ha
activado la compatibilidad con la versión 1 del ssh o ssh1 (que tiene graves fallos
de seguridad).
Valores interesantes sshd_config:
•
Allowed Authentications: Permite la autenticación por distintos medios
(password y/o clave público).
•
Required Authentications: Exige los niveles de autenticación especificados.
Otra de las características sumamente útiles del SSH es la posibilidad de copiar ficheros
entre dos máquina de forma segura, todo ello integrado dentro del protocolo. Dicha
capacidad puede ser utilizada dentro de un shell script para realizar copias de seguridad
de forma segura a través de Internet. Ejemplos de uso de scp2 pueden ser:
•
scp [email protected]:prueba.txt ./  Copia el fichero de la máquina remota a
la local.
•
scp ./prueba.txt [email protected]:  Copia el fichero a la máquina remota
desde la máquina local.
Como ya se ha podido ver con anterioridad, SSH soporta varios métodos de
autenticación, siendo el de clave pública uno de los más empleados gracias a las
posibilidades de administración que facilita. Mediante el uso de clave pública es posible:
•
Aumentar la seguridad de la comunicación al exigir dos factores (contraseña de
usuario más contraseña de la clave privada y su tenencia).
18
•
Realizar tareas desatendidas de administración sin tener que poner contraseñas en
los scripts (realizando la autenticación únicamente mediante tenencia de la clave
privada).
Otra de las capacidades interesantes del SSH es la de redirigir o “tunelizar” sesiones X a
través de una conexión cifrada, ofreciendo seguridad a toda la comunicación. Para ello
será necesario habilitar en el servidor la opción de AllowX11Forwarding (viene habilitada
por defecto).
Será necesario habilitar a su vez dicha opción en el cliente. Se ofrecen las configuraciones
para varios clientes de SSH:
•
SecureCrt : se tendrá que habilitar esta opción accediendo (con una sesión SSH
ya abierta) a Option  Session Options  Connection  Advanced  Port
Forwarding  Forward X11 Packets.
•
Putty : Se tendrá que acceder a Connection  SSH  Auth  Enable X11
Forwarding
•
SSH : Se deberá eliminar el comentario de la línea “X11Forwarding
yes” en el fichero /etc/ssh/sshd_config.
Como nota de carácter informativo, el SSH intercambia las claves con el cliente cada
hora, acción no soportada por muchos clientes de SSH para Windows (el SecureCRT o el
Putty, por ejemplo), lo que provoca una desconexión. Para desactivar esta funcionalidad
de reintercambio de claves debemos modificar el valor de RekeyIntervalSeconds de 3600
a 0 en el fichero /etc/sshd_config.
No hace falta hacer nada en este apartado.
2.7. Registro de accesos o logging
Los registros de actividad o logs de un sistema son una parte fundamental para la
seguridad del mismo, ya que permiten detectar posibles irregularidades en el
funcionamiento del mismo, así como responder con rapidez a posibles intentos de
intrusión.
La tarea de recopilar la información de lo que ocurre en el sistema se encarga al demonio
syslogd, y los elementos de los que recoge información se encuentran descritos en el
fichero /etc/syslog.conf.
Fedora Core 6 recopila la información necesaria del sistema desde un punto de vista de
seguridad (accesos al sistema, mensajes de error, etc ... ). Sin embargo, se pueden realizar
varias recomendaciones de seguridad:
•
Establecer permisos de lectura para los directorios de logs: No es necesario que el
resto de usuarios pueda leer ( y mucho menos modificar ) los logs del sistema. Se
deberá modificar el conjunto de permisos de la forma siguiente:
[root@fenix log]# chmod -R 600 *
19
•
Enviar la información de log a otro equipo: Es posible hacer que Linux envie la
información recogida a un equipo remoto, haciendo mucho más difícil su
modificación (un intruso que desee modificar los logs tendrá que hacerlo en la
máquina inicial, percatarse de la existencia de la máquina secundaria, y atacar esta de
forma exitosa).
Para activar esta capacidad de logging remoto será necesario modificar ambos
ficheros de configuración del syslog (en el cliente y en el servidor). En el equipo cliente
se deberá añadir una línea por cada item que se quiera transferir al equipo remoto,
por ejemplo:
# The authpriv file has restricted access.
authpriv.*
/var/log/secure
authpriv.*
@192.168.18.4
En el equipo remoto deberá indicarse al demonio syslogd que esté a la escucha de
entregas de información de log (el syslogd siempre envía la información de log al
puerto 514 UDP de la máquina destino ). Para ello se deberá modificar el fichero
/etc/sysconfig/syslog de la forma siguiente:
SYSLOGD_OPTIONS="-r -m 0 “
Se deberá reiniciar el demonio syslogd para que los cambios surtan efecto.
De la misma forma, es recomendable el uso de algún programa de análisis de log
automatizado, como pueden ser:
Logwatch: http://www.logwatch.org/tabs/download/ (por defecto en FC6)
Swatch : http://www.oit.ucsb.edu/~eta/swatch/
Echa un vistazo al fichero /var/log/messages. ¿Qué tipo de logs se almacenan
aquí según en fichero de configuración?
2.8. Bastille
Bastille es una potente herramienta de seguridad del entorno Linux dirigida
principalmente a la distribución Red Hat. constituyendo una herramienta ideal para una
securización rápida de un sistema (y ofreciendo soporte para otros sistemas, Fedora Core
entre ellos).
Pueden obtenerse las instrucciones de descarga e instalación de Bastille Linux desde:
http://www.bastille-linux.org/running_bastille_on.htm
Una vez instalado, el comando bastille nos mostrará el entorno gráfico de Bastille, a través
del cual y de forma sencilla se podrán realizar diversas modificaciones de seguridad a
nuestro sistema operativo.
20
Gran parte de dichas modificaciones se cubren en este capítulo, por lo que se preferirá
usar el Bastille una vez estudiadas en profundidad (y sin recurrir a una herramienta tan
específica). Uno de los usos más frecuentes del Bastille es la creación de una plantilla de
seguridad, que pueda ser aplicada de forma automatizada a un gran numero de equipos
(Bastille permite grabar la configuración de seguridad a aplicar en un fichero).
[Nota: Bastille no está todavía preparado para funcionar correctamente para FC6, por lo
que dará un error al inicio. Sin embargo, cambiando el fichero /etc/redhat-release y
substituyendo en la línea de versión el 6 por un 5 “engañaremos” lo suficiente al
programa como para poder ejecutarlo].
Este punto es meramente informativo, por lo que no hay que realizar ninguna
experiencia.
2.9. Programas SUID / SGID
En algunas ocasiones, algunos programas necesitan de permisos de superusuario para
realizar algunas de sus funciones. Para permitir el funcionamiento de estos programas se
desarrolló un sistema de adopción de privilegios que se denomina SUID (si es un usuario
lo que se adopta) o SGID (si es un grupo). Un ejemplo de estos programas es el
comando passwd, que permite a los usuarios cambiar su contraseña (y que actúa sobre el
fichero /etc/shadow, accesible solo a root ). Un programa SUID/SGID puede
reconocerse por la letra “s” en su listado de permisos:
-r-s--x--x
1 root
root
15104 mar 14 01:44 /usr/bin/passwd
El problema existente con los programas SUID/SGID radica en su programación. Dado
que estos programas tienen acceso a permisos de superusuario, un fallo en su
programación puede provocar que sean usados de forma perniciosa, permitiendo a un
intruso ganar privilegios en el sistema. Este problema es aun más grave en el uso de shell
scripts, ya que suelen estar programados de forma “casera” y pueden tener fácilmente
problemas de seguridad.
Se deberán buscar todos los programas que tengan estos bits activados, y determinar su
utilidad, pudiéndose para eso emplear los siguientes comandos:
[root@fenix root]# find / -perm /u+s –print > suid.txt
[root@fenix root]# find / -perm /g+s –print > sgid.txt
En caso de no considerarse necesario que los usuarios tengan acceso a dichos programas,
se deberá eliminar el bit “s” mediante el comando chmod. Un ejemplo sobre el comando
ping puede ser:
[root@fenix root]# chmod -s /bin/ping
Busca los progranas con el bit s activo tal y como se explica anteriormente.
Quitar el bit s del ping.
21
2.10. Permisos en sistemas de ficheros
Un directorio o un fichero con permisos de escritura para todos los usuarios puede ser
un problema de seguridad grave, ya que permite a un posible intruso tanto modificar
dichos ficheros como borrar y añadir ficheros a un directorio con total impunidad
(pudiendo colocar programas de hacking o simplemente, pornografía o warez ).
Se recomienda buscar dichos directorios y ficheros, y proceder a la modificación de sus
permisos o a su eliminación. Esta operación puede realizarse con los siguientes
comandos:
[root@fenix root]# find -perm /g+w -print
[root@fenix root]# find -perm /o+w -print
Para cambiar los permisos de dichos ficheros, se emplea el comando chmod:
[root@fenix root]# chmod 744 prueba
[root@fenix root]# chmod 755 prueba
[root@fenix root]# chmod 700 prueba
(permisos totales al creador, de lectura para el resto
de usuarios).
(permisos totales al creador, lectura y ejecución al
resto).
(permisos totales al creador, sin acceso para el resto
de usuarios).
Los directorios temporales como /tmp tienen activada una característica que se
denomina sticky bit ( “bit pegajoso” ), que hace que solo los propietarios de los ficheros
puedan eliminar o crear dichos ficheros en el directorio.
También es recomendable actuar sobre el directorio que contiene todos los scripts
arranque del sistema, /etc/rc.d/init.d. De forma inicial, el directorio tiene permisos
lectura para todos los usuarios, lo que puede resultar en un riesgo de seguridad
tenemos scripts personalizados que puedan tener contraseñas, por ejemplo,
simplemente por ocultar qué es lo que se arranca en nuestro equipo).
de
de
(si
o
Se recomienda el cambiar los permisos de dicho directorio para que no sean de lectura
mediante el comando chmod:
[root@fenix rc2.d]# chmod 700 /etc/rc.d/init.d/*
De la misma forma, se recomienda asegurar que todos los ficheros creados por root (y
por el resto de usuarios) tengan una configuración de seguridad inicial que no de
permisos al resto de usuarios mediante la modificación de la máscara de permisos inicial
o umask. Para ello deberá añadirse la siguiente línea a los ficheros /etc/profile ,
/etc/csh.login , /etc/csh.cshrc y /etc/bashrc:
umask 022
Busca los ficheros con permisos de escritura, tal y como se explica anteriormente.
Cambia los permisos de /etc/rc.d/init.d tal y como se explica. ¿Qué es lo que
haría un umask 077? (http://es.wikipedia.org/wiki/Umask)
22
2.11. Activar políticas de contraseñas
Se deberán activar las políticas de contraseñas pertinentes para proteger el sistema. Los
parámetros más frecuentes (longitud de contraseñas, expiración de contraseña, mínimo
número de días entre cambios de contraseñas), se encuentran en el fichero
/etc/login.defs. Los parámetros recomendados son los siguientes:
PASS_MAX_DAYS 60
PASS_MIN_DAYS 1
PASS_MIN_LEN 8
PASS_WARN_AGE 7
Modifica el fichero según se indica en este punto.
2.12. Banner de inicio al sistema
Cuando se entra a un sistema mediante un login estándar o mediante un acceso vía telnet
o ssh , suele aparecer una cierta información de entrada al sistema, como puede ser la
versión del sistema operativo o la serie del kernel empleada.
De la misma forma, es recomendable incluir un aviso legal a la entrada del sistema que
avise de la propiedad privada del mismo.
Para ello, se deberán modificar los ficheros /etc/motd o /etc/issue (en función del
Linux empleado), introduciendo el mensaje que se estime oportuno.
Modifica los ficheros poniendo lo que creas oportuno. Comprueba que funciona
haciendo un ssh a otra máquina Fedora.
2.13.
Montado seguro de particiones
Linux ofrece diversas opciones de protección adicional para las particiones de un equipo,
que pueden ser aprovechadas para aumentar la seguridad del sistema. Dichas opciones
son las siguientes:
•
•
•
nosuid : Impide por defecto la ejecución con privilegios adicionales de los
programas con bits SUID/SGID.
noexec : Impide la ejecución de programas ejecutables en la partición.
ro: Hace que todos los ficheros de la partición sean de solo lectura
Se recomienda el uso de estas opciones con precaución. Para activar dichas características
se tendrá que modificar el fichero /etc/fstab y añadir las opciones necesarias. Un
ejemplo puede ser el siguiente:
23
/dev/sda3 /tmp ext2 defaults,rw,nosuid,nodev,noexec 1 2
/dev/sda4 /home ext2 defaults,ro,nosuid,noexec 1 2
En este punto no hace falta realizar nada.
2.14. Deshabilitar Ctrl + Alt + Supr
Linux viene con la capacidad de reiniciar el sistema “al estilo Windows” pulsando de
forma simultánea la combinación de teclas “Ctrl + Alt + Supr “, aun sin tener iniciada
ninguna sesión de usuario (permitiendo realizar un ataque contra el LILO, o simplemente
disrumpiendo el funcionamiento del equipo).
Para desactivar esta capacidad, se deberá acceder al fichero /etc/inittab, y comentar la
siguiente línea con un símbolo “#”:
# ca::ctrlaltdel:/sbin/shutdown -t3 -r now
Será necesario a continuación indicar al demonio init que relea su configuración mediante
el comando:
[root@fenix root]# /sbin/init q
Deshabilita ctrl.+Alt+Supr tal como se explica en este punto.
2.15. Protección del protocolo TCP/IP
Existen varias formas de aumentar la resistencia del equipo ante ataques basados en el
protocolo TCP/IP (sobre todo en lo referente a ataques de denegación de servicio o
DoS). Todas ellas se basan en la activación de ciertas medidas de seguridad en el fichero
/etc/sysctl.conf, que estudiamos a continuación :
Evitar que el equipo actúe como router :
net.ipv4.ip_forward = 0
Habilitar protección contra IP spoofing:
net.ipv4.conf.all.rp_filter = 1
Evitar que el equipo acepte icmp redirects
net.ipv4.conf.all.accept_redirects = 0
Habilitar protección TCP SYN:
net.ipv4.tcp_syncookies = 1
Modifica el fichero tal y como se explica en este punto.
24
2.16. Limitar el acceso a programas instaladores
Dentro del equipo existen una serie de programas que pueden permitirnos la instalación
sencilla de nuevo software en el mismo. Estos programas instaladores pueden ser usados
por un posible intruso para instalar programas perniciosos para nuestro sistema, por lo
que se recomienda que, una vez instalado todo el software que necesite el equipo para
funcionar, se pongan fuera del alcance de los usuarios.
Es necesario afirmar que esta medida simplemente nos hará ganar tiempo, ya que es
posible descargar binarios directamente en el equipo, o descargar los mismos programas
de instalación). Las dos opciones más recomendadas pueden ser mover el programa
instalador a un disquete, y copiarlo al equipo cada vez que se quiera realizar una
instalación, o simplemente cifrarlo en el propio disco con el GnuPG.
Los programas más empleados, y que por tanto deberían ser protegidos, son gcc, yum y
rpm, situados en:
/bin/rpm
/usr/bin/gcc
/usr/bin/yum
En este punto no hace falta hacer nada.
2.17. Limitar el uso de recursos del sistema
Como medida adicional antes ataques de DoS o denegación de servicio, es recomendable
limitar el acceso a los recursos del sistema por parte de los distintos procesos que se
ejecutan en el mismo. Este control se realiza a través del fichero
/etc/security/limits.conf. Nos interesa limitar en primer lugar el número de procesos y la
cantidad de memoria asignada a cada usuario, siendo para ello añadir las siguientes líneas.
* hard nproc 20
* hard rss 5000
La primera línea limita el número de procesos disponibles para cada usuario a 20 (así se
evita que un usuario malicioso lance procesos de forma indiscriminada, agotando la
capacidad del sistema). La segunda línea especifica la cantidad de memoria máxima que
debería estar a disposición de un usuario, que solo debería aplicarse a equipos dedicados
a trabajo multiusuario (en equipos servidores, esta línea limitaría enormemente la
capacidad de trabajo de los servicios ofrecidos, y debería cambiarse a un límite similar a
100000 ).
Otra forma de ataque de DoS realizable es mediante la generación de volcados de
memoria o cores. Dichos ficheros suelen ocupar un espacio considerable en el disco
25
duro, por lo que pueden saturar con facilidad el espacio, pudiendo disrumpir la actividad
del equipo. De forma añadida, estos volcados de memoria pueden ser analizados por un
intruso para extraer información sensible (por ejemplo, contraseñas que se hayan
quedado almacenadas en la memoria del equipo).
Se recomienda eliminar la capacidad de generar ficheros core añadiendo la siguiente línea
al fichero /etc/limits.conf/
* hard core 0
Edita el archivo de configuración y haz lo que se indica en este punto.
2.18. sudo
La administración de un equipo informático suele recaer en manos de una sola persona,
o de un grupo de administradores en el caso de una red amplia de equipos. Sin embargo,
puede ser necesario en algunos casos que usuarios del sistema deban tener acceso a
comandos o ficheros limitados únicamente al superusuario.
En lugar de ofrecer acceso total a los poderes de root, o de facilitar la contraseña del
mismo (ambas opciones no son recomendables en absoluto desde una perspectiva de
seguridad), se puede recurrir a la herramienta SUDO para ofrecer dicho acceso limitado y
controlado.
SUDO viene controlado por su fichero de configuración /etc/sudores, que debe ser
modificado con el comando /usr/sbin/visudo. La sintaxis más frecuente es la siguiente:
User1 ALL=(ALL) ALL
Esta orden da al usuario user1 el poder de ejecutar cualquier comando como si fuera
root.
User1 ALL= /bin/halt,/bin/ping
Esta orden permite al usuario user1 ejecutar únicamente los comandos halt y ping.
Se recomienda encarecidamente guardar un log estricto de todos los accesos al comando
sudo (para poder controlar de esta forma quién ha realizado qué operaciones). Para ello
se activará la siguiente línea:
Defaults logfile=/var/log/sudolog
Modifica el fichero para que se hagan logs.
26
2.19. Chroot
Una estrategia de seguridad bastante empleada en la actualidad consiste en la aplicación
del comando chroot ( change root o cambio de raíz). La correcta aplicación de este
comando genera un subsistema de ficheros en el directorio especificado, de forma que
dicho directorio es visto por el usuario como el raiz ( “ / “ ) del sistema.
Con el chroot se consigue “encerrar” al usuario dentro de un entorno totalmente
controlado, evitando que pueda causar daños al sistema. Es necesario afirmar que esta
estrategia no es de aplicación trivial (suele dar más problemas de implementación que
beneficios de seguridad) , por lo que se suele usar únicamente en sistemas de muy alta
seguridad.
En este punto no hace falta hacer nada.
27

Documentos relacionados