Refuerzo del servicio systemd

por calpee

Introducción

En un instante en el que los asaltos de piratas informáticos son comunes, es primordial reducir la área de ataque. La contenedorización es probablemente la mejor forma de aislar un servicio prestado públicamente, pero no en todos los casos es viable por múltiples causas. Por servirnos de un ejemplo, considere una app de sistema heredada creada sobre systemd. Esto podría explotar al límite las habilidades de un S.O. apoyado en systemd y ser administrado por medio de una entidad systemd, o podría conseguir actualizaciones de manera automática empleando un temporizador systemd, etcétera.

Por tal razón te enseñamos de qué forma puedes progresar la seguridad de un servicio systemd. Pero primero debemos ofrecer un paso atrás por un instante. Con las últimas ediciones, systemd ha establecido ciertas funcionalidades atrayentes similares con la seguridad, particularmente el sandboxing. En el presente artículo exponemos pasito a pasito de qué forma hacer mas fuerte los servicios con algunas ordenes y verificarlas con la suite systemd proporcionada.

Depuración

Systemd dio una herramienta atrayente llamada systemd-analyse. Este comando examina la configuración de seguridad y espacio apartado de uno o mucho más servicios detallados. El sistema de control verifica los diferentes factores de servicio importantes para la seguridad y asigna un “valor de exposición” numérico a cada uno de ellos, dependiendo de la relevancia del factor. Entonces calcula un nivel de exposición general para toda la unidad usando una estimación en el rango de 0.0 a 10.0 que nos comunica cuánto está expuesto un servicio a la seguridad.

Análisis del sistema

A fin de que tengamos la posibilidad revisar las novedades de nuestro servicio systemd punto por punto. Como puede ver, múltiples servicios en este momento están marcados como INCERTIDOS, esto probablemente se deba a que sólo algunas de las apps están empleando la ocupación proporcionada por systemd.

Iniciar

Empecemos con un caso de muestra simple. Deseamos hacer una unidad systemd para realizar el comando python3 -m http.server como servicio:

[Unit]
Description=Fácil Http Server
Documentation=https://docs.python.org/3/library/http.server.html

[Service]
Type=fácil
ExecStart=/usr/bin/python3 -m http.server
ExecStop=/bin/kill -9 $MAINPID

[Install]
WantedBy=multi-usuario.objetivo

Guarde el fichero y colóquelo en el directorio systemd concreto de su distribución.

Al comprobar la puerta de inseguridad mediante systemd-analyze security conseguimos el próximo resultado:

Inicie el servicio systemd

El valor de la seguridad es en este momento 9,6/diez y está marcado como INCIERTO. En este momento observemos de qué forma puede empoderar al ministerio de hoy a fin de que sea mucho más seguro.

PrivateTmp

Crea un espacio de nombres de sistema de ficheros bajo /tmp/systemd-private-*-[unit name]-*/tmp en vez de comunicar /tmp o /var/tmp. Varios ficheros unitarios publicados con Red Hat Enterprise Linux poseen esta configuración, que suprime una clase de inseguridades similares con la predicción y el remplazo de ficheros incluidos en el /tmp. [4]

Es de esta forma como se ve el servicio tras insertar la próxima directiva:

[Unit]
Description=Fácil Http Server
Documentation=https://docs.python.org/3/library/http.server.html

[Service]
Type=fácil
ExecStart=/usr/bin/python3 -m http.server
ExecStop=/bin/kill -9 $MAINPID

# Sandboxing features
PrivateTmp=yes

[Install]
WantedBy=multi-usuario.objetivo

Ese es el resultado del que venimos systemd-analyze:

simplehttp.service                        9.2 UNSAFE    😨

¡Bien! Lo bajamos de 9,6 en el 9.2. Observemos de qué forma se regresa aún mucho más seguro.

Sin nuevos permisos

Impide que el servicio y sus procesos secundarios eleven los privilegios. [4] Añada la próxima línea:

NoNewPrivileges=true

El próximo resultado es:

simplehttp.service                        9.0 UNSAFE    😨

Limitar espacios de nombres

Limita todos o un subconjunto de espacios de nombres al servicio. Aceptó la política cgroup, ipc, net, mnt, pid, usuario, y uts. [4]. Añada la próxima línea:

RestrictNamespaces=uts ipc pid usuario cgroup

Como puede ver arriba, eso es net el espacio de nombres no se definió pues el servicio debe vincularse a una plataforma de trabajo de red. Aislar net un servicio de red lo realiza superfluo.

simplehttp.service                        8.8 EXPOSED   😨

Desenlaces finales

Cuando añadimos las otras ordenes al servicio, conseguimos un servicio como este:

[Unit]
Description=Fácil Http Server
Documentation=https://docs.python.org/3/library/http.server.html

[Service]
Type=fácil
ExecStart=/usr/bin/python3 -m http.server
ExecStop=/bin/kill -9 $MAINPID

# Sandboxing features
PrivateTmp=yes
NoNewPrivileges=true
ProtectSystem=strict
CapabilityBoundingSet=CAP_NET_BIND_SERVICE CAP_DAC_READ_SEARCH
RestrictNamespaces=uts ipc pid usuario cgroup
ProtectKernelTunables=yes
ProtectKernelModules=yes
ProtectControlGroups=yes
PrivateDevices=yes
RestrictSUIDSGID=true
IPAddressAllow=192.168.1.0/24

[Install]
WantedBy=multi-usuario.objetivo

Al final llega a esta conclusión:

simplehttp.service                        4.9 OK       😃

Lo bajamos de 9,6 en el 4.9que es un muy excelente resultado. Todo el sistema en este momento está medianamente seguro.

Conclusión

En este momento tenemos la posibilidad de prosperar la seguridad de nuestro sistema. Pero recuerde que no en todos los casos debemos utilizar todas y cada una de las ordenes systemd. Por esa razón debemos contrastar su validez punto por punto. Tampoco debemos conseguir una puntuación baja por cada servicio. Es esencial resguardar nuestro sistema con las cautelas correctas.

Aquí hay un pequeño libro de jugadas de Ansible para modificar una demostración del siguiente producto. Podría asistirlo a entrenar con esta característica impactante introducida por systemd.

Alessio Greggi es informático de la Facultad de Roma, Tor Vergata. Trabajó como analista de seguridad y DevOps. Se ocupa eminentemente de scripts de shell, Python, Go y Ansible. Puede estar comunicado con Alessio mediante LinkedIn.

Fuente original

You may also like