Ferramenta simples de linha de comando para criptografar e descriptografar arquivos usando chaves simétricas gerenciadas localmente. Os scripts usam cryptography.Fernet para fornecer criptografia autenticada de forma prática, pensada exclusivamente para demonstrações educacionais sobre como funciona um ataque de ransomware e para exercícios de defesa e recuperação.
Aviso legal importante
Esta ferramenta é apenas para fins educativos, auditoria autorizada e demonstrações controladas. Usar em sistemas sem autorização é ilegal e perigoso. Execute apenas em ambientes isolados, com snapshots e backups. Não forneço suporte para uso malicioso.
encrypt.pyCLI para criptografar um arquivo in-place, com opções de backup e chave.decrypt.pyCLI para descriptografar um arquivo in-place usando a mesma chave.crypto_utils.pyutilitários para criar, carregar e usar chaves Fernet.README.mdeste arquivo, com orientações de uso seguro e opções.examples/diretório sugerido para arquivos de demonstração.
- Operação in-place com backup por padrão.
--backuppara controlar nome e diretório do backup.--dry-runpara simular ações sem modificar arquivos.--keypara usar um caminho de chave customizado.- Modo de demonstração non-destructive que apenas renomeia e marca arquivos, em vez de criptografar.
- Mensagens claras de consentimento e auditoria por log.
- Python 3.8 ou superior
- Dependência Python:
cryptography
Instalação da dependência:
pip install cryptography- Clone o repositório
git clone https://github.com/SEU_USUARIO/bogeyman.git
cd bogeyman- Crie um virtualenv e instale dependências
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
# ou
pip install cryptographySe bogeyman.key não existir, uma nova chave é criada e salva no caminho informado.
python encrypt.py caminho/para/arquivo.txtpython decrypt.py caminho/para/arquivo.txt --key bogeyman.keyusage: encrypt.py [-h] [--key KEY] [--backup BACKUP] [--dry-run] [--yes]
[--demo] file
positional arguments:
file Path to the file that should be encrypted.
optional arguments:
-h, --help show this help message and exit
--key KEY Path to the key file. Default: bogeyman.key
--backup BACKUP Create a backup before modifying. Default: <file>.bak
--dry-run Simulate actions without modifying files
--yes Skip interactive confirmation (use with caution)
--demo Non-destructive demo mode. Does not encrypt contents
- Execute apenas em VM ou container isolado. Habilite snapshots.
- Faça backup completo dos dados originais. O script também cria backup por padrão.
- Use o
--dry-runpara verificar o que seria feito. - Use o
--demopara apresentações públicas, assim você evita danificar dados reais. - Guarde a chave em local seguro. Sem a chave os dados não são recuperáveis.
- Registre logs de execução para auditoria.
- Crie uma VM isolada e um snapshot.
- Coloque arquivos de demonstração em
examples/. - Rode:
python encrypt.py examples/sample1.txt --backup examples/backup --dry-run
# Verifique a saída e confirme
python encrypt.py examples/sample1.txt --backup examples/backup
# Mostre a vítima recuperando com a chave
python decrypt.py examples/sample1.txt --key bogeyman.keyPara apresentação sem risco:
python encrypt.py examples/sample1.txt --demo
# arquivo permanece legível, mas aparece marcado como "criptografado" para demonstração- Para demos simples,
bogeyman.keyfunciona. Nunca deixe chaves em repositórios públicos. - Para cenários reais e defesa, explique KMS e secret stores: Azure Key Vault, AWS KMS, HashiCorp Vault.
- Mostre derivação de chave via passphrase com PBKDF2 para evitar chave em texto puro. Exemplo conceitual:
key = PBKDF2(passphrase, salt, iterations=200000)
Ao usar Bogeyman em demonstrações, aproveite para mostrar como detectar comportamento similar a ransomware:
- Monitorar processos que abrem e escrevem em muitos arquivos consecutivos.
- Alertar em EDR para criação de arquivos
.keyem diretórios de usuário. - Monitorar aumento abrupto de entropia em arquivos.
- Proteger backups com retenção imutável.
Inclua testes que garantam que um arquivo criptografado é recuperável. Exemplo simples:
def test_encrypt_decrypt(tmp_path):
src = tmp_path / "file.txt"
src.write_text("conteudo secreto")
key = ensure_key(tmp_path / "test.key")
encrypt_file(src, key)
decrypt_file(src, key)
assert src.read_text() == "conteudo secreto"Criar chave alternativa e criptografar:
python encrypt.py secret.txt --key keys/my_bogeyman.key --backup backups/secret.txt.bakSimular ação sem risco:
python encrypt.py secret.txt --dry-runModo demo non-destructive:
python encrypt.py secret.txt --demoSe for contribuir, siga estas regras:
- Abra issue descrevendo o motivo.
- Faça branch com nome
feat/<descrição>oufix/<descrição>. - Inclua testes automatizados para novas funcionalidades.
- Nunca introduza funcionalidade que torne a ferramenta arbitrariamente perigosa, como varredura recursiva irrestrita sem confirmação.
