NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

我的操作系统安全之路:从入坑到入门

  • 2022-03-23
  • 本文字数:2918 字

    阅读完需:约 10 分钟

我的操作系统安全之路:从入坑到入门

回想自己参与编程的经历,从最初的一通瞎折腾,到现在能参与以及贡献基础软件社区,已经有十多年时间了。很遗憾,这段经历的大多半时间都是走在一个错误的方向上的,至少现在我是这么认为的。确实没有什么精彩的故事,借着给龙蜥社区朋友们分享的契机讲一讲,列位看官权且当作教训来看,当作吃别人一堑,长自己一智吧。

从零开始编程


我上学时的主攻方向不是软件工程,也不是计算机,也没有研究什么课题,而是当时感觉非常没有前途的电子科学,现在也只是依稀记得那些课程名字,至于具体内容是什么,已经模糊了。这就导致我有很多时间来打游戏,那时还很流行组队打星际和魔兽争霸,许多工具软件都要去网上找破解版,电脑需要不断通过全盘杀毒来保持健康状态,不过当时我也不知道 Linux 是做什么用的。


当时看那些能破解软件、写出工具的黑客们真是羡慕不已,也许是出于兴趣,有意无意就关注了起来。从网络和论坛看到他们经常用到一种奇怪的语言,后来才知道那是汇编语言,在没有计算机基础也没有人指引的情况下,走上了这条现在看来方向明显不对的道路,很庆幸自己居然没有放弃。


后来,我就找了一些书籍资料在 Windows 下模仿写了一些使用 win32 API 的窗口程序,那时感觉还不错。因为学校的 C 语言课程,老师只会讲一些语法跟考试的内容,除了考二级也不知道还能用来做什么,这样一比较窗口程序显然更像一个真正的程序,虽然简单但能让人产生兴趣也更接近工程实用。


就这样断断续续几年居然基本掌握了 x86 汇编和 Win32 的主要 API,也对系统基础有了一定了解。因为自己的认知盲区,错误地选择了入门开发语言和开发环境,导致后来走了很多年的弯路。


很幸运,毕业之后没有失业,也没有从事科班工作,凭借自修的丰富的编程经验,终于混进了现在看起来是传统得不能再传统的主机安全行业,主要工作内容也是开发杀毒软件所需要的实时监控,以及一些恶意软件的分析工作。


那是 2010 年,正是 PC 机火热的时代,没有移动互联网,当时的杀毒软件还是装机必备、热门赛道,有诸多的企业在里面竞争,一点不亚于现在的社区团购。有多热门呢,当时的 360 还是可以跟腾讯叫板的,并且还能得到网络上的普遍支持,可以跟十年之后的现在做一个对比。


扯回正题,因为工作涉及系统开发的缘故,抱着很不情愿的状态开始使用 C 语言,也许是有汇编基础,C 语言学习起来就顺利了很多,对于许多人诟病的指针好像也没说的那么复杂。其实当时行业主流使用的是 C++ 语言,奈何一直没有学会,直到现在也是一知半解。


就这样浑浑噩噩的六年多,分析过 CVE、写过 POC、内核监控、各种 HOOK 信手拈来,开发语言也主要集中在 C、lua 和汇编。但是基本没做什么像样的项目,随着近几年操作系统自身安全性提升和软件分发的把控,操作系统安装一个专门的主机安全软件的必要性也越来越小。

基础软件领域的安全问题


也许因为安全背景,两年前偶然的机会混进了操作系统 OS 安全,基础软件的安全方向跟传统的主机安全还是有挺大区别的。


传统安全热衷于攻防,魔高一丈道高一尺,魔再高道更高,这样的无限循环,好像永远也到达不了安全的终点,也做不到 100% 的安全。


就比如现在非常流行的勒索软件,这是伴随着加密货币而诞生的一种简单粗暴的恶意软件,比特币 09 年就诞生了,那还是一个普遍使用诺基亚的时代,阿里云是那时才开始创业的,iPhone 也才刚刚出道,这十多年云计算和移动互联网对人们生活的改变,带来的社会价值都是有目共睹的。


然而,一个诞生了十多年的加密货币除了催生了一些不能活在阳光下的行业外,似乎没给社会带来什么改变,当然区块链那是另一码事,以至于现在还有不少人觉得加密货币是一个新事物。勒索软件目前在主机端依然没有很好的解决办法,我们只能避免这样的情况发生,也许真的要靠加密货币的自然覆亡来解决勒索软件。


这样攻防带来的另一个问题是没法标准化,你的矛升级了,我的盾也得更新,攻一方尽可能隐藏自己的攻击方式,防守方也要保密自己的防守细节。这样的安全方案随着时间推移边际价值是递减的。


从基础软件层面来考虑安全问题就大不相同了,比如数字签名、加密算法、TLS 协议以及 HTTPS,这些目前都已经是计算机和互联网的安全基石,也是从根本上解决安全问题,是一个比较彻底的解决方案,也更容易成为国际通用的方案,其次解决方案规范是公开的,会充分暴露出设计的缺陷,有助于安全能力的逐步提升。


我刚到操作系统团队的时候,接到的一个需求就是在 Linux 内核实现国内的商用密码公钥算法 SM2,我对密码算法之前是没有什么开发经验的,经过大半年的开发和社区交流,最终能把 SM2 做到 Linux 上游社区也实在是侥幸。关于这一段经历,大家可以移步旧文——终于,SM2 国密算法被 Linux 内核社区接受了!


之后正好赶上了龙蜥操作系统社区的成立,彼时国内面临外部的贸易冲突和技术封锁,以及国内数据安全问题,我们决定把全软件栈的国密做大做强,依托于操作系统给支持起来。我们在龙蜥社区的工作,可以参考「商密软件栈 SIG」,上面记录了我们的周报、月报和一些最佳实践案例,有比较详细的介绍。


龙蜥社区是一个更加开放的平台,有了能对外输出的平台,我的工作可以以社区方式来运作起来了,同时进展也会更快,能跟社区内有相同兴趣的伙伴协同工作,也第一时间把我们的工作成果带给社区用户和开发者。


我很喜欢我们公司内部的一句话「一次性把事情做对」。拿国密来说,从开始的算法标准制定到现在也有十多年的时间了,目前仍然没有被广泛使用是有原因的,工程上的碎片化是很重要的一点,这也是我们一开始坚持的原则,龙蜥的国密不是要做另一个碎片的国密实现,而是把国密的工程实现统一到日常使用的基础软件中去,避免以后国内大量的资源和人力重复投入,一次性把这个事情做好。


有了内核 SM2 算法的成功经验后,我们的动力更足了,陆续在 libgcrypt、OpenSSL、coreutils、IMA,甚至 Rust 生态 RustCrypto 等基础软件或者密码算法场景中支持了国内的商用密码算法,并且为 SM3/4 算法支持了 x86 和 Arm64 平台的指令集优化、以及 KTLS 国密算法的支持。


目前我们在商密生态多年的开发工作已经全部回馈到了社区,其中绝大部分贡献到了主流开源项目的上游,总代码量超过万行。比如我们在 Arm64 架构下做了 NEON 和 Crypto Extensions 指令集优化,性能有了质的飞跃。


非常感谢社区各合作伙伴的支持,以及社区工作人员的辛苦付出,经过一年多的努力,我们基本构建起了商密的基础软件设施,不仅解决了从无到有的问题,也把商密的性能提升到真正能产业化应用的程度,也依托于龙蜥操作系统(Anolis OS)发布了支持全栈商用密码的 Anolis 商密版 OS,当然这个生态不管是横向还是纵向还有很多工作要做,需要更多内部和外部开发者参与进来一起建设,我们非常欢迎与大家一起合作。


(图/开发者峰会演讲)


程序语言世界素来有江湖门派之争,文中难免涉及个人主观判断,只是代表个人想法和意见,仅供大家参考。


以下是我们团队在龙蜥社区上的商密软件栈 SIG,非常欢迎有兴趣的开发能参与进来,为中国的基础软件安全添砖加瓦。


  • SIG 地址:https://openanolis.cn/sig/crypto

  • 代码库:https://codeup.openanolis.cn/codeup/crypto


作者介绍:


张天佳,龙蜥社区商密软件栈 SIG Maintainer,安全技术开发,专注于国内商用密码的技术开发以及推广工作。

2022-03-23 14:583743

评论

发布
暂无评论
发现更多内容

电子证照上链--助推智慧政务

13530558032

区块链BaaS应用平台搭建,助力企业运用区块链解决业务问题

13828808769

区块链 区块链+ 区块链发展 #区块链#

基于深度学习的两种信源信道联合编码

华为云开发者联盟

深度学习 通信 编码 信源编码 信道编码

Datadog 能成为最大的云监控厂商吗

睿象云

运维 运维平台 Datadog 云监控

可能是绝唱!阿里资深工程师深度解读Netty底层核心源码

Java架构追梦

Java 源码 架构 面试 Netty

【LeetCode】删除排序链表中的重复元素 IIJava题解

Albert

算法 LeetCode 3月日更

能源绿色管控:天然气站启动数字化转型,工业企业该如何突围?

一只数据鲸鱼

物联网 数据可视化 智慧城市 能源管理 天然气

LeetCode题解:92. 反转链表 II,迭代,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

OpenKruise 如何实现 K8s 社区首个规模化镜像预热能力

阿里巴巴云原生

Serverless 容器 云原生 k8s 调度

Golang号称最快的Json解析器速度可达5623ns/op

happlyfox

学习 3月日更 Go 语言

低代码是什么?低代码价值主要体现在哪?

优秀

低代码

被MySQL慢日志查询搞废了?3分钟教你快速定位慢查询问题!

观测云

云计算

智慧公安信息化管理系统,重点人员管控系统的搭建

13828808769

智慧交通

推荐 2 款必备的 Django 开发神器

星安果

Python django Web 后端

力扣(LeetCode)刷题,简单题(第13期)

不脱发的程序猿

面试 LeetCode 28天写作 算法面经 3月日更

2021最新分享三面百度提前批(Java开发岗)面经 已拿Offer

比伯

Java 编程 架构 面试 程序人生

实现跨生态互联,区块链赋能智能家居新体验

旺链科技

区块链应用 智能家居

区块链中药溯源--区块链为中医药溯源认证

13530558032

困扰一周的奇葩bug:重复相似代码多,导致单片机程序跑飞

不脱发的程序猿

28天写作 硬件设计 嵌入式软件 单片机 3月日更

单账户实时记账能力达2万笔每秒 蚂蚁启用新一代高性能记账引擎

DT极客

从解决Github TimeOut到经典面试题:从输入URL到浏览器显示页面发生了什么?

秦怀杂货店

GitHub TCP 网络 HTTP DNS

如何正确使用Python临时文件

华为云开发者联盟

Python 安全 临时文件 tempfile 库函数

​Autonomous Dream Works的独创力杰作EGGNetwork EFTalk

币圈那点事

阿里面试官:Android开发真等于废人?已拿offer附真题解析

欢喜学安卓

android 程序员 面试 移动开发

一段java代码执行旅程

华为云开发者联盟

JVM class 指令 java代码 java栈

程序员去大公司面试,小程序FMP优化实录,已拿offer入职

欢喜学安卓

android 程序员 面试 移动开发

字节抖音iOS客户端实习 123hr面 面经

iOSer

ios 字节跳动 面试 抖音

为了跳槽刷完1000道Java面试真题,没想到老板直接给我升职了

Java 程序员 架构 面试

区块链六大应用场景,推动政府信息化发展

13828808769

区块链+ #区块链#

Worktile 前端工程化之路

PingCode研发中心

大前端

主数据建设的挑战与发展

EAWorld

我的操作系统安全之路:从入坑到入门_行业深度_张天佳_InfoQ精选文章