59
CTF勉強会 #4 Crypto 2016.01.23 TOKYO / 2016.02.06 OSAKA trmr (@trmr105) katagaitai

Katagaitai CTF勉強会 #4 Crypto

  • Upload
    trmr

  • View
    1.593

  • Download
    2

Embed Size (px)

Citation preview

Page 1: Katagaitai CTF勉強会 #4 Crypto

CTF勉強会 #4

Crypto

2016.01.23 TOKYO / 2016.02.06 OSAKA

trmr (@trmr105)

katagaitai

Page 2: Katagaitai CTF勉強会 #4 Crypto

注意事項

本スライドは勉強会で利用したものを元に作成しています。

勉強会では問題サーバを利用しましたが既に停止しています。

問題サーバのIPやホスト名が出てくる箇所がありますが、随時読み替えをお願いいたします。

リンク切れ等ご容赦ください。

勉強会時点で誤っていた個所を一部修正しています。

問題は下記URLに配置しています。

http://pastebin.com/RfwJn2MM

次ページに勉強会参加者有志のwriteupを載せています。

私のwriteupよりも100倍いい出来なので、ぜひそちらも参照してください。

2

Page 3: Katagaitai CTF勉強会 #4 Crypto

Writeup & Impression3

katagaitai勉強会#4 開催後、reconで見つけたwriteupや感想です。

http://syagi.hatenablog.com/entry/2016/01/29/225258

linus404さん作。今頃は実装も終わってるはず。

http://encry1024.hatenablog.com/entry/2016/02/02/154645

encry1024さんによる感想。Rubyで回りきったのだろうか。

http://www.slideshare.net/YOKARO-MON/csaw-ctf-2014-quals-crypto300

you_0708さんによるwriteup。英語ですね。グローバルですね。

http://turn-up.hatenablog.com/entry/2016/02/01/192814

turn_upさんによる感想。加筆期待wktk。

https://fish.minidns.net/news/58

Kanataさんによる感想。上級編も感想書いてくれてましたね。ありがとうございます。

http://ydfj.blogspot.jp/2016/02/katagaitai-ctf-2016-med.html

Yudai Fujiwara さんによる感想。暇なときにコード書いたら連絡ください。

http://furutsuki.hatenablog.com/entry/2016/02/10/053531

Furutsukiさんによる感想。いずれ書いてください。

他載せられてない人。私のRecon力不足です。ごめんなさい。

もしwriteup書いたらtwitter等で連絡いただけると助かります。

Page 4: Katagaitai CTF勉強会 #4 Crypto

Katagaitai勉強会とはなんぞや

好きなことを分かり合える人を増やしたい!

4

Page 5: Katagaitai CTF勉強会 #4 Crypto

楽しみにしていること

Twitterの巡回 Writeup収集

#katagaitaiCTF

5

Page 6: Katagaitai CTF勉強会 #4 Crypto

katagaitaiと愉快な仲間たち 今回発表する人

bata(@bata_24) リーダー

trmr(@trmr105) センセイ

資料レビュー

askn(@asai_ken) エース

運営手伝い

yagihash(@yagihashoo) シンジン

# 実は他にもいるらしい

# 総数は誰も知らない

We are katagaitai!

6

Page 7: Katagaitai CTF勉強会 #4 Crypto

今日の問題

[CSAW CTF 2014] Crypto300 - FEAL

CODE

7

Page 8: Katagaitai CTF勉強会 #4 Crypto

今日FEALをやるべき4つの理由

共通鍵暗号だから

公開鍵暗号の解き方がパターン化してる問題

2014年のCTFベスト暗号問題に選ばれていたから

Golden Flag Awards - http://golden-flags.com/

12月の上級編がこの問題と関連していたから

fealの後にsubmeに取り組むことをおすすめ

中級編と上級編の順番を逆にすればよかった…

最近の問題についていけてないから

子育てに追われている…

世の中の父親はすごい

8

Page 9: Katagaitai CTF勉強会 #4 Crypto

とりあえずやってみよう

①問題につなげてみよう

$ nc katagaitai.orz.hm 8888 (18888 or 28888)

※ホスト名がリアルだけど、気にしない

つながりますか?

つながらない人は手をあげてください

9

Page 10: Katagaitai CTF勉強会 #4 Crypto

とりあえずやってみよう

②ファイルを落としてみよう

以下のパスにサーバで動作しているpythonコードを置いてます

https://goo.gl/9XymPK

10

Page 11: Katagaitai CTF勉強会 #4 Crypto

Pythonコードを見てみよう。11

本番サーバは違う値が入ってます。

※鍵の生成方法もちょっと変えてます。

(固定値にしてます)

Page 12: Katagaitai CTF勉強会 #4 Crypto

最初の問題

まずはじめに次のSHA1ハッシュを要求される

SHA1ハッシュの末尾16ビットが”1”

入力値が与えられた文字列で始まる

入力長は21バイト

腕慣らしにやってみましょう。

終わったら問題を解き始めてください。

Solver: https://goo.gl/WUbcgb

20分12

C実装のが速度的によい

Page 13: Katagaitai CTF勉強会 #4 Crypto

注意事項

CSAW CTFの問題はFEAL4.3ですが、元となった暗号FEAL

を解説します。

ほんのちょっとだけ仕様が違います。

スライド中に出てくる「+」はXoRです

13

Page 14: Katagaitai CTF勉強会 #4 Crypto

暗号問題の解き方

CTFの暗号問題は二つに分けられる

「公表されている暗号」か「独自に作った暗号」

公表されている暗号

RSA, AESなど

過去に様々な研究者が解析し脆弱性を報告

独自に作った暗号

暗号を独自に作るのはものすごく大変

多くは公表されている暗号を基にして作成

14

Page 15: Katagaitai CTF勉強会 #4 Crypto

暗号のソースコード15

コードを読んで脆弱性を見つけるのは難しい

Page 16: Katagaitai CTF勉強会 #4 Crypto

暗号問題の解き方手順16

いかに初動であたりをつけるかが重要

マルウェアの解析手順 by JPCERTの中の人

表層解析

動的解析

静的解析

暗号の解析も同じ

表層解析 → 何の暗号かあたりをつける

動的解析 → 動かしてどのような問題か把握

静的解析 → 問題の重要な場所だけちゃんと読む

Page 17: Katagaitai CTF勉強会 #4 Crypto

暗号問題の解き方

CTFの暗号問題は二つに分けられる

「公表されている暗号」か「独自に作った暗号」

公表されている暗号

RSA, AESなど

過去に様々な研究者が解析し脆弱性を報告

独自に作った暗号

暗号を独自に作るのはものすごく大変

多くは公表されている暗号を基にして作成

17

まずぐぐる

まずぐぐる

暗号問題はぐぐることが大事

Page 18: Katagaitai CTF勉強会 #4 Crypto

ぐぐってみた18

Wikipedia!!

Page 19: Katagaitai CTF勉強会 #4 Crypto

Wikipedia19

Differencial Cryptanalysis!!

Page 20: Katagaitai CTF勉強会 #4 Crypto

さらにぐぐってみた20

攻撃コードがあった!!!!!

Page 21: Katagaitai CTF勉強会 #4 Crypto

解けた!!!!!21

これで勝つる!!!!!

本番ならOKですが勉強会なので勉強します

Page 22: Katagaitai CTF勉強会 #4 Crypto

共通鍵暗号と公開鍵暗号

公開鍵暗号 – 暗号化と復号に異なる鍵を利用

共通鍵暗号 – 共通の鍵を利用して暗号化/復号を実施

22

今日はこれ

Page 23: Katagaitai CTF勉強会 #4 Crypto

共通鍵暗号のカテゴリー

大体このようなカテゴリわけできる(はず)

ストリーム暗号

LFSR型:snow, K-Cipher2 etc.

状態遷移型:RC4, trivium, chacha-20 etc.

ブロック暗号

Feistel構造:DES, MISTY, Camellia, FEAL etc.

SPN構造:AES, Serpent etc.

今日はこれ

23

上級編はこっち

Page 24: Katagaitai CTF勉強会 #4 Crypto

[参考]Feistel構造24

Page 25: Katagaitai CTF勉強会 #4 Crypto

暗号に求められること

Key (K) Key (K)

暗号化 暗号化

入力情報(鍵・平文)の適切な攪拌

出力の値は全く異なるのが望ましい

25

少しでも入力が違えば

Page 26: Katagaitai CTF勉強会 #4 Crypto

差分解析

Plaintext A Plaintext A + ⊿

Key (K) Key (K)

暗号化 暗号化

diff

入力に差分

入力情報(鍵・平文)ペアに差分を与える

出力の差分を見ることで偏りがないか確認

出力差分に相関が出現!

26

Page 27: Katagaitai CTF勉強会 #4 Crypto

FEAL-4のアルゴリズム

FEAL-4

4ラウンドFeistel構造

ラウンド毎にf関数にて処理

27

http://www.theamazingking.com

Page 28: Katagaitai CTF勉強会 #4 Crypto

FEAL-4のラウンド関数

FEAL-4のラウンド関数f

Byte(8-bit)ごとの処理

G0,G1の2つの関数が存在

G関数は入力a,bが「0」ならば、出力は「0」 or 「4 (1<<2)」となる

28

http://www.theamazingking.com

Page 29: Katagaitai CTF勉強会 #4 Crypto

FEALのラウンド関数の解析

次の条件を満たす入力を考える

X0=X1 and X2=X3

XoRで打ち消しが発生し、Y1およびY2が固定値に

29

http://www.theamazingking.com4(1<<2) 16(1<<4)G(X0+4) G(X3+16)

X0=X1 X2=X3

Page 30: Katagaitai CTF勉強会 #4 Crypto

FEALのラウンド関数の差分

次の条件を満たす入力の出力差分を考える

X0=X1 and X2=X3

入力X, X’の出力の差分ΔYは?

30

http://www.theamazingking.com

Page 31: Katagaitai CTF勉強会 #4 Crypto

FEALのラウンド関数の差分

次の条件を満たす入力の出力差分を考える

X0=X1 and X2=X3

入力X, X’の出力の差分ΔYは?

31

http://www.theamazingking.com4 16G(X0+4) G(X3+16) 4 16G(X’0+4) G(X’3+16)

ΔY0 = G(X0+4)+G(X’0+4), ΔY1 = 0, ΔY2 = 0, ΔY3 = G(X’3+16)+G(X’3+16)

ΔYに大きな偏り

X’0=X’1 X’2=X’3X0=X1 X2=X3

Page 32: Katagaitai CTF勉強会 #4 Crypto

FEALのラウンド関数の解析

次のような入力ペアの出力差分を考える

X = 0x00000000 (X0=0x00, X1=0x00, X2=0x00, X3=0x00)

X’ = 0x80800000 (X0=0x80, X1=0x80, X2=0x00, X3=0x00)

32

http://www.theamazingking.comG0(4)=0x10 G1(16) G1(16)G0(84)=0x12

Page 33: Katagaitai CTF勉強会 #4 Crypto

FEALのラウンド関数の解析

次のような入力ペアを考える

X = 0x00000000 (X0=0x00, X1=0x00, X2=0x00, X3=0x00)

X’ = 0x80800000 (X0=0x80, X1=0x80, X2=0x00, X3=0x00)

33

http://www.theamazingking.comG0(4)=0x10 G1(16) G1(16)G0(84)=0x12

ΔY0 = 0x02, ΔY1 = 0, ΔY2 = 0, ΔY3 =0

ΔX=0x80800000ならば必ずΔY=0x02000000

特定の入力差分において、出力差分が一定となる

Page 34: Katagaitai CTF勉強会 #4 Crypto

FEALの差分解析34

http://www.theamazingking.com

1ラウンドなら特定の入力差分の際に出力差分に偏り

途中の値はわからない

出力の値はわかる

Page 35: Katagaitai CTF勉強会 #4 Crypto

FEALの差分解析35

http://www.theamazingking.com

全体を通した際に出力差分は出るか?

1ラウンドなら特定の入力差分の際に出力差分に偏り

Page 36: Katagaitai CTF勉強会 #4 Crypto

FEALの差分解析36

http://www.theamazingking.com

次の差分を持つ平文ペアを入力する

0x8080000080800000

0x80800000 0x80800000

暗号文に相関が出てほしい

Page 37: Katagaitai CTF勉強会 #4 Crypto

