Slide 1

Slide 1 text

1 ペパボセキュリティ研修2024 (公開版) 紫関 麗王 セキュリティ対策室 2024.07.04

Slide 2

Slide 2 text

ペパボセキュリティ研修2024 公開版 • 本資料はGMOペパボ株式会社において、2024年新卒エンジニアを対象に⾏ったセキュリティ研修の スライドを公開⽤に編集したものです • 社外秘である情報などは削除、およびマスクしている箇所があります 2 本資料について

Slide 3

Slide 3 text

3 ⾃⼰紹介 セキュリティ対策室 2023年 新卒⼊社 紫関 麗王 Shiseki Reo セキュリティ対策室で2019年からアルバイトをして いました。セキュリティに関すること好き好きクラ ブ ● セキュリティ‧キャンプ2023,2024全国⼤会講師 ● SECCON、SECCON Beginners運営 ● Twitter : @n01e0

Slide 4

Slide 4 text

• Kindleで漫画をたくさん買っています • 焼⾁が好きです • バイトのときにオフィス近くの焼⾁ランチほとんど⾏きました • 結論、韓の台所です • ⼀⼈で⾏くなら治郎丸も良いよ • 寿司も好きです • ⿂がし⽇本⼀によく⾏きます • パソコンが好きです • いっぱいあります ⾃⼰紹介 4 令和最新版

Slide 5

Slide 5 text

セキュリティ‧security‧Malware‧マルウェア‧脆弱性などのキーワードを光らせているのですぐに⾒つ けます。 ⼤量のチャンネルに⼊っています。 セキュリティに関する話が⼤好きです ⾃⼰紹介 5

Slide 6

Slide 6 text

6 アジェンダ 1. この研修について 2. 脆弱性とは 2.1. 脆弱性の種類 2.2. 脆弱性の例 3. トリアージ 3.1. git CVE-2024-32002 3.2. runc Leaky Vessels 4. 被害 5. 意識してほしいこと 6. 攻撃者の⽬線をもつ

Slide 7

Slide 7 text

1.この研修について 7

Slide 8

Slide 8 text

この研修について 8 ● アプリケーション開発‧運⽤における セキュリティの観点 ● 脆弱性を ⾒つける‧修正する‧作らない技術 これらを⾝につける ⽬標

Slide 9

Slide 9 text

この研修について 攻撃⼿法についても学びます 他⼈‧他社のサービスや⾃分の管理していないアプリケー ションなどに対しては絶対に攻撃を⾏わないでください。 倫理 9

Slide 10

Slide 10 text

この研修について 眠くならないようにがんばります。頑張りましょう。 ⼀旦座学です 10

Slide 11

Slide 11 text

脆弱性とは 11

Slide 12

Slide 12 text

12 脆弱性とは 脆弱性(ぜいじゃくせい)とは、コンピュータのOSやソフトウェアにおいて、プログラムの不具合や設計上のミスが原因となって発生し たサイバーセキュリティ上の欠陥のことを言います。脆弱性は、セキュリティホールとも呼ばれます。脆弱性が残された状態でコン ピュータを利用していると、不正アクセスに利用されたり、ウイルスに感染したりする危険性があります。
 
 (総務省 国民のためのサイバーセキュリティサイト)
 ぜいじゃくせい 長い

Slide 13

Slide 13 text

実装上のバグだけでなく、設計のミスも脆弱性につながる →セキュリティ対策室では、設計や実装段階でのレビュー‧脅威モデリングなどを⾏っています よくあるコードのバグ だけじゃない 脆弱性とは 13

Slide 14

Slide 14 text

攻撃者の視点で狙うポイントを探すため、脅威モデリングを⾏っています 具体例を⾒たほうが早いので⾒ましょう 設計段階でのセキュリティの考慮 脆弱性とは 14

Slide 15

Slide 15 text

• Spoofing • Tampering • Repudiation • Info Disclosure • Denial of Service • Elevation of Privelege これら6つの観点でみます STRIDE 脅威モデリング 15 https://developer.ibm.com/articles/threat-modeling-microservices-openshift-4/

Slide 16

Slide 16 text

• Spoofing • 他⼈のコントロールパネルへのログイン • Tampering • VMイメージの改ざん • Repudiation • SQLのクエリログ • Information Disclosure • 作成時の機微な情報がログに残っていないか 例 脅威モデリング 16

Slide 17

Slide 17 text

脆弱性の種類 17

Slide 18

Slide 18 text

18 脆弱性の種類 脆弱性のカテゴリや条件のリスト 種類ごとにIDを割り当てている。 例えばクロスサイトスクリプティング(XSS)はCWE-79 実装に⽤いる⾔語特有のCWEもあったりする(C,C++,Java,PHP) CWE (Common Weakness Enumeration)

Slide 19

Slide 19 text

ライブラリやアプリケーション、各種ソフトウェアの脆弱性に対し、⼀意のIDを割り当てて管理している 例えばlog4shellはCVE-2021-44228 CVE Common Vulnerability and Exposures 脆弱性とは 19

Slide 20

Slide 20 text

脆弱性の影響度を図るための指標 log4shellはBase Score 10.0のCriticalでCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H - AV(Attack Vector) 攻撃と対象の物理的な距離。ネットワーク‧隣接ネットワーク‧ローカル‧物理 - AC(Attack Complexity) 脆弱性を悪⽤し、攻撃に使う場合の条件の複雑さ。低‧⾼ - PR(Privileges Required) 脆弱性を悪⽤し、攻撃に使うために必要な権限。なし‧低‧⾼ - UI(User Interaction) 攻撃を成功させるために、ユーザの操作が必要かどうか。不要‧必要 - Scope 脆弱性がシステム上の他のコンポーネントに影響を与えるか。変更あり‧変更なし - C(Confidentiality) 情報の気密性に与える影響。⾼‧低‧なし - I(Integrity) 情報の正確性‧信頼性への影響。⾼‧低‧なし - A(Availability) 情報やシステムの可⽤性に与える影響。⾼‧低‧なし CVSS 脆弱性とは 20

Slide 21

Slide 21 text

Base Scoreは最⼤10。10のヤツが出たらヤバい。 名前付きの脆弱性もヤバい。Log4shellもまさにそれ。HeartBleed、Spectre、Meltdown、etc… ⼀つ⼀つの脆弱性は⼤したこと無くても、組み合わせるとヤバいパターンもある。 緩和策のバイパス⼿法だけだとスコアは低いとか ある重⼤な脆弱性の修正‧緩和策に対して、それをバイパスする⼿法があれば攻撃に使える CVEの⾒⽅ 脆弱性とは 21

Slide 22

Slide 22 text

脆弱性の例 22

Slide 23

Slide 23 text

主にユーザの⼊⼒を直接レンダリングしたときに発⽣する 例えば "

hello " + user_name + "

" みたいなコードがあったときに、 alert(1)

Slide 24

Slide 24 text

以下のコードには脆弱性があります XSS 24

Slide 25

Slide 25 text

最近のフレームワークはサニタイズを⾏ってくれるので、普通に使う分には問題ありません <%= で変数を出⼒するときはサニタイズされるので、基本的にXSSは発⽣しません - <%== - <%= raw などのサニタイズを⾏わずに変数を出⼒する⽅法を採⽤する際は注意してください XSS 25 サニタイズ

Slide 26

Slide 26 text

SQL⽂を作成する際、ユーザの⼊⼒を組み込む際は注意が必要 “SELECT * FROM users WHERE id = ‘“ + id + “‘’ もしここでidが数値じゃなく⽂字列だったら? “0’ OR ‘1’=’1” SQL Injection 脆弱性の例 26

Slide 27

Slide 27 text

脆弱性をみつけよう SQL Injection 27

Slide 28

Slide 28 text

トリアージ 28

Slide 29

Slide 29 text

29 トリアージ セキュ対で判断を⾏っています - CVSS Score - DREAD Model - PoCの有無 - 社内影響の有無 - etc... 脆弱性が⾒つかった!さぁどうする?

Slide 30

Slide 30 text

