分类：电脑/网络-互联网-上网帮助
问题：b8事件听说是好多年前的事了，是百度不满意某网站而对它进行恶意攻 
听说是好多年前的事了，是不满意某网站而对它进行恶意攻击的吧，是能简单介绍一下，那８是８８４８网站吗？？？
回答：最近、报纸上风传着这样的一个新闻：“河北省唐山某钢铁公司的一名普通工人徐某，利用黑客工具Ipxsrv控制6万台电脑组成“僵尸网络”，攻击北京某音乐网站，带来700余万元的经济损失”。粗看新闻，6万台电脑（有的媒体甚至报道说有十万）的数字真让人吃惊，但仔细分析，其实完全可能，操做法也相当简单，而且危害无穷。根据新闻媒体的报道，加上对BKDR-VB.CQ木马程序（文件名：ipxsrv.exe）的分析，我们来推测一下整个攻击具体流程，再尝试着看看他的实现过程和相关的防护办法（仅仅是个人推测，和实际情况略有所不同，目的只是为了技术讨论）。 攻击推测北京某音乐网站的发展危及了徐某音乐网站的访问人数，引起其个人收入下降，迫使其采取措施以避免这种情况继续恶化下去。于是徐某决定攻击北京的音乐服务器，试图通过攻击达到让竞争对手的服务器不能正常运作，使对方的客户越来越少，想对应的，就会有相当一部分客户会吸引到他的服务器上，增加其访问人数，提高网站效益和个人收入。但是根据测试，北京音乐网服务器的安全措施做得非常的好，没有什么可以利用的漏洞，迫使他只能使用DDoS攻击，但是由于硬件防火墙的功能强大,他的SYN攻击还有ACK攻击对北京音乐网都没有很好的效果,作为攻击方的他顿时陷入束手无策的境地。正当徐某头疼之时,一种新的DDoS攻击思路在网络上出现:CC(利用HTTP代理模拟多客户同时访问,造成服务器瘫痪)。加上他以前写 ;删除自己本身。IPXSRV.EXE运行过程如下:1.检测系统是否已经存在IPXSRV.EXE木马,如果存在,自动退出,避免重复感染。2.根据随机数判断IPXSRV.EXE新文件名，一定的概率下会自动改名为NWLINK.EXE。3． 将本身写入注册表HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\Current Version的Run\和RunServices\中，这样在系统重起时自动运行。4． 每隔20秒判断是否有QQ聊天框，有就组合出一些吸引人的话语然后自动Alt + S发送，当然话语都使用的非常有诱惑性，比如：“想看美女吗？请到 5． 每隔30分钟就访问网络上的  的IRC，告诉服务器自己系统的版本，IP等，方便被控制。6． 当接到ICMP攻击指令，会按要求不停发送ICMP包到指定服务器。7． 当接到Proxy指令，自动在指定端口开放HTTP代理，以便在必要的时候帮助徐某隐藏身份。8． 当接到HTTP攻击指令，会按要求不停地模拟IE浏览器访问指定的WEB服务器的指定页面。由于程序使用QQ作为攻击载体，几乎所有QQ的用户都存在着被感染的危险（记得有个科学研究表明：任何一个人通过七个人可以与世界上任何一个人取得联系）。这样，所有使用QQ的用户或许因为好奇，或许因为被骗，或许就是不小心点到，加上受害者电脑中的Internet Explorer没有打上相应的补丁，访问了这个的网页，就不幸地被装上了木马。不出徐某的意料，被感染的机器呈几何级数增加：短短几天，IRC服务器就收集到不计其数的中毒机器的报告，同时在线的中毒机器达到了4W之巨，著名的O***数据库厂家的WEB服务器不幸地被列为测试对象，指令一发出，服务器就明显变慢，随着时间的推进，越来越多的僵尸机器收到指令开始攻击，WEB服务器无法访问了，最终无法连接！测试成功，马上将目标改成北京的某音乐网，噩梦开始，北京某音乐网尝试在登录中增加验证、使用注册码、将页面改成静态、增加网络投入、增加服务器规模等方法，最后由于徐某的傀儡机器数目巨大，北京音乐站不论用什么模式，都无法防御——网站彻底陷入瘫痪。傀儡机器网络控制图如图1所示：图1小提示：攻击者只需要把攻击指令写成指令发送到WEB服务器的指定页面，而不需要一个个的通知傀儡机器，傀儡机器的IpxSrv.Exe会在访问了WEB服务器后按照指令要求攻击指定服务器。WEB攻击原理根据以上推测，相信大家也大概了解了整个攻击的流程和事情的前因后果，下面我们开始从技术的角度来分析一下这个事件的技术成分以及攻击者所用到的黑客技术。1．隐蔽性在本次攻击事件中，攻击者只需要提交一下攻击指令，不需要参与直接攻击，大大提高了自身的隐蔽能力。对于被攻击者来说，所有的访问请求全部合法，来自于不同的合法的IP，而且在服务器上看，访问者使用了不同的操作系统，不同的浏览器，没有什么共性，根本没有办法把攻击者与真正的访问者区分出来。小提示：其实傀儡主机也是真正的访问者，只是他们是IpxSrv.exe在用户不知道的情况下偷偷访问的，但是对于服务器来说无法区别。2．高效性我们来计算一下攻击效率比：假设有6万台傀儡机器在线，每30分钟到指定服务器获得一次指令，平均33次/秒的访问（对于WEB指令机来说，指令只是一个文本文件，这样的小小访问量可以忽略不计），然而被攻击的机器呢？由于每个傀儡机器每秒访问一次，至少达到了60000次/秒的访问量（这是什么数量级？不论被访问的是什么文件，恐怕也就Google和Baidu这样级别的服务器能支持）。从指令的发出到被60000台傀儡接受，仅仅只需要30分钟就能实现。在攻击的过程中不断有傀儡机器下线的同时也会有新的傀儡机器上线，由它们组成的攻击源源不断。3．概念解释有的朋友会说我看到许多论坛的同时在线人数都达到了2000以上，但还是很快，这说明服务在2000次/秒的访问中能够运行的很好。这里我就需要对HTTP拒绝服务做一个数学解释了：1) 论坛的在线人数有2000，并不表示2000个人都在同一个时间访问论坛，只是说最近活动在论坛上的有2000人（许多论坛把20分钟内活动过的朋友都算在在线人数），我们假设每人每分钟看一个页面，那么平均下来，每秒同时访问的用户最多才仅仅30+，这个数目当然可以支持了，而且有的论坛甚至定义在最近60分钟内有访问过的都算，而实际上很多用户仅仅来看看就走，实际同时访问人数还会更低。2) 那么是不是说可以通过访问的人数判断服务器的性能呢？不能说一定是，因为文件类型不同，需要消耗的服务器资源也大不一样，不同的文件没有可比性。比如一个10KB的TXT文件和一个不到100字节的ASP文件，你说谁更消耗系统资源呢？这里拿一个特殊的ASP代码做个示范:<%do while 1=1 Loop%>这段代码一旦运行，至少会导致服务器有1分钟的时间出现CPU占用100%的情况。3) 总的来说，系统资源占用：外部联系（比如ICP访问DNS服务器判断一个域名是否被使用）≥数据库访问≥动态运算页面≥静态页面。4) 对于资源消耗导致服务器拒绝服务的计算模型：假设服务器的资源为1000/秒，就是每秒能提供1000单位的服务资源，某页面需要消耗资源为3，那么当访问的人数达到333时，服务器正好在一秒内能处理完，这样的情况大约达到上千人的论坛的处理能力。假如出现1000人同时访问，将使得服务器耗费3秒才能处理完这样的请求，但是如果1000人/秒的频率持续下去，等到第3秒时，服务器刚处理完第一秒的1000人，队列里面已经积累了2000人的请求，这又需要6秒来完成，如图2所示。图2这样一来，服务器的处理能力明显下降，第一秒的用户等待了3秒获得计算结果，第2秒的用户需要11秒，第3秒的用户需要10秒，第4秒的用户需要9秒，第5秒的用户需要36秒……第14秒用户需要27秒，第15秒用户需要105秒……时间阶段性的几何基数递增，最终结果就是服务器当机，任何用户均无法访问。小知识：傀儡机访问WEB和IRC来实现对控制端的反向访问的范例可以参看“灰鸽子”借用 的转向功能；对于多HTTP客户反问效果可以参看下面的DDoS工具CC的示范，利用CC可以很好的用单机模拟出2000用户同时访问的效果。IPXSrv的替代品CCCC是一种利用HTTP代理模拟多客户同时访问的工具，从最老的版本ProxyFTP(VB)到最新的CPD(VC Console)经历了不断的改进，可以实现对WEB服务器的压力测试，甚至直接导致拒绝服务（与著名的压力测试软件WEBStress相比，效率更高，资源消耗少得多，但是分析功能也差了许多），界面如图3所示。图3小提示：Refer:表示访问者来自于什么页面，它告诉WEB服务器访问者是在哪个页面中点击链接访问过来的，比如图中模拟的参数将告诉对方WEB服务器：“我在 Mozilla里面的内容会告诉WEB服务器访问者的电脑浏览工具是什么类型，比如例图中模拟的访问者使用的是Windows 2003，浏览器为Internet Explorer 6.0Cookie就是传说中的小甜点了，网站用来标识与客户的交流通讯。根据上面提到的HTTP知识我们很容易就能填好需要模拟的用户信息，上图的例子就是一个对日本论坛的测试参数。回到本事例中，我们应该开始填写攻击的参数了：Proxy List就是代理列表格式为<IP>:<Port>，使用Load可以从文件导入，Clear可以清空列表，Save可以把当前列表内容保存到文件，方便下次使用。Attack list就是攻击的目标页面，添加格式为<G|P>URL，G表示GET模式，P表示POST模式。图中的例子表示用GET模式访问如下的URL： 这里+N4程序会自动转变成为4个随机数字（需要TYPE中的RND被钩上，否则系统将直接发送+N4到目标WEB服务器）。CC的随机参数也是非常灵活的，由于许多网站对访问频率高的页面会使用Cache技术，减少对数据库的访问，这就需要不停的访问不同的页面。随机参数格式为“+Xn”，“+”是标识符；X是随机的类型，N表示数字，S表示大写字母，s表示小写字母；n是一个数字，表示要随机生成的长度，范围为1~9。比如随机3个大写字母：+S3；随机一个带大写小写字母的字符串：+S3+s2+S5。还有一些就是系统参数，Sleep一般不需要修改，Thread表示将要增加的线程数目，点击Attack将增加相应的攻击线程，灰色的数字表示目前已经运行的线程。按图片中的参数设置好，只要代理都是有效的，10秒后网页出现空白，论坛无法打开，60秒后连接困难，300秒后服务器已经完全无法连接。这样的攻击很容易实现，只要找到一定数目的代理就可以在瞬间模拟出成百上千的用户同时访问网站，下面是几个CC的分析参数：测试环境：C4 1.7G，DDR 256MB，LAN 10Mb，CPD开600线程，使用2000个有效代理测试结果：实际连接数60个/秒，CPU时间<20%，内存使用<10MB。被测试服务器：双CPU 1G内存 Windows 2003，LAN 100Mb被测试服务器结果：模拟访问HTML静态页面效果不明显，模拟访问ASP访问数据库页面的访问几乎导致服务器的崩溃，已经无法正常提供服务，时间一长，连接成功率<5%，连接成功马上掉线>90%，能成功获得数据<1%。B8事件“僵尸网络”攻击大家很少见到也难以想象，总觉得离自己十分遥远（许多网站被攻击后保持沉默，害怕事件被外界知道后客户的流失，北京某公司机房就因为DDoS长时间无法正常提供网络服务使得客户大量流失）。这里有一个非常类似僵尸网络攻击的例子，这就是今年1月各大报纸大炒特炒的B*攻击8*网站的事件（我将其简称为B8事件），利用了www. B*.net的WEB服务器的特殊代码使得当时几乎所有中国网民都在不知道的情况不停地访问www.8*.net网站，导致www.8*.net网站由于过多的访问被拒绝服务。从技术实现上，其实这就是僵尸网络，唯一的不同点在它没有给普通的“傀儡”计算机安装任何软件，而傀儡还是乖乖地按它的要求去攻击，真高明！曾几何时，中国互联网的唯一评价标准变成了访问量，个个站长为了让自己的站更具人气，都使用了一个叫做“交换计数器”的技术手段来达到增加访问量的目的：在一个页面放上100个不同站点的计数器（图片计数器将图片大小设置为0X0），而用户在浏览器上看不到它们的存在。在这样的设置下，一个用户访问一个网站，将在不知情的情况下给其它100个网站分别带来1的访问量，加入交换的网站计数器的日访问量能有着上百倍的提升，使得许多鲜有问津的网站也拥有骄人的访问量。不过这个手法随着统计分析系统的出现，和人们的理性化意识的提高，已经慢慢消失了。B搜索引擎把这种古老的计数器加速方法变成了DDoS工具，简单描述如下：1． B搜索引擎提供了一个非常受人欢迎的网络Search工具，大家可以通过这个Search工具查找自己喜欢的信息，因而纷纷主动在自己的页面上包含B搜索引擎提供的一段代码（JavaScript代码，能在包含该代码的页面上显示Search，给所有来访问的朋友提供方便，该代码被广泛的使用，给访问者带来方便的同时也为B搜索引擎做了广告，作为报酬，显示代码的网站将在搜索结果中排名靠前）。2． 不知道出于什么原因，B对8公司有了意见，要给他点颜色看看，又不知道怎么样才好。3． 于是，B搜索引擎在Search工具的代码中偷偷放入了这样一行<IMG height=0 src="http://www.8*.com" width=0 border=0></IMG>小知识：以下代码不会在浏览器上显示图片，但却会发送一个请求给目标服务器：<IMG height=0 src="http://www.8*.com" width=0 border=0>height=0表示图片高度为0，width=0表示图片宽度为0，border=0表示图片的边框大小为0，src=http://www.8*.com表示图片放在www.8*.com的服务器上，访问者的浏览器自动下载图片并显示。与此类似的，还有一种不会在浏览器上显示的帧：<frame src="http://www.8*.com" width=0 height=0 frame border=0></frame>表示一个高度为0，宽度为0，边框大小为0的一个帧。4． 这样一来，所有含有Search工具的页面被调用时都会要求访问者去访问http://www.8*.com的页面（由于该代码的广泛使用，有的上网用户在其访问的每个页面时都运行了这个代码，也就在他浏览任何网页的时候都访问了次8公司的首页），马上给8公司的服务器带来了数以千万计的额外访问量，数百倍上千倍地远远超出了8公司服务器设计的承受能力，服务器立即崩溃！5． 拒绝服务形成，接下来的故事请看新闻吧。采用这样的方法，你只需要一个文件，短短几行代码，就可以通过访问该文件的用户，在他们不知不觉地情况下给你的目标带来数十倍、甚至上百倍的访问量，当该文件的访问量达到一定数目时，给对方带来压力将是非常可怕的，而且，这种攻击由于攻击源都是无辜的普通用户，无法在防火墙上面做任何设置，可以可以说是防不胜防。从服务器角度防御道高一尺，魔高一丈，有矛必有盾，这样的攻击方式很难防护，但是也绝对不是不能防护。下面讨论一下防御方法。1. 利用参数变换保护数据库访问频率：对于使用到数据库或者其它文件资源的动态页面可以使用参数变换，比如我们设定函数Encrypt(id)把id转化成String的参数，我们的页面 p?id=1235就变成了 p?id=acehj，我们可以通过Decrypt (string)进行解码，把它们解回成id。这样一来，客户很难伪造一个合法的参数访问页面，页面在解码的过程中利用验证码就拒绝了非法客户的访问，避免了恶意客户的数据库访问，通过牺牲一点点的CPU计算时间获得了数据库访问的安全。大家先看几个例子看看能不能猜出里面的函数变换:139adkl、110abba、80hag、11234567890abdfhjlnprjs。看出来了吗？Encrypt和Decrypt的代码实例如下:<%Function Encrypt (id)StrR=""Chk=0For x=1 to len(id)StrR=StrR&chr(95+x+cint(mid(id,x,1)))Chk=Chk+Cint(mid(id,x,1))NextChk=Chk mod 26StrR=StrR&chr(95+chk)Encrypt=StrREnd FunctionFunction Decrypt(str)StrR=""For x=1 to len(str)-1u=(asc(mid(str,x,1))-x-95)StrR=StrR&uChk=Chk+uNextChk=Chk mod 26if right(str,1)<>chr(95+chk) then response.write "验证错误"response.endend ifDecrypt=StrREnd Function%>调用Encrypt(1235)得到acehj，调用Decrypt("acehj")得到1235，调用Decrypt("aech?")时，只有？为j时能够得到正确结果1234，除此之外的任何字符都将返回“现验证错误”。通过这样的保护变化，客户访问的就是 p?id=acehj，无法看到实际id为1235，随机生成的id又无法通过验证过程，就无法通过软件模拟来制造多线程的合法访问，避免因为非法访问使得数据库资源耗尽而拒绝服务。另外，在这样的保护下，SQL Injection漏洞也得到了很好的防御。这仅仅是个示范代码，这个函数还有许多可以改进的地方：1) 可以增加函数变化的强度，降低函数被猜测出具体过程的概率。2) 可以把函数运用到Cookie中，对于Cookie做相应的变换，增加防御手段的隐蔽性。3) 可以把客户IP加入函数运算过程，不光增强了函数强度，还达到防止盗链的功能。一旦用户改变IP或伪造COOKIE及ID、马上就发现。4) 可以把时间加入函数运算，不光节约服务器的存储空间，而且服务器只要通过对客户发送的字符串进行解码就能判断出客户信息。程序可以改进的地方还有好多，虽然能从多方面保护服务器，但也要注意使用方法，比如第四点提到的对空间的节约，就需要考虑空间和时间综合因素（时间、空间使用成反比，根据服务器的具体性能对二者进行调整）。2. 在代码层提高程序运行效率，增加服务器运行能力，减少被拒绝服务的可能：程序代码非常关键，实现同样的功能，代码的好坏，效率差别极大，这里有两个添加数据的代码大家比较下：代码一<%sql="select * from users"rs.open sql,conn,1,3 dnewrs("username")="TEST"rs("password")="!23456"rs.update ose%>代码二<%sql="insert into users (username,password) values ('TEST','!23456')"rs.open sql,conn,1,3%>明显的，代码二的效率要比一高得多，特别是当数据库体积较大或者进行多次的重复操作时，效率的提升是相当可观的。代码的好坏决定了程序的优劣，决定了服务器所能支持的客户数，进而决定了服务器抗击DDoS的能力。3. 限制代理用户的访问：对代理用户访问的限制，可以有效地防止黑客利用CC之类的工具进行攻击；限制黑客对代理的使用，增 被暴露的可能。所以禁用代理访问能够降低被攻击的可能。限制代理的示范代码如下:<%Dim fsoObjectDim tsObjectdim fileif Request.ServerVariables("HTTP_X_FORWARDED_FOR")="" then response.write "系统正常"response.endend ifSet fsoObject = Server.CreateObject("Scripting.FileSystemObject")file =  ppath("CCLog.txt")if not  leexists(file) then eatetextfile file,true,falseend ifset tsObject = fsoObject.OpenTextFile(file,8)tsObject.Writeline Request.ServerVariables("HTTP_X_FORWARDED_FOR")&"["&Request.ServerVariables("REMOTE_ADDR")&"]"&now()Set fsoObject = NothingSet tsObject = Nothingresponse.write "系统维护中."%>这个代码能够识别出大部分的代理访问（有代理访问就显示“系统维护”，并记录真实IP[代理IP]到文件“CCLog.txt”）。这段代码可以按用户自己的要求修改后写在 p里面，就能起到作用了。当然，代理是个双刃剑，对代理的限制也一样，禁用代理访问会给一部分用户的正常访问带来不便（比如网吧用户），所以要考虑后使用。4. 使用Https协议：使用Https协议可以说好处多多，可以对传输数据的安全性给予充分的保障；由于Https协议的复杂性，能对Https协议进行攻击的攻击也相对少得多；Https如果使用的非标准端口，基本可以杜绝所有的代理攻击（许多代理只允许CONNECT Https的标准端口443端口）；还避免了多线程的下载，降低服务器压力。但是由于Https协议的复杂性，服务器性能相对Http协议来说会低些；对客户电脑性能的要求也有所提高，例子： 5. 减少动态文件的使用，增加静态文件使用：动态文件可以给大家带来丰富多彩的页面，充分发挥设计者的聪明才智，实现许多有用的功能，还能节省页面设置开发时间。但方便的同时带来就是服务器资源消耗的提升（需要访问数据库的动态页面比显示同