云安全攻防(十)之 资源耗尽型攻击

资源耗尽型攻击

同为虚拟化技术,容器与虚拟机既存在相似之处,也有显著不同。在资源限制方面,无论使用 VMware、Virtual Box 还是 QEMU,我们都需要为即将创建的虚拟机设定明确的CPU、内存及硬盘资源阈值。在虚拟机内部进程看来,他真的处于一台被设定好的独立计算机之中,然而,容器运行时默认情况下并未对容器内部进程在资源使用上做任何限制,以Pod 为基本单位的容器编排管理系统在默认情况下同样未对用户创建的Pod做任何CPU、内存使用限制

缺乏限制使得云原生环境面临资源耗尽型攻击的风险。攻击者可能通过在一个容器内发起拒绝式服务攻击来大量占用宿主机的资源,从而影响到宿主机自身或宿主机上其他容器的正常运行。注意,这里我们讨论的是默认配置下资源限制缺失,从而导致容器的隔离性在一定程度上失效(影响到容器外系统或服务的正常运行),而非针对容器本身的拒绝式服务攻击

常见容易受影响的资源如下:

1)计算资源:CPU、内存等
2)存储资源:本地硬盘等
3)软件资源:内核维护的数据结构等
4)通信资源:网络带宽等

CPU 资源耗尽

毫无疑问,CPU资源大量消耗会对计算机的正常运行产生影响,在限制缺少的情况下一个容器几乎能够使用宿主机上几乎所有的算力

下面,我们借助压力测试工具 stress 测试一下,同时使用 htop 工具 来监测宿主机CPU的使用情况

首先,我们在宿主机上开启 htop 监控,然后再宿主机上运行一个容器,接着在测量一个容器并执行 uname -a 命令所需的时间,可见从执行命令到结束的时间约为0.81s

time docker run -it --rm ubuntu uname -a

在这里插入图片描述

现在,我们模拟大量占用CPU算力的场景,执行如下的命令,拉取压力测试工具 stress的 docker 镜像:

 docker pull joedval/stress

随机生成一个以“joedval/stress”镜像为基础的容器,设定权级为512,进行压力测试

time docker run -it --rm -c 512 joedval/stress --cpu 1

在这里插入图片描述

我们通过 htop 显示此时宿主机上的一个CPU核心使用率均为 100%,并且所花费的时间达到了31S

在这里插入图片描述

由此可见,在没有限制的情况下,恶意容器能够通过 CPU 算力耗尽的方式影响宿主机及其他容器的正常运行

内存资源耗尽

内存耗尽的表现也非常明显:应用交互及时性降低,服务响应时间或延长,在缺少限制的情况下,一个容器几乎能够占用宿主机上的所有内存

下面,我们借助压力测试工具stress测试一下,同时使用htop工具来检测一下宿主机内存的使用量

首先,我们在宿主机上打开 htop 监控,然后在宿主机上运行一个容器,接着再测量创建一个容器并执行uname -a 命令所需要的时间,可以见到从执行命令到结束花费了大约0.91S

在这里插入图片描述

现在我们模拟资源耗尽的场景,再第一次创建的容器中使用 stress 工具申请大量的存储空间,执行如下的命令:

stress --vm-bytes 800m --vm-keep -m 3

在这里插入图片描述

htop 显示此时宿主机上内存占用已经接近容量约为 1.77G,这时候我们在此测量创建一个容器并执行 uname -a 命令所需的时间已经变为 4.28S

在这里插入图片描述

由此可见,在没有限制的情况下,一个容器能够通过内存耗尽的方式影响宿主机及其其他容器的运行

进程表耗尽

事实上,除了硬件资源外,操作系统给还会提供很多软件资源,进程表就是其中之一,我们用经典的进程表耗尽案列——Fork炸弹——来分析这类软件资源无限制可能导致的问题。操作系统中一切行为都是以进程方式执行的。为了管理这些进程,操作系统内核维护了一张进程表,表的空间是有限的,一旦饱和,系统就无法再运行任何新程序,除非表中有进程终止

Fork炸弹,顾名思义,就是借助 fork 系统调用不断创建新进程,使进程表饱和,最终系统就无法正常运行,其中最经典的版本还是 bash 版本:

: () { : | : & } ; :

上面的代码的原理就是以无限递归的形式不断创建新进程。尽管只有一行代码,在Bash执行后,如果没有其他限制,操作系统就会慢慢失去响应

图中,我们展示了三个终端,在左上的终端中,我们在虚拟机中创建了一个容器,然后执行 Fork 炸弹代码,下方的终端给出当前虚拟机的IP地址,右上的终端则在Fork炸弹执行几分钟后,尝试使用 SSH 远程登陆到虚拟机,可以发现,此时虚拟机已经失去响应了

