利用Azure Front Door WAF窃取凭证的技术分析
工作原理
Azure Front Door WAF允许创建自定义规则。这些规则可以匹配特定的IP、头部、正文内容和POST参数。
如果创建一个匹配POST参数’username’和’password’任何值的自定义规则,并将规则设置为"仅记录流量",我们就可以悄悄地将用户的用户名和密码发送到日志中。
演示
WAF设置
这是Acme Computer Company的登录页面,受到Azure Front Door WAF的保护。
注意:此攻击不适用于Application Gateway WAF,仅适用于Front Door WAF。
检查HTML源代码,我们看到它POST两个参数:username和password。
日志设置
确保日志从Front Door WAF流向Log Analytics工作区。转到Azure门户左侧监控标题下的"诊断设置",如果为空,选择"添加诊断设置"并进行配置。
我们真正只需要"FrontDoor WebApplicationFirewallLog"类别。
添加恶意规则
要开始窃取密码,我们首先在Front Door WAF中创建一个新的自定义规则。将其命名为"PasswordCapture",将优先级设置为较低的值,如5。
这将确保它在可能阻止或允许流量的其他规则之前被评估。
接下来,配置If条件以匹配先前识别的POST参数——‘username’和’password’。对于这些,我们将操作符设置为"任何"值。这将匹配用户名或密码的任何值。配置Then部分为"仅记录流量"。
点击底部的"添加"。您现在应该在列表中看到新的自定义规则,动作为"记录"。
点击"保存"完成更改。
值得注意的是,通常一旦规则匹配,WAF就会停止评估其他规则。但是,由于我们的规则设置为"仅记录",其他规则仍然会被评估。
生成事件
在收集一些登录事件后,是时候收获成果了!
转到WAF的Log Analytics工作区。选择左侧的"日志"。
在右上角,将其从"简单模式"切换到"KQL模式":
现在输入以下查询。如果您将规则命名为"PasswordCapture"以外的名称,请输入该名称。
|
|
这应该会列出匹配我们包含’username’和’password’ POST规则的最近流量。展开详细信息,您将看到显示的用户名和密码。
在正常的WAF操作期间,可以使用Azure的数据清理功能保护敏感数据不出现在字段中。我建议管理员至少包含对密码字段的过滤器。
此攻击的先决条件
要执行此攻击,您需要以下几项:
- Azure Front Door WAF
- 保护登录页面
- 有权修改WAF的自定义规则
- 有权访问WAF的Log Analytics工作区
Azure Front Door WAF
如前所述,此攻击仅适用于Front Door WAF,不适用于Application Gateway WAF。Front Door WAF的日志非常详细,显示匹配模式。Application Gateway的自定义规则日志仅显示匹配的规则,而不显示违规内容。
WAF保护登录页面
第二个要求——登录页面——值得捕获的内容。如果公司使用WAF保护站点,可能是因为该站点接受用户提供的输入并具有动态页面。
有权修改WAF自定义规则
以下订阅级角色将有权更新自定义规则:
- 所有者
- 参与者
- 网络参与者
有权读取Log Analytics工作区
要读取Log Analytics工作区,您需要在订阅、资源组或Log Analytics工作区本身分配以下任何角色:
- 所有者
- 参与者
- 读者
- Log Analytics参与者
- Log Analytics读者
- 监控读者
- 监控参与者
- 监控策略参与者
结论
虽然这是在Azure Front Door WAF上演示的,但通用方法也可能适用于其他产品。我们不仅限于用户名和密码。我们还可以查找在头部传递的API密钥和承载令牌。
重要的启示是:小心让谁检查明文网络流量,并小心谁被允许读取您的日志。虽然此配置是故意恶意的,但我见过许多密码在正常操作期间被WAF意外捕获。