Skip to main content

A IA consegue escrever código seguro?

Escrito por

Frank Fischer

feature security

3 de maio de 2023

0 minutos de leitura

A IA está avançando em ritmo impressionante, com novas ferramentas e casos de uso sendo descobertos e anunciados toda semana, desde a escrita de poemas até a proteção de redes.

Pesquisadores ainda não sabem ao certo do que novos modelos de IA, como o GPT-4, são capazes. Isso levou nomes conhecidos, como Elon Musk e Steve Wozniak, além de pesquisadores da área, a pedir uma pausa de seis meses no treinamento de modelos mais poderosos, para que o foco possa se voltar ao desenvolvimento de protocolos de segurança e regulamentações. 

Uma das maiores preocupações em relação ao GPT-4 é que os pesquisadores ainda não sabem ao certo do que ele é capaz. Novas explorações de vulnerabilidades, técnicas de jailbreak e comportamentos emergentes serão descobertos com o tempo e são difíceis de evitar devido à natureza opaca dos LLMs. A OpenAI afirma isso em seu white paper do GPT-4:

A OpenAI implementou várias medidas e processos de segurança durante o desenvolvimento e a implantação do GPT-4, reduzindo sua capacidade de gerar conteúdo nocivo. Ainda assim, o GPT-4 pode continuar vulnerável a ataques adversariais, explorações de vulnerabilidades ou “jailbreaks”, e o conteúdo nocivo não é a única fonte de risco. O ajuste fino pode modificar o comportamento do modelo, mas as capacidades fundamentais do modelo pré-treinado, como o potencial de gerar conteúdo nocivo, permanecem latentes.

O GPT-4 acabou de ser lançado, mas já temos muitos dados sobre seu antecessor, o GPT-3, que impulsionava o ChatGPT. Desde o lançamento, o ChatGPT causou tanto alvoroço que outras gigantes da tecnologia, como Google e Adobe, também correram para marcar presença no mercado de IA.

De otimizar a produtividade à criação de conteúdo, o ChatGPT oferece uma ampla gama de recursos.  No entanto, há preocupações com o uso da ferramenta por desenvolvedores para gerar código, devido a questões de privacidade, riscos de cibersegurança e possíveis impactos na postura de segurança de aplicações. 

Infográfico que explica o ChatGPT, seus casos de uso, riscos de cibersegurança, exposição de dados de trabalhadores e estatísticas sobre código gerado por IA.

Riscos à privacidade e à propriedade intelectual ao usar ferramentas de IA para programar

Desde o lançamento, no fim do ano passado, consumidores e profissionais têm demonstrado preocupação com o ChatGPT e os riscos à privacidade envolvidos no uso de dados internos de empresas.

Um relatório recente da Cyberhaven revelou que 3,1% dos trabalhadores já inseriram informações confidenciais no ChatGPT, evidenciando a importância de criar políticas para orientar o uso interno de ferramentas de IA. Recentemente, a Samsung teve que emitir um alerta interno sobre o uso de IA depois que funcionários inseriram código-fonte confidencial e atas de reuniões no ChatGPT. Agora, esses dados estão nas mãos da OpenAI como dados de treinamento, e não está claro se é possível recuperá-los. 

Ferramentas de IA reforçam a cibersegurança

Nem tudo são más notícias para os profissionais de segurança. Embora a tecnologia de IA tenha desvantagens e levante questões de privacidade, ela também oferece mais ferramentas às equipes de segurança para ajudar a lidar com ameaças emergentes. 

As equipes vermelhas da OpenAI usaram o GPT-4 com sucesso para descobrir e explorar vulnerabilidades, além de realizar engenharia social, o que permitirá que equipes vermelhas encontrem e relatem novas vulnerabilidades.

