Cercare minacce tra dispositivi, messaggi di posta elettronica, app e identitàHunt for threats across devices, emails, apps, and identities

Importante

Benvenuti in Microsoft 365 Defender, il nuovo nome per Microsoft Threat Protection.Welcome to Microsoft 365 Defender, the new name for Microsoft Threat Protection. Altre informazioni su questo e altri aggiornamenti sono disponibili qui.Read more about this and other updates here. A breve aggiorneremo i nomi nei prodotti e nei documentiWe'll be updating names in products and in the docs in the near future

Si applica a:Applies to:

  • Microsoft Threat ProtectionMicrosoft Threat Protection

La ricerca avanzata in Microsoft Threat Protection consente di cercare in modo proattivo le minacce tra:Advanced hunting in Microsoft Threat Protection allows you to proactively hunt for threats across:

  • Dispositivi gestiti da Microsoft Defender ATPDevices managed by Microsoft Defender ATP
  • Messaggi di posta elettronica elaborati da Microsoft 365Emails processed by Microsoft 365
  • Attività di app Cloud, eventi di autenticazione e attività del controller di dominio monitorate da Microsoft cloud app Security e Azure ATPCloud app activities, authentication events, and domain controller activities tracked by Microsoft Cloud App Security and Azure ATP

Con questo livello di visibilità, è possibile cercare rapidamente le minacce che attraversano sezioni della rete, incluse le intrusioni sofisticate che arrivano sulla posta elettronica o sul Web, elevare i privilegi locali, acquisire le credenziali di dominio privilegiato e spostarsi lateralmente nei dispositivi.With this level of visibility, you can quickly hunt for threats that traverse sections of your network, including sophisticated intrusions that arrive on email or the web, elevate local privileges, acquire privileged domain credentials, and move laterally to across your devices.

Di seguito sono riportate le tecniche generali e le query di esempio basate su diversi scenari di caccia che consentono di esplorare la modalità di creazione di query durante la ricerca di tali minacce sofisticate.Here are general techniques and sample queries based on various hunting scenarios that can help you explore how you might construct queries when hunting for such sophisticated threats.

Ottenere informazioni sulle entitàGet entity info

Utilizzare queste query per scoprire come è possibile ottenere rapidamente informazioni sugli account utente, sui dispositivi e sui file.Use these queries to learn how you can quickly get information about user accounts, devices, and files.

Ottenere account utente da indirizzi di posta elettronicaObtain user accounts from email addresses

Durante la creazione di query su tabelle che includono sia dispositivi che messaggi di posta elettronica, è probabile che sia necessario ottenere i nomi degli account utente dagli indirizzi di posta elettronica del mittente o del destinatario.When constructing queries across tables that cover devices and emails, you will likely need to obtain user account names from sender or recipient email addresses. In genere, è possibile eseguire questa operazione per l'indirizzo del destinatario o del mittente utilizzando l' host locale dall'indirizzo di posta elettronica.You can generally do this for either recipient or sender address using the local-host from the email address.

Nel frammento di seguito viene utilizzata la funzione ToString () kusto per estrarre il diritto host locale prima degli @ indirizzi di posta elettronica del destinatario nella colonna RecipientEmailAddress .In the snippet below, we use the tostring() Kusto function to extract the local-host right before the @ from recipient email addresses in the column RecipientEmailAddress.

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

Nella query seguente viene illustrato il modo in cui è possibile utilizzare questo frammento di pagina:The query below shows how this snippet can be used:

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

Unire la tabella IdentityInfoMerge the IdentityInfo table

È possibile ottenere i nomi degli account e altre informazioni sull'account unendo o unendosi alla tabella IdentityInfo.You can get account names and other account information by merging or joining the IdentityInfo table. La query seguente ottiene l'elenco dei rilevamenti di phishing e malware dalla tabella EmailEvents e quindi aggiunge tali informazioni alla IdentityInfo tabella per ottenere informazioni dettagliate su ogni destinatario.The query below obtains the list of phishing and malware detections from the EmailEvents table and then joins that information with the IdentityInfo table to get detailed information about each recipient.

EmailEvents
| where Timestamp > ago(7d)
//Get email processing events where the messages were identified as either phishing or malware
| where MalwareFilterVerdict == 'Malware' or PhishFilterVerdict == '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, PhishFilterVerdict, MalwareFilterVerdict,
SenderFromAddress, RecipientEmailAddress, AccountDisplayName, JobTitle, 
Department, City, Country

Ottenere informazioni sul dispositivoGet device information

