*本文中涉及到的相关漏洞已报送厂商并得到修复,本文仅限技术研究与讨论,严禁用于非法用途,否则产生的一切后果自行承担。

0.png

0×00 写在前面的话

2019年3月25日,苹果发布了macOS Mojave 10.14.4和iOS 12.2。这两个版本修复了大量的安全漏洞,其中包括QuartzCore(即CoreAnimation)中的CVE-2019-8507。关于苹果更新的详细信息,可以参考这篇【公告】。

在这篇文章中,我们将对macOS中的漏洞CVE-2019-8507进行详细分析。

0×01 漏洞概述

QuartzCore,也就是CoreAnimation,它是macOS和iOS用来创建动画场景的图形框架。CoreAnimation使用了一种独特的渲染模型,这种模型会以单独得进程来进行图形化操作。在macOS中,这个进程为WindowServer。在iOS中,这个进程为backboard。

QuartzCore中名为com.apple.CARenderServer的服务通常被称为CARenderServer。这个服务macOS和iOS中都有,可以直接从Safari沙盒环境中访问。但是,在macOS上,当QuartzCore在处理一个CA::Render::Decoder::decode_shape()函数中的图形对象时,就会发生内存崩溃(漏洞),这将导致应用程序意外终止运行。

下面给出的是Windows Server进程在遇到问题时的程序崩溃日志:

1.png

2.png

3.png

4.png

0×02 PoC概念验证

接下来,我将演示如何使用我们的PoC来触发该漏洞。PoC代码如下所示:

5.png

6.png

7.png

原始Mach信息跟修改后的Mach信息对比如下图所示:

8.png

通过对二进制源码进行分析后,我们发现只需要将偏移量0xB6的在一个字节由0×06修改为0×86,即可触发该漏洞。

如PoC代码所示,为了发送专门制作的Mach消息来触发该漏洞,我们首先需要发送一个msgh_id为40202的Mach消息,服务器中对应的处理器为_XRegisterClient,然后获取每一个新连接客户端的链接ID。

当我们获取到了连接ID之后,我们就可以在特质的Mach消息中偏移量0x2C的位置设置这个值了。最后,我们只需要发送这个Mach消息就可以触发该漏洞了。

0×03 漏洞分析

接下来,我们将使用LLDB来对漏洞进行动态调试,并分析导致漏洞产生的根本原因。注意:我们需要通过SSH模式来调试WindowServer进程。

通过对崩溃日志进行分析,我们可以获取到崩溃线程的堆栈回溯信息,并使用下列命令在CA::Render::Server::ReceivedMessage::run_command_stream函数处设置断点:

9.png

conn_id的值可以通过在PoC代码的第86行设置断点来获取。

断点命中后,我们可以直接读取特制Mach消息的缓冲区数据,寄存器r13指向的就是特制的Mach消息。

10.png

函数CA::Render::Decoder::decode_object(CA::Render::Decoder *this,CA::Render::Decoder *a2)可以用来解码这种类型的对象数据。开始于偏移量0x70000907dd52处的缓冲区数据为一个图片对象(绿色高亮标记):

11.png

下面的代码段可以用来解析CA::Render::Decoder::decode_object函数中的图片对象数据:

12.png

下图显示的是函数CA::Render::Image::decode(),我添加了部分注释方便大家查看:

13.png

我们可以看到偏移量0x70000907dd52处的一个字节从0×06变为了0×86,所以变量v4现在等于0×86。接下来,程序会跳转到LABEL_31来执行其他分支代码,因为变量v4已经大于0×20了。在LABEL_31结尾处,程序会调用CA::Render::Texture::decode(CA::Render::Texture *this,CA::Render::Decoder *a2)函数来继续处理后续数据。

14.png

我们可以看到,它会调用函数CA::Render::Decoder::decode_shape来处理Shape对象数据。

接下来,我们看看其他的数据集是如何处理的。

15.png

我们可以看到变量v2等于0×02它可以给缓冲区分配一个8字节大小的区域。最后,它会调用函数CA::Render::Decoder::decode_bytes来解码多个字节的数据。

16.png

导致该问题存在的根本原因在于CA::Render::Decoder::decode_shape函数缺乏限制验证机制。下面我们看看苹果方面是如何修复这个漏洞的:

17.png

0×04 总结

根据苹果的安全公告,这个漏洞只会影响macOS。该问题存在于QuartzCore中,由于缺少输入验证限制,因此当QuartzCore在处理一个CA::Render::Decoder::decode_shape()函数中的图形对象时,就会触发该漏洞。通过对比补丁代码,我们可以看到苹果通过增强输入验证机制修复了该问题。

0×05 受影响版本

macOS Mojave 10.14.2

macOS Mojave 10.14.3

0×06 漏洞分析环境

macOS 10.14.2 (18C54) -MacBook Pro

0×07 时间轴

披露日期:2019年1月1日

通知日期:2019年1月3日

确认日期:2019年3月20日

发布日期:2019年3月25日

0×08 参考资料

1、 https://support.apple.com/en-us/HT209600

2、 https://www.fortinet.com/blog/threat-research/detailed-analysis-of-macos-ios-vulnerability-cve-2019-6231.html

* 参考来源:fortinet,FB小编Alpha_h4ck编译,转载请注明来自FreeBuf.COM

*本文中涉及到的相关漏洞已报送厂商并得到修复,本文仅限技术研究与讨论,严禁用于非法用途,否则产生的一切后果自行承担。

1.jpg

漏洞概述

在这篇文章中,我们会跟大家介绍这个NVDIA GeForce Experience(GFE)中的远程命令执行漏洞-CVE-2019-5678。版本号在3.19之前的GFE都会受到该漏洞的影响,攻击者可以通过诱骗目标用户访问钓鱼网站来利用该漏洞。

NVIDIA GFE

