Conheça as tecnologias avançadas por trás do Snyk Code
Frank Fischer
20 de outubro de 2021
0 minutos de leituraSnyk Code é a solução de testes de segurança estática de aplicações (SAST) da Snyk e traz tecnologias revolucionárias para esse campo. Ela se baseia em pesquisas e tecnologias desenvolvidas por uma empresa derivada da ETH (Zurique, Suíça), a DeepCode, que se uniu à Snyk no fim de 2020. Este artigo apresenta essas tecnologias e mostra como a Snyk contribui para a comunidade de código aberto, além de promover a colaboração com a comunidade acadêmica na área de análise estática de programas.
Como funciona o Snyk Code
O processo geral está ilustrado abaixo.

Tudo começa à esquerda, com o “Big Code”: um conjunto de treinamento formado por centenas de milhares de repositórios de código aberto e o histórico de alterações deles, abrangendo várias linguagens de programação. Primeiro, o código é analisado e transformado em representações intermediárias. O Snyk Code usa uma árvore sintática abstrata (AST) e um grafo de eventos (EG), que permitem uma análise sensível ao fluxo de dados e ao contexto. Você encontra mais detalhes nos artigos acadêmicos citados mais adiante. O EG consegue representar diversas linguagens de programação.
Em seguida, um solucionador lógico aplica regras de lógica à representação intermediária. Esse solucionador tem alguns aspectos notáveis. Primeiro, é proprietário e foi otimizado para essa tarefa com algoritmos de menor complexidade temporal do que os usados em solucionadores Datalog convencionais. Isso também contribui para um desempenho em tempo de execução de ponta. Por fim, por ser um sistema baseado em restrições, ele gera fatos semânticos que podem ser usados como entrada no processo de aprendizado orientado por especialistas.
Com o código aberto, o Snyk Code aproveita o conhecimento da comunidade global de desenvolvedores para identificar e resolver problemas de segurança. Ele também encontra combinações de fontes e destinos que, por exemplo, ainda não aparecem no conjunto de treinamento, mas podem representar uma ameaça. Além disso, é possível adicionar regras para exploits de dia zero mesmo quando ainda não há dados de treinamento disponíveis.
No processo de aprendizado, os engenheiros de segurança da Snyk trabalham com algoritmos de machine learning para gerar e manter a base de conhecimento. Eles também acrescentam informações para ajudar os desenvolvedores a entender e corrigir os problemas encontrados.
Em produção, o Snyk Code segue esse pipeline, mas não usa o código para aprender. Em vez disso, aplica a base de conhecimento e apresenta resultados precisos em minutos ou até segundos. E pronto! É assim que conseguimos tornar o Snyk Code uma solução SAST tão poderosa.
Comece a jogar Capture the Flag
Aprenda a resolver desafios de Capture the Flag assistindo à gravação sob demanda do nosso workshop virtual introdutório.
Participação em publicações e conferências acadêmicas
Além de desenvolver essa ferramenta SAST, a equipe por trás do Snyk Code participa ativamente, há muitos anos, de publicações em conferências importantes de machine learning e linguagens de programação, além de publicar diversas ferramentas acadêmicas para análise estática de programas.
Confira uma seleção de publicações e sistemas de pesquisa:
TFix: Aprendendo a corrigir erros de código com um Transformer de texto para texto — Berabi, B., He, J., Raychev, V. e Vechev, M., junho de 2021. TFix: Learning to Fix Coding Errors with a Text-to-Text Transformer. In Anais da 38ª Conferência Internacional sobre Machine Learning, PMLR 139 (pp. 780-791).
Aprendendo a encontrar problemas de nomenclatura com muito código e pouca supervisão — He, J., Lee, C.C., Raychev, V. e Vechev, M., junho de 2021. Learning to find naming issues with big code and small supervision. In Anais da 42ª Conferência Internacional ACM SIGPLAN sobre Projeto e Implementação de Linguagens de Programação (pp. 296-311).
Aprendizado não supervisionado de especificações de aliasing de APIs — Eberhardt, J., Steffen, S., Raychev, V. e Vechev, M., junho de 2019. Unsupervised learning of API aliasing specifications. In Anais da 40ª Conferência ACM SIGPLAN sobre Projeto e Implementação de Linguagens de Programação (pp. 745-759).
Inferência escalável de especificações de taint com muito código — Chibotaru, V., Bichsel, B., Raychev, V. e Vechev, M., junho de 2019. Scalable taint specification inference with big code. In Anais da 40ª Conferência ACM SIGPLAN sobre Projeto e Implementação de Linguagens de Programação (pp. 760-774).
Inferindo regras de APIs criptográficas a partir de alterações no código — Paletov, R., Tsankov, P., Raychev, V. e Vechev, M., 2018. Inferring crypto API rules from code changes. ACM SIGPLAN Notices, 53(4), pp.450-464.
Aprendendo um analisador estático a partir de dados — Bielik, P., Raychev, V. e Vechev, M., julho de 2017. Learning a static analyzer from data. In Conferência Internacional sobre Verificação Assistida por Computador (pp. 233-253). Springer, Cham.
Modelo probabilístico para código com árvores de decisão — Raychev, V., Bielik, P. e Vechev, M., 2016. Probabilistic model for code with decision trees. ACM SIGPLAN Notices, 51(10), pp.731-747.
PHOG: Modelo probabilístico para código — Bielik, P., Raychev, V. e Vechev, M., junho de 2016. PHOG: probabilistic model for code. In Conferência Internacional sobre Machine Learning (pp. 2933-2942). PMLR.
Aprendendo programas a partir de dados ruidosos — Raychev, V., Bielik, P., Vechev, M. e Krause, A., 2016. Learning programs from noisy data. ACM Sigplan Notices, 51(1), pp.761-774.
Autocompletar código com modelos estatísticos de linguagem — Raychev, V., Vechev, M. e Yahav, E., junho de 2014. Code completion with statistical language models. In Anais da 35ª Conferência ACM SIGPLAN sobre Projeto e Implementação de Linguagens de Programação (pp. 419-428).
Prevendo propriedades de programas a partir de “Big Code” — Raychev, V., Vechev, M. e Krause, A., 2015. Predicting program properties from" big code". ACM SIGPLAN Notices, 50(1), pp.111-124.
Desofuscação estatística de aplicativos Android — Bichsel, B., Raychev, V., Tsankov, P. e Vechev, M., outubro de 2016. Statistical deobfuscation of android applications. In Anais da Conferência ACM SIGSAC de 2016 sobre Segurança de Computadores e Comunicações (pp. 343-355).
DEBIN: Prevendo informações de depuração em binários sem símbolos — He, J., Ivanov, P., Tsankov, P., Raychev, V. e Vechev, M., outubro de 2018. Debin: Predicting debug information in stripped binaries. In Anais da Conferência ACM SIGSAC de 2018 sobre Segurança de Computadores e Comunicações (pp. 1667-1680).
Ferramentas disponíveis publicamente
Além disso, durante o desenvolvimento das tecnologias que estão por trás do Snyk Code, foram criadas e publicadas ferramentas de pesquisa. Veja a seguir uma visão geral dessas ferramentas.
Observação: A Snyk não é responsável por essas ferramentas, nem as mantém ou hospeda. Elas fazem parte de projetos de pesquisa dos quais membros da equipe da Snyk participaram.
JSNice
O JSNice desofusca programas JavaScript usando machine learning. Dezenas de milhares de programadores em todo o mundo usam a ferramenta.

Nice2Predict
O Nice2Predict é uma estrutura de código aberto eficiente e escalável para predição estruturada, que permite criar novos mecanismos estatísticos com mais rapidez.

DeGuard
O DeGuard reverte a ofuscação de layout de aplicativos Android. Analistas de segurança usam a ferramenta diariamente.

Para concluir
Como vimos, a equipe do Snyk Code está na vanguarda da pesquisa e contribui com a produção de artigos científicos, a orientação de estudantes e a participação em outros projetos científicos. Conheça os resultados desse trabalho na prática: inscreva-se hoje no Snyk Code.
Comece a jogar Capture the Flag
Aprenda a resolver desafios de Capture the Flag assistindo à gravação sob demanda do nosso workshop virtual introdutório.
