GNU/Linux >> Tutoriales Linux >  >> Ubuntu

Una guía definitiva para asegurar el host de Ubuntu

Ubuntu se denomina como el sistema operativo altamente seguro disponible, pero tiene fallas en su instalación predeterminada como cualquier otro sistema operativo. Para eliminar estas debilidades, el especialista en seguridad de TI ha emitido pautas para combatir las puertas traseras/debilidades de su sistema y protegerlo de algunas de las vulnerabilidades comunes de Ubuntu. En esta guía, veremos algunas configuraciones de seguridad importantes que todo administrador de sistemas desea aplicar en su servidor.

1. Fortalecer la configuración de arranque

Para evitar que los usuarios no root cambien el archivo de configuración del cargador de arranque, que es /boot/grub/grub.cfg, configure los propietarios y grupos de este archivo como root. Ejecute el siguiente comando para cambiar la propiedad a root.

# chown root:root /boot/grub/grub.cfg

Para evitar que los usuarios que no sean root lean los parámetros de arranque, configure el permiso para que el archivo del cargador de arranque sea solo de lectura y escritura. Ejecute el siguiente comando para lograr este punto de referencia.

# chmod og-rwx /boot/grub/grub.cfg

También configure una contraseña para el cargador de arranque, de modo que cualquier usuario no autorizado que intente reiniciar el sistema deba proporcionar una contraseña para continuar con el siguiente paso. Esto asegura que un usuario no autorizado no pueda cambiar el parámetro de arranque, como deshabilitar SELinux o cambiar la partición de arranque. Ejecute el siguiente comando para crear una contraseña de cargador de arranque.

# grub-mkpasswd-pbkdf2

Ahora cree un nuevo archivo con el nombre /etc/grub.d/00_header y agregue las siguientes líneas.

establecer superusuarios=""
password_pbkdf2

Elimine la opción --unrestricted en el parámetro CLASS del archivo /etc/grub.d/10_linux . Esto garantiza un requisito de contraseña obligatorio para continuar con el siguiente paso, es decir, editar los parámetros de arranque.

Actualizar el grub

# update-grub

2. Sistema de archivos seguro

Cree particiones basadas en diferentes categorías, como datos de usuarios en la partición /home, archivos de intercambio en la partición /swap, archivos temporales en la partición /tmp, archivos de configuración del sistema en la partición /etc, archivos de dispositivos en la partición /dev, etc. Esto evitará el agotamiento de los recursos como así como opciones de montaje flexibles basadas en el uso previsto de los datos.

2.1 Crear partición para /tmp

La primera razón para crear una partición separada para /tmp es que existe la posibilidad de que se agoten los recursos, ya que el directorio /tmp es de escritura mundial. También hacer una partición separada para /temp permite configurar la opción noexec marcándola inútil para que un usuario no autorizado ejecute código y enlace duro al programa setuid del sistema.

2.2 Establecer la opción nodev para /tmp

Establezca la opción nodev para la partición /tmp para evitar que los usuarios creen un archivo de dispositivo de bloque/caracter. Edite el archivo /etc/fstab y agregue la siguiente línea.

# mount -o remount,nodev /tmp

2.3 Establecer la opción nosuid para /tmp

Para evitar que los usuarios creen archivos de ID de usuario establecidos en el sistema de archivos /tmp, agregue la siguiente línea en /etc/fstab, ya que el sistema de archivos /tmp se utiliza para el almacenamiento de archivos temporales.

# mount -o remount,nosuid /tmp

2.4 Establecer la opción noexec para /tmp

Para evitar que los usuarios ejecuten archivos binarios ejecutables, configure la opción noexec para la partición /tmp. Agregue la siguiente línea en /etc/fstab para bloquear la ejecución de binarios ejecutables.

# mount -o remount,noexec /tmp

2.5 Crear partición separada para /var

Los demonios de sistemas y otros servicios almacenan temporalmente datos dinámicos en /var con algunos directorios que pueden tener permisos de escritura en todo el mundo. Por lo tanto, hay posibilidades de agotamiento de recursos en /var. Para evitar el agotamiento de recursos en /var, cree una partición separada para /var en una nueva instalación y para el sistema instalado previamente, use LVM para crear una nueva partición.

2.6 Vincular /var/tmp a /tmp

El montaje vinculante de /var/tmp a /tmp permitirá proteger /var/tmp de la misma manera que se protege /tmp. Esto también evitará que /var agote la memoria en /var/tmp con archivos temporales. Ejecute el siguiente comando para enlazar /tmp y /var/tmp

# sudo mount --bind /tmp /var/tmp

Para hacerlo permanente, agregue la siguiente línea en /etc/fstab

# /tmp /var/tmp none bind 0 0

2.7 Crear una partición separada para /var/log

Para proteger los datos confidenciales de auditoría y la protección contra el agotamiento de los recursos, cree una partición separada para /var/iniciar sesión en la nueva instalación y para el sistema instalado previamente, use LVM para crear una nueva partición.

2.8 Crear una partición separada para /var/log/audit

El demonio de auditoría almacena los datos de registro en el directorio /var/log/audit. Para protegerse contra el agotamiento de los recursos, ya que el registro de auditoría puede crecer a un tamaño grande y también para proteger los datos confidenciales de auditoría, cree una partición separada para /var/log/audit en una nueva instalación y para el sistema instalado anteriormente, use LVM para crear una nueva partición.

2.9 Crear partición separada para /home

