WebDAV時代のセキュリティ対策[前編]
− 各メソッドに内在する脅威 −
宮本 久仁男<kmiya@coe.nttdata.co.jp>
NTTデータ COEシステム本部
システム技術開発部第三技術開発担当
2001/12/15
WebDAVの特徴と機能
次世代プロトコルWebDAVの可能性で、WebDAVの技術仕様と構築・運用方法について解説しました。そのときに説明したとおり、WebDAVはHTTPを読むだけのプロトコルから書くこともできるプロトコルへと拡張したものです。その主な機能をあらためて振り返ると、
- ファイル作成
- ファイルへの書き込み
- ディレクトリ作成
- コピー
- 移動
- 削除
- ロック操作
といったものが挙げられます。見てのとおり、ファイル操作に必要とされる機能が拡張されていることが分かります。この機能を何の制限もなく公開することは、「データを壊してください」というに等しい行為です。とはいえ、機能として便利なものがそろっているのも事実です。適切な制限をかけたうえで利用すれば、その威力は絶大なものとなります。
本稿では、Apache 1.3.22+mod_dav-1.0.3(2001年11月28日時点の最新版)の組み合わせを例に、制限をかけない(もしくは破られた)際の影響とその対策について、各メソッドの機能とともに説明します。
検証用クライアント環境としては、基本的にはtelnetによる80番ポートの接続を用いていますが、検証結果を分かりやすくするため必要に応じてWebフォルダ、SkunkDAV、cadaver(編注)などを使っています。
編注: Webフォルダ:Windows 98 SE以降およびWindows 2000から標準実装されているWebDAVクライアント機能(Windows 95やWindows NT 4.0などもIE 5.xをインストールすれば利用可能) SkunkDAV:Java製WebDAVクライアント cadaver:UNIX系OS用CUIベースのWebDAVクライアント 詳しくは「WebDAVクライアント/サーバ環境の構築」参照。 |
メソッドとステータスコードから見るセキュリティホール
各メソッドの詳細に入る前に、WebDAVに関連するメソッドやステータスコードを概観しておきましょう。メソッドやステータスコードにはどのような種類があり、どのような危険性があるのかを大まかにつかんでおけば、後述する詳細も理解しやすいでしょう。
まず、表1にメソッド、表2にステータスコードの種類を示します。
メソッド
|
機能
|
PROPFIND | プロパティの取得 |
PROPPATCH | プロパティの変更 |
MKCOL | コレクションの作成 |
COPY | コレクションを含むリソースおよびプロパティの複製 |
MOVE | コレクションを含むリソースの移動 |
LOCK | コレクションを含むリソースのロック |
UNLOCK | コレクションを含むリソースのロック解除 |
OPTIONS | 既存のメソッドと同じ |
GET | 既存のメソッドと同じ |
HEAD | 既存のメソッドと同じ |
POST | 既存のメソッドと同じ |
PUT | リソースの作成 |
DELETE | コレクションおよびそのコレクションに含まれるリソースの削除 |
表1 WebDAV関連メソッド |
値
|
ステータス
|
意味
|
102 | Processing | リクエストは受け付けたが、まだ処理が終わっていない |
207 | Multi-Status | 複数のステータスを持つ |
422 | Unprocessible Entity | リクエストの書式は正しいが、その内容が間違っている |
423 | Locked | リソースはロックされている |
424 | Failed Dependency | あるリクエストに関連したリクエストが失敗したため、依存関係が保てない |
507 | Insufficient Storage | 記憶領域が不足している |
200 | OK | PROPPATCHが成功した(PROPPATCH) |
201 | Created | リソース/コレクションが作成された(MKCOL、PUT) |
コピーが成功(コピー先は新規作成)した(COPY) | ||
移動が成功(移動先のリソースなどは新規作成)した(MOVE) | ||
204 | No Content | リソース/コレクションの削除が成功した(DELETE) |
コピーが成功(コピー先は既存のリソース)した(COPY) | ||
移動が成功(移動先のリソースなどは既存)した(MOVE) | ||
ロックが解除された(UNLOCK) | ||
400 | Bad Request | ロック解除時に指定したロックトークンが不正なものだった(UNLOCK) |
403 | Forbidden | サーバ側の設定で、コレクションの作成を許していない(MKCOL) |
認証設定などで、許可されていないURL下にコレクションを作成しようとした(MKCOL) | ||
コピー元とコピー先が同一(COPY) | ||
何らかの理由でプロパティを変更できなかった(PROPPATCH) | ||
移動元と移動先が同一(MOVE) | ||
404 | Not Found | プロパティが見つからない(PROPFIND) |
405 | Method Not Allowed | すでに存在する名前のコレクションを作ろうとした(MKCOL) |
409 | Conflict | 読み取り専用など、変更できないプロパティを変更しようとした(PROPPATCH) |
存在しないコレクションの下にリソースやコレクションを作ろうとした(MKCOL、PUT、COPY、MOVE) | ||
例:http://localhost/DAV/の下にDAV2というコレクションがない状態でhttp://localhost/DAV/DAV2/DAV3を作ろうとした | ||
412 | Precondition Failed | 指定したリソースがロック可能な状態ではないか、サーバがlockinfo XMLエレメントの要求を満足できなかった |
プロパティの内容を保持できなかった、もしくはOverwriteヘッダの値がFである(COPY、MOVE) | ||
415 | Unsupported Media Type | MKCOLのリクエストボディが受け付けられないものだった(MKCOL) |
502 | Bad Gateway | コピー/移動先が別サーバであり、かつリソースへのアクセスができない(COPY、MOVE) |
表2 新設/拡張されたステータスコード |
表2の中で、注意すべきステータスコードと考えられるセキュリティ上の脅威を表3に示します。
値
|
ステータス
|
メソッド
|
意味
|
想定される脅威
|
102 | Processing | COPYなど | リクエストは受け付けたが、まだ処理が終わっていない | 処理時間のかかるリクエストが発行される(DoS) |
207 | Multi-Status |
-
|
複数のステータスを持つ | ステータスの1つに、脅威となるステータスが含まれる |
423 | Locked | LOCK | リソースはロックされている | 勝手にリソースがロックされる(DoS) |
507 | Insufficient Storage | COPY、PUT | 記憶領域が不足している | 不正に記憶領域を使用される(DoS) |
200 | OK | PROPPATCH | PROPPATCHが成功した | リソースのプロパティが改ざんされる(破壊) |
201 | Created | MKCOL、PUT | リソース/コレクションが作成された | リソースが不正に作成される(不正利用) |
COPY | コピーが成功した(コピー先は新規作成) | リソースが不正に作成される(不正利用) | ||
MOVE | 移動が成功した(移動先のリソースなどは新規作成) | リソースの位置が不正に移動される(改ざん) | ||
204 | No Content | DELETE | リソース/コレクションの削除が成功した | リソースが破壊される(破壊) |
COPY | コピーが成功した(コピー先は既存のリソース) | コピー先のリソースが破壊される(破壊) | ||
MOVE | 移動が成功した(移動先のリソースなどは既存) | 移動先のリソースが破壊される(破壊) | ||
UNLOCK | ロックを解除された | 不正にロックが解除される(改ざん) | ||
表3 注目すべきステータスコード |
また、表3には含まれませんが注意すべきメソッドとして、リソース/コレクションのプロパティの取得を行う「PROPFIND」があります。
表3のステータスコードの大半はWebDAVで新規に追加されたメソッドに対するものですが、PUTなど一部既存のメソッドに関するものも含まれます。このように、従来のメソッドも拡張が施されていますので、新旧に関係なくあらためてメソッドの動きを見直した方がよいでしょう。
1/4
|
|
||||||||
|
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」コマンドです。
|
|