おうちでキャンプ: 2019 年全国大会「体系的に学ぶモダン Web セキュリティ」
#自習室はじめに
セキュリティ・キャンプ協議会企画グループの米内です。 今回はおうちでキャンプの第二段として、セキュリティ・キャンプ全国大会 2019 で提供した講義「体系的に学ぶモダン Web セキュリティ」を少しだけアップデートしたものを公開します。 ぜひ自宅での学習にご利用ください。
なお本資料・演習は一部攻撃手法の歴史に関する言及を含んでいます。 しかしこれは Web クライアントサイドにおけるセキュリティ機能の必要性をよりよく理解していただくためのものです。 当然ながら違法行為を助長するものではありません。
本資料・演習がよりセキュアな世の中を作っていくための一助となるのであれば幸いです。
公開物
先だっての講義で使用したスライドに一部修正を加えたものを以下にて公開しました。 このスライドは主に Web クライアントサイドの基礎的なセキュリティ機能・攻撃技術の発展を大まかに眺めていく、というものです。
またスライドの中では、以下の 3 つの演習環境が提示されています。
このうち前 2 つは当時の講義で使用したものであり、Blind Regex Injection Challenge は本稿のために新しく追加したものです。
公開資料の補足
上述の公開物は基本的に実際の講義で使用したものをベースとしている分、大きな話の流れや演習の意図が見えにくいのではないかと思います。 そこでここからは公開資料・環境に対する補足説明を加えたいと思います。
全体の流れ
資料の大部分は攻撃手法に関する潮流・原理の話となっています。 具体的には以下のようなことを取り扱っています。
- p.5 - p.22: Web ブラウザのもつセキュリティ機能 (SOP, CORS, CSP) に関する整理
- p.24 - p.29: 攻撃手法に関する研究の潮流
- p.31 - p.40: CSS Injection 攻撃の原理の整理
- p.43 以降: XS-Leak Attack / XS-Search Attack の概略の整理といくつかの手法例
序盤
資料ではまず現代の Web のセキュリティを語る上で最低限必要な知識として、以下の 3 つについてを説明しています。
- Same-Origin Policy (SOP)
- Cross-Origin Resource Sharing (CORS)
- Content-Security-Policy (CSP)
このうち SOP はブラウザ内で保持されているユーザの大切な情報を攻撃者から守るための仕組みです。 CORS は SOP による制限の意図的な緩和を開発者に許すための仕組みです。 そして CSP は、Cross-Site Scripting (XSS) 脆弱性に対してあまり効果を持たない SOP を補助するための、ブラウザ内での二次的な対策ラインとして提供されている機能です。
なお当時の講義では事前課題として一定これらについてを学んできてもらっていたため、スライドでは簡易的な説明しかなされていません。 必要に応じて次のページ・文献を確認するとよいでしょう。
- 同一オリジンポリシー … Same-Origin Policy の簡単な説明がなされている Web ページ。どのようなことが制限を受けるのか、逆に何が制限されないのか、を大まかに確認できる。
- Reining in the web with content security policy … 初期の CSP の提案をした論文。どのような背景のもと・どのような形のものとして CSP が生まれたのかを学ぶことができる。
- Content Security Policy Level 3 … CSP の仕様書 (Working Draft)。現在の CSP がどのような機能を持つかが俯瞰できる。
この SOP・CORS・CSP の話題の後、資料はこれらの登場・発展を受けて Web クライアントサイドではどのような攻撃手法が発展してきたのか、の話に移ります。 具体的にはここで以下の 3 つの発展の方向性の存在を示しています。
- XSS 攻撃そのものの発展 (i.e. より巧妙な XSS 攻撃の登場)
- CSS Injection 攻撃をはじめとした Scriptless Attack に関する攻撃の発展
- XS-Leak Attack のようなサイドチャネル的攻撃手法の発展
もっともこの枠には収まりきらない攻撃手法 (e.g. UXSS のようなブラウザのセキュリティ境界そのものを揺るがす攻撃) もあることでしょう。 しかし Web ブラウザ内での攻撃手法を大まかに分類する上では有用な指針となるのではないかと思います。
方向性 1 … XSS について
いま 3 つの方向性の内、XSS 攻撃そのものの発展については資料で詳しく掘り下げられていませんが、以下の演習問題の後半あたりで取り上げられています。
これは「様々な XSS 可能な状況が提示されるので、なんとか alert('XSS')
を実行してください」という演習です。
しばしばこの手の問題群は XSS Challenge と呼ばれています。
この問題群は以前別の機会にも公開したことがあるので、すでに解いたことがある方もいらっしゃるかとは思います。 もしまだ取り組んだことがないのであれば、ぜひ取り組んでみてください。
方向性 2 … CSS Injection について
資料前半で攻撃手法の発展の 3 つの方向性が整理された後は、CSS Injection 攻撃についてを取り上げています。 これは講義当時 Scriptless Attack の中でも CSS Injection についての議論が盛んだったためです。
もともと XSS 脆弱性がそこら中にある世の中であれば、このような攻撃手法の存在を問題視する必要はないとも言えます。 しかし多方面の努力により XSS 脆弱性の可能性や影響力が少しずつ抑えられつつあるため、このような手法にも目が向けられてきている、というわけです。
筆者のブログ記事やセキュリティ・キャンプ 2019 卒業生の梅内さんの記事を併せて読むと更に理解が深まることでしょう。 また原理についてある程度理解ができたら、以下の演習環境で遊んでみるとよいでしょう。
方向性 3 … XS-Leak Attack について
CSS Injection についてを取り上げた後、資料では XS-Leak Attack という攻撃のクラスについてを取り扱っています。 これは大雑把に表現すると「Cross-Origin でも観測できる情報を用いて、もとの情報を復元しようとする」攻撃です。
もっともこのような攻撃手法が現実世界で多用されているとは筆者には思えません。 また Same-Site 属性や Site Isolation (or Origin Isolation) 等の仕組みが実世界に投入されていけば、攻撃経路は狭まっていくことでしょう。 しかし XSS 脆弱性の対策が進んできていることを考慮すると、今後少しずつ目を向けていく必要がある攻撃クラスであるというのは確かだと、筆者は思います。
なお以下の演習問題は、サーバ側での処理時間を機密情報に関する何らかの条件の成立・不成立と紐づけられる Web アプリケーションの例となっています。 筆者のブログ記事 に必要な知識が整理されていますから、これを読みながらぜひ取り組んでみてください。
おわりに
本稿ではセキュリティ・キャンプ全国大会 2019 で提供した講義「体系的に学ぶモダン Web セキュリティ」の講義資料・演習の一部を公開し、それらの補足説明を行いました。 何か質問事項があれば筆者の Twitter か Web ページ にある連絡先からご連絡いただければと思います。 皆様どうぞご自愛くださいませ。