曲速未来 透露:恶意软件之自我保护方法

栏目: 编程工具 · 发布时间: 5年前

内容简介:区块链安全咨询公司曲速未来表示:对于黑客来说,漏洞是最有价值的资产,所以一旦发现个漏洞并开发了针对该漏洞的攻击技术,则黑客们就希望能够尽可能长时间的利用该漏洞。本文为作者“曲速未来安全区”,原创文章,转载时请保留本声明及附带文章链接。 内容仅供读者参考,并非投资建议,本网站将保留所有法律权益。

曲速未来 透露:恶意软件之自我保护方法 2019-02-22 17:53 区块链 技术 曲速未来 透露:恶意软件之自我保护方法 1291 收藏

区块链安全咨询公司曲速未来表示:对于黑客来说,漏洞是最有价值的资产,所以一旦发现个漏洞并开发了针对该漏洞的攻击技术,则黑客们就希望能够尽可能长时间的利用该漏洞。

区块链安全咨询公司 曲速未来 表示:对于黑客来说,漏洞是最有价值的资产,所以一旦发现个漏洞并开发了针对该漏洞的攻击技术,则黑客们就希望能够尽可能长时间的利用该漏洞。所以对于黑客们来说,如何能够防止他们所利用的攻击 工具 不被发现就显得非常重要了。

一般来说,黑客们会在以下4种情况下利用漏洞时会被发现:

1. 和其他已经被检测出的恶意软件的功能或原理有重叠部分;

2.因为本身的攻击性能不稳定而被检测到;

3.在漏洞利用时,由于其恶意程序被安全产品模拟的虚拟运行环境所诱骗,从而被发现,例如安全产品所使用的蜜罐技术;

4.恶意软件的开发者自己将漏洞公开了;

本文我们会把重点放在第3点上,即如何防止恶意运行程序被PageHeap监控到。

PageHeap的工作原理

PageHeap是存在于Windows的SDK/WDK中一种分析内存工具,其作用就是很快地检测出内存堆栈的运行是否正常。

为了实现这一点,它用另一个分配器来替换内存堆栈。此分配器将通过VirtualAlloc分配每一次的运行内存,这样每一次的内存消耗将至少减少一个页面的大小(一般情况下为4Kb)。

除此之外,返回的地址也将被减去请求的大小,这样便可导致缓冲区溢出(包括栈溢出和堆溢出)。这样一来,就防止了许多字节数较大应用情境。

所以,PageHeap就破坏了许多恶意软件运行的基础,让大多数漏洞所依赖堆栈内存分配不复存在。比如为了改变进程,而添加过多的代码,就很容易溢出被检测到。

对PageHeap的反检测

一旦PageHeap开始运行,那内存的堆分配将会慢很多。因为,堆分配的初始目的就是尽可能快地分配各种不同大小的内存。

所以,如果PageHeap开始运行,会通过VirtualAlloc向内核请求每一次的分配,这样内存消耗就会越来越多,最后发生内存不足或整体性能下降。另外,这些分配会让内存分配的时间变得很长。

由于window.performance.now()计数器在大多数JavaScript引擎中都可用,因此可以用它来检测这个分配时间。window.performance.now()计数器能实时采集、分析系统内的应用程序、服务、驱动程序等的性能数据,以此来分析系统的瓶颈、监视组件的表现,最终帮助用户进行系统的合理调配。

因为Chrome和Firefox拥有自己的分配器,所以这种方法仅限于Windows。

以IE11和Edge为例,当我们在这两个浏览器总寻找分配不同数量字节的函数时,可以使用Uint8Array,它是一个使用ArrayBuffer创建的TypedArray。

当创建ArrayBuffer时,将直接使用我们指定的值调用msvcrt!malloc。我们将分别使用0x10和0x1000代表小值和大值,大值将始终触发对VirtualAlloc的调用。

下面我们将试着在20ms内为小值和大值分配尽可能多的Uin8Array,代码如下:

function doFor(fun, time) {

var i = 0;

var store = new Array();

var startTime = performance.now();

do {

for(var j=0; j<100; j )

store.push(fun());

i ;

} while((performance.now() - startTime) < time);

return i;}function allocPageBA() {

return new Uint8Array(0x1000);}function allocSmallBA() {

return new Uint8Array(0x10);}var bigRet = doFor(allocPageBA, ALLOC_TIME);var smallRet = doFor(allocSmallBA, ALLOC_TIME);alert(bigRet);alert(smallRet);

不过在上图中,我们还引入了其它的不相关的分配代码,为了解决这个问题,我们会创建一个预先分配Array的对象,然后将对象存储在那里,这样就不会生成不必要的分配代码了。

另外,在保存分配的对象时,为防止垃圾回收站释放这些不必要的代码,可能会发生一些错误:

function NoAllocStore(count) {

this.count = count;

this.array = new Array(count);

for(var i=0; i

this.array[i] = 0x41414141;

}

this.index = 0;}NoAllocStore.prototype.store = function(obj) {

if (this.index >= this.count) {

alert("bad");

throw false;

}

this.array[this.index] = obj;

this.index ;}

我们运行了好几次以上的代码,并比较了两个浏览器在禁用PageHeap情况下的页面配置。

在IE11中分配如下:

曲速未来 透露:恶意软件之自我保护方法

更详细地的信息如下:

曲速未来 透露:恶意软件之自我保护方法

非常明显的是,在启用了PageHeap之后,分布显得更加密集了,这样在分配时间上就更为确定,这可以归因于页面分配比堆分配更耗时。

所以对于黑客们来说,就需要使用系统仿真器或调试器测量每次malloc调用后执行的总指令数(ring0和ring3)。

而在Edge上,分布是非常相似的,但你可以注意到它们更加分离。

曲速未来 透露:恶意软件之自我保护方法

也就是说,根据内存分配的时间原理,黑客们可以在40ms的时间上限内,来分析PageHeap是否存在,如果分配的时间超过了40ms,则你的恶意程序可能就被监控了。

本文内容由 曲速未来 (WarpFuture.com) 安全咨询公司整理编译,转载请注明。 曲速未来提供包括主链安全、交易所安全、交易所钱包安全、DAPP开发安全、智能合约开发安全等相关区块链安全咨询服务。

本文为作者“曲速未来安全区”,原创文章,转载时请保留本声明及附带文章链接。 内容仅供读者参考,并非投资建议,本网站将保留所有法律权益。

  • 曲速未来 透露:恶意软件之自我保护方法

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Data Structures and Algorithms in Java

Data Structures and Algorithms in Java

Robert Lafore / Sams / 2002-11-06 / USD 64.99

Data Structures and Algorithms in Java, Second Edition is designed to be easy to read and understand although the topic itself is complicated. Algorithms are the procedures that software programs use......一起来看看 《Data Structures and Algorithms in Java》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

MD5 加密
MD5 加密

MD5 加密工具

html转js在线工具
html转js在线工具

html转js在线工具