像1995年一样伪造Microsoft 365邮件:直接发送功能的安全风险

本文详细介绍了利用Microsoft 365的"直接发送"功能进行邮件伪造的技术细节,包括如何绕过企业安全防护、发送未经验证的内部邮件,以及相关防御建议。文章还提供了PowerShell命令示例和实际测试方法。

像1995年一样伪造Microsoft 365邮件

Steve Borosh //

为什么选择钓鱼攻击?

我们这些从事安全攻击工作的人经常需要测试客户对钓鱼攻击的抵御能力。根据Verizon 2021年数据泄露调查报告,钓鱼攻击占所有入侵事件的25%。钓鱼仍然是攻击者进入网络的主要方式之一。

纵深防御

“纵深防御"这个术语在信息安全领域已经使用了几年,意味着防御者会分层部署保护措施,而不是过度依赖单一解决方案。电子邮件安全尤其需要采用纵深防御方法来应对钓鱼攻击。企业可能会监控新创建的钓鱼域名,在云端过滤或阻止垃圾邮件,设置SPF、DKIM、DMARC保护记录,以及扫描或阻止文件附件。结合用户意识培训和攻击性培训参与,这些保护措施提供了多层防御,创造了攻击者必须克服的障碍,降低了他们的成功机会。

钓鱼参与类型

有几种常用于测试企业的钓鱼参与类型:

  • 点击率跟踪

    • 谁点击了?
    • 点击了多少次?
  • 凭证收集

    • 密码
    • Cookie盗窃
  • 有效载荷(附件或链接)

    • 恶意Office文档(MalDoc)
    • 可执行文件
    • 压缩文件

许多组织都有自动化的钓鱼培训。通常,这些程序要求用户点击电子邮件中的链接来跟踪他们的"不良"行为。这些培训场景很好地向用户介绍了钓鱼攻击的潜在危险,但在模拟更高级的攻击者时可能会有所不足。

攻击视角

钓鱼是许多人试图进入目标企业的祸根。钓鱼需要时间和耐心——大量的耐心。如果你在有限的时间和预算内进行攻击,要穿过所有防御层并保持在那里需要精确性。即使花费了所有耐心和精力来设置基础设施、制作钓鱼邮件、创建有效载荷并使其通过防御,只要有一个用户报告了钓鱼邮件,一切就都回到了起点。设置新的基础设施、创建新的借口、生成新的有效载荷,以及从新的来源发送而不被检测到,都需要时间,而且再次需要耐心。

如果我们能够通过一个命令就跳过基础设施部分,绕过域名分类、声誉和目标企业的所有防御,会怎么样?听起来很难?让我们深入探讨。

Microsoft直接发送

Microsoft有一个名为"直接发送"的功能的文档。直接发送最常用于企业内部打印或扫描到电子邮件的设备,如打印机。直接扫描不需要身份验证,可以从企业网络外部发送。

先决条件: Microsoft 365订阅和Exchange Online计划。

直接发送连接到一个名为"智能主机"的MX端点。智能主机的格式为"company-com.mail.protection.outlook.com”,在创建新的Exchange Online计划时默认创建。您的设备或主机通过telnet在端口25上连接到智能主机,并向内部用户发送未经身份验证的电子邮件。出站电子邮件被阻止。请参见下图中的邮件流。

图1 – 直接发送邮件流

直接发送的设置:

  • MX端点,company-com.mail.protection.outlook.com

  • 端口25(是的,25)

  • TLS/StartTLS(可选)

  • 电子邮件地址(不需要有邮箱)

  • Microsoft推荐的SPF设置

    “v=spf1 ip4:<静态IP地址> include:spf.protection.outlook.com ~all”

伪造

使用Microsoft直接发送,如果域名受信任,入站电子邮件将进入企业。因此,在大多数情况下,使用直接发送,我们可以从hr@company.com向company.com内的任何人发送邮件,因为域名会信任自己。在许多情况下,如果邮件网关信任这些域名,我们还可以向内部用户伪造外部电子邮件地址——例如,“account-security-noreply@accountprotection.microsoft.com”(用于Microsoft安全电子邮件)可以用作发件人地址。

Microsoft直接发送不允许将邮件发送到企业外部。因此,不能从内部伪造到外部。

伪造的一个额外好处是,“发件人"字段会填充发件人的Microsoft图标。如果我们从noreply@bigtimebank.com向user@company.com发送电子邮件,发件人字段将显示"noreply"用户的头像,通常是公司徽标。

要针对您新创建的Exchange Online计划测试此功能,请在exchange管理中心添加"绕过垃圾邮件过滤器"规则。

图2 – 为受信任域名绕过垃圾邮件过滤器

此规则允许内部电子邮件在默认初始安装时进入收件箱而不是"垃圾邮件”。

测试伪造

发送伪造电子邮件就像使用PowerShell命令一样简单。

这是一个PowerShell命令示例:

1
Send-MailMessage -SmtpServer company-com.mail.protection.outlook.com -To frank@company.com -From informationsecurity@company.com -Subject "紧急更新 required" -Body "Frank,<br>我们需要您更新Microsoft Office软件。请尽快运行此更新。完成后无需通知我。<a href='https://myphishsite.azurewebsites.net/'>下载</a>" -BodyAsHTML

