OpenDNSSECチュートリアル@DNSOPS.JP BoF(2009.11.24)

NRIセキュアテクノロジーズ株式会社
エンタープライズセキュリティサービス部
中島智広(nakashima@nri-secure.co.jp)

Copyright©2009 NRI SecureTechnologies, Ltd. All rights reserved.

はじめに
 概要


本発表は煩雑なDNSSEC運用を楽にするためのソフトウェアであるOpenDNSSECの概要と導入方法をまとめたものです おことわり

内容には十分配慮していますが、断片的な情報に基づいているため誤りを含んでいる可能性があります
また、ソフトウェアが現在のところβ版であるため、正式版では仕様が変更される可能性があります

Copyright©2009 NRI SecureTechnologies, Ltd. All rights reserved.

2

発表のながれ DNSSECのおさらいと運用における課題の再認識 OpenDNSSECの概要
 OpenDNSSECの導入チュートリアル

Copyright©2009 NRI SecureTechnologies, Ltd. All rights reserved.

3

DNSSECのメカニズム(レコードの検証)
一方向関数

レコード

一方向関数

ハッシュ値

レコード署名

ハッシュ値

比
較

署名された
ハッシュ値

ハッシュ値

公開鍵

秘密鍵ゾーンキャッシュサーバ

DNSサーバレコードから生成したハッシュ値とレコード署名を公開鍵で復号したハッシュ値を比較し検証する
Copyright©2009 NRI SecureTechnologies, Ltd. All rights reserved.

4

DNSSECのメカニズム(DS方式)
公開鍵K※TLDの場合は事前に取得
トラストアンカー

比
較
公開鍵K

公開鍵K”
署名された
公開鍵K

公開鍵K
署名された
公開鍵Z

公開鍵Z

秘密鍵Z

ZSK

比
較

公開鍵Z

公開鍵Z

子ゾーン

キャッシュサーバ

親ゾーン

秘密鍵K”

秘密鍵K

DNSサーバKSK
上位DNSサーバ※簡略化のためハッシュ化の過程は省略

DNSサーバのゾーン署名用の公開鍵が真正であることを別の鍵ペアと上位DNSサーバの鍵ペアを用いて検証する
Copyright©2009 NRI SecureTechnologies, Ltd. All rights reserved.

5

鍵更新タイミングでの考慮(その1) 時系列による鍵の状態遷移

Published

Activeゾーンに登録される前の状態のキャッシュが残っている状態

署名に使用されている状態

時系列
ReadyRetired

登録前の状態のキャッシュが無くいつ署名に使用しても問題ない状態

署名には用いられないがActive状態のキャッシュが残っている状態

ゾーンファイル[参考] DNSSEC Key Timing Considerations(draft-morris-dnsop-dnssec-key-timing-01.txt)

キャッシュサーバやリゾルバでキャッシュが保持されるため鍵更新の際にはTTLとキャッシュ状態の考慮が必要
Copyright©2009 NRI SecureTechnologies, Ltd. All rights reserved.

6

鍵更新タイミングでの考慮(その2) 更新方法のバリエーション


ZSK鍵更新時•Pre-publication•

Double Signature

KSK鍵更新時•

Double KSK•

Double Rrset•Double DS

Add new
ZSK

Sign with
new ZSK

Add new
ZSK,Sign
with both

Sign only with
new ZSK, Remove
old ZSK+RRSIG

Add new
KSK

SwitchDS

Add new
KSK+DS

Removeold KSK+DS

Add newDS

SwitchKSK

Removeold ZSK

Removeold KSK

Removeold DS[参考]DNSSEC Key Timing, John A Dickinson, Hohan Ihrenm, Stephen Morris@IETF76
Copyright©2009 NRI SecureTechnologies, Ltd. All rights reserved.

7

DNSSEC運用の課題
 2種類の鍵をゾーン毎に管理しなければならない
 鍵と署名の更新をしなければならない

レコードを登録・修正・削除した場合

署名の有効期限が近づいた場合



