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

栏目: 编程工具 · 发布时间: 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开发安全、智能合约开发安全等相关区块链安全咨询服务。

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

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

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

查看所有标签

猜你喜欢:

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

C语言算法速查手册

C语言算法速查手册

程晓旭、耿鲁静、张海、王勇 / 2009-10 / 49.00元

《C语言算法速查手册》用C语言编写了科研和工程中最常用的166个算法,这些算法包括复数运算、多项式的计算、矩阵运算、线性代数方程组的求解、非线性方程与方程组的求解、代数插值法、数值积分法、常微分方程(组)初值问题的求解、拟合与逼近、特殊函数、极值问题、随机数产生与统计描述、查找、排序、数学变换与滤波等。同时结合这些算法列举了将近100个应用实例,对其进行验证和分析。 《C语言算法速查手册》适......一起来看看 《C语言算法速查手册》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具