meta data de esta página
  •  

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
seguridad:asegurar_linux [2015/04/20 14:23] – [Control de acceso] luiscaseguridad:asegurar_linux [2023/05/02 09:04] (actual) – [Referencias] lc
Línea 1: Línea 1:
 +{{tag>centos bastionado seguridad}}
 ===== Bastionado de Centos ===== ===== Bastionado de Centos =====
 +==== Asegurar la máquina físicamente ====
 +
 +Lo primero es asegurarnos de que a la máquina física no se puede acceder sin permiso. Además en caso de que el servidor disponga de tarjeta de acceeso remoto tipo ILO o similar, hay que configurarla en una VLAN propia que se utilice exclusivamente para gestión, si no se va a utilizar dicha tarjeta hay que desactivarla.
 +
 +
 +En caso de que no podamos restringir dicho acceso o para una mayor seguridad:
 +  * Desactivar el arranque desde cualquier dispositivo excepto el disco duro que contiene el SO
 +  * Establecer una contraseña para acceder a la BIOS
 +  * Proteger el gestor de arranque GRUB mediante contraseña
 +  * Deshabilita el arranque interactivo en el caso de que la distribución lo soporte
 +
 +
 ==== Instalación ==== ==== Instalación ====
 Siempe que sea posible hay que instalar el SO desde DVD sin que esté conectado a la red hasta que se hayan completado el bastionado. Descargarnos la imagen desde el sitio oficial y verificar la integridad de la misma. Siempe que sea posible hay que instalar el SO desde DVD sin que esté conectado a la red hasta que se hayan completado el bastionado. Descargarnos la imagen desde el sitio oficial y verificar la integridad de la misma.
Línea 23: Línea 36:
  
 <note> <note>
-En Centos para configurar la red ejecutar <code>system-config-network</code> o editando el fichero correspondiente a nuestra tarjeta, que se encuentra en la ruta **/etc/sysconfig/networking/devices**+En Centos para configurar la red ejecutar <sxh>system-config-network</sxh> o editando el fichero correspondiente a nuestra tarjeta, que se encuentra en la ruta **/etc/sysconfig/networking/devices**
  
 Los DNS hay que especificarlos en el archivo /etc/resolv.conf Los DNS hay que especificarlos en el archivo /etc/resolv.conf
Línea 29: Línea 42:
  
 == Deshabilitar IPV6 si no lo utilizamos == == Deshabilitar IPV6 si no lo utilizamos ==
-Para ver si tenemos IPV6 activo ejecutamos <code>ifconfig | grep inet6</code>+Para ver si tenemos IPV6 activo ejecutamos <sxh>ifconfig | grep inet6</sxh>
  
 Para deshabilitarlo sin reiniciar el sistema, ejecutar: Para deshabilitarlo sin reiniciar el sistema, ejecutar:
  
-<code>echo 1 > /proc/sys/net/ipv6/conf/all/disable_ipv6 +<sxh>echo 1 > /proc/sys/net/ipv6/conf/all/disable_ipv6 
-echo 1 > /proc/sys/net/ipv6/conf/default/disable_ipv6</code>+echo 1 > /proc/sys/net/ipv6/conf/default/disable_ipv6</sxh>
  
 otra forma sería: otra forma sería:
-<code>+<sxh>
 sysctl -w net.ipv6.conf.all.disable_ipv6=1 sysctl -w net.ipv6.conf.all.disable_ipv6=1
-sysctl -w net.ipv6.conf.default.disable_ipv6=1</code>+sysctl -w net.ipv6.conf.default.disable_ipv6=1</sxh>
  
 == Deshabilitar Zeroconf == == Deshabilitar Zeroconf ==