FEALの差分解析37

http://www.theamazingking.com

次の差分を持つ平文ペアを入力する

0x8080000080800000

同じ鍵で暗号化されているため鍵の入力差分は0

0x80800000 0x80800000

0 0

0

Page 38: Katagaitai CTF勉強会 #4 Crypto

FEALの差分解析38

http://www.theamazingking.com

次の差分を持つ平文ペアを入力する

0x8080000080800000

同じ鍵で暗号化されているため鍵の入力差分は0

0x80800000 0x80800000

0x80800000

0

0x02000000

ここの差分は不明

0

最終ラウンドへの左入力の差分は

0x02000000

右入力の差分は不明…

途中で出力の差分が出せなくなる

Page 39: Katagaitai CTF勉強会 #4 Crypto

FEALの差分解析39

http://www.theamazingking.com

次の差分を持つ平文ペアを入力する

0x8080000080800000

同じ鍵で暗号化されているため鍵の入力差分は0

0x80800000 0x80800000

入力に差分を与えることで最終ラウンドの入力差分を

操作可能

今度は出力から考える

最終ラウンドにフォーカス

Page 40: Katagaitai CTF勉強会 #4 Crypto

FEALの最終ラウンドの差分解析

左入力差分=0x02000000

右入力差分は特定できない

40

0x02000000

key

f

Output

?????

Output

Page 41: Katagaitai CTF勉強会 #4 Crypto

FEALの最終ラウンドの解析

差分ではなく通常の処理で考える

41

key

f

暗号文(C1) 暗号文(C2)

入力(X1) 入力(X2)

Page 42: Katagaitai CTF勉強会 #4 Crypto

FEALの最終ラウンドの解析42

key

f

暗号文(C1) 暗号文(C2)

C1+C2(=X2)

入力(X1) 入力(X2)

差分ではなく通常の処理で考える

Page 43: Katagaitai CTF勉強会 #4 Crypto

FEALの最終ラウンドの差分解析

出力ペアの差分より最終ラウンドの右側の入力差分はC1+C2+C1’+C2’=ΔC1+ΔC2

43

key

f

暗号文(C1) 暗号文(C2)

入力(X1) 入力(X2)

key

f

暗号文(C1’) 暗号文(C2’)

入力(X1’) 入力(X2’)

C1+C2 C1’+C2’

出力から右入力差分を特定可能

Page 44: Katagaitai CTF勉強会 #4 Crypto

FEALの最終ラウンドの差分解析44

0x02000000

key

f

出力差分(ΔC1)

ΔC1+ΔC2

入力差分(ΔX1) 入力差分(ΔX2)

出力差分(ΔC2)

最終ラウンドの全入出力差分を特定できた!

この値は?

Page 45: Katagaitai CTF勉強会 #4 Crypto

FEALの最終ラウンドの差分解析

出力ペアの差分より最終ラウンドの右側の入力差分は

C1+C2+C1’+C2’=ΔC1+ΔC2

f関数の出力差分はf(C1+C2+key)+f(C1’+C2’+key)

45

key

f

暗号文(C1) 暗号文(C2)

入力(X1) 入力(X2)

key

f

暗号文(C1’) 暗号文(C2’)

入力(X1’) 入力(X2’)

C1+C2 C1’+C2’

f(C1+C2+key) f(C1’+C2’+key)

Page 46: Katagaitai CTF勉強会 #4 Crypto

FEALの最終ラウンドの差分解析46

0x02000000

key

f

出力差分(ΔC1)

ΔC1+ΔC2

入力差分(ΔX1) 入力差分(ΔX2)

出力差分(ΔC2)

f(C1+C2+key)+f(C1’+C2’+key)

この値は?

ΔC1 = f(C1+C2+key)+f(C1’+C2’+key)+0x02000000

Page 47: Katagaitai CTF勉強会 #4 Crypto

FEALの最終ラウンドの差分解析47

0x02000000

key

f

出力差分(ΔC1)

ΔC1+ΔC2

入力差分(ΔX1) 入力差分(ΔX2)

出力差分(ΔC2)

f(C1+C2+key)+f(C1’+C2’+key)

この値は?

ΔC1 = f(C1+C2+key)+f(C1’+C2’+key)+0x02000000