在这里插入图片描述

由此,我们可以看出,在没有相关限制的情况下,容器内的Fork炸弹能够影响宿主机正常运行

存储资源耗尽

除了运行时的资源外,相对静态的存储资源也可能被耗尽。所有虚拟化的技术都必须依托实体,容器也不列外。归根结底,容器内存储的数据、文件的实际存储位置还是在实体机上。如果容器内新增加了一个1GB的文件,不考虑 NFS的情况下,那么宿主机上的磁盘理应会减少 1GB。如果容器没有存储空间限制,容器内的攻击者理论上能够耗尽宿主机的存储资源

首先,我们使用 df 命令 查看 一下宿主机可用的存储空间,执行如下的命令,可以看到可用空间还有60G

df -h | grep /dev/sda1

在这里插入图片描述

然后我们在容器内使用fallocate命令创建一个 5 GB 的文件

fallocate -l 5.0G ./bomb

然后我们通过两次df 命令的对比发现,创建后的可用空间比创建前少了 5.0GB

在这里插入图片描述

由此,我们可以推理出,在没有限制存储资源的情况下,我们在容器中大量使用磁盘的存储空间,可占用大量宿主机的磁盘存储空间,从而影响宿主机及其其他容器的运行

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/88879.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android自定义侧滑Item

源码地址&#xff1a;https://github.com/LanSeLianMa/CustomizeView/tree/master/cehuaitem 使用方式一&#xff1a;XML布局中直接使用 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com…

【Node.js】低代码平台源码

一、低代码简介 低代码管理系统是一种通过可视化界面和简化的开发工具&#xff0c;使非专业开发人员能够快速构建和管理应用程序的系统。它提供了一套预先定义的组件和模块&#xff0c;使用户可以通过拖放操作来设计应用程序的界面和逻辑。低代码管理系统还提供了自动化的工作…

STM32自带的DSP库的滤波初体验(一)

最近在弄STM32自带的DSP库里的滤波&#xff0c;记录一下&#xff1a; arm_fir_instance_q15 instance_q15_S; #define NUM_TAPS 16 //滤波系数的个数 #define BLOCK_SIZE 32 q15_t firStateF32[BLOCK_SIZE NUM_TAPS]; q15_t Fir_Coeff[NUM_TAPS] {-79, -136, 312, 6…

