购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.1 人为错误

在大多数情况下,之所以要做数据恢复与灾备,就是因为有人犯了错误,让计算环境遭到破坏,这种错误可能是无心的,也可能是故意的。有时只是因为不小心按错了键,有时则可能是因为攻击者故意为之。由于人为的错误经常发生,因此我们的备份与DR系统必须能够相当好地应对这种错误,让数据得到恢复。

首先,笔者要讲解几种无意之间发生的错误,然后谈谈那些故意破坏数据的行为,最后我们看看如何防止公司内部的人员对数据造成威胁,以此结束本节的内容。

1.1.1 操作失误

人总是会失误。你可能会把错误的文件复制到错误的地方,或者拿一份没用的文件把一份有用的文件覆盖掉。有时你可能想腾出一些空间来存放新的数据,于是就把回收站(也叫垃圾桶)里面的文件给清理掉了,可是刚一清理完,你就立刻反应过来,其中还有一些不应该删的东西。

笔者敲键盘敲了大半辈子,不知遇到过多少次因为敲错一个键或打错几个字而造成的错误。这种情况有时叫作“Problem Exists Between Keyboard And Chair”(问题出在键盘和椅子之间),简称PEBKAC,意思是说,这既不怪键盘,也不怪椅子,要怪坐在椅子上敲键盘的那个人。

我们通常把这种错误叫作user error(用户错误或用户操作失误),这里的user(用户),很多人都认为是IT业里面说的end user(最终用户或终端用户),也就是在IT部门所提供的系统与数据库上执行实际操作的人。这很容易让大家认为,这种错误全都是由那一类用户导致的,而不是由IT部门的人导致的。然而事实却是,IT部门中的系统管理员、网络管理员与数据管理员,同样容易出这种错误。

实际上,管理员与其他人一样,都容易出错,而且管理员出错所造成的破坏,要比其他人大得多。我遇到过许多例子,下面是我立刻就能想到的几种:

·把数据里面不该删的数据表给删了。

·把不该格式化的盘(即一个本来毫无问题的盘)给格式化了。

·把开发用的数据库恢复到了生产用的数据库(即给实际产品用的数据库)上。

·本来想写个脚本把那些用不到的home目录给删掉,结果这个脚本把每一位用户的home目录全都删掉了。

·把不该删的虚拟机(Virtual Machine, VM)给删了。

拿到管理员权限相当于拥有一把利剑,如果砍错了方向,可能会造成严重的后果。因此,之所以要备份数据,一个很重要的原因就在于应对管理员的失误。

我不是这个意思!

某次笔者给一家大型软件公司的QA团队做管理时,遇到了这样一件事。用户安装那个软件的时候,软件应该在用户的home目录下建一个子目录,例如foo,并把自己安装在这个子目录(也就是 $HOME/foo )中。比方说,如果做QA的这个人是root用户,那么按理来说,软件应该在root用户的home目录下创建一个叫作 foo 的子目录。问题是,当时的那个版本,没有正确处理当前用户的home目录,软件本来应该把系统的 $HOME 环境变量解读出来,以此确定当前用户的home目录到底在哪里,但那个版本直接将 $HOME 这几个字符本身当成了home目录的名字,于是无论哪个用户来安装这个软件,它都会在一个本身就叫作 $HOME 的目录里面创建foo子目录。做QA的用户发现了这个问题,并提交了bug修复方案,然后准备把这个没有用的 $HOME 目录删掉,于是这位用户采用这样一条命令来删除:

rm 命令并不会像刚才那个有bug的软件一样按字面意思来理解 $HOME 这几个字符,而是会把它解读成当前这位用户的home目录,由于这是一个标准的UNIX系统,因此root用户的home目录是 / ,也就是根目录。这意味着,这条命令会把根目录以及它下面各级子目录中的所有内容全都删掉。)

我当时觉得特别搞笑,但笑完之后,我马上用安装盘把机器重装了一遍(当时并没有那种一下子就能把所有东西都装好的万能镜像,而且那些QA服务器也根本没做备份)。所幸大多数重要的数据都存放在NFS(Network File System,网络文件系统)服务器上,而没有存放在QA服务器上。

1.1.2 代码错误

代码错误到处都有。比方说,某个脚本里可能写了一段过于宽泛的逻辑,把本来不该删的一些数据给删了。或者某个关键的软件里可能有一个bug,导致某些数据悄悄地遭到删除。类似情况经常发生,只是未必总能成为新闻而已。

有时,公司内部的开发者可能忘记遵守基本的原则,例如没有把代码存放到应该放的位置。笔者记得多年前遇到过一个公司内部的开发团队,他们有十几个人,这些人把整个代码库都放在了服务器的 /tmp 目录里面,但问题是,那台计算机装的是HP-UX系统,那个系统把 /tmp 存放在RAM(内存)之中(而不是存放在磁盘上)。这套代码本来没事,但有人把服务器重启了一下,结果发现代码库与内存中的其他东西一样,都被计算机清理掉了。

即便软件不是由本公司内部的团队开发的,而是从其他软件公司购买的,那家公司里面的专业开发团队也依然有可能出错。因为那些软件通常也会运行在权限较高的模式下,因此有可能会损坏大量数据,而且由于那种软件会有成百上千的公司安装,因此其中如果隐藏着什么问题,那么一旦爆发,就会造成相当大的危害。

在这一方面,笔者最喜欢讲的是这样一个故事。我当时在使用一款商用的备份软件包,这个软件包的开发者想在新版本里让用户能够更迅速地给每盘磁带打上电子标签。旧版的软件包在流程上有两个问题,一个问题是用户如果要拿某盘磁带保存其他数据(保存完之后当然还会给这盘磁带重新打一个电子标签),那么必须按好多个按钮才能完成,因为软件会通过这些步骤来确认用户是不是真的想把磁带里面已有的内容洗掉并重新打一个电子标签。第二个问题是,这个软件每次只使用一个磁带驱动器(又叫磁带机),就算磁带柜里有好多磁带机可用,它每次也只使用其中的一个。于是,开发者就在最新版的软件里引入了一个叫作“fast-and-silent”(快速且静默)的选项,意思是让用户能够迅速覆写多盘磁带并为其重新打标签,而不用再点击那么多的提示按钮,另外,新版也会把所有的磁带机全都利用起来。

然而,他们在引入新功能的同时,还带来了一个bug。以前,用户双击磁带列表中的某盘磁带之后,软件会弹出一个对话框,询问用户是否要覆写当前这盘磁带。但是现在,双击任何一盘磁带之后所弹出的这个对话框,针对的都不仅是当前这盘磁带,而是磁带柜里面的所有磁带。

1.1.1节讲的用户错误与本节讲的代码错误结合起来,经常会造成数据丢失,例如本章的书稿内容就这样丢过一次。在这个故事中,用户本来可能只想洗掉一盘磁带,但如果按错两次鼠标,那就有可能在没有得到提示的情况下,把整个磁带柜里的每盘磁带都洗掉,由于新版软件将所有的磁带机都用上了,因此这个过程相当快。

笔者当时参加了一次客户会议,坐在旁边的那位顾问是提供这款备份软件的那家公司派来的,他也遇到了这个bug。他当时想从保存客户数据的那套磁带柜里把其中一盘磁带的标签重新打一下,于是就双击了那盘磁带,他可能认为新版软件跟旧版一样,都只会针对当前的这盘磁带执行操作。他当时看到了fast-and-silent选项,于是就勾选了这个选项。几分钟之后他才反应过来,这样做实际上是把保存客户数据的这个磁带柜里的每盘磁带都洗掉了,这会让这些磁带中的数据全都消失。当然,这些磁带中的数据在客户那里也有一份,因此他们其实并没有真正丢失数据。所以,他们并不像真正丢失了数据的用户一样惨,他们无法完全理解后者的痛苦。

讲到这里,笔者正好可以提出3-2-1原则,即数据要有三个版本,要放在两个介质上,其中一份则要放在远处。

