CVE-2020-0796漏洞realworld场景实现改进说明

在此前跟进CVE-2020-0796的过程中,我们发现公开代码的利用稳定性比较差,经常出现蓝屏的情况,通过研究,本文分享了CVE-2020-0796漏洞实现在realworld使用过程中遇到的一些问题以及相应的解决方法。 Takeaways我们分析了exp导致系统蓝屏的原因,并尝试对其进行了改进;相对于重构前exp,重构后的exp执行效率与稳定性都有显著提高;关于漏洞原理阐述,Ricerca Security在2020年4月份发布的一篇blog中已非常清晰,有兴趣的读者可以移步阅读,本文不再赘述。初步选择和测试公开exp可用性测试环境:VMWare,Win10专业版1903,2G内存,2处理核心 为了测试和说明方便,我们可以将exp的执行分为3个阶段: 漏洞利用到内核shellcode代码开始执行内核shellcode代码执行用户层shellcode执行根据实际情况,我们测试了chompie1337和ZecOps的漏洞利用代码。根据各自项目的说明文档,两份代码初步情况如下: ZecOpsZecOps的利用代码是在单个处理器的目标计算机系统上测试的;在后续的实际测试中,发现其代码对多处理器系统的支持不足,虽然在测试环境中进行了多次测试中,系统不会产生BSOD,但漏洞无法成功利用(即exp执行第一阶段失败)。 chompie1337chompie1337的代码在漏洞利用阶段则表现得十分稳定,但在内核shellcode执行时会造成系统崩溃。 因此,我们决定将chompie1337的利用代码作为主要测试对象。 内核shellcode问题定位我们在win10 1903中测试了chompie1337的exp代码,绝大部分的崩溃原因是在漏洞利用成功后、内核shellcode代码执行(即exp执行的第二阶段)时,申请用户空间内存的API zwAllocateVirtualMemory调用失败。在我们的多次测试中,崩溃现场主要包括以下两种: Crash_A backtraceCrash_B…