Sei sulla pagina 1di 71

Sistemas Linux

[2.1] ¿Cómo estudiar este tema?

[2.2] Introducción a Linux

[2.3] Seguridad en la instalación

[2.4] Seguridad en la autenticación

[2.5] Securizar el acceso a la consola

[2.6] Securizar el acceso por red

[2.7] Otras medidas de seguridad

[2.8] Proxies

[2.9] Técnicas simples de detección de intrusos

2
TEMA
Sistemas Linux
Esquema

Linux Seguridad local Seguridad en red

TEMA 2 – Esquema
Sistema operativo de software Seguridad en las funciones que no Seguridad en las funciones que
libre muy popular cuyo código requieren acceso a la red requieren acceso a la red
puede ser modificado libremente
Seguridad en la autentificación Seguridad en el acceso a la red:
Introducción • TCP Wrapper
• El kernel • Cortafuegos

2
• El sistema de archivos Seguridad en el acceso a la consola: • Netfilter
• Los permisos • BIOS
• GRUB Proxies
Instalación • Bloqueo de sesión • Squid
• Particionado • Teclas de petición del sistema • WPAD
• Memoria swap • Terminales virtuales • SARG
• Cifrado con LUKS • Usuarios
• Postinstalación y gestión de
paquetes Técnicas de detección de intrusos
Otras medidas de seguridad
Seguridad en Sistemas Operativos Propietarios
Seguridad en Sistemas Operativos Propietarios

Ideas clave

2.1. ¿Cómo estudiar este tema?

Linux es conocido mundialmente por sus ventajas sobre otros sistemas operativos, como
su mayor rendimiento, menor tasa de fallos, seguridad y gran soporte para todo
tipo de hardware. Pero por encima de todo, la mayor ventaja que ofrece es que el sistema
operativo Linux es software libre, es decir, cualquier persona puede descargarse el
código fuente de Internet o adquirir un CD de bajo coste con la imagen.

El funcionamiento de Linux se basa principalmente en el kernel, el cual se puede definir


como el corazón del sistema. Cualquier persona puede descargar el kernel de Linux
de Internet y compilarlo él mismo o descargar un parche. Este contiene información
sobre las últimas actualizaciones realizadas desde la anterior versión del kernel.

En Linux, el usuario administrador es root, que dispone de todos los privilegios del
sistema. Cualquier atacante desearía tener el control de root, ya que de esta forma
tendría acceso a todos los servicios, dispositivos y cuentas de usuario.

Para arrancar Linux o cualquier otro sistema operativo en un host se debe de configurar
un proceso de inicio. El proceso de inicio empleado por Linux es: GRUB o LILO, aunque
este último se usa cada vez menos, el cual puede arrancar Linux o cualquier otro sistema
operativo instalado en el host.

La gran variedad de distribuciones existentes de Linux, como Ubuntu, Debian o


Red Hat, permiten al usuario encontrar la distribución que más se ajuste a sus
necesidades.

Actualmente se producen millones de comunicaciones entre host de todo el mundo, y


en esas comunicaciones puede haber intrusos que intenten recolectar datos ajenos.
Para detectar esas intrusiones existen los IDS, los cuales presentan dos tipos:

Basados en host Residen y protegen un host en particular.

Residen en uno o más host y protegen a todos los host conectados


Basados en red
a su red.

TEMA 2 – Ideas clave 3


Seguridad en Sistemas Operativos Propietarios

A veces puede ser interesante analizar el tráfico que genera un ordenador para
decidir si bloquear o dejar pasar la comunicación. Para ello existen los cortafuegos,
que son programas que examinan el tráfico que atraviesa una interfaz y toman
decisiones de enrutamiento basándose en una serie de reglas.

Los cortafuegos pueden ser dispositivos software o hardware. Los cortafuegos suelen
confundirse con los filtros de paquetes, pero no son lo mismo. Los cortafuegos
incluyen la función de filtros de paquetes, pero algunos cortafuegos pueden examinar
algo más que simples encabezados de paquete; también pueden examinar los datos (o
la carga útil) de los paquetes para decidir si son bloqueados o no.

Hoy en día, la información es un activo de gran valor, tanto para las empresas como
para los particulares. Si se produjera un accidente que dañara dicha información las
consecuencias podrían ser fatales. Para intentar evitar esta tragedia existen los
backups o copias de seguridad, los cuales permiten restaurar un sistema de ficheros
dañado al estado guardado en el último backup.

Los archivos de registro de Linux, que se encuentran almacenados en los discos


duros, contienen datos generados por los demonios del sistema, el kernel, etc. Estos
datos deben gestionarse mediante políticas de registro, ya que tienen una vida útil
limitada. En estas políticas de registro se define cómo se va a tratar a estos registros,
si se tienen que mantener o no, durante cuánto tiempo se mantienen, el salvado de
estos registros, etc. En la mayoría de las distribuciones de Linux los registros se
almacenan en el directorio /var/log.

Los sistemas de archivos en red, NFS (Network File System), permiten que dos host
Linux compartan sistemas de archivos, por lo tanto varias máquinas en una misma
red podrán acceder a ficheros remotos como si se tratara de locales de una forma
totalmente transparente para el usuario.

En la arquitectura de NFS intervienen al menos dos personajes:


Servidor Clientes

Almacena Acceden de forma remota


los archivos compartidos a los datos del servidor

TEMA 2 – Ideas clave 4


Seguridad en Sistemas Operativos Propietarios

Para asegurar los datos que se encuentran almacenados dentro de los discos se
utiliza RAID. RAID permite utilizar varios discos como si fueran un único disco
grande, distribuyendo o replicando los datos almacenados, con lo que se mejorará la
seguridad y disponibilidad de los datos.

La consola segura, más conocida como ssh, permite la conexión desde un equipo a
un servidor remoto y realizar acciones en el servidor de igual forma que si se hicieran
en el equipo local, con lo que se ofrecen infinidad de posibilidades. Para mantener la
seguridad en todas estas acciones entre host y servidor, ssh cifra todos los datos que
viajan entre las dos máquinas, de manera que si alguien intercepta la conversación, no
pueda extraer los datos que intervienen en ella.

Un host bastión consiste en un host ejecutando una aplicación con el fin de asegurar
una red de computadores. Esta aplicación permite convertir casi cualquier máquina en
un cortafuegos, router u ordenador de propósito general.

Hay varias distribuciones de Linux gratuitas que están específicamente configuradas


para ser utilizadas como bastión, pudiéndose ejecutar desde CD-ROM, USB o desde
una instalación completa en un host.

Un hacker puede intentar atacar un


sistema que esté ofreciendo un
servicio, por ejemplo una página web
o un servidor de correo, con el fin de
causar daños en el sistema o conseguir
datos a los que no tenga acceso.

Para conseguir esto, el atacante


utilizará diversos métodos, como
usurpaciones de identidad, scripts maliciosos, troyanos, etc. El administrador
del sistema debe intentar proteger al sistema lo máximo posible frente a estos ataques,
y cuando sucedan, se debe de rastrear las huellas dejadas por el atacante para obtener
información sobre quién, cómo y qué ha hecho sobre el sistema.

Este tema está dedicado a la seguridad en Linux. Nos hemos basado en las
distribuciones Debian GNU/Linux 7.3 Wheezy (14 de diciembre de 2013) y Ubuntu

TEMA 2 – Ideas clave 5


Seguridad en Sistemas Operativos Propietarios

Server 12.04.3 Precise Pangolin (26 de abril de 2012). Ambas distribuciones son
gratuitas y se pueden descargar de sus respectivas páginas web.
Para detalles sobre los comandos visite la correspondiente documentación oficial de
cada distribución:
Debian 7.3: http://debian-handbook.info/browse/stable/
Ubuntu 12.04.3: https://help.ubuntu.com/12.04/

Para estudiar este tema, lee las Ideas clave.

Se recomienda tener un sistema Debian 7.3 o Ubuntu 12.04.3, como se ha mencionado


antes, instalado en una partición del sistema operativo o bien en una máquina virtual
para poder practicar las diferentes lecciones de este tema.

2.2. Introducción a Linux

El sistema operativo Linux se divide en tres capas: hardware, kernel y


aplicaciones.

El kernel

El kernel, situado entre el hardware y las aplicaciones, puede ser considerado como
el núcleo de los sistemas Linux y su función es la de hacer que el software y el hardware
trabajen juntos. Las funciones más importantes del kernel son administrar la
memoria y el tiempo de ejecución de los programas que están ejecutándose y gestionar
el acceso a los periféricos.

El kernel puede ser descargado de numerosos servidores en Internety sus


actualizaciones pueden ser realizadas a base de parches (si no son muy grandes) o
descargando y recompilando nuevamente el kernel, si se trata de grandes cambios
respecto a la versión anterior del kernel. Mantener el kernel actualizado es vital si
queremos mantener un sistema seguro y estable.

TEMA 2 – Ideas clave 6


Seguridad en Sistemas Operativos Propietarios

Con respecto a la seguridad en el núcleo de Linux tendremos que tener claro los
siguientes aspectos:

La opción de red.
El cifrado que soporta.
Hardware de cifrado que soporta.
Sistema de archivos.
El proyecto GNU.

En ciertos casos, será necesario informarse si nuestra distribución actualiza ciertos


aspectos de nuestro interés que afectan a la seguridad del kernel. En caso contrario
habría que pensar en compilar (como medida de emergencia) el kernel o parche del
kernel que necesitemos.

Para ver las versiones del kernel que podemos tener acceso desde nuestro repositorio,
usaremos el siguiente comando:
# apt-cache search linux-image

Una buena fuente de información del núcleo de Linux se podría encontrar en la web
de Debian http://packages.qa.debian.org/linux o en la web de Ubuntu
http://kernel.ubuntu.com/reports/versions.html

Para instalar la versión del kernel que necesitamos usaremos el comando:


# apt-get install linux-image-version

La actualización o elección de un nuevo kernel, es un proceso muy delicado, pues


puede conllevar una nueva configuración del sistema. Es muy importante leer lo que la
instalación del nuevo kernel nos pregunta.

El sistema de archivos
El sistema de archivos de Linux, como el de otros sistemas operativos, es en forma de
árbol. Hay un único tronco o raíz (root) del que salen todas las ramas. Directorios
dentro de otros de directorios que contienen otros archivos u otros directorios.

En la siguiente tabla se pueden ver algunos de los diferentes sistemas de archivos


soportados en Linux:

TEMA 2 – Ideas clave 7


Seguridad en Sistemas Operativos Propietarios

Sistema de Tamaño máximo Tamaño máximo de


Notas
archivos de archivo. la partición
Fat16 2 GB 2 GB Soportado
Fat32 4 GB 8 TB Soportado
Sistema de archivos de
NTFS 2 TB 256 TB
Windows.
ext2 2 TB 32 TB Soportado
Sistema de archivos
ext3 2 TB 32 TB
estándar de Linux
ext4 16 TB 1 EB La evolución de ext3
reiserFS 8 TB 16 TB No está mantenido
Creado por IBM. No
JFS 4PB 32PB
está mantenido
XFS 8 EB 8 EB Creado por SGI
Figura 1: Tipos de sistema de archivos

Los archivos de los que consta el sistema operativo son de tipo:

Archivos regulares (texto, ejecutables, etc.).


Directorios.
Enlaces.
Dispositivo orientado a caracteres.
Dispositivo orientados a bloques.
Sockets.
Pipes.

La seguridad del sistema de archivos reside en permisos que tienen usuarios y grupos
a nivel de archivos. Si introducimos la orden ls –la el sistema nos mostrará todo el
contenido del directorio en el que nos encontremos.

TEMA 2 – Ideas clave 8


Seguridad en Sistemas Operativos Propietarios

Figura 2: Resultado del comando ls –la

El listado de la imagen anterior se divide en una serie de columnas:

1. La primera columna son una serie de 10 letras que describen el tipo de archivo, los
permisos del usuario propietario, los permisos del grupo propietario y los permisos
del resto de usuarios.
2. La segunda columna, es un número que nos dice el número de archivos/directorios
que contiene.
3. La tercera y cuarta columna son respectivamente, el usuario y el grupo propietario
del archivo. Todos los archivos tienen un usuario y un grupo de usuarios propietario.
4. La quinta columna es el tamaño.
5. Las siguientes 3 columnas muestran la fecha y hora del último acceso al archivo.
6. Finalmente, la última columna el nombre del archivo.

TEMA 2 – Ideas clave 9


Seguridad en Sistemas Operativos Propietarios

Permisos

Volvamos a echar un vistazo a la columna de los permisos (primera columna) descrita


anteriormente. La primera letra describe el tipo de archivo. En la siguiente tabla se
muestra los valores de dicha primera letra y su significado:

Símbolo Tipo de archivo


- Archivo regular
d Directorio
l Enlace
c Dispositivos orientado a caracteres
s Socket
p Pipe
b Dispositivo orientado a bloques

Los nueve siguientes símbolos describen de tres en tres (y en este orden) los permisos
del propietario, del grupo y del resto de usuarios. Los permisos se dividen en lectura “r”,
escritura “w” y ejecución “x”.

Figura 3: Permisos en Linux

En la imagen anterior, sobre el directorio bin, el usuario root tiene los permisos de
lectura, escritura, y ejecución (rwx). Seguidamente, el grupo root, tiene los permisos
de lectura y ejecución pero no tiene el de escritura (r-x). Finalmente, el resto de
usuarios tienen de nuevo permisos de lectura y ejecución (r-x).

Para cambiar los permisos del archivo usamos el comando chmod. Los permisos se
definen mediante bits:

rwx rwx rwx = 111 111 111


rw- rw- rw- = 110 110 110
rwx --- --- = 111 000 000

TEMA 2 – Ideas clave 10


Seguridad en Sistemas Operativos Propietarios

De esta manera:

rwx = 111, en binario = 7


rw- = 110, en binario = 6
r-x = 101, en binario = 5
r-- = 100, en binario = 4

Por ejemplo, si queremos habilitar todos los permisos al propietario, asignar permisos
de lectura y escritura al grupo y quitar todos los del resto de los usuarios, ejecutaremos
la siguiente orden:
# chmod 760 <nombre_archivo>

Si queremos cambiar el usuario propietario del archivo tenemos el comando chown:


# chown <nombre_usuario> <nombre_archivo>

Si queremos cambiar el grupo propietario del archivo tenemos el comando chgrp:


# chgrp <nombre_grupo> <nombre_archivo>

Los permisos más típicos suelen ser 755 (rwx r-x r-x).

Proyecto GNU (GNU is Not Unix)

En septiembre de 1983 se hizo público el proyecto por Richard Stallman. La idea era
hacer de forma altruista que un sistema operativo fuera del software propietario. El
primer desarrollo del proyecto fue emacs a los que siguieron muchos más.

En principio, Linux es simplemente el kernel del sistema operativo, pese a que hoy en
día se conoce el proyecto Linux/GNU como Linux.

2.3. Seguridad en la instalación

Se recomienda que para la instalación del sistema operativo se realice una instalación
mínima para así evitar complicaciones. Una vez esté dicha instalación realizada, se
deberán instalar solo los componentes que vamos a necesitar. Instalar servicios
innecesarios puede complicar nuestra labor de securización del sistema.

TEMA 2 – Ideas clave 11


Seguridad en Sistemas Operativos Propietarios

En la siguiente pantalla, durante la instalación de Debian, se muestran las opciones


que nos da el sistema operativo y cómo aparece elegida la opción «Utilidades
estándar del sistema». Nosotros elegiremos dicha opción para no instalar software
innecesario.

Figura 4: Instalación de Debian

De la misma manera, en la siguiente captura de pantalla de Ubuntu, no


seleccionaremos ningún programa a instalar.

Figura 5: Instalación de Ubuntu

La instalación del sistema nunca debería realizarse usando directamente Internet. En


su lugar se deberán usar DVD o CD y solamente se conectará a Internet cuando lo
tengamos bien preparado para afrontar el riesgo. Parte de la instalación consiste en la
decisión del particionado del disco duro.

TEMA 2 – Ideas clave 12


Seguridad en Sistemas Operativos Propietarios

Particionado de Linux

La decisión del particionado del disco duro deberá de ser manual. Tener diferentes
directorios del sistema en distintos volúmenes lógicos permite un mayor control del
sistema de ficheros y aumenta el rendimiento y la seguridad del sistema. De esta
manera las particiones y el tamaño de estas atenderán a diversos factores:

Se deberá poner en una partición o volumen separado, cualquier directorio con


datos dinámicos que pudieran variar sustancialmente. Un ejemplo serían los
directorios /var o /var/log
Los directorios donde los usuarios tengan permisos de escritura deberán estar en
volumen lógico separado. Por ejemplo los directorios /home, /tmp y /var/tmp
Se deberán montar en particiones de solo lectura, aquellos directorios que
contengan datos estáticos.

En la siguiente imagen se muestra cómo hemos particionado nuestra máquina virtual.

Figura 6: Particionado en Linux

Para entender cómo aplicar el particionado, tendremos que entender los diferentes
directorios del sistema. Para realizar esta lista nos hemos basado en la distribución
Ubuntu y Debian.

TEMA 2 – Ideas clave 13


Seguridad en Sistemas Operativos Propietarios

/ (raíz): es el nivel más alto dentro de la jerarquía de directorios. De aquí cuelgan el


resto de carpetas, particiones y otros dispositivos.
/bin (binarios): los binarios son los ejecutables de Linux. Aquí tendremos gran
parte de los ejecutables de los programas propios del sistema operativo, aunque no es
el único directorio que contiene ejecutables.
/boot (arranque): aquí nos encontramos los archivos necesarios para el inicio del
sistema, desde los archivos de configuración de GRUB o LILO, hasta el propio kernel
del sistema.
/dev (dispositivos): en este directorio estarán los dispositivos del sistema (como si
fueran archivos), por ejemplo usb, sda (o hda) con sus respectivos números que
indican las particiones.
/etc: aquí se guardan los ficheros de configuración de los programas instalados, así
como ciertos scripts que se ejecutan en al inicio del sistema. Los valores de estos
ficheros de configuración pueden ser complementados o sustituidos por los ficheros
de configuración de usuario que cada uno tiene en su respectivo directorio “home”.
/home (carpeta personal): cada usuario del sistema tendrá una carpeta a su nombre
dentro de este directorio. Dentro de dicho directorio el usuario tendrá subcarpetas
con su configuración y archivos personales. Cada usuario tendrá permisos sobre su
directorio home (excepto root que los tendrá sobre todos).
/lib (bibliotecas): contiene las bibliotecas del sistema (conocidas como
librerías), así como módulos y controladores (drivers).
/lost+found: es un directorio que podemos encontrar en todas las particiones.
Cuando por cualquier circunstancia se cierra mal el sistema (un apagón por ejemplo),
cuando se reinicie se llamará al programa fsck para restaurar la integridad del sistema
de archivos. En esta carpeta encontraremos la información que se mal-guardó debido
a la incidencia.
/media: es el directorio donde se montarán las unidades extraíbles como los USB,
CD/DVD y en algunas distribuciones, como Ubuntu, las particiones adicionales.
/mnt: es un directorio que se suele usar para montajes temporales de unidades.
/opt (opcionales): para guardar paquetes adicionales de aplicaciones.
/proc: información para la virtualización del sistema de ficheros de Linux.
/root: es la carpeta personal del administrador. La única que no se encuentra dentro
del directorio /home.
/sbin (binarios de sistema): son los ejecutables de administración del sistema
(mount, shutdown…).
/srv (servicios): información del sistema sobre ciertos servicios que ofrece (FTP,
HTTP…).

TEMA 2 – Ideas clave 14


Seguridad en Sistemas Operativos Propietarios

/sys (sistema): información sobre los dispositivos tal y como los ve el kernel.
/tmp (temporales): es un directorio donde se almacenan ficheros temporales. Cada
vez que se inicia el sistema este directorio se limpia.
/usr: contiene la configuración y las bibliotecas de C, C++ y de aplicaciones de
escritorio. También tiene archivos compartidos y el código fuente para el kernel Linux
(en /usr/src)
/var: ficheros del sistema como los buffer de impresión, los logs…

Figura 7: Esquema de los directorios principales de Linux

Además de los diferentes directorios que podemos encontrar hay dos términos que
debemos conocer para una instalación óptima y una buena gestión de las particiones:

Memoria Swap (de intercambio)

Cuando nuestra memoria RAM no es suficiente, Linux usa el disco duro para
almacenar dicha información que no nos cabe en la RAM. Para realizar esta función
Swap (o de intercambio) es necesario crear un volumen lógico, que deberá tener
entre 1 y 2 Gb. Este proceso de usar el disco duro como memoria caché se llama
memoria virtual.

TEMA 2 – Ideas clave 15


Seguridad en Sistemas Operativos Propietarios

Cifrado de particiones con LUKS

Cifrar la información que contienen los discos duros de un sistema Linux es vital.
Cuando se accede a un sistema sin permiso se suele dar el robo de información, es
importante protegerse ante ello por la importancia o confidencialidad que pueda
tener esta información o simplemente por ser datos personales que uno quiere tener
bien protegidos.

Post-instalación y gestión de paquetes

En los siguientes capítulos se desarrolla toda una serie de medidas a tomar para
securizar nuestro sistema. De todas maneras nos parece bastante importante señalar,
el empezar a utilizar el comando sudo. Es probable que el comando sudo no aparezca
instalado, por lo que quizá necesitemos acceder al sistema como root para poder usar
el comando apt-get de instalación de paquetes. A continuación vamos a ver la
instalación de paquetes, y para permitir que un usuario pueda utilizar el comando
sudo iremos al punto Usuarios.

En Linux, los programas están divididos en paquetes individuales, lo que facilita su


mantenimiento. Según la distribución en la que nos encontremos, el formato de dichos
paquetes varía. En Debian y Ubuntu son de extensión deb.

Una vez instalada la base del sistema operativo necesitaremos empezar a instalar todos
los paquetes necesarios según los servicios que queramos tener en nuestro servidor.
Tanto Debian como Ubuntu utilizan APT (Advanced Packaging Tool) como sistema
de gestión de paquetes. El fichero /etc/apt/sources.list contiene los repositorios de los
que la utilidad APT (Advanced Package Tool) descarga los paquetes para su
mantenimiento.

Hay que tener en cuenta varios puntos en la configuración de repositorios:

Usar la rama estable del repositorio a no ser de que se necesite una versión
específica.
Usar un repositorio oficial de la distribución instalada o de los fabricantes del
software del sistema que garanticen las actualizaciones de seguridad.
Usar repositorios que nos faciliten el código fuente, salvo que esté documentada la
modificación del mismo o se necesite versiones inestables.

TEMA 2 – Ideas clave 16


Seguridad en Sistemas Operativos Propietarios

En la instalación nos dan la posibilidad de elegir uno de los repositorios oficiales de


Debian.

Figura 8: Configuración del gestor de paquetes

Si queremos actualizar la base de datos de repositorios ejecutaremos la orden:


# apt-get update

Es importante actualizar la base de datos de repositorios antes de cualquier acción de


actualización o instalación de paquetes.

Y si queremos actualizar el sistema ejecutaremos:


# apt-get upgrade && apt-get dist-upgrade

Los paquetes tienen una estructura de dependencia y gestores de paquetes como APT
se encargan de resolver dichas dependencias. En Ubuntu y Debian esas dependencias
varían entre: paquetes necesarios, recomendados y sugeridos. Al instalar un
paquete se instalan, por defecto, los paquetes recomendados.

TEMA 2 – Ideas clave 17


Seguridad en Sistemas Operativos Propietarios

En la instalación de un nuevo paquete se debe especificar que no se instalen los


paquetes recomendados usando la siguiente orden:
# apt-get install <nombre_del_paquete> --no-install-recommends

Para la eliminación de un paquete:


# apt-get remove <nombre_del_paquete>

Si queremos que además de borrar el paquete eliminemos también todos los archivos
de configuración:
# apt-get --purge remove <nombre_del_paquete>

Si queremos eliminar los paquetes que son innecesarios, usaremos:

# apt-get autoremove

No deberemos de tener paquetes que no necesitamos instalados en nuestro sistema.


Así reducimos el riesgo posibles errores de aplicaciones que no necesitamos. Cuantas
menos aplicaciones, menos posibilidad de errores.

Para realizar un listado de paquetes instalados:


# dpkg -l

Tras la desinstalación de paquetes que no queremos, tendremos que desinstalar los


paquetes innecesarios:
# apt-get autoremove

2.4. Seguridad en la Autenticación

La base de la autenticación basada en contraseñas consiste en crear contraseñas


robustas. Es ahí donde se entran en juego crear contraseñas de calidad, difícilmente
adivinables mediante la fuerza bruta o el conocimiento de su usuario.

TEMA 2 – Ideas clave 18


Seguridad en Sistemas Operativos Propietarios

Esta sería una lista de consejos a la hora de realizar contraseñas:

Escribir contraseñas largas de al menos diez caracteres.


Usar números, letras, mayúsculas, minúsculas y caracteres especiales.
No usar palabras que se puedan encontrar en el diccionario pero a su vez sean fáciles
de recordar por el usuario.
Evitar información pública como fechas de nacimiento, para escribir las claves.

Para vigilar la calidad de las contraseñas podemos utilizar PAM (Pluggable


Authentication Module). Mediante el módulo pam_cracklib se analiza dicha calidad y
puede analizar aspectos como la longitud de la contraseña, evitar que las contraseñas
sean palabras en diccionarios o que la contraseña no sea la misma que la anterior. La
configuración del módulo pam_cracklib reside en /etc/pam.d/common-password.

También podemos asignar caducidad a las contraseñas existentes desde el fichero


/etc/login.defs.

2.5. Securizar el acceso a la consola

BIOS

La configuración de la BIOS debe estar protegida con una contraseña. Esto evitará los
cambios de configuración que vamos a hacer sobre esta. Desde la BIOS se debe añadir
una contraseña al arrancar el sistema y establecer el disco duro como primera partición
de arranque desactivando el arranque de otras unidades como CDROM o USB,
llegando incluso a eliminarlos físicamente si fuera posible.

GRUB

GRUB es un gestor de arranque bastante popular en Linux desarrollado por GNU.


Como Lilo, GRUB es capaz de iniciar varios sistemas operativos distintos, como
Linux, FreeBSD, OpenBSD y NetBSD, pero si queremos que arranque un sistema
operativo Windows deberemos utilizar un cargador en cadena.

TEMA 2 – Ideas clave 19


Seguridad en Sistemas Operativos Propietarios

GRUB posee la ventaja de aportar una interfaz gráfica, con lo que el usuario podrá
ver los comandos disponibles y no tendrá que recordarlos, lo que facilita enormemente
su uso.

En el caso de Debian y Ubuntu es GRUB es el cargador de inicio por defecto.

Figura 9: Error al sobrepasar el máximo de columnas

Para una mayor seguridad, es necesario configurarlo para que no se pueda modificar
su configuración.

Para proteger el gestor de arranque desde Debian y Ubuntu lo haremos de la


siguiente manera:
a. Con la orden # grub-mkpasswd-pbkdf2 realizamos un hash sobre una contraseña
b. En el fichero /etc/grub.d/40_custom añadiremos las siguientes líneas:
set superusers="superusuario"
password_pbkdf2 superusuario <hash generado>
c. Editar del fichero /etc/default/grub la línea:
GRUB_TERMINAL=console
d. Actualizamos GRUB con la orden:
# update-grub

TEMA 2 – Ideas clave 20


Seguridad en Sistemas Operativos Propietarios

Por otro lado en GRUB por defecto, aparecen dos entradas, una de ellas es la normal
y la otra es la de recuperación del sistema. Si el sistema tiene un usuario root nos pedirá
la clave de dicho usuario al entrar en modo recuperación (modo single-user). Sin
embargo, si este usuario no fue creado, el sistema iniciará el sistema con el usuario
root sin pedirnos ninguna clave.

Para evitar esto la solución sería asignar una clave a dicho usuario ejecutando las
órdenes:
# sudo su
# passwd

Se debe de configurar el tiempo de inactividad que tienen las consolas de texto


fuera del entorno gráfico.

Si queremos que la consola desconecte el usuario cuando se superen los 300 segundos
de inactividad tendremos que añadir en el archivo /etc/profile las líneas:
TMOUT=300
readonly TMOUT
export TMOUT

Bloqueo de sesión

También existen herramientas para bloquear la sesión de la consola activamente.


En Debian existe la herramienta vlock y en Ubuntu la herramienta screen. Para su
instalación y uso lea la documentación correspondiente.

Banner del Sistema

La información que aparece en el Banner de Sistema al iniciarse sobre lo que tienes


instalado, también puede dar ideas malintencionadas a la hora de atacar tu sistema. Se
pueden editar los ficheros /etc/issue y /etc/issue.net

Teclas de petición del sistema

Las teclas de petición del sistema (Magic SysRq key) y el Contr + Alt + Supr
conviene mantenerlas desactivadas. La primera permite, mediante una combinación
de teclas pasar directamente al kernel una orden de bajo nivel. Contr + Alt + Supr

TEMA 2 – Ideas clave 21


Seguridad en Sistemas Operativos Propietarios

permite reiniciar el sistema. Estas teclas pueden ser llamadas sin necesidad de haberse
logueado en el sistema.

Para desactivar Magic SysRq key en /etc/sysctl.conf añadir la línea:


kernel.sysrq = 0

Para desactivar Contr + Alt + Supr

En Debian, en el fichero /etc/inittab comentar la línea:


ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now

En Ubuntu, en el fichero /etc/init/control-alt-delete.conf comentar la línea:


exec shutdown -r now "Control-Alt-Delete pressed"

Terminales virtuales

Linux viene por defecto con 6 Terminales virtuales. Para acceder a cada una de ellas se
utiliza la combinación de teclas Alt + (F1, F2, F3, F4, F5 o F6). De esta manera,
podemos en un proceso de instalación de paquetes en la terminal tty1 mientras leemos
un archivo en la tty2.

Figura 10: Terminal virtual tty2 en Debian

Deberemos limitar el número de Terminales virtuales a una sola.

TEMA 2 – Ideas clave 22


Seguridad en Sistemas Operativos Propietarios

En Debian, para deshabilitar todas las terminales virtuales excepto una tendremos que
comentar, del fichero /etc/inittab las siguientes líneas:
2:23:respawn:/sbin/getty 38400 tty2
3:23:respawn:/sbin/getty 38400 tty3
4:23:respawn:/sbin/getty 38400 tty4
5:23:respawn:/sbin/getty 38400 tty5
6:23:respawn:/sbin/getty 38400 tty6

En Ubuntu tendremos que eliminar los ficheros que configuran estas terminales
virtuales. Para esto usaremos desde la Shell de Linux el comando rm:
# rm /etc/init/tty2.conf
# rm /etc/init/tty3.conf
# rm /etc/init/tty4.conf
# rm /etc/init/tty5.conf
# rm /etc/init/tty6.conf

Usuarios

Al finalizar la instalación, según el sistema operativo, se crean distintos usuarios. En


Debian se crea un usuario root y un usuario sin privilegios de administración. En
Ubuntu un usuario root deshabilitado y un usuario con privilegios de administración.
Los usuarios deberían de ser los siguientes:

Usuario con privilegios de administrador sin permisos de acceso remoto.


Este usuario deberá poder ejecutar el comando sudo.
Usuario normal con permisos para acceder de manera remota y que
pudiera ejecutar el comando su. En caso de acceder de forma remota, el usuario
podrá ejecutar el comando su para usar el administrador.

El comando su nos permitirá usar el intérprete de comandos de otro usuario sin salir
de nuestra sesión. Nos pedirá la contraseña de la cuenta de usuario a la que queremos
acceder.

El comando sudo nos permitirá ejecutar un comando como si fuéramos otro usuario.
Nos pedirá la contraseña de nuestro usuario.

La ventaja que tiene sudo sobre su, es que solo ejecuta un comando como
administrador, estando al instante siguiente de nuevo como usuario sin privilegios.

TEMA 2 – Ideas clave 23


Seguridad en Sistemas Operativos Propietarios

Pero este comando tiene a veces un «período de gracia», un pequeño tiempo en el que
no necesitará pedir la contraseña para ejecutar de nuevo un comando como el otro
usuario, pasado este tiempo volverá a requerir la contraseña. Es aconsejable desactivar
este «período de gracia» para evitar que si alguien se apodera de nuestra máquina
durante el tiempo que esté activado pueda ejecutar comandos de administrador.

Para desactivar este «período de gracia»:


1. sudo nano /etc/sudoers
2. Agregar la siguiente línea:
Defaults:ALL timestamp_timeout=0

Para limitar el acceso al comando su, realizar los siguientes pasos:


1. Crear el grupo “wheel”
# addgroup wheel
2. Añadir el usuario que queremos que pueda ejecutar el comando su al grupo recién
creado.
3. Verificar que en el fichero /etc/pam.d/su aparece la siguiente línea:
auth required pam_wheel.so

Para limitar el uso de sudo hay que realizar los siguientes pasos:
1. Logarnos como root o utilizar el comando su.
2. Probar si el comando sudo está instalado mediante la orden sudo –V que comprueba
la versión. Si no nos muestra la versión del comando, tendremos que instalarlo.
3. Visualizar la lista los grupos que existen en el sistema:
# vi /etc/group
4. Todos los usuarios que vayan a usar el comando sudo tendrán que estar en el grupo
admin. Crear el grupo admin si no está creado:
# addgroup admin
5. Para mostrar los grupos a los que pertenece un usuario:
# groups <nombre_de_usuario>
6. Para añadir un usuario al grupo admin:
# usermod -a -G admin <nombre_de_usuario>
7. Se ha de modificar el fichero /etc/sudoers. Para modificarlo usaremos el comando:
# visudo
8. Añadiremos la línea:
%admin ALL=(ALL) ALL
9. Guardaremos los cambios.

TEMA 2 – Ideas clave 24


Seguridad en Sistemas Operativos Propietarios

Figura 11: Archivo /etc/sudoers.tmp

Finalmente, es necesario que las cuentas del sistema estén bloqueadas y no se les
permita acceso a la Shell. Hay que tener en cuenta que no puede aplicarse al
usuario root. Esto evita la posibilidad de que un intruso pueda beneficiarse de una
de estas cuentas. Son usadas por el sistema para realizar ciertas tareas. Sigue los
siguientes pasos:

1. Obtener todos los usuarios del sistema. Para ello seleccionaremos los usuarios con
un UID inferior a 500. Para obtener todos los usuarios con sus nombres UID y
Shell correspondientes, ejecutar el siguiente comando:
# awk -F: '{print $1 ":" $3 ":" $7}' /etc/passwd
2. Seguidamente bloquear cada uno de los usuarios del sistema con la orden:
# usermod -L <usuario>
3. Deshabilitaremos la Shell de cada uno de los usuarios del sistema con la orden:
# usermod -s /usr/sbin/nologin <usuario>

