다음을 통해 공유


Microsoft 보안 권고 4092731

Azure Cloud Services Machine 키 생성 알고리즘으로 업데이트

게시 날짜: 2018년 5월 8일 | 업데이트 날짜: 2018년 6월 29일

버전: 1.2

요약

Microsoft는 Azure Cloud Services에 대해 머신 키를 생성하는 방식으로 업데이트와 관련된 정보를 제공하기 위해 이 보안 권고를 릴리스합니다. 이 시나리오는 Azure Cloud Services 웹 역할을 사용하는 고객에게 영향을 줄 수 있습니다. 기존 배포의 컴퓨터 키는 엔트로피가 부족하고 사용되지 않는 암호화 알고리즘을 사용하여 생성되었습니다.

이 문제를 해결하기 위해 Microsoft는 암호화된 강력한 난수 생성을 포함하여 새 Azure Cloud Services 웹 역할 배포에서 머신 키를 생성하는 데 사용되는 알고리즘에 대한 업데이트를 릴리스했습니다. 다시 배포하지 않는 한 모든 기존 웹 역할은 이전에 생성된 컴퓨터 키를 유지합니다. 특정 세부 정보를 감안할 때 공격자는 사용되지 않는 알고리즘에서 만든 컴퓨터 키를 추측할 수 있습니다. 취약한 컴퓨터 키는 경우에 따라 보안 기능 바이패스를 허용할 수 있습니다.

이 권고는 고객이 이 시나리오의 영향을 받는지 여부와 수행해야 하는 작업(있는 경우)을 식별하기 위한 지침을 제공합니다.

영향을 받는 클라우드 서비스

웹 역할을 사용하는 Azure 배포는 이 문제의 영향을 받습니다. 유일한 예외는 CS 패키지의 Web.config에 사용자 고유의 컴퓨터 키를 제공한 경우입니다. Azure 작업자 역할, Virtual Machines 및 기타 모든 Azure 제품은 영향을 받지 않습니다.

자주 묻는 질문

1. 영향을 받는지 어떻게 할까요? 알 수 있나요?

CS 패키지의 Web.config에 사용자 고유의 컴퓨터 키를 제공한 경우를 제외하고 모든 Azure Cloud Service 웹 역할은 이 문제의 영향을 받습니다. Azure Cloud Service Worker 역할, Virtual Machines 및 기타 모든 Azure 제품은 영향을 받지 않습니다.

ASP.NET 다음을 비롯한 여러 용도로 컴퓨터 키를 사용합니다.

  • 웹 양식 뷰스테이트 데이터로 변조 방지
  • ASP.NET Web Form 세션 쿠키 생성 및 유효성 검사
  • CSRF 방지 토큰
  • machinekey.protect 및 machinekey.unprotect 메서드를 사용하여 암호화합니다.

2. 영향을 받는 애플리케이션을 수정하기 위한 필수 구성 요소가 있나요?

예, 웹 역할이 .Net용 Azure SDK의 사용 중지된 버전으로 배포된 경우 향상된 컴퓨터 키 생성 알고리즘을 사용하지 않습니다. 지원되는 버전을 참조 https://azure.microsoft.com/en-us/downloads/archive-net-downloads/ 하세요. 지원되는 버전으로 업그레이드하려면 이전에 참조한 사이트의 링크를 클릭하여 지원되는 SDK 버전으로 프로젝트를 다운로드하고 다시 배포하세요. 프로젝트가 지원되는 SDK를 사용하여 배포되었는지 확인했으면 이 권고의 추가 단계를 따릅니다.

3. 영향을 받는 애플리케이션을 수정할 어떻게 할까요? 있나요?

새 머신 키를 생성하려면 .cspkg 및 .cscfg를 새 클라우드 서비스로 다시 배포하고, 스테이징 슬롯에 워크로드를 배포하고, 스왑 배포(VIP 스왑)를 수행하거나, 사용자 고유의 컴퓨터 키를 삽입한 다음, 동시 업그레이드를 수행해야 합니다. 일반적인 업데이트 배포 작업으로는 충분하지 않습니다. 다음은 개략적인 완화 옵션에 대해 설명하고 자세한 단계는 아래에 설명되어 있습니다.

옵션 1: 새 클라우드 서비스에 워크로드를 배포합니다. 새 클라우드 서비스로 트래픽을 가리키도록 CNAME을 업데이트합니다. 트래픽이 0이면 이전 사이트로 이동할 때 이전 클라우드 서비스를 삭제할 수 있습니다.

옵션 2: 스테이징 슬롯에 클라우드 서비스를 배포하고 교환 배포를 수행합니다.

옵션 3: Web.config에서 사용자 고유의 컴퓨터 키를 생성하고 동시 업데이트를 수행합니다. 이렇게 하면 모든 인스턴스가 한 번에 업데이트되므로 애플리케이션 가동 중지 시간이 발생합니다.

