Azure App Service에서 하위 도메인 인수 방지

하위 도메인 인수는 정기적으로 많은 리소스를 만들고 삭제하는 조직에 일반적인 위협입니다. 프로비전 해제된 Azure 리소스를 가리키는 DNS 레코드가 있는 경우 하위 도메인 인수가 발생할 수 있습니다. 이러한 DNS 레코드는 "dangling DNS" 레코드라고도 합니다. 하위 도메인 인수를 사용하면 악의적인 행위자가 조직의 도메인에 대한 트래픽을 악의적인 활동을 수행하는 사이트로 리디렉션할 수 있습니다.

하위 도메인 인수의 위험은 다음과 같습니다.

  • 하위 도메인의 콘텐츠에 대한 제어 손실
  • 의심하지 않는 방문자로부터 쿠키 수확
  • 피싱 캠페인
  • XSS, CSRF 또는 CORS 바이패스와 같은 클래식 공격의 추가 위험

하위 도메인 인수에 대한 자세한 내용은 현수 DNS 항목 방지 및 하위 도메인 인수 방지를 참조하세요.

Azure App Service 하위 도메인 인수를 방지하기 위해 이름 예약, 도메인 확인 토큰보안 고유 기본 호스트 이름을 제공합니다.

하위 도메인 인수로부터 App Service 리소스를 보호하는 가장 효과적인 방법은 보안 고유 기본 호스트 이름을 사용하는 것입니다. 이 기능은 일반적으로 Web Apps, Function Apps 및 Logic Apps(표준)에 사용할 수 있습니다.

보안 고유 기본 호스트 이름을 사용하도록 설정하면 앱은 임의 해시 및 지역 식별자를 포함하는 기본 호스트 이름을 받아 조직에 고유하게 만듭니다. 이 형식을 사용하면 조직 외부의 누구도 동일한 기본 호스트 이름으로 리소스를 만들 수 없으므로 현수 DNS 항목을 통해 하위 도메인이 인수될 위험이 없습니다.

작동 방식

기존 App Service 리소스는 전역적으로 예측 가능한 기본 호스트 이름 형식을 사용합니다.

전역 (원본) 고유(신규)
기본 호스트 이름 <AppName>.azurewebsites.net <AppName>-<Hash>.<Region>.azurewebsites.net
SCM 엔드포인트 <AppName>.scm.azurewebsites.net <AppName>-<Hash>.scm.<Region>.azurewebsites.net

예를 들어 미국 동부에 배포된 웹 contoso 앱은 다음을 수신할 수 있습니다.

contoso-a6gqaeashthkhkeu.eastus-01.azurewebsites.net

16자 해시는 구성 가능한 범위 내에서 결정적이므로 필요할 때 환경 간에 일관된 호스트 이름을 보장할 수 있습니다.

해시 범위 옵션

고유한 기본 호스트 이름을 사용하여 리소스를 만들 때 해시 생성 방법을 결정하는 범위를 선택합니다.

Scope Description
테넌트 재사용 Microsoft Entra 테넌트의 모든 구독에서 동일한 앱 이름에는 동일한 해시가 적용됩니다. 동일한 테넌트 내의 구독 간에 리소스를 다시 배포할 때 사용합니다.
구독 재사용 동일한 구독 내의 동일한 앱 이름에 대해 동일한 해시입니다.
리소스 그룹 재사용 동일한 리소스 그룹 내의 동일한 앱 이름에 대해 동일한 해시입니다.
재사용 안 하세요. 매번 고유한 해시입니다. 최대 격리.

Tip

테스트 구독에서 동일한 테넌트 아래의 프로덕션 구독에 이르기까지 환경 간에 리소스를 정기적으로 다시 배포하는 경우 테넌트 재사용 을 사용하여 호스트 이름이 구독 간에 일관되게 유지되도록 합니다.

배포 슬롯

배포 슬롯은 프로덕션 사이트와 동일한 형식을 따르지만 각 슬롯은 고유한 해시를 받습니다.

기본 호스트 이름 슬롯 호스트 이름
형식 <AppName>-<Hash>.<Region>.azurewebsites.net <AppName>-<SlotName>-<Hash>.<Region>.azurewebsites.net

슬롯은 항상 프로덕션 사이트와 동일한 범위로 만들어집니다.

사용하도록 설정하는 방법

Azure 포털, Azure CLI, ARM 템플릿 또는 REST API를 통해 새 리소스를 만들 때 보안 고유 기본 호스트 이름을 사용하도록 설정할 수 있습니다. 이 기능은 리소스를 만드는 동안에만 사용하도록 설정할 수 있습니다. 기존 리소스에는 소급 적용할 수 없습니다.

