DNSSECの実甚化





この蚘事では、既存のDNS構造の欠点、.comおよび.orgドメむンを䟋ずしお䜿甚しおDNSSECを実装する完党なプロセス、DNSSECで眲名された有効な自己眲名 SSL蚌明曞を䜜成する手順に぀いお説明したす。







䞍良DNSずは





珟圚の圢匏のDNSシステムは、情報セキュリティが特に考えられおいなかった20幎以䞊前に開発されたした。 いく぀かの基本的な脆匱性がありたす。



DNSサヌバヌの応答の信頌性は、決しおチェックされたせん。 これにより、ドメむン名をアドレス指定したナヌザヌを任意のIPアドレスに送信しお、サヌバヌの応答を眮き換えるこずができたす。 実際には、 このような攻撃は次のようになりたす 。



クラむアントのリゟルバヌずしお機胜するプロバむダヌのキャッシュDNSサヌバヌも脆匱です カミンスキヌ攻撃 。



珟圚、DNSレコヌドに公開キヌを保存するための技術がありたす。たずえば、電子メヌルのDKIM眲名 、 SSHFPレコヌドのSSHキヌなどです。 これらの技術はすべお、DNS停造に察する保護を必芁ずしたす。



DNSSEC理論





DNSSECは、暗号化眲名を䜿甚しおDNS情報の信頌性を䞀意に怜蚌できる技術です。



䞀般的にDNSSECに぀いおは、 dxdt.ru / 2009/03/04/2163で読むこずができたす。



詳现はこちら habrahabr.ru/blogs/sysadm/120620



そしお、 Verisign.comで



続行する前に、䞊蚘のリンクを泚意深く読むこずを匷くお勧めしたす。ゟヌンに眲名する手順が䞀芋混乱しおいるように芋えるためです。





可胜な限りシンプルに、これは次のようになりたす。すべおの第1レベルドメむンに関する情報を含むルヌトゟヌン「。」がありたす。 比范的蚀えば、これはいく぀かの行のセットを持぀テキストファむルであり、ほずんど倉曎されたせん。 公開/秘密キヌのペアが䜜成され、このファむルの各行が眲名されたすPGP / GPGの「クリアサむン」タむプにより、テキストで公然ず眲名するために電子メヌルで䜿甚され、「BGPIN PGP SIGNATURE」で始たりたす。

このペアの公開キヌを取埗したので、このリストの各゚ントリの信頌性を確認できたす。 たずえば、ripn.netサヌバヌが「ru」ゟヌンを実際に担圓しおいるこずを確認したす。



dig -t any + dnssec @ k.root-servers.net en。



応答では、ハッシュ眲名を含むRRSIGレコヌドを確認できたす。



しかし、これは十分ではありたせん。ダりンストリヌムサヌバヌが解決に参加するため、その答えも確認する必芁がありたす。 次に、トップレベルドメむンの所有者たずえば、「com」、同じキヌペアを䜜成し、ゟヌン内のすべおのレコヌドに眲名しおから、公開キヌのキャストをルヌトゟヌンに远加したす。 その結果、ルヌトゟヌンの公開キヌを信頌しお、ゟヌンキヌ「com」の信頌性を確認できたす。それに応じお、それを信頌したす。



dig -t any + dnssec @ k.root-servers.net com。



応答では、DSレコヌドには、ゟヌン「com」が眲名されおいるキヌのキャストが含たれおいたす。



ゟヌン内の各倉曎埌に眲名が新たに行われるこずを理解するこずが重芁です。 ただし、ルヌトゟヌンはゟヌン「com」の公開鍵のみに眲名するため、ゟヌン「com」が倉曎されるたびにルヌトゟヌンの゚ントリを再キャッシュする必芁はありたせん。



これで、com。ドメむンを担圓するサヌバヌからの応答を認蚌できたす。



dig + dnssec -t any @ a.gtld-servers.net verisign.com。



ドメむンレコヌドがverisign.comであるこずがわかりたす。 眲名されおいたすが、この段階では、verisign.comドメむンを担圓するNSサヌバヌのアドレスの信頌性を確立するこずしかできたせん。 IPアドレスを解決するには、それらから応答を取埗する必芁がありたす。そのため、これらのNSサヌバヌの所有者は独自のキヌペアを持ち、それを䜿甚しおゟヌンに眲名し、DSレコヌドに公開キヌスナップショットを入れたす。



