Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
2019-11 Webアプリケーションセキュリティ/2019-11 Web applicati...
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Cybozu
PRO
June 25, 2019
Technology
170k
4
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
2019-11 Webアプリケーションセキュリティ/2019-11 Web application Security
Cybozu
PRO
June 25, 2019
More Decks by Cybozu
See All by Cybozu
新卒1年目QAが リリース基準の"なぜ"をたどってみた
cybozuinsideout
PRO
1
350
サイボウズ 開発本部採用ピッチ / Cybozu Engineer Recruit
cybozuinsideout
PRO
10
82k
kintone リサーチ副部/UXリサーチャー 業務紹介
cybozuinsideout
PRO
0
90
私たちが『JaSST協賛』から『外部コネクト』チームになった理由
cybozuinsideout
PRO
0
370
LLMでもいつものテスト技術〜意外と半分はこれまでのテストでした〜
cybozuinsideout
PRO
1
940
kintone開発のプラットフォームエンジニアの紹介
cybozuinsideout
PRO
0
1.4k
LLMアプリの品質保証
cybozuinsideout
PRO
1
660
技術広報チームに丸投げしない!「一緒につくる」スポンサー活動
cybozuinsideout
PRO
0
250
テクニカルライター (グループウェア) について
cybozuinsideout
PRO
0
220
Other Decks in Technology
See All in Technology
【FinOps】データドリブンな意思決定を目指して
z63d
2
480
週末にループ・エンジニアリングの理解を深めるためのスライド
nagatsu
0
570
初めてのDatabricks勉強会
taka_aki
2
180
フルAIで個人開発して学んだあれこれ / yuruai vol.1
isaoshimizu
0
150
[AWS Summit Japan 2026]迷っているあなたへ_小さな一歩が、やがて自分を助けてくれる
sh_fk2
2
430
そこにあるから地図ができる~位置を示す"モノ"を愉しむ~ - Interface 2026年6月号GPS特集オフ会 / interface_202606_GPS_offline
sakaik
1
110
WebGIS AI Agentの紹介
_shimizu
0
590
AIは、人間らしい仕事の夢を見るか?─ AI時代のtoB/toEプロダクトを再設計する
techtekt
PRO
0
160
From Prompt Engineering to Loop Engineering
shibuiwilliam
1
280
40代で“やっとエンジニアになれた”――閉じた学びを開き、空の青さを知る / 20260628 Naoki Takahashi
shift_evolve
PRO
4
1.1k
GitHub Copilot運用のリアル ~AI Credit時代にどう向き合うか~
takafumisu2uk1
0
480
組織における AI-DLC 実践
askul
0
150
Featured
See All Featured
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
65
56k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.4k
Chasing Engaging Ingredients in Design
codingconduct
0
230
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.8k
Everyday Curiosity
cassininazir
0
240
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2k
The Pragmatic Product Professional
lauravandoore
37
7.3k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
200
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.2k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.5k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.8k
Designing for Timeless Needs
cassininazir
1
260
Transcript
開発運用研修 2019 セキュリティ PSIRT 大塚 純平
この講義の内容 ▌情報セキュリティ(5分) ▌サイボウズで検出している脆弱性とハンズオン(60分) • クロスサイト・スクリプティング (XSS) ★ハンズオン • SQLインジェクション(SQLi) ★ハンズオン
• 情報漏えい • クロスサイトリクエストフォージェリ(CSRF)★ハンズオン • HTTPのセキュリティ機能 ▌やられサイト (20分) ▌脆弱性の見つけ方(5分)
情報セキュリティ
情報セキュリティ 「情報セキュリティ」とは「CIA(機密性、完全性、可用性)」を維持することです。 Confidentiality 認可されていない個人、 エンティティまたはプロセスに 対して、情報を使用させず、 また開示しない特性。 Availability 認可されたエンティティが要 求したときに、アクセス及び使
用が可能である特性。 Integrity 正確さ及び完全さの特性。 JIS Q 27000
情報資産 情報資産 ▌情報セキュリティで保護すべき対象となるもの。情報資産は様々であり、 組織そのものや人も該当します。 • 電子媒体(DVD・メモリスティック) • 印刷物 • 設備
• パソコン
脆弱性 脆弱性 ▌脆弱性とは、セキュリティ上の問題箇所のこと。 • ソフトウェア製品の本来の機能や性能を損なう原因となりうる箇所 • 不適切な運用により、セキュリティが維持できなくなっている状態
脅威 脅威 ▌組織に損害を与える可能性の「潜在的な原因」 • 脆弱性を利用して、リスクを現実化させる手段であり、自然災害など も含まれる。
サイボウズで検出している脆弱性
脆弱性の種別 サイボウズでは、脆弱性の種別として CWE 識別子を利用しています。 ▌CWE(Common Weakness Enumeration) とは 非営利団体のMITREが中心となって策定している、ソフトウェアにおけるセキュリティ 上の弱点(脆弱性)の種類を識別するための共通の基準です。
▌参考情報 https://www.ipa.go.jp/security/vuln/CWE.html
CWEタイプのツリー(全て/JVN iPedia) ▌CWEはツリー構造になっており、上位にある脆弱性ほど、抽象度が高く なります。企業ごとに取捨選択して利用しています。 CWE全体@NIST JVN iPedia @IPA
サイボウズで採用している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 認可・権限・アクセス制御
CWE-79 クロスサイト・スクリプティング (XSS) ▌XSS とは Webアプリケーションを通して、任意のスクリプトを利用者のブラウザで実施させる脆弱性 です。 被害者が使っているサイトA サイトA上で、スクリプトが実行されてしまい、情報 が抜き取られたり、ページを改ざんされたり。
被害者が使っているサイトAや攻撃用のサイト クリックを誘導するURL (パラメーターにスクリプトがついている) 情報を収集するための攻撃用のサイト
XSS の原理(1) ▌HTMLタグや JavaScript などの構造を破壊するような値を入力するこ とで、スクリプトを実行させます。
XSS の例① (対策前) <h1><?php echo $_GET['name'] ?>さん</h1> index.php?name=AAA URL: GETリクエストパラメーター
の値をそのまま表示させる AAAさん <scrip>alert(1)</script>さん index.php?name=<script>alert(1)</script>
<h1><?php echo htmlspecialchars($_GET['name’]) ?>さん</h1> index.php?name=AAA URL: GETリクエストパラメーター の値をエスケープして表示させる AAAさん <script>alert(1)</script>さん
XSS の例① (対策後) index.php?name=<script>alert(1)</script>
XSS の原理(2) ▌出力時に value の「””」の構造が破壊されて、任意の属性が追加され る。
XSS の例② (対策前) <input type=“text” value= “a” onfocus=“alert(1)“ /> index.php?id=a”
onfocus=“alert(1) フォーカス時に、alert(1) が表示される <input type=“text” value=“<?php echo $_GET[‘id’] ?>” />
XSS の例② (対策後) index.php?id=a” onfocus=“alert(1) フォーカス時に何もならない <input type=“text” value=“<?php echo
htmlspecialchars($_GET[‘id’]) ?>” /> <input type=“text” value= "" onfocus="alert(1)"/>
XSSの種類 • 攻撃用のスクリプトが攻撃対象とは別の場所にある Reflected XSS • 攻撃用のスクリプトが攻撃対象のDB等に保管されている Stored XSS •
サーバーを経由せず、JSのみで表示するパラメータを経由して攻撃が実行される DOM Based XSS
原因と対策 • HTMLのエスケープ漏れ • 文字コードやコンテンツ型の自動判別への理解不足 原因 • HTML は正しくエスケープする •
文字コードは必ず宣言する • コンテンツ型が HTML と判定されないようにする 対策
CWE-89 SQLインジェクション(SQLi) ▌SQL インジェクションとは Web アプリケーションを通して、任意のSQL文をデータベースに対して発行できる脆弱 性です。 攻撃対象のサイトA サイトAからのリクエストにSQL文をデー タベースに対して発行
攻撃対象サイトAのデータベース SQL文の結果をサイトAに返す。 通常閲覧できないような情報が含まれる ことも…。
SQL インジェクションの原理(1) ▌DBMSに対して発行する SQL文の構造を破壊するような値を入力する ことでDBで不正な SQL文を実行します。 SELECT * FROM tbl_user
WHERE id =‘{$_GET[‘id’]}’ id =‘{$_GET[‘id’]}’
SQL インジェクションの原理(2) ▌SQL 文の構造を破壊され WHERE 句で指定される条件が常に「真」 になり、情報が漏えいします。 SELECT * FROM
tbl_user WHERE id =‘{$_GET[‘id’]}’ id =‘’ OR 1=1 --’ ’ OR 1=1 -- userテーブルの情報がすべて表示される 診断時には AND(‘ and 1=0) を使うことが推奨です。
原因と対策 • ユーザーが入力した文字列をエスケープしていない 原因 • 静的プレースホルダやテンプレートエンジン等、フレームワークの支援機構 を利用する • 別のシステムにデータを渡す際、ユーザーが入力した文字列を正しくエス ケープすること
対策
CWE-200 情報漏えい ▌データの送り方次第では、情報が攻撃者に漏えいしてしまう場合がありま す。 • HTTPでの情報 • QueryString上の情報 • LocalStorageでの漏えい
秘密情報 ▌秘密情報とは外部に知られると致命的となる情報 共通仕様として漏洩してはいけない情報を定義しています。 認証情報もしくは、それに類する情報を秘密情報としています。 • アカウント • パスワード • 特定の人にしか送信しないURL情報
• CSRFチケット
HTTPで機密情報をやり取りしちゃダメ ▌HTTPの通信には、HTTPとHTTPSがありHTTPの場合にはMiTM(通 信乗っ取り)されると情報を抜き取られてしまいます • HTTPは通信がそのままやり取りされています • HTTPSは通信が暗号化されてやり取りされています
QueryString に機密情報は乗せちゃダメ ▌たとえ、HTTPS通信でやり取りしていたとしてもQueryStringの情報は 漏洩する可能性があります • Referer ヘッダからの漏えい • サーバーのログからの漏えい(管理者が閲覧可能)
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か。
CWE-352 クロスサイトリクエストフォージェリ(CSRF) ▌CSRF とは 被害者が罠リンクをクリックして意図せずに処理を実行させられてしまう脆弱性です。 ▌参考情報 https://www.ipa.go.jp/security/awareness/vendor/programmingv2/contents/301.html 掲示板サイト 広告のようなクリックを誘導するURL (実はサイトAの設定変更を行うURL)
被害者が使っているサイトA 例えば、非公開設定になっている記事を 公開設定へ本人が変更したことに…
CSRF対策用のトークン ▌トークンをPOSTのリクエストボディのパラメーター送信しないと処理が行わ れないように対策します。 掲示板サイト 広告のようなクリックを誘導するURL (実はサイトAの設定変更を行うURL) 被害者が使っているサイトA 非公開設定を変えるためには POSTでアクセス且つ、サイトAのトークンが必要 GETだし、トークンは無いしで
エラーとしてはじかれる
サイボウズ製品のCSRF対策用のトークン ▌製品によってパラメーターが異なります トークンの値が削除されると、不正なリクエストとして処理され、実行されません。 ▼kintone、サイボウズ共通管理、Store ▼Garoon、Office、メールワイズ
セキュリティ機能 ▌HTTP では、セキュリティ機能を設定することができます • X-XSS-Protection • X-Content-Type-Options • X-Frame-Options •
Content-Security-Policy • Content-Disposition: attachment; • Strict-Transport-Security 共通仕様として定められているものもあります。
X-XSS-Protection: 1; mode=block ▌ブラウザ側でも XSS を防ぐための保護機能 X-XSS-Protection: 1; mode=block ブラウザの設定で、デフォルトで有効になっている
XSS フィルター機能に対して、ユー ザーが無効にしている場合にも、強制的に有効するための機能です。XSSと検知された 場合は、レスポンスのコンテンツ全体が「#」に置き換えられます。
X-Frame-Options:SAMEORIGIN ▌フレーム内のページ表示を同一オリジンにのみ許可する保護機能