Gefahrensuche über Geräte, E-Mails, Apps und Identitäten hinweg

Hinweis

Möchten Sie Microsoft Defender XDR erleben? Erfahren Sie mehr darüber, wie Sie Microsoft Defender XDR evaluieren und pilotieren können.

Gilt für:

  • Microsoft Defender XDR

Die erweiterte Suche in Microsoft Defender XDR ermöglicht Ihnen die proaktive Suche nach Bedrohungen in folgenden Regionen:

  • Von Microsoft Defender for Endpoint verwaltete Geräte
  • Von Microsoft 365 verarbeitete E-Mails
  • Cloud-App-Aktivitäten, Authentifizierungsereignisse und Domänencontrolleraktivitäten, die von Microsoft Defender for Cloud Apps und Microsoft Defender for Identity

Mit diesem Grad an Sichtbarkeit können Sie schnell nach Bedrohungen suchen, die Abschnitte Ihres Netzwerks durchlaufen, einschließlich komplexer Eindringversuche, die per E-Mail oder im Web eingehen, lokale Berechtigungen erhöhen, privilegierte Domänenanmeldeinformationen abrufen und seitlich auf Ihren Geräten zu wechseln.

Im Folgenden finden Sie allgemeine Techniken und Beispielabfragen, die auf verschiedenen Huntingszenarien basieren und Ihnen helfen, zu untersuchen, wie Sie Abfragen bei der Suche nach solch komplexen Bedrohungen erstellen können.

Abrufen von Entitätsinformationen

Verwenden Sie diese Abfragen, um zu erfahren, wie Sie schnell Informationen zu Benutzerkonten, Geräten und Dateien abrufen können.

Abrufen von Benutzerkonten aus E-Mail-Adressen

Beim Erstellen von Abfragen über Tabellen, die Geräte und E-Mail-Nachrichten enthalten, müssen Sie wahrscheinlich Benutzerkontonamen aus E-Mail-Adressen von Absendern oder Empfängern abrufen. Sie können dies in der Regel für empfänger- oder absenderadressen tun, indem Sie den lokalen Host aus der E-Mail-Adresse verwenden.

Im folgenden Codeausschnitt verwenden wir die tostring() -Kusto-Funktion, um den local-host direkt vor dem aus E-Mail-Adressen des @ Empfängers in der Spalte RecipientEmailAddresszu extrahieren.

//Query snippet showing how to extract the account name from an email address
AccountName = tostring(split(RecipientEmailAddress, "@")[0])

Die folgende Abfrage zeigt, wie dieser Codeausschnitt verwendet werden kann:

EmailEvents
| where Timestamp > ago(7d)
| project RecipientEmailAddress, AccountName = tostring(split(RecipientEmailAddress, "@")[0]);

Zusammenführen der IdentityInfo-Tabelle

Sie können Kontonamen und andere Kontoinformationen abrufen, indem Sie die IdentityInfo-Tabelle zusammenführen oder verknüpfen. Die folgende Abfrage ruft die Liste der Phishing- und Schadsoftwareerkennungen aus der Tabelle EmailEvents ab und verknüpft diese Informationen dann mit der IdentityInfo Tabelle, um detaillierte Informationen zu den einzelnen Empfängern zu erhalten.

EmailEvents
| where Timestamp > ago(7d)
//Get email processing events where the messages were identified as either phishing or malware
| where ThreatTypes has "Malware" or ThreatTypes has "Phish"
//Merge email events with identity info to get recipient details
| join (IdentityInfo | distinct AccountUpn, AccountDisplayName, JobTitle,
Department, City, Country) on $left.RecipientEmailAddress == $right.AccountUpn
//Show important message and recipient details
| project Timestamp, NetworkMessageId, Subject, ThreatTypes,
SenderFromAddress, RecipientEmailAddress, AccountDisplayName, JobTitle,
Department, City, Country

Sehen Sie sich dieses kurze Video an, um zu erfahren, wie Sie Kusto-Abfragesprache verwenden können, um Tabellen zu verknüpfen.

Abrufen von Geräteinformationen

Das Schema für die erweiterte Suche bietet umfangreiche Geräteinformationen in verschiedenen Tabellen. Beispielsweise bietet die DeviceInfo-Tabelle umfassende Geräteinformationen, die auf regelmäßig aggregierten Ereignisdaten basieren. Diese Abfrage verwendet die DeviceInfo Tabelle, um zu überprüfen, ob sich ein potenziell gefährdeter Benutzer (<account-name>) bei geräten angemeldet hat, und listet dann die Warnungen auf, die auf diesen Geräten ausgelöst wurden.

Tipp

Diese Abfrage verwendet kind=inner , um einen inneren Join anzugeben, der die Deduplizierung von Werten auf der linken Seite für DeviceIdverhindert.

