背景

如今,大数据充斥着生活中各个角落的背景下,信息安全逐渐成为网络世界的主流话题,数据安全和敏感信息问题也越来越被个人、企业乃至国家政府所重视。随着个人信息逐渐成为了黑产界的“香饽饽”,所以,如何在复杂的网络世界中证明“你是你自己”,如何解决在身份认证过程中出现的种种安全问题,是当下需要解决的难题之一。

不论是数据安全还是身份验证,都已经是老生常谈的话题了,从一开始的身份证、户口本,到现在的指纹、短信、面部识别、身份密码等等,从众多维度进行验证,也都是为了保证个人乃至企业机构信息的安全。

当下,不断革新的互联网也对身份识别技术的要求不断提升,各项安全措施都随着科技的发展表现出了越来越高的科技依赖性。在世界范围内,可靠、可信的身份信息都将成为企业、政府为人员、场所、事物所打造的互联互通环境的重要环节。

在这个方面,芯盾时代把握时代的发展趋势,意识到了身份识别方面的重要性,新的身份识别技术应运而生。

CARTA.png

参评产品介绍

芯盾时代是国内专注互联网安全的高科技企业,聚焦和领跑以身份认证为基础的移动安全领域,旨在为用户群体提供“移动、可信、安全、智能”的身份认证解决方案。目前已聚集了国内信息安全、移动安全、生物识别、大数据、云计算和物联网等多个领域的专业人才,持续创新,帮助企业和个人业务顺畅运行。 

在互联网+时代,以个体为核心发展开来从而形成整个体系将会是互联网身份组成的一大趋势,但长久以来用户身份认证的安全问题都没有得到解决,在互联网金融、企业应用管理、物联网设备使用的过程中,伪造、泄露事件时有发生,例如手机银行密码被盗用、验证码被窃、用户身份冒用、终端被破解。不仅会给使用者带来巨大损失,同样对网络技术的发展也形成了很大的阻碍。

芯盾时代新推出的CATRA产品体系,以其创始人&CEO郭晓鹏提出的“连续自适应认证安全”体系为基础,结合多因素交互式验证、智能化无感知验证、连续性自适应验证等核心技术,具有多层、开放、基于不同场景支持策略、模型自由组合配置的特点,能够根据行业、场景和安全威胁及时改变,及时、准确的做出判断,以保障业务的安全性。结合生物认证等多种方式,完成用户身份与设备的灵活绑定,覆盖面广范,在银行、电商、游戏、企业、高校、智慧城市等领域均有广泛的使用场景。

体系架构

CARTA体系通过多种认证技术,结合不同的使用场景,将用户在互联网安全中面临的风险与信任问题做到平衡状态。

CATRA体系分为CARTA引擎、UEBA引擎以及自适应认证引擎。  

微信图片_20181030142418.png微信图片_20181030141624.png

CARTA引擎

从用户终端到数据采集再到验证,通过多个环节进行实时风险评分。数据采集涵盖Web JS、浏览器插件、系统插件、Android SDK、IOS SDK、代理网关、SYS LOG等多个维度,随后会实时提交只CARTA连续认证引擎做出“阻断、强认证、弱认证、告警、放行”等行为判断。

数据采集模块

数据采集模块包括对常规身份凭证、第三方身份凭证、相似性信号、异常信息、攻击信息、风险信息等多个方面信息的采集。

微信图片_20181030142311.png

主要组件包括:

手机端子:包括IOS、Android终端SDK; 

PC端子:WEB端SDK、Windows组件(登录组件、键盘组件、浏览器插件等); 

网络设备:代理网关(nginx、*proxy、IAM)、Nagios(开源网络监控可二次开发); 

业务端子:接口(webservice、api、restful)、日志文件、数据库日志; 

用户身份:OA用户信息、微信/QQ/钉钉/新浪等社交圈子; 

爬虫软件:web爬虫(无感知获取web应用资源)、app接口爬虫(获取app资源); 

黑产数据:通过第三方接口获取欺诈设备、账号、ip等数据接口。 

UEBA引擎

能够对来自第三方数据源的信息进行分析,通过规则引擎内的黑名单匹配、规则匹配、阈值匹配、数据统计及误报分析实时将信息反馈至CARTA引擎进行联动。并且能够通过机器学习引擎内的阈值/权重动态调整模型、新规则挖掘模型、身份欺诈识别模型、人机识别模型、设备画像模型、用户画像模型等模块进行相应的参数设置,定期更新黑名单规则、标签等,保障体系的良好运作。

自适应认证引擎

具有业务层、接口层、服务层、功能层、数据层五个模块。 

微信图片_20181030141605.png

业务层:

1.包括WEB门户、移动认证与门户APP、管理中心和系统有交互的外部应用; 

2.业务层负责业务展现,和其他模块通过接口交互实现具体功能。 

接口层:

1.接口层实现业务层和服务层的低耦合内聚,并且为外部应用提供接口和集成SDK; 

2.内部接口通过RPC几只调用,支持分布式架构,比如使用Spring Cloud框架实现;

3.外部接口对第三方应用提供webservice或REST风格接口,实现诸如用户认证、二次认证、统一身份等服务;

4.提供SDK插件供外部应用集成实现认证功能。 

服务层:

1.功能模块化、服务化,具体分为认证服务、应用服务、用户服务、审计服务;

2.支持分布式架构。 

功能层:

每个服务模块的具体功能实现,功能内聚。 

数据层:

实现用户身份数据、业务数据、日志数据存储。 

技术特点

CARTA体系能够将人工认证、实体认证、移动认证、人机识别、无感知认证等多种复杂的方式步骤通过简单的账号统一、移动认证、连续自适应三个环节完成,精简认证体系,完成有效认证的同时也提高了效率。并且通过CARTA和UEBA等理论体系,针对数据进行持续的采集、多方面的判断,当用户数据发生改变时,能够及时根据风险弹出提示并选择新的认证方式,从而执行相应的措施。

微信图片_20181030143211.png

微信图片_20181030143237.png

总结

互联网+时代,本质便是“以人为本,连接一切”。因此,如何合理的利用生物识别等技术进行正确的身份认证将是智能化时代非常关键的技术。

2010年,约翰·金德维格曾提出过“零信任架构”的观点。零信任是一个安全概念,中心思想是企业不应该自动信任内部或外部的任何人/事/物,应当在授权前对任何试图接入企业系统的人/事/物进行验证。简而言之,就是不相信任何人,除非能明确对方的身份。

如今,网络攻击日趋凶悍,零信任架构也逐渐成为了互联网世界中一大主流技术框架。在此基础上,芯盾时代聚焦“以人为核心的业务安全”,加快了行业布局,在以身份认证为核心的技术上领先世界,为广大用户提供一流的“移动、可信、安全、智能”的业务解决方案。


WitAwards 2018 颁奖盛典 |  FIT 2019 互联网安全创新大会即将揭晓

WitAwards年度互联网安全评选活动由国内信息安全新媒体领导者 FreeBuf.COM 主办。评选周期历时3个月,评委包括顶尖行业专家、行业媒体和安全从业者,颁奖盛典将在FreeBuf 互联网安全创新大会(FIT 2019)举办。WitAwards 2018「公众投票」通道现已开启「WIT2018评选官网」。

WitAwards年度互联网安全评选,旨在发掘全年卓越的安全产品和杰出人物;给予在2018年为安全行业做出贡献的个人、团队及产品以掌声和肯定。

微信图片_20181025115304.png

历时90天,近500项申报及提名,经WIT组委会严格审核,共预录取近110席入围项目。FreeBuf现邀请每一位安全领域从业者、爱好者,共同选出安全领域Top Icon,一起见证年度安全盛誉的诞生,为数万名从业者和数百款安全产品的努力与创新喝彩!

15375287396988.jpg

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

前言

国外大神Kevin Backhouse刚刚放出了一篇博文,对苹果操作系统内核中发现的堆缓冲区溢出漏洞(CVE-2018-4407)进行了一番解构。

微信截图_20181031152439.png

该漏洞使得攻击者只要接入同一Wi-Fi网络,即可向其他毫不知情的用户发送恶意数据包来触发任何Mac或iOS设备的崩溃和重启。由于该漏洞存在于系统网络核心代码,因此任何反病毒软件均无法防御。

运行以下操作系统的设备易受攻击:

Apple iOS 11及更早版本:所有设备(升级到iOS 12的部分设备)

Apple macOS High Sierra(受影响的最高版本为10.13.6):所有设备(通过安全更新2018-001修复)

Apple macOS Sierra(受影响的最高版本为10.12.6):所有设备(通过安全更新2018-005中修复)

Apple OS X El Capitan及更早版本:所有设备

好在Kevin在发现这个漏洞后马上就向苹果报告了,苹果在10月30日推出的iOS 12.1更新包中彻底修复了这个漏洞。

