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
34
kurogi kurumi student work
mgmgmogumi
0
300
ここからうまれたぼくたち酵母~pao
mgmgmogumi
0
41
Other Decks in Technology
See All in Technology
MIXIで活躍できるエンジニアを 若手社員目線で考えてみる
mixi_engineers
PRO
0
100
トヨタ⽣産⽅式(TPS)⼊⾨
recruitengineers
PRO
3
1.1k
Oracle MCP Servers Explained
thatjeffsmith
0
210
Model Studio CLI × Token Plan
maigo999
0
200
コネクションをピン留めさせずに SELECTクエリのタイムアウトを設定した話
codmoninc
0
170
DDDのエッセンスを取り入れたAIでの開発
ak2ie
0
160
つくって納得、つかって実感! 大規模言語モデルことはじめ ver2.0
recruitengineers
PRO
5
2.1k
まちスペース®とデジタルツインと「まちづくり」
hiro_ogi
0
130
トークンマネジメントでAIにとって働きやすい環境を実現する
hikaruegashira
0
120
システム思考で問題に対処する
yussak
0
360
Agent 時代の Kaggle 展望 / kaggle-in-the-agentic-era
upura
1
850
ガバメント AI 源内を地方自治体は活用できるのか可能性と課題、期待について
takeda_h
2
460
Featured
See All Featured
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.5k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
490
Color Theory Basics | Prateek | Gurzu
gurzu
0
430
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
350
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
Building the Perfect Custom Keyboard
takai
2
840
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.9k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
370
Skip the Path - Find Your Career Trail
mkilby
1
190
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.9k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
570
The Art of Programming - Codeland 2020
erikaheidi
57
14k
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