破解之美:利用ECB加密缺陷突破cookie加密

密码学诞生于古人类社会,例如古希腊斯巴达的密码棒、欧洲中世纪时期的密码栏、阿伯提发明的密码盘等。古代的密码学是一门加密隐蔽的学科,而现代密码学定义为加密与解密,研究在分组密码与流密码及其应用。一直以来加密与解密都在进行着激烈的对抗。加密者想尽办法让加密得到的信息不容易被破解,而解密者则绞尽脑汁不断去尝试还原加密数据。

WEB应用中也经常应用到加密,最常见的就是cookie加密,cookie加密主要是为了防止cookie被篡改。一般来说,常见的加密技术有MD5。CBC等,NSTRT在项目中曾遇到过使用ECB加密技术,并利用该算法的缺陷成功地解密出cookie信息,本期NSTRT将针对分组密码中的ECB加密模式的缺陷结合一个简单的实例进行分析。

0x1 ECB入门简介

首先,在介绍ECB模式之前,我们先大概了解下什么叫做分组密码。分组密码将需要进行加密的明文序列划分为若干固定长度的分组,然后使用固定长度的密钥加密固定长度的分组得到等长的加密分组。

ECB(Electronic CodeBook,电码本)模式是分组密码的一种最基本的工作模式。在该模式下,待处理信息被分为大小合适的分组,然后分别对每一分组独立进行加密或解密处理。其加、解密过程如下图:

ECB模式作为分组加密的一种基本工作模式,具有操作简单,易于实现的特点。同时由于其分组的独立性,利于实现并行处理,并且能很好地防止误差传播。

但ECB还有一致命缺陷,相同的明文块会加密成相同的密文。因此,它不能很好的隐藏数据模式。因为ECB的每一块都是使用完全相同的方式进行界面解密,这样就使得信息不能受到完全的保护,容易遭受统计分析攻击和重放攻击。

下图三幅图中,第一幅是原图,第二幅是经过ECB加密的图,第三幅是是使用了伪随机的非ECB加密图。我们可以看到使用ECB模式加密并不能对数据起到完全的加密作用,图中企鹅的轮廓形状还是可以看出来的。

0x2 实际样例

下面我们以一个具体的例子对ECB模式的缺陷进行分析。应用程序使用ECB来对用户提供的信息进行加密,用户在登录后只使用ECB加密后的cookie来确保认证。

测试的应用程序中cookie使用用户名做ECB加密,然后base64编码。ECB加密以8个字节为一块进行分组加密。我们来看看ECB模式会对认证造成什么样的影响,以及怎样利用这个缺陷去进行攻击[hw3] ,在这个例子中我们会尝试在不知道admin密码的情况下利用ECB加密模式的缺陷去登录admin帐号。

首先分别注册用户test1、test2,密码均为password,分别查看cookie。

test1的cookie:auth=vHMQ%2FNq9C3MHT8ZkGeMr4w%3D%3D

test2的cookie:auth=Mh%2BJMH1OMhcHT8ZkGeMr4w%3D%3D

很明显cookie已经做过了base64编码了,我们先将它们解码一下。下面进行的解码是通过ruby命令实现的。

test1:\xBCs\x10\xFC\xDA\xBD\vs\aO\xC6d\x19\xE3+\xE3
test2: 2\x1F\x890}N2\x17\aO\xC6d\x19\xE3+\xE3

我们可以看到解码出来的数据都包含一串相同的部分:\aO\xC6d\x19\xE3+\xE3 ,接下来,我们尝试通过利用ECB密码的缺陷,直接通过修改cookie登录admin账号 。

现在,我们创建一个用户名为aaaa aaaa aaaa aaaa aaaa的帐号。这个帐号的cookie为auth=GkzSM2vKHdcaTNIza8od1wS28inRHiC2GkzSM2vKHdcaTNIza8od1ys96EXmirn5

进行解码出来得到:

\x1AL\xD23k\xCA\x1D\xD7\x1AL\xD23k\xCA\x1D\xD7\x04\xB6\xF2)\xD1\x1E\xB6\x1AL\xD23k\xCA\x1D\xD7\x1AL\xD23k\xCA\x1D\xD7+=\xE8E\xE6\x8A\xB9\xF9

可以看到,上面解码后的cookie包含有重复的\x1AL\xD23k\xCA\x1D\xD7。我们猜测这是对aaaaaaaa进行ECB加密得到的结果。

我们再注册一个帐号,用户名为aaaaaaaa admin(即8个a后面再跟着admin),密码任意。注册完后,查看这个帐号的cookie,为:auth=GkzSM2vKHdeNfdXZwrPF0A%3D%3D。

对这个cookie进行解码。

从解码结果我们可以看到\x1AL\xD23k\xCA\x1D\xD7这一部分是和上一步aaaaaaaaaaaaaaaaaaaa这个帐号的cookie解码得到的重复出现的一部分是相同的。这部分实际上是对aaaaaaaa这8个字节进行ECB加密的结果。我们把\x1AL\xD23k\xCA\x1D\xD7这部分去掉,只剩下admin加密的结果,取\x8D}\xD5\xD9\xC2\xB3\xC5\xD0编码一下 。

我们把编码后的base64码作为cookie提交。这时我们已经成功以admin的身份登录了。

0x3 总结

从各种各样的数据泄漏安全事件中,我们可以看到数据已经成为了黑客攻击的一个主要目标。同时,数据也成为了企业重点保护对象。为了防止黑客攻击,对数据进行加密是非常必要的。但仅仅考虑对数据进行加密是远远不够的,我们还应该进一步考虑所采用的数据加密算法是否安全。ECB加密的缺点在于同样的明文组会得到同样的密文组,相对于ECB模式来说,CBC模式则较安全,攻击者不易发起主动攻击,同时,CBC(密码分组链接)适合于传输长度较长的报文,依据的是SSL、IPSEC的标准。

本文版权属于NSTRT团队,由TRT团队成员夏殇攒写。如有兴趣可关注我们的微信公众号trt917,我们会定期分享一些信息安全相关知识,希望能够对大家有所帮助。

[作者/NSTRT(团队账号),本文属FreeBuf原创奖励计划,未经许可禁止转载]

原文发布于微信公众号 - FreeBuf(freebuf)

原文发表时间:2015-01-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏IMWeb前端团队

HTTPS科普扫盲帖

本文作者:IMWeb 陈映平 原文出处:IMWeb社区 未经同意,禁止转载 为什么需要https HTTP是明文传输的,也就意味着,介于发送端、接收端...

89580
来自专栏FreeBuf

解码内置不安全“加密芯片”的勒索软件Gomasom

? 前言 最近,我们发现了一种新型的勒索软件,因其使用了gmail作为邮箱服务器,故被命名为Gomasom。当用户运行了该勒索软件时,用户的文件会被加密,加密...

22880
来自专栏Keegan小钢

读《图解密码技术》(三):密钥、随机数和应用技术

最后一篇了,如果还没看过前两篇的,最好先翻回去看看,因为这最后一篇的内容是建立在前两篇的基础之上的。本篇的内容包括密钥、随机数、PGP、SSL/TLS,最后再讲...

18210
来自专栏程序员宝库

也许这样理解 HTTPS 更容易

摘要:本文尝试一步步还原HTTPS的设计过程,以理解为什么HTTPS最终会是这副模样。但是这并不代表HTTPS的真实设计过程。在阅读本文时,你可以尝试放下已有的...

376130
来自专栏Keegan小钢

读《图解密码技术》(二):认证

原创文章,转载请注明:转载自Keegan小钢 并标明原文链接:http://keeganlee.me/post/reading/20160705 微信订阅号:k...

11220
来自专栏后台开发

TLS协议学习笔记

说起TLS(Transport Layer Security 传输层安全协议),可能有点陌生,但是说起HTTPS,大家应该都知道,我们现在浏览网页基本上都是HT...

25550
来自专栏醒者呆

应用密码学初探

关键字:密码学,密码算法,单向哈希函数,对称加密,非对称加密,数字签名,数字证书,Merkle树,同态加密 在计算机科学中,密码学常常用来解决某些特定的难...

48380
来自专栏北京马哥教育

加密传输原理

数字签名,就是通过在数据单元上附加数据,或对数据单元进行秘密变换,从而使接收者可以确认数据来源和完整性。简单说来,数字签名是防止他人对传输的文件进行破坏,以及确...

368100
来自专栏C/C++基础

常见解压缩软件与其zip格式

国外软件: WinRAR、WinZip、7Zip 、PKZip等。 国内软件:2345好压(HaoZip)、360压缩、快压(KuaiZip)等。

13920
来自专栏云加头条

浅析 HTTPS 与 SSL 原理

HTTPS 是指结合 HTTP 和 SSL 来实现网络浏览器和服务器之间的安全通信。HTTPS 被融合到当今网络操作系统和网络浏览器中,它依赖于网络服务器是否支...

2.8K10

扫码关注云+社区

领取腾讯云代金券