受動的攻撃と同一オリジンポリシー

  • 受動的攻撃に対するブラウザの防御戦略であるサンドボックスという考え方を理解する
  • 同一オリジンポリシーは、webアプリケーションの脆弱性を理解する上で重要

能動的攻撃と受容的攻撃

webアプリケーションに対する攻撃は、能動的攻撃受動的攻撃に分類される。

能動的攻撃

能動的攻撃(active attack)とは、攻撃者がwebサーバに対して直接攻撃すること。
ex.SQLインジェクション

受動的攻撃

受動的攻撃(passive attack)とは、攻撃者がサーバを直接攻撃するのではなく、webサイトの利用者に罠を仕掛け、 罠を閲覧したユーザを通してアプリケーションを攻撃すること。

単純な受動的攻撃

罠サイトに利用者を誘導する。典型例は怪しいサイトを閲覧してマルウェア(ウイルスなどの不正プログラム)に感染すること。 ブラウザ本体や、Adoce Acrobat Reader DC, Adobe Flash Player, JREなどのプラグインの脆弱性をついた攻撃が発生している。

正規サイトを悪用する受動的攻撃

攻撃者はあらかじめ正規サイトを攻撃してマルウェアを仕込む。 正規サイトの利用者が仕掛けを含むコンテンツを閲覧し、マルウェアに感染する。そして情報漏洩や不正操作などが行われる。
正規サイトを悪用した受動的攻撃は、単純なパターンに比べ手間がかかるが、攻撃者にとってメリットが大きい。そのメリットは下記の通り。

  • 罠サイトに誘導する手間がかからない
  • 正規サイトは利用者が多いので被害が拡大する可能性が高い
  • 正規サイトの機能を不正利用することにより攻撃者にメリットが得られる
  • 利用者の個人情報を盗むことにより攻撃者にメリットがある

正規サイトに罠を仕込む手法は次の4種

  • FTPなどのパスワードを不正入手してコンテンツを書き換える
  • Webサーバの脆弱性をついた攻撃によりコンテンツを書き換える
  • SQLインジェクション攻撃によりコンテンツを書き換える
  • SNSなど利用者が投稿できるサイト機能のクロスサイト・スクリプティング脆弱性を悪用する

サイトをまたがった受動的攻撃

罠サイトと正規サイトをまたがった攻撃。

  1. 利用者が罠サイトを閲覧する
  2. 罠サイトから仕掛けを含むHTMLをダウンロードする
  3. HTMLの仕掛けあ発動して正規サイトに攻撃のリクエストを送信する
  4. 正規サイトからjavascriptなどの仕掛けを含むレスポンスが返る

このパターンの特徴は、正規サイトにログインしている利用者のアカウントを不正利用していること。 3のリクエストでセッションクッキーを正規サイトに送信するため、利用者が正規サイトにログイン状態であれば、ログインした状態で攻撃される。3のリクエストでwebアプリケーションを攻撃するタイプがクロスサイト・リクエストフォージェリ(CSRF)、4のレスポンスによりブラウザを介して攻撃するタイプがクロスサイト・スクリプティング(XSS)やHTTPヘッダ・インジェクション

受動的攻撃をどのように防ぐか

サンドボックスという考え方

ブラウザ上では、JavascriptやJavaアプレットなどサイトを閲覧した状態でプログラムを実行する機能が提供されている。悪意のあるプログラムが動かないよう、javascriptなどは安全性を高めるための機能を提供している。その基本的な考え方には次の2種類がある。

  • 利用者の配布元を確認させた上で、利用者が許可した場合のみ実行実行する
  • プログラムの「できること」を制限するサンドボックスという環境を用意する

前者はActiveXコントロールや署名付きアプレットで採用されている考え方だが、利用者の負担とセキュリティの観点からサポートが終了されつつある。

サンドボックスは、javascriptやJavaアプレット、Adobe Flash Playerなどで採用されている考え方で、プログラムができることに制約がある。

ex.) Javascriptのサンドボックス

  • ローカルファイルへのアクセス禁止
  • プリンタなどの資源の利用禁止(画面表示は可能)
  • ネットワークアクセスの制限(同一オリジンポリシー))

ネットワークについては完全な禁止ではないが、厳しい制約がある。この制約を同一オリジンポリシーと呼ぶ。

同一オリジンポリシー

同一オリジンポリシー(same origin policy)はとはJavaScriptなどのクライアントスクリプトからサイトをまたがったアクセスを禁止するセキュリティセキュリティ上の制限。 ブラウザは一度に複数のサイトのオブジェクトを扱うことができる。iframeなどがその例。

同一オリジンである条件

同一オリジンとは下記のすべてを満たすこと

  • URLのホスト(FQDN; Fully Qualified Domain Name)が一致している
  • スキーム(プロトコル)が一致している
  • ポート番号が一致している

クッキーに対する条件はスキームとポート番号は関係ないので、javascriptの制限のほうが厳しい。
同一オリジンポリシーによる保護対象はiframe内のドキュメントだけではない。 Ajaxの実現に使用されるXMLHttpRequestオブジェクトでアクセスできるURLにも同一オリジンポリシーの制限がある。 ただしXMLHttpRequestについては、相手側の許可があれば、同一オリジンでなくとも通信可能なCORSという規格が策定された。

アプリケーション脆弱性と受動的攻撃

同一オリジンポリシーにより受動的攻撃を防止しているが、アプリケーションに脆弱性があると受動的攻撃を受ける場合がある。その代表例がクロスサイト・スクリプティング(XSS)攻撃。

Javascript以外のクロスドメインアクセス

javascript以外でクロスドメインのアクセス許可がされているもの

frame要素とiframe要素

img要素

script要素

css

form要素のaction属性