# AWS - Firewall Manager Enum

{{#include ../../../../banners/hacktricks-training.md}}

## Firewall Manager

**AWS Firewall Manager** は、**AWS WAF、AWS Shield Advanced、Amazon VPC セキュリティグループおよびネットワークアクセス制御リスト (ACL)、AWS Network Firewall、AWS Route 53 Resolver DNS Firewall、サードパーティファイアウォール** の管理とメンテナンスを簡素化します。これにより、ファイアウォールルール、Shield Advanced 保護、VPC セキュリティグループ、および Network Firewall 設定を一度だけ構成でき、サービスが**これらのルールと保護をアカウントやリソース全体に自動的に適用**します。新しく追加されたリソースも含まれます。

このサービスは、**特定のリソースをグループ化して保護する**機能を提供します。たとえば、共通のタグを共有するリソースや、すべての CloudFront ディストリビューションなどです。Firewall Manager の大きな利点は、**新しく追加されたリソースに自動的に保護を拡張できる**ことです。

**ルールグループ**（WAF ルールのコレクション）は、AWS Firewall Manager ポリシーに組み込むことができ、特定の AWS リソース（CloudFront ディストリビューションやアプリケーションロードバランサーなど）にリンクされます。

AWS Firewall Manager は、セキュリティグループポリシーの構成と管理を簡素化するために、**管理されたアプリケーションおよびプロトコルリスト**を提供します。これらのリストを使用して、ポリシーによって許可または拒否されるプロトコルとアプリケーションを定義できます。管理されたリストには2種類があります：

- **Firewall Manager 管理リスト**：これらのリストには、**FMS-Default-Public-Access-Apps-Allowed**、**FMS-Default-Protocols-Allowed**、および **FMS-Default-Protocols-Allowed** が含まれます。これらは Firewall Manager によって管理され、一般の人々に許可または拒否されるべき一般的に使用されるアプリケーションとプロトコルが含まれています。これらを編集または削除することはできませんが、バージョンを選択することはできます。
- **カスタム管理リスト**：これらのリストは自分で管理します。組織のニーズに合わせたカスタムアプリケーションおよびプロトコルリストを作成できます。Firewall Manager 管理リストとは異なり、これらのリストにはバージョンがありませんが、カスタムリストに対して完全な制御があり、必要に応じて作成、編集、削除できます。

**Firewall Manager ポリシーは、ルールグループに対して「ブロック」または「カウント」アクションのみを許可**し、「許可」オプションはありません。

### 前提条件

Firewall Manager を構成して組織のリソースを効果的に保護するために、次の前提条件を完了する必要があります。これらのステップは、Firewall Manager がセキュリティポリシーを適用し、AWS 環境全体でコンプライアンスを確保するために必要な基盤設定を提供します：

1. **AWS Organizations に参加し、設定する**：AWS アカウントが、AWS Firewall Manager ポリシーが実装される予定の AWS Organizations 組織の一部であることを確認します。これにより、組織内の複数の AWS アカウントにわたるリソースとポリシーの集中管理が可能になります。
2. **AWS Firewall Manager デフォルト管理者アカウントを作成する**：Firewall Manager セキュリティポリシーを管理するためのデフォルト管理者アカウントを作成します。このアカウントは、組織全体でセキュリティポリシーを構成および適用する責任を負います。組織の管理アカウントのみが Firewall Manager デフォルト管理者アカウントを作成できます。
3. **AWS Config を有効にする**：AWS Config を有効にして、Firewall Manager にセキュリティポリシーを効果的に適用するために必要な構成データと洞察を提供します。AWS Config は、リソースの構成と変更を分析、監査、監視し、より良いセキュリティ管理を促進します。
4. **サードパーティポリシーについては、AWS Marketplace でサブスクリプションし、サードパーティ設定を構成する**：サードパーティファイアウォールポリシーを利用する予定がある場合は、AWS Marketplace でそれらにサブスクリプションし、必要な設定を構成します。このステップにより、Firewall Manager が信頼できるサードパーティベンダーのポリシーを統合し、適用できるようになります。
5. **Network Firewall および DNS Firewall ポリシーについては、リソース共有を有効にする**：Network Firewall および DNS Firewall ポリシー専用のリソース共有を有効にします。これにより、Firewall Manager が組織の VPC および DNS 解決にファイアウォール保護を適用でき、ネットワークセキュリティが向上します。
6. **デフォルトで無効になっているリージョンで AWS Firewall Manager を使用するには**：デフォルトで無効になっている AWS リージョンで Firewall Manager を使用する予定がある場合は、それらのリージョンでの機能を有効にするために必要な手順を実行してください。これにより、組織が運営するすべてのリージョンで一貫したセキュリティの適用が確保されます。

詳細については、次を確認してください: [Getting started with AWS Firewall Manager AWS WAF policies](https://docs.aws.amazon.com/waf/latest/developerguide/getting-started-fms.html)。

### 保護ポリシーの種類

AWS Firewall Manager は、組織のインフラストラクチャのさまざまな側面にわたってセキュリティコントロールを適用するために、いくつかの種類のポリシーを管理します：

1. **AWS WAF ポリシー**：このポリシータイプは、AWS WAF と AWS WAF Classic の両方をサポートします。ポリシーによって保護されるリソースを定義できます。AWS WAF ポリシーの場合、Web ACL 内で最初と最後に実行するルールグループのセットを指定できます。さらに、アカウント所有者は、これらのセットの間で実行するルールとルールグループを追加できます。
2. **Shield Advanced ポリシー**：このポリシーは、指定されたリソースタイプに対して組織全体で Shield Advanced 保護を適用します。DDoS 攻撃やその他の脅威から保護するのに役立ちます。
3. **Amazon VPC セキュリティグループポリシー**：このポリシーを使用すると、組織全体で使用されるセキュリティグループを管理し、AWS 環境全体でネットワークアクセスを制御するための基本的なルールセットを適用できます。
4. **Amazon VPC ネットワークアクセス制御リスト (ACL) ポリシー**：このポリシータイプは、組織で使用されるネットワーク ACL を制御できるようにし、AWS 環境全体で基本的なネットワーク ACL を適用できます。
5. **Network Firewall ポリシー**：このポリシーは、組織の VPC に AWS Network Firewall 保護を適用し、事前定義されたルールに基づいてトラフィックをフィルタリングすることでネットワークセキュリティを強化します。
6. **Amazon Route 53 Resolver DNS Firewall ポリシー**：このポリシーは、組織の VPC に DNS Firewall 保護を適用し、悪意のあるドメイン解決試行をブロックし、DNS トラフィックのセキュリティポリシーを適用するのに役立ちます。
7. **サードパーティファイアウォールポリシー**：このポリシータイプは、AWS Marketplace コンソールを通じてサブスクリプション可能なサードパーティファイアウォールからの保護を適用します。信頼できるベンダーからの追加のセキュリティ対策を AWS 環境に統合できます。
1. **Palo Alto Networks Cloud NGFW ポリシー**：このポリシーは、Palo Alto Networks Cloud Next Generation Firewall (NGFW) の保護とルールスタックを組織の VPC に適用し、高度な脅威防止とアプリケーションレベルのセキュリティコントロールを提供します。
2. **Fortigate Cloud Native Firewall (CNF) as a Service ポリシー**：このポリシーは、Fortigate Cloud Native Firewall (CNF) as a Service の保護を適用し、クラウドインフラストラクチャ向けに業界最高の脅威防止、Web アプリケーションファイアウォール (WAF)、および API 保護を提供します。

### 管理者アカウント

AWS Firewall Manager は、管理スコープと2種類の管理者アカウントを通じて、組織内のファイアウォールリソースの管理に柔軟性を提供します。

**管理スコープは、Firewall Manager 管理者が管理できるリソースを定義します**。AWS Organizations の管理アカウントが組織を Firewall Manager にオンボードすると、異なる管理スコープを持つ追加の管理者を作成できます。これらのスコープには、次のものが含まれます：

- 管理者がポリシーを適用できるアカウントまたは組織単位 (OU)。
- 管理者がアクションを実行できるリージョン。
- 管理者が管理できる Firewall Manager ポリシータイプ。

管理スコープは、**フルまたは制限付き**のいずれかです。フルスコープは、管理者に**すべての指定されたリソースタイプ、リージョン、およびポリシータイプ**へのアクセスを付与します。一方、**制限付きスコープは、リソース、リージョン、またはポリシータイプのサブセットに対してのみ管理権限を提供します**。管理者には、役割を効果的に果たすために必要な権限のみを付与することが推奨されます。これらの管理スコープ条件の任意の組み合わせを管理者に適用し、最小権限の原則を遵守できます。

管理者アカウントには、特定の役割と責任を果たすための2つの異なるタイプがあります：

- **デフォルト管理者**：
- デフォルト管理者アカウントは、AWS Organizations 組織の管理アカウントによって Firewall Manager へのオンボーディングプロセス中に作成されます。
- このアカウントは、サードパーティファイアウォールを管理する能力を持ち、完全な管理スコープを持っています。
- 組織全体でセキュリティポリシーを構成および適用する責任を負う、Firewall Manager の主要な管理者アカウントとして機能します。
- デフォルト管理者は、すべてのリソースタイプおよび管理機能に完全にアクセスできますが、組織内で複数の管理者が利用されている場合、他の管理者と同じピアレベルで操作します。
- **Firewall Manager 管理者**：
- これらの管理者は、AWS Organizations 管理アカウントによって定義された管理スコープに従って、リソースを管理できます。
- Firewall Manager 管理者は、組織内で特定の役割を果たすために作成され、責任の委任を可能にしながら、セキュリティとコンプライアンス基準を維持します。
- 作成時に、Firewall Manager は AWS Organizations に確認して、アカウントがすでに委任された管理者であるかどうかを判断します。そうでない場合、Firewall Manager は Organizations に呼び出して、アカウントを Firewall Manager の委任された管理者として指定します。

これらの管理者アカウントの管理には、Firewall Manager 内での作成と、組織のセキュリティ要件および最小権限の原則に従った管理スコープの定義が含まれます。適切な管理役割を割り当てることで、組織は効果的なセキュリティ管理を確保し、機密リソースへのアクセスを細かく制御できます。

**組織内で Firewall Manager デフォルト管理者として機能できるのは、1つのアカウントのみであることを強調することが重要です**。これは「**最初に入った者が最後に出る**」という原則に従います。新しいデフォルト管理者を指定するには、一連の手順を実行する必要があります：

- まず、各 Firewall Administrator 管理者アカウントは、自分のアカウントを取り消す必要があります。
- 次に、既存のデフォルト管理者は、自分のアカウントを取り消すことができ、これにより組織が Firewall Manager からオフボードされます。このプロセスにより、取り消されたアカウントによって作成されたすべての Firewall Manager ポリシーが削除されます。
- 最後に、AWS Organizations 管理アカウントが Firewall Manager デフォルト管理者を指定する必要があります。

## Enumeration
```
# Users/Administrators

## Get the AWS Organizations account that is associated with AWS Firewall Manager as the AWS Firewall Manager default administrator
aws fms get-admin-account

## List of Firewall Manager administrators within the organization
aws fms list-admin-accounts-for-organization # ReadOnlyAccess policy is not enough for this

## Return a list of the member accounts in the FM administrator's AWS organization
aws fms list-member-accounts # Only a Firewall Manager administrator or the Organization's management account can make this request

## List the accounts that are managing the specified AWS Organizations member account
aws fms list-admins-managing-account # ReadOnlyAccess policy is not enough for this

# Resources

## Get the resources that a Firewall Manager administrator can manage
aws fms get-admin-scope --admin-account <value> # ReadOnlyAccess policy is not enough for this

## Returns the summary of the resource sets used
aws fms list-resource-sets # ReadOnlyAccess policy is not enough for this

## Get information about a specific resource set
aws fms get-resource-set --identifier <value>  # ReadOnlyAccess policy is not enough for this

## Retrieve the list of tags for a given resource
aws fms list-tags-for-resource --resource-arn <value>

## List of the resources in the AWS Organization's accounts that are available to be associated with a FM resource set. Only one account is supported per request.
aws fms list-compliance-status --member-account-ids <value> --resource-type <value> # ReadOnlyAccess policy is not enough for this

## List the resources that are currently associated to a resource set
aws fms list-resource-set-resources --identifier <value> # ReadOnlyAccess policy is not enough for this

# Policies

## Returns the list of policies
aws fms list-policies

## Get information about the specified AWS Firewall Manager policy
aws fms get-policy --policy-id <value>

## List all of the third-party firewall policies that are associated with the third-party firewall administrator's account
aws fms list-third-party-firewall-firewall-policies --third-party-firewall <PALO_ALTO_NETWORKS_CLOUD_NGFW|FORTIGATE_CLOUD_NATIVE_FIREWALL> # ReadOnlyAccess policy is not enough for this

# AppsList

## Return a list of apps list
aws fms list-apps-lists --max-results [1-100]

## Get information about the specified AWS Firewall Manager applications list
aws fms get-apps-list --list-id <value>

# Protocols

## Get the details of the Firewall Manager protocols list.
aws fms list-protocols-lists

## Get information about the specified AWS Firewall Manager Protocols list
aws fms get-protocols-list --list-id <value>

# Compliance

## Return a summary of which member accounts are protected by the specified policy
aws fms list-compliance-status --policy-id <policy-id>

## Get detailed compliance information about the specified member account (resources that are in and out of compliance with the specified policy)
aws fms get-compliance-detail --policy-id <value> --member-account <value>

# Other useful info

## Get information about the SNS topic that is used to record AWS Firewall Manager SNS logs (if any)
aws fms get-notification-channel

## Get policy-level attack summary information in the event of a potential DDoS attack
aws fms get-protection-status --policy-id <value> # Just for Shield Advanced policy

## Get the onboarding status of a Firewall Manager admin account to third-party firewall vendor tenant.
aws fms get-third-party-firewall-association-status --third-party-firewall <PALO_ALTO_NETWORKS_CLOUD_NGFW|FORTIGATE_CLOUD_NATIVE_FIREWALL> # ReadOnlyAccess policy is not enough for this

## Get violations' details for a resource based on the specified AWS Firewall Manager policy and AWS account.
aws fms get-violation-details --policy-id <value> --member-account <value> --resource-id <value> --resource-type <value>
```
## ポストエクスプロイテーション / バイパス検出

### `organizations:DescribeOrganization` & (`fms:AssociateAdminAccount`, `fms:DisassociateAdminAccount`, `fms:PutAdminAccount`)

**`fms:AssociateAdminAccount`** 権限を持つ攻撃者は、Firewall Manager のデフォルト管理者アカウントを設定することができます。**`fms:PutAdminAccount`** 権限を持つ攻撃者は、Firewall Manager 管理者アカウントを作成または更新することができ、**`fms:DisassociateAdminAccount`** 権限を持つ潜在的な攻撃者は、現在の Firewall Manager 管理者アカウントの関連付けを削除することができます。

- **Firewall Manager のデフォルト管理者の非関連付けは、先入れ後出しのポリシーに従います**。すべての Firewall Manager 管理者は、Firewall Manager のデフォルト管理者がアカウントを非関連付ける前に非関連付けを行う必要があります。
- **PutAdminAccount** によって Firewall Manager 管理者を作成するには、そのアカウントは以前に **AssociateAdminAccount** を使用して Firewall Manager にオンボードされた組織に属している必要があります。
- Firewall Manager 管理者アカウントの作成は、組織の管理アカウントによってのみ行うことができます。
```bash
aws fms associate-admin-account --admin-account <value>
aws fms disassociate-admin-account
aws fms put-admin-account --admin-account <value>
```
**潜在的な影響:** 中央管理の喪失、ポリシーの回避、コンプライアンス違反、および環境内のセキュリティコントロールの中断。

### `fms:PutPolicy`, `fms:DeletePolicy`

**`fms:PutPolicy`**、**`fms:DeletePolicy`** 権限を持つ攻撃者は、AWS Firewall Manager ポリシーを作成、変更、または永久に削除することができます。
```bash
aws fms put-policy --policy <value> | --cli-input-json file://<policy.json> [--tag-list <value>]
aws fms delete-policy --policy-id <value> [--delete-all-policy-resources | --no-delete-all-policy-resources]
```
許可されたセキュリティグループを通じて許可されたポリシーの例は、検出を回避するために次のようになります：
```json
{
"Policy": {
"PolicyName": "permisive_policy",
"SecurityServicePolicyData": {
"Type": "SECURITY_GROUPS_COMMON",
"ManagedServiceData": "{\"type\":\"SECURITY_GROUPS_COMMON\",\"securityGroups\":[{\"id\":\"<permisive_security_group_id>\"}], \"applyToAllEC2InstanceENIs\":\"true\",\"IncludeSharedVPC\":\"true\"}"
},
"ResourceTypeList": [
"AWS::EC2::Instance",
"AWS::EC2::NetworkInterface",
"AWS::EC2::SecurityGroup",
"AWS::ElasticLoadBalancingV2::LoadBalancer",
"AWS::ElasticLoadBalancing::LoadBalancer"
],
"ResourceType": "AWS::EC2::SecurityGroup",
"ExcludeResourceTags": false,
"ResourceTags": [],
"RemediationEnabled": true
},
"TagList": []
}
```
**潜在的な影響:** セキュリティコントロールの解体、ポリシーの回避、コンプライアンス違反、運用の中断、および環境内でのデータ漏洩の可能性。

### `fms:BatchAssociateResource`, `fms:BatchDisassociateResource`, `fms:PutResourceSet`, `fms:DeleteResourceSet`

**`fms:BatchAssociateResource`** および **`fms:BatchDisassociateResource`** の権限を持つ攻撃者は、それぞれファイアウォールマネージャーのリソースセットからリソースを関連付けたり、関連付けを解除したりすることができます。さらに、**`fms:PutResourceSet`** および **`fms:DeleteResourceSet`** の権限により、攻撃者はAWS Firewall Managerからこれらのリソースセットを作成、変更、または削除することができます。
```bash
# Associate/Disassociate resources from a resource set
aws fms batch-associate-resource --resource-set-identifier <value> --items <value>
aws fms batch-disassociate-resource --resource-set-identifier <value> --items <value>

# Create, modify or delete a resource set
aws fms put-resource-set --resource-set <value> [--tag-list <value>]
aws fms delete-resource-set --identifier <value>
```
**潜在的影響:** リソースセットに不必要なアイテムを追加すると、サービス内のノイズレベルが増加し、DoSを引き起こす可能性があります。さらに、リソースセットの変更は、リソースの中断、ポリシーの回避、コンプライアンス違反、環境内のセキュリティコントロールの中断を引き起こす可能性があります。

### `fms:PutAppsList`, `fms:DeleteAppsList`

**`fms:PutAppsList`** および **`fms:DeleteAppsList`** 権限を持つ攻撃者は、AWS Firewall Managerからアプリケーションリストを作成、変更、または削除することができます。これは重要であり、無許可のアプリケーションが一般公開される可能性がある一方で、許可されたアプリケーションへのアクセスが拒否され、DoSを引き起こす可能性があります。
```bash
aws fms put-apps-list --apps-list <value> [--tag-list <value>]
aws fms delete-apps-list --list-id <value>
```
**潜在的な影響:** これにより、誤設定、ポリシー回避、コンプライアンス違反、環境内のセキュリティコントロールの中断が発生する可能性があります。

### `fms:PutProtocolsList`, `fms:DeleteProtocolsList`

**`fms:PutProtocolsList`** および **`fms:DeleteProtocolsList`** 権限を持つ攻撃者は、AWS Firewall Managerからプロトコルリストを作成、変更、または削除することができます。アプリケーションリストと同様に、これは重要である可能性があります。なぜなら、無許可のプロトコルが一般の人々によって使用される可能性があるか、または許可されたプロトコルの使用が拒否され、DoSを引き起こす可能性があるからです。
```bash
aws fms put-protocols-list --apps-list <value> [--tag-list <value>]
aws fms delete-protocols-list --list-id <value>
```
**潜在的な影響:** これにより、設定ミス、ポリシー回避、コンプライアンス違反、環境内のセキュリティ制御の中断が発生する可能性があります。

### `fms:PutNotificationChannel`, `fms:DeleteNotificationChannel`

**`fms:PutNotificationChannel`** および **`fms:DeleteNotificationChannel`** 権限を持つ攻撃者は、Firewall ManagerがSNSログを記録するために使用するIAMロールとAmazon Simple Notification Service (SNS)トピックを削除および指定することができます。

**`fms:PutNotificationChannel`** をコンソールの外で使用するには、指定された **SnsRoleName** がSNSログを公開できるようにSNSトピックのアクセスポリシーを設定する必要があります。提供された **SnsRoleName** が **`AWSServiceRoleForFMS`** 以外のロールである場合、Firewall Managerサービスプリンシパル **fms.amazonaws.com** がこのロールを引き受けることを許可する信頼関係が構成されている必要があります。

SNSアクセスポリシーの設定に関する情報:

{{#ref}}
../aws-sns-enum.md
{{#endref}}
```bash
aws fms put-notification-channel --sns-topic-arn <value> --sns-role-name <value>
aws fms delete-notification-channel
```
**潜在的な影響:** これにより、セキュリティアラートの見逃し、インシデント対応の遅延、データ漏洩の可能性、環境内での運用の中断が発生する可能性があります。

### `fms:AssociateThirdPartyFirewall`, `fms:DisssociateThirdPartyFirewall`

**`fms:AssociateThirdPartyFirewall`**、**`fms:DisssociateThirdPartyFirewall`** の権限を持つ攻撃者は、AWS Firewall Managerを通じて中央管理されるサードパーティファイアウォールを関連付けたり、関連付けを解除したりすることができます。

> [!WARNING]
> デフォルトの管理者のみがサードパーティファイアウォールを作成および管理できます。
```bash
aws fms associate-third-party-firewall --third-party-firewall [PALO_ALTO_NETWORKS_CLOUD_NGFW | FORTIGATE_CLOUD_NATIVE_FIREWALL]
aws fms disassociate-third-party-firewall --third-party-firewall [PALO_ALTO_NETWORKS_CLOUD_NGFW | FORTIGATE_CLOUD_NATIVE_FIREWALL]
```
**潜在的な影響:** 切断はポリシーの回避、コンプライアンス違反、環境内のセキュリティコントロールの混乱を引き起こすことになります。一方、関連付けはコストと予算の配分の混乱を引き起こすことになります。

### `fms:TagResource`, `fms:UntagResource`

攻撃者はFirewall Managerリソースからタグを追加、変更、または削除することができ、組織のコスト配分、リソース追跡、およびタグに基づくアクセス制御ポリシーを混乱させることになります。
```bash
aws fms tag-resource --resource-arn <value> --tag-list <value>
aws fms untag-resource --resource-arn <value> --tag-keys <value>
```
**潜在的影響**: コスト配分、リソース追跡、およびタグベースのアクセス制御ポリシーの混乱。

## 参考文献

- [https://docs.aws.amazon.com/govcloud-us/latest/UserGuide/govcloud-fms.html](https://docs.aws.amazon.com/govcloud-us/latest/UserGuide/govcloud-fms.html)
- [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsfirewallmanager.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsfirewallmanager.html)
- [https://docs.aws.amazon.com/waf/latest/developerguide/fms-chapter.html](https://docs.aws.amazon.com/waf/latest/developerguide/fms-chapter.html)

{{#include ../../../../banners/hacktricks-training.md}}
