ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

313MB加密包暗藏静默上传暗门:恶意样本分析全记录

313MB加密包暗藏静默上传暗门:恶意样本分析全记录 最近处理了一起挺典型的事件一个313MB的加密包在企业内网里被好几个部门下载过。初步看就是一个体积偏大的加密压缩包文件名也和业务对得上但顺着文件类型和内部结构深入排查发现里面藏着一个会在后台静默上传敏感数据的暗门。这种问题在软件供应链场景里不算特别罕见但真正现场分析过的人都知道加密包这个壳会同时挡住杀软和人工审计的视线排查起来比普通的木马文件要麻烦得多。这篇文章就把整个分析过程拆给大家看从拿到样本、识别加密格式、还原暗门逻辑到实际跑沙箱验证、清除后门和固化证据每一步我都会交代清楚当时的判断依据和踩坑细节。适合做安全应急响应、运维排查、以及开发交付时需要审核第三方包的人参考看完至少能知道遇到类似的加密包该从哪里下手。1. 事件起因313MB加密包是怎么进入视野的事情最开始不是杀毒软件报警而是终端安全系统记录到某个内网业务服务器在凌晨两点主动外连了一个陌生IP地址。流量不大但很规律每隔三分钟推一小包数据。顺着进程链路追踪发现外连动作是从一个叫sysupdate的Windows服务里发起的而服务指向的落盘文件藏在一个313MB的加密包里。1.1 现场情况与初步判断到现场之后先看了一遍部署记录。那台服务器大约两周前做过一次维护运维同事从公共文件服务器上拉了一个“离线升级包”说是某个第三方硬件厂商提供的驱动升级工具。压缩包名字带版本号和日期后缀是.zip但拉下来之后实际是一个加密压缩任务导出的产物解压时需要输入密码。运维同事当时没在意按厂商文档里的默认密码解压然后将内部目录整体释放到D盘的upgrade文件夹里。从行为链路上看启动时机非常可疑。sysupdate服务被设置为“自动启动”但触发时间点不在开机瞬间而是在服务器运行后两个小时左右。这种设计不是普通驱动升级的常见做法——正常升级工具顶多检测到版本号变化才会跑起来不会掐着表等两小时再开始运作。初步判断这个加密包中大概率存在计划任务或服务注册表项用于把后续载荷激活。1.2 为什么体积值得关注313MB这个数字本身就是一个分析提示点。正常驱动升级包如果包含多平台驱动、安装配置和文档上GB也有但313MB卡在一个比较尴尬的位置说大不大说小不小刚好够塞一套完整的运行时依赖和加密算法库。值得留意的不是文件总大小而是压缩包内部的“不均匀感”。用常规解压工具释放后总大小虽然有313MB但其中约280MB集中在一个名为support_lib的文件夹里里面是各类DLL、缓存文件和日志真正可执行的入口脚本只有几十KB。这种体积倒挂的情况往往意味着大量空间是用来存放静态资源——比如一些不会轻易变化的库文件目的可能是让压缩包在自动化检测时看起来更像真实软件同时干扰文件哈希分析和压缩包结构扫描。1.3 制定分析计划这类样本不能直接在业务环境里解压运行也不能上来就双击。我先做了一份简单的分析计划保留原始加密包计算哈希同时用只读方式挂载一份副本用于静态分析。先用文件识别工具确认压缩包的真实格式再看加密方式和解压工具痕迹。解压到隔离的分析虚拟机中先用静态手段过一遍可执行文件、脚本和配置确认暗门入口。不直接双击入口程序而是以命令行参数方式加载观察文件系统、进程、网络三个维度的变化。最后结合日志和流量数据还原它上传了哪些数据、多久传一次、远程地址指向哪里并给出清理步骤。整个思路的核心是先静态定性再动态验证最后才动刀清理。后面每一步基本都沿着这条线走。2. 静态分析拆开加密包看内部结构拿到样本的第一步不是急着找密码而是先确认它到底是个什么东西。文件扩展名是.zip但真实格式未必是zip尤其是这类手工构造的加密包经常直接在文件头做文章。2.1 文件类型识别与哈希记录我先把原始文件拷贝到一台不联网的分析机上做了一次哈希记录方便后续比对和出报告。接着用文件识别命令看了下真实格式。典型的输出大概是这样的file upgrade_pkg_202406.zip正常zip压缩包会显示“Zip archive data”但这份样本显示的是“Composite Document File V2 Document”也就是说它其实不是一个标准zip包而是一个复合文档结构外层壳被改成了zip后缀。这种手法在加密投递场景中很常见杀毒软件如果不对复合文档做深度解析很容易把文件直接放行。进一步查看软件信息时发现文件尾部有加密工具的指纹属于某款商业加密压缩软件默认使用AES-256-CBC模式加密内部文件密码是从资源文件中抽取的“密钥提示”生成的。这种加密方式的好处是只要拿到密码内部文件就能完整解密且不会额外增加太多体积。2.2 解包后的目录与文件清单从加密包里的配置文件里提取到默认密码后正常解压释放目录。解压到分析虚拟机后用tree命令看完整目录结构几个关键目录是这样的upgrade/ ├── install.bat ├── sysupdate.ps1 ├── support_lib/ │ ├── cache.dat │ ├── auth.dat │ └── dwmapi.dll ├── config/ │ ├── setting.ini │ └── update_url.dat └── docs/ ├── readme.txt └── release_notes.pdf和之前的判断一致真正的可执行入口是顶层的install.bat和sysupdate.ps1support_lib目录里的DLL体积最大但大部分是白文件或无效填充数据真正起作用的是剩下的小文件。用文本编辑器打开install.bat看到的内容并不复杂echo off setlocal powershell -ExecutionPolicy Bypass -File %~dp0sysupdate.ps1它做的事情就是绕过PowerShell执行策略直接调用同目录下的脚本。这里能确定加密包内部藏了一个PowerShell后门而且触发方式非常简单。2.3 定位可疑脚本与配置接着看sysupdate.ps1这个是核心。脚本内容经过混淆但核心逻辑还是能还原的。先经过一层的字符串反转和Base64解码还原出来的有效内容有以下几段读取config/update_url.dat中的远程地址。读取support_lib/cache.dat中的本机信息包括计算机名、用户名、当前进程列表。收集C盘根目录下最近修改过的Word、Excel和PDF文件列表。将信息拼装成JSON格式通过HTTP POST请求发送到远程服务器。所有请求头都会伪装成普通的浏览器UA避免被流量设备识别。这里就能确认加密包里的所谓“升级工具”实际扮演的角色就是收集终端信息并静默上传的一个暗门。3. 静默上传暗门的代码逻辑还原静态分析只能证明“有问题”但到底是怎么上传、上传哪些内容、什么时候触发都需要把代码逻辑尽量还原清楚。这一步花了不少时间因为这个脚本是混淆过的而且用了几种常见的对抗手段。3.1 后门入口与触发条件sysupdate.ps1不是普通的一次性执行脚本它在执行后会创建两个持久化点第一个是在注册表HKCU\Software\Microsoft\Windows\CurrentVersion\Run下添加一个名为SysUpdate的值指向PowerShell启动脚本。第二个是注册一个名为UpdaterTask的计划任务触发条件为服务器启动后延迟5分钟以及此后每隔2小时触发一次。注册表项和计划任务的作用是确保即使服务器重启暗门也能再次拉起来。这和正常驱动升级的区别很明显正规升级包基本不会在注册表里残留启动项要么安装完就退出要么只写系统服务不会做这种“用户登录即启动”的动作。3.2 数据收集范围与拼装过程脚本先把收集到的本机信息整理成三段系统基础信息包括操作系统版本、CPU体系结构、系统目录路径。用户会话信息当前登录用户名、是否处于远程桌面会话、会话活跃时间。敏感文件信息遍历用户文档目录、桌面目录和共享目录筛选出后缀为docx、xlsx、pdf、rar、zip的文件记录文件路径、大小、最后修改时间。其中第三段是判断恶意性质的关键。如果只是单纯的系统升级完全没必要去遍历用户文档目录。只有想窃取业务资料和用户文件的人才会对这类文档感兴趣。拼装完成之后数据会被序列化成一个JSON对象外层再包一层时间戳和随机生成的回话标识。这一层的处理主要为了对抗流量审计流量设备看到的是一段有随机字段的JSON而不是明显的敏感信息明文。3.3 上传通道与规避手段上传通道用的是HTTP协议没有走加密通道但这个“不走加密”反而是故意的。内网很多流量检测规则默认只看异常加密流量对普通HTTP POST请求反而比较宽松所以这个暗门选择了一个看似平庸的方式。为了避免被轻易识别脚本还做了三层规避请求头伪装成常见浏览器的标准字段包括Accept、Accept-Language、Accept-Encoding。数据包体积限制在固定大小每次POST只发送一部分数据并在服务端重新拼接以此规避单包长度检测。远程地址不是固定IP而是优先读取配置文件里的地址如果连接失败则轮询一个预先写好的域名列表。对分析人员来说这个设计不算高明但因为包裹在加密包里加上运行时机较晚确实很难靠常规的静态扫描发现。4. 动态行为验证放沙箱里跑一轮静态分析只能说明代码“有能力这么做”还不能直接证明服务器就一定中招了。为了把行为和证据链坐实我在隔离环境里跑了一遍重点观察进程行为、文件变更和网络外连。4.1 搭建隔离运行环境我没有直接在出事的业务服务器上操作而是拉了一台配置相近的Windows Server虚拟机先打快照然后把原始加密包和已解密内容放到一个免杀测试目录里。用到的工具包括进程监控工具、网络抓包工具和文件系统监控工具都在启动观察程序之后再去执行入口脚本。为了保证观察有效我在系统里预置了三个测试文件一份xlsx文档、一份pdf文档和一份zip压缩包都放在当前用户的桌面目录里。这样脚本如果真会遍历文档目录这些文件就会出现在后续的上传日志中。4.2 网络请求与进程行为观测执行install.bat之后前30秒内系统看起来没有任何异常。但大约1分钟后网络监控里出现了第一次HTTP POST请求目标地址是配置文件里读取的那个远程域名端口为80。请求体是分段传输的第一段带的是系统基础信息和用户名第二段带了桌面测试文件的相关信息。进程维度上powershell.exe进程先以普通权限运行随后创建了一个子进程dwmapi.dll的同名代理进程从路径上看像是从support_lib目录里释放出来的。启动参数里没有明显特征但从行为和网络连接归属来看真正的上传动作是由这个代理进程完成的。文件系统监控里还记录到脚本运行后会向临时目录释放一个名为svcupdate.dat的文件大小约2MB里面缓存了已经收集到的文件清单和上传状态。这个文件的作用是断点续传防止网络中断导致数据丢失。4.3 确认暗门的真实影响把沙箱里观察到的信息与业务服务器上提取到的证据做比对确认了两件事第一业务服务器上的sysupdate服务确实用了同样的脚本逻辑只是远程地址指向内网的一个受控跳板服务器再由跳板向外部地址转发数据。第二服务器上确实存在更新后的svcupdate.dat缓存文件文件内记录的采集时间与第一次外连时间完全吻合。至此可以确定这不是误判也不是沙箱诱捕导致的行为而是真实存在的静默上传暗门。5. 清除与应急响应实操记录确认问题之后就要进入清除阶段。这个阶段的核心思路不是简单把脚本删掉而是要把创建出来的持久化入口、计划任务、缓存文件和关联进程一次性处理干净避免二次复发。5.1 追溯投放来源清理之前先花了一点时间确认加密包是从哪个渠道进来的。查了公共文件服务器上的上传记录发现这个文件是由一个已经在两个月前离职的外包维护人员账号上传的。结合内部审批记录基本可以推断是账号被盗用后投放的恶意版本而不是正规厂商发布的升级包。这一步提醒所有人第三方交付的软件包尤其是经过人员更替的外包渠道必须在交付前重新校验哈希而不是拿到手就觉得可信。5.2 清除后门与恢复现场清除操作有严格的前后顺序先断开服务器外网连接但保留内网访问避免后续操作时再次触发外传。停止并删除sysupdate服务和UpdaterTask计划任务。删除注册表Run项里的SysUpdate值。结束正在运行的PowerShell代理进程并删除D:\upgrade整个目录。清理临时目录和缓存目录中残留的svcupdate.dat、cache.dat等文件。最后对全盘做一次扫描确认没有其他同类文件残留。每做完一步我都会截屏记录并把相关文件复制到取证目录保留原始字节。这既是为了后续追责也是为了确认自己的清理动作没有破坏样本完整性。5.3 日志留存与证据固定清除完成后将分析过程中生成的各类日志统一归档。包括原始加密包的哈希、解密后的文件列表、网络抓包文件、进程监控记录和注册表导出文件。归档的压缩包加密后单独存放在离线取证平台上避免被远程访问。这一步容易被忽略但实际作用很大。因为后门清除之后安全团队还需要利用这些数据做溯源、复盘和改进判断如果没有完整的日志链很多结论都只能靠猜。6. 常见问题与排查技巧实录这类加密包暗门事件遇到一次就够长记性了。这里把个人分析过程中遇到的几个典型问题、排查思路和坑点整理成速查表供大家参考。典型问题排查思路容易踩的坑文件扩展名是.zip但解压失败用file命令先识别真实格式再按真实类型处理直接换工具硬解结果浪费时间加密包有密码但不知道密码在配置文件和资源段中搜索密钥提示很多默认密码写在注释里强行爆破效率极低解压后体积310MB但可执行文件很小重点看DLL和缓存文件里是否有填充数据体积不对称往往是刻意设计把精力浪费在看大文件上脚本被Base64和字符串反转混淆先做静态反混淆还原后再看代码逻辑不要直接动态执行直接执行结果在无监控状态下被外传数据网络流量看着像正常HTTP POST检查请求头是否过于“标准”、是否携带随机字段、是否有周期性的分段传输只看端口和加密通道忽略普普通通的HTTP流量清理后进程仍在启动检查注册表Run项和计划任务确保所有持久化点都删干净只删文件不管服务项重启后后门复活6.1 分析过程中容易踩的坑分析这种加密包最大的坑是过早执行。有些人拿到文件后习惯性双击运行或者用系统自带的解压工具直接解压这会在本机真实环境中触发恶意行为造成信息外传。我个人的经验是所有分析动作都在虚拟机里完成并且在解压前用快照功能留底。虚拟机需要断网或者做严格隔离不能让恶意外连直接打进真实网络。另外一个坑是只看脚本不看重启后的持久化行为。很多分析报告停在“脚本会上传数据”这一层却没有检查注册表和服务项导致清理不彻底。遇到这样的样本至少要检查系统启动项、计划任务、服务三处位置。6.2 加密包场景的特殊坑点加密包和普通恶意压缩包相比多了一个“密码保护”的信任加成。很多运维人员看到有密码的压缩包反而放松警惕认为厂商连密码都给了肯定没有问题。但这个逻辑在供应链场景里恰恰是漏洞。密码保护的本质是防止内容被未授权的人查看而不是证明内容本身安全。收到任何加密交付物都应该先确认真实来源再按标准流程解压和扫描不能因为密码而跳过审计。还有一个容易被忽略的坑是加密包内的时间戳和外部文件信息不一致。这个样本里有一些DLL文件的修改时间在未来日期明显是人为修改过的。这种蛛丝马迹在普通包里很难看到但在加密包里经常能抓到。6.3 我自己复盘时的体会这套流程走下来我个人比较深的体会是加密包分析不能只依赖杀毒软件也不能只看文件哈希而是要静下心来逐层解构——先识别真实格式再还原加密后的文件结构最后把行为链路拼完整。时间上确实要多花两三天但换回来的是对整个事件的清晰掌控。另一个体会是内网部署业务系统时一定要有一套“包来源确认”流程至少包括来源可追溯、交付人员可确认、哈希有备案。如果这次服务器管理员在部署前能对照厂商官方哈希做一次校验后面所有的应急响应动作根本不会发生。现在很多企业对第三方软件包的审核还停留在按文件名通过一下的状态。事实上任何一个进入内网的加密包都应当按“不可信输入”对待先隔离执行分析再正式部署。这是我在这次事件之后给团队立下的新规矩也希望看这篇内容的人能提前补上这块短板。
返回列表