SOC Report



Similar documents
SOC Report

目次 1 WebAppli で使う HTTP ヘッダ作成関数の安全な使い方 本文書の目的 3 2 HTTP ヘッダ インジェクションの概要 HTTP ヘッダ インジェクションの概要 HTTP ヘッダ インジェクションへの対策 6 3 HTTP ヘッダ インジェクシ

WEBシステムのセキュリティ技術

SOC Report

2.2 Reflected XSS 攻撃攻撃者の用意した悪意のあるリンクとターゲットサーバが同じホストである場合の Reflected XSS 攻撃を, 本稿では Reflected XSS 攻撃と呼ぶ. 例えば, サーバ A の target.php に Reflected XSS 脆弱性があった

SQL インジェクションの脆弱性

OmniTrust

— intra-martで運用する場合のセキュリティの考え方    

自己紹介 名前 : 一ノ瀬太樹 所属 : HASH コンサルティング株式会社 OWASP Japan プロモーションチーム OWASP ZAP ユーザーグループ脆弱性診断研究会 ( 管理者その 3) Perl 入学式 ( サポーター ) HASH Consult

Si 知識情報処理

Web のクライアントサーバモデル


Flex Signal for AirGRID

FW ファイルアップロード ダウンロード機能利用ガイド Version 年 9 月 21 日富士通株式会社 i All Right Reserved, Copyright FUJITSU LIMITED

DTD Reference Guide

メディプロ1 Javaサーブレット補足資料.ppt

◎phpapi.indd

Flex Signal for AirGRID

Cisco CSS HTTP キープアライブと ColdFusion サーバの連携

第 7 回の内容 動的な Web サイト フォーム Web システムの構成

コンテンツ作成基本編

ウェブデザイン技能検定 1 級実技 平成 28 年度 第 4 回 ウェブデザイン技能検定 1 級 実技試験概要 試験にあたっての注意事項 試験者は本試験の留意事項 注意事項に留意して作業を行うこと ペーパー実技試験は 課題 1 から 5 までの 5 課題を 60 分間で行うこと 作業実技試験は 課題

1. 信頼済みサイトの設定 (1/3) この設定をしないとレイアウト ( 公報 ) ダウンロードなどの一部の機能が使えませんので 必ず設定してください 1 Internet Explorer を起動し [ ツール ]-[ インターネットオプション (O)] を選択します 2 [ セキュリティ ] の

Shareresearchオンラインマニュアル

9 WEB監視

PowerPoint プレゼンテーション

TestDesign for Web

Microsoft Word - アクセストークン取得API仕様書(AS)_ver1.docx

ユーティリティ 管理番号 内容 対象バージョン 157 管理情報バッチ登録コマンド (utliupdt) のメッセージ出力に対し リダイレクトまたはパイプを使用すると メッセージが途中までしか出 力されないことがある 267 転送集計コマンド (utllogcnt) でファイル ID とホスト名の組

Microsoft Word - SPC9-API_ユーザーズガイド_V37.doc

.10.中高美術

サイボウズ Office8 API マニュアル API 概要 第 1 版 サイボウズ株式会社

CD-ROM 版をご使用の場合 インストールガイド CD-ROM ドライブ \doc\ インストールガイド.pdf 基本操作ガイド CD-ROM ドライブ \doc\ 基本操作ガイド.pdf 設定ガイド CD-ROM ドライブ \doc\ 設定ガイド.pdf ダウンロード版をご使用の場合 インストー

Flex Signal for AirGRID

LCV-Net ファイルコンテナ ユーザーマニュアル

クライアント証明書導入マニュアル

目次 第 1 章はじめに 動作環境 Internet Explorer の設定 取引先テスト実施内容... 5 第 2 章取引先テストの手順 ログイン 出荷梱包 ( 紐付けあり )

