前阵子帮人处理一台电脑,现象很典型:风扇狂转、网页加载慢、浏览器里多出一堆不认识的广告。排查到最后,问题出在一周前安装的“Notepad++”上——软件本身完全能用,但系统的代理设置被改成了一个陌生地址。这类以Notepad++钓鱼为入口、逐步升级到代理劫持和带宽掠夺的黑产链路,近几年已经相当成熟。
这篇文章不打算讲“赶紧装个杀毒软件”这种废话。我会把攻击者怎么把安装包做得以假乱真、怎么改掉你的系统代理、改完之后拿你的带宽干了什么,以及个人和企业分别怎么排查处置,一条一条拆开说。整个过程按实战视角来,命令和工具都是我实际用过的。如果你只用电脑聊微信刷网页,最后一章可以直接看自查部分;如果你是运维或安全工程师,中间的链路分析大概率能帮你在企业里提前卡住同类攻击。
1. 一款文本编辑器,为什么会成为黑产的黄金入口
1.1 搜索下载场景里隐藏的仿冒站点生意
Notepad++这个工具很特殊:用户量大,几乎每个开发者电脑上都有一份;更新频率高,隔一阵子就会收到“请下载新版本”的提示;而且它的官网和更新服务器的响应速度有时并不稳定,很多用户干脆习惯直接在搜索引擎里搜“notepad++下载”“notepad++官网下载”。
搜索引擎结果页前几位里有大量广告位和下载站,网址乍看都差不多,有的甚至把Notepad++的图标、界面风格原样搬过去。做这种仿冒站的成本极低:注册一个近似域名、套一个下载页模板,几小时就能上线。更恶劣的是,有些仿冒站直接把官方开源代码编译出来的程序原封不动放出来,软件行为完全正常,只是在安装过程中额外释放一个后台载荷。
用户判断软件真伪的习惯往往是“能装上、能打开、能编辑文件,那就是真的”。攻击者赌的正是这个心理——他们要的不是骗过杀软,而是骗过你。
1.2 插件生态的信任盲区:Python Script 等热门插件的二次利用
搜索热词里除了“notepad++下载”,还有很大一批是“notepad++ 插件python script用法”。Notepad++的插件生态非常活跃,Python Script因为能写脚本处理文本批量操作,被大量教程文章反复推荐。很多用户装完主程序之后,会继续去搜插件安装包和用法教程。
黑产会顺着这个热词做SEO文章,也会专门做“Python Script插件下载包”,甚至把恶意DLL伪装成插件的依赖文件放在下载站里。用户下载后解压进plugins目录,打开编辑器时恶意代码就被加载了。插件的权限和当前用户一样,在办公电脑上,这个权限足以读写大部分文件、创建计划任务、修改注册表。
这里要说明一下:Python Script插件本身并没有漏洞,被利用的是用户获取插件的渠道不干净。只要你从非官方渠道拿任何插件包,它都有可能在“帮你的编辑器加功能”的同时,帮你加一个后门。装插件这件事,在攻击链里往往比装主程序更容易被忽略。
1.3 为什么攻击者偏爱小工具而不是大软件
大软件的更新机制成熟,用户也会更警惕“官网”伪装;小工具则完全不同,用户很少去记它们的官方域名,装完就忘,出了问题第一反应是网络不好而不是软件有问题。
更关键的是,小工具安装包体积小、下载快、传播面广,仿冒成本低。Notepad++这类软件的官网和更新服务响应速度不稳定,下载体验一般,用户天然倾向于去“下载站”找快捷方式。攻击者筛选目标的标准其实就一句话:高安装量、低警惕度、没有自动更新机制。文本编辑器、压缩工具、PDF阅读器、截图软件都属于这类目标。
题外话,标题里的“全网”在安全圈里其实不是指真的能劫持整个互联网,而是指黑产把成千上万台被感染终端聚合成一张可控的流量网络。单个受害设备贡献的带宽也许有限,但数量累加之后,就是一笔相当可观的“带宽资源”,这也是整条黑产生意的底层逻辑。
2. 代理劫持的攻击链:从双击安装包到流量悄悄改道
2.1 恶意安装包的典型落地结构
攻击链的第一环是安装包。大多数恶意安装包都是用NSIS或Inno Setup打包的,这些打包器在杀软看来是正常的“安装程序框架”,并不会因为用了它们就报毒。
安装程序通常分三步走:先释放一个正常的编辑器本体,保证你打开之后能用;再静默释放一个随机命名的DLL或EXE到临时目录;最后通过DLL劫持、计划任务或服务把这些载荷激活。有的安装包还会在完成时自我删除,安装器没了,取证难度和清理难度都增加不少。
你以为自己装的是Notepad++,实际上你装的是一个“带正常编辑器的恶意分发器”。一个看似正常的双击动作,把恶意载荷、持久化组件、代理篡改代码全部带进了系统,而你在安装完成的那一刻只会看到熟悉的编辑窗口。
2.2 系统代理配置的三大篡改入口
Windows系统里,代理相关的配置实际上分三套体系,很多人只知道浏览器里的那个设置项。
第一套是WinINET层,绝大多数桌面应用和浏览器的网络请求都走它。配置存在注册表这个位置:
HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings重点关注三个值:ProxyEnable(代理开关)、ProxyServer(代理服务器地址)、AutoConfigURL(自动配置脚本PAC地址)。攻击者只要把ProxyEnable改成1,把ProxyServer指向自己控制的中转服务器,流量就会在用户完全不知情的情况下绕路。
第二套是WinHTTP层,系统服务、命令行工具、部分后台程序走它。可以用netsh winhttp show proxy查看当前配置,正常状态下它应该显示“直接访问”。
第三套是环境变量HTTP_PROXY和HTTPS_PROXY,很多开发工具、Python脚本、Git命令默认会读取这两个变量。黑产在篡改开发机的时候经常顺手把这两个环境变量也改了,这样命令行下发指令时也会被截获。
这里补充一个关键概念:AutoConfigURL指向的PAC文件,本质上是一段JavaScript函数。浏览器每次发起请求前都会执行这个函数,由它决定当前网址走直连还是走中转。攻击者用PAC可以实现精细分流,让一部分流量看起来完全正常,把另一部分引到中转服务器,这种配置最隐蔽,也最难被发现。
2.3 为什么偏偏是代理劫持而不是DNS劫持
黑产完全可以直接改DNS或者劫持hosts,为什么更偏爱代理劫持?一句话:隐蔽性。
| 对比项 | 代理劫持 | DNS劫持 |
|---|---|---|
| 作用层面 | 系统网络配置 | 域名解析 |
| 用户感知 | 流量中转,网页还能正常打开 | 网站打不开、频繁跳转 |
| 被发现的难度 | 高,设置项极少有人检查 | 低,网络异常很快暴露 |
| 持久化手法 | 注册表+计划任务+服务 | 改DNS和hosts,易被重置 |
| 清理难度 | 较高,需要清多个点 | 较低,改回DNS即可 |
DNS劫持一旦生效,用户经常直接打不开网站,很快就会发现;代理劫持只是在你和目标网站之间多了一站“中转”,你看到的页面仍然正常,甚至内容都几乎没有变化,只有访问速度和带宽悄悄出现异常。
在企业环境里,管理员通常会定期重置DNS配置,但HKCU下的代理设置往往不在默认监控范围内,这给黑产留下了很大的操作空间。这也是为什么代理劫持在近几年成了下载型木马最常用的流量控制手段。
2.4 持久化机制:删掉设置还会回来的原因
真正让人头疼的是后半段——清理完了,没两天代理设置又出现了。这不是玄学,而是恶意程序的典型持久化策略。
我处理过的样本里,最常见的有三类持久化方式:
第一,计划任务。恶意程序在系统里注册一个名字完全看不出来历的任务,比如随机8位字母,每隔几十秒执行一次“检查并重写代理设置”。
第二,服务。注册一个自启动服务,把代理键值恢复成攻击者想要的状态。
第三,启动项。放在Run、RunOnce、启动文件夹里,每次开机先执行一次。
这三种方式可以同时存在,互相“守护”。你改了注册表,守护进程会改回来;你删了计划任务,服务会重建;你停了服务,启动项可能又把它加回去。很多人在清理代理劫持时犯的最大错误,就是只改了设置,没动后台,结果几分钟后一切恢复原状。
3. 被劫持后的带宽去了哪里:黑产的变现与影响评估
3.1 代理池转售:你的IP和带宽成为商品
被劫持的电脑会被黑产组织编织成一张规模很大的中转网络。在安全圈里,这类网络常被称为代理池。每个受害设备的IP地址都会被当成一个出口资源,按小时或者按IP数量卖出去。
买这些资源的人用来干什么?注册大量的平台账号、秒杀抢购、刷评论、批量爬取数据、绕过风控。关键在于,这些IP来自真实的家庭宽带和办公网络,在风控系统的视角里就是“真实用户”,比机房IP值钱得多。
受害者的体验是什么样的?特定时段带宽被占满,网速明显下降;自己的IP被各种平台标记为风险IP;偶尔收到平台发来的异常登录提醒。你以为是网络波动,其实是有人在借用你的网络身份做事。这类需求长期存在,所以被劫持设备组成的代理池始终有市场,这也是带宽掠夺最直接的变现方式。
3.2 挖矿模块与资源占用
代理劫持往往只是一个入口,同一套恶意家族通常还自带挖矿模块。检测到机器CPU或GPU性能不错,就会在后台静默运行挖矿程序。
这类挖矿模块有很强的隐藏意识:白天CPU占用高容易被发现,于是设置成只在夜间运行;进程名伪装成svchost、系统日志服务,甚至修改时间戳来绕开安全工具。办公电脑下班之后不关机、不休眠,正好是挖矿的“黄金时段”。
表现同样隐蔽:白天用着还行,晚上电脑风扇全速转,第二天早上系统明显变卡。很多人以为只是后台更新,实际是算力和带宽都在被人利用。如果办公室里有人反映“电脑一到晚上就特别吵”,这类问题值得第一时间查任务计划。
3.3 流量注入与网页内容篡改
代理层的流量劫持能做的远不止转发流量。由于部分网站仍然使用HTTP明文传输,攻击者在中转时可以直接看到这些流量里的内容,比如未加密的登录口令、Cookie、表单数据。
最常见的变现方式是在响应页面里注入广告脚本和推广代码:网页底部多一条横幅、购物页面被替换成带推广标识的链接。这类问题很难归因,用户会以为网站本身就带广告。
更严重的情况是登录页和付款页被插入脚本,输入的内容被侧录。所以,一旦确认电脑被代理劫持过,所有在劫持期间输入过的账号密码都应该视为已泄露,逐一轮换。这句话请务必记住,很多人清理完注册表就觉得万事大吉,恰恰忽略了信息已经泄露这个更长期的风险。
3.4 DDoS肉鸡与其他高风险用途
被控终端还有一个容易被忽视的用途:被组织起来发起分布式拒绝服务攻击。家庭宽带的单路带宽不大,但数量和地理分散性是优势,足够形成有效的攻击流量。
受害者的公网IP会被威胁情报平台标记,被运营商监测到异常流量,严重时可能因为攻击流量导致宽带被临时封停。这种现象在家庭网络里尤其容易被忽略——你觉得自己什么都没做,但实际上你的设备已经参与了对第三方的攻击。这类风险已经不只是“电脑变慢”的级别,而是可能带来运营商层面的连带问题。
4. 个人电脑的代理劫持排查与清理实战
4.1 五分钟自查:先看设置,再看注册表
排查的第一步不是装工具,而是看系统设置。Windows用户先打开“设置-网络和Internet-代理”,看“手动设置代理”是否被打开、地址是不是你熟悉的;再打开“控制面板-Internet选项-连接-局域网设置”,看“为LAN使用代理服务器”和“使用自动配置脚本”是否被勾选。macOS用户在“系统设置-网络-详细信息-代理”里做同样的检查。
第二步用命令确认底层状态。打开CMD或PowerShell,依次执行:
reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyServer reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v AutoConfigURL netsh winhttp show proxy正常状态下,ProxyEnable应该是0x0(没有手动开过代理的话),ProxyServer和AutoConfigURL为空,WinHTTP显示“直接访问”。如果你看到ProxyEnable为0x1,或者AutoConfigURL指向一个陌生地址,哪怕浏览器现在能正常上网,也要高度怀疑已经被劫持。
第三步看进程和连接。用任务管理器“详细信息”页按网络占用排序,重点看svchost、explorer这些系统进程是否在持续访问不认识的IP。微软官方的TCPView比任务管理器更直观,所有TCP连接一目了然。
4.2 完整清理顺序:先隔离再处置
确认中招后,正确的顺序是:
- 拔网线或断开WiFi,先断网隔离,阻断C2服务器继续下发指令和维持连接。
- 用TCPView结束可疑进程,记录进程名和路径,方便后续留证。
- 打开任务计划程序,按“操作”筛选,删除名字随机且指向陌生路径的任务。模糊匹配“proxy”“update”的任务名往往不够,我见过伪装成“GoogleUpdate”的恶意任务。
- 在服务和启动项里同样清一遍,注意服务名和路径是否指向临时目录。
- 删除或清空代理键值:把ProxyEnable设为0,删除ProxyServer和AutoConfigURL。也可以直接在“Internet选项-局域网设置”里全部取消勾选。
- 使用离线杀毒工具全盘扫描,Windows Defender离线版和常见急救盘都可以。
- 恢复联网,观察24小时,再次执行上面的查询命令,确认代理设置没有被写回。
提示:清理代理劫持的铁律是“先断网、再清持久化、最后改配置”。任何跳过隔离步骤的清理,都可能在几秒后被后台进程拉回原状。
4.3 清理后复发的常见原因
我自己处理过的复发案例,原因几乎集中在几个地方:
- 计划任务名字太普通,搜索时只看了“proxy”,漏了用随机字符串命名的。
- 杀进程的时候,恶意进程存在多开保护,杀掉了主进程,子进程马上拉起一个新的。
- 注册表清理不彻底,只删了ProxyServer,没删AutoConfigURL,PAC脚本仍在生效。
- 清理过程中网络没有断开,C2又一次下发载荷,相当于重新感染了一遍。
- 用了网上的“一键修复工具”,结果修复工具本身也写入了AutoConfigURL。
所以我在帮朋友处理时,会要求先断网,然后手工操作,最后用离线杀毒收尾。不要迷信所谓的一键工具,代理设置这么敏感的位置,手动确认远比脚本清理可靠。
4.4 什么情况下必须重装系统
如果同时出现以下情况:系统时间被修改过;UAC设置被改;杀软被关闭或无法启动;多个目录出现陌生的DLL和EXE;计划任务、服务、启动项里超过三处持久化痕迹;无法判断感染是什么时候开始的——我的建议是直接重装系统,不要继续在“清理”上花时间。
重装之后,从官方网站重新下载所有常用软件,逐个校验数字签名;修改所有账号密码,已开启双重验证的重新绑定;对重要文件做一次离线备份,备份完用干净系统再扫描一遍。
重装不是小题大做。代理劫持意味着所有明文流量可能已经被看过一遍,手工删除能清掉主动痕迹,但无法保证深层持久化以及历史流量泄露都处理干净。只要存在过信息侧录的风险,重装就是成本最低的修复方案。
5. 企业场景的纵深防御:从终端管控到流量基线
5.1 终端软件来源管控与白名单
个人电脑靠用户自查,企业电脑得靠制度和技术手段双管齐下。
第一层是软件来源管控。企业应建立内部软件分发渠道,对开发、办公常用的工具统一提供经过签名校验的安装包。Notepad++这类高频工具的版本更新应统一推送,而不是让员工自己去搜索引擎里找资源。
第二层是应用程序白名单。Windows 10及以上可以配置AppLocker或WDAC(Windows Defender Application Control)策略,只允许从白名单目录启动程序。恶意安装包释放到%TEMP%和%APPDATA%下的载荷,绝大多数都会被这条策略直接拦死。
第三层是数字签名校验。要求内部安装包的签名主体与软件官方一致,安装时校验文件哈希。很多仿冒站做的“假官方版”虽然图标一致,但签名信息完全对不上,在校验环节就会暴露。
5.2 监控代理配置变化的EDR策略
代理劫持的检测不能只靠个人用户偶尔看一眼设置。企业在EDR或SIEM上建立代理配置变更监控,比事后追查高效得多。
具体做法有两类:一类是利用Sysmon的注册表事件,对代理相关键值的写入做告警。Sysmon中Event ID 13对应的就是注册表值变更,把HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings下的ProxyEnable、ProxyServer、AutoConfigURL列为监控对象,一旦有非法进程写入且没有对应的IT操作记录,立即触发事件。
另一类是启用终端管理产品的“关键注册表保护”功能,把代理相关键值直接设置为只允许系统管理员修改。攻击者即使绕过白名单,也无法完成配置篡改,劫持链在这里就断了。这类监控最大的价值不是事后发现攻击,而是压缩攻击者从“修改配置”到“实际利用”之间的时间窗口。
5.3 网关流量基线与异常出口识别
网络侧的检测更粗但更全面。出口防火墙上按内网IP建立每日流量基线,重点关注两个异常信号:凌晨时段的突发上行流量,以及某个IP与陌生主机保持大量长连接。
代理池转售有个明显特征:受害终端会保持多条长期TCP连接,连接对象是大量分散的目标网站。相比普通办公室的“请求-响应”模式,这类连接模式的流量走向不一致,持续时间也更长。出口防火墙和流量分析设备上可以据此设置规则。
与此同时,DNS安全网关应把疑似Notepad++仿冒域名加入黑名单。仿冒站通常使用新注册的近似域名,通过域名信誉情报可以覆盖相当一部分SEO投毒入口。如果网络里有强制HTTPS解密审计能力,还可以进一步排查经过代理的隐藏流量,不过要考虑合规和隐私边界。
5.4 事件响应:发现一台中毒终端后的三件事
假设监控告警已经拉响,团队发现某台终端代理设置被篡改,接下来的处置分三步:
第一步,隔离并留证。立即断开该终端的网络连接,不要远程关闭进程草草收场。导出注册表代理键值、计划任务清单、服务列表、进程快照和最近7天的DNS日志。
第二步,反向定位入口。分析安装记录和近期软件安装时间,找到那个“来源不干净”的安装包,判断病毒家族、关联的C2地址,并在威胁情报平台查询该样本的关联信息。
第三步,批量排查同范围主机。如果这台机器是因为装了某个软件中的招,同网段里很可能还有别的机器也中招了。写一个脚本批量读取各机器的代理键值:
$computers = Get-Content .\computers.txt foreach ($c in $computers) { try { $result = Invoke-Command -ComputerName $c -ScriptBlock { $p = Get-ItemProperty 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings' [PSCustomObject]@{ ComputerName = $env:COMPUTERNAME ProxyEnable = $p.ProxyEnable ProxyServer = $p.ProxyServer AutoConfigURL = $p.AutoConfigURL } } $result | Select-Object ComputerName, ProxyEnable, ProxyServer, AutoConfigURL } catch { Write-Host "$c 连接失败:$($_.Exception.Message)" } }如果环境里没有开启WinRM/PowerShell远程管理,可以用psexec代替,或者在EDR控制台里直接批量查注册表。脚本跑完,所有代理设置异常的机器一目了然,处置目标就清楚了。批量排查这一步经常被忽略,但恰恰是防止“一台清了另一台又复发”的关键。
6. 进阶:不运行样本的情况下预判一个安装包是否可疑
6.1 数字签名、哈希校验与VirusTotal判断
个人用户不需要深入研究恶意代码,但有三个基本的预判动作能省掉很多麻烦。
第一看数字签名。右键安装包-属性-数字签名,确认签名者是谁。Notepad++官方发布的安装包签名主体是明确的;如果签名者是一个从来没听过的公司名字,或者干脆没有签名,直接放弃安装。
第二查哈希。在VirusTotal搜索安装包文件的SHA256,看各安全引擎的检测结果和社区分析。注意一个反常识:检测率低不等于干净,黑产定制木马被设计出来就是为了绕过主流杀软首轮查杀,所以VirusTotal结论只是参考,不能当唯一依据。
第三做比对。去官方网站或GitHub Releases页面核对文件哈希与文件大小。仿冒站虽然会伪造图标和界面,但很少会去同步更新官方哈希值。两分钟就能完成的事,能挡掉大多数初级钓鱼。
6.2 用压缩工具直接拆解安装包
大多数Windows安装包其实是自解压包,用7-Zip可以直接打开查看内部结构。如果文件列表里有DLL、BAT、JS、VBS、PS1这些文件,而且它们不在正常安装目录结构里,这个安装包就高度可疑。
更专业一点的判断用PEStudio,免费版就够。打开PE文件后看导入表:一个文本编辑器不会凭空导入WinINet、WinHTTP、URLDownloadToFile这些网络下载相关API,也不会导入CreateRemoteThread、WriteProcessMemory这类跨进程操作函数。出现这些导入项,基本可以断定这个“安装包”带后门功能。
另一个很重要的信号是安装包里出现系统下载器的调用,比如certutil.exe、bitsadmin.exe、powershell.exe。正常软件安装过程中不会去调用这些工具,它们的目标几乎只有一个:从远端拉取并执行载荷。
6.3 沙箱动态观察:跑一遍看它改了什么
静态分析不能覆盖所有情况,更可靠的方式是在隔离的虚拟机里运行安装包,用Process Monitor把注册表和文件操作记录下来。
注意观察几个点:安装包是否在启动时修改了代理相关键值;是否创建计划任务或服务;是否有向外连接陌生域名的网络请求;是否有脚本文本被临时释放后又被删除。在线沙箱比如Any.Run可以直接在网页里跑样本并输出行为报告,它会明确标注“修改代理设置”这种可疑行为,对非专业用户来说非常友好。
沙箱验证不是必须对每一个安装包都做,但如果你下载的安装包来源模糊,又不确定要不要运行,放在虚拟机里跑一遍是最稳妥的方式。记得虚拟机要和宿主机网络隔离,别让恶意程序通过共享目录或虚拟机网络跳到外面。
6.4 最有效的一招:不搜下载,只看官方来源
讲了这么多技术手段,最后说个最朴素但最有效的习惯:工具软件永远从官网和官方GitHub仓库下载,不搜“下载”关键词、不点排名靠前的下载站。
搜索引擎结果页里的广告位和SEO站,是Notepad++钓鱼最主要的入口。只要坚持在浏览器地址栏直接输入官方域名,或者使用官方更新机制,绝大部分代理劫持类攻击都轮不到你。
我自己的习惯是:下载完安装包先看一眼数字签名,装完再顺手查一次代理设置,两周后复查一遍。这套“装前验签、装后查设置、定期复查”的三步动作,到现在帮我挡掉了好几轮这样的钓鱼攻击。
最后再分享一点体会。代理劫持这类攻击最可怕的地方不在技术多高明,而在于它藏在每个人每天都会用到的系统设置里,几乎不会有人去看。黑产赌的就是“你永远不看代理设置”,而反制的关键,往往就是那多看一眼的习惯。