39
すぐできるWeb制作時の セキュリティTips Yoshinori Matsumoto 2013/01/28 加筆修正 2013/01/31

すぐできるWeb制作時のセキュリティTips

Embed Size (px)

DESCRIPTION

まにゼミ 知りませんでは通らない! 「制作者なら知っておきたいWebセキュリティの考え方」 2013/01/28 http://m2.cap-ut.co.jp/event/semi08.html

Citation preview

Page 1: すぐできるWeb制作時のセキュリティTips

すぐできるWeb制作時のセキュリティTipsYoshinori Matsumoto

2013/01/28加筆修正 2013/01/31

Page 2: すぐできるWeb制作時のセキュリティTips

すぐできるWeb制作時のセキュリティTips 2013/01/28 @ym405nm http://ym405nm.info

目次

•自己紹介•Webセキュリティの現状•よくあるセキュリティ事例と対策•古いソフトウェアでの注意点•見逃しがちな設定

Page 3: すぐできるWeb制作時のセキュリティTips

すぐできるWeb制作時のセキュリティTips 2013/01/28 @ym405nm http://ym405nm.info

自己紹介•名前:松本 悦宜(よしのり)• Twitter : @ym405nm•会社:神戸デジタル・ラボ•業務:Webプログラマー、セキュリティエンジニア、セキュリティコンサルタント

セキュリティ JavaScript HTML5 Android Web 神戸ITフェスティバル 讃岐うどん 小ネタ

Page 4: すぐできるWeb制作時のセキュリティTips

すぐできるWeb制作時のセキュリティTips 2013/01/28 @ym405nm http://ym405nm.info

自己紹介

•セキュリティ診断事例 : ECサイト管理者アカウントがのっとられないか商品在庫・値段が改ざんされないか顧客情報が漏洩しないか攻撃の踏み台にされないか

擬似的に攻撃して検証

Page 5: すぐできるWeb制作時のセキュリティTips

Webセキュリティの現状

Webアプリをつくりはじめるにあたってのセキュリティの現状

Page 6: すぐできるWeb制作時のセキュリティTips

すぐできるWeb制作時のセキュリティTips 2013/01/28 @ym405nm http://ym405nm.info

これから書き始める人の悩み

•そうだ、Webアプリをつくろう!•サーバサイド•DOMツリー•JavaScript•Ajax•新要素•ブラウザ依存•スマホ対応   など

理解することがいっぱいある

Page 7: すぐできるWeb制作時のセキュリティTips

すぐできるWeb制作時のセキュリティTips 2013/01/28 @ym405nm http://ym405nm.info

これから書き始める人の悩み

•そうだ、Webアプリをつくろう!•セキュリティ??クロスサイトスクリプティング、SQLインジェクション、クロスサイトリクエストフォージェリ、バッファ・オーバーフロー、OSコマンドインジェクション、クロスサイトトレーシング、ブルートフォースアタック

セキュリティなんてやってられへん!!

Page 8: すぐできるWeb制作時のセキュリティTips

すぐできるWeb制作時のセキュリティTips 2013/01/28 @ym405nm http://ym405nm.info

これから書き始める人の悩み

•重要なサイトならともかくすべてのセキュリティチェックを行うのは大変!

•かといって全く対策しないのも・・・•セキュリティにも優先順位があるはず

重要なセキュリティ問題と

Webアプリまわりの注意点をご紹介

Page 9: すぐできるWeb制作時のセキュリティTips

よくあるセキュリティ事例と対策

よく話題にあがるセキュリティホールついつい対策が漏れてしまうことにより、

大きな被害を与えるものを紹介

Page 10: すぐできるWeb制作時のセキュリティTips

すぐできるWeb制作時のセキュリティTips 2013/01/28 @ym405nm http://ym405nm.info

XSS

• XSS (Cross Site Scripting)•勝手に攻撃者がJavaScriptを実行してしまう手法

•攻撃者が作ったコードが他の人のブラウザでも実行される

•サイト改ざん、他サイトへの誘導

Page 11: すぐできるWeb制作時のセキュリティTips

すぐできるWeb制作時のセキュリティTips 2013/01/28 @ym405nm http://ym405nm.info

XSS•すごい簡単なサンプル簡易おみくじ

テキストボックスに名前を入れて、送信ボタンを押すと、

フォームの下に名前とおみくじ結果が出力される

Page 12: すぐできるWeb制作時のセキュリティTips

すぐできるWeb制作時のセキュリティTips 2013/01/28 @ym405nm http://ym405nm.info

XSS•よくある設定漏れ簡易おみくじ2

テキストボックスに名前を入れて、送信ボタンを押すと、

次の画面のテキストボックス内の初期値に名前が入っている。

Page 13: すぐできるWeb制作時のセキュリティTips

すぐできるWeb制作時のセキュリティTips 2013/01/28 @ym405nm http://ym405nm.info

XSS

•出力される値がタグを作らないように、HTMLの特殊文字をエスケープする

•エスケープする関数を使用する•自動エスケープされるフレームワークの機能を使用する

対策

Page 14: すぐできるWeb制作時のセキュリティTips

すぐできるWeb制作時のセキュリティTips 2013/01/28 @ym405nm http://ym405nm.info

SQLインジェクション

•攻撃者がSQL文を改ざんして、勝手に好きなSQL文を追加する

•顧客情報やコンテツ情報がSQLに入っていると大きな被害になる

•情報漏えい、サイト改ざん

Page 15: すぐできるWeb制作時のセキュリティTips

すぐできるWeb制作時のセキュリティTips 2013/01/28 @ym405nm http://ym405nm.info

SQLインジェクションログインフォーム

SELECT * FROM USERSWHERE ID=”___” and PASS = “___”

SQL文

結果server DB

ID, PASS

ログイン可否

Page 16: すぐできるWeb制作時のセキュリティTips

すぐできるWeb制作時のセキュリティTips 2013/01/28 @ym405nm http://ym405nm.info

SQLインジェクションログインフォーム

SELECT * FROM USERSWHERE ID=”___” and PASS = “___”

ログインできるSQL文

結果server DB

攻撃コード

ログインOK

改ざん

Page 17: すぐできるWeb制作時のセキュリティTips

すぐできるWeb制作時のセキュリティTips 2013/01/28 @ym405nm http://ym405nm.info

SQLインジェクション•よくある事例

$query = "SELECT * FROM usr WHERE uid = '$uid' AND pass = '$passh';$result = pg_query($conn, $query);

実装例

SQLSELECT * FROM usr WHERE uid = 'taro'--' AND pass ='eefd5bc2...'

攻撃例 ID : taro'--

コメントアウトとして扱われる

Page 18: すぐできるWeb制作時のセキュリティTips

すぐできるWeb制作時のセキュリティTips 2013/01/28 @ym405nm http://ym405nm.info

SQLインジェクション

• SQLとして扱われる記号をエスケープする•文字列連結でSQLを使用しない•プレースホルダーを利用して対策する

対策

Page 19: すぐできるWeb制作時のセキュリティTips

すぐできるWeb制作時のセキュリティTips 2013/01/28 @ym405nm http://ym405nm.info

SQLインジェクション対策

$stmt = $db->prepare('SELECT * FROM atable WHERE name=? and num=?', array('text', 'integer'), array('text', 'text', 'integer'));$rs = $stmt->execute(array($name, $num)); // 文字列型と整数型の変数

• PHPとMDB2を使った実装方法

Page 20: すぐできるWeb制作時のセキュリティTips

すぐできるWeb制作時のセキュリティTips 2013/01/28 @ym405nm http://ym405nm.info

CSRF

•クロスサイトリクエストフォージェリー Cross Site Request Forgeries

•サイトにログインしたユーザが、悪意のある外部サイトにより、ユーザが予期しない処理を実行させられてしまう問題

•「遠隔操作ウィルス」で話題に

Page 21: すぐできるWeb制作時のセキュリティTips

書き込みの流れと手口

 犯行声明メールや事件の経緯から見る流れは、以下のように想像できる。

1:真犯人がCSRF脆弱性のあるサイトを探す

CSRF脆弱性によって、外部から書き込みできる掲示板・SNSなどを探す。問題となった横浜市の掲示板はCSRF脆弱性を持っていた(現在は対策済み)。

2:CSRF脆弱性を攻撃するページを作成

真犯人が攻撃用のページを、独自サイトなどに作成。このページを開くと、自動的に対象の掲示板・SNSなどに決められたメッセージ(今回の場合は殺人予告)を書き込む。

3:攻撃用ページへのリンクを2ちゃんねるなどに書き込む

真犯人が攻撃用ページへのリンクを、2ちゃんねるなどの掲示板に書きこむ。今回の事件では、ソフトウエアのダウンロードリンクとして書き込まれたようだ。

4:被害者がリンクをクリックしてしまう

被害者がリンクをクリックし、攻撃用ページを開いてしまう。

5:対象の掲示板・SNSに勝手にメッセージが書き込まれる(2012年10月26日    読売新聞)

対策とデモは次のセッションで時間があれば

Page 22: すぐできるWeb制作時のセキュリティTips

古いソフトウェアでの注意点

Webアプリはいろいろなソフトウェア、ライブラリから構成されています。実装はしっかりしているつもりでも

これらのソフトウェアやライブラリが原因でセキュリティホールが作られる可能性もあります

Page 23: すぐできるWeb制作時のセキュリティTips

すぐできるWeb制作時のセキュリティTips 2013/01/28 @ym405nm http://ym405nm.info

