# Hardening

Hardening (dalla lingua inglese, la cui traduzione significa indurire, irrobustire), in informatica, indica l’insieme di operazioni specifiche di configurazione di un dato sistema informatico (e dei suoi relativi componenti) che mirano a minimizzare l'impatto di possibili attacchi informatici che sfruttano vulnerabilità dello stesso, migliorandone pertanto la sicurezza complessiva.

## Descrizione

In italia rientrava nelle pratiche tecniche richieste dal documento programmatico sulla sicurezza 196/03 sulla sicurezza dei dati ed in generale enuncia i criteri da adottare per garantire l'adozione delle misure minime di sicurezza sui sistemi e sulle infrastrutture tecnologiche. Dal 25 Maggio 2018 ha efficacia il Regolamento generale sulla protezione dei dati e l'articolo della 196/03 sul DPS è stato abolito (comunque era tecnologicamente obsoleto dato che era del 2003).
Uno degli errori più comuni nella realizzazione di un sistema informatico riguarda la fase di installazione di un sistema operativo, di una rete di dispositivi o di un'applicazione. Quando si procede ad un lavoro di questo genere, spesso questi componenti non sono ben configurati per impedire i relativi rischi di sicurezza informatica che possono derivarne, ma sono soggetti ad una configurazione quanto più aderente ai principi basilari dell'amministrazione e più in generale al fine economico che l’azienda persegue. Inoltre, soprattutto la componente software può contenere vulnerabilità che mettono a rischio il sistema.
È questo uno dei motivi per cui si parla di esigenze di hardening, cioè di rafforzamento delle piattaforme installate dal punto di vista della sicurezza informatica. Esempi di operazioni hardening sono: impostazione account locale macchina come "utente" e non "amministratore", chiusure di porte, arresto di servizi, disabilitazione di privilegi, eliminazione di utenti/account amministrativi o guest o di assistenza, disinstallazione applicazioni o strumenti particolari del sistema operativo, limitazione a connessioni o registrazioni su reti, negazione di accessi o diritti, impedimento o controllo della navigazione o della posta elettronica, sblocco operazione mediante consenso hardware o logico, disabilitazione di servizi o app non necessari o comunque veicoli di minacce, utilizzo di procedure sicure di accesso (ad esempio MFA), gestione delle patch/aggiornamenti, script di pulizia automatica periodica (cache, file temporanei, cookie, altro), etc.
Attualmente sono disponibili applicazioni software che presiedono il controllo centralizzato delle metodologie hardening.

### Tipologie

Fondamentalmente l'hardening può essere delle seguenti tipologie:
1) One Time Hardening: viene effettuato solo una volta dopo la prima realizzazione del sistema
2) Multiple Time hardening. Viene effettuato più volte durante la vita del sistema, e la sua ripetizione nel tempo dipende da due fattori fondamentali che sono il rilascio di patch di aggiornamento (patch management) per far fronte alle zero day vulnerability e l'aggiunta di moduli complementari a quello installato di base.

## Fasi

L'hardening si divide in tre parti fondamentali:
1) pre-analisi sullo stato attuale
Una sessione di vulnerability assessment è la tecnica migliore per avviare un programma di hardening.
Di solito si identificano per primi i dispositivi di rete. Si tratta di componenti hardware (e di software che li gestiscono) esposti e visibili da tutti gli altri nodi della rete. Si procede poi con il software di base. Ad esempio, un sistema operativo, uno dei componenti principali del software di base, funziona ed interagisce con il resto del sistema informatico mediante vari servizi e utility. Ognuna di queste componenti è pertanto in grado di fornire uno spunto di attacco ad un soggetto malintenzionato che ne abbia scoperto delle vulnerabilità.
Altro rischio è la gestione dei privilegi (di solito adottata dal file system), come ad esempio configurazioni di sistema, permessi e password. Una protezione non adeguata costituisce un ulteriore spunto di debolezza.
Vi sono anche programmi applicativi(appartenenti quindi alla categoria dei software applicativi) che dall’analisi possono risultare non necessari al funzionamento del sistema stesso. Analizzare correttamente cosa è strettamente necessario ed eliminare cosa non lo è (o non lo è più in seguito ad un aggiornamento) permette di eliminare potenziali vulnerabilità che tali programmi potevano contenere.
Ultimo fattore da analizzare è dato dalla robustezza fisica dei componenti. L'hardening qui riguarda la capacità del sistema di far fronte principalmente a disastri naturali e a problemi derivanti dalle alterazioni cui possono essere soggetti i componenti fisici del sistema informatico.
2) remedy
Per la parte di remedy (letteralmente rimedio) vengono elencate delle attività tecniche mirate che poi devono essere opportunamente documentate (report) al fine di garantire la cronologia sul singolo componente dell'infrastruttura e poter permettere un eventuale ripristino (rollback) in caso di blocco della funzionalità. La parte di report è poi soggetta ad un test (audit) successivo di verifica atto a convalidare lo stato di sicurezza raggiunto (compliance). Qualora le azioni di rafforzamento implementate impattino sui dati personali occorrerà agire in conformità al GDPR.
Questa attività di remedy viene normalmente effettuata attraverso operazioni distinte:
1) la riduzione della superficie di attacco ottenibile ad esempio attraverso:
   * rimozione di software non necessario dal sistema che dovrà ospitare il servizio;
   * disabilitazione di servizi, moduli del kernel, protocolli, non necessari;
   * installazione di un personal firewall;
   * etc.
2) la riconfigurazione dei servizi esistenti al fine di renderli maggiormente "robusti":
   * applicazione di permessi restrittivi sui file;
   * applicazione di policy per la complessità delle password;
   * abilitazione dei log di sicurezza;
   * installazione delle patch di sicurezza;
   * rimozione degli utenti non necessari;
   * etc.
3) monitoring per un dato tempo
Si tratta di tenere sotto controllo il funzionamento del sistema dopo le modifiche apportate nella fase di remedy.
Questo punto è assente nel caso di "One Time Hardening" sopra descritto.

## Considerazioni

Ogni componente erogante il servizio dovrà essere oggetto di hardening, (es. sistema operativo, webserver, applicazione web), etc. Una configurazione molto stringente, spesso richiede un discreto tempo di applicazione, a causa a volte della complessità o della scarsità di documentazione del servizio ospitato. Nelle aziende tipicamente viene definito un livello base di hardening da applicare a tutte le piattaforme, viene successivamente deciso in funzione di un'attività di analisi del rischio se incrementare e di quanto la profondità dello stesso.
Ad oggi esistono anche insiemi di script di hardening e tool come Security-Enhanced Linux, Bastille linux, Microsoft Group-Policy JASS per Solaris e Apache/PHP hardener, che possono, per esempio, disattivare funzionalità non necessarie nei file di configurazione e applicare misure protettive di varia natura. Sono disponibili in commercio soluzioni commerciali, piuttosto complesse, per il controllo centralizzato e massivo della sicurezza dell'infrastruttura e, con possibilità di configurazione estremamente granulare per qualsiasi dispositivo/componente del sistema, specie se è articolata tramite dominio.
Per la criticità delle attività da svolgere è necessario che il personale tecnico incaricato sia altamente qualificato in quanto si tratta di vera e propria azione investigativa e di difesa perimetrale , nulla può essere lasciato al caso anzi grazie a questo tipo di indagine spesso si riesce a scoprire vulnerabilità mai segnalate dai sistemi interni di Antivirus, Firewall, Antimalware etc.
Il netto vantaggio a livello di sicurezza delle informazioni va però pesato con una certa riduzione della produttività come ovvia conseguenza dell'impossibilità materiale nell'esecuzione di determinate attività.