Slide 1

Slide 1 text

Serverless applicationと セキュリティ~Cognito編~ 株式会社 Flatt Security 情報科学専⾨学校 Norihide Saito / Azara @a_zara_n 2020/02/18 Security-JAWS #20 Session: 03

Slide 2

Slide 2 text

Security-JAWS 第20回 Session: 03 Serverless applicationとセキュリティ @a_zara_n Who am I 名前 齋藤徳秀 通称 Azara @a_zara_n 所属 株式会社 Flatt Security プロフェッショナルサービス事業部 脆弱性診断チーム 情報科学専⾨学校 情報セキュリティ学科 (3⽉卒業予定) 好きなAWS サービス Amazon Cognito AWS Lambda

Slide 3

Slide 3 text

会社紹介

Slide 4

Slide 4 text

Security-JAWS 第20回 Session: 03 Serverless applicationとセキュリティ @a_zara_n 会社概要 会社名 株式会社Flatt Security 所在地 〒113-0033 東京都⽂京区本郷3-43-16 コア本郷ビル2A 設⽴ 2017年5⽉23⽇ 代表者名 代表取締役 井⼿康貴 事業内容 サイバーセキュリティ関連サービス 資本⾦ 2億5110万円(資本準備⾦含む)

Slide 5

Slide 5 text

Security-JAWS 第20回 Session: 03 Serverless applicationとセキュリティ @a_zara_n セキュリティの⼒で信頼をつなげ、 クリエイティブな社会を実現する Mission

Slide 6

Slide 6 text

Security-JAWS 第20回 Session: 03 Serverless applicationとセキュリティ @a_zara_n プロフェッショナルサービス n セキュリティ診断サービス n アンチウィルス性能検証サービス プロダクトサービス n Flatt Security Learning Platform 主な事業

Slide 7

Slide 7 text

Security-JAWS 第20回 Session: 03 Serverless applicationとセキュリティ @a_zara_n セキュリティ診断 サービス https://flatt.tech/assessment/detail

Slide 8

Slide 8 text

Security-JAWS 第20回 Session: 03 Serverless applicationとセキュリティ @a_zara_n Flatt Security Learning Platform https://flatt.tech/learning_platform/

Slide 9

Slide 9 text

Security-JAWS 第20回 Session: 03 Serverless applicationとセキュリティ @a_zara_n https://flatt.tech/ https://flattsecurity.hatenablog.com/ Flatt Security HP Blog

Slide 10

Slide 10 text

本⽇の内容

Slide 11

Slide 11 text

Security-JAWS 第20回 Session: 03 Serverless applicationとセキュリティ @a_zara_n 本⽇の内容について https://flattsecurity.hatenablog.com/entry/cloud_security_aws_case

Slide 12

Slide 12 text

Security-JAWS 第20回 Session: 03 Serverless applicationとセキュリティ @a_zara_n 本⽇の内容について n Serverless ApplicationとSecurity n 解説に利⽤するサンプルアプリについて n Cognitoへの攻撃⼿法と対策 n まとめ

Slide 13

Slide 13 text

Security-JAWS 第20回 Session: 03 Serverless applicationとセキュリティ @a_zara_n 発表内容を要約 サーバーレスアプリケーションで ⾒落としがち脆弱性や 埋め込みやすい場所を 集めてきたから⾒てくれ!!

Slide 14

Slide 14 text

Security-JAWS 第20回 Session: 03 Serverless applicationとセキュリティ @a_zara_n 本発表の視点について 発表で触れること n 設定不備やアプリケーションの脆弱性によって 引き起こされる機密性や完全性の侵害 発表で触れないこと n ロギング関連 n 耐障害性 n 可⽤性

Slide 15

Slide 15 text

Serverless Applicationと Security

Slide 16

Slide 16 text

Security-JAWS 第20回 Session: 03 Serverless applicationとセキュリティ @a_zara_n Serverless application N#BB4΍4FSWFSMFTTBQQMJDBUJPO

Slide 17

Slide 17 text

Security-JAWS 第20回 Session: 03 Serverless applicationとセキュリティ @a_zara_n Serverless application ઐ໳ੑʹಛԽͨ͠αʔϏεͷ૊Έ߹Θͤ

