建议使用以下浏览器,以获得最佳体验。 IE 9.0+以上版本 Chrome 31+ 谷歌浏览器 Firefox 30+ 火狐浏览器
请选择 进入手机版 | 继续访问电脑版
设置昵称

在此一键设置昵称,即可参与社区互动!

确定
我再想想
选择版块

大咖说

发帖: 9粉丝: 12

级别 : 注册会员

Rank: 2

发消息 + 关注

发表于2020-3-2 16:25:11 4660 26
直达本楼层的链接
楼主
显示全部楼层
[干货分享] 回帖有奖《云话鲲鹏之大咖来了》第8期:Intel SGX和ARM TrustZone浅析

封面图.png


大家好,鲲鹏论坛《云话鲲鹏之大咖来了》第8期如期而至!


科技前沿,探寻不怠,以责任、权威和专业,


《云话鲲鹏之大咖来了》将从#初识鲲鹏#、#探索鲲鹏#、#玩转鲲鹏#等不同的维度带领大家更深刻的认识和学习鲲鹏!


本期《云话鲲鹏之大咖来了》为大家邀请到的是一位新朋友:华为智能计算架构与设计高级工程师—“阿吉拉他爸”,本期我们将跟着这位大咖一起来看看其对于“Intel SGX和ARM TrustZone”的高见!




大咖简介


sgh_副本.jpg


【论坛昵称】阿吉拉他爸

【大咖称号】华为智能计算架构与设计高级工程师

【大咖技能】多年嵌入式系统安全领域工作经验



正文:Intel SGX和ARM TrustZone浅析


我们先理解一下业界具有统一认识的一些概念:

安全启动:启动过程中,前一个部件验证后一个部件的数字签名,验证通过后,运行后一个部件,否则就中止或复位系统。因此它是一个防恶意篡改的手段。

 

可信启动:启动过程中,前一个部件度量(计算HASH值)后一个部件(通常在后一个部件被签名校验过之后),然后把度量安全的保存下来,比如扩展到TPM的PCR中。后续接入平台后,部件的度量会上报到认证平台,认证平台会有配置一个可信白名单,如果某个部件的版本信息不在白名单里,则认为此设备是不受信任的,因为它可能使用了一个虽然有签名,但可能BUG的版本。因此它是一个可信版本的管理手段。

安全启动/可信启动 是确保系统级别的安全手段,适用于有可信诉求的整机系统,终端设备如手机、STB、路由器等,当然也适用于通用服务器设备。

以上安全启动和可信启动的概念,网上以及公司W3有许多专家在讨论,可以自行进一步理解。然而,如果仅从字面要求试图实施时,我们又会发现许多新的问题,举个例子:安全启动时,确实每一级都被签名校验了,但确定安全吗? 某一级如操作系统1分钟前刚刚被校验过,1分钟后还是可信的吗?不见得,这个过程中,操作系统完全有可能已经被非法修改过了。

要做到相对更安全,要么能够做到Runtime的实时校验,即每次使用那一刻都要校验。如果做不到Runtime校验,那就想办法将校验过的数据安全保存起来…相关实现方案和技术其实在有前提的情况下已具备,这是另一个课题。

 

这个前提是指系统需要是不开放的嵌入式系统,因为不开放,可定制,提供特定的功能/服务,因此整机系统的保护是可行的,并且方案都是很成熟的。

 

那对于通用计算设备比如服务器产品是个什么样的情况呢? 基本上就是这么个事实:

 

1、 系统“全局保护”越来越难以实现,且不切实际

原因是当前开源共享,并且是自由的大环境。操作系统开源,应用开源,用户自由地选择不同版本的操作系统和应用,一切都不在设备厂商的控制中。

 

2、“全局保护”不可行,那就将保护范围缩小到应用的部分片段--

   这就是Intel SGX或ARM TrustZone的由来

 

因此,Intel SGX或ARM TrustZone是传统的系统保护手段不可行,通用系统设备的保护方案无法借鉴嵌入式系统的方案后,安全技术工作者转变思路后的产物。

 