概述

该漏洞是苹果XNU操作系统内核中网络代码的堆缓冲区溢出问题导致的,iOS和macOS都使用XNU,因此iPhone、iPad和的MacBook均受到影响。想要触发该漏洞,攻击者只需要连接到与目标设备相同的网络,发送恶意IP数据到目标设备的IP地址即可,无需诱骗用户进行任何交互操作。

icmp

举个例子:

用户在咖啡馆使用免费Wi-Fi时,攻击者可以加入相同的无线网络并向用户的设备发送恶意数据包就可以让设备崩溃和重启。(攻击者只要使用NMAP工具就能很方便地获得设备IP地址。)

由于该漏洞的成因来源于系统的核心代码,反病毒软件也无法防御。 Kevin在运行McAfee ® Endpoint Security for Mac的Mac上成功测试了该漏洞。这和用户在设备上运行的软件也没有关系,即使没有打开任何端口,恶意数据包仍会触发漏洞。

进一步推测的话,由于攻击者可以控制堆缓冲区溢出的大小和内容,因此他们可能利用此漏洞在目标设备执行远程代码。

缓解措施

在未升级到最新版本操作系统的设备上,目前已知的缓解措施只有以下两个:

在macOS防火墙中启用隐藏模式可防止攻击。这个系统设置默认情况下不启用,需要用户手动开启。iOS设备不支持隐藏模式。

不接入公共无线网络。触发该漏洞的唯一必要条件是处于同一Wi-Fi网络,该漏洞不支持通过互联网发送恶意数据包而触发,Kevin测试过了。

漏洞分析

该漏洞来源于代码中的缓冲区溢出(bsd/netinet/ip_icmp.c:339):

m_copydata(n, 0, icmplen, (caddr_t)&icp->icmp_ip);

函数icmp_error使用该代码,目的是“生成包含错误信息的数据包以响应发生错误的IP”。它使用ICMP协议发送错误消息,引发错误的数据报头包含在ICMP消息中,上述第339行代码调用m_copydata的目的是复制错误数据包的报头到ICMP消息。

问题在于报头对于目标缓冲区来说可能太大了。目标缓冲区是mbuf,mbuf是一种数据类型,用于存储传入和传出的网络数据包。在此代码中,n是一个传入的数据包(包含不受信任的数据),而m是传出的ICMP数据包。我们可以看到,icp是指向m的指针。m在第294行或第296行进行部署:

if (MHLEN > (sizeof(struct ip) + ICMP_MINLEN + icmplen))
  m = m_gethdr(M_DONTWAIT, MT_HEADER);  /* MAC-OK */
else
  m = m_getcl(M_DONTWAIT, MT_DATA, M_PKTHDR);

往下看第314行,mtod用于获取m的数据指针:

icp = mtod(m, struct icmp *);

mtod仅仅是个宏,因此这行代码不会检查mbuf是否足以容纳icmp结构。此外,数据没有复制到icp,而是复制到&icp->icmp_ip,存在+8字节偏移。

由于没有必要的工具,Kevin无法在调试器中单步执行XNU内核,因此对于mbuf的分配大小没有确切的数值。基于源代码提供的信息,这里推测m_gethdr创建一个mbuf可以容纳88个字节,m_getcl无法确定。但是根据实验结果,触发该缓冲区溢出漏洞时满足icmplen >= 84的条件即可。

漏洞的发现过程

使用QL查找漏洞

Kevin是在分析数据包管理程序缓冲区溢出漏洞时发现的该漏洞。漏洞是由对于mbuf_copydata的调用(包含用户控制的大小参数)引起的,因此只要写一个简单的查询脚本即可发现类似错误:

**
 * @name mbuf copydata with tainted size
 * @description Calling m_copydata with an untrusted size argument
 *              could cause a buffer overflow.
 * @kind path-problem
 * @problem.severity warning
 * @id apple-xnu/cpp/mbuf-copydata-with-tainted-size
 */

import cpp
import semmle.code.cpp.dataflow.TaintTracking
import DataFlow::PathGraph

class Config extends TaintTracking::Configuration {
  Config() { this = "tcphdr_flow" }

  override predicate isSource(DataFlow::Node source) {
    source.asExpr().(FunctionCall).getTarget().getName() = "m_mtod"
  }

  override predicate isSink(DataFlow::Node sink) {
    exists (FunctionCall call
    | call.getArgument(2) = sink.asExpr() and
      call.getTarget().getName().matches("%copydata"))
  }
}

from Config cfg, DataFlow::PathNode source, DataFlow::PathNode sink
where cfg.hasFlowPath(source, sink)
select sink, source, sink, "m_copydata with tainted size."

这是一个很简单的问题跟踪方法,它的查找范围涵盖m_mtod到CopyData函数的参数大小的数据流。m_mtod函数返回一个mbuf的数据指针,它很可能会返回不受信任的数据,所以mtod宏指令是根源所在。而m_mtod这只是XNU内核中不受信任数据的众多来源之一。

使用上述方法进行查询后返回9个结果,其中第一个是漏洞icmp_error,其他8个结果误报的可能性较大。

在XNU上尝试QL

与大多数其他开源项目不同,XNU无法通过查询LGTM获得有用的信息。因为LGTM使用Linux流程构建项目,但XNU只能在苹果电脑上构建。即使在苹果电脑上,构建XNU也非常不容易。Kevin参考了Jeremy Andrus的博客文章,才得以为三个最新发布的XNU版本手动构建了快照(下载快照10.13.410.13.510.13.6)。由于苹果尚未发布10.14(Mojave/ iOS的12)的源代码,因此无法创建QL快照来运行针对性的检查。要在这些QL快照上运行查询脚本,需要下载QL for Eclipse,点击 此处获得有关如何使用QL for Eclipse的说明。

漏洞验证视频

为了让苹果用户有充分的时间升级,Kevin不会立即放出PoC代码,而是制作了一个简短的视频来验证漏洞。

*参考来源:lgtm,Freddy编译整理,转载请注明来自 FreeBuf.COM。

usb-stealer.jpg

USBStealer是一款用于窃取Windows应用密码的工具,可以为我们从基于Windows的应用程序中提取密码,例如Chrome Password,FireFox Password,NetPassword,Windows管理员密码等。

要执行破解程序,目标机器需要为Windows系统,且需要获取超级管理员权限(admin Access)。

USBStealer是一款非常棒的工具,其中还包括了一些用于提取在线密码,用户名历史记录以及离线密码的工具。

一些可执行破解程序已压缩在单个文件夹中,用于提取Windows应用中的密码。

USBStealer是如何窃取密码和浏览历史记录的?

USBStealer拥有大量用于窃取Windows应用密码的Payload。攻击者只需将装载有Payload的U盘,插入目标Windows机器即可。

如果你需要管理员密码而你又忘了,你只需进入“USBCracker”文件夹并执行“Admin Cracker.exe”。你将在管理员模式下使用“cmd.exe”,然后键入以下命令:

->(Your Drive Letter):\

->cd USBCracker

->USBCracker.exe

GITHUB下载并解压缩USBStealer。

53233AE7-CB0C-4F02-BE4D-617C549E4DC8.png

可以看到,在文件夹中包含了许多用于不同应用的可执行文件,这些文件当前正在执行密码窃取任务。

-> USBCracker.exe(凭据抓取)(Totally Discreet)

-> Admin Cracker.exe(打开具有管理员权限的cmd.exe,绕过管理员密码限制)

下一步你将找到名为Browser History View的相关可执行Payload ,单击并执行后将弹出高级选项框。

你可以在此处自定义要从浏览器中提取的历史记录,日期,时间和类型。

4A2D74B8-DF78-4263-B222-67945D91E757.png

一旦文件被执行,你将在Notepad中获取到所有浏览器的历史记录。

E3338DA5-FCC4-4110-9E72-7CDA92D9D524.png

单击并执行ChromePass  payload,它将提取你用于登录的特定URL用户名和密码。

085AD45C-D42F-41FB-9A3A-69510DABAB37.png

单击WebBrowserPssView破解所有浏览器密码,所有用户名和密码凭据将被保存到Notepad中。

96738292-9BDD-49B3-B64B-CDED1EA2A99A.png

你可以在Notepad中查看所有被保存的密码,只需进入USBCracker文件夹并执行USBCracker.exe,等待大约10~15秒的时间密码将被导出到txt文件中。

同样,你也可以使用相同的方法使用PasswordStealer来窃取路由器和Skype的密码。

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

1.png

serviceFu

在近期所进行的安全审计活动中,我们的团队设计出了一种新的安全工具,并希望能跟整个社区一起分享。

当时在进行安全审计开始前,我们首先需要尝试获取到客户网络系统的初始访问权。这位特殊的客户之前曾投入过大量的人力和物力资源来提升企业网络系统的安全性。在客户域名系统中的大多数客户都需要进行智能卡认证,并且禁用了凭证缓存(Mimikatz的sekurlsa::logonPasswords无效),而且还设置了基于主机的日志记录系统(Powershell, Sysmon, HIPS)。

在进行了仔细分析之后,我们把注意力放在了一台更有“价值”的服务器上。这台服务器之所以“有价值”,是因为拥有高等级权限的网络管理员需要使用这台服务器来执行管理员任务。我们成功在这台服务器上发现了一个0 day漏洞,并且通过手动编码的形式设计出了漏洞利用代码,最终成功拿到了SYSTEM权限。

2.png

有了SYSTEM权限之后,我们就能够伪装成一些经常会登录目标系统的用户了,比如说通过注入用户进程或直接窃取他们的用户令牌。虽然这种技术可以有效实现提权和横向渗透,但是它要求我们能寻找到活动会话才能实现身份伪装。因此,这个过程可能需要我们等待用户登录才能实现提权,当他们注销账号之后,我们就无法使用他们的账号了。所以,这种技术只能用来寻找那些使用账号凭证登录的用户信息,而无法适用于采用智能卡认证的情况。

不过幸运的是,客户的活动目录在安装和配置时使用的是多个高等级权限的服务账号,而且涉及到域中的多台服务器。这些域服务账号使用了账号凭证来实现登录认证。Windows会在注册表HKLM:\Security\Policy\Secrets中为每一个服务的域服务账号服务账号存储一个加密后的凭证在lsadump::secrets module(Mimikatz)的帮助下,我们能够直接解密这些凭证。

接下来,我们的主要问题就变成了如何找出目标域服务账号下运行了那些服务组件:我们是对每一个系统手动运行mimikatz,还是在收集到系统信息和注册表键内容后在线下执行分析?虽然这并不是一个技术难点,但是我们很懒,能自动化完成的我们肯定不会手动进行。下面的截图显示的是mimikatz导出的每一个服务账号的凭证信息:

3.png

假设我们的工具运行在一台登录了管理员权限账号的目标主机上,我们将能够利用Win32 API来远程查询目标主机中运行的服务。我们可以通过解析服务启动名称来判断当前运行环境是否为系统级账号。如果确定了运行环境,我们就可以使用远程注册表API来存储系统信息和注册表信息了。接下来,在拿到相关注册表键之后,我们可以使用mimikatz来对其进行解析和解密,并获取到服务账号凭证。需要注意的是,我们之所以采用C++来开发这款工具,主要也是考虑到之后可以轻松将其以模块的形式整合进原生的C2框架之中。

4.png

不过我们得承认,这款工具只适用于这种特定情况,在其他特殊情况下该工具可能无法完成你所要求的任务。但不管怎样,它都能够帮助你远程扫描出整个目标域中域服务凭证的明文文本信息,这一点还是非常有用的。如果你对本项目感兴趣的话,欢迎到我们的GitHub上留言或提交代码。

工具地址

serviceFu:【GitHub传送门

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

Canary(中文名:金丝雀)库结合了输入匹配和自动通知,可以更轻松的检测潜在的攻击。

煤矿中的金丝雀

当人们谈论安全和发现问题时,我确信你已经听说过“煤矿中的金丝雀”这句话了。在过去,矿工们在挖掘煤矿时,会有有毒气体释放而被困的危险。其中一些气体难以被人类检测到,如果人类吸入足够多的有毒气体,可能会导致疾病甚至死亡。为了能够发现并避免这样的问题,矿工们会把金丝雀(鸟)带到矿井里。这种鸟对有毒气体更加敏感,如果有毒气体释放或者在其他危险接近的时候,金丝雀就会做出反应并提醒矿工们警惕危险。

在安全领域中,我们可以引入“金丝雀值”的概念,这与上面所讲述的内容非常相似。“金丝雀值”是指那些真实的或是伪造的并以某种方式暴露在你的系统之外的问题。当使用这个值时,则需要立即通知到你,以便收集有关使用情况和相关问题的更多信息并采取措施。下面是一些可能存在的例子:

1.管理员帐户上已锁定的用户名

2.一直返回失败的API令牌

3.实际上并不存在的实体ID

基本上,“金丝雀值”可以是你想要检测的任何数据,这些数据可能是真实的或伪造的。当攻击者使用其中一个值,你就会马上收到通知;这可能意味着有人在不应该待着的地方徘徊,或者可能你应用程序中的其他信息已被泄露。PHP应用程序现在可以使用psecio/canary库轻松处理检测和通知过程。

金丝雀软件包

psecio/canary软件包的创建是因为我们在某些值被检测到时需要触发对多个服务的通知。该软件包提供了两项功能:

· 它允许你定义在传入的数据中要查找的“canary”键/值对。默认情况下,该数据将包括PHP超全局变量$_GET,$_POST和$_SERVER['REQUEST_URI']。

· 它提供了各种适配器,可在检测到的键/值匹配时处理通知。

至今,可提供的通知方法包括:标准PHP错误日志,通过Monolog记录,通过PagerDuty和Slack通知进行消息传递。它还允许定义自定义回调,所以你可以根据你的需求进行更多的自定义设置。

安装Canary

Canary软件包可以通过Composer软件包管理工具轻松安装。使用下面的命令将该软件包导入你的项目:

composer require psecio/canary

psecio/canary库有一些可选项的被标为“建议”的依赖项,为不同的通知服务提供以下功能:

· monolog/monolog 用于Monolog日志记录

· nmcquay/pagerduty用于PagerDuty消息传递

· maknz/slack用于发送Slack消息

如果你没有为匹配项定义自定义处理程序,则该软件包将会默认报告与标准PHP错误日志相匹配的项。

基本用法

安装软件包后,使用它就很简单了。Canary具有流畅且“用户友好”的设计界面,非常的易于理解。你可以使用if/then的逻辑关系定义匹配项和通知。在if中定义要匹配的键和值,在then中定义通知方法。

下面是一个基本的示例。请记住,通知方法默认为PHP错误日志:

<?php
require_once 'vendor/autoload.php';
\Psecio\Canary\Instance::build()
    ->if('username', 'foobar')
    ->execute();
?>

执行此代码时,将检查传入数据中的username值。如果匹配到了,Canary则会根据我们的标准来检查这个值。在这种情况下,如果传入值与我们的“foobar”要求相匹配,则会向PHP错误日志发送通知,如下所示:

Canary match: {"type":"equals","key":"username","value":"foobar"}

输出的内容包括匹配的JSON数据:匹配类型,检测到的key和这个key的值。此JSON输出格式在不同的通知方法中是一致的。

注意:目前看来,没有办法更改输出的字符串或内容。但是,如果你使用Monolog做集成,则可以随时使用自定义的处理器修改消息内容。

如果你想使用其他集成方式,则需要使用then方法调用进行设置。例如,如果我们想要设置Slack通知,我们首先需要创建我们的客户端,然后在我们匹配到相应的值时,将变量传入then方法:

<?php
require_once 'vendor/autoload.php';
$settings = [
    'channel' => '#notifications'
];
$slack = new Maknz\Slack\Client('https://hooks.slack.com/services/....', $settings);
\Psecio\Canary\Instance::build()
    ->if('username', 'foobar')
    ->then($slack)
    ->execute();
?>

在上面的代码中,我们使用自定义的配置($settings变量)创建了Maknz\Slack\Client实例,可以将消息发送到指定的地址。然后将此实例添加到匹配中,并将实例作为参数传入并调用then方法。结果类似于前面的示例,不同点在于消息不是通过PHP错误日志而是通过webhook集成发送到了Slack通道。

所以,你可能不禁会问 :“一次只匹配一个键/值集的用途是什么?这似乎不太灵活。”Canary允许你定义多个键/值对,同时监视所有的键并将通知发送到单个目标。下面的代码也许可以实现:

<?php
require_once 'vendor/autoload.php';
$matches = [
  'username' => 'foo',
  'test' => 'bar'
];
\Psecio\Canary\Instance::build()->if($matches)->execute();
?>

上面的代码显示通过使用基本数组一次定义多个匹配。由于没有调用then方法,所以如果匹配到了指定的值则消息将被发送到错误日志。当你像这样定义多个匹配时,通知只能发送到一个目标。如果你希望不同的“金丝雀值”通知到不同的目标,你需要多次调用if/ then:

<?php
require_once 'vendor/autoload.php';
$canary = \Psecio\Canary\Instance::build();
$slack = new Maknz\Slack\Client('https://hooks.slack.com/services/....', [...]);
$matches = [
  'username' => 'foo',
  'test' => 'bar'
];
// Goes to just the error log
$canary->if($matches);
// Send this one to Slack instead
$canary->if('username', 'testuser')->then($slack);
// Execute all checks and notify
$canary->execute();
?>

