▽ 発行メールマガジン一覧に戻る

           ┌──────────┬───┬───┬───┬
◆Scan WEB Security◆ │            │ home │ bbs  │ link │
           ├──────────┴───┴───┴───┴
     2002-11-27  │
    −pre-Up 001− │
 ┌─────────┘
 │
─┴─────────┐
 実践 CGIセキュリティ◆──────────────────────┐
─┬──────┬──┘−KENT WEB特別企画−            │
 │      │     第1回 "ASKA BBS"を検証する−1−    │
 │      └─────────────────────────┘
─┴─────────┐
 Webセキュリティ入門 ◆──────────────────────┐
─┬──────┬──┘−入門講座−                │
 │      │     第1回 WEBアプリケーション攻撃の    │
 │      │                 ステップ(前編)│
 │      └─────────────────────────┘
─┴─────────┐
 Webセキュリティ速報 ◆──────────────────────┐
─┬──────┬──┘−HOT Topics−               │
 │      │     phpNukeに複数の脆弱性が発見       │
 │      └─────────────────────────┘
 │


┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
◆実践 CGIセキュリティ
│      Webアプリケーションセキュリティ〜検証と対策〜
└──────────────────────────────────
 第1回 "ASKA BBS"を検証する−1−
---------------------------------------------------------------------

