Охота на программу-шантажиста

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

  • Microsoft Defender XDR

Программы-шантажисты быстро превратились из простого вредоносного ПО, затрагивающего отдельных пользователей компьютеров, до корпоративной угрозы, которая серьезно влияет на отрасли и государственные учреждения. Хотя Microsoft Defender XDR предоставляет множество возможностей, которые позволяют обнаруживать и блокировать программы-шантажисты и связанные с ними действия по вторжению, упреждающая проверка на наличие признаков компрометации может помочь защитить сеть.

Ознакомьтесь с программами-шантажистами, управляемыми человеком

С помощью расширенной охоты в Microsoft Defender XDR можно создавать запросы, которые находят отдельные артефакты, связанные с действиями программ-шантажистов. Вы также можете выполнять более сложные запросы, которые могут искать признаки активности и взвешивать эти знаки, чтобы найти устройства, требующие немедленного внимания.

Признаки активности программ-шантажистов

Специалисты по безопасности Майкрософт наблюдали различные распространенные, но тонкие артефакты во многих кампаниях по программ-шантажистов, запущенных изощренными злоумышленниками. Эти признаки в основном связаны с использованием системных инструментов для подготовки к шифрованию, предотвращению обнаружения и очистке судебно-медицинских доказательств.

Действия программы-шантажиста. Общие средства Intent
Остановка процессов taskkill.exe, net stop Убедитесь, что файлы, предназначенные для шифрования, не блокируются различными приложениями.
Отключение служб sc.exe — Убедитесь, что файлы, предназначенные для шифрования, не блокируются различными приложениями.
— предотвратить нарушение шифрования и других действий программ-шантажистов.
— Остановите создание восстанавливаемых копий программного обеспечения резервного копирования.
Удаление журналов и файлов cipher.exe, wevtutil, fsutil.exe Удалите судебно-медицинские доказательства.
Удаление теневых копий vsadmin.exe, wmic.exe Удалите теневые копии диска, которые можно использовать для восстановления зашифрованных файлов.
Удаление и остановка резервных копий wbadmin.exe Удалите существующие резервные копии и остановите запланированные задачи резервного копирования, предотвращая восстановление после шифрования.
Изменение параметров загрузки bcdedit.exe Отключите предупреждения и автоматическое исправление после сбоев загрузки, которые могут быть вызваны процессом шифрования.
Отключение средств восстановления schtasks.exe, regedit.exe, Отключите восстановление системы и другие параметры восстановления системы.

Проверка отдельных признаков активности программ-шантажистов

Многие действия, которые представляют собой поведение программ-шантажистов, включая действия, описанные в предыдущем разделе, могут быть неопасным. При использовании следующих запросов для поиска программ-шантажистов выполните несколько запросов, чтобы проверка, имеют ли одни и те же устройства различные признаки возможной активности программ-шантажистов.

Остановка нескольких процессов с помощью taskkill.exe

Этот запрос проверяет наличие попыток остановить по крайней мере 10 отдельных процессов с помощью программыtaskkill.exe . Выполнить запрос

// Find attempts to stop processes using taskkill.exe
DeviceProcessEvents
| where Timestamp > ago(1d)
| where FileName =~ "taskkill.exe" 
| summarize taskKillCount = dcount(ProcessCommandLine), TaskKillList = make_set(ProcessCommandLine) by DeviceId, bin(Timestamp, 2m)
| where taskKillCount > 10

Остановка процессов с помощью net stop

Этот запрос проверяет наличие попыток остановить по крайней мере 10 отдельных процессов с помощью команды net stop . Выполнить запрос

// Find attempts to stop processes using net stop
DeviceProcessEvents
| where Timestamp > ago(1d)
| where FileName =~ "net.exe" and ProcessCommandLine has "stop"
| summarize netStopCount = dcount(ProcessCommandLine), NetStopList = make_set(ProcessCommandLine) by DeviceId, bin(Timestamp, 2m)
| where netStopCount > 10

Удаление данных на нескольких дисках с помощью cipher.exe

Этот запрос проверяет наличие попыток удаления данных на нескольких дисках с помощью cipher.exe. Это действие обычно выполняется программой-шантажистом, чтобы предотвратить восстановление данных после шифрования. Выполнить запрос

// Look for cipher.exe deleting data from multiple drives
DeviceProcessEvents
| where Timestamp > ago(1d)
| where FileName =~ "cipher.exe" 
// cipher.exe /w flag used for deleting data 
| where ProcessCommandLine has "/w" 
| summarize CipherCount = dcount(ProcessCommandLine),
CipherList = make_set(ProcessCommandLine) by DeviceId, bin(Timestamp, 1m) 
// cipher.exe accessing multiple drives in a short timeframe 
| where CipherCount > 1

Очистка судебно-медицинских доказательств из журналов событий с помощью wevtutil

Этот запрос проверяет наличие попыток очистки по крайней мере 10 записей журнала из журналов событий с помощью wevtutil. Выполнить запрос

// Look for use of wevtutil to clear multiple logs
DeviceProcessEvents
| where Timestamp > ago(1d)
| where ProcessCommandLine has "WEVTUTIL" and ProcessCommandLine has "CL"
| summarize LogClearCount = dcount(ProcessCommandLine), ClearedLogList = make_set(ProcessCommandLine) by DeviceId, bin(Timestamp, 5m)
| where LogClearCount > 10

Отключение служб, использующих sc.exe

Этот запрос проверяет наличие попыток отключения по крайней мере 10 существующих служб с помощью sc.exe. Выполнить запрос

// Look for sc.exe disabling services
DeviceProcessEvents
| where Timestamp > ago(1d)
| where ProcessCommandLine has "sc" and ProcessCommandLine has "config" and ProcessCommandLine has "disabled"
| summarize ScDisableCount = dcount(ProcessCommandLine), ScDisableList = make_set(ProcessCommandLine) by DeviceId, bin(Timestamp, 5m)
| where ScDisableCount > 10

Отключение восстановления системы

Этот запрос определяет попытки остановить восстановление системы и предотвратить создание системными точками восстановления, которые можно использовать для восстановления данных, зашифрованных программой-шантажистом. Выполнить запрос

DeviceProcessEvents
//Pivoting for rundll32  
| where InitiatingProcessFileName =~ 'rundll32.exe'   
//Looking for empty command line   
and InitiatingProcessCommandLine !contains " " and InitiatingProcessCommandLine != ""  
//Looking for schtasks.exe as the created process  
and FileName in~ ('schtasks.exe')  
//Disabling system restore   
and ProcessCommandLine has 'Change' and ProcessCommandLine has 'SystemRestore' 
and ProcessCommandLine has 'disable'

Удаление резервной копии

Этот запрос определяет использование wmic.exe для удаления моментальных снимков теневой копии перед шифрованием. Выполнить запрос

DeviceProcessEvents
| where FileName =~ "wmic.exe"
| where ProcessCommandLine has "shadowcopy" and ProcessCommandLine has "delete"
| project DeviceId, Timestamp, InitiatingProcessFileName, FileName,
ProcessCommandLine, InitiatingProcessIntegrityLevel, InitiatingProcessParentFileName

Проверьте наличие нескольких признаков действия программы-шантажиста

Вместо выполнения нескольких запросов по отдельности можно также использовать комплексный запрос, который проверяет наличие нескольких признаков действия программ-шантажистов для выявления затронутых устройств. Следующий консолидированный запрос:

  • Ищет как относительно конкретные, так и тонкие признаки активности программ-шантажистов
  • Весит наличие этих признаков
  • Определяет устройства с более высокой вероятностью быть целевыми объектами программ-шантажистов.

При выполнении этот объединенный запрос возвращает список устройств с несколькими признаками атаки. Также отображается количество каждого типа действий программ-шантажистов. Чтобы выполнить этот консолидированный запрос, скопируйте его непосредственно в расширенный редактор запросов охоты.

