十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

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

DanaBot银行木马深度剖析:模块化架构与检测实战

DanaBot银行木马深度剖析:模块化架构与检测实战 1. DanaBot是什么从一次真实告警说起2018年我第一次拿到DanaBot样本的时候还没想到这个银行木马家族后来会成为全球威胁情报社区里绕不开的名字。当时的情况很简单客户的一台财务终端持续向外发送加密流量频率固定、流量不大但目标地址的IP归属地非常可疑。杀掉进程之后机器恢复正常重启之后又会再犯——这种“打不死”的特征让我意识到这绝对不是普通的广告插件或者挖矿程序而是一个有完整持久化链路、带C2通信能力的高级银行木马。DanaBot最初主要针对澳大利亚的银行用户通过伪装成账单、发票的恶意邮件附件传播。后来几年它迅速扩展到欧洲、美洲甚至一度在亚洲地区也出现了活跃变种。它不光是能窃取网银账号密码那么简单它还具备屏幕监控、键盘记录、Web注入、远程控制、cookie窃取、加密货币钱包劫持等一系列功能。换句话说攻击者拿到DanaBot的控制权之后就相当于在受害者的电脑里装了一个“实时监控探头”你在网银页面输入什么、点击什么、转账给谁后台的攻击者都能看得一清二楚。这篇文章我从实际分析者的视角出发把DanaBot的核心架构、功能模块、C2通信机制、反分析手段和检测排查方法逐一拆开来讲。不管你是企业安全运营人员、病毒分析师还是刚入门的恶意代码分析爱好者这篇文章都会给你一套可以直接落地的分析思路和排查命令。2. 模块化架构它不是“一个木马”而是一个平台2.1 主模块的设计思路我第一次逆向DanaBot主模块时第一印象就是它的代码整洁度远超一般的银行木马。很多老牌木马会把所有功能揉进一个二进制文件里运行后一次性加载所有代码。DanaBot则完全不同它采用了一种类似插件的模块化架构主模块本身只负责最基础的行为包括进程自启动、C2通信、基础信息收集和模块下发。这种设计的好处对攻击者来说非常明显。第一主模块体积小感染成功率高杀软检测面也小第二功能模块不落地而是从C2服务器动态下发每次下发的模块可能都有不同的哈希值传统基于特征库的检测方式很难跟上第三攻击者可以根据受害者的价值来定制攻击模块——如果确认是普通用户可能只下发键盘记录模块如果确认是财务人员再下发VNC远控模块。这种按需下发的方式把攻击成本控制得非常精细。从安全运营的角度看模块化架构带来的最大挑战是你很难通过单一的行为特征去描述整个攻击链。流量侧、主机侧、进程侧每一层看到的都只是冰山一角。2.2 按需下发功能模块的机制DanaBot的主模块运行后会先收集受害者的主机信息包括操作系统版本、计算机名、用户名、当前进程列表然后把这些信息加密发送给C2服务器。C2服务器返回的响应中就包含了一个或多个可以下发的模块列表。这里有一个很有意思的技术细节模块下发通常不是一次性全部传完而是分成小块传输。每个模块数据包的大小控制在几百字节到几千字节之间实际效果就是网络流量看起来很像普通的HTTP请求分片而不是一个大体积文件的一次性传输。我在一次样本分析中专门统计过它单个模块的HTTP数据包大小分布绝大多数集中在512字节左右这就让流量侧的检测变得非常困难。在实际分析时我习惯先看主模块的导入表和字符串表因为模块化木马通常会有一些固定的字符串结构比如模块名称的枚举列表。DanaBot早期的样本中模块名称直接以明文形式出现在二进制文件里比如“screen”“keylog”“inject”“vnc”之类的名字。后面更新的版本做了混淆但这些字符串的痕迹还是能在内存中被找到。提示分析模块化木马时不要只盯着主模块要特别关注C2响应中的模块列表字段。这个列表就是攻击者的“武器库清单”从中可以看到这个木马家族支持的全部攻击能力。3. 核心能力拆解从屏幕监控到Web注入3.1 键盘记录与表单抓取键盘记录是DanaBot最基础的功能之一但它跟早期那些将所有按键一股脑记录的键盘记录器不同DanaBot的键盘记录是带策略的。它会记录用户的键盘输入但会结合当前活动窗口信息来筛选目标。举个例子如果你正在浏览器里刷新闻记录下来的输入可能就会被丢弃但如果检测到当前窗口标题包含特定银行名称或者“online banking”之类的关键词那所有的键击内容就会被完整记录并以加密形式回传。表单抓取功能则是针对浏览器表单的自动填充数据。现在很多用户习惯用浏览器保存密码和自动填充表单这个功能原本是为了便利但在DanaBot眼里这就是一个现成的信息提取入口。它会挂钩浏览器的自动填充接口在表单数据被填入网页的瞬间抓取账号、密码、身份证号、手机号等信息。这里要给一线安全运营人员一个提醒DanaBot的键盘记录模块不是用传统的SetWindowsHookEx全局钩子实现的它用的是直接内存注入加API Hook的方式。这意味着你用常规的钩子检测工具是看不到异常钩子的必须靠行为检测来分析哪个进程对哪个API做了inline hook。3.2 Web注入与浏览器会话劫持Web注入是银行木马的核心功能也是DanaBot最拿手的地方。它的工作原理是当受害者访问目标银行网站时DanaBot会注入一段JavaScript代码到银行页面中。这段代码会在你看到的网页上叠加一个假的登录表单提示你重新输入账号、密码、验证码、甚至短信验证码。很多用户以为看到的是银行官方的安全验证流程其实页面已经被攻击者篡改过了。这种“视觉欺骗”手段比直接抓取密码更可怕因为即使你使用了银行App上的动态口令或者U盾只要页面上包含输入验证码的字段攻击者就能通过这个注入模块实时获取。DanaBot的Web注入模块是通过C2下发配置来工作的配置中会指明目标URL规则和注入内容。我在样本分析中见过针对全球数十家银行的注入配置包括多个国家的知名银行。注入的JavaScript代码通常经过高度混淆长度从几KB到几十KB不等。从防御角度来看Web注入最有效的检测方式是浏览器侧的DOM监控也就是检查页面加载完成后是否有额外的脚本被插入到DOM树中。普通用户很难发现这类攻击但企业安全团队可以在终端设备上部署具备浏览器防护能力的软件对注入行为进行实时拦截。3.3 VNC远程控制与受害端交互VNC模块是DanaBot攻击者手里的一张王牌。相比简单的键盘记录和Web注入VNC模块让攻击者可以像操作自己电脑一样实时操作受害者的电脑。开启VNC之后攻击者能看到受害者的实时屏幕画面能移动鼠标、点击按钮、输入文字、打开应用甚至能在受害者没有察觉的时候操作网银进行转账。这个模块的可怕之处在于它的隐蔽性。它不做任何屏幕录制保存只是实时截屏传输它不创建新的桌面会话而是在当前用户的桌面环境中运行它使用自定义的压缩算法来降低截屏图像的传输大小让流量看起来像普通的图片或视频流。我处理过一个真实事件受害者在办公室电脑上处理财务转账攻击者通过VNC模块直接在受害者的电脑上打开了一个新的转账页面将收款账号替换为攻击者控制的账号。整个操作只花了几十秒趁受害者起身倒水的间隙就完成了。这种攻击的隐蔽性极强靠人工完全无法防御。4. C2通信与反分析机制4.1 配置加密与配置获取DanaBot的C2通信协议以HTTP为基础但全部数据都经过加密处理。早期版本的加密算法相对简单是RC4流加密密钥硬编码在样本中。随着安全研究者的持续分析后续版本逐步升级为AES加密并且密钥不再直接硬编码而是通过某种算法从样本中动态计算得出。配置信息的获取方式也做了进化。早期的DanaBot样本会在二进制文件中直接存储C2地址分析人员只要提取字符串就能拿到C2域名和IP。后来攻击者在C2地址生成上引入了DGA域名生成算法按照日期生成多个候选域名只有攻击者知道当前哪个域名是生效的。这种机制让DNS黑名单和域名封禁的时效性大打折扣。我在分析最新变种时发现它还会在C2通信中使用“域前置”技术来隐藏真实的目的地。也就是说从流量上看受害者的机器在正常访问某个CDN节点但实际通信内容通过特定的HTTP请求头转发到了真正的C2服务器。这种情况下常规的流量分析根本无法定位到真正的C2地址。4.2 心跳机制的伪装手段DanaBot的心跳包设计得非常讲究。它的心跳间隔不是固定的而是随着运行时间动态变化。感染初期高频通信以确保控制权运行稳定后会降低心跳频率有时候甚至超过24小时才通信一次。这种低频率心跳机制让很多以“周期通信”为检测规则的设备完全失效。更麻烦的是心跳请求的HTTP头部会做大量伪造。User-Agent字段随机模仿Chrome、Firefox、Edge等主流浏览器的版本信息还会带上完整的Referer、Accept-Language等正常浏览器才有的头部字段。从流量侧看这些请求和普通用户浏览网页的请求几乎无法区分。有一次我们在流量分析中还发现DanaBot的心跳请求会优先使用HTTPS协议但证书配置和正常的证书链不完整。这种细节可以作为流量侧检测的一个线索但前提是你要有完整的证书校验能力而不是只看IP和端口。4.3 沙箱逃逸与反调试技巧银行木马的开发者通常都有很强的对抗意识DanaBot在这方面更是下足了功夫。我分析样本时发现它会进行一系列的环境检测检查当前进程是否运行在虚拟机中、当前系统是否有真实用户操作痕迹、系统运行时间是否大于某个阈值、是否存在常用分析工具的进程名。有一类特别的逃逸技巧值得单独提一下DanaBot会检查当前的桌面分辨率。如果分辨率低于某个值比如只有800x600它就会直接退出进程。理由是真实用户的电脑几乎不可能停留在这么低的分辨率下而沙箱或者虚拟机默认桌面分辨率往往就是800x600。我用这个特征做过很多次快速判断——把样本丢进默认配置的虚拟机中如果进程秒退多半就是触发了环境检测。反调试方面它会对进程的PEB结构做遍历检查是否被附加了调试器也会检测当前进程中是否存在常用的调试API的断点特征。这些手段虽然不复杂但组合使用之后确实能筛掉一大批自动化分析系统。4.4 持久化与自更新逻辑DanaBot的持久化手段并不花哨但胜在稳定。它最常见的方式是在“计划任务”里注册一个新的任务任务名称通过随机算法生成看起来像系统更新任务。同时它还会在注册表的Run键下添加启动项。很多变种会同时使用两种持久化方式确保在一种被清理后另一种还能把它拉起来。这种冗余设计在实际事件响应中非常让人头疼——你删了注册表启动项过几个小时之后计划任务又开始执行把删掉的文件重新下载回来。自更新模块是DanaBot的另一大杀器。它会定期检查C2服务器上是否有新的样本版本如果有就下载并替换当前正在运行的进程。这意味着攻击者可以根据防御方的检测手段随时调整木马的行为和代码特征。每次更新之后样本的哈希值变化很大传统基于哈希的IOC在黑名单里的存活时间非常短。5. 检测思路与排查实战5.1 流量侧的异常特征流量检测在DanaBot早期版本中非常有效但随着版本更新纯流量侧的检测已经越来越困难。不过依然有一些可供参考的异常特征。首先是通信间隔规律性。虽然DanaBot的心跳间隔是动态的但在同一受害者的通信中间隔还是会呈现一定的规律性。比如在某个时间段内心跳间隔的分布会集中在一两个区间附近这跟正常用户浏览行为的随机间隔有显著差异。其次是HTTP头部的一致性异常。DanaBot伪造的浏览器指纹虽然会变化但变化频率相对固定通常每几次通信才变一次。正常浏览器用户访问不同网站时User-Agent和Accept-Language等字段是保持一致的而DanaBot的头部字段在不同时间段的切换可能比较突兀。第三是流量方向。银行木马的通信目的主要是上传窃取的信息和接收控制指令所以它的上行流量在特定时间段内会显著大于下行流量。这个特征在企业内网中应用中比较有价值特别是当看到某台终端在非业务时间向境外IP频繁上传数据时。5.2 主机侧的排查命令与指标主机侧的排查依然是最直接有效的方式。我在处理疑似DanaBot感染的终端时通常会按照以下顺序执行排查第一步查进程。运行任务管理器按CPU使用率排序重点关注名称模仿系统进程但路径不在系统目录下的进程。DanaBot的进程名常见的有随机字母组合、伪装成Windows更新服务、或者直接使用svchost之类的系统进程名。第二步查启动项。使用Sysinternals套件里的Autoruns工具重点检查计划任务、注册表Run键和启动文件夹三个位置。DanaBot的计划任务名称通常有随机性但很多时候会带一些与系统服务、更新相关的字样比如“WindowsDefenderUpdate”或者类似的名字。第三步查网络连接。在命令行下执行netstat -ano | findstr ESTABLISHED查看当前系统的所有网络连接记录下ESTABLISHED状态连接的PID和远程IP。再结合进程对应的PID就能快速锁定可疑的外联进程。第四步查文件系统。DanaBot通常会把自己复制到多个目录比如临时目录、ProgramData目录、用户AppData目录。文件名的随机性很强但创建时间会有集中的特征比如同一批恶意文件创建时间非常接近。如果在ProgramData下发现多个创建时间相同的可疑exe或dll就要高度警惕。5.3 溯源时的几个关键时间节点溯源的时间线分析是事件响应中最重要的一环。对于DanaBot感染事件有几个时间节点必须理清初始访问时间感染的最初入口是什么。DanaBot最常见的感染方式是钓鱼邮件所以要在用户的邮件网关中查找感染时间段前后的邮件投递记录重点关注带有附件或URL链接的邮件。首次外联时间木马第一次向C2服务器发起通信的时间。这个时间节点可以直接从防火墙日志或者代理日志中找。首次外联时间跟初始感染时间之间的间隔通常能反映木马在主机的驻留和配置时间。模块下发时间C2服务器下发功能模块的时间。如果某天流量日志中出现了突然的上行数据峰值且伴随长时间的下行数据接收那很可能就是功能模块被下发并加载的节点。数据窃取时间受害者数据被外传的时间。这个时间节点通常和模块下发时间有一定间隔攻击者需要时间去操控受害者的电脑摸索网银的转账流程。有这几个时间节点之后就能画出一条完整的攻击链再结合日志关联基本能把DanaBot的攻击目标、攻击手法和损失范围梳理清楚。6. 企业防御体系建设建议6.1 分层防御怎么落地聊完攻击侧的技术细节再聊聊防守侧怎么落地。面对DanaBot这类模块化银行木马单点防御是肯定不够的必须建立分层防御体系。第一层是邮件防线。DanaBot最典型的投递方式是钓鱼邮件所以邮件网关的恶意附件识别能力是第一道关卡。建议开启宏防护、附件沙箱检测和URL信誉检查同时对来自外部域名的邮件保持高度关注。第二层是终端防线。传统杀软应对DanaBot的效果非常有限因为样本更新速度快、免杀能力强。建议在终端上部署EDR产品重点监控进程的注入行为、注册表持久化行为、计划任务创建行为和异常网络外联行为。这些行为特征比文件哈希更稳定也更难绕过。第三层是网络防线。虽然DanaBot的流量伪装能力很强但网络侧依然有文章可做。在企业出口防火墙上配置TLS解密和深度包检测能力对镜像流量进行实时分析可以帮助发现通过明文DPI检测不到的高级威胁。同时建立内网DNS日志记录和分析体系对未知域名的解析记录进行追踪。6.2 威胁情报在防御中的实际作用与DanaBot对抗不能只靠内部的数据分析还要充分利用外部威胁情报。DanaBot的C2基础设施虽然会频繁更换但它在域名注册、证书签发、托管IP等方面还是会留下一些规律性的痕迹。我在日常工作中会重点关注以下几类情报线索DanaBot常用IDC网段的历史情报、DGA生成的候选域名列表、C2通联的特征规则、样本的YARA规则等。这些情报通过常规的威胁情报平台就能获取。在实际落地时建议将威胁情报平台与SIEM系统打通实现情报的自动化匹配。当外网流量中出现匹配情报的IP或域名时系统自动产生告警。不过这里有个度的问题情报误报率如果太高会冲击安全团队的告警响应能力所以对情报源的准确性和时效性要有持续的评估和调优。7. 常见问题与排查技巧实录7.1 样本跑不起来是环境问题还是反分析分析DanaBot时经常遇到的一个问题样本在虚拟机里根本跑不起来。很多新手分析员一上来就怀疑是自己的环境配置有问题但根据我的经验一半以上的情况是样本触发了反虚拟机检测。这个时候不要急着调试环境先做两件基础工作一是用静态分析工具检查样本中是否存在虚拟机相关的字符串和API调用比如查询硬件信息、检测虚拟设备驱动等二是调整虚拟机的默认配置把CPU核心数、内存大小、屏幕分辨率、鼠标键盘驱动等都改成接近真实主机的配置。我个人的经验是DanaBot对屏幕分辨率和当前用户交互的检测最敏感。把分辨率设为1920x1080增加一些用户操作痕迹比如创建几个文件夹、打开几个文档、移动一下鼠标样本就有大概率正常运行。这个方法在我分析多个恶意软件家族时都验证过效果非常稳定。7.2 流量抓到了可疑外联如何确认是否属于DanaBot确认可疑外联是否属于DanaBot需要结合主机侧和流量侧的证据链。流量侧可以先看目标IP的威胁情报信誉如果是刚注册的域名或者IDC机房的IP可疑程度就更高。再看通信内容如果是加密流量就看会话周期和包大小分布如果抓到了明文流量直接搜索DanaBot的固定特征字符串。最可靠的确认方式还是在主机侧找到对应的恶意文件把文件哈希放到威胁情报平台上关联。但在事件响应现场你可能没有时间做完整的逆向分析这时候可以先使用YARA规则做一次快速扫描。社区里有很多现成的DanaBot YARA规则检测准确率还比较高。有一个实操小技巧DanaBot在执行时会创建一个互斥体来防止多个实例同时运行互斥体名称在同一个版本中通常是固定的。你可以直接在进程内存中搜索这个互斥体名称如果命中了那基本可以断定就是DanaBot家族。7.3 清理过程中的注意事项在清理DanaBot感染时很多人容易犯一个错误单纯删除恶意文件却没有清理持久化项。结果就是文件删了但计划任务或注册表项还在隔段时间恶意代码又被重新拉起来。正确的清理顺序应该是先断网隔离防止C2通信和数据外传然后清理持久化项包括计划任务、注册表启动项、启动文件夹最后再删除恶意文件。这一套顺序不能颠倒。先删文件再清持久化项中间的空窗期就可能触发自恢复逻辑。清理完成之后一定要修改所有受感染终端上使用过的密码尤其是网银、邮箱、OA系统等关键业务的密码。因为DanaBot已经窃取过键盘记录和浏览器保存的密码单纯清理木马而不改密码等于把家门钥匙留在了小偷手里。另外再补充一点清理之后要持续监控至少一周确认没有再次感染的迹象。有些变种的持久化做得极其隐蔽会在看似无关的服务中注入代码一次清理可能不够彻底。我在实际的项目中反复验证过面对DanaBot这类模块化银行木马最好的策略不是等到发现之后再对抗而是通过威胁狩猎的方式在攻击者完成关键恶意操作之前就发现并阻断。定期复盘攻击者的技术手法持续调整检测规则和阻断策略这比任何单点防护工具都更靠谱。
返回列表