第9回勉強会 webセキュリティー

36
WEB アアアアアアアア アアアアアアア アアアア アアアアアアア アア アア

Upload: hakoika-itwg

Post on 24-May-2015

719 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: 第9回勉強会 Webセキュリティー

WEBアプリケーションセキュリティー株式会社 ミュートネット

竹原 広佑

Page 2: 第9回勉強会 Webセキュリティー

19:00 〜 19:10 自社・自己紹介など 19:10 〜 19:50 WEBセキュリティ 19:50 〜 20:00 休憩 20:00 〜 20:30 WEBセキュリティ 20:30 〜 20:40 まとめ 20:40 〜 後片付け(終了)

本日の予定

Page 3: 第9回勉強会 Webセキュリティー

・対象 1.Webアプリケーションを作ったことがない。 2.セキュリティについて何も知らない。 3.セキュリティについての基本は幾つか知ってはいるが、   意識したことは無い。

・非対象 4.セキュリティの基礎についてしっかりと把握し、意識して   コードを書いている。 5.セキュリティについての最新動向もしっかりと学習し   開発に生かしている。

本日の勉強会内容の対象者目安

Page 4: 第9回勉強会 Webセキュリティー

WEBセキュリティー1

Page 5: 第9回勉強会 Webセキュリティー

『WEBアプリケーションの数が近年急増』

【背景】

様々なデバイスの普及(スマホ、タブレット等)

クラウド関連の成長

はじめに

Page 6: 第9回勉強会 Webセキュリティー

Webアプリケーション数と脆弱性報告数

出典元  IPA( http://www.ipa.go.jp/security/vuln/report/vuln2012q3.html)

Page 7: 第9回勉強会 Webセキュリティー

ソフトウェアに対してウェブサイトの脆弱性報告が非常に多い!

2008年後期に急増( titterなどのWEB関連のサービスが流行り始める)

グラフ(1)

Page 8: 第9回勉強会 Webセキュリティー

グラフはユーザからの報告を受けた把握できている数

実際にはwebサイトの約4割が脆弱性を抱えている

グラフ(2)

出典元  IT pro( http://itpro.nikkeibp.co.jp/article/NEWS/20120705/407596/)

Page 9: 第9回勉強会 Webセキュリティー

IPA調べでは2012年3 Q度の1営業日に対する報告数はなんと。。

グラフ(3)

3.96 件 /日 !!

Page 10: 第9回勉強会 Webセキュリティー

脆弱性とは

Page 11: 第9回勉強会 Webセキュリティー

Cross Site Scripting(クロスサイトスクリプティング)Parameter Manipulation(パラメータ改ざん)Backdoor & Debug Options(バックドアとデバッグオプション)Forceful Browsing(強制的ブラウズ)Path Traversal(パスの乗り越え)SQL Injection( SQLの挿入)OS Command Injection(OSコマンドの挿入)Client Side Comment(クライアント側コメント) etc

脆弱性の種類(1)

ここで脆弱性として代表的な物をご紹介!

Page 12: 第9回勉強会 Webセキュリティー

第三者が通常のサイト利用者に対して自由にスクリプトを実行させる事ができる。

これにより、ユーザしか知り得ない情報( IDやパスなど)を不正に取得することが可能となる。

Cross Site Scripting(クロスサイトスクリプティング)

Page 13: 第9回勉強会 Webセキュリティー

上記の3つに共通な部分はURLの文字列変更による攻撃

例)http://○○○.com/○○○.php?userid=219http://○○○.com/phpmyadminhttp://○○○.com/(インデックスページの表示 )

上記の様なURLの場合、 useridの部分を220や221に変える事で別ユーザとしてアクセスできそう

Parameter Manipulation(パラメータ改ざん)Path Traversal/Directory Traversal(パスの乗り越え)

Forceful Browsing(強制的ブラウズ)

Page 14: 第9回勉強会 Webセキュリティー

上記の2つは主に開発中に開発者のミスで生まれる脆弱性。

開発中に仕込んでいた、本来踏むべき手順を無視し、実行できるルートを削除し忘れていたため、本来ならば起こり得ない事象を生む。

HTMLコメントは、攻撃者の格好のヒントになってしまう恐れも。。。

Backdoor & Debug Options(バックドアとデバッグオプション)

Client Side Comment(クライアント側コメント)

Page 15: 第9回勉強会 Webセキュリティー

SQLやOSコマンドを入力欄に入力し、本来であればエスケープすべき SQL文をしていないそれらの文字列がサーバによってコマンドとして実行されてしまう現象。

SQL Injection / Second Order Injection( SQLの挿入)

OS Command Injection( OSコマンドの挿入)

例)ログイン画面、パスワード入力欄などにSQLを書きサーバに送信