verisign.comのAレコヌドをリク゚ストしたす。



dig + dnssec -ta verisign.com @ a2.nstld.com



その結果、Aレコヌドverisign.comに倀192.5.6.31が含たれおいるずいう事実を怜蚌するために、次の信頌チェヌンが構築されたす。

ルヌトゟヌンの公開キヌ "。"を事前に知っおいたす。 そしお圌を信頌しおいたす。 ルヌトゟヌンには、「com」内のすべおの゚ントリを指定するDSレコヌドがありたす。ゟヌンは、指定されたキヌで眲名され、レコヌド自䜓は、それぞれルヌトゟヌンキヌで眲名されたす。 この゚ントリの信頌性を確認した埌、このキヌで眲名された「com」ゟヌンのすべおの゚ントリを信頌したす。 com。Zoneを担圓するサヌバヌには、com。Zoneのキヌで眲名された公開キヌverisign.comを含むDSレコヌドが含たれおおり、verisign.comを担圓するNSサヌバヌの応答で眲名の信頌性を怜蚌できたす。



抂略的には、次のようになりたす。 画像



䞊蚘の説明は非垞に原始的でばかげおいたす。 「指で」䜜業する原理を説明するこずを目的ずしお曞かれおいたす。 おそらく、それはたったく理解を単玔化せず、それをさらに混乱させるだけです。



DNSSEC実装プラクティス





泚意 この呜什は時代遅れです。 NSEC3を䜿甚せずにゟヌンに眲名するず、ゟヌンのすべおのDNSレコヌドを怜出できたす。

実際の指瀺www.digitalocean.com/community/tutorials/how-to-setup-dnssec-on-an-authoritative-bind-dns-server--2



珟圚、眲名されおいるのは、特に.net、.com、.orgなどの䞀郚のトップレベルドメむンゟヌンのみです。

.ruゟヌンはただ眲名されおいたせん。.uaゟヌンはテストモヌドで眲名されおいたす。.suゟヌンは正匏に眲名されおいたすが、これたでのずころ、DSレコヌドの远加をサポヌトするレゞストラはありたせん。

ICANN Webサむトの完党なリストを参照しおください。



ゟヌンに眲名するには、この機胜がドメむンレゞストラヌでサポヌトされおいる必芁がありたす。 珟時点では、DNSSECをサポヌトしおいる囜内のレゞストラに぀いおは知りたせん。 DNSをサポヌトする.ruドメむンの委任を促進するR01レゞストラずdnssec.ru Webサむトは、.ruゟヌンが眲名されおいないため、銬鹿げおいたす。この堎合、R01サヌバヌは信頌チェヌンを構築するための出発点になりたす。



サポヌトするもののうち、最倧のものを区別できたす。



UPD珟圚、nic.ruはDNSSEC www.nic.ru/news/2012/dnssec.html もサポヌトしおいたす。

郚分的なリストはここにありたす 。

レゞストラに加えお、NSSSEC察応のNSサヌバヌが必芁です。 䞀郚のレゞストラは、このようなサヌビスを提䟛しおいたす。 Godaddyで最も安いオプションは、プレミアムDNS $ 35 /幎ず呌ばれたす。 dyn.comで最も高䟡なのは、DynECT Liteず呌ばれる月額30ドルです。 この蚘事では、BIND 9.7.3に基づいお独自のマスタヌDNSサヌバヌをセットアップする䟋を瀺したす。



さらに、完党に構成された独自のDNSに委任されたドメむンず、完成したゟヌンファむルがあるこずを前提ずしおいたす。

named.confでDNSSECサポヌトを有効にするには、オプションセクションに远加したす。



オプション{
        ...
       dnssec-enable yes;
        ...
 }; 




キヌ生成およびゟヌン眲名ツヌルは、最新のBINDパッケヌゞに含たれおいたす。

この段階では、読者はすでにZSKZone Sign KeyずKSKKey Sign Keyが䜕であるかを知っおいるず想定されたす。

以䞋のすべおの操䜜は、個別に䜜成されたフォルダヌで実行する必芁がありたす。



ZSKキヌ生成



  dnssec-keygen -a RSASHA1 -b 1024 -n ZONE my-domain.com 




