声明
学习视频来自B站UP主 泷羽sec,如涉及侵泷羽sec权马上删除文章。
笔记只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负
这节课旨在扩大自己在网络安全方面的知识面,了解网络安全领域的见闻,了解学习哪些知识对于我们渗透测试有帮助,避免盲目地学习降低效率。
B站超链接:黑客云技术基础之(网恋避险)_哔哩哔哩_bilibili
云架构介绍
无论是防御还是进攻,强大的底层技术基础都是必要的
从防御的角度,了解底层技术才能知道如何构建防御体系
从进攻的角度,了解底层技术才能发现漏洞并且开发漏洞利用
攻击者和防御者都必须了解对方的运作方式
云技术历史
从前构建系统需要购买设备,租用数据中心机柜,搭建基础设施
处理器进化,虚拟机将一台机器的资源分成多台机器
提高资源利用率,灵活可拓展,从裸机基础设施到虚拟化基础设施
容器化进一步提高效率,实现服务器,网络和存储的虚拟交付
最新一代的基础设施我们称为"云",它不是单一的技术,而是技术的集合。
云服务
云是一种IT基础设施系统,它将资源的创建抽象在软件层面。
云基础架构必须稳定且无频繁中断
地理分布的云基础设施提高容错能力
云必须能够快速扩展以满足需求
公有云服务商
Amazon web services(AWS)
Azure
google(GCP)
华为云,腾讯云,阿里云....
组织可以使用openStack等工具在自己的数据中心搭建私有云。或者部分业务运行在
私有云中,部分运行在公有云中
云分类
基础设施及服务(laas)
IaaS 是云计算服务模式的最底层,它提供了基本的计算资源,如服务器、存储设备、网络设备等,以虚拟机或裸金属服务器的形式出租给用户。用户可以像使用自己的数据中心资源一样,在这些基础设施上安装操作系统、部署应用程序、配置网络等。
平台及服务(PAAS)
PaaS 在 Iaas 的基础上,提供了一个完整的应用程序开发和运行平台。它包括操作系统、编程语言运行环境、数据库管理系统、中间件等,让开发者能够专注于应用程序的开发,而无需关心底层的基础设施。
软件及服务(SaaS)
定义 : SaaS 是一种通过互联网提供软件应用服务的模式,用户无需在本地安装软件,而是通过浏览器或专用客户端访问云端的软件应用。软件的维护、升级、数据存储等工作都由 Saas 提供商负责。
云架构
虚拟化
将一台机器的资源分成多台虚拟机器,多台裸机汇集形成的资源集群隔离资源的使用,灵活且可扩展资源池,抽象了硬件安装过程,但仍有改进空间(并非为云而生)
- 技术栈的灵活性和可定制性提升,导致容器出现
- 容器允许开发 人员与堆栈各部分进行灵活交互,实现按需生成服务和网络抽象程度不断提高,方便应用迁移扩展,更加高效使用资源
云架构设计
组件选择
- 确定架构(难改),选择绑定/非绑定组件(开发、开源、购买)
- 云原生组件:为分布式系统设计,CNCF认证(非必须)、安全编码、开源(部分)
- laC:引导介质(Packer)、安装系统(Terrafomm)、自动配置(Ansible)、 状态强制(Monit)
集成部署
- 使用持续集成和持续交付(CICD)管道来构建环境
包括测试、测量和扫描代码更改的自动化测试和部署(GitOps)
弹性可靠
任何单点故障都有故障转移或其他机制,使业务可以持续提供(冗余)
GSLB(智能DNS、GTM)解决客户单访问的单点故障隐患
平衡控制
控制保护系统免受漏洞的内部攻击组件,应平衡控制和可用性
云设计模式
云架构设计不必从头开始,使用已检验的设计模式是最佳选择
微服务框架
- 松散耦合、模块化服务而设计,微服务协同工作以完成整体服务每个服务都可以独立修改代码和重用,提高系统整体弹性和容错
大多数云利用微服务架构,云原生应用被构建充当微服务,便于水平扩展安全优势:
每个微服务应用强化、隔离,单一服务漏洞对整体系统影响小缺点:调试更加复杂,需要跨不同服务跟踪事务:性能短板
零信任架构
对资源的每个请求都需要验证来源已授权,然后授权短期访问(令牌)实现ZTA的一种常见方法是Open ID Connect(OIDC)联盟访问
授权处于活动状态时可以访问任何联合内服务
密码重置是针对ZTA的常见攻击方式
安全控制
网络控制
传统架构使用防火墙实现网络控制,云环境网络抽象为SDN、SD WANSDN对不同的接口(如API或GUI) 设置网络规则
通过mTLS不仅流量加密,也对客户端进行身份验证,拥有证书才能访问微服务访问控制
不正确的访问管理可导致权限提升,甚至破坏整个基础设施
现代访问管理系统多使用令牌进行访问控制,提供对服务的短时访问权
JWT通常用于访问云端资源,伪造和破解密码是常见攻击手段
另一种类型的权限控制机制是强制访问控制MAC
身份管理
企业通常使用AD、LDAP进行身份管理
AWS IAM是身份和访问管理(IAM)的公共云服务
Google联盟认证OIDC经常用于2FA
- 云身份提供者(ldP)作为真实身份来源,是更安全的解决方案(Azure AD)
容器与云
虚拟化中每个VM需要运行自己的操作系统,显着增加了总体开销
容器化是一种更加现代的架构,容器共享内核与硬件,更快、更小、更高效
容器远没有虚拟化强大,因此容器是对虚拟化的补充,而非取代
容器的系统开销更小(可忽略),因此可以进一 步分离应用组件,例如搜索、登录、查询、订单功能分开
容器使用映像作为模板生成。映像相当于计算机硬盘
容器使用不同发行版文件加载内核,运行容器
Docker
安装docker
sudo apt-get upadte
sudo apt-get install docker.io

