Script modular para el bastionado de GNU/Linux

Objetivo

El script bastiona-linux pretende facilitar el proceso de aplicación de los requisitos corporativos de bastionado, a la vez que crea una plataforma flexible para la incorporación de nuevas medidas que puedan surgir en el futuro así como para eliminar o modificar las ya existentes.

Ejecución

El script se puede ejecutar de dos maneras:

1-      Mediante la asignación de permisos de ejecución

chmod +x bastiona-REL.sh

./ bastiona-REL.sh

2-      Invocando una nueva instancia de bash con el script como argumento

bash bastiona-REL.sh

Argumentos de ejecución

Es posible indicar como argumento de ejecución las opciones:

  • -h o –help: Muestra un mensaje de ayuda por pantalla
  • -r o –restore: Restaura el sistema al estado pre-bastionado, deshace todos los cambios realizados por el script de bastionado

Flujo de ejecución

El script sigue el siguiente flujo de ejecución, una vez invocado el archivo bastiona-REL.sh:

1-      Incluye el archivo variables.sh

2-      Incluye el archivo functions.sh

3-      Comprueba los argumentos

4-      Incluye el archivo head.sh

5-      Crea el directorio $RUTA_BASE/bastionado, algunos módulos guardan información en él

6-      Crea el directorio $RUTA_BASE/.bastionado_restore, en el se guarda toda la información de restauración, no se puede eliminar nunca

7-      Se asegura de que SELinux esté activo o lo desactiva en caso de estar restaurando

8-      Comprueba si el script se está ejecutando a través de SSH

9-      Ejecuta los módulos acabados en .sh de la carpeta módulos

  1. Cada módulo muestra mensajes de OK o FALLO para cada tarea que realiza
  2. Cada módulo almacena el mensaje de OK o FALLO en el archivo de log indicado por la variable $LOGRUTA (“/tmp/$(hostname)hardening$(date +%d-%m_%H-%M).log” por defecto)
  3. Cada módulo almacena los datos necesarios para la restauración en el directorio indicado por la variable $RUTA_RESTAURACION
  4. En caso de ser una restauración, cada módulo recupera los datos necesarios desde el directorio indicado por la variable $RUTA_RESTAURACION

10-   Ejecuta los módulos acabados en .sh del directorio final-steps

11-   Ejecuta las acciones que no se pueden ejecutar automáticamente, estas acciones las establecen los módulos pertinentes, en este paso tan solo se ejecutan

12-   Muestra los mensajes de finalización de la ejecución

Estructura del script

El script se divide en dos partes:

1-      El núcleo

2-      Los módulos

Todos los archivos están contenidos en el directorio bastiona-linux y su estructura de árbol es la siguiente:

bastiona-linux

                               modules

final-steps

….

….

….

….

audit.rules

Bastille-3.0.9-1.0.noarch.rpm

bastiona-REL.sh

functions.sh

head.sh

variables.sh

El núcleo

El núcleo se encarga de:

  • Establecer las variables
  • Comprobar que se cumplen con los requisitos de ejecución
  • Ejecuta los módulos de forma ordenada
  • Muestra un mensaje sobre la ejecución de cada módulo
  • Crea un archivo log que almacena el resultado de la ejecución de cada módulo
  • Realiza las tareas marcadas para ejecutar al final del script

Los archivos que componen el núcleo, por orden de inclusión, son los siguientes:

Archivo

Función

bastiona-REL.sh Es el archivo principal, el encargado de gestionar la ejecución correcta de los módulos y el que se debe invocar desde línea de comandos
variables.sh Almacena las variables que son configurables por el usuario, ya sean del núcleo o de los módulos. Las variables se agrupan por módulos, los módulos que puedan ser configurables por el usuario deben incluir los parámetros editables en este archivo
functions.sh Define algunas funciones genéricas que se pueden utilizar tanto en el núcleo como en los módulos
head.sh Realiza unas comprobaciones previas a la ejecución, muestras un mensaje de advertencia y pide confirmación al usuario antes de iniciar la ejecución del script

 

Los módulos

Los módulos son pequeños scripts que realizan funciones concretas, por lo general cada paso del proceso de bastionado se compondrá de un script, aunque en ocasiones un script se puede encargar de varios pasos si están íntimamente relacionados. Los módulos se encuentran en el directorio modules y en el subdirectorio modules\final-steps.