3-2-1原则是所有备份工作的基础原则。我们会在第3章详细讲解该原则,本书的每一章几乎都会提到这条原则。

人难免犯错。有时可能并没有恶意,但却把数据给删除或破坏掉了,这就是我们要做备份的另一项原因。

1.1.3 恶意攻击

现在我们再来讲一种可能威胁到数据的因素,也就是有人故意要搞破坏。恶意攻击数据中心,是经常发生的事情。对于当前的数据中心来说,真正的敌人就是那些想通过某种形式的电子攻击 来破坏这个组织的人。所以你必须做好准备,这样的攻击可能有点凶猛。

历史上最大规模的网络攻击

在笔者编写本章时,美国正在经历(据我所知)规模最大的网络攻击。目前还不清楚这次攻击的破坏范围与持续时间。引发攻击的恶意代码,似乎以木马的形式安插在某个公司的软件里面。那家公司并不知道自己提供的软件已经让人挂了木马,所以它还是照常分发给了所有的客户。虽然我们还不了解这次攻击的完整情形,但可以从中得出两个教训:第一,你绝不会知道网络攻击会从哪里发起;第二,每次更新软件时都应该先验证,看它是否有安全漏洞(或者说安全隐患)。由于我们并不知道攻击者植入恶意代码之后,隔多长时间才会发起攻击,因此应该把备份数据保留得比现有计划稍长一些。

1.1.4 恐怖攻击

有人可能故意用某种方式来对你的组织造成物理破坏,比方说炸掉或烧掉大楼、用飞机撞楼,或者做出其他的恐怖行为。这可能是基于政治原因,例如9·11事件;也可能是基于商业原因,例如要搞垮某个企业。后面这种情况虽然出现概率较低,但笔者要提醒大家,这是有可能发生的,甚至可以说已经发生了。

如何保护基础设施免受恐怖攻击,已经超出了本书的讨论范围。笔者在这里只是想提醒大家,恐怖攻击是你必须遵循3-2-1原则的另一个理由。你要把其中一套备份放在距离受保护的数据比较远的地方。

很多公司都因为9·11事件而垮掉了,因为它们没能按照3-2-1原则做备份。有些公司甚至准备了随时可以接管主站的DR站点,但问题在于,他们把DR站放在了离主站很近的地方——也就是放在了双塔之中的另一个“塔”里面(后者很快也遭到了攻击)。这就提醒我们注意3-2-1原则里面的“1”,也就是说,要把其中一个备份放到远处。如果放置数据库副本的服务器离主站只有数百码(1码=0.9144米),那这种DR方案就不够稳妥。

1.1.5 电子攻击

你的组织更有可能遭受的,应该是某种形式的电子攻击(也叫网络攻击)。有人可能会破坏防火墙并在数据中心内开后门,但更有可能出现的情况,则是在你的工作环境中安插恶意软件,然后促使这款恶意软件从内部向外界打开一扇后门。

笔者听一位安全专家做过演讲,那位专家现场演示了怎样入侵某个组织。这些入侵手段根本就都没有利用防火墙的漏洞,它们利用的都是人的某种弱点,以促使员工自己去打开这个后门。这确实相当可怕。

这些恶意软件通常是通过网络钓鱼(phishing)或者社交欺骗 的手段安插的,攻击者会利用这些手段,诱导员工把恶意代码直接下载到他的工作环境里面。具体的手段可能涉及一封电子邮件、某个已经挂了恶意代码的网站,甚至是一通欺诈电话。(在刚才提到的那次演讲中,有一个例子是攻击者通过给手机充电的线缆来部署恶意软件。如果员工把这样的充电线连接到计算机的USB端口,而且开启了通过USB端口传输数据的功能,那么就会中招。)只要能打开一个口子,恶意软件就可以通过各种方式散播到整个组织。

1.1.6 勒索软件

近年来比较猖狂的一种恶意软件,叫作勒索软件(ransomware,也叫勒索病毒)。这种软件侵入系统之后,会悄悄将某些数据加密,然后在某一天突然告诉你:要想拿到解密的密钥,必须付一定数量的钱才行(这实际上是一种勒索行为)。如果针对的是个人,那可能是几百美元,如果针对的是比较大的组织,那可能是上百万美元。

