Wyszukiwanie zagrożeń w przypadku oprogramowania wymuszającego okup

Uwaga

Chcesz skorzystać z usługi Microsoft 365 Defender? Dowiedz się więcej o tym, jak można oceniać i pilotować Microsoft 365 Defender.

Dotyczy:

  • Microsoft 365 Defender

Oprogramowanie wymuszające okup szybko ewoluowało od prostego złośliwego oprogramowania, które wpływa na poszczególnych użytkowników komputerów, do zagrożenia dla przedsiębiorstw, które poważnie wpływa na branże i instytucje rządowe. Chociaż Microsoft 365 Defender oferuje wiele możliwości, które wykrywają i blokują działania wymuszające okup oraz związane z nimi działania związane z włamaniem, proaktywne kontrole oznak naruszenia zabezpieczeń mogą pomóc w ochronie sieci.

Przeczytaj o obsługiwanym przez człowieka oprogramowaniu wymuszającym okup

Dzięki zaawansowanej wyszukiwaniu w Microsoft 365 Defender można tworzyć zapytania, które lokalizują poszczególne artefakty skojarzone z działaniem wymuszającym okup. Można również uruchamiać bardziej zaawansowane zapytania, które mogą wyszukiwać oznaki aktywności i ważyć te znaki, aby znaleźć urządzenia wymagające natychmiastowej uwagi.

Oznaki działania oprogramowania wymuszającego okup

Badacze bezpieczeństwa firmy Microsoft zaobserwowali różne typowe, ale subtelne artefakty w wielu kampaniach ransomware uruchamianych przez zaawansowanych intruzów. Znaki te obejmują głównie korzystanie z narzędzi systemowych w celu przygotowania się do szyfrowania, zapobiegania wykrywaniu i czyszczenia dowodów kryminalistycznych.

Działanie wymuszające okup Typowe narzędzia Zamiarem
Zatrzymywanie procesów taskkill.exe, net stop Upewnij się, że pliki przeznaczone do szyfrowania nie są blokowane przez różne aplikacje.
Wyłączanie usług sc.exe — Upewnij się, że pliki przeznaczone do szyfrowania nie są blokowane przez różne aplikacje.
- Zapobiegaj zakłócaniu szyfrowania przez oprogramowanie zabezpieczające i innej aktywności wymuszania okupu.
- Zatrzymaj tworzenie kopii zapasowych oprogramowania przed tworzeniem kopii możliwych do odzyskania.
Usuwanie dzienników i plików cipher.exe, wevtutil, fsutil.exe Usuń dowody kryminalistyczne.
Usuwanie kopii w tle vsadmin.exe, wmic.exe Usuń kopie w tle dysku, których można użyć do odzyskania zaszyfrowanych plików.
Usuwanie i zatrzymywanie kopii zapasowych wbadmin.exe Usuń istniejące kopie zapasowe i zatrzymaj zaplanowane zadania tworzenia kopii zapasowej, uniemożliwiając odzyskiwanie po szyfrowaniu.
Modyfikowanie ustawień rozruchu bcdedit.exe Wyłącz ostrzeżenia i automatyczne naprawy po awariach rozruchu, które mogą być spowodowane przez proces szyfrowania.
Wyłączanie narzędzi odzyskiwania schtasks.exe, regedit.exe, Wyłącz opcje Przywracanie systemu i inne opcje odzyskiwania systemu.

Sprawdzanie, czy nie ma indywidualnych oznak działania oprogramowania wymuszającego okup

Wiele działań, które stanowią działanie oprogramowania wymuszającego okup, w tym działania opisane w poprzedniej sekcji, może być niegroźne. W przypadku korzystania z następujących zapytań w celu zlokalizowania oprogramowania wymuszającego okup uruchom więcej niż jedno zapytanie, aby sprawdzić, czy na tych samych urządzeniach występują różne oznaki możliwej aktywności wymuszania okupu.

Zatrzymywanie wielu procesów przy użyciu taskkill.exe

To zapytanie sprawdza próby zatrzymania co najmniej 10 oddzielnych procesów przy użyciu narzędzia taskkill.exe . Uruchamianie zapytania

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

Zatrzymywanie procesów przy użyciu zatrzymania sieci

