Segurança de MCP: O que aprendi após 95 interrupções em produção
Eu achava que a segurança era simples. Atualizar dependências. Usar HTTPS. Não deixar segredos fixos no código.
Eu estava errado.
Após 95 interrupções em produção e 1.800 horas de desenvolvimento, aprendi que a segurança do Model Context Protocol (MCP) é diferente. Não é como a segurança padrão de APIs REST.
O MCP cria novos riscos porque o cliente é um LLM, não um humano.
Aqui está o que você precisa saber para manter seu servidor MCP seguro.
- O Modelo de Ameaça do MCP
No REST, você sabe exatamente quem está chamando sua API. No MCP, o LLM atua como intermediário. Isso muda tudo:
- LLMs podem alucinar chamadas de ferramentas ou parâmetros.
- Os usuários não chamam as ferramentas diretamente. Eles conversam com o LLM, e o LLM conversa com o seu servidor.
- Clientes maliciosos podem sondar seu servidor em busca de ferramentas ocultas durante a descoberta (discovery).
Sua maior ameaça não é apenas um hacker. É um LLM bem-intencionado cometendo um erro acidental que derruba seu sistema.
- Gerenciamento de Chaves de API
Muitos desenvolvedores passam chaves de API em parâmetros de consulta (query parameters) para facilitar as coisas. Isso é um erro. Parâmetros de consulta aparecem em todos os logs de servidor e proxies.
Siga estas regras:
- Use autenticação via header (
Authorization: Bearer). - Evite passar chaves no corpo do JSON.
- Emita uma chave de API diferente para cada cliente. Isso ajuda você a rastrear o uso e revogar o acesso sem quebrar tudo.
- Validação Estrita de Entrada
LLMs vão errar as suposições. Eles enviarão tipos errados e parâmetros extras. Você deve validar cada chamada:
- Primeiro, verifique se o nome da ferramenta existe na sua lista.
- Rejeite chamadas com parâmetros extras. Não apenas os ignore.
- Corresponda aos tipos de parâmetros exatamente. Não faça coerção de tipos de dados.
- Defina limites de tamanho estritos para strings e arrays para evitar falhas de memória.
- Sanitize todos os caminhos de arquivos para evitar directory traversal.
- Limitação de Taxa (Rate Limiting) em Camadas
Um único prompt de usuário pode disparar dez chamadas de ferramenta de uma só vez. Isso pode esgotar seu pool de conexões em segundos.
Use três camadas de defesa:
- Limites por chave de API para controlar o uso do cliente.
- Limites por IP para impedir ataques de força bruta.
- Limites de conexões simultâneas para manter seu servidor vivo durante picos de demanda.
- Riscos de Injeção de Prompt
Um usuário pode enganar um LLM para chamar uma ferramenta destrutiva. Se um usuário disser ao LLM para excluir todas as notas, o LLM pode realmente fazê-lo.
Proteja-se:
- Separe as operações de leitura e escrita.
- Exija confirmação manual do usuário para qualquer ação de exclusão ou atualização.
- Use o princípio do privilégio mínimo para o seu usuário de banco de dados.
A segurança é um processo contínuo. Comece com um melhor gerenciamento de chaves e validação estrita. Esses passos resolvem a maioria dos problemas.
Comunidade de aprendizado opcional: https://t.me/GyaanSetuAi
