移动应用程序的安全防护指南

前言

移动设备比台式机和笔记本电脑更受欢迎。它们不仅易于携带,而且技术进步也使它们能够执行与台式机几乎相似的功能。

用户几乎可以在移动设备上进行所有活动,从观看新闻到查看电子邮件、即时消息、在线购买商品和进行银行交易。通过这些应用程序,企业可以收集有用的信息,例如位置、使用情况统计信息、电话号码、喜欢、不喜欢和其他有关用户的有意义的指标,这可以帮助企业做出准确的决策来改善他们的服务。如果这些移动设备中的数据落入坏人之手,可能会对用户造成伤害。 

因此,对移动应用程序安全的需求已成为必然。

 

1. 什么是移动应用安全?

移动应用程序安全是一种保护应用程序免受外部威胁的措施,例如恶意软件和其他数字手段欺诈,这些威胁可能会危及手机拥有者的关键个人信息和财务信息。

移动应用安全在当今世界变得更为重要。移动安全漏洞不仅可以让黑客实时访问用户的个人生活,还可以泄露用户当前位置、银行信息、个人信息等数据。

消费者通常依赖和信任提供App的企业,而企业在向用户提供App之前也通常会测试App的安全措施。

然而,现实并不是这样子,除去一些大型技术型互联网及金融行业企业之外,大部分企业的App在应用安全方面基本没有太多的防护。问题的原因很多:企业在技术团队的投入、开发人员的水平、是否拥有专业技术测试部门、对于用户信息安全的关注度、技术项目是否外包等等的情况。

综上所述,当前用户下载的App在应用安全防护上面存在非常大的隐患。从而为黑客利用移动应用程序中的安全漏洞提供了足够的支持,黑客不断地从不安全的代码中获取利益并利用漏洞:

1.1 客户信息

黑客获得任何网站或设备的登录凭据;例如,电子邮件、银行、社交网站等。Anubis 银行木马是此类中的一个臭名昭著的例子,它通过下载受感染的应用程序进入用户设备,其中一些甚至托管在 Android 的官方应用程序商店中。一旦设备被感染,木马会强制它发送和接收短信、读取联系人列表、请求访问设备位置的权限、允许推送通知、确定移动连接的 IP 地址以及访问移动设备上的个人文件。

2019 年 5 月,WhatsApp 承认其应用程序容易受到来自以色列公司 NSO 集团的间谍软件的攻击,该软件可以通过使用未知号码呼叫 WhatsApp 上的用户来感染移动设备。 

即使用户不接听电话,用户的设备也可能受到损害。一旦被感染,黑客软件可以将几乎所有数据:包括联系人列表、GPS 信息、媒体文件等从设备发送到黑客的服务器。

1.2 财务信息

黑客可以获得信用卡和借记卡号码来进行银行交易,尤其是在不需要一次性密码的情况下。卡巴斯基的研究人员发现了一种名为 Ginp 的银行木马新版本,它可以从用户的设备中窃取用户凭据和信用卡信息。它能够控制设备的 SMS 功能,从而可以操纵银行功能。其代码被发现操纵了西班牙银行的 24 个应用程序。

1.3 知识产权盗窃

黑客获取该应用程序的代码库以非法创建他们的克隆版本或窃取拥有该应用程序的公司的知识产权。应用程序越成功,它在应用程序商店中吸引的克隆数量就越多。国内当前这一块的知识产权保护还是有所缺失:一方面是知识产权政策的边界问题,另一方面是企业自身缺乏自我知识产权保护意识。

1.4 收入损失

很多个人开发者、小型公司或者游戏公司的早期收入,很多都是依靠App内业务收入或者广告收入,但是如果此时App出现重大信息安全问题,那么对于这些企业的打击是致命的。2016 年,移动安全公司 Bluebox 披露了黑客如何通过利用流行应用程序 Hulu 和 Tinder 中的安全漏洞并对其所有者造成损失来访问它们的高级功能。当时,Hulu 的 OTT 流媒体服务每月订阅价格为 7.99 美元。

1.5 品牌信心

除了丢失重要的用户数据外,丢失的形式还可能是用户信息的滥用以及受影响方的诉讼。特别是对于一些大型企业,App的安全级别高保证了客户对品牌保持忠诚和信任,但是如果发生了重大的App安全事故,对于企业客户的打击是失去信心。公司应该意识到,其业务的核心在于客户对其品牌的信心。因此,应用程序App开发的技术安全在某些程度上来说应该正确考虑业务的这一方面。

 

2. 移动应用安全漏洞

移动应用程序的开发者大部分不会考虑App在防病毒或通过互联网安全传输数据的问题。相反,他们专注于流畅的界面并为用户提供最佳功能。当然,很多用户会安装防病毒应用程序,这些程序可以保护网络并防止对设备的攻击,但它无法提供针对安全保护极低或设计不佳的应用程序的保护。

现在大多数常见的应用程序App的安全漏洞都由行业专家(白帽)在开放的漏洞平台进行分析说明,并及时告知到开发App的企业,以供开发人员参考。

但是真实情况是:相比上述情况,更多有风险的应用漏洞,会被黑客(黑帽)拿来进行恶意的攻击和获利,当这些应用程序App所属企业得知用户的损失时,为时已晚。

2.1 Android 应用安全风险

2.1.1 逆向工程

Android 应用程序是使用 Java 开发的,并使用 Eclipse 等集成开发环境 (IDE)。这些 Java 应用程序可以使用 Internet 上提供的各种工具进行反转。在 Android 中,字节码可以被修改并以 APK 文件的形式再次打包。逆向 Android 应用程序可以轻松提供测试登录凭据、对不良设计的洞察、有关使用的库和类的详细信息。它还可以提供有关应用程序中使用的加密类型的详细信息。这可以帮助攻击者不仅入侵一台设备,而且使用相同的解密方法入侵多台设备。 

2.1.2 不安全的平台使用

当应用程序开发人员忽略 Google 发布的与其移动操作系统进行通信的最佳开发方法时,尤其是通过不安全的 Android Intent和平台权限,Android 操作系统和应用程序变得容易受到风险的影响。例如,当开发人员不保护导出的服务或向 API 调用发出错误标志时,他们的应用程序就会暴露在黑客面前。黑客倾向于窥探 Android 设备以接收用于合法应用程序的 BroadcastReceiver 实例,开发人员很多时候会忽略这个风险问题,不会去使用 LocalBroadcastManager 为合法应用程序发送和接收消息,从而造成安全漏洞。

2.1.3 忽略更新

许多Android开发者没有定期更新他们的应用程序,也没有关注Android发布的操作系统补丁,导致对新发现的漏洞缺乏保护。更新涵盖最新的安全补丁,而忽略这些补丁会使应用程序面临最新的安全风险。 而黑客往往会抓住重大补丁刚刚发布到应用更新上线之间的这个时间差,进行密集型的快速攻击。

2.1.4 植根设备

Android 操作系统允许用户使用第三方应用程序 root 其设备,并向他们发出一些警告。然而,并非每个用户都明白他们的 root 设备会使其受到黑客和恶意软件的操纵。因此,对于开发人员来说,要么不允许他们的应用程序在 root 环境中运行,要么向用户发出定期警告,这变得至关重要。

2.2 iOS 应用安全风险

与 Android 不同,Apple iOS 操作系统严格执行安全功能,是一个封闭的操作系统。应用程序无法与其他应用程序通信或直接访问其他应用程序的目录或数据。iOS 应用程序是使用原生 Objective C 语言使用 Xcode 等工具开发的。它基于与 OSX 相同的 XNU 内核的 ARM 版本,用于 Apple 的笔记本电脑和 Mac 计算机。

2.2.1 越狱

越狱是在 Apple 设备上下文中使用的一个流行术语。它涉及在内核中找到一个漏洞,允许用户在移动设备上运行未签名的代码。越狱是受限制的,这意味着每次用户重启手机时,它都应该连接到笔记本电脑或运行越狱代码。虽然不受限制的越狱意味着即使重新启动后代码也会保留在手机上。

2.2.2 用户认证

iOS 通过 Face ID 和 Touch ID 提供设备级安全性,并认为它们是安全的,因为它们使用与操作系统其他部分分开的处理器。它被称为 Secure Enclave,它运行在一个专用的微内核上。然而,黑客已经证明 Touch ID 可以被攻破,最显着的是一个名为 GrayKey 的设备,它通过消除尝试猜测之间的等待时间,使暴力破解密码猜测变得容易。当应用程序开发人员使用 Touch ID 系统来保护他们应用程序中的数据或服务时,他们也会暴露在这种类型的漏洞中。