「ASKA BBS」とは、CGIスクリプト配布サイトKENT WEB ( http://www.kent-web.com/ )
にて公開する、Perl言語で記述された電子掲示板である。1999年10月に同サイ
トにて公開以来、これまで約17万5千本ダウンロードされた人気プログラムで
ある。
 今回はこの「ASKA BBS」を取り上げて、入力内容のチェックとその対処方法
を説明することとする。

「ASKA BBS」は以下の機能を持つ電子掲示板である。

・記事の閲覧表示
・投稿記事の受け付け
・記事のキーワード検索
・管理者による記事削除

このうち、投稿記事を受け付けるための入力項目として、次の内容を有してい
る。

・名前欄
・メールアドレス欄
・記事タイトル欄
・本文メッセージ欄
・URLアドレス欄
・削除用パスワード欄

 電子掲示板の場合、特に気を付けなければならないことは、ユーザから入力
を受け付けるときである。誤った入力内容や、危険なデータを排除する必要が
あるためである。「ASKA BBS」の場合、投稿記事を受理する際には、次の内容
をチェックすることとしている。

1.膨大な量の投稿データは排除する
2.フォームのメソッドプロパティは、POSTしか受け付けない
3.HTMLタグは無効化する
4.入力項目のうち、必須内容のものは入力チェックする
5.重複投稿や連続投稿は拒否する

 それでは、以下にそれぞれのコーディング例を見ていくこととする。

1.膨大な量の投稿データは排除する

 投稿されたデータを受け付けるとき、あまり大きなデータ量のものは受け付
けないようにしている。この理由は2点あり、1点目はあまりに長文のメッセー
ジを受け付けると、記事を閲覧するときに見にくいものとなり、閲覧に適した
分量というものを考慮するためである。2点目はサーバへの負荷を配慮したも
のであり、あまりに膨大なデータ量をすべて受理してしまうことはセキュリテ
ィ上危険であるためである。

●コーディング例 (1)
if ($ENV{'REQUEST_METHOD'} eq "POST") {
$post_flag=1;
if ($ENV{'CONTENT_LENGTH'} > 51200) { &error("投稿量が大きすぎます"); }
read(STDIN, $buf, $ENV{'CONTENT_LENGTH'});
} else {
$post_flag=0;
$buf = $ENV{'QUERY_STRING'};
}

 データを受け付ける場合、送信元フォームのメソッドプロパティがPOSTと
GETでは、受け取り方が異なるため、条件式でそれぞれに対応した処理を行な
っている。POSTの場合、受け取るデータ量(バイト)は、環境変数$ENV
{'CONTENT_LENGTH'}で知ることができるため、そのデータ量が51200バイト
(50KB)以上の場合にはエラー処理とするものである。
 また、メソッドプロパティがGETの場合には、当該エラー処理を行っていな
いが、これはGETで送られるデータ量にはもともと制限があり、大量のデータ
を受け付けることができないためである。


2.フォームのメソッドプロパティは、POSTしか受け付けない

 これはフォームのメソッドプロパティでは、GETは受け付けないという制限
である。もし、GETでの記事投稿が可能であれば、掲示板のURLアドレスへパラ
メータを付加するだけで容易に書き込みが可能となり、無作為な記事投稿につ
ながる恐れがあるためである。

●GETでの記事投稿例
http://www.xxx.xxx/aska.cgi?mode=regist&name=X&comment=hihihi
(掲示板のURLアドレスにパラメータを付加し、安易な連続投稿が可能とな
 る)

 こうしたGETでの安易な投稿を排除するために、コーディング例(1)にて、受
け付けるデータがPOSTとGETの場合で、変数$post_flagの値を切り替え、その
判別を行なうものである。具体的には、GETの場合には変数$post_flagに0が代
入されるため、記事を受け付ける際に次のようにコーディングを行なうことが
できる。

●コーディング例 (2)
if ($postonly && !$post_flag) { &error("不正なアクセスです"); }
(変数$postonlyは、GET排除を行なうという設定値)


3.HTMLタグは無効化する

 投稿データを受け付ける際に、セキュリティ上最も重要な要素が、HTMLタグ
の無効化である。このHTMLタグを確実にフィルタリングしないと、投稿記事中
に好ましくない画像の貼り付けをされたり、危険なタグを埋め込まれ、掲示板
を閲覧する者に被害を与えてしまう危険があるためである。
 そこで、「ASKA BBS」では、フォームデコード処理を行なう際に、次のよう
なコーディングを行ない、HTMLタグの無効化を行なっている。

●コーディング例 (3)
$val =~ s/&/&/g;
$val =~ s/"/"/g;
$val =~ s/$val =~ s/>/>/g;


4.入力項目のうち、必須内容のものは入力チェックする

 投稿記事を受け付ける際に、必須項目を設けてその入力内容のチェックを行
なっている。「ASKA BBS」の場合には、名前とコメントの2項目が必須のため、
以下のようにコーディングを行なう。

●コーディング例 (4)
if ($in{'name'} eq "") { &error("名前が入力されていません"); }
if ($in{'comment'} eq "") { &error("コメントが入力されていません"); }

(変数$in{‘name’}は、投稿者名、変数$in{‘comment’}はコメントの入力
 内容である)

 また、e-mailの入力の場合には、仕様上入力必須とはしていないが、もし入
力されている場合には、正しくメールアドレスの形式になっているかどうかを、
正規表現で簡易的にチェックを行なっている。

●コーディング例 (5)
if ($in{'email'} && $in{'email'}!~ /[\w\.\-]+\@[\w\.\-]+\.[a-zA-Z]{2,5}$/)
{ &error("Eメールの入力内容が不正です"); }


5.重複投稿や連続投稿は拒否する

 同じ記事を重複して投稿したり、あるいは同一人物から連続して投稿を行な
うことを排除することも重要である。これは投稿者が間違えて重複投稿してし
まう場合や、いたずら目的に故意に何度も投稿することを排除するものである。

●コーディング例 (6)
open(IN,"$logfile") || &error("Open Error : $logfile");
@file = ;
close(IN);

# 重複投稿チェック
local($no,$nam,$com,$hos,$tim) = (split(/<>/, $file[0]))[0,2,5,7,9];
if ($in{'name'} eq $nam && $in{'comment'} eq $com) {
&error("二重投稿は禁止です");
}
# 同一ホストの連続投稿チェック
$time = time;
if ($host eq $hos && $wait > $time - $tim) {
&error("連続投稿はもうしばらく時間をおいて下さい");
}

 重複投稿については、直前の記事を参照し、入力される名前とコメントが、
直前の記事と同じであればエラー処理としている。
 また同一人物の連続投稿については、直前の記事のホスト情報と、今回投稿
する者とのホスト情報を照合し、一定時間内であれば、エラー処理とすること
にしている。この一定時間とは、変数$waitによって定義され、設定項目で秒
数を指定することができるようにしている。

                          (執筆:KENT WEB)


┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
◆Webセキュリティ入門 −WEBアプリケーションセキュリティの種類の整理−
└──────────────────────────────────
 第1回 WEBアプリケーション攻撃のステップ(前編)
---------------------------------------------------------------------
 本稿では、WEBアプリケーションセキュリティについての基礎的な解説を行
なう予定です。

 そもそもWEBアプリケーションとは何か、というところから確認しましょう。
WEBアプリケーションとは、WEBサーバ上のプログラムを呼び出すことにより、
その都度呼び出し結果としてHTML文書を生成する仕組みのことを指します。
具体的に言うと、用語検索や注文など、FORMに入力された文字を確認画面とし
て表示させるなどの、動的なHTML文書生成のことです。

 このように身近な存在であるWEBアプリケーションにセキュリティ上の問題
があった場合、「個人情報の流出」や「外部プログラムの起動」などの問題が
起こる可能性があるのです。


● 本稿の前提

【想定している読者のレベル】

 ・CGI、javaスクリプトなどを含めたWEBページ作成の基本知識のある方。
  HTMLタグを直接書けることを想定しています。
  SQLの基礎知識が必要になる場合もありますが、その際は、簡単な解説
  をくわえるつもりです。

 ・CGIに関しては、すでにあるCGIの設置(パーミッションの設定など)と
  簡単なカスタマイズができるレベルを想定しています。自分で白紙の状
  態からCGIを設計、開発できるレベルの方は想定していません。

 ・WEBアプリケーションの設計および管理者担当の方も対象としています。
  個別のコーディングは知らなくても、設計上盛り込むべき防御策や運用
  上の留意事項などを考える際のお役にたつと思います。

【対象とするWEBアプリケーションセキュリティの範囲】

 細工したリクエスト(crafted url)およびPOSTメソッドの悪用を中心に
 とりあげます。クロスサイトスクリプティング、あるいはコマンドインジェ
 クションといった名称で呼ばれる攻撃などがこれに当たります。
 各攻撃について詳しくは、本稿で説明していきます。

【記述方法】

 セキュリティの問題を考える際に、現象面からアプローチする方法や原因
 からアプローチする方法、技術的な可能性からアプローチする方法など、
 さまざまなものがあります。今回は、現象面からアプローチする方法をと
 ります。
 つまり攻撃者の視点に立ち、攻撃アプローチの整理を行い、その防御方法
 を考えることになります。実践的であると考えられることと筆者が書きや
 すいというのが主な理由です。


● WEBアプリケーション攻撃のステップ(前編)

 WEBアプリケーションセキュリティの種類の整理と書きましたが、より正確
に言うなら、攻撃のステップから考えた整理といえます。
 WEBアプリケーションへの攻撃は、大きく3つのステップに分けられます。

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

▼第1ステップ:利用者からサーバへのリクエスト送信

▼第2ステップ:サーバ側のリクエスト処理

  サーバ側でリクエスト解釈、処理(検索なら検索処理)を行なう部分です。

▼第3ステップ:サーバから利用者へのリクエスト応答送信

  サーバから利用者に対して応答ページを自動生成、送信する部分です。

(▽第4ステップ:応答に基づいた利用者側処理)

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

 利用者には攻撃者も含まれます。あえて利用者としたのは、クロスサイトス
クリプティング(以下、CSS)のように、必ずしも攻撃者ではないことがある
からです。

 まず、簡単な例で、順を追ってみてみましょう。

 サーバ側で本来外部には見せてはいけないファイルを、パーミッションの設
定ミスで見られるようなっているケースです。この場合、利用者=攻撃者であ
り、攻撃者は特定のリクエストを送信することで秘密のファイルを入手するこ
とができます。

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

▼第1ステップ:利用者からサーバへのリクエスト送信

 まず攻撃者は、下記のような方法でサイト管理者が公開するつもりのない
 ファイルを見つけます。

 ◇データファイルに用いられることの多いファイル名の一部をキーワード
  としてサーチエンジンで検索する。
 (バカバカしいほど初歩的なことですがこれでかなり見つかります。)

 ◇広く配布されているWEBアプリケーションの中には、データファイルの
  名称が固定のものもあります。そのようなWEBアプリケーションを利用
  しているWEBサイトを発見した攻撃者は容易に利用されているデータ
  ファイル名を推定することができます。

  実際の攻撃にあたっての手順は、逆で、まず当該サイトのWEBアプリケ
  ーションのCGIやFORMの名称を確認し、サーチエンジンでその名称のCGI
  やFORMを利用するWEBアプリケーションを探すことになります。

 ◇よく使われるデータファイル名を数うちゃあたる方式で試みます。

 これらの方法によりあるサイト(ここでは http://data??.com/ とする)に
 公開するつもりのないファイル( data.csv とする)を発見した攻撃者は、
http://data??.com/cgi-bin/data.csv にアクセスします。

▼第2ステップ:サーバ側のリクエスト処理

 サーバ側は、来たリクエストをそのまま処理します。該当するファイル
 “data.csv”を探し出し、送信準備をします。

▼第3ステップ:サーバから利用者へのリクエスト応答送信

 サーバから http://data??.com/cgi-bin/data.csv の内容を攻撃者に送信し
 ます。攻撃者のブラウザには、秘密の情報が表示されます。

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

 このように本来秘密にしておきたいファイルを無理矢理表示させることを、
「強制ブラウジング」と呼びます。
 このような流れが、WEBアプリケーションに対する攻撃の基本的なステップ
になります。

 次回は、ちょっと複雑な例を元に、もう一段階複雑なWEBアプリケーション
への攻撃、第4ステップまでをご説明していきましょう。

                 (執筆:Prisoner Langley/リコピン)


┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
◆Web Security Flash
└──────────────────────────────────
 Hot Topic<phpNukeに複数の脆弱性が発見>
---------------------------------------------------------------------

▽ python------------------------------------------------------------
Pythonには推測が可能なテンポラリファイルを作成することによるため、
シンボリックリンク攻撃の問題が存在する。攻撃者にこのセキュリティ
ホールを利用されると、ローカルから任意のコードを実行されてしまう可
能性がある。

MandrakeSoft Security Advisory 2002/11/25 追加
MDKSA-2002:082 python
http://www.mandrakesecure.net/en/advisories/advisory.php?name=MDKSA-2002:082

Debian GNU/Linux -- Security Information
DSA-159-1 python -- insecure temporary files
http://www.debian.org/security/2002/dsa-159

IIS X-Force Database 2002/09/11 追加
Python os._execvpe function temporary file symlink attack
http://www.iss.net/security_center/static/10009.php

Debian GNU/Linux -- Security Information 2002/09/11 追加
DSA-159-2 python -- insecure temporary files
http://lists.debian.org/debian-security-announce/debian-security-announce-2002/msg00082.html

Vine Linux errata 2002/10/04 追加
python にセキュリティホール
http://www.vinelinux.org/errata/25x/20021002-5.html

SecurityFocus 2002/10/04 追加
Gentoo Linux : python
http://online.securityfocus.com/advisories/4521

Turbolinux Japan Security Center 2002/11/05 追加
python  os.pyの脆弱
http://www.turbolinux.co.jp/security/python-2.2-3.html

LinuxSecurity 2002/11/15 追加
Caldera: python insecure temporary file vulnerability
http://www.linuxsecurity.com/advisories/caldera_advisory-2573.html

SCO Security Advisory 2002/11/18 追加
CSSA-2002-045.0 Linux: python insecure temporary files in 
os._execvpe
ftp://ftp.sco.com/pub/security/OpenLinux/CSSA-2002-045.0.txt

Vine Linux errata [2.1.x] 2002/11/19 追加
python にセキュリティホール
http://www.vinelinux.org/errata/2x/20021117-4.html

▽ phpNuke-----------------------------------------------------------
phpNukeに複数のクロスサイトスクリプティングの脆弱性が発見された。
一つ目は、Search Moduleの脆弱性。
二つ目は、Multiple ModuleのExtended Tagに含まれる脆弱性。
これらの問題を利用することにより、ユーザーアカウントのハイジャック
や、管理権限の奪取などが可能になる。

SecuriTeam.com
Multiple phpNuke Modules Vulnerable to Cross-Site Scripting
http://www.securiteam.com/securitynews/6R00N1561Q.html

SecurityFocus
Multiple phpNuke Modules Vulnerable to Cross-Site Scripting 
http://online.securityfocus.com/archive/1/300956/2002-11-22/2002-11-28/0

▽ phpBB-------------------------------------------------------------
phpBBで利用されているviewtopic.phpに、クロスサイトスクリプティング
の脆弱性が発見された。この問題を利用することにより、リモートの攻撃
者に悪意のあるJavaスクリプトを挿入されてしまう。

SecuriTeam.com
XSS Vulnerability Found in phpBB (Highlight)
http://www.securiteam.com/unixfocus/6D00P0A60G.html


▼情報公開原則━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 編集部のセキュリティ情報の公開の考え方については下記をご参照ください。
 情報公開原則 : http://vagabond.co.jp/c2/info_dis_pri.htm


┏━ バガボンド社メールマガジン ━━━━━━━━━━━━━━━━━━┓

 ◆「Scan Security Wire」
  国内最大のコンピュータセキュリティ専門誌
   http://shop.vagabond.co.jp/m-ssw01.shtml 

 ◆「Scan Daily Express」
  セキュリティホール・ウイルス情報等を日刊で配信
   http://shop.vagabond.co.jp/m-sdx01.shtml 

 ◆「Scan Incident Report」
  ネットワークにまつわる法規・規格や、事件の検証レポートを掲載
   http://shop.vagabond.co.jp/m-sir01.shtml 

 ◆「Scan Tech Report」
  Exploitコード・セキュリティツールを解説する技術情報専門誌
   http://shop.vagabond.co.jp/m-str01.shtml 

 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
 ◇「アドバイザリー・バガボンド」
   バガボンド社リリースのメールマガジン・調査資料販売サイト
   http://shop.vagabond.co.jp/ 

┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
★ 広告募集中! お問い合わせは ad@vagabond.ne.jp 迄 ★
料 金 体 系 → http://vagabond.co.jp/top/mail/index.html 
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

***************************読者の皆様へ*******************************
------------------株式会社バガボンド Scan編集部------------------
         http://www.vagabond.co.jp/c2/scan/
 Copyright(c) 2002 Vagabond co,.Ltd All Rights Reserved.
**********************************************************************

▽ 発行メールマガジン一覧に戻る