基于 SIFT 和 RANSAC 算法对高分辨率图像进行图像伪造检测(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

二叉树的存储结构(顺序存储)—— 数据结构与算法

&#x1f636;‍&#x1f32b;️Take your time ! &#x1f636;‍&#x1f32b;️ &#x1f4a5;个人主页&#xff1a;&#x1f525;&#x1f525;&#x1f525;大魔王&#x1f525;&#x1f525;&#x1f525; &#x1f4a5;代码仓库&#xff1a;&#x1f525;&#x1f525;魔…

从零开始学习 Java:简单易懂的入门指南之抽象类接口内部类(十一)

面向对象进阶&#xff08;抽象类&接口&内部类&#xff09; 第一章 抽象类1.1 概述1.1.1 抽象类引入 1.2 abstract使用格式1.2.1 抽象方法1.2.2 抽象类1.2.3 抽象类的使用 1.3 抽象类的特征1.4 抽象类的细节1.5 抽象类存在的意义 第二章 接口2.1 概述2.2 定义格式2.3 接…

机器学习 | Python实现KNN(K近邻)模型实践

机器学习 | Python实现KNN(K近邻)模型实践 目录 机器学习 | Python实现KNN(K近邻)模型实践基本介绍模型原理源码设计学习小结参考资料基本介绍 一句话就可以概括出KNN(K最近邻算法)的算法原理:综合k个“邻居”的标签值作为新样本的预测值。更具体来讲KNN分类过程,给定一个训…

第二十一章 重要HL7操作场景 - HL7批量消息

文章目录 第二十一章 重要HL7操作场景 - HL7批量消息支持的批处理格式处理传入的批次文档批处理模式自定义出库批量处理 第二十一章 重要HL7操作场景 - HL7批量消息 Production品支持 HL7 中的嵌套子文档&#xff08;批处理格式&#xff09;。每个子文档本身就是一个虚拟文档。…

【设计模式】MVC 模式

MVC 模式代表 Model-View-Controller&#xff08;模型-视图-控制器&#xff09; 模式。这种模式用于应用程序的分层开发。 Model&#xff08;模型&#xff09; - 模型代表一个存取数据的对象或 JAVA POJO。它也可以带有逻辑&#xff0c;在数据变化时更新控制器。View&#xff…

Python爬虫——requests_cookie登陆古诗文网

寻找登陆需要的参数 __VIEWSTATE:aiMG0UXAfCzak10C7436ZC/RXoZbM2lDlX1iU/4wjjdUNsW8QUs6W2/3M6XIKagQZrC7ooD8Upj8uCnpQMXjDAp6fS/NM2nGhnKO0KOSXfT3jGHhJAOBouMI3QnlpJCQKPXfVDJPYwh169MGLFC6trY __VIEWSTATEGENERATOR: C93BE1AE from: http://so.gushiwen.cn/user/collect.…

泰卦-地天卦

前言&#xff1a;否极泰来&#xff0c;但在易经里是泰卦在前&#xff0c;让我们分析下在否所期待否极后的泰卦是什么样的&#xff1f;本篇博客分析泰卦的卦辞和爻辞。 卦辞 小往大来&#xff0c;吉&#xff0c;亨。 篆曰&#xff1a;泰&#xff0c;小往大来&#xff0c;吉亨。…

面试热题(合并两个有序列表)

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 合并链表这类型题也是比较经典的题了&#xff0c;因为链表是由指针相互指向而确定位置&#xff0c;所以我们只需要改变某些节点的指针便可以做到对链表进行排序 今天这个方法…

C++小游戏贪吃蛇源码

graphics.h是针对DOS下的一个C语言图形库 (c也可以) 目前支持下载此头文件的常用的有两种: 1. EGE (Easy Graphics Engine)2. EasyX Graphics LibraryEGE, 全名Easy Graphics Engine, 是windows下的简易绘图库&#xff0c;是一个类似BGI(graphics.h)的面向C/C语言新手的图形库…

APP外包开发的iOS开发语言

学习iOS开发需要掌握Swift编程语言和相关的开发工具、框架和技术。而学习iOS开发需要时间和耐心&#xff0c;尤其是对于初学者。通过坚持不懈的努力&#xff0c;您可以逐步掌握iOS开发技能&#xff0c;构建出功能丰富、优质的移动应用。今天和大家分享学习iOS开发的一些建议方法…

掌握Python的X篇_32_使用python编辑pdf文件_pdfrw

本篇介绍利用python操作pdf文件&#xff0c;我们平时也会有合并和拆分pdf的需求&#xff0c;此时我们就可以使用本节内容。 文章目录 1. pdfrw的安装2. 切分pdf文件3. pdfrw官网及实现一版四面的实例 1. pdfrw的安装 pip install pdfrw官网地址&#xff1a;https://github.co…

机器学习深度学习——常见循环神经网络结构(RNN、LSTM、GRU)

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位即将上大四&#xff0c;正专攻机器学习的保研er &#x1f30c;上期文章&#xff1a;机器学习&&深度学习——RNN的从零开始实现与简洁实现 &#x1f4da;订阅专栏&#xff1a;机器学习&&深度学习 希望文章…

ETLCloud+MaxCompute实现云数据仓库的高效实时同步

MaxCompute介绍 MaxCompute是适用于数据分析场景的企业级SaaS&#xff08;Software as a Service&#xff09;模式云数据仓库&#xff0c;以Serverless架构提供快速、全托管的在线数据仓库服务&#xff0c;消除了传统数据平台在资源扩展性和弹性方面的限制&#xff0c;最小化用…

PyQt5的信号与槽函数

目录 一、介绍 二、一个信号连接一个槽 三、一个信号连接多个槽 四、多个信号连接一个槽 五、自定义信号 1、创建自定义信号 2、让自定义信号携带值 一、介绍 在下图中 &#xff08;1&#xff09;widget就是PyQt中的控件对象。其实就是组件&#xff08;2&#xff09;…

CNN之图像识别

文章目录 1. 图像识别1.1 模式识别1.2 图像识别的过程1.3 图像识别的应用 2. 深度学习发展2.1 深度学习为何崛起2.2 分类与检测2.3 常见的卷积神经网络 3. VGG3.1 VGG163.2 VGG16的结构&#xff1a;3.3 使用卷积层代替全连接3.4 1*1卷积的作用3.5 VGG16代码示例 4. 残差模型-Re…

MATLAB图论合集(一)基本操作基础

本帖总结一些经典的图论问题&#xff0c;通过MATLAB如何计算答案。近期在复习考研&#xff0c;以此来巩固一下相关知识——虽然考研肯定不能用MATLAB代码哈哈&#xff0c;不过在实际应用中解决问题还是很不错的&#xff0c;比C易上手得多~ 图论中的图&#xff08;Graph&#xf…