Su orden de ejecución viene determinado por dos parámetros: el nombre del archivo y su ubicación. Primero se ejecutan por orden alfabético los módulos del directorio modules seguidos por orden alfabético de los módulos del directorio modules\final-steps.

Listado de módulos

Estos son los módulos que existen actualmente y sus funciones:

Archivo

Función

00-yum.sh Comprueba si hay conexión a Internet y si la hay configura el repositorio public yum de oracle
01-secure-pwd.sh Configura mejoras en las contraseñas: sha512, recordar las 10 últimas contraseñas y realizar comprobaciones a las nuevas
02-add-admin.sh Crea un usuario con privilegios de administración (sudo y su)
banner.sh Configura el mensaje que se muestra al iniciar sesión. Utiliza la variable banner
bios.sh Muestra consejos sobre la configuración del BIOS al final de la ejecución del script
cron-at.sh Configura cron y at para que solo puedan ser ejecutados por el usuario root
disable-ctrlaltdel.sh Deshabilita el reinicio de la máquina mediante la combinación de teclas control+alt+delete
disable-devices.sh Muestra un listado de los dispositivos que estén utilizando módulos del kernel y desactiva los indicados por el usuario
disable-remotefs.sh Desactiva los módulos utilizados para montar recursos compartidos, tras pedir confirmación al usuario
disable-root-login.sh Desactiva la contraseña de root, impidiendo de esta manera el inicio de sesión con este usuario. También desactiva el acceso del mismo a todas las terminales del sistema
disable-suid.sh Busca archivos con el bit SUID activo y se lo deshabilita a los archivos indicados por el usuario. Este módulo utiliza las variables:

  • safeFiles: Indica binarios a los que suele ser seguro dehabilitar el bit SUID
  • excludeFiles: Indica binarios que no se mostrarán al usuario y a los que no se deshabilitará el bit SUID
  • forceFiles: Indica binarios a los que se deshabilitará el bit SUID sin preguntar al usuario
file-permissions.sh Establece permisos restrictivos a los archivos: passwd,shadow,group,gshadow
fstab.sh Establece opciones restrictivas a los puntos de montaje
grub.sh Protege el gestor de arranque mediante contraseñaq
ipv6.sh Desactiva el uso de ipv6 por parte del SO
ntp.sh Configura la sincronización del reloj mediante NTP. Utiliza la variable NTPSERVER
process-accounting.sh Activa el registro de procesos que se ejecutan en el sistema
remote-logs.sh Configura el envío de logs a un servidor remoto. Utiliza las variables

  • syslogFacilities: Indica las categorías de mensajes a enviar
  • syslogServer: Ip del servidor remoto
  • syslogPort: Puerto del servidor remoto
remove-compile-tools.sh Elimina utilidades de compilación. Utiliza la variable compilers
secure-bootup.sh Desactiva el inicio interactivo del sistema
secure-shell.sh Configura el tiempo de inactividad para las shells, pasado este tiempo se cierra la sesión
services.sh Muestra los puertos que están a la escucha y aconseja su revisión al finalizar la parte automática del script.
ssh.sh Configura el servidor SSH para que sea más seguro y configura las reglas necesarias para iptables
sudo-su.sh Configura sudo y su para que permita su ejecución a miembros del grupo de administradores
sysctl.sh Configura parámetros del sistema mediante sysctl
tcpwrappers.sh.disabled Configura los permisos de tcpwrappers, este módulo está desactivado
umask.sh Configura la máscara de creación de archivos a una más restrictiva
updates.sh Muestra un mensaje sobre la política de actualizaciones de la compañía al usuario al finalizar la automatización
zeroconf.sh Desactiva el servicio de autodescubrimiento de avahi
final-steps/ 01-amtu.sh Instala y configura AMTU si hay conexión a Internet
final-steps/ 02-aide.sh Instala y configura AIDE si hay conexión a Internet
final-steps/ 03-auditd.sh Activa y configura el auditado del sistema, utiliza el archivo audit.rules
final-steps/ 04-bastille.sh Instala el paquete Bastille desde el archivo Bastille-3.0.9-1.0.noarch.rpm y lo ejecuta
final-steps/ 100-iptables.sh.disabled Configura las reglas de denegación de tráfico de entrada y salida para iptables, este módulo está desactivado ya que de esto se encargará el departamento correspondiente

 Descargar

El script se puede descargar desde este link bastiona-linux

Deja un comentario

Tu dirección de correo electrónico no será publicada.