
一款简单的勒索软件防护工具
我们经常看到勒索软件使用 vssadmin 删除所有卷影副本。如果我们能直接拦截该请求并终止调用它的进程会怎样?让我们尝试创建一个简单的疫苗。

我们为 vssadmin.exe(和 wmic.exe)注册一个调试器,也就是我们编译好的 raccine.exe。Raccine 是一个二进制程序,首先收集所有父进程的 PID,然后尝试终止所有父进程。
优点:
vssadmin.exe 或 wmic.exe),替换系统文件可能会导致完整性问题,并在每个补丁日破坏我们的 Raccine 接种缺点 / 盲点:
vssadmin.exe delete shadows(或任何其他已列入黑名单的组合)vssadmin.exe delete shadows 的进程,而该进程可能是备份进程vssadmin.exe 的进程树中的一员(例如通过 schtasks 调用),则无法捕获vssadmin.exe(和 wmic.exe)的调用会被拦截,并作为调试器传递给 raccine.exe(vssadmin.exe delete shadows 变为 raccine.exe vssadmin.exe delete shadows)恶意组合:
delete 和 shadows(vssadmin、diskshadow)resize 和 shadowstorage(vssadmin)delete 和 shadowstorage(vssadmin)delete 和 shadowcopy(wmic)delete 和 catalog 和 -quiet(wbadmin)win32_shadowcopy 或编码命令列表中的元素(powershell)recoveryenabled(bcedit)ignoreallfailures(bcedit)^ 过时的列表:请查看相应的 YARA 规则
Powershell 编码命令列表:JAB、SQBFAF、SQBuAH、SUVYI、cwBhA、aWV4I、aQBlAHgA 等等
未安装 Raccine 时的 Emotet - 链接

安装 Raccine 后的 Emotet - 链接(忽略与 Raccine 安装相关的进程活动)

感染被扼杀在摇篮里。
使用风险自负!
在已接种 Raccine 的机器上,除非您应用卸载补丁 raccine-reg-patch-uninstall.reg,否则将无法再运行使用已列入黑名单命令的命令行。这可能会破坏在工作中运行该特定命令的各种备份解决方案。它不仅会阻止该请求,还会终止该进程树中的所有进程,包括备份解决方案及其调用进程。
如果您拥有完善的安全监控来记录所有进程执行情况,可以检查日志,确认 vssadmin.exe delete shadows、vssadmin.exe resize shadowstorage ... 或其他被阻止的命令行是否经常或偶尔用于合法目的;如果是这样,您应避免使用 Raccine。
delete 和 shadows 的 vssadmin.exe 执行,否则将所有参数传递给一个新进程,以原始参数调用 vssadminexplorer.exewmic 方式调用 delete shadowcopy,白名单进程启动时无输出(避免 wmic 输出处理问题)delete shadowstorage 的检查,@_hillu 进行了代码审查,添加应用程序图标bcdedit.exe /set {default} bootstatuspolicy ignoreallfailures 和 bcdedit.exe /set {default} recoveryenabled no 的检查powershell.exe 和 win32_shadowcopy 或编码命令列表的检查运行 install-raccine.bat 将自动安装 Visual C++ 可再发行组件包和 .NET Framework。
Raccine.zipraccine-installer.bat
批处理安装程序包含一个“卸载”选项。
以管理员身份执行:
raccine-reg-patch-uninstall.reg%ProgramFiles%\Raccine 和 %ProgramData%\Raccine 文件夹reg delete HKCU\Software\Raccine /Ftaskkill /F /IM RaccineSettings.exereg delete "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /V "Raccine Tray" /Fschtasks /DELETE /TN "Raccine Rules Updater" /F我们建议通过卸载并重新安装进行升级。卸载会移除所有包含配置的注册表项。
自 1.2 版本起,Raccine 内置了签名更新器。该程序名为 RaccineRulesSync.exe,通过计划任务配置为每天运行一次。您可以通过托盘图标菜单中的选项手动运行签名更新。
自 1.0 版本起,Raccine 还使用 YARA 规则来判断进程命令行或父进程是否为恶意。Raccine 使用两套规则来实现两个不同的目的。
./yara - 应用于包含所有参数的命令行的规则,例如 WMIC.exe delete justatest./yara/in-memory - 应用于被拦截进程的父进程内存的规则,例如 ransomware.exe 运行了我们拦截的 vssadmin.exe 进程自 1.1 版本起,我们将一组外部变量传递给 YARA 匹配过程,以支持更复杂、更巧妙的 YARA 规则,将进程及其父进程的属性纳入考量。
命令行上的匹配过程如下所示:
"C:\Program Files\Raccine\yara64.exe" -d FromRaccine="true" -d Name="WMIC.exe" -d ExecutablePath="C:\Windows\System32\wbem\WMIC.exe" -d CommandLine="WMIC.exe delete justatest" -d Priority=32 -d FromRaccine="true" -d ParentName="cmd.exe" -d ParentExecutablePath="C:\Windows\System32\cmd.exe" -d ParentCommandLine="'C:\WINDOWS\system32\cmd.exe' " -d ParentPriority=32 C:\ProgramData\Raccine\yarayara\mal_emotet.yar C:\ProgramData\Raccine\yara\Rac1C6A.tmp
以下代码展示了一个在其条件中使用外部变量的 YARA 规则示例。
rule env_vars_test {
condition:
Name contains "WMIC.exe"
and CommandLine contains "delete justatest"
and ParentPriority >= 8
and (
ParentCommandLine contains "cmd"
or ParentCommandLine contains "powershell"
)
}
GPO 文件夹包含 Raccine.ADMX 和 Raccine.ADML。部署时,将 Raccine.ADMX 文件放入 C:\Windows\PolicyDefinitions。配套的 Raccine.ADML 文件放入 C:\Windows\PolicyDefinitions\en-US。
使用方法:打开 GPEDIT.MSC > 计算机配置 > 管理模板 > 系统 > Raccine
配置更改后,您可能需要运行 gpupdate.exe 来刷新组策略。
包含所有拦截操作及所执行操作的日志文件写入 C:\ProgramData\Raccine\Raccine_log.txt

