Translate

精选博文

搬瓦工 Just My Socks 详细图文教程(被墙免费自动换 IP,无须担心被墙)内赠优惠码 注册与购买 使用教程

这是专门为新手小白准备的手把手 详细图文教程(被墙免费自动换 IP,无须担心被墙) 支持在所有平台(苹果,安卓, Mac , windows, Linux,路由器) 翻墙 温馨提醒:需要点击下方套餐右边的购买链接下单才能使用本站专属优惠码及专属一对一客户服务 , ...

2016年11月11日星期五

编程随想的博客: 如何防止黑客入侵[8]:物理隔离的几种玩法

..授人以鱼不如授人以渔!
授人以鱼只救一时之急, 授人以渔则可解一生之需。

如何防止黑客入侵[8]:物理隔离的几种玩法

文章目录
★先插播一个安全通告
★本文的目标读者是哪些人?
★预备知识:关于“隔离性”和“攻击面”
★招数1:把不同的上网帐号放到不同的物理系统
★招数2:在【专用的】物理系统中操作“重置密码的邮箱”
★招数3:在【专用的】物理系统中运行密码生成器
★招数4:对重要帐号划分“操作机”和“登录机”
★招数5:“物理隔离”搭配“多重代理”
★总结
★先插播一个安全通告

  11月29日曝光了一个 Firefox 的高危漏洞,详情在“这里”(洋文)。
  根据漏洞描述,此漏洞只影响 Windows 平台。照理说俺用的是 Linux,应该不受影响。但考虑到俺是高危险人士,为了保险起见,还是先静默几天——暂不使用“编程随想”这个身份进行网络活动。俗话说得好:【小心驶得万年船】。
  本来俺计划在11月底发一篇博文谈 Linux,但是这个漏洞让俺改变主意——所以今天这篇来聊聊“物理隔离”的话题。
  (本文发出后,俺已经到博客后台管理界面,把这几天被 Google 误判为垃圾广告的评论,全都恢复出来了)

★本文的目标读者是哪些人?

  为了避免浪费大伙儿的时间,俺先声明一下本文的目标读者。
  这篇博文是面向那些【对安全性要求非常高】的用户。对这些人而言,“虚拟机隔离”还是无法令他们放心。

  既然聊到这里,顺便解释一下:什么情况下“虚拟机隔离”会出问题。
  如果虚拟化软件(比如 VirtualBox、VMware、KVM ...)本身出现了安全漏洞,并且这个安全漏洞会导致虚拟机被穿透;然后,Guest OS 正好又感染了恶意软件;而相关恶意代码正好又能够利用这个漏洞进行穿透;那么,该恶意代码就有可能从 Guest OS 入侵 Host OS。一旦恶意代码能够侵入 Host OS,理论上它就可以访问这个 Host OS 上的所有 Guest OS。在这种情况下,“虚拟机隔离”的措施就【失效】了。
  出现上述情况的概率是非常低的——需要好几个条件【同时】具备。因此,能够进行这种攻击的,必然是比较高级的入侵者,而且这个入侵者对入侵对象必须有深入的了解:
知道对方用的是什么类型的虚拟化软件(不同的虚拟化软件,其安全漏洞的情况全然不同),
知道对方用的 Guest OS 是什么类型的系统
知道对方用的 Host OS 是什么类型的系统

  所以,普通的网民不需要考虑这种风险。为啥捏?能这么搞的入侵者都是比较高级的,他们根本不屑于去入侵普通网民。


★预备知识:关于“隔离性”和“攻击面”

◇几种不同的隔离级别

  在本系列的前面3篇,俺连续聊了很多关于 Web 方面的防范措施。你看完这3篇之后应该会发现:俺提及的防范措施,全都是围绕“隔离”这个概念来展开的。不论是“多实例”还是“多用户”或者“多虚拟机”,说白了都是为了隔离“浏览器环境”。
  “隔离”的好处在于:一旦某个环境被入侵,(只要你的隔离屏障没有被穿透)别的环境不会受影响。说到“隔离屏障被穿透”,自然就引出“隔离性的好坏”这个话题。
  不同的“隔离措施”,其“隔离性”是不同的。“隔离性”越好,攻击者就越难穿透。
  【常见的】隔离措施(从低到高)有如下几种。俺结合浏览器来加以说明
1. 进程级
(以浏览器为例)搞多个“浏览器实例”。不同的实例肯定是不同进程,但都在同一个用户下。
2. 用户级
(以浏览器为例)在不同的【普通】用户下分别运行浏览器。但都在同一个操作系统下。
3. 虚拟系统级
(以浏览器为例)创建多个虚拟系统(Guest OS),在不同的虚拟系统中分别运行浏览器。虽然处于不同的 Guest OS,但还是在同一个 Host OS 下。
4. 物理系统级
(以浏览器为例)在不同的物理系统中运行浏览器。

  今天俺要介绍的就是最高级的“物理系统级的隔离”。

