移动应用安全谈:这份完整的App安全体系图谱请马上收藏!| 火星技术帖
imToken 是一款全球领先的区块链数字资产管理工具[ZB],帮助你安全管理BTC, ETH, ATOM, EOS, TRX, CKB, BCH, LTC, DOT, KSM, FIL, XTZ 资产,同时支持去中心化币币兑换功能 ...
区块链技术已经成为今年最受大众关注的技术,告别单纯的加密资产炒作的热潮,这一技术正在逐步落地或者寻求各个场景下的落地方向。正所谓“润物细无声”,在各行各业对区块链的尝试过程中,我们相信它将逐步深入到大量的应用场景,或者作为底层技术,或者作为效率提升的中间件,或者成为前端技术的组成部分,甚至充分发挥该技术体现的信用传递和价值重塑特征,改变一些商业模式的运转方式。
而伴随这个技术逐步落地的过程,直接或者间接的,区块链技术最终要通过终端产品实现用户价值,在移动互联网时代,其中的一种重要形式正是移动应用,即我们常说的手机App。
从纯技术角度,区块链技术应用场景下的手机App有其通用性的技术特征,但是也有结合区块链场景下的特别之处,这与具体的应用场景密切相关。比如在数字资产领域,相关移动应用就涉及到诸如密钥、助记词、加密资产转账的场景,需要特别的安全防护。而在未来诸如金融、征信、政务的区块链技术应用中,都可能涉及移动应用与相关节点,甚至自身直接参与区块链网络运转的过程,期间涉及的敏感信息保护更是重要的安全问题。
与区块链行业相比,移动互联网的发展显然更加成熟,“前人栽树,后人乘凉”在移动互联网初期很多“雷”早已被踩过,但在区块链领域,移动安全问题尚处于 “幼年”,整个行业的需要进一步的交流和提升。在北京链安对行业整体移动应用的安全监测中,我们也发现区块链场景下的移动应用很多都没有采取充分的安全措施,特别在带有金融属性的数字资产相关移动应用中,可以说问题颇多。
在今年5月北京链安发布的《区块链移动端安全调查报告》中就曾经披露了行业内移动应用体现的主要安全问题。
哪怕在诸如运行环境安全性检测,自我保护防破解和篡改这样的基本安全防护上,业内移动应用都有很大的提升空间。
而由于系统的开放性,安卓系统可谓移动安全问题的多发地带,那么,一个完善的安卓系统移动应用安全体系是怎样的呢?让我们先看一张脑图,它体现了北京链安眼中的区块链行业移动应用的安全观。
温馨提示:各位朋友可以将这张图下载到电脑或者平板更清楚的查看。
从这张脑图,我们可以对北京链安的C端安全体系主张首先有一个概括的了解,接下来就让我们了解其中的一些细节。
我们将移动应用安全从B端开发者视角分为三个阶段,即研发阶段、运行阶段和应用分发阶段。
就研发阶段而言,我们需要重点关注在一些逻辑实现和组件使用的安全问题,比如下面几个环节:
1. 不安全的组件使用:在开发过程中,我们都会用到一些系统或者第三方的组件,它们可以大大提升我们的开发效率,但是对它们的使用不当也是安全问题屡发的原因,例如:
、、、的导出im钱包安全和手机有关吗,没有做访问权限的控制,都可能导致DDOS攻击风险。
的使用上,配置策略不当导致相关代码的代码执行漏洞、密码明文存储漏洞、跨域访问漏洞和XSS攻击,可能引入诸如代码注入攻击等严重的安全问题。由于目前很多App都通过加载H5页面实现一些功能,这类安全问题的威胁就非常突出了。
2. 密码学误用:对于现在的开发者来说,大部分已经具有了对数据加密的意识,但是我们发现很多时候在实际操作中,开发者常常自定义一些弱加密算法,或者使用一些已经被证明不安全的算法,或者使用就其使用场景而言加密等级不够的算法,都可能造成用户敏感数据的泄露。由于在区块链应用中,常常有诸如密钥、助记词这样事关用户财产的数据操作,这方面的安全问题造成的损失就可能非常的直接。
3. 不安全的日志设计:这实际上是一个良好的开发习惯问题,即在正式发布环境下,不应该向控制台打印任何日志信息。但是,我们遗憾的发现,很多App的线上版本并未关闭日志信息的打印,甚至还直接打印密码等敏感信息。
就运行阶段,我们关注的是在用户下载安装了App后,在运行环境中,可能产生的安全问题,其表现往往在运行阶段,但是根源依然在于开发者没有实施安全防范工作,如下列环节。
1. 应用可调试:App没有做反调试的措施,这就导致攻击者可能通过对其App的反编译和调试,摸清其背后的业务实现过程,从而设定攻击点。
2. 应用可备份:App可以被整体性备份到另一台手机,包括其诸如用户验证方面的数据,从而导致攻击者可以直接以用户身份完成相关操作。
3. 不安全的运行环境:App想当然的认为自己运行于一个正常的安全的环境,事实上有三类运行环境可能导致你的App可能遭受攻击:
被Root的手机
安卓系统的模拟器
、、等双开环境
如果你不对App当前运行的环境进行检测就让其直接运行,并进行诸如注册、登录、转账等业务,就有可能让用户遭受攻击。
当然,我们也不能忽视操作系统本身的安全漏洞问题,比如最近出现的 漏洞,利用该漏洞的攻击者可以伪装合法应用来请求权限许可,在你的系统中为所欲为。对于这类安全问题,就更需要相应的安全态势感知服务,及时获得最新信息,对用户进行提醒,对自己的App进行必要的安全升级。
4. 不安全的数据存储:App对于用户私有数据,特别事关用户隐私、财产安全的数据,如果存储在数据公共区域,显然是一种高风险的数据处理。与此同时,我们也看到一些App虽然将这类数据存储在私有区域,却也想当然的认为这里是攻击者无法企及的安全之地,对数据明文存储,这些做法都会威胁用户的数据安全。
上图是一个钱包本地明文存储的助记词,相信大家首次使用数字钱包的时候imToken下载,都会看到App“声嘶力竭”的提醒你,不要拍照,不要存在本地,要找张纸抄下来,可是一些钱包却让这些助记词处于不设防状态。
5. 不安全的网络通信:区块链App的关键业务大都涉及与服务端的通信,这个过程中必然涉及一些敏感数据的传输,比如采用不安全的通信协议,在数据传输过程中未加密,而一些开发者尽管有意识的使用了HTTPS这样的安全通信方式,却为进一步做证书锁定等配套的安全措施。
6. 不安全的业务实现:对于不同业务场景的区块链应用,都有各自的业务实现方式,期间也有各自的安全隐患需要关注。而在一些通用性的场景中,我们发现业内App存在一些普遍性问题,如密码、私钥、助记词等操作上没有使用安全键盘,使用存在安全隐患的系统剪贴板,在这样的情况下,用户的操作很容易被攻击者监听,获取敏感数据。
上图示例中,通过监听剪贴板事件获得用户的私钥信息
最后,我们还需要特别关注应用分发阶段,因为区块链应用开发后,总会通过应用商店、官网、社区、IM等渠道进行传播,这个过程中的安全问题常常被忽视,在这里我们提醒开发者关注以下问题。
1. 安装包可篡改:开发者如果采用不安全的签名方案,或者在代码中没有进行相应的校验,那么你发布的应用安装包就存在被攻击者解包,插入攻击代码,重新打包以原App名义发布的风险,不但会对用户进行钓鱼、木马植入等攻击,更可能损害开发商的声誉。
2. 代码可逆向:代码逆向技术是一种可以根据可执行文件解析出你的App代码运行逻辑的技术,这类技术让你原本对外界黑盒的逻辑实现被公开,包括一些涉密的,事关安全的操作。攻击者了解了这些逻辑,自然就有可能通过进一步的技术手段或者绕过一些代码逻辑,或者植入恶意代码,在重新编译和打包,让你的App变身为有害应用。
3. 应用合规检查:无论在商店发布,还是一些行业应用领域,对App本身都有一系列合规审查,如对操作系统权限的使用,业务流程的规范,都需要在App开发过程中做好部署。
如果我们从以上几点全方位的做好移动应用的安全工作,将大大降低你的App被攻击和篡改的概率。
作为开发者,可能也会困惑,上面的安全体系涉及的安全点太多,具体该采取哪些措施在自己的产品中落实这些安全措施?
作为用户,可能也会疑惑,上面提及的这么多安全问题,一旦在自己使用的App中发生会有怎样的危害?这样的安全问题在区块链领域的App上发生的概率又有多少呢?
接下来,我们将在这个“移动应用安全谈”的系列中,对相关安全问题逐一介绍,包括它们被利用的方式,它们造成的危害,以及防范这些风险的措施,一同努力打造区块链应用场景下,安全的移动应用。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。