As empresas de segurança continuam a encontrar novas formas de integrar a IA a seus produtos. Recentemente, anunciamos o novo recurso Auto-Fix, que usa tecnologia híbrida de IA para recomendar correções de vulnerabilidades geradas por IA e validadas quanto à segurança pelo mecanismo Snyk Code.

Riscos à segurança de aplicações ao programar com IA

Embora o ChatGPT possa ajudar a escrever código, em geral ele trabalha apenas com trechos menores de cada vez. Por isso, se for usado para gerar grandes volumes de código, os desenvolvedores podem se expor a riscos, já que o software não leva em conta problemas entre arquivos ou de vários níveis. Na maioria das vezes, a IA nem sequer entende esses casos e não consegue resolver os problemas relacionados.

A qualidade dos produtos de geração de código depende dos dados usados para treiná-los. É quase impossível criar código 100% livre de bugs ou vulnerabilidades, por isso as ferramentas de geração de código muitas vezes incluem código vulnerável nas sugestões. Isso preocupa ainda mais diante desta estatística divulgada pela Microsoft: 40% do código que os desenvolvedores enviam para revisão agora é gerado por IA e não é modificado. Isso é uma grande preocupação para as equipes de AppSec, pois as organizações precisam garantir que seus softwares sejam o mais seguros possível.

A ferramenta de programação com IA GitHub Copilot é treinada com código de fontes disponíveis publicamente, incluindo repositórios públicos no GitHub, e por isso gera sugestões semelhantes ao código existente. Se o conjunto de treinamento incluir código inseguro, as sugestões também poderão introduzir vulnerabilidades comuns. Um pesquisador da Invicti testou isso criando um aplicativo em Python e outro em PHP com o Copilot e, em seguida, verificando se ambos continham vulnerabilidades. Ele encontrou problemas como XSS, injeção de SQL e fixação de sessão.

O GitHub está ciente dos problemas de segurança levantados e, em uma atualização recente, adicionou um recurso de filtragem de vulnerabilidades: 

Credenciais codificadas diretamente, injeções de SQL e injeções de caminho estão entre os padrões de código vulneráveis mais comuns que o modelo identifica. Com o GitHub Copilot, essa solução representa um grande avanço para ajudar desenvolvedores a escrever código mais seguro.

Atualização do GitHub Copilot inclui filtragem de vulnerabilidades de segurança | InfoWorld

Conversas no Reddit sobre programar com o ChatGPT

Com base na análise anterior do Copilot, quisemos descobrir se o ChatGPT estava seguindo os mesmos passos. 

Para isso, recorremos ao Reddit, um site de agregação de notícias e discussões sociais que profissionais de tecnologia, como desenvolvedores, costumam consultar para trocar ideias com pessoas da mesma área. 

Por isso, o Reddit é o lugar ideal para observar como as pessoas usam o ChatGPT para programar: elas buscam orientação? Alertam outras pessoas para não usá-lo com essa finalidade? Ou o elogiam como um recurso confiável? 

Começamos analisando uma discussão no Reddit sobre programação e ChatGPT, com quase 350 publicações. Em seguida, avaliamos o sentimento dos comentários, considerando a publicação completa, e não apenas o título.

Positivo 

Desconsiderando as publicações sem descrição ou sem relação com o tema, 17,9% expressaram um sentimento positivo. Uma pessoa publicou uma imagem de um trecho de código em que estava trabalhando e explicou: “...Eu estava quase desistindo. Passei a última meia hora procurando uma solução e, como último recurso, perguntei ao GPT. Cinco segundos depois, ele me deu a resposta perfeita…” 

Outra pessoa fez muitos elogios: “Quando me deparo com um problema complexo, como refatorar código ou manipular arrays ou listas de maneiras incomuns, gosto de poder simplesmente perguntar ao ChatGPT como fazer. Depois de 20 anos quebrando a cabeça toda vez que preciso fazer essas coisas, finalmente posso deixar essa tarefa chata para uma IA! Que tipo de programador isso me torna?”

No entanto, entre as publicações positivas, havia um tema recorrente: o ChatGPT deixava passar os detalhes menores:

  • “...Sem dúvida, é extremamente impressionante. Ele escreveu código plausível e relativamente preciso com muita rapidez. Mas falhou miseravelmente em todos os pequenos detalhes…” 

  • “...Gosto muito do ChatGPT (na maioria das vezes) para programar. Nem sempre ele dá a resposta certa, mas tudo bem. Geralmente chega bem perto. É como ter um desenvolvedor júnior muito inteligente — mas imperfeito — sempre à disposição…”

  • “...O ChatGPT parece saber onde estão os problemas no próprio código, mas às vezes não apresenta a solução correta para corrigi-los…”

Os comentários positivos, acompanhados de críticas sobre o ChatGPT deixar passar detalhes específicos, mostram como surgem as preocupações com segurança. Se alguém sem experiência usar uma ferramenta de IA para criar código, esses erros podem passar despercebidos.  

Negativo

No geral, encontramos menos publicações negativas sobre programar com o ChatGPT do que positivas. 10,3% das descrições expressaram um sentimento negativo, e muitas pessoas demonstraram frustração com as imprecisões.

Uma pessoa afirmou: “...Acho que as sugestões do ChatGPT não são muito confiáveis. As consultas que ele cria geram um erro atrás do outro…” 

Outra pessoa destacou um problema parecido e buscava encontrar comandos específicos para ajudar na programação: “Depois que peço uma alteração no código, o ChatGPT apresenta o código inteiro, mesmo que só uma linha tenha mudado. Já tentei usar comandos como ‘Por favor, forneça apenas o código das linhas que foram alteradas’, mas ele me ignora e apresenta o código completo mesmo assim. Isso toma tempo, então gostaria de encontrar um comando que faça com que ele mostre apenas as linhas de código alteradas.” 

Busca por ajuda e orientação 

Descobrimos que a maioria das publicações no Reddit sobre ChatGPT e programação buscava ajuda e orientação (44,6%).  

Os pedidos variavam desde perguntas sobre se o código fornecido pelo ChatGPT estava deixando passar algo importante até pedidos para traduzir código de uma linguagem para outra.

Ao analisar os dados mais a fundo, vimos que as publicações tratavam de recursos de aprendizagem (51,4%), pedidos de ajuda entre pares (14,3%), dúvidas sobre qualidade (14,3%), criações dos usuários (11,4%), previsões (5,7%) e experiência do usuário (2,9%).

O que concluímos com esses dados

Quem realmente entende o código ainda encontra pequenos ajustes e mudanças nos detalhes. No estado atual, o ChatGPT é extremamente útil para tarefas mais simples, mas nem sempre gera um código perfeito para as suas necessidades. 

Quem não entende o próprio código fica muito impressionado e demonstra bastante entusiasmo, pois consegue gerar código que atinge seus objetivos sem precisar de tanto conhecimento.

É pouco provável que qualquer um desses grupos perceba os problemas de segurança introduzidos pelas ferramentas de IA, especialmente quem está começando na área de desenvolvimento. Por isso, desenvolvedores que usam ferramentas de IA sem considerar a segurança podem acabar incorporando ao código vulnerabilidades geradas pelas sugestões da IA. 

Isso se torna ainda mais importante diante das tendências de uso da IA. 42% das empresas entrevistadas pela IBM no ano passado estão buscando maneiras de usar IA em suas organizações. Por isso, é essencial considerar a segurança ao adotar ferramentas de IA.

Principais considerações sobre segurança de aplicações em um mundo com IA

Ferramentas de IA, como ChatGPT e Copilot, podem acelerar o desenvolvimento, mas devem ser combinadas com ferramentas de segurança abrangentes para garantir que o código gerado por elas seja seguro. Os LLMs não substituem um compilador ou interpretador durante o desenvolvimento, assim como não substituem ferramentas de segurança especializadas.

É importante estabelecer políticas internas para o uso de ferramentas de IA. Elas devem abordar aspectos como:

  • Definição clara de casos de uso aceitáveis: determine quais usos das ferramentas de IA são aceitáveis e que tipos de decisão podem ser tomados com elas.

  • Seleção e uso de dados: especifique os tipos e a qualidade dos dados que podem ser usados em modelos de IA e quais fontes de dados são apropriadas.

  • Privacidade e segurança dos dados: garanta que todos os dados usados em modelos de IA estejam devidamente protegidos e que sejam adotadas medidas adequadas para preservar sua privacidade e segurança.

  • Requisitos de conformidade: garanta que o uso de ferramentas de IA esteja em conformidade com todos os requisitos legais, regulatórios e éticos.

  • Atualizações regulares: atualize as políticas continuamente à medida que novas ferramentas de IA forem desenvolvidas e as necessidades do negócio evoluírem.

Esta não é uma lista completa de políticas para o uso de IA na sua organização, mas pode servir como ponto de partida.

As equipes de segurança devem acompanhar os avanços em IA, que oferecem mais ferramentas tanto para profissionais de segurança quanto para agentes mal-intencionados. As ferramentas de IA podem ser essenciais para enfrentar o aumento das explorações de vulnerabilidades, oferecendo recursos mais eficientes às equipes de segurança — especialmente enquanto as empresas ainda têm dificuldade para contratar especialistas em segurança. Esperamos descobrir novos casos de uso para ferramentas de IA ao longo deste ano, por isso é fundamental acompanhar os avanços recentes. As equipes de segurança também devem observar quanto as equipes de desenvolvimento usam IA, quanto do código incorporado à base de código é gerado por IA e se as verificações de segurança adequadas estão em vigor para gerenciar esse uso.

A segurança do código é apenas um dos aspectos do desenvolvimento. O desenvolvimento de software combina pessoas, processos e tecnologia. A IA pode ajudar na parte tecnológica, mas os outros fatores continuam sendo necessários. Qualidade é essencial na programação — o fator humano sempre será importante.

As recomendações da Snyk sobre as melhores opções de segurança de aplicações

Seja seu código escrito inteiramente por pessoas ou gerado principalmente por IA, é importante acertar o básico da segurança para reduzir a superfície de ataque. Avaliar a segurança das aplicações é essencial para proteger o código contra quem possa querer explorá-lo. Uma avaliação de segurança de aplicações envolve testar aplicações para detectar ameaças e desenvolver estratégias de defesa. Esse processo permite que as organizações avaliem a postura de segurança atual de suas aplicações e identifiquem maneiras de reforçar a proteção do software contra ataques futuros. Os desenvolvedores devem realizar avaliações de segurança de aplicações regularmente para garantir que as medidas de segurança continuem atualizadas e eficazes.

Cinco etapas para avaliar a segurança das suas aplicações:

  1. Identifique possíveis agentes de ameaça

  2. Determine quais dados confidenciais precisam de proteção

  3. Mapeie a superfície de ataque da aplicação

  4. Avalie os principais desafios do processo atual de AppSec

  5. Crie um roteiro de segurança para eliminar pontos fracos

Embora ferramentas de IA como o ChatGPT possam deixar passar pontos fracos e vulnerabilidades, a Snyk é uma plataforma de segurança para desenvolvedores muito mais preparada para essa tarefa. Com a Snyk, você pode identificar e proteger automaticamente vulnerabilidades no seu código, dependências de código aberto, contêineres e ambientes de nuvem.

A plataforma também se integra diretamente a ferramentas de desenvolvimento, pipelines de automação e fluxos de trabalho de programação, garantindo uma segurança integrada e eficiente.

Acelere o desenvolvimento seguro

A Snyk une desenvolvedores e equipes de segurança para garantir agilidade e segurança em grande escala.