如何保护Firebird数据库免受勒索软件攻击?
2016年12月6日,作者:Alexey Kovyazin
勒索软件攻击已成为许多公司面临的严重问题:上周,我们有3起来自不同客户的Firebird数据库被勒索病毒加密的事件。幸运的是,我们成功帮助了所有客户,但问题的规模无疑在增加。
在本文中,我们将探讨这些问题是如何解决的。
一般来说,勒索软件并非专门针对Firebird数据库进行加密;它只是加密计算机上的所有文件,然后要求支付赎金以提供解密密码,即使你支付了赎金,也可能根本得不到任何解密密码或回应(此外,有必要查看杀毒软件网站:它们经常发布该勒索软件的解锁码甚至解密工具。例如,其中一个:noransom.kaspersky.com)。
当然,安装可靠(且适合服务器)的杀毒软件是必要的,但我们能否专门采取措施来保护Firebird数据库呢?
勒索软件有不同类型,让我们考虑它们对Firebird数据库的影响。
其中2家公司遭受的勒索软件部分加密了它们的Firebird数据库。
如您所知,Firebird数据库文件是一组大小相同的页面。Firebird数据库中的数据库页面包含不同类型的信息:元数据、用户数据、索引、生成器等。

通常,这类勒索软件并非加密整个数据库文件,而是加密其中的一小部分–头页面和数据库内部一定百分比的数据库页面。
由于所有页面之间都有紧密的关联,即使只有少量页面被加密,也会使整个数据库无法被Firebird引擎读取。例如,在一个10GB的数据库中,被加密的数据不到1%,其余99%都是完好的。
在这种情况下,这种被加密的数据库可以被视为严重损坏的数据库文件,而IBSurgeon FirstAID正是能够从被加密的Firebird数据库文件中导出数据的工具。同样的方法也用于从损坏的硬盘中恢复数据库。
从被加密的Firebird数据库导出数据
IBSurgeon FirstAID可以通过直接修复或数据提取来恢复数据库。直接修复速度很快,可以直接修复数据库文件中的损坏。然而,在勒索软件的情况下,这种方法无济于事,因为头页面和主要元数据已经丢失,因此提取是唯一的选择。
FirstAID直接读取数据库文件–它不使用Firebird来访问数据库文件,而是逐字节直接读取数据库文件。由于它只专注于提取损坏的数据,并牺牲了性能,FirstAID甚至可以从严重损坏的Firebird数据库中导出数据。当然,FirstAID会将加密数据视为损坏数据而跳过,只导出完好的数据。
如果勒索软件没有加密关键元数据,则可以使用FirstAID打开被加密的数据库文件并预览记录:在左侧列表中选择表,打开“预览”选项卡,然后浏览数据页面。
您可以看到的记录可以导出到具有相同结构的新数据库中:

大致的损失量可以通过数据库“页面摘要”选项卡中的“坏页面百分比”来估算:

