2 湯浅 潤樹(Junki Yuasa) ⾃⼰紹介 l 奈良先端科学技術⼤学院⼤学 M2 l Webの認証・認可に関する研究 l OAuth、OpenID Connect l SECCON Beginners CTF 2023 Web担当 l 【Web】double check l 【Web】oooauth @melonattacker
6 ユーザー情報を保持し、改ざん検知ができる⽂字列 JWT(JSON Web Token)とは l JWTの特徴 l 改ざんの検証が可能 l データがJSON形式で含まれる l URLに含めることが可能な⽂字列のみで構成 l JWTのユースケース l ログイン機能(認証) l アクセス許可(認可) l ユーザーについての情報保持 引⽤ : https://jwt.io/
9 ヘッダにはアルゴリズムなどのメタ情報が含まれる l ヘッダで使⽤されるクレーム l alg : 署名に使⽤されるアルゴリズム l typ : トークンのタイプ l kid : 鍵のID l など l algで指定可能なアルゴリズム l none : 署名なし l HS256 : 共通鍵暗号⽅式 l RS256 : 公開鍵暗号⽅式 l など JWTの仕組み : ヘッダ { “alg”: “HS256”, “typ”: “JWT” }
10 ペイロードには実際に使⽤される情報が含まれる l 予約済みのクレームと⾃由指定のクレームが存在 l 予約済みのクレーム l iss : JWT発⾏者(サーバ)の識別⼦ l sub : JWT主体の識別⼦ l aud : JWT利⽤者(クライアント)の識別⼦ l exp : 有効期限の終了⽇ l iat : 発⾏⽇時 l jti : ⼀意な識別⼦ JWTの仕組み : ペイロード { “sub”: “1234567890”, “name”: “yuasa”, }
12 ヘッダ、署名、ペイロードを検証する 検証の流れ l ヘッダを検証 l algが期待するアルゴリズムと⼀致するか など l 署名を検証(HS256の場合) l ヘッダとペイロードをドット[.]で連結しメッセージ作成 l HS256アルゴリズムを使⽤し、メッセージと鍵からハッシュ⽣成 l ⽣成されたハッシュと署名値が⼀致するか検証 l ペイロードを検証 l JWTの⽤途に応じてペイロードを検証する JWTの検証
19 JWT検証時にアルゴリズムを指定することで防ぐ JWTにおける攻撃 : アルゴリズムを none に変更(対策) l 脆弱性の発⽣原因 l サーバ側で検証時のアルゴリズムを未指定 l 検証時のアルゴリズムとして none を許可 l 対策 l サーバ側でアルゴリズムを指定 l 送信されるJWTのアルゴリズムと⼀致するかを検証
22 JWT検証時にアルゴリズムを指定することで防ぐ JWTにおける攻撃 : アルゴリズムをRS256からHS256に変更(対策) l 脆弱性の発⽣原因 l サーバ側で検証時のアルゴリズムを未指定 l 検証時のアルゴリズムとして HS256 を許可 l 対策 l サーバ側でアルゴリズムを RS256 に指定 l 送信されるJWTのアルゴリズムと⼀致するかを検証
23 署名作成時に使⽤したHMAC鍵を総当たりで特定 JWTにおける攻撃 : ブルートフォースによるHMAC鍵の特定 攻撃の流れ l アルゴリズムがHS256(共通鍵暗号⽅式) l 総当たりで署名時に使⽤された鍵を特定 l ペイロードを書き換える l 特定した鍵を⽤いて署名を作成 l 改ざんしたJWTを送信
25 鍵の⻑さを⻑くすることで防ぐ JWTにおける攻撃 : ブルートフォースによるHMAC鍵の特定(対策) l 脆弱性の発⽣原因 l HMAC鍵の⻑さが短い l 直接的な対策 l HMAC鍵の⻑さを256ビット(32⽂字)以上にする l その他の対策 l より堅牢なアルゴリズムを使⽤する panda UAN8Fkh0g0Hzy6lwJCF7lFw06P2rtA5v
26 nOAuthはJWTの誤⽤に起因する認証実装の⽋陥 l Microsoft Azure ADは認証実装にOpenID Connectを使⽤ l OpenID ConnectはOAuthという認可プロトコルを認証にも使⽤できるよ う拡張したプロトコル l OpenID Connectはユーザー情報の交換にJWTを使⽤する l OpenID ConnectによってMicrosoftアカウントによる外部サービスへの ログインが可能となる → ID連携が可能に 応⽤事例 : nOAuth https://www.descope.com/blog/post/noauth Microsoft SaaS A SaaS B SaaS C
27 nOAuthはJWTの誤⽤に起因する認証実装の⽋陥 l JWTのemailクレームをユーザー識別⼦として使⽤するwebサイ トが攻撃の対象となる l Microsoft Azure ADにおいてemailクレームは変更可能かつ未検証 l 攻撃の流れ l 攻撃者はAzure AD adminアカウントを作成 l 攻撃者は“Email”属性を被害者のメールアドレスに変更 l 攻撃者はMicrosoftアカウントで脆弱なwebサイトにログイン l 攻撃者は被害者としてログインする 応⽤事例 : nOAuth https://www.descope.com/blog/post/noauth
28 l ⽂献 l https://datatracker.ietf.org/doc/html/rfc7519 l https://scgajge12.hatenablog.com/entry/jwt_security l https://book.hacktricks.xyz/pentesting-web/hacking-jwt-json-web-tokens l https://www.descope.com/blog/post/noauth l ツール l https://jwt.io l https://github.com/ticarpi/jwt_tool l ラボ環境 l https://github.com/SECCON/2023_beginnerslive/tree/main/yuasa l 画像 l https://flacticon.com 参考資料