2012年9月19日星期三

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

 
 

satan 通过 Google 阅读器发送给您的内容:

 
 

于 12-9-12 通过 编程随想的博客 作者:编程随想

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

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


  在前一篇已经告诉大伙儿"如何选择浏览器"。但是光知道这个是不够滴!因为浏览器也是软件,只要是软件就可能会出现漏洞(包括安全漏洞)。
  即使你按照俺的建议,选择 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. 灵活性不够
  对于"多浏览器"的方案,还有一个缺点是不够灵活。
  因为你要为每一种用途安装一款浏览器,如果你的用途比较多(比如:上网银、普通浏览、上Gmail、看视频),就要装好几款。
  另外,有些用户就喜欢某一款浏览器,你让这些用户装好几款浏览器,他们会觉得不爽。
  对于"灵活性不够"的缺点,大伙儿可以参考接下来要介绍的第二招——"多实例"的方案。

★"多实例"的方案


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


  所谓的浏览器多实例,有时候也称之为 "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 实例,专门用来访问你的 Web 邮箱。那你可以通过如下命令行来启动 Firefox。
"{PATH}\firefox.exe" -P "Mail" -no-remote
  上述命令中,{PATH} 表示你的 Firefox 的安装目录。Mail 表示你要创建的实例名(实例名可以是任意字母组合,你也可以换其它名称)。
  运行完上述命令,Firefox 会启动出一个名叫 Mail 的实例。与此同时,在 %APPDATA%\Mozilla\Firefox\Profiles 下会多出一个名叫 Mail 的目录。
  按照上述方式依样画葫芦,你就可以启动出任意多个 Firefox 实例。为了省事,你可以把上述命令行做成一个快捷方式,放到桌面上,免得每次都敲键盘。
  另外,Firefox 还提供了一个多实例的管理界面,用如下命令可以调出该界面。
"{PATH}\firefox.exe" -p

  多实例的 Chrome

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

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 开始就提供了快速用户切换功能。用它来切换用户还是很方便滴。但是这招有一个缺点:你一次只能看到某一个用户运行的软件,其它用户运行的软件看不到。
  不过没关系,还有一个小技巧。
  假设你建了 2 个用户 A 和 B。其中 A 是主用户,用来完成你日常的工作。B 是上网用户。那么,你可以先登录 A 用户,然后在 A 用户的桌面上,以 B 用户的身份启动浏览器。至于如何启动,请看《使用高权限用户》一文的 "◇切换用户的麻烦" 这个小节。
  对于习惯于命令行的 IT 专业人员,可以用命令行的方式启动指定用户的某个进程。Linux 系统和 Mac OS 系统有 su 命令;Windows 系统有 runas 命令。

◇优点


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

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

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

◇缺点


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

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

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

回到本系列的目录

版权声明

本博客所有的原创文章,作者皆保留版权。转载必须包含本声明,保持本文完整,并以超链接形式注明作者"编程随想"和本文原始地址。

学习翻墙

用国外邮箱发信给help_gfw@yahoo.com即可收到翻墙教程
如有其它问题,用program.think@gmail.com联系俺

 
 

可从此处完成的操作:

 
 

没有评论:

发表评论