Охота за угрозами на различных устройствах, в письмах, приложениях и удостоверенияхHunt for threats across devices, emails, apps, and identities

Важно!

Улучшенный Центр безопасности Microsoft 365 теперь доступен в общедоступной предварительной версии.The improved Microsoft 365 security center is now available. Этот новый интерфейс Центра безопасности Microsoft 365 объединяет Defender для конечной точки, Defender для Office 365, Microsoft 365 Defender и другие решения.This new experience brings Defender for Endpoint, Defender for Office 365, Microsoft 365 Defender, and more into the Microsoft 365 security center. Узнайте о новых возможностях.Learn what's new.

Область применения:Applies to:

  • Microsoft 365 DefenderMicrosoft 365 Defender

Расширенный поиск в Microsoft 365 Defender позволяет активно охотиться на угрозы по всему:Advanced hunting in Microsoft 365 Defender allows you to proactively hunt for threats across:

  • Устройства, управляемые Microsoft Defender для конечной точкиDevices managed by Microsoft Defender for Endpoint
  • Электронные сообщения, обработанные Microsoft 365Emails processed by Microsoft 365
  • Действия облачного приложения, события проверки подлинности и действия контроллера домена, отслеживаемые Microsoft Cloud App Security и Microsoft Defender for IdentityCloud app activities, authentication events, and domain controller activities tracked by Microsoft Cloud App Security and Microsoft Defender for Identity

С помощью этого уровня видимости можно быстро искать угрозы, которые пересекают разделы вашей сети, включая сложные вторжения, которые поступают по электронной почте или в Интернете, повысить местные привилегии, получить привилегированные учетные данные домена и перейти на другие устройства.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.

Вот общие методы и примеры запросов, основанных на различных сценариях охоты, которые помогут вам изучить, как можно создавать запросы при поиске таких сложных угроз.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.

Получить сведения об объектахGet entity info

Используйте эти запросы, чтобы узнать, как быстро получить сведения о учетных записях пользователей, устройствах и файлах.Use these queries to learn how you can quickly get information about user accounts, devices, and files.

Получение учетных записей пользователей из адресов электронной почтыObtain user accounts from email addresses

При формировании запросов по таблицам, относящимся к устройствам и сообщениям электронной почты может возникать необходимость получить названия учетных записей пользователей из электронных адресов отправителя или получателя.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. Обычно это можно сделать для адреса получателя или отправщика с помощью локального хоста с адреса электронной почты.You can generally do this for either recipient or sender address using the local-host from the email address.

В приведенной ниже фрагменте мы используем функцию tostring() Kusto для извлечения локального хоста прямо перед адресами электронной почты получателей в @ столбце 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])

В ниже приведеном ниже запросе показано, как можно использовать этот фрагмент:The query below shows how this snippet can be used:

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

Объединение таблицы IdentityInfoMerge the IdentityInfo table

Вы можете получить имена учетных записей и другие сведения об учетной записи путем слияния или присоединения к таблице IdentityInfo.You can get account names and other account information by merging or joining the IdentityInfo table. В приведенной ниже области запрос получает список обнаружения фишинга и вредоносных программ из таблицы EmailEvents, а затем присоединяется к этой информации со таблицей, чтобы получить подробные сведения о каждом IdentityInfo получателе.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 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

Получить сведения об устройствеGet device information

Передовая схема охоты содержит обширные сведения о устройстве в различных таблицах.The advanced hunting schema provides extensive device information in various tables. Например, таблица DeviceInfo предоставляет всестороннюю информацию об устройстве на основе регулярно агрегированных данных событий.For example, the DeviceInfo table provides comprehensive device information based on event data aggregated regularly. В этом запросе используется таблица, чтобы проверить, вошел ли потенциально скомпрометированный пользователь на любые устройства, а затем перечислить оповещения, срабатывав на DeviceInfo <account-name> этих устройствах.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.

Совет

Этот запрос использует для указания внутреннего присоединяния, которое предотвращает kind=inner декупликацию значений левой стороны 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 

Сценарии выслеживанияHunting scenarios

Список действий пользователей, которые получили сообщения электронной почты, которые не были успешно запертList logon activities of users that received emails that were not zapped successfully

Автоматическая очистка нулевого часа (ZAP) адреса вредоносных сообщений после их отправки.Zero-hour auto purge (ZAP) addresses malicious emails after they have been received. Если zaP сбой, вредоносный код может в конечном итоге запуститься на устройстве и оставить учетные записи скомпрометирован.If ZAP fails, malicious code might eventually run on the device and leave accounts compromised. Этот запрос проверяет действия логотипа, сделанные получателями сообщений электронной почты, которые не были успешно устранены 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

Получить попытки логона учетных записей домена, нацеленных на кражу учетных данныхGet logon attempts by domain accounts targeted by credential theft

Этот запрос сначала определяет все оповещения о доступе к учетным данным в AlertInfo таблице.This query first identifies all credential access alerts in the AlertInfo table. Затем он сливается или присоединяется к таблице, которая сравнится с именами целевых учетных записей и фильтрами только для учетных записей, присоединив к AlertEvidence домену.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. Наконец, он проверяет таблицу, чтобы получить все действия с логотипом с помощью учетных записей, присоединив IdentityLogonEvents к домену.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

Расскажем о том, как проверить, есть ли на устройствах файлы от известного злоумышленника.Check if files from a known malicious sender are on your devices

Если вы знаете об электронном адресе, отправляемом вредоносные файлы ( ), вы можете запустить этот запрос, чтобы определить, существуют ли файлы этого отправитель MaliciousSender@example.com на ваших устройствах.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. Этот запрос можно использовать, например, для определения устройств, затронутых кампанией распространения вредоносных программ.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

Проверка попыток входа после получения вредоносных сообщений электронной почтыReview logon attempts after receipt of malicious emails

Благодаря этому запросу обнаруживается 10 последних случаев входа, выполненных получателями сообщений электронной почты, в течение 30 минут после получения ими известных вредоносных сообщений.This query finds the 10 latest logons performed by email recipients within 30 minutes after they received known malicious emails. Этот запрос можно использовать, чтобы проверить, не скомпрометированы ли учетные записи получателей сообщений электронной почты.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 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

Проверка действий PowerShell после получения сообщений электронной почты от известного злоумышленникаReview PowerShell activities after receipt of emails from known malicious sender

Вредоносные сообщения часто содержат документы и другие специально изготовленные вложения, которые запускают команды PowerShell для создания дополнительных полезных данных.Malicious emails often contain documents and other specially crafted attachments that run PowerShell commands to deliver additional payloads. Если вам известно о сообщениях электронной почты, полученных от известного вредоносного отправитель (), этот запрос можно использовать для списка и просмотра действий PowerShell, которые произошли в течение 30 минут после того, как сообщение было получено от MaliciousSender@example.com отправитель.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)