Búsqueda de sitios web

23 consejos de seguridad para reforzar el servidor CentOS - Parte 2


Continuando con el tutorial anterior sobre Cómo proteger y reforzar el servidor CentOS, en este artículo analizaremos otros consejos de seguridad que se presentarán en la siguiente lista de verificación.

Requisitos

  1. 20 consejos de seguridad para reforzar el servidor CentOS - Parte 1

21. Deshabilite los comandos SUID y SGID inútiles

Si los bits setuid y setgid están configurados en programas binarios, estos comandos pueden ejecutar tareas con otros derechos de usuario o grupo, como privilegios de root que puede exponer graves problemas de seguridad.

A menudo, los ataques de desbordamiento del búfer pueden aprovechar dichos ejecutables binarios para ejecutar código no autorizado con los derechos de un usuario avanzado root.

find /  -path /proc -prune -o -type f \( -perm -4000 -o -perm -2000 \) -exec ls -l {} \;

Para desarmar el bit setuid ejecute el siguiente comando:

chmod u-s /path/to/binary_file

Para desactivar el bit setgid, ejecute el siguiente comando:

chmod g-s /path/to/binary_file

22. Verifique si hay archivos y directorios sin propietario

Los archivos o directorios que no pertenecen a una cuenta válida deben eliminarse o asignarse permisos de un usuario y grupo.

Emita el siguiente comando de búsqueda para enumerar archivos o directorios sin usuario ni grupo.

find / -nouser -o -nogroup -exec ls -l {} \;

23. Lista de archivos que se pueden escribir en todo el mundo

Mantener un archivo grabable en todo el mundo en el sistema puede ser peligroso debido al hecho de que cualquiera puede modificarlo. Ejecute el siguiente comando para mostrar archivos que se pueden escribir en palabras, excepto los enlaces simbólicos, que siempre se pueden escribir en todo el mundo.

find / -path /proc -prune -o -perm -2 ! -type l –ls

24. Cree contraseñas seguras

Cree una contraseña de un mínimo de ocho caracteres. La contraseña debe contener dígitos, caracteres especiales y letras mayúsculas. Utilice pwmake para generar una contraseña de 128 bits a partir del archivo /dev/urandom.

pwmake 128

25. Aplique una política de contraseñas seguras

Fuerce al sistema a utilizar contraseñas seguras agregando la siguiente línea en el archivo /etc/pam.d/passwd.

password required pam_pwquality.so retry=3

Agregando la línea anterior, la contraseña ingresada no puede contener más de 3 caracteres en una secuencia monótona, como abcd, y más de 3 caracteres consecutivos idénticos, como 1111.

Para obligar a los usuarios a utilizar una contraseña con una longitud mínima de 8 caracteres, incluidas todas las clases de caracteres, verifique la seguridad de secuencias de caracteres y caracteres consecutivos, agregue las siguientes líneas al archivo /etc/security /pwquality.conf.

minlen = 8
minclass = 4
maxsequence = 3
maxrepeat = 3

26. Utilice la antigüedad de la contraseña

El comando chage se puede utilizar para la caducidad de la contraseña del usuario. Para configurar la contraseña de un usuario para que caduque en 45 días, utilice el siguiente comando:

chage -M 45 username

Para deshabilitar el tiempo de vencimiento de la contraseña use el comando:

chage -M -1 username

Fuerce la caducidad inmediata de la contraseña (el usuario debe cambiar la contraseña en el próximo inicio de sesión) ejecutando el siguiente comando:

chage -d 0 username

27. Bloquear cuentas

Las cuentas de usuario se pueden bloquear ejecutando el comando passwd o usermod:

passwd -l username
usermod -L username

Para desbloquear cuentas, utilice la opción -u para el comando passwd y la opción -U para usermod.

28. Impedir el acceso al Shell de cuentas

Para evitar que una cuenta del sistema (cuenta normal o cuenta de servicio) obtenga acceso a un shell bash, cambie el shell raíz a /usr/sbin/nologin o /bin/false en el archivo /etc/passwd emitiendo el siguiente comando:

usermod -s /bin/false username

Para cambiar el shell al crear un nuevo usuario, ejecute el siguiente comando:

useradd -s /usr/sbin/nologin username

