Integriteit van platformcode

Een belangrijke uitdaging bij het uitvoeren van een complex systeem zoals Microsoft Azure is ervoor zorgen dat alleen geautoriseerde software wordt uitgevoerd in het systeem. Niet-geautoriseerde software biedt verschillende risico's voor elk bedrijf:

  • Beveiligingsrisico's zoals speciale aanvalshulpprogramma's, aangepaste malware en software van derden met bekende beveiligingsproblemen
  • Nalevingsrisico's wanneer het goedgekeurde wijzigingsbeheerproces niet wordt gebruikt om nieuwe software binnen te halen
  • Kwaliteitsrisico van extern ontwikkelde software, die mogelijk niet voldoet aan de operationele eisen van het bedrijf

Azure staat voor dezelfde uitdaging bij aanzienlijke complexiteit. Duizenden servers draaien software die duizenden ingenieurs ontwikkelen en onderhouden. Deze schaal vormt een groot aanvalsoppervlak dat bedrijfsprocessen alleen niet kunnen beheren.

Een autorisatiepoort toevoegen

Azure gebruikt een uitgebreid engineeringproces met controlepunten voor de beveiliging, naleving en kwaliteit van uitgerolde software. Dit proces omvat toegangscontrole tot broncode, peer code reviews, statische analyse van beveiligingslekken, Microsoft's Security Development Lifecycle (SDL) en functionele en kwaliteitscontroles. Microsoft moet garanderen dat geïmplementeerde software door dit proces stroomt. Code-integriteit helpt die garantie te bereiken.

Code-integriteit als autorisatiepoort

Codeintegriteit is een kernel-niveau dienst die beschikbaar werd vanaf Windows Server 2016. Code-integriteit kan een strikt uitvoeringscontrolebeleid toepassen wanneer een stuurprogramma of een dynamisch gekoppelde bibliotheek (DLL) wordt geladen, een uitvoerbaar binair bestand wordt uitgevoerd of een script wordt uitgevoerd. Vergelijkbare systemen, zoals DM-Verity, bestaan voor Linux. Een code-integriteitsbeleid bestaat uit een verzameling autorisatiekenmerken, namelijk codeondertekeningscertificaten of SHA-256-bestandshashes, die de kernel controleert voordat een binair bestand of script wordt geladen of uitgevoerd.

Codeintegriteit stelt systeembeheerders in staat een beleid te definiëren dat alleen binaries en scripts autoriseert die door bepaalde certificaten worden ondertekend of die overeenkomen met gespecificeerde SHA-256 hashes. De kernel dwingt dit beleid af door de uitvoering te blokkeren van alles wat niet voldoet aan het ingestelde beleid.

Een code-integriteitsbeleid kan kritieke software in productie blokkeren en een storing veroorzaken, tenzij het beleid volledig correct is. Gezien deze zorg vraag je je misschien af waarom beveiligingsmonitoring niet voldoende is om ongeautoriseerde software-uitvoering te detecteren. Codeintegriteit heeft een auditmodus die, in plaats van uitvoering te voorkomen, kan waarschuwen wanneer ongeautoriseerde software draait. Waarschuwingen kunnen veel waarde toevoegen bij het aanpakken van compliancerisico's. Voor beveiligingsrisico's zoals ransomware of aangepaste malware kan het uitstellen van de reactie met zelfs maar een paar seconden het verschil zijn tussen bescherming en het feit dat een tegenstander een blijvende voet aan de grond krijgt in je vloot. In Azure investeert Microsoft aanzienlijk om elk risico te beheersen dat problemen met de code-integriteit bijdragen aan een storing die gevolgen heeft voor klanten.

Bouwproces

Zoals eerder beschreven, beschikt het Azure build-systeem over een rijke set tests om te waarborgen dat softwarewijzigingen veilig en compliant zijn. Nadat een build de validatie heeft doorlopen, ondertekent het buildsysteem deze met een Azure buildcertificaat. Het certificaat geeft aan dat de build het hele change management-proces heeft doorlopen. De laatste test die de build doorloopt is Code Signature Validation (CSV). CSV bevestigt dat de nieuw gebouwde binaries voldoen aan het code-integriteitsbeleid voordat Microsoft ze in productie uitrolt. Deze validatie geeft Microsoft groot vertrouwen dat verkeerd ondertekende binaries geen klantbeïnvloedende storing zullen veroorzaken. Als CSV een probleem vindt, breekt de build en worden de relevante engineers opgeroepen om het probleem te onderzoeken en op te lossen.

Veiligheid tijdens de implementatie

Hoewel Azure CSV uitvoert voor elke build, kan een wijziging of inconsistentie in de productie toch leiden tot een storing gerelateerd aan code-integriteit. Een machine kan bijvoorbeeld een oude versie van het code-integriteitsbeleid draaien, of zich in een ongezonde toestand bevinden die valse positieven in codeintegriteit veroorzaakt. Op Azure-schaal heeft Microsoft alles meegemaakt. Azure blijft beschermen tegen het risico van een storing tijdens de implementatie.

Alle wijzigingen in Azure moeten via een reeks fasen worden uitgezet. De eerste fasen zijn interne Azure-testinstanties. De volgende fase bedient alleen andere Microsoft-productteams. De laatste fase dient klanten van derden. Wanneer Azure een wijziging uitrolt, verplaatst de wijziging zich om de beurt naar elke fase en pauzeert om de gezondheid van de fase te meten. Als de verandering geen negatieve impact heeft, gaat het naar de volgende fase. Als Microsoft een slechte wijziging aanbrengt in een code-integriteitsbeleid, detecteert de gefaseerde implementatie de wijziging en draait deze terug.

Reageren op incidenten

Zelfs met deze gelaagde bescherming kan een server in de vloot correct geautoriseerde software blokkeren en een klantprobleem veroorzaken, een van Microsoft's slechtste scenario's. De laatste verdedigingslaag is menselijk onderzoek. Telkens wanneer code-integriteit een bestand blokkeert, wordt er een waarschuwing gegenereerd voor de dienstdoende engineers om dit te onderzoeken. De waarschuwing stelt ingenieurs in staat om beveiligingsonderzoeken te starten en in te grijpen, of het nu een indicatie is van een echte aanval, een vals-positief of een andere situatie die de klant beïnvloedt. Deze waarschuwing minimaliseert de tijd die nodig is om eventuele problemen met codeintegriteit te verminderen.

Volgende stappen

Voor meer informatie over hoe Microsoft platformintegriteit en -beveiliging bevordert, zie: