EvilProxy AiTM攻击检测实战:如何发现中间人钓鱼威胁

本文详细介绍了针对EvilProxy中间人钓鱼攻击的检测方法,包括租户背景图像特征分析、可疑引用来源检测、代理请求识别以及Azure日志异常登录分析,并提供实用的Splunk查询规则。

EvilProxy AiTM— 第二部分:检测

使用EvilProxy的中间人攻击(Adversary in the Middle)正逐渐成为钓鱼威胁的新趋势,其能够窃取多因素认证(MFA)令牌的特性,使其快速成为钓鱼的主要手段。

这是由两部分组成的博客文章系列的第二部分——第一部分详细介绍了攻击在我蜜罐租户中的演练过程: https://medium.com/@martinconnarty/adversary-in-the-middle-part-1-walkthrough-2c91fb00197

以下是我总结的一些检测思路。随着学习的深入,这些方法会不断更新。

租户背景图像特征

我观察到的许多中间人攻击页面都利用了加载受害者租户背景图像的功能(当然,前提是该图像存在!)。作为防御者,如果我们能够访问适当类型的日志(包含URL和引用来源的Web代理日志),就可以进行一些检测!

AiTM页面通常会直接从authcdn拉取图像: https://aadcdn.msauthimages.net/<唯一租户ID>/logintenantbranding/0/illustration?ts=

如何找到你的租户ID?很简单:

  1. 访问 https://login.microsoftonline.com
  2. 打开开发者工具(Ctrl+Shift+I)
  3. 打开网络标签页
  4. 输入或选择你的邮箱——这将触发背景加载
  5. 选择你看到的’illustration?ts…‘的URL——右键点击并"复制链接地址"
  6. 你会得到类似这样的链接: https://aadcdn.msauthimages.net/52ksdjfklj-kdr3246598sgljsdlfk-j2-k287s84lsj3j/logintenantbranding/0/illustration?ts=638307426057595200
  7. 唯一的租户字符串(是的,我已经修改了我的!)就是这部分: 52ksdjfklj-kdr3246598sgljsdlfk-j2-k287s84lsj3j

优先缓解措施——在背景图像上使用覆盖层

我建议首先在背景图像上使用覆盖层(在此处设置:https://entra.microsoft.com/#view/Microsoft_AAD_UsersAndTenants/CompanyBrandingOverview.ReactView)

如果你能让用户在每次看到登录页面时都检查URL,这可能会阻止很多此类攻击。可以参考这样的设计:

欢迎随意借鉴使用!

这样会产生类似的效果:

查找可疑引用来源——直接访问情况

如果我们对Web代理日志中的引用来源建立基线,通常会观察到它们通常是合法的Microsoft页面,如https://login.microsoftonline.com/

如果我们看到其他任何来源,就应该进行调查/创建新规则:

1
| tstats `summariesonly` count from datamodel=Web where Web.url="https://aadcdn.msauthimages.net/<你的租户ID>/logintenantbranding/0/illustration?*" AND NOT Web.http_referrer IN ("login.microsoftonline.com/*") by Web.user Web.http_referrer

查找可疑请求——代理访问情况

在一个AiTM页面的例子中,不是受害者的浏览器直接访问图像,而是访问的网站代为获取。然而,我们可以在日志中看到相同的租户ID。这是异常情况,我们可以这样检测:

1
| tstats `summariesonly` count from datamodel=Web where Web.url="*<你的租户ID>*" AND Web.dest!="aadcdn.msauthimages.net" by Web.user Web.dest Web.url

注意:对于这两种情况,我想象未来的AiTM工具包会相应地进行调整,因此这场追逐将继续下去。确保用户养成检查URL栏的习惯将更加可靠。

在Azure日志中查找请求

这有点棘手,但在我看到的例子中,尝试中经常出现非典型的应用程序或位置。根据我的观察,它们通常在短时间内来自多个位置,并且围绕钓鱼点击的时间。

待办——Splunk规则用于查找用户位置的异常峰值。类似这样(注意:待完善!):

1
| index=azure category=SignInLogs | bucket span=5m | stats dc(src) as srccount by user _time | where srccount>5

#Aitm检测工程 #蓝队 #钓鱼 #钓鱼意识

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计