Entradas Mensuales

Síguenos en:

Canal Oficial Telegram de elhacker.NET Grupo Facebook elhacker.NET Twitter elhacker.NET Canal Youtube elhacker.NET Comunidad Steam: Grupo elhacker.NET Mastodon

Entradas populares

PostHeaderIcon Consejos de Seguridad para servidores Linux


Asegurar un servidor Linux es importante para proteger sus datos, propiedad intelectual y tiempo de manos de ciberdelincuentes. El administrador del sistema es responsable de la seguridad de la caja de Linux. En esta primera parte de una serie de seguridad de servidor Linux, proporcionaremos consejos de refuerzo del servidor Linux para la instalación predeterminada del sistema Linux.

 

 





Lista de comprobación y consejos de seguridad para el refuerzo del servidor Linux

Las siguientes instrucciones asumen que está utilizando CentOS / RHEL o una distribución de Linux basada en Ubuntu / Debian

Cifrar las comunicaciones de datos para el servidor Linux


Todos los datos transmitidos a través de una red están abiertos a monitoreo. Cifre los datos transmitidos siempre que sea posible con contraseña o utilizando claves / certificados.

  •  Utiliza scp, ssh, rsync o sftp para la transferencia de archivos. También puede montar el sistema de archivos del servidor remoto o su propio directorio de inicio utilizando sshfs especiales y herramientas de fusión.
  •  GnuPG permite cifrar y firmar sus datos y comunicaciones, cuenta con un sistema de gestión de claves versátil, así como módulos de acceso para todo tipo de directorios de claves públicas.


Evitar el uso de servicios FTP, Telnet y Rlogin / Rsh en Linux


En la mayoría de las configuraciones de red, cualquier persona de la misma red puede capturar nombres de usuario, contraseñas, comandos FTP / telnet / rsh y archivos transferidos mediante un rastreador de paquetes. La solución común a este problema es utilizar OpenSSH, SFTP o FTPS (FTP sobre SSL), que agrega cifrado SSL o TLS a FTP. Escriba el siguiente comando yum para eliminar NIS, rsh y otros servicios desactualizados:


# yum erase xinetd ypserv tftp-server telnet-server rsh-server


Si está utilizando un servidor basado en Debian / Ubuntu Linux, pruebe el comando apt-get / apt para eliminar los servicios inseguros:


$ sudo apt-get --purge remove xinetd nis yp-tools tftpd atftpd tftpd-hpa telnetd rsh-server rsh-redone-server


Minimizar el software instalado en Linux


¿Realmente necesitas todo tipo de servicios web instalados? Evite instalar software innecesario para evitar vulnerabilidades en el software. Utilice el administrador de paquetes RPM como yum o apt-get y / o dpkg para revisar todo el conjunto de paquetes de software instalados en un sistema. Elimina todos los paquetes no deseados.


# yum list installed
# yum list packageName
# yum remove packageName

O


# dpkg --list
# dpkg --info packageName
# apt-get remove packageName


Un servicio de red por sistema o instancia de máquina virtual


Ejecutar diferentes servicios de red en servidores separados o instancias de VM. Esto limita la cantidad de otros servicios que pueden verse comprometidos. Por ejemplo, si un atacante puede explotar con éxito un software como Apache flow, obtendrá acceso a todo el servidor, incluidos otros servicios como MySQL / MariaDB / PGSql, servidor de correo electrónico, etc. Vea cómo instalar el software de virtualización para obtener más información:


Mantener actualizado el kernel y el software de Linux


La aplicación de parches de seguridad es una parte importante del mantenimiento del servidor Linux. Linux proporciona todas las herramientas necesarias para mantener su sistema actualizado y también permite actualizaciones sencillas entre versiones. Todas las actualizaciones de seguridad deben revisarse y aplicarse lo antes posible. Nuevamente, use el administrador de paquetes RPM como yum y / o apt-get y / o dpkg para aplicar todas las actualizaciones de seguridad.


# yum update

o bien:
 

# apt-get update && apt-get upgrade

Puedes configurar Red hat / CentOS / Fedora Linux para enviar una notificación de actualización del paquete yum por correo electrónico. Otra opción es aplicar todas las actualizaciones de seguridad a través de un trabajo cron. En Debian / Ubuntu Linux puede usar apticron para enviar notificaciones de seguridad. También es posible configurar actualizaciones desatendidas para su servidor Debian / Ubuntu Linux usando el comando apt-get / comando apt:

$ sudo apt-get install unattended-upgrades apt-listchanges bsd-mailx

Utilizar las extensiones de seguridad de Linux

Linux viene con varios parches de seguridad que pueden usarse para protegerse contra programas mal configurados o comprometidos. Si es posible, use SELinux y otras extensiones de seguridad de Linux para hacer cumplir las limitaciones en la red y otros programas. Por ejemplo, SELinux proporciona una variedad de políticas de seguridad para el kernel de Linux.

SELinux


Recomiendo encarecidamente utilizar SELinux, que proporciona un control de acceso obligatorio (MAC) flexible. Según el Control de acceso discrecional (DAC) estándar de Linux, una aplicación o proceso que se ejecuta como un usuario (UID o SUID) tiene los permisos del usuario sobre objetos como archivos, sockets y otros procesos. La ejecución de un kernel MAC protege el sistema de aplicaciones maliciosas o defectuosas que pueden destruir el sistema

 Consulta la documentación oficial de Redhat que explica la configuración de SELinux.

Cuentas de usuario de Linux y política de contraseñas seguras


Utilice los comandos useradd / usermod para crear y mantener cuentas de usuario. Asegúrese de tener una política de contraseñas buena y sólida. Por ejemplo, una buena contraseña incluye al menos 8 caracteres y una combinación de alfabetos, números, caracteres especiales, alfabetos superiores e inferiores, etc. Lo más importante es elegir una contraseña que pueda recordar. Utilice herramientas como "John the ripper" para averiguar las contraseñas de usuarios débiles en su servidor. Configure pam_cracklib.so para hacer cumplir la política de contraseñas.


Configurar caducidad de la contraseña para usuarios de Linux


El comando chage cambia el número de días entre los cambios de contraseña y la fecha del último cambio de contraseña. El sistema utiliza esta información para determinar cuándo un usuario debe cambiar su contraseña. El archivo /etc/login.defs define la configuración específica del sitio para el paquete de contraseñas ocultas, incluida la configuración de caducidad de contraseñas. Para deshabilitar la caducidad de la contraseña, ingrese:
# chage -M 99999 nombre de usuario

Para obtener información sobre la caducidad de la contraseña, ingrese:


# chage -l nombre de usuario



Finalmente, también puede editar el archivo /etc/shadow en los siguientes campos:

{userName}: {contraseña}: {lastpasswdchanged}: {Mínimo_días}: {Máximo_días}: {Advertencia}: {Inactivo}: {Caducidad}:

Donde,

  •  Mínimo_días: El número mínimo de días requeridos entre cambios de contraseña, es decir, el número de días que quedan antes de que el usuario pueda cambiar su contraseña.
  • Maximum_days: El número máximo de días que la contraseña es válida (después de que el usuario se vea obligado a cambiar su contraseña).
  • Advertir: El número de días antes de que expire la contraseña y se advierte al usuario que debe cambiar su contraseña.
  •  Caducidad: días desde el 1 de enero de 1970 en que la cuenta está deshabilitada, es decir, una fecha absoluta que especifica cuándo ya no se puede usar el inicio de sesión.


Recomiendo el comando chage en lugar de editar el archivo / etc / shadow a mano:


# chage -M 60 -m 7 -W 7 nombre de usuario



Recomendar lecturas:

    Linux: obligar a los usuarios a cambiar sus contraseñas en el primer inicio de sesión
    Linux activa / desactiva la caducidad / caducidad de la contraseña
    Bloquear la contraseña de usuario
    Busque todas las cuentas sin contraseña y bloquéelas
    Utilice grupos de Linux para mejorar la seguridad


Restricción del uso de contraseñas anteriores en Linux


Puede evitar que todos los usuarios utilicen o reutilicen las mismas contraseñas antiguas en Linux. El parámetro recordar del módulo pam_unix se puede utilizar para configurar el número de contraseñas anteriores que no se pueden reutilizar.

Bloquear cuentas de usuario después de errores de inicio de sesión


En Linux, puede usar el comando faillog para mostrar los registros de fallas o para establecer límites de fallas de inicio de sesión. faillog formatea el contenido del registro de fallas desde / var / log / faillog database / log file. También se puede utilizar para mantener contadores y límites de fallas. Para ver los intentos fallidos de inicio de sesión, ingrese:
 

faillog


Para desbloquear una cuenta después de fallas de inicio de sesión, ejecute:


faillog -r -u nombre de usuario


Tenga en cuenta que puede usar el comando passwd para bloquear y desbloquear cuentas:


# bloquear cuenta de Linux
passwd -l nombre de usuario


# desbloquear cuenta de Linux
passwd -u nombre de usuario

 

Verificar cuentas con contraseñas vacía


Escribe el siguiente comando


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



Bloquear todas las cuentas sin contraseña:


# passwd -l nombredelacuenta


Asegúrese de que ninguna cuenta que no sea root tenga el UID configurado en 0


Solo la cuenta raíz tiene UID 0 con permisos completos para acceder al sistema. Escriba el siguiente comando para mostrar todas las cuentas con UID establecido en 0:

# awk -F: '($3 == "0") {print}' /etc/passwd



Solo debería ver una línea de la siguiente manera:

root:x:0:0:root:/root:/bin/bash


Si ve otras líneas, elimínelas o asegúrese de que haya autorizado otras cuentas para usar el UID 

Deshabilitar el inicio de sesión de root


Nunca inicie sesión como usuario root. Debe usar sudo para ejecutar comandos de nivel raíz cuando sea necesario. sudo mejora enormemente la seguridad del sistema sin compartir la contraseña de root con otros usuarios y administradores. sudo también proporciona funciones sencillas de seguimiento y auditoría. 

Seguridad física del servidor


Debes proteger el acceso a la consola física de los servidores Linux. Configure el BIOS y desactive el arranque desde dispositivos externos como DVD / CD / lápiz USB. Configure la contraseña del cargador de arranque del BIOS y de grub para proteger esta configuración. Todas las cajas de producción deben estar bloqueadas en IDC (centros de datos de Internet) y todas las personas deben pasar algún tipo de control de seguridad antes de acceder a su servidor. Ver también:


Deshabilita los servicios de Linux no deseados


Deshabilitar todos los servicios y demonios innecesarios (servicios que se ejecutan en segundo plano). Debe eliminar todos los servicios no deseados desde el inicio del sistema. Escriba el siguiente comando para enumerar todos los servicios que se inician en el momento del arranque en el nivel de ejecución n. ° 3:


# chkconfig --list | grep '3:on'



Para deshabilitar el servicio, ingrese:

# service serviceName stop
# chkconfig serviceName off


Una nota sobre la distribución y los servicios de Linux basados ​​en systemd

Las distribuciones modernas de Linux con systemd usan el comando systemctl para el mismo propósito.


Imprimir una lista de servicios que enumera qué niveles de ejecución están configurados para activar o desactivar


# systemctl list-unit-files --type=service
# systemctl list-dependencies graphical.target


Apagar el servicio en el momento del arranque

# systemctl deshabilitar el servicio
# systemctl deshabilita httpd.service


Iniciar / detener / reiniciar el servicio

# systemctl disable service
# systemctl disable httpd.service


Obtener el estado del servicio

# systemctl status service
# systemctl status httpd.service


Ver mensajes de registro

