文章总结: 本文详细介绍了基于伪装Chrome浏览器升级的水坑攻击设计与实现,包括逼真的弹窗UI设计、利用InnoSetup打包恶意程序与正版Chrome安装包以绕过杀软检测、以及通过修改快捷方式参数固定User-Agent实现防重复弹窗的收杆机制,实战性强。 综合评分: 90 文章分类: 红队,渗透测试,社会工程学
基于伪装Chrome浏览器升级的水坑攻击设计与实现
原创
p1d3er
安全白白
2025年12月29日 14:33 北京
p1d3er@深信服北京天雄战队
免责声明:本文章仅供学习交流使用,文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!
水坑的设计
在设计整个水坑的过程中思考了其中几个问题。后续也陆陆续续解决了。以下将通过鱼钩、诱饵、收杆逐步进行讲解。知己知彼,百战百胜。
鱼钩
首先是鱼钩的设计:
第一:这个鱼钩设计的必须得逼真,不能让用户看到这个鱼钩就认为是一个假的页面。还要有一个不错的文案。由于市面上Flash钓鱼太普遍,甲方乙方的培训很多都以此为案例,所以flash有很大概率会被用户识别为一个恶意的行为。所以在此重新修改了鱼钩的界面。设计为Google升级的一个方案。如图:
我们可以看到以上是经过大大小小数十次改动后的一个效果(注:通过PS重新设计了Logo以及背景的颜色。文案的设计、以及交互的设计)。以往在项目中也遇到过友商的一个水坑方案,目前遇到的都是那种alert弹窗口提示Flash升级,效果太假,稍微有点安全意识很容易识别。类似于以下:
所以通过layui重新设计了弹出界面,以及一个背景虚化的效果。如图:
当然实战中的效果是这样的:
第二:用户访问之后必须得咬钩,不咬钩就不能继续操作。所以在设计中取消了关闭窗口得一个操作。使得用户要么下载我们得一个恶意程序,要么无法进行以后的操作。所以钓鱼位置的选择也很重要,选择一个很少有鱼的地方诱饵再好也上不了鱼。
第三:要合理,你总不能遇到MAC或者其他linux用户也下载一个PE程序,这样也很容易被识破。由于没有涉及到MAC用户的一个上线。所以这边判断了userAgent,只针对了windwos用户。只有Windows用户访问才会触发鱼钩。这里很简单只需要JS判断即可:
var userAgent = navigator.userAgent;
if (userAgent.includes("Windows"))
以上基本就是鱼钩得设计,大家也可以扩散思维。
同时在设计中也遇到一些问题。例如:一些图片得引入设计为base64直接写入JS代码中,减少资源文件的一个上传。包括JS库的引入设计为远程请求一个公共资源的js库。这里选择的是国内加速的CDN库资源。这里还有一个好处就是如果内网不出网的用户同样也不会弹出水坑页面。避免了不出网用户也要去咬钩的一个问题。
也让所有的代码都写入一个文件里,这样实战过程中只需要传入一个JS文件就可以部署水坑了。当然我们也可以把这个JS文传到OSS上。部署水坑的时候直接通过JS引入即可。
<script src="https://host/jquery1.2.js"></script>
这样的好处就是鱼咬钩或者被运维发现之后直接删除OSS上的JS文件即可使水坑失效。避免了权限丢失以后水坑无法关闭的一个问题,以上就是一个最基本的鱼钩设计。
诱饵
接下来就是诱饵的设计。同样我们要思考几个问题。
第一:首先我们的恶意程序不能被杀软查杀,这个很好解决,在这个诱饵的环境中,使用Google升级的应用程序,应用程序越大反而更不会引起用户的疑心。当然也不能离谱。
第二:安装过程要逼真,总不能点击之后没有什么反应或者弹窗一个窗口提示安装完成,这样也很使用户容易起疑心。所以我最先考虑的是通过winrar自解压打包好shellcode程序和真正的Chrome安装包来进行一个安装。后续发现此方法已经被滥用,各家杀软的厂商查杀的也特别厉害,导致我们文件落地就被查杀掉,所以此方法不可行。
后续通过大量漫长的测试最终选择了一个专门为打包安装程序设计的一个工具(Inno Setup),这里不进行专门介绍了有兴趣可以去自己查。通过此程序打包我们的恶意程序和chrome离线安装包(这里有人可能会问为什么要打包chrome离线安装包,这个随后在收杆环节进行解答),整个文件大小在90MB左右。也通过Inno Setup最终呈现一个相对完美的安装过程如下,也可以通过自定义UI,更好的优化界面,这里只是作为一个演示:
引导安装:
安装过程
安装完成
在安装的过程中我们的恶意程序也就会上线了。当然整个安装过程完全可以设计的更完美更逼真,但是此处涉及到UI设计、以及Inno Setup也是通过自己的代码进行编译生成的,所以要设计的更完美还需要更长的时间和精力,所以默认安装界面根据实战情况也能获取用户的信任。
当然这个Inno Setup编译过程和代码设计过程也完全没有说的那么简单,这个后面收杆环节会说。
第三:整个安装程序也是需要杀软无感话化这个经过大量测试我们取名字为ChromeSetup.exe会弹窗识别为广告等包含插件等恶意程序,虽然不是我们的shellcode被查杀了,但是这个也不是我们想要的。最后经过大量测试发现我们只需要把ChromeSetup.exe改为Chrome_Setup.exe即可绕过。
收杆
整个收杆系统是最麻烦的。需要考虑的问题更多。我们需要实现的效果是当鱼儿点击或者安装我们的恶意程序之后。在访问挂水坑的页面就不进行弹窗钓鱼了。以免重复上线和影响业务。但是往往这个最简单的需求是最麻烦的。但是经过不断的测试和新思路的实现,最终完美解决了这个问题。
首先刚开始我的思路是在服务端写入jsp等等脚本来进行控制。当鱼儿咬钩之后把鱼儿的各种信息进行组合判断来进行收杆上线的判断。总体来说这个思路是可行的,但是现在好多系统都是Jar包启动的。通过服务端进行判断,需要通过内存注入,比较麻烦,也不够完美。所以放弃了此方法。
后续经过种种方案的测试最终选择了通过user-agent头进行判断。期间也遇到了各种问题。
第一:首先是解决以上疑问为什么要打包chrome离线安装包。因为我们需要通过此程序进行对整个水坑的完美收杆。这里打包的Chrome离线安装包是带Google官方数字签名的。同时它的版本是Chrome/109的一个版本,因为最高之后109版本的chrome可以支持win7。而我们的收杆程序是通过判断chrome版本就行收杆的。
if (userAgent.includes("Chrome/109"))
只有Chrome/109版本的Chrome访问挂水坑的网页才不会在此触发水坑。但是在此又出现的新的问题。就是如果用户已经安装Chrome,而是会自动更新的(版本无法确认),老版本的Chrome又无法覆盖新版本的Chrome。这又是如何解决的呢。
第二:经过测试老版本是无法覆盖新版本,所以我把目标放在了修改Chrome的User-Agent上面。经过测试我们发现可以通过命令行来修改Chrome程序的User-Agent。
Chrome.exe --user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36"
但是如果让用户自己修改User-Agent又成了一个难题。其实这个很简单,我们只需要修改桌面Chrome的快捷方式即可。所以此功能我通过Inno Setup来实现的
[Icons]
Name: "{commondesktop}\Google Chrome"; Filename: "{commonpf64}\Google\Chrome\Application\chrome.exe"; WorkingDir: "{commonpf64}\Google\Chrome\Application\";Parameters: "--user-agent=""Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36"""; Check: Iscommonpf64
Name: "{commondesktop}\Google Chrome"; Filename: "{localappdata}\Google\Chrome\Application\chrome.exe"; WorkingDir: "{localappdata}\Google\Chrome\Application\";Parameters: "--user-agent=""Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36"""; Check: Islocalappdata
以上就是Inno Setup中的修改快捷方式部分的Pascal代码。
其中还涉及到许多小问题,如修改桌面快捷方式会被360拦截,修该后的Chrome快捷方式无法找到源程序的地址等等都进行了测试解决。
自此整个水坑环节就完成了,从部署水坑和用户访问到弹窗提示升级,再到程序安装和收杆,整个过程也比较完美了。也不会影响业务和惊动运维人员。当然也许运维人员也会翻车呢。
本文首发先知社区:https://xz.aliyun.com/news/90930
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:安全白白 p1d3er《基于伪装Chrome浏览器升级的水坑攻击设计与实现》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。







评论