接下来我们来理解一下基于这两种技术的应用的工作过程,但此文不讨论这两个安全方案的实现原理。

 

Intel SGX

网上有相当多的材料,并且都有一个特点:短小精悍。于是我们就看到了非常经典的一个图,足以说明SGX应用的工作原理:

  1.jpg                                           


1. 应用在设计时,需要考虑所谓的trusted和untrusted两部分,trusted即为处理敏感数据的实现部分

2.  实现应用,对于trusted部分,需要使用Enclave定义语言(EDL)来实现需要的逻辑。通过EDL实现的内容,将被执行在安全区域(Enclave)

3.  Enclave中的实现可被untrusted的代码调用,当被调用时,命令会通过底层驱动传递Enclave中;

4.  Enclave中的数据对外部不可见,也禁止外界的访问(包括系统高权限的代码也不可访问)

5.  处理完之后,返回结果,但过程数据仍然在Enclave中;

6.  获得返回后,应用的untrusted部分按即定的过程继续执行。

 

我们可以再看一下EDL的使用示例,这样可以了解应用开发的难易程度:

enclave {

    // An EDL file can optionally import functions from

    // other EDL files

    from “other/file.edl” import foo, bar; // selective importing

    from “another/file.edl” import *; // import all functions

    // Include C headers, these headers will be included in the

    // generated files for both trusted and untrusted routines

    include "string.h"

    include "mytypes.h"

    // Type definitions (struct, union, enum), optional

    struct mysecret {

        int key;

        const char* text;

    };

    enum boolean { FALSE = 0, TRUE = 1 };

    // Export functions (ECALLs), optional for library EDLs

    trusted {

        //Include header files if any

        //Will be included in enclave_t.h

        //Trusted function prototypes

        public void set_secret([in] struct mysecret* psecret);

        void some_private_func(enum boolean b); // private ECALL    (non-root ECALL).

    };

    // Import functions (OCALLs), optional

    untrusted {

        //Include header files if any

        //Will be included in enclave_u.h

        //Will be inserted in untrusted header file

        “untrusted.h”

        //Untrusted function prototypes

        // This OCALL is not allowed to make another ECALL.

        void ocall_print();

        // This OCALL can make an ECALL to function

        // “some_private_func”.

        int another_ocall([in] struct mysecret* psecret)

        allow(some_private_func);

    };

};

 

可以看到,EDL并不是要求用户掌握学习一门新的语言,它的代码仍然是POSIX APIC/C++库构成的,它也可以快速的将已有的实现迁移到Enclave中。

 

小结:

SGX Enclave完全使用了CPU的隔离能力,不可操作外设、中断等。EDL定义片段属于普通App的一部分,因此多核 、多线程都可以支持。EDL随时随地定义,部署非常灵活方便。但是EDL是定义在代码中的,通过版本的逆向工程,对于数据的处理逻辑,是有可能被窥探的。

 

ARM TrustZone

TrustZone是标准TEE实现的一种方案,GP的TEE架构和规范标准都是由ARM TrustZone 贡献。当我们讲TrustZone时,可以理解为是在讲GP TEE。则于标准规范,就导致了与SGX不一样的情况,TEE实现有大量的资料可以参考。以下是TEE应用实现的原理:

2.jpg

 

1.  基础设施:与SGX不同的,TEE的功能,依赖于安全OS,首先要确保设备上已经部署了安全OS,并且要确保其是可信的;

2.  设计应用,对于需要可信保护的处理过程,需要实现在单独的可应用中(TA);APP以及TA需要分别开发,物理上他们是两个程序;

3.  APP执行到安全处理部分时,它通过TEE标准接口向TA发消息;

4.  调用需要进入内核态,通过驱动将消息送到TEE侧;

5.  TA收到消息后,来执行即定的数据处理逻辑

6.  最后将结果返回到APP,但过程数据仍然在TEE侧,

 

