Udostępnij za pośrednictwem


Porady dotyczące zabezpieczeń firmy Microsoft 4092731

Aktualizacja algorytmu generowania kluczy maszyny w usłudze Azure Cloud Services

Opublikowano: 8 maja 2018 r. | Zaktualizowano 29 czerwca 2018 r.

Wersja: 1.2

Streszczenie

Firma Microsoft publikuje ten biuletyn zabezpieczeń, aby udostępnić informacje dotyczące aktualizacji w sposób generowania kluczy maszynowych dla usług Azure Cloud Services. Ten scenariusz może mieć wpływ na klientów korzystających z ról sieci Web usług Azure Cloud Services. Klucze maszyn w istniejących wdrożeniach zostały wygenerowane z niewystarczającą entropią i przy użyciu przestarzałych algorytmów kryptograficznych.

Aby rozwiązać ten problem, firma Microsoft opublikowała aktualizację algorytmu używanego do generowania kluczy maszynowych we nowych wdrożeniach roli sieci Web usług Azure Cloud Services, w tym użycia kryptograficznie silnego generowania liczb losowych. Wszystkie istniejące role sieci Web zachowają wcześniej wygenerowane klucze maszyny, chyba że zostaną ponownie wdrożone. Biorąc pod uwagę pewne szczegółowe informacje, osoba atakująca może mieć możliwość odgadnięcia kluczy maszyny utworzonych przez przestarzały algorytm. W niektórych okolicznościach mogą zezwalać na obejście funkcji zabezpieczeń.

Ten poradnik zawiera wskazówki dla klientów, aby określić, czy mają one wpływ na ten scenariusz i co, jeśli w ogóle, działania, które muszą podjąć.

Usługi w chmurze, których dotyczy problem

Ten problem ma wpływ na wdrożenia platformy Azure korzystające z ról sieci Web. Jedynym wyjątkiem jest to, że w pakiecie CS podano własny klucz komputera w pliku Web.config. Nie ma to wpływu na role procesów roboczych platformy Azure, maszyny wirtualne i wszystkie inne oferty platformy Azure.

Często zadawane pytania

1. Jak mogę wiedzieć, czy mam to wpływ?

Ten problem ma wpływ na wszystkie role sieci Web usługi w chmurze platformy Azure, z wyjątkiem sytuacji, gdy w pakiecie CS podano własne klucze maszyny. Role procesu roboczego usługi w chmurze platformy Azure, maszyny wirtualne i wszystkie inne oferty platformy Azure nie mają wpływu.

ASP.NET używa kluczy maszynowych do kilku celów, w tym:

  • Ochrona przed manipulowaniem danymi widoku formularza internetowego
  • Generowanie i walidacja plików cookie sesji formularza internetowego ASP.NET
  • Tokeny anty-CSRF
  • Szyfrowanie przy użyciu metod machinekey.protect i machinekey.unprotect.

2. Czy istnieją jakieś wymagania wstępne dotyczące naprawiania aplikacji, której dotyczy problem?

Tak, jeśli twoja rola sieci Web została wdrożona z wycofaną wersją zestawu Azure SDK dla platformy .Net, nie będzie używać rozszerzonego algorytmu generowania kluczy maszyny. Dokumentacja https://azure.microsoft.com/en-us/downloads/archive-net-downloads/ obsługiwanych wersji. Aby przeprowadzić uaktualnienie do obsługiwanej wersji, kliknij link w wcześniej przywoływanej witrynie, aby pobrać i ponownie wdrożyć projekt przy użyciu obsługiwanej wersji zestawu SDK. Po sprawdzeniu, czy projekt został wdrożony przy użyciu obsługiwanego zestawu SDK, wykonaj dodatkowe kroki opisane w tym poradniku.

3. Jak mogę naprawić moją aplikację, której dotyczy problem?

Aby wygenerować nowe klucze maszyny, należy ponownie wdrożyć pliki cspkg i cscfg jako nową usługę w chmurze, wdrożyć obciążenie w miejscu przejściowym i przeprowadzić wdrożenie wymiany (VIP Swap) lub wstrzyknąć własne klucze maszyny, a następnie przeprowadzić jednoczesne uaktualnienie. Typowa operacja wdrażania aktualizacji nie będzie wystarczająca. Poniżej opisano opcje ograniczania ryzyka wysokiego poziomu i szczegółowe kroki opisane poniżej:

Opcja 1. Wdrażanie obciążenia w nowej usłudze w chmurze. Zaktualizuj rekord CNAME, aby wskazywał ruch do nowej usługi w chmurze. Jeśli ruch do starej witryny będzie zerowy, możesz usunąć starą usługę w chmurze.

Opcja 2. Wdróż usługę w chmurze w miejscu przejściowym i przeprowadź wdrożenie zamiany.

Opcja 3. Generowanie własnych kluczy maszyn w pliku Web.config i przeprowadzanie jednoczesnej aktualizacji. Spowoduje to zaktualizowanie wszystkich wystąpień jednocześnie i w związku z tym spowoduje przestój aplikacji.

