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 モジュールをインストールし、接続する必要があります。
- モジュールのインストール (未実施の場合):
Install-Module -Name ExchangeOnlineManagement -Force
- Exchange Online への接続:
Connect-ExchangeOnline
状態の確認
現在の設定状態を確認するには、以下のコマンドを実行します。
Get-OrganizationConfig | Select-Object Identity, RejectDirectSend
実行結果の例 (無効化されている場合):
RejectDirectSend が True になっていれば、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(調査中)
まとめ
TBA(調査中)
Discussion