场景:您已经获得了数据库备份,并被告知将其还原到服务器上(该服务器已经托管了其他数据库),但是没有提供有关备份内容或是否应该信任源的有用信息。
问题1:还原很可能是恶意的备份有哪些潜在影响?
问题2:如何保护服务器/其他数据库中的数据免受还原潜在恶意备份的影响?RESTORE VERIFYONLY
似乎是一个很好的第一步。最终的答案可能是“将数据库还原到无法访问外部环境的沙箱VM中”,但让我们假设该选项不在桌面上。在这种情况下还应该做什么?
场景:您已经获得了数据库备份,并被告知将其还原到服务器上(该服务器已经托管了其他数据库),但是没有提供有关备份内容或是否应该信任源的有用信息。
问题1:还原很可能是恶意的备份有哪些潜在影响?
问题2:如何保护服务器/其他数据库中的数据免受还原潜在恶意备份的影响?RESTORE VERIFYONLY
似乎是一个很好的第一步。最终的答案可能是“将数据库还原到无法访问外部环境的沙箱VM中”,但让我们假设该选项不在桌面上。在这种情况下还应该做什么?
Answers:
数据库可能包含恶意代码,可能是一个过程,该过程将更改“ sa”登录名的密码或删除每个数据库。但是,我看到导致问题的唯一方法是个人还原数据库,然后手动执行该数据库中的任何代码。它不会以任何自动化方式执行。
数据库中没有可以应用的设置,以使SQL Server在将数据库还原到服务器时自动执行数据库中的某些代码。如果可以的话,我希望微软会放弃该产品的通用标准认证。这对我来说是一个DBMS所允许的错误。
WITH ENABLE_BROKER
et al等),则代码可以“自动”运行。显然,如果出于安全考虑,恢复器将不希望使用这些选项中的任何一个,但是它可能被埋在用户可能看不到的第三方供应商应用程序中。
我到达这里,但我至少能想到一个危险的情景:如果您恢复,有一个数据库文件表,这些文件现在网络上的默认情况下(具体而言,在你的SQL Server)。您可以还原病毒。
当然,这本身不会做任何事情-病毒不会突然变得有意识-但是,如果您的用户随后尝试访问该文件,则可能会感染它们。(嘿,我说我要伸手去拿。)我正在构想一种情况,外部黑客想要在门上安装恶意软件,然后他向电子邮件发送一封电子邮件给Bob,说:“这是文件:\ sqlserver \ filetableshare \ myvirus.exe”-到那时,它已被防火墙检测到,没有被发现,现在我们可以使用内部的防病毒和防恶意软件工具。
恢复VERIFYONLY似乎是一个不错的第一步。最终的答案可能是“将数据库还原到无法访问外部环境的沙箱VM中”,但让我们假设该选项不在桌面上。在这种情况下还应该做什么?
Restore verifyonly会验证数据库的完整性,它不会告诉您备份是否包含恶意代码,而RESTORE VERIFYONLY不会尝试验证备份卷中包含的数据的结构。极不可能的是,如果备份来自您工作所在的公司内部,则可能是恶意的,但如果备份来自某个第三方,则需要小心,如Shawn所指出的那样。
Microsoft Online文档说
•出于安全目的,我们建议您不要从未知或不受信任的源附加或还原数据库。此类数据库可能包含恶意代码,这些恶意代码可能执行意外的Transact-SQL代码或通过修改架构或物理数据库结构而导致错误。在使用来自未知或不受信任来源的数据库之前,请在非生产服务器上的数据库上运行DBCC CHECKDB,并检查数据库中的代码,例如存储过程或其他用户定义的代码。
这个问题主要集中在包含恶意软件的备份上,但是还可能从还原操作本身中获得有害的和潜在的恶意行为。
我过去不小心发现,尝试还原损坏的备份文件可能导致SQL Server崩溃,导致SQL Server尝试读取备份文件末尾而崩溃。我不确定哪个版本容易受到感染,或者确切地说是重现该问题所需的版本。几年前遇到此问题时,我在这里记录了一些有限的详细信息。
您已获得数据库备份,并被告知将其还原到服务器(该服务器已经托管了其他数据库),但是未获得有关备份内容或源是否值得信任的有用信息。
真好 您要求任何告诉您执行此操作的人都签署一份书面声明,以使他们对后果承担全部责任。如果他们不愿意这样做,则应在检查备份文件后(如有可能)在沙盒中测试安装,并彻底检查所有表,过程等。如果有任何气味,请不要放在任何地方生产系统。即使这样,您也应该(向您的老板和上司)清楚地表明,您从未信任过备份,并且仅在直接命令下才这样做。
如果他们不会签署这样的声明,请在做任何事情之前警告其上级。作为专业人士,不管某些机智的上级可能命令您做什么,您都有责任尽可能多地保护系统。您可能会被解雇,但可以昂首阔步,知道自己做对了。