Share via


Microsoft Security Advisory 4092731

Update naar azure Cloud Services Machine Key Generation Algorithm

Gepubliceerd: 8 mei 2018 | Bijgewerkt op 29 juni 2018

Versie: 1.2

Samenvatting

Microsoft brengt dit beveiligingsadvies uit om informatie te verstrekken met betrekking tot een update op de manier waarop de computersleutels worden gegenereerd voor Azure Cloud Services. Dit scenario kan van invloed zijn op klanten die Azure Cloud Services-webrollen gebruiken. De computersleutels voor bestaande implementaties zijn gegenereerd met onvoldoende entropie en het gebruik van afgeschafte cryptografische algoritmen.

Om dit probleem op te lossen, heeft Microsoft een update uitgebracht voor het algoritme dat wordt gebruikt voor het genereren van machinesleutels in nieuwe Azure Cloud Services-webrolimplementaties, waaronder het gebruik van cryptografisch sterke generatie van willekeurige getallen. Alle bestaande webrollen behouden hun eerder gegenereerde computersleutels, tenzij deze opnieuw worden geïmplementeerd. Op basis van bepaalde gedetailleerde informatie kan een aanvaller mogelijk computersleutels raden die zijn gemaakt door het afgeschafte algoritme. Kwetsbare computersleutels kunnen in sommige omstandigheden een bypass van beveiligingsfuncties toestaan.

Dit advies bevat richtlijnen voor klanten om te bepalen of ze worden beïnvloed door dit scenario en welke, indien van toepassing, acties die ze moeten ondernemen.

Betrokken cloudservices

Azure-implementaties die gebruikmaken van webrollen, worden beïnvloed door dit probleem. De enige uitzondering is als u uw eigen computersleutel hebt opgegeven in web.config in het CS-pakket. Azure Worker-rollen, virtuele machines en alle andere Azure-aanbiedingen worden niet beïnvloed.

Veelgestelde vragen

1. Hoe kan ik weten of ik getroffen ben?

Alle Azure Cloud Service-webrollen worden beïnvloed door dit probleem, behalve als u uw eigen computersleutels hebt opgegeven in web.config in het CS-pakket. Azure Cloud Service Worker-rollen, virtuele machines en alle andere Azure-aanbiedingen worden niet beïnvloed.

ASP.NET gebruikt machinesleutels voor verschillende doeleinden, waaronder:

  • Anti-manipulatie met webformulierweergavegegevens
  • Cookies voor het genereren en valideren van ASP.NET webformuliersessies
  • Anti-CSRF-tokens
  • Versleuteling met behulp van de methoden machinekey.protect en machinekey.unprotect.

2. Zijn er vereisten voor het herstellen van mijn betreffende toepassing?

Ja, als uw webrol is geïmplementeerd met een buiten gebruik gestelde versie van Azure SDK voor .Net, wordt het verbeterde algoritme voor het genereren van sleutelsleutels niet gebruikt. https://azure.microsoft.com/en-us/downloads/archive-net-downloads/ Raadpleeg de ondersteunde versies. Als u een upgrade wilt uitvoeren naar een ondersteunde versie, klikt u op de koppeling op de eerder verwezen site om uw project te downloaden en opnieuw te implementeren met een ondersteunde SDK-versie. Nadat u hebt gevalideerd dat uw project is geïmplementeerd met een ondersteunde SDK, volgt u de aanvullende stappen in dit advies.

3. Hoe kan ik mijn betrokken toepassing herstellen?

Als u de nieuwe machinesleutels wilt genereren, moet u uw .cspkg en .cscfg opnieuw implementeren als een nieuwe cloudservice, uw workload implementeren in de staging-site en een wisselimplementatie (VIP Swap) uitvoeren, of uw eigen computersleutels injecteren en vervolgens een gelijktijdige upgrade uitvoeren. Een typische update-implementatiebewerking is niet voldoende. Hieronder vindt u een beschrijving van de opties voor risicobeperking op hoog niveau en gedetailleerde stappen:

Optie 1: Uw workload implementeren in een nieuwe cloudservice. Werk uw CNAME bij om verkeer naar uw nieuwe cloudservice te verwijzen. Wanneer er geen verkeer naar de oude site gaat, kunt u de oude cloudservice verwijderen.

Optie 2: Implementeer uw cloudservice in de staging-site en voer een wisselimplementatie uit.

Optie 3: Genereer uw eigen computersleutels in Web.config en voer een gelijktijdige update uit. Hiermee worden alle exemplaren in één keer bijgewerkt, waardoor de downtime van toepassingen wordt veroorzaakt.

We raden u aan optie 1 te gebruiken om downtime te voorkomen. We raden u ook aan de beperking uit te voeren tijdens perioden met een laag gebruik, omdat sessies kunnen worden onderbroken terwijl de computersleutels veranderen.

Opmerking: het IP-adres van uw toepassing wordt gewijzigd zodra u de nieuwe computersleutels verkrijgt met optie 1 en optie 2.

4. Ik heb de computersleutel gebruikt om permanente gegevens te versleutelen met behulp van MachineKey.Encode()/MachineKey.Protect(). Hoe kan ik de gegevens herstellen?

Als de MachineKey is gebruikt voor het versleutelen van gegevens (met behulp van MachineKey.Encode()/MachineKey.Protect() ) moet de oude computersleutel en algoritmen die zijn gedefinieerd in de web.config worden gebruikt om de gegevens te ontsleutelen (door respectievelijk MachineKey.Decode()/MachineKey.Unprotect() aan te roepen voordat de risicobeperkingsstappen worden uitgevoerd. Zodra de oplossingsstappen zijn voltooid, gebruiken alle aanroepen naar MachineKey.Encode()/MachineKey.Protect() en MachineKey.Decode()/MachineKey.Unprotect() de bijgewerkte computersleutel en algoritmen van de web.config.

5. Hoe kan ik weten dat mijn toepassing het nieuwe algoritme voor de computersleutel gebruikt?

Als u slechts één implementatie in uw cloudservice hebt, is het controleren of het Azure Machine Key-certificaat op het tabblad Certificaat van uw cloudservice in Azure Management Portal voldoende is. Als dit certificaat aanwezig is, gebruikt uw implementatie het algoritme voor de computersleutel.

Als u twee implementaties in uw cloudservice (productie en fasering) hebt, moet u extern bureaublad in uw webrollen uitvoeren en de IIS-configuratie bekijken. Als u het certificaat van de computersleutel ziet, gebruikt u het nieuwe algoritme voor de computersleutel. U moet deze controle uitvoeren op één webrol in elke implementatie. Als u geen verbinding kunt maken met de virtuele machine, kunt u een ondersteuningsticket indienen (instructies in #7) en ons ondersteuningsteam kan helpen controleren of uw implementaties de nieuwe computersleutel gebruiken.

Azure Certificates

6. Wat is het certificaat 'Microsoft Azure Service Management for MachineKey'?

Dit is het certificaat dat wordt gebruikt voor het versleutelen van de computersleutels samen met het verbeterde algoritme.

7. Wie beheert het certificaat Microsoft Azure Service Management for MachineKey en wat gebeurt er wanneer het verloopt?

Azure beheert dit certificaat. Klanten hoeven zich geen zorgen te maken over de vervaldatum van dit certificaat, omdat het eenmaal wordt gebruikt om de nieuwe computersleutels te genereren met het nieuwe algoritme. De vervaldatum heeft geen gevolgen.

8. Kan het certificaat worden verwijderd of verwijderd uit de virtuele machine?

Nee, het certificaat kan niet worden verwijderd.

9. Wat kan ik doen als ik vragen heb over de risicobeperkingsstappen?

Dien een ondersteuningsaanvraag in onder Cloud Services met behulp van uw standaard escalatieproces. Voer de volgende stappen uit om te escaleren in Azure Portal:

  1. Ga naar Help en ondersteuning in Azure Portal.
  2. Selecteer het type technisch probleem.
  3. Selecteer uw abonnement en selecteer vervolgens de service Cloud Services (webrollen/werkrollen) in Services.
  4. Klik op Volgende , kies MachineKey Certificate Update als het probleemtype en vul vervolgens de details van het ondersteuningsticket in.

Gedetailleerde stappen voor het uitvoeren van de risicobeperking

Optie 1: Implementeer uw cloudservice opnieuw.

  1. Voer een herployment uit via de portal:

    1. Maak een nieuwe cloudservice met uw .cspkg en .cscfg. Hier vindt u meer informatie.
    2. Werk de CName- of A-record bij om verkeer naar de nieuwe cloudservice te verwijzen.
    3. Verwijder uw oude cloudservice nadat uw verkeer verwijst naar de nieuwe cloudservice.
  2. Voer een herployment uit via PowerShell:

    1. Maak een nieuwe cloudservice met uw .cspkg en .cscfg. Hier vindt u meer informatie.

      Voorbeeld: New-AzureService -ServiceName "yourServiceName" -Label "MyTestService" -Location "VS - zuid-centraal"

    2. Maak een nieuwe implementatie met uw .cspkg en .cscfg. Hier vindt u meer informatie.

      Voorbeeld: New-AzureDeployment -ServiceName "yourServiceName" -Slot "Production" -Package "YourCspkgFile.cspkg" -Configuration "YourConfigFile.cscfg"

    3. Werk de CName- of A-record bij om verkeer naar de nieuwe cloudservice te verwijzen.

    4. Verwijder uw vorige cloudservice die geen bijgewerkte computersleutels heeft nadat uw verkeer verwijst naar de nieuwe cloudservice. Hier vindt u meer informatie.

      Voorbeeld: Remove-AzureService -ServiceName 'yourOldServiceName'

  3. Voer een herimplementatie uit via rest API:

    1. Maak een nieuwe cloudservice. Hier vindt u meer informatie.

      Voorbeeld: https://management.core.windows.net/<subscription-id>/services/hostedservices

    2. Maak een nieuwe implementatie met behulp van de implementatie-API voor maken. Als u uw .cspkg en .cscfg wilt vinden, kunt u get-package-API aanroepen.

      Voorbeeld: https://management.core.windows.net/<subscription-id>/services/hostedservices/<cloudservice-name>/deploymentslots/production

    3. Verwijder uw vorige cloudservice die geen bijgewerkte computersleutels heeft nadat uw verkeer verwijst naar de nieuwe cloudservice. Hier vindt u meer informatie.

      Voorbeeld: https://management.core.windows.net/<subscription-id>/services/hostedservices/<old-cloudservice-name>

Optie 2: Implementatie wisselen.

Als u optie 2 gebruikt, moet u een lege staging-site hebben. Als u momenteel een implementatie in de staging-site hebt, kunt u deze verwijderen en vervolgens de volgende stappen uitvoeren:

  1. Voer de implementatie wisselen uit via de portal:

    1. Werk uw cloudservice-implementatie bij door uw .cspkg en .cscfg te uploaden in de staging-site. Dit bevat het nieuwe certificaat voor het genereren van de computersleutels. Hier vindt u meer informatie.

    2. Wissel uw productie- en faseringssites. Hier vindt u meer informatie.

    3. Verwijder uw staging-site met uw vorige productie-implementatie. Hier vindt u meer informatie

  2. Voer de implementatie wisselen uit via PowerShell.

    1. Implementeer uw cspkg en cscfg in de Staging-site. Hier vindt u meer informatie.

      Voorbeeld: New-AzureDeployment -ServiceName "yourServiceName" -Slot "Staging" -Package "YourCspkgFile.cspkg" -Configuration "YourConfigFile.cscfg"

    2. Wissel uw productie- en faseringssites. Hier vindt u meer informatie.

      Voorbeeld: Move-AzureDeployment -ServiceName 'yourServiceName'

    3. Verwijder uw staging-site met uw vorige productie-implementatie.

      Voorbeeld: Remove-AzureDeployment -ServiceName "yourServiceName" -Slot "Staging"

  3. Voer de implementatie wisselen uit via rest API:

    1. Maak een nieuwe implementatie in de staging-site met behulp van de implementatie-API voor maken. Als u uw .cspkg en .cscfg wilt vinden, kunt u get-package-API aanroepen.

      Voorbeeld: https://management.core.windows.net/<subscription-id>/services/hostedservices/<cloudservice-name>/deploymentslots/staging

    2. Verwissel uw productie- en faseringssites met behulp van Swap Deployment.

      Voorbeeld: https://management.core.windows.net/<subscription-id>/services/hostedservices/<cloudservice-name>

    3. Uw staging-site verwijderen met uw vorige productie-implementatie

      Voorbeeld: https://management.core.windows.net/<subscription-id>/services/hostedservices/<cloudservice-name>/deploymentslots/staging

Optie 3: Genereer uw eigen computersleutels in web.config en voer een gelijktijdige implementatie uit.

  1. Genereer een nieuw XML-element van de machinesleutel in PowerShell (zie bijlage A).

  2. Werk uw WebConfig bij met de nieuwe computersleutels. Zie de instructies.

  3. Uw cloudservice opnieuw verpakken.

  4. Voer een upgrade-implementatie uit met behulp van het CSCFG-bestand dat de nieuwe computersleutels bevat. De modus moet zijn ingesteld op gelijktijdig, of dit kan ertoe leiden dat uw toepassing een slechte status heeft.

Vrijwaring

De informatie die in dit advies wordt verstrekt, wordt "zoals zodanig" verstrekt zonder enige garantie. Microsoft wijst alle garanties af, hetzij uitdrukkelijk of impliciet, met inbegrip van de garanties van verkoopbaarheid en geschiktheid voor een bepaald doel. In geen geval is Microsoft Corporation of haar leveranciers aansprakelijk voor enige schade, waaronder directe, indirecte, incidentele, gevolgschade, verlies van bedrijfswinst of speciale schade, zelfs als Microsoft Corporation of haar leveranciers op de hoogte zijn gesteld van de mogelijkheid van dergelijke schade. Sommige staten staan de uitsluiting of beperking van aansprakelijkheid voor gevolgschade of incidentele schade niet toe, zodat de voorgaande beperking mogelijk niet van toepassing is.

Revisies

  • V1.0 (8 mei 2018): Advies gepubliceerd.
  • V1.1 (24 mei 2018): Veelgestelde vragen #4 toegevoegd om uit te leggen hoe u permanente gegevens herstelt nadat de gegevens zijn versleuteld met behulp van MachineKey.Encode()/MachineKey.Protect(). Dit is alleen een informatieve wijziging.
  • V1.2 (29 juni 2018): Gewijzigde verwijzingen van azure-gastbesturingssystemen naar Azure Cloud Services