IMPORTANTE: No aplicar al usuario root

2.6. Securizar el acceso por red

Para restringir el acceso por red utilizaremos TCP Wrapper y un cortafuegos. Como
configurador del cortafuegos usaremos iptables, aunque hay herramientas más
amigables como Shorewall en Debian y UFW en Ubuntu.

TEMA 2 – Ideas clave 25


Seguridad en Sistemas Operativos Propietarios

TCP Wrapper

TCP Wrapper ofrece un control de acceso a nivel de aplicación. No todas las


aplicaciones están preparadas para usar TCP Wrapper y para averiguarlo tendremos
que comprobar que el servicio hace uso de la librería libwrap.

Para comprobar si el servicio hace uso de libwrap ejecutaremos el comando:


# ldd /ruta/ejecutable/servicio | grep libwrap.so
En el caso de querer saber que paquetes funcionan con libwrap ejecutar:
$ apt-cache rdepends libwrap0

Por defecto TCP Wrapper admite toda conexión a los servicios. Para su configuración
específica podremos usar los ficheros /etc/hosts.allow, para permitir los servicios y
/etc/hosts.deny para denegar los servicios.

Configuraremos TCP Wrapper para bloquear todas las conexiones a servicios


privados y permitir el acceso a servicios públicos. Realizaremos los siguientes pasos:
1. Encontrar los servicios públicos y privados que usan la librería libwrap. Usaremos
el comando:
# strings /ruta/ejecutable/servicio | grep libwrap

Si el comando anterior devuelve texto significará que el servicio habrá que configurarlo.
2. Si encontramos dos servicios “portmap” y “sshd” que queremos que sean privados
y encontramos otro, por ejemplo, “vsftpd” que sea público:

a) en el fichero /etc/hosts.allow pondríamos las líneas:


vsftpd : ALL
portmap, sshd: .dominio.local
ALL: localhost
b) y en el fichero /etc/hosts.deny añadiríamos la línea:
ALL: ALL

La estructura de las líneas dentro de /etc/hosts.allow y /etc/hosts.deny es:


“demonio1 [,demonio2, …]: cliente”

Por defecto, las conexiones realizadas a través de TCP Wrapper se registran en el fichero
/var/log/auth.log

TEMA 2 – Ideas clave 26


Seguridad en Sistemas Operativos Propietarios

Sobre los Cortafuegos

Como dijimos anteriormente, también es necesario un cortafuegos o firewall. Se


puede definir cortafuegos como «un programa que examina cuidadosamente el
tráfico de red que recorre la interfaz de red». Un cortafuegos puede ser un dispositivo
hardware con el programa encapsulado o un software para instalar en un host, pero
ambos tienen la misma función. La función del cortafuegos es bloquear el acceso no
autorizado, permitiendo al mismo tiempo comunicaciones autorizadas.

Los cortafuegos pueden ser confundidos con los filtros de paquetes, ya que los dos
filtran paquetes, pero los cortafuegos son capaces de analizar los datos de los paquetes.
Un cortafuegos no sirve para nada si no está bien configurado. El administrador de
sistemas debe configurar unas reglas en el firewall para definir qué tráfico se debería
permitir y cuál se debería denegar en la red.

Los cortafuegos permiten filtrar el tráfico según: el tipo de protocolo, la dirección IP y


el puerto de origen, la dirección IP y el puerto de destino, el tipo de mensaje ICMP y el
código, los indicadores TCP y la interfaz de red a la que llega el paquete.

Existen dos tipos de cortafuegos: con estado y sin estado. La diferencia entre
ambos radica en que los cortafuegos sin estado solo pueden examinar un paquete cada
vez, sin tener en cuenta los demás, y un cortafuegos con estado analiza además el
contexto del paquete dentro del tráfico y en un determinado protocolo.

Los cortafuegos pueden desarrollar además funciones extra, como la traducción de


direcciones de red (NAT), la redirección de puertos, la creación de redes privadas
virtuales (VPN) y las zonas desmilitarizadas (DMZ).

Netfilter (iptables)

Netfilter es el cortafuegos que viene en el núcleo de Linux y que se controla desde la


herramienta iptables.

El funcionamiento basado en las cadenas se mantiene, pero en iptables las cadenas son
parte de agrupaciones lógicas llamadas tablas, las cuales son de tres tipos: Filter, NAT
y mangle.

TEMA 2 – Ideas clave 27


Seguridad en Sistemas Operativos Propietarios

Filter es la tabla principal, formada por una cadena INPUT, OUTPUT y


FORWARD. El modo en el que los paquetes pasan la cadena es diferente, ya que en
Iptables el tráfico solo activa la cadena FORWARD.

NAT está formada por las cadenas PREROUTING, POSTROUTING y OUTPUT.


Esta tabla está diseñada para la traducción de direcciones de red (NAT).

Mangle se encarga de marcar los paquetes interesantes para agruparlos después.


También se ocupa de cambiar las opciones de tiempo de vida y tipo de servicio.

Estos serían los parámetros de filtro:

-s: IP de origen
-d: IP de destino
-i: interfaz de entrada
-o: interfaz de salida
-p tcp/udp/icmp: establecer el protocolo
-m state: estado del paquete
-m limit: límites en el número de paquetes
--sport: puerto de origen
--dport: puesto de destino

Para una buena configuración de un cortafuegos básico, queremos que primeramente


descarte los paquetes que no tienen asignada ninguna regla. Estos serían los pasos:
1. Eliminar las reglas existentes:
# iptables -F
2. Eliminar todos los paquetes por defecto en todas las direcciones:
# iptables -P INPUT DROP
# iptables –P OUTPUT DROP
# iptables –P FORWARD DROP
3. Permitir la entrada y salida de la interfaz loopback:
# iptables –A INPUT -i lo -j ACCEPT
# iptables –A OUTPUT -o lo -j ACCEPT
4. Añadir los permisos de entrada y salida de aquellas conexiones ya establecidas:
# iptables –A INPUT -m state -–state ESTABLISHED,RELATED -j ACCEPT
# iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

TEMA 2 – Ideas clave 28


Seguridad en Sistemas Operativos Propietarios

Con estas reglas básicas empezaremos a añadir reglas que necesitaremos para nuestros
permisos. Por ejemplo, podremos realizar las siguientes reglas:

1. Permitir la resolución DNS:


# iptables -A OUTPUT -o eth0 -p udp -d 192.168.1.50 --dport 53 -m state
--state NEW,ESTABLISHED -j ACCEPT
# iptables -A INPUT -i eth0 -p udp -s 192.168.1.50 --sport 53 -m state -
-state ESTABLISHED -j ACCEPT

2. Permitir la actualización o instalación desde los repositorios de paquetes de Debian:


# iptables -A OUTPUT -d ftp.es.debian.org -m state --state NEW -p tcp –
dport http -o eth0 -j ACCEPT
# iptables -A OUTPUT -d security.debian.org -m state --state NEW -p tcp
--dport http -o eth0 -j ACCEPT
# iptables -A OUTPUT -d volatile.debian.org -m state --state NEW -p tcp
--dport http -o eth0 -j ACCEPT

3. Permitir la conexión SSH en la ip 192.168.1.2


# iptables -A INPUT -p tcp -s 192.168.1.2 --dport 22 -m state --state NEW
–j ACCEPT

4. Permitir la conexión con el servidor NTP


# iptables -A OUTPUT -o eth0 -p udp -d 91.189.94.4 --dport 123 -m state
–state NEW,ESTABLISHED -j ACCEPT
# iptables -A INPUT -i eth0 -p udp -s 91.189.94.4 --sport 123 -m state -
-state ESTABLISHED -j ACCEPT

Siempre podremos ver la configuración del cortafuegos con el comando # iptables –


L. Una vez terminado la configuración nos interesaría guardar dicha configuración en
un archivo y ejecutar dicho archivo al inicio del sistema. Si no hacemos esto, al reiniciar
el servidor perderemos toda la configuración del cortafuegos.

TEMA 2 – Ideas clave 29


Seguridad en Sistemas Operativos Propietarios

Para guardar la configuración en un archivo usaremos el comando:


# iptables-save > /etc/cortafuegos.conf

Y para ejecutarlo al inicio del sistema añadiremos al fichero /etc/rc.local la siguiente


línea:
iptables-restore < /etc/cortafuegos.conf

Antes de la línea:
exit 0

Para saber más sobre Netfilter puedes visitar: http://www.netfilter.org

También existen otras herramientas que manejan la configuración de manera más


amigable. Shorewall (en Debian) y UFW (en Ubuntu) son dos de estas
herramientas. Tanto Shorewall como UFW manejan por detrás comandos de
iptables por lo que siempre se puede usar el comando # iptables –L para ver la
configuración que se ha aplicado.

Para saber más sobre el Shorewall puedes visitar http://www.shorewall.net


Para saber más de UFW puedes visitar https://launchpad.net/ufw

2.7. Otras medidas de seguridad

Deshabilitar servicios innecesarios

Para el manejo de los servicios en Debian se utiliza la utilidad sysv-rc-conf. Dicha


utilidad tiene que ser previamente instalada.
# apt-get install sysv-rc-conf

Ejecutaremos la utilidad:
# sysv-rc-conf

TEMA 2 – Ideas clave 30


Seguridad en Sistemas Operativos Propietarios

Figura 12: Utilidad sysv-rc-conf para la gestión de servicios

En la imagen podemos ver varias columnas. Cada una de ellas es un run level. Los
servicios en Linux se ejecutan por run levels. Los run levels determinan cuando se
ejecutan los servicios. Van del 0 al 6 y la letra S. Los niveles 0, 6 y S están reservados
para el comienzo y finalización del sistema. El run level 1 se ejecuta en modo single-
user (modo recuperación). Los run level del 2 al 5 son para modo multi-user. Con
la utilidad sysv-rc-conf marcaremos con una X (usando la barra espaciadora) en qué
run levels queremos que funcione cada servicio.

Para cambiar el modo actual de ejecución, por ejemplo al run level 4, se usaría la
instrucción:

# telinit 4

TEMA 2 – Ideas clave 31


Seguridad en Sistemas Operativos Propietarios

Figura 13: Cambiar el modo actual de ejecución

En Ubuntu se usará para listar los servicios el siguiente comando:


# service --status-all

Y el siguiente comando para deshabilitarlo:


# update-rc.d -f <nombre_servicio> remove

La siguiente lista, describe los servicios y si se recomienda deshabilitarlo.

Nombre del servicio Descripción Acción


Configuración avanzada e interfaz de energía. Se utiliza para la
acpid Deshabilitar
gestión de la energía
cron Ejecuta trabajos programados. Dejar activo
Limpia la información de DNS en conexiones por red telefónica
dns-clean Deshabilitar
(dial-up).
rc.local Inicio de los scripts locales. Dejar activo
grub-common Muestra información en el menú de GRUB. Dejar activo
Configura el gestor de escala de frecuencias de CPU debajo
ondemand Dejar activo
demanda.
pppd-dns Limpia el fichero /resolv.conf cuando el sistema falla. Deshabilitar
rmnologin Elimina el fichero /etc/nologin al inicio. Dejar activo
rsync Permite la copia de ficheros a o desde máquinas remotas. Deshabilitar
rsyslog Permite el envío de mensajes. Dejar activo
Deshabilitar en
ssh Servidor de SSH. caso de tener
acceso físico
stopbootlogd Para el demonio de registro de logs enviados a la consola. Dejar activo
watchdog Inicia el demonio de "watchdog". Deshabilitar
wd_keepalive Inicia el demonio de "keepalive" de "watchdog". Deshabilitar
Figura 14: Lista de servicios principales de Linux