29. Bloquear la consola de usuario virtual con vlock

vlock es un programa utilizado para bloquear una sesión múltiple en la consola Linux. Instale el programa y comience a bloquear su sesión de terminal ejecutando los siguientes comandos:

yum install vlock
vlock

30. Utilice un sistema centralizado para administrar cuentas y autenticación

El uso de un sistema de autenticación centralizado puede simplificar enormemente la gestión y el control de cuentas. Los servicios que pueden ofrecer este tipo de gestión de cuentas son IPA Server, LDAP, Kerberos, Microsoft Active Directory, Nis, Samba ADS o Winbind.

Algunos de estos servicios son, por defecto, altamente seguros con protocolos criptográficos y criptografía de clave simétrica, como Kerberos.

31. Forzar el montaje de solo lectura de medios USB

Con la utilidad blockdev puede forzar que todos los medios extraíbles se monten como de solo lectura. Por ejemplo, cree un nuevo archivo de configuración udev llamado 80-readonly-usb.rules en el directorio /etc/udev/rules.d/. con el siguiente contenido:

SUBSYSTEM=="block",ATTRS{removable}=="1",RUN{program}="/sbin/blockdev --setro %N"

Luego, aplique la regla con el siguiente comando:

udevadm control -reload

32. Deshabilitar el acceso raíz a través de TTY

Para evitar que la cuenta raíz inicie sesión en el sistema a través de todos los dispositivos de consola (TTY), borre el contenido del archivo seguridad escribiendo el siguiente símbolo del terminal de comando como raíz.

cp /etc/securetty /etc/securetty.bak
cat /dev/null > /etc/securetty

Recuerde que esta regla no se aplica a las sesiones de inicio de sesión SSH
Para evitar el inicio de sesión como root a través de SSH, edite el archivo /etc/ssh/sshd_config y agregue la siguiente línea:

PermitRootLogin no

33. Utilice las ACL POSIX para ampliar los permisos del sistema

Las listas de control de acceso pueden definir derechos de acceso para más de un solo usuario o grupo y pueden especificar derechos para programas, procesos, archivos y directorios. Si configura ACL en un directorio, sus descendientes heredarán los mismos derechos automáticamente.

Por ejemplo,

setfacl -m u:user:rw file
getfacl file

34. Configurar SELinux en modo Enforce

La mejora SELinux del kernel de Linux implementa la política de control de acceso obligatorio (MAC), lo que permite a los usuarios definir una política de seguridad que proporciona permisos granulares para todos los usuarios, programas, procesos, archivos y dispositivos.

Las decisiones de control de acceso del kernel se basan en todo el contexto relevante para la seguridad y no en la identidad del usuario autenticado.

Para obtener el estado de Selinux y aplicar la política, ejecute los siguientes comandos:

getenforce
setenforce 1
sestatus

35. Instale utilidades adicionales de SELinux

Instale el paquete policycoreutils-python que proporciona utilidades Python adicionales para operar SELinux: audit2allow, audit2why, chcat y semanage.

Para mostrar todos los valores booleanos junto con una breve descripción, utilice el siguiente comando:

semanage boolean -l

Por ejemplo, para mostrar y establecer el valor de httpd_enable_ftp_server, ejecute el siguiente comando:

getsebool httpd_enable_ftp_server

Para hacer que el valor de un booleano persista durante los reinicios, especifique la opción -P en setsebool, como se ilustra en el siguiente ejemplo:

setsebool -P httpd_enable_ftp_server on

36. Utilice el servidor de registro centralizado

Configure el demonio rsyslog para enviar mensajes de registro de utilidades confidenciales a un servidor de registro centralizado. Además, supervise los archivos de registro con la ayuda de la utilidad logwatch.

El envío de mensajes de registro a un servidor remoto garantiza que una vez que el sistema se haya visto comprometido, los usuarios malintencionados no puedan ocultar completamente su actividad y siempre dejen rastros en los archivos de registro remotos.

37. Habilitar la contabilidad de procesos

Habilite la contabilidad de procesos instalando la utilidad psacct y use el comando lastcomm para mostrar información sobre los comandos ejecutados previamente tal como se registran en el archivo de contabilidad del sistema y sa para resumir la información sobre los comandos ejecutados previamente tal como se registran en el archivo contable del sistema.