KSKキヌ生成



  dnssec-keygen -a RSASHA1 -b 2048 -f KSK -n ZONE my-domain.com 




my-domain.comは、キヌが生成されるドメむンです。 これらのコマンドの結果、2぀のキヌペアが䜜成されたす。

次に、ゟヌンファむルを珟圚のフォルダヌにコピヌしお眲名する必芁がありたす。



  dnssec-signzone -S -N INCREMENT my-domain.com 




my-domain.comはゟヌンテキストファむルです。 キヌずゟヌンファむルず同じフォルダヌにコマンドを実行するこずが重芁です。 パスなしのファむル名。

その結果、2぀のファむルが䜜成されたす。



my-domain.com.signed-ゟヌン眲名ファむル

dsset - my - domain.com -2぀のDSレコヌドを含むファむル



゜ヌスゟヌンファむルは倉曎されたせん。 次に、BIND構成で、ファむルを眲名枈みファむルに眮き換える必芁がありたす。



 ゟヌン「my-domain.com」{
        タむプマスタヌ;
        ファむル「my-domain.com.signed」;
	 allow-query {any;  };
         allow-transfer {....;  };
 }; 




ゟヌンファむルの詳现な䟋は、 nox.suで衚瀺できたす。

DNSの埩元力を高めるには、セカンダリサヌバヌをお勧めしたす。 DNSSEC察応のスレヌブを提䟛する無料のサヌビスがいく぀かありたす。 http://www.frankb.us/dns/のリストの䞀郚を次に瀺したす 。 rollernet.usを䜿甚するため、アドレス208.79.240.3および208.79.241.3からの転送を蚱可したす。 セカンダリサヌバヌを䜿甚する堎合、眲名する前に、それらに関するレコヌドがゟヌンファむルに存圚する必芁がありたす。 眲名枈みゟヌンがマスタヌサヌバヌに配眮された埌、転送をアクティブにするこずをお勧めしたす。



さらに、眲名枈みゟヌンは暩嚁䞻矩NSサヌバヌで既にホストされおおり、倖郚からアクセス可胜であるず想定されおいたす。



  dig + dnssec -t any @ super.vip.my.dns.com my-domain.com 




チヌムは眲名枈みゟヌンを返华する必芁がありたす。



この段階で、セカンダリサヌバヌをアクティブにし、AXFRを介しおゟヌンを同期できたす。



次に、ドメむンレゞストラヌパネルでDSレコヌドを远加する必芁がありたす。 それらはdnssec-signzone䞭に生成され、次のようにdsset-my-domainファむルにありたす。



 my-domain.com。  IN DS 40513 5 1 6198D29A9FB9797719CDFD2316986BDFF5C29323
 my-domain.com。  IN DS 40513 5 2 1AAB29EC7B67013F45865AEB06D93899B45C598D65A4E4D5522BC39E B5B9212F 




これは、GoDaddyパネルにDSレコヌドを远加するためのフォヌムです。



画像



線集埌、「詳现モヌド」に切り替えお、䞡方の行をコピヌする必芁がありたす。 TTL倀を远加し、キヌのフィンガヌプリントの2行目のスペヌスを削陀する必芁がありたす。そうしないず、フォヌムぱラヌを返したす。 その結果、コピヌされた行は次のようになりたす。



 my-domain.com。  86400 IN DS 40513 5 1 6198D29A9FB9797719CDFD2316986BDFF5C29323
 my-domain.com。  86400 IN DS 40513 5 2 1AAB29EC7B67013F45865AEB06D93899B45C598D65A4E4D5522BC39EB5B9212F 




゚ントリが远加されるのは、マスタヌサヌバヌ䞊のゟヌンが䜿甚可胜で、正しく眲名されおいる堎合のみです。



DSレコヌドのフィヌルド倀



86400-この゚ントリのTTL

40513-キヌタグ

5-アルゎリズム

1/2-ダむゞェストタむプ



䞊蚘の䟋では、キヌを生成するためにRSA-SHA1アルゎリズムが䜿甚されたため、レコヌドは5番です。

アルゎリズム番号衚

数 アルゎリズム
1 RSAMD5
2 DH
3 DSA / SHA1
4 ECC
5 RSA / SHA-1
6 DSA-NSEC3-SHA1
7 RSASHA1-NSEC3-SHA1
8 RSA / SHA-256
9 -
10 RSA / SHA-512
11 -
12 GOST R 34.10-2001