定期的もしくは緊急に鍵を交換する場合

 鍵更新時には様々な考慮をしなければならない
 リゾルバで署名の検証が有効の場合署名が正しくないと名前解決に失敗する
 広く普及し正しく運用されなければ意味がない

手順が煩雑かつミスオペレーションが致命的であることから広く普及するためにはこれら課題の解決策が必要
Copyright©2009 NRI SecureTechnologies, Ltd. All rights reserved.

8

OpenDNSSECの概要
 煩雑なDNSSEC運用を楽にするためのソフトウェア


DNSSEC運用の全プロセスを管理し人間の手による作業を削減することでミスを防止
••
•







鍵更新とゾーン署名の自動化
署名プロセスとゾーン情報の完全性チェック
手動更新の支援HSM(Hardware Security Module)の利用を前提とし鍵の安全性とパフォーマンスを両立※ソフトウェア版HSMもあわせて提供
現在はβ版を公開中(Ver.1.0.0b7)
正式版は2010年リリース予定
オープンソース(BSDライセンス)
nominet, NLnet Labs, .se,
SURFnet, Kirei, John A Dickinsonなどが参加

Copyright©2009 NRI SecureTechnologies, Ltd. All rights reserved.

9

OpenDNSSECの構成全体の制御とポリシーの管理を行う

HSM

Enforcer

鍵の生成と管理を行う

OpenDNSSEC

Auditor
定義されたポリシーに従いゾーン情報の完全性確認を行う

Signer
ゾーンへの署名とDNSへの通知を行う

OpenDNSSECの3つの機能とHSMが連動して適切なDNSSEC運用を実現する
Copyright©2009 NRI SecureTechnologies, Ltd. All rights reserved.

10

OpenDNSSECの利用イメージ

HSM
Enforcer
ゾーン情報(署名済)

ゾーン情報(未署名)namedファイル or ゾーン転送 OpenDNSSEC

Auditor

Signer

通知

ゾーン管理者

ゾーン管理者はDNSSECの鍵や署名を意識することなくこれまでと変わらず未署名のゾーンを管理すればよい
Copyright©2009 NRI SecureTechnologies, Ltd. All rights reserved.

11

デモ
1.

OpenDNSSECの動作デモ

2.

OpenDNSSECを用いた手動での署名と鍵の更新

3.

さらにもう一度鍵更新を試みた場合の動作

4.

Auditorとnamed-checkzoneの違い

Copyright©2009 NRI SecureTechnologies, Ltd. All rights reserved.

12

導入までの流れ
1.

必要なモジュールのインストール

2.

OpenDNSSEC/SoftHSMのインストール

3.

OpenDNSSEC/SoftHSMの設定

4.

OpenDNSSECの起動

ハードウェア版HSMを用いる場合はSoftHSMは導入不要
Copyright©2009 NRI SecureTechnologies, Ltd. All rights reserved.

13

インストール OpenDNSSEC/SoftHSM
1.

アーカイブファイルをダウンロードして展開

2.

./configure; make; make install 必要モジュールldns



libxml2, libxml2-dev, libxml2-utils

ruby, rubygems, dnsruby, libopenssl-ruby

sqlite3, libsqlite3, libsqlite3-dev



python, python-4suite-xml必要とされるモジュールのバージョンが新しくOS標準のパッケージではそろわないものが多いため面倒
Copyright©2009 NRI SecureTechnologies, Ltd. All rights reserved.

14

設定ファイルの概要
 conf.xml
OpenDNSSEC全体の設定

 kasp.xml


鍵と署名のポリシー設定

 zonelist.xml


ゾーンとゾーンファイルの設定

 zonefetch.xml


ゾーン情報をゾーン転送で取得する場合の設定(未実装) softhsm.confSoftHSMのリポジトリを設定※設定ファイル中の時間の記述はISO8601形式を使用
Copyright©2009 NRI SecureTechnologies, Ltd. All rights reserved.

15

conf.xml(一部抜粋)<RepositoryList><Repository name="softHSM"><Module>/usr/local/lib/libsofthsm.so</Module><TokenLabel>OpenDNSSEC</TokenLabel><PIN>1234</PIN></Repository></RepositoryList><Enforcer><Datastore><SQLite>/var/opendnssec/kasp.db</SQLite></Datastore><Interval>PT60S</Interval></Enforcer>(省略)<Signer>(省略)<NotifyCommand>/usr/local/bind9.7/sbin/rndc -k/var/named/chroot/etc/rndc.key reload %zone</NotifyCommand></Signer>

 環境に合わせて全体の設定を記述
HSMを利用するための設定

動作間隔

ゾーン情報変更時のnamedへの通知コマンド

Copyright©2009 NRI SecureTechnologies, Ltd. All rights reserved.

16

kasp.xml(一部抜粋)<Signatures><Resign>PT2H</Resign><Refresh>P3D</Refresh>(省略)</Signatures><Keys> (省略) </Keys><Denial><NSEC3>(省略)<Hash><Algorithm>1</Algorithm> (省略)</Hash></NSEC3>(省略)</Denial><Zone>(省略)<SOA><Serial>datecounter</Serial></SOA> (省略)</Zone> 環境に合わせて鍵と署名のポリシーを記述

鍵や署名の時間パラメータ



暗号やハッシュのアルゴリズム



SOAレコードのSerialのインクリメントルール

Copyright©2009 NRI SecureTechnologies, Ltd. All rights reserved.

17

zonelist.xml(一部抜粋)<Zonelist><Zone name="example.jp”><Policy>default</Policy><SignerConfiguration>/var/opendnssec/signconf/example.jp.xml</Signer
Configurration><Adapters><Input><File>/var/opendnssec/unsigned/example.jp</File></Input><Output><File>/var/opendnssec/signed/example.jp</File></Output></Adapters></Zone></ZoneList>

 直接編集せず付属ユーティリティ使用を推奨

ods-ksmutil zone add -z example.jp -p default※SignerConfigurationは初期設定段階では存在しない
Copyright©2009 NRI SecureTechnologies, Ltd. All rights reserved.

18

softhsm.conf# softHSM configuration file
#0:/var/softhsm/slot0.db

 スロットの設定※ 設定段階ではdbファイルは存在しない

Copyright©2009 NRI SecureTechnologies, Ltd. All rights reserved.

19

初期設定
 SoftHSMの初期設定
softhsm --init-token --slot 0 --label ”OpenDNSSEC”※softhsm.conf, conf.xmlとあわせる OpenDNSSECの初期設定(DBへの設定反映)
ods-ksmutil setup※更新はods-ksmutil update

Copyright©2009 NRI SecureTechnologies, Ltd. All rights reserved.

20

使用方法
 OpenDNSSECデーモンの起動/停止


ods-control start /stop 署名の手動更新


ods-signer sign example.jp

 鍵の状態を確認

ods-ksmutil key list

 鍵の手動更新


ods-ksmutil key rollover -z example.jp --keytype zsk

ods-ksmutil key rollover -p default --keytype ksk

 動作はログ出力で確認
Copyright©2009 NRI SecureTechnologies, Ltd. All rights reserved.

21

まとめ
 OpenDNSSECで実現できること
DNSSEC運用の自動化



ミスオペレーションの防止

ポリシーに則った適切なDNSSEC運用

 OpenDNSSEC導入に必要なこと


鍵と署名のポリシーの定義

ゾーン情報とゾーンファイルの対応の定義

 DNSSEC運用における残課題

親ゾーンへのKSK公開鍵情報(DS)の登録

BINDのツール群を組み合わせた運用も一つの方法ですがOpenDNSSECを導入してみるのはいかがでしょうか？
Copyright©2009 NRI SecureTechnologies, Ltd. All rights reserved.

22

参考情報
 公式Web(Wiki, Mailinglist Archive)

http://www.opendnssec.org

 DNSSEC Key Timing

http://www.ietf.org/proceedings/09nov/slides/dnso
p-8.pdf

 DNSSEC Key Timing Considerations


http://tools.ietf.org/id/draft-morris-dnsop-dnsseckey-timing-01.txt

Copyright©2009 NRI SecureTechnologies, Ltd. All rights reserved.

23