Pages

Sunday, 27 December 2015

扫盲操作系统虚拟机[7]:如何用“快照”辅助安全加固、强化隐私保护

  连续2个月没有谈技术话题了,今天发一篇,聊聊"快照功能"的使用,顺便给"扫盲虚拟机系列"填坑。

★何为"虚拟机快照"


  在本系列的第1篇已经介绍了"操作系统虚拟机"的一些基本概念。其中也谈到了虚拟机软件提供的"快照功能"。考虑到某些读者比较健忘,再把那篇博文中关于"快照"的介绍重复贴出来(请记住俺标了粗体的那句话):
  首先,快照是针对某个虚拟系统(Guest OS)而言的。当你为某个虚拟系统创建快照,则虚拟机软件会把这个虚拟系统的所有信息(包括内存状态、硬盘状态、等等)都保存起来。当你需要的时候,可以再切换到这个快照。一旦切换到某个快照,虚拟系统(Guest OS)就回到当初创建快照的那个状态。
  大多数虚拟机软件都支持树状结构的快照,也就是说,你可以在某个快照之上再创建快照。这就好比大伙儿都熟悉的文件目录结构——可以在某个目录内再创建目录,最终形成一个树形结构。
  为了给大伙儿一个直观的印象,放一张截图:
不见图 请翻墙
  从这张截图可以看出,这是一个装了 Windows 2000 的虚拟系统,图中名为"baseinstall"的快照,是一个干净的 Win2000 系统。然后基于这个快照,再创建4个快照,分别针对 Win2000 的 SP1、SP2、SP3、SP4。

★用"快照"能带来哪些好处?


  为了让大伙儿更加重视,先来聊聊好处。

◇对恶意软件的免疫


  如果你学会了本文介绍的招数,并养成频繁回退快照的习惯,你可以确保自己的 Guest OS 对各种安全威胁是免疫的。
  比如说:你不小心访问了某个挂马的网站,中了木马。当你下次回退到前一个快照,木马就消失了。

◇不留下本机操作痕迹


  如果你学会了本文介绍的招数,并养成频繁回退快照的习惯,就会最小化 Guest OS 里面的操作痕迹(比如上网浏览历史)。
  比如说:你【每天】都回退快照,那么你在 Guest OS 里面只会留下【最多一天】的操作痕迹。这一点对于隐私保护是非常重要滴!

★使用"快照方案"的【原理】


  先来介绍一下"原理"。
  本文开头扫盲了"快照"的概念,其中提到一句:一旦切换到某个快照,虚拟系统(Guest OS)就回到当初创建快照的那个状态。(这点是由虚拟化软件保证的,也是本文的核心)。有了这个保证,你只需遵循如下三个步骤,就可以让系统始终处于干净纯洁的状态。
  首先,
  你创建一个【干净的、纯洁的】Guest OS,然后在这个"干净纯洁"的状态下制作一个快照。
  其次,
  你可以在这个快照的基础上使用该虚拟系统(Guest OS)。使用的过程中,你可能会不小心感染了病毒或中了木马。不过没关系
  最后,
  当你使用完毕,只需简单地把虚拟系统(Guest OS)退回到那个干净的快照,虚拟系统(Guest OS)就重新变得干净纯洁了。

★具体的操作步骤


  刚才已经说完了【原理】,下面来介绍详细的操作步骤。
  考虑到俺的读者中,有些人【不是】IT 行业的从业人员,所以俺会尽量说得比较详细、比较浅显。(懂行的同学或许会嫌俺太罗嗦)

◇安装一个【干净】的系统


  打基础很重要。所以,首先要确保你初始安装的 Guest OS 就是干净纯洁的。要做到这点,至少要确保如下几个注意事项:
  1. 你的 Host OS 首先必须是【纯洁】的。
  如果 Host OS 本身就中了木马或者已经有了流氓软件,你就很难保证 Guest OS 也是纯洁的。

  2. 用来安装 Guest OS 的安装盘必须是【正宗】的。
  这个道理很简单——如果安装盘不靠谱,装出来的系统自然也不靠谱。所以,【不要】使用国产的经过破解的光盘镜像(比如"番茄花园、雨林木风"之类),天晓得里面有啥猫腻。俺一直建议用【官网】提供的原始光盘镜像,才比较保险。
  如果你的光盘镜像【不是】从官网直接下载的,那么你要校验一下光盘镜像的散列值(Hash)。具体的教程,请参见《扫盲文件完整性校验——关于散列值和数字签名》一文。
  Windows 的光盘镜像,可以在微软官网查到 ISO 文件的散列值;Linux 的光盘镜像,只要是知名的发行版,其官网也都会提供散列值。

  至于具体的安装过程,俺就不罗嗦了,大伙儿可以去参考本系列前面的两篇:
4. 虚拟系统的安装(多图)
5. 虚拟系统的配置(多图)

◇何时做第一次快照?


  当你装完系统,建议你顺手把相关的安全补丁都打全(关于"安全补丁"的重要性,可以参见《如何防止黑客入侵》系列的其中一篇)。
  然后,安装一些基本的软件(你要确保你安装的这些软件全都是靠谱的;否则这个系统就不纯洁了)
  最后,再把一些个性化设置也配置好。(否则的话,每次回退到快照,还要重新再设置一遍,比较繁琐)

  上述几个步骤做完,你就可以创建该 Guest OS 的第一个快照。

