28 de octubre de 2010

Acceso seguro para administración remota - OpenSSH

El acceso remoto a los equipos informáticos no es nada nuevo, desde los antiguos tablones de anuncios a los que los usuarios accedian mediante telnet en modo consola hasta los nuevos medios de acceso remoto seguro. Debido a que telnet no cifra las conexiones, este protocolo actualmente está en decadencia y de desaconseja su uso para utilizar otras soluciones como SSH.

En este caso, voy a describir la instalación del servicio SSH en una Debian Lenny sin entorno gráfico utilizando el paquete OpenSSH de los repositorios Debian. La instalación la voy a realizar en mi lab particular: una máquina virtual en VMWare. La configuración por defecto se puede considerar minimamente segura pero para dotar de mayor seguridad fortificaremos el servicio describiendo las opciones que utilizaremos.

Secure Shell  (SSH) nacio en 1995 en la Universidad de Tegnológica de Helsinki, la primera versión surgio para sustituir otros protocolos de acceso remoto inseguros como rlogin, telnet o rsh que no cifran las conexiones y son susceptibles a ataques de sniffing. Ha sufrido varias revisiones debido a algunas vulnerabilidades descubiertas a lo largo de su historia con las que acceder como administrador a un sistema. Actualmente, la segunda versión del protocolo fue definido por el IETF en 2006 fortificandolo y añadiendo nuevas funcionalidades.

Inicialmente actualizo la lista de paquetes y los paquetes obsoletos

aptitude update
aptitude safe-upgrade

Una vez actualizado el equipo, paso a instalar el servidor de OpenSSH con:

aptitude install openssh-server

que nos instalará los siguientes paquetes como dependencias: openssh-client y openssh-blacklist. Podremos instalar adicionalmente openssh-blacklist-extra que añadir a la lista de claves no predeterminadas.

Esto nos creará el directorio /etc/ssh y editamos el archivo de configuración del demonio /etc/ssh/sshd_config

Port 22
Aunque algunas personas proponen cambiar el puerto para evitar los ataques automatizados que circulan por la red, lo dejaré por defecto para este tutorial. Para equipos en producción, habria que considerarlo.

Protocol 2
Por defecto, OpenSSH da soporte a las dos versiones del protocolo (1,2). Para evitar los ataque contra la versión 1, es imprescindible forzar al servidor para que utilice la segunda versión del protocolo.

PermirRootLogin no
Por defecto, se permite el acceso root al sistema (yes). Para evitar ataques automatizados contra dicho usuario con el que consigan acceder con privilegios de administrador, se deniega el acceso a dicho usuario.

ListenAddress X.X.X.X, Y.Y.Y.Y...
Por defecto el servidor escucha en todas las direcciones configuradas en el equipo (all). Para evitar accesos desde zonas no permitidas, se fuerza la dirección IP o direcciones en las que el servidor podrá recibir peticiones.

PermitEmptyPassword no
Por defecto no se permiten las contraseñas nulas (no). Este valor ha de mantenerse siempre para evitar accesos no permitidos al sistema.

AllowUsers user0, user1, user2@Z.Z.Z.Z
Por defecto se permite el acceso a todos los usuarios del sistema (all). Se pueden listar los usuarios validos incluyendo el host desde donde se accede.

MaxAuthTries 3
Por defecto se permiten seis intentos fallidos (6). Es recomendable reducir dicho número para intentar que disminuyan los intentos de ataques automatizados.

LoginGraceTime 60
Por defecto, un usuario puede estar dos minutos sin loguearse (120). Es recomendable bajar dicho valor para que las conexiones se cierren si el usuario supera el tiempo.

MaxStartups X
Por defecto se permiten diez conexiones simultáneas antes de autenticarse en el sistema (10). Es recomendable bajar dicho número para evitar los intentos no autorizados y adecuarlo a nuestras necesidades.

X11Forwardng no
Por defecto no se permite el acceso al entorno gráfico del servidor (no). En nuestro caso, el equipo no cuenta con el entorno gráfico instalado; en caso de ser necesario, yo propondría utilizar VNC.


