如何防止黑客入侵[6]:Web相关的防范(中)

2012-09-08IT IT.信息安全

  在本系列的前一篇聊了些基础性的东西,包括:常见的攻击手法、如何选择浏览器和插件。今天,俺继续介绍几个相对高级一点的话题。


★如何防范浏览器和插件的漏洞?


  在前一篇已经告诉大伙儿“如何选择浏览器”。但是光知道这个是不够滴!因为浏览器也是软件,只要是软件就可能会出现漏洞(包括安全漏洞)。
  即使你按照俺的建议,选择 Firefox 或 Chrome 作为日常的浏览器,也【无法完全避免】浏览器自身出漏洞的问题。而且浏览器的漏洞中,有一些是没有补丁的高危漏洞(包括“未公开漏洞”&“零日漏洞”,俺在前面的帖子里介绍过)。因为没有补丁,所以这类高危漏洞就特别危险。这就引出了第一个问题:如何防范浏览器的漏洞?
  另外,在浏览器插件中,Flash 插件既是最危险的插件,也是使用最广的插件。这就引出了第二个问题:如何安全地使用危险的插件?
  要解决上述2个问题,可以使用同一个原则,那就是:【对浏览器进行隔离】。具体的隔离方式有很多种,今天俺由浅入深,分别介绍一下。


★“多浏览器”的方案


◇操作步骤


  这招是最简单的——就是在一台电脑上安装多款【不同内核】的浏览器。具体步骤俺就不多说了,节约点口水。

◇优点


  1. 解决网银的问题
  前面提到了国内网银依赖于 IE 的问题。但是 IE 的安全性又不如 Firefox 和 Chrome,咋办捏?最简单的办法就是同时安装两款浏览器(比如 IE + Firefox)。平时你上网的时候,用 Firefox,需要用网银,则改用 IE。
  由于你仅仅在使用网银的时候,才开启 IE,大大降低了 IE 被入侵的机会。

  2. 解决跨站脚本(XSS)的问题
  使用多种浏览器,还可以帮你解决跨站脚本攻击的问题。
  单纯的XSS攻击,主要是依赖 JavaScript。而 JavaScript 只能在浏览器进程内起作用,无法跨浏览器进程。所以,如果你同时使用 A B 两款浏览器。如果 A 浏览器发送 XSS 攻击,通常不会影响到 B 浏览器。除非这个 XSS 攻击结合了浏览器漏洞或插件漏洞。那么,多款浏览器是否能防范浏览器漏洞和插件漏洞捏?请看往下看。

  3. 部分解决高危插件(Flash)的使用问题
  俺在上一篇提到了利用 Flash 入侵 Gmail 的案例。
  比方说,你同时用 Firefox 和 Chrome。其中 Firefox 安装 Flash,用来上普通的网站;而 Chrome 不装或禁用 Flash,专门用来上 Google 的相关服务器(比如 Gmail)。
  某天,你收到一封恶意的邮件,该邮件会利用 Flash 的漏洞来入侵用户的电脑。幸运的是,你用来访问 Gmail 的 Chrome 上没有 Flash 插件(被禁用),于是攻击者的阴谋没有得逞 :-)

◇缺点


  1. 无法彻底解决浏览器漏洞和插件漏洞的问题
  细心的读者会注意到,刚才那个小节的标题是部分解决高危插件(Flash)的问题。为啥俺要特地强调【部分解决】捏?因为浏览器的漏洞和插件的漏洞有很多种。有些漏洞只是让浏览器崩溃,无伤大雅;而有些漏洞可以导致在本地执行代码,并且能进一步植入木马。一旦你碰到后者,即使你采用“多种浏览器”的方式,也抵挡不住。
  某些天真的网友可能会问:浏览器厂商和插件厂商不是会升级补丁吗?但是问题在于,有少数一些漏洞是没有补丁的。为啥会这样捏?请看本系列上一篇《安全漏洞的基本防范》,里面介绍了"未公开漏洞"和"零日漏洞"。
  不过别担心,俺后面还会介绍更高级的招数,来防范这种情况。

  2. 灵活性不够
  对于“多浏览器”的方案,还有一个缺点是不够灵活。
  因为你要为每一种用途安装一款浏览器,如果你的用途比较多(比如:上网银、普通浏览、Web 邮箱、看视频),就要装好几款。
  另外,有些用户就喜欢某一款浏览器,你让这些用户装好几款浏览器,他们会觉得不爽。
  对于“灵活性不够”的缺点,大伙儿可以参考接下来要介绍的第二招——“多实例”的方案。


★【多实例】的方案


◇什么是浏览器的多实例?


  所谓的浏览器多实例,有时候也称之为“Multiple Profiles”。
  不论是 Firefox 还是 Chrome,默认安装的时候,只有一个实例(Profile)。和浏览器相关的各种信息,包括:插件、扩展、外观(皮肤)、页面缓存、cookie、等等,都存储在这个实例中。
  反之,如果使用多实例,每个实例都具有独立的插件、独立的扩展、独立的外观(皮肤)、独立的页面缓存、独立的 cookie、等等。不同实例之间是相对隔离的,【不会】互相影响。
  对于 Chrome,再特别提醒一下:
  Chrome 同时支持“Multiple Profiles”与“Multiple Accounts”。但别把这两者搞混了。即使你配置了多个 Accounts,依然在【同一个】实例里。

◇操作步骤


  多实例的配置,很多人不晓得。所以俺详细说一下。考虑到 Windows 用户居多,俺以 Windows 举例。Linux 和 Mac OS 的操作步骤大同小异。

  多实例的 Firefox

  对于 Windows 上的 Firefox,Profile 都放置于 %APPDATA%\Mozilla\Firefox\Profiles 目录下。
  假设你想创建一个【全新的】Firefox 实例,可以通过如下命令行来启动 Firefox。
"{PATH}\firefox.exe" -P "XXXX" -no-remote
  上述命令中,{PATH} 表示你的 Firefox 的【安装目录】。XXXX 表示你要创建的【实例名】(实例名可以是任意字母组合,你也可以把 XXXX 改成其它名称)。
  运行完上述命令,Firefox 会启动出一个名叫 XXXX 的实例。与此同时,在 %APPDATA%\Mozilla\Firefox\Profiles 下会多出一个名叫 XXXX 的目录。
  按照上述方式依样画葫芦,你就可以启动出任意多个 Firefox 实例。为了省事,你可以把上述命令行做成一个快捷方式,放到桌面上,免得每次都敲键盘。
  另外,Firefox 还提供了一个多实例的管理界面,用如下命令可以调出该界面。
"{PATH}\firefox.exe" -p

  多实例的 Chrome

  Chrome 类似于 Firefox,也可以通过命令行启动新的实例。
  对于 Windows 上的 Chrome,由于 Chrome 安装的时候没让选安装目录,所以其【exe 的安装目录固定如下】:

Windows 7 或 Vista 系统
C:\Users\{USER}\AppData\Local\Google\Chrome\Application\chrome.exe
Windows XP 系统
C:\Documents and Settings\{USER}\Local Settings\Application Data\Google\Chrome\Application\chrome.exe
  上述的 {USER} 表示你的 Windows 用户名

  找到 chrome.exe 之后,接下来,你需要创建一个目录,用来存放新创建的实例。比方说,你用的是这个目录: X:\XXXX\
  然后,通过如下命令启动 Chrome,就可以创建出新实例

Vista 或 Windows 7 系统
C:\Users\{USER}\AppData\Local\Google\Chrome\Application\chrome.exe --user-data-dir="X:\XXXX\"
Windows XP 或 Win 2003 系统
C:\Documents and Settings\{USER}\Local Settings\Application Data\Google\Chrome\chrome.exe --user-data-dir="X:\XXXX\"

  按照上述方式依样画葫芦,你就可以创建出任意多个 Chrome 实例。为了省事,你可以把上述命令行做成一个快捷方式,放到桌面上,免得每次都敲键盘。

◇优点


  1. 解决跨站脚本(XSS)的问题
  这个优点跟“多浏览器”方案是类似的。俺就不再啰嗦了。

  2. 部分解决高危插件(Flash)的使用问题
  这个优点跟“多浏览器”方案是类似的。俺就不再啰嗦了。

  3. 灵活性高
  与“多浏览器”的方案相比,“多实例”的方案明显灵活多了。因为 Firefox 和 Chrome 可以创建出任意多个实例(只要你的硬盘够大,想建几个实例都行)。而且,这个方案可以满足某些 Firefox 粉丝或 Chrome 粉丝的个人偏好。

◇缺点


  1. 无法彻底解决浏览器漏洞的问题
  在这方面,“多实例方案”与“多浏览器方案”具有共同的缺陷——无法抵御具有【本地代码执行】的高危漏洞。包括浏览器漏洞和插件漏洞都有可能出现这类高危漏洞。
  那么,该咋办捏,请看下一节——“多用户”的方案。


★【多用户】的方案


  前面提到的两种方案,都无法防范某些浏览器或插件的高危漏洞。因为这些高危漏洞会导致在本地执行攻击代码,并有可能植入木马。现在,俺来介绍第三种方案——多用户方案。此方案可以防范大部分在本地执行的攻击代码。
  先说明一下,此处的“用户”指的是【操作系统用户】。

◇某些高危漏洞为啥很危险?


  俺前面反复提到“导致本地执行攻击代码的漏洞”。这样的漏洞是非常非常危险的。为啥捏?俺简单扫盲一下。
  如果你的浏览器或者浏览器插件具有这类漏洞,当你访问某个恶意网页时,如果该恶意网页能够利用此漏洞,就可以在你的本地的操作系统中执行攻击代码。由于这个攻击代码是在浏览器的进程内触发的,所以该攻击代码就具有当前用户所具有的权限。
  比方说,如今大部分网友都用 Windows 上网。并且,这些网友都是以“系统管理员”的身份使用浏览器。一旦碰到这类漏洞时,本地的攻击代码也同时具有了“系统管理员权限”。有了这么高的权限,攻击代码可以为所欲为。
  某些网友可能会问:那不用管理员身份上网,是不是就没事了?
  俺只能说,用低权限的用户身份(比如 Windows 里面的“Users 组”)上网,相对于用管理员身份上网,会好一些。但是捏,还是有问题。
  举个例子:
  即使你用低权限用户上网,一旦遭遇这类漏洞,攻击代码还是有可能植入木马。然后捏,这个木马有可能会查找你电脑上的各种私密文件(比如你的裸照)。然后木马会把这些私密文件发送给木马的主人。

  从上述例子可见,用低权限的用户上网,【不能】彻底解决问题。所以,俺隆重推出第三种方案——多用户方案。

◇啥是“多用户方案”捏?


  如今的桌面操作系统,无论是 Windows 还是 Linux 或 Mac OS,都可以创建多个操作系统用户,并且这多个用户可以同时运行程序。如果你用过 WinXP 的快速用户切换,应该对此深有体会。
  多用户方案的关键在于:
  你需要创建一个或多个【低权限】的“上网用户”(所谓低权限,必须低于你当前使用的用户权限)。这些“上网用户”专门用来访问各种网站。
  假使你不幸访问了恶意网页,遭遇本地执行的攻击代码,问题也不大。因为这些上网用户的权限很低,所以它们触发的攻击代码,权限也很低。因此攻击代码就比较难钻空子。一般来说,对“上网用户”的权限限制得越严格,攻击代码就越难有作为。

◇操作步骤


  1. 创建上网用户
  如何在桌面系统中创建新的用户,大家应该都会吧?不会的同学,请看《避免使用高权限用户》一文的相关章节。上网用户可以只创建一个,也可以创建多个。具体建几个,看你的需求。
  举例:
  假如你非常看重网银的安全,可以创建两个上网用户,一个专门用来访问网银,一个专门用来上其它网站。
  提醒一下:在这些上网用户的环境中,除了浏览器,其它啥软件都【别】装。

  2. 设置上网用户的权限
  再啰嗦一次,上网用户的权限,一定要低于你目前使用的用户权限。
  以 Windows 为例:
在 Windows 中,常见的用户组的权限大小分别是:“Administrators 组” > “Power Users 组” > “Users 组” > “Guest 组”
如果你平时用“Administrators 组”的用户,那么可以把上网用户设置为:“Power User”或“User”或“Guest”
如果你平时用“Power Users 组”的用户,那么上网用户就只能设置为 User 或 Guest。
以此类推......
(如果你想了解这些用户组之间的权限差异,可以参考本系列的第一个帖子《避免使用高权限用户》)

  提醒一下:
  Guest 用户组的权限是最低,低得难以想象。所以,从安全角度而言,把上网用户设置为“Guest 组”是最安全滴。但是,也是最麻烦滴。你需要进行好多设置——否则的话,你可能连浏览器都跑不起来。
  所以,除非你对 Windows 系统比较熟悉,否则的话,俺【不】建议使用“Guest 组”的权限。比较理想的权限是“Users 组”。这个组的权限也比较低,但是用起来不麻烦。

  3. 设置文件目录的访问控制权限(ACL)
  每个人的电脑中,都会有某几个目录是用来存放你的敏感个人资料的。
  你必须设置这些目录的访问控制权限(简称 ACL),设置为:“上网用户”所在的组【不允许读写】。这样一来,你可以把自己那些敏感的,私密的文件(比如自己的裸照),都通过上述 ACL 保护起来。即使“上网用户”遭遇高危漏洞的攻击,本地执行的攻击代码也【难以拿到】你的隐私(俺说"难以拿到",意思就是说,还是有可能滴,但是可能性很小,后面会解释)。
  顺便提醒一下:对于 Windows 系统,只有使用 NTFS 格式的分区,才支持 ACL。FAT32 格式的分区是不支持滴!
  如果你是个菜鸟,不懂得如何设置文件及目录的 ACL,没关系!Google 一下,你就知道。

  4. 多用户浏览器共享同一个桌面的技巧
  你可以直接用 Windows 提供的“快速用户切换”。对于 Windows 系统,从 WinXP 开始就提供了"快速用户切换"的功能。用它来切换用户还是很方便滴。但是这招有一个缺点:你一次只能看到某一个用户运行的软件,其它用户运行的软件看不到。
  不过没关系,还有一个小技巧,可以让你在同一个桌面中,运行不同用户的软件(包括浏览器)。
  假设你创建了 A & B 两个用户。其中 A 是主用户,用来完成你日常的工作;B 是上网用户。那么你可以先登录“A用户”,然后在“A用户”的桌面上创建一个浏览器的快捷方式。(如何创建快捷方式,就不用俺手把手教了吧)
  用鼠标选中该快捷方式,在快捷菜单(右键菜单)中,选择“属性”菜单项。出现如下对话框。
不见图 请翻墙

在该对话框中,点“高级”按钮。出现如下对话框。把“以其他用户身份运行”选项打勾,就可以啦。
不见图 请翻墙

之后,如果你想在“A用户”的桌面上运行“B用户”的浏览器,只需点击该快捷方式,就会弹出如下对话框。然后输入“B用户”的用户名/口令,就能以“B用户”的身份运行浏览器。
不见图 请翻墙

  刚才介绍的是图形界面的配置。对于习惯于命令行的 IT 专业人员,还可以用命令行的方式启动指定用户的某个进程。Linux 系统和 Mac OS 系统有 susudo 命令;Windows 系统有 runas 命令。

◇优点


  1. 解决跨站脚本(XSS)的问题
  这个优点跟前两种方案类似,俺就不再啰嗦了。

  2. 解决高危插件(Flash)的使用问题
  这个优点跟前两种方案类似,俺就不再啰嗦了。

  3. 防范各种浏览器漏洞
  正如刚才提到的——前两种方案(多浏览器、多实例)无法防御浏览器及插件的某些高危漏洞(具备本地执行攻击代码的漏洞)。而“多用户方案”可以大大降低这类漏洞的危害性。使得攻击代码只能威胁到“上网用户”本身,而不会威胁到其它操作系统用户。

◇缺点


  1. 初始配置稍嫌麻烦
  相比前面两种方案,这个方案的【初始配置】比较麻烦。而且你要分清楚哪个用户是用来干啥的。不过捏,一旦用久了,习惯了,也就不觉得麻烦了。

  2. 无法防范极个别高明的攻击者
  “多用户方案”之所以可以隔离攻击代码,是因为如今所有主流的桌面操作系统,都能够在操作系统层面,对不同的系统用户进行隔离。因为有操作系统层面的隔离,所以才限制了攻击代码的危害性。
  但是,操作系统层面的隔离,也不是百分之百可靠滴。不要忘了,操作系统本身也是软件,也可能出现安全漏洞。在操作系统的安全漏洞中,有一类漏洞叫做“权限提升漏洞”(简称“提权漏洞”)。所谓的“提权漏洞”,顾名思义,就是能够提升【当前执行代码】的权限。比方说,本来攻击代码没有管理员权限,通过"提权漏洞",就可以拿到管理员权限。
  如果你的操作系统本身存在“提权漏洞”,同时你的浏览器或者插件存在“能够在本地执行代码的漏洞”,那么,高明的攻击者就有可能把这两者组合起来,对你的系统进行组合攻击。
  不过大伙儿别担心——要实现这类组合攻击,需要同时掌握【未公开的】浏览器或插件漏洞,并且还要有【未公开的】操作系统提权漏洞(俺在前面的帖子里介绍过,“未公开漏洞”总是比“零日漏洞”更危险)。另外,攻击者还需要做很多准备工作,才能诱使你访问到恶意网页。一般的入侵者根本没有这个本事,也没有耐心去搞这些。反之,有这个本事又有这个耐心的入侵者,通常不会拿这种招数去入侵普通网友(这么做简直是大材小用)。所以,如果你只是一个普通的网友,在前面三个方案中挑选一个,即可。

  估计有些好奇的同学会打听了。什么样的入侵者具有这种实力?什么样的人会成为他们的目标?
  由于本文的篇幅已经很长了,俺稍微调一下列位看官的胃口,在《Web相关的防范(下)》再来八卦这些,同时也介绍一下比“多用户方案”更高级的方案。虽然这种方案很多人用不到,但俺还是会写出来,就当满足一下大伙儿的好奇心 :-)


回到本系列的目录