跳转至

互联网架构演进与云原生

互联网架构演进与云原生

本章导读:本章梳理互联网系统架构的演进历程(单体 → 分层 → 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)

  • 通过 _search API 的 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-ForX-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(如 JSESSIONIDPHPSESSID

  • 安全测试关注点:健康检查端点(/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 事件)