Mòdul Professional 8 (UF3) - Hardening LAMP

Índex

hardening.webp

1. Introducció i objectius

El concepte hardening fa referència a enfortir la seguretat d'un equip o servei, en el nostre cas un servidor web LAMP. Per això desglossarem la nostre actuació en els components d'aquest servidor: L Linux + A Apache + M MariaDB + P PHP. Adicionalment, i fora dels objectius d'aquest document, també caldria enfortir la pròpia WebApp instal·lada.

Intentarem donar una idea de com enfortir cada component pensant ja en un servidor real de producció, no tan sols una petita pràctica on es vegin de forma introductòria alguns punts (per exemple simplement afegir encriptació SSL/TLS a Apache). Així doncs, l'objectiu és aprendre a enfortir el servidor WEB vist com un conjunt i tenir una referència de què cal fer en un cas real de muntatge d'un servidor que ha d'estar expossat a Internet.

1.1. Pre-requisits

Partim de la base que tenim aquest sistema instal·lat in funcional.

  • Debian 11.
  • LAMP instal·lat (Linux Apache MariaDB i PHP).

Lògicament els conceptes, comandes i programes a utilitzar en altres sistemes GNU-Linux poden ser molt semblants o iguals, però sempre hi pot haver alguna diferència. Així mateix tingueu present que aquest manual pot quedar fàcilment des-actualitzat.

NOTA: Manual realitzat el 20-12-22.

2. Hardening a Linux

2.1. Actualització

apt update && apt upgrade -y

2.2. Usuaris, grups i contrasenyes

2.2.1. Contrasenyes

Sempre utilitzem contrasenyes robustes en els usuaris del sistema, tal com s'ha vist a M6.

2.2.2. Usuaris

És recomanable no utilitzar mai el compte root i de fet des-habilitar-ho, i realitzar totes les tasques administratives utilitzant la comanda sudo. Per fer-ho:

apt install sudo
adduser admin
usermod -aG sudo admin
chsh root

En l'última comanda indiquem que no volem shell per a l'usuari root. Això és fa indicant com a shell /usr/sbin/nologin.

A partir d'aquí haurem d'utilitzar l'usuari admin i sudo per fer les tasques administratives.

2.2.3. Grups

El usuari que utilitza l'apache per executar-se i accedir al sistema de fitxers és www-data,i com tot usuari també té associat un grup amb el mateix nom www-data. Per tant és el grup ideal per englobar totes les aplicacions web que necessitin accés a l'estructura d'arxius de la web.

2.3. Sistema de fitxers i permissos

La carpeta on instal·larem l'aplicació web és /var/www/html, per tant l'assignarem a l'usuari www-data i al seu grup també, de manera que tan sols l'Apache o els programes que assignem dins del grup www-data hi tinguin accés. Ambaixò guanyarem seguretat tant per que no tinguin accés coses foranes al procés de l'Apache com per si ens hackejen l'Apache (entren mitjançant la AppWeb) tan sols tinguin accés a aquestes carpetes.

sudo chown www-data /var/www/html -R
sudo chgrp www-data /var/www/html -R

A nivell de permissos donarem permissos totals al propietari i al grup, i cap a la resta.

sudo chmod 770 /var/www/html -R

2.4. IDEA AppArmor

Per securitzar les aplicacions que corren en el sistema i afegir-ne limitacions. En el cas d'Apache i MariaDB, a part de limitar recursos, sobretot limitar els permissos i l'espai del sistema de fitxer. Potser es pot fer més simple amb un jail.

2.5. Altres serveis

Queda ja fora d'aquest document, però hem de tenir present en enfortir també els altres serveis, com per exemple l'accés per SSH, etc.

3. Hardening a Apache

3.1. Encriptació SSL/TLS

openssl.jpeg

3.1.1. Activar MODSSL

sudo a2enmod ssl
sudo systemctl restart apache2

3.1.2. Crear certificats

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/apache-selfsigned.key -out /etc/ssl/certs/apache-selfsigned.crt

Al paràmetre Common Name cal introduïr la IP o nom de domini que utilitzarem.

3.1.3. Configurar i activar el lloc SSL

Configurem /etc/apache2/sites-available/default-ssl.conf modificant SSLCertificateFile que apunti al arxiu .crt generat i el SSLCertificateKeyFil al .key.

Finalment l'activem amb:

sudo a2ensite default-ssl.conf
sudo systemctl reload apache2

3.1.4. Redirigir des del HTTP al HTTPS

Modifiquem el /etc/apache2/sites-available/000-default.conf fent:

  • Comentant la línia de DocumentRoot.
  • Afegint Redirect / https://DOMINO_O_IP/.

Un cop fet recarreguem la configuració.

sudo systemctl reload apache2

3.2. ModSecurity

modsecurity.png

Un WAF (Web Application Firewall) que es pot ampliar i configurar amb regles per detectar els últims atacs recollits a OWASP o per configurar els nostres pròpis, alhora que personalitzar les pàgines d'error, etc. En el nostre cas tan sols l'hi deixarem configurades les regles bàsiques que venen per defecte.

3.2.1. Instal·lació

sudo apt install libapache2-mod-security2
sudo a2enmod headers
sudo systemctl restart apache2

3.2.2. Configuració bàsica

Copiem les configuracions recomanades:

sudo cp /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf

Finalment modifiquem l'arxiu modsecurity.conf, l'opció SecRuleEngine a On, per a que no tan sols detecti sinó que també aturi atacs.

De nou re-iniciar el Apache2…. pot trigar una mica.

sudo systemctl restart apache2

3.2.3. IDEA Afegir regles / repositoris

3.2.4. IDEA Creació de regles pròpies

3.3. IDEA Fail2Ban

Per controlar els intents fallits de login, peticions extranyes de URLs, etc.

4. IDEA Hardening a PHP

5. IDEA Hardening a MariaDB

6. Hardening a la WebApp

Finalment caldría fer enfortiment de la pròpia aplicació web instal·lada (WordPress, Moodle, Prestashop, etc) i aquests passos ja són específics de cada aplicació, cosa que s'escapa dels objectius d'aquest document.

7. Webgrafía

Data: 2022-12-20 dt. 00:00

Autor: Raul Gimenez Herrada

Created: 2023-01-23 dl. 16:14