[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[port139:01325] .inc の情報漏洩と、拡張子マッピング中のメソッドの制限



こんにちは佐名木です

皆さまには既知だとは思いますが、...ここ数週間の私的活動のまとめ...(^^)

================
背景
----------------
  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