如遇问题可尝试清理APT缓存,并再次更新软件源列表
sudo apt-get clean
sudo apt-get update
检查是否安装成功
docker -v

启动docker
sudo service docker start

是否正常启动
启动成功后,没有错误信息输出
可以使用sudo docker ps 来验证docker是否正常启动

docker配置中国镜像源
vim /etc/docker/daemon.json
换源
{
"registry-mirrors": [
"https://5tqw56kt.mirror.aliyuncs.com",
"https://docker.hpcloud.cloud",
"https://docker.m.daocloud.io",
"https://docker.1panel.live",
"http://mirrors.ustc.edu.cn",
"https://docker.chenby.cn",
"https://docker.ckyl.me",
"http://mirror.azure.cn",
"https://hub.rat.dev"
]
}
重启docker服务
sudo service docker restart
docker安装centos7
拉取centos7的官方docker镜像
sudo docker pull centos:7

运行一个基于centos7镜像的容器
sudo docker run -it --name my_centos7 centos:7 /bin/bash
sudo docker run -d --name my_centos7 centos:7 /bin/bash
两个命令都会创建,exit退出后依然存在,可使用docker ps -a查看
-it 选项允许你交互式的运行容器,会占用终端。或者-d选项(Detached,分离模式),容器就会在后台启动运行,不会占用终端。
--name my_centos7 给容器命名为my_centos7.
centos7:指定使用的镜像
/bin/bash 启动容器后执行的命令,这里启动了bash让你能与容器交互
现在就是进入centos7中而非之前的服务器
exit会退出容器

容器与云
创建apache容器后台运行
docker container run -d --rm -p 8080:80 heepd
- 第一次运行镜像的容器时都会有unable这很常见,因为本来没有,所以需要docker去网上pull
- 使用curl命令检查搭建是否成功
curl localhost:8080
存在回显,有标签,搭建成功

Docker常用命令
查看所有正在运行的容器
docker container ls

查看所有已经创建的容器
docker ps -a

查看特定容器的进程信息
docker top <container_name_or_id>

登录后台运行的容器
docker exec -it (root@之后的***) /bin/bash
例: a2.......

使用设置的参数name也可以,例:docker exec -it my_centos7 /bin/bash

停止容器
docker container stop (root@***)

