惡意交換連接器的警示分類
適用於:
- Microsoft Defender XDR
威脅執行者會使用遭入侵的交換連接器,藉由偽裝合法的電子郵件,大量傳送垃圾郵件和網路釣魚電子郵件給不知情的收件者。 由於連接器遭到入侵,因此收件者通常會信任電子郵件。 這類網路釣魚電子郵件是網路釣魚活動的常見媒介,而商務電子郵件入侵 (BEC) 案例。 因此,這類電子郵件必須受到高度監視,因為收件者成功入侵的可能性很高。
此劇本有助於調查惡意執行者設定/部署惡意連接器的實例。 因此,他們會採取必要的步驟來補救攻擊,並降低其所造成的安全性風險。 劇本有助於將警示分類為真 (TP) 或誤判 (FP) 。 如果警示為 TP,劇本會列出補救攻擊所需的建議動作。 此劇本適用於檢閱、處理/管理及評分警示的安全性小組。
以下是使用劇本的結果:
- 判斷警示為惡意 (TP) 或良性 (FP) 。
- 如果為惡意,請從環境中補救/移除惡意連接器。
Exchange 連接器
Exchange 連接器是自訂電子郵件流向 Microsoft 365 或 Office 365 組織的指示集合。 通常大部分的 Microsoft 365 和 Office 365 組織都不需要一般郵件流程的連接器。
連接器可用來在遠端電子郵件系統與 O365) 或 O365 Office 365 (與內部部署電子郵件系統之間路由傳送郵件流量。
惡意 Exchange 連接器
攻擊者可能會入侵現有的交換連接器或危害系統管理員,並藉由傳送網路釣魚或垃圾郵件/大量電子郵件來設定新的連接器。
查看電子郵件流量及其標頭時,可以找到惡意連接器的一般指標。 例如,從 P1 中的連接器節點觀察到電子郵件流量時, (標頭髮件人) 和 P2 (信封寄件者) 寄件者位址,以及寄件者的 AccountObjectId 上沒有任何資訊。
此警示會嘗試識別這類郵件流程實例,其中郵件傳送活動似乎可疑,因此無法在寄件者上新增相關信息。
劇本工作流程
您必須遵循順序來識別惡意交換連接器:
- 識別哪些帳戶正在傳送電子郵件:
- 帳戶是否似乎遭到入侵?
- 識別要檢查的電子郵件上的連接器轉送:
- 連接器是否應該傳送大量電子郵件?
- 連接器是最近修改或建立的嗎?
- 電子郵件是否會傳送至內部電子郵件位址?
- 電子郵件是否會傳送到外部位址 (噴水和垃圾郵件) ?
- 電子郵件是否流向屬於客戶或廠商的外部位址, (供應鏈類型攻擊) ?
- 檢查FROM標頭和信封寄件者網域是否相同或不同。
調查惡意連接器
本節說明調查警示並補救因此事件而造成的安全性風險的步驟。
- 判斷連接器是否示範惡意 (惡意) 行為。
- 尋找指出異常郵件流量的事件,並識別最近是否新增了任何新的 Exchange 連接器。
- 針對觀察到的郵件流量,請檢查帳戶是否要對不尋常的郵件流量負責,以判斷電子郵件帳戶是否遭到入侵。
- 尋找包含惡意構件的郵件內容 (不正確的連結/附件) 。
- 尋找不屬於您環境的網域。
- 尋找指出異常郵件流量的事件,並識別最近是否新增了任何新的 Exchange 連接器。
- 判斷電子郵件帳戶未遭入侵。 識別最近在環境中新增或修改的連接器。
- 尋找:
- P1 寄件者中的域值 (電子郵件頭髮件人) 和 P2 寄件者 (信封寄件者) ,並檢查是否有不相符的情況。
- SenderObjectId 欄位中的空白值。
- 使用遙測數據來注意:
- NetworkMessageId (從惡意連接器傳送的電子郵件訊息識別碼) 。
- 連接器建立日期、上次修改日期和上次修改日期。
- 從中觀察到電子郵件流量之連接器的IP位址。
進階搜捕查詢
您可以使用 進階搜捕 查詢來收集警示的相關信息,並判斷活動是否可疑。
請確定您可以存取下列資料表:
資料表名稱 | 描述 |
---|---|
EmailEvents | 包含與電子郵件流程相關的資訊。 |
CloudAppEvents | 包含用戶活動的稽核記錄。 |
IdentityLogonEvents | 包含所有使用者的登入資訊。 |
參考
要參考的 AHQs 範例:
執行此 KQL 以檢查新連接器的建立。
//modify timeWindow to modify the lookback. let timeWindow = now(-7d); let timeNow = now(); CloudAppEvents | where Timestamp between (timeWindow .. timeNow) | where isnotempty(AccountObjectId) | where ActionType == "New-InboundConnector" | mvexpand property = RawEventData.Parameters | extend ConnectorName = iff(property.Name == "Name", property.Value, ""), IsEnabled = iff((property.Name == "Enabled" and property.Value == "True"), true, false) | where isnotempty( ConnectorName) or IsEnabled | project-reorder ConnectorName, IsEnabled
執行此 KQL,以檢查警示連接器中警示前後時間範圍的事件量。
//modify timeWindow to modify the lookback. let timeWindow = now(-7d); let timeNow = now(); let connectorOperations = pack_array("Set-OutboundConnector", "New-OutboundConnector", "Set-InboundConnector", "New-InboundConnector"); let mailThreshold = 100; //define threshold for inspection and filtering let myConnector= //use this code block to specify relevant connector(s) CloudAppEvents | where Timestamp between (timeWindow .. timeNow) | where ActionType has_any (connectorOperations) | mv-expand property = RawEventData.Parameters | where property.Name == "Name" | summarize by ConnectorName=tostring(property.Value) ; EmailEvents | where isnotempty( toscalar (myConnector)) | where Timestamp between (timeWindow .. timeNow) | where isnotempty( SenderObjectId) and isnotempty( Connectors) | where Connectors in (toscalar (myConnector)) | summarize MailCount = dcount(NetworkMessageId) by Connectors, SenderObjectId, bin(Timestamp, 1h) | where MailCount >= mailThreshold
執行此 KQL 以檢查是否要將電子郵件傳送至外部網域。
//modify timeWindow to modify the lookback. let timeWindow = now(-7d); let timeNow = now(); EmailEvents | where Timestamp between (timeWindow .. timeNow) | where isnotempty( SenderObjectId) | extend RecipientDomain= split(RecipientEmailAddress, "@")[1] | where (SenderFromDomain != RecipientDomain) or (SenderMailFromDomain != RecipientDomain) | where EmailDirection !in ("Intra-org" , "Inbound") //comment this line to look across all mailflow directions
如果傳送至外部網域,則環境中的其他人員會傳送類似的電子郵件 (如果收件者是未知的網域) ,則可能表示遭入侵的使用者。
//modify timeWindow to modify the lookback. let timeWindow = now(-7d); let timeNow = now(); let countThreshold= 100; //modify count threshold accordingly EmailEvents | where Timestamp between (timeWindow .. timeNow) | where isnotempty( SenderObjectId) | extend RecipientDomain= split(RecipientEmailAddress, "@")[1] | where (SenderFromDomain != RecipientDomain) or (SenderMailFromDomain != RecipientDomain) | where EmailDirection !in ("Intra-org" , "Inbound") | summarize MailCount= dcount(NetworkMessageId) by SenderObjectId, SenderFromAddress, SenderMailFromAddress , bin(Timestamp, 1h) | where MailCount > countThreshold
- 檢查郵件內容是否有不良行為
- 查看電子郵件中的 URL 或具有附件的電子郵件。
AHQ 考慮
以下是保護收件者免於遭受惡意攻擊的 AHQ 考慮。
檢查經常從不尋常的位置管理連接器的系統管理員登入 (產生統計數據,並排除) 觀察到最成功登入的位置。
尋找來自異常位置的登入失敗。
//modify timeWindow to modify the lookback. let timeWindow = now(-7d); let timeNow = now(); let logonFail= materialize ( IdentityLogonEvents | where Timestamp between (timeWindow .. timeNow) | where isnotempty(AccountObjectId) | where Application != "Active Directory" | where ActionType == "LogonFailed" | where ISP != "Microsoft Azure" | summarize failedLogonCount=count(), LatestTime = max(Timestamp), EarliestTime = min(Timestamp) by AccountObjectId, Application, ISP, CountryCode, bin(Timestamp, 60s) | where failedLogonCount > 100); // let hasLogonFails = isnotempty(toscalar (logonFail)); let logonFailUsers = materialize ( logonFail | distinct AccountObjectId | take 100); let hasLogonFails = isnotempty(toscalar (logonFailUsers)); let logonSuccess= IdentityLogonEvents | where hasLogonFails | where Timestamp between (timeWindow .. timeNow) | where AccountObjectId in (logonFailUsers) | where Application != "Active Directory" | where ISP != "Microsoft Azure" | where ActionType == "LogonSuccess" | project SuccessTime= Timestamp, ReportId, AccountUpn, AccountObjectId, ISP, CountryCode, Application; logonFail | join kind = innerunique logonSuccess on AccountObjectId, ISP, Application | where SuccessTime between (LatestTime .. (LatestTime + 10s)) | summarize arg_min(SuccessTime, ReportId), EarliestFailedTime=min (EarliestTime), LatestFailedTime=max(LatestTime), failedLogonCount= take_any(failedLogonCount), SuccessLogonCount=count(), ISPSet= make_set(ISP), CountrySet=make_set(CountryCode), AppSet=make_set (Application) by AccountObjectId, AccountUpn | project-rename Timestamp=SuccessTime
建議的動作
一旦判斷觀察到的警示活動是 TP 的一部分,請分類這些警示並執行下列動作:
- 停用或移除發現為惡意的連接器。
- 如果系統管理員帳戶遭到入侵,請重設系統管理員的帳戶認證。 此外,針對遭入侵的系統管理員帳戶停用/撤銷令牌,併為所有系統管理員帳戶啟用多重要素驗證。
- 尋找系統管理員所執行的可疑活動。
- 檢查環境中其他連接器的其他可疑活動。
另請參閱
提示
想要深入了解? Engage 技術社群中的 Microsoft 安全性社群:Microsoft Defender 全面偵測回應 技術社群。