43
The OWASP Foundation http://www owasp org OWASP AppSec Beijing/Asia 2011 http://www.owasp.org Beijing/Asia 2011 流行应用的加密算法 流行应用的加密算法 实现缺陷与利用 实现缺陷与利用 吴翰清 阿里云信息安全中心 阿里云信息安全中心 [email protected] Copyright © The OWASP Foundation Permission is granted to copy, distribute and/or modify this document under the terms of the OWASP License.

流行应用的加密算法 实现缺陷与利用 - OWASP · 流行应用的加密算法 实现缺陷与利用 ... 加密算法基础 IV:初始化向量,一次一密,无须保密

  • Upload
    others

  • View
    9

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 流行应用的加密算法 实现缺陷与利用 - OWASP · 流行应用的加密算法 实现缺陷与利用 ... 加密算法基础 IV:初始化向量,一次一密,无须保密

The OWASP Foundationhttp://www owasp org

OWASP AppSecBeijing/Asia 2011 http://www.owasp.orgBeijing/Asia 2011

流行应用的加密算法流行应用的加密算法实现缺陷与利用实现缺陷与利用

吴翰清阿里云信息安全中心阿里云信息安全中心

[email protected]

Copyright © The OWASP FoundationPermission is granted to copy, distribute and/or modify this document under the terms of the OWASP License.

Page 2: 流行应用的加密算法 实现缺陷与利用 - OWASP · 流行应用的加密算法 实现缺陷与利用 ... 加密算法基础 IV:初始化向量,一次一密,无须保密

Ab MAbout Me2001年创建安全组织幻影

2005年加入阿里巴巴

2008年加入阿里云2008年加入阿里云

微博:t.qq.com/aullik5

Blog:hi.baidu.com/aullik5

Book:《完美防线》

2

Page 3: 流行应用的加密算法 实现缺陷与利用 - OWASP · 流行应用的加密算法 实现缺陷与利用 ... 加密算法基础 IV:初始化向量,一次一密,无须保密

当渗透测试遇到当渗透测试遇到…ctk=moVQoAbeoXAtdR3BHGRFVA&chk=50f059614bb2977a9

dda630cd727277a 50067753dda630cd727277a-50067753

ID=5bfb08d687b3dee5:T=1303616991:S=ALNI_MZ46CtBJfBaUSGkdUlJmLEyTfwgPQ

http://passport.baidu.com/center?

auth=ead603c8bb7d4ea68f2812a497aa7f5c40c6eb438b3da9e1d8b5b3de6a82f30b7a3b

3

Page 4: 流行应用的加密算法 实现缺陷与利用 - OWASP · 流行应用的加密算法 实现缺陷与利用 ... 加密算法基础 IV:初始化向量,一次一密,无须保密

密文分析技巧 编码分析密文分析技巧:编码分析Base64:

Hex:ead603c8bb7d4e……

= \xea\xd6\x04\xc8\xbb\x7d\x4e…… \xea\xd6\x04\xc8\xbb\x7d\x4e……

4

Page 5: 流行应用的加密算法 实现缺陷与利用 - OWASP · 流行应用的加密算法 实现缺陷与利用 ... 加密算法基础 IV:初始化向量,一次一密,无须保密

密文分析技巧 密文长度密文分析技巧:密文长度Stream cipher: 任意长度p

Block cipher:

5

Page 6: 流行应用的加密算法 实现缺陷与利用 - OWASP · 流行应用的加密算法 实现缺陷与利用 ... 加密算法基础 IV:初始化向量,一次一密,无须保密

密文分析技巧 模式分析密文分析技巧:模式分析ECB-mode:

明文改变1字节,密文只改变1个分组长度

CBC-mode:

文改变 字节 密文完全改变明文改变1字节,密文完全改变

6

Page 7: 流行应用的加密算法 实现缺陷与利用 - OWASP · 流行应用的加密算法 实现缺陷与利用 ... 加密算法基础 IV:初始化向量,一次一密,无须保密

在开发者眼中在开发者眼中1. 加密算法第三方实现libraryy

2. 性能

3. 安全性 – 特指密钥长度

7

Page 8: 流行应用的加密算法 实现缺陷与利用 - OWASP · 流行应用的加密算法 实现缺陷与利用 ... 加密算法基础 IV:初始化向量,一次一密,无须保密

常见错误选择常见错误选择1. 使用哈希算法代替加密算法