◇何时更新快照?


  (所谓的"更新快照",就是在原有快照的基础上,制作新的快照)
  快照不是永久不变的。有些时候,你需要更新快照。具体有如下几种情况:

  系统安全更新
  以 Windows 为例,每个月都会发布安全补丁。为了安全起见,你必须打这些补丁。
  假如你没有更新快照,那么每次你回退到快照之后,又得重新打一次安全补丁。随着时间的推移(每个月都有新的补丁),于是你需要打的补丁会越来越多。这就很繁琐,也很浪费时间。

  安装新的软件 / 软件升级新的版本
  有些时候,你需要在 Guest OS 里面安装一些新的软件;或者把原有的某些软件升级到新版本。
  假如你没有更新快照,那么每次你回退到快照之后,又得重新安装一次新软件或者升级新版本。这就很繁琐,也很浪费时间。

◇如何更新快照?


  刚才分析了"更新快照"的必要性。接下来聊聊"更新快照"的注意事项。

  系统安全更新的情况
  1. 你要先回退到前一个快照(回退之后,Guest OS 是纯洁的)
  2. 在此基础上,安装系统的安全补丁
  3. 安装补丁之后,不要做太多额外的操作,尽快制作一个新的快照
(为啥俺强调"不要做太多额外的操作",主要是避免误操作引入新的安全风险)

  安装新的软件 或 软件升级新的版本
  1. 你要先回退到前一个快照(回退之后,Guest OS 是纯洁的)
  2. 在此基础上,安装新的软件 或 给现有软件升级版本
  3. 做完上述操作之后,不要做太多额外的操作,尽快制作一个新的快照
(为啥俺强调"不要做太多额外的操作",主要是避免误操作引入新的安全风险)

  如果你遵循上述操作步骤,那么你的 Guest OS 在更新快照之后,依然是纯洁的。

◇"运行时"制作快照 VS "关机时"制作快照


  制作快照的时机有两种,分别是 Guest OS"处于运行状态"和"处于关机状态"。这两种各自有优缺点,分别如下:

  Guest OS 运行状态制作快照
优点:下次回退到快照,Guest OS 已经处于运行状态,省掉了等待系统启动的时间
缺点:因为 Guest OS 是在运行状态,虚拟化软件生成快照时,还需要把 Guest OS 的内存写入硬盘。多消耗了 Host OS 的硬盘空间。

  Guest OS 关机状态制作快照
优点:节省了 Host OS 的硬盘空间
缺点:每次回退到快照之后,还需要等待 Guest OS 启动

  看完上述优缺点分析后,你可以根据自己的偏好,决定采用哪一种方式的快照。

◇需要保留多少个快照?


  虚拟化软件为了记录快照的相关信息(磁盘状态、内存状态),需要占用挺多的物理硬盘空间。所以,如果你保留的快照太多,会导致 Host OS 的磁盘空间消耗很快。
  解决办法是:只保留最近的 N 次快照。N 可以是 1 或 2
  保留两次快照是为了防止误操作——比如你不小心生成了一个【不纯洁】的快照。在这种情况下,你可以把【不纯洁】的快照直接删除。然后退回到这个【不纯洁】快照的"前一个快照"。

◇多久回退一次快照?


  通常而言,越频繁地回退到干净的快照,安全性就越好。
  你可以根据自己的安全需求,决定多久回退一次。
  俺个人建议,时间间隔【不要超过1周】。

★如何解决"持久文件"的问题?


  (所谓的"持久文件",就是一些你希望永久保留的文件)

  使用快照的安全解决方案,最经常碰到的就是这个问题。具体原因如下:
  因为当 Guest OS 回退到前一个快照,那么从"前一个快照"生成【之后】的所有修改(对硬盘的修改),都消失了。比方说,在前一个快照生成【之后】,你在 Guest OS 里面保存了一份文档。当 Guest OS 回退到前一个快照,那么这份文档就消失了。
  那么该咋办捏?下面介绍俺的几条经验:

◇使用"共享目录"


  几乎有所有主流的虚拟机软件,都支持"共享目录"的机制。所以这招是常用招数。
  所谓的"共享目录",就是把 Host OS 的某个目录共享到(映射到) Guest OS 里面。之后,你可以在 Guest OS 里面操作该目录(比如在该目录中创建文件)。你在该目录下的所有操作,最终都是保存在 Host OS 里面。
  由于"共享目录"里面的内容是保存在 Host OS 里面,因此也就【不受】快照回退的影响。

◇使用"持久硬盘"


  这个功能比较高大上,【不是】所有的虚拟机软件都支持。下面俺简单拿 VirtualBox(以下简称 VBox)和 VMware Workstation(以下简称 VMware)来说事儿。

  VBox
  VBox 的虚拟磁盘支持一种"write-through"的类型(中文翻译成"完全写入")。如果某个磁盘设置为这种方式,那么该磁盘的内容【不受】快照回退的影响。
  有了这个功能,你可以在 Guest OS 中添加一块新的虚拟硬盘,并把这块新盘的类型设置为"write-through"。之后,凡是需要永久保留的文件,都放在这块盘上。

  VMware
  VMware 的虚拟磁盘中,提供一种"independent-persistent"类型的虚拟磁盘(中文翻译成"独立持久硬盘"),效果有点类似于 VBox 的"write-through"。但是它的缺点很明显:一旦 Guest OS 中添加了这种磁盘,就【无法】制作快照了(参见 VMware 官网"这里"的介绍)。
  显然在这方面,VMware 不如 VBox 那么灵活。
  顺便插一句题外话:
  VirtualBox 是开源软件而 VMware 是闭源软件。所以俺建议大伙儿优先考虑 Virtual Box。

◇安全方面的注意事项


  不论采用上述哪一种方案,俺都要提醒一下安全方面的注意事项。
  由于"持久文件"不受"快照回退"的影响,会成为"快照方案"的一个潜在漏洞。因此,你在持久文件中保存的东东,只能是"数据型的文件",而不能是"可执行文件"(比如 exe 之类的文件)。


回到本系列的目录


from 编程随想的博客 http://ift.tt/1mcEoQN