Jakten på trusler på tvers av enheter, e-postmeldinger, apper og identiteter
Gjelder for:
- Microsoft Defender XDR
Avansert jakt i Microsoft Defender XDR lar deg proaktivt jakte på trusler på tvers:
- Enheter som administreres av Microsoft Defender for endepunkt
- E-postmeldinger behandlet av Microsoft 365
- Aktiviteter for skyapper, godkjenningshendelser og domenekontrolleraktiviteter som spores av Microsoft Defender for Cloud Apps og Microsoft Defender for identitet
Med dette synlighetsnivået kan du raskt jakte på trusler som krysser deler av nettverket, inkludert avanserte inntrenging som kommer via e-post eller på nettet, heve lokale rettigheter, skaffe privilegert domenelegitimasjon og flytte sidelengs til tvers av enhetene dine.
Her er generelle teknikker og eksempelspørringer basert på ulike jaktscenarioer som kan hjelpe deg med å utforske hvordan du kan konstruere spørringer når du jakter på slike avanserte trusler.
Få enhetsinformasjon
Bruk disse spørringene til å lære hvordan du raskt kan få informasjon om brukerkontoer, enheter og filer.
Få brukerkontoer fra e-postadresser
Når du konstruerer spørringer på tvers av tabeller som dekker enheter og e-postmeldinger, må du sannsynligvis hente brukerkontonavn fra avsender- eller mottaker-e-postadresser. Du kan vanligvis gjøre dette for enten mottaker- eller avsenderadressen ved hjelp av den lokale verten fra e-postadressen .
I kodesnutten nedenfor bruker vi tostring() Kusto-funksjonen til å trekke ut den lokale verten rett foran @
e-postadressene til mottakeren i kolonnen RecipientEmailAddress
.
//Query snippet showing how to extract the account name from an email address
AccountName = tostring(split(RecipientEmailAddress, "@")[0])
Spørringen nedenfor viser hvordan denne kodesnutten kan brukes:
EmailEvents
| where Timestamp > ago(7d)
| project RecipientEmailAddress, AccountName = tostring(split(RecipientEmailAddress, "@")[0]);
Slå sammen IdentityInfo-tabellen
Du kan få kontonavn og annen kontoinformasjon ved å slå sammen eller bli med i IdentityInfo-tabellen. Spørringen nedenfor henter listen over oppdagelser av phishing og skadelig programvare fra Tabellen EmailEvents , og slår deretter sammen denne informasjonen med IdentityInfo
tabellen for å få detaljert informasjon om hver mottaker.
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
Se denne korte videoen for å lære hvordan du kan bruke Kusto-spørringsspråk til å sammenføye tabeller.
Få enhetsinformasjon
Det avanserte jaktskjemaet gir omfattende enhetsinformasjon i ulike tabeller.
DeviceInfo-tabellen gir for eksempel omfattende enhetsinformasjon basert på hendelsesdata som aggregeres regelmessig. Denne spørringen DeviceInfo
bruker tabellen til å kontrollere om en potensielt kompromittert bruker (<account-name>
) har logget seg på noen enheter og deretter viser varsler som er utløst på disse enhetene.
Tips
Denne spørringen bruker kind=inner
til å angi en indre sammenføyning, som forhindrer deduplisering av venstre sideverdier for DeviceId
.
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
Få informasjon om filhendelse
Bruk følgende spørring for å få informasjon om filrelaterte hendelser.
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
Få informasjon om nettverkshendelser
Bruk følgende spørring for å få informasjon om nettverksrelaterte hendelser.
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
Få versjonsinformasjon for enhetsagenten
Bruk følgende spørring for å få versjonen av agenten som kjører på en enhet.
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
Eksempelspørring for macOS-enheter
Bruk følgende eksempelspørring for å se alle enheter som kjører macOS med en versjon som er eldre enn Catalina.
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
Få informasjon om enhetsstatus
Bruk følgende spørring for å få status for en enhet. I eksemplet nedenfor kontrollerer spørringen om enheten er pålastet.
DeviceInfo
| where Timestamp > ago(1d)
| where OnboardingStatus != "Onboarded"
| summarize by DeviceId
| join kind=inner (
DeviceInfo
| where Timestamp > ago(1d)
) on DeviceId
| take 10
Jaktscenarioer
List opp påloggingsaktiviteter for brukere som har mottatt e-postmeldinger som ikke ble zapped
Nulltimers automatisk tømming (ZAP) adresserer ondsinnede e-postmeldinger etter at de er mottatt. Hvis ZAP mislykkes, kan skadelig kode etter hvert kjøre på enheten og la kontoer bli kompromittert. Denne spørringen ser etter påloggingsaktivitet gjort av mottakerne av e-postmeldinger som ikke ble behandlet av ZAP.
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
Få påloggingsforsøk fra domenekontoer som er rettet mot legitimasjonstyveri
Denne spørringen identifiserer først alle varsler om legitimasjonstilgang i AlertInfo
tabellen. Den fletter eller føyer deretter sammen AlertEvidence
tabellen, som den analyserer for navnene på de målrettede kontoene og filtrene bare for domenetilføyde kontoer. Til slutt kontrollerer den IdentityLogonEvents
tabellen for å få alle påloggingsaktiviteter av de domenetilkoblede målrettede kontoene.
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
Kontroller om filer fra en kjent ondsinnet avsender er på enhetene dine
Forutsatt at du vet om en e-postadresse som sender skadelige filer (MaliciousSender@example.com
), kan du kjøre denne spørringen for å finne ut om det finnes filer fra denne avsenderen på enhetene dine. Du kan for eksempel bruke denne spørringen til å identifisere enheter som påvirkes av en distribusjonskampanje for skadelig programvare.
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
Se gjennom påloggingsforsøk etter mottak av skadelige e-postmeldinger
Denne spørringen finner de 10 nyeste påloggingene utført av e-postmottakere innen 30 minutter etter at de har mottatt kjente ondsinnede e-postmeldinger. Du kan bruke denne spørringen til å kontrollere om kontoene til e-postmottakerne har blitt kompromittert.
//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
Se gjennom PowerShell-aktiviteter etter mottak av e-postmeldinger fra kjente ondsinnede avsendere
Skadelige e-postmeldinger inneholder ofte dokumenter og andre spesiallagde vedlegg som kjører PowerShell-kommandoer for å levere ekstra nyttelaster. Hvis du er klar over e-postmeldinger som kommer fra en kjent ondsinnet avsender (MaliciousSender@example.com
), kan du bruke denne spørringen til å vise og se gjennom PowerShell-aktiviteter som oppstod innen 30 minutter etter at en e-postmelding ble mottatt fra avsenderen.
//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)
Beslektede emner
- Oversikt over avansert jakt
- Lær spørringsspråket
- Arbeide med spørringsresultater
- Bruke delte spørringer
- Forstå skjemaet
- Bruk anbefalte fremgangsmåter for spørring
Tips
Vil du lære mer? Kommuniser med Microsoft Sikkerhet-fellesskapet i det tekniske fellesskapet vårt: Microsoft Defender XDR Tech Community.