가동 중지 시간을 방지하려면 옵션 1을 사용하는 것이 좋습니다. 또한 컴퓨터 키가 변경되는 동안 세션이 중단될 수 있으므로 사용률이 낮은 기간 동안 완화를 수행하는 것이 좋습니다.

참고: 옵션 1 및 옵션 2를 사용하여 새 컴퓨터 키를 가져오면 애플리케이션의 IP 주소가 변경됩니다.

4. MachineKey.Encode()/MachineKey.Protect()를 사용하여 영구 데이터를 암호화하기 위해 컴퓨터 키를 사용했습니다. 데이터를 복구할 어떻게 할까요? 있나요?

MachineKey가 데이터를 암호화하는 데 사용된 경우(MachineKey.Encode()/MachineKey.Protect() 사용) 완화 단계를 수행하기 전에 web.config에 정의된 이전 컴퓨터 키와 알고리즘을 사용하여 데이터를 해독해야 합니다(MachineKey.Decode()/MachineKey.Unprotect()를 각각 호출하여). 완화 단계가 완료되면 MachineKey.Encode()/MachineKey.Protect() 및 MachineKey.Decode()/MachineKey.Unprotect()에 대한 모든 호출은 web.config에서 업데이트된 컴퓨터 키 및 알고리즘을 사용합니다.

5. 어떻게 할까요? 내 애플리케이션이 새 컴퓨터 키 알고리즘을 사용하고 있는지 알고 있나요?

클라우드 서비스에 배포가 하나뿐인 경우 Azure 관리 포털에서 클라우드 서비스의 인증서 탭에서 Azure Machine Key 인증서를 보려면 검사 충분합니다. 이 인증서가 있는 경우 배포에서 컴퓨터 키 알고리즘을 사용합니다.

클라우드 서비스(프로덕션 및 스테이징)에 두 개의 배포가 있는 경우 웹 역할에 원격 데스크톱을 설치하고 IIS 구성을 확인해야 합니다. 컴퓨터 키 인증서가 표시되면 새 컴퓨터 키 알고리즘을 사용하고 있습니다. 각 배포에서 하나의 웹 역할에 대해 이 검사 수행해야 합니다. VM에 연결할 수 없는 경우 지원 티켓(#7의 지침)을 제출하세요. 지원 팀은 배포가 새 컴퓨터 키를 사용하고 있는지 확인하는 데 도움을 줄 수 있습니다.

Azure Certificates

6. "MachineKey용 Microsoft Azure 서비스 관리" 인증서란?

향상된 알고리즘과 함께 컴퓨터 키를 암호화하는 데 사용되는 인증서입니다.

7. "MachineKey용 Microsoft Azure 서비스 관리" 인증서를 관리하는 사람은 누구이며 만료되면 어떻게 되나요?

Azure는 이 인증서를 관리합니다. 고객은 새 알고리즘을 사용하여 새 컴퓨터 키를 생성하는 데 한 번 사용되므로 이 인증서의 만료 날짜에 대해 걱정할 필요가 없습니다. 만료 날짜는 영향을 주지 않습니다.

8. VM에서 인증서를 삭제하거나 제거할 수 있나요?

아니요, 인증서를 제거할 수 없습니다.

9. 완화 단계에 대한 질문이 있는 경우 어떻게 해야 하나요?

표준 에스컬레이션 프로세스를 사용하여 Cloud Services에서 지원 사례를 제출하세요. Azure Portal에서 에스컬레이션하려면 다음 단계를 수행합니다.

  1. Azure Portal에서 도움말 + 지원으로 이동합니다.
  2. 기술 문제 유형을 선택합니다.
  3. 구독을 선택한 다음, 서비스에서 Cloud Services(웹 역할/작업자 역할) 서비스를 선택합니다.
  4. 다음을 클릭하고 문제 유형으로 MachineKey 인증서 업데이트를 선택한 다음 지원 티켓의 세부 정보를 입력합니다.

완화를 수행하는 자세한 단계

옵션 1: 클라우드 서비스를 다시 배포합니다.

  1. 포털을 통해 재배포를 수행합니다.

    1. .cspkg 및 .cscfg를 사용하여 새 클라우드 서비스를 만듭니다. 자세한 내용은 여기 참조.
    2. 새 클라우드 서비스로 트래픽을 가리키도록 CName 또는 A 레코드를 업데이트합니다.
    3. 트래픽이 새 클라우드 서비스를 가리키면 이전 클라우드 서비스를 삭제합니다.
  2. PowerShell을 통해 재배포를 수행합니다.

    1. .cspkg 및 .cscfg를 사용하여 새 클라우드 서비스를 만듭니다. 자세한 내용은 여기 참조.

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

    2. .cspkg 및 .cscfg를 사용하여 새 배포를 만듭니다. 자세한 내용은 여기 참조.

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

    3. 새 클라우드 서비스로 트래픽을 가리키도록 CName 또는 A 레코드를 업데이트합니다.

    4. 트래픽이 새 클라우드 서비스를 가리킨 후 컴퓨터 키를 업데이트하지 않은 이전 클라우드 서비스를 삭제합니다. 자세한 내용은 여기 참조.

      예: Remove-AzureService -ServiceName "yourOldServiceName"

  3. Rest API를 통해 재배포를 수행합니다.

    1. 새 클라우드 서비스를 만듭니다. 자세한 내용은 여기 참조.

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

    2. 배포 만들기 API사용하여 새 배포를 만듭니다. .cspkg 및 .cscfg를 찾아야 하는 경우 Get-Package API를 호출할 수 있습니다).

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

    3. 트래픽이 새 클라우드 서비스를 가리킨 후 컴퓨터 키를 업데이트하지 않은 이전 클라우드 서비스를 삭제합니다. 자세한 내용은 여기 참조.

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