TEMA 2 – Ideas clave 32


Seguridad en Sistemas Operativos Propietarios

Comprobar cuentas de usuarios

Para obtener la lista de usuarios del sistema podrás usar el siguiente comando:
# cat /etc/passwd

Figura 15: Archivo /etc/passwd con los usuarios del sistema

En la anterior imagen se ve como línea a línea se describen los usuarios del sistema con
los diferentes UID o la carpeta HOME de cada uno de ellos. Debian define en su
documentación, los siguientes usuarios por defecto:

root: es el superusuario.
daemon: algunos demonios (procesos) sin privilegios, necesitan escribir en archivos
del disco utilizan este usuario. Demonios como portmap, atd, etc, usan este usuario.
Otros demonios que no necesitan acceso a archivos usan el usuario “nobody”,
“nogroup” o usan un usuario específico.
bin: este usuario se mantiene por razones históricas.
sys: al igual que el usuario bin.
sync: se usa con el comando sync.
games: muchos juegos usan este usuario para poder escribir su “high score”.
man: el programa “man” usa este usuario para que puedan escribir las páginas del
manual en el disco duro (/var/cache/man).
lp: usado por los demonios de las impresoras.

TEMA 2 – Ideas clave 33


Seguridad en Sistemas Operativos Propietarios

mail: los clientes de correo electrónico del sistema, usa el usuario y grupo mail para
escribir en /var/mail. Varios servicios de correo electrónico también usa este
usuario por otras razones.
news: varios servidores de noticias y otros programas asociados a estos, usan este
usuario y grupo.
uucp: este usuario y su grupo, son usados por el subsistema del protocolo UUCP.
Los usuarios en este grupo pueden utilizar el comando uucico.
proxy: los demonios proxy que no tienen un usuario dedicado usan este usuario. Los
proxies pdnsd y squid usan este usuario.
majordom: majordomo tiene este usuario por motivos históricos. No se instala en
sistemas nuevos.
postgres: postgresql usa este usuario y grupo. Los archivos en /var/lib/postgresql
pertenecen a este usuario.
www-data: algunos servidores web usan este usuario. Se usa al escribir en sus
ficheros log o cualquier información escrita en el disco duro. Hay que tener en
cuenta que el contenido web no debería pertenecer a este usuario o el servidor web
podría modificarlo.
backup: se puede asignar al encargado del backup del Sistema.
operator: históricamente es el usuario que puede conectarse remotamente sin
depender de NIS/NFS.
list: los archivos y datos de las listas de correo pertenecen a este usuario. Algunos
programas asociados también usan este usuario.
irc: usado por demonios IRC.
gnats: usado por el servicio de control de errores de GNU.
nobody (usuario), nogroup (grupo): demonios que no necesitan archivos usan este
usuario/grupo. Ningún archivo del sistema debería pertenecer a este usuario/grupo.

Se ha evaluado, que si no se usan las funciones asociadas, se pueden borrar los


usuarios: proxy, www-data, list, irc, gnats, uucp, news y lp.

Para eliminar un usuario se puede usar la orden:


# userdel <nombre_usuario>

Por otro lado, hay que verificar y bloquear los accesos a la Shell a los usuarios cuya
clave estuviera vacía.

TEMA 2 – Ideas clave 34


Seguridad en Sistemas Operativos Propietarios

Para ello ejecutar la orden:


# awk -F: '($2 == "") {print}' /etc/shadow

Si la orden anterior ha mostrado alguna línea, habrá que bloquear el usuario


correspondiente.

Tal y como ya se ha explicado:


# usermod -L <cuenta>
# usermod -s /usr/sbin/nologin <cuenta>

En el sistema existe el UID, un número asignado a cada usuario y que se almacena


junto a la lista de usuarios en el fichero /etc/passwd. El UID con valor 0 (cero) es el
asignado a la cuenta root.

Es importante comprobar que no existen dos con un UID igual a 0 (cero). Para ello
ejecutar el siguiente comando:
# awk -F: '($3 == "0") {print}' /etc/passwd

El anterior comando nos debería devolver únicamente la cuenta root.

También tendremos que tener en cuenta el crear un grupo único por cada usuario
nuevo que creemos. Por defecto, el comando “useradd” crea un grupo con el nombre
igual al usuario. Por esto, con el comando “useradd” nunca deberemos usar la opción
“-g” y usar el funcionamiento por defecto del comando.

Opciones de montaje de ficheros

En el fichero /etc/fstab se definen las opciones de cómo se montan las particiones y


dispositivos del sistema. Los puntos de montaje pueden estar referenciados por un
UUID o por el nodo de montaje. Por ejemplo, el nodo de montaje del CDROM, en la
siguiente captura de pantalla es /dev/sr0. Para recorrer los archivos del CDROM
tendremos que ir al punto de montaje es /media/cdrom0.

TEMA 2 – Ideas clave 35


Seguridad en Sistemas Operativos Propietarios

Figura 16: Archivo /etc/fstab con la configuración de las particiones por defecto

