Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 内存随机化作为应用程序安全增强?_.net_C++_Security_Memory_Windows 7 - Fatal编程技术网

.net 内存随机化作为应用程序安全增强?

.net 内存随机化作为应用程序安全增强?,.net,c++,security,memory,windows-7,.net,C++,Security,Memory,Windows 7,我最近看到了一篇微软的文章,文章鼓吹Windows7的新“防御性增强”。具体而言: 地址空间布局随机化(ASLR) 堆随机化 堆栈随机化 文章接着说“……有些防御系统在核心操作系统中,微软Visual C++编译器提供了其他的”,但没有解释这些策略实际上会如何提高安全性。 有人知道为什么记忆随机化会增加安全性吗?其他平台和编译器是否采用了类似的策略?这使得类似(或在后两种情况下返回用户提供的数据缓冲区)的攻击更加困难。是的,它可以在Linux、BSD和Mac操作系统中使用。正如您所预料的那样

我最近看到了一篇微软的文章,文章鼓吹Windows7的新“防御性增强”。具体而言:

  • 地址空间布局随机化(ASLR)
  • 堆随机化
  • 堆栈随机化

文章接着说“……有些防御系统在核心操作系统中,微软Visual C++编译器提供了其他的”,但没有解释这些策略实际上会如何提高安全性。


有人知道为什么记忆随机化会增加安全性吗?其他平台和编译器是否采用了类似的策略?

这使得类似(或在后两种情况下返回用户提供的数据缓冲区)的攻击更加困难。是的,它可以在Linux、BSD和Mac操作系统中使用。正如您所预料的那样,细节因操作系统而异。请参阅维基百科。

它通过很难预测内存中的内容来提高安全性。相当多的缓冲区溢出攻击通过将(例如)已知例程的地址放在堆栈上,然后返回到堆栈来工作。如果不知道相关例程的地址,那么要做到这一点要困难得多


据我所知,OpenBSD大约是第一个这样做的,至少在相当知名的PC操作系统中是如此。

通过随机设置堆栈,可以使普通的缓冲区溢出攻击变得不可能。原因是攻击依赖于将少量调用的可执行代码放入内存中可预测的位置。函数堆栈帧已损坏,其返回地址被攻击者选择的值覆盖。当损坏的函数返回时,执行流移动到攻击者的外壳代码。传统上,此内存地址是可预测的,因此在运行相同版本软件的所有计算机上都是相同的


尽管在Windows 7上实现了高级内存保护,远程代码执行仍然是可能的。最近在CanSecWest,一台运行Windows7和IE8的机器在几秒钟内被黑客入侵。下面是一个现代内存损坏攻击的示例,该攻击利用悬空指针和堆溢出

一个小问题:ASLR是在Vista中添加的,而不是在Win7中添加的。为了支持您的声明,我想阅读更多关于它们的链接。这是对操作系统还是我的应用程序的DLL进行随机分配?或者两者都有?肯定是操作系统DLL。对于代码,必须在链接时指定/DYNAMICBASE以启用它。