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
Security course
Search
mogumogu mogumi
May 14, 2019
Technology
130
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Security course
mogumogu mogumi
May 14, 2019
More Decks by mogumogu mogumi
See All by mogumogu mogumi
9/13 九州大学OB企業訪問資料[パーソンリンク]
mgmgmogumi
0
100
ツールで見るフロント界のトレンド
mgmgmogumi
0
87
機械学習APIの紹介とデモ.pdf
mgmgmogumi
0
44
エンジニアの日常
mgmgmogumi
0
230
読み手の印象推定に基づくツイートのフィルタリングに関する研究 / A Study on Filtering Tweet based on Impression Estimation of Reading
mgmgmogumi
0
160
読み手の印象推定に基づくツイートのフィルタリングに関する研究 ポスター / A Study on Filtering Tweet based on Impression Estimation of Reading (Poster)
mgmgmogumi
0
31
kurogi kurumi student work
mgmgmogumi
0
300
ここからうまれたぼくたち酵母~pao
mgmgmogumi
0
41
Other Decks in Technology
See All in Technology
世界、断片、モデル。そして理解
ardbeg1958
1
130
探索・可視化・自動化を一本化 Amazon Quickでデータ活用スピードを上げる方法
koheiyoshikawa
0
120
AmplifyHostingConstructからSSRフレームワークのためのホスティング設計を考察する/amplify-hosting-construct
fossamagna
1
260
OpenTelemetryにおけるGoのゼロコード・コンパイル時計装について #fukuokago
quiver
0
140
人とエージェントが高め合う協業設計
kintotechdev
0
180
AIコード生成×サプライチェーン攻撃 — PHPが直面する“二重の信頼問題
shinyasaita
0
240
凡エンジニアがこの先生きのこるためには。〜TypeScript完全に理解したい〜
alchemy1115
2
320
AI時代の開発生産性を捉え直す — 経営と現場をつなぐ「開発組織のオブザーバビリティ」— / AI Dev Ex Conference 2026
tkyowa
0
370
キャリアLT会#3
beli68
0
120
LLMやAIエージェントをソフトウェアに組み込むプラクティス
shibuiwilliam
2
430
AI Native なプロダクト組織の立ち上げ方 : 生産性 100 倍への挑戦
mikesorae
0
390
LLM/Agent評価:トップ営業の発言を「正解」にする 〜暗黙的正解による評価を営業資産に変える〜
takkuhiro
1
240
Featured
See All Featured
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
770
Chasing Engaging Ingredients in Design
codingconduct
0
240
Building Applications with DynamoDB
mza
96
7.1k
The Cult of Friendly URLs
andyhume
79
6.9k
Done Done
chrislema
186
16k
Paper Plane
katiecoart
PRO
2
52k
The Cost Of JavaScript in 2023
addyosmani
55
10k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
The Limits of Empathy - UXLibs8
cassininazir
1
520
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
350
How to Think Like a Performance Engineer
csswizardry
28
2.7k
Navigating Weather and Climate Data
rabernat
0
380
Transcript
セキュリティ講座 2019/5/14 @kurumi.kurogi
セキュリティとは?
セキュリティとは 安全、防犯、保安 コンピュータやソフトウェアなどを技術的に保護し 漏洩、改ざん、攻撃、侵入などの危険を排除
セキュリティとは 構築時? 実装時? 運用時?
セキュリティとは 構築時? 実装時? 運用時?
実装時における対策 1. SQL インジェクション 2. XSS(クロスサイト・スクリプティング) 3. CSRF(クロスサイト・リクエスト・フォージェリ) 4. セッションハイジャック
実装時における対策 1. SQL インジェクション 2. XSS(クロスサイト・スクリプティング) 3. CSRF(クロスサイト・リクエスト・フォージェリ) 4. セッションハイジャック
None
SQLインジェクション 脆弱性のある実装 $query = "SELECT * FROM user WHERE id
= ‘$uid’”; $uidに以下を入れてみると? •‘or ‘A’=‘A •‘; delete * from user where ‘a’=‘a
対策 • プレースホルダ • エスケープ処理 ※LaravelやRailsなどのFWを使用する場合は、ORMがいい感じ に処理してくれることが多い
対策 修正後の実装(プレースホルダ使用) $query = "SELECT * FROM usr WHERE uid
= ?” execute($uid);
ハンズオン 攻撃してみよう! https://contents.saitolab.org/taiken/
実装時における対策 1. SQL インジェクション 2. XSS(クロスサイト・スクリプティング) 3. CSRF(クロスサイト・リクエスト・フォージェリ) 4. セッションハイジャック
None
XSS(クロスサイトスクリプティング) 脆弱性のある実装 <div> 検索結果:<?php echo $keyword ?> </div> $keywordに以下を入れると? •
<script>alert("Bug!!!");</script> • <font color=“red”>
対策 • HTMLテキストの入力を許可しない • エスケープ処理 • バリデーション • 文字コードを指定 •
HTTPレスポンスヘッダに指定 • HTMLのMETA宣言部分に指定
対策 修正済みの実装(エスケープ処理) <div> 検索結果:<?php echo htmlspecialchars($keyword, ENT_QUOTES) ?> </div> HTMLエンティティ
補足 HTMLテキストの入力を許可したい場合は? • 機能で代替 • ホワイトリスト方式 • ブラックリスト方式
ハンズオン 攻撃してみよう! https://contents.saitolab.org/taiken/
実装時における対策 1. SQL インジェクション 2. XSS(クロスサイト・スクリプティング) 3. CSRF(クロスサイト・リクエスト・フォージェリ) 4. セッションハイジャック
None
CSRF(クロスサイト・リクエスト・フォージェリ) 脆弱性のある実装 (フロント側) <form action="commit.php" method="post"> <input type="hidden" name="new_name" value="脆弱
太郎"> <input type=“hidden” name=“new_address” value=“東京都”> <input type="submit" name="commit" value="実行"> </form> (サーバ側) if( ! $_SESSION['authenticated'] ) { exit(); } update_userinfo( $_SESSION['uid'], $_POST['new_name'], $_POST['new_address']);
CSRF(クロスサイト・リクエスト・フォージェリ) 攻撃用のサイト <form action="http://◦◦/commit.php" method="post" name="f1"> <input type=“hidden” name=“new_name” value=“攻撃者">
<input type=“hidden” name=“new_address” value=“大阪府"> </form> <script> document.forms['f1'].submit(); </script>
対策 • 指定のフォームを利用して投稿していることを確認する 1. セッション開始時にトークンを発行する 2. 送信用フォームにトークンをhidden要素で埋め込む 3. トークンをPOSTメソッドのリクエストで渡す 4.
トークンが正しいか検証する
対策 修正後の実装 (サーバ側/token発行時) $csrf_token = get_csrf_token(); //ランダムな文字列を生成 $_SESSION['csrf_token'] = $csrf_token;
(フロント側) <form action="commit.php" method="post"> <input type="hidden" name="new_name" value="脆弱 太郎"> <input type=“hidden” name=“new_address” value=“東京都"> <input type="hidden" name=”scrf_token" value=”<?=$csrf_token?>”> <input type="submit" name="commit" value="完了"> </form> (サーバ側/リクエスト受取時) if( ! $_SESSION['authenticated'] ) { exit(); } if($_POST[‘scrf_token’]!=$_SESSION['csrf_token']) { exit(); } update_userinfo($_SESSION['uid'],$_POST['new_name'], $_POST['new_address']);
ハンズオン 攻撃してみよう! https://contents.saitolab.org/taiken/
実装時における対策 1. SQL インジェクション 2. XSS(クロスサイト・スクリプティング) 3. CSRF(クロスサイト・リクエスト・フォージェリ) 4. セッションハイジャック
セッションハイジャック • セッションIDの推測 • セッションIDの盗用 • セッションIDの固定化
None
None
None
対策 • セッションIDを推測困難にする • セッションIDをURLパラメータに格納しない • HTTPSのCookieはsecure属性を加える • ログイン成功後に新しいセッションを開始する •
セッションID以外の秘密情報を関連づけて管理する
その他の攻撃など • OS コマンド・インジェクション • HTTP ヘッダ・インジェクション • クリックジャッキング •
バッファオーバーフロー • Dos/DDos攻撃 • ゼロデイ攻撃 • バックドア • フィッシング • ディレクトリ・トラバーサル
補足 構築時におけるセキュリティ • ポートフォワード • ファイアウォール • DMZ • アクセス制限
補足 運用時におけるセキュリティ • 各ツール/バージョンの脆弱性 • 監査 • ソーシャルハッキング • PCロック、紛失防止、USB禁止
参考 • 安全なウェブサイトの作り方:IPA 独立行政法人 情報処理推 進機構 • 体系的に学ぶ 安全なWebアプリケーションの作り方 •
OWASP Top10 • CVE Details • 「世界最悪のログイン処理コード」を解説してみた - Qiita