用勒索病毒发起的攻击行为越来越频繁,而且开出的价码也越来越高。要想遏制这种趋势,每个企业必须拥有良好的DR系统,只有这样,才能简单有效地防止这种攻击。

由于这种攻击必须引起重视,因此我们会在第11章详细讨论。笔者认为,这可能是你真正需要用到DR系统的头号原因。你更有可能遇到的就是这种勒索病毒,而不是自然灾害或那种故意删除数据的管理员。要想应对这种攻击,唯一有效的方案就是一个能在短时间内恢复数据的DR系统。

其实恶意软件与勒索病毒已经横行很久了。勒索攻击之所以流行,其中一个原因在于,它现在已经不再像原来那样,只能由技术水平比较高的人来发动。现在出现了一种RaaS(Ransomware-as-a-Service,勒索病毒即服务)模式,让很多人都能相当轻易地发起勒索攻击。

你只要说出自己想攻击谁,并提供一些有助于入侵的信息,他们就会帮你执行勒索攻击。这样的犯罪团伙完全是为了谋利,他们会从勒索到的钱财里面分走很大一部分。尽管ransomware(勒索软件/勒索病毒)与theftware 还能用来干其他一些事情,但他们对那些事情没有多少兴趣。

RaaS是一个必须要讨论的东西,因为勒索病毒对数据造成的风险之所以越来越突出,很大程度上就在于RaaS模式得以流行。固然会有一些熟练的网络攻击者(hacker,骇客/黑客)为了与自身利益无关的某些理由,或是为了充当商业间谍而攻击你的组织,但这些人的数量毕竟有限。要想发起这样的攻击,必须要有精妙的攻击思路,而且还要掌握足够的信息,这样才能知道如何执行攻击。RaaS出现之后,就不再有这个障碍了,只要知道怎样进入暗网(dark web)并联系到提供RaaS的团伙,就可以发动勒索攻击。

所以笔者想说的是:虽然由于气候变化等的影响,自然灾害发生得更加频繁,但勒索病毒也随着RaaS模式的兴起变得越来越猖狂,这种攻击对数据造成的风险与日俱增。这是我们必须做备份的另一个理由。

自然灾害与网络攻击等外部因素,并不是唯一的问题,因为你还必须面对由本组织内部的人员所引发的风险。下面我们就谈谈数据所遭受的内部威胁。

1.1.7 内部威胁

很多组织都没有对从内部发起的攻击做好准备,其实这种攻击也会给数据带来损失。信息安全专家一直提醒大家注意,许多攻击都是从内部发起的。另外,就算某些攻击不是从内部发起的,它也需要内部因素的配合才能实现,例如必须先有员工不小心点开电子邮件中的附件,然后这个恶意软件才能得到部署。

最常见的内部威胁,来自对本组织不满的正式员工或合同工,他们会利用手中的权限来损害公司的财产。例如有人纯粹为了发泄不满情绪而执行一些损坏数据的操作,有人则会利用自己掌握的访问权来发动勒索攻击。

这通常称为rogue admin(“流氓”管理员)问题。这种admin(管理员)由于拥有特权,因此能够悄悄地对数据造成极大破坏。有人甚至会植入一些能够在自己离职之后,继续破坏原公司数据的代码。

笔者想到了Yung-Hsun Lin(音译:林永勋)事件,他是一家公司的UNIX管理员,在2004年给公司的70台服务器安装了所谓的“逻辑炸弹”(logic bomb)。这其实是一个脚本,他怕公司将其解雇,所以编写了这个脚本,一旦公司把他炒掉,他就通过触发该脚本来删除服务器中的所有数据,以此报复公司。尽管没有迹象表明他会遭到解雇,但他还是把逻辑炸弹安了进去。所幸后来没有触发,因此公司的数据并未遭到损失。他于2006年获罪。

