PowerShell: contornando a detecção via um -EncodedCommand não padrão

A maioria das ferramentas de detecção procura a string -enc na linha de comando, às vezes -e e às vezes o -EncodedCommand completo. Mas o PowerShell não trata esse sinalizador como uma palavra. Ele o trata como um nome de parâmetro, aceita qualquer prefixo que consiga resolver de forma inequívoca, ignora maiúsculas e minúsculas e aceita certos caracteres no lugar do hífen inicial.
O que exatamente o PowerShell aceita Se você codificar um comando inofensivo e passá-lo ao PowerShell usando diferentes grafias do sinalizador, o PowerShell 7.6.6 aceita o seguinte: -e, -ec, -en, -enc, -enco, -encod, -encode, -encoded, -encodedc, -EncodedCommand — em qualquer combinação de letras maiúsculas e minúsculas. O PowerShell também aceita /enc, --enc e enc precedido por um travessão tipográfico: um curto (travessão meia-risca), um longo (travessão eme) ou uma barra horizontal. Três outros caracteres semelhantes a travessões são rejeitados: o travessão de figura, o hífen Unicode e o sinal de menos. Grafias mais longas que o nome, como -encodedcommandx, também são rejeitadas.
Os travessões importam. Uma linha de comando copiada de um documento, de uma mensagem de chat ou de uma isca de phishing pode adquirir travessões tipográficos ao longo do caminho. Uma regra de detecção que procura um espaço seguido de um hífen perderá essas variantes.
Como isso é usado em um ataque
  1. Preparação do payload. O comando é codificado como esperado por -EncodedCommand: primeiro em UTF-16LE, depois em base64. O payload costuma ser codificado novamente: o comando decodificado passa uma segunda string base64 para FromBase64String, e o resultado é passado para Invoke-Expression.
  2. Ofuscação do lançamento. Em vez do sinalizador completo, a linha de comando usa um prefixo aceito ou uma variante com barra, hífen duplo ou travessão tipográfico. Para o PowerShell, isso resolve para o mesmo parâmetro; para a detecção, é uma string diferente.
  3. Execução. O processo inicia normalmente, sem erros. O comando codificado é executado mesmo que uma regra adaptada para -enc não o tenha detectado.
O que um atacante precisa saber • Versão do PowerShell. Os testes foram realizados no PowerShell 7.6.6. O Windows PowerShell 5.1, que ainda é amplamente usado por ferramentas de atacantes, precisa ser testado separadamente em seu próprio ambiente. • Comprimento do payload. A codificação aumenta o tamanho do comando: UTF-16 dobra o número de bytes, e base64 acrescenta outro terço. Um comando curto pode ficar visivelmente mais longo. • Registro em log. Se o registro de blocos de script estiver habilitado no host, o texto decodificado pode aparecer no evento 4104. Isso não elimina a ofuscação da linha de comando, mas facilita a inspeção do payload.
Fornecedor
Produto