
HVNC para Cobalt Strike
Hidden Desktop (frequentemente referido como HVNC) é uma ferramenta que permite que operadores interajam com uma sessão de desktop remota sem que o usuário saiba. O protocolo VNC não está envolvido, mas o resultado é uma experiência semelhante. Esta implementação BOF do Cobalt Strike foi criada como uma alternativa ao TinyNuke/forks escritos em C++.
Existem quatro componentes do Hidden Desktop:
Inicializador BOF: Pequeno programa responsável por injetar o código HVNC no processo do Beacon.
Shellcode HVNC: Implementação PIC do TinyNuke HVNC.
Servidor e interface do operador: Servidor que escuta por conexões do shellcode HVNC e uma interface que permite ao operador interagir com a desktop remota. Atualmente suporta apenas Windows.
BOFs de inicialização de aplicativos: Conjunto de Arquivos de Objeto do Beacon que executam aplicativos na nova desktop.
Baixe o último lançamento ou compile você mesmo usando make. Inicie o servidor HVNC em uma máquina Windows acessível a partir do teamserver. Você pode então executar o cliente com:
HiddenDesktop <server> <port>
Você deve ver uma nova janela em branco na máquina do servidor. O BOF não executa nenhum aplicativo por padrão. Você pode usar os BOFs de inicialização de aplicativos para executar programas comuns na nova desktop:
hd-launch-edge
hd-launch-explorer
hd-launch-run
hd-launch-cmd
hd-launch-chrome
Você também pode iniciar programas através do Explorador de Arquivos usando o mouse e teclado. Outros aplicativos podem ser executados usando o seguinte comando:
hd-launch <command> [args]
https://github.com/WKL-Sec/HiddenDesktop/assets/9327972/82f73393-ba44-42b4-8eae-b36b7181fac0
O script Aggressor gera nomes aleatórios de pipe e desktop. Eles são passados para o inicializador BOF como argumentos. O nome da desktop é armazenado nas preferências do CS na execução e é usado pelos BOFs de inicialização de aplicativos. O tráfego HVNC é encaminhado de volta para o team server usando rportfwd. Atualizações de status são enviadas de volta para o Beacon através de um pipe nomeado.
O inicializador BOF começa resolvendo os módulos e funções necessários. Os argumentos do script Aggressor são resolvidos. Um ponteiro para uma estrutura contendo os argumentos e endereços de funções é passado para a função InputHandler no shellcode HVNC. Ele usa BeaconInjectProcess para executar o shellcode, o que significa que o comportamento pode ser personalizado em um perfil Malleable C2 ou com BOFs de injeção de processos. Você poderia modificar o Hidden Desktop para atingir processos remotos, mas isso não é suportado atualmente. Isso é feito para que o BOF possa sair e o shellcode HVNC continue em execução.
InputHandler cria um novo pipe nomeado para o Beacon se conectar. Uma vez que uma conexão foi estabelecida, a desktop especificada é aberta (OpenDesktopA) ou criada (CreateDesktopA). Um novo socket é estabelecido através de um encaminhamento de porta reverso (rportfwd) para o servidor HVNC. O manipulador de entrada cria uma nova thread para a função DesktopHandler descrita abaixo. Esta thread receberá entrada de mouse e teclado do servidor HVNC e a encaminhará para a desktop.
O BOF HiddenDesktop foi testado usando example.profile nas seguintes versões/arquiteturas do Windows:
DesktopHandler estabelece uma conexão de socket adicional para o servidor HVNC através do encaminhamento de porta reverso. Esta thread monitorará janelas em busca de alterações e as encaminhará para o servidor HVNC.