Skip to main content

A IA é capaz de escrever código seguro?

Escrito por:
Frank Fischer
wordpress-sync/feature-c-security

3 de maio de 2023

0 minutos de leitura

A IA avança em um ritmo impressionante, com novas ferramentas e casos de uso descobertos e anunciados todas as semanas, desde a criação de poemas até a segurança de redes.

Os pesquisadores não têm certeza sobre o que os novos modelos de IA, como o GPT-4, são capazes de fazer. Isso levou alguns nomes importantes, como Elon Musk e Steve Wozniak, juntamente com pesquisadores de IA, a pedirem uma pausa de 6 meses no treinamento de modelos mais poderosos para priorizar o 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 com certeza do que ele é capaz. Novos exploits, jailbreaks e comportamentos serão descobertos com o tempo. Devido à natureza de caixa-preta dos LLMs, será difícil evitar que isso aconteça. A OpenAI afirma isso em seu documento técnico do GPT-4:

A OpenAI implementou várias medidas e processos de segurança ao longo do desenvolvimento e implementação do GPT-4 que reduziram sua capacidade de gerar conteúdo prejudicial. No entanto, o GPT-4 continua vulnerável a ataques e exploits ou jailbreaks adversos, e o conteúdo prejudicial não é a origem do risco. O ajuste fino pode modificar o comportamento do modelo, mas as funcionalidades fundamentais do modelo pré-treinado, como a possível geração de conteúdo prejudicial, continuam latentes.

O GPT-4 acabou de ser lançado, mas já temos muitos dados sobre seu antecessor, o GPT-3, que vinha sendo a base do ChatGPT. Desde o seu lançamento, o ChatGPT causou tanto alvoroço que outros gigantes da tecnologia, incluindo Google e Adobe, têm se esforçado para marcar sua presença no setor de IA.

Da otimização da produtividade à criação de conteúdo, a lista de funcionalidades do ChatGPT é extensa.  No entanto, há preocupações sobre o seu uso por desenvolvedores para gerar código devido a questões de privacidade, riscos de cibersegurança e o possível impacto na postura de segurança dos aplicativos

blog-chatgpt-risk-infographic

Riscos de privacidade e propriedade intelectual no uso de ferramentas de IA para codificação

As preocupações sobre o ChatGPT e seus riscos de privacidade quando usado com dados internos da empresa têm prevalecido entre consumidores e profissionais desde seu lançamento no final do ano passado. 

Um relatório recente da Cyberhaven mostrou que 3,1% dos trabalhadores revelaram informações confidenciais no ChatGPT, o que mostra a importância da criação de políticas que controlem o uso interno de ferramentas de IA. Recentemente, a Samsung precisou emitir um aviso interno sobre o uso de IA para seus funcionários depois que código-fonte e anotações de reuniões confidenciais foram inseridos no ChatGPT. Agora esses dados estão agora nas mãos da OpenAI como dados de treinamento, e não está claro se poderão ser recuperados. 

Ferramentas de IA aprimoram a cibersegurança

Para os profissionais de segurança, nem todas as notícias são negativas. Embora a tecnologia de IA apresente alguns inconvenientes e preocupações relacionadas à privacidade, ela também oferece mais ferramentas para ajudar as equipes de segurança a lidar com novas ameaças. 

As red teams da OpenAI usaram o GPT-4 para descobrir e explorar vulnerabilidades, bem como para engenharia social. Isso permite que essas equipes encontrem e relatem novas vulnerabilidades.

As empresas de segurança continuam a encontrar novas maneiras de integrar a IA a seus produtos existentes. Recentemente, anunciamos o novo recurso de correções automáticas, que usa a tecnologia de IA híbrida para recomendar correções de vulnerabilidades geradas por IA e com a segurança validada pelo mecanismo do Snyk Code.

Riscos de segurança de aplicativos na codificação usando IA

O ChatGPT pode ajudar os usuários a criar código, mas isso geralmente só funciona para pequenos trechos de código por vez. Se ele for usado para criar uma grande quantidade de código, os desenvolvedores poderão se expor a riscos, pois o software não considera questões entre arquivos ou de diversos 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 é limitada pela qualidade dos dados usados no treinamento. É praticamente impossível ter um código totalmente livre de bugs ou vulnerabilidades, então é esperado que as ferramentas incluam frequentemente código vulnerável nas sugestões feitas. Isso é ainda mais preocupante quando consideramos esta estatística compartilhada pela Microsoft: 40% do código que eles (os desenvolvedores) estão verificando agora é gerado por IA, sem qualquer modificação.Essa é uma grande preocupação para as equipes de AppSec, pois as organizações precisam garantir que seu software seja o mais seguro possível.

O GitHub Copilot, uma ferramenta de codificação baseada em IA, é treinado com código de fontes disponíveis para o público, incluindo código em repositórios públicos no GitHub, ou seja, ela cria sugestões semelhantes ao código existente. Se o conjunto de treinamento incluir código inseguro, as sugestões também poderão introduzir algumas vulnerabilidades típicas. Um pesquisador da Invicti testou essa possibilidade usando o Copilot para criar dois aplicativos, um em Python e outro em PHP. Em seguida, buscou vulnerabilidades incluídas nos dois aplicativos e encontrou vulnerabilidades de XSS, injeção de SQL, fixação de sessão e outros problemas.

O GitHub está bem ciente das questões levantadas em torno da segurança. Em uma atualização recente, foi adicionado um recurso de filtragem de vulnerabilidades: 

Credenciais embutidas no código, injeções de SQL e injeções de caminho estão entre os padrões de codificação suscetíveis mais comuns visadas pelo modelo. Com o GitHub Copilot, essa solução é um grande passo para ajudar os desenvolvedores a criar código mais seguro.

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

Conversas no Reddit sobre a codificação com ChatGPT

Com base no insight anterior do Copilot, queríamos descobrir se o ChatGPT estava seguindo o mesmo caminho. 

Para fazer isso, usamos o Reddit. O Reddit é uma rede social de agregação e discussão de notícias usada regularmente por profissionais de tecnologia, como desenvolvedores, para obter insights de outros profissionais da área. 

Como tal, é o lugar perfeito para ver como as pessoas usam o ChatGPT para codificação: elas estão procurando orientação? Elas estão avisando os outros membros para não usarem a ferramenta para essa finalidade? Ou estão elogiando a ferramenta como um recurso confiável? 

Começamos analisando um tópico do Reddit sobre codificação e ChatGPT que continha quase 350 postagens. Em seguida, avaliamos o sentimento dos comentários, considerando a postagem completa do Reddit, em vez de apenas no título.

Positivo 

Excluindo as postagens sem descrição ou não relacionadas, em 17,9% delas o sentimento era positivo. Um usuário postou uma imagem do código em que estava trabalhando e comentou: "\[...] Eu estava quase desistindo. Passei os últimos 30 minutos procurando uma solução. Já no desespero, perguntei ao GPT, e, 5 segundos depois, ele me deu a resposta perfeita". 

Outro usuário não poupou elogios, afirmando: "Quando me deparo com um problema complexo, como refatoração de código ou manipulação de matrizes ou listas de maneiras estranhas, é bom saber que posso perguntar ao ChatGPT como proceder. Depois de 20 anos queimando meus neurônios para fazer esse tipo de coisa sempre que necessário, agora posso transferir essa tarefa entediante para uma IA! Que tipo de programador vocês acham que eu sou?".

No entanto, entre as postagens positivas, havia um tema notável sobre pequenos detalhes que não foram notados pelo ChatGPT:

  • "\[...] Com certeza, tem sido extremamente impressionante. Ele criou código plausível e relativamente preciso com extrema rapidez. Mas foi um fracasso total ao lidar com pequenos detalhes \[...]" 

  • "\[...] Sou um grande fã do ChatGPT (na maior parte do tempo) para codificação. Nem sempre ele dá a resposta correta, mas faz parte. Normalmente, chega bem perto. É a mesma coisa que ter sempre disponível um desenvolvedor júnior muito inteligente, mas imperfeito \[...]"

  • "\[...] Parece que o ChatGPT sabe onde estão os problemas no código que ele gera, mas às vezes não oferece a solução certa para a correção \[…]"

A natureza positiva dos comentários, acompanhada de críticas ao ChatGPT por não notar os pequenos detalhes, realça a origem das preocupações de segurança. Se uma pessoa inexperiente usar a ferramenta de IA para criar código, esses erros não serão avaliados.  

Negativo

No geral, descobrimos que havia menos postagens negativas sobre codificação usando o ChatGPT do que positivas. 10,3% das descrições tinham um sentimento negativo geral, com muitos usuários expressando frustração com imprecisões.

Comentário de um usuário\: "Acho que as sugestões do ChatGPT são pouco confiáveis. As consultas que ele cria geram um erro após o outro". 

Outro usuário, que queria encontrar prompts específicos para ajudar na codificação, destacou um problema semelhante: "Depois de solicitar uma mudança de código, o ChatGPT gera o código completo, mesmo que apenas uma linha no código tenha sido alterada. Tentei usar prompts como 'Forneça apenas o código para as linhas que foram alteradas', mas ele me ignora e gera o código completo mesmo assim. É uma perda de tempo. Queria ter um prompt que funcione para fazê-lo fornecer apenas as linhas de código que mudaram". 

Busca de ajuda e orientações 

Constatamos que a maioria das postagens no Reddit sobre ChatGPT e codificação era sobre pedidos de ajuda e conselhos (44,6%).  

As solicitações são bastante variadas e abordam assuntos como se algo importante está faltando no código que receberam do ChatGPT e a tradução de código de uma linguagem para outra.

Ao fazer o detalhamento, descobrimos que essas postagens estavam focadas em recursos de aprendizado (51,4%), solicitações P2P (14,3%), perguntas/consultas de qualidade (14,3%), criação de usuários (11,4%), previsões (5,7%) e experiência do usuário (2,9%).

Nossas conclusões com base nesses dados

As pessoas que realmente entendem o código ainda fazem pequenos ajustes e mudanças nos detalhes. No seu estado atual, o ChatGPT é incrivelmente útil para tarefas mais simples, mas nem sempre gera o código perfeito para suas necessidades. 

As pessoas que não conseguem entender o código ficam superimpressionadas e satisfeitas, pois conseguem gerar um código que permite atingir os objetivos desejados com requisitos de conhecimento muito menores.

Provavelmente, os dois grupos de pessoas não estão cientes dos problemas de segurança gerados pelas ferramentas de IA, em especial os iniciantes em desenvolvimento. Portanto, há uma boa chance de que os desenvolvedores que usam ferramentas de IA sem considerar a segurança possam introduzir vulnerabilidades geradas por sugestões de IA no código. 

Isso fica ainda mais evidente quando consideramos as tendências do uso de IA. 42% das empresas entrevistadas pela IBM no ano passado estão procurando maneiras de usar IA internamente. É vital considerar a segurança junto com as ferramentas de IA.

Principais considerações para a segurança de aplicativos 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 seja seguro. Os LLMs não substituem um compilador ou um interpretador durante o desenvolvimento e não desqualifica o uso de ferramentas de segurança dedicadas.

É necessário implementar políticas internas sobre o uso de ferramentas de IA. Confira alguns exemplos:

  • Definição clara dos casos de uso aceitáveis: defina quais casos de uso são aceitáveis para o uso de ferramentas de IA e que tipos de decisão podem ser tomados usando essas ferramentas.

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

  • Privacidade e segurança de dados: garanta a devida proteção para todos os dados usados em modelos de IA e a execução das medidas adequadas para manter a privacidade e a segurança dos dados.

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

  • Atualizações regulares: atualize continuamente as políticas para acompanhar o desenvolvimento de novas ferramentas de IA e a evolução das necessidades empresariais.

A lista acima não cobre todas as políticas necessárias para orientar o uso da IA na sua organização, mas você pode usá-la como ponto de partida.

As equipes de segurança devem estar cientes de que os desenvolvimentos da IA oferecem mais ferramentas tanto para as equipes de segurança quanto para os malfeitores. As ferramentas de IA podem ser uma parte fundamental na defesa contra o aumento de exploits porque proporcionam às equipes de segurança ferramentas mais eficientes, em especial quando as empresas têm dificuldades para contratar especialistas em segurança. Esperamos ver novos casos de uso para as ferramentas de IA sendo descobertos ao longo do ano, então é importante ficar de olho nas novidades. Além disso, as equipes de segurança precisam saber o nível de utilização de IA pelas equipes de desenvolvimento, a proporção de código gerado por IA no código-fonte e se as verificações de segurança corretas para gerenciar o código foram implementas.

A segurança do código é apenas um aspecto do desenvolvimento. O desenvolvimento de software é uma combinação de pessoas, processos e tecnologia. A IA pode ajudar na tecnologia, mas você ainda precisa dos outros fatores. A qualidade é fundamental na codificação. O fator humano sempre será importante.

Orientações da Snyk sobre as melhores opções de segurança de aplicativos 

É fundamental entender os conceitos básicos de segurança para minimizar a superfície de ataque, tanto para código totalmente criado por humanos quanto para código gerado principalmente por IA. A avaliação da segurança dos aplicativos é vital para proteger o código contra os que querem explorá-los. Uma avaliação de segurança de aplicativos envolve testar aplicativos para detectar ameaças e desenvolver estratégias de defesa contra elas. Esse processo permite que as organizações avaliem a postura de segurança atual dos aplicativos e identifiquem maneiras de melhorar a proteção do software contra ataques futuros. Os desenvolvedores devem realizar avaliações regulares de segurança de aplicativos para garantir que as medidas de segurança se mantenham atualizadas e eficazes.

Cinco etapas para avaliar a segurança dos aplicativos:

  1. Identificar possíveis malfeitores

  2. Determinar os dados confidenciais que precisam de proteção

  3. Mapear a superfície de ataque dos aplicativos

  4. Avaliar os pontos problemáticos atuais do processo de AppSec

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

Ferramentas de IA como o ChatGPT podem não detectar links fracos e vulnerabilidades, mas a Snyk é uma plataforma de segurança para desenvolvedores muito mais preparada para essa tarefa. Com a Snyk, você pode identificar e se proteger automaticamente contra vulnerabilidades no código, em dependências de código aberto, em contêineres e em ambientes de nuvem.

A plataforma pode até se integrar diretamente a ferramentas de desenvolvimento, pipelines de automação e fluxos de trabalho de codificação para garantir uma segurança contínua e eficiente.