2. 哈希算法不使用salt

3. 使用时间函数代替伪随机数算法

4. 不了解一些密码学攻击,导致使用错误

55. ……

8

Page 9: 流行应用的加密算法 实现缺陷与利用 - OWASP · 流行应用的加密算法 实现缺陷与利用 ... 加密算法基础 IV:初始化向量,一次一密,无须保密

加密算法简介加密算法简介

分组加密算法分组加密算法

流密码流密码

9

Page 10: 流行应用的加密算法 实现缺陷与利用 - OWASP · 流行应用的加密算法 实现缺陷与利用 ... 加密算法基础 IV:初始化向量,一次一密,无须保密

加密算法基础加密算法基础IV:初始化向量,一次一密,无须保密

加密模式 ECB CBC CFB OFB CTR加密模式 :ECB、CBC、CFB、OFB、CTR

分组长度:Blocksize

密钥 :KEY,须保密,有时对长度有要求

10

Page 11: 流行应用的加密算法 实现缺陷与利用 - OWASP · 流行应用的加密算法 实现缺陷与利用 ... 加密算法基础 IV:初始化向量,一次一密,无须保密

Ciphertext only

Chosen ciphertext

Known plaintext

Attack

ciphertextplaintext

……Chosen plaintext

11

Page 12: 流行应用的加密算法 实现缺陷与利用 - OWASP · 流行应用的加密算法 实现缺陷与利用 ... 加密算法基础 IV:初始化向量,一次一密,无须保密

攻击分组加密算法攻击分组加密算法

12

Page 13: 流行应用的加密算法 实现缺陷与利用 - OWASP · 流行应用的加密算法 实现缺陷与利用 ... 加密算法基础 IV:初始化向量,一次一密,无须保密

ECB模式ECB模式

13

Page 14: 流行应用的加密算法 实现缺陷与利用 - OWASP · 流行应用的加密算法 实现缺陷与利用 ... 加密算法基础 IV:初始化向量,一次一密,无须保密

攻击ECB模式攻击ECB模式

14

Page 15: 流行应用的加密算法 实现缺陷与利用 - OWASP · 流行应用的加密算法 实现缺陷与利用 ... 加密算法基础 IV:初始化向量,一次一密,无须保密

CBC模式CBC模式

15

Page 16: 流行应用的加密算法 实现缺陷与利用 - OWASP · 流行应用的加密算法 实现缺陷与利用 ... 加密算法基础 IV:初始化向量,一次一密,无须保密

Padding OraclePadding:PKCS#5g

Oracle:预测

一种类似于“盲注”的

“边信道攻击”“边信道攻击”

16

Page 17: 流行应用的加密算法 实现缺陷与利用 - OWASP · 流行应用的加密算法 实现缺陷与利用 ... 加密算法基础 IV:初始化向量,一次一密,无须保密

攻击流密码攻击流密码

17

Page 18: 流行应用的加密算法 实现缺陷与利用 - OWASP · 流行应用的加密算法 实现缺陷与利用 ... 加密算法基础 IV:初始化向量,一次一密,无须保密

流密码流密码

18

Page 19: 流行应用的加密算法 实现缺陷与利用 - OWASP · 流行应用的加密算法 实现缺陷与利用 ... 加密算法基础 IV:初始化向量,一次一密,无须保密

R d K A kReused Key AttackE(A) = A xor CE(B) B CE(B) = B xor C

E(A) xor E(B) = (A xor C) xor (B xor C)A B C C= A xor B xor C xor C

= A xor B

E(A) xor E(B) = A xor B

19

Page 20: 流行应用的加密算法 实现缺陷与利用 - OWASP · 流行应用的加密算法 实现缺陷与利用 ... 加密算法基础 IV:初始化向量,一次一密,无须保密

PHPWi d S C d ()PHPWind StrCode()

for ($i = 0; $i < $strLen; $i++) {for ($i = 0; $i < $strLen; $i++) {

$k = $i % $keyLen;

$code .= $string[$i] ^ $key[$k];

}

20

}

Page 21: 流行应用的加密算法 实现缺陷与利用 - OWASP · 流行应用的加密算法 实现缺陷与利用 ... 加密算法基础 IV:初始化向量,一次一密,无须保密

PHPWi d验证码生成过程PHPWind验证码生成过程ck.php,验证码字符集:

$list = 'BCEFGHJKMPQRTVWXY2346789';$list = BCEFGHJKMPQRTVWXY2346789 ;

"1315107631"."\t\t".md5("73669"."1315107631")

时间戳 时间戳验证码

21

Page 22: 流行应用的加密算法 实现缺陷与利用 - OWASP · 流行应用的加密算法 实现缺陷与利用 ... 加密算法基础 IV:初始化向量,一次一密,无须保密

获取验证码获取验证码

22

Page 23: 流行应用的加密算法 实现缺陷与利用 - OWASP · 流行应用的加密算法 实现缺陷与利用 ... 加密算法基础 IV:初始化向量,一次一密,无须保密

设置C ki设置Cookie

23

Page 24: 流行应用的加密算法 实现缺陷与利用 - OWASP · 流行应用的加密算法 实现缺陷与利用 ... 加密算法基础 IV:初始化向量,一次一密,无须保密

破解任意验证码密文思路破解任意验证码密文思路已知:

明文1 = 时间戳1 + md5(验证码1 + 时间戳1) A明文1 = 时间戳1 + md5(验证码1 + 时间戳1)     A

密文1                                                                 E(A)⊕

⊕密文2                                                                 E(B)

求解 ‖

求解: ‖

明文2 = 时间戳2 + md5(验证码2 + 时间戳2) B明文2   时间戳2 + md5(验证码2 + 时间戳2)     B

MD5 Rainbow Table !

24

Page 25: 流行应用的加密算法 实现缺陷与利用 - OWASP · 流行应用的加密算法 实现缺陷与利用 ... 加密算法基础 IV:初始化向量,一次一密,无须保密

C k It!Crack It!

25

Page 26: 流行应用的加密算法 实现缺陷与利用 - OWASP · 流行应用的加密算法 实现缺陷与利用 ... 加密算法基础 IV:初始化向量,一次一密,无须保密

Bi fli i A kBit-flipping Attack

E(A) xor E(B) = A xor B

A xor E(A) xor B = E(B)

26

Page 27: 流行应用的加密算法 实现缺陷与利用 - OWASP · 流行应用的加密算法 实现缺陷与利用 ... 加密算法基础 IV:初始化向量,一次一密,无须保密

万能钥匙万能钥匙

Global php: gdconfirm()Global.php: gdconfirm()

Common.php: safecheck()

27

Page 28: 流行应用的加密算法 实现缺陷与利用 - OWASP · 流行应用的加密算法 实现缺陷与利用 ... 加密算法基础 IV:初始化向量,一次一密,无须保密

构造永久验证码构造永久验证码Bit-flipping Attack: pp g

A xor E(A) xor B = E(B)

构造时间:

$timestamp– $cookieData[0] < 0

28

Page 29: 流行应用的加密算法 实现缺陷与利用 - OWASP · 流行应用的加密算法 实现缺陷与利用 ... 加密算法基础 IV:初始化向量,一次一密,无须保密

永久验证码永久验证码

29

Page 30: 流行应用的加密算法 实现缺陷与利用 - OWASP · 流行应用的加密算法 实现缺陷与利用 ... 加密算法基础 IV:初始化向量,一次一密,无须保密

Di ! th d ()Discuz! authcode()$$keyc:IV

$ckey length:IV长度$ckey_length:IV长度

$keya: 产生加密密钥y

$keyb: HMAC的key

验证时间有效性

30

Page 31: 流行应用的加密算法 实现缺陷与利用 - OWASP · 流行应用的加密算法 实现缺陷与利用 ... 加密算法基础 IV:初始化向量,一次一密,无须保密

th d ()分析authcode()分析IV

79uz_d57e_auth=d08fwJQZGV/999z5qNLk5OIofp9dd2qDkWXVeg1RFQGwKicuAMaih5M5aefxp9dd2qDkWXVeg1RFQGwKicuAMaih5M5aefx0ycOfLAc2jtZL/y3J7TpUh2GsAPl;

000000000067c38ee9eca0b04dccccbbbb

时间戳 HMAC 明文时间戳(10bytes) (16bytes)

明文(xx bytes)

31

Page 32: 流行应用的加密算法 实现缺陷与利用 - OWASP · 流行应用的加密算法 实现缺陷与利用 ... 加密算法基础 IV:初始化向量,一次一密,无须保密

