你的前端加密真的"加密"了吗?

在我们等保应用系统测评中,有这样一个条款

测评指标当进行远程管理时, 应采取必要措施防止鉴别信息在网络传输过程中被窃听。

测评实施:应核查是否采用加密等安全方式对系统进行远程管理, 防止鉴别信息在网络传输过程中被窃听。

并且在《网络安全等级保护测评高风险判定指引》中,如果是互联网应用,会被列为的高风险问题。也就是说这条不符合的话,必须进行整改。

简单来说,这条条款呢其实就是要求我们要有措施,去保证应用系统鉴别数据在网络传输过程中看不懂

那么要让数据看不懂,最常见的方式就是进行加密。一种是采用加密协议进行通信,如使用HTTPS;还有一种则是单独使用对应的密码算法,将鉴别数据进行加密传输。

这里就不讨论使用HTTPS协议的系统,我们主要看采用HTTP协议的应用系统,都是怎么做的呢?先看看下面的例子:

1. 使用编码

我们在下图呢,我们输入admin/admin,再通过浏览器自带的F12,查看到了其鉴别数据在网络传输过程中的内容

可以看到改系统的鉴别数据在网络通信中传输的值为 YWRtaW4: 。诶,那么有小白同学可能就有疑问了,这已经改变了他原来的数据,这个数据我也看不懂啊,是不是这样就可以判断该条符合了?

此时有经验的老师傅一看,这明明就是Base64编码嘛,我可以很快的就给你解密出来。(注意:这里需要将:改成=,个人猜测如果后面跟的是=,我们可能就分不清这个=是赋值还是Base64编码中的一部分,所以用:作为代替)

编码是将原始数据转化为一种特定格式或规则的过程,目的是为了方便存储、传输和处理数据。通常情况下,编码是可以逆转的。

以Base64编码为例,它将二进制数据转换为可见字符形式。通过解码操作,我们可以将Base64编码后的数据重新还原回原始的二进制形式。

通过前端JS,也确实找到了对应Base64编码的对应参数

所以如果使用编码的方式,这条是不能判为符合的,同样是高风险问题,需要进行整改。

2. 使用哈希算法

我们同样测试另外一个应用系统,在登录界面输入admin/admin

发现此时传输的是 21232f297a57a5a743894a0e4a801fc3 这串字符。这串字符想必对于网络安全从业人员肯定不陌生,是admin的MD5值。

查看前端JS确实使用的也是MD5

MD5是一种单向散列函数,它将任意长度的数据转换为固定长度的摘要值。在密码传输中,通常会将密码使用MD5算法进行摘要计算后再传输。

然而,MD5算法存在一些安全问题。首先,虽然MD5算法是单向的,无法将摘要值还原到原始数据。这意味着即使传输被截获,攻击者也无法直接获取密码。但是,由于MD5的摘要值是固定长度的,攻击者可以进行穷举搜索,通过尝试大量的可能性与预先计算的MD5值进行对比,找到相应的密码。

此外,MD5算法已经被发现存在碰撞漏洞,即两个不同的数据可以生成相同的MD5摘要值。通过这个漏洞,攻击者可以找到与目标密码相同的MD5摘要值,绕过密码验证。

通过上述我们也看到了通过彩虹表可以撞库出原数据,所以如果仅采用MD5值进行传输,也是做不到符合要求的。一般我们可以通过加随机数的方式,Salt是一种随机生成的字符串,它被添加到原始密码中,然后再进行MD5摘要计算。

3. 使用加密算法

接下来我们再看看采用加密算法进行传输的例子。

首先我们抓取到了目标提交的password的数值y0HUmqPOaHjj5qB5MKYG6Q==

乍一看,如果不熟悉相关密码算法的童鞋会发现这串数字使用何种算法并不明显,但显然是不同于我们上述两种的。这里呢,我们首先就要通过前端JS去寻找其对应的加密算法。下面简单说一说一般怎么去寻找:

根据常见的对称加密和非对称加密,我们有可能在所有的文件中寻找到包含关键字key、Crypto、AES、DES、RSA、parse、encode、encrypt等等的内容,甚至可以直接搜索加密,也许开发人员会为你提供一些相关的注释。

这里我们直接F12来到调试器,分别输入对应的关键字进行查找,发现了AES的关键词。

在AES这串字符的附近可以找到对应的key和iv值(已做打码处理)

然后我们将key和iv填入对应的位置,然后将密文贴入,即可解密成功

所以这种情况能算是对鉴别数据进行了加密吗?假设黑客有手段截获了你的登录时的数据包,此时你的鉴别信息字段,其实就类似"y0HUmqPOaHjj5qB5MKYG6Q=="这串字符,但对应算法以及key等内容,可以直接从前端获取,是不是就类似于明文呢?

笔者因为技术能力有限,不清楚对称加密算法是否能将加密相关敏感信息进行处理,使攻击者无法直接通过前端JS来查询到对应的key值与iv量。但从上文来看,这种设计肯定是存在一定的安全问题的。

建议使用非对称加密,非对称加密算法使用公钥和私钥,公钥用于加密数据,私钥用于解密数据。将公钥嵌入前端代码中,使用私钥在后端进行解密操作。由于私钥保留在后端,前端暴露公钥不会导致加密的安全性问题。

或者使用HTTPS协议,通过使用安全的传输协议HTTPS,可以对通信进行加密,确保数据在传输过程中的机密性和完整性。这样,即使鉴别信息在传输过程中被截获,也无法被解密而得到明文信息。

以上就是本期的主要内容,如果有任何不正确的地方,请指出并补充正确的信息,感谢您的观看。

来源:等保不好做啊

原文链接:,转发请注明来源!