Upload
abendcve99990001
View
2.984
Download
2
Embed Size (px)
Citation preview
フリーでできるWebセキュリティ
Burp Suite編(Not 初級者編)
自己紹介
Twitter:abend
セキュリティエンジニア。アルコールがすきです。
はじめに1
Burp Suiteはローカルで稼働するProxyソフトで、Webアプリケーションの診断などで使用されています。
■「Webアプリケーション診断」って?
診断員 攻撃パターン付加
入力(リクエスト)
出力(レスポンス)
1) リクエストに攻撃パターンを付加。
2) レスポンスの内容から脆弱性の有無を判定。
Proxy
プロトコル:HTTP、HTTPS
脆弱性の有無を判定
診断対象
ここで使われる。
はじめに2
Proxyソフトは、ブラウザ(IEなど)では、ヘッダの改変や選択形式の入力項目に対する
改変などを容易に行うために用いられています。
都道府県:
性別: 男 女
東京都 (ブラウザ上で)入力形式が固定化されているものも
Proxyを用いて、入力値を変更する。
はじめに3
そんなBurp Suiteを使用することで効率よくWebアプリケーションに対して診断
(テスト)を行えるようになります。この資料は、Burp Suiteで診断(テスト)する
ための機能の一部を紹介することを目的としています。
具体的にどういう値をセットすればいいかという点については、OWASP Testing
Guideなどを参考にしてください。
セッション管理補助機能について
Webアプリケーションは一般的にセッション管理が行われており、Burpには、
セッション管理などを補助するための仕組みがいくつか用意されています。
・ Macro
・ Cookie jar
・ Session Handling Rules
セッション管理補助機能について
「検索画面」に対して診断する場合に、それ以前の画面遷移やセッション管理を補助
してくれます。Burpでは、診断を目的とする画面(下記の場合、「検索画面」)を
Current Requestと表現しています。
ログイン処理ログイン画面 トップ画面 検索画面
Macroに登録Session Handling Rules
で実行タイミングなどを指定
ここに診断
Cookie jarはセッション管理を補助
Macroって1
[Options]-[Session]-[Macro]でMacroの登録できる。Macroは複数のリクエストを
1つのセットとして登録して、ログインなどの処理を再現させることが可能となります。
Macroって2
このような画面遷移するアプリケーションで「5.検索結果」に対して、診断しようとした
場合、「1.ログイン画面」から「4.検索画面」までアクセスしてやっと診断対象に辿り
つける。
2.ログイン処理1.ログイン画面 3.トップ画面
4.検索画面 5.検索結果
Macroでは「1.ログイン画面」から「4.検索画面」の遷移を登録することで
Burpが自動的に遷移してくれるので、効率的な診断が可能となる。
Macroって3
[Options]-[Session]-[Macro]で[Add]を押下すると[Macro Recoder]が表示されます。
ここでMacroの登録対象となるリクエストを選択します。
ここに表示されるリクエストは
[Proxy]-[HTTP history]に表示
されているログのみとなります。
Macroって4
[Options]-[Session]-[Macro]でMacroの登録できる。Macroは複数のリクエストを
1つのセットとして登録して、ログインなどの処理を再現させることが可能となります。
[Macro Editor]で選択した
リクエストの編集が可能。
Referrerを削除したり、
新たにパラメータを追加
したりすることが可能。
Macroって5
[Macro Editor]でCookie jarの設定やパラメータの変更したいリクエストを選択して、
[Configure item]を押下すると[Configure Macro Item]で変更可能となる。
Macroって6
[Cookie handling]で[Add cookies …]と[Use cookies …]を有効にするか選択できます。
[Add cookies …]
チェックされていると、レスポンスでSet-Cookieされた場合にCookie jarに反映する。
[Use cookies …]
チェックされていると、Cookie jarにあるCookieをリクエストに反映する。
Macroって7
[Parameter handling]はリクエストに存在するパラメータが一覧表示されます。
[Use present value]は、固定値。[Drive from prior response]は、レスポンスから
値を取得する設定で、ワンタイムトークンなど値が可変であるパラメータに有効です。
Macroって8
[Custom parameter locations in response]で追加したいパラメータの設定ができます。
ログイン処理 トップ画面 検索画面
[Custom parameter locations in response]
でパラメータを追加する。
このリクエストにパラメータを追加したい場合
Macroって9
[Parameter name]に追加したいパラメータ名を設定します。
ログイン処理 トップ画面 検索画面
ここに追加したいパラメータ名と合わせる必要がある
Macroって10
追加したいパラメータの値は、レスポンスで範囲選択するか、正規表現で指定する
ことが可能です。
Macroって11
「検索画面」を選択し、パラメータを追加。[Re-analyze macro]を押下し、パラメータを
反映させます。
ログイン処理 トップ画面 検索画面
Macroって12
「検索画面」を選択し、[Configure item]を押下すると、パラメータが追加されています。
[Derive from prior response]を選択し、[Macro editor]の[#]で「トップ画面」を指す
「Resuponse3」を選択します。
ログイン処理 トップ画面 検索画面
Macroって13
[Macro editor]で[Test macro]を押下すると、Macroのテストを実施してくれます。
パラメータの追加がうまくできている場合、[Derived parameters]に表示されます。
Cookie jarって1
Cookie jarは、Burpにおけるセッション管理を補助するために存在しており、Burpが
アクセスしたサイトのCookieを共有する仕組みになっている。
1.保存されているCookieでドメインが一致する場合は送信する。
2.Set-CookieされたCookieが存在する場合、該当Cookieの値を更新する。
3.Set-CookieされたCookieが存在していない場合、そのCookieを登録する。
Cookie jarって2
Cookie jarは追加、更新されたCookieを用いて、セッション維持を手助けしている。
ドメインC
Cookie:CC
ドメインC
存在しない場合は登録される
ドメインA
Cookie:AA
ドメインB
Cookie:BB
Burp
ドメインC
ドメインA ドメインB
ドメインB
Cookie:BBB
Set-Cookieされたら更新するドメインが一致している場合に
送信する。
Cookie jarって3
Cookie jarの設定は、[Options]-[Sessions]で行います。デフォルトでは、[Proxy]と
[Spider]のみが有効になっており、この2つでCookieの追加および更新が行われた
場合にCookie jarへ反映されます。
Cookie jarって4
[Open cookie jar]を押下すると、Cookie jarに登録されているCookieの一覧が
表示されます。[Edit cookie]で編集可能な項目は、[Domain]、[Name]、[Value]
です。
Cookie jarって5
Cookie jarはMacroなどでセッション管理を行う際に非常に有意義な機能では
あるが、大きな欠陥が存在しています。Cookie jarのCookieを識別する項目は
ドメイン名とCookie名だけしかないため、パスが異なるCookieやHTTP or HTTPS
という判別ができません。
Cookie jarって6
CookieをHTTP、HTTPSと/、/sampleでそれぞれ発行する下記プログラム(値および
パスを表中の値に変更)を配置し、Cookie jarでどのように識別されるか試した。
パス/プロトコル http https
/ http_root https_root
/sample http_sample https_sample
<?php
setcookie(“sample”,“値”,0,“パス","",0)
?>
Cookie jarって7
①から④の順にアクセスしたが、Cookie jarは1つのCookieとしか認識していないため
①のCookieを更新するだけであった。
① プロトコル:httpパス:/
② プロトコル:httpsパス:/
③ プロトコル:httpsパス:/sample
④ プロトコル:httpパス:/sample
Cookie jarって8
Cookie jarがドメイン名とCookie名のセットでしか評価していないことが原因であり、
この仕様により、同じドメインでパスが異なるCookieでセッション管理しているサイト
への診断がBurpのMacroを使用すると正常に行えない可能性があります。
例として、シングルサイオンしてパスごとで各サービスを提供しているようなサイトなど
です。各サービスで同じCookie名を発行している場合、Cookie jarは1つのCookie
としてしか認識しないため、誤動作する可能性があります。
Session Handling Rulesについて1
[Options]-[Session]-[Session Handling Rules]は、セッション管理方法や実行範囲
などを設定可能です。設定できるパターンは以下があります。
※本資料ではいくつか割愛します。
・Use cookies from the session handling cookie jar
・Set a specific cookie or parameter value
・Check session is valid
・Prompt for in-browser session recovery
・Run a macro
・Run a post-request macro
・Invoke a Burp extension
Session Handling Rulesについて2
[Rule Action]は、複数指定することができ、上から順番に評価されます。
Session Handling Rulesについて3
すべてのパターンで共通して、[Session handling rule editor]-[Scope]で実行範囲を
設定します。
以下の項目で実行範囲を指定
することができます。
・[Tools scope]
・[Url scope]
・[Parameter scope]
Session Handling Rulesについて4
[Run macro]は、設定した1つまたは複数のリクエストを送信することが可能です。
2.ログイン処理
1.ログイン 3.トップ画面 4.カート参照
「4.カート参照」を診断しようとした場合に、「1.ログイン」から「3.トップ画面」までの
遷移をMacroとして設定することで、Burpが自動的にリクエストを送信してくれる
ので、「4.カート参照」のみのリクエストを送信すればよくなります。
ログイン用Macro
Macroとして設定
Current Request
Session Handling Rulesについて5
ここで1から3までを「ログイン用Macro」として登録します。Macroの実施条件を設定
することで、[Repeater]や[Intruder]などでログイン用Macroは自動的にリクエストを
送信し、Current Requestに対する診断が実施できます。
ログイン用Macro
Start End
[Run macro]
4.カート参照
Current Request
Rule Actionsとして設定
Session Handling Rulesについて6
[Check session is valid]は、セッションの状況(有効なのか無効なのか)に応じて、
アクションの実施など設定することができます。
2.ログイン処理
1.ログイン 3.トップ画面 4.カート参照
6.カートへ追加
5.カートから削除
「5.カートからの削除」画面を診断しようとした場合に、カートにアイテムが入って
いないと正常に「5.カートからの削除」画面へ遷移できないため、カートに
アイテムを追加する必要が出てきます。
Current Request
Session Handling Rulesについて7
ここで1から4までを「セッション確認用Macro」、6を「セッション有効化Macro」
として登録します。
カートにアイテムが入っていない場合は、セッションが無効であるという設定をし、
その場合に「セッション有効化Macro」を実行するように指定します。
2.ログイン処理
1.ログイン 3.トップ画面 4.カート参照
6.カートへ追加
5.カートから削除
セッション有効化用Macro
セッション確認用Macro
Current RequestMacroとして設定
Session Handling Rulesについて8
カートにアイテムがない場合にのみカートへの追加を行うため、必要最低限の
リクエストのみで「5.カートからの削除」画面へ診断が容易にできるようになります。
5.カートからの削除
セッション確認用Macro
セッション有効化用Macro
セッションが有効な場合
セッションが無効な場合
[Check session is valid]
Current Request
Start End
Rule Actionsとして設定
Session Handling Rulesについて9
[Check session is valid]は、以下の3つのパートから構成されています。
・[Make request(s) to validate session]
・[Inspect response to determine session validity]
・[Define behaviour dependent on session validity]
Session Handling Rulesについて10
[Make request(s) to validate session]は、セッション状況の確認を行うための
リクエストをどのタイミングで生成するか指定します。
Session Handling Rulesについて11
[Issue current request]は、リクエストごとにセッションの状況を確認し、後続処理を
実施します。セッションが無効にならない限り、「5.カートからの削除」のみのリクエスト
しか発行しないため、必要最小限のリクエストで診断が可能です。
セッション有効化用Macro
セッションが無効な場合
[Check session is valid]
5.カートからの削除
5.カートからの削除
終了セッションが有効な場合
Current Request
Start End
Rule Actionsとして設定
Current Request
Session Handling Rulesについて12
[Run macro]で、セッション確認用MacroにあたるMacroを指定する必要があります。
[Validate session …]を有効にした場合、指定した回数のリクエストごとに、セッション
の有効性を確認するようになります。
特殊な仕様がない限りは、 [Validate session …]を有効にする必要性は低いと思い
ます。
Session Handling Rulesについて13
[Inspect response to determine session validity]は、セッションの有効性の確認
方法について設定します。どういう文字列が出力されていたら、セッションを有効
または無効とするのかを指定します。
Session Handling Rulesについて14
[Define behaviour dependent on session validity]は、セッション状況に応じて
実行する処理の内容を定義します。
Session Handling Rulesについて15
[If session valid,don’t process …]は、セッションが有効な場合に他の動作(Run
Macroなど)を行わない。[If session is invalid,perform the action below]は、
セッションが無効な場合に実行する処理を設定します。
Session Handling Rulesについて16
[If session valid,don’t process …]を有効にした場合、セッションが無効時に
[Check session is valid]以外の処理([Run macro]など)は実行されるが、
セッションが有効時は、後続処理は実行されない。
5.カートからの削除
セッション確認用Macro
セッション有効化用Macro
セッションが有効な場合
セッションが無効な場合
[Check session is valid] [Run macro]
なんらかの処理MacroStart End
Rule Actionsとして設定
Current Request
Session Handling Rulesについて17
[If session valid,don’t process …]を有効にした場合、後続処理が実行されなく
なります。セッションが有効時は、[Rule Actions]で、[Check session is valid]以降
に設定されているパターンは実行されません。
下記の場合、[run macro:picko_user1_add]はセッションが有効な場合は実行され
ません。
本来は上から実行される
Session Handling Rulesについて18
[If session is invalid,perform the action below]で[Prompt for in-browser session
recovery]を選択するとセッションが無効になった場合、ブラウザを用いて有効な
セッションの取得を促されます。
Session Handling Rulesについて19
[Update current request with parameters matched from final macro response]
は、Macroの最後のレスポンスからパラメータを引き継ぐかどうかを指定します。
この設定は、CSRFの対策としてワンタイムトークンが用いられている場合に自動的
に引き継ぐことで診断が容易に行えます。[Update current request with cookies
from session handling cookie jar]は、Cookie jarの更新を行うかどうかを指定します。
Session Handling Rulesについて20
[After running the macro,invoke a Burp extension action handler]は、
[Extender]-[Extensions]で追加したextensionを指定することが可能です。
extensionで変更されたCurrent Requestの内容をリクエストします。
セッション確認用Macro
セッション有効化用Macro
有効な場合
無効な場合
[Check session is valid]
5.カートからの削除
extension
Start End
Current Request
Rule Actionsとして設定
まとめ
Burp Suiteは、本資料に記載していないこともまだまだありますが、こういったツール
をうまく活用することで、診断(テスト)も効率よく行うことが可能です。
本資料に記載できなかったことは、今後、公開できたらいいなと思います。