Page 17: 第9回勉強会 Webセキュリティー

脆弱性の中で特に代表的なものそれが

クロスサイトスクリプティング( XSS)と

SQLインジェクションです!

脆弱性まとめ

Page 18: 第9回勉強会 Webセキュリティー

XSSと SQLインジェクション詳細

Page 19: 第9回勉強会 Webセキュリティー

XSS(クロスサイトスクリプティング)詳細(1)

一般ユーザ偽の関連サイト 等(悪意のある第三者)

正規のWEBページ

ここでスクリプトを送り込む

Page 20: 第9回勉強会 Webセキュリティー

余談クロスサイトリクエストフォージェリ

一般ユーザ予めサーバに送信される情報を作成

(悪意のある第三者)

正規のWEBページ

リダイレクト

Page 21: 第9回勉強会 Webセキュリティー

対策としてしっかりとサニタイジング(無害化)

しよう!

XSS詳細(2)

Page 22: 第9回勉強会 Webセキュリティー

Web サイトの入力フォームへの入力デ ー タ か ら 、 HTML タグ、 JavaScript、 SQL文などを検出し、それらを他の文字列に置き換えること。

※エスケープなど無害化行為の総称

サニタイズとは?

Page 23: 第9回勉強会 Webセキュリティー

出力時、htmlspecialchars関数で簡単に出来ます!

PHPでの対策

Page 24: 第9回勉強会 Webセキュリティー

XSS(クロスサイトスクリプティング)詳細(1)より

一般ユーザ偽の関連サイト 等(悪意のある第三者)

正規のWEBページ

ここでスクリプトを無害化できる

Page 25: 第9回勉強会 Webセキュリティー

SQLインジェクション例)

SQLインジェクション詳細(1)

ID

ここの値を$SQL = “Select * from user where id = ‘”.$id. ”’”;

なんて形でやっていると・・・・

Page 26: 第9回勉強会 Webセキュリティー

SQLインジェクション詳細(2)

SQLインジェクション例)A‘ or ‘A’ = ‘A’ID

と入力されると展開後の文字列は

Select * from user where id = ‘A’ or ‘A’ = ‘A’;

となり入力情報がなんであっても通ってしまう

Page 27: 第9回勉強会 Webセキュリティー

前述のような形なら

まだ幾らかマシです!!

SQLインジェクション詳細(3)

Page 28: 第9回勉強会 Webセキュリティー

SQLインジェクション詳細(4)

SQLは;(セミコロン)で区切ることが出来るので‘ ; delete from userID

と入力されると

後ろに続く delete文が実行されます!!こんな事されたらもう・・・・

Page 29: 第9回勉強会 Webセキュリティー

対策として(;や‘は)

 エスケープすること!

特殊文字として認識させないように

文字列として内部で扱う

また、入力時の禁止文字列としての

対応も対策のひとつ!

SQLインジェクション(5)

Page 30: 第9回勉強会 Webセキュリティー

エスケープ処理もきちんとしたし、これで一安心!!

SQLインジェクション(6)

ではないんです!

Page 31: 第9回勉強会 Webセキュリティー

大層な名前ですがSQLインジェクションと本

質は同じです!

セカンドオーダインジェクション(1)

Page 32: 第9回勉強会 Webセキュリティー

例として例えば以下の様な形でユーザ登録できる

webアプリがあったとします。

セカンドオーダインジェクション(2)

ID : admin’--pass : password

Page 33: 第9回勉強会 Webセキュリティー

もし、このWEBアプリがパスを変更できるとしたら流れるクエリはこんな形

セカンドオーダインジェクション(3)

Update user set pass = ‘pass’ where id = ‘admin’—’;

SQLは -をコメントとしているので、上記のSQLでは adminのアカウントのパスワードが変更されてしまう。

Page 34: 第9回勉強会 Webセキュリティー

外部入力時のみではなく読み出しの値に対しても

エスケープ処理を忘れずに!(全てのクエリに対してエスケープは必須で

す)

セカンドオーダインジェクション(4)

Page 35: 第9回勉強会 Webセキュリティー

現在では、これらのサニタイジングを自動で(意識せず)やってくれるフレームワークが多数存在して

います。

しかし、それらのものにも脆弱性が存在しうるため、日々の最新アップデートは常に確認しておくべき!

現在では・・

Page 36: 第9回勉強会 Webセキュリティー

XSSは HTML出力時、サニタイジングを!SQLインジェクションは、 SQL生成時全ての場合に

おいてエスケープ処理を!

昨今の開発ではフレームワークを使用している為、脆弱性を生むような自体は避けられてはいる。が、バージョンアップなどの動向については常に

チェックするよう心がける。

セキュリティーまとめ