Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Serverless applicationと セキュリティ~Cognito編~

a_zara_n
February 18, 2021

Serverless applicationと セキュリティ~Cognito編~

Security-JAWS #20 Session: 03
[リンク]
Not So Secureが公開している記事: https://notsosecure.com/hacking-aws-cognito-misconfigurations/
発表者の所属会社: https://flatt.tech/
ブログ: https://flattsecurity.hatenablog.com/entry/cloud_security_aws_case
発表者Twitter: https://twitter.com/a_zara_n

a_zara_n

February 18, 2021
Tweet

More Decks by a_zara_n

Other Decks in Technology

Transcript

  1. Serverless applicationと
    セキュリティ~Cognito編~
    株式会社 Flatt Security
    情報科学専⾨学校
    Norihide Saito / Azara @a_zara_n

    2020/02/18 Security-JAWS #20 Session: 03

    View Slide

  2. 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

    View Slide

  3. 会社紹介

    View Slide

  4. Security-JAWS 第20回 Session: 03 Serverless applicationとセキュリティ @a_zara_n
    会社概要

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  10. 本⽇の内容

    View Slide

  11. Security-JAWS 第20回 Session: 03 Serverless applicationとセキュリティ @a_zara_n
    本⽇の内容について

    https://flattsecurity.hatenablog.com/entry/cloud_security_aws_case

    View Slide

  12. Security-JAWS 第20回 Session: 03 Serverless applicationとセキュリティ @a_zara_n
    本⽇の内容について

    n Serverless ApplicationとSecurity
    n 解説に利⽤するサンプルアプリについて
    n Cognitoへの攻撃⼿法と対策
    n まとめ

    View Slide

  13. Security-JAWS 第20回 Session: 03 Serverless applicationとセキュリティ @a_zara_n
    発表内容を要約

    サーバーレスアプリケーションで
    ⾒落としがち脆弱性や
    埋め込みやすい場所を
    集めてきたから⾒てくれ!!

    View Slide

  14. Security-JAWS 第20回 Session: 03 Serverless applicationとセキュリティ @a_zara_n
    本発表の視点について

    発表で触れること
    n 設定不備やアプリケーションの脆弱性によって
    引き起こされる機密性や完全性の侵害
    発表で触れないこと
    n ロギング関連
    n 耐障害性
    n 可⽤性

    View Slide

  15. Serverless Applicationと
    Security

    View Slide

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

    N#BB4΍4FSWFSMFTTBQQMJDBUJPO

    View Slide

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

    ઐ໳ੑʹಛԽͨ͠αʔϏεͷ૊Έ߹Θͤ

    View Slide

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

    View Slide

  19. Security-JAWS 第20回 Session: 03 Serverless applicationとセキュリティ @a_zara_n
    責任共有モデル

    IUUQTEBXTTUBUJDDPNTFSWFSMFTTKQ4FDVSJUZ0WFSWJFXPG"[email protected]+1QEG

    View Slide

  20. Security-JAWS 第20回 Session: 03 Serverless applicationとセキュリティ @a_zara_n
    責任共有モデル

    IUUQTEBXTTUBUJDDPNTFSWFSMFTTKQ4FDVSJUZ0WFSWJFXPG"[email protected]+1QEG

    View Slide

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

    Serverless Applicationへの脅威と攻撃
    n アプリケーションの脆弱性対策
    n 開発したアプリケーションへの攻撃
    n 利⽤するライブラリへの攻撃
    n 利⽤するサービスの設定不備
    n 設定不備による直接的な攻撃
    n 設定不備による間接的な攻撃
    etc …

    View Slide

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

    Serverless Applicationへの脅威と攻撃
    n アプリケーションの脆弱性対策
    n 開発したアプリケーションへの攻撃
    n 利⽤するライブラリへの攻撃
    n 利⽤するサービスの設定不備
    n 設定不備による直接的な攻撃
    n 設定不備による間接的な攻撃
    etc …
    Amazon Cognito

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  26. Cognitoへの
    攻撃⼿法と対策

    View Slide

  27. Security-JAWS 第20回 Session: 03 Serverless applicationとセキュリティ @a_zara_n
    Cognitoへの攻撃⼿法の例

    n 本来のアカウント作成フローからの逸脱
    n Cognito User Poolにおける
    ユーザー属性の意図しない書き換え

    View Slide

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

    本来のアカウント作成フロー
    1. User AがUser Bを招待
    2. User Bは新規登録のため
    /registerを経由し新規登録
    3. Cognitoから初期パスワードが
    発⾏されて新規登録完了
    6TFS"

    View Slide

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

    本来のアカウント作成フロー
    1. User AがUser Bを招待
    2. User Bは新規登録のため
    /registerを経由し新規登録
    3. Cognitoから初期パスワードが
    発⾏されて新規登録完了
    6TFS#

    View Slide

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

    View Slide

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

    View Slide

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

    本来のアカウント作成フロー
    1. User AがUser Bを招待
    2. User Bは新規登録のため
    /registerを経由し新規登録
    3. Cognitoから初期パスワードが
    発⾏されて新規登録完了
    6TFS#

    View Slide

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

    View Slide

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

    攻撃者(⾃分)が選んだフロー
    1. 直接CognitoのAPIを実⾏し
    新規登録を⾏う
    6TFS"
    ࣗ෼

    View Slide

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

    View Slide

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

    事象
    UI上は新規登録は招待のみだが、
    ユーザーの⾃⼰サインアップの許可にチェックが⼊っていた為
    第三者から新規登録ができてしまう

    View Slide

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

    なぜ?
    なぜ⾃⼰サインアップが許可されているのがわかったのか?

    View Slide

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

    ユーザーに⾃⼰サインアップを許可する
    管理者のみにユーザーの作成を許可する

    View Slide

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

    エラー⽂に必要な属性や情報が表⽰されるので最低限⼊⼒すると新規ユーザーが作成できる
    実際にEmailには検証コードが⾶んでくる

    View Slide

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

    実際にEmailのVerifyまで実施できる

    View Slide

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

    対策
    サービスの新規登録フローに合わせたサインアップ設定に設定しましょう。
    個々のユーザーが新規登録することを想定していない場合は
    ”管理者のみにユーザーの作成を許可する”を選択しましょう。

    View Slide

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

    IUUQTEPDTBXTBNB[[email protected]

    View Slide

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

    IUUQTOPUTPTFDVSFDPNIBDLJOHBXTDPHOJUPNJTDPOGJHVSBUJPOT

    View Slide

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

    この攻撃でログインが成功してもアプリが利⽤できない場合も
    1. Cognitoの新規登録で必要とされなかった属性がアプリ内
    で必須として利⽤されている場合
    => アプリケーションでエラーが発⽣し利⽤できない
    2. アプリケーションが独⾃に持っている認可機構で弾いている
    => Cognitoの何かしらの属性とアプリケーションが保持し
    ている情報を照合している可能性

    View Slide

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

    Cognitoに存在する2種類の属性
    カスタム属性
    利⽤者が⾃由に利⽤できる属性で、最
    ⼤25個利⽤することができる。
    作成後の値変更の可否や開発者専⽤の
    属性などが設定可能。
    標準属性
    OpenID Connectの仕様に準拠した実装

    View Slide

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

    アプリクライアントと属性の読み書き
    CognitoのAPIを操作する際に利⽤さ
    れるアプリクライアントにはCognito
    に設定されている属性に関するアクセ
    ス権限がある。

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    新規作成したユーザーでTokenを取得

    View Slide

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

    サンプルのAdmin APIへリクエスト

    View Slide

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

    リクエストに利⽤したToken

    View Slide

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

    カスタム属性の変更

    View Slide

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

    新規作成したユーザーでTokenを取得

    View Slide

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

    Admin として認識されるようになりました

    View Slide

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

    View Slide

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

    View Slide

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

    対策
    アプリクライアントには必要最⼩限かつ認可や権限に関連する属性の権限を与えない
    または、認可や権限に関連する値を推測可能なものにしない

    View Slide

  59. まとめ

    View Slide

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

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

    View Slide

  61. Thank you

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

    View Slide