DeviceInfo
//Query for devices that the potentially compromised account has logged onto
| where LoggedOnUsers contains '<account-name>'
| distinct DeviceId
//Crosscheck devices against alert records in AlertEvidence and AlertInfo tables
| join kind=inner AlertEvidence on DeviceId
| project AlertId
//List all alerts on devices that user has logged on to
| join AlertInfo on AlertId
| project AlertId, Timestamp, Title, Severity, Category

Abrufen von Dateiereignisinformationen

Verwenden Sie die folgende Abfrage, um Informationen zu dateibezogenen Ereignissen abzurufen.

DeviceInfo
| where Timestamp > ago(1d)
| where ClientVersion startswith "20.1"
| summarize by DeviceId
| join kind=inner (
    DeviceFileEvents
    | where Timestamp > ago(1d)
) on DeviceId
| take 10

Abrufen von Netzwerkereignisinformationen

Verwenden Sie die folgende Abfrage, um Informationen zu netzwerkbezogenen Ereignissen abzurufen.

DeviceInfo
| where Timestamp > ago(1d)
| where ClientVersion startswith "20.1"
| summarize by DeviceId
| join kind=inner (
    DeviceNetworkEvents
    | where Timestamp > ago(1d)
) on DeviceId
| take 10

Abrufen von Informationen zur Geräte-Agent-Version

Verwenden Sie die folgende Abfrage, um die Version des Agents abzurufen, der auf einem Gerät ausgeführt wird.

DeviceInfo
| where Timestamp > ago(1d)
| where ClientVersion startswith "20.1"
| summarize by DeviceId
| join kind=inner (
    DeviceNetworkEvents
    | where Timestamp > ago(1d)
) on DeviceId
| take 10

Beispielabfrage für macOS-Geräte

Verwenden Sie die folgende Beispielabfrage, um alle Geräte anzuzeigen, auf denen macOS mit einer älteren Version als Catalina ausgeführt wird.

DeviceInfo
| where Timestamp > ago(1d)
| where OSPlatform == "macOS" and  OSVersion !contains "10.15" and OSVersion !contains "11."
| summarize by DeviceId
| join kind=inner (
    DeviceInfo
    | where Timestamp > ago(1d)
) on DeviceId
| take 10

Abrufen von Geräte-status-Informationen

Verwenden Sie die folgende Abfrage, um status eines Geräts abzurufen. Im folgenden Beispiel überprüft die Abfrage, ob das Gerät integriert ist.

DeviceInfo
| where Timestamp > ago(1d)
| where OnboardingStatus != "Onboarded"
| summarize by DeviceId
| join kind=inner (
    DeviceInfo
    | where Timestamp > ago(1d)
) on DeviceId
| take 10

Suchszenarien

Auflisten der Anmeldeaktivitäten von Benutzern, die E-Mails erhalten haben, die nicht erfolgreich zapped wurden

Zap (Zero-Hour Auto Purge) adressiert böswillige E-Mails, nachdem sie empfangen wurden. Wenn ZAP fehlschlägt, kann bösartiger Code möglicherweise auf dem Gerät ausgeführt werden und Konten kompromittiert lassen. Diese Abfrage überprüft die Anmeldeaktivität der Empfänger von E-Mails, die von ZAP nicht erfolgreich adressiert wurden.

EmailPostDeliveryEvents
| where Timestamp > ago(7d)
//List malicious emails that were not zapped successfully
| where ActionType has "ZAP" and ActionResult == "Error"
| project ZapTime = Timestamp, ActionType, NetworkMessageId , RecipientEmailAddress
//Get logon activity of recipients using RecipientEmailAddress and AccountUpn
| join kind=inner IdentityLogonEvents on $left.RecipientEmailAddress == $right.AccountUpn
| where Timestamp between ((ZapTime-24h) .. (ZapTime+24h))
//Show only pertinent info, such as account name, the app or service, protocol, the target device, and type of logon
| project ZapTime, ActionType, NetworkMessageId , RecipientEmailAddress, AccountUpn,
LogonTime = Timestamp, AccountDisplayName, Application, Protocol, DeviceName, LogonType

Abrufen von Anmeldeversuchen von Domänenkonten, die von Diebstahl von Anmeldeinformationen betroffen sind

Diese Abfrage identifiziert zunächst alle Zugriffswarnungen für Anmeldeinformationen in der AlertInfo Tabelle. Anschließend wird die AlertEvidence Tabelle zusammengeführt oder verknüpft, die nach den Namen der Zielkonten analysiert wird, und filtert nur nach In die Domäne eingebundenen Konten. Schließlich wird die IdentityLogonEvents Tabelle überprüft, um alle Anmeldeaktivitäten der in die Domäne eingebundenen Zielkonten abzurufen.

AlertInfo
| where Timestamp > ago(30d)
//Get all credential access alerts
| where Category == "CredentialAccess"
//Get more info from AlertEvidence table to get the SID of the target accounts
| join AlertEvidence on AlertId
| extend IsJoined=(parse_json(AdditionalFields).Account.IsDomainJoined)
| extend TargetAccountSid=tostring(parse_json(AdditionalFields).Account.Sid)
//Filter for domain-joined accounts only
| where IsJoined has "true"
//Merge with IdentityLogonEvents to get all logon attempts by the potentially compromised target accounts
| join kind=inner IdentityLogonEvents on $left.TargetAccountSid == $right.AccountSid
//Show only pertinent info, such as account name, the app or service, protocol, the accessed device, and type of logon
| project AccountDisplayName, TargetAccountSid, Application, Protocol, DeviceName, LogonType

Überprüfen, ob Dateien bekannter bösartiger Absender auf Ihren Geräten vorhanden sind

Wenn Sie wissen, dass eine E-Mail-Adresse schädliche Dateien (MaliciousSender@example.com) sendet, können Sie diese Abfrage ausführen, um festzustellen, ob Dateien von diesem Absender auf Ihren Geräten vorhanden sind. Sie können diese Abfrage beispielsweise verwenden, um Geräte zu identifizieren, die von einer Schadsoftwareverteilungskampagne betroffen sind.

EmailAttachmentInfo
| where SenderFromAddress =~ "MaliciousSender@example.com"
//Get emails with attachments identified by a SHA-256
| where isnotempty(SHA256)
| join (
//Check devices for any activity involving the attachments
DeviceFileEvents
| project FileName, SHA256, DeviceName, DeviceId
) on SHA256
| project Timestamp, FileName , SHA256, DeviceName, DeviceId,  NetworkMessageId, SenderFromAddress, RecipientEmailAddress

Überprüfen von Anmeldeversuchen nach dem Empfang von bösartigen E-Mails

Diese Abfrage ermittelt die 10 neuesten Anmeldungen, die von E-Mail-Empfängern innerhalb von 30 Minuten nach dem Empfang bekannter bösartiger E-Mails ausgeführt wurden. Sie können diese Abfrage verwenden, um zu überprüfen, ob die Konten der E-Mail-Empfänger kompromittiert wurden.

//Define new table for malicious emails
let MaliciousEmails=EmailEvents
//List emails detected as malware, getting only pertinent columns
| where ThreatTypes has "Malware"
| project TimeEmail = Timestamp, Subject, SenderFromAddress, AccountName = tostring(split(RecipientEmailAddress, "@")[0]);
MaliciousEmails
| join (
//Merge malicious emails with logon events to find logons by recipients
IdentityLogonEvents
| project LogonTime = Timestamp, AccountName, DeviceName
) on AccountName
//Check only logons within 30 minutes of receipt of an email
| where (LogonTime - TimeEmail) between (0min.. 30min)
| take 10

Überprüfen von PowerShell-Aktivitäten nach dem Empfang von E-Mails von bekannten bösartigen Absendern

Bösartige E-Mail-Nachrichten enthalten häufig Dokumente und andere speziell gestaltete Anlagen, die PowerShell-Befehle ausführen, um zusätzliche Nutzlasten zu übertragen. Wenn Sie E-Mails kennen, die von einem bekannten schädlichen Absender (MaliciousSender@example.com) stammen, können Sie diese Abfrage verwenden, um PowerShell-Aktivitäten aufzulisten und zu überprüfen, die innerhalb von 30 Minuten nach dem Empfang einer E-Mail vom Absender aufgetreten sind.

//Define new table for emails from specific sender
let EmailsFromBadSender=EmailEvents
| where SenderFromAddress =~ "MaliciousSender@example.com"
| project TimeEmail = Timestamp, Subject, SenderFromAddress, AccountName = tostring(split(RecipientEmailAddress, "@")[0]);
//Merge emails from sender with process-related events on devices
EmailsFromBadSender
| join (
DeviceProcessEvents
//Look for PowerShell activity
| where FileName =~ "powershell.exe"
//Add line below to check only events initiated by Outlook
//| where InitiatingProcessParentFileName =~ "outlook.exe"
| project TimeProc = Timestamp, AccountName, DeviceName, InitiatingProcessParentFileName, InitiatingProcessFileName, FileName, ProcessCommandLine
) on AccountName
//Check only PowerShell activities within 30 minutes of receipt of an email
| where (TimeProc - TimeEmail) between (0min.. 30min)

Tipp

Möchten Sie mehr erfahren? Engage mit der Microsoft-Sicherheitscommunity in unserer Tech Community: Microsoft Defender XDR Tech Community.