To zapytanie sprawdza próby zatrzymania co najmniej 10 oddzielnych procesów przy użyciu polecenia net stop . Uruchamianie zapytania

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

Usuwanie danych na wielu dyskach przy użyciu cipher.exe

To zapytanie sprawdza próby usunięcia danych na wielu dyskach przy użyciu cipher.exe. To działanie jest zwykle wykonywane przez oprogramowanie wymuszające okup, aby zapobiec odzyskiwaniu danych po szyfrowaniu. Uruchamianie zapytania

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

Czyszczenie dowodów kryminalistycznych z dzienników zdarzeń przy użyciu narzędzia wevtutil

To zapytanie sprawdza próby wyczyszczenia co najmniej 10 wpisów dziennika z dzienników zdarzeń przy użyciu narzędzia wevtutil. Uruchamianie zapytania

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

Wyłączanie usług przy użyciu sc.exe

To zapytanie sprawdza próby wyłączenia co najmniej 10 istniejących usług przy użyciu sc.exe. Uruchamianie zapytania

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

Wyłączanie przywracania systemu

To zapytanie identyfikuje próby zatrzymania przywracania systemu i uniemożliwienia systemowi tworzenia punktów przywracania, które mogą służyć do odzyskiwania danych zaszyfrowanych przez oprogramowanie wymuszające okup. Uruchamianie zapytania

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'

Usuwanie kopii zapasowej

To zapytanie identyfikuje użycie wmic.exe do usuwania migawek kopii w tle przed szyfrowaniem. Uruchamianie zapytania

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

Sprawdzanie pod kątem wielu oznak działania oprogramowania wymuszającego okup

Zamiast oddzielnie uruchamiać kilka zapytań, możesz również użyć kompleksowego zapytania, które sprawdza, czy nie ma wielu oznak działania wymuszania okupu, aby zidentyfikować urządzenia, których dotyczy problem. Następujące skonsolidowane zapytanie:

  • Szuka zarówno stosunkowo konkretnych, jak i subtelnych oznak aktywności ransomware
  • Waży obecność tych znaków
  • Identyfikuje urządzenia z większą szansą bycia celami oprogramowania wymuszającego okup

Po uruchomieniu to skonsolidowane zapytanie zwraca listę urządzeń, na których wystąpiło wiele oznak ataku. Wyświetlana jest również liczba działań wymuszanych przez oprogramowanie wymuszające okup. Aby uruchomić to skonsolidowane zapytanie, skopiuj je bezpośrednio do zaawansowanego edytora zapytań wyszukiwania zagrożeń.

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

Omówienie i dostosowanie wyników zapytania

Skonsolidowane zapytanie zwraca następujące wyniki:

  • DeviceId — identyfikuje urządzenie, którego dotyczy problem
  • TimeStamp — pierwszy raz, gdy na urządzeniu zaobserwowano jakiekolwiek oznakii działania oprogramowania wymuszającego okup
  • Konkretne oznaki działania — liczba dla każdego znaku wyświetlanego w wielu kolumnach, takich jak BcdEdit lub FsUtil
  • TotalEvidenceCount — liczba obserwowanych znaków
  • UniqueEvidenceCount — liczba typów obserwowanych znaków

Przykład skonsolidowanego zapytania dotyczącego działania wymuszającego okup w portalu Microsoft 365 Defender

Wyniki zapytań pokazujące urządzenia, których dotyczy problem, i liczby różnych oznak działania wymuszania okupu

Domyślnie wynik zapytania zawiera listę tylko urządzeń, które mają więcej niż dwa typy działań wymuszania okupu. Aby wyświetlić wszystkie urządzenia z dowolnymi oznakami działania oprogramowania wymuszającego okup, zmodyfikuj następujący where operator i ustaw liczbę na zero (0). Aby wyświetlić mniejszą liczbę urządzeń, ustaw wyższą liczbę.

| where UniqueEvidenceCount > 2

Więcej zasobów oprogramowania wymuszającego okup

Kluczowe informacje od firmy Microsoft:

Microsoft 365:

Microsoft Azure:

Microsoft Defender for Cloud Apps:

Wpisy w blogu zespołu ds. zabezpieczeń firmy Microsoft: