[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[port139:01325] .inc の情報漏洩と、拡張子マッピング中のメソッドの制限
- To: port139@xxxxxxxxxxxxx
- Subject: [port139:01325] .inc の情報漏洩と、拡張子マッピング中のメソッドの制限
- From: Tomoki Sanaki <sanaki@xxxxxxxxxxxx>
- Date: Mon, 22 Apr 2002 21:28:30 +0900
こんにちは佐名木です
皆さまには既知だとは思いますが、...ここ数週間の私的活動のまとめ...(^^)
================
背景
----------------
ASP のインクルードファイルは、一般的に拡張子が .inc になっています。
デフォルトの状態では、.inc に対して拡張子マッピングがされていないため、
Web ブラウザから直接、インクルード・ファイルが呼び出された場合、
インクルード・ファイルのソース・コードが漏洩してしまいます。
この対策としては、
1. MMC より該当の仮想ディレクトリの設定から「読み取り権限」をはずす
つまり、「スクリプト」の実行権限だけにする。
2. 拡張子 .inc に対して、スクリプト・マッピングを実施する。
3. インクルード・ファイルを .inc ではなく、.asp や .asa などの
既に拡張子マッピングされているものにする。
などがあると思います。
================
本題
----------------
2. と 3. ですが、ある条件によっては、2. の方が優れていると思いますので、
基本的な路線としては、2. の対策をした方がいいと思います。
ある条件 -------------------------------------------------
a. WebDAV を行っていないので、HTTP 経由でのメソッドは、
HTTP/1.1 程度である。
-> より限定的には、GET,POST,HEAD 程度である。
----------------------------------------------------------
このような条件の場合、
インクルードファイルに対して、クライアントから直接呼び出される事は、
通常運用においては、ありえないと思われるので、
拡張子マッピングの設定画面での「メソッドの制限」をオンにして、
「HEAD」メソッドのみを許可するようにする
-> こうする事で、GET/POST メソッドによって、
クライアントから直接インクルード・ファイルが呼び出されても、
ソースコードの漏洩は起こらない。
================
結論
----------------
WebDAV を使用しないかぎりにおいて、前提中に出ていた対策の 2. を修正する。
2. 拡張子 .inc に対して、スクリプト・マッピングを実施する。
-->
2'. 拡張子 .inc に対して、スクリプト・マッピングを実施する。
さらに、メソッドを「HEAD」だけに制限する。
================
応用
----------------
WebDAV を使用しない限りにおいて、クライアントから直接呼び出される事がない
のは、global.asa も同様である。
よって、拡張子 .asa についても同様にメソッドを「HEAD」に制限する。
(デフォルトは、「GET,HEAD,POST,TRACE」に制限されている)
================
さらに応用
----------------
WebDAV を使用しない限りにおいて、ASP ファイルへの HTTP メソッドは、
「GET」と「POST」程度であろう。
デフォルトでは、「HEAD,TRACE」も設定されているので、それらを排除してもよい。
(「HEAD」メソッドって何がつかうんでしょうか?...検索ロボット?)
================
さらに応用 II (Guard3)
----------------
最新の Guard3 はファイル・パス(URL エンコード前の「?」以前の文字列)での
フィルタリングができるので、「*.inc」や「*.asa」などを reject する。
# HTTP メソッドにも対応したのかな?...
================
WebDAV 使用時
----------------
筆者自身が、WebDAV を使用していないので、よく分からないのが実情。
良く分からないので、この文書にはいたるところで「WebDAV を使用しない限りにおいて」
が連呼されている。
================
WebDAV について(MS の KB からの一部)
----------------
[IIS]ACL によって WebDAV を無効にしても引き続き PUT と DELETE 要求が許可される(JP307934)
http://www.microsoft.com/japan/support/kb/articles/JP307/9/34.asp
[IIS] 不正な WebDAV リクエストが原因で CPU リソースを使い果たす(JP291845)(MS01-016)
http://www.microsoft.com/japan/support/kb/articles/JP291/8/45.asp
IIS 5.0 に対して WebDAV を無効にする方法(JP241520)
http://www.microsoft.com/japan/support/kb/articles/JP241/5/20.asp
WebDAV のサービス拒否に対する修正プログラム(JP298340)(MS01-044)
http://www.microsoft.com/japan/support/kb/articles/JP298/3/40.asp
================
思い当たった経緯
----------------
拡張子マッピングで、メソッド制限をかけた場合、
それ以外のメソッドでアクセスしたらどうなるだろう?
と思って、実験してみますと、(筆者の当初の予想は、読み取られてソースコードが
漏洩)、404 エラーが出た。ので、「これは使える」と思いました。
メソッドを制限して、メソッド欄(テキストボックス)を空欄にする事は許されないんですね。
(IIS5.0)
================
留意点(解決していない問題点)
----------------
メソッドを「HEAD」のみに制限しても、インクルード・ファイルをブルート・フォース
して、ファイルの存在の有無を、HTTP レスポンスから判断できる。
================
メソッドの制限ができない理由がある場合の留意点
----------------
インクルードファイルには、かならず、文頭に「<%」文末に「%>」として、
スクリプトタグ?(「<%」と「%>」で囲まれた領域)外にインクルードする事
良い例:
include.inc ----------------
<%
Function myFunc()
処理内容
End Function
%>
----------------------------
parent.asp
<!--#INCLUDE FILE="include.inc"-->
<%
処理内容
%>
----------------------------
悪い例:
include.inc ----------------
Function myFunc()
処理内容
End Function
----------------------------
parent.asp
<%
<!--#INCLUDE FILE="include.inc"-->
処理内容
%>
----------------------------
(このような場合は、拡張子マッピングしてもソースコードが漏洩してしまう)
(それでも、WSH との関数の共有には有効?....未調査です m(_ _)m)
-----------------------------------------------------
佐名木 智貴(Tomoki Sanaki)
E-mail=active@xxxxxxxxxxxxxxxxxx
PGP FingerPrint
= 34E5 2A31 45C8 2CB5 3CED 0B46 F328 A402 7182 DCC6