2015 年 4 月 15 日に発表された HTTP.sys の脆弱性 ( ) へ の対応について 製品名 : バージョン : 対象プラットフォーム : カテゴリ : iautolaymagic すべてすべて Web アプリ この度 マイクロソフト社製品において緊急度の高い脆弱性 (CV

3 アドレスバーに URL を入力し ( 移動ボタン ) をタップします 入力した URL のホームページに移動します ネットワークへのログオン 画面が表示された場合は ユーザー名 を確 認し パスワード を入力して OK をタップしてください ホームページがうまく表示されないときは Opera B

各種パスワードについて マイナンバー管理票では 3 種のパスワードを使用します (1) 読み取りパスワード Excel 機能の読み取りパスワードです 任意に設定可能です (2) 管理者パスワード マイナンバー管理表 の管理者のパスワードです 管理者パスワード はパスワードの流出を防ぐ目的で この操作


Microsoft IISのWebDAV認証回避の脆弱性に関する検証レポート

V-CUBE ミーティング4

eYACHO 管理者ガイド

ご利用のコンピュータを設定する方法 このラボの作業を行うには 事前設定された dcloud ラボを使用するか 自身のコンピュータをセットアップします 詳細については イベントの事前準備 [ 英語 ] とラボの設定 [ 英語 ] の両方のモジュールを参照してください Python を使用した Spar

ガイダンス

目次 1. はじめに 証明書ダウンロード方法 ブラウザの設定 アドオンの設定 証明書のダウンロード サインアップ サービスへのログイン

Web-EDI 機能運用開始までの流れ Ver.1.03 平成 28 年 2 月 公益財団法人日本産業廃棄物処理振興センター情報処理センター

ブラウザ Internet Explorer 7 の設定について 第3版

フローチャート自動生成ツール yflowgen の使い方 目次 1 はじめに 本ツールの機能 yflowgen.exe の使い方 yflowgen.exe の実行方法 制限事項 生成したファイル (gml ファイル形式 ) の開

Drive-by Download 攻撃に おけるRIG Exploit Kitの 解析回避手法の調査

4. 半角文字コード変換表 ここでは 半角文字のコード変換についての詳細な表を記載します の文字と文字コード (16 進数 ) には 表内で灰色の網掛けを設定しています 4.1 IBMカナ文字拡張からへの変換 16 進数 16 進数 16 進数 16 進数 16 進数 16 進数 SP 0x40 S

1 ユーザ認証を受けた権限で アプリケーションを利用するために ログインプロキシにアクセスします 2 ログインプロキシにより Shibboleth SP から Shibboleth IdP の認証画面にリダイレクトされます 3 ブラウザに認証画面を表示します 4 認証画面にユーザ / パスワードを入

intra-mart Accel Platform

ロ ペ ミ ッ ク 小 児 用 % C ゲ シ ン L 錠 5 0 m g G ソ レ ル モ ン S R カ プ セ ル m g N1

Ver.60 改版履歴 版数 日付 内容 担当 V /7/8 初版発行 STS V..0 04// Windows 8. の追加 STS V..0 05//5 Windows XP の削除 STS V.30 05/8/3 体裁の調整 STS V.40 05//9 Windows0 の追加

Transcription:

HTTP Status Code Pollution N T T コ ミ ュ ニ ケ ー シ ョ ン ズ株式会社 ソリューションサービス部 第四エンジニアリング部門 セ キ ュ リ テ ィ オ ペ レ ー シ ョ ン担当 2012 年 06 月 15 日 Ver. 1.0

1. 調査概要... 3 1.1. 調査概要... 3 2. HTTP RESPONSE の STATUS CODE 汚染... 3 2.1. PHP...3 2.2. CGI... 4 2.3. 脆弱なWEBページを想定する (MOD_PHP 使用のPHP)... 4 2.4. 脆弱なWEBページを想定する (CGI( 言語はPHP))... 5 2.5. 実証テスト結果 (MOD_PHP 使用のPHP)... 5 2.6. 実証テスト結果 (CGI( 言語はPHP))... 9 2.7. 対策... 15 2.8. まとめ ( 現実的可能性 )... 16 3. STATUS CODE=200 以外での XSS 発現可能性と WEB ブラウザの設定... 16 3.1. (IE) HTTPエラーメッセージを簡易表示する... 16 3.2. (OPERA) オートリダイレクトを有効にする... 20 3.3. (.NET FRAMEWORK) SYSTEM.NET.HTTPWEBREQUESTクラス... 24 3.4. まとめ... 24 4. 検証作業者... 25 5. 参考... 25 6. 履歴... 25 7. 最新版の公開 URL... 25 8. 本レポートに関する問合せ先... 26 2

1. 調査概要 1.1. 調査概要 PHP や CGI では HTTP Response のヘッダ情報を出力する関数を用いて HTTP Response の Status Code を操作することができる このヘッダ情報を出力する関数に関しては 改行コード (Cr や Lf) をエスケープしていないために発現する HTTP ヘッダ インジェクション または CrLf インジェクション が有名であるが HTTP Response Status Code が汚染される場合について 本文書では検討した 2. HTTP Response の Status Code 汚染 2.1. PHP 他の Web アプリケーション サーバでは 大抵の場合は HTTP Response の Status Code を操作するための専用の関数が用意されていると思うが PHP では header() 関数を用いて HTTP Response の Status Code を操作する つまり Web アプリケーションとして HTTP Response Status Code として 401 Unauthorized を出力したい場合 図 2.1-1 のように HTTP Response のヘッダ情報を出力する関数を用いて行う <?php header("http/1.1 401 Unauthorized ");?> 図 2.1-1 : PHP では header 関数を用いて Status Code を操作する このように PHP では Status Code を操作する関数と ヘッダ情報を操作する関数が分離していない つまり ヘッダ情報を操作する関数が分離していないという事は 不正行為者がこの header() 関数に与える引数の先頭から汚染可能である場合 任意のヘッダ情報がインジェクションされるだけではなく HTTP Response の Status Code を上書きすることができることを意味している 3

2.2. CGI 実は CGI でも HTTP Response の Status Code を操作することができる ( 図 2.2-1) CGI プログラムが省略した場合 HTTP Response Status Code は 200 OK となる #! /usr/bin/php <?php echo "Status: 401\n"; echo "Content-Type: text/html\n\n";?> 図 2.2-1 : CGI( 言語は PHP だが )CGI の場合 最初の空行までに Status: で始まる行を出力することによって Status Code を操作することができる 2.3. 脆弱な Web ページを想定する (mod_php 使用の PHP) 以下のような Web ページを想定してみる クエリ文字列 str1 を受け取り Web ブラウザ上に表示する クエリ文字列 str2 を受け取り HTTP Response ヘッダとして出力する クエリ文字列 str1 に < が含まれていた場合 Status Code を操作して login.html へリダイレクトさせる クエリ文字列 str1 に < が含まれていた場合 リダイレクトさせるので そのまま HTTP Response のボディに格納する Status Code=3xx なので HTTP Response のボディは Web ブラウザ上に表示されないため 仮に XSS( クロスサイト スクリプティング ) 脆弱性があっても 発現しない PHP のソースコードは 図 2.3-1 である <?php if(!empty($_get["str1"]) &&!empty($_get["str2"])){ if(preg_match("/</",$_get["str1"])){ header("location:./login.html"); } header($_get["str2"]); echo $_GET["str1"]; }?> 図 2.3-1 : PHP(mod_php) で書かれた実証テスト用スクリプト 4

2.4. 脆弱な Web ページを想定する (CGI( 言語は PHP)) 2.3 脆弱な Web ページを想定する (mod_php 使用の PHP) と同じ使用の CGI も作成した ( 図 2.4-1) #!/usr/bin/php <?php echo "Content-Type: text/html\n"; $var = $_SERVER["QUERY_STRING"]; $splite_var_arr = explode("&",$var); for($i=0;$i<count($splite_var_arr);$i++){ $value_arr = explode("=",$splite_var_arr[$i]); $key = $value_arr[0]; $val = $value_arr[1]; $query_string_value_arr[$key] = $val; } echo urldecode($query_string_value_arr["str2"]). "\n"; if(preg_match("/</",$query_string_value_arr["str1"])){ echo "Location:../test/login.html\n"; } echo "\n"; $query_string_value_arr["str2"] = str_replace(array("\r","\n"),"",$query_string_value_arr["str2"]); echo urldecode($query_string_value_arr["str1"]);?> 図 2.4-1 : CGI の場合の実証テスト用スクリプト 2.5. 実証テスト結果 (mod_php 使用の PHP) 実際に 図 2.3-1 に対して試験を行ったキャプチャ図である 図 2.5-1 : クエリ文字列 str1 に XSS 試験用文字列を与える 5

図 2.5-2 : 図 2.5-1 の HTTP リクエスト メッセージ 図 2.5-3 : 図 2.5-2 の HTTP レスポンス メッセージ ボディ部分は XSS が発現する状態になっているが 6

図 2.5-4 : 図 2.5-3 を受領した結果 Web ブラウザは login.html へリダイレクトされるため XSS は発現しない 図 2.5-5 : 次に str1 に XSS 試験用文字列を与えつつ 変数 str2 には HTTP Response Status Code を改ざんするような値を与えてみる 7

図 2.5-6 : 図 2.5-5 の HTTP リクエスト メッセージ 図 2.5-7 : 図 2.5-6 の HTTP レスポンス メッセージ ボディ部分は XSS が発現する状態になっており さらには HTTP Response Status Code も改ざんされている 8

図 2.5-8 : 図 2.5-7 を受領した結果 Web ブラウザは login.html へリダイレクトされず XSS が発現する 2.6. 実証テスト結果 (CGI( 言語は PHP)) 次は 図 2.4-1 に対して行った試験結果のキャプチャ図である 図 2.6-1 : クエリ文字列 str1 に XSS 試験用文字列を与える 9

図 2.6-2 : 図 2.6-1 の HTTP リクエスト メッセージ 図 2.6-3 : 図 2.6-2 の HTTP レスポンス メッセージ CGI の場合 図 2.5-3 と異なり HTTP レスポンス ボディ部分が上書きされてしまっている 10

図 2.6-4 : 図 2.6-3 を受領した結果 Web ブラウザは login.html へリダイレクトされるため XSS は発現しない 図 2.6-5 : 次に str1 に XSS 試験用文字列を与えつつ 変数 str2 には HTTP Response Status Code を改ざんするような値を与えてみる 11

図 2.6-6 : 図 2.6-5 の HTTP リクエスト メッセージ 図 2.6-7 : 図 2.6-6 の HTTP レスポンス メッセージ CGI の場合 Location ヘッダ付きでは Status Code 200 への書き換えはできないようだ 12

図 2.6-8 : 図 2.6-7 を受領した結果 Web ブラウザは login.html へリダイレクトされるため XSS は発現しない 図 2.6-9 : もう一度 str1 に XSS 試験用文字列を与えつつ 変数 str2 には HTTP Response Status Code を改ざんするような値を与えてみる 図 2.6-5 と異なり Status Code=200 以外の値となるようにする 13

図 2.6-10 : 図 2.6-9 の HTTP リクエスト メッセージ 図 2.6-11 : 図 2.6-10 の HTTP レスポンス メッセージ ボディ部分は XSS が発現する状態になっており さらには HTTP Response Status Code も改ざんされている 14

図 2.6-12 : 図 2.6-11 を受領した結果 Web ブラウザは login.html へリダイレクトされず HTTP レスポンス ボディが解釈され XSS が発現する 2.7. 対策 Status Code によっては Web ブラウザが無視する HTTP Response の Body であっても XSS 対策は行っておくこと 不正行為者がヘッダ操作できるような Web アプリケーションを作らないこと 不正行為者がヘッダ操作できるとしても ヘッダ情報の 値 だけに限定させること ヘッダ情報の操作には CrLf インジェクション問題がない関数を用いること 15

2.8. まとめ ( 現実的可能性 ) 本文書では HTTP Response の Status Code の汚染について検討してきたが 条件として 不正行為者がヘッダ情報の先頭から ( または名前の部分から ) 操作することができる という条件が必要であることに留意する必要がある これは Status Code の汚染よりも直接的にヘッダ情報に偽の情報を追記できるということであり 例えば Content-Type ヘッダや Location ヘッダなどが追記されるような事態も同時に想定でき Web ブラウザの種類によっては (Status Code の汚染よりも ) 深刻なセキュリティ上の問題となるだろう また 再度条件を記載するが 不正行為者がヘッダ情報の先頭から ( または名前の部分から ) 操作することができる という条件自体が 稀な状況であると思われる 結論として 稀の状況を想定しないと発現しない現象であると思うが ヘッダ インジェクションだけではなく Status Code が汚染されうるという可能性も考慮する必要がある まとめの最後に 実は Location ヘッダの出力位置と Status Code の出力位置 つまり順番によっては Status Code の汚染が失敗するケースもあり さらに現実的可能性を小さくするだろう 3. Status Code=200 以外での XSS 発現可能性と Web ブラウザの設定 3.1. (IE) HTTP エラーメッセージを簡易表示する Microsoft-Internet Explorer には HTTP エラーメッセージを簡易表示する という設定があり 大抵の場合 既定で有効となっている この設定が有効な場合 HTTP Response Status Code が 200 以外のエラーなどの場合 HTTP Response Body がコンテンツとして表示されることはないため XSS を発現させることは困難である しかし 無効になっている場合 XSS を引き起こすことが可能となる 16

図 3.1-1 : MS-IE の既定は HTTP エラーメッセージを簡易表示する が有効である 図 3.1-2 : HTTP エラーメッセージを簡易表示する が 有効な MS-IE に Status Code が 400 を送る 17

図 3.1-3 : 図 3.1-2 の結果 HTTP Response の Body はコンテンツとして利用されることはない 図 3.1-4 : 次に HTTP エラーメッセージを簡易表示する を無効にする 18

図 3.1-5 : 図 3.1-4 な状態の MS-IE に図 3.1-2 と同じ Status Code 400 を送る 図 3.1-6 : 図 3.1-5 の結果 HTTP Response の Body がコンテンツとして利用される 19

3.2. (Opera) オートリダイレクトを有効にする Opera には オートリダイレクトを有効にする という設定があり 大抵の場合 既定で有効となっている この設定が有効な場合 リダイレクト要求を受信した Opera は 自動的にリダイレクトするため リダイレクト要求の HTTP Response Body はコンテンツとして使われることはなく XSS を発現させることは困難であるが 無効の場合 自動的にリダイレクトしないため XSS を発現させることが可能となる 図 3.2-1 : Opera の既定の設定は オートリダイレクトを有効にする が有効である 図 3.2-2 : 図 2.3-1 に対して変数 str1 に < 入れてアクセスする 20

図 3.2-3 : 図 3.2-2 の HTTP レスポンス メッセージ 図 3.2-4 : 図 3.2-3 の結果 リダイレクトする 21

図 3.2-5 : Opera の設定にて オートリダイレクトを有効にする を無効にする 図 3.2-6 : 図 2.3-1 に変数 str1 に < 入れてアクセスする 22

図 3.2-7 : 図 3.2-6 の HTTP レスポンス メッセージ 図 3.2-8 : 図 3.2-7 の結果 リダイレクトしないため HTTP Response の Status Code を汚染しなくても XSS が発現する 23

3.3. (.NET Framework) System.Net.HttpWebRequest クラス.NET Framework の System.Net.HttpWebRequest クラスには AllowAutoRedirect プロパティがあり Opera のように リダイレクトを自動的に行うかどうかを制御することができる 図 3.3-1 : System.Net.HttpWebRequest#AllowAutoRedirect プロパティ 3.4. まとめ このように Web ブラウザの設定によっては 様々なことが考えられるため このような観点からも Status Code が 200 以外の場合であっても HTTP Response Body については XSS 対策 (HTML エンコード処理 ) を念のために行っておくことが Web アプリケーション開発者には求められるだろう 24

4. 検証作業者 NTT コミュニケーションズ株式会社ソリューションサービス部第四エンジニアリング部門セキュリティオペレーション担当本城敏信佐名木智貴 5. 参考 Security of HTTPHeader ver1.2 http://rocketeer.dip.jp/secprog/httpsecurity003.pdf PHP Manual - header http://php.net/manual/ja/function.header.php CGI プログラムの改良案 / ヘッダの書き方 http://hp.vector.co.jp/authors/va014833/cgi/header.html RFC3875: The Common Gateway Interface (CGI) Version 1.1 http://www.ietf.org/rfc/rfc3875 System.Net.HttpWebRequest プロパティ http://msdn.microsoft.com/jajp/library/system.net.httpwebrequest.allowautoredirect(v=vs.95) 6. 履歴 2012 年 06 月 15 日 : ver1.0 最初の公開 7. 最新版の公開 URL http://www.ntt.com/icto/security/data/soc.html 25

8. 本レポートに関する問合せ先 NTT コミュニケーションズ株式会社ソリューションサービス部第四エンジニアリング部門セキュリティオペレーション担当 e-mail: scan@ntt.com 以上 26