䞊蚘の䟋のダむゞェストタむプ、最初のレコヌドは1、2番目のレコヌドは2です。

ダむゞェストタむプ番号衚



数 ダむゞェストタむプ
1 SHA-1
2 SHA-256
3 SHA-512




Dyn.comなどの䞀郚のレゞストラでは、DSレコヌドを远加するためのフォヌムでは行をコピヌできたせんが、すべおのフィヌルドに個別に入力する必芁がありたす。

画像



Dyn.comには、順序が正しくなく、番号のラベルが付いおいないアルゎリズムのリストがあるため、混乱が生じたす。 このフォヌムから远加する堎合、2番目のキヌの指王のスペヌスも削陀する必芁がありたす。



DSレコヌドを远加した埌、トップレベルドメむンを担圓するサヌバヌ䞊でそれらの倖芳を確認できたす。 ドメむン「com」の堎合、次のようになりたす。



  dig + dnssec -t DS @ a.gtld-servers.net my-domain.com 




この堎合、 VerisignのDNSSECデバッガヌず眲名チェヌンビゞュアラむザヌを䜿甚しお、ゟヌンが正しく眲名されおいるこずを確認できたす。

ゟヌン゚ントリを倉曎するたびに、再眲名する必芁があるこずを思い出させおください。 DSレコヌドを曎新する必芁はありたせん。

すべおが正しければ、クラむアント偎の構成に進むこずができたす。



クラむアントリゟルバヌの構成





クラむアント偎で眲名を怜蚌するには、この機胜がアドレス解決が発生するシステムDNSでサポヌトされおいる必芁がありたす。 GoogleのパブリックDNS 8.8.8.8はDNSSECレコヌドをサポヌトしたすが、怜蚌したせん。 詳现はFAQをご芧ください 。

UPD 2013幎3月19日以降、Google Public DNSはDNSSEC眲名を怜蚌しおおり、無効な眲名の堎合、 googleonlinesecurity.blogspot.com / 2013/03 / google-public-dns-now-supports-dnssec.htmlを 解決したせん。



最も簡単なオプションは、 FirefoxずChromeのプラグむンです。



画像



このプラグむンは、バむパスシステムDNSの解決を可胜にし、DNSSEC怜蚌をサポヌトする独自のサヌバヌが事前にむンストヌルされおいたす。 デフォルトでは、プラグむンはシステムDNSを䜿甚したす。プラグむン蚭定でこれを倉曎できたす。CZ.NICたたは217.31.57.6を遞択したす



digナヌティリティに眲名の怜蚌を教えるには、ルヌトゟヌンキヌを䜿甚しおファむルを䜜成するこずにより、信頌チェヌンの開始点を䜜成する必芁がありたす。



dig +nocomments +nostats +nocmd +noquestion -t dnskey . > /etc/trusted-key.key
      
      







その埌、 / etc / trusted-key.keyファむルの行を削陀する必芁がありたす。



 ;; Truncated, retrying in TCP mode.
      
      







これが行われない堎合、digは以䞋を返したす。



 No trusted keys present
      
      







これで、digを䜿甚しお眲名の信頌性を怜蚌できたす。



 dig +sigchase @217.31.57.6 whitehouse.gov
      
      







眲名怜蚌機胜を䜿甚しお再垰リゟルバヌを構成する方法に぀いおは、 こちらをご芧ください。



実甚的なメリット





DNSSEC暙準はただ開発䞭であるずいう事実にもかかわらず、すでにその恩恵を受けるこずが可胜です。



SSH公開鍵


SSHサヌバヌに初めお接続するずき、クラむアントはサヌバヌの公開キヌのフィンガヌプリントを個別に怜蚌し、yesを入力するように芁求したす。その埌、サヌバヌの公開キヌはknown_hostsファむルに保存されたす。

DNSSECの出珟により、公開鍵はSSHFPタむプのDNSレコヌドに配眮でき、サヌバヌに初めお接続するずきに、芁求なしで自動的にチェックされたす。 この機胜を有効にするには、SSHクラむアント蚭定にVerifyHostKeyDNS = yesオプションを远加する必芁がありたす。たた、システムリゟルバヌがDNSSEC怜蚌をサポヌトしおいる必芁がありたす。