En la primera línea de la anterior imagen, se puede ver que la partición raíz “/” tiene la
opción de montaje “errors=remount-ro”, que el CDROM tiene user y noauto y que
el resto de puntos de montaje tienen la opción “defaults”. Hay que tener en cuenta
que las líneas que empiezan por almohadilla (“#”) son líneas comentadas.

Para securizar las particiones del sistema modificaremos el fichero /etc/fstab


utilizando nuestro editor favorito (se recomienda nano). Tendremos que modificar las
opciones de montaje de la siguiente manera:

1. Asignar la opción “nodev” a las particiones distintas a la raíz del sistema “/”. De
esta manera evitamos que, pese a crearse nodos de dispositivos dentro de la
partición, no puedan tratarse como tales y montar otros dispositivos dentro de estos.
De esta manera no podremos crear y utilizar un punto de montaje dentro de /home.
2. Asignar la opción “nosuid” a las particiones distintas a la raíz del sistema “/”.
SUID (Set owner User ID up on execution) es un tipo especial de permiso de los
ejecutables que permite al usuario que lo ejecuta, ejecutarlo como su usuario
propietario (Suele ser muy peligroso). Las particiones con la opción “nosuid” no
podrán tener ficheros SUID y así evitamos que los posibles problemas de una
aplicación afecten al sistema.
3. Asignar las opciones “nodev”, “nosuid” y “noexec” a las particiones de medios
extraíbles como CDs. De esta manera evitamos cualquier ejecución desde medios
externos al sistema.

TEMA 2 – Ideas clave 36


Seguridad en Sistemas Operativos Propietarios

En la siguiente captura de pantalla puedes ver el estado de la configuración del fichero


/etc/fstab:

Figura 17: Archivo /etc/fstab con la configuración de las particiones modificado

También se puede evitar el montaje de discos a través del USB al añadir al final del
fichero /etc/modprobe.d/blacklist.conf la siguiente línea:
blacklist usb-storage

2.8. Proxies

Los proxies son un punto de conexión entre un ordenador y un sitio remoto de Internet.
Ofrecen un filtro mediante el cual, permite conexiones externas a la red. Una VPN es
un tipo de proxy empresarial que cifra la conexión a la vez de que nos deja acceder a la
red interna de una empresa u organización.

TEMA 2 – Ideas clave 37


Seguridad en Sistemas Operativos Propietarios

La implantación de un proxy en una red tiene múltiples propósitos:

Restringir que todos los usuarios entren a ciertas zonas de la red.


Evitar los ataques a nivel de protocolo o aplicación desde el exterior.
Permitir/denegar el acceso a Internet de los usuarios de la red.
Evitar la divulgación de datos personales dese el exterior de la red.

Existen varios tipos de proxy:

Servidor dedicado o Proxy de aplicación. Consiste en un servidor que a su vez


es un filtro de la aplicación a utilizar. El protocolo de proxy más utilizado es el HTTP
(WEB). El Servidor Proxy decide si permite o no, que esa aplicación conecte con un
servidor en el Internetpúblico.
Gateway o Proxy de Circuito. Funciona redirigiendo paquetes pero no es capaz
de procesar o filtrar paquetes. Monitoriza los paquetes TCP y UDP.
Proxy NAT o Enmascaramiento de IP. Implementa una serie de IP’s privadas
de red local y el enrutador se encarga hacer la conversión de las direcciones IP y los
puertos. Mantiene el anonimato de una red privada.
Proxy web cache. Este proxy mantiene en caché las páginas más visitadas para,
de esta manera disminuir el tráfico de datos y mejorar la velocidad de la red. Este
proxy no permite el acceso libre de Internet filtrando y bloqueando contenido
potencialmente peligroso, como pueden ser ciertas páginas web.
Proxy Transparente. Encamina las conexiones para que sean realizadas desde el
proxy sin intervención del cliente. Este tipo de servidores refuerzan la seguridad del
uso de la red y también proveen de servicios de caché.
Proxy inverso. Muy utilizada para balancear la carga en máquinas con varios
servidores web. Proporciona un punto común para todas las peticiones web y
redirecciona las llamadas entre varios servidores.

Squid

Debido al gran crecimiento que ha tenido Internet en estos últimos años, se hace
necesario la replicación para transmitir páginas web de manera más rápida y
económica. Una solución a esto puede ser los servidores proxy basados en Squid, los
cuales son un intermediario entre el cliente e Internet. Los clientes mandan su petición
al servidor proxy y este tramita la petición a Internet o le responde con el objeto si se
encuentra almacenado en su memoria caché (debido a una petición similar anterior).

TEMA 2 – Ideas clave 38


Seguridad en Sistemas Operativos Propietarios

Squid es un tipo de Proxy Caché que puede terminar como servidor intermedio y como
caché del contenido web. Admite protocolos HTTP, HTTPS, FTP, WWCP, WAIS,
Gopher, etc.

Las características más importantes de Squid son las siguientes:

Almacena en memoria RAM los objetos más frecuentes y sus metadatos.


Cachear las consultas DNS.
Implementa políticas de control de acceso.
Soporta conexiones SSL.
Puede reescribir consultas.
Permite el protocolo SNMP.

Se integra con el Directorio Activo de Microsoft.

Instalación de Squid

Para la instalación, ejecutad el siguiente comando en la consola:


# apt-get install squid

Configuración de Squid: Acceso por autentificación

Para poder acceder a Internet, Squid puede denegar o permitir acceso basándose en
dirección IP y usuario que demanda el servicio. Controlar el acceso a Internet
viene muy bien por ejemplo, en la oficina de los centros de estudio.

La configuración de Squid se realiza modificando el fichero /etc/squid/squid.conf.

Para probar un ejemplo de forma sencilla, vamos a utilizar el módulo NCSA, que utiliza
un archivo de texto simple creado con htpasswd.

1. Para la poder usar el comando htpasswd necesitamos instalar apache2-utils:


# apt-get install apache2-utils

2. Crearemos nuestro archivo de claves:


# touch /etc/squid/usrpass

TEMA 2 – Ideas clave 39


Seguridad en Sistemas Operativos Propietarios

3. Ajustamos los permisos para que solamente Squid tenga permisos de lectura y
escritura
# chmod 600 /etc/squid/usrpass
# chown proxy:proxy /etc/squid/surpass

Empezaremos a añadir usuarios. Hay que tener en cuenta que todos los usuarios
creados son independientes de los usuarios del sistema. Para añadir usuarios
usaremos htpasswd:
# htpasswd /etc/squid/usrpass valentin

Tras introducir la línea anterior, nos pedirá introducir una clave.

4. Descomentar y editar del archivo /etc/squid/squid.conf, la línea que empieza por:


“#auth_param basic program” por la siguiente línea:
auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/usrpass

5. En el mismo archivo de configuración, buscamos un texto descomentado parecido a:


#
# Recommended minimum configuration:
acl all src all
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localnet dst 127.0.0.1/8 0.0.0.0/32

Y añadiremos la línea:
acl password proxy_auth REQUIRED

6. También buscaremos el texto parecido a


# Example rule allowing access from your local networks.
# Adapt localnet in the ACL section to list your (internal) IP networks
# from where browsing should be allowed
http_access allow localhost
http_access deny all

TEMA 2 – Ideas clave 40


Seguridad en Sistemas Operativos Propietarios

Para que quede así:


# Example rule allowing access from your local networks.
# Adapt localnet in the ACL section to list your (internal) IP networks
# from where browsing should be allowed
http_access allow localnet password
http_access allow localhost
http_access deny all

7. Finalmente, aplicaremos cambios con el comando:


# service squid reload

Squid soporta autenticación a través de LDAP. Para practicar, se puede instalar


OpenLDAP y definir usuarios, aunque no cubriremos los servidores LDAP en este
temario.

Añade la siguiente línea al squid.conf con la configuración de nuestro LDAP:

auth_param basic program /usr/lib/squid/squid_ldap_auth –b


"ou=Usuarios,dc=xxx,dc=zzzz" 127.0.0.1

Sustituye el valor "ou=Usuarios,dc=xxx,dc=zzzz" por el valor real del directorio y el


valor 127.0.0.1 por el valor real de la IP de tu servidor de LDAP.

Configuración de Squid: Restricción de acceso a sitios de Internet

Mediante expresiones regulares con Squid, se puede determinar si el sitio de


Internet está permitido. Por ejemplo, se podría prohibir diferentes patrones de sitios
web considerados potencialmente peligrosos o bien sitios con contenidos no
recomendados en un centro de trabajo. La prohibición del acceso a YouTube podría
evitar la saturación de la red.

TEMA 2 – Ideas clave 41


Seguridad en Sistemas Operativos Propietarios

Para aplicar al servidor, restricciones por expresiones regulares, deberemos


realizar los siguientes pasos:

1. Crearemos un archivo con expresiones regulares. En el siguiente comando,


usaremos el editor nano para crear y editar el fichero:
# nano /etc/squid/restric-exp-reg

2. Al archivo creado añadiremos palabras clave que describirían sitios que


consideremos como inadecuados. Por ejemplo:
sex
porn
chat
virus
musica
torrent
emule
hacking

3. Ahora tendremos que configurar el archivo /etc/squid/squid.conf para que


pueda identificar el archivo con nuestras expresiones regulares. Añadiremos la
siguiente línea:
acl restric-exp-reg url_regex “/etc/squid/restric-exp-reg”

Lo configurado hasta ahora, con la nueva línea, tendría un aspecto parecido a este:
# Recommended minimum configuration:
acl all src all
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localnet dst 127.0.0.1/8 0.0.0.0/32
acl password proxy_auth REQUIRED
acl restric-exp-reg url_regex “/etc/squid/restric-exp-reg”

4. Aplicaremos las restricciones que hemos identificado. Para esto, seguiremos


modificando el archivo /etc/squid/squid.conf. Modificaremos la regla
anteriormente creada para que se muestre como en la siguiente línea:
http_access allow localnet password !restric-exp-reg

TEMA 2 – Ideas clave 42


Seguridad en Sistemas Operativos Propietarios

5. Terminaremos aplicando los cambios en el archivo /etc/squid/squid.conf con la


siguiente línea:
# service squid reload

También podremos denegar acceso por dominio. Los pasos son parecidos a los de
la aplicación de restricciones por expresiones regulares:

1. Crearemos un archivo con los dominios a restringir. En el siguiente comando,


usaremos el editor nano para crear y editar el fichero:
# nano /etc/squid/restric-dominios

2. Al archivo creado añadiremos los dominios o extensiones web que consideremos


como inadecuados. Por ejemplo:
www.hotmail.com
.facebook.com
www.juegos.com
.co.uk
.fr

3. Configuraremos el archivo /etc/squid/squid.conf para que pueda identificar el


archivo con nuestros dominios. Añadiremos la siguiente línea:
acl restric-dominios dstdomain “/etc/squid/restric-dominios”

Lo configurado hasta ahora, con la nueva línea, tendría un aspecto parecido a este:
#
# Recommended minimum configuration:
acl all src all
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localnet dst 127.0.0.1/8 0.0.0.0/32
acl password proxy_auth REQUIRED
acl restric-exp-reg url_regex “/etc/squid/restric-exp-reg”
acl restric-dominios dstdomain “/etc/squid/restric-dominios”

4. Aplicaremos las restricciones que hemos identificado. Para esto, seguiremos


modificando el archivo /etc/squid/squid.conf. Modificaremos la regla
anteriormente creada para que se muestre como en la siguiente línea:
http_access allow localnet password !restric-exp-reg !restric-dominios

TEMA 2 – Ideas clave 43


Seguridad en Sistemas Operativos Propietarios

5. Terminaremos aplicando los cambios en el archivo /etc/squid/squid.conf con la


siguiente línea:
# service squid reload

Es posible que las restricciones de acceso anteriores no dejen acceso a páginas que
consideramos válidas. Por esto podremos elegir una serie de dominios permitidos.
Estos serían los pasos:

1. Crearemos un archivo con los dominios permitidos. En el siguiente comando,


usaremos el editor nano para crear y editar el fichero:
# nano /etc/squid/permit-dominios

2. Al archivo creado añadiremos los dominios o extensiones web que consideremos


como inadecuados. Por ejemplo:
.google.co.uk
.bbc.co.uk
www.juegos.com/ejemplo.html
.edu
.gov
.org

3. Configuraremos el archivo /etc/squid/squid.conf para que pueda identificar el


archivo con nuestros dominios. Añadiremos la siguiente línea:
acl permit-dominios dstdomain “/etc/squid/permit-dominios”

Lo configurado hasta ahora, con la nueva línea, tendría un aspecto parecido a este:
#
# Recommended minimum configuration:
acl all src all
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localnet dst 127.0.0.1/8 0.0.0.0/32
acl password proxy_auth REQUIRED
acl restric-exp-reg url_regex “/etc/squid/restric-exp-reg”
acl restric-dominios dstdomain “/etc/squid/restric-dominios”
acl permit-dominios dstdomain “/etc/squid/permit-dominios”

TEMA 2 – Ideas clave 44


Seguridad en Sistemas Operativos Propietarios

4. Aplicaremos las restricciones que hemos identificado. Para esto, seguiremos


modificando el archivo /etc/squid/squid.conf. Añadiremos la siguiente línea:
http_access allow all permit-dominios

5. Terminaremos aplicando los cambios en el archivo /etc/squid/squid.conf con la


siguiente línea:
# service squid reload

Configuración de Squid: restricción de acceso al contenido por extensión


Squid también puede restringir acceso a ciertos archivos. Podría evitar la saturación
del ancho de banda de la red. Consiste en la denegación de ciertas extensiones de
archivos que se establecerán en una Lista de Control de Acceso. Un ejemplo de
restricción de extensión de archivos sería la de archivos ejecutables .exe. Evitando
la descarga de ejecutables pondríamos más difícil la instalación de virus desde Internet.

Seguiremos con el procedimiento de crear un fichero con los filtros, declararlo y usarlo
en el archivo de configuración de Squid /etc/squid/squid.conf. Estos serían los
pasos en detalle:

1. Crearemos un archivo con las extensiones que no permitiremos. En el siguiente


comando, usaremos el editor nano para crear y editar el fichero:
# nano /etc/squid/restrict-extensiones

2. Al archivo creado añadiremos extensiones de archivos que no permitiremos del


siguiente modo:
\.mp4$
\.mp3$
\.mpg$
\.mpeg$
\.wma$
\.wmv$
\.wav$
\.bat$
\.exe$

3. Configuraremos el archivo /etc/squid/squid.conf para que pueda identificar el


archivo creado. Añadiremos la siguiente línea:
acl restrict-extensiones urlpath_regex “/etc/squid/restrict-extensiones”

TEMA 2 – Ideas clave 45


Seguridad en Sistemas Operativos Propietarios

Lo configurado hasta ahora, con la nueva línea, tendría un aspecto parecido a:


#
# Recommended minimum configuration:
acl all src all
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localnet dst 127.0.0.1/8 0.0.0.0/32
acl password proxy_auth REQUIRED
acl restric-exp-reg url_regex “/etc/squid/restric-exp-reg”
acl restric-dominios dstdomain “/etc/squid/restric-dominios”
acl permit-dominios dstdomain “/etc/squid/permit-dominios”
acl restrict-extensiones urlpath_regex “/etc/squid/restrict-
extensiones”

4. Aplicaremos las restricciones que hemos identificado. Para esto, seguiremos


modificando el archivo /etc/squid/squid.conf. Añadiremos la siguiente línea:
http_access allow localnet password !restric-exp-reg !restric-dominios
!restrict-extensiones

5. Terminaremos aplicando los cambios en el archivo /etc/squid/squid.conf con la


siguiente línea:
# service squid reload

Configuración de Squid: Restricción de acceso por horarios

La restricción de acceso a Internet a horarios es bastante importante en aspectos de


empresa. De esta manera se evita que los empleados dejen descargas de Internet
toda la noche y saturen aquellos procesos de empresa que necesitan ser ejecutados
como es el caso de las actualizaciones.

Las reglas de restricción por horarios se crean directamente en el fichero de


configuración de Squid, /etc/squid/squid.conf.

TEMA 2 – Ideas clave 46


Seguridad en Sistemas Operativos Propietarios

En el siguiente ejemplo, vamos a definir y aplicar una regla que da permiso a las
conexiones los lunes, martes, miércoles, jueves y viernes, desde las 8:30 a 19:30 en la red
local.

Esta sería la declaración de ejemplo:


acl entre_semana time MTWHF 08:30-19:30
“entre_semana”, sería el nombre del acl
“MTWHF”, donde cada letra sería un día de la semana en inglés.

S - Domingo
M - Lunes
T - Martes
W - Miércoles
H - Jueves
F - Viernes
A – Sábado
08:30-19:30: horario desde las 08:30 hasta las 19:30

La declaración esta regla de ejemplo se podría aplicar de este modo:


http_access allow entre_semana localnet

http_access, es un comando que ya hemos usado antes y que aplica la regla según sus
parámetros.
allow, cuyo posibles valores serían allow (permitir), deny (no permitir)
entre_semana, nombre declarado en el ejemplo anterior
localnet, ámbito de la red en el que se aplica. En este caso sería la red local.

Siempre que modifiquemos el /etc/squid/squid.conf, ejecutaremos el siguiente


comando desde consola:
# service squid reload

Configurar Squid con soporte para direcciones MAC

Mediante las direcciones MAC se identifica de forma única una tarjeta o dispositivo
de red. Si bloqueamos o permitimos acceso a ciertas direcciones MAC estaremos
evitando que ciertos ordenadores puedan conectarse para realizar daños en la red.
Un ejemplo útil sería el empleado que ha sido despedido y deja un ordenador libre.

TEMA 2 – Ideas clave 47


Seguridad en Sistemas Operativos Propietarios

Las direcciones MAC consisten en un identificador de 48 bits expresada con 12 dígitos


hexadecimales. De estos 12 dígitos, los 6 primeros corresponden al vendedor y los otros
6 dígitos corresponden al número de serie que el vendedor pone al dispositivo de red.

En los siguientes pasos vamos a configurar la restricción de acceso a la red usando las
direcciones MAC:

1. Conseguimos las direcciones MAC en nuestra red, de los ordenadores que queremos
aplicar la regla. En Windows se usa el comando ipconfig y en Linux se utiliza el
comando ifconfig, para ver la dirección MAC del equipo en el que nos encontramos.

Figura 18: Comando ipconfig en Windows

Figura 19: Comando ifconfig en Linux

TEMA 2 – Ideas clave 48


Seguridad en Sistemas Operativos Propietarios

2. Crearemos un archivo donde vayamos a poner las direcciones MAC a las que
aplicaremos la regla.
# nano /etc/squid/permit-mac-direcciones

Tendremos que editar su contenido con las direcciones MAC para las que queremos
aplicar la regla.
00:14:22:41:9C:8A
00:04:DC:84:18:AD
00:40:96:AA:2D:BB
00:30:BD:9D:CD:77

3. Definiremos nuestra regla añadiendo al /etc/squid/squid.conf la línea:


acl permit-mac-direcciones arp /etc/squid/permit-mac-direcciones"

4. Aplicaremos nuestra regla añadiendo al /etc/squid/squid.conf la línea:


http_access allow permit-mac-direcciones

5. Aplicaremos los cambios con hechos en el /etc/squid/squid.conf. Desde la


consola ejecutar el siguiente comando:
# service squid reload

Otras configuraciones

En /etc/squid/squid.conf se deben tener configurado los siguientes puntos:

http_port, que especifica el puerto por el que se comunica con el proxy, por
ejemplo:
http_port 1891 transparent

cache_dir, que es el directorio donde se especifica el directorio donde se almacena


la chache y las opciones de tamaño. En el siguiente ejemplo se define el directorio
/var/spool/squid, con formato ufs, 200 MB, dividido en 20 directorios de hasta
400 niveles cada uno:
cache_dir ufs /var/spool/squid 200 20 400

error_directory, con el directorio donde se almacenan los mensajes de error en


nuestro idioma, por ejemplo:
error_directory /usr/share/squid/errors/Spanish

TEMA 2 – Ideas clave 49


Seguridad en Sistemas Operativos Propietarios

WPAD

WPAD (Web Proxy Auto Discovery) es un método mediante el cual se encuentra


automáticamente el proxy en la red que estamos. Muchas páginas se libran de los
filtros porque van cifradas a través del HTTPS. Gracias a WPAD esto no
sucede.

Para su configuración deberemos realizar los siguientes pasos:

1. Instalaremos el servidor Apache.


# apt-get install apache2

2. Iniciamos el servicio de apache.


# service apache2 start

3. Tendremos que tener abierto el puerto 80 TCP y el resto de los puertos que pudieran
estar involucrados.
iptables -A INPUT -s 192.168.1.2 -m state --state NEW \ -m tcp -p tcp -
-dport 80 -j ACCEPT
iptables -A INPUT -s 192.168.1.2 -m state --state NEW \ -m tcp -p tcp -
-dport 3128 -j ACCEPT

En el ejemplo anterior abrimos el puerto 80 (para apache) y el puerto 3128 (para


Squid) en el protocolo tcp. 192.168.1.2 es la ip del equipo local en red. Para más
detalle sobre iptables, lee el punto Netfilter (iptables).

4. En el fichero /etc/hosts añadimos la línea:


192.168.1.2 wpad.red-local.net wpad

5. Crearemos el directorio /var/www/wpad dentro del root de archivos del servidor


Apache, con permisos de lectura para todos los usuarios:
# mkdir -m 0755 /var/www/wpad

6. Creamos el archivo wpad.dat.


# nano /var/www/wpad/wpad.dat

TEMA 2 – Ideas clave 50


Seguridad en Sistemas Operativos Propietarios

7. Editamos el contenido en el formato. Un ejemplo de wpad.dat sería:


function FindProxyForURL(url, host)
{
if ( isInNet(host, "192.168.1.2", "255.255.255.240")
|| isInNet(host, "127.0.0.0", "255.0.0.0")
|| shExpMatch(host, "192.168.1.*")
|| shExpMatch(host, "127.*" )
|| shExpMatch(host, "localhost")
|| shExpMatch(host, "*.red-local.net")
|| isPlainHostName(host)
|| dnsDomainIs(host, ".red-local.net")
){
return "DIRECT";
}
else
{
return "PROXY 192.168.1.2:3128";
}
}

8. Crearemos otro archivo /etc/apache2/conf.d/wpad.conf con el siguiente contenido:


NameVirtualHost *:80
<VirtualHost *:80>
ServerName wpad.red-local.net
ServerAlias wpad
DocumentRoot /var/www/wpad
ErrorLog logs/wpad-error_log
CustomLog logs/wpad-access_log combined
<Directory "/var/www/wpad">
AddType application/x-ns-proxy-autoconfig .dat
DirectoryIndex wpad.dat
Order Deny,Allow
Deny from all
Allow from 127.0.0.0/8 192.168.1.2
</Directory>
</VirtualHost>

9. Recargamos el servicio:
service apache2 reload

TEMA 2 – Ideas clave 51


Seguridad en Sistemas Operativos Propietarios

SARG

Con la herramienta SARG (Squid Analysis Report Generator) se permite ver con detalle
la actividad de todos los equipos y usuarios de una red local usando los informes de
las bitácoras (logs) de Squid.

1. Busca y modifica las líneas output_dir, access_log, date_format, overwrite_report en


el fichero /etc/sarg/sarg.conf. Para que queden de la siguiente forma:
access_log /var/log/squid/access.log
output_dir /var/www/sarg
date_format e
overwrite_report yes

De esta manera, decimos que el log que queremos acceder con la herramienta SARG
es /var/log/squid/access.log, que el directorio donde se generarán los informes
será /var/www/sarg (si no existe el directorio, habrá que crearlo), el formato de la
fecha (‘dd/mm/yy‘) que se usará y si sobrescribimos informes ya generados.

2. Ejecutaremos la generación de informes:


# sarg –x

3. Iremos a la URL http://<ip-máquina-linux>/sarg y veremos una pantalla parecida a


la siguiente:

Figura 20: Interfaz de SARG

TEMA 2 – Ideas clave 52


Seguridad en Sistemas Operativos Propietarios

2.9. Técnicas de detección de intrusos

Principios de los IDS

Existen dos tipos de sistemas de identificación de intrusos (IDS): los basados en host
(Host IDS) y los basados en red (NIDS).

Los sistemas de detección de intrusos basados en Host IDS (Identificación de


intrusos), verifican regularmente un sistema y sus utilidades contra una base de datos
de integridad, minimizando así las posibilidades de que el sistema sea comprometido
e identificando rápidamente cualquier anomalía que ocurra en el sistema.

Los sistemas de detección de intrusos basados en NIDS se dividen en dos tipos


principalmente: los que se basan en los ataques firmados y los que detectan un ataque
según las variaciones en el estado del sistema. Los basados en ataques firmados
analizan cualquier transacción en la red y la comparan con las firmas de ataques que
tienen almacenadas, si coincide se registra el ataque en un log. Los basados en
anomalías del estado del sistema son inteligentes y pueden identificar cuando una
transacción no forma parte del comportamiento normal del sistema.

Tripwire, AIDE, Fcheck son algunas de estas herramientas. Tripwire es la


herramienta más madura pero es un software con licencia, AIDE es libre pero es
mucho más joven que Tripwire, y Fcheck es rápido y gratuito, pero puede no
satisfacer a una gran organización con altas necesidades de seguridad.

Por otro lado, existe Snort que es una potente herramienta que sirve como sniffer de
paquetes, registrador de paquetes y NIDS personalizable con una librería de ataques
firmados y un motor de configuración para reglas de usuario.

Utilizar SNORT como IDS

Para la configuración de Snort se deben de analizar y modificar, según las necesidades,


las distintas partes del fichero ‘snort.conf’: Definición de variables, sentencias de pre
proceso, sentencias de salida (postproceso) y reglas.

TEMA 2 – Ideas clave 53


Seguridad en Sistemas Operativos Propietarios

Material complementario

Lecciones magistrales

Port Knocking

En esta lección magistral se tratará más a fondo un servicio que nos ayuda a
complementar la seguridad de nuestro Linux. Con Port Knocking se establecerá un
sistema previo de llamadas a puertos específicos si se quiere habilitar o ejecutar algo
en la máquina remota.

La clase magistral está disponible en el aula virtual.

No dejes de leer…

Host bastión Linux

VV. AA. (2008). Seguridad en Linux. Madrid: Grupo Anaya.

El capítulo 10 de este libro es un material que un administrador en


seguridad tendrá siempre a mano. Se resume todo lo que un sistema
Linux debe tener para tener unas buenas garantías en materia de
seguridad. Es ideal para repasar cuando te preguntas si te falta algo
o simplemente por verificar que tienes tu servidor en buenas
condiciones.

TEMA 2 – Material complementario 54


Seguridad en Sistemas Operativos Propietarios

Hackers en Linux

Hatch, B. y Lee, J. (2003). Hackers en Linux. Madrid: McGraw Hill.

En el capítulo 10 de este libro explica cómo y qué técnicas utilizan los


ciberdelincuentes para mantener el acceso a una máquina una vez que
ya ha sido vulnerada. Además se puede ver con más detalle que fallos
ha habido con los servidores de correo. En el capítulo 11 se dedica a los
servidores FTP.

La Biblia de Administración de sistemas Linux

VV. AA. (2008). La Biblia de Administración de sistemas Linux. Madrid: Grupo Anaya.

De este libro nos interesan los capítulos 16 y 21. En el capítulo 16 se


explica en profundidad el sistema de carpetas compartidas NFS. En el
capítulo 21 conocerás ampliamente el servidor por excelencia que
contiene la mayoría de las páginas de Internet.

Administración de sistemas Linux

VV. AA. (2009). Administración de sistemas Linux. Madrid: Grupo Anaya.

De este libro nos interesa el capítulo 4, donde encontrarás la


información necesaria para la administración del
almacenamiento y la recuperación ante desastres.

TEMA 2 – Material complementario 55


Seguridad en Sistemas Operativos Propietarios

Cortafuegos

VV. AA. (2007). Superutilidades Hacker. Madrid: Grupo Anaya.

En el capítulo 13 podrás profundizar más por lo firewalls. Podrá


aprender de una gran variedad de ellos. Entre ellos están los de
tipo software, los de tipo hardware. También podrá aprender
cuales son gratuitos y cuáles no. Se centrará en la configuración
de ipchains (obsoleto), Iptables e IPFW2 (cortafuegos de
FreeBSD).

Virtualización

VV. AA. (2011). Destripa la red. Madrid: Grupo Anaya.

El capítulo 11 de este interesante libro aborda el tema de la


virtualización, tecnología por la cual se segmentan los recursos de
un sistema para que puedan ser utilizados de manera
independiente. Gracias a esta tecnología podremos tener varios
sistemas operativos ejecutándose a la vez en una misma máquina.
En estas páginas se tratarán los tipos de virtualización, el
Hipervisor y algunos software populares en el mundo de la
virtualización, como VMWare, Windows Virtual PC o Xen.

TEMA 2 – Material complementario 56


Seguridad en Sistemas Operativos Propietarios

Linux

VV. AA. (2010). Linux. Madrid: Grupo Anaya.

De este libro nos interesan los capítulos 1 y 4. El primero realiza


una introducción a Linux, mientras que el cuarto capítulo habla
de los métodos de inicio. Estos métodos de inicio pueden ser
configurables para que arranque un sistema operativo por
defecto o dar la oportunidad al usuario de elegir qué sistema
operativo desea arrancar, lo que se denomina ‘arranque dual’.

A fondo

Securing Debian Manual

El siguiente documento es la guía oficial para securizar Debian.

Accede al artículo a través del aula virtual o desde la siguiente dirección web:
http://www.debian.org/doc/manuals/securing-debian-howto/securing-debian-
howto.en.pdf

WDAP

En la siguiente dirección está definido el estándar (en inglés) de WDAP

Accede al artículo a través del aula virtual o desde la siguiente dirección web:
https://tools.ietf.org/id/draft-ietf-wrec-wpad-01.txt

TEMA 2 – Material complementario 57


Seguridad en Sistemas Operativos Propietarios

SARG

La siguiente página, contiene publicado el proyecto SARG para generar informes de


ficheros los ficheros log de Squid.

Accede al artículo a través del aula virtual o desde la siguiente dirección web:
http://sarg.sourceforge.net/.

Webgrafía

Opensource

Página web de Opensource.org, donde podemos descargar gran cantidad de software de


forma gratuita.

Accede a la página web a través del aula virtual o desde la siguiente dirección:
http://sourceforge.net/

GPL

Página web de GPL, donde podemos encontrar los términos y condiciones de GPL.

Accede a la página web a través del aula virtual o desde la siguiente dirección:
http://www.gnu.org/copyleft/gpl.html

TEMA 2 – Material complementario 58


Seguridad en Sistemas Operativos Propietarios

Kernel

Página web del kernel de Linux,


donde podemos descargar varias
versiones del kernel e informarnos
de las modificaciones del núcleo
que hayan surgido.

Accede a la página web a través del aula virtual o desde la siguiente dirección:
http://www.kernel.org/

Ubuntu

Página web del sistema operativo Ubuntu, donde podemos descargar el sistema
operativo y documentación relacionada.

Accede a la página web a través del aula virtual o desde la siguiente dirección:
http://www.ubuntu.com

TEMA 2 – Material complementario 59


Seguridad en Sistemas Operativos Propietarios

Debian

Página web del sistema operativo Debian, donde podemos descargar el sistema operativo
y documentación relacionada.

Accede a la página web a través del aula virtual o desde la siguiente dirección:
http://www.debian.org

Red Hat

Página web del sistema operativo Red Hat, donde


podemos descargar el sistema operativo y
documentación relacionada.

Accede a la página web a través del aula virtual o desde la siguiente dirección:
http://www.redhat.com

OpenSuse

Página web del sistema operativo Suse, donde podemos descargar el sistema operativo y
documentación relacionada.

Accede a la página web a través del aula virtual o desde la siguiente dirección:
http://www.opensuse.org/

TEMA 2 – Material complementario 60


Seguridad en Sistemas Operativos Propietarios

Slackware

Página web del sistema operativo Slackware, donde podemos descargar el sistema
operativo y documentación relacionada.

Accede a la página web a través del aula virtual o desde la siguiente dirección:
http://www.slackware.com

Spamassassin

Página web de Spamassassin, herramienta para bloquear los correos spam.

Accede a la página web a través del aula virtual o desde la siguiente dirección:
http://www.spamassassin.org/

TEMA 2 – Material complementario 61


Seguridad en Sistemas Operativos Propietarios

GNUPG

Página web de GNUPG, herramienta para cifrar correos.

Accede a la página web a través del aula virtual o desde la siguiente dirección:
http://www.gnupg.org/

Chrootkit

Página web de Chkrootkit, donde podemos encontrar


un script para detectar rootkit y enlaces a muchos sitios
relacionados.

Accede a la página web a través del aula virtual o desde la siguiente dirección:
http://www.chkrootkit.org/

Snort

Página web de Snort, donde poder descargar la popular herramienta IDS.

Accede a la página web a través del aula virtual o desde la siguiente dirección:
http://www.snort.org

TEMA 2 – Material complementario 62


Seguridad en Sistemas Operativos Propietarios

Squid

Página web de Libpcap, donde poder descargar la librería.

Accede a la página web a través del aula virtual o desde la siguiente dirección:
http://www.squid-cache.org

Iptables (Netfilter)

Página web de Netfilter, donde poder descargar el proyecto Iptables (Netfilter).

Accede a la página web a través del aula virtual o desde la siguiente dirección:
http://www.netfilter.org/

Bacula

Página web de Bacula, donde poder descargar la popular herramienta de backup, además
de documentación relacionada.

Accede a la página web a través del aula virtual o desde la siguiente dirección:
http://blog.bacula.org/

TEMA 2 – Material complementario 63


Seguridad en Sistemas Operativos Propietarios

Red Hat Enterprise Linux 7

Ya se ha publicado la guía de securización para la última versión de Red Hat.

Accede a la página web a través del aula virtual o desde la siguiente dirección:
https://access.redhat.com/documentation/en-
US/Red_Hat_Enterprise_Linux/7/html/Security_Guide/index.html

VirtualBox
Desde la página de VirtualBox se puede descargar esta aplicación de máquinas virtuales
gratuitas.

Accede a la página web a través del aula virtual o desde la siguiente dirección:
https://www.virtualbox.org/

TEMA 2 – Material complementario 64


Seguridad en Sistemas Operativos Propietarios

OpenLDAP

El servidor de directorios OpenLDAP, implementa el protocolo público y standard


LDAP (Lightweight Directory Access Protocol).

Accede a la página web a través del aula virtual o desde la siguiente dirección:
http://www.openldap.org/

Shorewall

Shorewall es un configurador intuitivo sobre iptables.

Accede a la página web a través del aula virtual o desde la siguiente dirección:
http://www.shorewall.net

UFW

Al igual que Shorewall, UFW ofrece una configuración más intuitiva sobre iptables.

Accede a la página web a través del aula virtual o desde la siguiente dirección:
https://launchpad.net/ufw

TEMA 2 – Material complementario 65


Seguridad en Sistemas Operativos Propietarios

Alcance libre

Sitio web que trata diferentes temas de redes.

Accede a la página web a través del aula virtual o desde la siguiente dirección:
http://www.alcancelibre.org/

TEMA 2 – Material complementario 66


Seguridad en Sistemas Operativos Propietarios

Actividades

Trabajo: Iptables

Descripción

Responde a las siguientes cuestiones:

¿Cómo creamos una cadena que defina nuestras reglas que se llame servidor?
¿Cómo hacemos para que todos los paquetes de entrada (INPUT) vayan hacia la
cadena servidor?
¿Cómo hacemos que se rechacen todos los paquetes icmp-host-unreachable?
¿Cómo mostramos las reglas que nuestro servidor tiene configurado?
¿Cómo borramos la regla que acabamos de añadir?
Antes rechazábamos los paquetes ¿Cómo hacemos ahora para que los descarte?
¿Qué diferencia existe a como lo teníamos antes?
¿Cómo podemos guardar las reglas?
Inserta encima de la última regla que acabamos de crear para que se registren en el
log (/var/log/messages).
¿Qué hacemos para que nuestra máquina si pueda conectarse a sí misma al puerto
25?
Queremos hacer una regla que nos permita la conexión al SSH. ¿Cómo lo hacemos?
¿Queremos que el ping funcione desde cualquier máquina de la red?
¿Cómo comprobamos que funciona guardamos la configuración?
¿Queremos hacer lo mismo pero para el servicio de Samba?
¿Queremos que los usuarios puedan conectarse a nuestra web?
¿Queremos hacer que todo el tráfico que llegue al puerto 80 se redirija al puerto
8080?
¿Cómo hacemos para que todas las conexiones desde nuestro ordenador al puerto 80
sean rechazadas?
Nos hemos confundido y solo queremos que los paquetes sean rechazados si van a
cualquier máquina que no sea de la red. Corrígelo.
Ahora queremos rechazar aquellas IPs que no pertenezca a la red local. ¿Qué sentencia
debes ejecutar de Iptables?

TEMA 2 – Actividades 67
Seguridad en Sistemas Operativos Propietarios

Trabajo: Squid

Descripción

Queremos montar un servidor proxy para evitar que naveguen por sus correos personales
de gmail.com, hotmail.com, yahoo.com. Que prohíba cualquier página que contenga las
palabras: «Sexo», «pornografía» y «desnudos». Además queremos que no puedan
conectarse de 8 a 10 de la mañana, que cuando mayor rendimiento y exigencia se les pide
en la empresa. Queremos que se guarde los logs en un fichero que se llame mensajes.log.

Explica paso a paso y detalladamente cómo se ha realizado dicho procedimiento, además


será necesario que se incluyan imágenes (como capturas de pantalla) y se ponga el
nombre del alumno en ellas (para confirmar su autoría). También será necesario que se
incluya un índice del trabajo y una webgrafía o bibliografía de las páginas web o libros
utilizados para realizar la actividad.

TEMA 2 – Actividades 68
Seguridad en Sistemas Operativos Propietarios

Test

1. La herramienta iptables nos permite configurar:


A. Un IDS.
B. Un cortafuegos.
C. Un gestor de paquetes.
D. Un NIDS.

2. Respecto a las particiones. ¿Qué es la memoria swap o de intercambio?


A. Una partición del disco duro que requiere de un servicio HTTP/S o FTP para la
transferencia de datos entre cliente y host.
B. Una partición del disco duro donde se almacenan datos de configuración de las
aplicaciones.
C. Una partición del disco duro utilizada para almacenar información compartida
por los diferentes usuarios de una máquina.
D. Una partición del disco duro usada para que el sistema operativo use memoria
virtual.

3. ¿Qué es una regla de un cortafuegos?


A. Una sentencia que prohíbe la entrada de tráfico a través de un único puerto.
B. Una sentencia que prohíbe la salida de tráfico UDP.
C. Una sentencia que prohíbe la entrada de tráfico de ciertas direcciones IP.
D. Todas las anteriores son ciertas.

4. Indica qué afirmación no es correcta:


A. Es muy importante para la seguridad que haya pocos archivos y particiones con
el SUID activado.
B. Puede haber varios usuarios con un mismo GID.
C. El usuario root tiene UID 1.
D. Un UUID puede referenciar un punto de montaje.

TEMA 2 – Test 69
Seguridad en Sistemas Operativos Propietarios

5. Si queremos darle permisos a un archivo de lectura y ejecución para el propietario,


lectura y escritura para el grupo, y ejecución para el resto. ¿Qué comando utilizaremos?
A. chmod 561 archivo
B. chmod 452 archivo
C. chmod 542 archivo
D. chmod 651 archivo

6. Sobre los directorios de Linux indica cuál es correcta.


A. El directorio /etc guarda los archivos de arranque del sistema.
B. En el directorio /home encontramos la carpeta personal de todos los usuarios
del sistema, incluido el root.
C. En el directorio /usr están las carpetas personales de todos los usuarios del
sistema, excepto el root.
D. En el directorio /var se guardan los logs de las aplicaciones y conexiones.

7. Sobre los comandos sudo y su, indica cuál es correcta.


A. El comando su nos permite ejecutar un comando como si fuéramos otro usuario.
B. Tras introducir la contraseña del comando sudo habrá un tiempo en el que si
volvemos a ejecutar el comando no nos la vuelva a pedir.
C. El comando su nos permite conectarnos remotamente a otra máquina mediante
una conexión cifrada.
D. Para utilizar el comando sudo hace falta introducir la contraseña del usuario al
que queremos acceder.

8. ¿Qué recomendación de seguridad es correcta?


A. Tener el kernel del sistema operativo actualizado.
B. Proteger GRUB con una contraseña.
C. Controlar los usuarios que pueden realizar la orden sudo.
D. Todas las anteriores son correctas.

9. Indica cuál no es un usuario por defecto en Debian:


A. daemon.
B. nobody.
C. games.
D. guest.

TEMA 2 – Test 70
Seguridad en Sistemas Operativos Propietarios

10. Respecto a los IDS indica cuál es correcta:


A. Utilizan reglas para bloquear tráfico entrante.
B. La herramienta Squid se usa como IDS.
C. Hay dos tipos: master IDS y slave IDS.
D. Se usan para detectar posibles ataques.

TEMA 2 – Test 71

Potrebbero piacerti anche