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-privilege-escalat
This commit is contained in:
+19
-10
@@ -10,14 +10,13 @@ Daha fazla bilgi için:
|
||||
../aws-services/aws-iam-enum.md
|
||||
{{#endref}}
|
||||
|
||||
### IAM Kimlik Bilgilerinden Konsola
|
||||
### From IAM Creds to Console
|
||||
|
||||
Eğer bazı IAM kimlik bilgilerini elde etmeyi başardıysanız, aşağıdaki araçları kullanarak **web konsoluna erişmekle** ilgileniyor olabilirsiniz.\
|
||||
Kullanıcı/rolün **`sts:GetFederationToken`** iznine sahip olması gerektiğini unutmayın.
|
||||
Eğer bazı IAM credentials elde etmeyi başardıysanız aşağıdaki araçları kullanarak **web console'a erişmekle** ilgilenebilirsiniz.\ Not: kullanıcı/rolun **`sts:GetFederationToken`** iznine sahip olması gerekir.
|
||||
|
||||
#### Özel script
|
||||
#### Custom script
|
||||
|
||||
Aşağıdaki script, varsayılan profili ve varsayılan bir AWS konumunu (gov değil ve cn değil) kullanarak, web konsoluna giriş yapmak için kullanabileceğiniz imzalı bir URL verecektir:
|
||||
Aşağıdaki script varsayılan profile ve varsayılan bir AWS bölgesini (not gov and not cn) kullanarak size web console'a giriş yapmak için kullanabileceğiniz imzalı bir URL verir:
|
||||
```bash
|
||||
# Get federated creds (you must indicate a policy or they won't have any perms)
|
||||
## Even if you don't have Admin access you can indicate that policy to make sure you get all your privileges
|
||||
@@ -55,7 +54,7 @@ echo -n "https://signin.aws.amazon.com/federation?Action=login&Issuer=example.co
|
||||
```
|
||||
#### aws_consoler
|
||||
|
||||
Bir **web konsol bağlantısı** oluşturabilirsiniz [https://github.com/NetSPI/aws_consoler](https://github.com/NetSPI/aws_consoler).
|
||||
[https://github.com/NetSPI/aws_consoler](https://github.com/NetSPI/aws_consoler) ile **bir web konsolu bağlantısı oluşturabilirsiniz**.
|
||||
```bash
|
||||
cd /tmp
|
||||
python3 -m venv env
|
||||
@@ -68,18 +67,18 @@ aws_consoler [params...] #This will generate a link to login into the console
|
||||
|
||||
#### aws-vault
|
||||
|
||||
[**aws-vault**](https://github.com/99designs/aws-vault), bir geliştirme ortamında AWS kimlik bilgilerini güvenli bir şekilde saklamak ve erişmek için kullanılan bir araçtır.
|
||||
[**aws-vault**](https://github.com/99designs/aws-vault) geliştirme ortamında AWS kimlik bilgilerini güvenli şekilde depolamak ve erişmek için kullanılan bir araçtır.
|
||||
```bash
|
||||
aws-vault list
|
||||
aws-vault exec jonsmith -- aws s3 ls # Execute aws cli with jonsmith creds
|
||||
aws-vault login jonsmith # Open a browser logged as jonsmith
|
||||
```
|
||||
> [!NOTE]
|
||||
> **aws-vault** kullanarak bir **tarayıcı konsol oturumu** da alabilirsiniz.
|
||||
> Ayrıca **aws-vault** kullanarak bir **tarayıcı konsol oturumu** elde edebilirsiniz
|
||||
|
||||
### **Python'dan User-Agent kısıtlamalarını aşma**
|
||||
### **Python'dan User-Agent kısıtlamalarını baypas etme**
|
||||
|
||||
Eğer kullanılan **user agent'a dayalı olarak belirli eylemleri gerçekleştirme kısıtlaması** varsa (örneğin, user agent'a dayalı olarak python boto3 kütüphanesinin kullanımını kısıtlama) önceki tekniği kullanarak **tarayıcı aracılığıyla web konsoluna bağlanmak** mümkündür veya doğrudan **boto3 user-agent'ını** şu şekilde **değiştirebilirsiniz:**
|
||||
Eğer kullanılan **user agent'e göre belirli eylemleri gerçekleştirme kısıtlaması** varsa (ör. user agent'a göre python boto3 kütüphanesinin kullanımını kısıtlamak) önceki tekniği kullanarak **tarayıcı aracılığıyla web konsoluna bağlanmak** mümkün olabilir, veya doğrudan **boto3 user-agent'ını** şu şekilde **değiştirebilirsiniz**:
|
||||
```bash
|
||||
# Shared by ex16x41
|
||||
# Create a client
|
||||
@@ -92,4 +91,14 @@ client.meta.events.register( 'before-call.secretsmanager.GetSecretValue', lambda
|
||||
# Perform the action
|
||||
response = client.get_secret_value(SecretId="flag_secret") print(response['SecretString'])
|
||||
```
|
||||
### **`sts:GetFederationToken`**
|
||||
|
||||
Bu izin ile, bunu çalıştıran kullanıcı için, kullanıcının sahip olduğu izinlerle sınırlı bir federe kimlik oluşturulabilir.
|
||||
```bash
|
||||
aws sts get-federation-token --name <username>
|
||||
```
|
||||
sts:GetFederationToken tarafından döndürülen token, çağrıyı yapan kullanıcının federated identity'sine aittir, ancak sınırlı izinlere sahiptir. Kullanıcının yönetici haklarına sahip olsa bile, IAM kullanıcılarını listeleme veya policies ilişkilendirme gibi bazı işlemler federated token ile gerçekleştirilemez.
|
||||
|
||||
Ayrıca bu yöntem biraz daha gizlidir; federated user AWS Portal'da görünmediği için yalnızca CloudTrail logları veya izleme araçları aracılığıyla gözlemlenebilir.
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -6,9 +6,9 @@
|
||||
|
||||
### `sts:AssumeRole`
|
||||
|
||||
Her rol, bir **rol güven politikası** ile oluşturulur, bu politika **oluşturulan rolü kimin üstlenebileceğini** belirtir. Eğer **aynı hesap** içindeki bir rol, bir hesabın onu üstlenebileceğini söylüyorsa, bu, o hesabın role erişebileceği (ve potansiyel olarak **privesc** yapabileceği) anlamına gelir.
|
||||
Her rol bir **rol güven politikası** ile oluşturulur; bu politika **oluşturulan rolü kimlerin devralabileceğini** belirtir. Eğer aynı hesabın içindeki bir rol, bir hesaba onu devralma izni veriyorsa, bu hesabın role erişebileceği (ve potansiyel olarak **privesc**) anlamına gelir.
|
||||
|
||||
Örneğin, aşağıdaki rol güven politikası, herkesin onu üstlenebileceğini belirtir, bu nedenle **herhangi bir kullanıcı, o rolle ilişkili izinlere privesc yapabilecektir.**
|
||||
Örneğin, aşağıdaki rol güven politikası herkesin onu devralabileceğini gösterir; dolayısıyla **herhangi bir kullanıcı**, o role bağlı izinlere **privesc** yapabilecektir.
|
||||
```json
|
||||
{
|
||||
"Version": "2012-10-17",
|
||||
@@ -23,41 +23,21 @@ Her rol, bir **rol güven politikası** ile oluşturulur, bu politika **oluştur
|
||||
]
|
||||
}
|
||||
```
|
||||
Bir rolü taklit edebilirsiniz:
|
||||
Çalışan bir rolü taklit edebilirsiniz:
|
||||
```bash
|
||||
aws sts assume-role --role-arn $ROLE_ARN --role-session-name sessionname
|
||||
```
|
||||
**Potansiyel Etki:** Rol için privesc.
|
||||
**Olası Etki:** Role Privesc.
|
||||
|
||||
> [!CAUTION]
|
||||
> Bu durumda, izin `sts:AssumeRole`'un **istismar edilecek rolde belirtilmesi gerektiğini** ve saldırganın politikasında olmaması gerektiğini unutmayın.\
|
||||
> Bir istisna ile, **farklı bir hesaptan bir rolü üstlenmek** için saldırgan hesabının **aynı zamanda** rol üzerinde **`sts:AssumeRole`** iznine sahip olması gerekir.
|
||||
> Bu durumda `sts:AssumeRole` izninin **istismar edilecek role belirtilmiş** olması gerektiğine ve saldırgana ait bir policy'de **olmam**ası gerektiğine dikkat edin.\
|
||||
> Tek bir istisna dışında, farklı bir hesaptan **bir rolü üstlenebilmek** için saldırgan hesabının **ayrıca** rol üzerinde **`sts:AssumeRole`** iznine **sahip olması gerektiğini** unutmayın.
|
||||
|
||||
### **`sts:GetFederationToken`**
|
||||
|
||||
Bu izinle, herhangi bir kullanıcıyı taklit etmek için kimlik bilgileri oluşturmak mümkündür:
|
||||
```bash
|
||||
aws sts get-federation-token --name <username>
|
||||
```
|
||||
Bu izin, diğer kullanıcıları taklit etme erişimi vermeden güvenli bir şekilde nasıl verilebilir:
|
||||
```json
|
||||
{
|
||||
"Version": "2012-10-17",
|
||||
"Statement": [
|
||||
{
|
||||
"Sid": "VisualEditor0",
|
||||
"Effect": "Allow",
|
||||
"Action": "sts:GetFederationToken",
|
||||
"Resource": "arn:aws:sts::947247140022:federated-user/${aws:username}"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
### `sts:AssumeRoleWithSAML`
|
||||
|
||||
Bu rol ile bir güven politikası, **SAML aracılığıyla kimlik doğrulaması yapılmış kullanıcılara rolü taklit etme erişimi verir.**
|
||||
Bu role ait bir trust policy, **SAML ile kimlik doğrulayan kullanıcılara rolü taklit etme yetkisi verir.**
|
||||
|
||||
Bu izne sahip bir güven politikası örneği:
|
||||
An example of a trust policy with this permission is:
|
||||
```json
|
||||
{
|
||||
"Version": "2012-10-17",
|
||||
@@ -78,26 +58,26 @@ Bu izne sahip bir güven politikası örneği:
|
||||
]
|
||||
}
|
||||
```
|
||||
Genel olarak, rolü taklit etmek için kimlik bilgileri oluşturmak üzere şunları kullanabilirsiniz:
|
||||
Rolü taklit etmek için kimlik bilgileri oluşturmak amacıyla genel olarak şöyle bir şey kullanabilirsiniz:
|
||||
```bash
|
||||
aws sts assume-role-with-saml --role-arn <value> --principal-arn <value>
|
||||
```
|
||||
Ama **sağlayıcılar** bunu kolaylaştırmak için **kendi araçlarına** sahip olabilir, örneğin [onelogin-aws-assume-role](https://github.com/onelogin/onelogin-python-aws-assume-role):
|
||||
Ancak **sağlayıcılar**, bunu kolaylaştırmak için **kendi araçlarına** sahip olabilir, örneğin [onelogin-aws-assume-role](https://github.com/onelogin/onelogin-python-aws-assume-role):
|
||||
```bash
|
||||
onelogin-aws-assume-role --onelogin-subdomain mettle --onelogin-app-id 283740 --aws-region eu-west-1 -z 3600
|
||||
```
|
||||
**Potansiyel Etki:** Role'e privesc.
|
||||
**Olası Etki:** Privesc to the role.
|
||||
|
||||
### `sts:AssumeRoleWithWebIdentity`
|
||||
|
||||
Bu izin, **mobil, web uygulaması, EKS...** içinde bir web kimlik sağlayıcısı ile kimlik doğrulaması yapılmış **kullanıcılar için** geçici güvenlik kimlik bilgileri seti elde etme izni verir. [Daha fazla bilgi edinin.](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html)
|
||||
Bu izin, bir web kimlik sağlayıcısı ile mobil, web uygulaması, EKS... içinde kimlik doğrulaması yapılmış **kullanıcılar** için bir dizi geçici güvenlik kimlik bilgisi elde etme izni verir. [Learn more here.](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html)
|
||||
|
||||
Örneğin, bir **EKS hizmet hesabı** bir **IAM rolünü taklit edebilmesi** gerekiyorsa, **`/var/run/secrets/eks.amazonaws.com/serviceaccount/token`** içinde bir token'a sahip olacak ve rolü **üstlenip kimlik bilgilerini** elde edebilecektir.
|
||||
For example, if an **EKS service account** should be able to **impersonate an IAM role**, it will have a token in **`/var/run/secrets/eks.amazonaws.com/serviceaccount/token`** and can **assume the role and get credentials** doing something like:
|
||||
```bash
|
||||
aws sts assume-role-with-web-identity --role-arn arn:aws:iam::123456789098:role/<role_name> --role-session-name something --web-identity-token file:///var/run/secrets/eks.amazonaws.com/serviceaccount/token
|
||||
# The role name can be found in the metadata of the configuration of the pod
|
||||
```
|
||||
### Federation Abuse
|
||||
### Federasyon İstismarı
|
||||
|
||||
{{#ref}}
|
||||
../aws-basic-information/aws-federation-abuse.md
|
||||
@@ -105,9 +85,9 @@ aws sts assume-role-with-web-identity --role-arn arn:aws:iam::123456789098:role/
|
||||
|
||||
### IAM Roles Anywhere Privesc
|
||||
|
||||
AWS IAM RolesAnywhere, AWS dışındaki iş yüklerinin X.509 sertifikalarını kullanarak IAM rollerini üstlenmesine olanak tanır. Ancak, güven politikaları düzgün bir şekilde tanımlanmadığında, ayrıcalık yükseltme için kötüye kullanılabilirler.
|
||||
AWS IAM RolesAnywhere, AWS dışındaki iş yüklerinin X.509 sertifikaları kullanarak IAM rolleri üstlenmesine izin verir. Ancak trust policy'ler doğru şekilde sınırlandırılmadığında, bunlar privilege escalation için kötüye kullanılabilir.
|
||||
|
||||
Bu politika, hangi güven kaynağı veya sertifika özelliklerinin izin verildiği konusunda kısıtlamalar içermemektedir. Sonuç olarak, hesapta bulunan herhangi bir güven kaynağına bağlı olan herhangi bir sertifika bu rolü üstlenmek için kullanılabilir.
|
||||
Bu policy, hangi trust anchor veya sertifika özniteliklerinin izinli olduğuna dair kısıtlamalar içermiyor. Sonuç olarak, hesaptaki herhangi bir trust anchor'a bağlı herhangi bir sertifika bu rolü üstlenmek için kullanılabilir.
|
||||
```json
|
||||
{
|
||||
"Version": "2012-10-17",
|
||||
@@ -127,9 +107,9 @@ Bu politika, hangi güven kaynağı veya sertifika özelliklerinin izin verildi
|
||||
}
|
||||
|
||||
```
|
||||
Privesc için, `aws_signing_helper` https://docs.aws.amazon.com/rolesanywhere/latest/userguide/credential-helper.html adresinden gereklidir.
|
||||
To privesc, `aws_signing_helper` şu adresten gereklidir: https://docs.aws.amazon.com/rolesanywhere/latest/userguide/credential-helper.html
|
||||
|
||||
Sonra geçerli bir sertifika kullanarak, saldırgan daha yüksek ayrıcalıklı role geçiş yapabilir.
|
||||
Daha sonra geçerli bir sertifika kullanarak saldırgan daha yüksek ayrıcalıklı role pivot yapabilir
|
||||
```bash
|
||||
aws_signing_helper credential-process \
|
||||
--certificate readonly.pem \
|
||||
@@ -138,6 +118,12 @@ aws_signing_helper credential-process \
|
||||
--profile-arn arn:aws:rolesanywhere:us-east-1:123456789012:profile/default \
|
||||
--role-arn arn:aws:iam::123456789012:role/Admin
|
||||
```
|
||||
Güven kökü, istemci sertifikası `readonly.pem`'in yetkili CA'sından geldiğini doğrular; güven kökü oluşturulduğunda CA’nın açık sertifikası dahil edilmiştir (ve şu anda `readonly.pem`'i doğrulamak için kullanılır). `readonly.pem` içinde, imzanın karşılık gelen özel anahtarı `readonly.key` ile yapılmış olduğunu doğrulamak için AWS tarafından kullanılan açık anahtar bulunur.
|
||||
|
||||
Sertifika ayrıca kimliği kanıtlar ve CN veya OU gibi öznitelikler sağlar; `default` profile bu öznitelikler etiketlere dönüştürülür, bunlar rolün güven politikasının erişimi yetkilendirip yetkilendirmeyeceğine karar vermek için kullanabileceği etiketlerdir. Eğer güven politikasında koşul yoksa bu etiketler göz ardı edilir ve geçerli bir sertifikaya sahip herkes içeriye izin verilir.
|
||||
|
||||
Bu saldırının mümkün olması için hem güven kökünün hem de `default` profilin aktif olması gerekir.
|
||||
|
||||
### Referanslar
|
||||
|
||||
- [https://www.ruse.tech/blogs/aws-roles-anywhere-privilege-escalation](https://www.ruse.tech/blogs/aws-roles-anywhere-privilege-escalation)
|
||||
|
||||
Reference in New Issue
Block a user