Los datos de los usuarios se almacenan en el directorio /home. Es posible restringir el tipo de archivos que se pueden almacenar en /home. Para lograr esto, cree una partición separada para /home en una nueva instalación y para un sistema previamente instalado, use LVM para crear una nueva partición. También una partición separada para /home protege contra el agotamiento de recursos.

2.10 Establecer nodev para /home

Para evitar que el directorio /home se utilice para definir caracteres y bloquear dispositivos especiales, configure la opción nodev para que los usuarios no puedan crear este tipo de archivos. Edite el archivo /etc/fstab y agregue las siguientes líneas en él.

# mount -o remount, nodev /home

2.11 Establecer nodev para medios extraíbles

Un usuario puede engañar a los controles de seguridad mediante el uso de caracteres y bloquear dispositivos especiales de medios extraíbles para acceder a archivos de dispositivos confidenciales como /dev/kmem. Edite el archivo /etc/fstab y agregue las siguientes líneas en él.

# mount -o remount, nodev { removable device like floppy or cdrom or USB stick etc. }

2.12 Establecer noexec en medios extraíbles

Para evitar que los programas se ejecuten desde medios extraíbles para que no se puedan colocar programas maliciosos en el sistema, agregue las siguientes líneas en /etc/fstab

# mount -o remount,noexec { removable device like floppy or cdrom or USB stick etc. }

2.13 Añadir nosuid a medios extraíbles

Para evitar que los medios extraíbles se utilicen como setuid/setgid, lo que permite a los usuarios no root colocar programas privilegiados en el sistema. Edite /etc/fstab y agregue las siguientes líneas

# mount -o remount,nosuid { removable device like floppy or cdrom or USB stick etc. }

2.14 Agregar la opción nodev para la partición /run/shm

Para evitar que los usuarios creen archivos de dispositivos especiales en las particiones /run/shm, agregue la siguiente línea en /etc/fstab. Esto asegura que los usuarios no podrán crear dispositivos en /run/shm

# mount -o remount,nodev /run/shm

2.15 Añadir la opción nosuid a la partición /run/shm

Para evitar que /run/shm se use como setuid/setgid, eso permite a los usuarios no root colocar programas privilegiados en el sistema. Los usuarios pueden ejecutar el programa con su propio uid y gid. Edite /etc/fstab y agregue las siguientes líneas

# mount -o remount,nosuid /run/shm

2.16 Agregar noexec a la partición /run/shm

Para evitar que la partición /run/shm se use para ejecutar programas, agregue las siguientes líneas en /etc/fstab

# mount -o remount, noexec /run/shm

2.17 Establecer sticky bit en los directorios mundiales editables

Para evitar que los usuarios eliminen o cambien el nombre de los archivos en este directorio que no son de su propiedad, active el bit adhesivo.

# chmod +t /tmp
or
# chmod 1777 /tmp

3. Descartar sistemas heredados

No instale/utilice los siguientes servicios y utilidades heredados, ya que existen vulnerabilidades en estos sistemas/utilidades. Estos son:NIS, servidor/cliente RSH, servidor/cliente de conversación, Telenet, TFTP, XINETD, Chargen, Daytime, eco, descartar, hora

4. Descartar servicios de propósito especial

No instale/use los siguientes servicios ya que hay vulnerabilidades en estos servicios. Estos son-
Sistema X Window, servidor Avahi Servidor de impresión, servidor DHCP, LDAP, NFS y RPC, servidor DNS, FTP, Samba, SNMP, Rsync, BIOSDEVNAME. De hecho, pocos de los servicios anteriores son necesarios para el funcionamiento diario, como el servidor DNS. En esa situación, es recomendable instalar estos servidores en un host separado que no contenga datos confidenciales.

5. Configuración de red y cortafuegos

5.1 Deshabilitar el reenvío de IP

Para evitar que el servidor se utilice para reenviar paquetes, es decir, para actuar como un enrutador, establezca el parámetro net.ipv4.ip_forward en 0 en /etc/sysctl.conf

net.ipv4.ip_forward = 0

Ahora recarga la configuración de sysctl

# sudo sysctl -p

5.2 Deshabilitar la redirección de paquetes de envío

Un usuario no autorizado puede usar un host comprometido para enviar paquetes de redirecciones ICMP a otro dispositivo de enrutamiento para corromper el enrutamiento. Para deshabilitar la redirección de paquetes, configure los parámetros net.ipv4.conf.all.send_redirects y net.ipv4.conf.default.send_redirects en 0 en /etc/sysctl.conf

# net.ipv4.conf.all.send_redirects = 0

# net.ipv4.conf.default.send_redirects =0

Ahora recarga la configuración de sysctl

# sudo sysctl -p

5.3 Deshabilitar la aceptación de paquetes de ruta de origen

Usando paquetes enrutados de origen, un usuario puede obtener acceso a la dirección privada del sistema ya que se puede especificar la ruta.
Establezca los parámetros net.ipv4.conf.all.accept_source_route y net.ipv4.conf.default.accept_source_route en 0 en /etc/sysctl.conf

# net.ipv4.conf.all.accept_source_route=0
# net.ipv4.conf.default.accept_source_route=0

Ahora recarga la configuración de sysctl

# sudo sysctl -p

5.4 Deshabilitar la aceptación de redirección ICMP

Un usuario puede modificar la tabla de enrutamiento para enviar paquetes a redes incorrectas utilizando una redirección ICMP falsa, lo que permite capturar los paquetes. Para deshabilitar la aceptación de redirección de ICMP, establezca los parámetros net.ipv4.conf.all.accept_redirects y net.ipv4.conf.default.accept_redirects en 0 en /etc/sysctl.conf