Hasta aqui hemos instalado el servidor y lo hemos fortificado medianamente con las opciones de configuración más comunes. En siguientes entradas seguiremos con la configuración del servidor: reglas IPtables para filtrar las conexiones, certificados de clave pública, monitorización, etc.

Referencias:
Fortificación del servicio SSH (1 y 2)
Man pages - sshd_config

Un saludo, Brixton Cat.

25 de octubre de 2010

OWASP Top Ten 2010

Desde el año 2004 se lleva realizando una recopilación de las vulnerabilidades web con más riesgo para la seguridad en Internet por parte del Proyecto Abierto de Seguridad en Aplicaciones Web (OWASP). El documento está lleno de información, gráficos, enlaces... detallados para cada vulnerabilidad.

De obligada lectura para todos aquellos que se preocupen por la seguridad de sus aplicaciones web y por el impacto que puede suponer para su empresa y/o red; las vulnerabilidades se clasifican según un orden de criticidad:


Aunque los enlaces anteriores están en Inglés, está disponible una traducción al castellano del documento que puedes descargar en formato PDF o PPT para leerlo en cualquier momento. Además también está disponible la edición en papel a un precio de 7,89 € desde donde también lo podremos descargar gratuitamente en formato PDF.

El documento se licencia bajo Creative Commons garantizando su libre distribución y atribución del documento, las obras derivadas de este trabajo quedan obligadas a utilizar dicha licencia.
Un saludo, Brixton Cat.

19 de octubre de 2010

BackTrack4 persistente en un USB cifrado: Modificaciones en el arranque

Anteriormente hemos creado las particiones, las hemos cifrado y utilizados con LVM para crear volúmenes lógicos e instalado el sistema operativo. En esta última entrada paso a describir las modificaciones necesarias para que arranque desde la unidad USB y pueda acceder a la información cifrada que contiene.

Es necesario conocer el UUID de la partición cifrada y guardarlo (en un documento de texto, en otra consola, el portapapeles...)

vol_id /dev/sdb5
[...]
ID_FS_UUID=550e8400-e29b-41d4-a716-446655440000
[...]

Lo siguiente que vamos a hacer es montar las particiones y enjaularlas con chroot para poder actualizar el sistema, editar los archivos de configuración o realizar cualquier otra modificación. Inicialmente creamos la carpeta donde montar el sistema.

mkdir /mnt/backtrack4
# Montamos el volumen lógico raíz
mount /dev/mapper/vg-root /mnt/backtrack4
# Montamos la partición /boot
mount /dev/sdb1 /mnt/backtrack4/boot

Ahora nos enjaulamos en el sistema con el siguiente comando; podemos notar que hemos accedido dado que se modifica el pront de la consola, pasando de la almohadilla (#) a la raíz (/).

chroot /mnt/backtrack4

Una vez dentro de la jaula, montamos el sistema de archivos proc y sys con los comandos:

mount -t proc proc /proc
mount -t sysfs sys /sys

Actualizamos la lista de paquetes y los paquetes obsoletos:

aptitude update
aptitude safe-upgrade

Instalamos los paquetes hashalot y lvm2 dado que anteriormente los hemos instalado en el sistema live pero no en el recién instalado en la memoria USB.

aptitude install hashalot lvm2

Ahora necesitamos una serie de scripts con los que poder ejecutar la partición cifrada en el arranque del dispositivo. Accedemos al directorio /etc/initramfs-tools/hooks y descargamos el script hooks-pvcrypt* y le damos permisos de ejecución. Este script copiará los archivos necesarios a la imagen initrd.

cd /etc/initramfs-tools/hooks
wget -O pvcrypt http://www.infosecramblings.com/hooks-pvcrypt
chmod +x pvcrypt

Hacemos lo mismo en el directorio /etc/initramfs-tools/scripts/local-top para el script local-top-pvcrypt*. Este script abrirá la partición cifrada solicitando previamente la frase de paso.

cd /etc/initramfs-tools/scripts/local-top
wget -O pvcrypt http://www.infosecramblings.com/local-top-pvcrypt
chmod +x pvcrypt

Editamos el script para indicarle el UUID que anteriormente hemos guardado, podemos utilizar el editor de texto con el que trabajemos mejor.... Al final del script aparece el comando para abrir el contenedor cifrado pvcrypt:

/sbin/cryptsetup luksOpen /dev/disk/by-uuid/UUID pvcrypt

Modificamos "UUID" por el de la partición quedando de la siguiente manera:

/sbin/cryptsetup luksOpen /dev/disk/by-uuid/550e8400-e29b-41d4-a716-446655440000 pvcrypt

Modificamos el archivo /etc/initramfs-tools/modules para añadir al kernel los módulos criptográficos aes y xts:

vim /etc/initramfs-tools/modules
[...]
aes_i586
xts
[...]

y actualizamos (reconstruimos) la imagen de inicio RAM para que se cargen los scripts descargados y los módulos del kernel anteriores.

update-initramfs -u

Ejecutamos el comando fix-splash que nos creará un nuevo archivo con las opciones de arranque, menu.lst, con los comandos:

cd /etc/initramfs-tools/scripts/local-top
fix-splash

Ahora arrancamos desde la unidad USB para comprobar que todo funciona correctamente y nos loguemos en el sistema como root con la pass toor

shutdown -r now

Un saludo, Brixton Cat ;).