◇“物理隔离”的3种子类型

  “物理隔离”还可以继续细分为3种子类型(这三种级别也是从低到高):
物理隔离1型
多个物理系统之间【存在】网络连接。
物理隔离2型
多个物理系统之间【没有】网络连接,但【存在】存储介质的交换(比如:通过“U盘”交换数据)。
物理隔离3型
多个物理系统之间既【没有】网络连接,也【没有】存储介质的交换。

◇攻击面

  关于这个概念,洋文称之为“attack surface”,相关的英文维基百科页面在“这里”。考虑到很多同学不喜欢看洋文,下面俺通俗地扫盲一下。
  为了描述这个概念,暂且借用一下军事术语。在军事领域中,如果其它因素都一样,则防线越长就越容易被突破。
  在信息安全领域,道理也类似。军事领域的“防线”就类似于本文所说的“攻击面”。

◇“攻击面”的2个维度

  从概念上讲,“攻击面”可以再分成2个维度,分别是“时间维度”和“空间维度”。为了便于理解,下面俺举例说明。

  时间维度
  有两台软硬件配置一模一样电脑(A 和 B)。A 是一年到头365天都挂在网上,而 B 在一年里面只联网1分钟。很显然,A 被入侵的概率要大大高于 B。

  空间维度
  有两台服务器 A 和 B,都是始终联网的(时间维度一样)。A 上面【没有】装任何服务端软件;而 B 上面既装了 Apache(web 服务)又装了 MySQL(数据库)。而且这几个服务的端口都对外开放。假如某天,Apache 曝光了高危漏洞,B 就可能因此而被入侵,但是 A 就没事儿。
  【通俗地说】,系统中装的软件越多,则包含的“代码”就越多,那么“代码”中出现安全漏洞的概率也就越大。
  (上面这句只是“通俗”的说法。严格来讲,“攻击面”与“代码量”并【不是】简单的线性关系。这两者之间的关系牵扯的因素很多,比如:软件代码的质量,软件模块的类型、各个软件模块之间的依赖关系、开源 or 闭源 ......)


★招数1:把不同的上网帐号放到不同的物理系统

  这个招数是最容易想到的,所以俺先聊这招。
  如今很多人都有不止一台 PC。但是 PC 再多也不会超过10台吧(除非你是开网吧的)。但是你的上网帐号很可能不止10个。所以,你不太可能给每一个上网帐号配一台单独的 PC。这就需要考虑一个“划分策略”:哪些帐号共用一台 PC。
  “划分策略”通常有如下两种:

◇根据“重要程度”进行划分

  比如说,你搞两台 PC,一台专门用来操作很重要的网络帐号,另一台用来操作不那么重要的网络帐号。
  对于前者,安装靠谱的操作系统(Linux > Mac OS > Windows),装的软件要尽量【少】(减少“攻击面”),并采取尽可能多的措施来保护它(具体措施参见本系列前面几篇)。

◇根据“身份”划分

  如果你对隐匿性的要求很高,可以考虑以“身份”划分上网帐号到不同的 PC。
  为了便于理解,拿俺自个儿来举例:
  显然,俺是非常看重“隐匿性”滴——如果让朝廷方面知道俺的真实身份,俺就废了。所以,俺不光注重【安全性】的需求(防止被入侵),更加要注重【隐匿性】的需求(防止俺的“虚拟身份”与“真实身份”被关联起来)。
  如果俺仅仅使用“虚拟机隔离”(一个虚拟机用来操作“真实身份”的帐号,另一个虚拟机用来操作“编程随想这个身份”的帐号)。万一碰到“虚拟机穿透”(前面提到过),入侵者通过 Guest OS 进入 Host OS,就可以同时访问到这两个 Guest OS,就有可能发现:原来“编程随想”就是某某人。
  反之,如果把这两个身份的帐号放到两台 PC(物理隔离)。即使“编程随想”这个身份对应的 PC 被彻底入侵,入侵者看到的帐号全部都是“编程随想”相关的帐号,不会看到“真实身份的帐号”(因为这些帐号在另一台 PC 上)。


★招数2:在【专用的】物理系统中操作“重置密码的邮箱”

  这个招数很简单,仅仅从章节标题,你基本上就能猜到是怎么玩的。所以俺就节省点口水,不展开了。
  下面简单说说这个招数的注意事项:
1. 用来“重置密码”的邮箱,最好是专用的——也就是说:除了“重置密码”,不再作其它用途(以降低“攻击面”)
2. 操作这个邮箱的 PC,最好也是专用的(以降低“攻击面”)
3. 这台电脑只要很低的硬件配置就可以了。所以,你可以拿以前淘汰的旧电脑来用。


★招数3:在【专用的】物理系统中运行密码生成器

  可能很多同学是第一次听说“密码生成器”这个玩意儿。所以俺来解释一下:
  在本系列的第3篇《如何构造安全的口令/密码》中,俺介绍了好几种设置密码的技巧,那篇教程的最后一招就是“用散列算法构造密码”。
  “用散列算法构造密码”,有“简单用法”,也有“高级用法”(对这两种,那篇博文都有介绍)。由于本文针对的是“安全性要求很高的读者”,所以你当然要用“高级用法”。“高级用法”通常需要依靠一个小程序/小脚本来辅助你进行 N 迭代(计算 N 次散列)。这个“小程序/小脚本”就是本章节所说的“密码生成器”。
  有了“密码生成器”,你可以轻松构造出许许多多超长密码(可以长达几百个字符,前提是:网站要支持这么长的密码)。而且你【不需要】花很多脑细胞来记住这些变态的长密码。你只需记住自己的“种子串”以及“迭代次数”。如果你把“种子串”及“迭代次数”写死在生成器的脚本中,那你甚至连这两个信息也【不用】记忆。
  这台运行“密码生成器”的电脑完全【不用联网】。所以这台 PC 的隔离属于前面提到的“物理隔离3型”——这是物理隔离中最严格的(没有之一)。


★招数4:对重要帐号划分“操作机”和“登录机”

  这个招数与前面几个完全不同——是采用【2台】PC 来保护【单个】帐号。通常而言,只有很重要的帐号才值得你动用两台物理电脑来保护。
  这个招数相对比较难懂,俺需要多费点口水。在开讲之前,先来解释一下什么是“记住登录状态”的功能。

◇“记住登录状态”功能

  如今大部分网络帐号都有【记住登录状态】这个功能。当你登录该帐号,输入完密码后,如果勾选了“记住登录状态”这个选项(不同的网站,界面上的叫法可能略有不同),那么你下次访问该帐号就【不用】再输入密码了。

◇“记住登录状态”的技术原理

  网站是如何做到这个效果的捏?通常是利用浏览器 cookie。当你输入密码并登录成功之后,会在 cookie 中保存一个“安全令牌”(洋文叫“token”)。这个“安全令牌”不是密码,但是比密码更复杂更难暴力破解。而且,根据令牌是【无法】逆向推算出密码的(只要是比较靠谱的网站,技术上肯定能保证这点)。
  当你下一次又访问了这个网站,浏览器会把 cookie 中的这个令牌发送到网站服务器,服务器端会采用某种安全可靠的算法来验证这个令牌是否合法,如果合法,就认为你是之前登录过的那个用户。
  由于 cookie 有时间限制(期限),过了期限这个 cookie 就失效了。这时候你如果又访问这个网站,它又会要求你输入密码。另外,如果你在浏览器中清空了所有 cookie,那么下一次访问该网站也要重新输入密码。

◇物理隔离的玩法

  明白了这个功能的原理之后,开始来说“物理隔离”怎么玩。
  你需要专门准备2台 PC——“登录机”和“操作机”。记住:这2台电脑都是用来操作【同一个】帐号滴。
  每次需要登录该帐号,你一定要在“登录机”上输入密码。登录成功之后,把登录机上的【cookie 文件】复制到“操作机”上。然后你就可以在“操作机”上【免登录】访问该帐号。
  (由于需要把 cookie 从“登录机” copy 到“操作机”。所以这种隔离属于前面提到的“物理隔离2型”)

◇这个招数的优点

  首先,因为你从来【不】在“操作机”上输入该帐号的密码。所以,即使“操作机”被植入木马,木马也不可能知道该帐号的密码是啥。

  从“时间维度”而言
  由于“登录机”仅仅用来输入密码,其它的日常操作都在“操作机”。所以,(从“时间维度”上讲)“登录机”的攻击面远远小于“操作机”。

  从“空间维度”而言
  由于这个“登录机”仅仅用来输入密码。你只需安装非常少的几个软件(比如 浏览器 之类的)。如果你的帐号名称是洋文(大部分应该都是吧),这台“登录机”甚至连输入法都【不用装】。
  所以,从“空间维度”而言,“登录机”的攻击面也会远远小于“操作机”。

  综上所述,入侵者很难搞定“登录机”。
  然后,前面俺又说了,根据(cookie 中的)“安全令牌”是无法逆向推算出帐号密码滴。所以,即使“操作机”被【彻底】入侵了,入侵者虽然可以进入你的帐号,但是他/她依然无法知道你的密码(因此也就无法改密码)。
  这种情况下,你可以很轻松地把入侵者踢掉——只需通过“登录机”进入帐号,修改密码;然后入侵者在“操作机”上就进不了这个帐号了(一旦修改过密码,原有的安全令牌就作废了)。


