缓存溢出(Buffer overflow),是指在存在缓存溢出安全漏洞的计算机中,攻击者可以用超出常规长度的字符数来填满一个域,通常是内存区地址。在某些情况下,这些过量的字符能够作为“可执行”代码来运行。从而使得攻击者可以不受安全措施的约束来控制被攻击的计算机。
缓存溢出(或译为缓冲溢出)为黑客最为常用的攻击手段之一,蠕虫病毒对操作系统高危漏洞的溢出高速与大规模传播均是利用此技术。
缓存溢出攻击从理论上来讲可以用于攻击任何有缺陷不完美的程序,包括对杀毒软件、防火墙等安全产品的攻击以及对银行程序的攻击。
最近互联网曝出了史上最大漏洞——DNS缓存漏洞,该漏洞可以让攻击者对DNS服务器的缓存进行攻击替换,从而实现挟持全世界用户浏览器的目的。这里黑客对DNS服务器缓存攻击主要采用的是黑客常用的方式缓存溢出攻击。而什么是缓存溢出攻击?它如何实现这就是本期黑话需要解释的话题。
要明白什么是缓存溢出攻击首先要明白缓存这个概念。缓存又被称为缓冲区,这个区域中存放着常用的或临时的数据,比如当你在上一步里计算过A+B=C,而下一步的工作中又要计算“A+B”此时计算机会采取一个偷懒的方式:直接翻阅上一次计算结果直接获得答案,而不是再去老老实实的计算一次,这样可以避免很多的重复操作。节约程序时间。而前一次计算出来的“A+B”结果“C”是存放在哪里的呢?缓存,这样的结果就是存放在缓存里,当用户去执行相同操作时,计算机就会去缓存里找答案,找结果。
而黑客也正是看上了缓存的这一特性,通过一些方式对缓存里的数据进行溢出,比如向缓存中写入超过缓存允许的长数据,溢出覆盖缓存邻近的数据上,让缓存出现错误。也就是说让用户在一次执行A+B时得到的答案不是C而是其他结果,这就完成了一次成功的缓存溢出攻击。
假如溢出的数据是随意的,那它就不是有效的程序代码,当它试图执行这些随意数据时,程序就会失败。另一方面,假如数据是有效的程序代码,程序将会按照数据提供者所设定的要求执行代码和新的功能。如果存在缓存里的是恶意程序,那么你在执行“A+B”时就触动了这个恶意程序,从而被黑客入侵。