SlideShare uma empresa Scribd logo
Reforçando a defesa em profundidade de projetos críticos
@phpvelhooeste
Murilo Chianfa
2024
Táticas de obfuscação de código em projetos PHP
Quem sou eu
● Desenvolvedor na
● Estudante do último período de
Sistemas de informação.
● Entusiasta em infraestrutura e segurança.
● Possuo algumas certificações como:
ZCPE, LPIC-3, CT-SEC, SEC+...
github.com/murilochianfa
linkedin.com/in/murilochianfa/
Agenda
01
04
02
05
03
06
Pra que serve?
Quando utilizar?
Obfuscação em linguagens
compiladas X interpretadas
Aplicando métodos de
obfuscação
Anti-debugging
Tamperproofing
Limite teórico atual
e o futuro
Soluções existentes no
mercado
Pra que serve?
Imagem dos coelhos no castelo
Obfuscação: tornar pouco compreensível, confundir, gerar o que não se pode entender.
Pra que serve?
OWASP MASVS (Mobile Application Security)
Quem precisa? Quando utilizar?
● Ambientes hostis
- Servidores de terceiros
- Usuários finais
● Softwares comerciais
- Revendedoras
● hackers
Artefato final
PHP Source Code
Machine Code
Compiladas X Interpretadas*
Compiladas X Interpretadas*
Source Code
Machine Code
CPU
Compiler
Source Code
Bytecode
CPU
PHP Compiler
Machine Code
JIT Compiler
Zend Engine
(IR)
Diferença
Compiladas X Interpretadas*
Source Code
Machine Code
CPU
Compiler
Source Code
Bytecode
CPU
PHP Compiler
Machine Code
JIT Compiler
Zend Engine
(IR)
Diferença
Artefato final = bytecode?
…
https://github.com/php/php-src/pull/6146
Artefato final = bytecode?
…
https://github.com/php/php-src/pull/6146
Visualizando o bytecode do PHP
*Facilmente revertido para um pseudo-código
Métodos de obfuscação
● Embaralhar variáveis de escopo
● Propagar constantes
● Inserção de código lixo
● Confusão no fluxo de execução
● Variação polimórfica
● Criptografia de strings
● Criptografia do código fonte
*Sim, propositalmente dificultar o entendimento
● Inline functions
● Codificação simples
● Criar ou modificar OpCodes (swoole-compiler)
● Remoção dos comentários
● Algoritmos metamórficos
● Limitar versões de execução
● Limitar extenções permitidas
Embaralhar variáveis de escopo
Fotinha do script normal
*embaralhar o nome das variáveis
*criar outras variáveis intermediárias
Propagar constantes
*propaga as constantes se possível
*descaracterizar o valor
Inline functions
* não ter um ponto único de falha em algorítmos importantes
Inserção de código lixo
Confusão no fluxo de execução
*rand
*mt_rand
*random_int
Variação polimórfica
*branch instructions
*jump instructions
*call instructions
Criptografia de strings
*necessita de uma extensão
sobrescrevendo o método de
parsing de strings
Criptografia do código fonte
*necessita de uma extensão
sobrescrevendo o método de
parsing de arquivos PHP
Utilizando extensões para criptografia
Utilizando extensões para criptografia
*vamos substituir a função zend_compile_file por
uma que consiga descriptografar o código fonte
Utilizando extensões para criptografia
Visualizando o bytecode após obfuscações
anti-disassembly,
anti-debugging e
anti-tamper
Bloquear carregamento de extensão em runtime
xdebug phpdbg / vld
Limitar extenções
Empacotar estaticamente com PHPMICRO
git clone https://github.com/php/php-src/ php-src && cd php-src
git clone https://github.com/easysoft/phpmicro sapi/micro
patch -p1 sapi/micro/patches/*
./buildconf --force
--disable-phpdbg --disable-all --enable-micro=all-static --enable-my-decrypt-extension
./configure
make micro
Limite teórico atual
@ithare - Client-Size. Programming Languages including resilience to reverse engineering
Limite teórico atual
@ithare - Client-Size. Programming Languages including resilience to reverse engineering
● ircmaxell/php-compiler
● ircmaxell/php-llvm
● VKCOM/kphp
AOT não é prioridade para o PHP*
https://github.com/php/php-src/issues/8203
(Ahead of time) Compiler
Source Code
Machine Code
CPU
Compiler
AOT
Soluções existentes atualmente
● Poucas disponíveis open-source
● Pouca documentação de como utilizar
● Algumas são simples variações de “base64_encode/base64_decode”
Variações de “base64_encode/base64_decode” são muito utilizadas por
atacantes para evadir detecções em transporte por rede
pk-fr/yakpro-po
● Open source, porém não é mantido atualmente.
● Suporta poucas versões: PHP 7.x.
● Possui uma boa documentação.
● Não criptografa o código fonte.
● Custo: ☆☆☆☆☆ (free)
● Segurança: ★☆☆☆☆
● Performance: ★★★★★
phpbolt
● Free, mas NÃO é open source!
● Suporta versões recentes: PHP 7.1 á PHP 8.3.
● Não possui uma boa documentação.
● Não obfusca o código fonte, somente criptografia.
● Custo: ☆☆☆☆☆ (free)
● Segurança: ★☆☆☆☆
● Performance: ★★★★★
Zend Guard
● Criado pela própria zend em 2010, mantido até 2015.
● Suporta poucas versões: PHP 4.x - PHP 5.6.
● Não é mantido desde 2015.
● Custo: ★★★★☆ (assinatura anual)
● Segurança: ★★☆☆☆ (possui decompilers)
● Performance: ★★★★☆
Source Guardian
● Criado em 2002, mantido até hoje (2024).
● Suporta versões atuais como: PHP 5.x, PHP 7.x, PHP 8.x.
● Releases rápidas para as novas versões do PHP.
● Possui extensões para builds TS do PHP.
● Custo: ★★★☆☆ (preço fixo por cada versão - lifetime)
● Segurança: ★★★★☆
● Performance: ★★★★☆
Ioncube
● Criado em 2002, mantido até hoje (2024).
● Suporta versões atuais como: PHP 5.x, PHP 7.x, PHP 8.x.
● Releases demoram para se adaptar às novas versões do PHP.
● Última versão suporta PHP 8.2.
● Possui um bom manual de usuário.
● Possui extensões para builds TS do PHP.
● Custo: ★★★☆☆ (preço fixo por cada versão)
● Segurança: ★★★★☆
● Performance: ★★★★★
Como utilizar tudo isso?
● Utilizar ferramentas prontas e consolidadas. (maior conforto)
● Criar as próprias ferramentas de obfuscação. (maior segurança)
● Adicionar um novo passo na sua pipeline:
*sempre antes dos testes finais
Pontos positivos Pontos negativos
● Lock in de versão.
● Logs de erro obfuscado.
● Pode piorar a performance.
● Não garante segurança absoluta!
● Maior resiliência contra
engenharia reversa.
● Prevenção de pirataria.
Obfuscação
Obrigado!
github.com/murilochianfa
linkedin.com/in/murilochianfa/

Mais conteúdo relacionado

Semelhante a Táticas de obfuscação de código em projetos PHP

TDC2018SP | Trilha Serveless - Pra que SERVErless?
TDC2018SP | Trilha Serveless - Pra que SERVErless?TDC2018SP | Trilha Serveless - Pra que SERVErless?
TDC2018SP | Trilha Serveless - Pra que SERVErless?
tdc-globalcode
 
Novidades PHP 7.4 e 8.0!
Novidades PHP 7.4 e 8.0!Novidades PHP 7.4 e 8.0!
Novidades PHP 7.4 e 8.0!
Marcos Marcolin
 
TDC2018SP | Trilha Modern Web - Blazor - C# rodando no navegador padrao, sem ...
TDC2018SP | Trilha Modern Web - Blazor - C# rodando no navegador padrao, sem ...TDC2018SP | Trilha Modern Web - Blazor - C# rodando no navegador padrao, sem ...
TDC2018SP | Trilha Modern Web - Blazor - C# rodando no navegador padrao, sem ...
tdc-globalcode
 
FISL11: Análise de binários ELF
FISL11: Análise de binários ELFFISL11: Análise de binários ELF
FISL11: Análise de binários ELF
Fernando Mercês
 
Seu framework é melhor pra quê?
Seu framework é melhor pra quê?Seu framework é melhor pra quê?
Seu framework é melhor pra quê?
Jaime Neto
 
Ferramentas Essenciais para Desenvolvedores de Plugins WordPress
Ferramentas Essenciais para Desenvolvedores de Plugins WordPressFerramentas Essenciais para Desenvolvedores de Plugins WordPress
Ferramentas Essenciais para Desenvolvedores de Plugins WordPress
Tiago Hillebrandt
 
Escalando uma plataforma poliglota - QConSP 17
Escalando uma plataforma poliglota - QConSP 17Escalando uma plataforma poliglota - QConSP 17
Escalando uma plataforma poliglota - QConSP 17
Leandro Moreira
 
Xdebug seus problemas acabaram - tdc floripa 2017
Xdebug   seus problemas acabaram - tdc floripa 2017Xdebug   seus problemas acabaram - tdc floripa 2017
Xdebug seus problemas acabaram - tdc floripa 2017
Vitor Mattos
 
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
tdc-globalcode
 
CEPUG 2 - Bem-vindo a Framework CodeIgniter
CEPUG 2 - Bem-vindo a Framework CodeIgniterCEPUG 2 - Bem-vindo a Framework CodeIgniter
CEPUG 2 - Bem-vindo a Framework CodeIgniter
Eric Silva
 
Composer dependency manager - TDC - POA 2017
Composer   dependency manager - TDC - POA 2017Composer   dependency manager - TDC - POA 2017
Composer dependency manager - TDC - POA 2017
Vitor Mattos
 
Confraria0day - 11º Edição - Jhonathan Davi
Confraria0day - 11º Edição - Jhonathan DaviConfraria0day - 11º Edição - Jhonathan Davi
Confraria0day - 11º Edição - Jhonathan Davi
Jhonathan Davi
 
Dicas para sua carreira de Desenvolvedor PHP
Dicas para sua carreira de Desenvolvedor PHPDicas para sua carreira de Desenvolvedor PHP
Dicas para sua carreira de Desenvolvedor PHP
Douglas V. Pasqua
 
Zend Framework 2 - Desenvolvimento Ágil Competente
Zend Framework 2 - Desenvolvimento Ágil CompetenteZend Framework 2 - Desenvolvimento Ágil Competente
Zend Framework 2 - Desenvolvimento Ágil Competente
Michael Cardoso
 
O que não fazer ao atualizar para o PHP 7 @ TDC SP 2018
O que não fazer ao atualizar para o PHP 7 @ TDC SP 2018 O que não fazer ao atualizar para o PHP 7 @ TDC SP 2018
O que não fazer ao atualizar para o PHP 7 @ TDC SP 2018
Gabriel Machado
 
Metasploit Framework: Software Livre para PoC de Vulnerabilidades
Metasploit Framework: Software Livre para PoC de VulnerabilidadesMetasploit Framework: Software Livre para PoC de Vulnerabilidades
Metasploit Framework: Software Livre para PoC de Vulnerabilidades
Luiz Vieira .´. CISSP, OSCE, GXPN, CEH
 
Composer dependency manager
Composer   dependency managerComposer   dependency manager
Composer dependency manager
Vitor Mattos
 
WordCamp SP 2019 - PeachPie unindo Php com C# .Net Core
WordCamp SP 2019 - PeachPie unindo Php com C# .Net CoreWordCamp SP 2019 - PeachPie unindo Php com C# .Net Core
WordCamp SP 2019 - PeachPie unindo Php com C# .Net Core
Vanessa Valle
 
Django: desenvolvendo aplicações web de maneira simples e rápida!
Django: desenvolvendo aplicações web de maneira simples e rápida!Django: desenvolvendo aplicações web de maneira simples e rápida!
Django: desenvolvendo aplicações web de maneira simples e rápida!
Felipe Queiroz
 
Evolução do .NET Framework e do Visual Basic
Evolução do .NET Framework e do Visual BasicEvolução do .NET Framework e do Visual Basic
Evolução do .NET Framework e do Visual Basic
Ricardo Guerra Freitas
 

Semelhante a Táticas de obfuscação de código em projetos PHP (20)

TDC2018SP | Trilha Serveless - Pra que SERVErless?
TDC2018SP | Trilha Serveless - Pra que SERVErless?TDC2018SP | Trilha Serveless - Pra que SERVErless?
TDC2018SP | Trilha Serveless - Pra que SERVErless?
 
Novidades PHP 7.4 e 8.0!
Novidades PHP 7.4 e 8.0!Novidades PHP 7.4 e 8.0!
Novidades PHP 7.4 e 8.0!
 
TDC2018SP | Trilha Modern Web - Blazor - C# rodando no navegador padrao, sem ...
TDC2018SP | Trilha Modern Web - Blazor - C# rodando no navegador padrao, sem ...TDC2018SP | Trilha Modern Web - Blazor - C# rodando no navegador padrao, sem ...
TDC2018SP | Trilha Modern Web - Blazor - C# rodando no navegador padrao, sem ...
 
FISL11: Análise de binários ELF
FISL11: Análise de binários ELFFISL11: Análise de binários ELF
FISL11: Análise de binários ELF
 
Seu framework é melhor pra quê?
Seu framework é melhor pra quê?Seu framework é melhor pra quê?
Seu framework é melhor pra quê?
 
Ferramentas Essenciais para Desenvolvedores de Plugins WordPress
Ferramentas Essenciais para Desenvolvedores de Plugins WordPressFerramentas Essenciais para Desenvolvedores de Plugins WordPress
Ferramentas Essenciais para Desenvolvedores de Plugins WordPress
 
Escalando uma plataforma poliglota - QConSP 17
Escalando uma plataforma poliglota - QConSP 17Escalando uma plataforma poliglota - QConSP 17
Escalando uma plataforma poliglota - QConSP 17
 
Xdebug seus problemas acabaram - tdc floripa 2017
Xdebug   seus problemas acabaram - tdc floripa 2017Xdebug   seus problemas acabaram - tdc floripa 2017
Xdebug seus problemas acabaram - tdc floripa 2017
 
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
 
CEPUG 2 - Bem-vindo a Framework CodeIgniter
CEPUG 2 - Bem-vindo a Framework CodeIgniterCEPUG 2 - Bem-vindo a Framework CodeIgniter
CEPUG 2 - Bem-vindo a Framework CodeIgniter
 
Composer dependency manager - TDC - POA 2017
Composer   dependency manager - TDC - POA 2017Composer   dependency manager - TDC - POA 2017
Composer dependency manager - TDC - POA 2017
 
Confraria0day - 11º Edição - Jhonathan Davi
Confraria0day - 11º Edição - Jhonathan DaviConfraria0day - 11º Edição - Jhonathan Davi
Confraria0day - 11º Edição - Jhonathan Davi
 
Dicas para sua carreira de Desenvolvedor PHP
Dicas para sua carreira de Desenvolvedor PHPDicas para sua carreira de Desenvolvedor PHP
Dicas para sua carreira de Desenvolvedor PHP
 
Zend Framework 2 - Desenvolvimento Ágil Competente
Zend Framework 2 - Desenvolvimento Ágil CompetenteZend Framework 2 - Desenvolvimento Ágil Competente
Zend Framework 2 - Desenvolvimento Ágil Competente
 
O que não fazer ao atualizar para o PHP 7 @ TDC SP 2018
O que não fazer ao atualizar para o PHP 7 @ TDC SP 2018 O que não fazer ao atualizar para o PHP 7 @ TDC SP 2018
O que não fazer ao atualizar para o PHP 7 @ TDC SP 2018
 
Metasploit Framework: Software Livre para PoC de Vulnerabilidades
Metasploit Framework: Software Livre para PoC de VulnerabilidadesMetasploit Framework: Software Livre para PoC de Vulnerabilidades
Metasploit Framework: Software Livre para PoC de Vulnerabilidades
 
Composer dependency manager
Composer   dependency managerComposer   dependency manager
Composer dependency manager
 
WordCamp SP 2019 - PeachPie unindo Php com C# .Net Core
WordCamp SP 2019 - PeachPie unindo Php com C# .Net CoreWordCamp SP 2019 - PeachPie unindo Php com C# .Net Core
WordCamp SP 2019 - PeachPie unindo Php com C# .Net Core
 
Django: desenvolvendo aplicações web de maneira simples e rápida!
Django: desenvolvendo aplicações web de maneira simples e rápida!Django: desenvolvendo aplicações web de maneira simples e rápida!
Django: desenvolvendo aplicações web de maneira simples e rápida!
 
Evolução do .NET Framework e do Visual Basic
Evolução do .NET Framework e do Visual BasicEvolução do .NET Framework e do Visual Basic
Evolução do .NET Framework e do Visual Basic
 

Táticas de obfuscação de código em projetos PHP

  • 1. Reforçando a defesa em profundidade de projetos críticos @phpvelhooeste Murilo Chianfa 2024 Táticas de obfuscação de código em projetos PHP
  • 2. Quem sou eu ● Desenvolvedor na ● Estudante do último período de Sistemas de informação. ● Entusiasta em infraestrutura e segurança. ● Possuo algumas certificações como: ZCPE, LPIC-3, CT-SEC, SEC+... github.com/murilochianfa linkedin.com/in/murilochianfa/
  • 3. Agenda 01 04 02 05 03 06 Pra que serve? Quando utilizar? Obfuscação em linguagens compiladas X interpretadas Aplicando métodos de obfuscação Anti-debugging Tamperproofing Limite teórico atual e o futuro Soluções existentes no mercado
  • 4. Pra que serve? Imagem dos coelhos no castelo Obfuscação: tornar pouco compreensível, confundir, gerar o que não se pode entender.
  • 5. Pra que serve? OWASP MASVS (Mobile Application Security)
  • 6. Quem precisa? Quando utilizar? ● Ambientes hostis - Servidores de terceiros - Usuários finais ● Softwares comerciais - Revendedoras ● hackers
  • 7. Artefato final PHP Source Code Machine Code Compiladas X Interpretadas*
  • 8. Compiladas X Interpretadas* Source Code Machine Code CPU Compiler Source Code Bytecode CPU PHP Compiler Machine Code JIT Compiler Zend Engine (IR) Diferença
  • 9. Compiladas X Interpretadas* Source Code Machine Code CPU Compiler Source Code Bytecode CPU PHP Compiler Machine Code JIT Compiler Zend Engine (IR) Diferença
  • 10. Artefato final = bytecode? … https://github.com/php/php-src/pull/6146
  • 11. Artefato final = bytecode? … https://github.com/php/php-src/pull/6146
  • 12. Visualizando o bytecode do PHP *Facilmente revertido para um pseudo-código
  • 13. Métodos de obfuscação ● Embaralhar variáveis de escopo ● Propagar constantes ● Inserção de código lixo ● Confusão no fluxo de execução ● Variação polimórfica ● Criptografia de strings ● Criptografia do código fonte *Sim, propositalmente dificultar o entendimento ● Inline functions ● Codificação simples ● Criar ou modificar OpCodes (swoole-compiler) ● Remoção dos comentários ● Algoritmos metamórficos ● Limitar versões de execução ● Limitar extenções permitidas
  • 14. Embaralhar variáveis de escopo Fotinha do script normal *embaralhar o nome das variáveis *criar outras variáveis intermediárias
  • 15. Propagar constantes *propaga as constantes se possível *descaracterizar o valor
  • 16. Inline functions * não ter um ponto único de falha em algorítmos importantes
  • 18. Confusão no fluxo de execução *rand *mt_rand *random_int
  • 19. Variação polimórfica *branch instructions *jump instructions *call instructions
  • 20. Criptografia de strings *necessita de uma extensão sobrescrevendo o método de parsing de strings
  • 21. Criptografia do código fonte *necessita de uma extensão sobrescrevendo o método de parsing de arquivos PHP
  • 23. Utilizando extensões para criptografia *vamos substituir a função zend_compile_file por uma que consiga descriptografar o código fonte
  • 25. Visualizando o bytecode após obfuscações
  • 27. Bloquear carregamento de extensão em runtime xdebug phpdbg / vld Limitar extenções
  • 28. Empacotar estaticamente com PHPMICRO git clone https://github.com/php/php-src/ php-src && cd php-src git clone https://github.com/easysoft/phpmicro sapi/micro patch -p1 sapi/micro/patches/* ./buildconf --force --disable-phpdbg --disable-all --enable-micro=all-static --enable-my-decrypt-extension ./configure make micro
  • 29. Limite teórico atual @ithare - Client-Size. Programming Languages including resilience to reverse engineering
  • 30. Limite teórico atual @ithare - Client-Size. Programming Languages including resilience to reverse engineering
  • 31. ● ircmaxell/php-compiler ● ircmaxell/php-llvm ● VKCOM/kphp AOT não é prioridade para o PHP* https://github.com/php/php-src/issues/8203 (Ahead of time) Compiler Source Code Machine Code CPU Compiler AOT
  • 32. Soluções existentes atualmente ● Poucas disponíveis open-source ● Pouca documentação de como utilizar ● Algumas são simples variações de “base64_encode/base64_decode” Variações de “base64_encode/base64_decode” são muito utilizadas por atacantes para evadir detecções em transporte por rede
  • 33. pk-fr/yakpro-po ● Open source, porém não é mantido atualmente. ● Suporta poucas versões: PHP 7.x. ● Possui uma boa documentação. ● Não criptografa o código fonte. ● Custo: ☆☆☆☆☆ (free) ● Segurança: ★☆☆☆☆ ● Performance: ★★★★★
  • 34. phpbolt ● Free, mas NÃO é open source! ● Suporta versões recentes: PHP 7.1 á PHP 8.3. ● Não possui uma boa documentação. ● Não obfusca o código fonte, somente criptografia. ● Custo: ☆☆☆☆☆ (free) ● Segurança: ★☆☆☆☆ ● Performance: ★★★★★
  • 35. Zend Guard ● Criado pela própria zend em 2010, mantido até 2015. ● Suporta poucas versões: PHP 4.x - PHP 5.6. ● Não é mantido desde 2015. ● Custo: ★★★★☆ (assinatura anual) ● Segurança: ★★☆☆☆ (possui decompilers) ● Performance: ★★★★☆
  • 36. Source Guardian ● Criado em 2002, mantido até hoje (2024). ● Suporta versões atuais como: PHP 5.x, PHP 7.x, PHP 8.x. ● Releases rápidas para as novas versões do PHP. ● Possui extensões para builds TS do PHP. ● Custo: ★★★☆☆ (preço fixo por cada versão - lifetime) ● Segurança: ★★★★☆ ● Performance: ★★★★☆
  • 37. Ioncube ● Criado em 2002, mantido até hoje (2024). ● Suporta versões atuais como: PHP 5.x, PHP 7.x, PHP 8.x. ● Releases demoram para se adaptar às novas versões do PHP. ● Última versão suporta PHP 8.2. ● Possui um bom manual de usuário. ● Possui extensões para builds TS do PHP. ● Custo: ★★★☆☆ (preço fixo por cada versão) ● Segurança: ★★★★☆ ● Performance: ★★★★★
  • 38. Como utilizar tudo isso? ● Utilizar ferramentas prontas e consolidadas. (maior conforto) ● Criar as próprias ferramentas de obfuscação. (maior segurança) ● Adicionar um novo passo na sua pipeline: *sempre antes dos testes finais
  • 39. Pontos positivos Pontos negativos ● Lock in de versão. ● Logs de erro obfuscado. ● Pode piorar a performance. ● Não garante segurança absoluta! ● Maior resiliência contra engenharia reversa. ● Prevenção de pirataria. Obfuscação