2.2.3 不安全的数据存储

大多数应用程序将数据存储在 SQL 数据库、cookie、二进制数据存储中,甚至作为普通文本存储。当操作系统、框架或编译器易受攻击时,黑客可以访问这些存储位置。此外,越狱设备会导致数据泄露。当黑客获得对数据库的访问权限时,他们会修改应用程序并在他们的机器上收集信息。越狱设备甚至会暴露最复杂的加密算法。

安全专家还发现,不安全的数据存储是 iOS 设备中最常见的漏洞之一,黑客利用这些漏洞窃取密码、财务信息以及个人数据或用户。 (此问题的Android应用程序中更为普遍和具有威胁性)

2.3 常见应用风险

2.3.1 缺乏加密

加密是一种以加密代码传输数据的方法,如果不将其与密钥匹配就无法查看。根据赛门铁克的数据,将近 13.4% 的消费设备和 10.5% 的企业设备没有启用加密,这很容易将敏感数据暴露为纯文本。使用高级别的数据加密可确保应用程序不易被破解。

 

2.3.2 恶意代码注入

用户表单可以很容易地用于注入恶意代码并访问服务器数据。例如,某些应用程序不限制用户可以在字段中输入的字符。这允许黑客在登录表单中注入一行 Javascript 并访问私人信息。

2.3.3 二元种植

攻击者将包含恶意代码的二进制文件放在移动设备的本地文件系统上,然后执行该文件以获得对设备的控制权的通用术语。这可以借助恶意短信或强迫用户单击恶意链接来完成。这样,黑客甚至可以将恶意代码放入合法文件夹或安装程序文件中并随意执行,从而危及设备安全。二元种植也可能导致逆向工程,攻击者试图解构应用程序的代码并获得对核心代码的访问权限。一旦代码被泄露,黑客就可以操纵它来查找漏洞并利用它进行进一步的恶意操作。

2.3.4 移动僵尸网络

它们是一种在木马程序的帮助下创建的 IRC 网络上运行的机器人。当受感染的设备连接到 Internet 时,它开始作为客户端工作并向服务器发送信息。移动僵尸网络旨在完全控制设备,可用于发送电子邮件和短信、拨打电话以及访问个人数据,如照片和联系人列表。

 

3. 移动应用安全解决方案建议

移动应用程序安全解决方案确保应用无风险,不会泄露用户的个人信息。对于开发人员来说,确保在将应用程序上传到应用程序商店以供公众使用之前执行所有安全检查非常重要。面向公众的应用程序通常是客户与组织之间的唯一通信桥梁,是黑客的主要目标。大多数面向公众的应用程序的设计都牢记它们必须与市场上的几乎所有设备兼容。但是,这种方法使应用程序容易受到攻击和操纵。开发人员必须保持最严格的过滤机制,同时构建能够阻止任何可能攻击的防水应用程序。

3.1 风险分析

为了将特定警告归零,开发人员可以运行威胁建模练习。依靠移动应用程序开展业务的组织面临的最常见风险如下:

  • 数据泄漏:具有多孔防火墙的应用程序始终面临被可获取机密数据(例如支付凭证、系统密码和 PIN)的不法分子破坏的风险。一旦防火墙被穿透,恶意软件也可以被注入到设备中。
  • 基础开发键暴露:对于移动应用程序和组织的后端服务之间的通信,可能需要共享资源,例如第三方 API。如果不仔细监控 API 集成过程,不仅会危及设备中的用户数据,还会危及服务器级别的安全性。
  • 诈骗:任何为进行金融交易而开发的移动应用程序都将始终处于欺诈者的视线之下。当应用程序使用敏感数据时总是存在一些风险,例如支付凭证、PIN 以及与应用程序和信用卡相关的密码等。 不法分子拥有各种攻击方法,例如通过恶意软件抓取短信、脚本注入和重新打包,总是在徘徊。
  • 法规和指南:所有应用程序都必须在法律和社会框架内运行,违反它们可能会招致法律诉讼。例如,通用数据保护条例和修订后的支付服务指令 是适用于欧洲国家运营的一些法规,而在全球范围内还有其他几项准则适用。

3.2 正确的架构