この式を満たすkeyを探索することで、値を特定可能!!!

Page 48: Katagaitai CTF勉強会 #4 Crypto

何ができたか?48

http://www.theamazingking.com

K3を導出できた!

Page 49: Katagaitai CTF勉強会 #4 Crypto

FEALの次のラウンド鍵解読49

http://www.theamazingking.com

K3を解読したので暗号文から逆算することで

3ラウンド目の出力が手に入る

Page 50: Katagaitai CTF勉強会 #4 Crypto

FEALの次のラウンド鍵解読50

http://www.theamazingking.com

K3を解読したので暗号文から逆算することで

3ラウンド目の出力が手に入る

今度は3ラウンド目の入力差分と出力差分よりK2の鍵解読を実施

Page 51: Katagaitai CTF勉強会 #4 Crypto

FEALの次のラウンド鍵解読51

http://www.theamazingking.com

K3を解読したので暗号文から逆算することで

3ラウンド目の出力が手に入る

今度は3ラウンド目の入力差分と出力差分よりK2の鍵解読を実施

これを繰り返すことでK1~K3を解読可能!

Page 52: Katagaitai CTF勉強会 #4 Crypto

FEALの次のラウンド鍵解読52

http://www.theamazingking.com

K3を解読したので暗号文から逆算することで

3ラウンド目の出力が手に入る

今度は3ラウンド目の入力差分と出力差分よりK2の鍵解読を実施

これを繰り返すことでK1~K3を解読可能!

Page 53: Katagaitai CTF勉強会 #4 Crypto

FEALの開始ラウンドの解析53

P1

key4

f

出力(C1)

P2

入力平文 入力平文

出力(C2)

key5

key0

Page 54: Katagaitai CTF勉強会 #4 Crypto

FEALの開始ラウンドの解析54

P1

key4

f

出力(C1)

P2

入力平文 入力平文

出力(C2)

key5

key0

K4 = C1 + f(C2+K0) + P1

K5 = C2 + K4 + P1 + P2 = C1 + C2 + P2 + f(C2 + K0)

この式を満たすK0を探索することで、K4, K5の値を特定可能!!!

Page 55: Katagaitai CTF勉強会 #4 Crypto

実習

とりあえずやってみましょう

先にwriteupを紹介します

katagaitai版

http://pastebin.com/eZaHEEQx

http://pastebin.com/UweM5NsT

他にも転がってる。Google先生は神。

解説はFEAL4でしたが問題はFEAL4.3です。

ちょっとだけある箇所が違います。

解けた人は上級編の問題をやってください

スライドはこちらhttp://www.slideshare.net/trmr105/katagaitai-ctf-3-crypto

残り15分になったらwriteupのコード解説しようと思ってます

音楽にリクエストがあれば@trmr105または#katagaitaiCTFでツイートしてください

東京ではともりなおにジャックされた

90分55

Page 56: Katagaitai CTF勉強会 #4 Crypto

trmr版FEALの解き方 差分を使った解き方はいろいろある、と思う。

あくまで一例。

今回のwriteupの成り立ち

trmrがpythonで書く

速度が出ない

bata氏がCで書き直す

100倍高速化!!

Cは神

writeupの動かし方

1)writeup_feal.cをtest.cにリネーム

2)writeup_feal.pyを実行

※接続先のホスト名はPython実行前に確認&修正してください

※まずはローカルで試すのをおすすめ

56

Page 57: Katagaitai CTF勉強会 #4 Crypto

解答

writeupを動かすと

57

HackerLikesHakka

Page 58: Katagaitai CTF勉強会 #4 Crypto

本番でのとき方

1. ぐぐる

2. 暗号を特定する

3. 攻撃方針を決定する

4. 公開されている暗号との違いを特定

5. 攻撃する

6. フラグゲット!

今回のように考えて解く場合CSAW300点問題では無いはず

400~500点くらい?そもそもCSAWで出るのか説

58

Page 59: Katagaitai CTF勉強会 #4 Crypto

参考文献

参考文献

The Amazing King

http://www.theamazingking.com

Wikipedia[英語版]

https://en.wikipedia.org/wiki/FEAL

暗号技術大全 (アップデート希望)

その他論文

59