LAXCUS 分布式操作系统如何保障系统安全
因为美国制裁华为,如今几乎所有人都知道了芯片的重要性。
许多人不知道的是,软件的安全也同样关乎重大,飞机、高铁、核电站、工业互联网、区块链,智慧城市、医疗设备等等,任何一个重要环节的软件安全出了问题,后果都极其严重,这绝非危言耸听。
2022 年 3 月 28 日,麻省理工学院(MIT)技术评论与阿布扎比技术创新研究所(TII)合作编写发布了《从今天起,直面明天的量子黑客》(Facing tomorrow‘s quantum hackers today)。
该报告基于对全球的量子计算公司密码学的专家、数学家、物理学家和高级管理人员的采访,评估了一台成熟的量子黑客计算机对如今网络安全系统组织的威胁与影响,提出黑客正在进行的“现在收集-以后解密”行为具有重大的网络威胁隐患。并在此基础上分析了“后量子算法”的威胁解决方案,并呼吁政府及持有敏感信息的企业尽快提高重视程度,并采取相应的保护措施。所以我们在设计 LAXCUS 分布式操作系统的时候考虑了全体系的安全管理策略,同样我们也考虑到不同用户对安全管理需求是不一样的,所以在设计安全管理时,针对不同环境、不同环节做了一些选择性处理。
上图是 Laxcus 的安全管理模型,这是一个“网络->节点->用户->业务”的四层管理架构。RSA+SHA 的安全策略,是系统所有业务的安全基础。在 FIXP 网络里,要求所有业务都使用 RSA 加密,所有数据都经过 SHA 验证。此后,分别是对称加密、资源安全策略、签名管理、用户安全策略、业务安全策略一系列安全管理措施。在这些措施里,RSA 是目前安全等级最高的加密手段,SHA 是数字签名算法,可以保证网络传输内容的正确性。针对不同的安全需求,系统提供了 SHA1、SHA256、SHA512 三种签名验证。之后,对大量传输的数据,FIXP 网络将启用对称加密。目前对称加密算法除了 AES、DES 等常用算法外,管理员还可以通过系统提供的 API 接口,将自己的私有对称加密算法加入其中。资源安全策略则包含了为不同节点和服务设计的安全验证。签名管理判断每个注册用户的合法性。用户安全策略通过规范化的 API 接口,赋与用户自定义安全规则的能力,方便用户自由定义、调整自己的私有数据业务,这有助于强化数据处理过程中的用户数据安全。业务安全策略配合用户安全策略,保证每一项数据业务全程处于系统监管状态下。
上述安全管理措施非常繁多,但都是围绕着两个目标进行:防窃取和防篡改。考虑到安全管理对数据处理业务的影响(频繁的 RSA 计算对 CPU 的占比非常高),在系统的某些层面,安全管理被设置为可选项,决定权交给集群管理者和用户自己处理。例如在内网通信中,由于内网的安全保障度比较高,并且内网的数据传输量又非常巨大,主要的网络计算工作都在内网中进行。所以在这种情况下,为了给数据处理是腾出基础资源,提高处理效率,可以酌情选择省略掉部分安全管理。
本文将依循 Laxcus 分布式操作系统的架构,阐述每个层面的安全管理。
一、环境安全
在系统架构设计上,Laxcus 集群被分为内外彼此隔绝的两个网络环境。内部网络的拓扑结构对外部保密,且不可访问。网络地址一般是采用 TCP/IP 协议中的内网地址(10.0.0.0 - 10.255.255.255、172.16.0.0 - 172.31.255.255、192.168.0.0 - 192.168.255.255),它们由专业的计算机集群管理人员来管理和维护,可以被认为是“安全”的。外网由普通的注册用户来使用和管理,不在集群管理人员的可控制范围内,来源可以是互联网或者 VPN 的连接,他们属于低可信度用户,被认为是“不安全”的。网关节点位于它们之间,除了起到沟通双方的连接和分解任务压力的作用外,更主要是在接受外部网络请求的同时,屏蔽内部网络拓扑结构,使内部网络有一个相对安全的运行环境,防范可能遭到的网络攻击。
虽然运行环境提供了这样的安全设计,但是在部署集群时,仍然需要集群的组织管理人员遵守设计规定。集群运行过程中,管理人员也应该具备安全管理常识,这是需要相互配合的工作。在这个的架构安全基础上,还有后续一系列的安全管理措施,进一步降低集群被攻击的可能性。
二、通信安全
在 Laxcus 设计定义里,节点同时具有客户机/服务器的双重身份。在每一次网络通信开始时,为了确保客户机是可以信任的,服务器会要求客户机出示通信安全凭证。这个凭证将保证双方在安全的状态下通信。
通信安全凭证在 FIXP 服务器上配置,这里面保存着客户机在连接时必须出示的信息。一台 FIXP 服务器可以按照不同来源的用户,为他们配置个性化的通信安全令牌,这种措施保证了每个用户都能够拥有一套属于自己的网络管理策略。这样即使某个用户的账号因为个人原因遭到外泄,也不会影响同一节点上的其他用户的安全通信。FIXP 安全通信分为三种类型:地址验证、账号验证、地址/账号复合验证。当服务器要求客户机出示安全凭证时,客户机必须遵守这个协定,向服务器出示自己的安全凭证,否则通信将被服务器中止。客户机也可以主动向服务器要求安全校验,服务器每次都是会接受的。
通过安全凭证验证后,可以确定网络两端之间传输的数据是正确和可信任的,这样就为后续的数据处理工作提供了一个基本的安全保障。
使用中也有例外,例如上面提到的内网通信。因为内部网络相对公共网络,它的安全度和信任度颇高,而通信安全项除了地址验证外,其他两种都需要执行消耗 CPU 的计算,这会造成数据处理的延迟,对大规模、高频度、高密度的网络计算来说显得得不偿失。所以,一般的建议是,在使用互联网通信的双方,应该启用安全通信;在信任度较高的内部网络,这项工作可以选择地址验证,或者忽略它。
三、节点准入制度
在 Laxcus 集群里,一个节点若要向另一个节点发起命令请求,必须首先以客户机的身份登录它的服务器节点,客户机发出的每一条命令,都要接受服务器的验证和检查,这就是节点准入制度。
节点准入制度是在安全通信之后,为各节点间的连接和操作定义的一套安全措施。在这个层面上,能够保证各节点之间的连接都是正确的,被传输的命令也在监管范围内。
比如,Gate 节点只能连接 Top 节点,连接 Home 节点就是非法的。Front 节点必须先向 Call 节点注册,才能得到命令操作许可。Call 节点只能向 Data 节点发出 SQL SELECT 命令,向任何其它节点发出这道命令都会遭到拒绝。
我们对不同节点的节点准入制度有一套详细的规定,在此就不赘述。由于这个规定准确定义了它们之间的请求、受理范围、命令许可,使得每个节点和每一道命令在运行过程中都接受检查,杜绝了一切可能的非法连接和操作。
四、用户帐号安全
用户登录使用 Front 节点。无论用户是以终端的交互方式还是驱动程序的嵌入方式接入 Laxcus 集群,系统都要求用户提供一个登录账号,确认用户是可信的。Laxcus 账号由用户名称和密码组成,每一个账号必须由系统管理员建立,账号的用户名和密码会被计算机计算为 SHA1 算法的散列码,再通过网络上传到 Top 节点,保存到数据字典里,供后续使用。
账号的用户名是系统唯一的,一经建立不能修改。当系统管理员建立账号后,会通过其它渠道将账号的明文转交给账号持有人。账号持有人拥有修改账号密码的权利,通常账号持人会修改系统管理员设置的密码。
特别注意,在建立、修改和使用账号登录的过程中,账号的明文只出现在用户的计算机屏幕上或者用户的驱动程序里,不会出现在网络通信的任何环节。Top 节点保存的只是账号明文的 SHA1 算法散列码,由于 SHA1 算法逆向破解的难度,使得获取账号明文的可能性极小。这样就使得账号在产生和使用过程中拥有极大的安全性。
另外,用户登录除了需要提供登录账号外,还必须持有一个系统管理员颁发的安全许可证书。这是一个经过 RSA 算法签名的文件,由系统管理员建立和保管。用户登录时首先出示这个证书,服务器会检查证书的有效性,确定证书有效和登录者可信后,再执行账号检查,进一步判断账号的正确性和操作范围,决定是接受还是拒绝。
这样,实际上每一个用户的登录过程都是 RSA 和 SHA1 的组合,首先用 SHA1 对账号进行数字签名,然后用 RSA 进行传输和校验。究其原因,因为这是进入集群的第一步,必须保证有足够的安全强度。这种双保险措施保证了每一个登录用户的可信性。
登录成功后,双方进入正式的通信状态。我们通常要求数据经过加密或者数字签名处理。目前提供的加密和数字签名算法有:AES、DES、3DES、MD5、SHA1 等。这些算法和密钥会随着通信过程自动变换,使得窥密者短时间内难以获得明文,这又进一步提高了交互双方的数据安全度。
综上所述,用户进入 Laxcus 集群依次有三道安全门槛:RSA+SHA、用户账号、对称加密或者数字签名,前两种保证用户登录时的安全,后一种保证登录后数据内容的安全。
五、用户权限管理
用户使用 FRONT 节点登录,只是拥有了进入集群的权利。若要获得数据处理能力,还需要获得进一步的数据操作权限。
数据操作权限也是由管理员来授权。数据操作权限从高到低分为三级:用户级、数据库级、表级。每一个级别有多个操作选项,部分选项会在多个级别存在,对于这类同质选项,上一级操作权限默认高于下一级操作权限。例如 SQL“SELECT”操作权限,用户级“SELECT”高于数据库级”SELECT“,数据库级”SELECT“又高于表级“SELECT”。
由管理员分配的数据操作权限也可以被管理员回收。权限回收后将立即生效,超过权限的数据请求在此之后将被拒绝。
通过用户权限管理,管理员可以把用户的数据处理操作控制在规定的范围内,杜绝用户可能的越权操作。
六、私有业务安全
私有业务属于用户业务范围,这一块的安全管理交给用户处理。在这个层面,用户可以自由组织自己的数据内容和数据格式。组织方式分成两种:
1)使用系统提供的可类化接口,在发送前,把数据按照自己理解的数据格式,用各种方式编排在一起,在接收后,再重新拆解。可类化接口中的“ClassWriter、ClassReader”同时提供加密/解密功能,可以进一步提高安全能力,这些加密/解密算法也是可以由用户自己定义的。这样在数据传输过程中,由于格式和内容都经过了处理,破解就变得很困难。至于密码,可以放在外界难以窥测到的地方,比如命令自定义参数的某个位置,或者集群的数据字典里。
2)数据表中的数组数据,在生成时通过系统提供的“Packing“接口加密。这样内容在生成就已经处理过,只是在显示的时候被解开,重新以明文格式出现,中间过程都是以密文的形式存在。在不掌握密码的情况下,外界也是无从窥视。
七、分布式任务组件安全
分布任务组件的安全由沙箱(sandbox)来保证。目前沙箱属于容器管理服务的一部分,提供监视和限制程序操作范围的能力,已经被集成到 Laxcus 分布式操作系统里。所有处于运行状态的分布任务组件,都被置于沙箱里运行。
将分布任务组件置于沙箱里运行的根本原因在于:分布任务组件来源于用户,从保守的安全角度考虑,我们无法预判每个分布任务组件都是善意和可以信任的,不会在他们的程序里含有恶意代码,那么从统一处理的原则出发,我们就假定这些分布任务组件都是不安全的,需要在它们运行过程中,监视和约束它们的操作行为,以防止各种可能危害系统或者其它分布任务组件的事情发生。
在沙箱里运行的分布任务组件,它们的操作权限受到沙箱严格监管,只能“读、写、删除”规定目录下面的文件,或者获取规定的系统属性,其它操作都被排除在外。运行过程中,分布任务组件发出的每个操作请求都会首先传到沙箱进行安全检查,当发现操作超出许可范围时,沙箱将拒绝执行,以保证运行环境安全。
沙箱的安全检查项目被放在安全策略文件中,在系统启动时加载。修改安全策略文件是很容易的,不过这属于集群管理员的职责,普通用户没有这个能力。
八、数据块安全
数据块的安全依赖于对数据的签名。当数据块从 Cache 状态转向 Chunk 状态过程中,系统会计算这个数据块的数据内容,生成一个 256 位的数字签名,做为校验码保存到数据块里。产生数据块的签名过程很快,一个 64M 的数据块签名生成时间,在 Pentium4 2.0G 的计算机上,通常在 10 毫秒左右。
当 Data 节点重新启动,或者数据块被加载到内存,或者通过网络传输到另一个 Data 节点,系统会重新根据数据内容再次生成一个校验码,与已经存在的校验码进行比较,确认数据的完整性,以保证后续数据处理的数据本身是正确的。
九、行/列存储安全
数据块从 Cache 状态转入到 Chunk 状态过程中,除了生成数据块签名,还会根据数据块的存储模型,针对行集合或者列集合,生成它们的 CRC32 校验码,并且保存在记录的开始位置。
设置行/列集合校验码的原因是,因为整块的数据不会被经常调用,而行/列集合的数据却总是在网络上大量、频繁传递,这就使得行/列集合的数据校验更有实际意义。
然而相较于少量的数据块签名计算,被传输的行/列集合因为粒度细、数据量大、校验次数频繁,计算持续时间也会更长,这将消耗大量计算资源,影响网络计算的处理效率。所以,通常任务请求方在收到计算结果后,会根据数据的来源来选择是否检测。如果是内网数据,由于网络安全度高,这个校验可以被忽略。
版权声明: 本文为 InfoQ 作者【LAXCUS分布式操作系统】的原创文章。
原文链接:【http://xie.infoq.cn/article/e01ea0fd0a13807d56f75b3ea】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论