『杂项』如何让 ZIP 文件存在两个正确解压密码?

admin 2023年6月6日12:42:38评论46 views字数 1437阅读4分47秒阅读模式
『杂项』如何让 ZIP 文件存在两个正确解压密码?

点击蓝字,关注我们


日期:2023-04-04
作者:H4y0
介绍:使用AES-256生成ZIP密码时,如果密码太长,则会使用PBKDF2算法对密码进行处理。

0x00 前言

在某社交平台刷到了Positive Technologies的一位网络安全研究员分享的小实验,加密的ZIP文件同时存在两个正确的密码,并且都可以完成文件的提取。

0x01 复现

1.1 问题描述

我们先来看一下这位安全研究员是怎样描述这个问题的。

『杂项』如何让 ZIP 文件存在两个正确解压密码?

大体就是加密时使用一个长度足够大的密码:Nev1r-G0nna-G2ve-Y8u-Up-N5v1r-G1nna-Let-Y4u-D1wn-N8v4r-G5nna-D0sert-You

解密时除了这个长密码之外还可以使用密码:pkH8a0AqNbHcdw8GrmSp

1.2 本地复现

  • 使用下列命令创建一个加密的ZIP文件。
7z a x.zip /etc/passwd -mem=AES256 -p
  • 使用和描述一样的长密码作为密码。

Nev1r-G0nna-G2ve-Y8u-Up-N5v1r-G1nna-Let-Y4u-D1wn-N8v4r-G5nna-D0sert-You

『杂项』如何让 ZIP 文件存在两个正确解压密码?

  • 我们来使用描述中的短密码pkH8a0AqNbHcdw8GrmSp来提取文件。不出意外的成功提取。

『杂项』如何让 ZIP 文件存在两个正确解压密码?
  • 当然,使用原本的长密码也一样可以成功提取ZIP文件。

0x02 分析

造成同时存在两个密码可以提取ZIP文件的就是AES-256模式。由于ZIP使用PBKDF2,如果密码长度大于64字节,ZIP格式会使用PBKDF2算法对输入的密码进行hash处理,这个新的hash会成为ZIP的实际密码。

在复现中,使用短密码pkH8a0AqNbHcdw8GrmSp实际上是长密码SHA1-hash对应的ASCII码表示。

长密码的SHA1-checksum = 706b4838613041714e62486364773847726d5370,此校验和在转换为ASCII时产生pkH8a0AqNbHcdw8GrmSp

不过在对ZIP文件进行加密解密的过程中,只有密码长度大于64位时,才会对该密码进行hash处理,解密时如果实用长度大于64的长密码,则会对密码进行hash处理后与加密时产生的hash值进行比较,如果使用短密码,则会将此密码直接与存储的密码进行比较,此时存储的密码为加密时产生的hash值。短密码可以通过hash值进行16进制转字符串获得。

也就是说只有在知道长密码的情况下才能获得短密码,这一特性对于ZIP文件的s安全性并无不良影响。具体流程可总结如下图。

『杂项』如何让 ZIP 文件存在两个正确解压密码?

0x03 总结

这位安全研究员说的ZIP存在后门只是子虚乌有。实际上是PBKDF2使用基于hash的身份验证代码(HMAC),产生了HMAC碰撞,当密码长度足够长时便会形成密码对,造成了所谓的两个密码。

『杂项』如何让 ZIP 文件存在两个正确解压密码?


免责声明:本文仅供安全研究与讨论之用,严禁用于非法用途,违者后果自负。

『杂项』如何让 ZIP 文件存在两个正确解压密码?

宸极实验室隶属山东九州信泰信息科技股份有限公司,致力于网络安全对抗技术研究,是山东省发改委认定的“网络安全对抗关键技术山东省工程实验室”。团队成员专注于 Web 安全、移动安全、红蓝对抗等领域,善于利用黑客视角发现和解决网络安全问题。

团队自成立以来,圆满完成了多次国家级、省部级重要网络安全保障和攻防演习活动,并积极参加各类网络安全竞赛,屡获殊荣。

对信息安全感兴趣的小伙伴欢迎加入宸极实验室,关注公众号,回复『招聘』,获取联系方式。

原文始发于微信公众号(宸极实验室):『杂项』如何让 ZIP 文件存在两个正确解压密码?

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年6月6日12:42:38
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   『杂项』如何让 ZIP 文件存在两个正确解压密码?http://cn-sec.com/archives/1656490.html

发表评论

匿名网友 填写信息