LoginSignup
4
4

Azure リソースの Dangling DNS (未解決の DNS エントリ) を特定する

Last updated at Posted at 2023-09-14

1. はじめに

サブドメインテイクオーバーは、多くのリソースを作成/削除する企業で発生しやすいセキュリティ攻撃の1つです。
Azure などのクラウドから IaaS や PaaS などのリソースを展開すると、固有の FQDN が割り当てられます。CNAME レコードを利用し、IaaS や PaaS サービスに構築したシステムに自社ドメインでアクセスさせることが多いと思いますが、リソース削除後に CNAME レコードの削除を忘れることで、Dangling DNS (未解決のDNS レコード) が発生します。
脅威アクターが Dangling DNS を発見すると、フィッシングサイトや 閲覧者からの Cookie 情報取得などに利用され、企業の信頼の損失やさらなるセキュリティリスクにつながる恐れがあります。
サブドメインテイクオーバー対策として、 Azure リソースの Danling DNS を特定する方法をご紹介します。

サブドメインテイクオーバーの仕組みについては、マイクロソフト社のドキュメントの絵がわかりやすいです。

また、JPRS さんが公開している 5分で学べる!サブドメインテイクオーバー がわかりやすいので、ご参照ください。

2. Dangling DNS の特定ツール

マイクロソフトが作成した Azure リソースの Dangling DNS を特定するツールを、Github で公開しています。

本ツールは、Azure で利用しているすべてのサブスクリプションを対象に DNS ゾーンをレビューすることで、 「Dangling DNS (未解決の DNS エントリ)」 および 「乗っ取られている CNAME レコード」を検出することが可能ですが、以下の権限が必要です。

  • Azure サブスクリプションへの閲覧者レベルのアクセス権
  • Azure Resource Graph への読み取りアクセス権

以下の Azure サービスで Dangling DNS を検知することが可能です。

サービス 種類 FQDN
Azure Front Door microsoft.network/frontdoors properties.cName abc.azurefd.net
Azure Blob Storage microsoft.storage/storageaccounts properties.primaryEndpoints.blob abc.blob.core.windows.net
Azure CDN microsoft.cdn/profiles/endpoints properties.hostName abc.azureedge.net
Public IP addresses microsoft.network/publicipaddresses properties.dnsSettings.fqdn abc.EastUs.cloudapp.azure.com
Azure Traffic Manager microsoft.network/trafficmanagerprofiles properties.dnsConfig.fqdn abc.trafficmanager.net
Azure Container Instance microsoft.containerinstance/containergroups properties.ipAddress.fqdn abc.EastUs.azurecontainer.io
Azure API Management microsoft.apimanagement/service properties.hostnameConfigurations.hostName abc.azure-api.net
Azure App Service microsoft.web/sites properties.defaultHostName abc.azurewebsites.net
Azure App Service - Slots microsoft.web/sites/slots properties.defaultHostName abc-def.azurewebsites.net

3. ツールを使ってみよう

Azure リソースの Dangling DNS 特定ツールは Github で公開されています。PowerShell Gallery からインストール可能です。
カスタムドメインを Azure DNS ゾーンでホストしている場合、コマンドを実行するだけで CNAME レコードと FQDN の状態を確認できます。
他 DNS サーバーがホストしている場合は、CNAME と FQDN の情報を CSV ファイルか JSON ファイルで準備して読み込ませることで、Dangling DNS を検出が可能です。

3.1 ツールのインストール

下記のコマンドでツールをインストールします。

# ツールのインストール
Install-Module -Name AzDanglingDomain
Import-Module  -Name AzDanglingDomain

3.2 ツールの実行

Azure DNS ゾーンを利用している場合

ツールがサポートしている 8つのサービスに対する CNAME レコードを Azure DNS ゾーンでホストしている場合、以下のコマンドで Dangling DNS の状態を確認できます。

# カスタムドメインを Azure DNS ゾーンでホストしている場合
Get-DanglindDNSRecords -FetchDnsRecordsFromAzureSubscription

他 DNS サーバーを利用している場合

他 DNS サーバーを利用している場合は、CNAME と FQDN を記載した CSV もしくは JSON ファイルが必要です。下記のように CSV や JSON ファイルを準備してください。

  • CSV ファイル
CNAME,FQDN
testwanperfdiag,testwanperfdiag.blob.core.windows.net
testapp,testapp.azurewebsites.net
testcdn,testcdn.azureedge.net
  • JSON ファイル
[
  {
    "CNAME": "testwanperfdiag",
    "FQDN": "testwanperfdiag.blob.core.windows.net"
  },
  {
    "CNAME": "testapp",
    "FQDN": "testapp.azurewebsites.net"
  },
  {
    "CNAME": "testcdn",
    "FQDN": "testcdn.azureedge.net"
  }
]

ファイルを準備したら次のコマンドを実行します。

# 他 DNS サーバーでホストしている場合 (CSV もしくは JSON ファイルを指定)
Get-DanglingDnsRecords -InputFileDNSRecords .\CNameToDNSMap.json

3.3 出力結果の確認

コマンドを実行後、Dangling DNS があるか出力結果が表示されます。
以下はわたしが試した出力例です。

Found 1 CName records missing Azure resources; saved the file as: C:\Users\xxxx\AzureCNameMissingResources.csv
Fetched 21 Azure resources; Saved the file as: C:\Users\xxxx\AzureResources.csv
Fetched 1 Azure CName records; Saved the file as: C:\Users\xxxx\AzureDnsCNameRecordSets.csv

NameOfProcessSection            : Time in Milliseconds
InputFileProcessingTime         : 2
AzureLibrariesLoadTime          : 7
AzureResourcesFetchTime         : 1521
AzureDnsRecordsFetchTime        : 5673
InputDnsCNameListProcessingTime : 7
AzureCNameListProcessingTime    : 2
SummarizeTime                   : 41
ScriptExectionTime              : 17816

TypeOfRecords               : Details
ProcessedType               : Parallel
AzureSubscriptions          : 8
AzureResources              : 21
AzureDnsZones               : 1
AzureDnsRecordSets          : 4
InputDnsCNameList           : 0
AzureDnsCNameRecordSets     : 1
AzureCNameMatchingResources : 0
AzureCNameMissingResources  : 1



AzureResourceProviderName AzureResourceCount AzureCNameMatchingResources AzureCNameMissingResources
------------------------- ------------------ --------------------------- --------------------------
Azure API Management                       0                           0                          0
Azure Container Instance                   0                           0                          0
Azure CDN                                  0                           0                          0
Azure Front Door                           0                           0                          0
Azure App Service                          4                           0                          1
Azure Blob Storage                        16                           0                          0
Azure Public IP addresses                  1                           0                          0
Azure Classic Cloud                        0                           0                          0
Azure Traffic Manager                      0                           0                          0

表の AzureCNameMissingResources 列にDangling DNS レコードの数が表示されます。こちらの結果では、App Service で 1つの Dangling DNS があることが確認できます。

コマンドの出力だけでなく、CSV ファイルが出力され、CNAME や FQDN の詳細情報を確認することができます。
出力されたファイルパスは、最初に表示されるため確認してください。

Found 1 CName records missing Azure resources; saved the file as: C:\Users\xxxx\AzureCNameMissingResources.csv
Fetched 21 Azure resources; Saved the file as: C:\Users\xxxx\AzureResources.csv
Fetched 1 Azure CName records; Saved the file as: C:\Users\xxxx\AzureDnsCNameRecordSets.csv

Dangling DNS のあり、なしで出力されるファイルが異なります。
AzureCNameMissingResources.csv を確認すると、CNAME レコードや App Service リソースの対象を確認することができます。

image.png

このコマンドを定期的に確認することで、組織内で Dangling DNS が発生しているかを特定できるため、CNAME レコードの削除削除した App Service のリストア などによる Dangling DNS への対応が可能になります。

4. ツール以外の Dangling DNS 検出方法

Azure ではクラウドワークロードの保護機能として、Defender for Cloud を提供しています。
IaaS VM、ストレージアカウント、コンテナ、App Service など様々なクラウドワークロード保護機能が適用されていますが、Defender for App Service では App Service の Dangling DNS を検出する機能が提供されています。

この機能を利用することで、どの DNS に CNAME レコードがホストされているか関係なく、Dangling DNS 状態を検出することが可能になります。

重要度低でアラートが検出されます。
image.png

Defender for AppService の有効化は、Defender for Cloud の環境設定から簡単に有効化することができますので、試してみてください。初めて利用する場合、30日間は無料のお試し期間が提供されます。
image.png

ドキュメントはこちらです。

5. まとめ

脅威アクターは Web アプリケーションをプローブして Dangling DNS を探しており、見つけるとフィッシングサイトなどに悪用され、企業の信頼損失にも繋がるセキュリティリスクになります。
最近では、鹿児島餃子の王将 のWeb サイトが改ざんにより破産宣告の偽情報を公開される事件がありました。フェイクニュースにより経営破綻につながることもあるようです。

Web サイトが乗っ取られることでも同じリスクがあると思いますし、他者に危害が及ぶことも考えられます。
本ツールや Defender for Cloud により Dangling DNS の検知し、より安全な環境を運用につながればいいなと思っています!

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4