# net.ipv4.conf.all.accept_redirects = 0
# net.ipv4.conf.default.accept_redirects parameters = 0

Ahora recarga la configuración de sysctl

# sudo sysctl -p

5.5 Deshabilitar la aceptación de redirección ICMP segura

Las redirecciones ICMP seguras y las redirecciones ICMP son casi iguales, la única diferencia es que el origen de los paquetes de redirecciones ICMP seguras es una puerta de enlace. Si la puerta de enlace de origen está comprometida, un usuario puede actualizar la tabla de enrutamiento mediante redirecciones ICMP seguras.
Establezca los parámetros net.ipv4.conf.all.secure_redirects y net.ipv4.conf.default.secure_redirects en 0 en /etc/sysctl.conf para deshabilitar la aceptación de redirección ICMP segura.

net.ipv4.conf.all.secure_redirects=0
net.ipv4.conf.default.secure_redirects=0

Ahora recarga la configuración de sysctl

# sudo sysctl -p

5.6 Registrar paquetes sospechosos

Un administrador puede diagnosticar el sistema cuando un atacante está enviando paquetes falsificados.

Establezca los parámetros net.ipv4.conf.all.log_martians y net.ipv4.conf.default.log_martians en 1 en /etc/sysctl.conf para evitar esto.

# net.ipv4.conf.all.log_martians=1

# net.ipv4.conf.default.log_martians=1

Ahora recarga la configuración de sysctl

# sudo sysctl -p

5.7 Habilitar ignorar solicitud de transmisión

Para evitar un ataque pitufo en una red, establezca net.ipv4.icmp_echo_ignore_broadcasts en 1, lo que permitirá que el sistema ignore todas las solicitudes de marcas de tiempo y eco ICMP para direcciones de transmisión y multidifusión. Establezca el parámetro net.ipv4.icmp_echo_ignore_broadcasts en 1 en /etc/sysctl.conf

# net.ipv4.icmp_echo_ignore_broadcasts=1

Ahora recarga la configuración de sysctl

# sudo sysctl -p

5.8 Habilitar la protección contra mensajes de error incorrectos

Para evitar que el atacante envíe respuestas que violen RFC-1122 en un intento de insertar archivos de registro del sistema con mensajes de error inútiles. Establezca el parámetro net.ipv4.icmp_ignore_bogus_error_responses en 1 en /etc/sysctl.conf para bloquear respuestas de error falsas.

# net.ipv4.icmp_ignore_bogus_error_responses=1

Ahora recarga la configuración de sysctl

# sudo sysctl -p

5.9 Habilitar la validación de la ruta de origen recomendada por RFC

Al usar el filtrado de ruta inversa, el kernel puede determinar si el paquete es válido; de lo contrario, lo descartará.
Establezca los parámetros net.ipv4.conf.all.rp_filter y net.ipv4.conf.default.rp_filter en 1 en /etc/sysctl.conf

# net.ipv4.conf.all.rp_filter=1
# net.ipv4.conf.default.rp_filter=1

Ahora recarga la configuración de sysctl

# sudo sysctl -p

5.10 Habilitar cookies TCP SYN

Un atacante puede iniciar un ataque de DOS en el servidor inundando paquetes SYN sin inicializar el protocolo de enlace de tres vías. Para evitar esto, establezca el parámetro net.ipv4.tcp_syncookies en 1 en /etc/sysctl.conf

# net.ipv4.tcp_syncookies=1

Ahora recarga la configuración de sysctl

# sudo sysctl -p

5.10 Desactivar anuncio de enrutador IPv6

Permita que el servidor no acepte anuncios de enrutador, ya que esto puede atrapar el tráfico de enrutamiento a sistemas comprometidos.
Establezca el parámetro net.ipv6.conf.all.accept_ra y net.ipv6.conf.default.accept_ra en 0 en /etc/sysctl.conf

# net.ipv6.conf.all.accept_ra=0
# net.ipv6.conf.default.accept_ra=0

Ahora recarga la configuración de sysctl

# sudo sysctl -p

5.12 ​​Deshabilitar la aceptación de redirección de IPv6

Permita que el servidor no acepte anuncios de enrutador, ya que esto puede atrapar el tráfico de enrutamiento a sistemas comprometidos. Se recomienda establecer rutas duras dentro del sistema para proteger el sistema de malas rutas.

Establezca los parámetros net.ipv6.conf.all.accept_redirects y net.ipv6.conf.default.accept_redirects en 0 en /etc/sysctl.conf

# net.ipv6.conf.all.accept_redirects=0
# net.ipv6.conf.default.accept_redirects=0

Ahora recarga la configuración de sysctl

# sudo sysctl -p

5.13 Desactivar IPv6

Para reducir la probabilidad de ataque en el sistema, deshabilite IPv6
Edite el archivo /etc/sysctl.conf y agregue las siguientes líneas:

# net.ipv6.conf.all.disable_ipv6=1
# net.ipv6.conf.default.disable_ipv6=1
# net.ipv6.conf.lo.disable_ipv6=1

Ahora recarga la configuración de sysctl

# sudo sysctl -p

5.14 Instalar contenedores TCP

Utilice contenedores TCP para todos los servicios que admitan contenedores TCP.

Instalar tcpd:

# apt-get install tcpd

5.15 Crear /etc/hosts.allow

Para asegurarse de que solo los sistemas autorizados puedan conectarse al servidor, use /etc/hosts.allow
Edite /etc/hosts.allow y agregue lo siguiente

"ALL: <net>/<mask>, <net>/<mask>, …"
e.g <net> = 192.168.10.100 , <mask> = 255.255.255.0

