体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 「受動的攻撃と同一オリジンポリシー」を中心にまとめる

この記事は、[体系的に学ぶ 安全なWebアプリケーションの作り方 第2版](https://www.sbcr.jp/products/4797393163.html)の**3章-2 「受動的攻撃と同一オリジンポリシー」**を中心に受動的攻撃についてまとめて個人的な興味部分を深掘りした内容です。

# 体系的に学ぶ 安全なWebアプリケーションの作り方 第2版
[体系的に学ぶ 安全なWebアプリケーションの作り方 第2版](https://www.sbcr.jp/products/4797393163.html)


> 2011年3月刊行 「体系的に学ぶ 安全なWebアプリケーションの作り方」の改訂版。 
Webアプリケーションに生じうる脆弱性とそれを生まないための対策について、プログラマー向けに解説しているタイトルです。刊行から丸７年経過し、さまざまな環境が変わってきており、最新状況にあわせた上での改訂です。 

# Webアプリケーションに対する攻撃の分類
Webアプリケーションに対する攻撃は、**能動的攻撃**と**受動的攻撃**の２つに分類されます。

## 能動的攻撃
能動的攻撃（active attack）とは、攻撃者がWebサーバーに対して直接攻撃することを指します。具体例としては、[SQLインジェクション攻撃](https://www.w3schools.com/sql/sql_injection.asp)が挙げられます。

## 受動的攻撃
受動的攻撃（passive attack）とは、攻撃者がサーバーを直接攻撃する**能動的攻撃**とは異なり、Webサーバーの利用者に罠を仕掛けることで、罠を閲覧したユーザーを通してアプリケーションを攻撃する手法です。今回の**3章-3 「受動的攻撃と同一オリジンポリシー」**で取り上げられるのはこちらの手法になります。


# 受動的攻撃
上部で紹介した**受動的攻撃**のうち、本著で紹介されているパターンは以下3つです。

## 単純な受動的攻撃
罠サイトに利用者を誘導するパターンです。いわゆる「怪しいサイト」を利用者が閲覧してマルウェアに感染するケースになります。流れは下図になります。

<img width="477" alt="Screen Shot 2018-08-13 at 19.38.09.png" src="https://qiita-image-store.s3.amazonaws.com/0/84126/c8ea1916-ae48-a057-5158-1a45de369126.png">


現実に起きている例としては、[Adobe Acrobat Reader DC](https://get.adobe.com/reader/)・[Adobe Flash Player](https://www.adobe.com/products/flashplayer.html)・[JRE](http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html)などのプラグインの脆弱性をついた攻撃が頻繁に起きているようです。

## 正規サイトを悪用する受動的攻撃
正規サイトの罠が仕込まれるケースです。流れは下記になります。

<img width="548" alt="Screen Shot 2018-08-13 at 19.38.04.png" src="https://qiita-image-store.s3.amazonaws.com/0/84126/ae1a8a70-e51d-5db1-4eca-4800f1acff54.png">

このケースは、攻撃者にとっては手間がかかるものの、正規サイトの利用者の多さや正規サイトから利用者の個人情報を盗むといったメリットがあります。

### 代表事例：ガンブラー（Gumblar）
[2010年は「ガンブラー」が猛威、「有名サイトでウイルス感染」の時代に](https://tech.nikkeibp.co.jp/it/pc/article/news/20101221/1029272/)という2010年の記事で報道されている「ウイルス感染」はこちらの事例になります。
ガンブラー感染についての詳細は、IPAの[終息しない「ガンブラー攻撃」、
その対策は？](https://www.ipa.go.jp/files/000008394.pdf)というpdfにて解説されていますが、ウェブ経由でパソコンにウイルスを感染させようとする攻撃手法の一種（Drive-by download）として知られています。

## サイトをまたがった受動的攻撃
罠サイトと正規サイトをまたがった攻撃を行うケースです。流れは下図になります。

<img width="494" alt="Screen Shot 2018-08-13 at 19.56.21.png" src="https://qiita-image-store.s3.amazonaws.com/0/84126/15680531-4e30-d76b-b333-9003a3261507.png">

このパターンの攻撃としては、クロスサイト・リクエストフォージュリ（CSRF）・クロスサイト・スクリプティング（XSS）・HTTPヘッダ・インジェクションが典型例となります。

# 受動的攻撃に対するブラウザでの対策
ブラウザでは利用者のブラウザ上で悪意のあるプログラムが動かないよう、安全性を高めるために、**サンドボックス**という考え方が使われることがあります。Javascriptではこの考え方が採用されていて以下の機能が提供されています。

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

# 同一オリジンポリシー
[同一オリジンポリシー](https://developer.mozilla.org/ja/docs/Web/Security/Same-origin_policy)について、[mozilla web docs](https://developer.mozilla.org/ja/docs/Web/Security/Same-origin_policy)にて下記のように紹介されています。

> 同一オリジンポリシーとは、あるオリジンから読み込まれた文書やスクリプトについて、そのリソースから他のオリジンのリソースにアクセスできないように制限するものです。

## 同一オリジンである条件
- URLのホスト（FQDN）が一致
- スキーム（プロトコル）が一致
- ポート番号が一致

# アプリケーション脆弱性と受動的攻撃
アプリケーション脆弱性がある場合に受けうる受動的攻撃として、[XSS（クロスサイト・スクリプティング）攻撃](https://www.trendmicro.com/ja_jp/security-intelligence/research-reports/threat-solution/xss.html)があります。

Trend microの下記の記事では次のように説明されています。
https://www.trendmicro.com/ja_jp/security-intelligence/research-reports/threat-solution/xss.html

> クロスサイトスクリプティングとは、ユーザのアクセス時に表示内容が生成される「動的Webページ」の脆弱性、もしくはその脆弱性を利用した攻撃方法のことです。動的Webページの表示内容生成処理の際、Webページに任意のスクリプトが紛れ込み、Webサイトを閲覧したユーザ環境で紛れ込んだスクリプトが実行されてしまいます。

# 更に体系的に学ぶには
[体系的に学ぶ 安全なWebアプリケーションの作り方 第2版](https://www.sbcr.jp/products/4797393163.html)をぜひ購入しましょう