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
Learn about vulnerability
Search
Akira Morikawa
August 24, 2018
Technology
1
220
Learn about vulnerability
#駆け出しエンジニア 向けのセキュリティ勉強用資料
Akira Morikawa
August 24, 2018
Tweet
Share
More Decks by Akira Morikawa
See All by Akira Morikawa
コロナ禍だからこそ考えるオフラインコミュニティの意義 / significance of community
ariaki
0
1.9k
アウトプットの始め方/start output 20230121
ariaki
0
290
web-secure-phpcon2020
ariaki
3
3.4k
オブジェクトライフサイクルとメモリ管理を学ぼう / OOC 2020
ariaki
8
3.6k
エンジニアはアウトプットによって成長できるのか? / Grow with your output
ariaki
24
6.4k
アウトプットを始めよう / How to begin output jawsug-bgnr
ariaki
2
3.8k
参加者の安全を守れていますか? / Protecting community safety
ariaki
1
6.9k
タピオカに学ぶ二段階認証 / tapioca-mfa
ariaki
5
1.3k
古に学ぶ個人開発のススメ / My recommendation of personal development
ariaki
1
1.5k
Other Decks in Technology
See All in Technology
本が全く読めなかった過去の自分へ
genshun9
0
660
asken AI勉強会(Android)
tadashi_sato
0
130
AIの最新技術&テーマをつまんで紹介&フリートークするシリーズ #1 量子機械学習の入門
tkhresk
0
140
より良いプロダクトの開発を目指して - 情報を中心としたプロダクト開発 #phpcon #phpcon2025
bengo4com
1
3.2k
登壇ネタの見つけ方 / How to find talk topics
pinkumohikan
5
570
Should Our Project Join the CNCF? (Japanese Recap)
whywaita
PRO
0
280
KubeCon + CloudNativeCon Japan 2025 Recap Opening & Choose Your Own Adventureシリーズまとめ
mmmatsuda
0
230
KubeCon + CloudNativeCon Japan 2025 Recap
ren510dev
1
280
AWS テクニカルサポートとエンドカスタマーの中間地点から見えるより良いサポートの活用方法
kazzpapa3
2
570
LangSmith×Webhook連携で実現するプロンプトドリブンCI/CD
sergicalsix
1
140
KubeCon + CloudNativeCon Japan 2025 Recap by CA
ponkio_o
PRO
0
240
Understanding_Thread_Tuning_for_Inference_Servers_of_Deep_Models.pdf
lycorptech_jp
PRO
0
150
Featured
See All Featured
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
45
7.5k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
161
15k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
2.9k
Balancing Empowerment & Direction
lara
1
390
Become a Pro
speakerdeck
PRO
28
5.4k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
331
22k
Testing 201, or: Great Expectations
jmmastey
42
7.6k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
3.9k
StorybookのUI Testing Handbookを読んだ
zakiyama
30
5.8k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
34
5.9k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
44
2.4k
Writing Fast Ruby
sferik
628
62k
Transcript
Learn about vulnerability and how to secure your website Aug
24, 2018 @ariaki4dev CC-BY-4.0
Why ?
何でセキュリティって必要? 資産と安全
資産 ヒト モノ カネ
生命 生活 生活資産(衣食住) その他の有形資産 現預金・有価証券 その他の無形資産 安全
考えてみよう カード情報漏洩 想定される被害
考えてみよう カード情報漏洩 - 不正利用 - 利用妨害 - 信用情報漏洩 - 利用履歴漏洩
- 利用履歴操作 - 信用失墜 : 想定される被害
考えてみよう 印鑑盗難 PC 盗難 スマホ盗難 ① あなたはどんな被害を受けるだろう? ② あなたはどう対策する?
リスクを多方面から考える
「あなたの豊かな暮らし」 を守ることがとても重要
What ?
分類 脅威の例 人為的脅威 意図的脅威 攻撃(不正侵入、ウイルス、改ざん、盗聴、な りすまし、等) 偶発的脅威 人為的ミス(ヒューマンエラー)、障害 環境的脅威 災害(地震、洪水、台風、火事、等)
JIS Q 27002:2006 脅威の分類
物理的脅威 人的脅威 技術的脅威 脅威の発生原因
物理的脅威 - 物理的な破損等 - 天災(地震・洪水・火災) - 人災(破損・紛失・等) - 物理的攻撃(盗難・破壊・等) -
経年劣化
人的脅威 - 人によって引き起こされる脅威 - 操作ミス - 情報流出 - 人災(破損・紛失・等) -
物理的攻撃(盗難・破壊・等)
- プログラムによって引き起こされる脅威 - 偽装攻撃(マルウェア・フィッシング詐欺・等) - 標的型攻撃 - 脆弱性への攻撃 - 総当たり等の攻撃
技術的脅威
内的要因 外的要因 - 攻撃そのものに対する知識 - 攻撃を受けないための知識
脅 威 インシデント リスク (脅威の顕在化)
全ての攻撃からは守りきれない
危殆化 - かつて安全とされていた仕組みが、技術進歩によって危険度が増加した状態 - ハードウェアの高速化 - 高速なアルゴリズム発明 など - ゼロデイ攻撃を受ける可能性
How ?
分類 脅威の例 機密性 アクセスを認可された者だけが、情報にアクセス できることを確実にすること 完全性 情報および処理方法が正確であること及び完全 であることを保護すること 可用性 認可された利用者が、必要なときに、情報及び関連
する資産にアクセスできることを確実にすること ISO/IEC17799 情報セキュリティの概念
分類 脅威の例 技術的対策 プログラム・ネットワーク等に関するセキュリティ 物理的対策 建物・設備等に対するセキュリティ 管理的対策 教育、発注先管理、人的セキュリティ セキュリティ対策
対策のポイント 防止 (抑止) 検出 (検知) 対応 (回復) 今日はここを中心に話します
対策の観点 - 個人情報保護 … 保管される個人情報が漏洩しない為の対策 - 事業継続担保 … 攻撃等による事業停止が最小限に収まる為の対策
攻撃を受けない為の知識 攻撃を発見する為の知識 攻撃を緩和する為の知識 被害を最小限に抑える知識 被害から復帰する為の知識 セキュリティ = 知識
- 商用サービスは通常、脆弱性診断を受ける - 有名な脆弱性が存在しないかチェックしてくれるサービス - 精度は 100% ではないので常に自分が最後の砦だと認識しておく 脆弱性診断
- データベースに平文のままパスワードを格納しない - bcrypt ライブラリを使用する - SHA-256 等を使ってハッシュ化する - sha256
( “password” + “salt” ) - salt : サーバ上でのみ保管する鍵データのようなもの 安全なパスワード格納
Attacks
ここで話さない内容 - 内部犯行の予防について - 検知と事後対応について - 情報リテラシー - ここからセキュリティ(情報処理推進機構) -
情報セキュリティ対策(情報処理推進機構) - 国民のための情報セキュリティサイト(総務省)
CSRF Cross-Site Request Forgeries
受け取る おめでとうございます あなたはこの度、インターネットの50 周年を記念した1億円プレゼントの自 動抽選に当選しました。 以下のリンクより受け取れます。 CSRF 意図しない操作実行 1万円の送金を完了しました。 ・送金先:△△銀行 □□支店
・名義人:悪意太郎 ◦◦銀行 サイト A サイト B
- リンク元→リンク先の遷移が正当か検証する必要がある - CSRF トークンを使った検証 - リクエスト元ページにトークンを埋め込む - リクエスト先ページでトークンの正当性を検証 -
CSRF トークン実装例 - https://qiita.com/mpyw/items/8f8989f8575159ce95fc CSRF / 対策
CSRF / 対策 クッキー情報 : YYYY 2つの値の関連性を検証
XSS Cross Site Scripting
XSS 確認 NAME <script> alert(‘HELLO’) </script> ニックネーム登録 登録 ニックネーム確認 OK
HELLO 意図しない JavaScript 動作
- XSS は HTML Injection の一形態 - HTML Injection …
悪意ある HTML を表示してしまう問題 - XSS … 悪意ある JavaScript を表示してしまう問題 - 外部からの入力データを表示する際はサニタイズする - HTML として表示させない - org.apache.commons.lang3.StringEscapeUtils - java-html-sanitizer XSS / 対策
SQL injection
SQL injection ID 1’ OR 1=1; /* PASS */-- SELECT
* FROM USERS WHERE ID=’1’ OR 1=1; /* AND PASS=’*/--’; 確認 ログイン 意図しない SQL 動作
- 意図しない SQL がサーバに送信される - データベースに対して任意の SQL を実行される危険性 - SQL
処理時にプレースホルダを使う - 入力文字列を SQL として処理させない - https://www.jpcert.or.jp/java-rules/ids00-j.html - java.sql.PreparedStatement SQL injection / 対策
Directory traversal
Directory traversal 意図しないサーバ内ファイル流出 ariaki:xxxxxxxx admin:yyyyyyyyy http://weaksite.jp/show-image?file=../../../etc/passwrd
- ファイル表示処理で意図しないファイルパスを指定される - サーバ上のあらゆるファイルを読み取られる可能性 - ファイルパスを適切に処理する - パス指定を許可しない - パス区切り文字を検知してエスケープする
Directory traversal / 対策
Command injection
Command injection NAME `date` 確認 ニックネーム登録 意図しない OS コマンド動作 NAME
登録 ニックネーム確認 2018-08-24 12:34:56 ※上記例は主に PHP を想定しています
- 意図しない OS コマンドが送信される - サーバ上で任意の OS コマンドを実行される危険性 - コマンド処理時にシェルエスケープする
- 入力文字列をコマンドとして処理させない - https://www.jpcert.or.jp/java-rules/ids07-j.html Command injection / 対策
Header injection
Header injection 意図しないクッキー設定 HTTP/1.1 302 Found Date: Fri, 24 Aug
2018 12:34:56 GMT Location: http://weaksite.jp/b Set-Cookie: SID=ABCD1234 : http://weaksite.jp/a?redirect=http://weaksite.jp/b%0D%0ASet-Cookie:+SID=ABCD1234
- 意図しないヘッダを構築してしまう - ユーザに対する様々な攻撃を許してしまう可能性 - ヘッダーを適切に処理する - 改行コードを適切に取り扱える API を利用する
- 改行コードが含まれる場合に処理を中断する Header injection / 対策
DDoS Distributed Denial of Service
- 意図的に過剰なリクエストを送信する - サイトが負荷限界によりサービスを継続できなくなる - F5 アタック - SYN フラッド
- DNS ポイズニング - ウイルス等 - バルス、あけおめ DDoS
- ハードウェア / OS レベルの対策が必要 - 攻撃元 IP アドレスからのアクセスを遮断 -
Firewall / Proxy 導入 - SYN Cache 等の対策 DDoS / 対策
その他の脆弱性
- オープンリダイレクト - ブルートフォース攻撃可能なログイン画面 - 親切過ぎるエラーメッセージ - ディレクトリリスティング - クリックジャッキング
- サイズ制限の無いファイルアップロード など、有名な攻撃手法だけでも多数あります その他の脆弱性
One More Thing !
ソーシャルエンジニアリング 人を介した機密情報漏洩 今期の決算って どうだった? 多分超黒字 ボーナス多そう 人間を介した機密情報漏洩は最もシンプルかつ簡単に行えるものです。 技術的な情報以外も該当するので普段から充分な注意をしましょう。
- あなたが利用しているサイトパスワードは? 複数サイトで使い回していない 十分に複雑な文字列にしている 公開されたサイト上に保管していない - あなたの情報端末は? 離席時に画面ロックしている スマホのパスワードを 4
桁にしていない 安全なパスワード強度
- 最近のフィッシング詐欺は PC だけじゃない - 佐川急便を装った迷惑メール - LINEフレンドからのプリペイドカード要求 - エンジニアはフィッシング格好の標的
- 他職種より重要な情報を保持している事を肝に銘じる - 私物からも機密情報漏洩の可能性が十分にある フィッシング攻撃に注意
Conclude
This JavaScript code powers a 1,500 user intranet application 最悪なログインコード
Security NEXT by NEWSGAIA 相次ぐ個人情報漏洩事件
- セキュリティインシデントは絶対起こしたくない - 多くは知識不足によって起こります - しかし知識不足を理由にしても許されない - 我々は安全なウェブサイトの作り方を学び活かす必要がある 知識不足では済まない
インシデントは発生する前提で考える 被害を最小限に抑える為の予防と準備を行う 技術以外にもセキュリティリスクは存在する 危殆化しない為に継続的な情報収集を行う 一般的な脆弱性に対してしっかり対策する 覚えておくこと
Appendix 以下のコンテンツをひととおり読んでおこう - 安全なウェブサイトの作り方 - 守るべき情報資産の考え方 - Web アプリケーションセキュリティ -
OWASP TOP-10 2017年度版 - 他人事じゃない!WEB サイトに対する 10 の攻撃パターンと対策方法まとめ - Web アプリケーションの脆弱性の解説&体験ページ
Build Something Amazing ariaki4dev written by