17 de octubre de 2010

BackTrack4 persistente en un USB cifrado: Instalación del sistema

En la entrada anterior estuvimos preparando el dispositivo USB para la instalación de BackTrack4 R1 en el mismo, hemos cifrado con LUKS dicha memoria y creado dos volúmenes lógicos: uno para swap y otro para / (raíz).

Ejecutamos el script install.sh situado en /root el cual nos abrirá una ventana con el asistente de la instalación. En primer lugar deberemos de pulsar siguiente (forward) y en la siguiente ventana seleccionamos nuestra localización: Madrid.

En el siguiente paso especificamos el layout del teclado (Spain-Spain) y una vez hecho esto, pasamos a seleccionar las particiones que utilizará el sistema: seleccionamos la opción Manual y pulsamos siguiente. Inicialmente seleccionamos el volumen lógico /dev/mapper/vg-root y editamos la partición quedando:

Sistema de archivos - Ext3 journaling file system
Formatear la partición - Marcamos el check
Punto de montaje - / (Raíz)

Y seleccionamos la partición destinada al arranque (en mi caso, /dev/sdb1) y editamos la partición de la siguiente manera:

Sistema de archivos - Ext3 journaling file system
Formatear la partición - Marcamos el check
Punto de montaje - /boot

Pulsamos siguiente. En este punto, deberemos especificar el lugar donde se encuentra el cargador de arranque (bootloader), en nuestro caso GRUB se encuentra en /deb/sdb. Para ello, pulsamos en "Advanced" y buscamos en el menu desplegable nuestra memoria USB. Por último pulsamos en "Install" para que comience la instalación del sistema.

Cuando finalice el proceso de instalación, en la ventana que nos aparece seleccionamos la opción "Continue using the live CD".  En la siguiente y última entrega, modificaremos el arranque del sistema para permitir el acceso a la parte cifrada del disco.

Un saludo, Brixton Cat.

16 de octubre de 2010

BackTrack4 persistente en un USB cifrado: Preparando la unidad USB

Utilizando una máquina virtual con el live-DVD Backtrack 4 R1, en primer lugar voy a preparar la unidad USB con las distintas particiones y el cifrado que vamos a utilizar posteriormente con LVM. Primero debemos conocer el nombre del dispositivo. En mi caso, una memoria Kingston de 16GB para tener sitio de sobra para guardar lo que haga falta...

dmesg | grep -E "hd|sd"

Luego ejecutamos fdisk para ver y modificar el particionamiento del mismo, en mi caso sdb

fdisk /dev/sdb

La idea es sencilla, crearemos dos particiones: una destinada a /boot y otra para / (raíz) en la que se instalará el sistema. Los pasos a seguir son:

+ p. Observamos el particionamiento
+ d. Borramos todas las particiones
+ n. Nueva partición:
  - p. Partición primaria
  - 1. Nº de partición
  - 1. Primer cilindro (por defecto)
  - +120M. Último cilindro (partición /boot)
+ t. Código de formato
  - 83. Sistema de archivos Ext3
