
Toolbox contendo notas de pesquisa e código PoC para weaponizar o DLR do .NET.
Caixa de ferramentas contendo notas de pesquisa e código PoC para weaponizar o DLR do .NET
| Script | Descrição |
|---|---|
Kukulkan | Uma versão reduzida do SILENTTRINITY, DLL e EXE em C# que incorporam um motor IPY. As comunicações são criptografadas e podem ser usadas com o CobaltStrike |
Invoke-JumpScare.ps1 | Executa shellcode usando um compilador Boolang embutido, nada toca no disco (pelo menos pelo que vi) e nenhuma chamada ao csc.exe é feita :) |
Invoke-IronPython.ps1 | Executa código IronPython usando o motor IPY embutido. Mesmo conceito do Invoke-JumpScare apenas usando IronPython. |
Invoke-ClearScript.ps1 | Executa JScript (ou VBScript) usando o motor ClearScript embutido |
SharpSnek.cs | Código C# que incorpora um motor IronPython e executa código IPY embutido. Hooka AppDomain.CurrentDomain.AssemblyResolve para resolver os Assemblies necessários em tempo de execução. |
runBoo.cs | Versão em C# do Invoke-JumpScare. Executa shellcode usando um compilador Boolang embutido. |
runBooAssemblyResolve.cs | Código C# que incorpora um compilador Boolang e executa código Boolang embutido. Hooka AppDomain.CurrentDomain.AssemblyResolve para resolver os Assemblies necessários em tempo de execução. |
minidump.boo | Script Boolang nativo para despejar memória usando MiniDumpWriteDump |
shellcode.boo | Script Boolang nativo que executa shellcode. Atualmente contém 3 técnicas diferentes (QueueUserAPC, CreateThread/WaitForSingleObject, WriteProcessMemory/CreateRemoteThread) |
Invoke-SSharp.ps1 | Executa SSharp a partir de um compilador embutido no PowerShell. A compilação não chama o csc.exe |
Invoke-Boolang.ps1 | Executa código Boo a partir de um compilador embutido. Também fornece soluções alternativas para alguns bugs que descobri quando o compilador Boolang é incorporado no PowerShell. |
Invoke-NeoLua.ps1 | Executa código Lua a partir de um compilador embutido no PowerShell. |
O .NET DLR é simplesmente maluco, ele permite que você faça coisas loucas como incorporar compiladores/motores dentro de outras linguagens .NET (por exemplo, PowerShell e C#) enquanto ainda permanece seguro em termos de Opsec e permanece na memória. No caso do IronPython, você pode até ter o que chamo de 'inception de motores': quer incorporar um motor IPY dentro de um motor IPY dentro de outro motor IPY? (yo dawg, ouvi dizer que você gosta de motores IPY...).
Do ponto de vista ofensivo, isso tem uma quantidade insana de flexibilidade e uma série de vantagens, para citar algumas:
Acesso imediato à API .NET, sem passar pelo PowerShell de forma alguma. Essencialmente, usar o DLR permite que você tenha todo o poder do PowerShell, mas sem o PowerShell e em uma linguagem que (geralmente) é mais fácil de programar (ex.: Python)
Quantidades loucas de reflexão/incorporação acontecendo o tempo todo, o que significa mais evasão.
Usando o DLR você sempre contorna o AMSI (se você instrumentar adequadamente seus payloads), não há necessidade de ofuscar, aplicar patches etc..
Todo o seu 'mal' pode ser codificado na linguagem do seu motor/compilador embutido. Se você fizer isso usando o PowerShell, o ScriptBlock Logging não vê nada, já que toda a mágica acontece no DLR.
Geralmente, todas as linguagens do DLR têm uma maneira de chamar métodos nativos, seja através da própria linguagem ou compilando dinamicamente C# (ex.: Add-Type do PowerShell).
Se você optar pelo primeiro método, nenhuma chamada ao csc.exe é feita e geralmente nada é gravado em disco, pois as linguagens geram tudo que é necessário em memória através de código IL.
Podemos ir "...tão baixo e tão alto quanto quisermos.." (@Op_nomad) e isso nos permite fazer todas as coisas boas que amamos (injetar shellcode, DLLs não gerenciadas, carregar PEs etc..)
Permite uma rápida re-ferramentação e weaponização de payloads. Nenhuma compilação manual é necessária.
Se você está interessado nisso, aqui estão algumas outras ferramentas que também tentam weaponizar o DLR:
Aviso justo, se você começar a ler estas coisas, vai te levar a uma toca de coelho infernal (com coelhos demônios reais).