资讯详情

资讯详情

ZIP压缩包安全排查:从可疑文件名到恶意样本分析

简介“灰色项目.zip”压缩包内含一套Android应用工程源码使用Java开发并对代码进行了ProGuard混淆处理。从标签与文件构成来看属于技术探索中常说的“灰色”实践适合对Android反编译、代码加固及项目结构拆解感兴趣的开发者学习。包内共36个文件涵盖Java源码与class字节码、XML配置与界面布局、ProGuard混淆配置、APK及DEX打包产物还保留了Eclipse工程描述文件、类路径设置、项目属性以及少量说明文档和图标资源整体仅77KB是一个结构相当完整的迷你工程。目前已有1612人参与学习。解压后可直观对比Java源文件与混淆后字节码的差异查看核心清单声明的权限、资源布局以及混淆映射输出等关键内容有助于理解Android项目从源码编写、资源编译到DEX打包与代码混淆的完整链路也可作为分析同类“灰色”工程结构的入门参考尤其适合刚接触Android安全与逆向的读者动手拆解。1. “灰色项目.zip”这个文件名本身就是攻击的前置环节如果你收到过这样一个压缩包大概率不是第一次了。邮件附件、IM软件里的陌生人消息、论坛私信甚至网盘分享链接文件名往往就长这样“灰色项目.zip”、“副业资料.zip”、“内部渠道.zip”。名字越含糊越带诱惑力越容易让人手滑双击。我这次分析的样本就是一个朋友转过来的“灰色项目.zip”。他说是在一个“资源交流群”里下载的群里有人声称里面是“某平台漏洞合作方案”还贴了截图。截图当然是真的文件后缀也是老老实实的.zip但问题恰恰出在这里。ZIP是打包分发最通用的格式不管你是固件包、配置文件、软件安装包还是恶意程序都喜欢用它做外壳。HTC one m7线刷zip工具、中兴光猫配置文件解密工具、ST官方固件zip包到各种常见软件的分发包几乎全是zip格式所以看到zip就开始放松警惕是最大的问题。这篇文章我不打算只讲这一个样本怎么解析。我把整个处理过程拆成了一条完整链路收到可疑zip后先做什么、遇到密码保护怎么在合法授权下绕过、出现“could not find eocd”这类解压报错怎么修复、解压成功之后还要查什么。每一步我都会给出能直接复现的命令和思路适合运维、安全工程师也适合只是经常下载文件、想搞明白zip到底是怎么运作的普通用户。先做一个基本铺垫ZIP不是一个把文件“揉成一坨”的格式它更像一个自带索引的行李箱。每个文件在压缩包里都有独立的本地文件头Local File Header压缩包尾部还会写一条中央目录记录Central Directory再往后是结束记录EOCD。解压软件拿到zip后首先不是去解数据而是去尾部找EOCD读取目录偏移量再顺着索引挨个解出文件。理解了这个结构后面遇到“could not find eocd”“invalid zip archive”这类报错你就知道它在哪个环节挂掉了。2. 解压之前先做三轮信息侦察2.1 file命令确认“真身”很多人的习惯是拿到zip直接右键解压这在处理可疑文件时是大忌。我拿到“灰色项目.zip”后的第一个操作是在Linux环境下跑一条命令file 灰色项目.zip返回结果是Zip archive data, at least v2.0 to extract。这一步确认它确实是一个zip排除了“后缀伪装成zip但实际是其他格式”的情况。常见伪装后缀还包括把exe、scr、bat直接改名为zipfile命令能一眼识破。顺带提一句有些场景下你下载的zip后缀可能不是.zip比如多卷压缩包的分卷文件.z01它本身只是第一个分卷没有完整的中央目录和EOCD必须有.zip主文件才能解压。遇到“z01文件没有zip怎么办”这类问题根源就在这里——分卷文件只是躯壳不是完整压缩包。2.2 不落地查看压缩包内容清单第二步是列出压缩包内部的文件清单但先不解压。用unzip自带的列表模式unzip -l 灰色项目.zip这里能看出很多东西。一个正常的、用于分发的zip包文件名通常是可预期的比如“readme.txt”“install.sh”“项目计划书.pdf”。如果清单里有“资料.exe”“速看.bat”“结果.scr”之类带可执行属性的文件配合“灰色项目”这种模糊命名基本就是恶意样本的标准配置。我这次看到的清单里有一堆看起来正常的文件需求文档.docx、报价单.xlsx、演示视频.mp4还有几个.lnk快捷方式文件。注意.lnk是Windows快捷方式如果压缩包里混入了这种人畜无害的后缀却出现在一个“项目资源包”里说明攻击者打算用快捷方式触发命令执行这是一种很常见的社工手法。2.3 杀毒引擎与沙箱初筛别急着解压。把文件丢给杀毒引擎扫一遍我用的是VirusTotal上传扫描同时扔进Cuckoo沙箱跑了一个只读监听。扫描结果里有一个.lnk文件被标记为恶意命中的行为是“通过PowerShell下载远程脚本并执行”。到这里基本可以下一个判断这个“灰色项目.zip”是一个典型的钓鱼投递样本文件名中的“灰色项目”只是诱饵真正的目的是诱导用户解压后点击快捷方式进而执行远程脚本。这一步不展开讲恶意代码的具体实现但我想强调整个过程里我并没有双击过压缩包里的任何文件所有判断都来自列表观察和沙箱行为报告。这就是处置可疑zip的第一步纪律——不让样本在你的真实环境里获得执行机会。3. 带密码的zip在合法授权下如何移除密码3.1 先分清加密类型ZipCrypto与AES很多人遇到zip设置了密码第一反应就是找“zip密码移除工具”。市面上的百事牛zip密码恢复工具这类软件确实能办到但我想先讲清楚原理否则你只会点按钮不知道怎么选策略。ZIP的加密分两种主流实现传统ZipCrypto和AES加密。ZipCrypto是PKZIP 2.0时代的老算法基于一个12字节的加密头配合CRC32校验强度很低已知明文攻击或短密码爆破都很快。AES加密WinZip/7-Zip实现则使用AES-128/256安全性高很多纯暴力破解基本不现实。所以拿到一个加密zip第一步不是开破解工具而是确认它用的是哪种加密算法。Linux下用zipinfo查看zipinfo -v 加密.zipWindows上可以用7-Zip的高级模式7z l -slt 加密.zip输出里如果显示Encryption ZipCrypto说明还有暴力破解的余地如果显示AES-256那不用费劲了直接从字典里找弱密码或者回忆密码本身。3.2 字典爆破的完整命令确认加密方式是ZipCrypto之后我用fcrackzip做了第一轮字典测试fcrackzip -D -p /usr/share/wordlists/rockyou.txt -u 加密.zip参数含义-D指定字典模式-p接字典路径-u表示用解压校验来验证密码是否正确而不是只看CRC头。rockyou.txt是Kali等系统自带的大字典里面有1400万条常见密码。如果你的系统没有fcrackzip另一个更好用的路线是john the ripper配合zip2john工具zip2john 加密.zip hash.txt john --wordlist/usr/share/wordlists/rockyou.txt hash.txtzip2john会把zip的加密头信息提取成john能识别的hash格式然后直接跑字典。实测下来如果密码是纯数字或常见英文单词基本是秒出如果是“名字生日”这类组合运气好也在几分钟内。这里必须划出一条边界上述所有解密操作都只适用于你自己拥有、或明确获得授权处理的压缩包。拿着这套方法去破别人的加密文件法律风险由你自己负责。3.3 还没完伪加密文件的破解捷径还有一种情况很多人没意识到zip有一个“伪加密”机制。它只是在通用位标志general purpose bit flag的第0位做了标记告诉解压软件“这个文件加密了”但实际上数据并没有被真正加密甚至密码根本不存在。2019年前后很流行一种“zip无视密码直接解压”的玩法原理就是这个。处理方式也简单用十六进制编辑器打开zip找到中央目录中对应文件的general purpose bit flag字段把标志位的第0位从1改成0保存后再解压文件就直接出来了。检测伪加密最直接的方法是用7z l -slt看加密算法信息或者用binwalk -e去解析binwalk能识别zip内部结构并尝试自动提取有时候它提取出来的内容根本不经过密码校验。4. “could not find eocd”报错一次完整的损坏ZIP修复过程4.1 EOCD是什么为什么找不到它就打不开热搜词里有一批很典型的问题导入失败caused by: invalid zip archive: could not find eocd、failed to copy spatial iop zip。如果你在导入资源包、安装软件时见过类似报错说明zip的尾部的EOCD记录出了问题。EOCD的全称是End of Central Directory Record它是zip文件的最后22个字节不算注释区。解压工具拿到文件后会在文件末尾搜索EOCD的固定签名PK\x05\x06二进制为50 4B 05 06读取中央目录的大小和偏移量进而定位所有文件条目。如果找不到EOCD解压器就不知道这个压缩包里到底有哪些文件、数据从哪里开始于是直接报错。EOCD丢失的常见原因有三个下载传输中断导致文件被截断、某些网盘或聊天软件在传输时对二进制文件做了二次处理、以及文件被人为拼接或修改过。4.2 排查链路从下载方式到分区表我在分析另一个损坏样本时遇到的就是这个经典报错。当时拿到一个从某网盘下载的固件zip解压时提示End-of-central-directory signature not found。排查链路是这样的第一步确认文件大小是否和源文件一致。如果源页面标注的是1.2GB本地只有800MB基本就是下载中断重新下载即可。第二步检查文件末尾是否真的有EOCD签名tail -c 22 损坏.zip | xxd正常情况末尾22字节的开头应该是50 4b 05 06。如果看到的是50 4b 07 08说明文件末尾是一个数据描述符签名而不是EOCD签名压缩包大概率在写入过程中被中断了。第三步用zip -FF做一次自修复zip -FF 损坏.zip --out 修复.zip这条命令会扫描整个文件中残存的本地文件头PK\x03\x04尝试重建中央目录和EOCD。实测下来对于单纯丢失中央目录的zip成功率很高对于物理截断的zip只要能扫到完整的本地文件头也能抢救出大部分文件。如果zip -FF也不行还有一个更底层的方法用二进制搜索工具在文件里查50 4B 05 06找到之后手工补上一份EOCD结构。EOCD只有22字节包含磁盘编号、目录条目数、目录字节大小和目录起始偏移量。只要从文件里找到中央目录的起点这些字段就能填上。这个方法比较硬核一般场景用不上但遇到重要数据且没有别的备份时值得一试。4.3 顺带说一句 failed to copy spatial iop zip热搜里的failed to copy spatial iop zip是SolidWorks安装时非常典型的报错。它本质上是安装程序在解压临时zip包时失败常见诱因包括下载的安装包被安全软件拦截了一部分、安装目录权限不足、或者临时目录空间满了。处理方法不是去修zip而是先关掉安全软件重跑安装程序再检查C盘临时空间最后确认安装包完整性问题。这和上面讲的EOCD修复不是一个层面的东西但共享同一个排查思路——先判断文件是不是完整、能不能解析再去折腾其他组件。5. 解压成功不等于安全内容审计才是重头戏5.1 隐藏文件与后缀欺骗假设你已经成功解压了一个可疑zip是不是就完事了远没有。解压之后第一步先看隐藏文件ls -la 解压目录很多恶意样本会把真正要执行的脚本或程序放在隐藏目录里或者文件名前加一个点Unix系来降低存在感。Windows上则需要打开“显示隐藏文件”才能看到同类内容。5.2 zip slip路径穿越的检查方法当年很火的zip slip漏洞至今还在被利用。问题出在某些解压实现没有校验压缩包内文件名是否包含../攻击者可以在zip里写入../../shell.php这样的条目解压时直接跳出目标目录写入任意路径。我检查可疑zip时有个习惯直接用unzip列出路径unzip -l 可疑.zip | grep -E \.\./?../../evil.sh这种路径一旦出现说明这个压缩包是恶意构造的。即使你没有发现明显恶意文件这类“跳出目录”的压缩包也一律按恶意处理。渗透测试里这个技巧被用来写webshell普通用户误解压则可能让攻击者覆盖系统目录里的文件。5.3 脚本类payload的快速识别再看回“灰色项目.zip”的样本。解压到沙箱目录后我逐个查看了那几个.lnk文件的内容。.lnk本质是二进制文件但用strings能提取出目标程序路径和参数strings 文档.lnk | grep -i powershell结果里出现了powershell.exe -ExecutionPolicy Bypass -WindowStyle Hidden -e base64字符串。解码base64内容后发现它调用的是远程下载命令payload是一个后续的恶意脚本。到这一步这个样本的攻击链已经完全清楚了zip充当外壳lnk作为启动器powershell负责远程拉取第二阶段恶意代码。值得强调的是这一步并不是只有安全专家才能做。一台装了Linux环境、掌握了strings和base64 -d两个命令的电脑就足以识破大部分半吊子投递样本的伪装。6. 处置这类文件的最终方案与经验清单6.1 可疑zip的标准处理流程结合多次实战我总结了一份可直接套用的处理清单步骤操作目的1file命令确认真实格式排除后缀伪装2unzip -l / 7z l -slt 查看内容在不解压情况下识别可疑条目3杀毒引擎沙箱检测拿到行为层面的判断依据4确认加密类型后决定是否破解避免在AES上浪费无效暴力破解时间5解压前检查路径穿越符号防止zip slip写入6解压后检查隐藏文件和脚本调用排查真实执行载荷7全程在隔离环境操作任何一步失误都不会影响真实系统这个流程适用于所有来路不明的zip不只是“灰色项目.zip”这一个样本。6.2 这些年踩过的几个坑第一别过度依赖杀毒软件。杀毒引擎能识别已知样本但改一下压缩包里的文件名和图标很多引擎就抓瞎了。人工检查unzip -l的输出仍然是性价比最高的步骤。第二zip密码移除不是万能药。遇到AES-256加密的zip字典爆破基本上无用功。遇到伪加密反而简单改标志位就能直接解压这要求你先分清加密类型再下手而不是拿个工具闷头跑。第三修复损坏zip时先复制一份源文件再操作。zip -FF有时会把文件改得更糟做好备份才能回退。这个习惯帮我保住过不少重要的固件包。根据我个人经验“灰色项目.zip”这种名字以后再出现你只要把它当成一次手速测试题文件先别点命令先跑起来列表先看清楚。等这套流程形成习惯你会发现大多数“项目”根本没有资格叫灰色——它们连第一轮unzip -l都过不了。本文还有配套的精品资源点击获取
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →