
Mangle é uma ferramenta que manipula aspectos de executáveis compilados (.exe ou DLL) para evitar detecção por EDRs.
Para ver a versão mais recente do Mangle ou enviar um problema, consulte https://github.com/Tylous/Mangle.
Autor: Tyl0us
Apresentado na Source Zero Con 2022
Mangle é uma ferramenta que manipula aspectos de executáveis compilados (.exe ou DLL). O Mangle pode remover strings conhecidas de Indicadores de Compromisso (IoC) e substituí-las por caracteres aleatórios, alterar o arquivo inflando o tamanho para evitar EDRs, e pode clonar certificados de assinatura de código de arquivos legítimos. Com isso, o Mangle ajuda carregadores a evadir scanners em disco e em memória.
Mangle foi desenvolvido em Golang.
O primeiro passo, como sempre, é clonar o repositório. Antes de compilar o Mangle, você precisará instalar as dependências. Para instalá-las, execute os seguintes comandos:
go get github.com/Binject/debug/pe
Depois compile
go build Mangle.go
Embora o Mangle seja escrito em Golang, muitos dos recursos são projetados para funcionar em arquivos executáveis de outras linguagens. No momento do lançamento, o único recurso específico do Golang é a parte de manipulação de strings.
./mangle -h
_____ .__
/ \ _____ ____ ____ | | ____
/ \ / \\__ \ / \ / ___\| | _/ __ \
/ Y \/ __ \| | \/ /_/ > |_\ ___/
\____|__ (____ /___| /\___ /|____/\___ >
\/ \/ \//_____/ \/
(@Tyl0us)
Usage of ./Mangle:
-C string
Path to the file containing the certificate you want to clone
-I string
Path to the orginal file
-M Edit the PE file to strip out Go indicators
-O string
The new file name
-S int
How many MBs to increase the file by
O Mangle pega o executável de entrada e procura por strings conhecidas que os produtos de segurança procuram ou alertam. Essas strings sozinhas não são o único ponto de detecção. Frequentemente, essas strings estão em conjunto com outros pontos de dados e peças de telemetria para detecção e prevenção. O Mangle encontra essas strings conhecidas e substitui os valores hexadecimais por valores aleatórios para removê-las. IMPORTANTE: O Mangle substitui exatamente o tamanho das strings que está manipulando. Ele não adiciona nem mais nem menos, pois isso criaria desalinhamentos e instabilidades no arquivo. O Mangle faz isso usando a opção de linha de comando -M.
Atualmente, o Mangle só funciona com arquivos Golang, mas com o tempo outras linguagens serão adicionadas. Se você conhecer alguma para outras linguagens, por favor abra um ticket de issue e as submeta.
Before
After
Praticamente todos os EDRs não conseguem escanear arquivos em disco ou em memória além de um certo tamanho. Isso simplesmente decorre do fato de que arquivos grandes demoram mais para serem revisados, escaneados ou monitorados. Os EDRs não querem impactar o desempenho ao diminuir a produtividade do usuário. O Mangle infla arquivos criando um preenchimento de bytes nulos (Zeros) no final do arquivo. Isso garante que nada dentro do arquivo seja afetado. Para inflar um executável, use a opção de linha de comando -S junto com o número de bytes que você deseja adicionar ao arquivo. Payloads grandes realmente não são mais um problema com a velocidade da internet atual, dito isso, não é recomendado criar um arquivo de 2 GB.
Com base em casos de teste em vários EDRs de espaço de usuário e kernel, é recomendado aumentar o tamanho em 95 a 100 megabytes. Como os fornecedores não verificam arquivos grandes, a atividade passa despercebida, resultando na execução bem-sucedida do shellcode.
O Mangle também contém a capacidade de pegar toda a cadeia e todos os atributos de um certificado de assinatura de código legítimo de um arquivo e copiá-lo para outro arquivo. Isso inclui a data de assinatura, contra-assinaturas e outros atributos mensuráveis.
Embora esse recurso possa parecer semelhante a outra ferramenta que desenvolvi, o Limelighter, a principal diferença entre os dois é que o Limelighter cria um certificado falso baseado em um domínio e o assina com a data e hora atuais, em vez de usar atributos válidos onde o timestamp é retirado do arquivo original. Esta opção pode usar arquivos DLL ou .exe para copiar usando a opção de linha de comando -C, junto com o caminho para o arquivo do qual você deseja copiar o certificado.