38. Endurecimiento de /etc/sysctl.conf

Utilice las siguientes reglas de parámetros del kernel para proteger el sistema:

Deshabilitar el enrutamiento de origen

net.ipv4.conf.all.accept_source_route=0

Deshabilitar el reenvío de IPv4

ipv4.conf.all.forwarding=0

Deshabilitar IPv6

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

Deshabilite la aceptación y el envío de paquetes redirigidos ICMP a menos que sea necesario específicamente.

net.ipv4.conf.all.accept_redirects=0
net.ipv4.conf.all.secure_redirects=0
net.ipv4.conf.all.send_redirects=0

Deshabilitar el reenvío de ruta inversa

net.ipv4.conf.all.rp_filter=2

Ignorar todas las solicitudes de eco ICMP (establecer en 1 para habilitar)

net.ipv4.icmp_echo_ignore_all = 0

39. Utilice servicios VPN para acceder a sus instalaciones a través de redes públicas desprotegidas

Utilice siempre servicios VPN para que los operadores accedan de forma remota a las instalaciones de la LAN a través de Internet. Este tipo de servicios se pueden configurar utilizando una solución gratuita de código abierto, como OpenVPN, o utilizando una solución propietaria, como Cisco VPN (instale la utilidad de línea de comandos vpnc proporcionada por Epel Repositories).

40. Realizar un análisis del sistema externo

Evalúe la seguridad de su sistema en busca de vulnerabilidades escaneando el sistema desde puntos remotos a través de su LAN utilizando herramientas específicas como:

  1. Nmap – escáner de red 29 Ejemplos del comando Nmap
  2. Nessus – escáner de seguridad
  3. OpenVAS: se utiliza para buscar vulnerabilidades y para una gestión integral de vulnerabilidades.
  4. Nikto: un excelente escáner de secuencias de comandos de interfaz de puerta de enlace común (CGI) que analiza vulnerabilidades web en Linux

41. Proteger el sistema internamente

Utilice protección interna del sistema contra virus, rootkits, malware y, como buena práctica, instale sistemas de detección de intrusos que puedan detectar actividades no autorizadas (ataques DDOS, escaneos de puertos), como por ejemplo:

  1. AIDE – Entorno avanzado de detección de intrusiones – http://aide.sourceforge.net/
  2. ClamAV – Escáner antivirus https://www.clamav.net
  3. Rkhunter: escáner de rootkits
  4. Lynis: herramienta de análisis y auditoría de seguridad para Linux
  5. Tripwire – Seguridad e integridad de datos http://www.tripwire.com/
  6. Fail2Ban – Prevención de intrusiones en la red
  7. OSSEC – (HIDS) Sistema de detección de intrusiones basado en host http://ossec.github.io/
  8. Mod_Security: protege ataques de fuerza bruta o DDoS

42. Modificar las variables de entorno del usuario

Agregue el formato fecha y hora para almacenar la ejecución de los comandos emitiendo el siguiente comando:

echo 'HISTTIMEFORMAT="%d/%m/%y  %T  "' >> .bashrc'

Forzar el registro instantáneo de HISTFILE cada vez que se escribe un comando (en lugar de cerrar sesión):

echo ‘PROMPT_COMMAND="history -a"’ >> .bashrc

Limite el tiempo de espera de la sesión de inicio de sesión. Derriba automáticamente el caparazón cuando no se realiza ninguna actividad durante un período de tiempo de inactividad. Muy útil para desconectar automáticamente sesiones SSH.

echo ‘TMOUT=120’ >> .bashrc

Aplica todas las reglas ejecutando:

source .bashrc

43. Copia de seguridad de datos

Utilice utilidades de respaldo, como tar, cat, rsync, scp, instantáneas LVM, etc. para almacenar una copia de su sistema, preferiblemente fuera del sitio, en caso de una falla del sistema.

Si el sistema se ve comprometido, puede realizar la restauración de datos desde copias de seguridad anteriores.

Finalmente, no olvide que no importa cuántas medidas de seguridad y contramedidas tome para mantener su sistema seguro, nunca estará 100% completamente seguro mientras su máquina esté enchufada y encendida.