NVIDIA官方网站将GeForce Experience描述为“捕获和共享视频、屏幕截图和与朋友的实时流,并使您的驱动程序保持最新并优化您的游戏设置”的一种方式,它是与Geforce产品一起安装以给用户提供更多丰富功能的应用程序。

漏洞的发现

MWR实验室在其发布的安全报告中指出,GFE在运行时会开启一台本地API服务器,并允许控制GFE的各个功能。当你在GFE的GUI接口中修改一个设置之后,程序便会调用这个本地API。接下来,我们需要研究一下这个API服务器的运行机制,看看有没有什么有趣的功能。由于GFE启动的服务器为NodeJS Express,因此我们可以在“C:\Program Files (x86)\NVIDIA Corporation\NvNode”中找到大量相关的JavaScript源文件。

为了向服务器发出有效的请求,这里需要一个包含了随机令牌的自定义HTTP头,这个随机令牌会在程序启动的时候生成,并存储在“%LOCALAPPDATA%\NVIDIACorporation\NvNode\nodejs.json”中。文件名nodejis.json是静态命名,存储位置不会改变,因此定位这个文件会非常容易,文件内容大致如下:

2.png

分析认证Header

首先,我们需要弄清楚是否可以绕过身份验证机制来向API发送未经身份验证的有效请求。查看index.js文件的第185行代码,我们发现这里所谓的header检测,只是通过对比文件中包含的密钥值和自定义安全Header值来实现的。如果对比失败,则会返回403错误响应。

3.png

暂时我还没找到绕过它的方法,因为这种验证机制比较直接。不过值得注意的是,CORS的使用方法。在第181行代码,“Access-Control-Allow-Origin”头在所有的请求中都会被设置为“*”,这也就意味着如果我们能够以某种方式获取到秘密令牌,那么攻击者就可以控制服务器能接收的请求来源了,并且直接向服务器发送有效请求。此外,攻击者还可以使用XHR请求以及自定义安全Header来发送请求。

API测试

如果想要成功向API发送请求(例如执行任意代码),我们就可以充分利用和控制这些API了,通过grep命令搜索所有源文件中关于“exec”的代码,我们找到了NvAutoDownload.js这个文件:

4.png

