Skip to main content

5 práticas recomendadas de segurança para adotar assistentes de código com IA generativa, como o GitHub Copilot

blog-feature-ai-lilac

5 de março de 2024

0 minutos de leitura

Há pouco tempo, a IA era vista como uma ideia futurista que parecia coisa de filme de ficção científica. Filmes como Ela e Ex Machina: Instinto Artificial já nos alertaram que a IA poderia ser uma caixa de Pandora que, uma vez aberta, teria consequências inesperadas. Desde então, houve grandes mudanças, principalmente devido à acessibilidade e adoção do ChatGPT. Em maio deste ano, uma pesquisa da Gartner com executivos mostrou que 89% das organizações estavam investigando ou implementando IA generativa. Outro relatório da Gartner do mesmo período prevê que, até 2025, mais de 80% do código em desenvolvimento de produtos será gerado por IA.

A IA generativa oferece muitos benefícios aos desenvolvedores, como os assistentes de codificação baseados em IA (por exemplo, o GitHub Copilot, o Amazon CodeWhisperer e o ChatGPT da OpenAI) para aumentar a produtividade. No entanto, por mais poderosas e inovadoras que sejam, essas ferramentas de IA ainda são propensas a erros e alucinações e devem ser usadas apenas para complementar, e não substituir, os desenvolvedores. Portanto, para garantir o uso seguro de ferramentas de codificação baseada em IA generativa e inovar sem receios, você deve implementar medidas como a atenta validação humana do código gerado por IA e ferramentas de segurança e proteção, entre outras. Veja a seguir como adotar com segurança ferramentas de complementação de código baseada em IA (como o Copilot) aplicando estas cinco práticas recomendadas.

Prática 1: inclua sempre um humano no processo

A ausência (ou insuficiência) de verificações e validações humanas é um erro clássico na adoção de ferramentas de código baseadas em IA generativa. Como mencionamos acima, essas ferramentas apenas auxiliam os desenvolvedores e não são infalíveis. Eles devem manter os hábitos seguros de antes da implementação das ferramentas de codificação orientada por IA e continuar verificando cuidadosamente o código escrito por eles próprios ou pela IA.

Pense na IA como um desenvolvedor inexperiente que, por acaso, consegue ler milhares de discussões do Stack Overflow de uma vez. Você jamais colocaria o código de um novo desenvolvedor em produção sem revisão. Seguindo essa lógica, não deixe que a velocidade da IA faça você pensar que ela é mais inteligente do que realmente é.

Além dos benefícios do código gerado por IA, as equipes devem ser orientadas sobre os riscos desse código. As revisões regulares de código devem fazer parte das práticas internas de desenvolvimento de software. Valide, teste e corrija no IDE. Esses hábitos devem estar incorporados nas políticas e procedimentos da empresa. Além disso, é preciso realizar treinamentos regulares para garantir que as equipes compreendam a importância dessas práticas e implementem as revisões de código necessárias de forma adequada.

Prática 2: verifique o código da IA no IDE com uma ferramenta de segurança separada e imparcial

Essas duas práticas são inseparáveis. Em primeiro lugar, para reconhecer integralmente o impulso que a IA oferece aos desenvolvedores, você não pode atrasá-los com uma revisão de segurança tradicional. Os desenvolvedores já são bem mais numerosos que os profissionais de segurança, o que leva as equipes a adotarem práticas de segurança desde o início (shift left). Com o aumento da produção dos desenvolvedores proporcionado pela IA, o volume de código vulnerável criado também cresce. Antecipar o tratamento da segurança não é uma escolha, é uma necessidade. A maneira mais fácil de fazer isso é incorporar a verificação de segurança diretamente no IDE. O código é verificado no momento em que é criado e as vulnerabilidades são capturadas proativamente, em vez de serem detectadas de modo reativo após sua proliferação no pipeline de desenvolvimento.

Em segundo lugar, essa verificação deve ser feita por uma ferramenta de segurança diferente da usada para criar o código. É por esse mesmo motivo que você tem equipes de desenvolvimento e segurança separadas. Quando a equipe que cria o código é a mesma que o protege, muitas vulnerabilidades passam despercebidas. A segurança é uma disciplina complexa e diferente do desenvolvimento. 

A IA usada pela ferramenta que cria o código foi treinada em código funcional para escrever código funcional. Já uma ferramenta de segurança criada especificamente para proteger o código é treinada apenas com dados de segurança para detectar e corrigir com confiabilidade esse tipo de problemas. Além disso, para que as correções de segurança não criem bugs em outras partes, as ferramentas de segurança precisam entender todo o contexto do aplicativo e não apenas o trecho de código verificado. É por isso que o Snyk Code usa IA simbólica baseada em regras para verificar previamente as correções sugeridas pelo nosso LLM. Desse modo, somente as opções que não geram problemas adicionais são oferecidas aos usuários. 