-Comprobar si se está ejecutando [[http://es.wikipedia.org/wiki/Zeroconf|Zeroconf]] <code>ps -e | grep avahi</code>Si devuelve algún resultado es que avahi está activo. +Comprobar si se está ejecutando [[http://es.wikipedia.org/wiki/Zeroconf|Zeroconf]] <sxh>ps -e | grep avahi</sxh>Si devuelve algún resultado es que avahi está activo. 
 Para deshabilitarlo: Para deshabilitarlo:
-Añadir la línea **NOZEROCONF=yes** Al archivo /etc/sysconfig/network y eliminar el paquete  <code>yum -y remove avahi</code>+Añadir la línea **NOZEROCONF=yes** Al archivo /etc/sysconfig/network y eliminar el paquete  <sxh>yum -y remove avahi</sxh>
  
 == Detectar sevicios en escucha == == Detectar sevicios en escucha ==
-Ejecutar <code>sudo netstat -tuanp | grep LISTEN</code>+Ejecutar <sxh>sudo netstat -tuanp | grep LISTEN</sxh>
  
 Si tenemos servicios innecesarios en /etc/init.d se encuentran los scripts de gestión del sistema SystenV tradicional y en /etc/init se encuentran los servicios adaptdos al sistema upstart.  Si tenemos servicios innecesarios en /etc/init.d se encuentran los scripts de gestión del sistema SystenV tradicional y en /etc/init se encuentran los servicios adaptdos al sistema upstart. 
 Para ver que servicios tenemos ejecutamos  Para ver que servicios tenemos ejecutamos 
-<code>ls -1 /etc/init.d > servicios</code> o bien <code>ls -1 /etc/init >> servicios</code>+<sxh>ls -1 /etc/init.d > servicios</sxh> o bien <sxh>ls -1 /etc/init >> servicios</sxh>
  
-Para deshabilitar un servicio determinado <code>chkconfig <service> off</code>+Para deshabilitar un servicio determinado <sxh>chkconfig <service> off</sxh>
  
 <note warning>si es posible eliminar los paquetes</note> <note warning>si es posible eliminar los paquetes</note>
Línea 74: Línea 87:
  
 Para configurar un servidor de tiempo hay que seguir estos pasos: Para configurar un servidor de tiempo hay que seguir estos pasos:
-  * Instalar el paquete ntpd <code>yum install ntp</code>+  * Instalar el paquete ntpd <sxh>yum install ntp</sxh>
   * Editar el archivo/etc/ntp.conf y poner nuestro servidor de tiempo el primero de la lista <file>server X.X.X.X </file>   * Editar el archivo/etc/ntp.conf y poner nuestro servidor de tiempo el primero de la lista <file>server X.X.X.X </file>
   * chkconfig ntpd on    * chkconfig ntpd on 
Línea 90: Línea 103:
 == Crear usuarios con privilegios de administrador == == Crear usuarios con privilegios de administrador ==
 Ejecutar el siguiente comando para cada usuario que requiera privilegios de administrador Ejecutar el siguiente comando para cada usuario que requiera privilegios de administrador
-<code>usermod -G wheel -a usuario </code>+<sxh>usermod -G wheel -a usuario </sxh>
  
 Editar el archivo /etc/pam.d/su y asegurarse de que contiene la línea Editar el archivo /etc/pam.d/su y asegurarse de que contiene la línea
-<code>auth required pam_wheel.so use_uid</code>+<sxh>auth required pam_wheel.so use_uid</sxh>
  
 == Limitar el uso de sudo a miembros de un grupo de administradores == == Limitar el uso de sudo a miembros de un grupo de administradores ==
Línea 129: Línea 142:
  
 Para crear usuario sin Shell hay que ejecutar el comando: Para crear usuario sin Shell hay que ejecutar el comando:
-<code>useradd -M -s /sbin/nologin usuario</code>+<sxh>useradd -M -s /sbin/nologin usuario</sxh>
  
 Donde -M indica que no se creará el directorio HOME del usuario, si es necesario que tenga HOME hay que quitar este parámetro del comando, y -s indica la SHELL que se le asigna al usuario, al especificar /sbin/nologin se asigna una SHELL que impide el inicio de sesión en el sistema Donde -M indica que no se creará el directorio HOME del usuario, si es necesario que tenga HOME hay que quitar este parámetro del comando, y -s indica la SHELL que se le asigna al usuario, al especificar /sbin/nologin se asigna una SHELL que impide el inicio de sesión en el sistema
Línea 136: Línea 149:
  Establecer el mensaje corporativo de inicio de sesión, para ello copiamos  el texto en el archivo /etc/motd  Establecer el mensaje corporativo de inicio de sesión, para ello copiamos  el texto en el archivo /etc/motd
  
-=== Enviar los logs a un servidor remoto ===+==== Enviar los logs a un servidor remoto ====
 En caso de usar syslogd el archivo /etc/syslog.conf debe contener la siguiente línea En caso de usar syslogd el archivo /etc/syslog.conf debe contener la siguiente línea
 <file>auth.info,authpriv.info,user.crit           @X.X.X.X</file> <file>auth.info,authpriv.info,user.crit           @X.X.X.X</file>
Línea 144: Línea 157:
  
 Si se ha denegado la salida del tráfico mediante reglas de iptables habrá que permitir la salida al puerto 514 UDP mediante el comando Si se ha denegado la salida del tráfico mediante reglas de iptables habrá que permitir la salida al puerto 514 UDP mediante el comando
-<code>iptables -I OUTPUT -p udp -d X.X.X.X –dport 514 -j ACCEPT</code>+<sxh>iptables -I OUTPUT -p udp -d X.X.X.X –dport 514 -j ACCEPT</sxh>
  
  
-=== At y Cron ===+==== At y Cron ====
 Permitir el uso de cron y at tan solo al usuario root ejecutando los siguientes comandos Permitir el uso de cron y at tan solo al usuario root ejecutando los siguientes comandos
-<code>rm /etc/{cron.deny,at.deny}echo root > /etc/cron.allowecho root > /etc/at.allow</code>+<sxh>rm /etc/{cron.deny,at.deny}echo root > /etc/cron.allowecho root > /etc/at.allow</sxh>
  
-=== Bastionar el acceso por SSH ===+==== Bastionar el acceso por SSH ====
 Para mejorar la  seguridad del servicio SSH se deben realizar las siguientes acciones: Para mejorar la  seguridad del servicio SSH se deben realizar las siguientes acciones:
   * Permitir tan solo el protocolo ssh2   * Permitir tan solo el protocolo ssh2
Línea 177: Línea 190:
  
 <note>Para configurar el mensaje de inicio de sesión hay que editar el archivo /etc/ssh/ssh_banner e insertar el texto</note> <note>Para configurar el mensaje de inicio de sesión hay que editar el archivo /etc/ssh/ssh_banner e insertar el texto</note>
 +
 +==== Auditar el sistema ====
 +
 +<note warning>Ojo activar el sistema de auditoria puede volver inutilizable el servidor más potente, así que hay que usarlo con precaución y planificación.</note>
 +Los pasos genéricos que debemos seguir son:
 +  * Instalar el paquete auditd
 +  * Localizar los archivos críticos y/o de mayor riesgo para los servicios que ofrece el servidor
 +  * Configurar auditd para que se inicie junto al sistema
 +  * Configurar el núcleo para que audite procesos que se inician antes que el servicio auditd
 +  * Añadir los archivos críticos al servicio auditd
 +
 +Al configurar auditd hay que:
 +
 +  * Tener /var/log/audit en su una partición propia
 +  * Ajustar max_log_file y num_logs para que usen el máximo posible del espacio de la partición de logs
 +  * Ajustar space_left de forma que permita al administrador tener tiempo para liberar espacio ante una alerta de poco espacio disponible
 +  * En el caso de que se llene el disco se ejecutará la acción definida por disk_full_action, todos los accesos deben ser terminados ya que no hay capacidad de auditar
 +
 +Para instalar y arrancar auditd durante el inicio del sistema ejecutar estos comandos
 +<sxh>
 +yum install auditd
 +chkconfig auditd on</sxh>
 +
 +Una vez instalado y configurado hay que revisar el resultado del comando aureport regularmente
 +
 +Una vez obtenido el listado de los archivo a auditar hay que agregarlos al archivo /etc/audit/audit.rules
 +
 +==== Actualizar el sistema ====
 +Mantener el sistema actualizado con los últimos parches
 +
 +==== Deshabiliar dispositivos innecesarios ====
 +
 +Para ver los dispositivos ejecutar 
 +<sxh>lspci -v </sxh>
 +<sxh>lsusb</sxh>
 +
 +Una vez localizados, deshabilitar los módulos innecesarios 
 +
 +==== Deshabilitar servicios innecesarios ====
 +
 +Algunos servicios que no deben existir en ningún caso son:
 +
 +  * rlogin
 +  * rsh
 +  * rexec
 +  * rcp
 +  * telnet -> Usar ssh en su lugar
 +  * talk
 +
 +==== Revisar los permisos en los ficheros ====
 +Desactivar el bit SUID y SGID en el máximo de programas
 +Para buscar que archivos tienen el bit SUID/SGID activado ejecutar 
 +<sxh>find / -xdev \( -perm -4000 -o -perm -2000 \) -type f -print </sxh>
 +
 +Revisar el listado que aparece por si hay alguno al que podamos quitarselo
 +
 +para desactivar este permiso
 +<sxh>chmod -s ruta_al_ejecutable</sxh>
 +
 +==== Habilitar la comprobación de integridad ====
 +La comprobación de integridad nos ayuda a localiza el punto de entrada de un ataque así como los archivos modificados o a los que han tenido acceso. 
 +Para esta tarea podemos utilizar estas herramientas:
 +  * Amtu (Abstract Machine Test Utility): Realiza comprobaciones de seguridad en CPU, HD, red y memoria
 +  * Aide(Advanced Intrusion Detection Environment): Utilidad para la comprobar la integridad de archivos
 +
 ==== Scripts de bastionado ==== ==== Scripts de bastionado ====
   * http://www.eugeniabahit.com/proyectos/jackthestripper   * http://www.eugeniabahit.com/proyectos/jackthestripper
Línea 187: Línea 265:
   * www.sans.org/resources/policies   * www.sans.org/resources/policies
   * http://abdulet.net/?p=591   * http://abdulet.net/?p=591
 +  * https://www.ccn-cert.cni.es/pdf/guias/series-ccn-stic/guias-de-acceso-publico-ccn-stic/3674-ccn-stic-619-implementacion-de-seguridad-sobre-centos7/file.html
  
  
 === Búsqueda de archivos con suid/sgid === === Búsqueda de archivos con suid/sgid ===
-<code>find / -type t\ (-perm 04000 -o - perm -02000\) -exec ls -la {} \</code>+<sxh>find / -type t\ (-perm 04000 -o - perm -02000\) -exec ls -la {} \</sxh>
  
 === Buscar otros archivos peligrosos === === Buscar otros archivos peligrosos ===
-<code>find / name -rhosts -name .netrc</code>+<sxh>find / name -rhosts -name .netrc</sxh>