O Código PyRAT: Internos de um RAT Baseado em Python
Detection stack
- AIDR
- Alert
- ETL
- Query
Resumo
O artigo perfila o PyRAT, um trojan de acesso remoto baseado em Python empacotado como um binário ELF utilizando o PyInstaller. Ele é executado tanto em Linux quanto em Windows, comunica-se com um servidor C2 sobre HTTP não criptografado e suporta execução de comandos, exfiltração de arquivos, captura de tela e uma rotina de autodestruição. A persistência é implementada através do XDG autostart no Linux e de uma chave de registro Run no Windows. O relatório enfatiza quão leve é a ferramenta e como ela pode ser facilmente repropósita por cibercriminosos.
Investigação
Pesquisadores extraíram o bytecode Python embutido com pyinstxtractor, descompilaram os módulos e identificaram a classe principal Agent que executa fingerprinting de host, geração de UID, gerenciamento de threads e coordenação de C2. A análise estática revelou importações chave, nomes de arquivos, interação com o registro e o endpoint HTTP POST usado para beaconing. Testes de comportamento mostraram o fluxo de trabalho completo: criação de persistência, execução de comandos, enumeração de arquivos, operações de upload/download, criação de arquivo ZIP, captura de tela e limpeza opcional de artefatos.
Mitigação
Monitore arquivos .desktop de autostart suspeitos criados em perfis de usuários e adições à chave de registro HKCURun usando nomes de executáveis desconhecidos. Na camada de rede, observe por tráfego HTTP POST de saída para hosts desconhecidos direcionados ao endpoint /api/{uid}/hello. Nos endpoints, sinalize binários ELF desconhecidos contendo conteúdo Python embutido e comportamento anômalo de processos, como execução frequente de subprocessos.
Resposta
Se detectado, isole o sistema, colete a amostra ELF e quaisquer arquivos .desktop associados, e preserve o estado do registro relevante. Extraia o UID, endereço C2, e quaisquer arquivos transferidos durante a execução como parte da análise forense. Bloqueie a infraestrutura C2 identificada, remova a persistência e complete uma limpeza total. Altere as credenciais para contas que possam ter sido expostas.
graph TB %% Class Definitions classDef malware fill:#ff9999 classDef technique fill:#99ccff classDef action fill:#ccffcc classDef persistence fill:#ffcc99 classDef cleanup fill:#dddddd %% Node Definitions malware_pyrat[“<b>Malware</b> – <b>Nome</b>: PyRAT ELF<br/><b>Descrição</b>: RAT para Linux/Windows executado como binário ELF”] class malware_pyrat malware tech_system_info[“<b>Técnica</b> – <b>T1082 Descoberta de Informações do Sistema</b><br/>Coleta versão do SO, nome do host e detalhes de hardware”] class tech_system_info technique tech_user_discovery[“<b>Técnica</b> – <b>T1033 Descoberta do Proprietário/Usuário do Sistema</b><br/>Enumera o usuário logado e detalhes da conta”] class tech_user_discovery technique action_establish_c2[“<b>Ação</b> – Estabelecer C2 via HTTP POST não criptografado”] class action_establish_c2 action tech_web_service[“<b>Técnica</b> – <b>T1102.003 Serviço Web: Comunicação Unidirecional</b><br/>Usa HTTP POST para enviar dados a um servidor remoto”] class tech_web_service technique tech_exfil_unenc[“<b>Técnica</b> – <b>T1048.003 Exfiltração por Protocolo Não C2 Não Criptografado</b><br/>Transfere dados sem criptografia”] class tech_exfil_unenc technique tech_data_encoding[“<b>Técnica</b> – <b>T1132.002 Codificação de Dados: Codificação Não Padrão</b><br/>Aplica codificação personalizada antes da transmissão”] class tech_data_encoding technique action_execute_cmd[“<b>Ação</b> – Executar Comandos”] class action_execute_cmd action tech_windows_shell[“<b>Técnica</b> – <b>T1059.003 Shell de Comando do Windows</b><br/>Executa comandos via cmd.exe”] class tech_windows_shell technique tech_unix_shell[“<b>Técnica</b> – <b>T1059.004 Shell Unix</b><br/>Executa comandos via /bin/sh”] class tech_unix_shell technique action_collect_files[“<b>Ação</b> – Coletar Arquivos e Enumerar o Sistema de Arquivos”] class action_collect_files action tech_archive[“<b>Técnica</b> – <b>T1560.002 Arquivar Dados Coletados: Arquivamento via Biblioteca</b><br/>Comprime dados usando uma biblioteca ZIP”] class tech_archive technique tech_screenshot[“<b>Técnica</b> – <b>T1113 Captura de Tela</b><br/>Captura a imagem da área de trabalho”] class tech_screenshot technique tech_persist_linux[“<b>Técnica</b> – <b>T1547.013 Autostart XDG</b><br/>Adiciona uma entrada .desktop ao diretório de inicialização do usuário”] class tech_persist_linux persistence tech_persist_windows[“<b>Técnica</b> – <b>T1547.014 Chaves Run do Registro / Pasta de Inicialização</b><br/>Cria uma entrada em HKCU\\Run para persistência”] class tech_persist_windows persistence tech_cleanup[“<b>Técnica</b> – <b>T1070.009 Remoção de Indicadores: Limpar Persistência</b><br/>Remove artefatos de persistência e logs”] class tech_cleanup cleanup %% Connections malware_pyrat –>|leva_a| tech_system_info malware_pyrat –>|leva_a| tech_user_discovery tech_system_info –>|fornece informações para| action_establish_c2 tech_user_discovery –>|fornece informações para| action_establish_c2 action_establish_c2 –>|usa| tech_web_service action_establish_c2 –>|usa| tech_exfil_unenc action_establish_c2 –>|usa| tech_data_encoding action_establish_c2 –>|habilita| action_execute_cmd action_execute_cmd –>|usa| tech_windows_shell action_execute_cmd –>|usa| tech_unix_shell action_execute_cmd –>|leva_a| action_collect_files action_collect_files –>|leva_a| tech_archive tech_archive –>|leva_a| tech_screenshot tech_screenshot –>|habilita| tech_persist_linux tech_screenshot –>|habilita| tech_persist_windows tech_persist_linux –>|posteriormente leva a| tech_cleanup tech_persist_windows –>|posteriormente leva a| tech_cleanup
Fluxo de Ataque
Detecções
Possível Remoção Automática de Malware ou Operação de Ocultação de Stderr (via cmdline)
Ver
Arquivo Foi Criado Na Pasta Tmp do Linux (via file_event)
Ver
Possíveis Pontos de Persistência [ASEPs – Software/NTUSER Hive] (via cmdline)
Ver
Tentativa de Remoção de Chaves do Registro Possível (via process_creation)
Ver
Tentativa de Modificação de Arquivos Autostart do XDG no Linux Possível (via cmdline)
Ver
Permissões Perigosas para um Binário/Script/Pasta foram definidas (via cmdline)
Ver
IOCs (HashMd5) para detectar: O Código PyRAT: RAT Baseado em Python e seus Internos
Ver
Persistência no Windows via Chave Run do Usuário Atual [Evento do Registro do Windows]
Ver
Detecção de Persistência do PyRAT no Linux [Criação de Processo no Linux]
Ver
Execução de Simulação
Pré-requisito: A Verificação de Pré-vôo do Telemetria & Baseline deve ter passado.
Racional: Esta seção detalha a execução precisa da técnica adversária (TTP) projetada para acionar a regra de detecção. Os comandos e a narrativa DEVEM refletir diretamente os TTPs identificados e visam gerar a telemetria exata esperada pela lógica de detecção.
-
Narrativa de Ataque & Comandos:
Um atacante obteve uma credencial SSH comprometida para um usuário regular. Após o login, eles executam um script de permanência :
- Escreve a carga útil ELF maliciosa (
agent-svc.pyc) no diretório home do usuário, disfarçando-o como um arquivo de bytecode Python enquanto é na verdade um binário ELF. - Copia uma ferramenta de pacote-debian mascarada nomeada
dpkgnem/usr/local/bin, concedendo-lhe direitos de execução. A ferramenta é um invólucro fino que simplesmente lança a carga ELF. - Instala uma entrada desktop autostart (
dpkgn.desktop) em~/.config/autostartpara que a carga útil seja executada em cada início de sessão gráfica. - Define permissões apropriadas para evitar suspeita imediata.
Os eventos de arquivo combinados (
agent-svc.pycanddpkgn) satisfazem a primeira condição da regra, enquanto o.desktoparquivo satisfaz a segunda condição. - Escreve a carga útil ELF maliciosa (
-
Script de Teste de Regressão:
#!/usr/bin/env bash set -euo pipefail # 1. Deploy payload ELF disfarçado como .pyc MALWARE_PATH="$HOME/agent-svc.pyc" echo "Criando carga ELF falsa (binário dummy) ..." dd if=/dev/zero bs=1 count=1024 of="$MALWARE_PATH" status=none chmod +x "$MALWARE_PATH" # 2. Deploy ferramenta Debian falsa chamada dpkgn FAKE_TOOL="/usr/local/bin/dpkgn" echo "#!/usr/bin/env bash" | sudo tee "$FAKE_TOOL" > /dev/null echo "exec "$MALWARE_PATH" "$@"" | sudo tee -a "$FAKE_TOOL" > /dev/null sudo chmod +x "$FAKE_TOOL" # 3. Criar entrada autostart desktop AUTOSTART_DIR="$HOME/.config/autostart" mkdir -p "$AUTOSTART_DIR" DESKTOP_FILE="$AUTOSTART_DIR/dpkgn.desktop" cat > "$DESKTOP_FILE" <<EOF [Desktop Entry] Type=Application Exec=$FAKE_TOOL Hidden=false NoDisplay=false X-GNOME-Autostart-enabled=true Name=Package Manager Comment=Serviço de Atualização de Sistema EOF echo "Artefatos de persistência do PyRAT implantados." -
Comandos de Limpeza:
#!/usr/bin/env bash set -euo pipefail # Remover ELF malicioso rm -f "$HOME/agent-svc.pyc" # Remover ferramenta falsa sudo rm -f /usr/local/bin/dpkgn # Remover entrada autostart rm -f "$HOME/.config/autostart/dpkgn.desktop" echo "Limpeza concluída."