Com a IA, você precisará de duas ferramentas (uma para criar, outra para proteger), da mesma forma que você tem duas equipes diferentes (desenvolvimento e segurança). E ambas as ferramentas devem entender o contexto completo dos aplicativos para que você não tenha trechos de código que só fazem sentido isoladamente.

Prática 3: valide o código de terceiros

Em média, 70% do código de um aplicativo é código aberto. Isso significa que 70% do seu aplicativo foi criado e protegido por alguém que não está na sua empresa e que não pode ser responsabilizado quando uma vulnerabilidade se torna uma brecha para malfeitores em busca de dados de clientes.

Quando os desenvolvedores usam dependências de terceiros, é fundamental verificá-las com uma ferramenta de análise de composição de software (SCA) para determinar se são seguras. As ferramentas de SCA encontram pacotes vulneráveis, relatam como é a vulnerabilidade (tipo, gravidade etc.) e sugerem caminhos de correção.

O código criado por IA também tem dependências de terceiros. Lembra? A IA é apenas mais um desenvolvedor. Um que, por acaso, cria código com velocidade incrível. As dependências desse código também precisam ser verificadas, principalmente quando você considera que uma ferramenta de IA baseada em LLM sempre estará um pouco defasada em relação às últimas descobertas e lançamentos de pacotes de terceiros. A IA precisa da SCA. Pensando nisso, recomendamos que você sempre verifique manualmente as bibliotecas de código aberto recomendadas pela IA e use ferramentas como o Snyk Open Source para efetuar o teste manual dessas bibliotecas.

Prática 4: automatize os testes em todas as equipes e projetos

Sem a automação, há uma boa chance de que os testes não aconteçam. A automatização é uma prática recomendada tão básica que pode ser vista praticamente em todos os lugares, como administradores de Unix que criam trabalhos de cron, equipes de QA que implementam testes automatizados e equipes de DevOps que desenvolvem amplas infraestruturas conectadas com scripts de Python. Além de facilitar a vida, a automação impede o esquecimento de alguma tarefa.

Implemente ferramentas de segurança que protejam automaticamente os aplicativos a partir do CI/CDe nos fluxos de trabalho que as equipes já usam.

Prática 5: proteja sua propriedade intelectual

Ao implementar políticas sobre o uso de ferramentas de IA, é extremamente importante que você não permita que as ferramentas aprendam com seu código proprietário. Em 2023, vimos a Samsung banir o uso do ChatGPT depois que seus dados proprietários foram vazados durante um treinamento baseado em uso. A última coisa que você quer é que sua vantagem competitiva seja entregue como código sugerido para desenvolvedores que trabalham em outra empresa do seu setor. 

Essa proteção é um pouco mais difícil de impor usando tecnologia. Portanto, é extremamente importante que suas políticas de uso de IA estejam bem documentadas e suas equipes bem treinadas (com uso permitido, práticas obrigatórias e possíveis consequências claramente descritas). Além disso, considere que todos os dados inseridos em um LLM serão usados no treinamento do modelo. Forneça ao LLM apenas a quantidade mínima de informações (nenhuma delas confidencial) necessária para fazer o trabalho. Considere a implementação de verificações de entrada e saída para limpar as entradas de usuários e saídas de LLMs.

Use assistentes de codificação baseados em IA de forma segura

Não se iluda. Os assistentes de codificação baseados em IA são o futuro. Suas equipes terão uma agilidade inédita e criarão mais código do que nunca. Cabe a você garantir que os aplicativos lançados sejam seguros. Você precisará das políticas corretas, do treinamento correto e, acima de tudo, das ferramentas de segurança corretas para assegurar essa agilidade. É aqui que a Snyk pode ajudar.

Respaldada por uma inteligência líder do setor e IA híbrida com participação de especialistas humanos, a plataforma de segurança para desenvolvedores da Snyk verifica o código durante a criação (por humanos ou IA) e fornece recomendações de correção com um clique diretamente no IDE, evitando a perda de agilidade dos desenvolvedores e a sobrecarga das equipes de segurança. 

Conte com o apoio da Snyk para usar código seguro gerado por IA. Agende uma demonstração com um especialista ainda hoje para ver como a Snyk pode ser o copiloto de segurança que o Copilot precisa.