动态标准和回调

我想要介绍的另外两个功能有助于你更灵活的使用Canary库:使用类/方法路径来定义多个匹配并使用自定义闭包回调来做通知。

首先让我们看一个使用类路径动态提取匹配项的示例:

<?php
require_once 'vendor/autoload.php';
$path = '\Foo\Bar::criteria';
\Psecio\Canary\Instance::build()->if($criteria)->execute();
?>

代码中使用我们的源定义了$path变量的值,该值指向了可以返回数组的静态方法。使用这种方法,我们可以抽象出逻辑,因此在我们的检测点中并非一直都是硬编码的。类定义如下所示:

<?php
namespace Foo;
class Bar
{
  public static function criteria()
  {
    return [
      'username' => 'foo'
    ];
  }
}

显然,在这个例子中,该方法只返回了一组硬编码的键/值对,但你可以将返回值更新为你从数据源中获取的任何数据。这种方式防止你在每个入口点的代码中定义自定义的逻辑。

接下来,我想说明的一个用于then处理程序的custom closure(自定义闭包)的例子。虽然已经集成了几个外部服务,但有时你可能需要一个自定义的解决方案来记录其他内容。在这种情况下,你可以使用回调并使用use方法导入调用的依赖项。示例如下:

<?php
require_once 'vendor/autoload.php';
$path = '\Foo\Bar::criteria';
\Psecio\Canary\Instance::build()
  ->if($criteria)
  ->then(function($criteria) use ($adapter){
    $adapter->send($criteria->toArray());
    // It also allows for JSON encoding
    echo json_encode($criteria);
  })
  ->execute();
?>

这个例子非常简单,但它显示了我所描述的基本的想法。闭包是通过手动调用then方法传入的,当找到匹配时,会使用 $criteria匹配的信息调用$adapter。然后可以通过toArray调用格式化输出,或者你可以对输出进行json_encode来获得与其他的目标类型中的输出所类似的字符串。

在中间件中的使用方法

上面我已经展示了如何单独使用Canary,现在让我们看一下如何在实际的PHP应用程序中的中间件中使用Canary。为简单起见,我将使用Slim框架应用程序,其中包含了每个请求的自定义中间件。

首先让我们安装依赖项:

composer require psecio/canary slim/slim

安装完成后,在当前目录中创建index.php文件,文件包含以下内容:

<?php
require_once 'vendor/autoload.php';
$app = new \Slim\App();
$app->add(function($request, $response, $next) {
  \Psecio\Canary\Instance::build()->if('username', 'test')->execute();
  $response = $next($request, $response);
  return $response;
});
$app->get('/', function($request, $response) {
  $output = '<a href="/?username=foo">no trigger</a><br/>';
  $output .= '<a href="/?username=test">trigger</a><br/>';
  $response->getBody()->write($output);
  return $response;
});
// Run the application
$app->run();
?>

要运行该应用程序,你可以使用PHP的内置Web服务器。在与index.php文件相同的目录中,使用命令行执行以下命令:

php -S localhost:8080

然后访问http://localhost:8080。你会看到包含两个链接的页面:“无触发”和“触发”。你还会注意到,运行PHP命令的窗口显示了根路径的请求日志。当触发匹配时,在这个命令窗口会显示错误信息(基本上是内置的PHP Web服务器的“错误日志”)。

如果单击“无触发”链接,你会重定向到一个在URL上指定了username的值作为参数的页面。在这种情况下,username的值为“foo”。由于我们的中间件中正在寻找的值是“test”,因此不会触发任何通知。现在点击另一个链接 —— “触发” —— 你会在日志中看到不同的输出:

[Tue Feb 27 14:22:30 2018] Canary match: {"type":"equals","key":"username","value":"test"}
[Tue Feb 27 14:22:30 2018] ::1:49471 [200]: /?username=test

username值与我们在if检查中定义的值是相匹配的,因此会触发通知并将输出发送到错误日志记录。通知是在记录页面输出信息之前发生的,因为中间件在任何路由的请求处理发生之前就已触发。这里有更多关于Slim的运作方式,然而,这些方式并不适用于所有框架。这个例子说明了如何在中间件中使用Canary并在每个请求上调用匹配查询,但Canary肯定能做到比代码中展示的更专业的事情。你可能只是在请求某些端点时调用匹配查询,甚至也可以使用更复杂的条件来做限制。

封装

Canary库提供了一种简单的方法来检测输入并在匹配时处理通知。本文未涉及Canary库的高级用法,但在项目的README中有详细的说明。当然,Canary是一个开源项目,所以如果你有任何建议或发现了任何问题,请随时提交你发现的问题,甚至提交更新请求!

资源

研究人员发现macOS系统中一个伪装为加密货币ticker(股票价格收报机)的木马CoinTicker正在用户设备上安装后门。

成功安装后,CoinTicker应用允许用户选择不同的加密货币以监控其实时价格。然后会安装一个小的信息插件到macOS菜单栏,以实时更新当前价格,如下图所示。

Coin Ticker Mac Application

CoinTicker木马应用

CoinTicker应用在后台会秘密下载两个后门,这两个后门可以让攻击者远程控制受感染的计算机。Malwarebyte将其命名为1vladimir,在木马执行时会连接到远程主机,并下载大量的shell和python脚本,python和shell脚本的执行会下载和安装这两个后门。

Malwarebyte分析师称:恶意软件加载时,应用会下载和安装两个开源后门组件EvilOSX和EggShell。然后木马会从Github上下载EggShellEvilOSX后门的定制版本。首先,用下面的命令下载EggShell后门:

Download EggShell

下载EggShell

下载后,会创建一个启动代理,当用户登陆到mac系统中后自动开启EggShell后门。

Create Launch Agent

创建启动代理

之后会用混淆的脚本来下载EvilOSX后门。在执行下载时,恶意软件会发送不同的配置选项,这些配置选项自动加入到下载的后门中。

Download EvilOSX

用自定义配置下载EvilOSX

同样也会为EvilOSX后门创建自动启动的启动代理。

目前尚不清楚Coin Ticker就是一款恶意软件,还是被攻击者入侵了。Coin Ticker下载的web站点也没有任何联系信息,只有一个下载按钮,研究人员猜测这只是为了传播木马制作的shell。

CoinTicker Web Site

随着网络安全防御能力的不断提高,网络犯罪分子也已经学会如何让恶意软件变得更有创造性。趋势科技的研究人员最近新发现了一波垃圾邮件活动,攻击者将恶意附件隐藏在了一些老旧格式但以前很少使用的文件类型中。垃圾邮件目前仍然是网络犯罪的最爱的攻击方式之一,这种用户攻击的垃圾邮件占全球所有电子邮件流量的48%以上。

2017年的年度综合报告中,研究人员发现与恶意软件相关的垃圾邮件活动中使用的最常见文件类型是.XLS,.PDF,.JS,.VBS,.DOCX,.DOC,.WSF,.XLSX,.EXE和.HTML。但网络犯罪分子正在扩大他们滥用的文件类型。以下详细介绍了网络犯罪分子如何以全新的方式使用旧文件类型,以试图逃避垃圾邮件过滤器。

.ARJ和.Z文件

ARJ是“Robert Jung Archived by Robert Jung”的缩写,是一个与. zip一样诞生于90年代的档案压缩工具,但它的受欢迎程度不及. zip。尽管2014年,就有攻击者使用.ARJ文件扩展名来通过垃圾邮件发送恶意文件,但研究人员最近看到使用.ARJ文件向用户传送恶意文件的数量却在激增。最近,研究人员检测到了近7000个在ARJ中压缩的恶意文件。

1.jpg

具有恶意.ARJ文件附件的垃圾邮件活动的感染过程

2.jpg

带有.ARJ文件附件的垃圾邮件的屏幕截图

研究人员最近发现了一个传播恶意. arj文件的小型垃圾邮件活动。其中一些垃圾邮件的主题与报表或采购订单相关,例如“和对你的结算余额表”,“New Order-Snam Thai Son Group // PO // Ref 456789”和“主题:渣打银行的建议”等等。

将恶意.ARJ文件下载到设备后,它可能会删除并执行一个普通的可执行文件或一个可执行屏幕保护程序文件。

3.jpg

.Z文件内容

早在2014年,一旦成功解压缩到系统中,带有.ARJ文件附件的垃圾邮件活动就会将受感染的计算机作为可用于垃圾邮件或拒绝服务攻击的僵尸网络的一部分。今年,有效载荷是一种间谍软件(由趋势科技检测为TROJANSPY.WIN32.GOLROTED.THAOOEAH),可窃取系统信息以及来自浏览器的用户名和密码,此恶意软件还会尝试从多个电子邮件服务平台窃取存储的电子邮件凭证。

