Invocar-Obfuscation é um PowerShell v2.0 + comando PowerShell compatível e obfuscator script.
Propósito
Os atacantes e malwares começaram a usar técnicas de ofuscação extremamente básicas para ocultar a maioria do comando dos argumentos de linha de comando do powershell.exe. Desenvolvi essa ferramenta para ajudar o Blue Team a simular comandos ofuscados com base no que sei atualmente ser sintaticamente possível no PowerShell 2.0-5.0, para que eles possam testar suas capacidades de detecção dessas técnicas.
O único propósito da ferramenta é quebrar quaisquer suposições que nós, como defensores, possamos ter sobre como os comandos do PowerShell podem aparecer na linha de comando. Minha esperança é que ela encoraje a equipe azul a procurar Indicadores de Ofuscação na linha de comando, além de atualizar o log do PowerShell para incluir o log de Módulo, ScriptBlock e Transcrição, pois essas fontes simplificam a maioria dos aspectos das técnicas de ofuscação geradas por essa ferramenta. .
Uso
Embora todas as camadas de ofuscação tenham sido criadas em scripts separados, a maioria dos usuários considerará a Invoke-Obfuscationfunção a maneira mais fácil de explorar e visualizar as técnicas de ofuscação que essa estrutura suporta atualmente.

Instalação
O código fonte para Invoke-Obfuscation está hospedado no Github, e você pode fazer o download, bifurcar e revisá-lo deste repositório ( https://github.com/danielbohannon/Invoke-Obfuscation ). Por favor, relate problemas ou solicitações de recursos através do bug tracker do Github associado a este projeto.
Para instalar:

Import-Module ./Invoke-Obfuscation.psd1
Invoke-Obfuscation

Licença
Invoke-Obfuscation é liberada sob alicença Apache 2.0.

Notas de versão
v1.0 – 2016-09-25 DerbyCon 6.0 (Louisville, Kentucky EUA): Lançamento público de Invoke-Ofuscação.
v1.1 – 2016-10-09 SANS DFIR Summit (Praga, República Tcheca): Adicionada a funcionalidade de reordenamento do operador em formato -f para todas as funções de ofuscação TOKEN aplicáveis. Também adicionou opções adicionais de sintaxe para definir valores de variáveis.
v1.2 – 2016-10-20 CODE BLUE (Tóquio, Japão): Adicionada ofuscação TOKEN do tipo (conversão direta de tipos com opções de ofuscação de string para o nome do tipo).
v1.3 – 2016-10-22 Hacktivity (Budapeste, Hungria): Adicionado dois novos LAUNCHERs: CLIP + e CLIP ++. Também foi adicionada sintaxe de conversão de caracteres adicionais (e mais simples) para todas as funções de ENCODING que não exigem For-EachObject /%.
v1.4 – 2016-10-28 BruCON (Ghent, Bélgica): Adicionada nova função BXOR ENCODING. Além disso, o caso randomizado aprimorado para todos os componentes de todas as funções ENCODING, bem como para sinalizadores de execução do PowerShell para todos os LAUNCHERs. Por fim, adicionei a opção -EP shorthand para -ExecutionPolicy a todos os LAUNCHERs, bem como a representação de inteiro opcional do sinalizador de execução do -WindowStyle PowerShell: Normal (0), Hidden (1), Minimized (2), Maximized (3).
v1.5 – 2016-11-04 Blue Hat (Redmond, Washington, EUA): Adicionado o WMIC LAUNCHER com alguma aleatoriedade dos argumentos da linha de comando da WMIC.
v1.6 – 2017-01-24 Blue Hat IL (Tel Aviv, Israel):

  • Funcionalidade CLI adicionada: Por exemplo, Invoke-Obfuscation -ScriptBlock {Write-Host ‘CLI FTW!’} -Command ‘Token \ All \ 1, Codificação \ 1, Launcher \ Stdin ++ \ 234, Clip’ -Quiet -NoExit
  • Funcionalidade UNDO adicionada para remover uma camada de ofuscação de cada vez.
  • Removido o ofuscamento de espaço em branco de Token \ All \ 1 para acelerar a ofuscação de scripts grandes.
  • Adicionada a saída Process Argument Tree para todos os lançadores para ajudar os defensores.
  • Funcionalidade de autodetecção do menu base adicionada para evitar a necessidade de usar BACK ou HOME: Por exemplo, se você executou o TOKEN em seguida ALL, então digite LAUNCHER e chegará ao menu LAUNCHER sem precisar digitar HOME ou BACK para voltar o menu inicial.
  • Adicionado a sintaxe multi-comando utilizada pela CLI e pelo modo interativo: Por exemplo, Token \ All \ 1, String \ 3, Codificação \ 5, Launcher \ Ps \ 234, Clip
  • Adicionado o recurso de regex a todos os comandos de menu e ofuscação: por exemplo, Token **, String [13], Codificação (1 | 6), Launcher. * [+] {2} \ 234, Clip
  • Adicionado funcionalidade de comando único OUT FILEPATH.
  • Adicionada a decodificação se a sintaxe powershell -enc for inserida como um valor SCRIPTBLOCK.
  • Adicionado alias ForEach a ForEach-Object /% randomized syntax options em todas as funções ENCODING.
  • Adicionadas as opções de sintaxe de subcadeia -Key -Ke -K KEY para Out-SecureStringCommand.ps1.
  • Adicionada randomização de caso mais completa para todas as funções de ofuscação de \ Home \ String.
  • Adicionado sinalizadores -ST / -STA (Single-Threaded Apartment) às funções de iniciador CLIP + e CLIP ++, uma vez que são necessários se estiverem sendo executados no PowerShell 2.0.
  • Adicionada a sintaxe Get-Item / GI / Item em todos os lugares onde o Get-ChildItem é usado para obter valores de variáveis.
  • Adicionada sintaxe de instanciação de variável Set-Item à função de ofuscação TYPE.
  • Adicionada sintaxe Invoke-Expression / IEX adicional usando variáveis ​​automáticas do PowerShell e concatenações de valores de variáveis ​​de ambiente na função Out-EncapsulatedInvokeExpression de Out-ObfuscatedStringCommand.ps1 e copiada para todas as funções de launchers, STRING e ENCODING para adicionar várias sintaxes de linha de comando para IEX.
  • Adicionadas duas novas sintaxes de JOIN para String \ Reverse e todas as opções de ofuscação de ENCODING:
  1. Adicionado [String] :: Join (”, $ string) Sintaxe de JOIN
  2. Adicionada a sintaxe JOIN da variável OFS (variável automática do separador de campo de saída)
  • Adicionadas mais duas sintaxes do SecureString ao Encoding \ 5:
  1. PtrToStringAnsi / SecureStringToGlobalAllocAnsi
  2. PtrToStringBSTR / SecureStringToBSTR
  • Adicionadas seis sintaxes alternativas de GetMember para vários membros do SecureString:
  1. PtrToStringAuto, ([Runtime.InteropServices.Marshal] .GetMembers () [3] .Name) .Invoke
  2. PtrToStringAuto, ([Runtime.InteropServices.Marshal] .GetMembers () [5] .Name) .Invoke
  3. PtrToStringUni, ([Runtime.InteropServices.Marshal] .GetMembers () [2] .Name) .Invoke
  4. PtrToStringUni, ([Runtime.InteropServices.Marshal] .GetMembers () [4] .Name) .Invoke
  5. PtrToStringAnsi, ([Runtime.InteropServices.Marshal] .GetMembers () [0] .Name) .Invoke
  6. PtrToStringAnsi, ([Runtime.InteropServices.Marshal] .GetMembers () [1] .Name) .Invoke
  • Atualizado Out-ObfuscatedTokenCommand.ps1 para que a ofuscação VARIÁVEL não encapsule variáveis ​​em $ {} se elas já estiverem encapsuladas (então $ {$ {var}} não acontecerá, pois isso causa erros).
  • Substituiu Invoke-Obfuscation.psm1 por Invoke-Obfuscation.psd1 (obrigado @Carlos_Perez).
  • Corrigidos vários bugs de ofuscação no nível TOKEN reportados por @cobbr_io e @IISResetMe.

v1.7 – 2017-03-03 nullcon (Goa, Índia):

  • Adicionado 3 novos LAUNCHERs: RUNDLL, RUNDLL ++ e MSHTA ++
  • Adicionadas sequências de variáveis ​​curinga ExecutionContext adicionais

v1.8 – 2017-07-27 Black Hat (Las Vegas, Nevada, EUA):

  • Adicionado 2 novas opções de ENCODING: Caracteres Especiais e Espaço em Branco

v1.8.1 – 2017-12-19:

  • Adicionado função COMPRESS para facilitar a conversão de scripts multi-line para um comando one-liner enquanto reduz drasticamente o comprimento do comando para fins de limitação de comprimento de linha de comando cmd.exe.

v1.8.2 – 2018-01-04:

  • Adicionado funções de ofuscação AST, que ofuscam manipulando a estrutura do AbstractSyntaxTree sem usar muitos caracteres especiais.
Download