网站设计如何防范缓冲区漏洞

文章来源:厦门网站设计     发布日期:2020-11-06  打印字号:

网站设计中如何防范缓冲区漏洞

互联网网络技术的进步给人们的生活带来了很大的便利。然而在人们越来越依赖互联网的同时,网络安全形势愈加严峻,大规模网络攻击事件频繁发生。而其中的缓冲区溢出攻击不是一种窃密和欺骗的手段,而是从计算机系统的最底层发起攻击。

缓冲区漏洞

对缓冲区溢出漏洞的攻击,可能导致程序运行失败、系统崩溃以及重新启动等后果:更为严重的是,可以利用缓冲区溢出执行非授权指令,甚至取得系统特权,从而进行各种非法操作。在网站设计过程中预防和避免缓冲区漏洞是我们现在必不可少的工作,让我们先来了解一下如何利用缓冲区漏洞的理论基础。

1.缓冲区漏洞的理论基础

进程分为两部分:控制级和数据级,每个部分占用一部分内存。

当程序内存大小不限制数据级别,级别数据的输入内存大小会发生数据级别数据覆盖控制内存的情况,这个时候如果数据的一些操作系统指令将加载到控制水平,当CPU在下一级控制中执行内存内容时,它将加载恶意指令。(注意:寄存器中的EIP是CPU要执行的下一条指令的内存地址)

然后测试发现从第905位置向下的数据存储在ESP寄存器中,这意味着从第905位置向下的数据可以用shell代码替换,从900-904位置的数据可以用ESP的内存地址替换。

注意:由于每次启动目标程序时ESP内存地址是不同的,因此EIP实际上不可能直接指定ESP内存地址。

解决方案:找到一个每次使用相同内存地址且具有“JMP ESP”的系统进程,将EIP指向该进程中“JMP ESP”的内存地址,然后跳转到ESP。这种间接跳转会导致跳转到ESP。

2.Linux下防止缓冲区溢出漏洞

由于缓冲区溢出和堆溢出,许多程序员设计了内存保护方案,以防止此类攻击:

首先,编译器的改进:Libsafe可以有效防止堆栈缓冲区溢出攻击,但对防止堆缓冲区溢出攻击并没有起到很大作用;编译GCC时,Stackshield会替换一些不安全的选项;StackGuard向堆栈缓冲区和帧状态数据添加一个标识符,当缓冲区溢出破坏存储在堆栈上的EIP时,将销毁并检测该标识符。SSP在Stackgaurd的基础上重新分布堆栈变量,使其难以攻击。自从版本4.1以来,GCC已经实现了一个非可执行的堆栈,这意味着攻击者不可能在堆栈上运行shell代码。

第二种是内核补丁和脚本:非可执行内存页。这种技术的主要思想是堆栈和堆应该是不可执行的,而用户代码一旦加载到内存中就应该是不可写的。PAGe-Exec (PaX)补丁试图通过改变内存分页来提供对堆栈和堆的执行控制。PaX补丁实现了一组用于TLB缓存的状态表,记录内存页是处于读/写模式还是执行模式。当进程请求将内存页从读/写模式转换为执行模式时,PaX补丁会介入,记录并杀死发出请求的进程,包括SEGMEXEC和PAGEEXEC模式。

3.防止Windows下的缓冲区溢出漏洞

(1)基于堆栈的缓冲区越界检测(/GS)。编译器选项/GS是一个由微软实现的堆栈金丝雀。一个隐藏的标识符被存储在eBP和RETN地址用于存储。有很多方法可以绕过/GS:猜测Cookie的值,只适用于本地系统攻击;重写指向调用函数的指针;用特定的令牌替换cookie;覆盖SEH记录。

(2)安全结构化异常处理(SafeSEH)。SafeSEH的目的是在堆栈中使用SEH结构存储来防止覆盖。对于异常处理,SafeSEH保护机制非常有效,但相对复杂。

(3) SEH覆盖保护(SEHOP), Windows Server 2008中的一种新的保护机制。SEHOP是通过RtlDispatchException程序实现的,它遍历exceptionHandler链并确保它可以到达FinalExceptionHandler函数。如果攻击者覆盖了exceptionhandler结构,RtlDispathcException将无法正常到达FinalExceptionHandler函数。

(4)反应堆保护:为了更大的内存释放函数可能使用了假数据指针,微软实现了一系列方法来保护堆栈避免这样的攻击:安全释放和堆的元数据,前释放测试前在你想删除的一块堆堆指针之前和之后一个堆堆块指针指向当前的数据块,在实践中,这个过程很难被摧毁,但不幸的是,这种方法也受限于特定的先决条件,后者是通过堆大小上的数据指针存储在一个身份,在你删除链接的测试。

(5)数据执行阻止(DEP)是防止代码在堆、堆栈或数据段中运行。这一直是一个操作系统的目标,但直到2004年,AMD NX位添加到CPU来实现硬件支持环保局为第一次使用NX比特告诉如果一个页面的内存是可执行的,不久之后,英特尔XD位添加到CPU来完成同样的事情。但是,由于兼容性问题,DEP并不总是启用的。

(6)地址空间的随机分布(ASLR)给进程所使用的内存地址带来了随机性,由于内存地址的改变,使得攻击变得更加困难。Windows Vista及其后续版本都引入了ASLR技术。绕过ASLR最简单的方法是返回到未链接到ASLR保护的模块。

缓冲区溢位攻击会对程序和系统造成严重的危害,因此必须采取有效措施防止缓冲区溢位漏洞。在Linux和Windows操作系统中,通常可以使用漏洞检测、漏洞修复、运行时保护等技术来达到预防的目的。

相关内容:网站建设有效防范口令攻击方法

上一篇:厦门网站设计解决方案
下一篇:厦门营销网站设计详细报价表