大家可以看到,节点“/gfeupdate/autoGFEInstall/”可以接收一个POST请求,Content-Type会被设置为“text/*”,并最终向请求body中注入任意文本内容,而childProc函数会将这些命令以操作系统命令的形式执行:

5.png

上述请求可以成功转型calc.exe,这都不是什么问题,因为攻击者只需要知道文件中的秘密令牌即可。所以,下一步就是要找出一种方法来读取文件中包含的秘密令牌值。

漏洞利用

如前所述,由于这里的CORS策略的实现方式,即允许接收任何来源的请求,攻击者就可以通过浏览器来执行攻击了。当然了,攻击的前提是知道秘密令牌值,而唯一的方法就是欺骗用户上传包含了秘密令牌值的文件。由于这个文件使用的是静态路径以及静态文件名,所以攻击者可以轻松利用浏览器来实现这一点,而且只需要用户按几个键就可以实现命令注入的。

漏洞利用详细步骤

在Chrome浏览器中,可以直接通过快捷键来将任意内容复制到剪贴板中,但是在Firefox中,就需要额外的鼠标点击操作了。最终,针对Chrome的漏洞利用方式需要按下组合键:“CTRL+V+Enter”。

具体步骤如下:

1、“CTRL”-将包含秘密值的文件路径拷贝到剪贴板,“%LOCALAPPDATA%\NVIDIACorporation\NvNode\nodejs.json”,它还会打开文件输入窗口,并上传文件。

2、“V”-剪贴板的值会被拷贝到文件输入窗口中。

3、“Enter”-上传nodejs.json文件之后,页面将会读取文件中的内容。

4、页面会通过一个XHR请求向GFE API发送请求,并使用文件中读取到的内容来在目标主机中执行任意命令。

6.gif

总结

漏洞利用的过程确实需要一些用户交互,但是需要进行的操作非常少。目前,NVIDIA已经在最新版本的GFE v3.19中修复了这个问题,因此我们强烈建议广大用户尽快安装最新版本的GFE。当然了,如果你不需要使用GFE的话,最好还是把它卸载掉,以减少额外的攻击面。

PoC:【GitHub传送门

* 参考来源:rhinosecuritylabs,FB小编Alpha_h4ck编译,转载请注明来自FreeBuf.COM

季度亮点

情人节

按照传统,网络钓鱼活动的高发时间一般都跟情人节的时间相吻合,攻击者的目的就是要从那些满眼都是“爱情”的用户身上骗取宝贵的机密信息,比如银行卡、信用卡和帐号凭证等等。网络犯罪分子可以利用的话题从线上鲜花销售到约会网站,几乎无奇不有。

1.png

大多数情况下,用户会被邀请为自己的对象订购礼物,并购买伟哥等药物。而点击这些信息中的链接,会导致目标用户的付款信息被发送给网络犯罪分子。

2.png

新的苹果产品

每年的三月底苹果都会发布新款设备,网络欺诈分子也会抓住这个机会,在活动开始前,他们会试图将用户重定向到一个伪造的苹果官方网站,而且这种情况越来越常见了。

3.png

4.png

网络诈骗分子会大量发送仿苹果风格的钓鱼邮件,并试图欺骗目标用户点击邮件中的钓鱼链接,当用户在伪造的苹果官网中输入了凭证之后,这些信息就会被发送给攻击者。

5.png

伪造的技术支持

伪造的技术支持邮件是目前最流行网络欺诈类型之一了。近期,此类攻击事件数量大幅增长。在专门的论坛和社交网络上都可以看到伪造的技术支持站点的链接,而且还会伴随大量的评论。

6.png

根据我们在第一季度发现的所有诈骗活动,它们的共同点在于:他们会给其他公司的产品提供各种技术帮助,并承诺由由经过专业培训的高素质员工来提供技术支持服务,而且这些技术人员是随时待命的。毫无疑问,他们根本无法解决用户的问题,而且用户还会因此受到财产损失。

新的Instagram“功能”

从去年开始,攻击者就已经涉足Instagram了,而且今年这一趋势也持续了下去。网络犯罪分子不仅会在Instagram的评论中留下网络钓鱼链接,而且还会注册账户并支付广告费用进行宣传和内容分发。值得一提的是,恶意广告同样使用了这种方法。

7.png

用户会被要求提供姓名和银行卡等详细信息,用户一旦输入,则后果不堪设想。

8.png

网络钓鱼邮件

在第一季度,网络犯罪分子仍然在模仿合法服务来发送网络钓鱼邮件,攻击者会试图通过账户验证或更新付款信息之类的“理由“来欺骗用户点击钓鱼链接。

9.png

ACH系统与金融类垃圾邮件

在第一季度,我们观察到针对自动化清算系统(ACH)用户的垃圾邮件开始激增,这种系统是美国的电子支付系统,用于处理大量消费者和中小企业交易。这些垃圾邮件中包括一些关于目标用户和公司进行转账的虚假状态通知,以及一些包含恶意附件和恶意软件下载链接的邮件。

10.png

勒索软件和挖矿软件

正如我们所料,网络犯罪分子对加密货币的兴趣丝毫没有减弱。垃圾邮件也正在以“排山倒海之势“欺骗用户向他们支付加密货币,这一状况跟去年的情况类似。

11.png

2019年的第一季度,我们还发现了一种新型的网络诈骗策略,即网络犯罪分子以中情局雇员的名义向目标用户发送信息,并称他们可以访问目标用户的档案。实际上,这些信息都是网络犯罪分子从社交网络、在线聊天和其他论坛等地方获取来的。

12.png

数据统计-垃圾邮件

垃圾邮件在邮件流量中的比例:

13.png

2019年第一季度,3月份垃圾邮件的占比最高,为56.33%。垃圾邮件在全球邮件流量中的平均占比为55.97%,与2018年第四季度几乎相同(+0.07 p.p.)。

14.png

俄罗斯地区的互联网垃圾邮件流量高峰出现在1月份(56.19%)。本季度平均值为55.48%,比第四季度高出2.01个百分点。

各国垃圾邮件来源

15.png

按照惯例,垃圾邮件的主要来源国是中国(15.82%)和美国(12.64%),前三名的常客德国在第一季度下降到第五位(5.86%),把第三名让给了俄罗斯(6.98%),巴西(6.95%)进入第四名。排名第六的是法国(4.26%),其次是阿根廷(3.42%)、波兰(3.36%)和印度(2.58%)。

垃圾邮件大小

16.png

在2019年第1季度,超小型的辣鸡邮件(高达2 KB)在垃圾邮件中的占比较2018年第4季度增加了7.14 p.p.,达到了73.98%。2-5kb垃圾邮件的份额降至8.27%(下降了3.15 p.p.)。10-20kb邮件占垃圾邮件流量的5.11%,在第四季度上升了1.08 p.p.。大小为20-50kb的邮件占3.00%(与2018年第4季度相比,增长0.32 p.p.)。

恶意附件-恶意软件家族

17.png

2019年第1季度,垃圾邮件流量中最常见的恶意软件是exploit.msoffice.cve-2017-11882,占7.73%。排名第二的是Backdoor.win32.androm(7.62%),第三的是Worm.win32.wbvb(4.80%)。第四名是微软Office的另一个漏洞,其形式是exploit.msoffice.cve-2018-0802(2.81%),而特洛伊木马-spy.win32.noon(2.42%)则排在第五位。

遭受垃圾邮件攻击的国家分布

18.png

总结

2019年第1季度,垃圾邮件在全球邮件流量中的平均占比上升了0.06 p.p.,提升至了55.97%,反钓鱼网站系统成功阻止了超过111832308次重定向至钓鱼网站的攻击活动,与上一报告期相比上升了35220650次。

如前所述,网络犯罪分子没有浪费任何机会利用高知名度媒体事件来达到自己的目的(苹果产品发布和新西兰恐怖袭击等等)。最重要的是,攻击者会继续利用社交网络来实现他们的目标,并利用名人发起广告活动来扩大他们的影响力。

* 参考来源:securelist,FB小编Alpha_h4ck编译,转载请注明来自FreeBuf.COM

工具介绍

QBDI 全名为 QuarkslaB Dynamicbinary Instrumentation,它是一个模块化的跨平台以及跨架构的 DBI 框架。该工具目前支持 Linux、macOS、Android、iOS 和 Windows 操作系统,支持的架构有 x86、x86-64、ARM 和 AArch64 架构。QBDI 的模块化特征意味着它不需要包含任何首选的注入方法,并且可以结合外部注入工具一起使用。QBDI 包含了一个基于 LD_PRELOAD 的小型 Linux 以及一个动态可执行的 macOS 注入器(QBDIPreload),它们是 QBDI 的 Python 绑定基础,即 pyQBDI。QBDI 还整合了 Frida,一个动态指令工具集。

QBDI 针对 x86-64 架构的支持已经非常成熟了,虽然该工具目前仍针对 ARM 架构在进行开发,但已经足够执行类似 ls 或 cat 这样简单的 CLI 程序了。工具计划增加对 x86 和 AArch64 的支持。

但是,QBDI 目前无法处理信号、多线程和 C++异常机制。

编译

在构建该项目时,系统需要满足下列依赖:cmake、make(针对 Linux 和 macOS)、ninja(针对 Android)、Visual Studio(针对 Windows)和 C++ 11 工具集。

编译过程分为两个步骤:

1、 构建本地代码以及依赖;

2、 使用代码库构建 QBDI;

当前的依赖组件需要 用户构建 LLVM 和 Google Test,我们需要本地构建 LLVM,因为 QBDI 需要使用常规 LLVM 没有对外提供的私有 API,而且 QBDI 也只能匹配指定版本的 API。第一步的操作会进行缓存,并且只用执行一次,后续的构建操作只需要重复第二步骤即可。

QBDI 需要使用 cmake 构建,并要求传递构建配置标识。为了简化操作,我们提供了一个 Shell 脚本来完场常规配置的构建,大家也可以根据自己的需要来修改脚本,完成 QBDI 的自定义编译。

Linux

x86-64

在项目结构的根路径创建一个新的目录,并执行 Linux 配置脚本:

mkdir build
cd build
../cmake/config-linux-X86_64.sh

如果构建脚本时提醒你缺失平台依赖的话,你需要重新构建依赖并执行下列命令:

make llvm

make gtest

该命令会重构平台上的依赖组件,接下来你可以重新运行配置脚本并完成项目编译:

../cmake/config-linux-X86_64.sh

make -j4

ARM 编译

针对 ARM 架构,用户可以使用 config-linux-ARM.sh 配置脚本来完成环境配置,不过这个脚本需要大家针对自己的跨架构编译工具链来进行定制修改:

1、 正确的代码必须导出至 AS、CC、CXX 和 STRIP 环境变量。

2、「-DCMAKE_C_FLAGS」和「-DCMAKE_CXX_FLAGS」需要包含正确的默认标识(取决于使用的工具链),至少要修改 ARM_ARCH、ARM_C_INCLUDE 和 ARM_CXX_INCLUDE。

macOS

在 macOS 上编译 QBDI 需要满足下列条件:

1、 Sierra 以上版本的 macOS;

2、 XCode;

3、 命令行工具(xcode-select–install);

4、 包管理器,例如 MacPorts 或 HomeBrew;

5、 某些工具包(port install cmakewget);

满足上述条件后,在项目目录的根节点新建一个目录,然后执行 macOS 配置脚本:

mkdir build

cd build

../cmake/config-macOS-X86_64.sh

如果构建脚本时提醒你缺失平台依赖的话,你需要重新构建依赖并执行下列命令:

make llvm

make gtest

该命令会重构平台上的依赖组件,接下来你可以重新运行配置脚本并完成项目编译:

../cmake/config-linux-X86_64.sh

make -j4

Windows

在 Windows 上构建项目需要安装 Python 3,以及最新版本的 CMake。

首先,需要修改 config-win-X86_64.py 来匹配安装好的 Visual Studio,然后运行下列代码:

mkdir build

cd build

python../cmake/config-win-X86_64.py

如果构建脚本时提醒你缺失平台依赖的话,你需要重新构建依赖并执行下列命令:

MSBuild.exedeps\llvm.vcxproj

MSBuild.exedeps\gtest.vcxproj

该命令会重构平台上的依赖组件,接下来你可以重新运行配置脚本并完成项目编译:

python../cmake/config-win-X86_64.py

MSBuild.exe/p:Configuration=Release ALL_BUILD.vcxproj

Android

针对 Android 平台,需要 Android NDK,该功能只在 Linux 平台上测试过。配置脚本 config-android-ARM.sh 需要修改以匹配 NDK 版本以及目标平台:

1、 NDK_PATH 需指向 Android NDK;

2、 SDKBIN_PATH 需要补充完整,指向 NDK 所使用的工具集;

3、 API_LEVEL 需匹配目标 Android API 版本;

4、 正确的代码必须导出至 AS、CC、CXX 和 STRIP 环境变量;

项目地址

QBDI:【GitHub 传送门

*参考来源:QBDI,FB 小编 Alpha_h4ck 编译,转载请注明来自 FreeBuf.COM

1.jpg

Miteru

Miteru是一款实验性网络钓鱼检测工具,广大研究人员可以使用这款工具来进行网络钓鱼工具的感染检测。

工具运行机制

该工具可以从下列来源收集钓鱼URL地址:

1、 CertStream-Suspicious feed

2、 OpenPhish feed

3、 PhishTank feed

4、 Ayashige feed

功能介绍

1、 钓鱼工具检测与收集;

2、 Slack通知;

3、 线程检测

工具安装

gem install miteru

工具使用

$miteru

Commands:

  miteru execute         # Execute the crawler

  miteru help [COMMAND]  # Describe available commands or one specific command

$miteru help execute

Usage:

  miteru execute

Options:

  [--auto-download], [--no-auto-download]              # Enable or disable auto-downloadof phishing kits

  [--ayashige], [--no-ayashige]                        # Enable or disableayashige(ninoseki/ayashige) feed

  [--directory-traveling],[--no-directory-traveling]  # Enable ordisable directory traveling

  [--download-to=DOWNLOAD_TO]                          # Directory todownload file(s)

                                                      # Default: /tmp

  [--post-to-slack], [--no-post-to-slack]              # Post a message to Slack if itdetects a phishing kit

  [--size=N]                                           #Number of urlscan.io's results. (Max: 10,000)

                                                      # Default: 100

  [--threads=N]                                        #Number of threads to use

  [--verbose], [--no-verbose]

                                                      # Default: true

Executethe crawler

结果输出:

$miteru execute

...

https://dummy1.com:it doesn't contain a phishing kit.

https://dummy2.com:it doesn't contain a phishing kit.

https://dummy3.com:it doesn't contain a phishing kit.

https://dummy4.com:it might contain a phishing kit (dummy.zip).

使用Docker(如果你没有安装Ruby的话)

$ git clone https://github.com/ninoseki/miteru.git

$ cd miteru/docker

$docker build -t miteru .

$docker run miteru

# ex.auto-download detected phishing kit(s) into host machines's /tmp directory

$docker run -v /tmp:/tmp miteru execute --auto-download

工具配置

如果你想使用–post-to-slack功能,你需要设置以下环境变量:

SLACK_WEBHOOK_URL:你的SlackWebhook URL;

SLACK_CHANNEL:用于发送消息的Slack信道(默认值: “#general”);

Slack通知

2.png

替换方案

1、 t4d/StalkPhish:网络钓鱼工具跟踪器,可收集钓鱼工具以供研究使用。

2、 duo-labs/phish-collect:用于追踪钓鱼工具的Python脚本;

3、 leunammejii/analyst_arsenal:安全分析师的利器;

项目地址

Miteru:【GitHub传送门

* 参考来源:ninoseki,FB小编Alpha_h4ck编译,转载请注明来自FreeBuf.COM

*本文中涉及到的相关漏洞已报送厂商并得到修复,本文仅限技术研究与讨论,严禁用于非法用途,否则产生的一切后果自行承担。

写在前面的话

在这篇文章中,我将跟大家讨论一个我在Panda反病毒产品中发现的一个安全漏洞(CVE-2019-12042),这是一个本地提权漏洞,该漏洞将允许攻击者在目标设备上将非特权账户提权至SYSTEM。

受影响的产品包括Panda Dome(版本< 18.07.03)、Panda InternetSecurity、Panda Antivirus Pro、PandaGlobal Protection、Panda Gold Protection和旧版本的Panda Antivirus(版本 <= 15.0.4)。

目前,厂商已经在v18.07.03版本中修复了该漏洞。

漏洞分析

存在漏洞的系统服务为AgentSvc.exe这个服务可以创建一个全局Section对象和一个对应的全局事件,每当一个进程尝试向共享内存写入数据并需要服务进程去处理这些数据时,它们便会发出信号。由于这个过程中的权限验证机制存在缺陷,因此该漏洞将影响那些允许“Everyone”和非特权用户修改共享内存和事件的对象。

1.jpg

1.png

逆向工程与漏洞利用

这个服务会创建一个线程,该线程会无限期等待内存更改事件,并在收到事件信号时解析内存中的内容。当共享内存中的第二个“值”不为零时,它会使用一个指针来调用如下所示的函数,指针指向的地址为列表头部的值:

3.PNG

列表元素的结构如下所示:

typedef struct StdList_Event

{

       struct StdList_Event* Next;

       struct StdList_Event* Previous;

       struct c_string

      {

           union

          {

                 char* pStr;

                 char str[16];

           };

           unsigned int Length;

           unsigned intInStructureStringMaxLen;

       }DipsatcherEventString;

       //..

};

如下图所示,代码期望在共享内存中偏移量为2的位置有一个unicode字符串,它会使用这个字符串来初始化一个wstring对象,并将其转换为ANSI字符串。除此之外,在第50行代码,使用了”3sa342ZvSfB68aEq”来初始化一个字符串,并将它和攻击者可控制的ANSI字符串以及一个指针(指向一个输出字符串对象)传递给函数”DecodeAndDecryptData”。

4.PNG

该函数会对这个base64字符串进行解码,然后使用RC2和密钥“3sa342ZvSfB68aEq”揭密出结果值。所以,我们向共享内存中写入的内容必须是经过RC2加密并且使用Base64编码的值。

5.PNG

当函数返回结果时,解码后的数据会被转换为“wstring”对象,而do-while循环会根据分隔符“|”来提取子字符串,并将它们分别插入到列表中,最后将它们以参数进行传递。

6.PNG

我们回到线程的主函数,如下所示,代码会遍历列表,并将字符串传递给Dispatcher.dll中CDispatcher类的InsertEvent方法:

7.PNG

我们对Dispatcher.dll文件中的CDispatcher::InsertEvent方法进行了分析,发现它会向一个CQueue队列中插入事件字符串:

8.PNG

CDispatcher::Run方法会运行一个单独的线程来处理这个队列中的元素:

9.PNG

CRegisterPlugin::ProcessEvent方法会解析攻击者控制的字符串,查看错误调试消息,我们会发现我们面对的是一个开源的JSON解析器:【json-parser】。

10.PNG

既然我们已经知道了这个服务需要我们传入哪种数据,但我们还需要知道数据的JSON属性。CDispatcher::Initialize方法会调用CRegisterPlugins::LoadAllPlugins方法来从注册表中读取Panda的安装路径,然后访问插件目录,然后加载其中所有的DLL文件。

其中一个DLL名叫Plugin_Commands.dll,它的功能貌似是执行命令行指令。

11.png

由于这些DLL都可以提供错误调试消息,这样我们就可以轻松定位目标方法了。我们也迅速找到了Plugin_Commands.dll中的Run方法:

12.PNG

在这个函数中,我们从输入数据中找到了目标JSON属性:

13.PNG

我们还可以从内核调试器中拦截部分JSON消息:

14.png

至此,我想看看是否能够执行硬盘中的某些东西。通过对Run方法的反编译结果进行分析,我们发现了一个函数可以解析相关的属性值,并判断其是否指向的是URL或是磁盘中的文件。这里,我们就可以使用file://URI来执行硬盘中的文件了。

15.PNG

在查找强制属性时,我们发现至少要提供这两个值:ExeName和SourcePath:

16.png

17.png

但是,当我们在设置了这两个值之后将事件”CmdLineExecute”加入队列,我们的进程并没有创建成功。调试之后,我发现“ExeMD5”也是一个强制属性,它应该包含待运行的可执行程序的有效MD5哈希。

CheckMD5Match函数会动态计算文件哈希,并与我们提供的JSON属性进行对比。

18.png

成功执行后的进程流:

19.png

测试如下JSON数据(RC2+Base64编码),我们可以看到cmd.exe成功以SYSTEM权限运行了:

{

    "CmdLineExecute":       

    {

        "ExeName":"cmd.exe",                           

        "SourcePath":"file://C:\\Windows\\System32",               

        "ExeMD5":"fef8118edf7918d3c795d6ef03800519"

    }

}

20.png

当我们尝试提供自己的可执行程序时,Panda会将其检测为恶意软件并删除之,即使该文件不是恶意软件。此时,我们可以让cmd.exe来启动我们的进程,最终的JSON数据如下所示:

{

    "CmdLineExecute":                                  

    {

        "ExeName":"cmd.exe",                          

        "Parameters": "/c startC:\\Users\\VM\\Desktop\\run_me_as_system.exe",

        "SourcePath":"file://C:\\Windows\\System32",              

        "ExeMD5":"fef8118edf7918d3c795d6ef03800519" //MD5 hash of CMD.EXE

    }

}

最后的漏洞利用代码会在目标磁盘中存放一个文件,并计算cmd.exe的MD5哈希,构建JSON数据,对其加密并编码,最终将其写入共享内存。

还需要注意的是,这个PoC漏洞利用代码可以在不需要任何重新编译操作的情况下在所有的Windows版本中正常工作。

21.png

PoC代码

漏洞利用代码:【GitHub传送门

* 参考来源:rce4fun,FB小编Alpha_h4ck编译,转载请注明来自FreeBuf.COM

Sniffglue

Sniffglue是一款使用Rust开发的网络嗅探工具,该工具使用了线程池来利用所有的CPU核心并对多个网络数据包同时进行解析处理。该工具的主要目标就是帮助研究人员在不受信任的网络中安全稳定地对数据包进行处理,而不会遇到其他异常问题。默认配置下,该工具的输出结果已经足以满足大部分用户的需求了。

1.png

工具使用

sniffglue enp0s25

工具安装

本工具针对ArchLinux提供了一个官方数据包,可使用下列命令直接获取:

pacman -S sniffglue

如果大家想通过源码构建项目,请确保你的设备安装了libpcap和libseccomp。

Debian/Ubuntu:

libpcap-dev libseccomp-dev

Archlinux:

libpcap libseccomp

安装命令如下:

cargo install sniffglue

当然了,安装完成之后,别忘了安装构建依赖组件:

ci/reprotest.sh

支持的协议

2.png

Docker安装

你还可以将Sniffglue以Docker镜像的方式进行安装和使用,镜像大小约为11.1MB。我们强烈建议大家将其配置进注册表中:

docker build -t sniffglue .

docker run -it --init --rm --net=host sniffglue eth0

Seccomp

为了确保被入侵的进程不会影响目标系统,Sniffglue使用了seccomp来限制目标进程的系统调用。整个过程分为两个阶段,首先是在开始的时候,也就是在env_logger初始化完成之后,然后就是在嗅探器配置完成之后,也就是在Sniffglue从网络中读取出数据包之前。

在第二个阶段中,工具还采用了一些增强型安全配置,以确保过滤/禁用掉不需要的系统调用。如果需要针对某些特殊系统进行数据包嗅探,我们还可以直接从etc/sniffglue.conf中读取配置信息。这个配置文件为chroot指定了一个空目录和一个非特权账号,而该工具可以利用这个非特权账号来提升至root权限。

boxxy-rs

本工具使用了基于boxxy-rs的基础Shell,可用来探测目标系统中的沙盒环境:

cargo run --example boxy

模糊测试

Sniffglue还可以在数据包处理的过程中使用cargo-fuzz来进行模糊测试,在这个过程中,我们需要用到的东西开发人员都已经在项目目录的fuzz/文件夹中给大家提供了相应的源代码:

cargo fuzz run read_packet

许可证协议

本项目的开发遵循GPL v3开源许可证协议。

项目地址

Sniffglue:【GitHub传送门

*参考来源:kpcyrd,FB小编Alpha_h4ck编译,转载请注明来自FreeBuf.COM

1.png

写在前面的话

微软在今年一月份发布的更新,让公众对DHCP客户端中的关键漏洞CVE-2019-0547有了一个新的认识。这个漏洞的CVSS评分非常高,而且微软也没有立即发布相关的可利用性评价,因此用户也很难决定是否需要立即更新他们的系统。但是某些研究人员认为,这个漏洞在不久的将来很可能会被大量网络犯罪分子利用。

因此,为了更好地检测针对DHCP漏洞的攻击以及相关的漏洞,并更新我们的产品,我们需要深入了解所有的细节。而我们要做的第一件事,就是网络侦察。

网络侦查

一开始我们打算使用搜索引擎来寻找关于该漏洞的信息,但并没有找到太多的细节,而且大部分内容都是来自MSRC网站发布的安全公告。不过在浏览这些安全公告的过程中,我们发现我们面对的是Window10(版本1803)中客户端和服务器端系统的一个内存崩溃漏洞,当攻击者向DHCP客户端发送专门设计的响应信息时,就会触发该漏洞。

2.png

我们可以看到,MSRC给出的评分为2,被利用的可能性比较小,这意味着这个漏洞可能无法被利用,或者利用难度大。不过,我们还是想通过自己的分析,看看这个漏洞到底是什么情况。

在这个网站中,我们下载了这个安全更新补丁(.msu文件),将其解压,然后查找跟客户端处理DHCP响应相关的文件。但是这很困难,因为这个补丁包里面包含的是当月修复的所有漏洞补丁,而不是针对单个漏洞的补丁。在大量的文件中,我们用过滤器找到了几个匹配的代码库,然后对系统的版本进行了比较。其中,dhcpcore.dll库是最接近的:

3.png

实际上,只有DecodeDomainSearchListData这个函数进行了较大的改动,如果你熟悉DHCP协议的话,你就会知道它其实很少使用函数。

DecodeDomainSearchListData函数

DHCP中的域名搜索选项号为0×77(119),它允许服务器再客户端上设置DNS后缀,但不适用于Windows设备,因为之前的Windows系统会忽略这个选项。在必要的时候,可以通过组策略来配置DNS的名称后缀。不过Windows 10在新版本1803中引入了针对域名搜索选项的处理库。

4.png

DecodeDomainSearchListData的处理过程如下:首先从服务器端接收信息,然后根据域名搜索选项的配置来解码数据。针对输入,它接收封装好的数据数组,并输出一个以空字节结尾的字符串,这个字符串包含由逗号分隔的域名列表。比如说,该函数会对下面这个域名后缀进行转换:

.eng.apple.com

.marketing.apple.com

eng.apple.com,marketing.apple.com

DecodeDomainSearchListData会在UpdateDomainSearchOption的处理过程中被调用,并将返回的结果列表写入注册表键的”DhcpDomainSearchList”参数中:

HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{INTERFACE_GUID}\

然后将主参数存储至特定的网络接口:

5.png

DecodeDomainSearchListData函数会进行两次数据传递。第一次,它会执行除设置输出缓冲区进入点之外的所有操作,即计算保存返回数据所需要的内存大小。第二次,它会为数据分配内存,并进行数据填充。这个函数大约有250条指令,主要任务就是处理传入的字节流。它还会检查缓冲区的大小,如果大小为零,则不会为缓冲区分配内存,并完成执行然后返回错误信息:

6.png

因此,只有当目标缓冲区大小为零时,才可以触发漏洞。

漏洞利用

首先,我们可以使用重解析点来确保非空输入数据生成并输出一个空字符串:

7.png

设置一个服务器来响应内容请求,并让未更新的客户端出现访问冲突。在每一个步骤中,函数完成一部分域名解析时,就会将这部分数据复制到目标缓冲区:

1).eng.

2).eng.apple.

3).eng.apple.com.

接下来,当数据中出现大小为0的域名时,函数就会将目标缓冲区中的句号改为逗号:

4).eng.apple.com,

然后继续解析:

5).eng.apple.com,marketing.

6).eng.apple.com,marketing.apple.

7).eng.apple.com,marketing.apple.com.

8).eng.apple.com,marketing.apple.com,

输入数据解析完成后,剩下的就是用空字符替换最后的逗号:

9).eng.apple.com,marketing.apple.com

当攻击者发送如上所述的缓冲区数据时会发生什么呢?我们可以看到,它包含的列表是有一个空字符串组成的。那么在函数第一次计算输出数据大小后,由于数据并没有包含非零域名,所以大小为零。在第二次传递时,它会给数据分配堆内存块,并复制数据。但解析函数会立即遇到指示域名结尾的空字符,并将句号改为逗号。

8.png

因此,如果想要利用这个漏洞CVE-2019-0726,攻击者必须要在DHCP客户端上执行远程堆喷射,并对堆内存分布要有完整控制权。否则,将数据写入未选中的地址会导致svchost.exe进程崩溃。

* 参考来源:ptsecurity,FB小编Alpha_h4ck编译,转载请注明来自FreeBuf.COM

VulnX是一款自动化Shell注入工具,支持多种类型的内容管理系统,其中包括Wordpress、Joomla、Drupal和Prestashop等等,广大研究人员可以使用VulnX来检测这些CMS系统中的安全问题。

2.jpg

VulnX本质上是一款智能化Bot,可实现Shell自动注入,并帮助研究人员检测CMS系统中的安全漏洞。它可以执行快速CMS安全检测、信息收集(包括子域名、ip地址、国家信息、组织信息和时区等等)和漏洞扫描。

功能介绍

1、 检测CMS漏洞,支持wordpress, joomla, prestashop, drupal, opencart, magento, lokomedia;

2、 目标信息收集;

3、 目标子域名收集;

4、 多线程扫描支持;

5、 检测安全漏洞

6、 自动Shell注入;

7、 利用Dork搜索引擎;

8、 高级端口扫描;

9、 DNS服务器导出;

10、同时扫描多个目标;

11、Dork枚举;

DNS映射

用户课使用–dns或-d来对目标子域名执行DNS映射,并生成isetso.rnu.tn:

vulnx-u isetso.rnu.tn --dns -d --output $PATH

其中的$PATH变量存储的是结果图的存储地址。

3.png

4.png

漏洞利用

6.gif

各CMS平台支持的扫描组件

Joomla

Com Jce

Com Jwallpapers

Com Jdownloads

Com Jdownloads2

Com Weblinks

Com Fabrik

Com Fabrik

Com Jdownloads Index

Com Foxcontact

Com Blog

Com Users

Com Ads Manager

Com Sexycontactform

Com Media

Mod_simplefileupload

Com Facileforms

Com Facileforms

Com extplorer

WordPress

Simple Ads Manager

InBoundio Marketing

WPshop eCommerce

Synoptic

Showbiz Pro

Job Manager

Formcraft

PowerZoom

Download Manager

CherryFramework

Catpro

Blaze SlideShow

Wysija-Newsletters

Drupal

Add Admin

Drupal BruteForcer

Drupal Geddon2

PrestaShop

attributewizardpro

columnadverts

soopamobile

pk_flexmenu

pk_vertflexmenu

nvn_export_orders

megamenu

tdpsthemeoptionpanel

psmodthemeoptionpanel

masseditproduct

blocktestimonial

soopabanners

Vtermslideshow

simpleslideshow

productpageadverts

homepageadvertise

homepageadvertise2

jro_homepageadvertise

advancedslider

cartabandonmentpro

cartabandonmentproOld

videostab

wg24themeadministration

fieldvmegamenu

wdoptionpanel

Opencart

Opencart BruteForce

可用的命令行选项

usage:vulnx [options]

  -u --url              目标URL地址

  -D --dorks            搜索Dock

  -o --output           指定输出目录

  -t --timeout          HTTP请求超时

  -c --cms-info         搜索CMS信息,包括主题、插件、用户和版本

  -e --exploit           扫描并利用安全漏洞

  -w --web-info        Web信息收集

  -d --domain-info     子域名信息收集

  -l, --dork-list         枚举Dork列表

  -n, --number-page   搜索引擎的页面数量(Google)

  -p, --ports           端口扫描

  -i, --input            从输入文件导入目标域名

  --threads            扫描线程数量

  --dns                DNS信息收集

工具安装

Docker安装

$ git clone https://github.com/anouarbensaad/VulnX.git

$ cd VulnX

$ docker build -t vulnx ./docker/

$ docker run -it --name vulnx vulnx:latest -u http://exemple.com

查看日志文件:

$ docker run -it --name vulnx -v "$PWD/logs:/VulnX/logs" vulnx:latest-u http://exemple.com

Ubuntu安装

$ git clone https://github.com/anouarbensaad/vulnx.git

$ cdVulnX

$ chmod +x install.sh

$ ./install.sh

Termux安装

$ pkg update

$ pkg install -y git

$ git clone http://github.com/anouarbensaad/vulnx

$ cd vulnx

$ chmod +x install.sh

$ ./install.sh

工具常用命令

参考命令样本:settimeout=3 , cms-gathering = all , -d subdomains-gathering , run–exploits

vulnx -u http://example.com --timeout 3 -c all -d -w –exploit

搜索Dork样本命令:-D or –dorks , -l –list-dorks

vulnx–list-dorks命令将会返回可利用漏洞表。

搜索单个目标网站

选项:-u或–url

vulnx -u http://example.com

扫描超时

选项:–timeout(默认为3秒)

vulnx-u http://example.com --timeout=4

运行漏洞利用模块

选项:–exploit或-e

vulnx-u http://example.com --exploit

CMS信息收集

选项:–cms-info或-c

vulnx-u http://example.com --cms-info all

子域名&IP信息收集

选项:–domain-info或-d

vulnx-u http://example.com --domain-info

网站信息收集

选项:–web-info或-w

vulnx-u http://example.com --web-info

扫描开放端口

选项:–ports或-p

vulnx-u http://example.com --ports

DNS信息收集

选项:–dns

vulnx-u http://example.com --dns

项目地址

VulnX:【GitHub传送门

许可证协议

本项目遵循GPL-v3.0开源许可证协议。

* 参考来源:anouarbensaad,FB小编Alpha_h4ck编译,转载请注明来自FreeBuf.COM

近期,我们又对MuddyWater APT组织的活动进行了分析,并且发现他们使用了新的攻击工具以及更加有效的Payload,这也表明MuddyWater APT仍然在不断地优化他们的攻击方案。在这篇文章中,我们将对MuddyWater APT所使用的新型多阶段后门和Android恶意软件变种等攻击组件进行分析。

在其中的一次攻击活动中,他们向约旦的一所大学和土耳其政府发送了网络钓鱼邮件,虽然邮件发件人的合法性是有保证的,但攻击者已经提前入侵了这个电子邮件账号,并欺骗目标用户安装恶意软件(通过邮件中的钓鱼链接或恶意附件)。

我们通过分析发现,攻击者采用了一种名为POWERSTATS v3的新型多阶段PowerShell后门(趋势科技检测为Trojan.PS1.POWERSTATS.C)。钓鱼邮件中包含了一个恶意VBE文件,使用了微软脚本编码工具进行编码,其中包含恶意宏。这个VBE文件中,包含了一段Base64编码的数据块,其中包含的是一个经过混淆处理的PowerShell脚本,而且会自动执行。这段数据会被解码并存储至%PUBLIC%目录中,文件后缀名为.jpeg和.png。PowerShelldiamagnetic接下来会使用自定义字符串对代码进行混淆处理:

后门首先会获取目标设备的操作系统信息,并将其存储在日志文件中。经过反混淆后的部分后门代码段如下:

这个文件会被上传至C2服务器中,每一台目标设备都会生成一个个随机的GUID码,用于帮助攻击者识别目标设备。接下来,恶意软件变种会开启循环模式,不断地获取GUID命名的文件,如果找到了文件,就会在目标设备上使用PowerShell.exe进程来下载并执行。

攻击者还会通过发送异步命令来开启第二阶段的攻击,比如说,可以下载另一个后门Payload,并在目标设备上安装:

攻击者下载第二阶段攻击Payload时,需要下列命令的支持:

1、 获取屏幕截图;

2、 通过cmd.exe执行命令;

3、 如果没有检测到关键词,恶意软件变种会假设输入内容为PowerShell代码,并通过“Invoke-Expression”工具来执行。

C2通信通过PHP脚本实现,其中包含硬编码令牌,以及一系列后端函数,例如sc(屏幕截图)、res(命令执行结果)、reg(注册新用户)和uDel(遇到错误时删除自身)等等。

2019年上半年MuddyWater的其他活动

MuddyWater APT组织一直都在开发新的技术来进行更加“高端”的攻击。当然了,前文所分析的活动并不是唯一一个使用了POWERSTATS v3的攻击活动,我们还发现他们在其他活动中改进了Payload的传递方式以及感染的恶意文件类型。

在2019年1月份,我们还发现攻击者使用了SHARPSTATS(Trojan.Win32.SHARPSTATS.A),一种基于.NET的后门,支持下载、上传和运行函数。同月,又出现了基于Delphi编程语言开发的后门DELPHSTATS(Trojan.Win32.DELPSTATS.A)。DELPHSTATS会在其通过PowerShell.exe进程执行自身之前,向C2服务器请求一个.dat文件,并且实现了自定义PowerShell脚本:

当然了,我们还遇到了经过重度混淆处理的POWERSTATS v2(Trojan.PS1.POWERSTATS.B)代码:

反混淆处理后,我们发现后门的主循环会请求不同的URL来从C2服务器获取命令执行的结果:

攻击者还使用了不同的后渗透利用工具

总结与安全建议

虽然MuddyWater目前还没有涉及到任何0 day和高级恶意软件变种,但是他们仍然能够成功入侵目标设备。当然了,攻击者还使用了钓鱼邮件来作为其中一种感染向量,而且攻击成功率欸长高。除了使用智能邮件安全解决方案之外,组织还需要对员工进行反垃圾邮件(钓鱼邮件)的基础培训。

点我访问】完整报告。

* 参考来源:trendmicro,FB小编Alpha_h4ck编译,转载请注明来自FreeBuf.COM