+ n. Nueva partición:
  - e. Partición extendida
  - 2. Nº de partición
  - xx. Primer cilindro disponible (por defecto)
  - xxx. Último cilindro disponible (por defecto, a no ser que se quiera seguir otro esquema de particionamiento)
+ n. Nueva partición:
  - l. Partición lógica
  - xx. Primer cilindro disponible (por defecto)
  - xxx. Último cilindro disponible (por defecto, a no ser que se quiera seguir otro esquema de particionamiento)
+ a. Marcamos la partición activa
  - 1. Nº de la partición
+ w. Guardamos cambios

Hasta aquí nada del otro mundo, ahora deberemos instalar algunos paquetes necesarios para cifrar la memoria y para crear los distintos volúmenes lógicos, estos son: hashalot y lvm2.

aptitude update
aptitude install hashalot lvm2

Vamos a utilizar el mapeador de dispositivos dm-crypt a través de la herramienta cryptosetup que facilita su uso y Linux Unified Key Setup (LUKS), una implementación del cifrado de disco utilizando PBKDF2 para generar claves derivadas seguras que podrán ser aplicadas a otras herramientas.

Iniciamos la partición a cifrar y configuramos la contraseña de acceso; luego arrancamos dicha partición y creamos el nombre del dispositivo que será mapeado por dm-crypt tras introducir la frase de paso. Podemos introducir la clave en un archivo con la opción --key-file.

cryptsetup -y --cipher aes-xts-plain --key-size 512 luksFormat /dev/sdb5

explicación:
-y --> Verificación de la contraseña
--cipher aes-xts-plain --> Tipo de cifrado
--key-size 512 --> Tamaño de la clave
luksFormat -->Extensión LUKS
/dev/sdb5 --> Partición

cryptsetup luksOpen /dev/sdb5 pvcrypt

explicación:
luksOpen --> Extensión LUKS
/dev/sdb5 --> Partición
pvcrypt --> Nombre del dispositivo a mapear

Una vez tenemos creada la partición cifrada, vamos a iniciar el volúmen físico que utilizaremos con LVM posteriormente. El esquema a configurar es el siguiente:


Iniciamos el volumen físico pvcrypt que vamos a utilizar con LVM:

pvcreate /dev/mapper/pvcrypt

Creamos el grupo de volúmenes vg asociado al volúmen físico anterior:

vgcreate vg /dev/mapper/pvcrypt

Y por último creamos los volúmenes lógicos asociados al grupo de volúmenes anterior:

lvcreate -n swap -L 512M vg
lvcreate -n root -L 14G vg

Generándose los archivos vg-swap y vg-root en la ruta /dev/mapper. Como último paso, deberemos formatear los volúmenes lógicos con los comandos:

mkswap /dev/mapper/vg-swap
mkfs.ext3 /dev/mapper/vg-root

En la próxima entrega instalaremos el sistema operativo en los volúmenes que acabamos de preparar. Es un paso sencillo con algunos matices que hay que comentar para la correcta instalación.

Un saludo, Brixton Cat ;)

15 de octubre de 2010

BackTrack4 persistente en un USB cifrado: Introducción

En la siguiente entrada voy a describir los pasos a seguir para crear una unidad cifrada en la que instalar de forma persistente BackTrack 4 R1 que se detallará en posteriores para intentar que todo quede bien documentado.



Decir que yo no he inventado nada en el siguiente tutorial, es una traducción/interpretación del how-to Install BackTrack Persistent to USB with full disk encryption (también video) disponible desde la página de documentación de dicha distribución.

Las secciones en la que voy a  dividir el tutorial son:

- Preparando la unidad USB

La primera parte la dedicaremos a preparar las particiones de la unidad USB y crearemos el contenedor que cifraremos con LUKS y los volúmenes lógicos en los que instalaremos el sistema operativo.

- Instalando el sistema

Esta entrada va a ser la más simplona porque se describirá el proceso de instalación realizado a través del script install.sh situado en el $HOME de root.

- Modificaciones en el arranque

Por último, modificaremos el arranque para poder acceder a la información cifrada de la memoria USB y comprobaremos que todo funciona correctamente.

Espero que sea de ayuda y utilidad para todo el mundo, en caso de cualquier pregunta no duden en ponerse en contacto conmigo.

Un saludo, Brixton Cat.