
一次授权攻防演练里我卡在内网阶段三天没挪窝。目标网络杀软覆盖率接近百分之百终端、服务器、甚至打印机连着的工控机都装了企业版杀软管理平台状态全绿。常规的免杀马一落地就被查杀白名单程序枚举了半天能用的只有系统自带的几个命令。直到某天做内网资产梳理我发现全网大量终端装着同一个远控软件——向日葵。当时没太在意但后来在尝试对一台服务器做口令复用的时候我意外通过向日葵的安装目录拿到了该主机的高权限忙操作入口接着做了一连串测试发现杀软全程没有反应。那一刻我意识到这条路子可能比想象中深得多。这篇文章记录的就是当时这段经历。我会拆解为什么杀软会对这类远控软件睁一只眼闭一只眼攻击者是怎么在完全不动用免杀马的前提下借向日葵的通道把命令打进去的以及作为防守方我们应该怎么发现和封堵这种利用方式。内容聚焦原理和思辨所有操作均在授权测试环境下完成别拿去搞不合法的事。1. 项目背景与目标环境1.1 遇到的“铁桶”内网那次攻防演练的靶标是一家规模不小的企业域环境办公终端三百多台服务器区有独立的防火墙和入侵检测设备。从外网突破还算顺利通过钓鱼拿到一个前台终端权限但接下来就撞墙了。终端上跑的企业版杀软具备完整的进程防护、文件监控、脚本监控、流量过滤功能我上传的测试工具生命周期没超过十秒命令执行也被限制得比较死PowerShell受语言模式约束VBS脚本被查杀连无文件落地的方式也在流量侧被盯得很紧。最有意思的是杀软对系统自带的ping、net、tasklist这些命令完全不拦但一旦出现自定义可执行文件立刻杀。这意味着目标网络对“非可信程序”几乎是零容忍策略典型的企业安全基线默认情况下只允许可信厂商签名的程序运行其余全部拦截。常规思路在这套体系面前基本失效。在整个测试进入瓶颈的时候我开始做内网横向信息收集重点筛了目标机器上安装了哪些第三方软件。扫了一圈发现办公区几乎所有终端都装着向日葵远控软件而且很多是无人值守模式开机自启、密码固定不更新。我最初只是把它当作一个信息点记下来没觉得能有什么用。1.2 为什么向日葵能成为突破口远控软件普遍有一个特点杀软默认信任。这里面有很现实的原因企业客户需要IT部门远程运维在线技术支持也需要远控工具才能解决问题如果杀软把这些软件全杀掉业务会直接受影响。所以主流安全产品基本都会将头部远控软件的进程、模块、签名加入白名单。向日葵正好属于这个范围。它的官方签名在杀软的可信列表里安装后的进程、驱动、服务默认不受拦截。这意味着什么攻击者完全不需要另写免杀马只要想办法把数据和指令放进向日葵的信道里杀软就会因为“这是远控软件自己的流量和进程”而放过。从我当时的环境来看向日葵还具有两个被忽略的特性第一它支持命令行参数可以通过静默参数调起主程序第二它带文件传输和远程桌面功能并且支持“被控端主动连接中继服务器”的穿透型通信模式。只要目标机上的向日葵处于在线状态那么哪怕目标机在深度隔离网段攻击者也能借助向日葵的官方中继链路从外网或内网其他位置触达它。杀软在这个通信过程中什么都看不到因为流量加密且走的是信任通道。所以这里真正有价值的不是向日葵这个软件本身而是它提供了一个“杀软信任的执行上下文”。攻击者要做的就是想办法把自己的代码塞进这个上下文里。听起来简单实际测试过程中踩了不少坑后文我会把关键环节逐个拆开讲。2. 核心思路杀软到底在放过什么2.1 杀软对远控软件的“默认信任”逻辑要理解这个攻击链首先得理解杀软的信任逻辑是怎么运作的。成熟企业版杀软通常有三个层面的判定静态信誉、动态行为、关联分析。静态信誉包括文件的数字签名、哈希、厂商、版本动态行为包括进程创建行为、注册表修改、敏感API调用关联分析则是看某个进程有没有被其他已知恶意进程拉起。对于向日葵这类头部远控软件它的数字签名有效、发布历史悠久、在大量政企单位都有装机所以在静态信誉层面天然为“高信任”。动态行为层面呢远控软件本身就要做键盘记录、屏幕捕获、文件操作、进程注入这些行为如果放在一个陌生文件身上妥妥是恶意特征但因为厂商和信誉的关系杀毒引擎会把它们解释为“正常远程运维行为”。攻击者利用的正是这个解释机制。打个比方一个小区保安对戴着物业工牌的人进小区不盘查平时能提高通行效率但如果这个小偷混进了物业工牌而且借物业的通道搬运赃物保安的信任机制就成了帮凶。我在测试中做了一个小实验在目标机上用向日葵的“远程命令”功能直接传入whoami然后在杀软管理后台看日志结果只有任务计划相关的记录没有任何安全告警。随后我又尝试用向日葵的文件传输功能把一个自写的DLL传过去再通过向日葵的远程桌面手工执行也没被拦。这说明整条链路的关键不在于“执行了什么”而在于“从哪个上下文执行”。2.2 从“代理通道”到“执行通道”的置换最开始我打算把向日葵当作一个稳定的内网代理用来穿过网络隔离区。后来发现这个思路低估它了。向日葵不只是通信隧道它本身就是一个完整的远程交互环境等于给攻击者提供了一个合法的图形化终端。攻击者不需要自己去搭代理、部署后门只需要找到一个可以触达向日葵控制端的方式即可。具体一点被控端的向日葵客户端会定期向中继服务器发起连接保持控制通道在线。攻击者有三种方式触达这个通道一是直接知道目标机的识别码和验证码通过官方客户端连接前提是能拿到码二是如果本地已经有权限可以读取向日葵本地存储的配置文件解出识别码再配合键盘记录或暴力破解获取验证码三是利用向日葵提供的命令行接口在本地直接拉起远程控制会话。我实现的路径属于第二条。在某台高权限服务器上我通过弱口令进入后读取到向日葵的安装目录其中包括存放配置和账号信息的文本文件。进一步解析后拿到了这台服务器的识别码然后利用一个已有的中继能力连入了它的会话。整个过程没有新增任何网络监听端口没有释放传统意义上的“后门”唯一的变化是一条合法的远控连接出现在目标机器上。这还没完结真正让后续横向渗透顺利的是“执行通道置换”把原本需要在目标机上释放工具的做法替换成“通过向日葵界面输入命令”。杀软盯的是“谁创建了进程”而进程的父进程是向日葵主程序属于可信链顶端因此子进程全部获得信任。在实战里这意味着我可以在目标机上随便跑net、tasklist、whoami甚至用系统自带的PowerShell脚本块创建执行任务都看不到一条告警。3. 实操过程利用向日葵完成关键突破3.1 第一步确认向日葵安装情况与版本进入内网环境后我首先跑了一轮资产探测把所有在线主机的安装软件清单拉出来。用的是系统自带的wmic和PowerShell命令因为这两个不落地文件杀软不关心。在批量的wmic查询里我筛出包含sunlogin或远程控制关键词的程序名再进行去重统计。结果是办公区和企业服务器区有超过120台机器安装向日葵其中近一半处于开机自启状态版本号集中在某个固定周期的大版本内。这里有个容易被忽略的点向日葵的历史版本中部分版本的通信协议和配置文件格式有公开分析报告。了解版本号就能知道它的控制端口、加密算法、配置存储路径这对于后续解析配置非常关键。所以实战中第一步千万不要直接连先摸版本。3.2 第二步借道向日葵建立入站通道我成功控制的那台服务器没有独立的入站路径外网无法直接访问安全组也限制得很严格。但我看到向日葵的进程在跑且状态是“在线”意味着它正连接着官方中继服务器。接下来我尝试读取本地连接配置。向日葵客户端的配置文件通常存放在安装目录下的某些数据文件中里面包含了设备识别参数和本机唯一标识。通过读取并解析这些字段我拿到了该主机在远控网络中的“设备ID”相当于一个公网可达的标识。然后我通过自己的控制终端模拟正常客户端向中继服务器发起会话请求。由于配置信息有效中继直接建立了我与目标机的端到端通道。这一步的流量走的是向日葵官方的加密链路目标机器上的杀软即使开启流量深度检测也解不开这层加密更不可能判断这是一个异常会话。建立通道后我首先拿到的不是桌面而是命令行会话。向日葵支持在不弹远程桌面的情况下执行命令这个能力原本是给运维人员批量下发指令用的实战里我却能拿来跑内网命令比如查看当前用户、网络连接、共享目录。整个过程杀软毫无反应。3.3 第三步在杀软眼皮底下执行命令在命令行会话里我先跑了net user、whoami /all、tasklist /svc等基础命令确认当前上下文是SYSTEM权限。这一步很重要因为如果权限不够后面提权会增加很多风险。拿到SYSTEM后我尝试了两条命令链都成功执行第一条是PowerShell下加载解码后的程序集。因为PowerShell属于系统自带可信进程我通过-enc参数传入编码后的命令让PowerShell在内存中解密并执行。杀软对这种行为的检测主要基于脚本内容特征而我测试时使用的命令经过编码后特征不典型加上由向日葵的子进程触发直接放行。第二条更为干净利用系统自带的bitsadmin命令从内网一台备用服务器拉取工具包。这个命令本身是Windows原生的在可信签名列表当它由向日葵上下文中运行时杀软对父子进程链的扫描形成了一条“可信到可信”的传递链没有触发任何告警。这一步最核心的经验是不要上传任何新的可执行文件不要开放额外的端口不要注册计划任务。所有动作都设法让现有可信程序完成让向日葵当那个“放大器”。免杀在这里反而不是最重要的最重要的是把整个操作路径隐藏在可信链条内。3.4 第四步后渗透与横向渗透有了SYSTEM会话我开始收集域信息。通过向日葵的命令行会话执行域内查询拿到了管理员组、域用户列表、登录会话等关键数据。因为会话本身来自向日葵进程所以所有查询产生的日志在主服务器上只体现为“远控软件执行了命令”绝大部分安全设备对这种日志连告警级别都不会设置。随后我利用相同手法批量检查其它向日葵客户端对每台机器确认向日葵是否在线是在线就直接复用配置解析结果建立会话。这样做的好处是彻底的“无文件横向渗透”不需要在每台机器上重复释放扫描器或利用工具只需要在控制端维护连接列表。整个过程中我在每台机器上停留的时间尽量短命令只做关键查询不复制大量数据避免触发上网行为管理或审计系统。向日葵的会话日志如果没有人主动查阅几乎不会受到任何关注。拿下域控前的最后一步是通过一台具有域管理员会话的服务器重置了其中一台备用域控的本地管理员密码然后从向日葵通道登录过去。至此整个域已经完全可控而目标安全团队的告警大屏上一片平静。4. 常见问题与排查4.1 为什么杀软没有报警这是最容易引发困惑的点。很多防守方以为装了杀软就万事大吉却忽略了杀软对签名软件的高度依赖。向日葵被信任是产品策略决定的不是漏洞。攻击者利用的是信任模型本身一旦父进程被认为是可信的其创建的所有子进程都会继承这份信任。这个机制不仅存在于向日葵几乎所有被加入白名单的远程运维工具都有类似风险。从定位问题角度看如果靶机上没有装杀软整条链路的攻击效果差很多正是因为杀软把向日葵当成自己人才给了后续操作充足的缓冲空间。所以当防守方发现杀软“全绿但被拿域控”时优先要检查的不是杀软的有效性而是有没有第三方远控、运维通道被滥用。4.2 向日葵被安全策略限制怎么办测试中也不是所有向日葵都能被直接利用。部分重点服务器上安全策略会限制向日葵的通信端口或者通过软件管控策略禁止其运行。遇到这种情况解决思路不是想办法绕过策略而是换一个能被信任的模块。比如在目标机中发现存在不限制签名的自启动项或者有其它官方运维代理在运行思路完全一致把所有需要执行的动作换到该可信进程的上下文里。工具永远是换皮核心逻辑不变就是要找到杀软信任的执行入口。另外某些场景下向日葵虽然没有运行但其安装目录并没有被清理。这种情况下可以通过加载安装目录里的中转DLL或者利用已注册的COM组件间接调起同样可以复用原来的信任路径。不过这个方法的成功率依赖目标系统本身的完整性并不总能奏效。4.3 远程登录时的识别问题我在利用向日葵时遇到的另一个坑是如果目标机上的向日葵正在被其他运维人员实时使用那么并发控制会造成会话冲突弹窗提示对方已被控制。这种弹窗可能引起现场人员注意如果对方顺手汇报或截图行动就会暴露。应对方法是尽量选择无人值守模式运行的向日葵或者挑业务空闲时段操作。更重要的是动作要轻不要移动鼠标乱点不要打开奇怪的窗口尽量通过命令行功能完成操作。向日葵的命令行与会话窗口对用户干扰更低有一个隐藏参数可以直接执行命令而不弹界面这个对渗透测试来说价值很高。测试后期我在控制某几台服务器时发现有人通过向日葵外连当即放弃了那几台机器转向其它目标。宁可少收集一些数据也不能暴露行动痕迹。5. 防御侧的反制与加固5.1 通过日志发现向日葵被滥用尽管向日葵通道流量加密但远控软件的运行过程依然会留下蛛丝马迹关键是看日志维度。我建议从四个层面找出异常进程日志查看向日葵主进程是否存在异常的“创建子进程”行为尤其是非运维时段出现cmd.exe、powershell.exe被拉起的情况。连接日志分析向日葵进程的TCP连接如果连接的目的IP或端口范围与它常用中继列表不一致需要重点排查。配置变化向日葵的识别码、验证码不会频繁变化如果短期内有多次重新连接或切换账号行为值得关注。用户登录日志通过向日葵远程会话执行的命令会在系统审计日志中留下记录但需要开启对应策略才能采集到。防守方可以制作一个白名单文件哈希与进程校验清单定期比如每小时对向日葵安装目录做快照比对。如果发现安装目录多出未知DLL或可执行文件立刻报警。5.2 终端侧收敛远控软件既然向日葵这类工具可能被滥用终极防守策略是能不用就不用。但现实是企业普遍需要远程运维完全禁用不现实。更合理的做法是分级管理办公终端维持最小化安装只有IT运维人员工位才允许安装远控软件普通业务终端一律不装。运维专用跳板机所有远程运维操作必须经过跳板机向日葵只部署在跳板机上不直接暴露在各终端。统一管控如果确实需要大规模安装必须使用企业版本并且通过策略中心控制连接权限定期更新识别码禁止个人账号接入。做这些收敛动作的同时建议在杀软策略中把向日葵的“命令行执行”能力禁用掉。如果远控软件本身不提供这个开关可以用软件限制策略锁定其主程序的命令行参数让攻击者无法通过静默参数随意调用。5.3 针对杀软盲区的弥补基于这次攻防测试的观察我强烈建议安全团队在杀软之外增加“行为分析层”的检测不要以为终端杀软全绿就安全。至少补充以下检测点对powershell.exe、cmd.exe、cscript.exe等敏感进程的调用源进行追踪记录父进程信息。针对向日葵的子进程链如果出现从向日葵直接拉起PowerShell并连接内网其他主机的情况加入高危告警规则。利用EDR或者自研监控工具把可信签名软件的“异常行为”也纳入检测。远控软件本身做远控是正常的但远控软件的主进程调用内网扫描命令、访问域控制器明显超出了“远程运维”的操作范围。我在测试后期尝试过写一条简单的监控规则当SunloginClient.exe化名创建powershell.exe且/enc参数出现时立即通知。如果可以部署这类规则我这整条攻击链会在第一步就暴露。所以防守方真正要做的不是阻止攻击者获得某个工具而是打破“可信进程创建的子进程全部可信”这条默认规则。6. 写在最后的小体会那次演练结束后我把向日葵作为案例写进报告再复盘时反而觉得真正危险的并不仅仅是一个远控软件。杀软的静态信任机制给了太多第三方工具“免死金牌”而内网里类似向日葵这样的骑墙软件还有很多比如各种硬件运维网关、堡垒机客户端、云监控插件。它们每一个都可能成为攻击者手里的“合法跳板”。对我来说最大的收获是理解了一个原则在攻防对抗中永远不要低估环境里已有的工具。很多安全团队天天盯着防御盲区却对装在各终端上的运维软件视而不见。从攻击者视角看这些就是送上门的通道。防守方如果能把这类通道管住再配合对可信进程子链的行为审计大部分类似的绕过尝试都会被挡下来。如果你现在正在做内网防护建议立刻排查一下全网有多少终端装了远程控制/运维类软件这些软件安装在哪些账号下谁掌握识别码和验证码杀软是否对它们完全放行这几个问题问完你大概就能知道自己门口是不是也有这么一把“向日葵钥匙”。