個人的なメモと備忘録 2005年 1月

HOME | LastUpdate: 2005-06-22

目次


2005.01.30(Sun)

>>Web アプリケーションセキュリティ

>>セキュリティ関係

*HTTP

セキュリティホール memo の 2005.01.27 の記事に HTTP Response Splitting Attack という攻撃手法についてのまとめがあります。

HTTP Response Splitting Attack はクロスサイトスクリプティング (XSS) と同様に、web アプリにおける入力値の除染が不十分なことが引金になる。ただし、XSS は「スクリプトとみなされるような入力」を許容してしまうために発生するが、HTTP Response Splitting Attack は「複数の HTTP レスポンスとみなされるような入力」を許容してしまうために発生する。典型的な例として、

  • リダイレクトをする web アプリにおいて、
  • アクセス元 URL をパラメータ (の一部) としてリダイレクトする場合に、
  • パラメータの除染が不十分である

と、HTTP Response Splitting Attack に対して脆弱である、とされている。 (詳細は論文読んでください)

*BIND

DNS サーバの ISC BIND 8.4.4/8.4.5 と 9.3.0 にセキュリティ問題が見つかっています。

BIND 8.4.4 と 8.4.5 のバージョンに、ネームサーバや IP アドレスを調べる際に使用する配列(q_usedns)の処理で Buffer Overflow が起きる可能性があり、DoS 攻撃が可能という問題が見つかっています。

この問題は BIND 8.4.4 と 8.4.5 のみで、BIND 8.4.6 で修正されています。また回避方法として、named.conf で再起的問い合わせを無効にするという方法が挙げられています。

options {
    ...
    recursion no;
    fetch-glue no;
    ...
}

また、BIND 9.3.0 には、DNS Security Extensions(DNSSEC) が有効になっている場合、authvalidated() が不正な要求を処理する際に内部整合性テスト失敗し、named が不正終了してしまうという問題が報告されています。

この問題は BIND 9.3.1 で修正されています。また、回避方法として、named.conf で、dnssec-enableno にする(デフォルト値)という方法が挙げられています。

dnssec-enable no;
*MySQL UDF Worm

Windows 上で動作する MySQL に感染するワームが広まっているようです。

MySQL の Security Alert 01/27/2005 によると、MySQL 上に存在するパスワードを設定していない、または、弱いパスワードが設定されている root アカウントを辞書攻撃によって解析し、感染した後、他のシステムに対して感染活動を行うようです。

ワームに感染しているかを確認するためには、MySQL に対して以下の命令を実行し、"app_result" という名前の UDF(User Defined Function) が存在しないかどうかを確認します。

SELECT * FROM mysql.func;

もし、"app_result" が見つかった場合は、感染しています。以下の命令を実行すると駆除できるそうです。

DROP FUNCTION app_result;

感染しないためには、MySQL の全てのアカウントに強いパスワードを設定する、ファイアウォールを使用して MySQL サーバを保護する(Port 3306)という方法が挙げられています。

*Squid

Squid に WCCP recvfrom() 関数が確保されたバッファ以上のデータを受けるという問題があり、攻撃者から通常より大きな WCCP メッセージを受けると Buffer Overflow を引き起こす可能性があるそうです。

この問題に対する Patch が公開されていますので、適用して Squid を再構築するか、squid.conf の設定で WCCP を無効にすることで回避できます。

WCCP を無効にするには、wccp_router ディレクティブをコメントアウトします。または、Squid をコンパイルする際の configure オプションに --desable-wccp を加えることでも無効にすることができるそうです。

(2005.02.06 追加)

*Gentoo Linux

>>気になったニュース、ツールなど

▲ 目次へ戻る


2005.01.23(Sun)

>>PHP

最近見つけた PHP 関連で個人的に興味があったもののメモです。Open Source Web Development - Dev Shed に公開されている文書は勉強になりそうなものが多いです。

>>セキュリティ関係

*Squid

Squid Advisories に最近報告された問題が追加されています。Squid を使用している場合は、Patch を適用して再構築するか、設定によって問題を回避するようにしておくと安全です。

また、Squid には別のセキュリティ問題も報告されています。Patch が公開されています。

*Java

Java Plug-In に 2 つのセキュリティ問題が報告されています。

  • Java SDK/JRE 1.4.2 と 1.3.1_12 以前のバージョンと Internet Explorer を使用している場合、 Java コードの中で Javascript の呼び出しの取り扱いに問題があり、Java アプレットからローカルファイルの変更や ローカルのアプリケーションを起動される可能性がある。
  • 不正な Java アプレットが同じ Web ページにある別の Java アプレットに対して、ファイルや Web ページを読み込むことを 妨害することができる。

この問題は Java SDK/JRE 1.4.2_06 と 1.3.1_13、5.0 以降のバージョンでは修正されています。

*Mozilla

Known Vulnerabilities in Mozilla(日本語訳 : Mozilla における既知の脆弱性 )のページが更新され、Firefox 1.0、Thunderbird 1.0、Mozilla 1.7.5 で修正されたセキュリティ問題についての情報が追加されています。

