− 包括的な対策テクニック −
宮本 久仁男<kmiya@coe.nttdata.co.jp>
NTTデータ COEシステム本部
システム技術開発部第三技術開発担当
2001/12/22
ベーシック認証の危険性 〜ダイジェスト認証の勧め〜
ここまでは危険性をはらんだ個々のメソッドの性質について説明してきましたが、メソッド利用を許可/禁止するのは認証ベースで実施するのが通常です。認証については、大きく分けてベーシック認証とダイジェスト認証の2つあり、よく利用されるのはベーシック認証ですが、それぞれ以下のような特徴があります。
- ベーシック認証
クリアテキストをMIMEエンコード(盗聴されると丸分かり)
- ダイジェスト認証
MD5によるダイジェストを利用(盗聴されてもパスワードはすぐには分からない)
■盗聴に弱いベーシック認証
ベーシック認証について、認証部分のキャプチャを行った結果をリスト19に示します。
PROPFIND /davauth HTTP/1.1 |
リスト19 ベーシック認証の様子。AuthorizationヘッダにIDとパスワードが含まれている |
HTTPヘッダにAuthorizationヘッダがあるのが分かります。ベーシック認証では、IDとパスワードはMIMEでエンコーディングされているだけです。これを解読してみましょう。結果をリスト20に示します。
$ mimencode -u |
リスト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 |
3. インストール
$ /usr/local/apache/bin/apxs -i mod_auth_digest.so |
4. httpd.confに以下の内容を付加する
LoadModule digest_auth_module libexec/mod_auth_digest.so |
5. Apache再起動
$ /usr/local/apache/bin/apachectl restart |
インストール後、リスト21のような内容をhttpd.confなどに設定することで(httpd.confを変更した場合は再起動が必要)、ダイジェスト認証が有効になります。
<Location /davauth> |
リスト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) |
リスト22 ダイジェスト認証を使った場合。認証情報を含んだ文字列が不定になっているのが分かる |
試した範囲では、IE5、cadaver、DAV Explorerの最新版ではダイジェスト認証が利用可能なようです(SkunkDAVでは不可)。
まとめ
これまで述べてきた内容からお分かりいただけるかと思いますが、WebDAVの場合はCGIなどと違ってメソッドそのものを通すことがセキュリティホールになり得ます。また、サーバ自体にWebDAV機能があるような場合、通常のWebサーバに対する以上にコンテンツの改ざんや破壊が容易であり、WebDAV機能そのものに対する取り扱いも慎重に行うべきであるといえるでしょう。
例えばFTPプロトコルなどでもこの部分は同様ですが、FTPの場合はこれまで長い期間使われる中で、どのような設定を行うべきか、どのようなセキュリティホールがあるか(もしくは新規に出現したか)という部分についてWebDAVよりまとまっているといえます。WebDAVについても、使われていくうちにこのような情報はまとまってくると思われますが、いま現在利用されている部分の仕様を把握し、適切な制限をかけることで必要十分なセキュリティを確保することは可能です。
WebDAVは「書ける」プロトコルです。だれでも「書ける」ことによるデメリットを把握し、適切な人だけ「書ける」ようにすることで、より便利に安全に利用しましょう。
■WebDAV日本語情報について
ちょっと今回のテーマからは外れますが、最近日本語リソースを整備しようという動きが見られます。以下に2つ紹介しますので、興味のある方はのぞいてみてはいかがでしょうか。後者には、以前紹介したmod_encodingのその後や本家WebDAV Resourcesに掲載されているFAQの翻訳などもあります。
- びぎねっとのWebDAVページ
http://begi.net/webdav/
- WebDAV Resources JP
http://webdav.todo.gr.jp/
2/3
|
|
||||||
|
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フォーラム全記事インデックス |
|
- 【 pidof 】コマンド――コマンド名からプロセスIDを探す (2017/7/27)
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、コマンド名からプロセスIDを探す「pidof」コマンドです。 - Linuxの「ジョブコントロール」をマスターしよう (2017/7/21)
今回は、コマンドライン環境でのジョブコントロールを試してみましょう。X環境を持たないサーバ管理やリモート接続時に役立つ操作です - 【 pidstat 】コマンド――プロセスのリソース使用量を表示する (2017/7/21)
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、プロセスごとのCPUの使用率やI/Oデバイスの使用状況を表示する「pidstat」コマンドです。 - 【 iostat 】コマンド――I/Oデバイスの使用状況を表示する (2017/7/20)
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、I/Oデバイスの使用状況を表示する「iostat」コマンドです。
|
|