Windows: Использование Software Restriction Policies (SRP) для борьбы с шифровальщиками

Если текущая редакция Windows не может использовать AppLocker, то попробуем настроить SRP (Software Restriction Policies).
1. Запускаем оснастку Local Security Policy с правами админа:

secpol.msc

2. Переходим в раздел Software Restriction Policies
3. При первом запуске нам сообщают «No Software Restriction Policies Defined», поэтому их нужно создать. Для этого нажимаем на разделе правую кнопку мышки и выбираем «New Software Restriction Policies«. Будут созданы начальные правила.

Если система 64-битная, то дополнительно нужно внести в список разрешенных запуск приложений из папки «C:\Program Files (x86)»

 

4. Далее открываем пункт «Enforcement«. При желании можно исключить локальных администраторов от действия политик, после чего нажимаем «OK».
Windows: Использование Software Restriction Policies (SRP) для борьбы с шифровальщиками
5. Если все оставить как сейчас, то невозможно будет запустить даже ярлыки. Поэтому их запуск нужно разрешить отдельно:
Software Restriction Policies -> Designated File Types
Открывается список расширений файлов, среди которых нужно удалить расширение ярлыков .LNK
6. Осталось включить политику «Белого списка правил»:
Software Restriction Policies -> Security Levels -> Disallowed -> Set as Default
7. Теперь по идее будут заблокированы попытки запустить файлы НЕ из папок C:\Windows и C:\Program Files. В принципе этого хватит для 99% шифровальщиков, однако, если допустить, что они «эволюционируют», то скоро они найдут «дыры» в нашей системе защиты. Постараемся их тоже исключить…

Дополнительные настройки:
1. SRP использует переменные PATH. Если они будут очищены, то правилам черного списка нечего будет блокировать. Значит нужно постараться их не использовать, а использовать путь вида «C:\Windows», отдельные папки для Program Files (x86) и Program Files
2. На всякий случай можно создать каждому правилу из пункта (1) правило с использованием переменной вида %systemroot%
3. Если внутренние политики PowerShell разрешают запуск неподписанных скриптов PS1, то их тоже можно добавить в список запрещаемых расширений файлов.
4. Добавить папки в список запрещенных:
C:\Windows\debug
C:\Windows\PCHEALTH\ERRORREP
C:\Windows\Registration
C:\Windows\System32\catroot2
C:\Windows\System32\com\dmp
C:\Windows\System32\FxsTmp
C:\Windows\System32\spool\drivers\color
C:\Windows\System32\spool\PRINTERS
C:\Windows\System32\spool\SERVERS
C:\Windows\System32\Tasks
C:\Windows\SysWOW64\com\dmp
C:\Windows\SysWOW64\FxsTmp
C:\Windows\SysWOW64\Tasks
C:\Windows\Tasks
C:\Windows\Temp
C:\Windows\tracing
C:\ProgramData

Есть замечание, что в «запрещенных» папках нельзя будет запустить двойным щелчком мыши файлы типа .PDF или документы Офис. В качестве решения рекомендуется открывать эти файлы через меню Файл -> Открыть соответствующей программы.
Для одного из таких случаев я создал ярлык в папке %APPDATA%\Roaming\Microsoft\Windows\SendTo. Например, при попытке отредактировать файл CMD появлялось окно с уведомлением о блокировке. PSPad не мог открыть и оnредактировать .CMD. Я просто создал на PSPad ярлык в папке C:\Users\Denis\AppData\Roaming\Microsoft\Windows\SendTo
В некоторых случаях ярлык может не запуститься, если в качестве «Рабочей папки» (Start in) указан заблокированный политиками путь.
Есть вероятность, что некоторые подобные программы также не смогут запуститься или открыть файл двойным щелчком мыши на файле или нажатием клавиши Enter в проводнике. Это также стоит учитывать и, в случае необходимости, воспользоваться Process Monitor, чтобы устранить конфликт.

 

