Slide 1

Slide 1 text

開発運用研修 2019 セキュリティ PSIRT 大塚 純平

Slide 2

Slide 2 text

この講義の内容 ▌情報セキュリティ(5分) ▌サイボウズで検出している脆弱性とハンズオン(60分) • クロスサイト・スクリプティング (XSS) ★ハンズオン • SQLインジェクション(SQLi) ★ハンズオン • 情報漏えい • クロスサイトリクエストフォージェリ(CSRF)★ハンズオン • HTTPのセキュリティ機能 ▌やられサイト (20分) ▌脆弱性の見つけ方(5分)

Slide 3

Slide 3 text

情報セキュリティ

Slide 4

Slide 4 text

情報セキュリティ 「情報セキュリティ」とは「CIA(機密性、完全性、可用性)」を維持することです。 Confidentiality 認可されていない個人、 エンティティまたはプロセスに 対して、情報を使用させず、 また開示しない特性。 Availability 認可されたエンティティが要 求したときに、アクセス及び使 用が可能である特性。 Integrity 正確さ及び完全さの特性。 JIS Q 27000

Slide 5

Slide 5 text

情報資産 情報資産 ▌情報セキュリティで保護すべき対象となるもの。情報資産は様々であり、 組織そのものや人も該当します。 • 電子媒体(DVD・メモリスティック) • 印刷物 • 設備 • パソコン

Slide 6

Slide 6 text

脆弱性 脆弱性 ▌脆弱性とは、セキュリティ上の問題箇所のこと。 • ソフトウェア製品の本来の機能や性能を損なう原因となりうる箇所 • 不適切な運用により、セキュリティが維持できなくなっている状態

Slide 7

Slide 7 text

脅威 脅威 ▌組織に損害を与える可能性の「潜在的な原因」 • 脆弱性を利用して、リスクを現実化させる手段であり、自然災害など も含まれる。

Slide 8

Slide 8 text

サイボウズで検出している脆弱性

Slide 9

Slide 9 text

脆弱性の種別 サイボウズでは、脆弱性の種別として CWE 識別子を利用しています。 ▌CWE(Common Weakness Enumeration) とは 非営利団体のMITREが中心となって策定している、ソフトウェアにおけるセキュリティ 上の弱点(脆弱性)の種類を識別するための共通の基準です。 ▌参考情報 https://www.ipa.go.jp/security/vuln/CWE.html

Slide 10

Slide 10 text

CWEタイプのツリー(全て/JVN iPedia) ▌CWEはツリー構造になっており、上位にある脆弱性ほど、抽象度が高く なります。企業ごとに取捨選択して利用しています。 CWE全体@NIST JVN iPedia @IPA

Slide 11

Slide 11 text

サイボウズで採用しているCWE識別子 ▌サイボウズで採用しているCWE識別子と脆弱性タイプ CWE-16 環境設定 CWE-287 不適切な認証 CWE-20 不適切な入力確認 CWE-352 クロスサイトリクエストフォージェリ(CSRF) CWE-22 パス・トラバーサル CWE-362 競合状態 CWE-78 OSコマンド・インジェクション CWE-384 Session Fixation CWE-79 クロスサイト・スクリプティング (XSS) CWE-399 リソース管理の問題 CWE-89 SQLインジェクション CWE-601 Open Redirect CWE-93 CRLF Injection CWE-614 ログインの不備 - クッキーのセキュア属性不備 CWE-94 コードインジェクション CWE-Other その他 CWE-113 HTTPヘッダ・インジェクション CWE- DesignError 設計上の問題 CWE-200 情報漏えい CWE-264 認可・権限・アクセス制御

Slide 12

Slide 12 text

CWE-79 クロスサイト・スクリプティング (XSS) ▌XSS とは Webアプリケーションを通して、任意のスクリプトを利用者のブラウザで実施させる脆弱性 です。 被害者が使っているサイトA サイトA上で、スクリプトが実行されてしまい、情報 が抜き取られたり、ページを改ざんされたり。 被害者が使っているサイトAや攻撃用のサイト クリックを誘導するURL (パラメーターにスクリプトがついている) 情報を収集するための攻撃用のサイト

Slide 13

Slide 13 text

XSS の原理(1) ▌HTMLタグや JavaScript などの構造を破壊するような値を入力するこ とで、スクリプトを実行させます。

Slide 14

Slide 14 text

XSS の例① (対策前)

さん

index.php?name=AAA URL: GETリクエストパラメーター の値をそのまま表示させる AAAさん alert(1)さん index.php?name=alert(1)

Slide 15

Slide 15 text

さん

index.php?name=AAA URL: GETリクエストパラメーター の値をエスケープして表示させる AAAさん <script>alert(1)</script>さん XSS の例① (対策後) index.php?name=alert(1)

Slide 16

Slide 16 text

XSS の原理(2) ▌出力時に value の「””」の構造が破壊されて、任意の属性が追加され る。

Slide 17

Slide 17 text

XSS の例② (対策前) index.php?id=a” onfocus=“alert(1) フォーカス時に、alert(1) が表示される ” />

Slide 18

Slide 18 text

XSS の例② (対策後) index.php?id=a” onfocus=“alert(1) フォーカス時に何もならない ” />

Slide 19

Slide 19 text

XSSの種類 • 攻撃用のスクリプトが攻撃対象とは別の場所にある Reflected XSS • 攻撃用のスクリプトが攻撃対象のDB等に保管されている Stored XSS • サーバーを経由せず、JSのみで表示するパラメータを経由して攻撃が実行される DOM Based XSS

Slide 20

Slide 20 text

