1
Universidad Tecnológica de Panamá
Facultad de Ingeniería de Sistemas Computacionales
Maestría en Seguridad Informática
Seguridad en sistemas operativos
Hardening en Nix: Asegurar un FTP Server
Profesora: Mildred Echezano
Elaborado por:
Montenegro, Jesús - Cédula: 8-843-89
Moreno, José - Cédula: 8-794-402
Rodríguez, Carlos - Cédula: 8-814-1930
Lunes, 23 de noviembre de 2015
2
Contenido
Introducción ________________________________________________________________________3
Contenido __________________________________________________________________________4
Procesos que se deben tomar en cuenta antes de iniciar nuestro hardening________________________4
Instrucciones línea Base: mejores prácticas para el Hardening de un Servidor FTP ______________7
Instalación, configuración SSH ___________________________________________________7
Instalación de fail2ban _________________________________________________________18
Instalación del postfix para envío de correos ________________________________________22
Instalación y edición del figlet ___________________________________________________26
Instalación de jailkit y sus dependencias ___________________________________________30
Configuración de las cuotas para limitar la cantidad de almacenamiento por usuario ________42
Uso de scripts para creación de usuarios y enjaularlos a las carpetas específicas ____________46
Conclusión ________________________________________________________________________51
Bibliografía _______________________________________________________________________52
3
Introducción
Hardening o endurecimiento al sistema operativo, son las configuraciones que por seguridad de nuestro
sistema operativo, es necesario configurar algunos parámetros que por defecto trae nuestro servidor y las
aplicaciones que vamos a instalar, para así reducir la cantidad de vulnerabilidades en el mismo, esto lo
podemos lograr eliminando aplicaciones, servicios, usuarios innecesarios en el sistema así como cerrando
puertos que tampoco estén en uso, además de otros métodos que pueden ayudarnos a proteger nuestros
servidores.
El principal motivo para endurecer la seguridad de nuestro servidor FTP, es ganar tiempo frente a un
ataque, pues entre más configuraciones y otros métodos de seguridad implementemos, nunca lograremos
evitar por completo, que un atacante logre su objetivo si no le agregamos a nuestra seguridad, un
monitoreo de todos los equipos, por medio de alertas.
Cabe aclarar que el hardening de un equipo aunque es un elemento importante, no es el único factor de
protección que se debe implementar para proteger los servidores y equipos dentro de nuestra red, es
importante implementar protección externa a nuestros equipos, por medio de Firewall, IPS, IDS,
HoneyPots. Dentro de este trabajo solo nos limitaremos a la protección de nuestro servidor FTP, por medio
de configuraciones al sistema operativo, y apoyándonos en aplicaciones externas de sistema operativo,
para limitar el acceso que cada usuario pueda tener dentro del directorio de nuestro servidor.
4
Procesos que se deben tomar en cuenta antes de iniciar nuestro hardening
 Configuraciones necesarias para protegerse de posibles ataques físicos o de hardware de la
máquina. Entre otras actividades, destacan la actualización de firmware, el establecimiento de
contraseñas complejas para el arranque del equipo y la configuración de la BIOS, la des habilitación
de inicio de sistema para cualquier unidad que no sea el disco duro principal, y en casos de servidores,
la des habilitación de dispositivos ópticos, usb o similares, para evitar cualquier entrada de malware
desde un medio de almacenamiento externo.
 Instalación segura del sistema operativo. Esto implica, entre otras cosas, el considerar al menos
dos particiones primarias (una para el sistema operativo en sí y otra para carpetas y archivos de
importancia), el uso de un sistema de archivos que tenga prestaciones de seguridad, y el concepto de
instalación mínima, es decir, evitando la instalación de cualquier componente de sistema que no sea
necesario para el funcionamiento del sistema.
 Activación y/o configuración adecuada de servicios de actualizaciones automáticas, para
asegurar que el equipo tendrá todos los parches de seguridad que entrega el proveedor al día. En caso
de que se encuentre dentro de una corporación, es adecuado instalar un servidor de actualizaciones,
que deberá probar en un entorno de laboratorio el impacto de la instalación de actualizaciones antes
de instalarlas en producción.
 Instalación, configuración y mantención de programas de seguridad tales como Antivirus,
Antispyware, y un filtro Antispam según las necesidades del sistema.
 Configuración de la política local del sistema, considerando varios puntos relevantes:
 Política de contraseñas robusta, con claves caducables, almacenamiento histórico de contraseñas
(para no usar contraseñas cíclicas), bloqueos de cuentas por intentos erróneos y requisitos de
complejidad de contraseñas.
5
 Renombramiento y posterior des habilitación de cuentas estándar del sistema, como
administrador e invitado.
 Asignación correcta de derechos de usuario, de tal manera de reducir las posibilidades de elevación
de privilegios, y tratando siempre de limitar al mínimo los privilegios y/o derechos de los usuarios
activos.
 Configuración de opciones de seguridad generales, como aquellas relacionadas con rutas de acceso
compartido, apagado de sistema, inicio y cierre de sesión y opciones de seguridad de red.
 Restricciones de software, basado en lo posible en el uso de listas blancas de software permitido
más que en listas negras del mismo.
 Activación de auditorías de sistema, claves para tener un registro de algunos intentos de ataque
característicos como la adivinación de contraseñas.
 Configuración de servicios de sistema. En este punto es necesario tratar siempre de deshabilitar
todos aquellos servicios que no vayan a prestar una funcionalidad necesaria para el funcionamiento
del sistema. Por ejemplo, si su equipo no posee tarjetas de red inalámbrica, el servicio de redes
inalámbricas debería estar deshabilitado.
 Configuración de los protocolos de Red. En la medida de lo posible, es recomendable usar sistemas
de traducción de direcciones (NAT) para direccionar los equipos internos de una organización.
Deshabilitar todos aquellos protocolos de red innecesarios en el sistema y limitar el uso de los mismos
al mínimo. TCP/IP es un protocolo que no nació pensando en seguridad, por lo que limitar su uso al
estrictamente necesario es imperativo.
 Configuración adecuada de permisos de seguridad en archivos y carpetas del sistema. En la
medida de lo posible, denegar explícitamente cualquier permiso de archivo a las cuentas de acceso
anónimos o que no tengan contraseña. Un correcto set de permisos a nivel de carpetas y archivos es
clave para evitar acceso no deseado al contenido de los mismos.
6
 Configuración de opciones de seguridad de los distintos programas, como clientes de correo
electrónico, navegadores de internet y en general de cualquier tipo de programa que tenga interacción
con la red.
 Configuración de acceso remoto. En caso de no ser estrictamente necesario, es bueno deshabilitar
el acceso remoto. Sin embargo, cuando es necesario tener control remoto de la máquina, es preciso
configurarlo de manera adecuada, restringiendo el acceso a un número muy limitado de usuario,
restringiendo al mínimo las conexiones concurrentes, tomando cuidado en la desconexión y cierre de
sesión y estableciendo un canal cifrado de comunicaciones para tales propósitos, como SSH.
 Configuración adecuada de cuentas de usuario, tratando de trabajar la mayor parte del tiempo con
cuentas de acceso limitado y deshabilitando las cuentas de administrador. Es absolutamente
recomendable usar la impersonificación de usuarios para realizar labores administrativas en vez de
iniciar sesión como administradores.
 Cifrado de archivos o unidades según las necesidades del sistema, considerando un
almacenamiento externo para las llaves de descifrado. Considerar además la opción de trabajar con
sistemas de cifrado de mensajería instantánea y correo electrónico.
 Realizar y programar un sistema de respaldos frecuente a los archivos y al estado de sistema.
En la medida de lo posible, administrar los respaldos vía red o llevar los respaldos a unidades físicas
que estén alejadas del equipo que las origina.
7
Instrucciones línea Base: mejores prácticas para el Hardening de un Servidor FTP
Por lo amplio que iba ser este manual, decidimos omitir la instalación del sistema operativo, pero como
pre-requisitos para iniciar este hardening, necesitaremos instalar Debian 8, ya sea en una maquina física
o virtual, instalamos los servicios básicos, y el servicio SSH solamente, es decir deshabilitamos los demás
servicios que aparezcan seleccionados por defecto.
Antes de iniciar con la configuración del SSH, repacemos que es y para que nos servirá esto en nuestro
servidor FTP.
SSH (Secure SHell, en español: intérprete de órdenes seguro) es el nombre de un protocolo y
del programa que lo implementa, y sirve para acceder a máquinas remotas a través de una red. Permite
manejar por completo la computadora mediante un intérprete de comandos, y también puede redirigir el
tráfico de X para poder ejecutar programas gráficos si tenemos ejecutando un Servidor X (en
sistemas Unix y Windows).
Además de la conexión a otros dispositivos, SSH nos permite copiar datos de forma segura (tanto archivos
sueltos como simular sesiones FTP cifradas), gestionar claves RSA para no escribir claves al conectar a
los dispositivos y pasar los datos de cualquier otra aplicación por un canal seguro tunelizado mediante
SSH.
SSH trabaja de forma similar a como se hace con telnet. La diferencia principal es que SSH usa técnicas
de cifrado que hacen que la información que viaja por el medio de comunicación vaya de manera no
legible, evitando que terceras personas puedan descubrir el usuario y contraseña de la conexión ni lo que
se escribe durante toda la sesión; aunque es posible atacar este tipo de sistemas por medio de ataques de
REPLAY y manipular así la información entre destinos.
Ahora que ya sabemos que es el SSH y para que lo necesitamos, vamos a iniciar dar inicio con la
configuración de seguridad de nuestro servidor FTP, basándonos en las mejores prácticas para endurecer
nuestro servidor, iniciaremos con las configuraciones del servicio SSH.
1. Instalación, configuración SSH.
Vamos a editar algunos parámetros en el archivo /etc/ssh/sshd_config:
8
Primero escribiremos la siguiente línea para abrir el archivo sshd_config:
nano /etc/ssh/sshd_config
1.2 Uso del Protocolo ssh2, verificaremos que en la configuración este habilitado la versión 2 del SSH:
Protocol 2
9
1.3 Limitaremos el acceso a los usuarios o grupos con el siguiente parámetro:
AllowGroups sshaccess
10
1.4 Configuraremos el tiempo de inactividad
ClientAliveInterval 300
ClientAliveCountMax 0
11
1.5 Verificamos que están los siguientes parámetros:
IgnoreRhosts yes
HostbasedAuthentication no
12
1.6 Deshabilitaremos el acceso de root por ssh:
PermitRootLogin no
13
1.7 Cambiaremos el puerto ssh por defecto por el puerto que queramos, nosotros elegimos el puerto 1022:
Port 1022
14
1.8 Deshabilitamos la contraseña en blanco
PermitEmptyPasswords no
15
1.9 Habilitaremos el banner de advertencia quitándole el signo de #:
Por defecto #Banner /etc/issue.net
Quitamos el #, nos debe quedar: Banner /etc/issue.net
16
Guardamos las configuraciones del archivo sshd_config, si usamos nano como nuestro interprete de
comandos, entonces presionamos la tecla control + la tecla O, luego presionamos la tecla Enter y por
último presionamos la tecla X, para salir del archivo.
1.10 Podemos editar el banner y su información en el siguiente archivo:
nano /etc/issue.net
Reiniciamos el servicio SSH con el siguiente comando:
17
/etc/init.d/ssh restart
Ahora que ya tenemos configurado nuestro servicio SSH, vamos a instalar y configurar nuestra siguiente
aplicación, llamada fail2ban.
Fail2ban es una aplicación escrita en Python para la prevención de intrusos en un sistema, que actúa
penalizando o bloqueando las conexiones remotas que intentan accesos por fuerza bruta. Se distribuye
bajo licencia GNU y típicamente funciona en sistemas POSIX que tengan interfaz con un sistema de
control de paquetes o un firewall local (como iptables o TCP Wrapper).
Habitualmente las computadoras sufren ataques de fuerza bruta (especialmente servidores SSH, FTP, etc)
con el fin de descifrar las contraseñas y acceder a ellas. En este punto es indispensable una buena política
de contraseñas. Sin embargo, los ataques por fuerza bruta también consumen un gran ancho de banda,
disparan el volumen de los archivos de registro (logs) de nuestro sistema y ocupan ciclos de CPU que
podrían dedicarse a tareas útiles.
Fail2ban busca en los registros (logs) de los programas que se especifiquen las reglas que el usuario decida
para poder aplicar una penalización. La penalización puede ser bloquear la aplicación que ha fallado en
un determinado puerto, bloquearla para todos los puertos, etc. Las penalizaciones, así como las reglas, son
definidas por el usuario.
Habitualmente, si las IP de ataque se prohíben por un lapso prudencial de tiempo, la sobrecarga de red
provocada por los ataques baja, y también se reduce la probabilidad de que un ataque de fuerza bruta
basada en diccionarios tenga éxito.
Ante una cantidad predefinida (por el usuario) de intentos fallidos, fail2ban determina la acción a tomar
sobre la IP que originó el problema. Puede simplemente notificar por e-mail del suceso, denegar el acceso
a la IP atacante, bloquearla en determinado puerto y habilitarla en otros (modificando las entradas
correspondientes en iptables, o el firewall local que corresponda), etc. Puede asimismo levantar las
prohibiciones después de un determinado periodo, por si el problema no obedeciera a un ataque sino
simplemente a errores del usuario intentando loguearse. Las acciones son configurables
mediante scripts de Python.,
18
Ahora que ya sabemos para qué sirve Fail2ban, vamos a iniciar con la instalación y configuración de esta
útil aplicación para evitar ataques de fuerza bruta.
2. Instalación de fail2ban:
apt-get install fail2ban
2.1 Editamos el archivo de configuración con los siguientes parámetros:
nano /etc/fail2ban/jail.conf
[ssh]
enabled = true
port = 1022
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
19
2.2 Si queremos habilitar el envío de informes usamos o instalamos el SMTP y editamos los siguientes
parámetros:
Reemplazamos el correo por el correo de nosotros:
destemail = root@localhost
20
Buscamos la línea action = %(action_)s
Y la reemplazamos por: action = %(action_mwl)s
21
Reiniciamos el Fail2ban:
/etc/init.d/fail2ban restart
Algunas alerta realizadas por el Fail2Ban y cómo podemos ver, nos realiza una notificación en nuestro
correo.
22
La siguiente aplicación que instalaremos es el Postfix, para poder recibir las alertas que aplicaciones como
el Fail2ban generaran y que necesitamos recibir, para poder estar alertado de cualquier evento sospechoso.
Postfix es un servidor de correo de software libre / código abierto, un programa informático para el
enrutamiento y envío de correo electrónico, creado con la intención de que sea una alternativa más rápida,
fácil de administrar y segura al ampliamente utilizado Sendmail.
3. Instalación del postfix para envío de correos:
apt-get install mailutils
apt-get update
23
3.1 Instalamos nuestro servidor de correo, el postfix:
apt-get install postfix
24
3.1 Seleccionamos "Internet Site"
25
3.2 Luego introducimos el dominio.
System mail name:
Ejemplo: serpruebas.com
3.3 Reiniciamos el servicio Postfix:
service postfix restart
3.4 Probamos enviando un correo con el siguiente comando:
echo "This is the body of the email" | mail -s "This is the subject line" user@example.com
26
Ahora vamos a instalar FIGlet, una aplicación informática que genera banners de texto, en varias
tipografías, formadas por letras compuestas por conglomerados de caracteres ASCII más pequeños.
4 Instalación y edición del figlet.
4.1 Instalamos el banner de manera dinámica
apt-get install figlet
27
4.2 Creamos la carpeta
mkdir /etc/update-motd.d/
4.3 Entramos a la carpeta
cd /etc/update-motd.d/
28
4.4 Creamos los archivos de información
touch 00-header && touch 10-sysinfo && touch 90-footer
4.5 Removemos el banner anterior
rm /etc/motd
4.6 Creamos un enlace directo
ln -s /var/run/motd /etc/motd
4.7 Dentro de la carpeta creada /etc/update-motd.d:
Editamos los archivos de información: 00-header, 10-sysinfo,y 90-footer.
29
4.7.1 Abrimos el archivo 00-header:
nano 00-header
Luego copiamos lo siguiente dentro de este archivo:
[ -r /etc/lsb-release ] && . /etc/lsb-release
if [ -z "$DISTRIB_DESCRIPTION" ] && [ -x /usr/bin/lsb_release ]; then
# Fall back to using the very slow lsb_release utility
DISTRIB_DESCRIPTION=$(lsb_release -s -d)
fi
figlet $(hostname)
printf "n"
printf "Welcome to %s (%s).n" "$DISTRIB_DESCRIPTION" "$(uname -r)"
printf "n"
4.7.2 Abrimos el archivo 10-sysinfo:
nano 10-sysinfo
Luego copiamos lo siguiente dentro de este archivo:
date=`date`
load=`cat /proc/loadavg | awk '{print $1}'`
root_usage=`df -h / | awk '/// {print $(NF-1)}'`
memory_usage=`free -m | awk '/Mem:/ { total=$2 } /buffers/cache/ { used=$3
} END { printf("%3.1f%%", used/total*100)}'`
swap_usage=`free -m | awk '/Swap/ { printf("%3.1f%%", "exit !$2;$3/$2*100")
}'`
users=`users | wc -w`
time=`uptime | grep -ohe 'up .*' | sed 's/,/ hours/g' | awk '{ printf $2"
"$3 }'`
processes=`ps aux | wc -l`
ip=`ifconfig $(route | grep default | awk '{ print $8 }') | grep "inet addr"
| awk -F: '{print $2}' | awk '{print $1}'`
echo "System information as of: $date"
echo
printf "System load:t%stIP Address:t%sn" $load $ip
printf "Memory usage:t%stSystem uptime:t%sn" $memory_usage "$time"
printf "Usage on /:t%stSwap usage:t%sn" $root_usage $swap_usage
printf "Local Users:t%stProcesses:t%sn" $users $processes
echo
30
4.7.3 Abrimos el archivo 90-footer:
nano 90-footer
Luego copiamos lo siguiente dentro de este archivo:
[ -f /etc/motd.tail ] && cat /etc/motd.tail || true
4.8 Damos permisos de ejecución
chmod +x /etc/update-motd.d/*
Ahora necesitamos que cada usuario no pueda salir de un directorio es decir, ese usuario no podrá navegar
por el sistema de archivos y se le podrán definir los programas que queramos. ¿En qué situación se puede
utilizar esto? Cuando tenemos un servidor que es compartido por varios usuarios o se quieren tener
diferentes hostings.
Para conseguir esto hay un programa llamado jailkit que cumple perfectamente la función de enjaular
usuarios.
5. Instalación de jailkit y sus dependencias:
apt-get install build-essential autoconf automake libtool flex bison debhelper binutils
31
5.1 Vamos a la carpeta temporal y descargamos el paquete:
cd /tmp
wget http://olivier.sessink.nl/jailkit/jailkit-2.17.tar.gz
32
Posiblemente nos saldrá un error pidiendo ingresar un disco en el cd-rom para continuar la instalación,
para solucionar este error editaremos el siguiente archivo:
nano /etc/apt/sources.list
Modificamos el archivo hasta que nos quede igual al archivo de la siguiente imagen:
33
5.2 Una vez solucionado el error anterior, vamos a descomprimir el archivo que habíamos descargado:
tar xvfz jailkit-2.17.tar.gz
5.3 Entramos en la carpeta de jailkit y ejecutamos el binario
cd jailkit-2.17
./debian/rules binary
34
5.4 Instalamos los paquetes
cd ..
dpkg -i jailkit_2.17-1_*.deb
35
Configuración del jailkit
5.6 Creamos la carpeta de jaula o jail
mkdir /home/chrootusers
5.7 Asignamos el dueño de la carpeta el usuario root:
chown root:root /home/chrootusers
36
5.8 Creamos la jaula con los programas básicos
jk_init -v /home/chrootusers netutils basicshell jk_lsh openvpn ssh sftp
5.9 Creamos el usuario
adduser jose
Ejemplo: adduser jose
37
5.10 Probamos la creación del usuario entramos al directorio
cd /home
Verificamos con el comando y vemos la carpeta de usuario
ls
38
5.11 Vamos a enjaular el usuario
jk_jailuser -m -j /home/chrootusers/ usuario
Ejemplo: jk_jailuser -m -j /home/chrootusers/ jose
5.12 Vamos a /home/chrootusers
cd /home/chrootusers
39
Verificamos el usuario debe estar en la siguiente ruta
cd /home/chrootusers/home
Si usamos ls debemos ver el usuario creado
40
5.13 Vamos editar el jail de los usuarios para que puedan acceder
nano /home/chrootusers/etc/passwd
5.14 Buscamos la línea del usuario y le borramos la última línea de "/usr/sbin/jk_lsh", reemplazamos por
"/bin/bash"
Ejemplo:
arunp:x:1006:1001:arun pyasi,001,,:/home/arunp:/usr/sbin/jk_lsh
arun:x:1006:1005:,,,:/home/arun:/bin/bash
41
5.15 Probamos accediendo por ssh al servidor solo debemos tener acceso a la jaula
ssh jose@192.168.0.1
También podemos acceder desde el FireZilla para verificar el usuario creado, y la carpeta a la que este
tiene acceso dentro de nuestro servidor.
42
6 Configuración de las cuotas para limitar la cantidad de almacenamiento por usuario.
Necesitamos que los usuarios de nuestro sistema no consuman más recursos de los disponibles, resulta
indispensable habilitar un límite de ocupación de espacio en el disco duro.
6.1 Primero instalamos nuestro administrador de cuotas con el siguiente comando:
apt-get install quota quotatool
43
6.2 Configuración de las cuotas
nano /etc/fstab
6.3 Añadimos la siguiente línea "usrquota" al directorio raíz "/":
LABEL=DOROOT / ext4 errors=remount-ro,usrquota 0 1
El archivo fstab nos debería quedar de la siguiente manera:
44
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point> <type> <options> <dump> <pass>
# / was on /dev/sda1 during installation
UUID=3dc3b58d-97e5-497b-8254-a913fdfc5408 / ext4 errors=remount-
ro,usrjquota=quota.user,grpjquota=quota.group,jqfmt=vfsv0 0 1
# swap was on /dev/sda5 during installation
UUID=36bf486e-8f76-492d-89af-5a8eb3ce8a02 none swap sw 0 0
/dev/sr0 /media/cdrom0 udf,iso9660 user,noauto 0 0
6.4 Volvemos a cargar la partición
mount -o remount /
6.5 Configuramos las cuotas:
quotacheck -avugm
quotaon -avug
6.6 Creación de cuotas por usuario:
edquota usuario
Ejemplo: edquota jose
45
**Los parámetros que vamos a editar son donde la tercera y la cuarta columna de izquierda a derecha soft
y hard y le ponemos
10M=10000
15M=10240
Estamos limitando el espacio de almacenamiento del usuario jose a 10 MB como tamaño máximo por
archivo, y 15 MB como tamaño total de almacenamiento en el disco.
6.7 Verificamos las cuotas con el comando
quota ftpuser
46
Ejemplo:
quota jose
Nos aparecerá en pantalla lo siguiente:
Disk quotas for user jose (uid 1001):
Filesystem blocks soft hard inodes soft hard
/dev/disk/by-label/DOROOT 8 10000 10240 2 0 0
6.8 Comprobamos las cuotas de todos los usuarios:
repquota –a
7 Uso de scripts para creación de usuarios y enjaularlos a las carpetas específicas:
7.1 Creamos el grupo
groupadd sshaccess
47
7.2 El siguiente script asume que hemos creado la carpeta del jail en /home/chrootusers y el grupo
sshaccess. Creación del script
touch chroot-jail.sh
7.3 La información del script que debemos poner dentro del archivo chroot-jail.sh:
## sanity checks
if [ "$#" -ne 2 ]; then
echo "This application requires two arguments: username 'passwdhash' (single-quotes required)"
exit 1
fi
if [ ! -d /home/chrootusers/./home/ ]; then
echo "This application assumes installation to /home/chrootusers"
exit 1
fi
getent passwd $1 &>/dev/null
if [ $? -eq 0 ]; then
echo "User $1 already exists on host system. Please remove and re-create using this tool."
exit 1
fi
getent group sshaccess &>/dev/null
if [ $? -ne 0 ]; then
echo "This application assumes 'AllowGroups sshaccess' restriction in /etc/ssh/sshd_config. sshaccess
group missing"
exit 1
fi
## creation
echo
echo "Creating User and Jailed Home Directory"
echo
useradd -m -d /home/chrootusers/./home/$1 -s /usr/sbin/jk_chrootsh -p $2 $1
echo "Adding User to 'sshaccess' Group"
echo
gpasswd -a $1 sshaccess &>/dev/null
JAILUID=$(id -u $1)
JAILGID=$(id -g $1)
48
echo "Creating Required Internal Jail Passwd and Group Files"
echo
echo "$1:x:${JAILUID}:${JAILUID}::/home/$1:/bin/bash" >> /home/chrootusers/etc/passwd
echo "$1:x:${JAILGID}:" >> /home/chrootusers/etc/group
echo "Applying Quota Restrictions"
setquota -u $1 10240 15360 0 0 / || echo "Unable to Apply Quota Restrictions. Are Quotas enabled?"
7.4 Para usar el script debemos darle permisos de ejecución el siguiente comando:
chmod +x chroot-jail.sh
7.5 Ejecutamos el script, donde reemplazamos la variable entre comillas con la contraseña
./chroot-jail.sh username 'passwdhash'
Ejemplo: ./chroot-jail.sh jose 'EstaEsMiContraseña'
passwd username
7.6 Verificamos o añadimos al grupo
adduser usuario sshaccess
Ejemplo: adduser jose sshaccess
7.7 comprobamos con el comando cat que el usuario está en el grupo sshaccess
cat /etc/passwd
Nota: el script funciona sin problemas a la hora de crear los usuarios, y asignarlos al grupo con permiso
para usar el ssh, sin embargo el único problema es a la hora de usar la contraseña, la misma no funciona
por lo que debemos volver a cambiar la contraseña para que funcione.
 En caso de necesitar borrar un usuario, ejecutamos el siguiente commando:
userdel -r username
49
Ejemplo: userdel -r jose
 Posiblemente también tendremos que eliminar la carpeta del usuario:
rm -rf /home/chrootusers/home/usuario
Ejemplo: rm -rf /home/chrootusers/home/jose
8- Vamos a desbloquear cualquier IP que este banneada:
8.1 Verificamos que programa se encuentra activado el fail2ban.
fail2ban-client status
8.2 Verificamos el IP bloqueado.
iptables -L –n
50
8.3 Desbloqueamos el IP que este banneado con el siguiente comando:
fail2ban-client set ssh unbanip ipaddress
Ejemplo:
fail2ban-client set ssh unbanip 192.168.1.50
51
Conclusión
El hardenig o endurecimiento de un servidor es importante, para reducir el riesgo de un ataque, pues
recordemos que el principal motivo para endurecer la seguridad en nuestros servidores, es ganar tiempo
frente a un ataque, ya sea para reaccionar a tiempo y poder evitarlo, o hacer que la perdida de información
sea lo más mínimo posible, y para lograr esto es importante agregar un monitoreo a todos los equipos de
nuestra red, por medio de alertas.
Es importante implementar protección adicional a nuestros equipos y no limitar la protección de estos con
el solo uso de características de seguridad que por defecto trae cada sistema operativo, por medio de
Firewall, IPS, IDS, HoneyPots.
Como pudimos ver en el hardening que le realizamos a nuestro servidor FTP, podemos hacer más seguro
la comunicación que tenemos con nuestro servidor, de esa forma evitar que las contraseñas puedan ser
vistas por un atacante mediante la interceptación de una comunicación con nuestro servidor, si usáramos
por ejemplo, telnet para esto y no el protocolo SSH, tendríamos esta vulnerabilidad, también podemos
configurar la información que despliega nuestro servidor cuando un usuario, o como también pudiera ser
un posible atacante intenta iniciar sesión, modificando la información que por defecto aparece.
También vimos lo importante que es configurar los intentos que un usuario puede hacer para iniciar sesión,
y así evitar un ataque de fuerza bruta, que nos pudiera causar gastar recursos de nuestro sistema,
procesando estos intentos de iniciar sesión, y que en realidad necesitamos para el buen funcionamiento de
nuestro servidor, sin decir que estos tipos de ataque pueden causar hasta una denegación de servicios.
Controlamos también el acceso que tiene cada usuario dentro de nuestro servidor FTP, de esa forma evitar
que un usuario navegue a cada directorio de nuestro servidor, y poder ver o modificar las configuraciones,
y las aplicaciones que tengamos dentro.
52
Bibliografía
 ¿Qué es Hardening?, Consultado el 15 de noviembre de 2015. Disponible en:
http://blog.smartekh.com/%C2%BFque-es-hardening/
 Secure Shell, Consultado el 15 de noviembre de 2015. Disponible en:
https://es.wikipedia.org/wiki/Secure_Shell
 Fail2ban, Consultado el 15 de noviembre de 2015. Disponible en:
https://es.wikipedia.org/wiki/Fail2ban
 Postfix, Consultado el 15 de noviembre de 2015. Disponible en:
https://es.wikipedia.org/wiki/Postfix
 FIGlet, Consultado el 15 de noviembre de 2015. Disponible en:
https://es.wikipedia.org/wiki/FIGlet
 Enjaular usuarios en Linux, Consultado el 16 de noviembre de 2015. Disponible en:
https://operativoslinux.wordpress.com/2015/02/21/enjaular-usuarios-en-linux/
 Cuotas de disco. linux, Consultado el 16 de noviembre de 2015. Disponible en:
https://claudiooq.wordpress.com/quotas-de-disco-linux/

Hardening en-nix-asegurar-un-ftp-server

  • 1.
    1 Universidad Tecnológica dePanamá Facultad de Ingeniería de Sistemas Computacionales Maestría en Seguridad Informática Seguridad en sistemas operativos Hardening en Nix: Asegurar un FTP Server Profesora: Mildred Echezano Elaborado por: Montenegro, Jesús - Cédula: 8-843-89 Moreno, José - Cédula: 8-794-402 Rodríguez, Carlos - Cédula: 8-814-1930 Lunes, 23 de noviembre de 2015
  • 2.
    2 Contenido Introducción ________________________________________________________________________3 Contenido __________________________________________________________________________4 Procesosque se deben tomar en cuenta antes de iniciar nuestro hardening________________________4 Instrucciones línea Base: mejores prácticas para el Hardening de un Servidor FTP ______________7 Instalación, configuración SSH ___________________________________________________7 Instalación de fail2ban _________________________________________________________18 Instalación del postfix para envío de correos ________________________________________22 Instalación y edición del figlet ___________________________________________________26 Instalación de jailkit y sus dependencias ___________________________________________30 Configuración de las cuotas para limitar la cantidad de almacenamiento por usuario ________42 Uso de scripts para creación de usuarios y enjaularlos a las carpetas específicas ____________46 Conclusión ________________________________________________________________________51 Bibliografía _______________________________________________________________________52
  • 3.
    3 Introducción Hardening o endurecimientoal sistema operativo, son las configuraciones que por seguridad de nuestro sistema operativo, es necesario configurar algunos parámetros que por defecto trae nuestro servidor y las aplicaciones que vamos a instalar, para así reducir la cantidad de vulnerabilidades en el mismo, esto lo podemos lograr eliminando aplicaciones, servicios, usuarios innecesarios en el sistema así como cerrando puertos que tampoco estén en uso, además de otros métodos que pueden ayudarnos a proteger nuestros servidores. El principal motivo para endurecer la seguridad de nuestro servidor FTP, es ganar tiempo frente a un ataque, pues entre más configuraciones y otros métodos de seguridad implementemos, nunca lograremos evitar por completo, que un atacante logre su objetivo si no le agregamos a nuestra seguridad, un monitoreo de todos los equipos, por medio de alertas. Cabe aclarar que el hardening de un equipo aunque es un elemento importante, no es el único factor de protección que se debe implementar para proteger los servidores y equipos dentro de nuestra red, es importante implementar protección externa a nuestros equipos, por medio de Firewall, IPS, IDS, HoneyPots. Dentro de este trabajo solo nos limitaremos a la protección de nuestro servidor FTP, por medio de configuraciones al sistema operativo, y apoyándonos en aplicaciones externas de sistema operativo, para limitar el acceso que cada usuario pueda tener dentro del directorio de nuestro servidor.
  • 4.
    4 Procesos que sedeben tomar en cuenta antes de iniciar nuestro hardening  Configuraciones necesarias para protegerse de posibles ataques físicos o de hardware de la máquina. Entre otras actividades, destacan la actualización de firmware, el establecimiento de contraseñas complejas para el arranque del equipo y la configuración de la BIOS, la des habilitación de inicio de sistema para cualquier unidad que no sea el disco duro principal, y en casos de servidores, la des habilitación de dispositivos ópticos, usb o similares, para evitar cualquier entrada de malware desde un medio de almacenamiento externo.  Instalación segura del sistema operativo. Esto implica, entre otras cosas, el considerar al menos dos particiones primarias (una para el sistema operativo en sí y otra para carpetas y archivos de importancia), el uso de un sistema de archivos que tenga prestaciones de seguridad, y el concepto de instalación mínima, es decir, evitando la instalación de cualquier componente de sistema que no sea necesario para el funcionamiento del sistema.  Activación y/o configuración adecuada de servicios de actualizaciones automáticas, para asegurar que el equipo tendrá todos los parches de seguridad que entrega el proveedor al día. En caso de que se encuentre dentro de una corporación, es adecuado instalar un servidor de actualizaciones, que deberá probar en un entorno de laboratorio el impacto de la instalación de actualizaciones antes de instalarlas en producción.  Instalación, configuración y mantención de programas de seguridad tales como Antivirus, Antispyware, y un filtro Antispam según las necesidades del sistema.  Configuración de la política local del sistema, considerando varios puntos relevantes:  Política de contraseñas robusta, con claves caducables, almacenamiento histórico de contraseñas (para no usar contraseñas cíclicas), bloqueos de cuentas por intentos erróneos y requisitos de complejidad de contraseñas.
  • 5.
    5  Renombramiento yposterior des habilitación de cuentas estándar del sistema, como administrador e invitado.  Asignación correcta de derechos de usuario, de tal manera de reducir las posibilidades de elevación de privilegios, y tratando siempre de limitar al mínimo los privilegios y/o derechos de los usuarios activos.  Configuración de opciones de seguridad generales, como aquellas relacionadas con rutas de acceso compartido, apagado de sistema, inicio y cierre de sesión y opciones de seguridad de red.  Restricciones de software, basado en lo posible en el uso de listas blancas de software permitido más que en listas negras del mismo.  Activación de auditorías de sistema, claves para tener un registro de algunos intentos de ataque característicos como la adivinación de contraseñas.  Configuración de servicios de sistema. En este punto es necesario tratar siempre de deshabilitar todos aquellos servicios que no vayan a prestar una funcionalidad necesaria para el funcionamiento del sistema. Por ejemplo, si su equipo no posee tarjetas de red inalámbrica, el servicio de redes inalámbricas debería estar deshabilitado.  Configuración de los protocolos de Red. En la medida de lo posible, es recomendable usar sistemas de traducción de direcciones (NAT) para direccionar los equipos internos de una organización. Deshabilitar todos aquellos protocolos de red innecesarios en el sistema y limitar el uso de los mismos al mínimo. TCP/IP es un protocolo que no nació pensando en seguridad, por lo que limitar su uso al estrictamente necesario es imperativo.  Configuración adecuada de permisos de seguridad en archivos y carpetas del sistema. En la medida de lo posible, denegar explícitamente cualquier permiso de archivo a las cuentas de acceso anónimos o que no tengan contraseña. Un correcto set de permisos a nivel de carpetas y archivos es clave para evitar acceso no deseado al contenido de los mismos.
  • 6.
    6  Configuración deopciones de seguridad de los distintos programas, como clientes de correo electrónico, navegadores de internet y en general de cualquier tipo de programa que tenga interacción con la red.  Configuración de acceso remoto. En caso de no ser estrictamente necesario, es bueno deshabilitar el acceso remoto. Sin embargo, cuando es necesario tener control remoto de la máquina, es preciso configurarlo de manera adecuada, restringiendo el acceso a un número muy limitado de usuario, restringiendo al mínimo las conexiones concurrentes, tomando cuidado en la desconexión y cierre de sesión y estableciendo un canal cifrado de comunicaciones para tales propósitos, como SSH.  Configuración adecuada de cuentas de usuario, tratando de trabajar la mayor parte del tiempo con cuentas de acceso limitado y deshabilitando las cuentas de administrador. Es absolutamente recomendable usar la impersonificación de usuarios para realizar labores administrativas en vez de iniciar sesión como administradores.  Cifrado de archivos o unidades según las necesidades del sistema, considerando un almacenamiento externo para las llaves de descifrado. Considerar además la opción de trabajar con sistemas de cifrado de mensajería instantánea y correo electrónico.  Realizar y programar un sistema de respaldos frecuente a los archivos y al estado de sistema. En la medida de lo posible, administrar los respaldos vía red o llevar los respaldos a unidades físicas que estén alejadas del equipo que las origina.
  • 7.
    7 Instrucciones línea Base:mejores prácticas para el Hardening de un Servidor FTP Por lo amplio que iba ser este manual, decidimos omitir la instalación del sistema operativo, pero como pre-requisitos para iniciar este hardening, necesitaremos instalar Debian 8, ya sea en una maquina física o virtual, instalamos los servicios básicos, y el servicio SSH solamente, es decir deshabilitamos los demás servicios que aparezcan seleccionados por defecto. Antes de iniciar con la configuración del SSH, repacemos que es y para que nos servirá esto en nuestro servidor FTP. SSH (Secure SHell, en español: intérprete de órdenes seguro) es el nombre de un protocolo y del programa que lo implementa, y sirve para acceder a máquinas remotas a través de una red. Permite manejar por completo la computadora mediante un intérprete de comandos, y también puede redirigir el tráfico de X para poder ejecutar programas gráficos si tenemos ejecutando un Servidor X (en sistemas Unix y Windows). Además de la conexión a otros dispositivos, SSH nos permite copiar datos de forma segura (tanto archivos sueltos como simular sesiones FTP cifradas), gestionar claves RSA para no escribir claves al conectar a los dispositivos y pasar los datos de cualquier otra aplicación por un canal seguro tunelizado mediante SSH. SSH trabaja de forma similar a como se hace con telnet. La diferencia principal es que SSH usa técnicas de cifrado que hacen que la información que viaja por el medio de comunicación vaya de manera no legible, evitando que terceras personas puedan descubrir el usuario y contraseña de la conexión ni lo que se escribe durante toda la sesión; aunque es posible atacar este tipo de sistemas por medio de ataques de REPLAY y manipular así la información entre destinos. Ahora que ya sabemos que es el SSH y para que lo necesitamos, vamos a iniciar dar inicio con la configuración de seguridad de nuestro servidor FTP, basándonos en las mejores prácticas para endurecer nuestro servidor, iniciaremos con las configuraciones del servicio SSH. 1. Instalación, configuración SSH. Vamos a editar algunos parámetros en el archivo /etc/ssh/sshd_config:
  • 8.
    8 Primero escribiremos lasiguiente línea para abrir el archivo sshd_config: nano /etc/ssh/sshd_config 1.2 Uso del Protocolo ssh2, verificaremos que en la configuración este habilitado la versión 2 del SSH: Protocol 2
  • 9.
    9 1.3 Limitaremos elacceso a los usuarios o grupos con el siguiente parámetro: AllowGroups sshaccess
  • 10.
    10 1.4 Configuraremos eltiempo de inactividad ClientAliveInterval 300 ClientAliveCountMax 0
  • 11.
    11 1.5 Verificamos queestán los siguientes parámetros: IgnoreRhosts yes HostbasedAuthentication no
  • 12.
    12 1.6 Deshabilitaremos elacceso de root por ssh: PermitRootLogin no
  • 13.
    13 1.7 Cambiaremos elpuerto ssh por defecto por el puerto que queramos, nosotros elegimos el puerto 1022: Port 1022
  • 14.
    14 1.8 Deshabilitamos lacontraseña en blanco PermitEmptyPasswords no
  • 15.
    15 1.9 Habilitaremos elbanner de advertencia quitándole el signo de #: Por defecto #Banner /etc/issue.net Quitamos el #, nos debe quedar: Banner /etc/issue.net
  • 16.
    16 Guardamos las configuracionesdel archivo sshd_config, si usamos nano como nuestro interprete de comandos, entonces presionamos la tecla control + la tecla O, luego presionamos la tecla Enter y por último presionamos la tecla X, para salir del archivo. 1.10 Podemos editar el banner y su información en el siguiente archivo: nano /etc/issue.net Reiniciamos el servicio SSH con el siguiente comando:
  • 17.
    17 /etc/init.d/ssh restart Ahora queya tenemos configurado nuestro servicio SSH, vamos a instalar y configurar nuestra siguiente aplicación, llamada fail2ban. Fail2ban es una aplicación escrita en Python para la prevención de intrusos en un sistema, que actúa penalizando o bloqueando las conexiones remotas que intentan accesos por fuerza bruta. Se distribuye bajo licencia GNU y típicamente funciona en sistemas POSIX que tengan interfaz con un sistema de control de paquetes o un firewall local (como iptables o TCP Wrapper). Habitualmente las computadoras sufren ataques de fuerza bruta (especialmente servidores SSH, FTP, etc) con el fin de descifrar las contraseñas y acceder a ellas. En este punto es indispensable una buena política de contraseñas. Sin embargo, los ataques por fuerza bruta también consumen un gran ancho de banda, disparan el volumen de los archivos de registro (logs) de nuestro sistema y ocupan ciclos de CPU que podrían dedicarse a tareas útiles. Fail2ban busca en los registros (logs) de los programas que se especifiquen las reglas que el usuario decida para poder aplicar una penalización. La penalización puede ser bloquear la aplicación que ha fallado en un determinado puerto, bloquearla para todos los puertos, etc. Las penalizaciones, así como las reglas, son definidas por el usuario. Habitualmente, si las IP de ataque se prohíben por un lapso prudencial de tiempo, la sobrecarga de red provocada por los ataques baja, y también se reduce la probabilidad de que un ataque de fuerza bruta basada en diccionarios tenga éxito. Ante una cantidad predefinida (por el usuario) de intentos fallidos, fail2ban determina la acción a tomar sobre la IP que originó el problema. Puede simplemente notificar por e-mail del suceso, denegar el acceso a la IP atacante, bloquearla en determinado puerto y habilitarla en otros (modificando las entradas correspondientes en iptables, o el firewall local que corresponda), etc. Puede asimismo levantar las prohibiciones después de un determinado periodo, por si el problema no obedeciera a un ataque sino simplemente a errores del usuario intentando loguearse. Las acciones son configurables mediante scripts de Python.,
  • 18.
    18 Ahora que yasabemos para qué sirve Fail2ban, vamos a iniciar con la instalación y configuración de esta útil aplicación para evitar ataques de fuerza bruta. 2. Instalación de fail2ban: apt-get install fail2ban 2.1 Editamos el archivo de configuración con los siguientes parámetros: nano /etc/fail2ban/jail.conf [ssh] enabled = true port = 1022 filter = sshd logpath = /var/log/auth.log maxretry = 3
  • 19.
    19 2.2 Si queremoshabilitar el envío de informes usamos o instalamos el SMTP y editamos los siguientes parámetros: Reemplazamos el correo por el correo de nosotros: destemail = root@localhost
  • 20.
    20 Buscamos la líneaaction = %(action_)s Y la reemplazamos por: action = %(action_mwl)s
  • 21.
    21 Reiniciamos el Fail2ban: /etc/init.d/fail2banrestart Algunas alerta realizadas por el Fail2Ban y cómo podemos ver, nos realiza una notificación en nuestro correo.
  • 22.
    22 La siguiente aplicaciónque instalaremos es el Postfix, para poder recibir las alertas que aplicaciones como el Fail2ban generaran y que necesitamos recibir, para poder estar alertado de cualquier evento sospechoso. Postfix es un servidor de correo de software libre / código abierto, un programa informático para el enrutamiento y envío de correo electrónico, creado con la intención de que sea una alternativa más rápida, fácil de administrar y segura al ampliamente utilizado Sendmail. 3. Instalación del postfix para envío de correos: apt-get install mailutils apt-get update
  • 23.
    23 3.1 Instalamos nuestroservidor de correo, el postfix: apt-get install postfix
  • 24.
  • 25.
    25 3.2 Luego introducimosel dominio. System mail name: Ejemplo: serpruebas.com 3.3 Reiniciamos el servicio Postfix: service postfix restart 3.4 Probamos enviando un correo con el siguiente comando: echo "This is the body of the email" | mail -s "This is the subject line" user@example.com
  • 26.
    26 Ahora vamos ainstalar FIGlet, una aplicación informática que genera banners de texto, en varias tipografías, formadas por letras compuestas por conglomerados de caracteres ASCII más pequeños. 4 Instalación y edición del figlet. 4.1 Instalamos el banner de manera dinámica apt-get install figlet
  • 27.
    27 4.2 Creamos lacarpeta mkdir /etc/update-motd.d/ 4.3 Entramos a la carpeta cd /etc/update-motd.d/
  • 28.
    28 4.4 Creamos losarchivos de información touch 00-header && touch 10-sysinfo && touch 90-footer 4.5 Removemos el banner anterior rm /etc/motd 4.6 Creamos un enlace directo ln -s /var/run/motd /etc/motd 4.7 Dentro de la carpeta creada /etc/update-motd.d: Editamos los archivos de información: 00-header, 10-sysinfo,y 90-footer.
  • 29.
    29 4.7.1 Abrimos elarchivo 00-header: nano 00-header Luego copiamos lo siguiente dentro de este archivo: [ -r /etc/lsb-release ] && . /etc/lsb-release if [ -z "$DISTRIB_DESCRIPTION" ] && [ -x /usr/bin/lsb_release ]; then # Fall back to using the very slow lsb_release utility DISTRIB_DESCRIPTION=$(lsb_release -s -d) fi figlet $(hostname) printf "n" printf "Welcome to %s (%s).n" "$DISTRIB_DESCRIPTION" "$(uname -r)" printf "n" 4.7.2 Abrimos el archivo 10-sysinfo: nano 10-sysinfo Luego copiamos lo siguiente dentro de este archivo: date=`date` load=`cat /proc/loadavg | awk '{print $1}'` root_usage=`df -h / | awk '/// {print $(NF-1)}'` memory_usage=`free -m | awk '/Mem:/ { total=$2 } /buffers/cache/ { used=$3 } END { printf("%3.1f%%", used/total*100)}'` swap_usage=`free -m | awk '/Swap/ { printf("%3.1f%%", "exit !$2;$3/$2*100") }'` users=`users | wc -w` time=`uptime | grep -ohe 'up .*' | sed 's/,/ hours/g' | awk '{ printf $2" "$3 }'` processes=`ps aux | wc -l` ip=`ifconfig $(route | grep default | awk '{ print $8 }') | grep "inet addr" | awk -F: '{print $2}' | awk '{print $1}'` echo "System information as of: $date" echo printf "System load:t%stIP Address:t%sn" $load $ip printf "Memory usage:t%stSystem uptime:t%sn" $memory_usage "$time" printf "Usage on /:t%stSwap usage:t%sn" $root_usage $swap_usage printf "Local Users:t%stProcesses:t%sn" $users $processes echo
  • 30.
    30 4.7.3 Abrimos elarchivo 90-footer: nano 90-footer Luego copiamos lo siguiente dentro de este archivo: [ -f /etc/motd.tail ] && cat /etc/motd.tail || true 4.8 Damos permisos de ejecución chmod +x /etc/update-motd.d/* Ahora necesitamos que cada usuario no pueda salir de un directorio es decir, ese usuario no podrá navegar por el sistema de archivos y se le podrán definir los programas que queramos. ¿En qué situación se puede utilizar esto? Cuando tenemos un servidor que es compartido por varios usuarios o se quieren tener diferentes hostings. Para conseguir esto hay un programa llamado jailkit que cumple perfectamente la función de enjaular usuarios. 5. Instalación de jailkit y sus dependencias: apt-get install build-essential autoconf automake libtool flex bison debhelper binutils
  • 31.
    31 5.1 Vamos ala carpeta temporal y descargamos el paquete: cd /tmp wget http://olivier.sessink.nl/jailkit/jailkit-2.17.tar.gz
  • 32.
    32 Posiblemente nos saldráun error pidiendo ingresar un disco en el cd-rom para continuar la instalación, para solucionar este error editaremos el siguiente archivo: nano /etc/apt/sources.list Modificamos el archivo hasta que nos quede igual al archivo de la siguiente imagen:
  • 33.
    33 5.2 Una vezsolucionado el error anterior, vamos a descomprimir el archivo que habíamos descargado: tar xvfz jailkit-2.17.tar.gz 5.3 Entramos en la carpeta de jailkit y ejecutamos el binario cd jailkit-2.17 ./debian/rules binary
  • 34.
    34 5.4 Instalamos lospaquetes cd .. dpkg -i jailkit_2.17-1_*.deb
  • 35.
    35 Configuración del jailkit 5.6Creamos la carpeta de jaula o jail mkdir /home/chrootusers 5.7 Asignamos el dueño de la carpeta el usuario root: chown root:root /home/chrootusers
  • 36.
    36 5.8 Creamos lajaula con los programas básicos jk_init -v /home/chrootusers netutils basicshell jk_lsh openvpn ssh sftp 5.9 Creamos el usuario adduser jose Ejemplo: adduser jose
  • 37.
    37 5.10 Probamos lacreación del usuario entramos al directorio cd /home Verificamos con el comando y vemos la carpeta de usuario ls
  • 38.
    38 5.11 Vamos aenjaular el usuario jk_jailuser -m -j /home/chrootusers/ usuario Ejemplo: jk_jailuser -m -j /home/chrootusers/ jose 5.12 Vamos a /home/chrootusers cd /home/chrootusers
  • 39.
    39 Verificamos el usuariodebe estar en la siguiente ruta cd /home/chrootusers/home Si usamos ls debemos ver el usuario creado
  • 40.
    40 5.13 Vamos editarel jail de los usuarios para que puedan acceder nano /home/chrootusers/etc/passwd 5.14 Buscamos la línea del usuario y le borramos la última línea de "/usr/sbin/jk_lsh", reemplazamos por "/bin/bash" Ejemplo: arunp:x:1006:1001:arun pyasi,001,,:/home/arunp:/usr/sbin/jk_lsh arun:x:1006:1005:,,,:/home/arun:/bin/bash
  • 41.
    41 5.15 Probamos accediendopor ssh al servidor solo debemos tener acceso a la jaula ssh jose@192.168.0.1 También podemos acceder desde el FireZilla para verificar el usuario creado, y la carpeta a la que este tiene acceso dentro de nuestro servidor.
  • 42.
    42 6 Configuración delas cuotas para limitar la cantidad de almacenamiento por usuario. Necesitamos que los usuarios de nuestro sistema no consuman más recursos de los disponibles, resulta indispensable habilitar un límite de ocupación de espacio en el disco duro. 6.1 Primero instalamos nuestro administrador de cuotas con el siguiente comando: apt-get install quota quotatool
  • 43.
    43 6.2 Configuración delas cuotas nano /etc/fstab 6.3 Añadimos la siguiente línea "usrquota" al directorio raíz "/": LABEL=DOROOT / ext4 errors=remount-ro,usrquota 0 1 El archivo fstab nos debería quedar de la siguiente manera:
  • 44.
    44 # /etc/fstab: staticfile system information. # # Use 'blkid' to print the universally unique identifier for a # device; this may be used with UUID= as a more robust way to name devices # that works even if disks are added and removed. See fstab(5). # # <file system> <mount point> <type> <options> <dump> <pass> # / was on /dev/sda1 during installation UUID=3dc3b58d-97e5-497b-8254-a913fdfc5408 / ext4 errors=remount- ro,usrjquota=quota.user,grpjquota=quota.group,jqfmt=vfsv0 0 1 # swap was on /dev/sda5 during installation UUID=36bf486e-8f76-492d-89af-5a8eb3ce8a02 none swap sw 0 0 /dev/sr0 /media/cdrom0 udf,iso9660 user,noauto 0 0 6.4 Volvemos a cargar la partición mount -o remount / 6.5 Configuramos las cuotas: quotacheck -avugm quotaon -avug 6.6 Creación de cuotas por usuario: edquota usuario Ejemplo: edquota jose
  • 45.
    45 **Los parámetros quevamos a editar son donde la tercera y la cuarta columna de izquierda a derecha soft y hard y le ponemos 10M=10000 15M=10240 Estamos limitando el espacio de almacenamiento del usuario jose a 10 MB como tamaño máximo por archivo, y 15 MB como tamaño total de almacenamiento en el disco. 6.7 Verificamos las cuotas con el comando quota ftpuser
  • 46.
    46 Ejemplo: quota jose Nos apareceráen pantalla lo siguiente: Disk quotas for user jose (uid 1001): Filesystem blocks soft hard inodes soft hard /dev/disk/by-label/DOROOT 8 10000 10240 2 0 0 6.8 Comprobamos las cuotas de todos los usuarios: repquota –a 7 Uso de scripts para creación de usuarios y enjaularlos a las carpetas específicas: 7.1 Creamos el grupo groupadd sshaccess
  • 47.
    47 7.2 El siguientescript asume que hemos creado la carpeta del jail en /home/chrootusers y el grupo sshaccess. Creación del script touch chroot-jail.sh 7.3 La información del script que debemos poner dentro del archivo chroot-jail.sh: ## sanity checks if [ "$#" -ne 2 ]; then echo "This application requires two arguments: username 'passwdhash' (single-quotes required)" exit 1 fi if [ ! -d /home/chrootusers/./home/ ]; then echo "This application assumes installation to /home/chrootusers" exit 1 fi getent passwd $1 &>/dev/null if [ $? -eq 0 ]; then echo "User $1 already exists on host system. Please remove and re-create using this tool." exit 1 fi getent group sshaccess &>/dev/null if [ $? -ne 0 ]; then echo "This application assumes 'AllowGroups sshaccess' restriction in /etc/ssh/sshd_config. sshaccess group missing" exit 1 fi ## creation echo echo "Creating User and Jailed Home Directory" echo useradd -m -d /home/chrootusers/./home/$1 -s /usr/sbin/jk_chrootsh -p $2 $1 echo "Adding User to 'sshaccess' Group" echo gpasswd -a $1 sshaccess &>/dev/null JAILUID=$(id -u $1) JAILGID=$(id -g $1)
  • 48.
    48 echo "Creating RequiredInternal Jail Passwd and Group Files" echo echo "$1:x:${JAILUID}:${JAILUID}::/home/$1:/bin/bash" >> /home/chrootusers/etc/passwd echo "$1:x:${JAILGID}:" >> /home/chrootusers/etc/group echo "Applying Quota Restrictions" setquota -u $1 10240 15360 0 0 / || echo "Unable to Apply Quota Restrictions. Are Quotas enabled?" 7.4 Para usar el script debemos darle permisos de ejecución el siguiente comando: chmod +x chroot-jail.sh 7.5 Ejecutamos el script, donde reemplazamos la variable entre comillas con la contraseña ./chroot-jail.sh username 'passwdhash' Ejemplo: ./chroot-jail.sh jose 'EstaEsMiContraseña' passwd username 7.6 Verificamos o añadimos al grupo adduser usuario sshaccess Ejemplo: adduser jose sshaccess 7.7 comprobamos con el comando cat que el usuario está en el grupo sshaccess cat /etc/passwd Nota: el script funciona sin problemas a la hora de crear los usuarios, y asignarlos al grupo con permiso para usar el ssh, sin embargo el único problema es a la hora de usar la contraseña, la misma no funciona por lo que debemos volver a cambiar la contraseña para que funcione.  En caso de necesitar borrar un usuario, ejecutamos el siguiente commando: userdel -r username
  • 49.
    49 Ejemplo: userdel -rjose  Posiblemente también tendremos que eliminar la carpeta del usuario: rm -rf /home/chrootusers/home/usuario Ejemplo: rm -rf /home/chrootusers/home/jose 8- Vamos a desbloquear cualquier IP que este banneada: 8.1 Verificamos que programa se encuentra activado el fail2ban. fail2ban-client status 8.2 Verificamos el IP bloqueado. iptables -L –n
  • 50.
    50 8.3 Desbloqueamos elIP que este banneado con el siguiente comando: fail2ban-client set ssh unbanip ipaddress Ejemplo: fail2ban-client set ssh unbanip 192.168.1.50
  • 51.
    51 Conclusión El hardenig oendurecimiento de un servidor es importante, para reducir el riesgo de un ataque, pues recordemos que el principal motivo para endurecer la seguridad en nuestros servidores, es ganar tiempo frente a un ataque, ya sea para reaccionar a tiempo y poder evitarlo, o hacer que la perdida de información sea lo más mínimo posible, y para lograr esto es importante agregar un monitoreo a todos los equipos de nuestra red, por medio de alertas. Es importante implementar protección adicional a nuestros equipos y no limitar la protección de estos con el solo uso de características de seguridad que por defecto trae cada sistema operativo, por medio de Firewall, IPS, IDS, HoneyPots. Como pudimos ver en el hardening que le realizamos a nuestro servidor FTP, podemos hacer más seguro la comunicación que tenemos con nuestro servidor, de esa forma evitar que las contraseñas puedan ser vistas por un atacante mediante la interceptación de una comunicación con nuestro servidor, si usáramos por ejemplo, telnet para esto y no el protocolo SSH, tendríamos esta vulnerabilidad, también podemos configurar la información que despliega nuestro servidor cuando un usuario, o como también pudiera ser un posible atacante intenta iniciar sesión, modificando la información que por defecto aparece. También vimos lo importante que es configurar los intentos que un usuario puede hacer para iniciar sesión, y así evitar un ataque de fuerza bruta, que nos pudiera causar gastar recursos de nuestro sistema, procesando estos intentos de iniciar sesión, y que en realidad necesitamos para el buen funcionamiento de nuestro servidor, sin decir que estos tipos de ataque pueden causar hasta una denegación de servicios. Controlamos también el acceso que tiene cada usuario dentro de nuestro servidor FTP, de esa forma evitar que un usuario navegue a cada directorio de nuestro servidor, y poder ver o modificar las configuraciones, y las aplicaciones que tengamos dentro.
  • 52.
    52 Bibliografía  ¿Qué esHardening?, Consultado el 15 de noviembre de 2015. Disponible en: http://blog.smartekh.com/%C2%BFque-es-hardening/  Secure Shell, Consultado el 15 de noviembre de 2015. Disponible en: https://es.wikipedia.org/wiki/Secure_Shell  Fail2ban, Consultado el 15 de noviembre de 2015. Disponible en: https://es.wikipedia.org/wiki/Fail2ban  Postfix, Consultado el 15 de noviembre de 2015. Disponible en: https://es.wikipedia.org/wiki/Postfix  FIGlet, Consultado el 15 de noviembre de 2015. Disponible en: https://es.wikipedia.org/wiki/FIGlet  Enjaular usuarios en Linux, Consultado el 16 de noviembre de 2015. Disponible en: https://operativoslinux.wordpress.com/2015/02/21/enjaular-usuarios-en-linux/  Cuotas de disco. linux, Consultado el 16 de noviembre de 2015. Disponible en: https://claudiooq.wordpress.com/quotas-de-disco-linux/