🛡

Micorosoft 365 DirectSendに関するメモ(TBA)

に公開

Microsoft 365 の各テナントでは、DirectSend という機能が有効になっていることがありますが、攻撃者による悪用も確認されており、メディア等でも対策の必要性が訴えられています [1] 。まだ調査中の内容も含まれていますが、メモを残しています。

DirectSendとは?

DirectSend は、オンプレミスのデバイス、アプリケーション、またはサードパーティのクラウドサービスから、Exchange Online 上のメールボックスへ(認証なしで)直接メールを送信するための方法です。

DirectSendはなぜリスクがあるのか?

この方法は、送信者ドメインが自組織のものである点を除けば、インターネットからの匿名の受信メールと似た動作となり、認証を必要としません。加えて、DirectSendでは、SPF/DKIM/DMARCが失敗するにも関わらず、通信を内部通信として取り扱う竹、他のフィルタリングルールをバイパスしてユーザーに届いてしまう可能性が指摘されています。さらに、実行コマンドを後述していますが、メールアドレスとSmtpServerさえわかれば実行できるので、攻撃者が実行する難易度も低いという特徴があります。

DirectSendはどのようなユースケースで必要なのか?

個人的にはあまり使ってほしくない機能ですが、プリンターからのメールや会議室の予約システムからのメールなどで使われていたりします。

実行コマンド

PowerShell で以下のスクリプトを実行し、DirectSend をテストできます。To, From, SmtpServer はご自身の環境に合わせて変更して利用します。尚、25番ポートはインターネットサービスプロバイダーやAzureなどのパブリッククラウドにおいて、デフォルトでブロックされていることがあるので、ご自宅で試そうと思ったあなたはかなり厳しいです。

$EmailMessage = @{
    To         = "XXX@yourdomain.com"
    From       = "YYY@yourdomain.com"
    Subject    = "DirectSend test"
    Body       = "DirectSend test"
    SmtpServer = "yourdomain-com.mail.protection.outlook.com" # MXレコードを確認
    Port       = "25"
    UseSSL     = $true
}
Send-MailMessage @EmailMessage

DirectSendの管理者が側の設定

前提条件

まず、Exchange Online PowerShell モジュールをインストールし、接続する必要があります。

  1. モジュールのインストール (未実施の場合):
Install-Module -Name ExchangeOnlineManagement -Force
  1. Exchange Online への接続:
Connect-ExchangeOnline

状態の確認

現在の設定状態を確認するには、以下のコマンドを実行します。

Get-OrganizationConfig | Select-Object Identity, RejectDirectSend

実行結果の例 (無効化されている場合):
RejectDirectSendTrue になっていれば、DirectSend はブロックされています。

無効化コマンド

接続後、以下のコマンドを実行して DirectSend をブロックします。

Set-OrganizationConfig -RejectDirectSend $true

(参考)DirectSendの有効化 (許可)

逆に DirectSend を許可(デフォルトの状態に戻す)場合は、以下のコマンドを実行します。

Set-OrganizationConfig -RejectDirectSend $false

DirectSendを利用せざるを得ない場合の対応

DirectSend の利用の実態調査

DirectSendを無効にする前に、どれだけ使われているか見たいというケースがあると思います。どのように見れば一番スムーズに見ればいいのか苦心しており、ネットに転がっているクエリなどを使っても上手く拾ってくれないケースが多いのですが、少なくとも 僕の使っているテスト環境のAdvanced Huntingにおいて、M365の内部から内部へのメールは {"DKIM":"none","DMARC":"none"} となるのに対して、DirectSendは内部から内部でも {"SPF":"fail","DKIM":"none","DMARC":"none","CompAuth":"fail"} となっていました。

他のも含まれてしまうかもしれませんが、以下のようなAdvanced Huntingで目付はできるかと思いました。

EmailEvents 
| where Timestamp > ago(30d) 
| where SenderFromDomain contains "yourdomain.com"
| where RecipientDomain contains "yourdomain.com"
| extend AuthDetails = todynamic(AuthenticationDetails)
| where AuthDetails.SPF == "fail" 
    and AuthDetails.DKIM == "none" 
    and AuthDetails.DMARC == "none" 
    and AuthDetails.CompAuth == "fail"

DirectSend を限定的に許可する

TBA(調査中)

https://techcommunity.microsoft.com/blog/exchange/direct-send-vs-sending-directly-to-an-exchange-online-tenant/4439865

まとめ

TBA(調査中)

脚注
  1. Microsoft 365 'Direct Send' abused to send phishing as internal users ↩︎

GitHubで編集を提案

Discussion