Vyhledávání hrozeb napříč zařízeními, e-maily, aplikacemi a identitami
Platí pro:
- Microsoft Defender XDR
Rozšířené proaktivní vyhledávání v Microsoft Defender XDR umožňuje proaktivně vyhledávat hrozby napříč:
- Zařízení spravovaná službou Microsoft Defender for Endpoint
- E-maily zpracovávané Microsoftem 365
- Aktivity cloudových aplikací, události ověřování a aktivity řadiče domény sledované Microsoft Defender for Cloud Apps a Microsoft Defender for Identity
S touto úrovní viditelnosti můžete rychle vyhledávat hrozby, které procházejí částmi vaší sítě, včetně sofistikovaných vniknutí do e-mailu nebo webu, zvýšit místní oprávnění, získat přihlašovací údaje k privilegované doméně a přesunout se laterálně na vaše zařízení.
Tady jsou obecné techniky a ukázkové dotazy založené na různých scénářích proaktivního vyhledávání, které vám můžou pomoct prozkoumat, jak byste mohli vytvářet dotazy při vyhledávání takových sofistikovaných hrozeb.
Získání informací o entitě
Pomocí těchto dotazů se dozvíte, jak rychle získat informace o uživatelských účtech, zařízeních a souborech.
Získání uživatelských účtů z e-mailových adres
Při vytváření dotazů napříč tabulkami, které pokrývají zařízení a e-maily, budete pravděpodobně muset získat jména uživatelských účtů od e-mailové adresy odesílatele nebo příjemce. Obvykle to můžete udělat pro adresu příjemce nebo odesílatele pomocí místního hostitele z e-mailové adresy.
V následujícím fragmentu kódu použijeme funkci Kusto tostring() k extrahování místního hostitele přímo před e-mailovou @
adresou příjemce ve sloupci RecipientEmailAddress
.
//Query snippet showing how to extract the account name from an email address
AccountName = tostring(split(RecipientEmailAddress, "@")[0])
Následující dotaz ukazuje, jak se tento fragment kódu dá použít:
EmailEvents
| where Timestamp > ago(7d)
| project RecipientEmailAddress, AccountName = tostring(split(RecipientEmailAddress, "@")[0]);
Sloučení tabulky IdentityInfo
Názvy účtů a další informace o účtu můžete získat sloučením nebo připojením k tabulce IdentityInfo. Následující dotaz získá seznam detekcí útoků phishing a malwaru z tabulky EmailEvents a potom spojí informace s IdentityInfo
tabulkou, aby získal podrobné informace o jednotlivých příjemcích.
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
V tomto krátkém videu se dozvíte, jak můžete pomocí dotazovací jazyk Kusto spojovat tabulky.
Získání informací o zařízení
Schéma rozšířeného proaktivního vyhledávání poskytuje rozsáhlé informace o zařízení v různých tabulkách. Například tabulka DeviceInfo poskytuje komplexní informace o zařízení na základě pravidelně agregovaných dat událostí. Tento dotaz používá DeviceInfo
tabulku ke kontrole, jestli se potenciálně ohrožený uživatel (<account-name>
) přihlásil k nějakým zařízením, a pak vypíše výstrahy, které se na těchto zařízeních aktivovaly.
Tip
Tento dotaz používá kind=inner
k určení vnitřního spojení, které brání odstranění duplicitních hodnot levé strany pro 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
Získání informací o událostech souboru
Pomocí následujícího dotazu získáte informace o událostech souvisejících se soubory.
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
Získání informací o událostech sítě
Pomocí následujícího dotazu získáte informace o událostech souvisejících se sítí.
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
Získání informací o verzi agenta zařízení
Pomocí následujícího dotazu získáte verzi agenta běžícího na zařízení.
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
Příklad dotazu pro zařízení s macOS
Pomocí následujícího ukázkového dotazu zobrazíte všechna zařízení s macOS s verzí starší než 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
Získání informací o stavu zařízení
Pomocí následujícího dotazu získáte stav zařízení. V následujícím příkladu dotaz zkontroluje, jestli je zařízení nasazené.
DeviceInfo
| where Timestamp > ago(1d)
| where OnboardingStatus != "Onboarded"
| summarize by DeviceId
| join kind=inner (
DeviceInfo
| where Timestamp > ago(1d)
) on DeviceId
| take 10
Scénáře proaktivního vyhledávání
Výpis aktivit přihlášení uživatelů, kteří obdrželi e-maily, které nebyly úspěšně zapped
Zap (Zero-hour auto purge) řeší škodlivé e-maily po jejich přijetí. Pokud ZAP selže, může se na zařízení nakonec spustit škodlivý kód a nechat ohrožené účty. Tento dotaz zkontroluje aktivitu přihlášení, kterou provedli příjemci e-mailů, které zap úspěšně neřešil.
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
Získání pokusů o přihlášení doménových účtů, na které cílí krádež přihlašovacích údajů
Tento dotaz nejprve identifikuje všechna upozornění na přístup k přihlašovacím údajům v tabulce AlertInfo
. Potom sloučí nebo spojí AlertEvidence
tabulku, ve které analyzuje názvy cílových účtů a filtruje pouze účty připojené k doméně. Nakonec zkontroluje IdentityLogonEvents
tabulku, aby získala všechny přihlašovací aktivity cílových účtů připojených k doméně.
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
Zkontrolujte, jestli jsou na vašich zařízeních soubory od známého odesílatele se zlými úmysly.
Za předpokladu, že víte o e-mailové adrese odesílající škodlivé soubory (MaliciousSender@example.com
), můžete spuštěním tohoto dotazu zjistit, jestli soubory od tohoto odesílatele existují na vašich zařízeních. Tento dotaz můžete použít například k identifikaci zařízení ovlivněných kampaní distribuce malwaru.
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
Kontrola pokusů o přihlášení po přijetí škodlivých e-mailů
Tento dotaz najde 10 nejnovějších přihlášení provedených příjemci e-mailu do 30 minut od přijetí známých škodlivých e-mailů. Pomocí tohoto dotazu můžete zkontrolovat, jestli nedošlo k ohrožení účtů příjemců e-mailu.
//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
Kontrola aktivit PowerShellu po přijetí e-mailů od známého škodlivého odesílatele
Škodlivé e-maily často obsahují dokumenty a další speciálně vytvořené přílohy, které spouští příkazy PowerShellu pro doručování dalších datových částí. Pokud víte o e-mailech od známého škodlivého odesílatele (MaliciousSender@example.com
), můžete pomocí tohoto dotazu vypsat a zkontrolovat aktivity PowerShellu, ke kterým došlo do 30 minut po přijetí e-mailu od odesílatele.
//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)
Související témata
- Přehled rozšířeného proaktivní vyhledávání
- Výuka jazyku dotazu
- Práce s výsledky dotazu
- Použití sdílených dotazů
- Pochopení schématu
- Použití doporučených postupů pro dotazy
Tip
Chcete se dozvědět více? Spojte se s komunitou zabezpečení společnosti Microsoft v naší technické komunitě: Technická komunita Microsoft Defender XDR.