存在10年的网络重磅炸弹:ATM恶意软件的深入回顾

41yf1sh 业务安全 2019年6月4日发布
Favorite收藏

导语:Skimer恶意软件是人们发现的第一个专门用于攻击自动柜员机(ATM)的恶意软件,自首次发现以来,距今已经有10年的时间了。

一、摘要

Skimer恶意软件是人们发现的第一个专门用于攻击自动柜员机(ATM)的恶意软件,自首次发现以来,距今已经有10年的时间了。在当时,要理解恶意软件的功能,需要经历一个非常困难的学习过程,分析人员需要具体掌握不同制造商的ATM的API函数和参数,而这些都没有被记录在任何公开的文档中。

在发现Skimer恶意软件之前,反恶意软件研究人员普遍认为ATM是比较安全的机器,因为它们包含专有硬件,运行非标准的操作系统,并实施了许多旨在防止使用恶意代码攻击的高级保护技术。研究人员最后发现,最流行的ATM制造商使用了标准的Windows系统,并添加了一些辅助设备,例如保险箱、读卡器等。

随着时间的推移,一些新型的ATM恶意软件(例如GreenDisperser、Tyupkin)背后的开发人员意识到,有一个金融服务API(CEN/XFS)的通用Windows扩展,可以用于制作独立于底层硬件平台运行的恶意软件,前提只需要ATM制造商支持该框架。无论攻击者是否持有合法的银行卡,这种恶意软件都可以欺骗取款机吐出现金。

时至今日,ATM恶意软件已经被不同的恶意软件家族和恶意组织接连开发和利用,这些恶意组织有的是犯罪集团,也有的是隶属于民族国家的威胁团体。ATM恶意软件之所以被这些恶意组织所重视,是因为它可以为攻击者带来巨大的经济利益,同时也能够对目标银行、金融机构和最终用户造成重大损失。

既然这种特定类型的恶意软件已经存在超过10年,那么,我们完全可以整理在不同时期中发现的恶意软件系列,并试图找出不同的系列是否具有一些相同或相近的代码。

二、ATM恶意软件概述

2.1 特征

ATM恶意软件为犯罪分子提供了一种更加微妙的替代方案,可以直接突破ATM内置的保险箱。在ATM恶意软件出现之前,犯罪分子通常不得不采用传统的方式抢劫ATM,他们经常会使用物理设备将ATM拉出地面,或使用炸药将外壳炸成碎片。显然,这些方法很快就会引起执法人员和路人的注意。

在过去10年终,我们发现ATM恶意软件的样本数量正稳步增长。尽管如此,与几乎任何其他恶意软件相比,我们发现的样本数量还是非常少的。

根据恶意样本首次提交到VirusTotal的年份,统计出逐年发现的ATM恶意软件样本数:

1.jpg

作为炸药的数字替代品,ATM恶意软件允许犯罪分子使用特定工具,并指导他们如何从目标ATM中分配资金。通常,这是通过提供特殊的授权代码,或者为授权交易而精心制作的卡片来实现的。

在此之前,犯罪分子不得不感染目标ATM以安装代码,这通常意味着,他们必须从物理角度上打开设备,才能访问其光盘读取设备或USB接口。

据报道,全世界各地的银行组织都曾遭受过攻击,但似乎在拉丁美洲和东欧最为普遍,因为这些地区的ATM基础设施较旧,并且不会定期更新安全软件或防篡改传感器。ATM恶意软件对银行和个人造成的经济损失很少被披露,但我们预计,每年可能达到数百万美元。

ATM恶意软件影响银行和其他金融机构的正常业务,造成经济损失,并且还会影响ATM制造商以及在ATM恶意软件攻击中被窃取帐户详细信息的个人或公司的声誉。

2.2 分类

我们可以通过几种不同的方式,对ATM恶意软件进行分类。基于其功能,我们可以将ATM恶意软件分类为虚拟窃取类型(Virtual Skimmer)和现金分配类型(Cash Dispenser)。虚拟窃取工具的功能室窃取卡片和转账细节,并在用户在键盘上输入密码时窃取密码。

现金累积工具恶意软件允许ATM实现“Jackpotting”,窃取的金额可以由攻击者在未经银行授权的情况下进行分配。但是,有的恶意软件家族可以窃取卡片的详细信息并分布窃取资金。

