SpeedData

暗号化

DNSSECとは?

2023年10月23日
翻訳: 竹洞 陽一郎

この記事は米Catchpoint Systems社のブログ記事「What is DNSSEC? 」の翻訳です。
Spelldataは、Catchpointの日本代理店です。
この記事は、Catchpoint Systemsの許可を得て、翻訳しています。


DNS(ドメインネームシステム)はインターネットの基本的な構成要素であり、その役割はドメイン名を対応するインターネットプロトコルアドレス(IPv4およびIPv6)に位置づけて変換することです。
業界では時間とともに変化と適応が行われ、より多くのトップレベルドメイン、レジストリ、およびレジストラーが存在するようになりました。
人類は「ドットコムバブル」を経験し、インターネットはますます多くの人々によって採用されました。

これらすべての出来事にもかかわらず、ドメインをIPアドレスに変換する基本的な理論は有効であり、大きく変わることはありませんでした。

ドメインネームシステムは、元々セキュリティを主目的として設計されたわけではありません。
それはスケーラブルな公共データベースであり、そのデータへのアクセスを制限していませんでした。
このことがシステムに多くの脆弱性を露呈させ、複数の攻撃手法が生まれる原因となりました。

過去数年で、DNS関連の攻撃手法(スプーフィング、キャッシュポイズニング、DNSハイジャックなど)の数は前例のないほど増加しました。
これが、DNSにセキュリティ拡張を追加するための「ドメインネームシステムセキュリティ拡張(DNSSEC)」の開発を促しました。

DNSの脆弱性と攻撃

ほとんどの脆弱性と攻撃手法は、DNSとしてのプロトコルがどのように実装されているかに起因しています。

DNSキャッシュポイズニング

キャッシュポイズニングは、DNSサーバがドメイン-IPマッピングに関する誤った情報をキャッシュする形態の攻撃です。
ユーザは意図していないWebサイトにリダイレクトされます。
毒されたキャッシュ情報は、一つのサーバから別のサーバに拡散する可能性があり、これがキャッシュポイズニングを非常に危険にしています。

DNSは分散型のサーバシステムであり、単一のサーバだけに依存しているわけではありません。
DNSでのキャッシュは、複数のレベルで行われます。

攻撃者がDNSシステム内のサーバの一つにアクセスしてそのサーバ上の情報を変更した場合、どうなるでしょうか?
毒されたエントリは、サーバ間で伝播し、エンドユーザのデバイスにキャッシュされる可能性があります。

この問題は仮想のものではありません。
近年では、複数の実例がありました。

2010年には、中国外のISPが、中国に位置するDNSサーバから情報を取得するようにDNSサーバを設定しました。
中国の「Great Firewall」は、キャッシュポイズニング(自分自身のキャッシュを毒する)を使って、一部のWebサイトのユーザを誤ったIPアドレスにリダイレクトすることで知られています。
このケースでは、ISPは中国のサーバから受け取ったレスポンスをキャッシュし、その後他のサーバによってキャッシュされました。

毒されたキャッシュはシステムからシステムへと拡散し、結果として、アメリカとチリの一部のユーザがFacebook、Google、TwitterなどのWebサイトにアクセスできなくなりました。

DNSハイジャック

DNSハイジャックでは、キャッシュポイズニングとは異なり、DNSキャッシュは変更されません。
ハイジャックする人は、ドメイン名のDNS設定を自分自身のIPに指すように更新します。
DNS設定が更新されると、ハイジャックする人はユーザを自分のWebサイトにリダイレクトできます。

これはフィッシング攻撃や、ユーザをハイジャックする人が訪れて欲しいWebサイトにリダイレクトすることでお金を稼ぐためにも使用される可能性があります。
DNSハイジャックとキャッシュポイズニング/スプーフィングは、DNS攻撃の中で最も一般的に使用される形態の2つです。

DDoS(分散型サービス拒否攻撃)や増幅攻撃といった攻撃も存在します。

DNSがセキュリティを念頭に置いて構築されていないこと、また、答えを受け入れる前に何らかの資格情報を確認しないことは皆さんも知っていると思います。
では、これらの脆弱性と攻撃手法が存在する中で、DNSをより安全で堅牢にするにはどうすればよいでしょうか?

