Skip to main content
脆弱性とセキュリティ
~脆弱性ってなんだろな~
【名前】
安達 智弘(Adachi Tomohiro)
【会社】
株式会社 神戸デジタル・ラボ
セキュリティ事業部
【取り組み】
Webアプリケーションの
脆弱性診断業務に従事。
最近ではクラウドサービスの
セキュリティについて理解を深めている。
自己紹介
【名前】
安達 智弘(Adachi Tomohiro)
【会社】
株式会社 神戸デジタル・ラボ
セキュリティ事業部
【コミュニティ】
・大和セキュリティ
・神戸脆弱性診断の会
自己紹介
本セッションのターゲット
■セキュリティに興味がある方
■これからセキュリティ意識を高めたい方
本セッションの目的
■「脆弱性」に対する理解
■セキュアな開発
本セッションの目的
脆弱性ってヤバい
本日の流れ
1、脆弱性ってなんだろう
2、脆弱性が生まれる原因ってなにか?
3、Webアプリケーションを例にした脆弱性と攻撃
注意事項
・インターネットに繋がっている場合、
絶対に外部に向けて攻撃を実行しないように注意
・本セッションで習得した技術を悪用、または不正に使用しないこと
⁃ 不正アクセス行為の禁止等に関する法律
⁃ http://law.e-gov.go.jp/htmldata/H11/H11HO128.html
本資料の内容を利用して発生したいかなる損害に対しても、弊社および著
作者は一切責任を負いません。
セキュリティってどんなイメージ?
セキュリティについて
サーバー
Webサイト
脆弱性
バグ
バグとは
不具合
(プログラムの誤り)
脆弱性とは・・?
悪用できるバグ
(セキュリティホール)
どうして脆弱性が生まれてしまうの
か?
皆さんアプリ開発をするときに
一番優先していることは何ですか?
Q.
アプリが設計通り
思い描いている形で動くかどう
か
なぜ発生するのか
脆弱なコードを書いても
「エラーは吐かない」ため
気付かない
アプリ開発におけるセキュリティは
後回しになりがち
どう対策しよう?
脆弱性診断
脆弱性診断とは・・
攻撃者の視点から既知の技術を用いて企業のシステムや
ネットワーク、アプリケーションなどを疑似攻撃を試み
ることで、セキュリティ上の問題や脆弱性がないかどう
かのテストを行うこと。
ん・・?
開発中に行うテストで
脆弱性って発見できないの?
テスト工程の目的
【開発工程でのテスト】
• 設計通り動作しているか、機能不備を起こしていない
か等を検証します。
• 主に製品としての品質を保つことを目的とします。
脆弱性診断の目的
【脆弱性診断】
• システムがサイバー攻撃に耐えられるかを検証します。
• 主にセキュリティ上の品質を保つことを目的とします。
脆弱性診断するってなると
なかなか難しい
でもセキュリティを考えず
脆弱性のあるサイトを運用し続ける
と・・
どんな問題があるのか
■ Webサイトの内容を改ざん
■個人情報等、公開していない情報の閲覧
■本人が意図しない処理の実行
■サーバへ侵入する糸口
なぜダメなのか
■個人情報の漏洩
■サービスが停止してしまうリスク
■“安全ではない”というイメージ付着
経済的損失・企業への信頼の低下
なら、どうすればいいのか?
脆弱性を生まないよう
開発を行うことが、一つの対策にな
る
セキュアな開発を行うためには
アプリの脆弱性を知らないといけない
ここからはWEBアプリを例に
脆弱性と攻撃手法について紹介します
HTMLを
簡単におさらいしましょう
HTMLにおける文字の出力
HTMLタグ
HTMLタグ
HTMLにおける文字の出力
タグで囲む
HTMLにおける文字の出力
<p>
(特殊文字)
</p>
(特殊文字)
こんにちは
(ただの文字)
JavaScriptについて
Javascriptの使用方法
タグで囲む
WEBアプリケーションに対して
一体どのような攻撃があるのか
代表的なWEBアプリの脆弱性について
・XSS
(クロス・サイト・スクリプティング)
→コンテンツの改ざん
クロス・サイト・スクリプティングっ
て・・?
攻撃手法その①
XSS(クロス・サイト・スクリプティング)
利用者がサイトへアクセスした際に、
意図しないjavascriptを実行させる
攻撃手法
XSSの原理
POST
XSSの原理
フォームから
入力した文字が出力される
じゃあ、「タグ」を入力するとどうな
る?
XSSの原理
【入力値】
</h2><h1>文字を変えてみる</h1>
※<h>タグは見出しとして出力される
XSSの原理
【結果】
<h>タグが認識されている
XSSの原理
XSSの原理
【入力値】
<script>alert('XSS')</script>
※<script>タグはjavascriptの処理を行う
XSSの原理
【結果】
Javascriptが実行される
XSSの原理
<script>タグが認識され
Javascriptが実行される
XSS攻撃による影響
・フィッシングサイトへの誘導
・コンテンツの改ざん
・Cookieの抜き出し
フィッシングサイトへの利用
XSS攻撃利用例
XSS攻撃利用例
XSS攻撃利用例
Javascriptが埋め込みが可能な場合
Javascriptを使用して
任意のサイトへ
リダイレクトさせることが可能
XSS攻撃利用例
攻撃対象サイト
そっくりのログイン画面を用意する
XSS攻撃利用例
【入力値】
<script>
location.href=‘{URL}’;
</script>
このページへアクセスすると
リダイレクトされる
XSS攻撃利用例
あれ?もう一回ログイン?
→攻撃者にクレデンシャル情報を
送信してしまう
なぜ発生するのか
本来「文字列」として出力されるべき入力値が
HTMLタグとして認識されている
XSSの対策方法について
特殊文字を「ただの文字」として扱う
エスケープ処理
XSSの対策方法について
エスケープ処理は
HTMLエンティティへ変換
を行うことを指す
※XSS対策へ推奨されている文字
XSSの対策方法について
<
(特殊文字)
&lt;
(ただの文字)
置き換え
XSSの対策方法について
【参考 】PHPでの対策例
特殊文字をHTMLエンティティに変換する関数を使用する
(例)PHPの関数
htmlspecialchars($text, ENT_QUOTES, “UTF-8”);
変換対象となる文字列
扱う文字列の文字コード
(指定することを推奨)
変換オプション
この場合はシングルクオートも
変換対象となる(推奨)
XSSの対策方法について
ブラウザでは変換され、
<script>alert(1);</script>
と表示される
XSSの対策方法について
実際に検証してみた
準備したページ
未対策ページとXSS対策ページ
じゃあここに
<script>alert(‘XSS’)</script>
を入力すると、どうなる?
本来あるべき形はこのはず
実行してみるとこうなる
ブラウザ上でソースを比較してみる
未対策だと「タグ」として
認識されている
PHPのソース確認
エスケープ処理
見かけ上は差がない
実行してみるとこうなる
XSS発見のポイント
■特殊文字がどう取り扱われているのか確認する
■html内にタグがそのまま出力されていないか
■ユーザー入力が反映される画面全てが対象
コードに潜む脆弱性
脆弱なコードを書いても
「エラーは吐かない」ため
気付かない
“情報”から脆弱性が
生まれるリスク
攻撃者に与える ”情報” について
攻撃者に与える ”情報” について
攻撃者に与える ”情報” について
攻撃者に与える ”情報” について
攻撃者に与える ”情報” について
攻撃者に与える ”情報” について
攻撃者に与える ”情報” について
■サーバのバージョン情報
■アプリケーションやフレームワークのエラー文
■処理失敗時のエラーメッセージ等
■ソース上にAPIキーをハードコード
表示情報を元に次の攻撃へ繋ぐことが可能
攻撃者に与える ”情報” について
■サーバのバージョン情報
■アプリケーションやフレームワークのエラー文
■処理失敗時のエラーメッセージ等
■ソース上にAPIキーをハードコード
表示情報を元に次の攻撃へ繋ぐことが可能
攻撃者に与える ”情報” について
本日のまとめ
■脆弱性は「悪用できるバグ」のこと
■セキュアな開発が脆弱性への対策になる
■セキュアな開発を行うために
「脆弱性」を知ること
神戸でやっている勉強会があります
「セキュリティ」を
テーマとした勉強会を
不定期で行っています。
お疲れ様でした。
最後までご清聴いただき
ありがとうございました。