// Find attempts to stop processes using taskkill.exe
let taskKill = DeviceProcessEvents
| where Timestamp > ago(1d)
| where FileName =~ "taskkill.exe" 
| summarize taskKillCount = dcount(ProcessCommandLine), TaskKillList = make_set(ProcessCommandLine) by DeviceId, bin(Timestamp, 2m)
| where taskKillCount > 10;
// Find attempts to stop processes using net stop
let netStop = DeviceProcessEvents
| where Timestamp > ago(1d)
| where FileName =~ "net.exe" and ProcessCommandLine has "stop"
| summarize netStopCount = dcount(ProcessCommandLine), NetStopList = make_set(ProcessCommandLine) by DeviceId, bin(Timestamp, 2m)
| where netStopCount > 10;
// Look for cipher.exe deleting data from multiple drives
let cipher = DeviceProcessEvents
| where Timestamp > ago(1d)
| where FileName =~ "cipher.exe" 
// cipher.exe /w flag used for deleting data 
| where ProcessCommandLine has "/w" 
| summarize CipherCount = dcount(ProcessCommandLine), 
CipherList = make_set(ProcessCommandLine) by DeviceId, bin(Timestamp, 1m) 
// cipher.exe accessing multiple drives in a short timeframe 
| where CipherCount > 1;
// Look for use of wevtutil to clear multiple logs
let wevtutilClear = DeviceProcessEvents
| where Timestamp > ago(1d)
| where ProcessCommandLine has "WEVTUTIL" and ProcessCommandLine has "CL"
| summarize LogClearCount = dcount(ProcessCommandLine), ClearedLogList = make_set(ProcessCommandLine) by DeviceId, bin(Timestamp, 5m)
| where LogClearCount > 10;
// Look for sc.exe disabling services
let scDisable = DeviceProcessEvents
| where Timestamp > ago(1d)
| where ProcessCommandLine has "sc" and ProcessCommandLine has "config" and ProcessCommandLine has "disabled"
| summarize ScDisableCount = dcount(ProcessCommandLine), ScDisableList = make_set(ProcessCommandLine) by DeviceId, bin(Timestamp, 5m)
| where ScDisableCount > 10;
// Main query for counting and aggregating evidence
DeviceProcessEvents
| where Timestamp > ago(1d)
| where FileName =~ "vssadmin.exe" and ProcessCommandLine has_any("list shadows", "delete shadows")
or FileName =~ "fsutil.exe" and ProcessCommandLine has "usn" and ProcessCommandLine has "deletejournal"
or ProcessCommandLine has("bcdedit") and ProcessCommandLine has_any("recoveryenabled no", "bootstatuspolicy ignoreallfailures")
or ProcessCommandLine has "wbadmin" and ProcessCommandLine has "delete" and ProcessCommandLine has_any("backup", "catalog", "systemstatebackup")
or (ProcessCommandLine has "wevtutil" and ProcessCommandLine has "cl") 
or (ProcessCommandLine has "wmic" and ProcessCommandLine has "shadowcopy delete")
or (ProcessCommandLine has "sc" and ProcessCommandLine has "config" and ProcessCommandLine has "disabled")
| extend Bcdedit = iff(ProcessCommandLine has "bcdedit" and ProcessCommandLine has_any("recoveryenabled no", "bootstatuspolicy ignoreallfailures"), 1, 0)
| extend ShadowCopyDelete = iff (ProcessCommandLine has "shadowcopy delete", 1, 0)
| extend VssAdminShadows = iff(ProcessCommandLine has "vssadmin" and ProcessCommandLine has_any("list shadows", "delete shadows"), 1, 0)
| extend Wbadmin = iff(ProcessCommandLine has "wbadmin" and ProcessCommandLine has "delete" and ProcessCommandLine has_any("backup", "catalog", "systemstatebackup"), 1,0)
| extend Fsutil = iff(ProcessCommandLine has "fsutil" and ProcessCommandLine has "usn" and ProcessCommandLine has "deletejournal", 1, 0)
| summarize FirstActivity = min(Timestamp), ReportId = any(ReportId), Commands = make_set(ProcessCommandLine) by DeviceId, Fsutil, Wbadmin, ShadowCopyDelete, Bcdedit, VssAdminShadows, bin(Timestamp, 6h)
// Joining extra evidence
| join kind=leftouter (wevtutilClear) on $left.DeviceId == $right.DeviceId
| join kind=leftouter (cipher) on $left.DeviceId == $right.DeviceId
| join kind=leftouter (netStop) on $left.DeviceId == $right.DeviceId
| join kind=leftouter (taskKill) on $left.DeviceId == $right.DeviceId
| join kind=leftouter (scDisable) on $left.DeviceId == $right.DeviceId
| extend WevtutilUse = iff(LogClearCount > 10, 1, 0)
| extend CipherUse = iff(CipherCount > 1, 1, 0)
| extend NetStopUse = iff(netStopCount > 10, 1, 0)
| extend TaskkillUse = iff(taskKillCount > 10, 1, 0)
| extend ScDisableUse = iff(ScDisableCount > 10, 1, 0)
// Adding up all evidence
| mv-expand CommandList = NetStopList, TaskKillList, ClearedLogList, CipherList, Commands, ScDisableList
// Format results
| summarize BcdEdit = iff(make_set(Bcdedit) contains "1" , 1, 0), NetStop10PlusCommands = iff(make_set(NetStopUse) contains "1", 1, 0), Wevtutil10PlusLogsCleared = iff(make_set(WevtutilUse) contains "1", 1, 0),
CipherMultipleDrives = iff(make_set(CipherUse) contains "1", 1, 0), Fsutil = iff(make_set(Fsutil) contains "1", 1, 0), ShadowCopyDelete = iff(make_set(ShadowCopyDelete) contains "1", 1, 0),
Wbadmin = iff(make_set(Wbadmin) contains "1", 1, 0), TaskKill10PlusCommand = iff(make_set(TaskkillUse) contains "1", 1, 0), VssAdminShadow = iff(make_set(VssAdminShadows) contains "1", 1, 0), 
ScDisable = iff(make_set(ScDisableUse) contains "1", 1, 0), TotalEvidenceCount = count(CommandList), EvidenceList = make_set(Commands), StartofBehavior = min(FirstActivity) by DeviceId, bin(Timestamp, 1d)
| extend UniqueEvidenceCount = BcdEdit + NetStop10PlusCommands + Wevtutil10PlusLogsCleared + CipherMultipleDrives + Wbadmin + Fsutil + TaskKill10PlusCommand + VssAdminShadow + ScDisable + ShadowCopyDelete
| where UniqueEvidenceCount > 2