另外笔者还想到Joe Venzor事件,他对公司所做的攻击是有预谋的,最后导致这家制靴商积压了数周的工作无法及时处理。他早前怕公司将其解雇,于是开了一个伪装成打印机的后门。后来公司果然把他炒掉了,于是他立刻激活这个恶意软件。该软件在他离职后的一小时之内,让公司的所有生产工作都无法继续。

这个例子说明,系统管理员拥有很高的权限。因此你必须尽力限制这些拥有特权的人在做出恶意行为时有可能波及的范围。

如果有人能不受限制地使用Windows系统的Administrator(管理员)账户、UNIX与Linux系统的root(根)账户或其他操作系统中的类似账户,那么就能轻而易举地变身为一个rogue admin,让你很难追查他所造成的破坏。因此,你必须用各种手段限制他们直接使用此类账户。比方说,可以考虑下面这些思路。

让他们总是以自己的身份登录系统

每个人都应该用自己的名字登录。就算要获取root或Administrator权限,也必须先以自己的名字登录,然后再通过某种留存有记录的机制来获取管理权限。尽量限制或阻止他们使用那种必须以 root Administrator 身份运行的工具。

不要把root密码告诉任何人

笔者遇到过这样一些组织,它们会把root或Administrator账户的密码设置成一个随机的字符串,没有人知道这个字符串具体是什么。这样做是为了让想要获取root或Administrator权限的人,必须先以自己的身份登录,然后再通过 sudo Run as Administrator (以系统管理员身份执行)等手段来获取管理权限。这样所有的操作都会留有记录。

删除或禁用那种能够提供shell环境(命令行执行环境)的程序

这个问题主要跟UNIX/Linux系统的机制有关。有些程序(例如 vi )允许用户从该程序的环境中暂时跳出,并进入一个shell界面。如果用户以root身份运行 vi ,那么就可以通过这个机制进入一个有root权限的shell界面,并在其中不被记录地执行任意命令。这就是那些关心这个问题的人用没有这种访问权限的类似命令来替换 vi 的原因。

让超级用户只能通过控制台登录

还有一个办法也能够用来约束那些权力不受限制的超级用户,这就是让此类用户只能通过控制台(console)登录。这当然不是最理想的办法,但总比根本不施加任何约束要好。采用这种做法时,一定要把能够实际接触到控制台的访问行为记录下来。这个办法对于虚拟的控制台也适用,然而你同样要把针对虚拟控制台的访问行为记录下来。

启用主机之外的记录机制

凡是有人访问超级用户的账户(无论这次访问是否经过授权),都应该记录成一次安全事件,并把相关信息(例如视频监控画面或针对虚拟控制台而设的日志)稳妥地保存下来,让网络入侵者无法删除这份证据。这样的话,就算有人想要破坏系统,他也不可能轻易地抹除自己的踪迹。

不让计算机从其他启动盘里启动

尽量设法阻止用户从系统盘之外的其他启动盘启动服务器或虚拟机。假如允许用户随便拿一个启动盘来启动,那么任何一个Linux或Windows管理员都能够在启动服务器时轻易地挂载他自己的启动设备,并按照他自己的方式修改配置。

笔者这里是以数据保护员的视角来讨论如何保护数据。在实际工作中,你还应该考虑信息安全方面的问题,并与那方面的专家一起制定数据保护制度,信息安全是一个跟数据保护完全不同的学科,这已经超出了本书的讨论范围。

1.1.7.1 将各种权限分离

如果你能让所有人都养成先以自己身份登录然后再执行管理操作的习惯,那么接下来要面对的问题就是:如何限制他们使用那些功能特别强大的工具。那些工具如果使用不当,可能会给数据造成很大破坏,而能够接触到那些工具的人又很多。比方说,如果某员工拥有管理员权限,那么就算他是先通过 sudo 或类似的机制登录的,也有可能在遭到阻止之前,以管理员的权限对系统造成许多破坏。如果这名员工同时还能接触备份系统,那么他就可以妨碍甚至防止公司采取措施来恢复受损的数据。