# journalctl
# journalctl -u network.service
# journalctl -u ssh.service
# journalctl -f
# journalctl -k

Buscar puertos de red a la escucha


Utilice el siguiente comando para enumerar todos los puertos abiertos y programas asociados:


netstat -tulpn


O use el comando ss de la siguiente manera:


$ ss -tulpn


O


nmap -sT -O localhost
nmap -sT -O servidor.ejemplo.com

 Eliminar sistemas X Window (X11)


No se requieren sistemas X Window en el servidor. No hay ninguna razón para ejecutar X11 en su correo dedicado basado en Linux y servidor web Apache / Nginx. Puede desactivar y eliminar X Windows para mejorar la seguridad y el rendimiento del servidor. Edite / etc / inittab y establezca el nivel de ejecución en 3. Finalmente, elimine el sistema X Windows, ingresa:


# yum groupremove "X Window System"



En el servidor CentOS 7 / RHEL 7, use los siguientes comandos:


# yum group remove "GNOME Desktop"
# yum group remove "KDE Plasma Workspaces"
# yum group remove "Server with GUI"
# yum group remove "MATE Desktop"

Configurar el cortafuegos basado en Iptables y TCPWrappers en Linux


Iptables es un programa de aplicación de espacio de usuario que le permite configurar el firewall (Netfilter) proporcionado por el kernel de Linux. Utilice un cortafuegos para filtrar el tráfico y permitir solo el tráfico necesario. También utilice TCPWrappers, un sistema de ACL de red basado en host para filtrar el acceso de red a Internet. Puede prevenir muchos ataques de denegación de servicio con la ayuda de Iptables:


Reforzar kenel de Linux /etc/sysctl.conf


El archivo /etc/sysctl.conf se usa para configurar los parámetros del kernel en tiempo de ejecución. Linux lee y aplica la configuración de /etc/sysctl.conf en el momento del arranque. Muestra /etc/sysctl.conf:

# Turn on execshield
kernel.exec-shield=1
kernel.randomize_va_space=1
# Enable IP spoofing protection
net.ipv4.conf.all.rp_filter=1
# Disable IP source routing
net.ipv4.conf.all.accept_source_route=0
# Ignoring broadcasts request
net.ipv4.icmp_echo_ignore_broadcasts=1
net.ipv4.icmp_ignore_bogus_error_messages=1
# Make sure spoofed packets get logged
net.ipv4.conf.all.log_martians = 1


Particiones de disco separadas para el sistema Linux


La separación de los archivos del sistema operativo de los archivos del usuario puede resultar en un sistema mejor y seguro. Asegúrese de que los siguientes sistemas de archivos estén montados en particiones separadas:

  •     /usr
  •     /home
  •     /var and /var/tmp
  •     /tmp



Cree particiones separadas para las raíces del servidor Apache y FTP. Edite el archivo / etc / fstab y asegúrese de agregar las siguientes opciones de configuración:

  •     noexec: no configura la ejecución de ningún binario en esta partición (evita la ejecución de binarios pero permite scripts).
  •     nodev: no permita caracteres o dispositivos especiales en esta partición (evita el uso de archivos de dispositivo como zero, sda, etc.).
  •     nosuid: no configure el acceso SUID / SGID en esta partición (evite el bit setuid).


Ejemplo de entrada / etc / fstab para limitar el acceso de usuarios en / dev / sda5 (directorio raíz del servidor ftp): 

/dev/sda5  /ftpdata          ext3    defaults,nosuid,nodev,noexec 1 2

Cuotas de disco


Asegúrate que la cuota de disco esté habilitada para todos los usuarios. Para implementar cuotas de disco, siga los siguientes pasos:

  •     Habilita las cuotas por sistema de archivos modificando el archivo / etc / fstab.
  •     Vuelve a montar los sistemas de archivos.
  •     Crea los archivos de la base de datos de cuotas y genere la tabla de uso del disco.
  •     Asignar políticas de cuotas.


Desactivar IPv6 solo si NO lo estás usando en Linux


