Como prevenir ataques Trojan Source com Snyk Code
Frank Fischer
17 de novembro de 2021
0 minutos de leituraNo início deste mês, um grupo de pesquisadores da Universidade de Cambridge publicou um artigo acadêmico, acompanhado de um site, sobre um novo tipo de vulnerabilidade potencial que pode surgir no código-fonte. Eles a chamaram de Trojan Source.
A ideia básica da vulnerabilidade é usar caracteres Unicode no código. Embora isso permita opções interessantes para nomes de variáveis ou comentários (por exemplo, usar emojis para expressar sentimentos nos comentários), infelizmente também possibilita ocultar semânticas potencialmente maliciosas no código, bem diante dos olhos humanos. Por exemplo, um invasor pode fazer o código parecer conter uma lógica de autenticação válida, enquanto, na realidade (ou para o compilador ou interpretador), ele executa uma ação completamente diferente. Ou o que parece ser código ativo, na verdade, são apenas comentários, que são ignorados durante a execução. Tudo isso é feito com o uso de caracteres Unicode para enganar o olho humano.
Se você se interessa pelos detalhes dessa vulnerabilidade, recomendamos conferir o site original ou o artigo. E, se quiser ver a vulnerabilidade em ação no JavaScript, meu colega Liran Tal escreveu um artigo no blog sobre como detectar e mitigar com eficácia ataques Trojan Source em bases de código JavaScript usando o ESLint.
Nesta publicação, vamos usar o Snyk Code para encontrar e corrigir o Trojan Source no código-fonte. Vamos lá!
“O Snyk Code consegue corrigir o Trojan Source?”
Essa foi a pergunta que recebemos no mesmo dia em que o site foi publicado (uma prova de como os clientes da Snyk costumam estar bem informados e conectados). Vou resumir a discussão interna que tivemos: depois de consultar a equipe, a primeira reação foi que (1) parecia um ataque viável à cadeia de suprimentos, mas menos provável no seu código original, pois exige acesso ao código-fonte, e (2) esse ataque funciona no nível sintático.
Observação: Como você pode ver no artigo do Liran, Trojan Source é um ataque no nível sintático; por isso, o ESLint ajuda quem desenvolve em JavaScript. Infelizmente, outros ecossistemas, como Java, Ruby, C# e outros, talvez não contem com novas ferramentas para mitigar esse vetor de ameaça. Isso torna o Snyk Code uma ferramenta ainda mais importante para incluir no seu arsenal.
Diante da reação que vimos na comunidade e dos pedidos dos nossos clientes, concordamos em adicionar regras para tratar problemas relacionados ao Trojan Source. Como não se trata de um problema de alta gravidade (sua visibilidade aumentou apenas por causa da repercussão recente na imprensa), não aceleramos uma correção; em vez disso, incluímos a tarefa no sprint atual. Mas não paramos por aí. Ao adicionar essa regra, também ampliamos a cobertura para uma categoria de vulnerabilidades relacionadas a caracteres UTF visualmente semelhantes. Por fim, garantimos que o conjunto de regras abrangesse todas as linguagens compatíveis com o Snyk Code.
Vale destacar que a equipe levou apenas 10 dias para desenvolver e lançar as regras para detectar Trojan Source e problemas relacionados em todas as linguagens compatíveis com o Snyk Code — sem nenhum processo acelerado, apenas no sprint atual. É um exemplo perfeito da agilidade do Snyk Code: decisão, desenvolvimento, testes em centenas de milhares de projetos em todas as linguagens compatíveis, otimização e lançamento em 10 dias. Também demonstra o poder do mecanismo do Snyk Code, aprimorado por aprendizado de máquina: em poucas horas de desenvolvimento, não só cobrimos o Trojan Source, como também tratamos alguns problemas relacionados.


O Snyk Code encontra Trojan Source e outras variantes perigosas
O Trojan Source provavelmente se manifestaria como um ataque à cadeia de suprimentos de código aberto, mas também poderia ser executado por meio de copiar e colar diretamente no código da aplicação (como mostra o artigo do Liran). Por isso, o Snyk Code inclui verificações para identificar problemas do tipo Trojan Source na sua base de código.
Observação: O Snyk também é uma ferramenta poderosa para proteger a cadeia de suprimentos de código aberto, permitindo monitorar e corrigir facilmente problemas relacionados à segurança das dependências e à conformidade com licenças.
Como mencionamos, a equipe levou alguns dias para desenvolver a detecção do Trojan Source, mas o Snyk Code consegue identificar mais variantes do ataque do que a maioria das outras ferramentas. Por exemplo, o Snyk Code não detecta apenas caracteres de controle bidirecional: também identifica caracteres UTF visualmente semelhantes usados em nomes de métodos e variáveis, que podem ocultar a verdadeira semântica do código. Isso significa que, hoje, o Snyk Code detecta um conjunto mais amplo de problemas descritos pelo Trojan Source do que qualquer outro verificador que conhecemos.
Observação: O Snyk Code é compatível com Java, JavaScript, TypeScript, PHP e Python, além de oferecer versões beta pública para C#, Ruby e Go. O Trojan Source pode atacar outras linguagens (por exemplo, scripts Bash), mas o Snyk Code não consegue analisar linguagens sem suporte.
Snyk Code: o calcanhar de Aquiles do Trojan Source
Como você pode ver acima, o Snyk Code oferece um mecanismo robusto, capaz de realizar uma ampla variedade de verificações. De modo geral, ele aprende com o conhecimento da comunidade global de desenvolvimento por meio de um algoritmo exclusivo, orientado por pessoas. Além disso, podemos reagir rapidamente às mudanças do mercado e a problemas em evolução, como o Trojan Source. Assim, o Snyk Code encontra não apenas o Trojan Source, mas também vulnerabilidades relacionadas, e conta com uma base de conhecimento que oferece precisão de ponta no setor. Os problemas são explicados com base no código-fonte original e acompanhados de orientações adicionais, incluindo exemplos de como projetos de código aberto resolveram problemas semelhantes, para ajudar quem desenvolve a entender e corrigir as falhas.
Tudo isso com velocidade incomparável e no conforto da sua IDE favorita. Ah, e você pode usar de graça — motivo mais do que suficiente para experimentar!
Proteja seu código com inteligência de ponta
Conheça toda a gama de recursos de análise estática (SAST) do Snyk Code em apenas 30 minutos.



