WebDAV時代のセキュリティ対策[後編]
包括的な対策テクニック

宮本 久仁男<kmiya@coe.nttdata.co.jp>
NTTデータ COEシステム本部
システム技術開発部第三技術開発担当
2001/12/22

ベーシック認証の危険性 〜ダイジェスト認証の勧め〜

 ここまでは危険性をはらんだ個々のメソッドの性質について説明してきましたが、メソッド利用を許可/禁止するのは認証ベースで実施するのが通常です。認証については、大きく分けてベーシック認証とダイジェスト認証の2つあり、よく利用されるのはベーシック認証ですが、それぞれ以下のような特徴があります。

  • ベーシック認証
    クリアテキストをMIMEエンコード(盗聴されると丸分かり)

  • ダイジェスト認証
    MD5によるダイジェストを利用(盗聴されてもパスワードはすぐには分からない)

盗聴に弱いベーシック認証

 ベーシック認証について、認証部分のキャプチャを行った結果をリスト19に示します。

PROPFIND /davauth HTTP/1.1
Accept-Language: ja, en-us;q=0.2
Content-Type: text/xml
Translate: f
Content-Length: 380
Depth: 1
User-Agent: Microsoft Data Access Internet Publishing Provider DAV 1.1
Host: tripmachine
Connection: Keep-Alive
Authorization: Basic d2FrYXRvbm86d2FrYXBhc3M=

<?xml version="1.0" ?>..<propfind xmlns="DAV:">
<prop>
(中略)
</prop>
</propfind>
リスト19 ベーシック認証の様子。AuthorizationヘッダにIDとパスワードが含まれている

 HTTPヘッダにAuthorizationヘッダがあるのが分かります。ベーシック認証では、IDとパスワードはMIMEでエンコーディングされているだけです。これを解読してみましょう。結果をリスト20に示します。

$ mimencode -u
d2FrYXRvbm86d2FrYXBhc3M=
wakatono:wakapass ←IDがwakatono、パスワードがwakapass
リスト20 mimencodeコマンドによる解読

 このように、IDとパスワードは簡単に解読されてしまいます()。

:SSLなどによる暗号化が行われている場合は、ペイロード全体が暗号化されているため、これほど簡単には分かりません。

Apache 1.3.22のダイジェスト認証対応化

 ダイジェスト認証はRFC 2069で規定され、Apache 2.0の新機能としても挙げられるもの(Apache 2.0の新機能とその実力にて、ダイジェスト認証については説明されています)ですが、Apache 1.3.8からexperimentalということでmod_auth_digest.cという名前でダイジェスト認証モジュールが同梱されています。

 Linuxでの簡単なインストール手順を以下に示します。

1. Apache 1.3.22を展開し、

$ cd apache_1.3.22/src/modules/experimental

を実行する

2. apxsを用いて、mod_auth_digest.cをコンパイルする

 乱数生成に/dev/randomを用いるため、コンパイル時に以下のように-D DEV_RANDOMというパラメータを付加する

$ /usr/local/apache/bin/apxs -c -D DEV_RANDOM mod_auth_digest.c
gcc -DLINUX=22 -DUSE_HSREGEX -DUSE_EXPAT -I../lib/expat-lite -fpic -DSHARED_MODULE -I/usr/local/apache/include -D DEV_RANDOM -c mod_auth_digest.c
gcc -shared -o mod_auth_digest.so mod_auth_digest.o

3. インストール

$ /usr/local/apache/bin/apxs -i mod_auth_digest.so

4. httpd.confに以下の内容を付加する

LoadModule digest_auth_module libexec/mod_auth_digest.so
AddModule mod_auth_digest.c

5. Apache再起動

$ /usr/local/apache/bin/apachectl restart

 インストール後、リスト21のような内容をhttpd.confなどに設定することで(httpd.confを変更した場合は再起動が必要)、ダイジェスト認証が有効になります。

<Location /davauth>
        DAV     on
AuthDigestFile     /home/kmiya/htpwd/user.dig
AuthName        editor
AuthType         Digest
<Limit PUT POST DELETE PROPFIND PROPPATCH MKCOL COPY MOVE LOCK UNLOCK>
           Require user wakatono
</Limit>
リスト21 /davauthに対するダイジェスト認証の設定例

  • AuthDigestFile:ダイジェスト認証用の認証データベース
    今回の場合は/home/kmiya/htpwd/user.dig

  • AuthName:認証データベース作成時に、ユーザーごとに設定するrealmで指定した文字列と同じでなくてはならない
    今回の場合はeditor

  • AuthType:Digest(ダイジェスト認証)を指定

wakatono:editor:6a61041820aa2912c622b655a2e28725
/home/kmiya/htpwd/user.digの内容

  • 認証データベースファイルはhtdigestコマンドで作成

  • htdigestコマンドは、Apacheをインストールするとhttpdと同じディレクトリにインストールされる

 ダイジェスト認証に必要な要素は、ユーザーIDとrealmという概念です。同じID、realm、パスワードで複数回の認証を行った際に取得したパケットキャプチャ中の認証関係ヘッダをリスト22に示します。ダイジェストはリスト中のような形で表記され、IDやrealmは平文で流れるものの、パスワードに関連したダイジェストは常に一定というわけではないため、ベーシック認証のように即破られるということはありません。

Webフォルダから送信(1)
Authorization: Digest username="wakatono", realm="editor",
 qop="auth", algorithm="MD5", uri="/davauth",  
nonce="7RAFPA==89f8284a75d5ff7c52b7fae802670b1ffb23d5f2",
 nc=00000004,   cnonce="c5ab0def2461729996ce86378568abfe",
 response="6d7a5ff5269bddc43e8ec5b11fa1bfb9"