El Protocolo de Internet versión 6 (IPv6) proporciona una nueva capa de Internet del conjunto de protocolos TCP / IP que reemplaza el Protocolo de Internet versión 4 (IPv4) y proporciona muchos beneficios. Si NO está utilizando IPv6, desactívelo:

Crear un fichero nombre /etc/sysctl.d/disableipv6.conf con el contenido:

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

 

Cargar contenido:

sysctl --load /etc/sysctl.d/disableipv6.conf
O bien edita el fichero

/etc/sysconfig/network
Añade:

NETWORKING_IPV6=no
IPV6INIT=no
En Debian/Ubuntu:

/etc/modprobe.d/aliases

Busca:

alias net-pf-10 ipv6

Cambiar por:

alias net-pf-10 off
alias ipv6 off

Deshabilitar binarios SUID y SGID no deseados


Todos los archivos habilitados para bits SUID / SGID se pueden utilizar incorrectamente cuando el ejecutable SUID / SGID tiene un problema o error de seguridad. Todos los usuarios locales o remotos pueden usar dicho archivo. Es una buena idea encontrar todos estos archivos. Utilice el comando de búsqueda de la siguiente manera:

#See all set user id files:
find / -perm +4000
# See all group id files
find / -perm +2000
# Or combine both in a single command
find / \( -perm -4000 -o -perm -2000 \) -print
find / -path -prune -o -type f -perm +6000 -ls


Debe investigar cada archivo informado. Consulte la página de manual del archivo informado para obtener más detalles.


25: Archivos de escritura mundial en el servidor Linux

Cualquiera puede modificar el archivo de escritura mundial, lo que genera un problema de seguridad. Utilice el siguiente comando para encontrar todos los archivos de conjuntos de bits adhesivos y de escritura del mundo:
buscar / dir -xdev -type d \ (-perm -0002 -a! -perm -1000 \) -print

Debe investigar cada archivo informado y establecer el permiso de usuario y grupo correcto o eliminarlo.
26. Archivos de Noowner

Los archivos que no pertenecen a ningún usuario o grupo pueden suponer un problema de seguridad. Simplemente encuéntralos con el siguiente comando que no pertenecen a un usuario válido y un grupo válido
find / dir -xdev \ (-nouser -o -nogroup \) -print

Debes investigar cada archivo informado y asignarlo a un usuario y grupo adecuados o eliminarlo.

Archivos de escritura para todos en el servidor Linux


Cualquiera puede modificar el archivo de escritura mundial, lo que genera un problema de seguridad. Utilice el siguiente comando para encontrar todos los archivos de conjuntos de bits adhesivos y de escritura del mundo:


find /dir -xdev -type d \( -perm -0002 -a ! -perm -1000 \) -print


Debes investigar cada archivo informado y establecer el permiso de usuario y grupo correcto o eliminarlo.

Archivos de Noowner


Los archivos que no pertenecen a ningún usuario o grupo pueden suponer un problema de seguridad. Simplemente encuéntralos con el siguiente comando que no pertenecen a un usuario válido y un grupo válido


find /dir -xdev \( -nouser -o -nogroup \) -print


Registro y auditoría


Debes configurar el registro y la auditoría para recopilar todos los intentos de piratería y descifrado. De forma predeterminada, syslog almacena datos en el directorio / var / log /. Esto también es útil para descubrir errores de configuración del software que pueden abrir su sistema a varios ataques. Consulta los siguientes artículos relacionados con el registro:

  •     Ubicaciones de archivos de registro de Linux.
  •     Cómo enviar registros a un loghost remoto.
  •     ¿Cómo rotar (purgar, comprimir) los archivos de registro?
  •     páginas man syslogd, syslog.conf y logrotate.

Supervisar los mensajes de registro sospechosos con Logwatch / Logcheck


Lea sus registros usando el comando logwatch (logcheck). Estas herramientas facilitan la lectura de registros. Obtiene informes detallados sobre elementos inusuales en syslog por correo electrónico. 


