Estamos prontos para o código gerado por IA? Inteligência de dados PlatoBlockchain. Pesquisa vertical. Ai.

Estamos prontos para o código gerado por IA?

Nos últimos meses, ficamos maravilhados com a qualidade dos rostos gerados por computador, fotos de gatos, vídeos, ensaios e até arte. A inteligência artificial (IA) e o aprendizado de máquina (ML) também entraram silenciosamente no desenvolvimento de software, com ferramentas como GitHub Copilot, Tabnine, Polycode, e outros dando o próximo passo lógico de colocar a funcionalidade de preenchimento automático de código existente em esteróides de IA. Ao contrário das fotos de gatos, porém, a origem, a qualidade e a segurança do código do aplicativo podem ter implicações de amplo alcance – e pelo menos para a segurança, a pesquisa mostra que o risco é real.

Prévio pesquisa acadêmica já mostrou que o GitHub Copilot frequentemente gera código com vulnerabilidades de segurança. Mais recentemente, uma análise prática do engenheiro de segurança da Invicti, Kadir Arslan, mostrou que sugestões de código inseguro ainda são a regra e não a exceção com o Copilot. Arslan descobriu que as sugestões para muitas tarefas comuns incluíam apenas o esqueleto absoluto, muitas vezes seguindo o caminho mais básico e menos seguro, e que aceitá-las sem modificação poderia resultar em aplicações funcionais, mas vulneráveis.

Uma ferramenta como o Copilot tem (por design) o preenchimento automático aumentado, treinado em código-fonte aberto para sugerir trechos que podem ser relevantes em um contexto semelhante. Isto faz com que a qualidade e a segurança das sugestões estejam intimamente ligadas à qualidade e segurança do conjunto de treinamento. Portanto, as questões maiores não são sobre o Copilot ou qualquer outra ferramenta específica, mas sobre o código de software gerado por IA em geral.

É razoável presumir que o Copilot é apenas a ponta da lança e que geradores semelhantes se tornarão comuns nos próximos anos. Isto significa que nós, a indústria tecnológica, precisamos de começar a perguntar como é que esse código está a ser gerado, como é utilizado e quem assumirá a responsabilidade quando as coisas correrem mal.

Síndrome de navegação por satélite

O preenchimento automático de código tradicional que procura definições de funções para completar nomes de funções e lembrar quais argumentos você precisa economiza muito tempo. Como essas sugestões são apenas um atalho para você mesmo procurar os documentos, aprendemos a confiar implicitamente em tudo o que o IDE sugere. Depois que uma ferramenta com tecnologia de IA chega, não há mais garantia de que suas sugestões sejam corretas – mas ainda parecem amigáveis ​​e confiáveis, portanto, é mais provável que sejam aceitas.

Especialmente para desenvolvedores menos experientes, a conveniência de obter um bloco de código gratuito incentiva uma mudança de mentalidade de “Este código está próximo o suficiente do que eu escreveria” para “Como posso ajustar este código para que funcione para mim”.

O GitHub afirma claramente que as sugestões do Copilot devem sempre ser cuidadosamente analisadas, revisadas e testadas, mas a natureza humana determina que mesmo código abaixo da média ocasionalmente entrará em produção. É como dirigir olhando mais para o GPS do que para a estrada.

Problemas de segurança da cadeia de suprimentos

A Crise de segurança Log4j colocou a segurança da cadeia de fornecimento de software e, especificamente, a segurança de código aberto no centro das atenções, com um recente Memorando da Casa Branca no desenvolvimento seguro de software e em um novo projeto de lei para melhorar a segurança de código aberto. Com essas e outras iniciativas, ter qualquer código-fonte aberto em seus aplicativos poderá em breve precisar ser escrito em uma lista de materiais de software (SBOM), o que só será possível se você incluir conscientemente uma dependência específica. As ferramentas de análise de composição de software (SCA) também contam com esse conhecimento para detectar e sinalizar componentes de código aberto desatualizados ou vulneráveis.

Mas e se o seu aplicativo incluir código gerado por IA que, em última análise, se origina de um conjunto de treinamento de código aberto? Teoricamente, se pelo menos uma sugestão substancial for idêntica ao código existente e aceita como está, você poderá ter código-fonte aberto em seu software, mas não em seu SBOM. Isso pode levar a problemas de conformidade, sem mencionar o potencial de responsabilidade caso o código se revele inseguro e resulte em uma violação — e o SCA não irá ajudá-lo, pois só pode encontrar dependências vulneráveis, e não vulnerabilidades em seu próprio código .

Armadilhas de licenciamento e atribuição

Continuando com essa linha de pensamento, para usar código-fonte aberto, você precisa cumprir os termos de licenciamento. Dependendo da licença de código aberto específica, você precisará pelo menos fornecer atribuição ou, às vezes, liberar seu próprio código como código aberto. Algumas licenças proíbem totalmente o uso comercial. Qualquer que seja a licença, você precisa saber de onde veio o código e como foi licenciado.

Novamente, e se você tiver um código gerado por IA em seu aplicativo que seja idêntico ao código-fonte aberto existente? Se você fizesse uma auditoria, descobriria que está usando código sem a atribuição necessária? Ou talvez você precise abrir parte do seu código comercial para permanecer em conformidade? Talvez esse ainda não seja um risco realista com as ferramentas atuais, mas este é o tipo de perguntas que todos deveríamos fazer hoje, e não daqui a 10 anos. (E para ser claro, o GitHub Copilot possui um filtro opcional para bloquear sugestões que correspondam ao código existente para minimizar os riscos da cadeia de suprimentos.)

Implicações de segurança mais profundas

Voltando à segurança, um modelo de IA/ML é tão bom (e tão ruim) quanto seu conjunto de treinamento. Já vimos isso no passado - por exemplo, em casos de algoritmos de reconhecimento facial mostrando preconceitos raciais por causa dos dados nos quais foram treinados. Portanto, se tivermos pesquisas mostrando que um gerador de código frequentemente produz sugestões sem levar em consideração a segurança, podemos inferir que era assim que era seu conjunto de aprendizagem (ou seja, código disponível publicamente). E se o código inseguro gerado pela IA retroalimentar essa base de código? As sugestões podem ser seguras?

As questões de segurança não param por aí. Se os geradores de código baseados em IA ganharem popularidade e começarem a contabilizar uma proporção significativa de novo código, é provável que alguém tente atacá-los. Já é possível enganar o reconhecimento de imagens da IA ​​envenenando seu conjunto de aprendizagem. Mais cedo ou mais tarde, os agentes mal-intencionados tentarão colocar código exclusivamente vulnerável em repositórios públicos, na esperança de que ele apareça em sugestões e acabe em um aplicativo de produção, abrindo-o para um ataque fácil.

E a monocultura? Se vários aplicativos acabarem usando a mesma sugestão altamente vulnerável, qualquer que seja sua origem, poderemos estar diante de epidemias de vulnerabilidade ou talvez até de vulnerabilidades específicas de IA.

De olho na IA

Alguns desses cenários podem parecer absurdos hoje, mas são coisas que nós, da indústria de tecnologia, precisamos discutir. Mais uma vez, o GitHub Copilot está em destaque apenas porque atualmente lidera, e o GitHub fornece avisos claros sobre as advertências das sugestões geradas por IA. Tal como acontece com o preenchimento automático no seu telefone ou com as sugestões de rotas no seu navegador, são apenas dicas para facilitar a nossa vida e cabe-nos a nós aceitá-las ou abandoná-las.

Com o seu potencial para melhorar exponencialmente a eficiência do desenvolvimento, os geradores de código baseados em IA provavelmente se tornarão uma parte permanente do mundo do software. Porém, em termos de segurança de aplicativos, esta é mais uma fonte de código potencialmente vulnerável que precisa passar por rigorosos testes de segurança antes de ser autorizado a entrar em produção. Estamos procurando uma maneira totalmente nova de inserir vulnerabilidades (e dependências potencialmente não verificadas) diretamente em seu código original, por isso faz sentido tratar as bases de código aumentadas por IA como não confiáveis ​​até serem testadas - e isso significa testar tudo com a frequência que você quiser. pode.

Mesmo soluções de ML relativamente transparentes como o Copilot já levantam algumas questões jurídicas e éticas, para não mencionar preocupações de segurança. Mas imagine que um dia alguma nova ferramenta comece a gerar código que funcione perfeitamente e passe nos testes de segurança, exceto por um pequeno detalhe: ninguém sabe como funciona. É quando é hora de entrar em pânico.

Carimbo de hora:

Mais de Leitura escura