作者:阿里安全安全工程师 正哥(真的很正,正直的正)。
本文收录于《阿里安全新一代安全架构之安全基建专栏》
今天,阿里安全的小哥哥要讲述的是从他的“一个朋友”入住酒店开始,如何获得安全思考的“生活案例”(研究探讨)。
好了,我们要开始正经讲故事了。
现实生活中,一个人出差住酒店,到前台进行登记,从钱包中拿出身份证,登记名字和身份证号,还需要做人脸识别。钱包解决身份证存放问题,人脸识别来保证身份证号使用安全。
在数字空间中,我们如何解决数字身份证的存放和使用问题?数字空间,会面临各种攻击,造成关键信息泄漏,比如我们所说的“身份证号”(SK)。
保护 AK/SK 需要密码模块,密码模块分为硬件和软件两种方式,但是硬件密码模块的普及率很低,或者成本高昂,所以需要软件的密码模块。白盒密码就是这样一种软件密码模块,我们采用白盒密码来保护AK/SK。
安全问题的“哲学思考”
在古希腊的一座海岛上,某日,夕阳西下,圣者苏格拉底在天涯,遥望苍茫大海,春暖花开,提出了三个问题:
我是谁?我从哪里来?我要到哪里去?
问题一出,便成为哲学的终极命题,始终考验着人类的智慧。当然,最近经常问我们这些问题的是小区保安。
对于一个自然人,“我是谁”是有标准答案的,伟大导师马老师(名克思)指出“人的本质是一切社会关系的总和”;说人话,就是MFA(多因素认证):我知道什么(知识因素),我拥有什么(身份证、U盾),我的天赋神通(生物特征)。
那么,对于数字空间的实体,我们如何回答这类似终极3问:我是谁,我要干什么,我能干什么?
什么是“数字空间的实体”
在数字空间,前端一个简单按钮,或者网址,涉及后台多种服务,以购物为例,某人看到心动的商品,点击购买,涉及后台用户、商品、订单、库存和支付等环节。
每个环节都存在多个服务的互动,例如用户购买之后,会通过订单状态,查询商品到哪里了,这就涉及订单管理和物流系统互动。再比如收到商品之后,用户点击已收货,钱会打到商家账户上,订单状态更新为完成,这个过程涉及订单、支付系统。
一个大系统,必然由多个服务组件协同完成一个任务。服务组件互动的过程,也必然涉及我是谁?我要干什么?我能干什么?一个服务组件只有告诉其他服务组件,我是谁,我要干什么,其他服务组件识别,决定能干什么。才能完成整个为用户服务的流程。我们给每个服务组件分配一个名字(AK)和一个身份证号(SK),来标识该服务组件。
数字实体的名字和身份证
每个服务组件由一个名字(AK)和身份证号(SK)来标识。
在订单管理服务与物流系统互动的时候,订单管理服务发送:我是订单管理,我要查询XX订单的物流信息和SK参与的校验信息。物流系统收到后,对信息进行校验,校验通过才能相信数据是订单管理系统发送过来的,然后才能返回XX订单的物流信息。从示例来看,身份证号(SK)是认证的核心,我们如何保护它呢?
数字实体的身份证号保护—-白盒密码
现实生活中,一个人出差住酒店,到前台进行登记,从钱包中拿出身份证,登记名字和身份证号,还需要做人脸识别。钱包解决身份证存放问题,人脸识别来保证身份证号使用安全。在数字空间中,我们如何解决数字身份证的存放和使用问题呢?数字空间,会面临各种攻击,造成关键信息泄漏,比如我们所说的“身份证号”(SK)。
保护 AK/SK 需要使用密码模块,密码模块分为硬件和软件两种方式,硬件密码模块基于可信硬件实现,其安全级别较高,但是很多场景不具备硬件条件,或者可信硬件成本过高,所以需要软件的密码模块。然而一般的软件加解密算法的设计思路是仅保证算法在“黑盒”状态(即攻击者只能获取算法的输入输出)下的安全性,并不能保证算法在“白盒”状态(即攻击者可以获取算法内部运行状态)下的安全性。许多环境(如root过的Android/iOS、PC等)经常就是完全暴露给攻击者的,是一个白盒攻击环境。以某标准算法举例,攻击者若仅拿到的明文-密文对,是无法破解密钥的,但是如果允许攻击者获取实现的内部内存状态,那么它就能够直接通过观察算法迭代过程破解出密钥。能否设计一种软件密码模块,在白盒攻击环境下,依然能够把内部的秘密隐藏起来?
白盒密码技术是一项能够抵抗白盒攻击的密码技术。白盒攻击是指攻击者对设备拥有完全的控制能力,能够读写硬盘数据,能偶观测和更改程序运行时的内部数据,这种环境称为白盒攻击环境。大多环境(Android、iOS、PC、服务器等)在很多情况下就是一个白盒攻击环境。白盒密码有ASASA、多项式置乱和置乱编码等多种方式实现。但是核心思想是通过多种方式,引入干扰项,将标准算法变为一个混乱的过程,例如一个算法有N轮,每轮又有W个步骤,如下图所示。
白盒化之后,整个过程如下:
白盒密码是将数字身份证号,通过复杂的方式,转变为一系列数据——白盒,后续存储和使用都是白盒,而不是SK。仍然拿身份证的例子来打比方,相当于身份证芯片被嵌入了钱包(白盒)中,身份证(SK)这个实体不再独立存在了。
白盒安全性如何呢?目前所有的白盒都是可以被破解的,例如ches 2019 challenge 白盒大赛,最好的s白盒方案也只活了29天;但是这种破解是有相当门槛的:这个29天是在提交源代码情况下,由国际顶级的密码学专家完成的。我们团队也参加了ches 2019 challenge 白盒大战,取得了团体第6名。此外我们也基于最新的可证安全的白盒技术,研发了更难被破解的自主知识产权的新一代白盒密码算法。由于标准白盒还有兼容现有的标准算法,自由度更高等优势,我们在实际应用中按需使用不同的白盒方案。
当然白盒密码本身也有其无法解决的问题,例如代码拷贝攻击:攻击者可以不需要破解白盒密码模块的私钥,只需要把白盒模块本身从软件中定位并提取出来,需要加解密时就把它当做一个库来重复调用就行了。仍然拿身份证的例子来打比方,相当于攻击者不是偷走身份证,而是偷走整个钱包;但是偷走钱包的动静比偷身份证大多了,可以采取的防御的措施也更多。这里我们可以提供多种防御技术,各兵种各展所长、协同作战,实现更高的安全水准。
加固方式 说明
代码混淆 虚拟化,花指令、加密等,防逆向,防调试。
指纹绑定 提取运行终端机器、系统、应用等等信息,对白盒文件进行混淆,达到白盒文件与使用终端的绑定,达到身份证只能所有者才能使用。
轮转 定期对白盒进行轮转,缩短白盒使用周期,提高安全水位
借助可信软件基 系统:IDS,应用:RASP 进行加固,提高侧信道攻击和破译的门槛
尤其是RASP( Runtime Application Self-Protection,是一种在运行时检测应用程序攻击并进行自我保护的安全产品。),它像疫苗一样注入到应用程序中,与应用程序融为一体,能实时检测和阻断安全攻击,使应用程序具备自我保护能力,当应用程序遭受到实际攻击伤害,就可以自动对其进行防御,而不需要进行人工干预,下一篇我们介绍RASP。
以朋友的名义保证,绝对不鸽,草稿已经在路上。
(完)