В последнее время пользователи компьютеров с OC Windows в корпоративном секторе всё чаще и чаще сталкиваются с угрозой шифрования рабочих файлов. Как показывает практика, периодические информационные письма о потенциальной опасности ссылок в письмах от незнакомых адресатов или “Судебных приставов” влияние на пользователей оказывают слабое. В этой заметке мы рассмотрим административные действия, которые помогут увеличить шансы восстановления пользовательских файлов после деструктивных действий программ шифровальщиков. В качестве основного инструмента мы будем использовать утилиту vshadow.exe и возможности технологии создания VSS-снимков в ОС Windows.
Сразу следует сделать важную оговорку о том, что данный метод поможет только в случае отсутствия у пользователей полных административных прав на их компьютерах. Ибо пользователь с административными правами способен, зачастую сам не понимая того, запустить зловредное ПО, способное на сегодняшний день оперировать данными VSS-снимков, попросту удаляя их.
Итак, нам понадобится утилита vshadow.exe, которую можно достать из пакета Windows SDK. Характерно для этой утилиты то, что, хоть версии vshadow.exe в разных версия ADK и не отличаются, но размер исполняемого файла в разных версиях ADK разный. Поэтому, чтобы свести возможные коллизии в работе утилиты на разных версиях ОС Windows к минимуму, мы будем использовать "родной" vshadow для каждой версии ОС.
Разложим соответствующие копии файлов vshadow.exe по подпапкам в зависимости от версии и разрядности ОС Windows. Затем создадим PowerShell-скрипт, который будет отвечать за распространение нужной копии vshadow на клиентские компьютеры корпоративной сети с параллельным включением механизма "Точек восстановления".
Пример такого PS-скрипта:
$OSVersion = (Get-WmiObject -Class Win32_OperatingSystem).Version $OSArch = (Get-WmiObject -Class Win32_OperatingSystem).OSArchitecture $Sys64 = "$env:SystemRoot\Sysnative" $Sys32 = "$env:SystemRoot\System32" $myInv = $myInvocation.MyCommand.Definition $SCritpRoot = [System.IO.Path]::GetDirectoryName($myInv) $vShadowPath = "$SCritpRoot\vShadow" IF ($OSVersion -like "5.1*") { #Включаем восстановление системы New-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SystemRestore" -Name DisableSR -PropertyType DWORD -Value "0" -Force #Задаём процент использования диска по умолчанию New-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SystemRestore\cfg" -Name DiskPercent -PropertyType DWORD -Value "10" -Force #Перезапускаем службу восстановления системы Restart-Service -name srservice } ELSE { #Находим все жесткие диски в формате С:\ $Disks = [System.IO.DriveInfo]::getdrives()| ?{$_.DriveType -eq "Fixed" } #Влючаем ввостановление системы для всех жестких дисков Enable-ComputerRestore $Disks #Находим все жесткие диски в формате С: $LogicalDisks = (GET-WMIObject –query "SELECT * from win32_logicaldisk where DriveType = '3'") If ($LogicalDisks -ne $null) { foreach ($LD in $LogicalDisks) { $Disk = $LD.DeviceID #Задаем максимально допустимый размер для хранения точек ввостановления Foreach ($LogicalDisk in $LogicalDisks) { $PrevVerEnable = "vssadmin.exe Resize ShadowStorage /For=$Disk /On=$Disk /MaxSize=10%" chcp 1251 IF (Test-Path "$Sys64\vssadmin.exe") { cmd /c "$Sys64\$PrevVerEnable" } ELSE { cmd /c "$Sys32\$PrevVerEnable" } } } } } ##################################### # Копирование vshadow # if ($OSArch -like "*32*") { if ($OSVersion -like "6.1*") { $vShadowPath = $vShadowPath + "\7\x86\vshadow.exe" } if ($OSVersion -like "6.2*") { $vShadowPath = $vShadowPath + "\8\x86\vshadow.exe" } if ($OSVersion -like "6.3*") { $vShadowPath = $vShadowPath + "\8.1\x86\vshadow.exe" } if ($OSVersion -like "10.*") { $vShadowPath = $vShadowPath + "\10\x86\vshadow.exe" } Copy-Item $vShadowPath $Sys32 -Force } if ($OSArch -like "*64*") { if ($OSVersion -like "6.1*") { $vShadowPath = $vShadowPath + "\7\x64\vshadow.exe" } if ($OSVersion -like "6.2*") { $vShadowPath = $vShadowPath + "\8\x64\vshadow.exe" } if ($OSVersion -like "6.3*") { $vShadowPath = $vShadowPath + "\8.1\x64\vshadow.exe" } if ($OSVersion -like "10.*") { $vShadowPath = $vShadowPath + "\10\x64\vshadow.exe" } Copy-Item $vShadowPath $Sys64 -Force }
Скрипт нужно распространить на клиентские компьютеры для последующего выполнения любым удобным для способом. Мы традиционно для этого используем возможности System Center 2012 R2 Configuration Manager (SCCM). В SCCM создаётся пакет, в котором настраивается программа для запуска скрипта следующим образом:
powershell.exe -ExecutionPolicy Bypass -NoLogo -NonInteractive -NoProfile -WindowStyle Hidden -File .\EnablePreviousVersions.ps1
Обратите внимание на то, что в скрипте используется виртуальный каталог "$env:SystemRoot\Sysnative", который доступен только в 64-битных ОС. Пришлось использовать его из-за того, что Powershell скрипты в SCCM могут выполнятся только в 32-битном контексте.
После распространения vshadow необходимо настроить расписание запуска этой утилиты для периодического создания VSS-снимков системы. Воспользуемся механизмом GPP в конфигурации компьютера и создадим задание для планировщика Windows.
Задание необходимо запускать от имени NT AUTHORITY\СИСТЕМА.
Настраиваем создание снимка каждый день в нужное нам время, команда для создания снимка:
%windir%\system32\vshadow.exe -p %SystemDrive%
При этом включим и настроим нацеливание Item-Level Targeting таким образом, чтобы задание планировщика создавалось на клиентском компьютере только в том случае, если в системе имеется утилита vshadow.exe.
По аналогии сделаем ещё одно задание планировщика, которое будет отвечать за удаление старых VSS-снимков, например 1 раз в неделю командой (правила определения того, что снимок является устаревшим мы раздали на компьютеры ранее с помощью выше-указанного PS-скрипта):
%windir%\system32\vshadow.exe -do=%SystemDrive%
Что делать, если пользователь "словил шифровальщика"?
Открываем командную строку от имени административной учётной записи и смотрим доступные нам VSS-снимки с помощью команды:
vshadow.exe -q
В данном примере мы видим, что нам доступен 1 снимок.
Для использования данных в снимке смонтируем её, например, как диск "X:" командой:
vshadow.exe -el={fb3feb40-dc51-4681-9783-207ec9a72518},X:
Подключённый диск будет доступен только для чтения, и вы сможете скопировать все необходимые данные любым файловым менеджером.
Для отключения диска воспользуемся командой:
mountvol X:\ /D
На этом, пожалуй, всё. Удачных вам восстановлений!
Обновление 02.09.2016
Для тех кому не очень хочется выкачивать Windows SDK под разные версии и разрядности ОС Windows, соответствующие копии утилиты vshadow.exe, совместимые с Windows 7/8/8.1/10 в варианте для 32-бита и 64-бита, можно найти в одном архиве.
Либо если есть SCDPM, то можно упростить себе жизнь :)
System Center 2012 R2 DPM — Особенности настройки End-User Recovery
https://blog.it-kb.ru/2015/03/17/system-center-2012-r2-dpm-end-user-recovery/
Суть та же, только целиком на PowerShell и теневое копирование выполняется для всех локальных несъемных дисков. Список дисков определяется в том же скрипте.
При ошибках записывает сообщения в журнал.
------------------
#проверяем наличие источника событий "MyShadowCopy" и создаем его если нужно
if ([System.Diagnostics.EventLog]::SourceExists("MyShadowCopy") -eq $False) {
New-EventLog –LogName Application –Source "MyShadowCopy"
}
# Получаем список всех локальных физических дисков
$diskdrives = get-wmiobject Win32_DiskDrive | ?{$_.MediaType -eq "Fixed hard disk media"}
foreach ( $disk in $diskdrives ) {
#запрос для получения списка разделов (partitions) для указанного физического диска
$part_query = 'ASSOCIATORS OF {Win32_DiskDrive.DeviceID="' + $disk.DeviceID.replace('\','\\') + '"} WHERE AssocClass=Win32_DiskDriveToDiskPartition'
#получаем список разделов
$partitions = @( get-wmiobject -query $part_query )
# для каждого раздела ищем связанные логические диски
foreach ($partition in $partitions) {
#запрос для получения логических дисков для указанного раздела
$vol_query = 'ASSOCIATORS OF {Win32_DiskPartition.DeviceID="' + $partition.DeviceID + '"} WHERE AssocClass=Win32_LogicalDiskToPartition'
#получаем список логических дисков
$volumes = @(get-wmiobject -query $vol_query)
#для каждого логического диска выполняем команду создания теневой копии
foreach ( $volume in $volumes) {
try {
Write-EventLog –LogName Application –Source "MyShadowCopy" –EntryType Information –EventID 1 –Message "Creating ShadowCopy of disk $($volume.name)"
if ((Get-WmiObject -list win32_shadowcopy).Create($volume.name+ "\","ClientAccessible").ReturnValue -eq 0) {
Write-EventLog –LogName Application –Source "MyShadowCopy" –EntryType Information –EventID 2 –Message "Successfully created ShadowCopy of disk $($volume.name)"
}
else {
Write-EventLog –LogName Application –Source "MyShadowCopy" –EntryType Warning –EventID 4 –Message "Error creating ShadowCopy of disk $($volume.name)"
}
}
catch {
Write-EventLog –LogName Application –Source "MyShadowCopy" –EntryType Error –EventID 3 –Message "WMI Error creating ShadowCopy of disk $($volume.name)"
}
}
}
}
Спасибо! =)
Касперский не спасает, да?
Касперскому некогда. Он в трейсах колупается и пытается понять почему KES лагает :)
Мы вот так решаем эту проблему http://it-school.pw/virus-shifrovalshhik-vystraivaem-zashhitu/
В конец заметки добавлена ссылка архив с vshadow.exe, совместимыми с Windows 7/8/8.1/10 в варианте для 32-бита и 64-бита.
мои меры по предотвращению и спасению. Корп сектор.
1. на фалойвых серверах FSRM + поглядывайте какие новые расширения влазяту шифровальщиков и пополняйте базу
2. Профили - редирект на сервак и опять же FSRM.
3. Резервные копии
4. Архивные копии
Создал я снимок системного диска, загадил систему, потренировался как мог, как вернуться состояние диска на тот снимок ?
vshadow -revert={SnapID}
Сделал снимок
Создал папку, в ней файл (допустим в документах)
Вернул снимок, новосозданные папка с файлом затруться?
помню возился с какими то снимками, удивило что возврат на предыдущий снимок не удалял мусор который был создан после снимка
Обратная ссылка: Open Live Writer — Куда пропал мой контент из черновика, и что теперь делать ? | Блог IT-KB /
Здравствуйте.
А функции Delete ShadowStorage (Удаление ассоциации хранилищ теневых копий тома) в вашей версии файла нет?
В целом необходим vssadmin c серверными функциями, но работающий в windows7, для решения проблемы связанных с Сопоставлением хранилища теневых копий (https://ibb.co/0B6m8Lk).