Pages

Friday, 31 August 2012

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

  由于俺比较懒,导致本系列已经中断了2年之久。上星期有读者留言,希望俺尽快把本系列补上。再加上昨天看到新闻,说 Java 7 爆出全系列的高危漏洞。凡此种种,促使俺补上了本系列的第5篇,关于 Web 的防范。这部分的内容比较长,为了避免大伙儿阅读疲劳,俺把《Web相关的防范》分为上下两部分。

★Web安全的重要性


  在聊正题之前,先给大伙儿强调一下"Web 安全"的重要性。
  如今互联网非常普及,大部分的家用电脑和商业电脑,都具备联网功能。而且大部分电脑只要一开机,就处于联网状态。作为电脑的使用者,有相当一部分时间是花在 Web 浏览(俗称网上冲浪)。在这样的环境中,Web 就成了恶意软件(病毒、木马、蠕虫、等)最理想的一种传播媒介。据说如今大部分电脑中招,都和 Web 有关。
  正因为如此,才把 Web 相关的内容,单独汇总一篇。接下来,俺先介绍一下攻击者常见的招数,然后再介绍一下各种应对措施。

★Web 相关的攻击手法


◇嗅探(Sniffer)


  所谓的"嗅探",就是攻击者利用某些技术手段,截获你的网络数据流并进行分析,从而获取某些有价值的信息。通常来说,"嗅探"只是入侵的初始阶段(准备阶段)。攻击者通过"嗅探"获取到的信息,通常用来进行辅助后续的入侵行动。

  举例:
  很多人喜欢通过公共场所的 WiFi 热点上网。假如你使用的 WiFi 热点没有设置为强加密。那么,某个攻击者就有可能利用 WiFi 嗅探工具,截获你的上网流量。如果你正好在收发Web邮件,而且没有通过 HTTPS 加密(好多国内的 Web 邮箱不支持全程 HTTPS 加密)。那么,攻击者就可以看到你的收发的邮件内容。

  不过捏,关于嗅探的防范,不是本文的重点。因为俺之前写一个系列博文《如何隐藏你的踪迹,避免跨省追捕》,里面介绍的各种招数(比如加密代理的使用),已经足以帮你对抗"嗅探"了 :)

◇钓鱼


  "钓鱼攻击"包括很多种,基于 Web 的钓鱼是其中之一。
  由于"钓鱼攻击"属于"社会工程学"的范畴,也不是本文的重点。今后有空的话,单独写一篇"关于钓鱼攻击的防范"。

◇利用浏览器自身的安全漏洞


  在本系列前一个帖子里,俺已经扫盲了"漏洞"、"补丁"等概念以及相关的一些常识。健忘的同学,可以再去温习一下。
  在软件行业中,几乎每一款软件都会有漏洞——浏览器自然也不例外。浏览器的漏洞有很多种,其中一类叫做"安全漏洞"。顾名思义,就是会导致安全问题的漏洞。
  如果某款浏览器的安全漏洞被攻击者发现,而浏览器厂商自己还不知晓。那么攻击者就可以利用该漏洞,发起广泛的攻击。

  举例:
  假设某个黑客研究 IE 的内核,首先发现 IE 存在一个"渲染图片导致缓冲区溢出"的漏洞。由于该漏洞是独家发现,只要该黑客不公开漏洞的信息,连微软(也就是 IE 浏览器的厂商)也会蒙在鼓里。因此,也就没有针对该漏洞的补丁。那么,这个黑客会如何利用该漏洞捏?