坏页面的百分比显示了有多少数据库页面被加密,以及这些数据已丢失。
因此,在这2起案例中,数据库通过FirstAID提取器成功保存,该工具从被加密的数据库中导出了数据。
100%加密的勒索软件
不幸的是,勒索软件经常100%加密文件,并且完全加密,无一例外。
通常,这类勒索软件将恶意代码注入操作系统的引导加载程序,然后重新启动计算机,并模拟CHKDSK执行,但并非检查磁盘,而是加密一切。
防范此类病毒的唯一方法是在第三方位置(云端或另一个办公室)保存重要数据库的备份。
Firebird数据库有4种可能的备份方法:
- 使用gbak进行完整验证备份
- 使用nbackup进行增量未验证备份
- VM级别备份(适用于虚拟环境)
- 基于复制的热备(数据库镜像)
哪种备份方法最适合防范勒索软件?让我们以一个50GB大小的Firebird数据库的实际示例来考虑它们的优缺点。
| 功能 | 完整验证备份(gbak) | 增量备份(nbackup) | VM级别备份 | 热备(复制) |
|---|---|---|---|---|
| 上传大小 | 每天约30GB | 初始50GB,之后为变更部分 | ||
| 最大备份频率 | 每天 | 每小时 | 取决于VM备份工具设置 | 每分钟 |
| 数据库性能下降 | 高 | 中等 | 低 | 非常低 |
| 备份方法可靠性 | 高 | 低 | 低 | 高 |
| 执行备份所需时间 | 2-3小时(取决于IO速度) | 初始创建级别0需15-20分钟,之后3-4分钟 | 需要制作磁盘的完整快照(取决于IO和磁盘大小) | 初始15-20分钟,始终在线 |
使用gbak进行完整验证备份
备份工具(gbak)读取整个数据库并将其存储为特殊格式(fbk)。这种备份方法被称为“验证”备份,因为它读取数据库中的每条记录并确保数据库完好。这是一种非常可靠的备份方法。
然而,对于足够大的数据库(如我们示例中的50GB),完整验证备份不适合云备份,因为它每次都需要上传完整备份,并且执行时间较长(这是Firebird中最慢的备份类型)。在gbak执行期间,由于密集的随机磁盘读写,数据库性能较低。
使用nbackup进行增量备份
增量备份使用nbackup完成–这是Firebird的另一个备份工具。Nbackup以变更增量的方式创建备份:首先,它创建级别0备份,即数据库的精确副本;然后,在下一次迭代中,扫描数据库并仅存储已更改的页面作为级别1、级别2等。可以设置每季度一次完整备份(级别0),每月一次级别1增量,每周一次级别2,每天一次级别3,每小时一次级别4。
它速度相当快,几乎以线性文件复制的速度创建备份。
nbackup的主要缺点是缺乏验证–如果数据库页面损坏,nbackup会将其复制到备份文件中,该文件也将损坏(与gbak不同,gbak在这种情况下会报错)。此外,由于创建每个级别都会使Firebird扫描整个数据库(在Firebird 2.5中,v3有所改进),因此无法在大型数据库上过于频繁地运行nbackup。
如您所知,nbackup需要相当复杂的调度,但使用合适的工具,这是一项简单的任务。
正确的方式是将nbackup与gbak结合使用:gbak每天或每周验证数据库,而nbackup提供频繁备份数据库的快速方法。
因此,nbackup看起来是将数据库存储在云中的不错选择。
VM备份
那么虚拟机备份呢?VM和备份工具的供应商声称它们支持数据库备份,但通常不指明支持哪些数据库。VM备份需要为特定数据库安装卷影服务(VSS)提供程序,才能正确执行在线备份。对于Firebird,VSS提供程序可作为HQbird高级发行版的一部分获得。
当然,使用VSS提供程序的VM备份并无神奇之处–在幕后,它使用nbackup将数据库切换到适合复制的模式。如果没有VSS提供程序,VM级别备份的结果就像数据库在类似硬重置状态下的副本:Firebird大量使用RAM中的数据缓存,未刷新的更改可能导致备份损坏。
热备(Warm-standby)
有些企业不希望丢失数据库中的任何数据。崩溃前的最新发票可能至关重要,而最后一批发货可能让十几辆卡车上路。在这种情况下,即使是每小时备份也不够;唯一可行的解决方案是数据库的热备(只读镜像),它基于异步原生复制。
原生意味着复制不需要触发器或更改元数据(唯一要求是所有复制的表都有主键或唯一键),并且运行速度非常快。
热备需要创建数据库的初始副本,将其初始化为副本,并上传到备用服务器。之后,数据更改将从主服务器以最小延迟(从1分钟起)发送。只发送更改,因此不会抑制数据库的读取性能。
这种备份选项非常可靠–它保证了数据库在另一台服务器上存在实时副本。
IBSurgeon能为您做什么?
我们为Firebird提供基于订阅的支持服务,其中包括云备份和热备选项。这既简单又实惠($99/月),包括以下选项:
- Firebird数据库监控和备份自动化
- 远程桌面和即时通讯支持
- Firebird故障转移解决方案(热备)和云备份
请在此了解更多关于Firebird支持服务的详细信息。
另一个选择是使用HQbird,我们高级的Firebird发行版,并自行实施云备份或热备。您可以在此处找到更多关于HQbird的详细信息。
当然,作为最后的手段,还有FirstAID Extractor。
如有任何问题,请随时联系我们!