(2005.01.30 追加)

(2005.02.06 追加)

*ImageMagick

ImageMagick の PSD ファイルのデコードモジュールに Buffer Overflow の問題があり、任意のコードが実行されてしまう可能性があるそうです。現在は ImageMagick 6.1.9-1 が公開されていますが、この問題は ImageMagick 6.1.8-8 で修正されているそうです。

*Xpdf

Xpdf で PDF ファイルを読み込む時の Decrypt::makeFileKey2() 関数に問題があり、不正な PDF ファイルを開くと Buffer Overflow を起こす可能性があるそうです。この問題は Xpdf 3.00pl3 で修正されています。

KDE に含まれる kpdf、KOffice PDF Import Filter なども同じ問題が報告されています。

*Ethereal

Ethereal 0.10.8 以前のバージョンに多くのセキュリティ問題が報告されています。Ethereal 0.10.9 で修正が行われていますので、Ethereal を使用している場合はバージョンアップした方が安全です。

*その他
  • JPCERT/CC REPORT 2005-01-19
    • [1] Microsoft Windows の複数の脆弱性
    • [2] Sun Solaris Management Console (SMC) のユーザアカウント作成に脆弱性
    • [3] LDAP サーバのバッファオーバーフローの脆弱性
    • [4] Mozilla のバッファオーバーフローの脆弱性
    • [5] Namazu の脆弱性に関する追加情報
    • [6] インターネット定点観測システム公開情報に長期間のグラフを追加
    • [今週の一口メモ] Web サイトの偽装を見破るには その2
  • Mac OS X Multiple Vulnerabilities (Secunia)

>>気になったニュース、ツールなど

▲ 目次へ戻る


2005.01.16(Sun)

>>セキュリティ関係

*Windows

Windows の修正プログラムが公開されています。

Microsoft がウイルス対策のツールを公開しています。

*Mozilla

Mozilla や Mozilla Firefox でダウンロードダイアログを偽装される問題についての追加情報がありました。

*Opera

Opera 7.54u1 for Windows 以前のバージョンで data: で始まる URI の扱いに問題があり、ダウンロードダイアログに間違った情報を表示してしまう問題があるそうです。

現在のところ、信頼できない場所からのファイルを開かないようにして対処するしかないようです。

*Squid

Squid に、NTLM fakeauth_auth Helper の DoS 攻撃の問題、"WCCP_I_SEE_YOU" メッセージの扱いに問題があり、Squid がクラッシュする問題、"gopherToHTML()" 関数で Buffer Overflow を引き起こしてしまう問題が報告されています。

Patch が公開されていますので、適用することでこの問題を回避できます。

*Vim

Vim 6.x に安全でないテンポラリファイルを作成してしまう問題が報告されています。

Vim に含まれる tcltags と vimspell.sh のスクリプトで安全でないテンポラリファイルを作成することがあるため、シンボリックリンク攻撃 (IPA セキュアUnix/Linuxプログラミング)を受けてしまう可能性があるそうです。この問題は Vim 6.3 で報告されているそうですが、他のバージョンでもおそらく同じ問題があると考えられるそうです。

*Gentoo Linux
*その他

▲ 目次へ戻る


2005.01.10(Mon)

>>[phpsec] PHP Security Mailing List

今年に入ってから [phpsec] PHP Security Mailing List という PHP のセキュリティ関連のメーリングリストができたようです。以下の内容が取り上げられるそうです。

海外でも広く使用されている PHP アプリケーションのセキュリティ問題や PHP 自体のセキュリティに関心のある人は参加しておくと良さそうです。

参加してみたところ、最近の投稿としては、以下のようなものがありました。

>>セキュリティ関係

*Windows
*Mozilla

Mozilla と Firefox にダウンロードダイアログの表示を偽装される問題が報告されています。この問題が修正されたバージョンはまだ公開されていませんので、信頼できないサイトからファイルをダウンロードしないように気を付ける必要があります。

*Gentoo Linux
*その他

>>気になったニュース、ツールなど

▲ 目次へ戻る


2005.01.03(Mon)

今年もよろしくお願いします。

>>PHP サーバに感染するワームについて

include()require() を使用して感染を広げるワームが出現しています。この問題に対する回避方法と調べた事などについてメモしておきます。何か間違いなどがありましたら指摘してください。

*ワームの回避方法

まず、ワームの回避方法についてですが、確実な方法は、include()require() に変数を渡している場合、変数を渡す前に不正な値が入っていないか確認することです。