每次阻止事件都会在 Application 事件日志中生成一条记录。

Raccine 生成的 ID
自 0.10.0 版本起,Raccine 可以“模拟模式”安装。该模式会激活所有触发器并记录所有操作,但不会终止任何进程。在备份解决方案或其他合法软件运行的环境中使用此模式一段时间,可以检查 Raccine 是否会干扰其他软件。思路是:以模拟模式安装 Raccine,让其记录一周或一个月,然后检查日志,看它是否会阻止组织中使用的合法软件。

运行 raccine.exe,观察父进程树被终止(v0.1 的截图)

自 1 版本起可用且必需。



如果您正在处置的勒索软件使用了某个特定的进程名称,例如 taskdl.exe,您只需修改 .reg 补丁以拦截对该名称的调用,让 Raccine 终止调用进程树中的所有父进程。
我想扩展 Raccine,但缺乏 C++ 编程技能,尤其是在 Windows 平台上。
如果您的安装出现问题,例如突然出现错误消息、服务损坏或程序无法再启动,请运行 reg-patches 子文件夹中的 raccine-reg-patch-uninstall.reg 文件。这应能使一切恢复正常。
之后,您还应能够使用 install-raccine.bat 执行完整卸载。
正确发音是“Rax-Een”。
C:\ProgramData\Raccine_log.txtdiskshadow.exe delete shadows 命令| 变量 | 描述 | 示例值 |
|---|
| FromRaccine | true | |
| Name | 镜像文件名 | WMIC.exe |
| ExecutablePath | 二进制文件的完整路径 | C:\Windows\System32\wbem\WMIC.exe |
| CommandLine | 包含参数的完整命令行 | WMIC.exe delete justatest |
| Priority | 进程优先级 | 32 |
| ParentName | 父进程镜像文件名 | cmd.exe |
| ParentExecutablePath | 父进程可执行文件的完整路径 | C:\Windows\System32\cmd.exe |
| ParentCommandLine | 包含参数的完整父进程命令行 | C:\WINDOWS\system32\cmd.exe |
| ParentPriority | 父进程优先级 | 32 |