缓冲区溢出是什么,黑客如何利用它入侵个人电脑?
简单来说,程序未能有效检测到接受的输入数据,从而导致错误,后果可能导致程序崩溃或执行攻击者的命令。有关详细信息,请参见unsecret.org的漏洞利用专栏。
缓冲区溢出的概念
堆栈溢出(也称为缓冲区溢出)攻击是最常用的黑客技术之一。我们知道,UNIX本身以及上面的很多应用都是用C语言编写的,C语言不检查缓冲区的边界。在某些情况下,如果用户输入的数据长度超过了应用程序给定的缓冲区,其他数据区域将被覆盖。这被称为“堆栈溢出或缓冲区溢出”。
一般来说,覆盖其他数据区的数据是没有意义的,最多会造成应用错误。但如果输入数据是“黑客”精心设计的,覆盖堆栈的数据正是黑客的入侵程序代码,黑客就获得了程序的控制权。如果程序恰好以root身份运行,黑客就会获得root权限,然后他就可以编译黑客程序,留下入侵后门,进行进一步的攻击。根据这一原理进行的黑客攻击称为“堆栈溢出攻击”。
为了更容易理解,我们不妨打个比方。缓冲区溢出就像把十磅糖放进一个只能装五磅的容器里。一旦容器装满,剩下的就会溢出到柜台和地板上,弄得一团糟。因为计算机程序的编写人员编写了一些代码,但这些代码没有正确检查目的地区域或缓冲区——一个五磅重的容器,看它们是否足够大,可以完全容纳新的内容——十磅糖,这可能导致缓冲区溢出。如果要放在新地方的数据不合适,到处溢出,也会造成很多麻烦。但是,如果缓冲区只是溢出,这只是一个问题。到目前为止,它还没有破坏性。糖溢出时,柜台被盖住了。你可以把糖擦掉,或者用吸尘器吸掉,恢复柜台的原貌。相反,当缓冲区溢出时,多余的信息会覆盖计算机内存中以前的内容。除非这些被覆盖的内容被保存或可以恢复,否则它们将永远丢失。
丢失信息中有一个子程序列表,可以被程序调用,直到发生缓冲区溢出。此外,提供给这些子程序的信息(参数)也丢失了。这意味着程序无法获得足够的信息从子程序返回来完成它的任务。就像一个人走过沙漠。如果他靠脚印回去,沙尘暴来的时候会迷失在沙漠里,抹去这些痕迹。这个问题比程序只是迷路要严重得多。入侵者用精心编写的入侵代码(恶意程序)溢出缓冲区,然后告诉程序按照预设的方法处理缓冲区并执行。此时,程序已经完全被入侵者操纵。
入侵者经常修改现有的应用程序来运行不同的程序。例如,入侵者可以启动一个新程序,并将秘密文件(支票簿记录、密码文件或库存)发送到入侵者的电子邮件中。就好像不仅沙尘暴把脚印吹走了,后来者也会踩上新的脚印,把我们迷失的那个人引向不同的地方,他一无所知的地方。
缓冲区溢出的处理
你房子里的门窗越少,入侵者进入的途径就越少...
因为缓冲区溢出是一个编程问题,只能通过修复受损程序的代码来解决。如果没有源代码,我们可以从上面“堆栈溢出攻击”的原理中看出,要防止这种攻击,我们可以:
1.打开程序时仔细检查溢出情况,不要让数据溢出缓冲区。因为编程和编程语言,非常难,不适合大量已经在用的程序;
2.使用编译器检查堆栈溢出或给程序添加一些标记,以确认程序运行时禁止黑客故意造成的溢出。问题是不能针对现有程序,对于新程序,需要修改编译器;
3.请经常查看您的操作系统和应用程序提供商的网站,一旦找到他们提供的补丁,请立即下载并应用。这是最好的方法。但是系统管理员总是比攻击者落后一步。如果有问题的软件是可选的,甚至是临时的,从你的系统中删除它。再比如,你家的门窗越少,入侵者进入的途径就越少。
黑客主要从微软漏洞公布表或0days中寻找漏洞,然后根据漏洞编写溢出程序(很多自带扫描功能),包括本地权限溢出和远程权限溢出。编辑后,先用那个扫描易受攻击的主机,然后用它溢出获取权限,控制目标主机。