挂载宿主机目录
docker container run -d --rm -p 8080:80 -v /home/user/webroot/:/usr/local/apache2/htdocs/ httpd
-d
表示以"分离(detached)"模式运行容器
-rm
设置容器在退出时自动删除
-p 8080:80
进行端口映射
-v /home/user/webroot/:/usr/local/apache2/htdocs/
进行目录挂载
httpd
指定要运行的容器所基于的镜像名称
侦听宿主机80端口
docker container run -d --rm --network host -v
/home/user/webroot/:/usr/local/apache2/htdocs/ httpd
--network host 参数
将容器的网络模式设置为 "host" 模式。
Podman
Podman 是 Docker 的替代产品,无守护进程。
- "sudo podman run -d --r-m --network host httpd":运行容器。
- "podman pod create --name wha":创建空 pod。
- "podman run -d --pod wha httpd":在 pod 中运行容器。
- "podman run -pod wha -it alpine/curl /bin/asho":在 pod 中运行可找东西的工具并互动。
大部分容器化过程都采用开放容器计划(OCI)标准,所以 Podman 和 Docker 可互操作。
容器的真相
Linux 没有单一被称为"容器"的特性。实际上,"容器"是阻止进程访问其他进程和资源的特性组合,发生在内核级别,可以控制其限制级别。
容器的历史:
- 197x 年代引入 chroot,可以指示进程的新根目录,但不完美。命名空间可实现每个进程分离网络、进程和其他命名空间。
- 1999 年 FreeBSD 发布 Jails,在 chroot 之上提供更多限制(Linux 不支持)。
- 2002 年引入命名空间,分离内核资源。
- 2006 年谷歌引入进程容器,后被称为 cgroup,可限制特定进程的内存和 CPU 资源。结合 cgroup 和命名空间发布了 Linux 容器(LXC)项目。
Linux 中有八种用户命名空间:挂载、进程 ID、网络、进程间通信、UTS、用户 ID、控制组、时间、syslog。
Capabilities
Docker 默认不使用用户命名空间。为防止特权内核调用,它使用内核 capabilities 和 seccomp 配置文件限制访问。
Linux 有特权或非特权进程。非特权进程有正确权限可写入系统文件,特权进程几乎无所不能。当非特权用户只需要特殊权限时,可使用 Capabilities。Linux 将一些系统级任务分组为 40 多个类别,称为 Capabilities。
Kubernetes(k8s)
定义:Kubernetes,通常简称为 K8s,是一个开源的容器编排平台。它可以自动化部署、 扩展和管理容器化应用程序。Kubernetes 能够在多个服务器上高效地运行容器,确保 应用的高可用性和可扩展性。
核心概念
Pod:Pod 是 Kubernetes 中最小的可部署单元,它可以包含一个或多个容器。这些容器共享 网络命名空间和存储卷,并且被一起调度和管理。
Deployment:Deployment 用于管理 Pod 的副本数量和更新策略。它可以确保应用始终保持指定数 量的副本在运行,并且可以实现滚动更新等功能。
Service:Service 定义了一组 Pod 的访问方式。它提供了一个稳定的 IP 地址和端口,使得外部 可以通过这个地址访问到一组 Pod。
Node:Node 是 Kubernetes 中的工作节点,它可以是物理服务器或虚拟机。每个 Node 上运 行着 Kubelet 和容器运行时,负责管理容器的生命周期。
安装Minikube
下载Minikube二进制文件
可以从 Minikube 官方网站下载适合你系统架构的版本。例如,对于 64 位的 Linux 系统,使用以下命令下载
curl -LO
https://storage.googleapis.com/minikube/releases/latest/minikubelinux-amd64
使下载的二进制文件可执行
chmod +x minikube-linux-amd64
将可执行文件移动到 PATH 中的目录(例如 /usr/local/bin ),以便在任何
位置都能方便地使用
sudo mv minikube-linux-amd64 /usr/local/bin/minikube
启动Minikube
minikube start
验证是否成功
minikube status
部署到kubernetes
安装kubectl
curl -LO "https://dl.k8s.io/release/$(curl -L -s
https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
使二进制文件可执行
chmod += kubectl
将 kubectl 移动到 PATH 中的目录(例如 /usr/local/bin )
sudo mv kubectl /usr/local/bin/
创建一个 Deployment:"kubectl create deployment nginx --image=nginx",部署 Nginx 服务器。
查看 Deployment:"kubectl get deployments"。
创建一个 Service:"kubectl expose deployment nginx --port=80 --type=NodePort",让外部访问 Nginx 服务器。
查看 Service:"kubectl get services"。
访问应用
在 Service 信息中找到 NodePort 的端口号,使用":"在浏览器中访问 Nginx 服务器。
扩展应用
扩展 Deployment 的副本数量
kubectl scale deployment nginx --replicas=3
查看副本数量
kubectl get deployments
更新应用
更新Deployment
kubectl set image deployment/nginx nginx=new-image:version
查看更新进度
kubectl set image deployment/nginx nginx=new-image:version
Git
定义
Git 是一个分布式版本控制系统,用于跟踪文件的变化,方便团队协作开发软件项 目。它可以记录文件的历史版本,允许开发者在不同版本之间切换,并且可以合并多 个开发者的修改。
安装
在不同操作系统上的安装方法
Windows:可以从 Git 官方网站下载安装程序进行安装。
macOS:可以使用 Homebrew 等包管理器安装 Git。
Linux:可以通过系统的包管理器安装 Git
Git的安全措施
1.保护 Git 仓库很重要,因为它通常包含项目的源代码和敏感信息。
-
使用强密码,为 Git 远程仓库设置强密码,避免简单或常用密码。
-
限制访问权限,只授予必要人员访问权限,可使用 Git 提供的权限管理功能或第三方工具。
-
避免提交敏感信息,若不小心提交,可使用"git rm --cached "从暂存区删除,然后"git commit --amend"修改上一次提交。创建".gitignore"文件,列出不需要被跟踪的文件和目录。
-
确保与 Git 远程仓库的通信是加密的,可以使用 SSH 或 HTTPS 协议进行通信。
6.定期进行安全审计,检查 Git 仓库的安全性,包括权限设置、敏感信息泄露等,可使用第三方工具。
7.定期备份 Git 仓库,防止数据丢失,可以使用 Git 的备份工具或复制到其他存储设备中。
8.克隆仓库:"git clone "。
9.处理冲突:当多个开发者同时修改同一个文件时,可能会出现冲突,在合并分支时需要手动解决冲突,然后提交更改。
10.创建分支:"git branch "。
11.切换分支:"git checkout "。
12.合并分支:在一个分支上完成工作后,可将其合并到另一个分支。先切换到目标分支,然后使用"git merge "命令进行合并。
13.初始化仓库:"git init"。
14.添加文件:"git add "或"git add."。
15.提交更改:"git commit -m "提交说明""。
16.查看状态:"git status"。
17.查看历史记录:"git log"。