就安装过程而言,我们又能产生两种不同的分类。第一种恶意软件需要攻击者物理访问设备。第二种恶意软件假设攻击者通过间接方式安装恶意软件,通常是通过破坏银行的内部网络,然后使用窃取的凭据来针对目标ATM发动攻击。

这种类型的恶意软件,也将针对特定型号的ATM开展攻击,或者更为通用。在我们最近发现的ATM恶意软件中,通常会部署一些通用的功能。

最常见的框架是CEN/XFS框架,它允许ATM应用程序的开发人员编译和运行他们的代码,而不受ATM型号和制造商的限制。除此之外,还有其他的框架,例如在XFS之上构建的Kalignite框架。

XFS API包含用于与各种ATM模块通信的高级功能,例如现金分发模块(CDM)、密码键盘(EPP4)或打印机。这些高级功能通过通用的SDK提供,而一些底层的功能则由ATM制造商开发,并由服务提供商提供。这样的体系结构与Win32体系结构非常相似,其中开发人员使用高级API与OS内核以及各个硬件组件的制造商提供的各种设备驱动程序进行通信。

高级CEN/XFS架构:

2.jpg

大多数ATM恶意软件样本都需要物理访问目标ATM。实际上,ATM通常不会连接到互联网上,是通过专门的线路与银行的中央系统进行通信。但是,大多数ATM都连接到内部网络进行维护和管理。因此,可以通过首先破坏内部网络的方式,来引入第二类恶意软件。这种技术需要更加复杂的技术,但一旦成功,也可能带来更高的回报。

据报道,一些通用的黑客工具,例如Cobalt Strike,被用于攻击ATM和交易系统。这种方法通常会被更高级的恶意组织利用,例如Carbanak、Cobalt Gang和Lazarus(Group 77)。其中,Lazarus组织的Fastcash攻击影响IBM AIX操作系统,该操作系统很少会被恶意软件攻击。

2.3 值得注意的ATM恶意软件系列及功能

在过去的10年终,我们已经发现了30多个不同系列的ATM恶意软件。在本节中,我们将简要介绍一些更值得关注的内容。

每个家族的ATM恶意软件样本数:

3.jpg

(1)Ploutus

Ploutus是发现样本数量最多的恶意软件系列。其中,大部分是在墨西哥被发现的。Ploutus是一种标准的ATM现金分配类型恶意软件。攻击者需要能够访问物理接口或CD-ROM驱动器,才能在ATM中启动,并修改ATM系统映像以安装恶意软件。

据称,攻击者使用较新的Ploutus变种来攻击一些位于美国的ATM。Ploutus.D使用多个制造商采用的KAL Kalignite框架与ATM进行通信,该框架允许它与来自不同制造商的ATM一起工作,且对其代码库的改动很少。

Ploutus变种的界面:

4.png

(2)Skimer

Skimer是最早用于ATM攻击的恶意软件之一,具有功能完备的恶意软件所应包含的所有功能。Skimer属于虚拟窃取类型,将会试图窃取银行卡号码,以及存储在磁条1号和2号轨道上的帐户和所有者的相信信息。最近,根据对其功能的评论,我们发现该恶意软件也可能通过从系统中检索加密的PIN键盘加密密钥的方式,尝试窃取用户的PIN码。

除了虚拟窃取功能外,Skimer还为其背后的恶意组织提供ATM功能的后门,该后门可以用来收集被盗数据,以及分发现金。

为Skimer背后恶意运营团队提供服务的主代码循环:

5.png

如果用户掌握用于激活后门的密码,那么恶意软件将会显示菜单,该菜单允许此时操作的用户提取四个现金分配模块(CDM)中的一个。

该代码锁定分配器模块,并分配现金:

6.png

大多数其他的ATM恶意软件系列都遵循类似的规则。攻击者需要能够物理访问ATM,而这一过程往往需要一个密钥,或者物理上打一个洞来访问特定的端口或设备。一旦部署了恶意软件,那么就需要采用一个特定的代码来访问菜单,并分配现金。

(3)Tyupkin(Padpin)

Tyupkin最值得关注的特点,是它能够将其操作限制在每周特定一天或特定的时间范围内。据报道,一些实际感染的Tyupkin实例只能在周日和周一晚上使用。

Tyupkin用于检查操作时间的函数:

7.png

在分发现金之前,Tyupkin禁用任何网络连接,这一点可能是为了防止管理员在检测到可疑活动时关闭ATM。