Понимание и настройка результатов запроса

Объединенный запрос возвращает следующие результаты:

  • DeviceId — идентифицирует затронутое устройство.
  • TimeStamp — первый раз, когда на устройстве наблюдались признаки действия программы-шантажиста.
  • Конкретные признаки активности — количество каждого знака, отображаемого в нескольких столбцах, таких как BcdEdit или FsUtil.
  • TotalEvidenceCount — количество наблюдаемых признаков
  • UniqueEvidenceCount — количество типов наблюдаемых знаков

Пример консолидированного запроса для действия программы-шантажиста на портале Microsoft Defender

Результаты запроса, показывающие затронутые устройства и количество различных признаков активности программ-шантажистов

По умолчанию в результате запроса отображаются только устройства с более чем двумя типами действия программ-шантажистов. Чтобы просмотреть все устройства с любым признаком действия программы-шантажиста, измените следующий where оператор и задайте для этого числа нулевое значение (0). Чтобы увидеть меньшее число устройств, задайте большее число.

| where UniqueEvidenceCount > 2

Дополнительные ресурсы программ-шантажистов

Основные сведения от корпорации Майкрософт:

Microsoft 365:

Microsoft Azure:

Microsoft Defender for Cloud Apps:

Записи блога группы Microsoft Security:

Совет

Хотите узнать больше? Engage с сообществом Microsoft Security в нашем техническом сообществе: Microsoft Defender XDR Техническое сообщество.