added more details
This commit is contained in:
parent
5be2a146ef
commit
b682bbe990
|
@ -33,7 +33,8 @@ or
|
||||||
http://s3.amazonaws.com/BUCKETNAME/FILENAME.ext
|
http://s3.amazonaws.com/BUCKETNAME/FILENAME.ext
|
||||||
```
|
```
|
||||||
|
|
||||||
* __List content of public bucket via__
|
### List content of public bucket via
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
aws s3 ls s3://<bucketname>/ --no-sign-request
|
aws s3 ls s3://<bucketname>/ --no-sign-request
|
||||||
```
|
```
|
||||||
|
@ -51,9 +52,10 @@ If the ACL is set to
|
||||||
* `Anyone`, just `curl`
|
* `Anyone`, just `curl`
|
||||||
* `AuthenticatedUsers`, `s3` cli with aws key
|
* `AuthenticatedUsers`, `s3` cli with aws key
|
||||||
|
|
||||||
## IAM
|
## Identity Access Management (IAM)
|
||||||
|
|
||||||
Permissions are granted directly through user accounts or indirectly through
|
Permissions are granted directly through IAM identities (IAM Principals) inside
|
||||||
|
an AWS account or indirectly through
|
||||||
roles the user has joined.
|
roles the user has joined.
|
||||||
|
|
||||||
<img src="./include/iam-intro-users-and-groups.diagram.png" alt="Policy evaluation" width="auto" height="auto">
|
<img src="./include/iam-intro-users-and-groups.diagram.png" alt="Policy evaluation" width="auto" height="auto">
|
||||||
|
@ -75,7 +77,7 @@ and authorization.
|
||||||
|
|
||||||
Every AWS account has a single root account bound to an email address. This
|
Every AWS account has a single root account bound to an email address. This
|
||||||
account has got the all privileges over the account. A root account has MFA
|
account has got the all privileges over the account. A root account has MFA
|
||||||
disabled by default.
|
disabled by default. Has all permissions except Organizational Service Control Policies.
|
||||||
|
|
||||||
The account is susceptible to an attack if the mail address is accessible but
|
The account is susceptible to an attack if the mail address is accessible but
|
||||||
MFA is not activated.
|
MFA is not activated.
|
||||||
|
@ -83,11 +85,13 @@ MFA is not activated.
|
||||||
If the MFA is not set, it is an opportunity for a password reset attack when
|
If the MFA is not set, it is an opportunity for a password reset attack when
|
||||||
the account the vulnerable root belongs to is part of an AWS Organization.
|
the account the vulnerable root belongs to is part of an AWS Organization.
|
||||||
|
|
||||||
### User Policies
|
### (User) Policies
|
||||||
|
|
||||||
After authentication of a user (or principal) policies of the account are
|
After authentication of a user (or principal) policies of the account are
|
||||||
checked if the request is allowed.
|
checked if the request is allowed.
|
||||||
Policy evaluation can be found in the [AWS docs](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html).
|
Policy evaluation can be found in the [AWS docs](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html).
|
||||||
|
A policy may also be attached to a resource.
|
||||||
|
|
||||||
The following graph is taken from the documentation, it shows the evaluation
|
The following graph is taken from the documentation, it shows the evaluation
|
||||||
logic inside an account
|
logic inside an account
|
||||||
|
|
||||||
|
@ -96,6 +100,27 @@ logic inside an account
|
||||||
Policies like `assume-role` and `switch-role` can lead to the gain of roles
|
Policies like `assume-role` and `switch-role` can lead to the gain of roles
|
||||||
with higher permissions
|
with higher permissions
|
||||||
|
|
||||||
|
## AWS Organizations
|
||||||
|
|
||||||
|
An organization is a tree structure, made out of a single root account and
|
||||||
|
Organizational Units (UOs). UOs can have children UOs. AN UO may contain
|
||||||
|
multiple AWS accounts. An AWS account can contain multiple user accounts.
|
||||||
|
|
||||||
|
An organization has IAM and SSO that also works with external identity
|
||||||
|
Providers (idP). This is done through the AWS IAM Identity Center which is used
|
||||||
|
to confiure roles and permissions.
|
||||||
|
|
||||||
|
Further, there is a management account inside any organization. It owns the
|
||||||
|
role "OrganizationAccountAccessRole". This account uses the policies/roles
|
||||||
|
mentioned in the [User Policies](#User-Policies) which are `assume-role` and
|
||||||
|
`switch-role` on the cli tool and the management web-console to gain
|
||||||
|
administrative permissions over the UOs inside the organization.
|
||||||
|
|
||||||
|
By default the Service Control Policy (SCP) `p-full-access` it attached to
|
||||||
|
every account inside the organization. This SCP allows subscription to all AWS
|
||||||
|
services. An account can have 5 SCPs at max. Limiting SCPs do not apply to the
|
||||||
|
management account itself.
|
||||||
|
|
||||||
### User Provisioning
|
### User Provisioning
|
||||||
|
|
||||||
When using the cli command, the aws configuration and credentials are stored at `~/.aws`
|
When using the cli command, the aws configuration and credentials are stored at `~/.aws`
|
||||||
|
@ -136,9 +161,12 @@ In another region
|
||||||
aws ec2 describe-instances --output text --region us-east-1 --profile PROFILENAME
|
aws ec2 describe-instances --output text --region us-east-1 --profile PROFILENAME
|
||||||
```
|
```
|
||||||
|
|
||||||
### AWS ARN
|
### Amazon Resource Name (ARN)
|
||||||
|
|
||||||
Unique ID is create through the following scheme
|
The [ARN](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html)
|
||||||
|
is a unique ID which identifies resources.
|
||||||
|
|
||||||
|
A Unique ID is create through the following scheme
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
arn:aws:<service>:<region>:<account_id>:<resource_type>/<resource_name>
|
arn:aws:<service>:<region>:<account_id>:<resource_type>/<resource_name>
|
||||||
|
@ -159,3 +187,72 @@ Do a `PUT` method to see if the bucket may be writeable to upload a file via
|
||||||
```sh
|
```sh
|
||||||
curl -vvv -X PUT $BUCKET_URL --data "Test of write permissions"
|
curl -vvv -X PUT $BUCKET_URL --data "Test of write permissions"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Virtual Private Cloud (VPC)
|
||||||
|
|
||||||
|
Is a logic network segementation method using its own IP address range.
|
||||||
|
Contains resources like VMs (EC2) and has an Internet gateway if needed. The
|
||||||
|
gateway can be either just ingress, egress, or both. EC2 can use elastic IP
|
||||||
|
addresses to provide Ingress. A Gateway Load Balancer can be used to do traffic inspection.
|
||||||
|
|
||||||
|
To connect to a VPC, it does not need to be exposed to the Internet. It is
|
||||||
|
accessible through various connection services like Direct Connect or
|
||||||
|
PrivateLink.
|
||||||
|
|
||||||
|
VPCs can have multiple subnets, they use host infrastructure components like
|
||||||
|
DHCP, NTP and DNS provided by AWS.
|
||||||
|
|
||||||
|
NTP can be found under 169.254.169.123. The DNS resolver `Route 53` can be
|
||||||
|
found under 169.254.169.253. Microsoft's KMS service can be at 169.254.169.250
|
||||||
|
and 169.254.169.251.
|
||||||
|
|
||||||
|
### Metadata Service
|
||||||
|
|
||||||
|
The instance (Openstack) Metadata service can be found under 169.254.169.254.
|
||||||
|
It can be used
|
||||||
|
to gain information about the EC2 via a GET request to
|
||||||
|
http://169.254.169.254/latest/meta-data .
|
||||||
|
|
||||||
|
The task metadata service can be found at 169.254.170.2 and is used for the
|
||||||
|
Elastic Container Service (ECS).
|
||||||
|
|
||||||
|
The instance metadata service has been used for information disclosure of
|
||||||
|
security credentials before.
|
||||||
|
[Alexander
|
||||||
|
Hose](https://alexanderhose.com/how-to-hack-aws-instances-with-the-metadata-service-enabled/)
|
||||||
|
describes how to use the credentials through aws-cli.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
[ec2-user ~] curl http://169.254.169.254/latest/meta-data/iam/security-credentials/
|
||||||
|
ec2S3FullAccess
|
||||||
|
[ec2-user ~] curl http://169.254.169.254/latest/meta-data/iam/security-credentials/ec2S3FullAccess
|
||||||
|
{
|
||||||
|
"Code": "Success",
|
||||||
|
"LastUpdated": "2022-10-01T15:19:43Z",
|
||||||
|
"Type": "AWS-HMAC",
|
||||||
|
"AccessKeyId": "ASIAMFKOAUSJ7EXAMPLE",
|
||||||
|
"SecretAccessKey": "UeEevJGByhEXAMPLEKEY",
|
||||||
|
"Token": "TQijaZw==",
|
||||||
|
"Expiration": "2022-10-01T21:44:45Z"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Use the credentials to configure aws-cli.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
$ aws configure
|
||||||
|
AWS Access Key ID [None]: ASIAMFKOAUSJ7EXAMPLE
|
||||||
|
AWS Secret Access Key [None]: UeEevJGByhEXAMPLEKEYEXAMPLEKEY
|
||||||
|
Default region name [None]: us-east-2
|
||||||
|
Default output format [None]: json
|
||||||
|
```
|
||||||
|
|
||||||
|
Add the credentials to the AWS credentials file
|
||||||
|
|
||||||
|
```sh
|
||||||
|
[default]
|
||||||
|
aws_access_key_id = ASIAMFKOAUSJ7EXAMPLE
|
||||||
|
aws_secret_access_key = UeEevJGByhEXAMPLEKEYEXAMPLEKEY
|
||||||
|
aws_session_token = TQijaZw==
|
||||||
|
```
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue