Microsoft Security Advisory 4092731

Uppdatera till algoritmen för maskinnyckelgenerering i Azure Cloud Services

Publicerad: 8 maj 2018 | Uppdaterad 29 juni 2018

Version: 1.2

Sammanfattning

Microsoft släpper den här säkerhetsrekommendationen för att tillhandahålla information om en uppdatering på det sätt som datornycklarna genereras för Azure Cloud Services. Det här scenariot kan påverka kunder som använder Azure Cloud Services-webbroller. Datornycklarna för befintliga distributioner har genererats med otillräcklig entropi och med inaktuella kryptografiska algoritmer.

För att åtgärda det här problemet släppte Microsoft en uppdatering av algoritmen som används för att generera datornycklar i nya Distributioner av Webbroll i Azure Cloud Services, inklusive användning av kryptografiskt stark slumptalsgenerering. Alla befintliga webbroller behåller sina tidigare genererade datornycklar om de inte distribueras på nytt. Med viss detaljerad information kan en angripare gissa datornycklar som skapats av den inaktuella algoritmen. Sårbara datornycklar kan i vissa fall tillåta förbikoppling av säkerhetsfunktioner.

Den här rådgivningen ger vägledning för kunder att identifiera om de påverkas av det här scenariot och vilka, om några, åtgärder de behöver vidta.

Berörda molntjänster

Azure-distributioner som använder webbroller påverkas av det här problemet. Det enda undantaget är om du har angett en egen datornyckel i Web.config i CS-paketet. Azure Worker-roller, virtuella datorer och alla andra Azure-erbjudanden påverkas inte.

Vanliga frågor och svar

1. Hur gör jag för att vet om jag påverkas?

Alla Azure Cloud Service-webbroller påverkas av det här problemet, förutom om du har angett egna datornycklar i Web.config i CS-paketet. Azure Cloud Service Worker-roller, virtuella datorer och alla andra Azure-erbjudanden påverkas inte.

ASP.NET använder datornycklar i flera syften, bland annat:

  • Skydd mot manipulering av visningsdata för webbformulär
  • Generering och validering av sessionscookies för ASP.NET webbformulär
  • Anti-CSRF-token
  • Kryptering med metoderna machinekey.protect och machinekey.unprotect.

2. Finns det några förutsättningar för att åtgärda mitt berörda program?

Ja, om din webbroll har distribuerats med en tillbakadragen version av Azure SDK för .Net kommer den inte att använda den förbättrade algoritmen för generering av maskinnycklar. https://azure.microsoft.com/en-us/downloads/archive-net-downloads/ Referens för versioner som stöds. Om du vill uppgradera till en version som stöds klickar du på länken på den tidigare refererade webbplatsen för att ladda ned och distribuera om projektet med en SDK-version som stöds. När du har verifierat att projektet har distribuerats med ett SDK som stöds följer du de ytterligare stegen i den här rekommendationen.

3. Hur gör jag för att åtgärda mitt berörda program?

För att generera de nya datornycklarna måste du distribuera om .cspkg och .cscfg som en ny molntjänst, distribuera din arbetsbelastning i mellanlagringsplatsen och utföra en växlingsdistribution (VIP-växling) eller mata in dina egna datornycklar och sedan utföra en samtidig uppgradering. En typisk uppdateringsdistributionsåtgärd räcker inte. Följande beskriver alternativen för åtgärder på hög nivå och detaljerade steg beskrivs nedan:

Alternativ 1: Distribuera din arbetsbelastning till en ny molntjänst. Uppdatera CNAME för att peka trafik till din nya molntjänst. När noll trafik går till den gamla webbplatsen kan du ta bort den gamla molntjänsten.

Alternativ 2: Distribuera molntjänsten till mellanlagringsplatsen och utför en växlingsdistribution.

Alternativ 3: Generera egna datornycklar i Web.config och utför en samtidig uppdatering. Detta uppdaterar alla instanser samtidigt och orsakar därför programavbrott.

Vi rekommenderar att du använder alternativ 1 för att undvika stilleståndstid. Vi rekommenderar också att du utför åtgärden under perioder med låg användning, eftersom sessioner kan avbrytas medan datornycklarna ändras.

Obs! IP-adressen för ditt program ändras när du har fått de nya datornycklarna med alternativ 1 och alternativ 2.

4. Jag har använt datornyckeln för att kryptera beständiga data med MachineKey.Encode()/MachineKey.Protect(). Hur gör jag för att återställa data?

Om MachineKey användes för att kryptera data (med MachineKey.Encode()/MachineKey.Protect() ) måste den gamla datornyckeln och algoritmerna som definierats i web.config användas för att dekryptera data ( genom att anropa MachineKey.Decode()/MachineKey.Unprotect() innan du utför åtgärdsstegen. När åtgärdsstegen har slutförts använder alla anrop till MachineKey.Encode()/MachineKey.Protect() och MachineKey.Decode()/MachineKey.Unprotect() den uppdaterade datornyckeln och algoritmerna från web.config.

5. Hur gör jag för att vet att mitt program använder den nya maskinnyckelalgoritmen?

Om du bara har en distribution i molntjänsten räcker det med att kontrollera om du vill se Azure Machine Key-certifikatet på fliken Certifikat i molntjänsten i Azure-hanteringsportalen. Om det här certifikatet finns använder distributionen maskinnyckelalgoritmen.

Om du har två distributioner i molntjänsten (produktion och mellanlagring) måste du fjärrskrivbord till dina webbroller och titta på IIS-konfigurationen. Om du ser maskinnyckelcertifikatet använder du den nya maskinnyckelalgoritmen. Du måste göra den här kontrollen för en webbroll i varje distribution. Om du inte kan ansluta till den virtuella datorn kan du skicka ett supportärende (instruktioner i #7) så kan vårt supportteam hjälpa till att bekräfta om dina distributioner använder den nya datornyckeln.

Azure Certificates

6. Vad är certifikatet "Microsoft Azure Service Management for MachineKey"?

Det här är certifikatet som används för att kryptera datornycklarna tillsammans med den förbättrade algoritmen.

7. Vem hanterar certifikatet "Microsoft Azure Service Management for MachineKey" och vad händer när det upphör att gälla?

Azure hanterar det här certifikatet. Kunder behöver inte bry sig om förfallodatumet för det här certifikatet eftersom det används en gång för att generera de nya datornycklarna med den nya algoritmen. Förfallodatumet kommer inte att orsaka någon inverkan.

8. Kan certifikatet tas bort eller tas bort från den virtuella datorn?

Nej, certifikatet kan inte tas bort.

9. Vad kan jag göra om jag har frågor om åtgärdsstegen?

Skicka ett supportärende under Cloud Services med din standardeskaleringsprocess. Så här eskalerar du i Azure-portalen:

  1. Gå till Hjälp + support i Azure-portalen.
  2. Välj typ av tekniskt problem.
  3. Välj din prenumeration och välj sedan tjänsten Cloud Services (webbroller/arbetsroller) i Tjänster.
  4. Klicka på Nästa , välj MachineKey Certificate Update som problemtyp och fyll sedan i information om supportärendet.

Detaljerade steg för att utföra åtgärden

Alternativ 1: Distribuera om molntjänsten.

  1. Utför en omdistribution via portalen:

    1. Skapa en ny molntjänst med din .cspkg och .cscfg. Se information här.
    2. Uppdatera CName- eller A-posten för att peka trafik till den nya molntjänsten.
    3. Ta bort den gamla molntjänsten när trafiken pekar på den nya molntjänsten.
  2. Utför en omdistribution via PowerShell:

    1. Skapa en ny molntjänst med din .cspkg och .cscfg. Se information här.

      Exempel: New-AzureService -ServiceName "yourServiceName" -Label "MyTestService" -Location "South Central US"

    2. Skapa en ny distribution med .cspkg och .cscfg. Se information här.

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

    3. Uppdatera CName- eller A-posten för att peka trafik till den nya molntjänsten.

    4. Ta bort din tidigare molntjänst som inte har uppdaterade datornycklar när trafiken pekar på den nya molntjänsten. Se information här.

      Exempel: Remove-AzureService -ServiceName "yourOldServiceName"

  3. Utför en omdistribution via Rest API:

    1. Skapa en ny molntjänst. Se information här.

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

    2. Skapa en ny distribution med hjälp av API:et för att skapa distribution. Om du behöver hitta din .cspkg och .cscfg kan du anropa Get-Package API).

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

    3. Ta bort din tidigare molntjänst som inte har uppdaterade datornycklar när trafiken pekar på den nya molntjänsten. Se information här.

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

Alternativ 2: Växla distribution.

Om du använder alternativ 2 måste du ha ett tomt mellanlagringsfack. Om du har en distribution i mellanlagringsplatsen för närvarande kan du ta bort den och sedan följa dessa steg:

  1. Utför växlingsdistributionen via portalen:

    1. Uppdatera molntjänstdistributionen genom att ladda upp .cspkg och .cscfg i mellanlagringsplatsen. Detta innehåller det nya certifikatet för att generera datornycklarna. Se information här.

    2. Byt ut dina produktions- och mellanlagringsplatser. Se information här.

    3. Ta bort mellanlagringsplatsen med din tidigare produktionsdistribution. Se information här

  2. Utför växlingsdistributionen via PowerShell.

    1. Distribuera din cspkg och cscfg i mellanlagringsplatsen. Se information här.

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

    2. Byt ut dina produktions- och mellanlagringsplatser. Se information här.

      Exempel: Move-AzureDeployment -ServiceName "yourServiceName"

    3. Ta bort mellanlagringsplatsen med din tidigare produktionsdistribution.

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

  3. Utför växlingsdistributionen via rest-API:et:

    1. Skapa en ny distribution i mellanlagringsplatsen med hjälp av API:et för att skapa distribution. Om du behöver hitta din .cspkg och .cscfg kan du anropa Get-Package API).

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

    2. Byt ut dina produktions- och mellanlagringsplatser med växlingsdistribution.

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

    3. Ta bort mellanlagringsplatsen med din tidigare produktionsdistribution

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

Alternativ 3: Generera dina egna datornycklar i Web.config och utför en samtidig distribution.

  1. Generera ett nytt XML-element för datornyckeln i PowerShell (se bilaga A).

  2. Uppdatera din WebConfig med de nya datornycklarna. Se instruktioner.

  3. Packa om molntjänsten.

  4. Utför en uppgraderingsdistribution med hjälp av .cscfg-filen som innehåller de nya datornycklarna. Läget måste vara inställt på samtidig, eller så kan det leda till att programmet är i ett feltillstånd.

Friskrivning

Informationen som tillhandahålls i denna rekommendation tillhandahålls "som den är" utan garanti av något slag. Microsoft frånsäger sig alla garantier, antingen uttryckliga eller underförstådda, inklusive garantier för säljbarhet och lämplighet för ett visst syfte. Under inga omständigheter ska Microsoft Corporation eller dess leverantörer vara ansvariga för eventuella skador, inklusive direkta, indirekta, tillfälliga, följdskador, förlust av företagsvinster eller särskilda skador, även om Microsoft Corporation eller dess leverantörer har informerats om risken för sådana skador. Vissa stater tillåter inte undantag eller begränsning av ansvar för följdskador eller oförutsedda skador, så den föregående begränsningen kanske inte gäller.

Revideringar

  • V1.0 (8 maj 2018): Rådgivning publicerad.
  • V1.1 (24 maj 2018): Vanliga frågor och svar nr 4 har lagts till för att förklara hur du återställer beständiga data när data har krypterats med MachineKey.Encode()/MachineKey.Protect(). Detta är endast en informationsändring.
  • V1.2 (29 juni 2018): Ändrade referenser för Azure Guest OS till Azure Cloud Services