5.16 Verifique los permisos en /etc/hosts.allow

Es importante proteger /etc/hosts.allow del acceso de escritura no autorizado. Ejecute el siguiente comando para encontrar el permiso de /etc/hosts.allow

# ls -l /etc/hosts.permitir

-rw-r--r-- 1 raíz raíz 2055 15 de febrero 11:30 /etc/hosts.allow

Si el permiso es incorrecto, use el siguiente comando para corregirlo

#chmod 644 /etc/hosts.permitir

5.17 Crear /etc/host negar

Denegar el acceso al servidor usando /etc/hosts.deny. El archivo /etc/hosts.deny está configurado para denegar

todos los hosts que no se mencionan en /etc/hosts.allow. Cree el archivo /etc/hosts.deny

echo "TODO:TODO">> /etc/hosts.deny

5.18 Verificar permisos en /etc/hosts.deny

Es importante proteger /etc/hosts.deny del acceso de escritura no autorizado. Ejecute el siguiente comando para encontrar el permiso de /etc/hosts.deny

# ls -l /etc/hosts.deny
-rw-r--r-- 1 root root 2055 Feb 15 11:30 /etc/hosts.deny

5.19 Asegúrese de que el cortafuegos esté activo

Para limitar la comunicación dentro y fuera de la caja a una dirección IP y un puerto específicos, use un firewall. Ubuntu proporciona un cortafuegos sin complicaciones (UFW) para configurar fácilmente la configuración del cortafuegos.
Instalar UFW

# sudo apt-get install ufw

Activar ufw:

# sudo ufw enable

ejemplo:
Permitir servicios SSH y http.

# sudo ufw allow TCP/80
# sudo ufw allow TCP/22
# sudo ufw reload

6. Registro y auditoría

Mediante el uso de un poderoso marco de auditoría, el sistema puede rastrear muchos tipos de eventos para monitorear y auditar el sistema.
Instale auditd usando el siguiente comando

sudo apt-get install auditd audispd-plugins

Si es necesario, cree enlaces de inicio adecuados para auditd en /etc/rc*.d ejecutando el siguiente comando desde cada uno de los directorios relevantes:

# ln -s /etc/init.d/auditd S37auditd

Los enlaces de inicio deben crearse para los niveles de ejecución

6.1 Configurar el tamaño de almacenamiento del registro de auditoría

El tamaño del archivo de registro de auditoría debe elegirse con cuidado para que no afecte al sistema y no se pierdan datos de auditoría.
Configure el parámetro max_log_file en /etc/audit/auditd.conf

max_log_file = <MB>

6.2 Desactivar sistema en registro de auditoría lleno

El demonio auditd se puede configurar para detener el sistema cuando los registros de auditoría están llenos. Realice lo siguiente para determinar si auditd está configurado para notificar al administrador y detener el sistema cuando los registros de auditoría están llenos.

space_left_action = email
action_mail_acct = root
admin_space_left_action = halt

6.3 Conservar toda la información de auditoría

En contextos de alta seguridad, los beneficios de mantener un largo historial de auditoría superan el costo de almacenar el historial de auditoría. Agregue la siguiente línea al archivo /etc/audit/auditd.conf.

max_log_file_action = keep_logs

6.4 Registrar eventos que modifican la información de fecha y hora

Para monitorear cambios inusuales en la fecha y/o la hora del sistema, lo cual es una indicación de actividad no autorizada en el sistema.
Para sistemas de 64 bits, agregue las siguientes líneas al archivo /etc/audit/audit.rules.

-a always,exit -F arch=b64 -S adjtimex -S settimeofday -k time-change
-a always,exit -F arch=b32 -S adjtimex -S settimeofday -S stime -k time-change
-a always,exit -F arch=b64 -S clock_settime -k time-change
-a always,exit -F arch=b32 -S clock_settime -k time-change -w /etc/localtime -p wa -k time-change

# Ejecute el siguiente comando para reiniciar auditd

# sudo service auditd restart

Para sistemas de 32 bits, agregue las siguientes líneas al archivo /etc/audit/audit.rules.

-a always,exit -F arch=b32 -S adjtimex -S settimeofday -S stime -k time-change
-a always,exit -F arch=b32 -S clock_settime -k time-change -w /etc/localtime -p wa -k time-change

# Ejecute el siguiente comando para reiniciar auditd

# sudo service auditd restart

6.6 Registrar eventos que modifican información de usuarios/grupos

Los cambios inesperados en /etc/group, /etc/passwd, /etc/gshadow, /etc/shadow, /etc/security/opasswd son una clara indicación de que un usuario no autorizado está tratando de ocultar sus actividades o comprometer cuentas adicionales.
Agregue las siguientes líneas al archivo /etc/audit/audit.rules.

-w /etc/group -p wa -k identity
-w /etc/passwd -p wa -k identity
-w /etc/gshadow -p wa -k identity
-w /etc/shadow -p wa -k identity
-w /etc/security/opasswd -p wa -k identity

# Ejecute el siguiente comando para reiniciar auditd

# sudo service auditd restart

6.7 Registrar eventos que modifican el entorno de red del sistema

Para evitar cambios no autorizados en el host y el nombre de dominio de un sistema para romper los parámetros de seguridad que se establecen en función de esos nombres, agregue las siguientes líneas en /etc/audit/audit.rules
Para sistemas de 64 bits, agregue las siguientes líneas al archivo /etc/audit/audit.rules.

-a exit,always -F arch=b64 -S sethostname -S setdomainname -k system-locale
-a exit,always -F arch=b32 -S sethostname -S setdomainname -k system-locale
-w /etc/issue -p wa -k system-locale -w /etc/issue.net -p wa -k system-locale
-w /etc/hosts -p wa -k system-locale -w /etc/network -p wa -k system-locale

# Ejecute el siguiente comando para reiniciar auditd

# sudo service auditd restart

Para sistemas de 32 bits, agregue las siguientes líneas al archivo /etc/audit/audit.rules.

-a exit,always -F arch=b32 -S sethostname -S setdomainname -k system-locale
-w /etc/issue -p wa -k system-locale -w /etc/issue.net -p wa -k system-locale
-w /etc/hosts -p wa -k system-locale -w /etc/network -p wa -k system-locale

# Ejecute el siguiente comando para reiniciar auditd

# sudo service auditd restart

6.8 Registro de Eventos que Modifican los Controles de Acceso Obligatorio del Sistema

Cualquier cambio en los archivos en /etc/selinux es una indicación de que un usuario no autorizado está intentando modificar los controles de acceso y cambiar los contextos de seguridad para obtener acceso al sistema.
Agregue las siguientes líneas a /etc/audit/audit.rules

-w /etc/selinux/ -p wa -k MAC-policy

# Ejecute el siguiente comando para reiniciar auditd

# sudo service auditd restart

6.9 Recopilar eventos de inicio y cierre de sesión

Para monitorear la información relacionada con los ataques de inicio/cierre de sesión/fuerza bruta, agregue las siguientes líneas al archivo /etc/audit/audit.rules.

-w /var/log/faillog -p wa -k logins
-w /var/log/lastlog -p wa -k logins
-w /var/log/tallylog -p wa -k logins

# Ejecute el siguiente comando para reiniciar auditd

# sudo service auditd restart

6.10 Recopilar información de inicio de sesión

Supervise los eventos de inicio de sesión. Un administrador del sistema puede monitorear los inicios de sesión que ocurren en momentos inusuales, lo que podría indicar una actividad no autorizada.
Agregue las siguientes líneas al archivo /etc/audit/audit.rules.

-w /var/run/utmp -p wa -k session
-w /var/log/wtmp -p wa -k session
-w /var/log/btmp -p wa -k session

# Ejecute el siguiente comando para reiniciar auditd

# sudo service auditd restart

6.11 Recopilar eventos de modificación de permisos de control de acceso discrecional

Encuentre cambios en los atributos del archivo, lo que es una indicación de actividad de intrusos.
Para sistemas de 64 bits, agregue las siguientes líneas al archivo /etc/audit/audit.rules.

-a always,exit -F arch=b64 -S chmod -S fchmod -S fchmodat -F auid>=500 -F auid!=4294967295 -k perm_mod
-a always,exit -F arch=b32 -S chmod -S fchmod -S fchmodat -F auid>=500 -F auid!=4294967295 -k perm_mod
-a always,exit -F arch=b64 -S chown -S fchown -S fchownat -S lchown -F auid>=500 -F auid!=4294967295 -k perm_mod
-a always,exit -F arch=b32 -S chown -S fchown -S fchownat -S lchown -F auid>=500 -F auid!=4294967295 -k perm_mod
-a always,exit -F arch=b64 -S setxattr -S lsetxattr -S fsetxattr -S removexattr -S lremovexattr -S fremovexattr -F auid>=500 -F auid!=4294967295 -k perm_mod
-a always,exit -F arch=b32 -S setxattr -S lsetxattr -S fsetxattr -S removexattr -S lremovexattr -S fremovexattr -F auid>=500 -F auid!=4294967295 -k perm_mod

# Ejecute el siguiente comando para reiniciar auditd

# reinicio de la auditoría del servicio sudo

Para sistemas de 32 bits, agregue las siguientes líneas al archivo /etc/audit/audit.rules.

-a always,exit -F arch=b32 -S chmod -S fchmod -S fchmodat -F auid>=500 -F auid!=4294967295 -k perm_mod
-a always,exit -F arch=b32 -S chown -S fchown -S fchownat -S lchown -F auid>=500 -F auid!=4294967295 -k perm_mod
-a always,exit -F arch=b32 -S setxattr -S lsetxattr -S fsetxattr -S removexattr -S lremovexattr -S fremovexattr -F auid>=500 -F auid!=4294967295 -k perm_mod

# Ejecute el siguiente comando para reiniciar auditd

# sudo service auditd restart

6.12 Recopilar intentos fallidos de acceso no autorizado a archivos

Encuentre intentos fallidos de abrir, crear o truncar archivos para obtener acceso no autorizado al sistema.
Para sistemas de 64 bits, agregue las siguientes líneas al archivo /etc/audit/audit.rules.

-a always,exit -F arch=b64 -S creat -S open -S openat -S truncate -S ftruncate -F exit=-EACCES -F auid>=500 -F auid!=4294967295 -k access
-a always,exit -F arch=b32 -S creat -S open -S openat -S truncate -S ftruncate -F exit=-EACCES -F auid>=500 -F auid!=4294967295 -k access
-a always,exit -F arch=b64 -S creat -S open -S openat -S truncate -S ftruncate -F exit=-EPERM -F auid>=500 -F auid!=4294967295 -k access
-a always,exit -F arch=b32 -S creat -S open -S openat -S truncate -S ftruncate -F exit=-EPERM -F auid>=500 -F auid!=4294967295 -k access

# Ejecute el siguiente comando para reiniciar auditd

# sudo service auditd restart

Para sistemas de 32 bits, agregue las siguientes líneas al archivo /etc/audit/audit.rules.

-a always,exit -F arch=b32 -S creat -S open -S openat -S truncate -S ftruncate -F exit=-EACCES -F auid>=500 -F auid!=4294967295 -k access
-a always,exit -F arch=b32 -S creat -S open -S openat -S truncate -S ftruncate -F exit=-EPERM -F auid>=500 -F auid!=4294967295 -k access

# Ejecute el siguiente comando para reiniciar auditd

# sudo service auditd restart

6.13 Recopilar uso de comandos privilegiados

Averigüe si hay algún uso de comandos privilegiados por parte de usuarios no privilegiados para obtener acceso al sistema. Primero ejecute el siguiente comando y luego agregue el resultado del siguiente comando al archivo /etc/audit/audit.rules

# find PART -xdev \( -perm -4000 -o -perm -2000 \) -type f | awk '{print \ "-a always,exit -F path=" $1 " -F perm=x -F auid>=500 -F auid!=4294967295 \ -k privileged" }'

6.14 Recopilar montajes del sistema de archivos fallidos

Para realizar un seguimiento del montaje de los sistemas de archivos por parte de un usuario sin privilegios, agregue las siguientes reglas en el archivo /etc/audit/audit.rules
Para sistemas de 64 bits, agregue las siguientes líneas al archivo /etc/audit/audit.rules.

-a always,exit -F arch=b64 -S mount -F auid>=500 -F auid!=4294967295 -k mounts
-a always,exit -F arch=b32 -S mount -F auid>=500 -F auid!=4294967295 -k mounts

# Ejecute el siguiente comando para reiniciar auditd

# sudo service auditd restart

Para sistemas de 32 bits, agregue las siguientes líneas al archivo /etc/audit/audit.rules.

-a always,exit -F arch=b32 -S mount -F auid>=500 -F auid!=4294967295 -k mounts

# Ejecute el siguiente comando para reiniciar auditd

# sudo service auditd restart

6.15 Recopilar eventos de eliminación de archivos por parte del usuario

Para averiguar si se están eliminando archivos y atributos de archivo asociados con archivos protegidos, agregue las siguientes reglas.
Para sistemas de 64 bits, agregue lo siguiente al archivo /etc/audit/audit.rules.

-a always,exit -F arch=b64 -S unlink -S unlinkat -S rename -S renameat -F auid>=500 -F auid!=4294967295 -k delete
-a always,exit -F arch=b32 -S unlink -S unlinkat -S rename -S renameat -F auid>=500 -F auid!=4294967295 -k delete

Ejecute el siguiente comando para reiniciar auditd

# sudo service auditd restart

Para sistemas de 32 bits, agregue lo siguiente al archivo /etc/audit/audit.rules.

-a always,exit -F arch=b32 -S unlink -S unlinkat -S rename -S renameat -F auid>=500 -F auid!=4294967295 -k delete

# Ejecute el siguiente comando para reiniciar auditd

# sudo service auditd restart

6.16 Recopilar cambios en el ámbito de administración del sistema

Los cambios en el archivo /etc/sudoers pueden indicar que se ha realizado un cambio no autorizado en el alcance de la actividad del administrador del sistema.

Agregue las siguientes líneas al archivo /etc/audit/audit.rules.

-w /etc/sudoers -p wa -k scope

# Ejecute el siguiente comando para reiniciar auditd

# sudo service auditd restart

6.17 Recopilar acciones del administrador del sistema (sudolog)

Para evitar que los usuarios no autorizados utilicen comandos privilegiados, averigüe si se realizan cambios en /var/log/sudo.log.
Agregue las siguientes líneas al archivo /etc/audit/audit.rules.

-w /var/log/sudo.log -p wa -k actions

Reiniciar auditd

# sudo service auditd restart

6.18 Recopilar carga y descarga del módulo del kernel

Para averiguar si algún usuario no autorizado está utilizando insmod, rmmod y modprobe y, por lo tanto, comprometiendo la seguridad del sistema, agregue las siguientes líneas al archivo /etc/audit/audit.rules.

-w /sbin/insmod -p x -k modules
-w /sbin/rmmod -p x -k modules
-w /sbin/modprobe -p x -k modules

Para sistemas de 32 bits, agregue

-a always,exit -F arch=b32 -S init_module -S delete_module -k modules

Para sistemas de 64 bits, agregue

-a always,exit -F arch=b64 -S init_module -S delete_module -k modules

Reiniciar auditd

# sudo service auditd restart

6.19 Hacer que la configuración de auditoría sea inmutable

Para evitar que los usuarios no autorizados realicen cambios en el sistema de auditoría para ocultar su actividad maliciosa y luego revertir las reglas de auditoría, agregue las siguientes líneas al

/etc/audit/audit.rules archivo.

-e 2

Esta debe ser la última línea en el archivo /etc/audit/audit.rules
Reiniciar auditd

# sudo service auditd restart

7. Acceso al Sistema, Autenticación y Autorización

7.1 Establecer usuario/propietario de grupo y permiso en cron

Ejecute los siguientes comandos para restringir el acceso de lectura/escritura y búsqueda a usuarios y grupos raíz, evitando que los usuarios normales accedan a estos archivos/directorios.

# chown root:root /etc/crontab
# chmod og-rwx /etc/crontab
# chown root:root /etc/cron.hourly
# chmod og-rwx /etc/cron.hourly
# chown root:root /etc/cron.daily
# chmod og-rwx /etc/cron.daily
# chown root:root /etc/cron.weekly
# chmod og-rwx /etc/cron.weekly
# chown root:root /etc/cron.monthly
# chmod og-rwx /etc/cron.monthly
# chown root:root /etc/cron.d
# chmod og-rwx /etc/cron.d

