Integrità del codice della piattaforma

Una sfida significativa nel funzionamento di un sistema complesso come Microsoft Azure garantisce che solo il software autorizzato sia in esecuzione nel sistema. Il software non autorizzato presenta diversi rischi per qualsiasi azienda:

  • Rischi per la sicurezza, ad esempio strumenti di attacco dedicati, malware personalizzato e software di terze parti con vulnerabilità note
  • Rischi di conformità quando il processo di gestione delle modifiche approvato non viene usato per introdurre un nuovo software
  • Rischio di qualità da software sviluppato esternamente, che potrebbe non soddisfare i requisiti operativi dell'azienda

In Azure ci troviamo di fronte alla stessa sfida e alla complessità significativa. Abbiamo migliaia di server che eseguono software sviluppato e gestito da migliaia di ingegneri. Ciò presenta una superficie di attacco di grandi dimensioni che non può essere gestita solo tramite processi aziendali.

Aggiunta di un controllo di autorizzazione

Azure usa un processo di progettazione avanzato che implementa controlli sulla sicurezza, la conformità e la qualità del software distribuito. Questo processo include il controllo di accesso al codice sorgente, l'esecuzione di verifiche del codice peer, l'esecuzione di analisi statiche per le vulnerabilità di sicurezza, il ciclo di vita dello sviluppo della sicurezza di Microsoft (SDL) e l'esecuzione di test funzionali e qualitativi. È necessario garantire che il software distribuito sia stato distribuito attraverso questo processo. L'integrità del codice consente di ottenere tale garanzia.

Integrità del codice come controllo di autorizzazione

L'integrità del codice è un servizio a livello di kernel che è diventato disponibile a partire da Windows Server 2016. L'integrità del codice può applicare criteri di controllo di esecuzione rigorosi ogni volta che viene caricato un driver o una libreria collegata dinamicamente (DLL), viene eseguito un file binario eseguibile o viene eseguito uno script. Esistono sistemi simili, ad esempio DM-Verity, per Linux. Un criterio di integrità del codice è costituito da un set di indicatori di autorizzazione, certificati di firma del codice o hash di file SHA256 , che il kernel corrisponde prima del caricamento o dell'esecuzione di un file binario o script.

L'integrità del codice consente a un amministratore di sistema di definire un criterio che autorizza solo file binari e script firmati da certificati specifici o che corrispondono agli hash SHA256 specificati. Il kernel applica questo criterio bloccando l'esecuzione di tutti gli elementi che non soddisfano i criteri impostati.

Un problema con un criterio di integrità del codice è che, a meno che il criterio non sia perfettamente corretto, può bloccare il software critico nell'ambiente di produzione e causare un'interruzione. Dato questo problema, si potrebbe chiedere perché non è sufficiente usare il monitoraggio della sicurezza per rilevare quando è stato eseguito software non autorizzato. L'integrità del codice ha una modalità di controllo che, invece di impedire l'esecuzione, può avvisare quando viene eseguito software non autorizzato. Gli avvisi possono certamente aggiungere molto valore per affrontare i rischi di conformità, ma per i rischi di sicurezza come ransomware o malware personalizzato, ritardare la risposta anche di pochi secondi può essere la differenza tra protezione e un avversario che ottiene un punto di appoggio permanente nella tua flotta. In Azure è stato investito in modo significativo per gestire qualsiasi rischio di integrità del codice che contribuisce a un'interruzione del servizio da parte di un cliente.

Processo di compilazione

Come illustrato in precedenza, il sistema di compilazione di Azure include un set completo di test per garantire che le modifiche software siano sicure e conformi. Dopo che una compilazione è stata completata tramite la convalida, il sistema di compilazione lo firma usando un certificato di compilazione di Azure. Il certificato indica che la compilazione è stata passata attraverso l'intero processo di gestione delle modifiche. Il test finale eseguito dalla compilazione è denominato Convalida della firma del codice (CSV). CSV conferma che i file binari appena compilati soddisfano i criteri di integrità del codice prima della distribuzione nell'ambiente di produzione. Ciò garantisce un'elevata attendibilità che non provocherà un'interruzione del servizio a causa di file binari firmati in modo non corretto. Se CSV rileva un problema, le interruzioni di compilazione e i tecnici pertinenti vengono distribuiti per analizzare e risolvere il problema.

Sicurezza durante la distribuzione

Anche se si esegue csv per ogni compilazione, è comunque possibile che alcune modifiche o incoerenze nell'ambiente di produzione possano causare un'interruzione correlata all'integrità del codice. Ad esempio, un computer potrebbe eseguire una versione precedente dei criteri di integrità del codice o in uno stato non integro che produce falsi positivi nell'integrità del codice. (Su larga scala di Azure, abbiamo visto tutto). Di conseguenza, è necessario continuare a proteggersi dal rischio di interruzione durante la distribuzione.

Tutte le modifiche in Azure sono necessarie per la distribuzione tramite una serie di fasi. La prima di queste sono istanze di test di Azure interne. La fase successiva viene usata solo per servire altri team di prodotti Microsoft. La fase finale serve ai clienti di terze parti. Quando viene distribuita una modifica, passa a ognuna di queste fasi e si sospende per misurare l'integrità della fase. Se la modifica non ha alcun impatto negativo, passa alla fase successiva. Se si apporta una modifica errata a un criterio di integrità del codice, la modifica viene rilevata durante questa distribuzione a fasi ed è stato eseguito il rollback.

Risposta agli eventi imprevisti

Anche con questa protezione a più livelli, è comunque possibile che alcuni server nella flotta blocchino software autorizzato correttamente e causi un problema riscontrato dai clienti, uno dei nostri scenari peggiori. Il nostro livello finale di difesa è l'indagine umana. Ogni volta che l'integrità del codice blocca un file, genera un avviso per i tecnici su chiamata da analizzare. L'avviso consente di avviare indagini sulla sicurezza e intervenire, indipendentemente dal fatto che il problema sia un indicatore di un attacco reale, un falso positivo o altre situazioni che influiscono sui clienti. Ciò riduce al minimo il tempo necessario per attenuare eventuali problemi correlati all'integrità del codice.

Passaggi successivi

Informazioni su come Windows 10 usa l'integrità del codice configurabile.

Per altre informazioni sulle operazioni eseguite per promuovere l'integrità e la sicurezza della piattaforma, vedere: