尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

DanaBot银行木马深度剖析:架构、攻击链与防御实战

DanaBot银行木马深度剖析:架构、攻击链与防御实战 前阵子在处理一批恶意邮件样本时又看到DanaBot活跃的身影。这玩意儿第一次出现在大众视野是2018年当时主要盯上大洋洲的银行客户后来一路扩散到欧洲多国和拉美地区到现在还在不断变种。作为一类典型的银行木马病毒DanaBot跟普通挖矿木马、勒索软件完全不同它的目标非常纯粹——你的银行账号、支付凭证、甚至双因素验证的动态码它都想偷。这篇文章我打算从分析人员的视角把DanaBot的技术架构、攻击链路、银行欺诈手法、检测思路和防御建议完整梳理一遍。不管你是搞安全运营的、做恶意样本分析的还是只是担心自己网银安全的技术爱好者都能从里面找到能直接落地的判断方法和防御动作。1. DanaBot的前世今生先看清威胁全貌1.1 它从哪里来又盯上了谁DanaBot最早是被Cisco Talos在2018年曝光的当时的投放目标集中在澳大利亚的几家主流银行通过钓鱼邮件伪装成发票、订单确认书等商业文档向外传播。只要收件人解压附件并启用宏恶意代码就开始在后台静默执行。第一批受害者还没反应过来网上银行账户里的钱就开始被慢慢转走。之后这个家族没消停攻击范围逐渐扩展到波兰、德国、奥地利、意大利等欧洲国家。从命名上看DanaBot这个名字来自它早期版本中硬编码的字符串跟运营团伙的代号没有必然联系所以大家在写报告时也习惯直接叫它DanaBot。它盯上的目标不只是个人网银还包括企业银行账户、加密货币交易所账户、支付平台账号。攻击逻辑其实很简单个人账户单笔金额小但数量大、防御弱企业账户金额大但通常有更严的风控和操作流程所以DanaBot在攻击企业时会动用更复杂的模块组合比如远程控制模块和屏幕监控模块等待受害者主动登录企业网银的那一刻。1.2 它和Emotet、QakBot这些“同行”有什么区别银行木马这个赛道竞争相当激烈前有Zeus后门后有Emotet、QakBot、IcedID这些老牌家族。DanaBot能在里面杀出一条血路跟它的模块化设计和清晰的商业运营模式直接相关。家族初始载荷形式核心功能倾向模块化程度主要盈利方式DanaBot钓鱼邮件、恶意广告银行欺诈、凭证窃取、加密货币窃取高加载即下载多个插件出售访问权限、盗窃资金Emotet恶意宏文档、密码保护压缩包垃圾邮件分发、自传播、载荷下载器中高出租分发通道、分发其他木马QakBot钓鱼邮件、漏洞攻击包银行欺诈、内网横向移动、勒索前导中高定制攻击、勒索投递IcedID钓鱼邮件、恶意宏、Excel 4.0浏览器注入、银行欺诈、后门高银行欺诈、载荷分发DanaBot最突出的差异化能力是三点一是运行起来非常克制平时只做信息收集不搞破坏感染后系统不会出现明显卡顿二是它的注入模块针对全球几百家银行做了精细适配只要目标银行网银更新了页面结构后台很快会推送对应的注入配置三是它常年充当“引导木马”的角色把自己获取到的受害主机访问权限明码标价卖给其他攻击团伙赚取额外的黑产收入。对我做分析的人来说理解一个威胁家族的最好方式不是背IOC而是搞清楚它在整个攻击链条里的定位。DanaBot既是终端上的小偷又是黑市里的掮客两条身份线交织在一起让它能持续存活这么久。2. 模块化架构与核心行为链拆解2.1 分发入口恶意邮件只是第一步这些年我经手的大部分DanaBot样本初始载荷几乎都是钓鱼邮件。整体套路跟普通社工邮件很像发件人伪造为某物流公司、税务机构或者合作企业的财务人员邮件正文一行英文催促“发票已签收请尽快查看”或“您的订单出现异常需要确认附件”邮件附上一个压缩包。压缩包里是混淆过的Office文档常见格式有.docm、.xlsm部分样本甚至会直接用.iso镜像文件打包可执行文件。这里有个很重要的细节——普通安全网关能拦截.exe附件但对.iso或.docm这类格式的历史识别率并不高。攻击者利用的就是这个过滤盲区。解压文档后如果受害者启用了宏恶意宏代码会先进行“环境探测”检查是否运行在虚拟机、沙箱或调试器里。检测手段包括查询CPU核心数、内存大小、当前进程名、是否存在常用分析工具窗口类名等。通过探测后宏会调用PowerShell从远程服务器下载DanaBot的主模块有时也会直接内嵌一段Base64编码的载荷分多次拼接落地执行。2.2 从落地到驻留完整执行链解析把DanaBot的完整执行链拆开看大致可以分为六个阶段钓鱼文档触发受害者打开Office文档并启用宏PowerShell载荷下载宏代码执行powershell -enc命令从C2下载恶意可执行文件模块落地与解密下载的文件通常是加密的内存或磁盘上解密后释放核心DLL进程注入核心DLL注入到合法的系统进程如svchost.exe、explorer.exe中规避基于进程名的检测驻留写入注册表Run键或者创建计划任务确保重启后仍然存活下载扩展模块连接C2服务器按配置拉取VNC模块、抓屏模块、窃密模块等。这个过程中DanaBot特别注重“无文件化”。主模块很多时候并不会以独立进程形式暴露在任务管理器里而是直接反射加载到已有进程中磁盘上不留下完整的可执行文件。这样的设计让基于文件扫描的杀毒软件很难发挥作用也让我在样本分析时需要额外关注进程的内存空间。2.3 模块体系与动态更新机制DanaBot最值得分析的地方就是它的模块化体系。主模块更像一个“平台框架”完成基础通信和更新功能然后根据C2下发的指令加载不同功能的子模块。常见模块包括屏幕抓取模块定时截取用户屏幕用于观察用户是否登录网银、输入了什么内容键盘记录模块记录用户的所有键盘输入尤其是账号密码和搜索内容Web注入模块在浏览器访问银行网站时动态注入脚本篡改页面内容或增加伪造表单VNC模块提供远程桌面控制能力攻击者可以直接在受害者的电脑上进行转账操作Cookie窃取模块窃取浏览器保存的Cookie和会话信息用于劫持已登录会话加密货币剪贴板模块监控剪贴板中的加密货币地址替换成攻击者自己的收款地址。模块本身并不一次性全部下载而是根据C2指令按需下发。这样做的目的很明显——减少网络流量特征降低被检测概率同时让样本在感染初期看起来格外安静。C2通信方面DanaBot会使用加密的C2协议并且频繁切换服务器域名。部分版本甚至实现了基于DGA域名生成算法的备用通信机制每次运行都会按时间和随机种子生成一批候选域名。哪怕主C2被安全厂商封禁恶意软件仍然可以通过算法生成的备选域名重新建立连接。3. 银行欺诈的核心武器Web注入与凭证窃取技术解析3.1 Web注入让页面“看起来”一模一样传统键盘记录器只能拿到用户输入的账号密码但遇到动态密码、自定义键盘、设备指纹校验时往往无能为力。DanaBot的解决方案是直接在浏览器页面里“动手脚”。当用户访问银行网银站点时DanaBot的Web注入模块会向页面中注入JavaScript脚本。脚本可以做的事情非常多隐藏真实的转账金额、篡改收款人账号、在登录页面下方增加一个“短信验证码确认”的伪造输入框甚至可以将用户跳转到钓鱼页面。这里有一个很能说明问题的细节注入脚本并不会修改浏览器以外的系统环境所以杀毒软件很难感知“浏览器里发生了异常”。用户看到的页面和真实银行页面几乎一模一样只是多了一步“确认收款信息”的操作或者验证码输入页面多了一个字段。等到用户确认转账、输入动态码钱已经被转到了攻击者控制的账户。3.2 绕过双因素认证的常用手法很多人觉得只要开启了短信验证码或动态令牌银行账户就万无一失。DanaBot用实际攻击行为告诉我们双因素认证并非无懈可击。绕过方式通常有三种会话劫持Session Hijacking用户登录成功后Cookie和会话Token还保存在浏览器里DanaBot直接窃取这些信息然后在攻击者自己的设备上复用会话完全绕过登录密码。实时转账劫持In-session Transaction Manipulation攻击者不篡改用户的登录过程而是等用户自己输入转账信息在转账请求的最后一瞬间通过浏览器注入将收款账号替换成自己的账号。伪造验证码输入框当银行要求输入短信验证码时注入脚本会在原页面上覆盖一个额外输入框诱导用户把验证码同时输入到伪造框内攻击者拿到后立刻在另一台设备上操作转账。第三种手法杀伤力最大因为整个过程用户都是“自己操作”的银行端看到的也是合法会话风控系统很难识别异常。这也是我每次跟朋友强调“不要在陌生页面输入动态码”的原因——你根本不知道页面上多层输入框里哪一层是银行自己设计的哪一层是木马偷偷加进去的。3.3 数据回传与C2通信的隐蔽性设计数据传回C2时DanaBot同样做了很多加密混淆。早期版本使用RC4加密和自定义的Base64变体编码后来随着安全设备解码能力的提升新版本又加入了AES加密和伪字段填充让流量看起来跟普通HTTPS请求几乎没有区别。C2基础设施方面运营团伙大量使用动态DNS域名和短期租用的跳板服务器同时将真实C2服务器隐藏在多层跳板之后。安全研究人员通过追踪IOC的方式很难在一轮处置中彻底斩断它的通信链路。这也解释了为什么DanaBot被曝光这么多年仍然能在新一波攻击中不断出现——清理一台C2服务器的同时攻击者已经准备了十台备用服务器。4. 检测与防护从主机到网络层的对抗实践4.1 主机侧检测行为而非特征对付DanaBot这类恶意软件单纯依赖杀毒软件的特征库是远远不够的。因为攻击者随时可以更换C2地址、改变加载器代码、重新混淆DLL特征库永远慢半拍。我在实际检测中更推荐以“行为链路”为核心的分析策略。重点监控以下几类行为事件Office进程派生PowerShell正常情况下文档编辑软件不该去启动PowerShell或命令行。一旦出现大概率是宏在作恶。PowerShell执行混淆指令-enc参数、Base64长字符串、IEX下载执行指令都是危险信号。计划任务或注册表启动项异常新增需要在用户上下文、系统目录下快速创建。跨进程内存写入特别是从PowerShell或WMI进程向系统进程写入可疑代码这是典型的进程注入行为。DLL加载路径异常合法的Windows进程不应该从临时目录或用户目录加载DLL。用Sysmon或EDR的事件采集能力把这些行为串成一条完整的攻击链再配合威胁情报做关联分析才能实现对这类无文件攻击的有效识别。4.2 网络侧检测揪出异常通信主机侧做行为监控的同时网络侧也不能闲着。DanaBot虽然加密了C2通信但通信过程中仍然存在固定模式的指纹特征。比较常用的检测维度包括DGA域名请求DGA生成的域名通常字符分布随机、长度不规律可以通过DNS日志分析检测可疑的短连接探测感染主机与外部C2地址之间高频短连接且大部分是加密流量DNS请求频率异常单台主机在短时间内对大量未知域名发起DNS请求JA3/JA3S指纹恶意软件使用的TLS客户端指纹与正常浏览器不同使用JA3指纹库可以做匹配。我在自己维护的检测规则库中长期运行着一条针对DanaBot通信特征的Snort规则示例alert tcp $HOME_NET any - $EXTERNAL_NET $HTTP_PORTS \ (msg:DanaBot C2 Beacon Pattern Observed; \ flow:established,to_server; \ content:POST; http_method; \ content:.php; http_uri; \ pcre:/\/api\/[a-z0-9]{8,32}\.php$/i; \ threshold:type both, track by_src, count 5, seconds 60; \ sid:10000001; rev:1;)这类规则需要结合真实观察到的DanaBot通信模式持续调优因为攻击者也会分析检测规则更新自己的流量特征。实操中我建议把网络侧检测定位为“发现可疑行为再做人工研判”而不是完全依赖规则自动阻断。4.3 个人与企业防御建议防御DanaBot最重要的是建立一个“纵深防御”的思维不要把希望寄托在单点防护上。防护层级具体措施解决的问题邮件网关拦截高风险的压缩包、宏文档、双扩展名附件从入口阻断大部分投递终端防护启用行为检测、禁用Office宏、限制PowerShell执行策略让恶意代码无法运行或落地网络防护部署DNS过滤、威胁情报拦截恶意域名、流量检测切断C2通信通道身份与访问对银行网站要求单独浏览器环境、启用无痕模式、使用企业级统一身份认证降低凭证被窃取的概率用户意识不打开陌生附件、不随意启用宏、警惕“紧急付款”话术让人为失误最小化对企业来说建议把网银操作机器与其他办公网络做逻辑隔离网银终端禁止安装无关软件、禁止访问外部网站操作完成后清理浏览器缓存。对个人来说不管是网银还是支付平台能开硬件安全密钥或唯一性动态令牌的尽量多开一层能不在公共电脑上登录网银的坚决不登录。5. 分析沙箱中的实战复盘行为特征与追踪线索5.1 搭建安全的分析环境如果你也打算手动分析DanaBot样本我强烈建议先做好实验室隔离。我的环境是VMware Windows 10虚拟机 Fakenet-NG本地网络模拟必要时再加一个INetSim伪造DNS和HTTP服务。关键步骤两块一是确保虚拟机与宿主机网络隔离物理网卡摘除只保留虚拟交换机二是给虚拟机做快照保证每次分析都能恢复到干净的起点。DanaBot同样有反分析能力所以启动分析前还需要处理几个细节关闭Windows Defender实时保护否则样本没跑起来就被删了、禁用Windows更新服务和SmartScreen、设置虚拟机的CPU核心数为2以上、内存不少于4GB。5.2 手工分析的关键指标IOC拿到一个DanaBot样本后我一般会先做静态分析再用动态分析验证。静态方面最常用的是查字符串、查导入表、查PE节区。DanaBot的加载器在字符串上有个明显习惯——大量使用/api/、/login.php、随机字母组合的URL路径以及Base64变体编码的配置数据。提取DGA种子和初始C2地址是分析时的关键一步。除此之外还可以从配置里拿到受害者的唯一ID、目标银行标识、模块下载地址列表这些情报这些内容都会成为威胁情报平台上的高质量IOC。YARA规则是追踪DanaBot变体的实用工具。我基于早期样本写过一条简单示例可以扩展到自己的规则库中rule DanaBot_Loader_Heuristic { meta: author analyst description Heuristic detection for DanaBot loader components strings: $a DanaBot ascii wide $b cmd.exe /c ascii $c powershell -enc ascii $d http:// ascii $e .php ascii $f { 6A 00 6A 01 6A 02 6A 03 } // push 0; push 1; push 2; push 3 condition: uint16(0) 0x5A4D and filesize 500KB and 3 of them }当然规则只是线索碰到具体变体还得回到行为分析上验证不能“一招鲜吃遍天”。5.3 我踩过的坑反调试、沙箱逃逸与样本混淆做DanaBot分析这几年有几个坑几乎每次都会踩到。第一个坑是反虚拟机检测。早期版本只是检查CPU核心数、内存大小和磁盘型号后来版本开始通过WMI查询主板序列号、BIOS版本、显卡型号来判断自己是否跑在虚拟环境里。检测到虚拟环境后样本会直接退出什么都不执行。应对办法是给虚拟机做“伪装”修改VMX配置文件、加装特定驱动、调整系统信息。如果你跟我一样经常做样本分析建议把这些伪装步骤固化成一套模板节省反复调试的时间。第二个坑是长时间延迟和条件触发。部分样本启动后不会立刻释放恶意行为而是等待用户空闲、鼠标移动、系统时间触发特定时间窗口后才执行。这意味着沙箱的默认5分钟运行时间根本不够用。我通常至少观察30分钟期间手动模拟用户操作必要时直接分析它从C2拉回的后续模块。第三个坑是混淆字符串对抗。新版本的DanaBot很多配置字符串不再以明文存储而是用加密算法处理后存放在数据段。静态搜索字符串时一无所获必须动态调试到解密函数的位置手动查看解密后的数据。遇到这种情况调试器断点加内存映射分析就是常规操作了没有太多捷径可走。6. 从DanaBot看银行防线升级安全建设的启示6.1 为什么传统风控不够银行的风控系统这些年其实一直在升级但DanaBot这类木马正好打在传统风控的痛点上——它操作的是“合法用户的合法会话”。风控规则设定的是“单笔大额转账需要二次验证”“异地登录需要短信确认”但DanaBot既不异地、也不频繁它就在受害者自己的电脑上悄悄修改收款信息等用户自己完成验证。这种情况下传统规则引擎很难触发预警。真正有效的是行为分析用户平时转账习惯是固定几个收款人突然目标账户是新开户且小额多次试探就要触发异常鼠标轨迹、键盘节奏、页面停留时间这些生物行为特征也可以作为风控判断的辅助维度。当然这些都涉及用户隐私保护和模型误报的平衡问题实施起来并不容易。6.2 客户端的最后一米防线银行端再强的风控系统也管不到用户自己电脑上浏览器里运行了什么脚本。所以针对DanaBot这类威胁不少银行开始试点“专用安全浏览器”方案。这类方案用独立进程隔离网银环境关闭插件能力同时对网页内容做合法性校验。另外一个有效的思路是“行为反向确认”。用户发起转账后银行不仅要求用户输入动态码还要求用户在手机银行App上对收款人信息做一次二次确认。攻击者哪怕劫持了PC端页面也无法同时劫持用户手机上的官方App。我在分析日志时看到DanaBot针对这种做法开始尝试“小额试探诱骗用户自行确认”的组合手法说明对抗双方都在不断升级招法。对我个人而言这份分析做下来最大的感受是威胁情报和安全防护从来不是一锤子买卖。DanaBot从2018年出现到现在加载器换了好几代、C2手法越来越隐蔽、模块体系越来越完善但它的核心目标一直没变——围绕银行资产做精细化欺诈。防御者能做的不是指望某一天把所有恶意软件都“彻底消灭”而是不断缩短从发现可疑行为到完成处置的时间窗口把攻击者的每一步都变得昂贵、麻烦、容易暴露。这大概才是安全对抗的真实姿态。
返回列表