网络犯罪分子也恶意使用.Z文件, .Z文件扩展名是压缩的基于Unix的设备文件,尽管它的用户受欢迎程度方面已经被GNU Gzip压缩所取代。因为它看起来有一个双重文件扩展名(例如.PDF.z),用户可能会被欺骗,认为他们正在打开的是PDF而不是.Z文件。

4.jpg

伪造的采购订单的屏幕截图,其中.Z文件扩展名作为附件

与.ARJ文件一样,存档文件可能包含普通的.exe文件和可执行的屏幕保护程序文件。

研究人员看到了一个带有.Z文件附件的垃圾邮件的攻击活动,该附件带有后门载荷(趋势科技检测为BACKDOOR.WIN32.REMCOS.TICOGBZ),可以打开、重命名、上传和删除受影响的计算机中的文件,记录键盘输入,甚至使用计算机的摄像头和麦克风捕捉图像和声音。今年早些时候,安全研究人员还发现了一个垃圾邮件活动,该活动通过.Z文件附件向潜在受害者发送了DarkComet RAT。

 .PDF文件

使用.PDF文件来传播恶意软件并不是什么新鲜事,事实上,研究人员看到了一个恶意垃圾邮件活动,该活动使用.PDF文件传播下载器和后门,今年年初时,目标针对的是金融机构。随着网络犯罪活动的不断创新,网络犯罪分子似乎渴望在他们的代码中使用已知的成功技术。最近,研究人员看到网络犯罪分子在.PDF附件中嵌入.IQY文件和.PUB文件。

下载后,将使用JavaScript代码执行恶意.IQY和.PUB文件。

5.png

在JavaScript中执行的.IQY和.PUB文件扩展名的屏幕截图

这段JavaScript代码使用exportDataObject函数导出并启动恶意软件,在本文的案例中,由“nLaunch”指定,而导出的对象或文件由“cName”指定。“nLaunch = 2”函数表示恶意文件将在启动之前保存在%TEMP%中。

6.jpg

使用嵌入了.PUB的.PDF文件的恶意活动的感染过程

.IQY文件

Microsoft Excel使用网络查询文件(IQY)将数据从互联网提取到电子表格中。为此,将URL嵌入到IQY文件中,此文件便于从指定的网页中提取数据。而这一特性却被Necurs僵尸网利用,2018 年5月25日开始, Necurs僵尸网络首次使用武器化的IQY文件附件。在本文的样本中,.IQY文件被嵌入在.PDF文件中。

在2018年8月15日,研究人员发现了一个垃圾邮件活动,其中传播了一个带有.IQY文件的.PDF。趋势科技仅在印度就检测到超过58000次的点击量,而其他国家包括越南、美国、中国和德国也都出现了多次点击。

7.jpg

恶意垃圾邮件活动的感染链,通过滥用.PDF文件中嵌入的.IQY文件来传播Marap木马

8.png

附加到垃圾邮件活动中使用的.PDF的.IQY文件的屏幕截图

研究人员最近还看到.IQY文件在日本被滥用,以用来传播BEBLOH或URSNIF恶意软件。

.pub文件

如今的垃圾邮件攻击活动已不会在典型文档中使用恶意宏文件,因此网络犯罪分子通过使用很少使用的文档来传播恶意软件继续提高攻击效率。 8月底发现的恶意垃圾邮件攻击就使用了一个特殊的Microsoft办公应用程序MS Publisher。就像嵌入的.IQY文件一样,打开MS Publisher文件会导致其中的恶意宏文件运行。

9.png

显示内部带有恶意宏的.PUB文件的代码的屏幕截图

在2018年8月21日,研究人员收到了有关垃圾邮件活动的SPN反馈,该活动传播了嵌入了恶意.PUB文件的.PDF附件。研究人员检测到攻击主要发生在印度,占检测数量的73%以上,其次是英国,占11%。在越南、中国、土耳其和美国也发现了一些来自此活动的垃圾邮件。

SettingContents-MS文件

随着Windows 10的发布,名为SettingContent-ms的新文件类型开始出现,该文件通常包含Windows函数的设置内容,主要用于创建旧Windows控制面板的快捷方式。网络犯罪分子利用此功能并将其嵌入Microsoft办公应用程序并不需要太长时间。7月初的垃圾邮件活动表明,网络犯罪分子将FlawedAmmyy远程访问木马(RAT)传播到嵌入PDF文档的恶意SettingContent-ms文件中。

10.jpg

使用嵌入了JavaScript代码和SettingContent-ms文件的恶意.PDF传播FlawedAmmyy RAT的恶意垃圾邮件活动的感染过程

最近,垃圾邮件活动和概念验证研究表明,如果使用恶意文件替换DeepLink标记下的命令行,可以滥用SettingContent-ms文件。

攻击指标(SHA256)

.Z文件附件

a22ede52f14be480dd478fa0ec955b807e4b91a14fbe1b5d46c07bbb5cacccbb

.ARJ文件附件

d5f4d2def36c54cd404742fe40583fa5805e55aa687063f9cd92bfd7378f7dc4

.PDF与.PUB文件附件

.PDF – Dd45ab22c16b843a8755f859103f4509fcbbd2da5d837e622cb37a16e53c8cc3

.PUB – 38066350f0ad3edfa2ccf534f51ad528b8bac6e8f1a2a5450556a33fdf345109

有效载荷(BKDR_FLAWEDAMMYY.EB)- eeae4955354e07e0df2c5ca3bdc830f6758c11ba185511ef4b3d82a9c1253e63

.PDF与.IQY文件附件

.PDF – B2b2ec71154a551b1af2cfc1611a6ed59821917c0c930ea6f737c586ecdfa147

.IQY – 3fd386172636a5c5b471d89c23e4d24cc36d42c90975245ab1a6525e7895fc57

有效载荷 – 996053ee305ee730f4095d9ee71447dd72815083c8cdf98e048f41185cf2b1d1

2016年9月,Twitter,CNN,Spotify以及许多其他网站被历史上最大的DDoS击败。现在我们知道它的名字叫Mirai,但当时没有人会想到该攻击来自由一群物联网(IoT)设备拼凑而成的一个僵尸网络。

Mirai于2016年8月由MalwareMustDie研究人员发现。虽然它不是第一个被发现的物联网恶意软件,但肯定是最突出的。

在美国东海岸大面积断网之后,自称为Anna-Senpai的恶意软件创建者发布了源代码,事情变得更加糟糕。从那时起,全世界有动机的黑客都将它作为一个框架来创建自己的僵尸网络。最后,原始恶意软件的创建者被逮捕并在法庭上认罪,但代码发布的影响大大加快了僵尸网络的创建。新的变种开始出现,增加了新的功能并利用了不安全的物联网设备中的种种漏洞。

一、任何人都可以做到

现在距离Mirai出现已经两年了,新的变种仍在造成破坏和伤害。没有经验的黑客正在对原始的Mirai代码进行微调、部署,积累新的僵尸网络大军。在某些时候,他们甚至将僵尸网络出租使用。

2018年7月,一个这样的网络犯罪分子出现了,当时有几个新的Mirai变种引起了安全研究人员的在线讨论,其中一位参与者是一个没有粉丝的Twitter账户,他指出研究人员在Mirai变种分类中犯了一个错误。为了证明自己,他发布了七个Mirai变种源代码的链接。我们下载源代码,分类并确定这七个变体与Mirai的真正不同之处(剧透:不是那么多)。

图1.负责代码发布的Twitter

二、Mirai简介

为阐明Mirai变体的差异,我们快速回顾一下Mirai。原始Mirai代码(code)的工作原理如下:

1.扫瞄互联网易受攻击的物联网设备。

2.尝试通过Telnet协议使用多个弱默认口令来暴力破解获取访问权限。

3.成功感染成为僵尸网络一部分的设备并开始扫描同网络中的其它易受攻击的设备并进行暴力攻击试图感染它们。

4.bot定期发送报告给命令和控制服务器(C&C)。C&C向bot发送命令或指令开启DDoS攻击。

由于大多数Mirai变体都是原始Mirai代码的副本,因此它们具有类似的代码结构。主要有三部分构成:bot,C&C服务器和加载程序。bot部分用C语言编写,C&C模块用Go编写。

在本分析中,我们将重点关注Mirai的以下变体:Akiru,Katrina_V1,Sora,Owari,Saikin,Josho_V3和Tokyo以及它们在bot目录下的三个模块:

· table.c:包含配置信息。

· scanner.c:包含要扫描的口令列表,用于发现可能存在漏洞的设备,并将扫描报告发送到加载程序。

· killer.c:包含有关应该杀死哪些进程的信息。

所有解码的passwords,字符串和其他信息都可以在本文末尾的补充信息中找到。

三、变体分析

Mirai代码是一个框架,任何找到新方法利用新设备的人都可以通过简单的添加来创建一个“新”变体。僵尸网络中的关键变量是命名以及口令列表、所针对的体系结构以及关闭(杀死)的端口(防止其他恶意软件在设备中获得立足点)。要了解变体之间的差异,可以进行相互比较,如下所示。

图2:此表包含每个变体的更改摘要

现在让我们来仔细看看差异。

1.命名

所有Mirai变体都具备成功执行检查字符串的功能。大多数变体的check-string对应于变体名。但也有几个例外,例如:Tokyo变体有一个默认的Mirai检查字符串,Sora变体没有名称,而Josho_V3有一个完全不同的名称。

2.口令

最早的Mirai代码使用了一个包含62个硬编码口令的列表,对易受攻击的物联网设备进行暴力破解(字典攻击)。该列表经过混淆,可使用密钥DEADBEEF进行解码。

通过查看变体,我们可以看到口令列表按bot 更改。我们获取并解码了每个变体使用的所有口令,以确认口令列表是否重用Mirai代码,或者是否有重叠。最大的口令列表是在Saikin变种中实现的,有80个口令,其中只有4个与原始的Mirai代码重叠。通过选择实施不同的口令列表,攻击者瞄准不同的物联网设备。

3.新端口

就像Mirai一样,每个变种都有一个模块killer.c,它有几个目的。首先,清除当前设备上运行的其他恶意软件。其次,可以防止其他人通过Telnet,SSH或HTTP远程访问设备。分析显示,除了拥有标准的Mirai kill端口之外,七个变种中的五个(Saikin和Josho_V3除外)在其kill名单添加了新的协议/设备特定端口。这些端口是:与Netis路由器相关的端口53413,与华为HG532路由器相关的端口37215,来自Realtek SDK的端口52869 UPnP SOAP服务,以及CCTV-DVR相机的端口81。添加这些端口将允许僵尸网络作者连接到更多设备,同时防止其他人远程连接到这些设备。

4.新架构

我们所看到的所有Mirai变体都采用了与Mirai相同的架构,其中只有三个:Sora,Saikin和Akiru增加了两个新架构:ARC(Argonaut RISC Core)和RCE(Motorola RCE)。

在仔细研究Mirai及其变体之后,我们开始尝试了解变体背后的人以及共享它们的twitter。

四、顺藤摸瓜

在查看了代码之后(本文稍后将对其进行分析),很容易看出虽然这段代码能够造成很大的破坏,但与原版Mirai源代码相比变化并不显著。它利用了Mirai的一些模块化架构来破解新设备并在试图感染的设备中设置防御,但并没有提供任何真正新的或值得注意的东西。

我们之所以感兴趣,主要是想了解这个僵尸网络的工作原理,因此我们决定开始追踪作者的身份。

起初,我们怀疑400kQBOT Twitter背后的人是Owari/Sora的知名攻击者和创造者,他曾在接受采访时称自己为Anarchy,也被称为Wicked

然而,通过简单的谷歌搜索,我们偶然发现了一些似乎指向不同方向的另外一些信息。我们发现另一个目录包含Mirai变种的泄漏源代码,这些代码实际上与400kQBot泄漏的样本相同。在已编译的Mirai变体,编译器和有关如何编译Mirai源代码的教程的源代码中,我们发现了一个带有以下消息的文本文件。作者自签名为Scarface#1162。

图3:来自Scarface#1162的消息

简单的名称搜索显示,Scarface#1162不仅在做“慈善”工作,还编写和发布僵尸网络的源代码。此外,他还将访问僵尸网络作为一项服务进行出租。

图4:Scarface提供的僵尸网络设置服务

他还有一个YouTube channel ,在那里他展示了自己的黑客技能,接管了其他人的僵尸网络。在一个视频中,他实时展示了如何接管Akiru僵尸网络,然后通过聊天应用程序渠道告知其创建者,我们的老朋友Wicked是“金钱团队员工”。除了Wicked之外,另一个熟悉的名字引起了我们的注意:Anarchy。所以,也许Wicked和Anarchy不是同一个人,而是来自同一个团队的两个不同的人。

我们怀疑400kQbot和Scarface是同一个人,这一点在9月中旬得到确认,他在400kQBot的推文中予以承认。

所以,现在我们必须做点什么。Scarface正在成为一个新的,相当具有破坏性的僵尸网络的作者,并且喜欢吸引研究人员和媒体。但我们仍然没有弄清楚他(或她?)是谁。

我们在研究代码时发现了一条线索。当Mirai攻击设备时,它使用检查字符串作为成功完成一系列命令的标志。我们没有关于Scarface如何访问这些变体的信息,也无法确认他是否是作者。例如,其中一个变体Josho_V3具有不同的检查字符串:daddyl33t:applet not found。

对于那些从未听过这个故事的人来说,daddyl33t是一个13岁的青少年,一个正在寻找开发岗位的自由职业者,他试图通过编译QBot僵尸网络来磨练脚本技能。也许这位13岁的寻求噱头的人也是与Wicked和Anarchy一起赚钱的团队的一部分。也许他们都是同一个人。

我们发现自己有几个选择和关联可供考虑,但没有一个为我们指明方向。Scarface是否因为采用不同的假名来处理不同的恶意软件而误导我们所有人?他和daddyl33T一样,还是仅仅提到他作为误导?这给我们留下了一些线索,但没有足够的真实信息来得出任何结论。

五、总结

从泄漏的源代码中创建Mirai变种超级简单,因此看到刚起步的网络犯罪分子通过僵尸网络赚钱也就不足为奇。僵尸网络是一种多功能工具,可用于启动DDoS,进行cryptomine或充当恶意软件代理。

在创建恶意软件、出租或出售其功能相对容易的这个时代,许多人都在大量使用这项技术。任何人都可以使用Mirai框架在任意地方添加一些密码,通过僵尸网络名称获得创意(现在是表演时间),准备好感染和获取利润。

像这七个一样基于Mirai的僵尸网络变种每天都在进步。他们越来越好的控制设备,将其他攻击者踢出,然后锁定他们在设备中的位置。实际上很少有物联网设备能被很好的更新或保护,从而不会被吸引到僵尸网络中去。

几十年来,我们一直担心病毒会访问我们的PC和手机。这是正确的,但具有讽刺意味的是,我们保护好了笔记本电脑,但安全性欠佳的物联网设备却让个人网络敞开了大门。

僵尸网络是物联网时代的无受害者犯罪吗?不是这样。虽然普通消费者几乎不可能确定他们的物联网设备是否已被Mirai或其中一种变体感染,但它可能会对处理速度,功耗和整体性能产生明显影响。随着我们将越来越多的智能设备带入生活,这些僵尸网络感染和攻击的能力提高,他们可能造成的破坏也随之水涨船高。

如果在家中,家庭办公室或小型企业都有路由器,则可以采取以下步骤来保护个人网络:

1.一旦获得路由器和任何物联网设备,请立即更改默认管理员密码。

2.使用最新的固件更新,使设备保持最新状态。

3.在路由器设置页面中禁用远程管理。

4.如果不确定设备是否已被感染,请考虑将设备重置为出厂设置。

为了减少WEB响应时延并减小WEB服务器负担,现在WEB缓存技术已经用的非常普遍了,除了专门的CDN,负载均衡以及反向代理现在也会缓存一部分的网页内容。这里我要介绍一种WEB缓存欺骗攻击技术,这种攻击技术针对Paypal有成功的攻击案例。

背景原理

先简单介绍一下WEB缓存技术,它主要是缓存一些静态的,公开的文件,如CSS文件,JS文件,图片等。缓存分两类,一类是本地缓存,通过在浏览器上缓存实现,缓存之后通过F5刷新是不会重新获取已缓存文件的,通过Ctrl +F5强制刷新才会重新获取。另一类是在服务端实现,也就是在CDN、负载均衡、反向代理(后面统称缓存服务器)上实现,这次介绍的攻击技术就是针对这一种缓存。服务端的缓存原理是:客户端请求一个静态文件,如果缓存服务器没有缓存过这个文件,就会像WEB服务器请求,获取到静态文件返回给客户端,同时将这个文件缓存下来,下次再遇到同样的请求时就直接返回,直到这个缓存文件过期。

接下来讲一下WEB服务器解析的问题。假设客户端请求http://www.example.com/home.php/nonexistent.css 这个URL,其中home.php是真实存在的,而nonexistent.css不存在,那WEB服务器会怎么处理呢?针对这种情况的处理跟WEB服务器用的技术以及配置相关,有的会返回404 not found,有的会返回200 OK,然后把home.php返回回来。如果服务器返回200 OK就要注意了,这时缓存服务器拿到的请求是http://www.example.com/home.php/nonexistent.css,是一个静态页面,而WEB服务器返回给缓存服务器的结果是http://www.example.com/home.php,不是一个静态页面,但是缓存服务器并不知道。