★招数5:“物理隔离”搭配“多重代理”

◇“物理电脑”与“虚拟机”在“网络隔离”方面的差异

  俺博客上有一个很受欢迎的系列叫做《如何隐藏你的踪迹,避免跨省追捕》。在这个系列中,俺介绍“多重代理”,也介绍了“用虚拟机防止公网 IP 暴露”。
  当初俺写那篇《用虚拟机隐匿公网 IP》的时候,好几个懂技术的读者跳出来质疑。因为他们光看标题没看内容 :)
  所谓的“用虚拟机防止公网 IP 暴露”,是因为:可以利用虚拟网卡的不同模式(NAT 及 Host-Only)来设置网络隔离,使得 Guest OS 中的软件【无法直接联网】(强迫这些软件走代理)。这样就可以避免:“因为某些软件【直连网络】导致的公网 IP 暴露”。

  但如果出现“虚拟机被穿透”,那“公网 IP”还是有暴露的风险。因为虚拟网卡只能用来限制 Guest OS,而无法限制 Host OS。而 Host OS 中的软件通常是可以直连公网的。当某个恶意代码从 Guest OS 穿透进入 Host OS,该恶意代码就有可能尝试“网络直连”,并导致你的公网 IP 暴露。
  看到这里,聪明的读者已经猜到解决方案了。那就是把原先“单虚拟机方案 或 双虚拟机方案”中那个“隔离的虚拟机”换成“隔离的物理电脑”。
  话虽这么说,但操作起来会有点复杂。
  原先的“虚拟机方案”,你只需设置虚拟网卡的“网卡模式”(设置成 Host-Only 或 Internal),就可以把 Guest OS 的网络访问隔离起来。但是物理电脑是【没有】虚拟网卡的,物理电脑是物理网卡。而“物理网卡”是【没有】“网卡模式”让你修改的。所以你需要在网络拓扑上下点功夫。具体的玩法有很多种,考虑到本文的篇幅有限,俺只介绍其中一种。

◇“物理电脑”进行“网络隔离”的玩法(方法之一)

  下面俺【简单】介绍一下步骤(考虑到本文面向的是安全要求很高的读者。既然你的安全要求很高,当然不能是技术菜鸟,肚子里要有点货。所以,俺在下面只提几个要点,操作的细节靠你自己摸索了)

1.
准备两台物理电脑,分别称为“隔离机”和“网关机”。
“隔离机”要有一个【有线】的网卡;“网关机”要有2个网卡,至少有一个是【有线】的(用来与“隔离机”对接)
为啥俺要强调“有线网卡”,因为有线网卡才能确保其只连接到一个对端;而无线网卡就难说了。
所以隔离机只能保留仅有的一个有线网卡。如果隔离机有多余的无线网卡,在 BIOS 里面禁掉。

2.
“隔离机”上运行的软件是:
有可能遭遇高级入侵的软件(比如你的浏览器),或者是那些本身就不太安分的软件(比如 QQ)
“网关机”上运行的软件是:
TOR
TOR 的前置代理(如果你在墙外,可以不用前置代理。但是有前置代理会更安全——“双重代理”优于“单重代理”)
防火墙

3.
前面说了,“网关机”至少有一个有线网卡,用来对接“隔离机”。
因此,你需要配置“网关机”的防火墙,使得【在这块网卡上】只允许 TOR 的监听端口对外暴露(这条一定设置)
另一块网卡是用来接入公网的,你可以配置防火墙,禁止该网卡上的任何监听端口(这条可设可不设,设置了更保险一些)

4.
用一根网线把这2台电脑各自的【有线网卡】对接起来。

5.
设置“隔离机”上的软件,让它们以“网关机”的 TOR 作为代理。

6.
设置“网关机”上的 TOR,让它通过“网关机”上的前置代理联网。


★总结

  几个主要招数聊得差不多了。俺在最后提醒一下:
1. 本文的这几个招数,相互之间是可以【组合使用】的
2. 本文的这几个招数是可以跟“虚拟机隔离”结合起来用的
3. 组合得越复杂,需要的物理电脑也越多 :)
4. 如今的 PC 已经很便宜啦(两三千就可以买到硬件配置还凑合的)。如果你是“高危人士”或“高价值目标”,【不要】吝啬那几千块钱!

没有评论:

发表评论