Jaga efter hot på olika enheter, e-postmeddelanden, appar och identiteter

Obs!

Vill du uppleva Microsoft Defender XDR? Läs mer om hur du kan utvärdera och pilottesta Microsoft Defender XDR.

Gäller för:

  • Microsoft Defender XDR

Med avancerad jakt i Microsoft Defender XDR kan du proaktivt jaga hot över:

  • Enheter som hanteras av Microsoft Defender för Endpoint
  • E-postmeddelanden som bearbetas av Microsoft 365
  • Aktiviteter för molnappar, autentiseringshändelser och domänkontrollantaktiviteter som spåras av Microsoft Defender for Cloud Apps och Microsoft Defender for Identity

Med den här nivån av synlighet kan du snabbt söka efter hot som passerar delar av nätverket, inklusive avancerade intrång som kommer via e-post eller webben, höja lokala privilegier, skaffa privilegierade domänautentiseringsuppgifter och gå vidare till över dina enheter.

Här är allmänna tekniker och exempelfrågor baserade på olika jaktscenarier som kan hjälpa dig att utforska hur du kan skapa frågor när du letar efter sådana avancerade hot.

Hämta entitetsinformation

Använd dessa frågor för att lära dig hur du snabbt kan få information om användarkonton, enheter och filer.

Hämta användarkonton från e-postadresser

När du skapar frågor mellan tabeller som täcker enheter och e-postmeddelanden måste du förmodligen hämta användarnamn från avsändarens eller mottagarens e-postadresser. Du kan vanligtvis göra detta för antingen mottagare eller avsändaradress med hjälp av den lokala värden från e-postadressen.

I kodfragmentet nedan använder vi funktionen tostring() Kusto för att extrahera den lokala värden precis före @ från mottagarens e-postadresser i kolumnen RecipientEmailAddress.

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

Frågan nedan visar hur det här kodfragmentet kan användas:

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

Sammanfoga tabellen IdentityInfo

Du kan hämta kontonamn och annan kontoinformation genom att slå samman eller ansluta till tabellen IdentityInfo. Frågan nedan hämtar listan över identifieringar av nätfiske och skadlig kod från tabellen EmailEvents och kopplar sedan den informationen till IdentityInfo tabellen för att få detaljerad information om varje mottagare.

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

Titta på den här korta videon om du vill lära dig hur du kan använda Kusto-frågespråk för att ansluta till tabeller.

Hämta enhetsinformation

Det avancerade jaktschemat innehåller omfattande enhetsinformation i olika tabeller. Tabellen DeviceInfo innehåller till exempel omfattande enhetsinformation baserat på händelsedata som sammanställs regelbundet. Den här frågan använder DeviceInfo tabellen för att kontrollera om en potentiellt komprometterad användare (<account-name>) har loggat in på några enheter och visar sedan de aviseringar som har utlösts på dessa enheter.

Tips

Den här frågan använder kind=inner för att ange en inre koppling, vilket förhindrar deduplicering av värden på vänster sida för 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

Hämta information om filhändelsen

Använd följande fråga för att hämta information om filrelaterade händelser.

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

Hämta information om nätverkshändelser

Använd följande fråga för att hämta information om nätverksrelaterade händelser.

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

Hämta versionsinformation för enhetsagenten

Använd följande fråga för att hämta versionen av agenten som körs 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

Exempelfråga för macOS-enheter

Använd följande exempelfråga för att se alla enheter som kör macOS med en version som är äldre än 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

Hämta information om enhetsstatus

Använd följande fråga för att hämta status för en enhet. I följande exempel kontrollerar frågan om enheten har registrerats.

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

Jaktscenarier

Visa en lista över inloggningsaktiviteter för användare som har tagit emot e-postmeddelanden som inte har zappats korrekt

Automatisk rensning i noll timmar (ZAP) adresserar skadliga e-postmeddelanden efter att de har tagits emot. Om ZAP misslyckas kan skadlig kod så småningom köras på enheten och låta konton komprometteras. Den här frågan söker efter inloggningsaktivitet som gjorts av mottagarna av e-postmeddelanden som inte har åtgärdats 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

Hämta inloggningsförsök efter domänkonton som är mål för stöld av autentiseringsuppgifter

Den här frågan identifierar först alla åtkomstaviseringar för autentiseringsuppgifter i tabellen AlertInfo . Sedan sammanfogas eller kopplas tabellen AlertEvidence , som den parsar för namnen på målkontona och filter endast för domänanslutna konton. Slutligen kontrolleras tabellen IdentityLogonEvents för att hämta alla inloggningsaktiviteter av de domänanslutna målkontona.

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

Kontrollera om filer från en känd skadlig avsändare finns på dina enheter

Förutsatt att du känner till en e-postadress som skickar skadliga filer (MaliciousSender@example.com), kan du köra den här frågan för att avgöra om det finns filer från den här avsändaren på dina enheter. Du kan till exempel använda den här frågan för att identifiera enheter som påverkas av en distributionskampanj för skadlig kod.

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

Granska inloggningsförsök efter mottagande av skadliga e-postmeddelanden

Den här frågan hittar de 10 senaste inloggningarna som utförts av e-postmottagare inom 30 minuter efter att de fått kända skadliga e-postmeddelanden. Du kan använda den här frågan för att kontrollera om e-postmottagarnas konton har komprometterats.

//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

Granska PowerShell-aktiviteter efter mottagandet av e-postmeddelanden från känd skadlig avsändare

Skadliga e-postmeddelanden innehåller ofta dokument och andra specialskapade bifogade filer som kör PowerShell-kommandon för att leverera ytterligare nyttolaster. Om du känner till e-postmeddelanden som kommer från en känd skadlig avsändare (MaliciousSender@example.com) kan du använda den här frågan för att lista och granska PowerShell-aktiviteter som inträffade inom 30 minuter efter att ett e-postmeddelande togs emot från avsändaren.

//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)

Tips

Vill du veta mer? Engage med Microsofts säkerhetscommunity i vår Tech Community: Microsoft Defender XDR Tech Community.