Webサーバから送信(1)
Authentication-Info: rspauth="f9779fd5ca1bd267fbd46c0b755f5735", 
cnonce="c5ab0def2461729996ce86378568abfe" , nc=00000004, qop=auth

Webフォルダから送信(2)
Authorization: Digest username="wakatono", realm="editor",
 qop="auth", algorithm="MD5",  uri="/davauth", 
nonce="7RAFPA==89f8284a75d5ff7c52b7fae802670b1ffb23d5f2", 
nc=00000005,  cnonce="69aec56aebe4ffa2e7d5e19411e49359", 
response="7bbe5be65a70501a04b260349a9bf215"

Webサーバから送信(2)
Authentication-Info: rspauth="da8361aff94fd407447234bfa91197cc", 
cnonce="69aec56aebe4ffa2e7d5e19411e49359" , nc=00000005, qop=auth

DAV Explorerから送信
Authorization: Digest realm="editor",username="wakatono",
uri="/davauth/",
nonce="xRIFPA==777d0f40ee9b607c61b4db7058c2c29562689ee4",
response="08d8cf253c59b255ab6a19c2e1fe37f5",algorithm="MD5",
cnonce="40b011027aba8e2a3704d9090859dee5",qop="auth",nc="00000001"

Webサーバから送信
Authentication-Info: rspauth="7da56fc4c30aae234f3f98d3033ddb2e", 
cnonce="40b011027aba8e2a3704d9090859dee5" , nc=00000001, qop=auth
リスト22 ダイジェスト認証を使った場合。認証情報を含んだ文字列が不定になっているのが分かる

 試した範囲では、IE5、cadaver、DAV Explorerの最新版ではダイジェスト認証が利用可能なようです(SkunkDAVでは不可)。

まとめ

 これまで述べてきた内容からお分かりいただけるかと思いますが、WebDAVの場合はCGIなどと違ってメソッドそのものを通すことがセキュリティホールになり得ます。また、サーバ自体にWebDAV機能があるような場合、通常のWebサーバに対する以上にコンテンツの改ざんや破壊が容易であり、WebDAV機能そのものに対する取り扱いも慎重に行うべきであるといえるでしょう。

 例えばFTPプロトコルなどでもこの部分は同様ですが、FTPの場合はこれまで長い期間使われる中で、どのような設定を行うべきか、どのようなセキュリティホールがあるか(もしくは新規に出現したか)という部分についてWebDAVよりまとまっているといえます。WebDAVについても、使われていくうちにこのような情報はまとまってくると思われますが、いま現在利用されている部分の仕様を把握し、適切な制限をかけることで必要十分なセキュリティを確保することは可能です。

 WebDAVは「書ける」プロトコルです。だれでも「書ける」ことによるデメリットを把握し、適切な人だけ「書ける」ようにすることで、より便利に安全に利用しましょう。

WebDAV日本語情報について

 ちょっと今回のテーマからは外れますが、最近日本語リソースを整備しようという動きが見られます。以下に2つ紹介しますので、興味のある方はのぞいてみてはいかがでしょうか。後者には、以前紹介したmod_encodingのその後や本家WebDAV Resourcesに掲載されているFAQの翻訳などもあります。

2/3

Index
WebDAV時代のセキュリティ対策[後編]
 包括的な対策テクニック
  Page 1
レイヤの概念とセキュリティ
mod_dav固有のセキュリティ対策
包括的なメソッド制限の設定
  Page 2
ベーシック認証の危険性 ダイジェスト認証の勧め
 盗聴に弱いベーシック認証
 Apache 1.3.22のダイジェスト認証対応化
まとめ
 WebDAV日本語情報について
  Page 3
Appendix
 今回利用したツール 〜Network Grep〜
 ngrepのインストール
 まずは使ってみよう
 実際に文字列パターンなどを指定したキャプチャの仕方

Linux Square全記事インデックス


 Linux Squareフォーラム WebDAV関連記事
特集:次世代プロトコルWebDAVの可能性[前編]
技術仕様徹底解説

将来、SambaやCVSを不要にする可能性を秘めた「WebDAV」。このプロトコルの仕様から実用化までを徹底解説。今回は、技術仕様を明らかにする
特集:次世代プロトコルWebDAVの可能性[中編]
WebDAVクライアント/サーバ環境の構築
WebDAVの実装はすでに存在する。LinuxによるWebDAVサーバの構築とクライアントの整備を行い、実際に使ってみよう
特集:次世代プロトコルWebDAVの可能性[後編]
日本語ファイル名の利用とバージョン管理
日本語ファイル名を扱えるようにするほか、WebDAVの「V」を司るバージョン管理機能を実現。WebDAV解説完結編!
特集:WebDAV時代のセキュリティ対策[前編]
WebDAVのメソッドは便利な反面、セキュリティホールとなり得る。しかし、適切な対策を講じることでメソッドの危険性は取り除くことができる
特集:WebDAV時代のセキュリティ対策[後編]
WebDAVの使用に際し、包括的な対策を行っておくのも重要である。何をどのように設定すればよいのかをここで明らかにする
特集:Apache 2.0でWebDAV
Apache 2.0の正式リリースでWebDAVも新たな段階に入った。一方で、1.3時代のmod_encodingがうまく機能しないという問題も浮上した
特集:Subversionによるバージョン管理
DeltaVがRFCとしてリリースされ、WebDAVのバージョン管理機能も足元か固まった。DeltaVの実装である「Subversion」を導入しよう
Linux Squareフォーラム全記事インデックス

MONOist組み込み開発フォーラムの中から、Linux関連記事を紹介します


Linux & OSS フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Linux & OSS 記事ランキング

本日 月間