その際に、以下の点についてチェックを行っておくと安全です。また、以前に、PHP と Web アプリケーションのセキュリティについてのメモPHP の include(), require() 関連の問題についてでまとめていますので、詳しくはそちらの方を参照してください。

  • NULL バイトの問題に対処
    • include()require() などのファイル名を扱う関数の多くは、 NULL バイトが含まれていると、その前までの文字列までしか処理しません。 以下のように、入力文字列から NULL バイトを削除しておくと、この問題は気にする必要はありません。

      NULL バイトが引き起こす問題については、Null Byte Attack を参照してください。

      $name = str_replace( "\0", '', $name );
    • また、include() などを行う前に、preg_match() などの正規表現関数によって、 チェックを行っても良いと思います。ただし、NULL バイトが含まれないように、"."(全ての文字列にマッチする)は 使用せず、また文字列全体をチェックしてください。
      if ( ! preg_match( '/^\w+$/', $name ) ) {
          // 不正な文字列が含まれていた場合の処理
          exit;
      }
      
  • include() を行う前にファイルの存在確認

    include() によって、外部のサーバからファイルを読み込むということは少ないと思いますので、is_file()file_exists() などの関数によって、読み込み対象ファイルが存在するかどうかを確認しておくと安全です。file://...http://... などが入力文字列に含まれていた場合、is_file()file_exists() 関数は FALSE を返します。

    $filename = $dir . $name . '.php';
    if ( ! is_file( $filename) ) {
        // 不正な文字列が含まれていた場合の処理
        exit;
    }
    

    注意として、上位ディレクトリを表す ../ や NULL バイトが含まれていないか、先にチェックを行っておいてください。../ を排除するために、basename() を使用すると便利です。

  • switch 文や配列を使用した対処方法

    読み込み可能なファイルが決まっている場合は、以下のように、switch 文や配列によって、include() の引数に渡すことが可能な文字列を制限する方法があります。

    • switch 文を使用
      switch ( $name ) {
      case 'file1' :
      case 'file2' :
      case 'file3' :
          include( $dir . $name . '.php' );
          break;
      default :
          // 不正な文字列が含まれていた場合の処理
          exit;
      }
      
    • 配列を使用
      $allow_list = array( 'file1', 'file2', 'file3' );
      if ( ! in_array( $name, $allow_list ) ) {
          // 不正な文字列が含まれていた場合の処理
          exit;
      }
      include( $dir . $name . '.php' );
      
*allow_url_fopen を Off にするという対処の問題点について

ワームの対処方法として、php.ini の設定で allow_url_fopenOff にして、PHP から外部へのアクセスを禁止するという方法がありますが、この設定を行えば安全というものではありません。以下の問題があります。

  • allow_url_fopen は PHP 4.3.4 以前では PHP_INI_ALL(どこでも設定可能なエントリ)であり、 セーフモードが Off の場合は、PHP スクリプト中で変更可能です。

    allow_url_fopen は PHP 4.3.5 から PHP_INI_SYSTEM(php.ini または httpd.conf で設定可能なエントリ) に変更され、PHP スクリプト中では設定変更ができないようになっています(PHP 4.3.5 の ChangeLog)。

  • PHP には、include()php://input が入ると、POST で渡された文字列を PHP スクリプト として実行できてしまうという問題があります ([PHP] include() bypassing filter with php://input)。 こちらの問題は、allow_url_fopenOff になっていて実行されます。

    allow_url_fopenOff にしていても、fsockopen() 関数による外部サーバへのアクセスは可能です。これらを利用すれば、allow_url_fopenOff にしているサーバに対してでも感染するワームが作成できてしまうと思われます。

*今回のワームに対する PHP スクリプトを変更しない対処方法

PHP スクリプトを変更せずに、他の方法でワームの問題に対処する方法もあるようです。

  • Hardened-PHP

    PHP に対する Patch 集で、include() などに関連する問題に対処を行っています。この Patch を適用して PHP をコンパイルすることで、様々なセキュリティ問題に、PHP 側で対処を行ってくれます。

    現在は、PHP 4.3.9, PHP 4.3.10, PHP 5.0.3 に対する Patch が公開されています。

  • ModSecurity

    Apache などに組み込むセキュリティモジュール。ルールを作成することで、危険なアクセスを PHP に実行させないようにすることが可能です。

>>セキュリティ関係

*PHP サーバに感染するワーム

PHP スクリプトのミスを利用して感染を広げるワームが広まっているようです。include()require() を使用して感染するワームですので、外部から入力される値をinclude()require() に渡している場合、危険な場合があります。

不正な値が入らないように入力チェックを行うことで、感染は回避できます。

*Windows

まだ修正されていない Internet Explorer のセキュリティ問題を利用したウイルスが出回っているようです。

Active スクリプト、Active X を無効にするなどの対処を行うことで回避できるようです。または、Internet Explorer のセキュリティ上の問題 "クリックとスクロール" からコンピュータを保護する方法 を参考に対処を行ってください。

*Mozilla

Mozilla 1.7.3 以前のバージョンの NNTP プロトコルの処理部分の関数に問題があり、"news://" から始まる不正な URI 入力されると、任意のコードを実行されてしまうそうです。

この問題は、Mozilla 1.7.5 で修正されています

*Gentoo Linux

▲ 目次へ戻る


更新履歴

2005.01.30

2005年 1月30日分を追加。

2005.01.23

2005年 1月23日分を追加。

2005.01.16

2005年 1月16日分を追加。

2005.01.10

2005年 1月10日分を追加。

2005.01.03

このページを作成。2005年 1月 3日分を追加。

▲ 目次へ戻る

LastUpdate: 2005-06-22 | HOME