1. 首先挑选一张图片(为了吸引人,通常会选一张美女图之类的照片),然后精心地嵌入一段攻击代码在图片内部。
2. 把这张图片放到网上(比如张贴到某个大型论坛,再配上一个吸引人的标题)。
3. 过不了多久,就会吸引到很多网友来围观。如果围观的网友用的浏览器不是 IE,那么他仅仅是看到一张美女图而已,不会有啥异样。如果围观的网友用的正好是有漏洞的 IE 版本,当 IE 打开那张图片的瞬间,攻击代码就会被激活(被运行)。然后,攻击代码会悄悄地在这台电脑中安装一个木马(行话叫"植入木马")。之后,这台电脑就成为攻击者的肉鸡了(攻击者可以远程控制肉鸡,为所欲为)。
4. 攻击者控制了肉鸡之后,既可以拿去卖钱(有专门的地下肉鸡交易市场),也可以偷窥机主的隐私(看看有没有网银、裸照、QQ靓号)。如果控制的肉鸡数量巨大,还可以搞 DDOS 攻击......

◇利用浏览器插件或扩展的安全漏洞


  如今大部分浏览器上,都安装了插件。最常见的插件就是 Flash 插件。另外还有 PDF 插件, Java 插件,等等。
  浏览器的插件也属于软件,也会存在安全漏洞,因此也可以被攻击者利用。一般来说,攻击者对插件漏洞的利用,类似于对浏览器漏洞的利用。

  举例1:
  2011年,美国大名鼎鼎的安全公司 RSA 遭到入侵并且被深度渗透,连看家产品 SecureID 的密钥也被偷了。
  攻击者之所以能得手,就是利用了 Flash 插件的一个未公开的漏洞。洋文好的同学,可以看"这里"的详细报道。

  举例2:
  同样是在去年,有不少 Gmail 用户遭到入侵。但实际上,Gmail 本身并没有出问题。攻击者是利用 Flash 的漏洞,伪造跨站请求,然后在 Gmail 的转发列表中加入一个攻击者的邮箱。之后,被害人收到的所有邮件,都会自动转发给攻击者。相关报道请看"这里"。

  从最近几年的趋势来看,插件漏洞导致的安全问题,要多于浏览器漏洞导致的安全问题。

◇跨站脚本攻击(XSS)


  最后再来说说"跨站脚本"的问题。
  大部分 XSS 攻击,都是利用网站本身的漏洞。所谓的网站,其实就是若干 Web 服务器,上面运行若干软件。前面说了,只要是软件,就可能存在漏洞(包括安全漏洞)。所以,Web 服务器上的软件自然也不例外。
  基于 XSS 的攻击有很多种类型,具体的技术原理也有所差异。考虑到大部分读者不是搞技术的,俺就不深入展开了。仅举一例,让大伙儿有个感性的认识。

  举例:
  比如某个 BBS 论坛存在漏洞——没有对用户发布的帖子内容(此处的"内容",不是指文字内容,而是指特殊字符)进行严格的检查。如果某个攻击者发现了此漏洞,就可以精心构造一个帖子,在帖子的正文中包含一段攻击脚本(通常是JavaScript)。接下来,攻击者把这个帖子发布到该论坛上。
  然后捏,如果有人浏览了这篇帖子,这段攻击脚本就会被激活,然后干坏事......

★如何选择浏览器?


  对于用户来说,浏览器是 Web 的根基。所以,谈 Web 的安全防范,首先得聊一聊如何选择浏览器。
  挑选浏览器有如下几个指标供参考:
1. 浏览器的质量好不好(是否经常出安全漏洞?)
2. 浏览器的更新快不快(爆出漏洞后,是否及时出补丁或新版本)
3. 浏览器的功能强不强

  根据上述指标,俺把市面上常见的浏览器,根据靠谱的程度,划分为如下三类:

◇第一类:Firefox 和 Chrome


  俺个人强烈建议用 Firefox 或 Chrome 进行网上冲浪,因为这两款浏览器很符合上述指标。
质量好
10年前,浏览器市场被 IE 一统天下。但如今捏?IE 在全球的市场份额已经被 Firefox 和 Chrome 占去一半。这充分说明 Firefox 和 Chrome 的质量很好。另外,在安全漏洞方面,Firefox 和 Chrome 也优于 IE。
更新快
说到快速更新,这是 Chrome 的首创。从去年开始,Firefox 也学 Chrome 采用快速版本更新。顺便提醒一下,这两天刚推出的 Firefox 15.0 开始采用后台静默更新。
功能强
说到功能,Firefox 刚出道时,利用丰富的扩展吸引了足够多的用户。如今,无论是扩展的种类还是扩展的下载量,Firefox 是最多的;至于 Chrome,由于出道时间晚,这扩展方面不如 Firefox,但显然比 IE 强多了。

  除了上述这几条,这两款浏览器还具有如下优点:
支持的平台很多
支持三大主流的桌面系统(Windows、Mac、Linux),支持两大主流的移动系统(Android、IOS)。
开源项目
由于开源而且参与的程序员也多,所以软件中的漏洞容易被及早发现。
支持 SPDY
SPDY 是 Google 提出的下一代 HTTP 协议的候选标准(相关介绍在"这里")。SPDY 不但性能更高,而且所有传输内容都采用 SSL 进行加密。如此一来,不但让 GFW 头痛,而且也可以很好地避免攻击者的嗅探。
既然是 Google 发明的协议,Chrome 自然是第一个支持的浏览器。至于 Firefox,跟进也很及时,从 Firefox 11.0 就开始支持 SPDY。
顺便说一下:要使用 SPDY,光浏览器支持是不够滴,还需要服务端支持。如今 Google 所有的服务,都已经支持 SPDY 了。其它一些大型网站(比如 Facebook)也已经开始迁移到 SPDY 协议。希望不久的将来,是 SPDY 的天下。

  以上就是俺推荐 Firefox 和 Chrome 的理由。在本文的后续章节,俺会以这两款浏览器为主,进行介绍。

◇第二类:IE、Safari、Opera


  先说 Safari 和 Opera。这两款的出道时间早于 Firefox 和 Chrome。忙活这么多年,如今的市场份额依然很低,这已经说明某些问题。另外,俺个人觉得 Safari 和 Opera的扩展和插件不够丰富,更新速度也不够快,所以俺不推荐。

  至于 IE,好歹也是市场份额最大的浏览器,为啥俺把它放到第二类捏?有两个原因:
1. IE 跟 Windows 集成得太紧密。IE 如果爆漏洞,通常要等微软发布 Windows 补丁来修复。而 Windows 补丁是按月发布的——太不及时了。
2. 相比 Firefox 和 Chrome,IE 是闭源项目,而不是开源项目。闭源项目由于源代码不公开,而且参与的人不够多,导致潜在的漏洞难以被发现。

  说到这儿,可能有同学会问:天朝的好多网银都只能用 IE(很多网银客户端依赖于 IE 的 ActiveX 控件),咋办捏?别担心,在本系列的下一篇《Web相关的防范 (下)》会谈到此问题的解决方法。

◇第三类:五花八门的国产浏览器


  说到国产的浏览器,有必要谈一下浏览器的内核(也就是浏览器的引擎)。绝大部分国产的浏览器,都不是自己开发内核,而是基于老外现成的内核。常见的浏览器内核有三款,分别是:
Gecko 内核(来自于 Mozilla 开源组织,主要供 Firefox 使用)
Trident 内核(来自于微软,主要供 IE 使用)
WebKit 内核(独立的开源项目,Chrome 和 Safari 使用此内核)
  几款常见的国产浏览器(360浏览器、傲游浏览器、QQ浏览器),使用的是 Webkit + Trident 的双内核模式。
  某些国产浏览器把双内核作为吹嘘的亮点。但在安全层面,双内核反而会带来安全问题。假如你手头的国产浏览器采用了 Webkit + Trident 双内核。只要这两款内核中,有一个爆出安全漏洞,你就有可能中招。也就是说:双内核会增加你中招的概率。
  俺极力反对国产浏览器,还有另一个原因——政治层面的安全问题。朝廷为了监控屁民在互联网上的一言一行,会跟国产浏览器厂商合作,通过浏览器记录网民的行踪。

  举例:
  腾讯当年的TT浏览器,会把用户上网行踪记录在某个文件中。
  至于 360,名声更是臭不可闻。360 浏览器本身就存在收集用户隐私的问题,居然还好意思自称是"安全浏览器"。而且大伙儿别忘了,奇虎公司跟 GFW 一直保持着暧昧的关系哦。

  综上所述,俺个人非常不建议使用国产浏览器。