옵션 2: 배포 교환

옵션 2를 사용하려면 빈 스테이징 슬롯이 있어야 합니다. 현재 스테이징 슬롯에 배포가 있는 경우 삭제한 다음 다음 단계를 수행할 수 있습니다.

  1. 포털을 통해 교환 배포를 수행합니다.

    1. 스테이징 슬롯에 .cspkg 및 .cscfg를 업로드하여 클라우드 서비스 배포를 업데이트합니다. 여기에는 컴퓨터 키를 생성하는 새 인증서가 포함됩니다. 자세한 내용은 여기 참조.

    2. 프로덕션 슬롯과 스테이징 슬롯을 바꿉니다. 자세한 내용은 여기 참조.

    3. 이전 프로덕션 배포를 사용하여 스테이징 슬롯을 삭제합니다. 자세한 내용은 여기를 참조하세요.

  2. PowerShell을 통해 교환 배포를 수행합니다.

    1. 스테이징 슬롯에 cspkg 및 cscfg를 배포합니다. 자세한 내용은 여기 참조.

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

    2. 프로덕션 슬롯과 스테이징 슬롯을 바꿉니다. 자세한 내용은 여기 참조.

      예: Move-AzureDeployment -ServiceName "yourServiceName"

    3. 이전 프로덕션 배포를 사용하여 스테이징 슬롯을 삭제합니다.

      예: Remove-AzureDeployment -ServiceName "yourServiceName" -슬롯 "스테이징"

  3. Rest API를 통해 교환 배포를 수행합니다.

    1. 배포 만들기 API를 사용하여 스테이징 슬롯에 새 배포를 만듭니다. .cspkg 및 .cscfg를 찾아야 하는 경우 Get-Package API를 호출할 수 있습니다).

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

    2. 스왑 배포를 사용하여 프로덕션 및 스테이징 슬롯을 교환합니다.

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

    3. 이전 프로덕션 배포를 사용하여 스테이징 슬롯 삭제

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

옵션 3: Web.config에서 사용자 고유의 컴퓨터 키를 생성하고 동시 배포를 수행합니다.

  1. PowerShell에서 새 컴퓨터 키 XML 요소를 생성합니다(부록 A 참조).

  2. 새 컴퓨터 키로 WebConfig를 업데이트합니다. 지침을 참조하세요.

  3. 클라우드 서비스를 다시 패키지합니다.

  4. 새 컴퓨터 키가 포함된 .cscfg 파일을 사용하여 업그레이드 배포를 수행합니다. 모드를 동시에 설정해야 합니다. 그렇지 않으면 애플리케이션이 비정상 상태가 될 수 있습니다.

부인

이 권고에 제공된 정보는 어떠한 종류의 보증도 없이 "있는 그대로" 제공됩니다. Microsoft는 특정 목적에 대한 상품성 및 적합성에 대한 보증을 포함하여 명시적이거나 묵시적인 모든 보증을 부인합니다. 어떠한 경우에도 Microsoft Corporation 또는 해당 공급업체는 Microsoft Corporation 또는 공급업체가 이러한 손해의 가능성을 통보한 경우에도 직접, 간접, 부수적, 결과적, 비즈니스 이익 손실 또는 특별 손해를 포함한 모든 손해에 대해 책임을 지지 않습니다. 일부 주에서는 결과적 또는 부수적 손해에 대한 책임의 배제 또는 제한을 허용하지 않으므로 앞에서 설명한 제한이 적용되지 않을 수 있습니다.

수정 내용

  • V1.0(2018년 5월 8일): 공지 게시됨.
  • V1.1(2018년 5월 24일): MachineKey.Encode()/MachineKey.Protect()를 사용하여 데이터를 암호화한 후 영구 데이터를 복구하는 방법을 설명하는 FAQ #4가 추가되었습니다. 이는 정보 변경에만 해당합니다.
  • V1.2(2018년 6월 29일): Azure 게스트 OS의 참조를 Azure Cloud Services로 변경