原因と対策 • HTMLのエスケープ漏れ • 文字コードやコンテンツ型の自動判別への理解不足 原因 • HTML は正しくエスケープする • 文字コードは必ず宣言する • コンテンツ型が HTML と判定されないようにする 対策

Slide 21

Slide 21 text

CWE-89 SQLインジェクション(SQLi) ▌SQL インジェクションとは Web アプリケーションを通して、任意のSQL文をデータベースに対して発行できる脆弱 性です。 攻撃対象のサイトA サイトAからのリクエストにSQL文をデー タベースに対して発行 攻撃対象サイトAのデータベース SQL文の結果をサイトAに返す。 通常閲覧できないような情報が含まれる ことも…。

Slide 22

Slide 22 text

SQL インジェクションの原理(1) ▌DBMSに対して発行する SQL文の構造を破壊するような値を入力する ことでDBで不正な SQL文を実行します。 SELECT * FROM tbl_user WHERE id =‘{$_GET[‘id’]}’ id =‘{$_GET[‘id’]}’

Slide 23

Slide 23 text

SQL インジェクションの原理(2) ▌SQL 文の構造を破壊され WHERE 句で指定される条件が常に「真」 になり、情報が漏えいします。 SELECT * FROM tbl_user WHERE id =‘{$_GET[‘id’]}’ id =‘’ OR 1=1 --’ ’ OR 1=1 -- userテーブルの情報がすべて表示される 診断時には AND(‘ and 1=0) を使うことが推奨です。

Slide 24

Slide 24 text

原因と対策 • ユーザーが入力した文字列をエスケープしていない 原因 • 静的プレースホルダやテンプレートエンジン等、フレームワークの支援機構 を利用する • 別のシステムにデータを渡す際、ユーザーが入力した文字列を正しくエス ケープすること 対策

Slide 25

Slide 25 text

CWE-200 情報漏えい ▌データの送り方次第では、情報が攻撃者に漏えいしてしまう場合がありま す。 • HTTPでの情報 • QueryString上の情報 • LocalStorageでの漏えい

Slide 26

Slide 26 text

秘密情報 ▌秘密情報とは外部に知られると致命的となる情報 共通仕様として漏洩してはいけない情報を定義しています。 認証情報もしくは、それに類する情報を秘密情報としています。 • アカウント • パスワード • 特定の人にしか送信しないURL情報 • CSRFチケット

Slide 27

Slide 27 text

HTTPで機密情報をやり取りしちゃダメ ▌HTTPの通信には、HTTPとHTTPSがありHTTPの場合にはMiTM(通 信乗っ取り)されると情報を抜き取られてしまいます • HTTPは通信がそのままやり取りされています • HTTPSは通信が暗号化されてやり取りされています

Slide 28

Slide 28 text

QueryString に機密情報は乗せちゃダメ ▌たとえ、HTTPS通信でやり取りしていたとしてもQueryStringの情報は 漏洩する可能性があります • Referer ヘッダからの漏えい • サーバーのログからの漏えい(管理者が閲覧可能)

Slide 29

Slide 29 text

Referer からの QueryString の漏えい ▌HTTP リクエストにはRefererというヘッダがあります。 ▌Referer は移動する前にどんなURLにアクセスしていたかの情報が記載 されます 製品ページ ▽ アクセスしていたURL https://hogehoge.cybozu.co m/hoge.cgi?user=username &pass=password 攻撃者のページ ▽ 送られるRefererヘッダ https://hogehoge.cybozu.co m/hoge.cgi?user=username &pass=password 遷移 usernameというユー ザーのパスワードは passwordか。

Slide 30

Slide 30 text

CWE-352 クロスサイトリクエストフォージェリ(CSRF) ▌CSRF とは 被害者が罠リンクをクリックして意図せずに処理を実行させられてしまう脆弱性です。 ▌参考情報 https://www.ipa.go.jp/security/awareness/vendor/programmingv2/contents/301.html 掲示板サイト 広告のようなクリックを誘導するURL (実はサイトAの設定変更を行うURL) 被害者が使っているサイトA 例えば、非公開設定になっている記事を 公開設定へ本人が変更したことに…

Slide 31

Slide 31 text

CSRF対策用のトークン ▌トークンをPOSTのリクエストボディのパラメーター送信しないと処理が行わ れないように対策します。 掲示板サイト 広告のようなクリックを誘導するURL (実はサイトAの設定変更を行うURL) 被害者が使っているサイトA 非公開設定を変えるためには POSTでアクセス且つ、サイトAのトークンが必要 GETだし、トークンは無いしで エラーとしてはじかれる

Slide 32

Slide 32 text

サイボウズ製品のCSRF対策用のトークン ▌製品によってパラメーターが異なります トークンの値が削除されると、不正なリクエストとして処理され、実行されません。 ▼kintone、サイボウズ共通管理、Store ▼Garoon、Office、メールワイズ

Slide 33

Slide 33 text

セキュリティ機能 ▌HTTP では、セキュリティ機能を設定することができます • X-XSS-Protection • X-Content-Type-Options • X-Frame-Options • Content-Security-Policy • Content-Disposition: attachment; • Strict-Transport-Security 共通仕様として定められているものもあります。

Slide 34

Slide 34 text

X-XSS-Protection: 1; mode=block ▌ブラウザ側でも XSS を防ぐための保護機能 X-XSS-Protection: 1; mode=block ブラウザの設定で、デフォルトで有効になっている XSS フィルター機能に対して、ユー ザーが無効にしている場合にも、強制的に有効するための機能です。XSSと検知された 場合は、レスポンスのコンテンツ全体が「#」に置き換えられます。

Slide 35

Slide 35 text

X-Frame-Options:SAMEORIGIN ▌フレーム内のページ表示を同一オリジンにのみ許可する保護機能