この記事は NFLaboratories Advent Calendar 2022 6日目の記事です。
ソリューション事業部セキュリティソリューション担当の岩崎です。
多くのウェブサイトでは登録されたドメイン名を利用して構築されており、サブドメインを作成して構築されるケースも多いです。中には、開発環境や公開前のプロダクト用にサブドメインを作成して運用されているケースも多いです。
昨今、公開を前提としたサーバでは適切なセキュリティ設定や脆弱性診断などセキュリティ侵害を防ぐための対策が取られているケースが多いです。一方、開発環境や公開前のプロダクト用のサーバでは十分な対策が取られていないケースも多く見受けられます。
そこで今回はセキュリティ侵害から防御することを目的として、攻撃者視点でサブドメイン名列挙をする手法についてまとめてみました。
- 総当たり
- ゾーン転送
- Passive DNS
- 検索エンジン
- Zone walking
- Internet Search Engine
- CT(Certificate Transperency)サーバ
- CZDS (Centralized Zone Data Service)
- まとめ
総当たり
サブドメイン名を多数推測・生成し、実際に問い合わせることで該当のサブドメイン名が利用されているか調査する手法です。
多くのツールではよく使われているサブドメイン名がリスト化されており、効果的に探索できるように実装されております。
DNSReconやFierceなどが有名です。
ただし、検出できるドメイン名は多くの場合 test.example.com. や www.example.com.といったような簡単な文字列に限られております。
長い文字列やランダムな文字列が含まれるドメイン名については現実的な時間で検出できないケースが多いです。
そのため、多くのケースではただ時間を浪費するだけであり有効なドメイン名を見つけることができません。
ゾーン転送
ゾーン転送とは権威DNSサーバ間でゾーン情報を同期するための技術です。権威DNSサーバを冗長構成にする場合などで利用されます。
実際にゾーン転送を要求することで、標的の権威DNSサーバにおいてゾーン転送が可能になっているか確認することができます。
ゾーン転送が可能な設定となっている場合の例
% dig @10.4.0.63 example.com axfr ; <<>> DiG 9.18.1-1ubuntu1.2-Ubuntu <<>> @10.4.0.63 example.com axfr ; (1 server found) ;; global options: +cmd example.com. 600 IN SOA ns.example.com. root.example.com. 2022121401 3600 900 3600 1800 example.com. 600 IN A 192.0.2.30 example.com. 600 IN AAAA 2001:db8::bf8:3 example.com. 600 IN MX 0 example.com. example.com. 600 IN TXT "" example.com. 600 IN CAA 0 issue "letsencrypt.org" example.com. 600 IN CAA 0 issuewild "letsencrypt.org" api.example.com. 600 IN CNAME example.com. blog.example.com. 600 IN CNAME example.com. devapi.example.com. 600 IN CNAME example.com. ns.example.com. 600 IN A 192.0.2.30 ns.example.com. 600 IN AAAA 2001:db8::bf8:3 private.example.com. 600 IN CNAME example.com. root.example.com. 600 IN A 192.0.2.30 root.example.com. 600 IN AAAA 2001:db8::bf8:3 test.example.com. 600 IN CNAME example.com. www.example.com. 600 IN CNAME example.com. example.com. 600 IN SOA ns.example.com. root.example.com. 2022121401 3600 900 3600 1800 ;; Query time: 4 msec ;; SERVER: 10.4.0.63#53(10.4.0.63) (TCP) ;; WHEN: Wed Dec 14 16:11:53 JST 2022 ;; XFR size: 18 records (messages 1, bytes 470)
ゾーン転送ができない設定になっている場合の例
dig @10.4.0.63 example.com axfr ; <<>> DiG 9.18.1-1ubuntu1.2-Ubuntu <<>> @10.4.0.63 example.com axfr ; (1 server found) ;; global options: +cmd ; Transfer failed.
対策
第三者によるゾーン転送が可能な状態は「脆弱な設定になっている」と扱われるケースが一般的です。
権威DNSサーバのソフトウェアにより対策は異なります。一般的には第三者によるゾーン転送要求を拒否するために接続元IPアドレスの制限などが有効とされています。
Passive DNS
Passive DNSは様々なロケーションでの名前解決結果を蓄積し、検索可能な形で提供するサービスです。商用・無償含め多くのサービスが存在しております。また、現在登録されているレコードだけでなく過去の履歴も含め検索できることが多いです。
無料で利用できるものだとMicrosoft Defender Threat Intelligenceがおすすめです。
ドメイン名を入力するだけでサブドメイン名の一覧を取得できます。
検索エンジン
GoogleやYahooなどの検索エンジンを利用してサブドメイン名列挙をすることもできます。
site識別子を指定することで指定されたドメイン名を含むサブドメイン名のウェブサイトを検索できます。
多くの場合、サブドメイン名トップページのWebサイトの表示順位が高いため1〜2ページ目を確認すればサブドメイン名をリスト化できます。
site:google.co.jp
Zone walking
Zone walkingはDNSSECで過去に利用されていた仕様を用いたドメイン名列挙手法です。
DNSSECとは名前解決のレスポンスが改ざんされていないことを受信側で検証するためのプロトコルです。クライアント側で改ざんを検知できるようにために、RRSIGレコード(RRsetに対する署名)を付与してレスポンスを返します。
一方、RRSIGはRRsetに対して署名をするため、不在証明(NXDomain)の際は署名の対象がありません。これを解決するための仕組みがNSECレコードとなります。NSECレコードとは予め権威DNSサーバに登録されたドメイン名の一覧をソートしておき、問い合わせられたドメイン名が存在しない場合に一覧表で前後のドメイン名を返す仕組みです。その際、RRSIGはNSECレコードを含めて署名されたものを返します。
一例として、NSECレコードでは下記表の様なレコードが登録されている場合にb.example.com. というドメイン名を問い合わせると不在を証明するために a.example.com. と d.example.com. が含まれたNSECレコードが返ってきます。
これらを見てクライアント側では「a.example.com. の次は d.example.com. しか無い」と認識することができます。
OWNER | TYPE | RDATA |
---|---|---|
a.example.com. | A | 192.0.2.12 |
d.example.com. | A | 192.0.2.30 |
g.example.com. | A | 192.0.2.45 |
z.example.com. | A | 192.0.2.60 |
これらの問い合わせを反復的に行い、ドメイン名を列挙する仕組みがZone walkingと呼ばれる手法となります。
Zone walkingを検証するためのツールとして ldns-walk がよく利用されております。
対策
現在はNSECの問題点を緩和するために、NSECレコードのドメイン名をハッシュ化したNSEC3への移行が推奨されております。
多くのゾーンではNSEC3に移行されており、NSECでZone walkingができる権威DNSサーバは多くありません。*1
ただし、NSEC3でも依然としてドメイン名列挙のリスクは残っております。少しボリュームの多い内容となるため詳細については別途記事にできればと考えております。
また、Route53などマネージド権威DNSサービスによってはZone walkingを検知して落とす機能が入っているらしいです。
Internet Search Engine
Internet Search EngineはグローバルIPに対して定常的にスキャンし、結果を蓄積・検索できるサービスです。呼称は人により異なり、IoT検索エンジンなどと呼ばれる場合もあります。
様々なサービスがありますがShodanが有名です。
Shodanを利用してグローバルに公開されているサーバの中からSSL証明書などでフィルタして検索することでサブドメイン名を収集することができます。
Shodanでは有料課金をしなければフィルタ検索ができません。しかし、稀に永久会員が$5セールをしている場合があるため、そのタイミングに購入するのがおすすめです。
The $5 Black Friday sale is returning and available from Friday through Monday
— Shodan (@shodanhq) 2018年11月20日
CT(Certificate Transperency)サーバ
Certificate Transperency(以下、CT)とはSSL/TLS証明書の不正発行や誤発行を早期検知するための仕組みです。
認証局は証明書を発行する際、発行証跡をCTサーバに登録します。不正に証明書が発行された場合もCTサーバにログが載るため、ドメイン名の登録者がCTサーバを確認することで不正発行されたことを気付ける様になります。
Subject Alternative Name(以下、SAN)にサブドメイン名が指定された証明書が発行されていればCTサーバを起点としてサブドメイン名の検索が可能です。多くのウェブサイトではSSL/TLS証明書が発行されているため、CTサーバを利用してサブドメイン名を列挙する手法はよく利用されます。
CTサーバの1つとしてcrt.shが有名です。
以下は ntt.com. を入力して検索した場合の例です。多くのサブドメイン名が存在することが分かります。
対策
CTサーバは証明書の透明性を担保するための仕組みであるため「証明書が発行された事実」を秘匿することはできません。
ただし、証明書のサブドメイン名を知られたくないのであればSANにワイルドカードを指定することでサブドメイン名を隠蔽することが可能です。
以下はワイルドカード証明書の一例です。
CZDS (Centralized Zone Data Service)
サブドメイン名ではありませんが、gTLDについてはゾーンファイルごとダウンロードすることができます。
ICANNが提供しているCentralized Zone Data Service(以下、CZDS)を利用することで多くのgTLDについてはゾーンファイルをダウンロードできます。
誰でも好き勝手にダウンロードできる訳ではなく、TLDごとに利用目的を記述・申請し承認されなければダウンロードできない形となっております。また、申請承認時に有効期限が設定され、失効した後は再度申請が必要となります。
一例として、.com. のゾーンファイルもダウンロードすることができます。
ただし、委譲先のゾーンファイルは含まれていないためサブドメイン名については取得することができません。
まとめ
サブドメインを作成し公開された権威DNSサーバにレコードを追加する場合、サブドメイン名を秘匿することが非常に難しいことが分かるかと思います。
元も子もない話ですが、「ドメイン名が分からなければアクセスできないから安心」という考えはリスクの高い設定・構成になりがちです。
尚、セキュリティ侵害を防ぐという観点では上記で挙げた対策の他に下記の対応が有効です。
- 開発用途や公開前のサーバは第三者からアクセス可能な形で公開しない
- 内部でのみ利用するレコードを外部向けに公開している権威DNSサーバに登録しない*2
- 権威DNSサーバのレコードを定期的に確認し、不要なものを削除する *3
弊社では上記のようなOSINTに関する検証もしております。採用もしておりますので、もしご興味があればリクルートページをご確認ください。
nflabs.jp