windows 7中内存保护机制不包括哪项技术?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了windows 7中内存保护机制不包括哪项技术?相关的知识,希望对你有一定的参考价值。

Windows操作系统为解决栈溢出漏洞的问题引入了一个对策——GS编译保护技术。

GS编译保护技术是通过编译时添加相关代码而实现的,开启GS 编译选项后会在函数的开头和结尾添加代码来阻止栈溢出漏洞的利用。当应用程序启动时,程序的cookie被计算出来(伪随机数)并保存在.data 节段中,在函数的开头这个 cookie 被拷贝到栈中,位于返回地址和局部变量的中间。
函数调用完后系统检测cookie值是否被修改。

1.2 绕过方法
计算/猜测cookie值
覆盖虚函数表
堆栈布局:[局部变量][cookie][入栈寄存器][返回地址][参数][虚表指针]。

覆盖对象和虚函表指针,如果你把这个指针指向一个用于欺骗的虚函数表,你就可以重定向这个虚函数的调用,并执行恶意的代码。

覆盖SHE
SEH句柄用于指向异常处理函数,这个句柄被存在SecurityCookie的上方,这使得攻击者不需要覆盖到SecurityCookie就可以修改SEH句柄指向的位置。

同时替换掉栈中和.data段中的cookie值
通过替换加载模块.data 节中的cookie 值(可写)来绕过栈上的 cookie 保护,并用相同的值替换栈中的cookie。

2 SafeSEH机制
2.1 基本原理
通过覆盖SEH可以绕过GS编译保护,所以微软又引入了一种SEH的安全校验机制——SafeSEH。

通过启用/SafeSEH编译选项来把这种机制应用到所有的执行模块上,当异常处理器被执行前,SafeSEH会验证异常处理链是否被修改过。系统会从头到尾遍历异常处理链表,并逐个验证它们的有效性。

如果覆盖SEH,这将破坏链表并触发SafeSEH机制。

2.2 绕过方法
利用未开启SafeSEH保护的模块
寻找程序中加载的未开启SafeSEH保护的模块来绕过,比如软件本身自带的dll文件。

利用堆绕过
SafeSEH允许其异常处理句柄位于除栈空间之外的非映像页面。如果你将shellcode写在堆空间中 ,再覆盖SEH链表的地址。使程序异常处理句柄指向堆空间,就可以绕过SafeSEH的检测了。

覆盖虚函数表(同上)
3 SEH覆盖保护
3.1 基本原理
SEH覆盖保护(SEHOP)可作为SEH的扩展,用于检测SEH是否被覆写。

SEHOP的核心特性是用于检测程序栈中的所有SEH结构链表的完整性,特别是对最后一个SHE结构的检测。在最后一个SEH结构中拥有一个特殊的异常处理函数指针,指向一个位于ntdll中的函数ntdll!FinalExceptHandler()。

3.2 绕过方法
利用未开启SEHOP保护的模块
覆盖虚函数表
伪造SEH链表
4 数据执行保护(DEP)
4.1 基本原理
数据执行保护 (DEP) 是一套软硬件技术,能够在内存上执行额外检查以防止在不可运行的内存区域上执行代码。

DEP 有两种模式,如果 CPU 支持内存页 NX 属性, 就是硬件支持的 DEP。如果 CPU 不支持, 那就是软件支持的 DEP 模式,这种 DEP 不能阻止在数据页上执行代码,但可以防止其他的 exploit(如SEH覆盖)。

4.2 绕过方法
ret2libc
ret2libc是一种通过retn指令在库函数中寻找可用代码的攻击方式。由于其所有代码都是从libc中找到的,所以不存在不可执行的问题。

关闭进程的DEP (NtSetInformationProcess)
因为 DEP 可以设置不同的模式,操作系统需要能动态关闭DEP,因此系统肯定有API来启用或关闭NX,如果黑客可以找到这个NTDLL中的 API,就能绕过硬件DEP保护。一个进程的DEP设置标志保存在内核结构中(KPROCESS结构),这个标志可以用函数NtQueryInformationProcess和NtSetInformationProcess通过设置ProcessExecuteFlags类来查询和修改,用内核调试器也可以达到同样的目的。

利用可写可执行内存
有些程序可能由于配置的问题或者其他原因,在进程中存在可读可写可执行的区域。如果攻击者可以将shellcode写入这部分空间中并劫持流程,就可以绕过DEP。

利用TEB突破DEP(局限于XP SP2以下的版本)
利用WPN与ROP技术

利用SEH

5 地址随机化(ASLR)
5.1 基本原理
ASLR(地址空间布局随机化)技术的主要功能是通过对系统关键地址的随机化,防止攻击者在堆栈溢出后利用固定的地址定位到恶意代码并加以运行。它主要对以下四类地址进行随机化:堆地址、栈基址、PE文件映像基址、PEB地址。

适用范围:Windows Vista,Windows 2008 server,Windows 7下是默认启用。

5.2 绕过方法
覆盖部分返回地址

虽然模块加载基地址发生变化,但是各模块的入口点地址的低字节不变,只有高位变化。部分返回地址覆盖,可以使得覆盖后的地址相对于基地址的距离是固定的,可以从基地址附近找可以利用的跳转指令。这种方法的通用性不是很强,因为覆盖返回地址时栈上的Cookie会被破坏。不过具体问题具体分析,为了绕过操作系统的安全保护机制需要考虑各种各样的情况。
参考技术A 走七中内存的保护机制不受老师和禁用,这个肯定是不是病患者变换着他们的包括绩效技术是不都是比较好的。 参考技术B windows7系统中保护机制不包括自动调试筛选网络的技术。
这个技术需要网络驱动器进行自动的调试。
参考技术C WINDOWS 7中内存保护机制不包括哪项技术的话,你可以把选项列出来,我才给你可以给你答案 参考技术D 很多技术都是属于不同的测试运动,和其他有很多的不同的措施。 第5个回答  2020-10-30 WINDOWS 7中内存保护机制应该是不会包括杀毒这一轮系统的

window.parent ,window.top,window.self 详解

在应用有frameset或者iframe的页面时,parent是父窗口,top是最顶级父窗口(有的窗口中套了好几层frameset或者iframe),self是当前窗口, opener是用open方法打开当前窗口的那个窗口。

 

window.self

 

功能:是对当前窗口自身的引用。它和window属性是等价的。

语法:window.self

注:window、self、window.self是等价的。

 

window.top

功能:返回顶层窗口,即浏览器窗口。

语法:window.top

注:如果窗口本身就是顶层窗口,top属性返回的是对自身的引用。

 

 

window.parent

功能:返回父窗口。

语法:window.parent

注:如果窗口本身是顶层窗口,parent属性返回的是对自身的引用。

在框架网页中,一般父窗口就是顶层窗口,但如果框架中还有框架,父窗口和顶层窗口就不一定相同了。

 

判断当前窗口是否在一个框架中:

<script type="text/javascript">
var b = window.top!=window.self;
document.write( "当前窗口是否在一个框架中:"+b );
</script>

你应当将框架视为窗口中的不同区域,框架是浏览器窗口中特定的部分。一个浏览器窗口可以根据你的需要分成任意多的框架,一个单个的框架也可以分成其它多个框架,即所谓的嵌套框架。

以上是关于windows 7中内存保护机制不包括哪项技术?的主要内容,如果未能解决你的问题,请参考以下文章

内存的分配方式

内存回收策略

关于Linux下的段错误

Windows认证机制小结

hook技术需要了解windows消息机制吗

九.Windows内核保护机制--TSS