Zalecamy użycie opcji 1 , aby uniknąć przestojów. Zalecamy również ograniczenie ryzyka w okresach niskiego wykorzystania, ponieważ sesje mogą być zakłócane podczas zmiany kluczy maszyny.

Uwaga: adres IP aplikacji zmieni się po uzyskaniu nowych kluczy maszyny z opcją 1 i opcją 2.

4. Klucz maszyny został użyty do szyfrowania trwałych danych przy użyciu metody MachineKey.Encode()/MachineKey.Protect(). Jak mogę odzyskać dane?

Jeśli klucz MachineKey został użyty do szyfrowania danych (przy użyciu metody MachineKey.Encode()/MachineKey.Protect(), przed wykonaniem kroków ograniczania ryzyka należy użyć starego klucza maszyny i algorytmów zdefiniowanych w pliku web.config (przy użyciu metody MachineKey.Encode()/MachineKey.Unprotect(). Po wykonaniu kroków ograniczania ryzyka wszystkie wywołania metody MachineKey.Encode()/MachineKey.Protect() i MachineKey.Decode()/MachineKey.Unprotect() będą używać zaktualizowanego klucza maszyny i algorytmów z pliku web.config.

5. Jak mogę wiedzieć, że moja aplikacja używa nowego algorytmu klucza maszyny?

Jeśli masz tylko jedno wdrożenie w usłudze w chmurze, sprawdź, czy na karcie Certyfikat usługi w chmurze na karcie Certyfikat usługi w chmurze w portalu zarządzania Azure wystarczy. Jeśli ten certyfikat jest obecny, wdrożenie korzysta z algorytmu klucza maszyny.

Jeśli masz dwa wdrożenia w usłudze w chmurze (produkcyjne i przejściowe), musisz połączyć pulpit zdalny z rolami internetowymi i przyjrzeć się konfiguracji usług IIS. Jeśli widzisz certyfikat klucza maszyny, używasz nowego algorytmu klucza maszyny. Należy to sprawdzić pod kątem jednej roli sieci Web w każdym wdrożeniu. Jeśli nie możesz nawiązać połączenia z maszyną wirtualną, utwórz bilet pomocy technicznej (instrukcje w pliku 7), a nasz zespół pomocy technicznej może pomóc potwierdzić, czy wdrożenia korzystają z nowego klucza maszyny.

Azure Certificates

6. Jaki jest certyfikat "Microsoft Azure Service Management for MachineKey"?

Jest to certyfikat używany do szyfrowania kluczy maszyny razem z rozszerzonym algorytmem.

7. KtoTo zarządza certyfikatem "Microsoft Azure Service Management for MachineKey" i co się stanie po wygaśnięciu?

Platforma Azure zarządza tym certyfikatem. Klienci nie muszą być zaniepokojeni datą wygaśnięcia tego certyfikatu, ponieważ jest on używany raz do generowania nowych kluczy maszyn za pomocą nowego algorytmu. Data wygaśnięcia nie spowoduje żadnego wpływu.

8. Czy można usunąć lub usunąć certyfikat z maszyny wirtualnej?

Nie, nie można usunąć certyfikatu.

9. Jeśli mam pytania dotyczące kroków ograniczania ryzyka, co mogę zrobić?

Prześlij zgłoszenie do pomocy technicznej w ramach usług Cloud Services przy użyciu standardowego procesu eskalacji. Aby eskalować w witrynie Azure Portal, wykonaj następujące kroki:

  1. Przejdź do pozycji Pomoc i obsługa techniczna w witrynie Azure Portal.
  2. Wybierz typ problemu technicznego.
  3. Wybierz subskrypcję, a następnie wybierz usługę Cloud Services (role sieci Web/role procesu roboczego) w obszarze Usługi.
  4. Kliknij przycisk Dalej , wybierz pozycję MachineKey Certificate Update jako typ problemu, a następnie wypełnij szczegóły biletu pomocy technicznej.

Szczegółowe kroki umożliwiające ograniczenie ryzyka

Opcja 1. Ponowne wdrożenie usługi w chmurze.

  1. Wykonaj ponowne wdrożenie za pośrednictwem portalu:

    1. Utwórz nową usługę w chmurze przy użyciu plików cspkg i cscfg. Zobacz szczegóły tutaj.
    2. Zaktualizuj rekord CName lub A, aby wskazywał ruch do nowej usługi w chmurze.
    3. Usuń starą usługę w chmurze po tym, jak ruch wskazuje nową usługę w chmurze.
  2. Wykonaj ponowne wdrożenie za pomocą programu PowerShell:

    1. Utwórz nową usługę w chmurze przy użyciu plików cspkg i cscfg. Zobacz szczegóły tutaj.

      Przykład: New-AzureService -ServiceName "yourServiceName" -Label "MyTestService" -Location "South Central US"

    2. Utwórz nowe wdrożenie przy użyciu plików cspkg i cscfg. Zobacz szczegóły tutaj.

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

    3. Zaktualizuj rekord CName lub A, aby wskazywał ruch do nowej usługi w chmurze.

    4. Usuń poprzednią usługę w chmurze, która nie zaktualizowała kluczy maszyny po tym, jak ruch wskazuje nową usługę w chmurze. Zobacz szczegóły tutaj.

      Przykład: Remove-AzureService -ServiceName "yourOldServiceName"

  3. Wykonaj ponowne wdrożenie za pomocą interfejsu API REST:

    1. Utwórz nową usługę w chmurze. Zobacz szczegóły tutaj.

      Przykład: https://management.core.windows.net/<subscription-id>/services/hostedservices

    2. Utwórz nowe wdrożenie przy użyciu interfejsu API tworzenia wdrożenia. Jeśli musisz znaleźć pliki cspkg i cscfg, możesz wywołać interfejs API get-package).

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

    3. Usuń poprzednią usługę w chmurze, która nie zaktualizowała kluczy maszyny po tym, jak ruch wskazuje nową usługę w chmurze. Zobacz szczegóły tutaj.

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

Opcja 2. Zamień wdrożenie.

Użycie opcji 2 wymaga pustego miejsca przejściowego. Jeśli masz obecnie wdrożenie w miejscu przejściowym, możesz go usunąć, a następnie wykonać następujące kroki:

  1. Wykonaj wdrożenie zamiany za pośrednictwem portalu:

    1. Zaktualizuj wdrożenie usługi w chmurze, przekazując pliki cspkg i cscfg w miejscu przejściowym. Będzie to zawierać nowy certyfikat do wygenerowania kluczy maszyny. Zobacz szczegóły tutaj.

    2. Zamień miejsca produkcyjne i przejściowe. Zobacz szczegóły tutaj.

    3. Usuń miejsce przejściowe z poprzednim wdrożeniem produkcyjnym. Zobacz szczegóły tutaj

  2. Przeprowadź wdrożenie zamiany za pomocą programu PowerShell.

    1. Wdróż pliki cspkg i cscfg w miejscu przejściowym. Zobacz szczegóły tutaj.

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

    2. Zamień miejsca produkcyjne i przejściowe. Zobacz szczegóły tutaj.

      Przykład: Move-AzureDeployment -ServiceName "yourServiceName"

    3. Usuń miejsce przejściowe z poprzednim wdrożeniem produkcyjnym.

      Przykład: Remove-AzureDeployment -ServiceName "yourServiceName" -Slot "Staging"

  3. Wykonaj wdrożenie zamiany za pośrednictwem interfejsu API REST:

    1. Utwórz nowe wdrożenie w miejscu przejściowym przy użyciu interfejsu API tworzenia wdrożenia. Jeśli musisz znaleźć pliki cspkg i cscfg, możesz wywołać interfejs API get-package).

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

    2. Zamień miejsca produkcyjne i przejściowe przy użyciu wdrożenia zamiany.

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

    3. Usuwanie miejsca przejściowego przy użyciu poprzedniego wdrożenia produkcyjnego

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

Opcja 3. Wygeneruj własne klucze maszyn w pliku Web.config i wykonaj jednoczesne wdrożenie.

  1. Generowanie nowego elementu XML klucza maszyny w programie PowerShell (zobacz dodatek A).

  2. Zaktualizuj aplikację WebConfig przy użyciu nowych kluczy maszyny. Zobacz instrukcje.

  3. Ponowne spakowanie usługi w chmurze.

  4. Przeprowadź wdrożenie uaktualnienia przy użyciu pliku cscfg zawierającego nowe klucze maszyny. Tryb musi być ustawiony na równoczesne lub może to spowodować, że aplikacja będzie w złej kondycji.

Zastrzeżenie

Informacje podane w tym poradniku są dostarczane "tak, jak jest" bez gwarancji jakiegokolwiek rodzaju. Firma Microsoft nie udziela wszelkich gwarancji, wyraźnych lub domniemanych, w tym gwarancji możliwości handlowych i przydatności do określonego celu. W żadnym wypadku Firma Microsoft Corporation lub jej dostawcy nie ponosi odpowiedzialności za wszelkie szkody, w tym bezpośrednie, pośrednie, przypadkowe, wtórne, utratę zysków biznesowych lub szkody specjalne, nawet jeśli firma Microsoft Corporation lub jej dostawcy zostali poinformowani o możliwości takich szkód. Niektóre państwa nie zezwalają na wyłączenie lub ograniczenie odpowiedzialności za szkody wtórne lub przypadkowe, więc powyższe ograniczenie może nie mieć zastosowania.

Poprawki

  • Wersja 1.0 (8 maja 2018 r.): opublikowano biuletyn.
  • Wersja 1.1 (24 maja 2018 r.): Dodano często zadawane pytania nr 4, aby wyjaśnić, jak odzyskać trwałe dane po zaszyfrowaniu danych przy użyciu funkcji MachineKey.Encode()/MachineKey.Protect(). Jest to tylko zmiana informacyjna.
  • Wersja 1.2 (29 czerwca 2018 r.): zmieniono odwołania systemu operacyjnego gościa platformy Azure do usług Azure Cloud Services