JAVA

• Java7に任意のコードが実行される可能性が見つかった(2013年1月)

•ウェブを閲覧するだけで任意のコードが実行し、閲覧者の端末が乗っ取られる可能性

•大きく報道され、ブラウザでJavaを切ったり、アンインストールするユーザが増えた

Page 25: すぐできるWeb制作時のセキュリティTips

すぐできるWeb制作時のセキュリティTips 2013/01/28 @ym405nm http://ym405nm.info

Ruby

• Ruby on railsに深刻な脆弱性(2013年1月)•認証システムの迂回、任意のSQL挿入、任意のコード挿入と実行、Railsアプリケーションに対するサービス妨害(DoS)攻撃などに利用される可能性。

• Redmineにも影響があり、業務システムにも影響。

Page 26: すぐできるWeb制作時のセキュリティTips

すぐできるWeb制作時のセキュリティTips 2013/01/28 @ym405nm http://ym405nm.info

ソフトウェアの脆弱性

•原則的に次回バージョンアップで対策•発見されたもののなかには、攻撃コードが公開され、セキュリティツールにより自動化できる可能性がある

•対策をするためには、利用者がパッチをあてるかバージョンアップをしないといけない

Page 27: すぐできるWeb制作時のセキュリティTips

すぐできるWeb制作時のセキュリティTips 2013/01/28 @ym405nm http://ym405nm.info

PHP

Page 28: すぐできるWeb制作時のセキュリティTips

すぐできるWeb制作時のセキュリティTips 2013/01/28 @ym405nm http://ym405nm.info

jQuery

•多くのサイトでjQueryが使用されている• jQuery, bootstrap...•ちょっと脆弱性が見つかると大変

Page 29: すぐできるWeb制作時のセキュリティTips

すぐできるWeb制作時のセキュリティTips 2013/01/28 @ym405nm http://ym405nm.info

対策

•脆弱性情報を確認する•更新情報に隠れている場合もあり•無理のない範囲で、素早く対応できるようにする

Page 30: すぐできるWeb制作時のセキュリティTips

見逃しがちな設定

実装だけでなく、サーバの設定の注意も必要

Page 31: すぐできるWeb制作時のセキュリティTips

すぐできるWeb制作時のセキュリティTips 2013/01/28 @ym405nm http://ym405nm.info

サーバのログイン情報

server

ログイン&パスワード

ログイン結果

パスワード認証

•各サイトVPSの初期設定にするとパスワード認証になる

•パスワードの扱い方、辞書攻撃に注意が必要

Page 32: すぐできるWeb制作時のセキュリティTips

すぐできるWeb制作時のセキュリティTips 2013/01/28 @ym405nm http://ym405nm.info

サーバのログイン情報危険なパスワード例

俺調べ

Page 33: すぐできるWeb制作時のセキュリティTips

すぐできるWeb制作時のセキュリティTips 2013/01/28 @ym405nm http://ym405nm.info

サーバのログイン情報

server

鍵生成、公開鍵登録

ログイン結果

対策

•公開鍵を登録して鍵認証を行う

鍵認証

Page 34: すぐできるWeb制作時のセキュリティTips

すぐできるWeb制作時のセキュリティTips 2013/01/28 @ym405nm http://ym405nm.info

サーバのログイン情報サーバ情報の隠蔽

•エラーページやHTTPヘッダーに使用しているソフトウェアの名前とバージョン情報が表示される

Page 35: すぐできるWeb制作時のセキュリティTips

すぐできるWeb制作時のセキュリティTips 2013/01/28 @ym405nm http://ym405nm.info

サーバのログイン情報サーバ情報の隠蔽

•意外とphpinfo.php が残ってるサイトも。。。

Page 36: すぐできるWeb制作時のセキュリティTips

すぐできるWeb制作時のセキュリティTips 2013/01/28 @ym405nm http://ym405nm.info

サーバのログイン情報対策

•サーバの情報は出来る限り隠蔽する。特にエラーページとHTTPヘッダは注意

•推測されやすいサイトにも注意する(test.php, phpinfo.php, /admin, /wp-admin など)

Page 37: すぐできるWeb制作時のセキュリティTips

まとめ

Page 38: すぐできるWeb制作時のセキュリティTips

すぐできるWeb制作時のセキュリティTips 2013/01/28 @ym405nm http://ym405nm.info

まとめ

•Webセキュリティは難しいが、設定1つで修正できるものもある。

•多くの攻撃は、簡単な実装ミス・設定ミスから来ているものもおおい

Page 39: すぐできるWeb制作時のセキュリティTips

すぐできるWeb制作時のセキュリティTips 2013/01/28 @ym405nm http://ym405nm.info

参考文献

安全なウェブサイトの作り方

http://www.ipa.go.jp/security/vuln/websecurity.html