하위 도메인 인수는 정기적으로 많은 리소스를 만들고 삭제하는 조직에 일반적인 위협입니다. 프로비전 해제된 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 Web Apps GA 및 Functions의 공개 프리뷰
- Functions 및 Logic Apps용 보안된 고유 기본 호스트 이름 정식 출시
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 또는 B만 test.azurewebsites.net라는 웹앱을 만들어 DNS 이름을 즉시 다시 사용할 수 있습니다. 다른 구독은 리소스 삭제 직후에 이름을 청구할 수 없습니다.
하위 도메인 인수를 방지하는 방법
Azure App Service에 대한 DNS 항목을 만들 때, 도메인 확인 ID가 포함된 asuid.{subdomain} TXT 레코드를 만듭니다. 이러한 TXT 레코드가 있는 경우 다른 Azure 구독은 DNS 항목에 토큰 확인 ID를 추가하지 않는 한 사용자 지정 도메인의 유효성을 검사하거나 이를 인수할 수 없습니다.
이러한 레코드는 CNAME 항목에서 동일한 이름을 사용하여 다른 App Service 앱을 만들지 못하게 합니다. 도메인 이름의 소유권을 증명할 수 없는 위협 행위자는 트래픽을 받거나 콘텐츠를 제어할 수 없습니다.
사이트를 삭제하기 전에 DNS 레코드를 업데이트하여 잘못된 행위자가 삭제 및 다시 만드는 기간 사이에 도메인을 인수할 수 없도록 해야 합니다.
도메인 확인 ID를 가져오려면 Azure App Service에서 기존 사용자 지정 도메인 설정을 참조하세요.