7.2 Configurar PAM

PAM (Pluggable Authentication Modules) es un servicio que implementa módulos de autenticación modulares en sistemas UNIX. PAM debe configurarse cuidadosamente para asegurar la autenticación del sistema.

7.2.1 Establecer parámetros de requisitos de creación de contraseña mediante pam_cracklib

El módulo pam_cracklib comprueba la seguridad de las contraseñas. Realiza verificaciones, como asegurarse de que una contraseña no sea una palabra del diccionario, tenga una cierta longitud, contenga una combinación de caracteres (por ejemplo, alfabéticos, numéricos, otros) y más.
Configure los parámetros pam_cracklib.so de la siguiente manera en /etc/pam.d/common-password

password required pam_cracklib.so retry=3 minlen=14 dcredit=-1 ucredit=-1 ocredit=-1 lcredit=-1

7.2.2 Establecer bloqueo para intentos fallidos de contraseña

Bloqueo de usuarios después de intentos de inicio de sesión consecutivos fallidos para evitar ataques de contraseña de fuerza bruta contra sus sistemas.
Edite el archivo /etc/pam.d/login y agregue la línea de autenticación a continuación:

auth required pam_tally2.so onerr=fail audit silent deny=5 unlock_time=900

7.2.3 Limitar la reutilización de contraseñas

Obligar a los usuarios a no reutilizar sus últimas 5 contraseñas hace que sea menos probable que un atacante pueda adivinar la contraseña. Establezca el parámetro pam_unix.so Remember en 5 en /etc/pam.d/common-password

password sufficient pam_unix.so remember=5

8. Configurar SSH

Edite el archivo /etc/ssh/sshd_config para establecer el siguiente parámetro de la siguiente manera para que sea seguro.

Protocol 2
LogLevel INFO
X11Forwarding no
MaxAuthTries 4
IgnoreRhosts yes
HostbasedAuthentication no
PermitRootLogin no
PermitEmptyPasswords no
PermitUserEnvironment no
Ciphers aes128-ctr,aes192-ctr,aes256-ctr
ClientAliveInterval 300
ClientAliveCountMax 0
AllowUsers <userlist>
AllowGroups <grouplist>
DenyUsers <userlist>
DenyGroups <grouplist>
Banner <your bannerfile>

9. Restrict Access to the su Command

Use sudo instead of su as it provides a better logging out and audit mechanism. The another motivation for using sudo is to restrict the uses of su. Uncomment the pam_wheel.so line in /etc/pam.d/su, so that su command will be available to users in the wheel group to execute su.

# grep pam_wheel.so /etc/pam.d/su
auth required pam_wheel.so use_uid
# grep wheel /etc/group
wheel:x:10:root, <user list>.....

10. User Accounts and Environment

10.1 Set Password Expiration Days

Reduce the maximum age of a password.

Set the PASS_MAX_DAYS parameter to 120 in /etc/login.defs

PASS_MAX_DAYS 60

Modify active user parameters to match:

# chage --maxdays 120 <user>

10.2 Set Password Change Minimum Number of Days

To prevent the user from changing their password until a minimum no of days have passed since the user changed the password. Set the PASS_MIN_DAYS parameter to 7 in /etc/login.defs

PASS_MIN_DAYS 7

Modify active user parameters to match:
# chage --mindays 7

10.3 Set Password Expiring Warning Days

The administrator can notify the users about the expiry of their password using ASS_WARN_AGE parameter in /etc/login.defs.

Set the PASS_WARN_AGE parameter to 7 in /etc/login.defs

PASS_WARN_AGE  7

Modify active user parameters to match

# chage --warndays 7 <user>

11. System Accounts

11.1 Disable System Accounts

To prevent the system account from being used to get an interactive shell, append “/usr/sbin/nologin” at the end of each system accounts in /etc/passwd

11.2 Set Default

umask for Users
Set umask of 022 will make files readable by every user on the system.
Edit the /etc/login.defs file and add the following line

UMASK 022

11.3 Lock Inactive User Accounts

To make the system more secure, execute the following command to lock the inactive accounts.

# useradd -D -f 35

11.4 Remove OS Information from Login Warning Banners

To prevent the OS and patch level information from login banners, edit the /etc/motd, /etc/issue and /etc/issue.net files and remove any lines containing \m, \r, \s or \v.

12. Verify System File Permissions

12.1 Verify Permissions on /etc/passwd, /etc/shadow, /etc/group

These file needs to be protected from unauthorized changes by non-privileged users as well as needs to be readable as this information is used by non-privileged programs.
Execute the following commands to correct the permissions for these files

# chmod 644 /etc/passwd
# chmod o-rwx,g-rw /etc/shadow
# chmod 644 /etc/group

12.2 Verify User/Group Ownership on /etc/passwd, /etc/shadow, /etc/group

These file needs to be protected from unauthorized changes by non-privileged users as well as needs to be readable as this information is used by non-privileged programs.
Execute the following commands to correct the ownership for these files

# chown root:root /etc/passwd
# chown root:shadow /etc/shadow
# chown root:root /etc/group

13. Check for rootkits

There are few tools available through which you can check for rootkit in the server. The two popular rootkit hunters are RKHunte and CHKRootKit, use anyone of them periodically to check for rootkit in the system

Install chkrootkit

# sudo apt-get install chkrootkit

To run chkrootkit, execute the following command in the terminal

# chkrootkit

14. PSAD IDS/IPS

