← Voltar para Projetos

GhostShell

Advanced Evasion & Persistence Toolkit

C++20 Windows API (Win32/COM) Red Team Research

Visão Geral

O GhostShell é uma Prova de Conceito (PoC) desenvolvida em C++20 para pesquisa em segurança ofensiva. O projeto demonstra a criação de um Reverse Shell altamente furtivo e fileless, focado na execução em memória, evasão de sandboxes dinâmicas e persistência com elevação de privilégios.

Este toolkit foi projetado estritamente para fins educacionais, dissecando a interação em baixo nível com o sistema operacional Windows para burlar heurísticas estáticas e dinâmicas.

6 Fases de Execução
3 Técnicas Anti-Sandbox

Arquitetura e Módulos Core

Persistência via COM API (Task Scheduler)

Em vez de modificar chaves de registro altamente monitoradas (como a Run), o GhostShell estabelece comunicação direta com a API COM do Task Scheduler 2.0. O sistema inicializa via CoInitializeEx e cria uma tarefa oculta ativada no logon (TASK_TRIGGER_LOGON), solicitando TASK_RUNLEVEL_HIGHEST para garantir a sobrevivência a reboots com privilégios máximos.

// Elevação de privilégios na criação da tarefa
IPrincipalPtr pPrincipal;
hr = pTask->get_Principal(&pPrincipal);
if (SUCCEEDED(hr)) {
    pPrincipal->put_LogonType(TASK_LOGON_INTERACTIVE_TOKEN);
    // Solicita os maiores privilégios disponíveis no host
    pPrincipal->put_RunLevel(TASK_RUNLEVEL_HIGHEST); 
}

Ofuscação em Tempo de Compilação

Para proteger o endereço do servidor de Comando e Controle (C2) contra extração estática (ferramentas como strings.exe ou regras YARA), o projeto utiliza um template constexpr personalizado. A URL é criptografada via XOR durante a compilação e descriptografada apenas em memória durante a execução.

// Criptografia XOR avaliada em tempo de compilação
template <size_t N>
class ObfuscatedString {
public:
    static constexpr char key = 0x7A; 
    std::array<char, N> encrypted_data;

    constexpr ObfuscatedString(const char* str) : encrypted_data{} {
        for (size_t i = 0; i < N; ++i) {
            encrypted_data[i] = str[i] ^ key;
        }
    }
    // ...
};

A Cadeia de Execução (Kill Chain)

Obscurecimento de Interface

Ocultação imediata do contexto de execução. O binário consulta a janela ativa via GetConsoleWindow() e força a chamada ShowWindow(hWnd, SW_HIDE), garantindo inicialização silenciosa.

Evasão Ambiental (Anti-Sandbox)

Inspeção do host para detectar virtualização. Verifica recursos limitados (como RAM < 4GB e single core) e enumera o sistema de arquivos buscando artefatos de hypervisors conhecidos (ex: VBoxMouse.sys).

Evasão Temporal

Execução de um loop matemático determinístico e intensivo para CPU, projetado para esgotar os limites de tempo de monitoramento das sandboxes dinâmicas antes de liberar o payload.

Fileless C2 Retrieval

O IP e a porta alvo são extraídos dinamicamente usando a biblioteca WinInet. Os dados de conexão são armazenados apenas na memória RAM (fileless), sem tocar o disco.

Handle Hijacking (Reverse Shell)

Uso de WSASocketA e CreateProcessA para manipular a estrutura STARTUPINFO. Os handles de Input, Output e Error do cmd.exe são redirecionados diretamente para o socket aberto da conexão, dispensando dependências externas.

Stack e Compilação

Flags do Compilador (MinGW-w64)

A compilação do binário é feita de forma estática para evitar a criação de dependências externas e evadir heurísticas, utilizando as seguintes diretivas:

-std=c++20 -static -mwindows -s (Strip Symbols) -lws2_32 -lwininet -lole32 -loleaut32