★如何选择插件和扩展?


  说完浏览器的选择,再来聊聊如何选择插件和扩展。

◇插件和扩展的区别


  首先说说插件和扩展的区别(很多人经常把这两者混为一谈)。所谓的插件,洋文叫 plugin 所谓的扩展,洋文叫 extension
  两者区别如下:

  插件
  在功能上,插件通常是用来渲染页面里的 <object> 或 <embed> 标签;不会增加浏览器自身的功能。
  插件通常实现比较底层的功能,通常以平台相关的代码(本地代码)编写,可以调用操作系统的 API。形式上,插件以动态库(Windows 上就是 DLL 文件)的方式,加载到浏览器的进程内。由于使用本地代码编写,插件通常依赖于特定的操作系统(不同系统的插件不能混用)。

举例:
Flash 插件
媒体播放器插件
PDF 插件
Java 插件

  扩展
  扩展,顾名思义,是用来扩展浏览器自身的功能。所以,扩展可以调用浏览器自身的 API,但是大部分扩展不能调用操作系统的 API。
  一般来说,扩展是跟操作系统无关的。比如 Firefox 的大部分扩展,既可以用于 Windows 平台的 Firefox,也可以用于 Linux 和 Mac 的 Firefox。

举例:
俺去年推荐的 GreaseMonkey,就属于扩展。

◇插件和扩展在安全方面的差异


  由于插件比较底层,一旦出现高危漏洞(比如能够执行本地代码的漏洞),攻击者就可以在操作系统中植入木马。可以这么说,插件出现漏洞,其危险性类似于浏览器出现漏洞。
  相对而言,扩展出现漏洞,其危险性往往不如插件严重,通常也不会导致攻击者植入木马。

◇尽量使用大众化的扩展


  虽然扩展出漏洞导致的危险性不如插件那么高,但也不能掉以轻心。
  俺的经验是,尽量使用知名度高,用户数众多的扩展。这样的扩展,相对来说比较靠谱,成熟度比较高。即使出了漏洞,更新也比较及时。
  反之,对于某些很少人用的扩展,最好敬而远之。顺便提一下。某些层次低的入侵者,甚至会把木马伪装成浏览器扩展,再忽悠一个很花哨的功能,然后放到网上给大伙儿用。

◇尽量避免使用插件


  从上述对比可知,插件如果出现漏洞,危险性很高。所以,俺的建议是:尽量避免使用插件
  不过捏,避免使用插件,说起来简单,但是做起来有点难度。其它插件,说不用就不用了。但是 Flash 插件,实在是用得太广泛了(视频网站用到它,网页休闲小游戏也用到它),估计大伙儿难以割舍啊。
  不幸的是,Flash 插件又最危险。一方面是因为 Adobe 的程序猿,安全意识太差;另一方面是因为 Flash 是用得最多的插件,成为攻击者的重点研究对象。根据2011年的统计数字,去年一年,光是高危漏洞,Flash 就爆了4次——当之无愧地坐上漏洞排行榜的头把交椅。
  面对 Flash 插件,该咋办捏?列位看官,请听下回分解。(下一篇会尽快发布)

回到本系列的目录

版权声明

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

学习翻墙

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


from 编程随想的博客 http://program-think.blogspot.com/2012/08/howto-prevent-hacker-attack-5.html?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+programthink+%28programthink%29