Μάθετε το hacking του AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
- Εάν θέλετε να δείτε την εταιρεία σας να διαφημίζεται στο HackTricks ή να κατεβάσετε το HackTricks σε μορφή PDF ελέγξτε τα ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ!
- Αποκτήστε το επίσημο PEASS & HackTricks swag
- Ανακαλύψτε την Οικογένεια PEASS, τη συλλογή μας από αποκλειστικά NFTs
- Εγγραφείτε στη 💬 ομάδα Discord ή στη ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε τα hacking tricks σας υποβάλλοντας PRs στα HackTricks και HackTricks Cloud αποθετήρια του github.
Βρείτε βασικές πληροφορίες σχετικά με το KMS στο:
{% content-ref url="../gcp-services/gcp-kms-enum.md" %} gcp-kms-enum.md {% endcontent-ref %}
Ένας επιτιθέμενος με αυτήν την άδεια μπορεί να καταστρέψει μια έκδοση του KMS. Για να το κάνετε αυτό, πρέπει πρώτα να απενεργοποιήσετε το κλειδί και στη συνέχεια να το καταστρέψετε:
# pip install google-cloud-kms
from google.cloud import kms
def disable_key_version(project_id, location_id, key_ring_id, key_id, key_version):
"""
Disables a key version in Cloud KMS.
"""
# Create the client.
client = kms.KeyManagementServiceClient()
# Build the key version name.
key_version_name = client.crypto_key_version_path(project_id, location_id, key_ring_id, key_id, key_version)
# Call the API to disable the key version.
client.update_crypto_key_version(request={'crypto_key_version': {'name': key_version_name, 'state': kms.CryptoKeyVersion.State.DISABLED}})
def destroy_key_version(project_id, location_id, key_ring_id, key_id, key_version):
"""
Destroys a key version in Cloud KMS.
"""
# Create the client.
client = kms.KeyManagementServiceClient()
# Build the key version name.
key_version_name = client.crypto_key_version_path(project_id, location_id, key_ring_id, key_id, key_version)
# Call the API to destroy the key version.
client.destroy_crypto_key_version(request={'name': key_version_name})
# Example usage
project_id = 'your-project-id'
location_id = 'your-location'
key_ring_id = 'your-key-ring'
key_id = 'your-key-id'
key_version = '1' # Version number to disable and destroy
# Disable the key version
disable_key_version(project_id, location_id, key_ring_id, key_id, key_version)
# Destroy the key version
destroy_key_version(project_id, location_id, key_ring_id, key_id, key_version)
Στο AWS είναι δυνατόν να κλαπεί εντελώς ένα KMS κλειδί, τροποποιώντας την πολιτική πόρων του KMS και επιτρέποντας μόνο στον λογαριασμό του επιτιθέμενου να χρησιμοποιήσει το κλειδί. Καθώς αυτές οι πολιτικές πόρων δεν υπάρχουν στο GCP, αυτό δεν είναι δυνατόν.
Ωστόσο, υπάρχει ένας άλλος τρόπος για να πραγματοποιηθεί ένας παγκόσμιος KMS Ransomware, ο οποίος θα περιλαμβάνει τα εξής βήματα:
- Δημιουργία μιας νέας έκδοσης του κλειδιού με υλικό κλειδιού που έχει εισαχθεί από τον επιτιθέμενο
{% code overflow="wrap" %}
gcloud kms import-jobs create [IMPORT_JOB] --location [LOCATION] --keyring [KEY_RING] --import-method [IMPORT_METHOD] --protection-level [PROTECTION_LEVEL] --target-key [KEY]
{% code %}
- Ορίστε το ως προεπιλεγμένη έκδοση (για μελλοντικά δεδομένα που θα κρυπτογραφηθούν)
- Επανακρυπτογραφήστε παλαιότερα δεδομένα που έχουν κρυπτογραφηθεί με την προηγούμενη έκδοση με τη νέα.
- Διαγράψτε το KMS κλειδί
- Τώρα μόνο ο επιτιθέμενος, που διαθέτει το αρχικό υλικό του κλειδιού, θα μπορούσε να αποκρυπτογραφήσει τα κρυπτογραφημένα δεδομένα
from google.cloud import kms
import base64
def encrypt_symmetric(project_id, location_id, key_ring_id, key_id, plaintext):
"""
Encrypts data using a symmetric key from Cloud KMS.
"""
# Create the client.
client = kms.KeyManagementServiceClient()
# Build the key name.
key_name = client.crypto_key_path(project_id, location_id, key_ring_id, key_id)
# Convert the plaintext to bytes.
plaintext_bytes = plaintext.encode('utf-8')
# Call the API.
encrypt_response = client.encrypt(request={'name': key_name, 'plaintext': plaintext_bytes})
ciphertext = encrypt_response.ciphertext
# Optional: Encode the ciphertext to base64 for easier handling.
return base64.b64encode(ciphertext)
# Example usage
project_id = 'your-project-id'
location_id = 'your-location'
key_ring_id = 'your-key-ring'
key_id = 'your-key-id'
plaintext = 'your-data-to-encrypt'
ciphertext = encrypt_symmetric(project_id, location_id, key_ring_id, key_id, plaintext)
print('Ciphertext:', ciphertext)
Η έγκριση cloudkms.cryptoKeyVersions.useToSign
επιτρέπει σε έναν χρήστη να χρησιμοποιήσει μια κρυπτοκλειδοθήκη του Google Cloud Key Management Service (KMS) για να υπογράψει δεδομένα. Αυτό είναι χρήσιμο για περιπτώσεις όπου απαιτείται η επαλήθευση της αυθεντικότητας των δεδομένων από τον αποστολέα. Όταν ένας χρήστης έχει αυτήν την έγκριση, μπορεί να χρησιμοποιήσει το ιδιωτικό κλειδί της κρυπτοκλειδοθήκης για να υπογράψει τα δεδομένα και να δημιουργήσει μια ψηφιακή υπογραφή.
import hashlib
from google.cloud import kms
def sign_asymmetric(project_id, location_id, key_ring_id, key_id, key_version, message):
"""
Sign a message using an asymmetric key version from Cloud KMS.
"""
# Create the client.
client = kms.KeyManagementServiceClient()
# Build the key version name.
key_version_name = client.crypto_key_version_path(project_id, location_id, key_ring_id, key_id, key_version)
# Convert the message to bytes and calculate the digest.
message_bytes = message.encode('utf-8')
digest = {'sha256': hashlib.sha256(message_bytes).digest()}
# Call the API to sign the digest.
sign_response = client.asymmetric_sign(name=key_version_name, digest=digest)
return sign_response.signature
# Example usage for signing
project_id = 'your-project-id'
location_id = 'your-location'
key_ring_id = 'your-key-ring'
key_id = 'your-key-id'
key_version = '1'
message = 'your-message'
signature = sign_asymmetric(project_id, location_id, key_ring_id, key_id, key_version, message)
print('Signature:', signature)
Η άδεια cloudkms.cryptoKeyVersions.useToVerify
επιτρέπει στον χρήστη να χρησιμοποιήσει μια κρυπτογραφική έκδοση κλειδιού για επαλήθευση.
from google.cloud import kms
import hashlib
def verify_asymmetric_signature(project_id, location_id, key_ring_id, key_id, key_version, message, signature):
"""
Verify a signature using an asymmetric key version from Cloud KMS.
"""
# Create the client.
client = kms.KeyManagementServiceClient()
# Build the key version name.
key_version_name = client.crypto_key_version_path(project_id, location_id, key_ring_id, key_id, key_version)
# Convert the message to bytes and calculate the digest.
message_bytes = message.encode('utf-8')
digest = {'sha256': hashlib.sha256(message_bytes).digest()}
# Build the verify request and call the API.
verify_response = client.asymmetric_verify(name=key_version_name, digest=digest, signature=signature)
return verify_response.success
# Example usage for verification
verified = verify_asymmetric_signature(project_id, location_id, key_ring_id, key_id, key_version, message, signature)
print('Verified:', verified)
Μάθετε το hacking του AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
- Εάν θέλετε να δείτε την εταιρεία σας να διαφημίζεται στο HackTricks ή να κατεβάσετε το HackTricks σε μορφή PDF ελέγξτε τα ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ!
- Αποκτήστε το επίσημο PEASS & HackTricks swag
- Ανακαλύψτε την Οικογένεια PEASS, τη συλλογή μας από αποκλειστικά NFTs
- Εγγραφείτε στη 💬 ομάδα Discord ή στη ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε τα hacking tricks σας υποβάλλοντας PRs στα HackTricks και HackTricks Cloud αποθετήρια του github.