草庐IT

分布式系统安全之​复制管理和协调架构:攻击缓解背后的基础

铸盾安全 2023-03-28 原文
开发可靠的分布式系统的一个基本挑战是支持执行共同任务所需的分散实体的合作,即使某些这些实体或它们之间的通信失败。需要确保服务操作的顺序,并避免对分布式资源进行分区,以便形成一个整体的“协调”资源组。

状态机复制或状态机方法是通过复制服务器和协调客户端与服务器副本的交互来实现容错服务的通用方法。该方法还为理解和设计复制管理协议提供了一个框架。基本的系统抽象是状态机的抽象,使得状态机的输出完全由它处理的请求序列决定,而与时间或其他活动无关。系统。复制可以是主动的、半主动的、被动的或惰性的。

应该注意的是,理想情况下,人们希望共同实现高可用性、一致性和完全协调,以消除分布式资源集的任何分区。但是,CAP断言的作用是:

CAP

任何网络共享数据系统(例如Web)只能提供3种可能属性中的2种,如下所示:

1.一致性(C):相当于拥有数据的单个最新副本,即每个服务器对每个请求返回正确的响应。

2.可用性(A):每个请求最终收到响应的数据。

3.分区(P):网络分区容错,使得服务器无法分区为非通信组。

当然,安全攻击会试图破坏CAP的这些元素。

复制和协调

为了提供一致和一致的行为(在值和顺序上),分布式资源使用各种类型的副本管理,即协调模式。这是表征任何分布式系统功能的关键协调机制。决定特定机制的因素取决于系统同步模型的类型、组通信的类型,尤其是所考虑的扰动(故障或攻击)的性质。这些机制可以是简单的投票或领导者选举过程(例如,环形算法,欺凌),也可以是更复杂的共识方法来处理崩溃或拜占庭5行为。数据库事务的提交协议与提供经过验证的访问控制的凭据管理和PKI基础结构的方案在这里相关。我们简要描述了一组广泛使用的模式,并参考阅读器以完整覆盖。分布式系统中的授权和身份验证也在身份验证,授权和责任CyBOK知识领域中进行了讨论。

Paxos

为了避免分布式实体进行不协调的行动或未能响应的情况,Paxos已经开发出来,这是一组隐式领导者选举协议,用于在异步设置中解决共识。Paxos通过让所有参与者在初始阶段提出一个达成一致的价值来解决共识问题。在第二阶段,如果多数人同意某个价值,则提出该价值的过程隐含地成为领导者,并达成一致。对下一个值重复相同的过程,以就一系列值达成共识。

众所周知,该方案仅在非常特定的情况下才提供活体。在这种情况下,流程继续无限期地提出价值,并在初始阶段保持阻塞,因为无法形成多数并且从未取得进展。然而,这种情况在实践中很少发生,Paxos仍然是使用最广泛的协调协议之一。

由于在第二阶段只需要多数人即可达成共识,因此即使在恢复的情况下,该协议也对崩溃具有容忍度。这是了不起的,因为只要大多数进程没有失败,就能够达成共识。

虽然Paxos协议有多种实现方式,但由于其固有的复杂性,它以难以实现和构建中间件而闻名。为此,提出了一种类似于Paxos的协议RAFT来提供相同的保证。RAFT最近因其更简单的设计而越来越受欢迎。通过与Paxos的比较,解释了RAFT协议开发背后的动机以及它是如何工作的。

拜占庭容错(BFT)

攻击和其他故意中断不一定遵循良性遗漏、时间或崩溃的语义。为了容忍任意恶意行为,拜占庭容错(BFT)协议使用协调复制来保证操作的正确执行,只要在大多数三分之一的进程受到损害并表现出任意(即拜占庭,参见第5节)行为。

在BFT中,进程以轮次交换它们从彼此那里收到的值。达成共识所需的轮数取决于系统中受损参与者的数量。请注意,由于该协议是轮次运行的,因此它被归类为同步协调协议。已经表明,FLP不可能的结果是在异步通信的情况下不可能达成共识。由于同步通信的必要性以及处理拜占庭故障所需的消息交换开销相当高,BFT协议主要应用于特定的关键应用。然而,通过加强对同步、确定性和妥协数量的一些基本假设,正在进行多种实际BFT优化的尝试。Google File System(Chubby)和Amazon Web Services(AWS)实现了Paxos和部分BFT功能。同样重要的是要强调BFT不仅因为所需轮数的消息复杂性而昂贵。处理f恶意故障所需的节点数(>f)也是昂贵的,即f是由对手控制的节点数。

从安全角度来看,BFT协议能够容忍任意恶意行为,因此构成了构建入侵容忍系统的有吸引力的构建块。值得注意的是,这些协议考虑了受感染实体的数量。当面对恶意攻击者时,相同的副本是不够的,因为它们表现出相同的漏洞。如果其他副本相同,则可以破坏一个副本的恶意攻击者可以轻松破坏它们。需要复制和多样性(或不同的保护方法)。

提交协议

许多应用程序,例如数据库,需要跨复制的数据或操作进行排序,其中所有参与者都同意执行相同的正确结果(即提交)或不执行任何操作–原子性属性。因此,作为一种专门的共识形式,需要分布式协调器定向算法来协调参与分布式原子事务的所有进程是否以提交或中止(回滚)事务。

两阶段提交(2PC)是这种原子提交协议的一个简单示例。该协议继续进行从领导者到所有要提交的客户端的广播查询。随后是来自每个客户端的确认(提交或中止)。在收到所有响应时,领导者会通知所有客户端关于提交或中止的原子决策。即使在许多故障情况下(涉及进程、网络节点或通信故障等),该协议也能实现其目标,因此被广泛使用。基于日志记录协议状态的方法用于支持恢复。经典的2PC协议对可能导致不一致的协调器故障提供有限的支持。

为了解决这个问题,开发了三阶段提交(3PC)协议。3PC协议本质上是BFT协议的扩展,并增加了第三个通信阶段,以帮助领导者做出中止的决定。这需要更高的消息传递和日志记录开销来支持恢复。虽然与BFT相比,3PC是一种更强大的协议,但由于消息传递开销及其对网络分区的敏感性(即P大写)。在实践中,系统使用BFT是为了简单性,或者使用Paxos协议来表示其鲁棒性。