攻击方法

根据上面的背景原理介绍,攻击方法也很容易总结出来了:

1.攻击者引诱已登录的用户(受害者)访问https://www.bank.com/account.do/logo.png

2.受害者请求https://www.bank.com/account.do/logo.png

3.缓存服务器接收到请求,没查到这个页面,于是向WEB服务器请求

4.WEB服务器返回https://www.bank.com/account.do,状态码是200 OK

5.缓存服务器收到结果,由于状态码是200 OK,会认为URL保持不变,然后由于这个URL以.png结尾,认为它是一个静态文件,于是会缓存这个文件

6.受害者得到正常结果

7.攻击者访问https://www.bank.com/account.do/logo.png,请求到达缓存服务器,缓存服务器直接返回受害者的缓存账户页面给攻击者,攻击完成。

image.png

这里有一个问题,就是HTTP header里面有一个Cache-Control,用于指示是否要缓存该页面,但是很多情况下,缓存服务器是不看这个的,直接根据文件后缀判断。

这种攻击的结果就是将受害者的个人页面变为了一个缓存在服务器上,可以公开访问的页面。这个页面可能包含受害者敏感信息,如银行卡号,也可能有这个受害者的会话标识、密保问题答案、CSRF token等,有可能让攻击者获取到受害者账号的控制权。

攻击成功的条件

我们再来梳理一下这个攻击的条件:

1.WEB服务器会将类似http://www.example.com/home.php/nonexistent.css这种页面解析为home.php

2.缓存服务器会无视http header,只根据文件后缀来判断是否缓存该文件

3.受害者访问该页面时必须已登录

那么,那些组件满足这些条件呢?(以下具体的配置请参见文末所附链接)

符合条件1的WEB服务器有:

l  原生的PHP

l  通常配置下的基于python的WEB框架Django

l  某些配置下的ASP.NET

符合条件2的缓存服务器有:

l  某些配置下的Nginx

l  某些配置下的Cloudflare

l  某些配置下的IIS ARR

从这个总结可以看出,多数情况下这个是可以通过配置避免的,所以有些人认为这不算是个漏洞,所以也并没有什么补丁来解决这个问题,估计这个问题在很多地方都存在。

防御建议

根据触发条件我们给出的修改建议如下:

1.配置缓存服务器根据http header来判断是否缓存页面;

2.将所有静态文件放在指定的目录,只缓存这个目录里的文件;

3.配置WEB服务器在解析类似http://www.example.com/home.php/nonexistent.css 这种页面时返回404或者302。

原文信息

本文根据Omer Gil的文章翻译而成。他创新地颠覆了WEB缓存欺骗利用方式,通过控制 Web 缓存可以保存其它用户的敏感数据,并成功在 Paypal 中实现了攻击复现。从 Omer Gil 的演讲和报告中可以看到,Web 缓存欺骗是一项厉害且有想像力的技术,这种技术可以在多种主要的缓存机制中利用实现,为未来的深入研究提供一个很好的基础平台。

随着应用程序安全性的不断成熟,寻找真正的新技术变得越来越难,所以在不断的演化过程中,能看到这种可证实的安全隐患,非常令人耳目一新。因此,这种攻击技术被评为2017十大WEB黑客技术榜单的第二名。

演示视频:

原文链接:https://www.blackhat.com/docs/us-17/wednesday/us-17-Gil-Web-Cache-Deception-Attack-wp.pdf

*参考来源:blackhat,本文作者:lex1993,转载请注明来自FreeBuf.COM

一、概述

本文主要介绍了macOS浏览器扩展所采用的技术,以及恶意插件如何窃取密码、银行信息和其他敏感用户数据。

安装浏览器扩展,实际上是用户能对安全系统做出的最为简单的第三方修改之一,但也可能是最为危险的修改之一。许多用户认为扩展就是各种各样的“小型应用程序”,能在浏览网页时提供一些简单有用的附加功能,例如阻止广告内容、允许标记、自动填写表单字段等。但是,有相当一部分用户并没有意识到这些扩展所潜藏的巨大力量。

在本文中,我们首先将了解Safari浏览器扩展的安全定义,并对恶意广告软件活动中使用的浏览器扩展进行分析。此后,我们将介绍macOS 10.14 Mojave中针对Safari扩展安全性所做出的改变,以及如何解决其仍然存在的一些安全问题。

二、安全漏洞

在这里,我们主要分析恶意软件是如何通过浏览器扩展来实现漏洞利用。首先,我们要指出目前的扩展中普遍存在的一些安全问题,即使是合法开发人员开发的扩展中,也可能会出现这些问题。

我们留意到,DuckDuckGo在今年早些时候开始,为用户提供一个扩展,用于阻止广告和其他跟踪内容。DuckDuckGo的开发团队是可以信任的,并且这个扩展是有益的。然而,扩展中存在一个致命的问题:安装过程中所授予它的权限,远远超出其实际需要的扩展权限。这样一来,就导致了安全问题的出现。

1.png

根据扩展程序关于“在搜索和浏览网页的过程中保护用户数据”的声明,我们似乎可以理解为,扩展程序将有权限获取密码等敏感数据。

不幸的是,将这些特权授予给实际上不需要的扩展程序并不在少数。正如Apple开发者文档中所写,扩展可以执行例如将产品评级和评论添加到网站、将广告插入到网站、下载并注入脚本、修改Web内容等操作。并且,扩展可以在没有获得用户明确许可的情况下发送通知,还可以在后台无声的运行。

上述的这些功能,都是恶意软件开发人员所梦寐以求的漏洞利用工具,特别是在Safari扩展中还存在着多个安全漏洞,因此这些漏洞可能被恶意人员故意利用,也可能被合法开发人员无意制造。

扩展不需要在它们的包中直接包含所需的脚本,可以通过HTTP的方式远程获取。如果开发人员没有使用安全的HTTPS协议,可能就会发生中间人攻击,从而使攻击者编写的恶意脚本替换掉原有的脚本。

这也意味着,一些恶意攻击者可以开发恶意扩展,只需更改通过HTTP(或HTTPS)请求调用的脚本内容,就可以在安装扩展后修改其扩展行为。

扩展也应该支持“私密浏览”模式,但实际上这似乎取决于开发人员的具体实现。因为Apple的文档中只进行了建议:

在私密浏览模式下,您的扩展不应该存储有关用户操作的任何信息。您可以通过查询选项卡对象的私有属性(例如:safari.application.activeBrowserWindow.activeTab.private)来检查特定选项卡是否处于‘私密浏览’模式下。

仅凭这一点,就足以吸引任何一位恶意攻击者,也难怪如今恶意扩展已经成为恶意广告开发者(例如Genieo和Spigot)所使用的主要工具之一。在没有删除关联APP的情况下,恶意软件甚至可以阻止用户的卸载操作,这为进一步诱导用户提供了一个成熟的机会。

三、分析恶意扩展Pitchofcase

近期,我们观察到一个名为Pitchofcase的Safari恶意广告扩展,其中包含一些有趣的行为。

粗略来看,Pitchofcase像是普通的恶意广告扩展,在其启用后,会将用户搜索重定向到pitchofcase.com,其中包含一些按点击计费的地址。

http://searchv.oliverto.com/?b598a1d361f67b08aeee82e41686cd1a=FVNQWlVbFAAeXFNRWAFUV1dXV1gBUl9TUFBKQFwLUQFWWwAADAADXF9QUQxQVgNYVAUKU1VXWwFRDFRbB0EE&spt=ext&q=tagSearchQuery

这些扩展在后台无声的运行,没有工具栏按钮等任何与之交互的方式。

2.png

请注意上图中扩展程序所获得的权限。需要指出的是,这些权限都是默认获得的,无需进行权限提升。无论需要什么级别的权限,每个扩展程序都会显示出相同的警告提示,而用户只需要点击“信任”即可:

3.png

该警告提示中对信任此扩展产生的后果进行了简要说明,但不幸的是,在macOS系统的Safari中,可以在不经密码验证的情况下执行这一权限级别的操作。

接下来,我们尝试卸载恶意扩展,这时发生了有趣的情况。单击“卸载”按钮后,并不会按照预期的那样删除扩展,而是弹出以下警告:

4.png

这一行为是不寻常的,但也不是闻所未闻。一些信誉良好的应用程序,也会以相同的方式强制其用户使用特定的扩展(例如,Parallels Desktop强制在Safari中安装“Open in Internet Explorer”扩展程序)。用户完全可以禁用这一扩展程序,但如果想要删除扩展,需要先将父应用程序删除。

单击“在访达中显示”(Show in Finder)即可显示应用程序的位置,有助于卸载应用程序:

5.png

此时,一些安全意识较强的用户,可能想要了解Pitchofcase.app、Safari扩展和卸载程序如何正在VirusTotal上运行。该应用程序看上去是干净无毒的,但卸载程序引发了告警:

6.png

由于我们主要需要对Safari扩展进行分析,所以不会过多的分析卸载程序的功能。简而言之,通过对卸载程序进行代码审计,我们发现它主要在安装持久化代理:

7.png

以及筛选用户的浏览器历史记录:

8.png

而不是在进行它的本职工作——卸载程序。

但是,使用卸载程序作为一个感染的代理,这是恶意软件作者的一个聪明之举,并且与“不删除应用程序就无法移除扩展”这一特点相照应。正如我们看到的那样,扩展程序自身是无害的,只不过是一个让用户运行卸载程序的诡计。

四、深入理解Safari扩展

Safari扩展自身会对VT产生一些警告,但这些并不重要,原因在于它是安装扩展程序的“干净无毒”的应用程序。接下来,让我们对这一Safari扩展进行分析,查看它的具体行为。

Safari扩展实际上是压缩文件,为了深入分析扩展内部,我们要做的第一件事就是找出它所使用的压缩类型,可以使用find命令来实现:

9.png

在本文的样本中,使用了xar格式。接下来,就可以重命名文件并对其进行解压缩:

10.png

Global.html文件是我们的第一站。这个文件在Safari扩展的体系结构中是可选的,但如果包含这个文件,就可以加载一次性资源,例如注入脚本所使用的逻辑或数据。

在这种情况下,我们可以清楚的看到应该如何利用:

11.png

而在我们的下一站,Info.plist也明确表明扩展程序可能会查看安全页面:

12.png

尽管上述内容比较令人担忧,但最值得注意的一点就是它缺少通常会打包到这些浏览器插件之中的常用组件。没有专门的JS跟踪器脚本,也没有辅助函数,更没有尝试通过eval方法来执行恶意代码。与大多数扩展(包括合法和非法的)相比,Pitchofcase非常简单。

这使我们回到了“删除应用程序后才能卸载扩展程序”和“卸载程序产生的烦人警告”这两个特点。Pitchofcase的开发显然经过了深思熟虑,安装一个略显烦人但实际没有用的扩展,然后欺骗用户运行恶意的卸载程序以删除它。

五、如何安全清除Pitchofcase

对于那些在Safari中单击“卸载”按钮后严格按照提示操作的用户来说,这里有一个好消息。确实,删除扩展程序的唯一方法就是删除关联的应用程序,但删除并不意味着卸载。

用户应该忽略其自身提供的Uninstall.app,只需要将Pitchofcase.app和所有其他组件(包括卸载程序)都直接移动到废纸篓。在这样操作后,扩展程序也会随之删除。

恶意软件的开发人员走了一条不寻常的道路,并且抓住了那些习惯性遵循提示进行操作的用户心理,让用户使用开发人员提供的卸载程序来删除应用程序。针对受信任的复杂安装,这显然是一个比较好的做法。但针对于Pitchofcase来说,这是用来窃取数据的巧妙招数。

六、新版本的改进

正如Apple在WWDC 2018所指出的那样,有一些“遗留扩展”(Legacy Extensions),也就是在Safari扩展库(Safari Extensions Gallery)内外以.safariextz文件类型分发的扩展,它们非常强大,因为它们可以访问用户的所有浏览数据。这样一来,使得这些扩展非常受欢迎,特别是对于欺诈软件和恶意软件来说。

在2016年,Apple推出了Safari App Extensions。与用户必须独立于父应用程序安装、更新、删除的旧版Safari扩展不同,Safari App Extensions作为appex插件,包含在应用程序包中:

13.png

这意味着,它们与开发者ID相关联,并且可以通过App Store来提供。换而言之,扩展的分布范围与常规macOS应用程序的使用范围相同。

最近,在最新版本的Mojave和Safari 12中,传统的.safariextz已经被阻止,除非它们直接来自Apple官方的Safari Extensions Gallery。但这只是一个暂时的缓解措施。Apple原本打算完全放弃Gallery,直到2018年年底才开始接受开发者的提交。最终,只有与应用程序捆绑在一起的扩展程序才被允许在macOS上使用Safari。

当然,合法的开发人员很快就意识到,完全可以创建一个空的“Shell”应用程序,只为扩展程序提供包装,不包含其他任何功能:

14.png

我们相信,恶意软件作者很快就会模仿。

七、前进的一小步

从安全的角度来看,App Extension模型对用户来说既有利也有弊。其优点除了使相关应用更加紧密的集成之外,另一个优势是,在Mojave中,Apple增加了开发人员使用子资源完整性(Subresource Integrity)或SRI的能力。这也就意味着,开发人员可以防范MitM攻击(例如我们在前文中提到的攻击方法),确保可以根据开发人员在App Extension包中预先定义的校验值来检查通过HTTP或HTTPS方式下载的任何脚本。

15.png

八、后退的两大步

尽管这是一个很好的安全补充,能够帮助尽责的开发人员保护其用户,但它并不会防止恶意的开发人员将一个看似无害的扩展变成一个恶意软件投放工具(Dropper)。只有Apple开始要求必须具有SRI,MitM攻击的威胁才能真正被消除。

并且,这一机制也无法防范不遵循最佳实践原则的开发人员所编写的存在问题的应用程序。2017年,有研究人员发现Safari扩展库中有高达40%左右的扩展都包含同一个安全漏洞,这个漏洞并非Apple API中的错误所导致,而是大量开发人员未能遵循最佳安全实践,导致安全Token被泄露。

后退的第二步,是指这一改进使恶意软件进程具有了枚举已安装扩展的能力。此次新版本操作系统Mojave的一个重大变化就是锁定了对用户数据的访问。其中的一个锁定区域,就是用户的Safari文件夹。在早期版本的macOS上,恶意软件进程可以访问这一文件夹,并且枚举特定用户已安装扩展的列表:

16.png

这个命令无法在Mojave上成功执行,其实是一个提升安全性的改进。但前提是,需要保证用户保护无法被绕过。列出扩展名称,有助于恶意软件开发人员对用户进行分析,并有针对性的执行攻击。举例来说,恶意软件可以筛选具有购物扩展程序或密码管理工具的用户,并将攻击者的目标缩小到那些更有可能在计算机中保存信用卡信息的用户。另一种可能是,识别主流反病毒厂商开发的扩展程序是否存在,从而针对性的提供个性化漏洞利用工具包,或者选择是否向该用户传递恶意Payload。

不幸的是,App Extensions的改进破坏了此前全部为阻止访问Safari文件夹扩展数据所做的努力。将扩展程序作为应用程序包的.appex插件,直接导致恶意软件可以使用pluginkit实用程序来枚举已经安装的扩展:

17.png

九、重新回顾Pitchofcase

我们接下来重新回顾Pitchofcase。此前分析中已经进行了说明,如果不卸载应用程序就无法删除Pitchofcase。那么现在,基于我们对Safari App Extension模型的了解,我们来看看为什么会这样。

尽管Pitchofcase安装程序实际上确实包含遗留的.safariextz版本,但它是一个新的版本,需要删除相应应用程序才能卸载,对于当前使用新架构的所有扩展来说都是如此。一旦Apple完全停止Safari扩展库(大概是在2019年的某个时间),这将成为卸载扩展的唯一方法。

而Pitchofcase既不来自Safari Extensions Gallery,也不来自App Store,但仍然由其开发人员Genieo设定在Mojave 10.14上按照预期工作。

18.png

使用Safari 12的“显示所有历史记录”视图,我们可以轻松确定Genieo软件重定向的站点:

19.png

尽管Extensions的容器体系结构已发生变化,但实现细节大致相同。“script.js”文件现在位于.appex包的Resources文件夹中:

20.png

在Mojave上,能够像早期版本的macOS一样受到影响。对开发人员来说,似乎是一种诙谐的双关语“URL Hell”。

21.png

十、安全建议

通过本文的分析,我们可以看到,macOS的新架构Mojave及其使用的新安全协议并不能阻止恶意扩展的安装。至少,目前还不能。

但是,可以公平的说,Mojave采取了一些重要的举措来防范扩展带来的风险。目前,我们还没有找到一种方法能让应用程序自动启用它们的扩展。我们非常担忧任何带有appex插件的应用程序都会注册插件架构,于是尝试通过pluginkit在Mojave上启用这些实用程序,但结果都失败了,这一点还算是令人放心。

更重要的是,尽管存在用户被欺骗运行恶意卸载程序的风险(该场景已经真实发生),但随着时间的推移,相信会有越来越多的用户习惯这一新的特性,并会更加注意防范相关风险。此外,我们还希望macOS能对所有应用程序进行统一检查,其中包含对任何捆绑插件的检查。最重要的是,我们希望Apple能对仅仅作为扩展程序外壳的应用程序进行更加严格的限制,同时能更加严格的执行SRI的政策。