Servidor OpenSSH seguro


Se recomienda el protocolo SSH para el inicio de sesión y la transferencia de archivos remotos. Sin embargo, ssh está abierto a muchos ataques. Veremos cómo proteger el servidor OpenSSH:

Instalar y usar el sistema de detección de intrusiones NIDS


Un sistema de detección de intrusiones en la red (NIDS) es un sistema de detección de intrusiones que intenta detectar actividades maliciosas, como ataques de denegación de servicio, escaneos de puertos o incluso intentos de entrar en computadoras mediante el monitoreo del tráfico de la red.

Es una buena práctica implementar cualquier software de verificación de integridad antes de que el sistema se conecte en un entorno de producción. Si es posible, instale el software AIDE antes de que el sistema se conecte a cualquier red. AIDE es un sistema de detección de intrusos basado en host (HIDS) que puede monitorear y analizar los componentes internos de un sistema informático. Le recomendé que instale y use el software de detección de kits de raíz rkhunter también.


Los mejores sistemas IDS que puedes encontrar para GNU/Linux son:

  • Bro (Zeek): es de tipo NIDS y tiene funciones de registro de tráfico y análisis, monitor de tráfico SNMP, y actividad FTP, DNS, y  HTTP, etc.
  • OSSEC:  es de tipo HIDS, de código abierto y gratuito. Además, es multiplataforma, y sus registros incluyen también FTP, datos del servidor web y email.
  • Snort: es uno de los más famosos, de código abierto, y de tipo NIDS. Incluye sniffer para paquetes, registro para paquetes de red, threat intelligence, bloqueo de firmas, actualizaciones en tiempo real de las firmas de seguridad, habilidad para detectar eventos muy numerosos (OS, SMB, CGI, buffer overflow,  puertos ocultos,…).
  • Suricata: otro tipo NIDS, también de código abierto. Puede monitorizar actividad a bajo nivel, como TCP, IP, UDP, ICMP, y TLS, en tiempo real para aplicaciones como SMB, HTTP, y FTP. Permite la integración con herramientas de terceros como Anaval, Squil, BASE, Snorby, etc.
  • Security Onion: NIDS/HIDS, otro sistema IDS especialmente focalizado a las distros Linux, con capacidad para detectar intrusos, monitorización empresarial, sniffer de paquetes, incluye gráficos de lo que sucede, y se pueden usar herramientas como NetworkMiner, Snorby, Xplico, Sguil, ELSA, y Kibana.

Desactivar los dispositivos USB / firewire / thunderbolt


Escriba el siguiente comando para deshabilitar los dispositivos USB en el sistema Linux:


# echo 'install usb-storage /bin/true' >> /etc/modprobe.d/disable-usb-storage.conf



Puedes usar el mismo método para deshabilitar los módulos firewire y thunderbolt:


# echo "blacklist firewire-core" >> /etc/modprobe.d/firewire.conf
# echo "blacklist thunderbolt" >> /etc/modprobe.d/thunderbolt.conf


Una vez hecho esto, los usuarios no pueden copiar rápidamente datos confidenciales a dispositivos USB o instalar malware / virus o puerta trasera en su sistema basado en Linux. 


Fuentes:

https://www.cyberciti.biz/tips/linux-security.html


1 comentarios :

Unknown dijo...

En el punto 26, se ha 'colado' el comando buscar en vez de find. Fuera de eso, muy buen artículo. Gracias por compartir.

Publicar un comentario

Los comentarios pueden ser revisados en cualquier momento por los moderadores.

Serán publicados aquellos que cumplan las siguientes condiciones:
- Comentario acorde al contenido del post.
- Prohibido mensajes de tipo SPAM.
- Evite incluir links innecesarios en su comentario.
- Contenidos ofensivos, amenazas e insultos no serán permitidos.

Debe saber que los comentarios de los lectores no reflejan necesariamente la opinión del STAFF.