th d ()算法安全分析authcode()算法安全分析Reused Key Attack:y

IV一次一密,导致无法攻击成功

XOR_KEY = fn(IV, KEY)

Bit-flipping Attack:

致 法构造 意密文HMAC导致无法构造任意密文

HMAC f (Pl i t t KEY)HMAC = fn(Plaintext, KEY)

32

Page 33: 流行应用的加密算法 实现缺陷与利用 - OWASP · 流行应用的加密算法 实现缺陷与利用 ... 加密算法基础 IV:初始化向量,一次一密,无须保密

th d () k IVauthcode() weak IVIV默认长度为4(当前Discuz!版本):

使用穷举法建立IV字典(a z0 9):使用穷举法建立IV字典(a-z0-9):

364 = 1,679,616 个IV36  1,679,616 个IV

当两次加密IV相同时,加密密钥也相同-- 在WEP破解中,24bit IV在5小时遍历完

33

Page 34: 流行应用的加密算法 实现缺陷与利用 - OWASP · 流行应用的加密算法 实现缺陷与利用 ... 加密算法基础 IV:初始化向量,一次一密,无须保密

POCPOC:已知:

验证:crack($cipher2) == $plaintext2

34

Page 35: 流行应用的加密算法 实现缺陷与利用 - OWASP · 流行应用的加密算法 实现缺陷与利用 ... 加密算法基础 IV:初始化向量,一次一密,无须保密

POCPOC:

35

Page 36: 流行应用的加密算法 实现缺陷与利用 - OWASP · 流行应用的加密算法 实现缺陷与利用 ... 加密算法基础 IV:初始化向量,一次一密,无须保密

收集密文与IV收集密文与IV

36

Page 37: 流行应用的加密算法 实现缺陷与利用 - OWASP · 流行应用的加密算法 实现缺陷与利用 ... 加密算法基础 IV:初始化向量,一次一密,无须保密

Bi thd Att kBirthday Attack30人中

任意2人生日在特定一天(如11.8号):

1 − (364 / 365)30 ≈ 7.9%

意 人生 相任意2人生日相同:

接近 70%接近 70%

37

Page 38: 流行应用的加密算法 实现缺陷与利用 - OWASP · 流行应用的加密算法 实现缺陷与利用 ... 加密算法基础 IV:初始化向量,一次一密,无须保密

38

Page 39: 流行应用的加密算法 实现缺陷与利用 - OWASP · 流行应用的加密算法 实现缺陷与利用 ... 加密算法基础 IV:初始化向量,一次一密,无须保密

攻击 th d ()?攻击authcode()?Reused Key Attack:y

IV一次一密,导致无法攻击成功

可以遍历IV,找到相同IV从而攻击成功

例:窃取Cookie后解密密文

Bit-flipping Attack:

HMAC导致无法构造任意密文HMAC导致无法构造任意密文

仍然是安全的39

仍然是安全的

Page 40: 流行应用的加密算法 实现缺陷与利用 - OWASP · 流行应用的加密算法 实现缺陷与利用 ... 加密算法基础 IV:初始化向量,一次一密,无须保密

其他利用方式?其他利用方式?

Discuz! Getwebshell:

http://www oldjun com/blog/index php/archives/76/http://www.oldjun.com/blog/index.php/archives/76/

Phpcms cookie注射:

http://www.80vul.com/phpcms/phpcms_sys_auth.txt

……

40

Page 41: 流行应用的加密算法 实现缺陷与利用 - OWASP · 流行应用的加密算法 实现缺陷与利用 ... 加密算法基础 IV:初始化向量,一次一密,无须保密

Summary &Summary & ConclusionConclusion

Page 42: 流行应用的加密算法 实现缺陷与利用 - OWASP · 流行应用的加密算法 实现缺陷与利用 ... 加密算法基础 IV:初始化向量,一次一密,无须保密

开发建议开发建议

不要使用ECB模式不要使用ECB模式

不要使用流密码

使用CBC模式的AES-256,或Blowfish

不要使用相同的KEY做不同的事情不要使用相同的KEY做不同的事情

注意IV的随机性注意IV的随机性

使用HMAC-SHA512代替MD5

42

Page 43: 流行应用的加密算法 实现缺陷与利用 - OWASP · 流行应用的加密算法 实现缺陷与利用 ... 加密算法基础 IV:初始化向量,一次一密,无须保密

Thanks!