有关分布式系统安全之​复制管理和协调架构:攻击缓解背后的基础的更多相关文章

  1. ruby - 如何使用 Ruby aws/s3 Gem 生成安全 URL 以从 s3 下载文件 - 2

    我正在编写一个小脚本来定位aws存储桶中的特定文件,并创建一个临时验证的url以发送给同事。(理想情况下,这将创建类似于在控制台上右键单击存储桶中的文件并复制链接地址的结果)。我研究过回形针,它似乎不符合这个标准,但我可能只是不知道它的全部功能。我尝试了以下方法:defauthenticated_url(file_name,bucket)AWS::S3::S3Object.url_for(file_name,bucket,:secure=>true,:expires=>20*60)end产生这种类型的结果:...-1.amazonaws.com/file_path/file.zip.A

  2. ruby - 分布式事务和队列,ruby,erlang,scala - 2

    我有一个涉及多台机器、消息队列和事务的问题。因此,例如用户点击网页,点击将消息发送到另一台机器,该机器将付款添加到用户的帐户。每秒可能有数千次点击。事务的所有方面都应该是容错的。我以前从未遇到过这样的事情,但一些阅读表明这是一个众所周知的问题。所以我的问题。我假设安全的方法是使用两阶段提交,但协议(protocol)是阻塞的,所以我不会获得所需的性能,我是否正确?我通常写Ruby,但似乎Redis之类的数据库和Rescue、RabbitMQ等消息队列系统对我的帮助不大——即使我实现某种两阶段提交,如果Redis崩溃,数据也会丢失,因为它本质上只是内存。所有这些让我开始关注erlang和

  3. ruby - 如何安全地删除文件? - 2

    在Ruby中是否有Gem或安全删除文件的方法?我想避免系统上可能不存在的外部程序。“安全删除”指的是覆盖文件内容。 最佳答案 如果您使用的是*nix,一个很好的方法是使用exec/open3/open4调用shred:`shred-fxuz#{filename}`http://www.gnu.org/s/coreutils/manual/html_node/shred-invocation.html检查这个类似的帖子:Writingafileshredderinpythonorruby?

  4. 电脑0x0000001A蓝屏错误怎么U盘重装系统教学 - 2

      电脑0x0000001A蓝屏错误怎么U盘重装系统教学分享。有用户电脑开机之后遇到了系统蓝屏的情况。系统蓝屏问题很多时候都是系统bug,只有通过重装系统来进行解决。那么蓝屏问题如何通过U盘重装新系统来解决呢?来看看以下的详细操作方法教学吧。  准备工作:  1、U盘一个(尽量使用8G以上的U盘)。  2、一台正常联网可使用的电脑。  3、ghost或ISO系统镜像文件(Win10系统下载_Win10专业版_windows10正式版下载-系统之家)。  4、在本页面下载U盘启动盘制作工具:系统之家U盘启动工具。  U盘启动盘制作步骤:  注意:制作期间,U盘会被格式化,因此U盘中的重要文件请注

  5. 【鸿蒙应用开发系列】- 获取系统设备信息以及版本API兼容调用方式 - 2

    在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList​()Obt

  6. postman接口测试工具-基础使用教程 - 2

    1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,

  7. 软件测试基础 - 2

    Ⅰ软件测试基础一、软件测试基础理论1、软件测试的必要性所有的产品或者服务上线都需要测试2、测试的发展过程3、什么是软件测试找bug,发现缺陷4、测试的定义使用人工或自动的手段来运行或者测试某个系统的过程。目的在于检测它是否满足规定的需求。弄清预期结果和实际结果的差别。5、测试的目的以最小的人力、物力和时间找出软件中潜在的错误和缺陷6、测试的原则28原则:20%的主要功能要重点测(eg:支付宝的支付功能,其他功能都是次要的)80%的错误存在于20%的代码中7、测试标准8、测试的基本要求功能测试性能测试安全性测试兼容性测试易用性测试外观界面测试可靠性测试二、质量模型衡量一个优秀软件的维度①功能性功

  8. kvm虚拟机安装centos7基于ubuntu20.04系统 - 2

    需求:要创建虚拟机,就需要给他提供一个虚拟的磁盘,我们就在/opt目录下创建一个10G大小的raw格式的虚拟磁盘CentOS-7-x86_64.raw命令格式:qemu-imgcreate-f磁盘格式磁盘名称磁盘大小qemu-imgcreate-f磁盘格式-o?1.创建磁盘qemu-imgcreate-fraw/opt/CentOS-7-x86_64.raw10G执行效果#ls/opt/CentOS-7-x86_64.raw2.安装虚拟机使用virt-install命令,基于我们提供的系统镜像和虚拟磁盘来创建一个虚拟机,另外在创建虚拟机之前,提前打开vnc客户端,在创建虚拟机的时候,通过vnc

  9. ES基础入门 - 2

    ES一、简介1、ElasticStackES技术栈:ElasticSearch:存数据+搜索;QL;Kibana:Web可视化平台,分析。LogStash:日志收集,Log4j:产生日志;log.info(xxx)。。。。使用场景:metrics:指标监控…2、基本概念Index(索引)动词:保存(插入)名词:类似MySQL数据库,给数据Type(类型)已废弃,以前类似MySQL的表现在用索引对数据分类Document(文档)真正要保存的一个JSON数据{name:"tcx"}二、入门实战{"name":"DESKTOP-1TSVGKG","cluster_name":"elasticsear

  10. ruby - 用 YAML.load 解析 json 安全吗? - 2

    我正在使用ruby2.1.0我有一个json文件。例如:test.json{"item":[{"apple":1},{"banana":2}]}用YAML.load加载这个文件安全吗?YAML.load(File.read('test.json'))我正在尝试加载一个json或yaml格式的文件。 最佳答案 YAML可以加载JSONYAML.load('{"something":"test","other":4}')=>{"something"=>"test","other"=>4}JSON将无法加载YAML。JSON.load("

随机推荐