异常中的异常——借助系统异常处理特例实现匪夷所思的漏洞利用
内存的读、写、执行属性是系统安全最重要的机制之一。通常,如果要改写内存中的数据,必须先确保这块内存具有可写属性,如果要执行一块内存中的代码,必须先确保这块内存具有可执行属性,否则就会引发异常。然而,Windows系统的异常处理流程中存在一些小小的特例,借助这些特例,就可以知其不可写而写,知其不可执行而执行。
内存的读、写、执行属性是系统安全最重要的机制之一。通常,如果要改写内存中的数据,必须先确保这块内存具有可写属性,如果要执行一块内存中的代码,必须先确保这块内存具有可执行属性,否则就会引发异常。然而,Windows系统的异常处理流程中存在一些小小的特例,借助这些特例,就可以知其不可写而写,知其不可执行而执行。
本文源自一次与TK闲聊,期间得知成功绕过CFG的经过与细节(参考:利用Chakra JIT绕过DEP和CFG)。随即出于对技术的兴趣,也抽出一些时间看了相关的东西,结果发现了另一处绕过CFG的位置。所以这篇文章中提到的思路与技术归根结底是来自TK提示的,在此特别感谢。
关于CFG的分析文章已经有很多了,想要了解的话可以参考我之前在HitCon 2015上的演讲(spartan 0day & exploit)。要说明的是,本文的内容即为我演讲中马赛克的部分,至此通过一次内存写实现edge的任意代码执行方法就全部公开了。
IE沙箱逃逸是IE浏览器安全研究的一个重要课题,其中有一类漏洞会借助ElevationPolicy设置中的白名单程序的缺陷来完成沙箱逃逸。IE在注册表中有一个和ElevationPolicy类似的名为DragDrop策略设置,这引起了我们的注意。在本文中,笔者将以一个攻击者的视角,尝试各种途径来突破IE沙箱的这一安全策略,通过分析所遇到的障碍,达到对IE沙箱拖拽安全策略进行详细解析的目的。
JIT Spray是一种诞生于2010年的漏洞利用技术,可将Shellcode嵌入到JIT引擎生成的可执行代码中。目前,包括Chakra在内的各JIT引擎几乎都针对该技术采取了防御措施,包括随机插入空指令、立即数加密等。本文将指出Chakra的JIT Spray防御措施的两个问题(分别存在于Windows 8.1及其之前的系统,以及Windows 10之中),使得攻击者可在IE中用JIT Spray技术执行Shellcode,从而绕过DEP。同时,本文还给出了一种利用Chakra的JIT引擎绕过CFG的方法。
最近安全界关注的焦点WormHole是一类不安全的开发习惯所导致的,在PC上类似问题也毫不罕见,只不过很多风险被微软默认自带的防火墙缓解了。希望本文和众多关于WormHole的讨论能获多或少地提高一些开发人员的安全意识。
James Forshaw在2014年11月曾向微软报告过一个Windows Audio Service的本地权限提升漏洞。我们通过分析发现,微软提供的补丁并没有完全解决问题。通过一些技巧的组合,我们可以绕过补丁,继续利用该漏洞。
RowHammer漏洞是DDR3内存中存在的问题,通过频繁的访问内存中的一行数据,会导致临近行的数据发生反转。然而由于其运行需要在目标主机上大量运行特定的代码,实施攻击存在很大的难度。本文旨在研究能否通过Javascript等脚本语言的动态执行触发RowHammer,如果能够成功将极大增加RowHammer的攻击性。为了验证该思路,本文分析了Java Hotspot、Chrome V8、.NET CoreCLR以及Firefox SpiderMonkey的实现机制并给出了可行性分析。