Defense in depth
La defense in depth (tradotto alla lettera, difesa in profondità) è una strategia di sicurezza che impiega più strati di sicurezza per proteggere un asset di un'organizzazione. Si basa sull'idea che se uno strato di sicurezza dovesse cadere, comunque gli altri rimarrebbero a proteggere l'asset. L'obiettivo di defense in depth è di costruire sistemi che sono resilienti ad attacchi, e che sono in grado di reagire a incidenti in modo rapido e senza danni. Infatti, implementando più strati di sicurezza, siano essi di sicurezza fisica, sicurezza di rete o sicurezza delle applicazioni, si può ridurre il rischio di un attacco e limitare i danni che potrebbe indurre.
Ad esempio, supponiamo di avere una server per una applicazione web, possiamo avere vari livelli di sicurezza. Per prima cosa potremmo impostare un firewall di rete per limitare il traffico solo alle porte necessarie per il servizio. Inoltre potremmo esporre il servizio utilizzando solamente trasporto crittografato e sicuro, come su HTTPS. In un ambiente Cloud come AWS potrebbe essere utile inoltre impostare i Security Groups per controllare il traffico in entrata e in uscita. Infine, per una applicazione web potrebbe essere utile installare un Web Application Firewall (WAF) per identificare richieste potenzialmente malevole, e bloccare gli attacchi più comuni. In realtà, questo sistema rappresenta una mitigazione, e un attaccante esperto potrebbe comunque riuscire ad aggirarlo.
Un altro strato potrebbe essere la sicurezza del server, ad esempio impostare correttamente l'accesso al server con una password sicura o preferibilmente con una chiave. Inoltre, i processi all'interno del server dovrebbero essere eseguiti in maniera non privilegiata. Se disponiamo di più componenti (ad esempio un server web e un database) dovrebbero essere il più possibile separati, così che se viene compromesso uno dei componenti il danno sia limitato. Per questo potrebbe essere utile fare il deployment dei componenti tramite container, in questo modo è più semplice gestire i permessi di ogni componente e limitare i danni nel caso uno di questi venisse compromesso.
Impostare un buon sistema di monitoraggio e gestione dei log è una buona pratica, e ci permette di identificare anomalie o attività sospette. Potrebbe essere utile, inoltre, utilizzare software antivirus o dei software di identificazione delle intrusioni (IDS) per identificare degli accessi non autorizzati.
Questi sono solo alcuni esempi di come questo principio potrebbe essere messo in pratica. In generale dobbiamo chiederci, se questo componente venisse compromesso oppure questo sistema di sicurezza venisse aggirato, cosa un attaccante può fare? Una volta fatta questa domanda dobbiamo chiederci cosa possiamo fare per limitare i danni di tale attacco.