攻击者已将数百个运行 WordPress 软件的被黑网站转变为命令和控制服务器,迫使访问者的浏览器执行密码破解攻击。数百个受感染网站上的数千名访问者在不知不觉中同时尝试暴力破解数千个其他第三方 WordPress 网站的方式,由于请求来自真实访问者的浏览器,您可以想象过滤和阻止此类请求是一个挑战。
目标WordPress被注入而已JavaScript脚本, 该脚本大小仅为 3 kbit,可访问攻击者控制的 getTaskURL,后者又提供特定 WordPress 站点上特定用户的名称以及 100 个常用密码。 当这些数据输入到访问被黑网站的浏览器时,它会尝试使用候选密码登录目标用户帐户。 JavaScript 在循环中运行,从 getTaskURL 请求任务,将结果报告给completeTaskURL,然后一次又一次地执行这些步骤。
下面显示了 JavaScript 的片段,以及生成的任务片段:
const getTaskUrl = 'hxxps://dynamic-linx[.]com/getTask.php';
const completeTaskUrl = 'hxxps://dynamic-linx[.]com/completeTask.php';
…
[871,"https://REDACTED","redacted","60","junkyard","johncena","jewish","jakejake","invincible","intern","indira","hawthorn","hawaiian","hannah1","halifax","greyhound","greene","glenda","futbol","fresh","frenchie","flyaway","fleming","fishing1","finally","ferris","fastball","elisha","doggies","desktop","dental","delight","deathrow","ddddddd","cocker","chilly","chat","casey1","carpenter","calimero","calgary","broker","breakout","bootsie","bonito","black123","bismarck","bigtime","belmont","barnes","ball","baggins","arrow","alone","alkaline","adrenalin","abbott","987987","3333333","123qwerty","000111","zxcv1234","walton","vaughn","tryagain","trent","thatcher","templar","stratus","status","stampede","small","sinned","silver1","signal","shakespeare","selene","scheisse","sayonara","santacruz","sanity","rover","roswell","reverse","redbird","poppop","pompom","pollux","pokerface","passions","papers","option","olympus","oliver1","notorious","nothing1","norris","nicole1","necromancer","nameless","mysterio","mylife","muslim","monkey12","mitsubishi"]
该攻击由五个关键阶段组成,允许不良行为者利用已经受到损害的网站对数千个其他潜在受害者网站发起分布式暴力攻击。
第 1 阶段:获取 WordPress 网站的 URL。 攻击者要么自己爬行互联网,要么使用各种搜索引擎和数据库来获取目标 WordPress 网站的列表。
第 2 阶段:提取作者用户名。 然后,攻击者扫描目标站点,提取在这些域上发帖的作者的真实用户名。
第 3 阶段:注入恶意脚本。 然后,攻击者将其dynamic-linx[.]com/chx.js 脚本注入到他们已经受到攻击的网站中。
第 4 阶段:暴力破解凭证。 当普通站点访问者打开受感染的网页时,恶意脚本就会被加载。 在幕后,访问者的浏览器对数千个目标站点进行分布式暴力攻击,而攻击者没有任何积极参与。
第 5 阶段:验证受损的凭据。 不良行为者会强制验证凭据并获得对第一阶段目标站点的未经授权的访问。
整个攻击的关键是第4阶段,这个阶段攻击者实际上从完全无辜且毫无戒心的网站访问者的浏览器中完成分布式暴力攻击。下面是攻击者的详细步骤:
- 当网站访问者打开受感染的网页时,用户的浏览器会从 hxxps://dynamic-linx[.]com/getTask.php URL 请求任务。
- 如果任务存在,它会解析数据并获取要攻击的站点的 URL、有效的用户名和要尝试的 100 个密码的列表。
- 对于列表中的每个密码,访问者的浏览器都会发送 wp.uploadFile XML-RPC API 请求,以上传带有加密凭据的文件,这些凭据用于验证此特定请求。 每项任务有 100 个 API 请求! 如果身份验证成功,则会在 WordPress 上传目录中创建一个具有有效凭据的小文本文件。
- 检查完所有密码后,脚本会向 hxxps://dynamic-linx[.]com/completeTask.php 发送通知,表明具有特定 taskId(可能是唯一站点)和 checkId(密码批次)的任务已完成 。
- 最后,脚本请求下一个任务并处理一批新的密码。 当受感染的页面打开时,无限期地依此类推。
截至周二,研究人员观察到对数千个独特域的“数十万个请求”,这些请求检查访问者浏览器上传的文件。 大多数文件报告 404 Web 错误,表明使用猜测的密码登录失败。 大约 0.5% 的案例返回 200 响应代码,因此密码猜测可能已成功。 经过进一步检查,只有一个站点受到损害。 其他人使用非标准配置,即使页面不可用,也会返回 200 响应。