BOFMask
O BOFMask é uma prova de conceito para mascarar a carga útil do Beacon do Cobalt Strike durante a execução de um arquivo de objeto Beacon (BOF). Normalmente, o Beacon é deixado exposto durante a execução do BOF. Se algum comportamento de um BOF fornecido pelo usuário acionar uma varredura de memória por um produto EDR, o Beacon provavelmente será detectado na memória. Desde a versão 4.7 do Cobalt Strike, os usuários podem fornecer uma máscara de dormir para ocultar o Beacon enquanto ele está dormindo, que é implementado como um BOF fornecido pelo usuário. Isso demonstra que é possível executar um BOF enquanto o Beacon estiver mascarado.
A implementação real disso é simples: uma função de configuração, GetBeaconBaseAddress, é usada para gerar uma chave e encontrar o endereço base do Beacon. O endereço base do Beacon é localizado subindo dois quadros de pilha para encontrar o endereço de retorno após o término da execução do BOF. Este será um endereço dentro da seção .text do Beacon, que podemos passar para a API do VirtualQuery para obter o endereço base da seção .text. Em seguida, uma simples máscara XOR é usada para ocultar o Beacon e a configuração de proteção de memória é alterada com a API VirtualProtect.