首先要考虑的是应用程序是在商业商店发布还是通过企业的分发渠道传播。通过私人运营商分发的应用程序不太可能面临逆向工程等威胁,这已不是什么秘密。有多种机制可用于确保应用程序安全,例如通过 UEM 和独立解决方案进行的应用程序管理。

目前,可用于移动应用程序开发的架构选项有三种:原生、混合和纯基于 Web。所有选项都有其优点和缺点,人们必须牺牲安全性或性能。例如,将组织的 Web 应用程序转换为移动应用程序并不难,但是对应用程序的缓存内容进行加密成为一项耗时且成本高昂的工作。如果为了提高安全性而更频繁地减少和丢弃缓存内容,则可能会对应用程序的性能产生不利影响。在接受架构调用之前,应牢记这些因素。开发人员需要考虑的另一点是选择设备端或服务器端检查。黑客通常倾向于通过修补应用程序或设备来突破设备的安全防火墙。例如,越狱设备可以无视本地检查机制。

一刀切的方法可能不适用于应用程序开发。某些应用程序可能需要服务器端控制,而对于其他应用程序,设备检查可能效果更好。

纯本地原生化应用程序开发为操作软件平台的所有本机安全潜力打开了大门。由于它们依赖于操作软件的 API,因此它们往往工作更顺畅。流行的操作软件 Android 和 iOS 都已经制定了开发人员可以遵循的最佳实践指南。这些原生环境能够满足基本和高级要求。但是,在原生开发过程中,需要持续两个独特的应用版本。这些原生环境支持从简单的功能(例如身份验证和加密)到复杂的设备证明和凭证存储等功能。虽然对于有竞争力的应用程序本地路由似乎是理想的,但对于其他应用程序,混合架构可能被证明是一个更可行的选择。混合架构允许使用跨平台框架,如 Xamarin 和 Flutter。可以使用本机工具执行混合应用程序中的敏感活动。

大多数安全软件开发原则也适用于移动应用程序。但是,对于移动应用程序,开发人员需要关注某些关键的安全领域才能获得最佳的效果。以下是总结出的到认可的一些做法:

3.2.1 最少的应用程序权限

权限赋予应用程序更有效运行的自由和权力。但是,与此同时,它们使应用程序容易受到黑客的攻击。任何应用程序都不应寻求超出其功能范围的许可请求。开发人员应避免回收现有的库,而应构建有选择地寻求许可的新库。

3.2.2 保护敏感信息

如果没有适当的保护机制,存储在应用程序中的机密数据很容易受到攻击。不法分子可以通过逆向工程代码提取重要信息。如果可能,应减少存储在设备上的数据量以将风险降至最低。 

3.2.3 证书固定

证书锁定是一种操作程序,可帮助应用程序在连接到不安全网络时抵御中间人攻击。然而,该技术有其自身的局限性。在某些情况下,它可能不支持网络检测和响应工具,因为流量检查变得更加艰巨。也可能出现兼容性问题。某些浏览器不帮助证书固定,这使得混合应用程序的工作更加困难。

3.2.4 增强数据安全性

应制定数据安全政策和指南,以确保用户可以轻松避免陷入黑客的陷阱。这可以包括在设备之间传输信息时实施良好的数据加密,以及在必要时使用防火墙和安全工具。

3.2.5 不保存密码

许多应用程序要求用户保存密码,以防止他们重复输入登录凭据。在发生移动盗窃事件时,可以收集这些密码以访问个人信息。同样,如果密码以未加密的格式保存,则它们被收集的机会非常高。为防止这种情况发生,开发人员应避免在移动设备上保存密码。相反,它们应该保存在应用服务器上,以便受影响的用户可以通过登录服务器来更改它们,即使移动设备丢失。

3.2.6 强制会话注销

经常看到用户忘记退出他们正在使用的网站或应用程序。如果它是银行应用程序或任何其他支付应用程序,这可能是有害的。出于这个原因,支付应用程序往往会在一段时间不活动或每次注销后结束用户的会话,以提高安全性。开发人员必须对所有以业务和消费者为中心的应用程序强制执行会话注销,即使他们希望用户具有好的用户体验。

3.2.7 咨询第三方安全专家

无论内部安全团队多么有经验,对应用程序的外部观点都可以提供不同的视角。有几家安全公司和应用程序可以部署来识别漏洞并减少被入侵的机会。公司应该鼓励他们的开发团队获得由第三方服务提供商评估的应用程序的安全功能。

3.2.8 应用多重身份验证

当用户登录应用程序时,多重身份验证会增加额外的安全层。多因素身份验证方法还掩盖了容易被黑客猜到并危及应用程序安全的弱密码。多因素身份验证提供了一个密码,必须与密码一起输入才能登录设备或应用程序。此代码通过短信、电子邮件、Google 身份验证器或生物识别方法发送。不在应用程序上强制执行多重身份验证可能会让黑客猜测弱密码。

3.2.9 渗透测试

进行渗透测试是为了检查应用程序中的已知漏洞。它旨在找出攻击者可能使用的潜在弱点并危及最终应用程序的安全。它涉及检查弱密码策略、未加密的数据、第三方应用程序的权限、无密码到期协议等。通过重现潜在黑客的行为,安全团队确定应用程序中是否存在任何弱点。建议定期执行渗透测试以确保应用程序安全。白盒测试和黑盒测试是其他类型的渗透测试措施,可用于检查安全问题。

3.2.10 企业防止使用个人设备

为了避免购买系统的间接成本,许多公司更愿意让员工自带笔记本电脑或智能设备进行开发。这可能会使网络受到大量感染,这些感染可能已经收集在员工的设备上。恶意软件和特洛伊木马以这种方式从一台设备传播到另一台设备。因此,制定安全策略并防止此类做法非常重要。连接到办公网络的每台设备都应该使用防火墙、防病毒和反垃圾邮件软件进行彻底扫描,或者根本不允许连接。

3.2.11 谨慎使用第三方库

使用第三方库可以减少开发人员完成的编码量并简化应用程序开发过程。但是,这可能是一个冒险的提议。例如,GNU C 库存在允许缓冲区溢出的安全漏洞,黑客可以利用该漏洞远程执行恶意代码并使设备崩溃。在为 GNU 项目做出贡献的开源社区在 2016 年发布修复程序之前,它持续了八年。因此,开发人员应限制使用大量库并制定处理库的策略,以保护应用程序免受攻击。

3.2.12 限制用户权限

用户获得的权限越多,应用程序的安全性受到威胁的机会就越大。如果拥有大量权限的用户遭到黑客攻击,黑客会对应用程序造成难以想象的破坏。同样,应用程序也不应该要求设备上它不需要的功能的权限:例如,读取短信、DCIM 文件夹等的权限。

3.2.13 会话处理

与台式机相比,移动设备上的会话持续时间更长。这会增加服务器负载。使用令牌而不是设备标识符来建立会话是一个更安全的选择。令牌可以在需要时撤销,并且在设备丢失或被盗的情况下更加安全。开发人员还应考虑将会话过期作为一种选择。启用远程擦除丢失和被盗设备的数据也是保留在应用程序中的一个很好的安全选项。

3.2.14 安全地管理密钥

密钥管理对于加密至关重要。硬编码密钥对应用程序的安全有巨大威胁,开发人员应避免使用。如果有人窃取了密钥,他们可以轻松控制设备。密钥应存储在安全的容器中,通常不在用户的设备上。为此目的,一些常用的加密协议是 MD5 哈希和 SHA1。开发人员应使用最新的加密标准和 API,例如使用 SHA-256 散列的 256 位加密。

3.2.15 定期测试应用程序

保护移动应用程序不是一次性过程。每天都会出现新的威胁,需要更新以修补这些威胁,以免它们对用户的设备造成任何损坏。2016 年和 2017 年,勒索软件 WannaCry 和 NotPetya 的传播等漏洞对用户的 Windows 设备进行加密并要求以比特币支付赎金,这在开发者社区中引起了足够的警觉,使他们不得不认真对待网络安全。尽管这种勒索软件在很大程度上影响了台式机,但其传播的迅速性和有效性表明需要对应用程序进行定期测试,因为新的威胁总是迫在眉睫。

3.2.16 确保使用 HTTPS 通信协议

它代表超文本传输 协议安全,与 HTTP 通信形成对比。当数据通过网络传输时,HTTPS 提供数据的安全性。通信协议由传输层安全 (TLS) 加密。TLS 和安全套接字层 (SSL) 是加密协议,可确保各种通信渠道上的数据隐私。另一方面,HTTP 数据是未加密、未验证和无法验证的,这使得黑客可以窥探用户内容。开发人员必须确保应用程序连接的服务器上的 SSL 证书有效,并仅使用 HTTPS 协议在应用程序和服务器之间发送数据。

3.2.17 对运营缓存进行加密

缓存是将数据临时保存在手机运行内存中的软件组件。这用于防止数据检索的延迟。如果未加密,黑客可以轻松访问缓存中存储的数据。有时应用程序不会在会话结束后删除其数据,并且缓存不会及时过期。如果这些缓存文件落入坏人之手,黑客可以操纵它来访问用户数据或服务器。

3.2.18 第三方提供的安全软件

第三方提供的运行时应用程序自我保护功能,它通过提供对隐藏漏洞的更多可见性来保护应用程序免受运行时攻击。 此类软件是应用程序或其运行时环境集成的安全软件,并不断拦截可能的攻击者对应用程序的调用。同时还包含了主动分析传入流量并防止在应用程序内执行欺诈性调用。所有传入请求都通过位于应用程序和服务器之间的安全分析层进行审查。

3.2.19 代码混淆

保护应用程序免受黑客攻击的最佳方法之一是采用代码混淆技术。这是一种创建黑客难以理解的代码的行为。这种技术已经变得流行并用于隐藏代码免受攻击。混淆器用于将编程代码自动转换为人类无法理解的格式。代码混淆包括:

  • 加密部分或全部代码 
  • 删除可能会泄露有关使用的库或 API 的信息的元数据
  • 重命名类和变量,使其无法被猜到

代码被混淆以防止黑客可能使用软件程序对代码进行逆向工程的数据和财产。在 Apple 的 iOS 中,这种技术并没有那么普遍,因为它的库是关闭的。另一方面,Android 拥有开源库。因此,Android 开发人员必须混淆代码。

 

4. 用于应用安全测试的免费工具

移动应用程序开发人员应该直观地知道,随着他们的应用程序在用户设备中越来越重要,黑客也开始感兴趣。如上所述,黑客尝试使用Api和自动化工具来利用应用程序或设备中的漏洞。因此,开发人员在将其应用程序上传到应用程序商店之前对其进行彻底测试非常重要。

值得庆幸的是,有多种免费工具可用——通常称为应用程序安全测试或 AST 工具——可以帮助开发人员确保万无一失的安全性。AST 工具使测试过程自动化,因为即使针对传统威胁手动审查代码也需要时间,而跟踪新出现的威胁则引入了不同程度的复杂性。

4.1 Android 调试桥(ADB

顾名思义,ADB 用于分析 Android 应用程序,并作为 Android SDK Platform-Tools 包的一部分提供。它具有三个组件,即客户端、守护进程和服务器。客户端发送命令,可以运行在开发机或真实移动设备上,通过终端调用。守护进程在设备上作为后台进程运行命令。服务器在开发机器上运行并管理客户端上的通信。ADB 允许通过 USB、Wi-Fi、蓝牙或任何其他网络协议实时监控设备上的系统事件。ADB 为开发人员提供了在模拟器或真实设备上测试应用程序的优势。

4.2 应用程序测试类工具

应用程序评测类软件行业在这几年也是快速发展,作为企业很多时候为了省事都会使用这些软件或平台。这些程序主要提供服务有:

– 提供一键测试功能平台软件,对应用程序的安装包进行在线测试

– 开发人员使用的第三方安全防护库

– 测试人员使用的白盒测试工具及相关策略

– 第三方评测机构的完整性评测,大部分会包含代码层面的评测

– 其他

除了上述第三方评测机构的全面性评测,其他的几种都不能完全达到我们想要的真正的应用程序安全的目标。即使是第三方评测机构的安全性评测,也取决于评测机构的经验、能力、对该App行业业务知识的了解度、测试的深度纬度等等。

 

结束语

最后,企业应该明白,移动应用安全的影响不仅仅是用户安全,而是影响品牌的整体声誉。随着黑客尝试和数据泄露的增加,用户意识到移动应用程序的安全问题,并且更喜欢安全的应用程序而不是那些会随意获取及记录他们信息的应用程序。因此,应用程序开发人员应努力创建满足用户需求的应用程序,并将他们的精力集中在安全方面。

 

 

本文作者:  张海华     资深顾问(大数据、区块链及金融行业)

联系方式:zhanghaihua@glinkslaw.com