作为一个搞软件的,能有机会经历被黑客攻击、并参与到抵抗攻击方案的讨论与实施中来,我觉得是很幸运的。虽然每天都有很多攻击产生,但是这种攻击能降临到我们这种不是很知名的公司身上,确实非常难得。下面就把我们对攻击相关的一些认识整理一下并记录,我们也是刚开始积累这些经验,所以有什么错误和不足之处,希望大家不吝斧正和补充。
虽然,我们经常看到一些门户网站被攻击,但是攻击者并不局限于只攻击网站,他可以攻击你对外提供的一切服务,比如,攻击你的游戏服务器、攻击DNS服务器等等。
一、为什么会产生攻击?
所有攻击的产生都有其背后的原因,我们能想到的有以下几点:
(1) 黑客小试身手,拿你的服务做试验。
真正有实力的黑客是很少动手的,但是一些刚入门的初级黑客就会经常挑一些不大不小的网站来做试验,而不大不小的网站对于防黑客攻击的经验通常都很少,防范力量也很薄弱,所以攻击这些网站很容易得手。攻击成功了,初级黑客就有了成就感,就有了进一步学习攻击的动力。
(2) 利益目的。
这种攻击通常是非常有实力的黑客策划和实施的,他通常选择一些知名度比较高盈利好的公司。他会在攻击之前联系你们公司的客服,告诉你,如果不向某个账号汇多少钱,就会在今晚几点几分攻击你们的网站,让你们的所有客人都无法访问你们提供的服务。他们很有计划和耐心,如果你不给他钱,他会在接下来的一段时期内,不断地攻击你,特别是挑那些最多客人在线的时候来攻击。
(3) 竞争对手。
正所谓“人怕出名猪怕壮”,当你的网站运营的不错威胁到同行的利益时,你的竞争对手就会想办法来阻碍你了。非常有效的方式之一,就是在你稳步发展阶段来攻击你。通常,你的竞争对手自己没有攻击你的技术和能力,但是,它们会出钱请专业的黑客或黑客团体来攻击你。
二、攻击的层次
OSI标准是7层网络模型,现实中普遍应用的是4层模型,从下至上分别是链路层、网络层、运输层、应用层。除了一些专门的Sniffer程序或黑客程序,我们的网站和应用程序都是工作在应用层。但是,攻击者却可以攻击这4层中的任意一层。黑客软件通常都是基于Raw Socket编写,他们可以构造任意的TCP数据报、UDP数据报、IP数据报、甚至是链路层的数据报,所以,数据报中的一切信息都可以伪装。
1. 链路层攻击:
比如MAC地址泛洪攻击,它可以让交换机的工作出现异常。
2. 网络层:
比如像IP碎片攻击、ARP攻击、ICMP攻击、IGMP攻击、死亡之ping等等。
3. 运输层
运输层的攻击通常是利用TCP协议的漏洞来进行的,比如像Syn flood攻击。
我们的应用程序通常使用TCP来提供服务,即使是网站HTTP协议底层也是采用的TCP通道。所以,有很多著名的DOS攻击和DDOS攻击都是针对TCP进行的。
常见的一些针对TCP进行攻击方式有:
(1)TCP协议堵塞窗口算法攻击技术 : http://sec.chinabyte.com/207/8816207.shtml
(2)TCP RST攻击 :http://baike.baidu.com/view/1044719.htm
(3)低速率拒绝服务攻击原理 : http://blog.chinaunix.com/u/12592/showart_2058363.html
(4)TCP漏洞可导致致命DoS攻击 :http://sec.chinabyte.com/279/8339279.shtml
(5)泪滴攻击 : http://baike.soso.com/v4492311.htm
(6)Land攻击 : http://baike.soso.com/v4194619.htm?pid=baike.box
4. 应用层
著名的CC攻击就是针对应用层的攻击,它伪装成为正常的请求,专门请求那些非常消耗服务器资源的服务,当成千上万的这样的请求过来时,你的服务器可能就忙不过来而挂掉了。
如果是采用C/S模式的架构提供服务(像QQ),当黑客可以破解/解密客户端与服务端之间的通信协议,那么他就可以进行更深入的应用层攻击,甚至可以入侵你的服务器。
三、攻击的类别
如今大部分的攻击都是DOS攻击或其变种DDOS攻击,目的是使你的服务器丧失提供正常服务的能力,即形成“拒绝服务攻击”。我们可以对“拒绝服务攻击”进行一下简单的分类。
(1) 利用系统漏洞
通常是利用操作系统的漏洞来进行攻击,所以保证你服务器的操作系统打上最新的补丁是非常有必要的。
(2) 破解型的侵入
比如,破解操作系统的administrator的密码或者SQLSERVER数据库sa的密码,这种侵入通常是为了窃取服务器上的数据并在你的服务器上留下后门。采用这种方式时,黑客会非常小心以不留下任何痕迹,以便以后随时可以进入。如果真的发生了入侵,黑客可以完全控制你的服务器,DOS攻击就不在话下了。
(3) 暴力型的流量攻击
现在很多的DDOS攻击都是流量攻击,把你服务的带宽塞暴,客人就无法连接到你的服务器了。DDOS攻击需要很多的“肉鸡”参与进行同时发动攻击才能产生显著效果,肉鸡通常隐藏于我们下载的那些免费软件和一些木马中。也许,你用的某个免费好用的工具软件中就隐藏了这样的“肉鸡”程序。
(4) 技巧型的低带宽攻击
这种攻击通常利用系统内核的漏洞(如TCP/IP协议的漏洞),像TCP RST攻击,只需要很小的流量,就能产生很显著的攻击效果。它非常的隐蔽,以至于你的防火墙忽略了它。对于这种攻击,我们需要采取针对性的措施来进行防范。
四、防火墙及监控
除了程序的漏洞需要修复bug和OS的漏洞需要打补丁外,对抗攻击的重任落在防火墙的身上。目前国内知名的专业抗DDOS防火墙有“三盾”:冰盾、傲盾、金盾。在对防火墙做了正确的配置和设定后,我们还需要使用一些性能监控工具来监视各个服务器的运行状态,以便及时发现状况。另外需要使用一些抓包工具,在攻击到来时,抓取数据包进行分析以便确定攻击的类型和方式,只有确定了攻击的类型和方式,才能对症下药。
五、软件架构与攻击
有很多黑客说,没有攻不下的站点。对于一个“孤岛”的站点来说,我是相信这句话的。
我们提供的服务工作于应用层,所以,当攻击者攻击链路层/网络层/运输层时,程序几乎是爱莫能助的。但是,在软件架构方面,我们软件工程师可以为抵抗或缓解攻击助一臂之力。
分布式架构、甚至地域分布式架构,即在世界/全国各主要城市都部署服务节点,这些服务节点通过高速的骨干网或光纤或专线连接起来构成一个统一的系统,是当前很多大的网络运营公司采用的普遍架构。地域分布式架构,不仅解决了因不同地域、不同ISP宽带接入而导致的用户访问服务速度慢的问题,其另外一个重要作用就是对抗DDOS攻击。比如,你在全国分布了100个服务节点,当其中的一个节点受攻击而不能正常服务时,受到影响的用户只占总数的1%左右,如果客户端在连接当前节点失败时,能自动切换连接到其它的服务节点,那么,这1%左右的用户可能都不会明显的服务不正常的感觉。所以,软件架构师在做架构设计时,需要考虑到对(地域)分布式的支持。也许现在用户的数量比较小,也没人攻击你,搞一个“孤岛”就足够应付了。但当有一天发展了,要能够做到在不修改程序的前提下,仅仅通过修改配置和增加节点就能轻松地扩展为(地域)分布式。对于任何一个想做大做强的公司,这点无疑是非常重要的。
地域分布式架构很好,就是要投入巨大。所以,是否实施地域分布式、实施多大规模,应该是与你公司的发展一致的。当你的公司做到像腾讯一样时,你可以在全世界部署服务节点,这点投入对于收入来说就是九牛一毛了。
你也许会说,如果黑客同时攻击你所有的节点了?当你的公司能在全国或全世界部署服务节点的时候,通常,你的公司已经在攻击方面积累了很多的经验,也几乎堵住了所有程序的、操作系统的漏洞。这个时候,黑客就只剩下流量攻击这种暴力方式了,如果他要攻击你所有的节点,那么,他就要付出更大的流量和更大的带宽和更多的“肉鸡”资源,这种可能性就非常小了。当采用暴力攻击方式的时候,大家比拼的就是财力啦 –- 你费了九牛二虎之力用1G的流量来攻击,我就把服务带宽提升到2G。