Olá a todos. Bem-vindos ao curso de uso seguro de inteligência artificial no desenvolvimento de software. Sou Ben-Hur Santos Ott e trabalho há quase duas décadas na área de desenvolvimento de software. Passei parte do meu tempo como desenvolvedor front-end, back-end e mobile. Já atuei em todas as áreas de tecnologia. Dedico praticamente a última década à segurança no desenvolvimento de software. Trabalhei em algumas grandes empresas de tecnologia na Internet. Atualmente, trabalho na SNIC, que é a maior empresa de segurança no desenvolvimento de software do mundo e na adoção segura de inteligência artificial para o desenvolvimento de sistemas. Espero poder compartilhar um pouco do meu conhecimento e tudo o que aprendi na área até o momento com vocês, para que possamos aprender juntos durante este curso.
Se você é uma pessoa desenvolvedora que está trabalhando com IA atualmente, pretende adotar Spec Driven Development, pretende utilizá-la de forma autônoma para desenvolver suas aplicações ou está realmente começando a entrar neste mundo de inteligência artificial no desenvolvimento de software, este curso é obrigatório para você. Porque tudo parece muito bonito no papel. Vamos definir que nossas soluções vão usar LLMs, Skills, vamos utilizar bibliotecas por todos os lados, mas quais são os riscos que corremos quando começamos a utilizar esses componentes? Será que precisamos nos preocupar com a segurança das bibliotecas que estamos usando? Será que o código que a IA gera é seguro ou não? Será que se colocarmos um LLM que não conhecemos ou usarmos uma Skill que não conhecemos, quais são os riscos que corremos? Então, tudo isso é importante conhecer para saber identificar os riscos e nos proteger deles.
Neste curso, vamos abordar inicialmente os conceitos gerais de segurança que precisamos compreender. Discutiremos a importância da segurança no contexto atual. Em seguida, aprenderemos sobre ataques, riscos e vulnerabilidades observados no setor de desenvolvimento de software, especialmente quando falamos de IA aplicada a esse desenvolvimento.
Posteriormente, exploraremos as proteções e mitigações, mas ao longo do curso, aprenderemos como atacar e como nos defender dos principais riscos associados à IA no desenvolvimento de software. É importante entender que, ao executar um software ou uma aplicação, a mesma entrada sempre gera a mesma saída, caracterizando um comportamento determinista. No entanto, a IA não é determinista, mas sim probabilística. Isso significa que, ao lançar um agente, ele pode gerar um código de uma forma, e ao repetir o mesmo prompt, o resultado pode ser diferente. Se fizermos outra pergunta, o resultado será gerado de outra maneira.
Utilizaremos muitos exemplos ao longo do curso, mas não devemos nos frustrar se, ao tentar com um agente e um modelo, o resultado for um pouco diferente. Outro agente ou modelo pode apresentar um resultado ainda mais distinto. Essa é a natureza da IA, o que a torna fascinante e destaca a importância da segurança nesse campo, devido à sua imprevisibilidade.
Realizaremos algumas provas utilizando modelos comerciais, como Cloud e Antigravity com Gemini, além de exemplos que utilizarão OLAMA, modelos locais que executaremos em nossa máquina. Convidamos a prestar muita atenção ao curso, pois discutiremos os principais ataques observados na indústria, como eles funcionam na prática e como podemos nos defender de maneira mais eficaz nesse mundo atual.
Olá, neste vídeo vamos entender e revisar alguns conceitos que já vimos ao longo do curso sobre agentes, MCPs, skills (habilidades), mas a partir de outra perspectiva. Quando falamos sobre segurança no ecossistema de agentes de IA, especialmente ao usarmos agentes para desenvolver software, temos preocupações distintas em comparação ao desenvolvimento de produtos que são agentes de IA. Precisamos observar esses mesmos recursos, MCPs, skills (habilidades), modelos, com uma visão diferente.
Revisando um pouco o que já vimos, qual é o uso atual? Primeiro, temos a IDE ou a CLI, que normalmente é nosso ponto principal ao usar agentes de IA para desenvolver, pois utilizamos algum deles para gerar nosso código. Podemos usar uma IDE com um agente de IA integrado ou alguma ferramenta de linha de comandos, como Cloud Code, Gemini, a CLI, entre outras. Dentro de uma dessas opções, teremos de fato nosso agente de IA. Esse agente pode ser o Cloud Code na linha de comandos ou, por exemplo, o Cloud Code dentro do VS Code como um plugin. Algumas IDEs já trazem isso de forma nativa, como PyCharm, IntelliJ, Eclipse, entre outras. Além disso, temos um agente; isso é importante. Dentro desse agente, ele vai interagir com uma série de elementos. Ele interage com um modelo, com MCPs, e possui skills (habilidades) para executar ou completar alguma tarefa ou algo do tipo. Alguns agentes têm características diferentes, como hooks, que permitem definir o que é executado e quando. Por exemplo, o PyCharm possui o Steering. Temos diferentes modos, como o modo Plan, o modo Agent, o modo Ask, entre outros. Até aqui, nada novo, provavelmente já vimos isso.
Agora, vamos entender um conceito muito importante, uma prerrogativa essencial para falar da segurança disso. Tudo o que estamos vendo aqui — IDE, CLI, o agente, o modelo, os MCPs, as skills (habilidades) e os hooks — podemos desenvolver nós mesmos, mas normalmente não o fazemos. Na maioria dos casos, são componentes de terceiros. Ou seja, a IDE não é desenvolvida por nós, a linha de comandos não é desenvolvida por nós, o agente não é desenvolvido por nós. "Ah, mas eu desenvolvi meu agente com o SDK do Cloud Code." Bem, você integrou um SDK. Então, o SDK não foi desenvolvido por você na maioria dos casos. O modelo que normalmente usamos não é treinado por nós desde o início. Usamos algum modelo já pronto. Os MCPs podemos construir os nossos; não é tão difícil de fazer, mas geralmente são compostos por código e bibliotecas de terceiros. O próprio FastMCP é uma biblioteca de terceiros. As skills (habilidades), podemos construir as nossas. É bastante gratificante construí-las. No entanto, muitas vezes também usaremos skills (habilidades) de terceiros. E os hooks são simplesmente uma funcionalidade que podemos implementar.
Para ilustrar como podemos criar um MCP, vamos ver um exemplo de código que cria um servidor MCP simples que expõe uma ferramenta de calculadora e alguns dados:
# Vamos criar um servidor MCP simples que expõe uma ferramenta de calculadora e alguns dados.
# Exemplo de início rápido do FastMCP.
#
# Execute a partir da raiz do repositório:
# uv run examples/snippets/servers/fastmcp_quickstart.py
from mcp.server.fastmcp import FastMCP
# Crie um servidor MCP
mcp = FastMCP("demo", json_response=True)
# Adicione uma ferramenta de adição
@mcp.tool()
def add(a: int, b: int) -> int:
"""Adiciona dois números"""
return a + b
# Adicione um recurso de saudação dinâmica
@mcp.resource("greeting:/{name}")
def get_greeting(name: str) -> str:
"""Obtenha uma saudação personalizada"""
return f"Hello, {name}!"
# Adicione um prompt
@mcp.prompt()
def greet_user(name: str, style: str = "friendly") -> str:
"""Gera um prompt de saudação"""
styles = {
"friendly": "Please write a warm, friendly greeting",
"formal": "Please write a formal, professional greeting",
"casual": "Please write a casual, relaxed greeting",
}
return f"{styles.get(style, styles['friendly'])} for someone named {name}."
# Execute com transporte HTTP transmissível
if __name__ == "__main__":
mcp.run(transport="streamable-http")
Esse exemplo demonstra como podemos configurar um servidor MCP que oferece funcionalidades básicas, como uma calculadora e saudações personalizadas, utilizando a biblioteca FastMCP.
Tudo isso faz parte do conjunto de ferramentas com as quais trabalharemos para desenvolver nosso software. Mas, como são ferramentas de terceiros, podem ter vulnerabilidades ou até mesmo serem maliciosas, projetadas ou criadas para instalar ou executar malware. Precisamos ter algumas precauções adicionais e olhar para isso de outras perspectivas. Por exemplo, falando um pouco do agente. O agente pode ser um plugin da IDE. Mas você vai instalar, por exemplo, um Cloud Code Free como plugin na sua IDE? Isso não me parece suspeito. E você conhece o desenvolvedor, quem o fez ou algo assim? Isso representa um risco tanto para nós, como pessoas desenvolvedoras, quanto para a empresa em que trabalhamos. Vamos analisar cada uma dessas partes em detalhe.
Da mesma forma, os modelos. Quando queremos executar um modelo local, muitas vezes executamos um modelo cooperativo, como o da própria Cloud da Google. Mas podemos optar por outro modelo. Um modelo gratuito, de código aberto, executando localmente, como o Llama, por exemplo.
Conhecemos esses modelos? Sabemos quem os desenvolveu? Sabemos como foi realizado o treinamento? São 100% seguros para executá-los, tanto em nossa máquina quanto, às vezes, em modo cooperativo? Os modelos também podem estar treinados para recomendar instruções maliciosas, pois podem carecer de proteções necessárias e não evitar que recomendem código malicioso. Além disso, podem gerar código vulnerável ou coisas similares. A maioria dos modelos faz isso, mas alguns são mais propensos. Dependendo do que estamos construindo, podem ser manipulados para realizar ações não previstas por nós. Vamos entrar em mais detalhes sobre esse tema.
Quando falamos de MCPs, por exemplo, existem dois tipos. O primeiro é o MCP STDIO, que se executa em nossa máquina. São scripts que rodam localmente. O outro é o Streamable HTTP, que será um serviço externo. Se olharmos pela perspectiva do MCP STDIO, que roda em nossa máquina, é um código que pode fazer o que qualquer código executando em nossa máquina faria. Pode ler um arquivo, seja ele de credenciais ou algo similar, executar comandos, baixar um arquivo externo e executá-lo, etc. Pode fazer qualquer coisa que qualquer outro software faria. Já os MCPs remotos, HTTP, Streamable HTTP, não têm essa mesma capacidade. Não podem estar presentes em nossa máquina, mas podem devolver algo ao nosso modelo, fazendo com que ele tome certas ações.
Quando falamos de skills, o que é uma skill? Pensamos que a skill é apenas um markdown. Não é só um markdown. A grande maioria pode ser apenas um markdown, mas quando olhamos em detalhe, uma skill tem seu markdown, mas também pode incluir scripts ou binários. Tem referências a outros documentos, e muitas vezes não sabemos o que são esses documentos, além de assets como imagens e recursos. Se olharmos as skills, por exemplo, no Cloud Hub ou em qualquer outro lugar onde podemos baixar skills públicas, ao observar essas skills públicas, encontramos o exemplo do Agent Browser. Vemos o skill.md, que contém informações sobre como funciona. Mas, ao olhar mais para o final, vemos que fala sobre como instalar um plugin. Este, na verdade, é uma biblioteca NPM. Vamos instalar com o -g. Então, conhecemos isso? Sabemos o que é essa biblioteca? Oferece algum risco? E depois executa outro install, com dependências aninhadas, que provavelmente instalará outras subdependências. O que são essas subdependências? O que contêm? Alguma delas é vulnerável ou maliciosa? Não as conhecemos.
Para entender melhor a estrutura de uma skill, vejamos um exemplo de como ela pode ser organizada:
my-skill/
├── SKILL.md # Obrigatório: instruções + metadados
├── scripts/ # Opcional: código executável
├── references/ # Opcional: documentação
└── assets/ # Opcional: modelos, recursos
Existe a skill em si, o markdown em si, mas desencadeia uma série de comandos ou pede ao agente que instale uma série de coisas das quais não temos conhecimento. Quando olhamos outros tipos de skills, podemos ver que não estão compostas apenas pelo markdown. Também incluem um script em Python, que será executado junto com ela. Podemos executar isso. Esses são scripts que talvez possamos ler. Mas, e se for um binário compilado que talvez não possamos ler? O que está sendo executado? Conhecemos o que esse script em Python vai fazer? E outra coisa, esse script em Python depende de alguma biblioteca para funcionar? Como será instalada?
Quando olhamos esses agentes pela perspectiva de "não conheço" o que está sendo usado, não conheço o que está sendo instalado ou o que é capaz de fazer, e tudo isso também são bibliotecas de terceiros, código gerado, etc. Se não conhecemos isso, estamos expostos a uma série de riscos dentro desse ecossistema. A ideia deste curso é que aprofundemos mais em detalhe quais são esses riscos e também o que precisamos fazer para minimizar ou mitigar esses riscos dentro de nosso ambiente de desenvolvimento.
Já que analisamos esses componentes sob essa perspectiva, a ideia agora é que possamos entender um pouco sobre três conceitos que são essenciais para a segurança, conhecidos como a tríade: confidencialidade, integridade e disponibilidade (availability em inglês). O que queremos dizer com cada um deles? Na área de segurança, sempre nos preocupamos com esses três pilares.
Quando falamos de confidencialidade, referimo-nos ao fato de que todo tipo de informação deve ser acessada apenas por quem realmente pode, deve e precisa ter acesso a ela. Por exemplo, nem todo mundo tem acesso ao seu número de telefone ou ao seu e-mail. Esses dados podem ser alvo de tentativas de coleta de várias formas, mas não gostaríamos que fossem distribuídos indiscriminadamente. Em projetos, a confidencialidade é semelhante. Por exemplo, dentro de um projeto, podemos ter um arquivo .env cheio de segredos, e não queremos que esse arquivo seja vazado. Temos o código-fonte de nossa aplicação e não queremos que ele seja exposto. Ou, por exemplo, que um modelo seja treinado com ele e, de repente, comece a recomendar nosso código proprietário a outras pessoas. Portanto, a confidencialidade é muito importante. Mantemos isso com acesso restrito à informação apenas para as entidades que realmente precisam dela.
Outra questão é a integridade. A integridade refere-se ao estado em que a informação deve estar, ou seja, que ninguém tenha alterado nada de forma não supervisionada. Por exemplo, não gostaríamos que nosso arquivo cloud.md fosse alterado sem autorização.
Não gostaríamos que nossa aplicação gerasse um registro no banco de dados que não estávamos esperando ou que não queríamos. Não gostaríamos que alguém acessasse nosso repositório no GitHub e modificasse um código lá sem nosso consentimento. Portanto, sempre nos preocuparemos para que as coisas recebam alterações ou sejam modificáveis apenas pelos fluxos que de fato deveriam poder modificá-las.
Por último, a disponibilidade. Disponibilidade significa que algo está disponível para acesso ou uso dentro do tempo estimado para isso. Vamos dar um exemplo: quando vamos fazer um pagamento com nosso cartão de crédito, em quais horários do dia esperamos que o serviço do cartão de crédito esteja disponível para que possamos efetuar o pagamento? Provavelmente diríamos: 24 horas, 7 dias por semana. Perfeito. Esse é o conceito de disponibilidade. Quando precisamos usar ou acessar algo, isso deve estar disponível.
Quando trabalhamos no desenvolvimento de sistemas, imagine que nosso banco caia. Nosso banco é um sistema e foi desenvolvido usando código gerado por humanos ou por inteligência artificial, e pode vir a cair. Pode até ter sido atacado por uma biblioteca maliciosa. Alguém instalou uma biblioteca que, na verdade, era um malware, e esse malware se propagou, transformou-se em um ransomware (sequestro de dados) e agora a empresa está totalmente comprometida e precisa suspender as operações. Isso pode ocorrer a partir da máquina de uma pessoa desenvolvedora.
Devemos estar atentos para que a informação que temos não esteja sendo filtrada, para que o que estamos manipulando realmente seja o que estamos manipulando, e para que não estejamos introduzindo um risco que possa deixar completamente fora de serviço nossa empresa. Portanto, esses três pilares são fundamentais para guiar nossa visão de segurança a partir das revisões que faremos daqui em diante.
O curso Engenharia de software na era da IA: segurança de aplicações com agentes, MCPs e código gerado por IA possui 223 minutos de vídeos, em um total de 42 atividades. Gostou? Conheça nossos outros cursos de IA para Programação em Inteligência Artificial, ou leia nossos artigos de Inteligência Artificial.
Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:
O Plano Plus evoluiu: agora com Luri para impulsionar sua carreira com os melhores cursos e acesso à maior comunidade tech.
2 anos de Alura
Matricule-se no plano PLUS 24 e garanta:
Jornada de estudos progressiva que te guia desde os fundamentos até a atuação prática. Você acompanha sua evolução, entende os próximos passos e se aprofunda nos conteúdos com quem é referência no mercado.
Programação, Data Science, Front-end, DevOps, Mobile, Inovação & Gestão, UX & Design, Inteligência Artificial
Formações com mais de 1500 cursos atualizados e novos lançamentos semanais, em Programação, Inteligência Artificial, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.
A cada curso ou formação concluído, um novo certificado para turbinar seu currículo e LinkedIn.
Acesso à inteligência artificial da Alura.
No Discord, você participa de eventos exclusivos, pode tirar dúvidas em estudos colaborativos e ainda conta com mentorias em grupo com especialistas de diversas áreas.
Faça parte da maior comunidade Dev do país e crie conexões com mais de 120 mil pessoas no Discord.
Acesso ilimitado ao catálogo de Imersões da Alura para praticar conhecimentos em diferentes áreas.
Explore um universo de possibilidades na palma da sua mão. Baixe as aulas para assistir offline, onde e quando quiser.
Luri Vision chegou no Plano Pro: a IA da Alura que enxerga suas dúvidas, acelera seu aprendizado e conta também com o Alura Língua que prepara você para competir no mercado internacional.
2 anos de Alura
Todos os benefícios do PLUS 24 e mais vantagens exclusivas:
Chat, busca, exercícios abertos, revisão de aula, geração de legenda para certificado.
Envie imagens para a Luri e ela te ajuda a solucionar problemas, identificar erros, esclarecer gráficos, analisar design e muito mais.
Aprenda um novo idioma e expanda seus horizontes profissionais. Cursos de Inglês, Espanhol e Inglês para Devs, 100% focado em tecnologia.
Escolha os ebooks da Casa do Código, a editora da Alura, que apoiarão a sua jornada de aprendizado para sempre.
Para quem quer atingir seus objetivos mais rápido: Luri Vision ilimitado, vagas de emprego exclusivas e mentorias para acelerar cada etapa da jornada.
2 anos de Alura
Todos os benefícios do PRO 24 e mais vantagens exclusivas:
Catálogo de tecnologia para quem é da área de Marketing
Envie imagens para a Luri e ela te ajuda a solucionar problemas, identificar erros, esclarecer gráficos, analisar design e muito mais de forma ilimitada.
Escolha os ebooks da Casa do Código, a editora da Alura, que apoiarão a sua jornada de aprendizado para sempre.
Conecte-se ao mercado com mentoria individual personalizada, vagas exclusivas e networking estratégico que impulsionam sua carreira tech para o próximo nível.