Lo schema di ricerca avanzata fornisce informazioni estese sul dispositivo in varie tabelle.The advanced hunting schema provides extensive device information in various tables. La tabella DeviceInfo , ad esempio, fornisce informazioni complete sui dispositivi in base ai dati di evento aggregati regolarmente.For example, the DeviceInfo table provides comprehensive device information based on event data aggregated regularly. Questa query utilizza la DeviceInfo tabella per controllare se un utente potenzialmente compromesso ( <account-name> ) ha eseguito l'accesso a tutti i dispositivi e quindi elenca gli avvisi attivati in tali dispositivi.This query uses the DeviceInfo table to check if a potentially compromised user (<account-name>) has logged on to any devices and then lists the alerts that have been triggered on those devices.

Suggerimento

Questa query utilizza kind=inner per specificare un inner-join, che impedisce la deduplicazione dei valori lato sinistro per DeviceId .This query uses kind=inner to specify an inner-join, which prevents deduplication of left side values 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 

Scenari di ricercaHunting scenarios

Elenco delle attività di accesso degli utenti che hanno ricevuto messaggi di posta elettronica che non sono stati correttamente zappedList logon activities of users that received emails that were not zapped successfully

Zero-hour auto Purge (ZAP) indirizza i messaggi di posta elettronica dannosi dopo che sono stati ricevuti.Zero-hour auto purge (ZAP) addresses malicious emails after they have been received. Se ZAP ha esito negativo, il codice dannoso potrebbe eventualmente essere eseguito nel dispositivo e lasciare gli account compromessi.If ZAP fails, malicious code might eventually run on the device and leave accounts compromised. Questa query consente di controllare l'attività di accesso effettuata dai destinatari dei messaggi di posta elettronica che non sono stati indirizzati correttamente da ZAP.This query checks for logon activity made by the recipients of emails that were not successfully addressed by 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

Ottenere tentativi di accesso da account di dominio mirati dal furto di credenzialiGet logon attempts by domain accounts targeted by credential theft

Questa query identifica innanzitutto tutti gli avvisi di accesso alle credenziali nella AlertInfo tabella.This query first identifies all credential access alerts in the AlertInfo table. Viene quindi unita o aggiunta la AlertEvidence tabella, che viene analizzata per i nomi degli account e dei filtri di destinazione solo per gli account aggiunti a un dominio.It then merges or joins the AlertEvidence table, which it parses for the names of the targeted accounts and filters for domain-joined accounts only. Infine, viene controllata la IdentityLogonEvents tabella per ottenere tutte le attività di accesso dagli account di destinazione aggiunti al dominio.Finally, it checks the IdentityLogonEvents table to get all logon activities by the domain-joined targeted accounts.

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

Verificare se nei dispositivi sono presenti file di un mittente malintenzionato notoCheck if files from a known malicious sender are on your devices

Presupponendo di sapere di un indirizzo di posta elettronica che invia file dannosi ( MaliciousSender@example.com ), è possibile eseguire questa query per determinare se i file di questo mittente sono presenti nei dispositivi.Assuming you know of an email address sending malicious files (MaliciousSender@example.com), you can run this query to determine if files from this sender exist on your devices. È possibile utilizzare questa query, ad esempio per identificare i dispositivi coinvolti in una campagna di distribuzione di malware.You can use this query, for example, to identify devices affected by a malware distribution campaign.

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
) on SHA256
| project Timestamp, FileName , SHA256, DeviceName, DeviceId,  NetworkMessageId, SenderFromAddress, RecipientEmailAddress

Rivedere i tentativi di accesso dopo aver ricevuto messaggi pericolosiReview logon attempts after receipt of malicious emails

Questa query trova i 10 accessi più recenti eseguiti dai destinatari dei messaggi entro 30 minuti dalla ricezione di messaggi pericoloso.This query finds the 10 latest logons performed by email recipients within 30 minutes after they received known malicious emails. È possibile usare questa query per verificare se gli account dei destinatari dei messaggi di posta elettronica sono stati compromessi.You can use this query to check whether the accounts of the email recipients have been compromised.

//Define new table for malicious emails
let MaliciousEmails=EmailEvents
//List emails detected as malware, getting only pertinent columns
| where MalwareFilterVerdict == "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

Esaminare le attività di PowerShell dopo la ricezione di messaggi di posta elettronica da un mittente malintenzionato notoReview PowerShell activities after receipt of emails from known malicious sender

I messaggi di posta elettronica pericolosi contengono spesso documenti e altri allegati appositamente predisposti che eseguono comandi di PowerShell per l'esecuzione di altri payload.Malicious emails often contain documents and other specially crafted attachments that run PowerShell commands to deliver additional payloads. Se si è a conoscenza di messaggi di posta elettronica provenienti da un mittente noto MaliciousSender@example.com , è possibile utilizzare questa query per elencare ed esaminare le attività di PowerShell che si sono verificate entro 30 minuti dopo la ricezione di un messaggio di posta elettronica da parte del mittente.If you are aware of emails coming from a known malicious sender (MaliciousSender@example.com), you can use this query to list and review PowerShell activities that occurred within 30 minutes after an email was received from the sender.

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