訓練
認證
Microsoft Certified: Security Operations Analyst Associate - Certifications
使用 Microsoft Sentinel、適用於雲端的 Microsoft Defender 和 Microsoft 365 Defender 調查、搜尋及降低威脅。
適用於:
威脅執行者會使用遭入侵的交換連接器,藉由偽裝合法的電子郵件,大量傳送垃圾郵件和網路釣魚電子郵件給不知情的收件者。 由於連接器遭到入侵,因此收件者通常會信任電子郵件。 這類網路釣魚電子郵件是網路釣魚活動的常見媒介,而商務電子郵件入侵 (BEC) 案例。 因此,這類電子郵件必須受到高度監視,因為收件者成功入侵的可能性很高。
此劇本有助於調查惡意執行者設定/部署惡意連接器的實例。 因此,他們會採取必要的步驟來補救攻擊,並降低其所造成的安全性風險。 劇本有助於將警示分類為真 (TP) 或誤判 (FP) 。 如果警示為 TP,劇本會列出補救攻擊所需的建議動作。 此劇本適用於檢閱、處理/管理及評分警示的安全性小組。
以下是使用劇本的結果:
Exchange 連接器是自訂電子郵件流向 Microsoft 365 或 Office 365 組織的指示集合。 通常大部分的 Microsoft 365 和 Office 365 組織都不需要一般郵件流程的連接器。
連接器可用來在遠端電子郵件系統與 O365) 或 O365 Office 365 (與內部部署電子郵件系統之間路由傳送郵件流量。
攻擊者可能會入侵現有的交換連接器或危害系統管理員,並藉由傳送網路釣魚或垃圾郵件/大量電子郵件來設定新的連接器。
查看電子郵件流量及其標頭時,可以找到惡意連接器的一般指標。 例如,從 P1 中的連接器節點觀察到電子郵件流量時, (標頭髮件人) 和 P2 (信封寄件者) 寄件者位址,以及寄件者的 AccountObjectId 上沒有任何資訊。
此警示會嘗試識別這類郵件流程實例,其中郵件傳送活動似乎可疑,因此無法在寄件者上新增相關信息。
您必須遵循順序來識別惡意交換連接器:
本節說明調查警示並補救因此事件而造成的安全性風險的步驟。
您可以使用 進階搜捕 查詢來收集警示的相關信息,並判斷活動是否可疑。
請確定您可以存取下列資料表:
資料表名稱 | 描述 |
---|---|
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
以下是保護收件者免於遭受惡意攻擊的 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 全面偵測回應 技術社群。
訓練
認證
Microsoft Certified: Security Operations Analyst Associate - Certifications
使用 Microsoft Sentinel、適用於雲端的 Microsoft Defender 和 Microsoft 365 Defender 調查、搜尋及降低威脅。