To detect the intrusion in your network, you can use toos like snort or cipherdyne's psad. The later has the capability of intrusion detection and log analysis with iptables. PSAD is a lightweight system daemons that analyze the iptables log message to detect scans and other spurious traffic.

Install PSAD

#sudo apt-get install psad

Now configure psad to detect scans, Intrusion Detection and Intrusion Prevention

15. Prevent IP Spoofing

Add following lines in /etc/host.conf to prevent IP spoofing

order bind,hosts
nospoof on

16. Enabling automatic security updates

It is highly recommended to enable automatic security updates and patches to keep the system secure. You will be notified every time you logged in to the system using SSH about security updates and patches. In Ubuntu Desktop, to enable automatic security updates, click on "System" select "Administration" and then "Software Sources" menu. Now select the "Internet Updates" and enable "Check for updates automatically" specifying daily". If Ubuntu issues a new security release then you will be notified via the "Update Manager" icon in the system tray. You can use unattended-upgrades which can handle automatic installation of security upgrades in Ubuntu system. Running sudo unattended-upgrade will install all the security package available for upgrade.

Install this package if it isn't already installed using

# sudo apt-get install unattended-upgrades

To enable it type

# sudo dpkg-reconfigure unattended-upgrades

and select "yes".

17. Harden PHP

Edit the php.ini file /etc/php5/apache2/php.ini and add uncomment/add following lines.

safe_mode = On

safe_mode_gid = On

disable_functions = hp_uname, getmyuid, getmypid, passthru, leak, listen, diskfreespace, tmpfile, link, ignore_user_abord, shell_exec, dl, set_time_limit, exec,

system, highlight_file, source, show_source, fpaththru, virtual, posix_ctermid, posix_getcwd, posix_getegid, posix_geteuid, posix_getgid, posix_getgrgid,

posix_getgrnam, posix_getgroups, posix_getlogin, posix_getpgid, posix_getpgrp, posix_getpid, posix, _getppid, posix_getpwnam, posix_getpwuid, posix_getrlimit,

posix_getsid, posix_getuid, posix_isatty, posix_kill, posix_mkfifo, posix_setegid, posix_seteuid, posix_setgid, posix_setpgid, posix_setsid, posix_setuid, posix_times,

posix_ttyname, posix_uname, proc_open, proc_close, proc_get_status, proc_nice, proc_terminate, phpinfo

register_globals = Off

expose_php = Off

display_errors = Off

track_errors = Off

html_errors = Off

magic_quotes_gpc = Off

mail.add_x_header = Off

session.name = NEWSESSID

allow_url_fopen = Off

allow_url_include = Off

session.save_path = A secured location in the server

18. Harden Apache

Edit Apache2 configuration security file /etc/apache2/conf-available/security.conf and add the following-

ServerTokens Prod

ServerSignature Off

TraceEnable Off

Header unset ETag

FileETag None

The web application firewall ModSecurity is effective way to protect web server so that it's much less vulnerable to probes/scans and attacks. First install mod_security using following command.

# sudo apt-get install libapache2-mod-security2

# mv /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf

Edit /etc/modsecurity/modsecurity.conf

Activate the rules by editing the SecRuleEngine option and set to On and modify your server signature

SecRuleEngine On

SecServerSignature FreeOSHTTP

Now edit the following to increase the request limit to 16 MB

SecRequestBodyLimit 16384000

SecRequestBodyInMemoryLimit 16384000

Download and install the latest OWASP ModSecurity Core Rule Set from their website.

# wget https://github.com/SpiderLabs/owasp-modsecurity-crs/archive/master.zip

# unzip master.zip

# cp -r owasp-modsecurity-crs-master/* /etc/modsecurity/

# mv /etc/modsecurity/modsecurity_crs_10_setup.conf.example /etc/modsecurity/modsecurity_crs_10_setup.conf

# ls /etc/modsecurity/base_rules | xargs -I {} ln -s /etc/modsecurity/base_rules/{} /etc/modsecurity/activated_rules/{}

# ls /etc/modsecurity/optional_rules | xargs -I {} ln -s /etc/modsecurity/optional_rules/{} /etc/modsecurity/activated_rules/{}

Now add the following line in /etc/apache2/mods-available/mod-security.conf

Include "/etc/modsecurity/activated_rules/*.conf"

Check if the modules has been loaded-

# sudo a2enmod headers

# sudo a2enmod mod-security

Now restart Apache2

# service apache2 restart

Apart from ModSecurity, install modevasive to protect your server from DDOS (Denial of Service) attacks

Once you've hardened the system, run some vulnerability scans and penetration tests against it in order to check that it's actually rock solid as you're now expecting it. However attack on your server can happen, it is up-to you to scan the log files regularly to find out any breaches have been occurred. You can use log analyzer tool like ELK stack to drill through servers log files quickly. If you find evidences of breaches then quickly disconnect your server from the internet and take remedial measures.


Ubuntu
  1. ¿Cómo maneja Linux múltiples separadores de rutas consecutivas (/home////username///file)?

  2. Debian – ¿Mover /var, /home a una partición separada?

  3. Ubuntu 14.04 "¿no obtuvo un Uri de reproducción en el archivo de entrada:///*"?

  4. ¿Autenticación de proxy con Terminal Ubuntu 14.04?

  5. ¿Montar /tmp y /home en un disco duro separado?

Guía de Ubuntu 20.04

Guía de Ubuntu 22.04

Guía de instalación de escritorio de Ubuntu 15.10

¿Cómo liberar espacio en la partición /boot en Ubuntu Linux?

Instalar FOG Server en Ubuntu Server - Guía definitiva

Diferencia y uso correcto de /tmp y /var/tmp