这个PowerShell cmdlet也可以在Linux的PowerShell中找到。考虑到这一点,几乎可以从任何地方发送您的钓鱼邮件。我最喜欢的方法之一是从Azure Cloud Shell直接发送,这可以从Windows Terminal轻松访问。这样可以轻松轮换IP地址。Azure Cloud Shell可以从Windows Terminal应用程序轻松访问。

图3 – Windows Terminal应用程序 图4 – 从Azure Cloud Shell发送电子邮件

SPAMHAUS

SPAMHAUS将阻止大多数住宅IP地址发送电子邮件。不要从您的家中发送钓鱼邮件。

邮件网关

在测试使用第三方邮件网关的企业时,使用这种技术进行伪造非常成功。虽然邮件可能仍然通过电子邮件网关流动,但默认配置可能信任来自其自己域名和*.mail.protection.outlook.com的电子邮件。

Exchange Online保护

Exchange Online Protection(EOP)是Microsoft基于云的电子邮件过滤器,保护企业免受电子邮件威胁。EOP默认包含在所有使用Exchange Online邮箱的Microsoft 365企业中。请注意,“Microsoft Defender for Office 365"是一个单独的产品,不在本博客文章中讨论。

电子邮件通过Exchange Online流动,如下面的图表所示。

图5 – Exchange Online邮件流

入站电子邮件首先会检查发件人声誉,大多数垃圾邮件会被转移或阻止。

接下来,每条消息都会扫描恶意软件。在此处了解更多关于反恶意软件保护的信息。应该注意的是,直接发送的伪造消息仍然通过这些保护。附件可能在沙箱中引爆。Microsoft提供了一个"常见附件过滤器”,使防御者能够默认阻止特定文件类型。此设置默认禁用,启用时默认阻止这些文件扩展名:ace、ani、app、cab、docm、exe、iso、jar、jnlp、reg、scr、vbe、vbs。

然后消息继续通过邮件流规则。

最后,消息通过内容过滤(反垃圾邮件、反伪造)并相应路由。

有关EOP可用功能的完整列表,请访问:https://docs.microsoft.com/en-us/microsoft-365/security/office-365-security/exchange-online-protection-overview?view=o365-worldwide#eop-features。

图6 – 高风险投递池标准

不幸的是,如果我们通过一个没有A和MX记录与发件人域名匹配的代理发送伪造邮件,我们的邮件将受到更严格的审查。一个常用于Microsoft设备代码钓鱼的钓鱼模板在发送时目前会进入一个未知的深渊。

Microsoft IP封禁

在钓鱼参与期间,您的IP可能会被Microsoft软封禁。不用担心,您可以提交解封请求或更改您的IP地址。如果您使用Cloud Shell发送钓鱼邮件,重新启动控制台将为您提供一个新的IP地址。如果您想解封IP,只需几分钟即可恢复业务。访问https://sender.office.com并输入详细信息以解封。

图7 – 解封被封禁的IP地址

分解

通过Microsoft直接发送,我们能够代表外部或内部用户向使用Microsoft 365的企业内部的其他内部用户发送电子邮件;本质上,是向许多组织伪造电子邮件。

这是因为Microsoft为Exchange使用"智能主机",通常位于类似company-com.mail.protection.outlook.com的地址,允许未经身份验证的SMTP中继到内部用户。

外部第三方电子邮件网关是捕获大多数垃圾邮件或伪造尝试的好方法。使用Microsoft直接发送进行伪造可能会绕过许多这些网关,让您进入收件箱。

这种伪造技术在将钓鱼邮件投递到企业收件箱方面非常成功。然而,虽然简单的电子邮件可能会进入收件箱,但常见的钓鱼模板或附件可能会被阻止。一如既往,在向目标企业发送实时电子邮件之前测试您的基础设施非常重要。

对于防御者

防御者应测试通过直接发送内部电子邮件的能力,并确保任何电子邮件网关遵守内部收件人的正确邮件流。Microsoft 365中没有"禁用直接发送"功能。有必要正确设置邮件网关设置,以允许特定IP地址代表企业发送电子邮件。请参考您的邮件网关文档。

结语

在撰写本文时,此发现已提交给MSRC,并被Microsoft关闭,没有修复。我希望这篇博客文章能够突出Microsoft直接发送在伪造钓鱼攻击方面带来的危险,使防御者能够更好地保护他们的网络,同时为攻击操作员提供另一种测试和增强企业防御的技术。

特别感谢@ustayready指引我走上这条研究道路。也查看他方便的Python脚本用于发送伪造消息。

参考文献

  1. https://www.verizon.com/business/resources/reports/dbir/2021/results-and-analysis/
  2. https://docs.microsoft.com/en-us/exchange/mail-flow-best-practices/how-to-set-up-a-multifunction-device-or-application-to-send-email-using-microsoft-365-or-office-365
  3. https://docs.microsoft.com/en-us/exchange/exchangeonline/media/cb07aae7-ca31-43a7-a468-74c293b37a66.png
  4. https://admin.exchange.microsoft.com/#/transportrules
  5. https://docs.microsoft.com/en-us/microsoft-365/media/tp_emailprocessingineopt3.png?view=o365-worldwide
  6. https://0xboku.com/2021/07/12/ArtOfDeviceCodePhish.html
  7. https://gist.github.com/ustayready/b8314a4a964ff498f7b4682fc66475cc
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计