Gefahrensuche über Geräte, E-Mails, Apps und Identitäten hinweg
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 RecipientEmailAddress
zu 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 DeviceId
verhindert.
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)
Verwandte Themen
- Übersicht über die erweiterte Suche
- Lernen der Abfragesprache
- Arbeiten mit Abfrageergebnissen
- Verwenden freigegebener Abfragen
- Grundlegendes zum Schema
- Anwenden bewährter Methoden für Abfragen
Tipp
Möchten Sie mehr erfahren? Wenden Sie sich an die Microsoft Security-Community in unserer Tech Community: Microsoft Defender XDR Tech Community.