Skip to main content

Como prevenir ataques Trojan Source com Snyk Code

Escrito por

Frank Fischer

blog feature trojan source unicode

17 de novembro de 2021

0 minutos de leitura

No 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.

A tela do Snyk Code destaca o nome de uma função JavaScript que contém caracteres UTF-8 potencialmente confundíveis, com uma pontuação de 361.
Aviso do Snyk Code sobre TrojanSourceBidiControl, exibindo código Go e uma mensagem sobre caracteres de controle bidirecional que podem ocultar a semântica do código.

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.

Leia mais

Blog

Modelos de ponta encontraram as vulnerabilidades. Só o atacante encontrou as cadeias.

A análise estática encontrou as falhas, mas só os testes de ataque em aplicações ativas provaram como elas poderiam ser encadeadas para causar invasões. Uma comparação entre Evo COS, Claude Security e Claude Code Security.

feature insights context
Blog

Os ataques autônomos já chegaram. A defesa precisa acompanhar o ritmo.

Os atacantes autônomos estão reduzindo o tempo disponível para a defesa. Saiba como a descoberta, a correção, a validação e a prevenção contínuas ajudam as equipes de segurança a acompanhar esse ritmo.

Blog

Por que agentes de programação com IA continuam criando falhas de controle de acesso

Agentes de programação com IA podem gerar uma lógica de autorização que compila e passa pela revisão, mas permite que um tenant acesse os dados de outro. Saiba por que é difícil detectar falhas de controle de acesso e como evitá-las.