互联网架构演进与云原生
互联网架构演进与云原生¶
本章导读:本章梳理互联网系统架构的演进历程(单体 → 分层 → SOA → 微服务 → 云原生),详解负载均衡、反向代理、分布式系统、容器化(Docker/Kubernetes)等核心技术,以及云原生环境下的安全挑战。
架构演进历程¶
互联网应用架构经历了从单体到分布式、再到云原生的演进,每个阶段的安全关注点各不相同:
| 架构阶段 | 特点 | 部署方式 | 安全测试关注点 |
|---|---|---|---|
| 单体架构(Monolithic) | 所有功能在一个代码库,统一部署 | 单台服务器或虚拟机 | 单点故障、全量代码泄露风险大、权限集中 |
| 分层架构(Layered) | 表现层 → 业务层 → 数据层分离 | 多台服务器按层部署 | 层间通信安全、内部 API 未授权访问 |
| SOA(面向服务架构) | 服务通过 ESB(企业服务总线)通信,SOAP/XML 为主 | 服务集群 | ESB 单点瓶颈、XML 相关攻击(XXE)、服务发现安全 |
| 微服务架构(Microservices) | 服务拆分细粒度,独立部署,轻量通信(REST/gRPC/消息队列) | 容器化部署(Docker/K8s) | 服务间认证、API 网关安全、服务发现劫持、Sidecar 安全 |
| 云原生(Cloud Native) | 容器化、微服务、DevOps、持续交付,基于云平台(AWS/Azure/阿里云) | Kubernetes、Serverless | 容器逃逸、K8s 配置错误、IAM 权限过大、Serverless 冷启动攻击 |
架构演进的安全视角¶
-
单体到微服务:攻击面从单一入口分散到多个服务,每个服务都有独立的认证、授权、网络边界,东西向流量(服务间通信)成为新的安全重点
-
微服务到云原生:基础设施即代码(IaC)引入新的攻击面(Terraform、Helm Chart 配置错误),容器和编排平台成为攻击目标
核心中间件详解¶
消息队列(MQ, Message Queue)¶
-
实现异步通信和解耦,生产者发送消息到队列,消费者从队列消费消息
-
常见实现:
-
RabbitMQ:基于 AMQP 协议,支持多种消息模式(Direct、Topic、Fanout、Headers),Erlang 编写
-
Apache Kafka:高吞吐量分布式流处理平台,基于发布-订阅模式,持久化日志存储
-
RocketMQ:阿里开源,支持事务消息、顺序消息、延迟消息
-
ActiveMQ:老牌 JMS 实现,支持多种协议(AMQP、MQTT、STOMP、OpenWire)
-
安全测试关注点:
-
管理界面默认无认证(RabbitMQ 默认
guest/guest,仅本地访问;Kafka 无内置认证需配合 SASL/ACL) -
消息内容未加密,敏感信息在队列中明文存储
-
消息注入:向队列注入恶意消息,消费者处理时触发漏洞(如反序列化)
-
Kafka 历史漏洞:CVE-2021-44228(Log4j 影响 Kafka)、未授权访问导致数据泄露
搜索引擎(ES, Elasticsearch)¶
-
基于 Apache Lucene 的分布式搜索和分析引擎,支持近实时搜索、聚合分析、全文检索
-
默认端口:9200(HTTP REST API)、9300(节点间通信)
-
安全测试关注点:
-
历史版本默认无认证(Elasticsearch 5.x 及之前),大量实例暴露公网导致数据泄露
-
远程代码执行漏洞:CVE-2014-3120(脚本执行)、CVE-2015-1427(Groovy 沙箱绕过)、CVE-2019-7609(Kibana Timelion RCE)
-
通过
_searchAPI 的script_fields执行任意脚本 -
索引遍历:通过
/_cat/indices获取所有索引,通过/_search提取数据
日志监控(ELK Stack)¶
-
Elasticsearch:存储和搜索日志数据
-
Logstash:日志收集、过滤、转换(ETL),支持多种输入(Beats、Syslog、TCP/UDP)
-
Kibana:可视化界面,查询和分析日志
-
Beats:轻量数据采集器(Filebeat、Metricbeat、Packetbeat 等)
-
安全测试关注点:
-
Kibana 历史漏洞:CVE-2019-7609(Timelion RCE)、CVE-2021-22132(原型链污染)
-
Logstash 配置中的
exec过滤器可执行系统命令,配置不当导致命令注入 -
日志中可能包含敏感信息(密码、Token、PII),ELK 访问控制不当导致大规模数据泄露
缓存与 CDN¶
-
CDN(Content Delivery Network):通过边缘节点分发静态内容,加速访问、减轻源站压力。如 Cloudflare、Akamai、阿里云 CDN、腾讯云 CDN
-
反向代理缓存:Varnish、Squid、Nginx 缓存、Apache mod_cache
-
应用缓存:Redis、Memcached
-
安全测试关注点:
-
缓存投毒(Cache Poisoning):通过构造恶意请求(如带特殊 Header)使缓存服务器存储并分发恶意内容给其他用户。例如:
X-Forwarded-Host: evil.com导致缓存将恶意域名关联到正常页面 -
缓存欺骗(Cache Deception):诱导缓存服务器缓存本不应缓存的敏感页面(如
profile.php/nonexistent.css被当作 CSS 缓存) -
CDN 绕过:通过修改 Host 头、直接访问源站 IP(绕过 CDN WAF)进行攻击
-
Cloudflare 绕过:通过历史 DNS 记录、子域名、邮件服务器 IP 找到真实源站 IP
负载均衡与反向代理¶
负载均衡(Load Balancing)¶
-
将流量分发到多台后端服务器,提高可用性和性能
-
L4 负载均衡(传输层):基于 IP + 端口,不解析应用层内容。如 LVS(Linux Virtual Server)、HAProxy(TCP 模式)、AWS NLB
-
算法:轮询(Round Robin)、加权轮询、最少连接(Least Connections)、源地址哈希(IP Hash)
-
L7 负载均衡(应用层):基于 HTTP 内容(URL、Header、Cookie)分发。如 Nginx、HAProxy(HTTP 模式)、AWS ALB、F5 BIG-IP
-
能力:基于路径路由(
/api/*→ 后端 A,/static/*→ 后端 B)、基于 Host 路由(多域名)、SSL 终止、会话保持 -
安全测试关注点:
-
负载均衡后的真实 IP 获取:通过
X-Forwarded-For、X-Real-IP等头,攻击者伪造这些头可能导致 IP 黑名单绕过 -
会话保持(Sticky Session)基于 Cookie 时,Cookie 预测可导致会话固定攻击
-
负载均衡器本身漏洞:F5 BIG-IP CVE-2020-5902(远程代码执行,Traffic Management User Interface)、Nginx 历史漏洞
反向代理(Reverse Proxy)¶
-
位于客户端和后端服务器之间,代表后端服务器接收请求
-
功能:隐藏后端服务器、SSL 终止、缓存、压缩、请求重写、限流、WAF
-
常见实现:Nginx、Apache mod_proxy、Varnish、Squid、Envoy、Traefik
-
安全测试关注点:
-
反向代理绕过:通过构造特殊路径(如
/api/../admin)绕过代理规则访问受限资源 -
Host 头攻击:反向代理基于 Host 头路由,攻击者伪造 Host 头访问其他虚拟主机或触发缓存投毒
-
HTTP 请求走私:前端反向代理和后端服务器对请求边界解析不一致(Content-Length vs Transfer-Encoding),将两个请求走私为一个
健康检查与会话保持¶
-
健康检查:负载均衡器定期检测后端服务器状态,失败则摘除。方式:TCP 连接探测、HTTP 状态码探测(如
GET /health期望 200) -
会话保持:确保同一用户的请求始终路由到同一后端服务器。实现方式:
-
源 IP 哈希:基于客户端 IP 计算哈希
-
Cookie 插入:负载均衡器插入会话 Cookie(如
AWSELB) -
应用会话 Cookie:基于应用层 Cookie(如
JSESSIONID、PHPSESSID) -
安全测试关注点:健康检查端点(
/health、/status)可能暴露敏感信息(版本号、依赖库、内部状态);会话保持 Cookie 预测可导致会话劫持
分布式系统基础¶
CAP 定理¶
-
分布式系统无法同时满足一致性(Consistency)、可用性(Availability)、分区容错性(Partition Tolerance),最多同时满足两项
-
CP 系统:牺牲可用性保证一致性(如 ZooKeeper、etcd、HBase)
-
AP 系统:牺牲一致性保证可用性(如 Cassandra、DynamoDB、Eureka)
-
安全测试意义:CAP 权衡影响数据一致性验证,如缓存与数据库不一致可能导致业务逻辑漏洞(如库存超卖)
一致性模型¶
-
强一致性:任何读取都能读到最新写入(如传统关系型数据库)
-
最终一致性:数据在一段时间后达到一致,期间可能读取到旧值(如 DNS、大多数 NoSQL)
-
因果一致性:有因果关系的事件保持顺序
-
安全测试关注点:最终一致性窗口期内的数据不一致可导致竞态条件漏洞(如同时兑换优惠券、重复领取奖励)
分布式事务¶
-
2PC(Two-Phase Commit,两阶段提交):准备阶段 + 提交阶段,协调者(Coordinator)统一决策。缺点:同步阻塞、单点故障(协调者宕机)
-
3PC(Three-Phase Commit,三阶段提交):增加 CanCommit 阶段,减少阻塞时间,但实现复杂
-
TCC(Try-Confirm-Cancel):业务层补偿事务,Try 预留资源,Confirm 确认执行,Cancel 释放资源
-
Saga 模式:长事务拆分为本地事务序列,失败时执行补偿操作
-
BASE 理论:基本可用(Basically Available)、软状态(Soft state)、最终一致(Eventually consistent)
-
安全测试关注点:分布式事务的补偿逻辑可能存在漏洞(如补偿未执行导致资金重复扣款);消息队列的事务消息状态不一致可导致业务漏洞
云原生安全测试关联点¶
容器安全¶
-
容器安全:
-
容器逃逸(Container Escape):从容器内部突破到宿主机。途径:
-
特权容器(
--privileged):拥有宿主机 root 权限,可直接访问宿主机设备 -
危险挂载:将宿主机
/、/proc、/sys、/var/run/docker.sock挂载到容器内 -
内核漏洞:容器与宿主机共享内核,内核漏洞(如 CVE-2016-5195 Dirty COW、CVE-2022-0847 Dirty Pipe)可导致逃逸
-
runc 漏洞:CVE-2019-5736(runc 容器逃逸,通过覆盖
/proc/self/exe)
-
-
镜像安全:基础镜像包含漏洞(如旧版 OpenSSL、Bash)、镜像中硬编码密钥、恶意镜像(Docker Hub 上的 typosquatting 镜像)
-
工具:Trivy(镜像漏洞扫描)、Clair、Anchore、Sysdig Falco(运行时安全监控)
Kubernetes 安全¶
-
Kubernetes 安全:
-
K8s 架构:Master(API Server、etcd、Scheduler、Controller Manager)+ Node(Kubelet、Kube-Proxy、Container Runtime)
-
API Server 未授权访问:默认端口 6443/8080,历史版本 8080 端口无认证(
--insecure-bind-address=0.0.0.0),可直接操作集群 -
etcd 未授权访问:默认端口 2379,存储所有 K8s 配置和 Secret,无认证可读取所有数据
-
Kubelet 未授权访问:默认端口 10250,可执行容器命令(
exec)、读取日志(logs)、访问 metrics -
Pod 安全策略:特权容器、HostPID、HostNetwork、危险 Volume 挂载可导致逃逸
-
Service Account Token:Pod 默认挂载的 Token 位于
/var/run/secrets/kubernetes.io/serviceaccount/token,若 Pod 被攻破可窃取 Token 操作 API Server -
历史 CVE:CVE-2018-1002105(API Server 权限提升)、CVE-2019-11246(kubectl cp 目录遍历)、CVE-2020-8554(中间人攻击,LoadBalancer 服务 IP 劫持)、CVE-2022-0185(Linux 内核容器逃逸)
-
工具:kube-hunter(K8s 漏洞扫描)、kube-bench(CIS 基准检查)
微服务攻击面¶
-
微服务攻击面:
-
服务间认证缺失:微服务默认互相信任,攻击者进入内网后可横向移动,访问任意服务
-
服务发现劫持:篡改服务注册中心(Consul、Eureka、Nacos)的注册信息,将流量导向恶意服务
-
Sidecar 代理安全:Istio/Envoy Sidecar 配置错误可导致流量劫持、未授权访问 #### API 网关安全
-
API 网关安全:网关作为统一入口,若存在漏洞(如 Nginx、Kong、Spring Cloud Gateway 漏洞)可导致整个集群暴露
-
配置中心安全:Apollo、Nacos、Spring Cloud Config 未授权访问可导致配置泄露、配置篡改(如修改数据库连接串指向恶意数据库)
-
API 网关安全:
-
API 网关功能:路由、认证、限流、熔断、日志、协议转换
-
常见实现:Kong、Nginx、Envoy、Spring Cloud Gateway、AWS API Gateway、阿里云 API 网关
-
安全测试关注点:
-
网关绕过:通过直接访问后端服务地址绕过网关的认证和限流
-
路由规则冲突:特殊路径构造绕过安全策略(如
/api/v1/../admin) -
密钥泄露:API 网关的 Admin API 密钥硬编码在配置中或泄露在日志中
-
历史漏洞:Spring Cloud Gateway CVE-2022-22947(SpEL 表达式注入,远程代码执行)
-
Serverless 安全¶
-
Serverless 安全:
-
函数即服务(FaaS),如 AWS Lambda、阿里云函数计算、腾讯云 SCF
-
安全测试关注点:
-
冷启动攻击:利用函数首次执行的延迟进行侧信道攻击
-
函数权限过大:IAM 角色授予函数过多权限(如
s3:*、ec2:*),函数被攻破后横向移动 -
依赖漏洞:函数引用的第三方库存在漏洞(如 Log4j)
-
环境变量泄露:函数配置中的敏感信息通过错误页面或日志泄露
-
持久化困难:Serverless 无状态,攻击者需利用外部存储(S3、数据库)维持访问
-
DevSecOps 与 IaC 安全¶
-
DevSecOps 与 IaC 安全:
-
基础设施即代码(IaC):Terraform、CloudFormation、Ansible、Helm 定义基础设施
-
安全测试关注点:
-
Terraform 状态文件(
terraform.tfstate)包含明文密码和密钥,泄露可导致基础设施被接管 -
Helm Chart 配置错误:特权容器、无资源限制、敏感信息硬编码
-
CI/CD 管道安全:Jenkins、GitLab CI、GitHub Actions 的配置泄露、构建环境污染、供应链攻击
-
容器镜像供应链:基础镜像被植入后门、依赖库被篡改(如 npm event-stream 事件)
-