TrustZone 利用的是CPU时间片切换来模拟了安全世界,这两个世界可以将它理解成一个CPU上处理的两个进程,它们通过上下文切换来将CPU的时间片占满以利用CPU。从安全角度,仅仅分时复用或拟化,是不足以确保安全的,因此ARM另外定义了安全框架,从硬件级别两个世界,包括Timer、TRNG、TZPC、MMU、Cache等相关设备,不同的芯片厂商会有自己的考虑,这个设备可能是双份的,或者是动态切换以达到隔离目的(此处不方便贴上我司920的安全芯片框架)。同时,安全侧也需要有一个可信操作系统执行应用。从原理上,REE侧和TEE侧是对等的,因此并不会性能的差异。应用程序的开发,除了使用TEE定义的标准接口,依赖的都POSIX API,使用标准的开发语言。

在部署应用时,SGX只需要在代码中定义即可,在TrustZone中侧需要单独开发部署TA。一般设置厂商都会提供给应用开发者自行部署TA的方法,与SGX相比稍有一点不同,但并不是不可接受(个人观点),这也确实是SGX很明显的一个优势,于是乎,ARM后面有了Newmore这样一个概念。

但也正因为TA与APP是分离的,并且TEE侧是不可查看的,因此数据的处理过程很难以被窥探。

 

最后,还有一点,网上还有一种声音,认为SGX和TrustZone“没有什么用”,观点的理由是:

“且不说传统的攻击,如SQL注入、溢出攻击,使得攻击者可以直接控制非安全应用,进而通过定义的接口取得数据,即使没有这些漏洞,恶意软件通过其他途径入侵到了OS里面,它是不是可以远程注入一段代码到APP,然后调用接口获取数据?”

这里必须要反驳一下,之所有这个观点,是他没有理解SGX或TrustZone的真正的使用场景。正确的处理方式其实上面的过程描述中我们已经提到了:

处理完之后,返回结果,但过程数据仍然在Enclave中”

“最后将结果返回到APP,但过程数据仍然在TEE侧”

一个有价值的安全应用,并不会支持将敏感数据通过接口调用返回到非安全侧。

应用的安全与否,无论是SGX还是TrustZone应用,确实很大程度上是依赖开发者的意识。SGX或者TrustZone,它们的价值在于是隐匿敏感数据本身,以及尽可能的隐藏处理敏感数据的处理过程。只有以这个导向,在应用开发时才能有意识地向这个方向去努力。

我们拿媒体数据举例,一看就会明白应该如何正确使用SGX或TrustZone---

高价值的媒体内容在网络传输时,它通常是被DRM加密保护的,只有凭证的订户才可以解密播放。盗版者本身可能就是个订户,在没有SGX、TrustZone等保护时,通过拷贝内存等手段就很容易实现盗版。但有这些技术后,加密的媒体流并不会在非安全侧解密,而是送往安全侧。注意,在SGX、TrustZone解完密之后的媒体,也并不会返回到安全侧,而是使用底层安全驱动,直接送往解码播放了,媒体数据直接在安全侧消费了。

 

以上是从应用开发者角度来比较SGX与TrustZone的差异。但事实上,两者完全不是一个层面的东西,SGX更适合拿AMD的SEV来比较,因为这两种技术类似,都是基于所谓的realm技术(局部保护)来实现。ARM有最新的newmore方案,但目前还在验证的概念阶段,预计在2023年以后才可能产品化,这个世界变化太快,两年的时间实太是太久,暂不讨论。



福利来喽


在本帖回复与鲲鹏主题相关的任意有效内容,均可获得100码豆哦!(数量有限,先到先得)



活动规则:

1、活动时间:2020年3月2日---2020年3月15日

2、所有用户均可参与,为杜绝恶意灌水,每个ID连续回复不得超过3楼,总回复不得超过10楼,否则取消获奖资格,奖品顺延至下一有效楼层;

3、中奖用户不重复;

4、码豆发放需要在活动结束后统一发放,需要提供正确的华为云账号名,开奖后请于3日内私信楼主提供个人信息,逾期作废,*注意事项:1.用户需要至少登陆过一次DevCloud会员中心。  2.用户提供的账号名需要是注册时首次填写账号名,后期修改过的无法发放。 3.如果用户是一个租户下的子账号,需要同时提供租户名及用户名;3、码豆可兑换商品,请移步https://devcloud.huaweicloud.com/bonususer/home进行兑换;



往期大咖来了


《云话鲲鹏之大咖来了》第1期:#初识鲲鹏#之“鲲鹏初学者开始指南”


《云话鲲鹏之大咖来了》第2期:#初识鲲鹏#之“创造一个属于自己的鲲鹏开发者环境


《云话鲲鹏之大咖来了》第3期:#初识鲲鹏#之“在鲲鹏上使用编程语言——C语言


《云话鲲鹏之大咖来了》第4期:#初识鲲鹏#之“手把手教你在鲲鹏上使用编程语言——Java、Python


《云话鲲鹏之大咖来了》第5期:#初识鲲鹏#之“技术小姐姐带你秒懂华为云鲲鹏云服务和解决方案”


《云话鲲鹏之大咖来了》第6期:#探索鲲鹏#之手把手教你如何在ARM上源码编译Redis


《云话鲲鹏之大咖来了》第7期:#探索鲲鹏#之鲲鹏弹性云服务器GCC交叉编译环境搭建


举报
分享

分享文章到朋友圈

分享文章到微博

大咖说

发帖: 9粉丝: 12

级别 : 注册会员

Rank: 2

发消息 + 关注

发表于2020-3-17 09:38:59
直达本楼层的链接
来自 2#
显示全部楼层

本期获得码豆的小伙伴们注意啦!

本期码豆将在本周统一安排发放,请大家在3月19日之前私信提供你的华为云租户名(已有的不用提供)


用户名 租户名 码豆数
andyleung 已提供 100
真爱无敌 已提供 100
笨蛋快跑 已提供 100
十年树木
100
加油O幸福
100
cityhunter2046
100
tomandy2046
100
www2046
100
nainaide 已提供 100
meimeimei 已提供 100
zm 已提供 100
kun 已提供 100
zhenkun 已提供 100
xiao 已提供 100
ldl 已提供 100
lplplp 已提供 100
jfly_123
100
AI之旅
100
北冥有鱼.
100
Afterglow
100
华为挑战学程序
100
Jennyhong
100


点赞 评论 引用 举报

andyleung

发帖: 110粉丝: 8

级别 : 外部版主

Rank: 7Rank: 7Rank: 7

发消息 + 关注

发表于2020-3-3 16:59:41
直达本楼层的链接
沙发
显示全部楼层

1-鲲鹏架构的ARM服务器KC1哪里模拟云手机就是同构模拟的,因为KC1是ARM架构,手机也是ARM架构的,这样的模拟效率特别高;

2-华为的鲲鹏920-非常看好这款,就是可以重新定义服务器市场的发展,性能超高。

3-华为鲲鹏ARM架构的发展重在生态的发展,跟开发者看能否做到一起共存发展吧,这样才是王道。

评论
yd_245619743 2020-3-13 00:33 评论

能简介一下当前生态的建设发展状况吗?

... 查看全部
点赞 评论 引用 举报

阿奇@汪汪...

发帖: 41粉丝: 18

级别 : 版主

Rank: 7Rank: 7Rank: 7

发消息 + 关注

发表于2020-3-4 19:17:13
直达本楼层的链接
板凳
显示全部楼层

大咖很牛,赞赞!

点赞1 评论 引用 举报

Jennyhong

发帖: 0粉丝: 0

级别 : 新手上路

Rank: 1

发消息 + 关注

发表于2020-3-4 19:45:01
直达本楼层的链接
地板
显示全部楼层

感谢大咖分享,受益匪浅

点赞 评论 引用 举报

Cloud_youa...

发帖: 0粉丝: 0

级别 : 新手上路

Rank: 1

发消息 + 关注

发表于2020-3-5 10:20:02
直达本楼层的链接
5#
显示全部楼层

这得什么学历才能看懂????

点赞 评论 引用 举报

真爱无敌

发帖: 5粉丝: 2

级别 : 注册会员

Rank: 2

发消息 + 关注

发表于2020-3-5 10:26:44
直达本楼层的链接
6#
显示全部楼层

TrustZone中, 通过CPU将系统划分为两个隔离环境, 两者之间通过SMC指令通信, 一旦Secure world中存在恶意程序, 那么将危害整个系统的安全;

而SGX中, 一个CPU可以运行多个安全enclaves, 并发执行, 即使某个enclave中存在恶意程序, 它也不能访问和危害其他enclave的被保护内容。

点赞2 评论 引用 举报

笨蛋快跑

发帖: 32粉丝: 4

级别 : 版主

Rank: 7Rank: 7Rank: 7

发消息 + 关注

发表于2020-3-5 16:49:23
直达本楼层的链接
7#
显示全部楼层

公司现在一直在强调可信,想请问下大牛在工作中,对于可信有哪方便的理解?觉得可信的践行在自己工作中哪部分最有价值?感谢

评论
阿吉拉他爸 2020-3-9 09:32 评论

我司有大量的专家投入在分析、研究可信相关的技术、趋势,他们为我们准备了大量的资源,并且不断在刷新,我想他们的终结目标是希望我们一眼就看懂,然而这个目的没有达成。于是他们又鼓动了公司层从上而下的用考试来磨砺我们,试图让我们先知其然,而要知其所以然则寄希望于我们在工作去获得。要有真正的深刻理解,这就随缘了。对于我个人,对于可信的理解还没有开光,一点朴素的理解是:全程透明,行为与预期相符,风险有应对措施,那么这个系统就是可信的。

... 查看全部
点赞1 评论 引用 举报

十年树木

发帖: 5粉丝: 3

级别 : 中级会员

Rank: 3Rank: 3

发消息 + 关注

发表于2020-3-6 11:17:43
直达本楼层的链接
8#
显示全部楼层

鲲鹏服务器是采用arm处理器的,在安全机制中使用的是TrustZone方式,如果涉及到从X86的代码移植到鲲鹏上的时候安全机制这段代码需要重新定制,现在关于这个是不是有demo的存在,方便移植

评论
阿吉拉他爸 2020-3-9 09:16 评论

hi, 这两种方案,对于安全部分的实现,事实上大部分都可以采用C/C++实现(当然对于一些标准的算法,在TEE侧系统中也已封装了接口,可以直接使用)。因此它是可以快速移植的,不同的是代码的运行环境,比如你在Intel中Enclave的的实现,在TZ则,则需要开发一个TA,而业务代码几乎不需要改动。 针对TA的开发,加包,我司会提供相应的文档和工具,敬请期待。

... 查看全部
十年树木 2020-3-9 11:17 评论

评论 阿吉拉他爸:明白了,谢谢。

... 查看全部
点赞 评论 引用 举报

加油O幸福

发帖: 0粉丝: 0

级别 : 新手上路

Rank: 1

发消息 + 关注

发表于2020-3-6 18:02:06
直达本楼层的链接
9#
显示全部楼层

无论是SGX还是TrustZone应用,确实很大程度上是依赖开发者的意识。SGX或者TrustZone,它们的价值在于是隐匿敏感数据本身,以及尽可能的隐藏处理敏感数据的处理过程。只有以这个导向,在应用开发时才能有意识地向这个方向去努力。

点赞 评论 引用 举报

加油O幸福

发帖: 0粉丝: 0

级别 : 新手上路

Rank: 1

发消息 + 关注

发表于2020-3-7 11:56:05
直达本楼层的链接
10#
显示全部楼层

鲲鹏加油!中国加油!

点赞 评论 引用 举报

Afterglow

发帖: 10粉丝: 7

级别 : 注册会员

Rank: 2

发消息 + 关注

发表于2020-3-7 12:08:37
直达本楼层的链接
11#
显示全部楼层

鲲鹏展翅,中华有为


点赞 评论 引用 举报

游客

富文本
Markdown
您需要登录后才可以回帖 登录 | 立即注册