새 리소스를 --domain-name-scope 만들 때 매개 변수를 사용하여 보안 고유 기본 호스트 이름을 사용하도록 설정합니다.

리소스 유형 Command 참조
Web Apps az webapp create --name <AppName> --resource-group <ResourceGroup> --plan <AppServicePlan> --domain-name-scope TenantReuse az 웹앱 생성
Function Apps az functionapp create --name <AppName> --resource-group <ResourceGroup> --storage-account <StorageAccount> --consumption-plan-location <Region> --domain-name-scope TenantReuse az functionapp create
Logic Apps(표준) az logicapp create --name <AppName> --resource-group <ResourceGroup> --storage-account <StorageAccount> --domain-name-scope TenantReuse az logicapp create

매개 변수는 --domain-name-scope 다음 값을 NoReuseResourceGroupReuseSubscriptionReuseTenantReuse허용합니다.

기존 리소스 마이그레이션

이 기능은 생성 시에만 사용하도록 설정할 수 있으므로 기존 리소스에 대한 두 가지 옵션이 있습니다.

  • 보안 고유 기본 호스트 이름을 사용하도록 설정된 새 앱에 기존 앱을 복제합니다.
  • 보안 고유 기본 호스트 이름을 사용하도록 설정된 새 앱으로 백업에서 복원합니다.

두 옵션 모두 Azure 포털에서 사용할 수 있습니다.

왜 지금 이것을 채택하는가?

보안 고유 기본 호스트 이름은 기본적으로 보호를 제공합니다. 지속적인 DNS 위생 및 수동 개입이 필요한 다른 완화 전략과 달리 이 방법은 호스트 이름 구조에 직접 보안을 구축합니다. 사용하도록 설정된 경우:

  • 외부 행위자가 기본 호스트 이름을 다시 만들 수 없습니다.
  • 매달린 DNS 항목은 하위 도메인 인수에 악용할 수 없습니다.
  • 생성 시 기능을 사용하도록 설정하는 것 외에는 추가 구성 단계가 필요하지 않습니다.

모든 새 App Service 배포에 대해 보안 고유 기본 호스트 이름을 사용하도록 설정하는 것이 좋습니다.

메모

호스트 이름(예 eastus-01: )의 지역 식별자는 향후 배포에 서로 다른 숫자 접미사를 사용할 수 있습니다. 정확한 지역 번호 조합에 대한 하드 종속성을 사용하지 마세요.

App Service에서 하위 도메인 인수를 방지하는 방법

App Service 앱 또는 ASE(App Service Environment)를 삭제하면 해당 DNS는 원래 DNS를 소유한 구독의 테넌트에 속한 구독을 제외하고 재사용할 수 없습니다. 따라서 고객은 해당 DNS에 대한 연결 또는 포인터를 정리하거나 동일한 이름의 리소스를 다시 만들어 Azure에서 DNS를 회수할 시간이 있습니다. 이 동작은 기본적으로 Azure App Service for *.azurewebsites.net*.appserviceenvironment.net 리소스에서 사용하도록 설정되므로 고객 구성이 필요하지 않습니다.

예제 시나리오

구독 A 및 구독 B 는 테넌트 AB에 속하는 유일한 구독입니다. 구독 A에는 DNS 이름이 있는 App Service 웹앱 test.azurewebsites.net가 포함되어 있습니다. 앱을 삭제하면 구독 A 또는 Btest.azurewebsites.net라는 웹앱을 만들어 DNS 이름을 즉시 다시 사용할 수 있습니다. 다른 구독은 리소스 삭제 직후에 이름을 청구할 수 없습니다.

하위 도메인 인수를 방지하는 방법

Azure App Service에 대한 DNS 항목을 만들 때, 도메인 확인 ID가 포함된 asuid.{subdomain} TXT 레코드를 만듭니다. 이러한 TXT 레코드가 있는 경우 다른 Azure 구독은 DNS 항목에 토큰 확인 ID를 추가하지 않는 한 사용자 지정 도메인의 유효성을 검사하거나 이를 인수할 수 없습니다.

이러한 레코드는 CNAME 항목에서 동일한 이름을 사용하여 다른 App Service 앱을 만들지 못하게 합니다. 도메인 이름의 소유권을 증명할 수 없는 위협 행위자는 트래픽을 받거나 콘텐츠를 제어할 수 없습니다.

사이트를 삭제하기 전에 DNS 레코드를 업데이트하여 잘못된 행위자가 삭제 및 다시 만드는 기간 사이에 도메인을 인수할 수 없도록 해야 합니다.

도메인 확인 ID를 가져오려면 Azure App Service에서 기존 사용자 지정 도메인 설정을 참조하세요.