平成30年春期 午後2問1 設問1(1)
広告
なるうさん
(No.1)
前提条件として、以下の理解しかできていません。
DOM-based XSSはWebサイトのサーバにアクセスする以前の、クライアント側のブラウザの脆弱性
Webサイトの正常なスクリプトを、クライアント側のブラウザ上で、意図しないスクリプトとして出力されてしまう脆弱性
XSS(反射型)は悪意あるWebサイトに誘導されて、不正なスクリプトが実行されてしまう脆弱性
公式回答を読んでも全くしっくりきませんでした。
解答に至るまでの経緯を教えてくださいますと助かります。よろしくお願いいたします。
DOM-based XSSはWebサイトのサーバにアクセスする以前の、クライアント側のブラウザの脆弱性
Webサイトの正常なスクリプトを、クライアント側のブラウザ上で、意図しないスクリプトとして出力されてしまう脆弱性
XSS(反射型)は悪意あるWebサイトに誘導されて、不正なスクリプトが実行されてしまう脆弱性
公式回答を読んでも全くしっくりきませんでした。
解答に至るまでの経緯を教えてくださいますと助かります。よろしくお願いいたします。
2020.09.13 18:04
グルタミンさん
(No.2)
ブラウザに絵や文字が表示される基本的な仕組みは以下のようになります(かなり、ざっくばらんですが)
①クライアントのブラウザがサーバにhttpリクエストを投げる
②サーバはhttpレスポンスとして、HTML文字列をクライアントに送信する
③クライアントのブラウザは受け取ったHTML文字列を解釈して絵や文字をレンダリングする(この時、HTMLの中にスクリプトが埋め込まれていれば、スクリプトを実行する)
受け取ったHTML文字列をクライアント側では書き換える事ができず、表示を変えたければサーバに新たにデータを要求して受け取る必要がありました。
しかし、JavaScriptを使う事で、サーバに新しくHTML文字列を要求しなくても、クライアントのブラウザ内で動的にHTML文字列を書き換える事ができるようになりました。この事をDOM操作と言います。
ここで、それぞれの攻撃の話に入ります。
反射型XSSはDOM操作を利用しない攻撃です。上記で述べた通り、DOM操作を利用しない場合、クライアントのブラウザで処理しているHTML文字列をクライアント側で書き換えることはできません。ですので、サーバに悪意あるスクリプトを含むHTML文字列を生成してもらう必要があります。そのためには不正な入力等で脆弱性を突き、サーバに悪意あるHTMLを生成してくれという要求(httpリクエスト)を投げる必要があります。サーバ側はその要求に応え悪意あるHTML文字列を返し、それがクライアントのブラウザで実行されることで攻撃が成立します。しかし、当然、この通信はサーバ側で検知することが可能であり、悪意ある要求も、生成された悪意あるスクリプトも見つけて対処することが可能です。
次にDOM-based XSSですが、サイト内でDOM操作をするスクリプトが埋め込まれたページがあり、そこに脆弱性がある場合、DOM操作している部分に不正な入力を行ったりする事で脆弱性を突き、クライアントのブラウザで処理しているHTML文字列をクライアント側で好きに改変して悪意あるスクリプトを生成する事が可能です。この場合、クライアントが自力でHTMLを書き換えてしまうので、サーバには何も要求する必要が無く、クライアント内で全て完結してしまいます。ですので、サーバ側で検知することは困難であり、悪意あるスクリプトの実行を止める事もサーバ側からは難しいです。
まとめると、DOM-based XSSは、サーバからのレスポンスによって不正なスクリプトを生成するわけではなく、クライアントのブラウザ内で不正なスクリプトを生成するので、公式解答にある通り、DOM-based XSSの脆弱性を突いた攻撃では、サーバからのレスポンスに違いは出ません
①クライアントのブラウザがサーバにhttpリクエストを投げる
②サーバはhttpレスポンスとして、HTML文字列をクライアントに送信する
③クライアントのブラウザは受け取ったHTML文字列を解釈して絵や文字をレンダリングする(この時、HTMLの中にスクリプトが埋め込まれていれば、スクリプトを実行する)
受け取ったHTML文字列をクライアント側では書き換える事ができず、表示を変えたければサーバに新たにデータを要求して受け取る必要がありました。
しかし、JavaScriptを使う事で、サーバに新しくHTML文字列を要求しなくても、クライアントのブラウザ内で動的にHTML文字列を書き換える事ができるようになりました。この事をDOM操作と言います。
ここで、それぞれの攻撃の話に入ります。
反射型XSSはDOM操作を利用しない攻撃です。上記で述べた通り、DOM操作を利用しない場合、クライアントのブラウザで処理しているHTML文字列をクライアント側で書き換えることはできません。ですので、サーバに悪意あるスクリプトを含むHTML文字列を生成してもらう必要があります。そのためには不正な入力等で脆弱性を突き、サーバに悪意あるHTMLを生成してくれという要求(httpリクエスト)を投げる必要があります。サーバ側はその要求に応え悪意あるHTML文字列を返し、それがクライアントのブラウザで実行されることで攻撃が成立します。しかし、当然、この通信はサーバ側で検知することが可能であり、悪意ある要求も、生成された悪意あるスクリプトも見つけて対処することが可能です。
次にDOM-based XSSですが、サイト内でDOM操作をするスクリプトが埋め込まれたページがあり、そこに脆弱性がある場合、DOM操作している部分に不正な入力を行ったりする事で脆弱性を突き、クライアントのブラウザで処理しているHTML文字列をクライアント側で好きに改変して悪意あるスクリプトを生成する事が可能です。この場合、クライアントが自力でHTMLを書き換えてしまうので、サーバには何も要求する必要が無く、クライアント内で全て完結してしまいます。ですので、サーバ側で検知することは困難であり、悪意あるスクリプトの実行を止める事もサーバ側からは難しいです。
まとめると、DOM-based XSSは、サーバからのレスポンスによって不正なスクリプトを生成するわけではなく、クライアントのブラウザ内で不正なスクリプトを生成するので、公式解答にある通り、DOM-based XSSの脆弱性を突いた攻撃では、サーバからのレスポンスに違いは出ません
2020.09.13 22:39
なるうさん
(No.3)
グルタミンさん詳細なご説明ありがとうございます!
スッと理解できました!助かりました。
スッと理解できました!助かりました。
2020.09.13 23:41
広告
返信投稿用フォーム
スパム防止のためにスレッド作成日から30日経過したスレッドへの投稿はできません。
広告