トリアージ Leaky Vessels まず名前付き脆弱性の時点でヤバいことが多い git CVE-2024-32002 gitなのでみんな使ってる&cloneだけで発⽕する 具体例 30

Slide 31

Slide 31 text

トリアージ 1. 把握 2. 検証 3. 判断 流れ 31

Slide 32

Slide 32 text

トリアージ dockerなので影響範囲が広い 軽く調べてみると、ビルド時にエスケープできるもの 検証を始める Leaky Vessels 32

Slide 33

Slide 33 text

トリアージ あらゆるリソースを漁る - GitHub - Twitter - etc… PoCが公開されていると、検証もしやすいが攻撃もしやすい Leaky Vessels 33

Slide 34

Slide 34 text

トリアージ PoCがあった場合でも、まずは正しい情報を探る必要がある 悪意のあるコードの可能性もあるので、ちゃんと読む runcに脆弱性があり、ビルド時に使⽤しているfdの⼀つがホストのものだった そのfdを経由してホストへ影響を与えることができる PoCの検証 34

Slide 35

Slide 35 text

トリアージ cloneするとコードが実⾏される - hookとシンボリックリンクの組み合わせによる攻撃 - hookは便利だが、pre-commit以外にもある - gitにおける任意コード実⾏系の脆弱性はhookが多い気がする git CVE-2024-32002 35

Slide 36

Slide 36 text

意識してほしいこと 36

Slide 37

Slide 37 text

あらためて 37 ● アプリケーション開発におけるセキュリティの観点を⾝につける ● 脆弱性を ⾒つける‧修正する‧作らない 技術を⾝につける ⽬標

Slide 38

Slide 38 text

意識してほしいこと ⼀番重要で、簡単なこと 「ユーザの⼊⼒を信⽤しない」 「AIの出⼒も信⽤しない」 攻撃者もユーザの⼀⼈として攻撃を⾏ってくる フォームの⼊⼒値や、外部に公開しているAPIの使⽤など 脆弱性を ⾒つける‧修正する‧作らない ために 38

Slide 39

Slide 39 text

攻撃者の目線をもつ 39

Slide 40

Slide 40 text

40 攻撃者の⽬線をもつ ⼀番簡単なのは、実際に攻撃を⾏ってみること ただし、実際に動いているサービスなどに許可なく攻撃を⾏うのは犯罪 じゃあどうすれば? 脆弱性診断、CTF やってみましょう どうすれば?

Slide 41

Slide 41 text

やっぱり⼿を動かすのが⼀番 - セキュリティレビュー - 脆弱性診断 - 脆弱性の修正 これらを体験してみましょう ここからはハンズオンです 攻撃者の視点をもつ 41

Slide 42

Slide 42 text

セキュリティレビュー 42

Slide 43

Slide 43 text

43 セキュリティレビュー 昨年、n01e0が作ったRails TutorialのアプリケーションをもとにPRを作成しています - (internalなリポジトリなので公開できません) ベースはRails Tutorialなので読めると思います。頑張ってください PRに脆弱性が無いか確認しましょう

Slide 44

Slide 44 text

脆弱性診断 44

Slide 45

Slide 45 text

脆弱性診断 45 診断⽤のやられアプリです trainingか個⼈の元にforkしてください make installして docker compose up -dすれば動きます Railsアプリケーションの脆弱性を探してみましょう

Slide 46

Slide 46 text

さぁ 脆弱性を⾒つけてください 脆弱性診断 46

Slide 47

Slide 47 text

脆弱性診断 まずはアプリケーションの仕様と挙動を把握するために操作してみましょう 1. アカウント登録 2. ログイン 3. 投稿 4. ユーザ情報編集 など 流れ 47

Slide 48

Slide 48 text

⾊々と操作をしていると「違和感」を感じることがあります これを⾒逃さず、バグを⾒つけましょう 直感を鍛えることが⼤事です 「違和感」を⾒逃さない 脆弱性診断 48

Slide 49

Slide 49 text

脆弱性の修正 49

Slide 50

Slide 50 text

50 脆弱性修正 今度は⾒つけた脆弱性を修正しましょう rspecで修正の確認ができます 修正もしましょう