这有力地说明了为什么应该将各种权限分离。备份与DR系统是最后一道防线,因此应该由完全不同的一方来管理,而且你不能让这个管理方有机会破坏你所要保护的基础设施。

1.1.7.2 基于角色的管理

许多数据保护产品都提供了基于角色的管理(role-based administration)功能,这套功能就体现了刚才说的权力分离观念。它会把数据保护系统里面的各个部分交给不同的人来管理,这些人各自具备不同的权力(或者说,各自拥有不同的角色)。

其中一种角色可能拥有日常的备份操作权,也就是说,此类人员可以执行预先定义好的备份任务。例如他们能够监控某个备份策略是否顺利执行,如果没有,那么他们有权重新执行该策略。但是,这些人无权修改备份策略。备份策略的修改权,掌握在另一种角色的手里,然而他们虽然能修改备份策略,但却无权执行这些策略。把备份策略的配置权(也就是定义权)与操作权(也就是执行权)分开,能够限制其中一方所拥有的权力。

恢复工作可能会由一个与上述两者完全不同的角色负责。在理想的环境中,此类人员只能将数据恢复到当初备份该数据的那个地方。如果要恢复到别的服务器或别的目录,那么应该获得特别的审批,以防止此类人员利用数据恢复功能,将数据泄漏到本组织之外。

如果某个数据备份产品支持基于角色的管理机制,那么它应该已经内置了这样几种角色,你只需要将其指派给相应的人员就行。具体如何指派,应该好好想一想才对。最简单的办法,当然是把所有的角色都指派到同一个人身上,这就跟在管理密码时让所有人都知道root/admin密码一样简单,然而从安全角度看,最好能把备份系统中的每个角色指派给不同的人。这样的话,如果某人想执行自身角色之外的操作,那就必须跟扮演其他角色的人配合。虽然这并不能完全消除来自内部的威胁,但确实可以大幅降低这种概率。

1.1.7.3 最低权限

启用基于角色的管理方案之后,一定要保证每个人与每个程序都只获得了执行其工作所必需的权限,而没有获得与其工作无关的权限。比方说,你在安装备份软件时,不应该给这个软件赋予完整的管理员权限。找出完成工作所需的最低权限,对于任何操作员和管理员都是如此,他们应该只拥有完成工作所需的最低权限。

1.1.7.4 多人认证机制

对于如何防止来自组织内部的威胁,笔者还想介绍一个大部分备份产品都没考虑到的理念,也就是多人认证/多人授权(multiperson authentication)机制。这是一种多重认证(multifactor authentication,也叫多因素认证)机制,意思是说,在执行某项操作之前,必须同时获得两人同意。这有时也叫作四眼授权(four-eyes authentication),因为会有两双眼睛盯着这个事情。(当然,笔者自己是不太喜欢这个词的,因为我戴眼镜。)为了安全着想,你可以在备份系统中的某些工作上启用这种机制。

如果备份系统中的某个人想搞破坏,那他可能会删掉针对某服务器或某应用程序所做的全部备份,并且减少后续备份的保留时间,甚至把配置好的备份计划彻底毁掉。在大部分备份环境中,这些操作都不会引起别人注意。恢复也是如此,例如他可能想把数据偷走,所以会通过备份系统,将其恢复到一个能够轻易将数据转移出去的地方。因此,某些数据保护产品要求用户同时获得两个人的许可,如此才能执行恢复操作、修改备份策略或减少某个备份的保留时间。

与本章说过的其他办法一样,双人授权法也不是百分之百可靠的。网络攻击者如果获取了通信系统的访问权限,那么就能轻易地把相关信息拦截下来,从而绕过这个需要获得授权才能执行操作的机制。其实所有的IT产品都有风险,之所以要有数据保护系统,正是为了尽量降低这些风险。而且,这也正是我们要做备份的原因。 AI7ScuXQTg3BXTVxsxvkqNHqF/8a+GH3Jknl6RGk3tHPxKd5ZzDhBzOaKZdoXygE

点击中间区域
呼出菜单
上一章
目录
下一章
×