自己眲名SSL蚌明曞HTTPS


UPD sslキヌをDNSに保存するための暙準が公開され、DANE ru.wikipedia.org/wiki/DANEずいう名前になった埌、以䞋はもはや関係ありたせん。GoogleはChromeからDANEサポヌトを削陀したした。 Chrome開発者github.com/agl/dnssec-tls-tools/issues/4ずのディスカッション

DNSSECを䜿甚するず、ブラりザで「有効」になるSSL蚌明曞に個別に眲名できたす。

この実隓的な機胜は珟圚掻発に開発されおおり、珟圚Google Chrome / Chromiumブラりザでのみサポヌトされおいたす。

ドラフト暙準 tools.ietf.org/html/draft-agl-dane-serializechain-01



この技術は、Adam Langleyずいう名前のGoogle埓業員によっお開発されおおり、圌には非垞に興味深いブログhttp://www.imperialviolet.org/がありたす 。

この技術に関する投皿 。



さらに、蚌明曞が生成されるドメむンはDNSSECによっお眲名されおいるず想定されおいたす。



dnssec-tls-toolsをダりンロヌドしたす。



  git clone git//github.com/agl/dnssec-tls-tools.git 


そしおコンパむル

  gcc -o gencert gencert.c -Wall -lcrypto 


RSAキヌ生成



  openssl genrsa 1024> privkey.pem
 openssl rsa -pubout -in privkey.pem> pubkey.pem 




キヌフィンガヌプリントの䜜成



  python ./gencaa.py pubkey.pem 




dnssec-tls-toolsパッケヌゞのgencaa.pyファむルはどこにありたす。

コマンドは次の圢匏の行を返したす。



  EXAMPLE.COM。  60タむプ257 \70 020461757468303e3039060a2b06010401d6790203010 ... 


これは、EXAMPLE.COMの代わりにゟヌンファむルに远加する必芁があるDNSレコヌドです。 その意味。 ゟヌンがただ眲名されおいない堎合は、これを行う必芁がありたす。 レコヌドが既に眲名枈みのゟヌンに远加されおいる堎合、それぞれ眲名を再床実行する必芁がありたす。



DNSの正しいキヌを確認したす。



  dig + dnssec + sigchase -t type27 example.com 




コマンドは、 DNSSEC怜蚌が正垞であるこずを返す必芁がありたすSUCCESS



type27レコヌドが䜿甚可胜になり眲名された埌、DNSSEC信頌チェヌンを生成できたす。



  python ./chain.py example.comチェヌン 




そしお、蚌明曞自䜓



  ./gencert privkey.pem chain> cert.pem 




Nginxで蚌明曞を接続するず次のようになりたす。



サヌバヌ{
         ...
	 ssl on;
	 ssl_certificate cert.pem;
	 ssl_certificate_key privkey.pem;
         ...
  } 




DNSSEC眲名チェヌンは倉曎される可胜性があるため、チェヌンの䜜成ず蚌明曞の生成最埌の2぀のコマンドをクラりンに远加しお、たずえば1日に1回実行する必芁がありたす。



結果は次のようになりたす https : //dnssec.imperialviolet.org/



DNSSECチェヌン党䜓が蚌明曞に配眮されるずいう事実により、ブラりザは完党なチェヌンチェックを実行する必芁がないため、システムリゟルバがDNSSEC怜蚌をサポヌトしおいなくおも蚌明曞は「有効」になりたす。








PSこの蚘事では、DNSSECキヌの有効性に぀いおは説明しおいたせん。代替のDLVEC Look-aside Validation DLV信頌チェヌンに぀いおは説明しおいたせん。 これらの問題を理解し、説明しおくれる人々に感謝したす。



PPS私は、このようなタヌンベヌスのHOWTOが、理解せずにチヌムを無意識にコピヌするこずに぀ながる悪圱響を知っおいたす。 しかし、この問題に関する情報がほずんどなく、䞀郚の堎所では矛盟しおいるずいう事実により、この蚘事が私が盎面しなければならなかった混乱を誰かが避けるのに圹立぀こずを願っおいたす。 協議ず圌の蚘事をくれたAlexander Venedyukhinに感謝したす。



All Articles