针对勒索软件的最佳保护之一是将所有数据库文件备份到一个完全独立的系统。我们已经做到了。
但一种想法是数据库的备份现在可能包含勒索软件。这可能吗?这是 2016 SQL Server 本机创建的 .bak。还是勒索软件不可能将自己嵌入到备份文件中?
针对勒索软件的最佳保护之一是将所有数据库文件备份到一个完全独立的系统。我们已经做到了。
但一种想法是数据库的备份现在可能包含勒索软件。这可能吗?这是 2016 SQL Server 本机创建的 .bak。还是勒索软件不可能将自己嵌入到备份文件中?
永远不要说从不,但由于备份不是可执行文件并且不包含直接可执行代码(它们是关于数据,而不是 SQL Server 软件本身),我认为风险非常非常低。您的备份文件更有可能成为勒索软件的目标,而不是感染媒介。任何可执行文件都必须可以在数据库中执行,例如存储过程。勒索软件有更有效和更直接的传播方式。
您通常需要担心的是勒索软件会在网络上找到您的备份并对其进行加密。当勒索软件攻击您的网络时,它通常会迅速传播,并锁定它可以找到的所有内容。如果勒索软件获得域管理员权限,这通常会在几分钟内发生。
在最坏的情况下,勒索软件会使您的数据库服务器脱机,并且还会加密所有备份。如果您没有备份的脱机副本,则要从中恢复可能具有挑战性(如果不是不可能的话)。要真正保护自己,请确保保留备份的脱机副本。
是的。我从来没有见过这个。
SQL Server 有一项功能,您可以在其中使用 C# 编写存储过程。我们曾经研究过使用它。在几个版本之前,此功能默认关闭。
因此,如果勒索软件打开了该功能,并将一些存储过程转换为 C# 并添加自身,当您恢复备份时,您会在尝试使用所述存储过程时遇到错误,并且可能会为它打开它。然后 C# 代码将运行。
现在这就是它变得多汁的地方。有太多的沙盒逃逸漏洞,MS 放弃并弃用了 Silverlight,并默认关闭了 SQL Server 中的 .NET 存储过程。仅仅因为你找不到一个今天可以工作的人就认为现在已经没有了,这是不明智的。
一个稍微更现实的攻击是修改一个按照以下方式做某事的 SP
然后等待一些系统管理员执行它。在临时实例上恢复的备份很少被适当受限的用户使用。另一方面,说勒索软件需要非常像蠕虫才能获得任何不能被擦除的东西。
除了@Joshua 对 SQLCLR 程序的回答,病毒和勒索软件还可以侵入其他地方:
sa
权限的 DBA 执行。这导致了一些更有害的地方:
msdb
特别是 SQL Server 代理作业表,它可以在其中设置计划作业以在特定时间间隔运行。这可以在 T-SQL 或 Powershell 中。master
数据库。如果它进入这里,它可以隐藏几个不同的地方:sa
.sp_procoption
系统程序完成的。tempdb
,它可以设置一个 DDL 触发器以在每次创建临时表时触发。tempdb
虽然没有备份。model
数据库中,准备下次创建新数据库时弹出。如果这些数据库的权限没有改变,这些事情都不可能发生,并且病毒永远不会获得
sysadmin
权限,这无疑是难以预防的。另请注意,运行 SQL Server 的帐户应该是受限制的服务帐户,而不是
SYSTEM
,如果 SQL Server 以上述方式受到损害,这将防止服务器操作系统完全受到损害。进一步注意,如果操作系统被破坏到管理员/
su
级别,请考虑以上所有 SQL Server 位置都是可疑的。最佳实践是从头开始构建系统数据库。通常,勒索软件在您的操作系统中作为程序运行,加密文件(可能取决于文件类型),如果幸运的话,以后不会在解密的 exe 文件中留下任何定时炸弹。
但是,勒索软件可以直接针对数据库,尽管我不知道有哪个(目前)这样做。这可能是有针对性的攻击,而不是一般攻击,因为一般攻击试图找到尽可能多的目标,并且一般服务器/PC 比数据库服务器多得多。
如果我想编写一些勒索软件来直接针对您,我会编写一个存储过程并将其附加到某个地方的触发器上。使存储过程在感染后的一两周内不执行任何操作,以确保当前备份也包含存储过程。两周后,存储过程将开始加密您的数据库表。为每个表制作一个加密副本,这需要一段时间,然后删除原始表,此时您会发现有问题。
在这种情况下,您的所有完整备份也将包含存储过程和触发器,因此在恢复备份后,您的数据库会在一段时间内看起来正常,直到触发器再次触发。
当然,存储过程通常无法访问您的文件系统(但要注意允许文件系统访问的数据库),但是每隔几天就无法使用的数据库对您的组织来说已经够糟糕的了。
如果您能够对软件进行全新安装,并根据供应商规范创建一个空数据库,然后仅恢复表数据(基本上,恢复只包含 DML,不包含 DDL 语句),您将摆脱勒索软件。