Slide 1

Slide 1 text

Padding Oracle with INSHACK 2019 jean bash picoctf2018 Magic padding oracle 2019/6/14 m1z0r3 @Zhouyunao

Slide 2

Slide 2 text

⽬次 n Padding Oracle Attack l Encryption Attack l Decryption Attack n 実践問題 2019/6/13 m1z0r3

Slide 3

Slide 3 text

n 概略 l 共通鍵ブロック暗号のCBCモードに対する攻撃⼿法 l 14年SSL3.0のPOODLEという脆弱性もこの⼿法 n CTFに置いての位置付け l ちょくちょく⾒る l 初⾒としはうざい 2019/6/13 m1z0r3 Padding Oracle Attack

Slide 4

Slide 4 text

n 特徴 (あくまでも⾃分経験上の話) l CBCモード ←必須 l AES類のブロック暗号 ←必須 l サーバーが復号化をやってくれる l サーバーコードは⼤概公開 l IVまでこっちから送られる ←場合によって 2019/6/13 m1z0r3 Padding Oracle Attack

Slide 5

Slide 5 text

n 何ができる︖ l Decryption Attack 難易度:⾼ 暗号⽂の復号ができる 平⽂はflagの場合 l Encryption Attack 難易度:中 暗号⽂の改造による平⽂の改ざん 平⽂を特定なコマンド/データに改ざんし認証をバイパスできる 2019/6/13 m1z0r3 Padding Oracle Attack

Slide 6

Slide 6 text

n イメージ 2019/6/13 m1z0r3 Encryption Attack # a&…86 % + + + # ) user…

Slide 7

Slide 7 text

n イメージ 2019/6/13 m1z0r3 Encryption Attack # 01…8c % + + + # ) admin…

Slide 8

Slide 8 text

n 本来なら ) ⨁ 2 = ” … ” n 平⽂をすり替える為に差を計算 = “ … ”⨁” … ” n 差と⼀個前のブロックとxor )⨁⨁(%) = “ … ” 2019/6/13 m1z0r3 Encryption Attack

Slide 9

Slide 9 text

n それをサーバーに送ると 2019/6/13 m1z0r3 Encryption Attack # 01…8c % + + + # xxxxx admin… 最後のブロックを変える為に前のブロックを犠牲にする ※全ブロックを弄る⽅法もあります(後ほど説明)

Slide 10

Slide 10 text

n さらなる特徴(経験上) l PKCS7を使いがち l Padding errorの時のエラー⽂が特殊 n どうやる︖ 簡単にいうと 前のブロックをいじって、違うpaddingの形式に復号させ、 求めたいブロック平⽂⼀歩⼿前のDec(ct)を求めて、平⽂を取り 出す 2019/6/13 m1z0r3 Decryption Attack

Slide 11

Slide 11 text

2019/6/13 m1z0r3 Decryption Attack 1c a d m i n u s e r 07 07 07 07 07 07 01 xx + + Dec Dec + xxxxx ) ブルートフォース ※適当に埋めた

Slide 12

Slide 12 text

2019/6/13 m1z0r3 Decryption Attack 2f 1c a d m i n u s e r 07 07 07 07 07 02 02 yy xx 01 02 Dec + ) + Dec xxxxx + + + 01 ブルートフォース済み の部分を新しいpadding 形式に合わせる

Slide 13

Slide 13 text

2019/6/13 m1z0r3 Decryption Attack 3e 2f 1c a d m i n u s e r 07 07 07 07 03 03 03 zz yy xx 02 01 03 03 + + + + Dec xxxxx Dec + )

Slide 14

Slide 14 text

2019/6/13 m1z0r3 Decryption Attack 4a 3e 2f 1c a d m i n u s e r 07 07 07 04 04 04 04 aa zz yy xx 03 02 01 04 04 04 + + + + Dec xxxxx Dec + )

Slide 15

Slide 15 text

オ ラ ク ル 。 。 。 2019/6/13 m1z0r3 Decryption Attack

Slide 16

Slide 16 text

2019/6/13 m1z0r3 Decryption Attack gy f1 ez dx cp bk ag 9l 8i 7u 6n 5b 4a 3e 2f 1c 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 qq zz cc vv ee nn ll hh gg bb ee ff aa zz yy xx 0f 0e 0d 0c 0b 0a 09 08 07 06 05 04 03 02 01 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 + + + + Dec xxxxx Dec + ) 全部¥x10になる為既知明⽂か らDec(ct1)を計算して最後ct0と xor取り最後のブロックを算出

Slide 17

Slide 17 text

2019/6/13 m1z0r3 Decryption Attack gy f1 ez dx cp bk ag 9l 8i 7u 6n 5b 4a 3e 2f 1c 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 qq zz cc vv ee nn ll hh gg bb ee ff aa zz yy xx 0f 0e 0d 0c 0b 0a 09 08 07 06 05 04 03 02 01 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 + + + + Dec xxxxx Dec + ) ′# ′) ′# ′) が10(padding)に埋め 尽くされた時: ′# ⨁ 1010. . = () ) () )⨁ # = )

Slide 18

Slide 18 text

2019/6/13 m1z0r3 全ブロックのEncryption Attack # 01…8c % + + + # xxxxx user… + # admin… n Step 1 最後の2ブロックから差分を計算

Slide 19

Slide 19 text

n Step 2 前の2ブロックに移動 2019/6/13 m1z0r3 全ブロックのEncryption Attack xxxx 01…8c % + + + # xxxxx user… + # admin… + ) I am…

Slide 20

Slide 20 text

n Step 3 2019/6/13 m1z0r3 全ブロックのEncryption Attack xxxx 01…8c % + + + # xxxxx user… + # admin… + ) I am… + % Yes… 最後は1ブロック⽬を すりかえられるよう に差分を計算

Slide 21

Slide 21 text

n picoctf 2018 magic padding oracle l De+Encryption Attack l https://kusuwada.hatenablog.com/entry/2019/04/17/052525 n INS’hack 2019 Jean-Sébastien Bash l Encryption Attack l https://www.hackademint.org/Jean-Sebastien_Bash 2019/6/13 m1z0r3 実践問題

Slide 22

Slide 22 text

n http://rintaro.hateblo.jp/entry/2017/12/31/174327 2019/6/13 m1z0r3 レファレンス