Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
2019-11 Webアプリケーションセキュリティ/2019-11 Web application Security
Cybozu
PRO
June 25, 2019
Technology
4
160k
2019-11 Webアプリケーションセキュリティ/2019-11 Web application Security
Cybozu
PRO
June 25, 2019
Tweet
Share
More Decks by Cybozu
See All by Cybozu
GaroonUX リサーチャーお仕事紹介 / GaroonUX Researcher Job Introduction
cybozuinsideout
PRO
0
29
Garoon 開発チーム / Garoon development team
cybozuinsideout
PRO
0
680
OSS分散ストレージの調査例 - 未知のエラーメッセージが出たときの対処 -/cnsm2-cybozu-oss-storage-survey-example
cybozuinsideout
PRO
0
58
アクセシビリティに興味のあるデザイナーに向けて
cybozuinsideout
PRO
1
10k
サイボウズ Garoon プロダクトマネージャー業務紹介/Garoon PM
cybozuinsideout
PRO
0
780
20211130-engineer-topseminar-teppeis
cybozuinsideout
PRO
0
340
20211130-engineer-topseminar-okady
cybozuinsideout
PRO
0
190
20211128-wafflefestival
cybozuinsideout
PRO
0
340
kintoneフロントエンド刷新におけるアクセシビリティの取り組み / Accessibility in kintone front-end revamp
cybozuinsideout
PRO
1
260
Other Decks in Technology
See All in Technology
Agile and Requirement : アジャイルな要件定義について考える
kawaguti
PRO
8
2.5k
Graph API について
miyakemito
0
260
モダンデータスタックとかの話(データエンジニアのお仕事とは)
foursue
0
410
Embedded SRE at Mercari
tcnksm
0
840
AWS Control TowerとAWS Organizationsを活用した組織におけるセキュリティ設定
fu3ak1
2
640
[SRE NEXT 2022]組織に対してSREを適用するとはどういうことか
srenext
0
160
プロダクション環境の信頼性を損ねず観測する技術
egmc
4
520
[SRE NEXT 2022]KaaS桶狭間の戦い 〜Yahoo! JAPANのSLI/SLOを用いた統合監視〜
srenext
0
220
220521_SFN_品質文化試論と『LEADING QUALITY』/220521_SFN_Essay_of_Quality_Culture_and_LEADING_QUALITY
mkwrd
0
240
HTTP Session Architecture Pattern
chiroito
1
400
ITエンジニアを取り巻く環境とキャリアパス / A career path for Japanese IT engineers
takatama
0
590
Dagu | オンプレ向けワークフローエンジン(WebUI 同梱)
yohamta
0
170
Featured
See All Featured
In The Pink: A Labor of Love
frogandcode
130
21k
Fashionably flexible responsive web design (full day workshop)
malarkey
396
62k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
237
19k
How to train your dragon (web standard)
notwaldorf
57
3.8k
Build The Right Thing And Hit Your Dates
maggiecrowley
19
1.1k
Keith and Marios Guide to Fast Websites
keithpitt
404
21k
The Straight Up "How To Draw Better" Workshop
denniskardys
225
120k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
19
1.4k
Rebuilding a faster, lazier Slack
samanthasiow
62
7.2k
Statistics for Hackers
jakevdp
781
210k
Principles of Awesome APIs and How to Build Them.
keavy
113
15k
Building a Scalable Design System with Sketch
lauravandoore
447
30k
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 ▌フレーム内のページ表示を同一オリジンにのみ許可する保護機能