5. Можно также запретить запуск файла runas.exe (актуально для Windows XP)
6. Запретить .js и jse.
7. Для автозапуска нужно исключить выполнение НЕ ссылок, а также запретить явный запуск из следующих папок (подсмотрел у CryptoPrevent):
%programdata%\Microsoft\Windows\Start Menu\Programs\Startup\*.com
%userprofile%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\*.com
%programdata%\Microsoft\Windows\Start Menu\Programs\Startup\*.cmd
%programdata%\Microsoft\Windows\Start Menu\Programs\Startup\*.scr
%allusersprofile%\*.cmd
%programdata%\*.exe
%userprofile%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\*.scr
%programdata%\*\svchost.exe
%userprofile%\AppData\Local\*.bat
%programdata%\Microsoft\Windows\Start Menu\Programs\Startup\*.js
%userprofile%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\*.exe
*:\$Recycle.Bin
%programdata%\Microsoft\Windows\Start Menu\Programs\Startup\*.jse
%userprofile%\*.com
C:\Users\*.pif
%userprofile%\*.pif
lsassvrtdbks.exe
cipher.exe
%userprofile%\AppData\Local\*.cmd
%programdata%\Microsoft\Windows\Start Menu\Programs\Startup\*.exe
%userprofile%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\*.pif
bcdedit.exe
%userprofile%\AppData\Local\*\*.pif
C:\Users\*.bat
vssadmin.exe
%appdata%\*\*.js
%allusersprofile%\*.jse
%userprofile%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\*.cmd
%userprofile%\AppData\Local\*\*.scr
%userprofile%\AppData\Local\*.jse
%userprofile%\AppData\Local\Temp\*.pif
%userprofile%\AppData\Roaming\*\*.pif
C:\Users\*.exe
%userprofile%\AppData\LocalLow\*\*.cmd
%userprofile%\AppData\Roaming\*.com
%allusersprofile%\*.pif
%userprofile%\AppData\Local\*.scr
%programdata%\Microsoft\Windows\Start Menu\Programs\Startup\*.bat
%userprofile%\AppData\LocalLow\*\*.exe
%userprofile%\AppData\Roaming\*.exe
lsassw86s.exe
%userprofile%\AppData\*.bat
%userprofile%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\*.jse
%programdata%\*.cmd
%userprofile%\AppData\Local\*.exe
%userprofile%\*.cmd
%userprofile%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\*.js
%userprofile%\AppData\*.exe
%programfiles(x86)%\*\svchost.exe
%programdata%\*.bat
%programdata%\*.pif
%appdata%\*.bat
%userprofile%\AppData\Roaming\*\*.bat
%userprofile%\*.bat
C:\Users\*.js
%userprofile%\AppData\Roaming\*.cmd
%userprofile%\AppData\*.com
scsvserv.exe
%programfiles%\*\svchost.exe
%userprofile%\AppData\LocalLow\*.jse

Честно говоря, я не понимаю почему, но gpupdate /force не обновляет информацию о вновь созданных или исправленных правилах политик SRP. Поэтому, для того, чтобы все изменения вступили в силу, нужно перезагрузить компьютер или завершить сеанс пользователя и войти в систему заново!

 

Вообще список не полный. Cryptowall версии 3 значительно расширил способы своего распространения, поэтому лучше запустить утилиту CryptoPrevent, которая сама настроит SRP.

SRP блокирует PowerShell скрипты, даже если они не внесены в черный список. Если их необходимо выполнять, то нужно явно разрешить запуск например по пути.

Кстати хочу заметить, что SRP не работают в Безопасном режиме.

 

Разрешающие правила для моего пользователя
Для fbtools:
C:\Users\Denis\AppData\Local\Temp\ooofbtools-tmp\base64.exe
C:\Users\Denis\AppData\Local\Temp\ooofbtools-tmp\fb2-valid-win32.vbs
C:\Users\Denis\AppData\Local\Temp\ooofbtools-tmp\uuidgen.exe
Для Яндекс-диск:
C:\ProgramData\Yandex\Yandex.Disk\*\YandexDisk64SetupRu.exe
C:\ProgramData\Yandex\Yandex.Disk\*\7za.exe
Для JumpListLauncher:
C:\Users\Denis\AppData\Local\Jumplist-launcher\JumplistLauncher.exe
Для программ-установки Skype (в режиме update):
C:\ProgramData\Skype\{FC965A47-4839-40CA-B618-18F486F042C6}\Skype.msi
Для расширения Firefox IETab:
C:\Program Files\Internet Explorer\IEXPLORE.EXE

Если что-то требуется установить, то на время установки нужно переключать SRP в режим Unrestricted либо вручную, либо через PowerShell:

Set-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\Safer\CodeIdentifiers -Name DefaultLevel -Value 0x00040000

Либо через реестр:

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Safer\CodeIdentifiers]
"DefaultLevel"=dword:00040000

Режим черного списка (Disallowed) включается примерно так же:

Set-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\Safer\CodeIdentifiers -Name DefaultLevel -Value 0x00000000

update:
Файлы справки .CHM (скомпилированный HTML-файл справки).
Тоже блокируем:
C:\Windows\hh.exe

Дырень в защите:
Если правилами разрешен запуск файла в папке пользователя (НАПРИМЕР) C:\Users\Denis\AppData\Local\Temp\ooofbtools-tmp\base64.exe, мы можем удалить файл base64.exe, а вместо него создать папку BASE64.EXE и в нее поместить любой файл, то его можно будет запустить!

 

Update2:
Если на диске X: создать файл Script.ps1, а потом создать на него символьную ссылку C:\Windows\System32\Script.ps1, то при включенной запрещающей политике Disallowed, мы не сможем запустить этот файл, даже если он явно разрешён:

.\Script.ps1.ps1 : File C:\Windows\system32\Script.ps1 cannot be loaded because its operation is blocked by software
restriction policies, such as those created by using Group Policy.
At line:1 char:1
+ .\Script.ps1.ps1
+ ~~~~~~~~~~~~~~~
+ CategoryInfo : SecurityError: (:) [], PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAccess

 

У меня получилось его запустить только с ключом:

C:\Windows\system32> powershell.exe -ExecutionPolicy Bypass -file .\Script.ps1