Tyupkin家族的一些成员是使用C#和.NET框架开发的,另外有一些使用Microsoft Visual C++开发。该恶意软件系列使用XFS API来管理受感染的ATM,并以多种货币来分配现金。Tyupkin自2014年以来就一直活跃,据报道,其相关恶意组织的目标是东欧国家。

(4)Alice

Alice遵循与其他ATM恶意软件类似的模式。它由攻击者安装,需要物理访问系统。当恶意操作员启动它时,Alice会显示出一个“需要PIN”的窗口。

Alice的首个提示界面:

8.png

如果代码正确,Alice将访问分配器模块,并允许恶意操作员提取现金。

Alice的主UI窗口:

9.png

(5)Cutlet

自2016年以来,Cutlet(或称为Cutlet Maker)已经在一些地下市场,以自行制作的ATM恶意软件套件的名义出售。该套件中,包含俄语版本和英语版本的详细说明,讲解如何感染系统,以及如何获取分发现金所需的代码。

Cutlet Maker的主用户界面:

10.png

Cutlet手册中详细介绍了因为避免被执法人员抓住所需的安全操作措施,并说明了在ATM机柜中钻孔的位置,以便访问特定ATM型号的USB端口。该套件中还包含一个名为“Stimulator”的测试应用程序,以便用户在决定进行实际攻击之前先进行练习。

Cutlet遵循与之前的ATM恶意软件类似的模式,该套件的所有者可以为其针对所需的每个ATM生成特定的代码。

(6)Fastcash

Fastcash恶意软件的重要性在于其运营模式,以及该恶意软件以IBM AIX操作系统为目标。Fastcash包括一个进程注入工具和共享对象,可能用于注入到银行支付授权系统的进程空间中。恶意软件使用来自相当古老的开源库的代码,来监控基于ISO8583标准的事务,并解析ISO8583数据包。

如果ATM交易中包含攻击者的代码,那么数据将不会被转发到原始支付授权应用程序,并且交易批准信息将被发送回目标ATM系统,允许攻击者分发现金。

这种运营模式类似于某些Rootkit,其中恶意软件通过修改从操作系统发送回尝试列出系统对象(例如文件或进程)的应用程序的响应,来尝试隐藏其在系统上的存在。通常,恶意软件会修改返回的列表,删除恶意软件进程的名称。

Fastcash恶意软件由Lazarus组织开发,这是一个与民族国家相关的恶意组织,为获取经济利益而攻击金融系统。在Fashcash的具体案例中,我们观察到了该恶意软件的复杂性和技术难度,这在其他普通的ATM恶意软件中是无法观察到的。

2.4 恶意软件家族之间的代码共享

感谢Xylitol和ATM网络犯罪跟踪工具,我们能够轻松对这些恶意软件进行分析和聚类。在121个文件中,有114个PE文件,这些文件可以使用静态分析技术进行聚类。在114个PE文件中,有37个加壳的文件,这部分可能不适合静态分析技术。除此之外,还有20个DLL文件。

在研究各种归类方法时,我们偶然发现了由Joshua Saxe和Hillary Sanders撰写的一本书,名为“恶意软件数据科学”(Malware Data Science)。在这本书中,介绍了对恶意软件进行分类和聚类的基本方法和高级方法,我们使用了其中的一些思路来对我们目前所拥有的恶意软件进行聚类。

在我们的例子中,通过提取每个样本的以下属性来进行聚类:

1、从文件中提取的字符串;

2、从文件入口点反汇编的代码;

3、文件熵,以及已知加壳器是否存在;

4、导入或导出的功能;

5、嵌入的资源。

在从每个样本中收集属性之后,我们计算该组中每两个文件的Jaccard距离。Jaccard指数是对两组之间相似性的度量。两个样本越相似,它们的Jaccard指数就越高。索引是介于0和1之间的数字。例如,Jaccard指数0.5就表示两组之间有50%的重叠部分。

Jaccard指数阈值为0.7的集群:

11.jpg

我们需要设置两个样本,作为单个集群的一部分,来连接所需的阈值。我们选择的Jaccard阈值越高,定义的集群成员就越相关。通过改变阈值,我们到达了实现目标的最佳值。例如,为了正确对样本进行分类,我们应该选择大于0.7的值;如果为了检查代码是否重复,那么应该选择大于0.3的值。

正如预期的那样,结果表明,随着我们不断降低阈值,我们发现有更多的集群出现,一些集群展现了不同ATM恶意软件系列之间的重叠部分。

Jaccard指数阈值为0.3的聚类:

12.jpg

