• 検索結果がありません。

自己紹介 はせがわようすけ OWASP Kansai チャプターリーダー OWASP Japan アドバイザリボードメンバー 株式会社セキュアスカイ テクノロジー常勤技術顧問 CODE BLUE Security Conference Review board member セキュリティキャンプ講師

N/A
N/A
Protected

Academic year: 2021

シェア "自己紹介 はせがわようすけ OWASP Kansai チャプターリーダー OWASP Japan アドバイザリボードメンバー 株式会社セキュアスカイ テクノロジー常勤技術顧問 CODE BLUE Security Conference Review board member セキュリティキャンプ講師"

Copied!
30
0
0

読み込み中.... (全文を見る)

全文

(1)

タイトル未定

- #ssmpjp (ハセガワナイト) -

(2)

Secure Sky Technology Inc. #ssmjp

自己紹介

はせがわようすけ

OWASP Kansai

チャプターリーダー

OWASP Japan

アドバイザリボードメンバー

株式会社セキュアスカイ・テクノロジー

常勤技術顧問

CODE BLUE

Security Conference Review board member

セキュリティキャンプ講師

(Webクラス/高レイヤートラック)

http://utf-8.jp/

(3)
(4)

Secure Sky Technology Inc. #ssmjp

その1 - Edgeで電卓起動

その2 - Electronで電卓起動

その3 - X-Content-Type-Optionsのバイパス

(5)

その1

(6)

Secure Sky Technology Inc. #ssmjp

Edge / IE11 on Windows 10ではデフォルトで

calclator:プロトコルハンドラが有効

Edgeで電卓起動

(7)

Secure Sky Technology Inc. #ssmjp

おもしろURLハンドラ

設定画面の表示

https://msdn.microsoft.com/ja-jp/library/windows/apps/xaml/dn741261.aspx

スタートメニュー(Cortana)の表示

Edgeで開く(IE11から)

これ以外にもたくさん

Edgeで電卓起動

<a href=

"ms-settings:"

>設定画面</a>

<a href=

"ms-settings:network-proxy"

>プロキシ設定画面</a>

<a href=

"ms-settings:privacy-microphone"

>マイク設定画面</a>

<a href=

"ms-cortana:"

>Cortana</a>

(8)

その2

(9)
(10)

その3

(11)

Secure Sky Technology Inc. #ssmjp

レスポンスヘッダに付与

IE8+でContent-Typeを厳格に扱う

text/html以外をHTMLとして扱うことがなくなる

<script src>でJS,VBS以外をスクリプトとして扱わなく

なる

text/css以外をスタイルシートとして扱わなくなる

X-Content-Type-Options

Content-Type:

text/plain;

charset=utf-8

X-Content-Type-Options: nosniff

これはテキストファイルです。

<script>alert(1)</script>

(12)

Secure Sky Technology Inc. #ssmjp

<script src>でJS、VBS以外のContent-Typeの

ものはスクリプトとして扱わなくなる

X-Content-Type-Options

Content-Type:

text/html

X-Content-Type-Options: nosniff

//<script src=#></script>

alert(1);

(13)

Secure Sky Technology Inc. #ssmjp

Content-Typeヘッダが存在しない場合や空の場

合にはX-C-T-O:nosniffが機能しない

Content-Typeヘッダ、ちゃんとつけよう!

通常つけてるから問題ない

X-Content-Type-Optionsのバイパス

Content-Type:

X-Content-Type-Options: nosniff

//<script src=#></script>

alert(1);

(14)

その4

(15)

Secure Sky Technology Inc. #ssmjp

Fiddler

http://www.telerik.com/fiddler

デバッグ用ローカルproxyツール

元MicrosoftのEric Lawrence作

スクリプトによる強力なカスタマイズ機能

そもそもFiddlerって何?

実践 Fiddler

ISBN978-4-87311-616-7 Eric Lawrence 著、日本マイクロソフト株式会社 エバンジェリスト 物江 修 監訳、長尾 高弘 訳 http://www.oreilly.co.jp/books/9784873116167/

(16)

Secure Sky Technology Inc. #ssmjp

Fiddlerの挙動やUIをカスタマイズできるスクリプ

http://docs.telerik.com/fiddler/KnowledgeBase/F

iddlerScript/

JScript.NET (JavaScriptでもJScriptでもありません)

できること

リクエストやレスポンスの書き換え

HTTPヘッダの追加、削除

表示色の変更、メニュー項目の追加

その他いろいろ

FiddlerScript何それ

(17)

Secure Sky Technology Inc. #ssmjp

ブレークポイントを置いてステップ実行、みたいな

のは簡単にはできない(たぶん)

できなくはない(かも知れない)

Visual StudioからFiddlerプロセスをアタッチし

FiddlerScript内からSystem.Diagnostics.Debugger

.Break()を呼び出す

出来る方法知ってる人がいたら教えて!

FiddlerScriptのデバッグ

(18)

Secure Sky Technology Inc. #ssmjp

基本的にはprintfデバッグあるのみ!

FiddlerObject.log

ログメッセージの記録

FiddlerApplication.Log.LogFormat

フォーマット付きログ

FiddlerObject.statusText

ステータスバーに1行表示

FiddlerObject.alert

みんな大好き alert

FiddlerScriptのデバッグ

(19)

Secure Sky Technology Inc. #ssmjp

FiddlerObject.log( msgText )

Logペインに記録される

FiddlerScriptのデバッグ

static function OnBeforeRequest(oSession: Session) {

FiddlerObject.log

(

oSession.RequestMethod + " " + oSession.url

);

....

}

(20)

Secure Sky Technology Inc. #ssmjp

FiddlerApplication.Log.LogFormat

( FormatText, arguments )

Logペインに記録される

FiddlerScriptのデバッグ

static function OnBeforeRequest(oSession: Session) {

FiddlerApplication.Log.LogFormat

(

"p1:{0}, p2:{1}", param1, param2

);

....

}

(21)

Secure Sky Technology Inc. #ssmjp

AutoResponder - Fiddlerの強力な機能のひとつ

指定された条件に一致したリクエストのときに

URLが指定されたものと一致

URLが正規表現で指定されたものにマッチ

指定されたリクエストヘッダを含む

など

レスポンスを生成して返す

事前に指定されたステータスやファイル

他のサーバへリダイレクト

レスポンスヘッダの追加

スクリプトの実行

AutoResponder機能

(22)

Secure Sky Technology Inc. #ssmjp

AutoResponder機能

マッチしないときに上流へ

そのままパススルー

AutoResponder機能

を有効にする

ホスト名はDNS的に

解決できる必要がある

(23)

Secure Sky Technology Inc. #ssmjp

AutoResponderでスクリプト実行

public static function

foo

( oSession: Session ){

oSession["ui-backcolor"] = "red";

oSession.utilCreateResponseAndBypassServer();

oSession.oResponse.headers.Add( "Content-Type", "text/plain" );

oSession.ResponseBody =

System.IO.File.ReadAllBytes("C:/tmp/File.txt");

}

https://example.jp/*.txtの

ときには関数fooを実行

(24)

Secure Sky Technology Inc. #ssmjp

FiddlerScript内でリクエストに応じた応答

つまり

FiddlerScriptだけでWebアプリ書けるんじゃね?

(25)

Web Apps on FiddlerScript

DEMO

(26)

Secure Sky Technology Inc. #ssmjp

FiddlerScriptでWeb Server

public static function webServer( oSession: Session ){ var documentRoot:String = "c:/tmp/htdocs";

var path = oSession.PathAndQuery.replace( /¥?.*/g, "" ); var realPath = documentRoot + path;

var contentTypes = { "txt" : "text/plain", "html" : "text/html", "js" : "application/javascript", "css" : "text/css" }; oSession.utilCreateResponseAndBypassServer();

if( path.indexOf( "../" ) >= 0 || path.indexOf( "..¥¥" ) >= 0 ){

oSession.oResponse.headers.Add( "Content-Type", "text/html;charset=utf-8" ); oSession.oResponse.headers.HTTPResponseCode = 500;

oSession.oResponse.headers.HTTPResponseStatus = "500 Internal Server Error"; }else if( System.IO.File.Exists( realPath ) ){

var contentType = "application/octet-stream"; var ext = ( /¥.(.+)$/.exec( path ) || [] )[ 1 ];

if( ext && contentTypes[ ext ] ) contentType = contentTypes[ ext ]; oSession.oResponse.headers.Add( "Content-Type", contentType ); oSession.ResponseBody = System.IO.File.ReadAllBytes( realPath ); }else{

oSession.oResponse.headers.Add( "Content-Type", "text/html;charset=utf-8" ); oSession.oResponse.headers.HTTPResponseCode = 404;

oSession.oResponse.headers.HTTPResponseStatus = "404 Not Found"; } } 「../」が含まれるときは500を応答 ファイルが実際に存在するとき ファイルを読み込んで返す デフォルトのC-Tは application/octet-stream ファイルが存在しないときは404

(27)

Secure Sky Technology Inc. #ssmjp

FiddlerScriptで計算結果を返す

public static function calc( oSession: Session ){

var buf = new System.Text.StringBuilder();

var q = oSession.PathAndQuery.replace( /[^¥?]*¥?/, "" );

var template = System.IO.File.ReadAllText( "C:/tmp/template.html" );

var ans = "invalid";

if( /^[¥d¥(¥)¥+¥-¥/¥*¥s]+$/.test( q ) ){

try{

ans = eval( q );

}catch( e ){

}

}

buf.Append(

template.replace( /%(exp|ans)%/g, function( s, p ){

if( p === "exp" ){

return htmlEscape( q );

}else if( p === "ans" ){

return htmlEscape( ans );

}else{

return "";

}

} )

);

oSession["ui-backcolor"] = "yellow";

oSession.utilCreateResponseAndBypassServer();

oSession.oResponse.headers.Add( "Content-Type", "text/html;charset=utf-8" );

oSession.ResponseBody = System.Text.Encoding.UTF8.GetBytes( buf );

}

テンプレート読み込み テンプレートの展開 Fiddlerの該当行を黄色背景に 結果のHTMLを応答 URLクエリが数値と演算子 のみならevalで計算

(28)

Secure Sky Technology Inc. #ssmjp

FiddlerScript内にWebアプリを書くことで

Webサーバ不要

.NETな機能を使い放題

JavaScriptぽさも使い放題(?)

アプリごとにCustomRules.jsを手動で置き換え

遅い

デバッグしにくい

(29)

Secure Sky Technology Inc. #ssmjp

Web Apps on FiddlerScriptのデバッグ

Fiddlerをもう1台

Burpを併用

Web Apps on FiddlerScript

F

F

Web Apps on

FiddlerScript

Proxy for

debugging

Web Apps on

FiddlerScript

Proxy for

debugging

システム プロキシを変更せず Fiddler を起動する https://hebikuzure.wordpress.com/2012/07/23/

(30)

Secure Sky Technology Inc. #ssmjp

Question?

[email protected]

@hasegawayosuke

参照

関連したドキュメント

攻撃者は安定して攻撃を成功させるためにメモリ空間 の固定領域に配置された ROPgadget コードを用いようとす る.2.4 節で示した ASLR が機能している場合は困難とな

このような状況下、当社グループは、主にスマートフォン市場向け、自動車市場向け及び産業用機器市場向けの

こうしゅう、 しんせん、 ふぉーしゃん、 とんがん、 けいしゅう、 ちゅうざん、

けいさん たす ひく かける わる せいすう しょうすう ぶんすう ながさ めんせき たいせき

在させていないような孤立的個人では決してない。もし、そのような存在で

てい おん しょう う こう おん た う たい へい よう がん しき き こう. ほ にゅうるい は ちゅうるい りょうせい るい こんちゅうるい

関係会社の投融資の評価の際には、会社は業績が悪化

* 広告や機能は条件によってはご利用いただけない場合があります。