DNSを安全にするために講じられた最も重要なステップの一つは、DNSSEC(Domain Name System Security Extensions)の導入でした。
以下のセクションで、それがどのように機能するのか詳しく書きます。

DNSSEC(Domain Name System Security Extensions)

DNSSECは、DNSレスポンスの検証を可能にすることで、ドメイン名システムにセキュリティを追加します。
DNSSECの正確な実装によって、DNSスプーフィングと呼ばれる非常に一般的なタイプの攻撃に対するDNSの脆弱性が減少します。

DNSSECは、公開鍵暗号を用いて、権威DNSサーバでDNSレコードにデジタル署名を行います。
デジタル署名により、DNSレスポンスが指定されたソースから来たことが確認でき、DNSレコードの発信元を検証できます。
これにより、システムのユーザがドメイン名に関連する正確なIPアドレスを取得することが保証されます。
権威DNSサーバで既存のDNSリソースレコードに暗号学的な署名が追加されます。

DNSSECはプロトコルとして暗号化されていません。
キーはレコードに署名し、信頼のチェーンを構築するために使用されます。
ただし、パケットは暗号化されていないため、DNSSECは暗号化を提供しません。

DNSSECは信頼のチェーンを確立することで機能します。
このチェーンは、ルートの「.」ネームサーバで始まります。
ルートの公開鍵のコピーは、DNSSECが有効な再帰的ネームサーバに保持されています。
ルートサーバは、TLD(トップレベルドメイン)サーバと、TLDサーバはドメイン名の権威サーバと信頼関係を形成します。

DNSSECの署名検証を支援するために、以下のリソースレコードが導入されました。

RRSIG(Resource Record Signature)
RRSIGレコードには署名されたレコードが含まれています。
署名されたゾーンでドメイン名のAレコードを問い合わせると、AレコードとともにRRSIGレコードが返されます。
RRSIGレコードには、それを検証するために使用される署名のコピーが含まれています。 RRSIG
DNSKEY(DNS Public Key)
DNSKEYは、レコードまたはDNSゾーンに署名するために使用される公開鍵を保持するレコードです。
DNSKEYには2種類あります。
  • Zone Signing Key(ZSK):DNSゾーン内のレコードに署名するために使用されます。
  • Key Signing Key(KSK):ZSKに署名し、その上位レベルと信頼のチェーンを形成するために使用されます。
DS(Delegation Signer)
DSレコードは親ゾーンに存在し、子ゾーンへの問い合わせ結果を検証するために使用されます。
たとえば、ドメイン名example.comについては、DSレコードが.COMゾーンに存在します。
NSEC/NSEC3(Next Secure)
NSECおよびNSEC3は、DNSで存在しないドメイン名(NXDOMAIN)を安全に処理するために使用されます。
これらは、レコードが存在しないことを示すNXDOMAINレスポンスに署名されたレスポンスを提供します。

DNSSECは公開鍵暗号を使用してDNSリソースレコードセット(RRsets)に署名および認証を行います。
公開鍵はDNSKEYリソースレコードに保存され、DNSSECの認証プロセスで使用されます。
ゾーンは、プライベートキーを使用してその権威あるRRsetsに署名し、対応する公開鍵をDNSKEYリソースレコードに保存します。
リゾルバは、その後、公開鍵を使用してゾーン内のRRsetsをカバーする署名を検証し、それらを認証することができます。

DNSSEC実装の要件

DNSSECの仕組み

DNSゾーンは「ゾーン署名」と呼ばれるプロセスを使用してDNSSECで保護されます。
このためには、権威DNSサーバとほとんどのケースでISPに所属するローカルリゾルバもDNSSECをサポートしている必要があります。

DNSSECとDIGコマンドの使用

DNSSECがどのように動作するかを理解するために、いくつかのDIG問い合わせを見てみましょう。

DNSSECは新しい概念ではなく、1994年に開発されましたが、その実装にかかるコストとリソースが正当化されるかどうかは依然として熱く議論されています。
2008年のKaminskyバグはDNSに関するセキュリティの重要性を浮き彫りにし、「DNSSEC」が注目を集めました。
開発から数十年経った今でも、その長所と短所について議論が続いています。

次のブログの部分では、DNSSECの可能な応用について見ていきます。
DANE、TLSAレコード、そしてCatchpointを使用してDNSSECを効率的に監視する方法に焦点を当てます。