ARTICLE DETAIL

资讯详情

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

恶意加密包与静默上传暗门:313MB样本的分析与防御

恶意加密包与静默上传暗门:313MB样本的分析与防御 我上周刚处理了一个很有代表性的样本名字有点唬人实际上就是一个 313MB 的加密包。如果只看文件体积恐怕很多同事都会以为这是正儿八经的资源包但真正让它露出马脚的是在隔离环境里跑完之后的“静默上传”行为。这个加密包几乎把攻击者最喜欢用的三个词都凑齐了加密、静默、暗门。这篇文章就从上个月的排查日志说起把这类恶意加密包是怎么运作、又是怎么被发现的拆开聊透希望给遇到类似情况的人一个可参考的分析思路。先说明一下我在这篇文章里不会放完整的恶意代码也不会诱导任何人去复现攻击手法。这里只聊分析思路、行为特征和防御措施让运维、安全工程师以及普通使用者知道该从哪里入手识别一个可疑的加密包以及在发现“静默上传”之后应该怎么应对。1. 这个加密包是什么先还原现场场景1.1 “资源包”的伪装和真实身份事情起源于一条工单有业务同事收到一个“新版数据资产管理工具”的安装包和解压密码一并发到了工作群里。文件后缀是.bin但文件名写的是“数据资源加密包”体积 313MB打开之后要求输入一个激活码否则看不到里面的内容。同事没在意在电脑上直接双击运行结果第二天 IT 部门就收到了网络出口告警这台机器在夜间出现了大量高频外联流量而且目标地址不是一个常规业务域名。把现场还原一下就是这个加密包本身就是一个“套了壳的程序”。它表面上看是一个资源包实际上是一个自解压程序。运行之后会先展示一个“正在解压资源”的窗口让你以为它还在正常处理与此同时它已经在后台释放了一个动态链接库文件到临时目录并通过合法的系统进程把它加载起来。这个动态链接库干的事情才是真正的“静默上传”暗门。这类场景在安全圈里叫“恶意加密包”或者“携带投毒模块的安装包”。它最麻烦的地方是很多杀毒软件看到它是一个加密包反而扫描不到内部内容。用户拿到手里只看到“这个程序需要密码”根本意识不到自己已经在运行一个未知代码。从威胁建模的角度看加密包已经不再是单纯的数据容器而是一个投递工具。1.2 为什么是 313MB体积本身就是线索很多朋友都会问恶意软件通常不都是越小越好吗怎么这个包反而做到 313MB这里其实有两层原因。第一层原因是“降低怀疑”。如果是几十 KB 的小文件在邮件附件或者网盘下载场景里很容易触发风控规则也会让用户觉得不对劲。但是一个 300 多 MB 的“数据资源包”看上去就很有“内容”尤其当它伪装成业务工具或行业数据时接收方通常会放松警惕。特别是一些支持大文件传输的企业协作平台对超过 100MB 的文件往往只做简单处理有些甚至不自动上传沙箱分析这给了加密包可乘之机。第二层原因是“绕过检测机制”。杀毒软件扫描大文件时普遍存在性能开销问题很多产品的扫描引擎会对超过一定体积的文件设置超时或跳过部分内容。攻击者正是利用这一点把真正恶意代码藏在加密包的深层偏移位置同时在前面填充大量正常文件、安装程序、文档或随机数据。313MB 不是随手填的它是为了保证恶意代码所在位置超过多数扫描器的默认扫描深度同时又不会大到让下载平台拒绝接收。所以遇到一个体积异常的“加密包”我第一反应不是觉得它没问题而是会更多怀疑它的体积构成。这不是说所有大体积加密包都有问题但它确实是一个值得先记下来的风险信号。后面在静态分析里我会用工具去查看这个文件的数据分布看看是不是藏了填充数据。2. 加密与混淆暗门如何隐藏在这 313MB 里2.1 加密壳与多层解包流程先说结论这个加密包不是简单地把文件压缩一下而是做了典型的多层解包处理。外层可能是一个自解压程序内层是一个加密的负载真正的暗门模块在被释放之后才解密到内存里运行。我从行为监控中看到的执行链路大致是这样的用户双击“数据资源加密包”程序显示一个进度条看起来像是在解压文件程序读取内嵌的加密数据块使用硬编码的密钥在内存中解密解密后得到 PE 文件但不是直接落盘而是通过进程镂空或反射加载的方式注入到当前进程中隐藏的“上传模块”被加载开始采集本机信息并尝试外联。如果把这个过程展开你会发现它有点像俄罗斯套娃外层是正常的安装界面中间是解密逻辑最里面是恶意模块。每一层都做了混淆目的是让安全人员的分析时间成本增加。比如加密数据块的密钥不是直接放在文件头部而是通过一长串计算逻辑生成需要调试器单步执行才能拿到同时程序会检查当前是否运行在虚拟机、沙箱或调试环境里一旦发现可疑环境就退出或显示错误弹窗。这也是为什么我们在处理这类样本时一定要把动态行为和网络行为结合来看。单纯看静态文件结构会发现它就是一个常见安装程序没什么特别但一旦放到真实环境中跑它就会暴露真正的网络通信行为。2.2 填充文件与白名单绕过313MB 的体积里除了加密数据外很大一部分是公共文件比如一些开源组件的动态库、图标资源、说明文档甚至还有几个看起来很权威的 PDF 文档。攻击者把这些文件放在加密包的前半部分一方面是为了让加密包在双击时能够正常展示“内容”另一方面是为了让文件哈希和实际内容之间无法建立准确对应关系。更隐蔽的是这个加密包释放到临时目录的文件中有一个是系统某个常见软件的合法动态库。攻击者使用“白名单绕过”的思路先把一个合法签名文件释放到磁盘再通过 DLL 搜索顺序劫持或导出函数转发把恶意逻辑附加到合法文件旁边。这样杀毒软件在执行行为分析时优先看到的是“一个合法签名文件被加载”很容易放过去。我在这里想强调一个点加密包里的暗门从来不是独立存在的。它一定会借助正常业务环境中的文件、进程或网络通道来完成自己的目的。所以在分析时不要只看恶意文件本身而要关注它释放出来的整个“文件树”尤其是临时目录下多出来的那些文件往往才是真正要命的东西。3. 静默上传暗门的完整执行链路3.1 从自启动到内存加载“静默上传”这四个字重点其实在“静默”二字。暗门模块不会大张旗鼓地创建服务或写启动项那样很快就会被安全软件拦下来。它更常用的做法是“不落地、不常驻、只在特定时机运行”。从行为监控来看这个样本释放的加载器会在内存中完成所有任务然后退出不留痕迹。它会先检查当前用户的权限如果是普通权限就只在当前用户目录下工作如果是管理员权限它会尝试创建一个计划任务。计划任务的名称也很“正常”比如“MicrosoftEdgeUpdateTask”或者“OneDriveSync”触发条件是系统空闲或开机延迟 5 分钟。这样用户在没有活动的时候电脑后台就开始默默运行上传模块了。内存加载阶段暗门模块通过 Windows 的进程注入接口把恶意代码注入到一个名叫svchost.exe的进程中。这个进程本身是系统宿主进程大量存在于正常系统中所以在任务管理器里很难被人注意到。注入之后恶意代码会隐藏原进程的网络连接窗口让它不显示在当前用户会话中。这种“不落盘、不常驻、注入系统进程”的方式是静默上传暗门最典型的特征。如果只是在文件层面做防护很难抓到它必须从进程树和网络连接两个方向同时看才能发现异常。3.2 外传数据的三种伪装方式等恶意代码在系统进程中稳定运行之后它就开始收集本机信息包括主机名称、用户名、IP 地址、已安装软件列表等。做完这些基础信息收集后它会把这些数据拼成一个 JSON 或二进制结构然后找机会外传。从我的分析经验看这类静默上传模块最常用的外传通道有三种第一种是 HTTPS POST 到看似正常的 API 域名。攻击者会注册一个和知名云服务或统计服务相似的域名比如metrics-cloud-api.com然后在请求头里伪装成浏览器或合法杀毒软件传输内容是经过编码的用户数据。这种方式的优点是很容易混入正常业务流量中因为企业出口通常不会封禁 HTTPS。第二种是 DNS 查询外传。暗门模块把数据拆分成小块拼到 DNS 查询的域名前缀里不断请求一个攻击者控制的权威 DNS 服务器。比如把user001-hostname-currenttime编码成子域名发送出去。DNS 查询在所有网络环境中几乎无法完全禁用所以这是一种很隐蔽的外传通道。第三种是伪装成图片或资源文件上传到公共网盘、图床或在线文档。恶意代码会把数据改成图片的 Base64 编码格式然后在 HTTP Body 中附加一个合法的图片文件头。这样在流量审计系统看来只是一次普通的文件上传操作很难触发告警。这三种方式并不是互相排斥的很多样本会使用“心跳 正式上传”的两阶段模式先通过 DNS 探活确认目标服务器可达再通过 HTTPS 上传核心数据。这样即使 HTTPS 被中断攻击者也能通过 DNS 日志知道设备已上线。3.3 暗门模块的分段通信与心跳机制如果攻击者要一次性把 313MB 的加密包内容或本机大量文件传出网络流量会突然变得异常所以专业的静默上传模块一定会做分段传输。这个样本的心跳机制是先以不规则的间隔发送一个非常小的探测包间隔时间在 90 秒到 300 秒之间随机变化避免形成固定的信标特征。收到服务器的响应后再决定是否上传下一段数据。上传的数据会被切成 1KB 到 8KB 的小块每块之间随机延迟 3 到 7 秒。这样综合下来它在一小时内的上传流量可能只有几 MB完全不会触发常见的流量阈值告警。通信协议上攻击者使用了自定义加密先通过 RSA 交换会话密钥后续所有数据都用 AES 加密。数据包的头部是一个随机生成的四字节序列用来模拟常见的 TLS 记录头数据包尾部附加了一个 HMAC 校验值。如果安全人员只是简单抓包看内容会看到一片乱码无法直接还原上传了什么。这使得“静默上传”在地面和网络层都很难被直观发现。如果没有专门的 DNS 日志、代理日志或沙箱网络监控很难定位到它在偷偷传数据。4. 实测排查我如何确认这个包在“偷偷发数据”4.1 静态分析第一步哈希校验与文件类型识别处理可疑加密包的第一步绝对不是双击运行而是先做静态信息收集。我一般按下面的顺序来。先计算文件哈希并放到威胁情报平台里查一下看看有没有历史记录sha256sum suspicious_package.bin md5sum suspicious_package.bin哈希值可以用于后续追踪也能用来确认文件是否被二次修改。比如同一个加密包在不同的工单里出现过但哈希值不一样说明攻击者做了个性化投递每一份文件都是单独生成的。然后用file命令查看文件真实类型file suspicious_package.bin这一步能直接看出它是不是一个披着.bin扩展名的 PE 可执行文件或者是一个自解压的 RAR 压缩包。如果显示的内容跟文件名不一致就要高度警惕。接下来用binwalk或foremost扫描文件结构binwalk suspicious_package.binbinwalk会列出文件里嵌入的各种签名和偏移位置。如果看到文件尾部有大段随机数据或超过正常压缩比的数据块基本可以判断其中存在填充内容或加密容器。这一步我踩过不少坑尤其是在大文件上binwalk可能会因为扫描时间过长而卡住。我会先用dd切分文件分别扫描文件头和文件尾部缩小分析范围。这个步骤虽然简单但能节省很多时间。4.2 动态行为监控关注点静态结构只能告诉我们“有这个可能”真正要确认是否存在静默上传暗门还需要在可控的隔离环境中动态运行它。我建议至少关注以下几个方面。进程行为运行之后有没有新进程被创建有没有已知进程被注入有没有进程访问了可疑的 PowerShell 或 WMI 命令行文件行为有没有在临时目录释放文件释放的文件路径和文件名是否可疑有没有修改系统启动项或计划任务网络行为有没有进程在空闲时主动外联连接的 IP 和域名是否从未出现在正常业务中对外数据包有没有明显的规律我通常使用 Process Monitor 和 WireShark 组合观察。先通过 Process Monitor 记录进程启动、注册表读写和文件操作再通过 WireShark 或 tcpdump 抓取整个运行期间的所有网络包。如果程序运行后有一个进程反复连接境外 IP并且连接时间点与用户操作无关那就是一个非常强的“静默上传”信号。这里有个实际技巧不要只看程序运行后的前 5 分钟很多暗门模块都有延迟触发逻辑会在程序“看起来已经退出”之后才开始工作。我遇到过一个样本它在运行后 1 小时才开始外联。所以动态分析时我会让样本环境保持在线至少 24 小时并持续抓包和记录进程活动才能真正模拟真实场景。4.3 网络层面的流量特征即使我们不抓完整的数据包从代理日志、DNS 日志和防火墙日志里也能发现静默上传的痕迹。以下是几个比较典型的特征。DNS 查询异常出现大量包含随机子域名的 DNS 查询比如a1b2c3.example.com、user001.update.example.com。流量体积不对称主机接收的数据量远小于发送的数据量说明是典型的“上传型”木马。固定 User-Agent虽然攻击者会伪装 UA但通常所有请求的 UA 是固定的可以在代理日志里快速筛选出来。不规则心跳包网络连接记录中同一目标 IP 的建立连接时间间隔存在随机但总体周期性的规律。在 WireShark 里我一般会用下面几个显示过滤器快速定位可疑流量http.request.method POST dns.qry.name contains example tls.handshake.extensions_server_name contains metrics如果 HTTPS 加密流量非常多还可以通过 JA3 指纹来寻找客户端特征。攻击者使用的是同一个恶意 SDK 或同一个恶意代码生成器那么即使请求域名不同JA3 指纹也很有可能相同。把 JA3 放到威胁情报平台里查一下往往能直接关联到已知恶意家族。最后如果怀疑数据被分段上传可以用流量的“时间-长度”二维图来看。正常的文件上传通常是一条连续的大数据流而静默上传则是很多小块数据在很长一段时间内稀疏出现。这种视觉差异非常明显哪怕不依赖复杂算法也能一眼认出异常。5. 这类暗门的共性与防范建议5.1 恶意加密包的公共特征速查表结合这个样本和我之前处理过的几个类似案例我整理了一个恶意加密包的公共特征速查表。用这张表来快速判断一个加密包是否可疑比只看杀毒结果要靠谱得多。特征项正常加密包恶意加密包常见表现文件体积与内容规模成正比明显偏大多出大量填充数据来源渠道官方网站、可信下载站群聊、网盘、临时链接、邮箱附件运行行为解压/安装/导入数据额外释放文件、修改注册表、后台联网数字签名有效且匹配发行方签名无效、被篡改或冒用解压密码简单或无需密码需要输入所谓的“激活码”“授权码”网络连接多与更新服务器交互连接未知域名、IP或云服务节点文件类型后缀与真实类型一致.bin/.dat/.scr实际是PE或自解压文件这张表并不绝对但它能帮你在没有专业分析工具的情况下先建立起一个“可疑度”判断。我在实际工作中只要遇到“来源不明 体积异常 要求输激活码”的组合都会先按高危样本处理。5.2 落地防御从源头控制加密包从源头控制比事后分析重要得多。企业里我会建议至少落实以下几点。明确加密包的接收渠道业务伙伴发来的文件必须走官方邮件或企业网盘不接受个人微信、QQ、临时网盘链接转发的“资料包”。没有需求就不运行如果不是自己主动申请的工具不要因为文件名看起来“重要”就双击。遇到需要输密码的加密包先联系发件人确认真实性。物理隔离验证所有外部传入的程序先放到虚拟机或隔离终端里运行观察是否有异常外联。没有确认安全之前不要在公司电脑上直接使用。启用日志记录至少开启 Windows 安全日志、Sysmon 或EDR 的进程创建、网络连接、注册表变更记录保证事后能够溯源。封禁不必要的外联对普通终端实施“白名单”外联策略只允许访问已知业务域名和IP其他一律拦截。个人用户也可以参考其中几条不要轻易运行别人发来的加密包尤其是那些体积异常、需要密码、来自陌生人或临时群聊的文件。一旦运行后感觉电脑变卡、风扇狂转、流量异常就立刻断网并查杀。这些都是成本很低但效果很好的基础安全习惯。5.3 应急响应的五个动作如果已经发现设备存在“静默上传”行为不要慌张按照下面这五个动作处理能最大化保留证据并控制影响。第一断网但不要关机。断开网线或关闭无线网卡阻止数据继续外传但不要直接关机因为内存中的恶意进程和网络连接信息会丢失。第二保存内存镜像。使用合法工具将当前内存数据导出很多恶意代码只在内存中运行磁盘上找不到原始文件内存镜像是还原攻击行为的关键。第三记录现场快照。导出当前进程列表、网络连接列表、计划任务、开机启动项、服务列表。这些信息要在断网后立刻保存时间越晚越容易被恶意代码清理。第四提取可疑文件并计算哈希。把加密包、释放出的临时文件、动态库全部备份并把哈希值、文件路径、文件大小、时间戳记录下来。第五上报并隔离。将样本和收集到的日志交给安全团队或专业人员分析同时隔离同一网段内的其他设备防止横向移动。这五个动作是我在应急现场反复强调的顺序也很重要。很多人一发现中毒就急着格式化或重装系统结果把关键证据全部清掉了后续想溯源都无从下手。6. 最后再分享一点排查心得处理这种加密包样本的实际体验跟“普通病毒查杀”完全不一样。普通病毒的思路是文件落地、被杀软识别、隔离清除而带静默上传的加密包更像一个“合法程序的影子”它不急着破坏系统而是慢慢地把你的数据和信息往外传。你很难用“有没有中毒”来定义它因为它可能每天都在运行但你又察觉不到。我在分析过程中最大的体会是一定要把“文件分析”和“网络分析”放在同等重要的位置。很多安全人员遇到加密包习惯性地先解包、看PE文件、查字符串但真正的暗门很可能藏在通讯协议里。只有结合流量特征、DNS日志、进程行为和文件行为才能拼出完整证据链。另一个小技巧是多关注文件的时间戳和进程启动顺序。如果加密包的修改时间跟系统安装时间、补丁更新时间完全吻合那很可能是一个精心伪造的时间戳而如果进程树里出现了一个由解压程序拉起的高权限进程那也值得特别关注。下次再有人往工作群里丢一个 300MB 的“加密资源包”先别急着解压多问一句它为什么要加密它为什么这么大它运行之后会不会连网这三个问题想清楚了大多数暗门也就藏不住了。
返回列表