作者 | 轩辕之风O

来源 | 编程技术宇宙(ID:xuanyuancoding)

神秘项目

我是CPU一号车间的阿Q,是的,我又来了。

最近一段时间,我几次下班约隔壁二号车间虎子,他都推脱没有时间,不过也没看见他在忙个啥。

前几天,我又去找他,还是没看到他人,却意外地在他桌上发现了一份文件,打开一看是一个代号为SGX的神秘项目,还是厂里领导亲自带头攻坚。

仔细看了看,原来,自从上次的攻击事件(详情:完了!CPU一味求快出事儿了!)发生以来,领导一直忧心忡忡,虽然当时依靠操作系统提供的办法暂解了燃眉之急,不过治标不治本,我们自身的缺陷一直存在,保不准哪天还要翻车。

这个代号为SGX的神秘项目全称Software Guard Extensions,志在全面改革,提升咱们CPU的安全能力。

偷听会议

我瞬间不高兴了,这么重要的项目,居然没找我参加?

随即,我来到了领导的办公室,果然他们几个在开着秘密会议,而我就凑在一旁偷听。

“诸位,你们都是咱们厂里的核心骨干,关于这次安全能力提升的事情,大家回去之后有没有什么想法,请畅所欲言!”,我听到领导在讲话。

核心骨干?难道我阿Q不是核心骨干吗?真是气抖冷!

沉闷了一小会儿,隔壁二号车间虎子才说到:“咱们现在不是有安全访问级别吗,从Ring0到Ring3,已经可以很好到隔绝应用程序的攻击了啊!”

领导摇了摇头,“尽管如此,但是一些恶意软件可以利用操作系统的漏洞可以获取到Ring0的权限,咱们现有的安全保护就荡然无存了。”

“那也是操作系统的锅,要改进也该让他们做啊,关我们什么事呢?”,虎子继续说到。

“你忘记前段时间针对咱们CPU发起的攻击了吗?”

此话一出,会场瞬间安静了。就这水平,领导居然请他来不请我!

领导缓了缓,接着说到:“咱们不能总依赖操作系统的安全保护,咱们自己也得拿出点办法。我觉得现有的安全机制不够,操作系统漏洞频出,很容易被攻破,咱们现在不能信任操作系统,得彻底全面的改革!”

这时,五号车间的代表说话了:“领导,我回去调研了一下,了解到咱们的竞争对手推出了一个叫TrustZone的技术,用于支持可信计算,号称提供了一个非常安全的环境专门支持对安全性要求极高的程序运行,像什么支付啊、指纹认证之类的,咱们要做的话可以参考一下。”

听完TrustZone的介绍,三号车间老哥仿佛找到了灵感,激动的说到:“有了!咱们可以在内存中划出一片特殊的区域,作为最高机密的空间。将高度机密的程序代码和数据放在这里面运行,再引入一种新的工作模式,咱们CPU只有在这种模式下才允许访问这个安全空间,否则就算是有Ring0的权限也不能访问!”

引进一个新的工作模式,这种思路倒是很新鲜,大家纷纷议论开来。

“这个安全空间技术上要怎样实现呢?”

“线程怎么进入和退出安全空间?恶意程序进去了怎么办?”

“怎么调用外部普通空间的函数呢?外部函数被攻击了怎么办?”

“需要系统调用怎么办?中断和异常怎么办?”

短短一小会儿时间,大家就七嘴八舌提了一堆问题出来···

领导给他们几个一一分配了任务,下去思考这些问题的解决办法,过几天再进行讨论。

在他们散会离场前,我匆忙离开了。

主动出击

这可是个表现的好机会,要是能解决上面的问题,领导说不定能让我加入这个项目组。

对于安全空间实现问题,既然是从内存上划出来的区域,自然得从内存的访问控制上做文章。我跟咱们厂里内存管理单元MMU的小黑还算有些交情,打算去向他请教一番。

听完我的需求,小黑不以为意,“就这啊,小事一桩,访问内存时我会进行权限检查,到时候除了之前已有的检查,再加一道检查就可以:如果发现是要访问安全空间的页面,再检查一下当前的工作模式是否正确。”

其他几个问题我也有了自己的想法,安全空间按照创建-初始化-进入-退出-销毁的顺序进行使用。

创建:通过执行ECREATE指令创建一个安全空间;

初始化:通过执行EINIT指令对刚才创建的安全空间进行初始化;

进入 & 退出:通过执行EENTER/EEXIT指令进入和退出安全空间,类似于系统调用的SYSENTER/SYSEXIT指令。提前设置好入口地址,进入安全空间后需要从指定的地方开始执行,避免外面的程序乱来。执行这两条指令的同时CPU进行安全模式的切换。

中断 & 异常:遇到中断和异常,需要转而执行操作系统内核处理代码,而操作系统是不能被信任的。需要执行AEX指令退出,将在安全空间执行的上下文保存起来,以便回头继续执行。

系统调用:系统调用有点麻烦,需要进入操作系统内核空间,因为不能信任操作系统,同样需要先退出安全空间,执行完系统调用再进来。

函数调用:安全空间和外部可以互相调用函数,普通空间调用安全空间函数叫ECALL,安全空间调用外部空间函数叫OCALL。调用的方式类似操作系统的系统调用,不同的是操作系统的函数是内核提供,安全空间的函数是应用程序自己定义的。

销毁:通过执行EREMOVE指令销毁一个安全空间

我还给这个安全空间取了一个名字,叫:Enclave,自然而然咱们CPU的工作模式就分了Enclave模式和非Enclave模式。

内存加密

随后,我把我的这些想法整理出来,来到了领导办公室,主动申请加入SGX项目组。

领导显然对我的到来有些意外,不过看完我准备的材料还是满意的同意了我的申请,让我也参与下一次的讨论会,真是功夫不负有心人!

很快就到了下一次的会议,我再也不用在门外偷听了。

会议上我的方案得到了大家的一致认可,只有八号车间的代表不以为然:“安全空间的方案是很好,但是还差一个最重要的东西,要是加上这个,那就完美了!”

“是什么?”,大家齐刷刷的望向了老八。

“这些形形色色的攻击方式,最终都是要读写内存数据,而他们屡屡得手的根本原因在于什么?”,老八说到。

大家一头雾水,不知道他想表达什么。

“老八,你就别卖关子了,快说吧!”

老八站了起来,说到:“其根本原因就在于内存中的数据是明文,一旦数据泄漏就可能造成严重后果。而如果我们把安全空间的内存数据加密了呢?即便我们的防线都失守了,对方拿到的也只是加密后的数据,做不了什么!”

老八的话如当头一棒,我怎么就没往这个方向考虑。

“加密?那什么时候解密呢?”,虎子问到。

“问得好,我建议咱们厂里内存管理部门设置一个内存加密引擎电路MEE(memory encryption engine),对安全空间的数据进行透明的加解密,数据写入内存时加密,读入咱们CPU内部时再解密!”

虎子一听说到:“唉,这个好,建议全面推广,干嘛只在安全空间用啊?”

老八拍了拍虎子的头:“说你虎,你还真虎,这玩意对性能影响不可小觑,怎么能随便用呢,好钢要用到刀刃上!”

“好!老八这个建议好。我决定这个项目就由老八来牵头!”,领导拍案而起。

散会后,虎子笑我忙活半天还是没有当上牵头人,我倒是很看得开,能一起参与就不错了,学到技术才是王道~

彩蛋

SGX项目上马后,咱们CPU的安全性有了很大的提升,然而我们花了这么大力气打造出的这个安全空间真的如铁桶一般,牢不可破吗?

预知后事如何,请关注后续精彩······

受限于故事形式,SGX技术的很多实现细节不便展开,感兴趣实现原理的朋友参考阅读下面的文章:

SGX技术的分析和研究:http://www.jos.org.cn/html/2018/9/5594.htm

Intel SGX学习:https://zhuanlan.zhihu.com/p/50894009

Intel 官方文档:https://software.intel.com/sites/default/files/article/413936/hasp-2013-innovative-instructions-and-software-model-for-isolated-execution.pdf

更多精彩推荐
☞头秃,在线求名字:网易使用昵称交流,再也没有“哥,姐,总”
☞高科技公司的 CEO 要写代码吗?
☞文件系统:隐匿在 Linux 背后的机制
☞CPU有个禁区,内核权限也无法进入!
☞5年5亿美金,华为昇腾如何构建全行业AI生态?
☞将比特币用作结算网络中蕴含的经济学知识
点分享点点赞点在看

CPU 有个禁区,内核权限也无法进入!相关推荐

  1. CPU有个禁区,内核权限也无法进入!

    来源 | 编程技术宇宙 封图 | CSDN 下载自视觉中国 神秘项目 我是CPU一号车间的阿Q,是的,我又来了. 最近一段时间,我几次下班约隔壁二号车间虎子,他都推脱没有时间,不过也没看见他在忙个啥. ...

  2. 如何理解处理器、CPU、多处理器、内核、多核?

    最近在学计算机原理,涉及到核心数的概念,不太理解,在网上找资料阅读了几篇文章,发现这篇文章的解释容易理解,于是搬运过来. 按照时间顺序或者说是CPU的发展顺序逐个解释好了: 一.处理器 Process ...

  3. [CVE-2022-0847][Dirty Pipe]Linux内核权限提升漏洞

    一.漏洞背景 漏洞原理与脏牛漏洞(CVE-2016-5195)类似,攻击者通过利用此漏洞,可覆盖重写任意可读文件中的数据,从而将普通权限的用户提升至root权限. 二.影响版本 Linux kerne ...

  4. CPU用户态和内核态

    这里写目录标题 内核态(管态)与用户态(目态) 内核态与用户态的区别 用户态到内核态的切换 用户态切换到内核态 内核态(管态)与用户态(目态) 操作系统需要两种CPU状态: 内核态(Kernel Mo ...

  5. Linux内核权限维持,Linux权限维持笔记

    一.修改文件/终端的属性 1.修改文件创建时间 如果蓝队是按照文件修改时间来判断后门的话,比如现在我们上传一个shell,可以看到shell文件与原文件的时间是不同的 解决方法: touch -r t ...

  6. CPU 漏洞补丁对内核性能影响:4.15 比 4.11 快 7-9%

    知名Linux Kernel维护成员Greg Kroah-Hartman今天分享了一些非常有趣的细节–在Linux内核打上Meltdown和Spectre漏洞补丁之后的性能影响.根据Google+博文 ...

  7. linux 内核 权限,linux – 内核模块执行中的不同权限

    因为module_init和你的钩子代码在不同的进程中运行.不同的流程之间有不同的权限. 通常,代码必须在进程中运行. module_init总是在insmoding模块期间运行(参见sys_init ...

  8. CPU的用户态和内核态

    内核从本质上看是一种软件--控制计算机的硬件资源 用户态和内核态也可以说是对应系统执行权限的一个分级 个人理解慎浅,多是参考别人的文章,日后工作之于在研究 文章目录 指令集 一.用户态 二.内核态 三 ...

  9. linux内核调度算法(2)--CPU时间片如何分配

    内核在微观上,把CPU的运行时间分成许多分,然后安排给各个进程轮流运行,造成宏观上所有的进程仿佛同时在执行.双核CPU,实际上最多只能有两个进程在同时运行,大家在top.vmstat命令里看到的正在运 ...

最新文章

  1. kafka 启动_Kafka的安装与启动
  2. php tp 微信支付,PHP实现的微信APP支付功能示例【基于TP5框架】
  3. zend连接mysql_zend_db连接mysql(附完整代码)
  4. libsvm3.22——在matlab(32位和64位)中的安装
  5. 华为交换机关闭接口命令_华为路由交换机基础命令,看看你会哪些?
  6. JAVA RSA加密解密代码范例(Base64版)
  7. 为什么有int 和integer
  8. 大容量化验室专用DD6K离心机
  9. uva10099+uvauva10048
  10. Mac火爆游戏---英雄联盟LOL
  11. 网络爬虫(基于python的网络爬虫批量爬取图片)
  12. 结合《穹顶之下》看中、美宽带提速
  13. 如何自学3D游戏场景建模和设计?
  14. 同花顺level2股票接口是什么?
  15. 推荐系统--基于图的推荐算法
  16. 达人评测 惠普星15和惠普战66选哪个好
  17. rails 密码加密
  18. 异或(XOR)运算加密/解密在线工具
  19. Microbiome杂志和主编介绍,影响因子和版面费齐飞
  20. opencv打卡50:闭运算cv2.morphologyEx(img,cv2.MORPH_CLOSE,kernel)

热门文章

  1. 4篇SCI,获得多次国奖,这个硕士小姐姐分享科研之路
  2. 中国联邦学习「五大流派」
  3. 上海AI高地雏形初现 徐汇区抢占产业潮头
  4. 陆奇演讲:人工智能精要
  5. 李飞飞最新访谈:我每天都在对AI的担忧中醒来
  6. 【智能制造】三张图读懂人工智能在工厂如何具体应用
  7. SAP MM 销售订单库存与普通库存之间相互转换过账后对于EBEWH以及MBEWH表的更新
  8. 图灵测试,时至今日还有意义吗?
  9. 元宇宙的“42条共识”
  10. 专家:人工智能开始对现实世界产生重大影响