图表中行的宽度展示了集群中文件的相关程度。例如,我们看到个别GreenDispenser、Tyupkin或DispCash集群的成员密切相关,而混合的Ligsterac/Skimer、Tyupkin/Dispcash和ATMtest/Helloworld集群之间则具有较弱的关联性,这可能表明恶意软件代码之间具有部分重叠。

三、保护和检测的最佳实践

在考虑如何保护和检测ATM恶意软件的攻击时,我们需要重点考虑ATM的物理安全性、系统上运行的软件安全性,以及与ATM通信的内部网络中任何组成部分的安全性。

下面是金融组织在考虑如何保护ATM网络时应该遵循的15个最佳实践,以及在发生实际攻击时如何成功及时发现。

1、确保ATM和所有相关系统都运行了最新版本操作系统和最新版本软件,并应用了全部安全补丁。

2、禁用Windows自动播放,并配置BIOS以禁用从USB存储和CD/DVD驱动器启动软件的功能。设置强度较高的BIOS密码保护,以防止攻击者更改引导设置。

3、禁止访问ATM上的Windows桌面,确保使用多种身份验证因素(例如:Windows登录和RDP的双重身份验证)保护RDP会话。

4、从系统中删除所有不需要的服务和应用程序,以较少攻击面。同时实施其他措施,以加固基础ATM操作系统。

5、监控ATM的运行过程及其物理完整性,及时发现不寻常的重置模式、通信故障和异常交易。

6、在ATM和主机之间实施强度较高的加密方式。

7、确保只允许授权人员访问ATM机柜,并以电子方式记录此类访问的日志。

8、对ATM进行安全评估,包括其物理位置和连接到它们的任何网络。

9、确保正确配置防火墙和反恶意软件保护产品。

10、配置白名单解决方案,或配置操作系统功能,仅允许运行已知的可信软件。确保在不生成远程日志条目的情况下,无法禁用白名单。

11、使用设备控制功能,防止未经授权的USB设备安装。

12、加强员工安全意识培养,学习如何避免将恶意软件引入到操作系统。

13、使用Cisco TrustSec等分段技术,对整个组织内的网络进行物理和逻辑上的隔离划分,并维护划分之后的网络环境。

14、使用增强网络可见性的技术(例如Cisco Stealthwatch)确保对ATM系统和支付授权服务器的网络流量可见性。

15、监控威胁情报来源,以掌握新检测到的ATM恶意软件威胁。

四、总结

对于攻击者来说,ATM恶意软件是一个较好的攻击领域,一旦成功,也将获得显而易见的现金收入。自从发现针对Diebold Agilis ATM系列的第一个特定恶意代码以来,我们已经看到近10年来,陆续出现了另外30多个恶意软件系列,并且它们具有不同的复杂性、技术难度和成功概率。大多数成功的攻击都发生在较旧版本的自动提款机,以及普遍部署较旧设备的国家中,例如一些拉丁美洲国家以及东欧。

尽管ATM恶意软件背后的大多数参与者,似乎都是不那么复杂的犯罪分子,但潜在的大量现金收益,也同样吸引了更为复杂的犯罪集团,例如Carbanak和Cobalt Gang,同时还有一些具有国家背景的恶意组织,例如Lazarus。

尽管针对ATM发动攻击的已知恶意软件样本数量非常少,但已发现样本数量正在呈现出逐年稳步增长的趋势。

在考虑防范针对ATM和支付系统的恶意软件时,金融机构和银行应该特别警惕。企业和个人也可能因ATM恶意软件窃取了卡片的详细信息,并将其用于非法交易,从而遭受财务损失。因此,金融机构应该遵循最佳实践,并确保处于较高的防护水平,并且这些组织应该投入一定资源,用于提高用户对ATM恶意软件危险性的认识。

五、检测方法

下面列出了客户可以检测和阻止这些威胁的其他方法。

高级恶意软件防护(AMP)非常适用于阻止这些威胁参与者所使用的恶意软件的执行。

云Web安全(CWS)或网络安全设备(WSA)Web扫描可以防止恶意网站,并检测这些攻击中使用的恶意软件是否存在。

电子邮件安全可以阻止威胁参与者发送的恶意电子邮件,这些电子邮件通常作为其恶意活动中的一部分。

下一代网络防火墙(NGFW)、下一代入侵防御系统(NGIPS)和Meraki MX等网络安全设备可以检测与此威胁相关的恶意活动。

AMP Threat Grid有助于识别恶意二进制文件,并为所有安全产品构建保护。

安全互联网网关(SIG)可以阻止用户连接到恶意域名、IP和URL,无论用户是处于公司网络内部还是公司网络之外。

客户可以通过订阅开源SNORT规则集,以保证实时更新最新的规则库。

六、IoC

Alice

04f25013eb088d5e8a6e55bdb005c464123e6605897bd80ac245ce7ca12a7a70

23c50f1c37b7c55554c282ba1781e9d6279cbbd7bfc5f64772d2e7a8962ebe70

b8063f1323a4ae8846163cc6e84a3b8a80463b25b9ff35d70a1c497509d48539

db1169df116fda46319c4b87607df7b6a5e80b48de5411d47684974ca22dd35a

e3bf733cc85da7421522a0b1ff788d43bcacd02815a88d19426e80de564174b3

ATMii

0ef71569308d44e89bde48096c67caf73ec177c1c970a2fd843fd3a094502d78

5f5d483c1fcd1638b32d11183c5ed5fd36362fb12d62e1d9940b47906733d672

7fac4b739c412b074ee13e181c0900a350b4df9499515febb75008e6955b9674

d74cbd2e39dc0a00dc4c0fb0823c5a86455cdad2be48d32866165c9e5557c3e0

DIAGK

03bb8decefc540bff5b08425adddb404b345452c8adedee0c8af13572891865b

Cutlet

05fae4bef32daf78a8fa42f8c25fdf481f13dfbbbd3048e5b89190822bc470cd

4a340a0a95f2af5ab7f3bfe6f304154e617d0c47ce31ee8426c70b86e195320c

c18b23cc493f89d73a2710ebb177d54beafe0edf0e17cc79e28d9efdfb69a630

d1a0b2a251fa69818784e8937403c18f09b2c37eead80ba61a3edf4ac2b6b7ff

d4a463c135d17239047ad4151ab2f2d084e223970e900904ecedabc0fd916545

fe1634318e27e3af856506d49a54d1d12e1cf650cbc31eeb0c805949edc8fc85

Piolin

5f4215368817570e7a390c9f6e265a7db343c9664d22008d5971dac707751524

Prilex

d10a0e0621a164fad0d7f3690b5d63ecb9561e5ad30a66f353a98395b774384e

WinPot

0720db2469a61d41c1e67a8f32020927a32422a5d58067bb328a2ff407e14e98

3f5ff48aa4dc2c1af3deeb33a9cc576616dad37156ae9182831b1b2a5ae4ae20

a5d0cd1bc33f44d25695ebd6530757180f4fc4d87a1658ee2f0d8fc42d09fb80

c3a5c8e9195163cef8e0e70bd8f3d49c8048e37af7c969341e1753aee63df0ae

d9c6515fd0fb3cd14b4bb4d11ecda78602d17f370780a4b9ee006a9830106213

ATMitch

1065502d7171df7be3776b839410a227c540cd977e5e856bbbcd837b0872bdb6

ea5ebd1e5f98e10b1e7c834dd54707ad06772bccb4179cae7e50c7e6e772a1ab

ATMtest

9f8a7828d833ed7f28f9f5ceaf1c073c6de0645172b8316d86edc16c84b61c4f

ATMWizX

7bd2c97ac5027c360011dc5aa8f2371cd934f73e885e41f7e80152332b3af1db

a4b42f503090cd3cd53963ddaf0be3e4eeedbd81ff02664668e68612816e727f

Ploutus

0106757fac9d10a8e2a22dce5337f404bfa1c44d3cc0c53af3c7539888bc4025

04db39463012add2eece6dfe6f311ad46b76dae55460eea30dec02d3d3f1c00a

0971c166826163093093fb199d883f2544055bdcfc671e7789bd5088992debe5

0e37b8a6711a3118daa1ce2e2f22c09b3f3c6179155b98215a1d96a81c767889

34acc4c0b61b5ce0b37c3589f97d1f23e6d84011a241e6f85683ee517ce786f1

398e335f2d6379771d86d508a43c567b4156104f89161812005a6122e9c899be

62b61f1d3f876300e8768b57d35c260cfc60b768a3e430725bd8d2f919619db2

7fd109532f1e49cf074be541df38e0ce190497847fdb5588767ca35b9620a6c2

aee97881d3e45ba0cae91f471db78aded16bcff1468d9e66edf9d3c0223d238f

c8d57b32ab86a3a97f89ae7f1044a63cca2b58f748bed250a1f9df5c50fc8fbb

d93342bd12ef44d92bf58ed2f0f88443385a0192804a5d0976352484c0d37685

d99339d3dc6891cdd832754c5739640c62cd229c84e04e9e3cad743c6f66b1b9

e75e13d3b7a581014edcc2a397eaffbf91c3e5094d4afd81632d9ad872f935f4

Suceful

c7cb44e0b075cbc90a7c280ef8f1c69e8fe06e7dabce054b61b10c3105eda1c4

d33d69b454efba519bffd3ba63c99ffce058e3105745f8a7ae699f72db1e70eb

Tyupkin

16166533c69f2f04110e8b8e9cc45ed2aeaf7850fa68845c64d92ff907dd44f0

3639e8cc463922b427ea20dce8f237c0c0e82aa51d2502c48662e60fb405f677

639d2d926325275cb023014d0b446d03f1dcc8526bff1aa72373e27d78a6a674

646433de5c56fdbc7e6e934a05e9e99012ef39a0ed6cc4bdb1d984cd4435379e

6c59cd1e12bc1037031af48b934e9398fc85efb2a067d03b6a100dd8423e5d9b

853fb4e85d8b0ad7c156ad6d3fc4b0340c8b29fa0548a3df758e7845ba8b23ae

8bb5c766de0a73dc0eff7c9fce086565b6220465185e258c21c5b9dfb0bef51d

b670fe2d803705f811b5a0c9e69ccfec3a6c3a31cfd42a30d9e8902af7b9ed80

SkimerWC

dff7ee95100ffaec5848a73a7b306eaaee94ae691dfccff9fe6ce0a8f3b82c56

e267fb3044c31256f06dd712c7aeae97ad148fd3157995a7e536e5473c1a2bc0

e78e6155b8dfd206ba5a5e7253409891bfed1b943d217e0fbc416a25fa761580

ATMitch.B

66db5b6b5dc51de7e5380f214f703bdc69ab3c3bec7c3b67179940a06560f126

ATMripper

21f3c0bf3fc05685ec5b7bf3c98103761894d7c6783c2c12afae958eb103598e

22db6a994eb057715b499c5641cc608fb0380aeea25f78180436c35ecd81ce7d

3d8c7fb9e55f96cf3073b321ee5e59ff2189d70b0662bc0b88990971bc8b73d8

4c98d5cd865d7fe2f293862fae42895045e43facfdd2a3495383be4ddbb220dc

64499b2584d239380ffecf07e94167e0414c4bb5438620659fe37d595ef3f361

cc85e8ca86c787a1c031e67242e23f4ef503840739f9cdc7e18a48e4a6773b38

e3a6970d66bc4687b21381353826fabd469007c869efc711fdd0e4711aa77ffc

Ligsterac

1243c478a7145fa08a03200611fcf5fae9bb58039c5069ef93e150d53cf22524

377f85562e9ec16cae8fed87e43b6dd230eaa6e1c8f2732f5096f1ec951f045a

aaeee605cb1850dd81da8990fe4115fe85e5d4eb84ddaf2fa8d0b21afdc2b293

b361963fe11b149afc526a6e0656c08226f943bdba0f2c7c0a7640fba09afce8

e130bc1603893155d87946a430b6d6ad167760cde24aa2834c61dd0eace30e8e

NeoPocket

85652bbd0379d73395102edc299c892f21a4bba3378aa3b0aaea9b1130022bdd

Atmosphere

26b2daa6fbf5ec13599d24e6819202ddb3f770428d732100be15c23be317bd47

5c838658b25d44edab79a4bd2af7c56bef96768b93addbbaaaea36da604fca62

956968e6f4bf611137ea0e747891ba8dc200ca809c252ef249294912fb3dbe3c

a6c33d7275c46397593f53ea136ea8669794f4d787044106594631c07a9ee71d

d60126545fa68b14c36cd4cffa3f81ed487381482582acbba786fa88884f636b

eeb8390e885612e1f0b8f8922baa4ebc9ba420224b30370d08b45f3453949937

本文翻译自:https://blog.talosintelligence.com/2019/05/10-years-of-virtual-dynamite.html如若转载,请注明原文地址: https://www.4hou.com/business/18370.html
点赞 0
  • 分享至
取消

感谢您的支持,我会继续努力的!

扫码支持

打开微信扫一扫后点击右上角即可分享哟

发表评论