Slide 18

Slide 18 text

Security-JAWS 第20回 Session: 03 Serverless applicationとセキュリティ @a_zara_n IUUQTBXTBNB[PODPNKQDPNQMJBODFTIBSFESFTQPOTJCJMJUZNPEFM

Slide 19

Slide 19 text

Security-JAWS 第20回 Session: 03 Serverless applicationとセキュリティ @a_zara_n 責任共有モデル IUUQTEBXTTUBUJDDPNTFSWFSMFTTKQ4FDVSJUZ0WFSWJFXPG"84-BNCEB@+1QEG

Slide 20

Slide 20 text

Security-JAWS 第20回 Session: 03 Serverless applicationとセキュリティ @a_zara_n 責任共有モデル IUUQTEBXTTUBUJDDPNTFSWFSMFTTKQ4FDVSJUZ0WFSWJFXPG"84-BNCEB@+1QEG

Slide 21

Slide 21 text

Security-JAWS 第20回 Session: 03 Serverless applicationとセキュリティ @a_zara_n Serverless applicationとSecurity Serverless Applicationへの脅威と攻撃 n アプリケーションの脆弱性対策 n 開発したアプリケーションへの攻撃 n 利⽤するライブラリへの攻撃 n 利⽤するサービスの設定不備 n 設定不備による直接的な攻撃 n 設定不備による間接的な攻撃 etc …

Slide 22

Slide 22 text

Security-JAWS 第20回 Session: 03 Serverless applicationとセキュリティ @a_zara_n Serverless applicationとSecurity Serverless Applicationへの脅威と攻撃 n アプリケーションの脆弱性対策 n 開発したアプリケーションへの攻撃 n 利⽤するライブラリへの攻撃 n 利⽤するサービスの設定不備 n 設定不備による直接的な攻撃 n 設定不備による間接的な攻撃 etc … Amazon Cognito

Slide 23

Slide 23 text

解説に利⽤する サンプルアプリについて

Slide 24

Slide 24 text

Security-JAWS 第20回 Session: 03 Serverless applicationとセキュリティ @a_zara_n Serverlessで動作する アプリケーション例

Slide 25

Slide 25 text

Security-JAWS 第20回 Session: 03 Serverless applicationとセキュリティ @a_zara_n

Slide 26

Slide 26 text

Cognitoへの 攻撃⼿法と対策

Slide 27

Slide 27 text

Security-JAWS 第20回 Session: 03 Serverless applicationとセキュリティ @a_zara_n Cognitoへの攻撃⼿法の例 n 本来のアカウント作成フローからの逸脱 n Cognito User Poolにおける ユーザー属性の意図しない書き換え

Slide 28

Slide 28 text

Security-JAWS 第20回 Session: 03 Serverless applicationとセキュリティ @a_zara_n 本来のアカウント作成フローからの逸脱 本来のアカウント作成フロー 1. User AがUser Bを招待 2. User Bは新規登録のため /registerを経由し新規登録 3. Cognitoから初期パスワードが 発⾏されて新規登録完了 6TFS"

Slide 29

Slide 29 text

Security-JAWS 第20回 Session: 03 Serverless applicationとセキュリティ @a_zara_n 本来のアカウント作成フローからの逸脱 本来のアカウント作成フロー 1. User AがUser Bを招待 2. User Bは新規登録のため /registerを経由し新規登録 3. Cognitoから初期パスワードが 発⾏されて新規登録完了 6TFS#

Slide 30

Slide 30 text

Security-JAWS 第20回 Session: 03 Serverless applicationとセキュリティ @a_zara_n 本来のアカウント作成フローからの逸脱

Slide 31

Slide 31 text

Security-JAWS 第20回 Session: 03 Serverless applicationとセキュリティ @a_zara_n 本来のアカウント作成フローからの逸脱

Slide 32

Slide 32 text

Security-JAWS 第20回 Session: 03 Serverless applicationとセキュリティ @a_zara_n 本来のアカウント作成フローからの逸脱 本来のアカウント作成フロー 1. User AがUser Bを招待 2. User Bは新規登録のため /registerを経由し新規登録 3. Cognitoから初期パスワードが 発⾏されて新規登録完了 6TFS#

Slide 33

Slide 33 text

Security-JAWS 第20回 Session: 03 Serverless applicationとセキュリティ @a_zara_n クローズドなアプリケーションでCognitoを 利⽤している場合 攻撃者はどのような視点で攻撃してくるでしょうか?

Slide 34

Slide 34 text

Security-JAWS 第20回 Session: 03 Serverless applicationとセキュリティ @a_zara_n 本来のアカウント作成フローからの逸脱 攻撃者(⾃分)が選んだフロー 1. 直接CognitoのAPIを実⾏し 新規登録を⾏う 6TFS" ࣗ෼

Slide 35

Slide 35 text

Security-JAWS 第20回 Session: 03 Serverless applicationとセキュリティ @a_zara_n 本来のアカウント作成フローからの逸脱

Slide 36

Slide 36 text

Security-JAWS 第20回 Session: 03 Serverless applicationとセキュリティ @a_zara_n 本来のアカウント作成フローからの逸脱 事象 UI上は新規登録は招待のみだが、 ユーザーの⾃⼰サインアップの許可にチェックが⼊っていた為 第三者から新規登録ができてしまう

Slide 37

Slide 37 text

Security-JAWS 第20回 Session: 03 Serverless applicationとセキュリティ @a_zara_n 本来のアカウント作成フローからの逸脱 なぜ? なぜ⾃⼰サインアップが許可されているのがわかったのか?

Slide 38

Slide 38 text

Security-JAWS 第20回 Session: 03 Serverless applicationとセキュリティ @a_zara_n 本来のアカウント作成フローからの逸脱 ユーザーに⾃⼰サインアップを許可する 管理者のみにユーザーの作成を許可する

Slide 39

Slide 39 text

Security-JAWS 第20回 Session: 03 Serverless applicationとセキュリティ @a_zara_n 本来のアカウント作成フローからの逸脱 エラー⽂に必要な属性や情報が表⽰されるので最低限⼊⼒すると新規ユーザーが作成できる 実際にEmailには検証コードが⾶んでくる

Slide 40

Slide 40 text

Security-JAWS 第20回 Session: 03 Serverless applicationとセキュリティ @a_zara_n 本来のアカウント作成フローからの逸脱 実際にEmailのVerifyまで実施できる

Slide 41

Slide 41 text

Security-JAWS 第20回 Session: 03 Serverless applicationとセキュリティ @a_zara_n 本来のアカウント作成フローからの逸脱 対策 サービスの新規登録フローに合わせたサインアップ設定に設定しましょう。 個々のユーザーが新規登録することを想定していない場合は ”管理者のみにユーザーの作成を許可する”を選択しましょう。

Slide 42

Slide 42 text

Security-JAWS 第20回 Session: 03 Serverless applicationとセキュリティ @a_zara_n [発展] Cognito ID Pool からの認証情報の取得 IUUQTEPDTBXTBNB[PODPNKB@KQDPHOJUPMBUFTUEFWFMPQFSHVJEFDPHOJUPTDFOBSJPTIUNM

Slide 43

Slide 43 text

Security-JAWS 第20回 Session: 03 Serverless applicationとセキュリティ @a_zara_n [発展] Cognito ID Pool からの認証情報の取得 IUUQTOPUTPTFDVSFDPNIBDLJOHBXTDPHOJUPNJTDPOGJHVSBUJPOT

Slide 44

Slide 44 text

Security-JAWS 第20回 Session: 03 Serverless applicationとセキュリティ @a_zara_n 本来のアカウント作成フローからの逸脱 この攻撃でログインが成功してもアプリが利⽤できない場合も 1. Cognitoの新規登録で必要とされなかった属性がアプリ内 で必須として利⽤されている場合 => アプリケーションでエラーが発⽣し利⽤できない 2. アプリケーションが独⾃に持っている認可機構で弾いている => Cognitoの何かしらの属性とアプリケーションが保持し ている情報を照合している可能性

Slide 45

Slide 45 text

Security-JAWS 第20回 Session: 03 Serverless applicationとセキュリティ @a_zara_n Cognito User Poolにおける ユーザー属性の意図しない書き換え Cognitoに存在する2種類の属性 カスタム属性 利⽤者が⾃由に利⽤できる属性で、最 ⼤25個利⽤することができる。 作成後の値変更の可否や開発者専⽤の 属性などが設定可能。 標準属性 OpenID Connectの仕様に準拠した実装

Slide 46

Slide 46 text

Security-JAWS 第20回 Session: 03 Serverless applicationとセキュリティ @a_zara_n Cognito User Poolにおける ユーザー属性の意図しない書き換え アプリクライアントと属性の読み書き CognitoのAPIを操作する際に利⽤さ れるアプリクライアントにはCognito に設定されている属性に関するアクセ ス権限がある。

Slide 47

Slide 47 text

Security-JAWS 第20回 Session: 03 Serverless applicationとセキュリティ @a_zara_n

Slide 48

Slide 48 text

Security-JAWS 第20回 Session: 03 Serverless applicationとセキュリティ @a_zara_n

Slide 49

Slide 49 text

Security-JAWS 第20回 Session: 03 Serverless applicationとセキュリティ @a_zara_n

Slide 50

Slide 50 text

Security-JAWS 第20回 Session: 03 Serverless applicationとセキュリティ @a_zara_n Cognito User Poolにおける ユーザー属性の意図しない書き換え 新規作成したユーザーでTokenを取得

Slide 51

Slide 51 text

Security-JAWS 第20回 Session: 03 Serverless applicationとセキュリティ @a_zara_n Cognito User Poolにおける ユーザー属性の意図しない書き換え サンプルのAdmin APIへリクエスト

Slide 52

Slide 52 text

Security-JAWS 第20回 Session: 03 Serverless applicationとセキュリティ @a_zara_n Cognito User Poolにおける ユーザー属性の意図しない書き換え リクエストに利⽤したToken

Slide 53

Slide 53 text

Security-JAWS 第20回 Session: 03 Serverless applicationとセキュリティ @a_zara_n Cognito User Poolにおける ユーザー属性の意図しない書き換え カスタム属性の変更

Slide 54

Slide 54 text

Security-JAWS 第20回 Session: 03 Serverless applicationとセキュリティ @a_zara_n Cognito User Poolにおける ユーザー属性の意図しない書き換え 新規作成したユーザーでTokenを取得

Slide 55

Slide 55 text

Security-JAWS 第20回 Session: 03 Serverless applicationとセキュリティ @a_zara_n Cognito User Poolにおける ユーザー属性の意図しない書き換え Admin として認識されるようになりました

Slide 56

Slide 56 text

Security-JAWS 第20回 Session: 03 Serverless applicationとセキュリティ @a_zara_n Cognito User Poolにおける ユーザー属性の意図しない書き換え

Slide 57

Slide 57 text

Security-JAWS 第20回 Session: 03 Serverless applicationとセキュリティ @a_zara_n Cognito User Poolにおける ユーザー属性の意図しない書き換え

Slide 58

Slide 58 text

Security-JAWS 第20回 Session: 03 Serverless applicationとセキュリティ @a_zara_n Cognito User Poolにおける ユーザー属性の意図しない書き換え 対策 アプリクライアントには必要最⼩限かつ認可や権限に関連する属性の権限を与えない または、認可や権限に関連する値を推測可能なものにしない

Slide 59

Slide 59 text

まとめ

Slide 60

Slide 60 text

Security-JAWS 第20回 Session: 03 Serverless applicationとセキュリティ @a_zara_n まとめ 主題 n mBaaS(Amplify)やServerless applicationで利⽤されるAmazon Cognitoにおける攻撃や脅威 攻撃例 n 本来のアカウント作成フローからの逸脱 n Cognito User Poolにおけるユーザー属性の意図しない書き換え 対策と結論 n アプリケーションの設計に合わせて設定を適切

Slide 61

Slide 61 text

Thank you Flatt Securiy HP: https://flatt.tech/ 該当記事: https://flattsecurity.hatenablog.com/entry/cloud_security_aws_case