内容
# ANÁLISE DE VULNERABILIDADES DE PROMPT INJECTION EM APLICAÇÕES INTEGRADAS A LLMS
[](#)
[](#)
[](#)
[](#)
Este repositório contém a implementação do **FinSecAI**, um sistema financeiro fictício isolado via contêineres Docker, desenvolvido como plataforma científica para testar a segurança e o comportamento de agentes de Inteligência Artificial (LLMs) sob injeção de prompt e outros ataques adversariais. Esse projeto é realizado como Trabalho de Conclusão de Curso para o curso de Ciência da Computação da Universidade Tecnológica Federal do Paraná (UTFPR) - Campus Medianeira. Ano de 2026.
> 📘 **Guia Completo de Operação**: Veja o [`GUIA_TUTORIAL_ETAPAS.md`](/GUIA_TUTORIAL_ETAPAS.md) para um tutorial detalhado passo a passo de inicialização, carga do banco de dados, execução de experimentos e auditoria.
> 📊 **Relatório de Resultados Experimentais**: Acesse o [`RELATORIO_RESULTADOS_EXPERIMENTAIS.md`](/RELATORIO_RESULTADOS_EXPERIMENTAIS.md) para visualizar o relatório consolidado de métricas (ASR, ASP, SFR) e matriz de payloads de cada modelo.
---
## 🔬 Visão Geral do Sistema
O FinSecAI simula um internet banking real (com saldo, PIX, investimentos, solicitação de empréstimos) integrado a um assistente conversacional inteligente (**FinBot**). Ele foi arquitetado para permitir que pesquisadores de segurança testem vulnerabilidades como:
* **Prompt Injection** (Injeções diretas e indiretas via MCP)
* **Jailbreak** (Tentativas de burlar as diretivas do sistema)
* **Vazamento de Informações (Data Extraction)** (Extração de dados sensíveis de outros usuários fictícios)
* **Escalada de Privilégios / Fraude Financeira** (Tentativas de alterar saldos ou invocar ferramentas restritas)
Todas as conversas, metadados adversariais, notas de pesquisa e logs de sistema são salvos estruturadamente no PostgreSQL para a geração automatizada de estatísticas (**ASR** e **ASP**).
---
## ⚙️ Arquitetura e Estrutura de Diretórios
O projeto adota uma arquitetura em microsserviços totalmente isolada via Docker Compose:
```
financial-ai-security/
├── app/ # Backend FastAPI (Python)
│ ├── core/ # JWT, Criptografia, Sessão DB, Configs
│ ├── crud/ # Operações diretas com banco (CRUD)
│ ├── migrations/ # Migrações automatizadas (Alembic)
│ ├── models/ # Modelos ORM (SQLAlchemy)
│ ├── routers/ # Endpoints expostos (FastAPI)
│ ├── schemas/ # Schemas de validação de dados (Pydantic v2)
│ ├── services/ # Regras de negócio, MCP tools e LLMs
│ ├── Dockerfile
│ ├── main.py # Ponto de entrada do FastAPI
│ └── mcp_server.py # Servidor standalone do MCP
├── frontend/ # Interface Web Nginx (HTML/CSS/JS)
│ ├── app.js # Lógica do painel de pesquisa
│ ├── index.html # Layout Glassmorphism
│ └── style.css # Folha de estilos premium
├── postgres/ # Configuração inicial do Banco
│ └── init.sql # Extensões e permissões do PostgreSQL
├── promptfoo/ # Configurações YAML individuais por modelo
│ ├── llama3.1.yaml
│ ├── llama3_8b.yaml
│ ├── deepseek_r1.yaml
│ ├── deepseek_v2.yaml
│ ├── gemma4.yaml
│ ├── nemotron_mini.yaml
│ ├── qwen2.5.yaml
│ ├── phi3.5.yaml
│ └── mistral.yaml
├── scripts/ # Scripts utilitários
│ ├── promptfoo_provider.py # Script de conexão autenticada do Promptfoo
│ ├── run_experiments.py # Orquestrador de experimentos (suporta --model)
│ ├── seed_data.py # População e infectação do banco (Faker)
│ ├── wait_for_db.py # Script de sincronização de inicialização
│ └── reclassify_adversarial_cases.py # Reavaliação de classificações contra falsos positivos
├── tests/ # Suite de Testes Adversariais
│ └── payloads.yaml # Base unificada com 20 payloads e asserções
├── docker-compose.yml # Orquestração do ambiente
├── promptfoo.yaml # Configuração global com todos os modelos
├── GUIA_TUTORIAL_ETAPAS.md # Tutorial detalhado passo a passo
├── RELATORIO_RESULTADOS_EXPERIMENTAIS.md # Relatório completo de métricas (ASR, ASP, SFR)
├── README.md # Esta documentação
```
---
## 🤖 Modelos LLM Avaliados (Ollama Local)
Todos os testes e avaliações do FinSecAI são executados utilizando **modelos locais de código aberto** orquestrados pelo **Ollama**:
| Modelo | ID / Tag Ollama | Tamanho | Arquitetura / Perfil |
| :--- | :--- | :--- | :--- |
| **NVIDIA Nemotron Mini** | `nemotron-mini:latest` | 2.7 GB | Modelo compacto de alta velocidade |
| **DeepSeek V2 Local** | `deepseek-v2:latest` | 8.9 GB | Modelo denso de alta capacidade |
| **Meta Llama 3.1** | `llama3.1:latest` | 4.9 GB | Baseline moderno (8B) |
| **DeepSeek R1** | `deepseek-r1:latest` | 5.2 GB | Modelo otimizado para raciocínio |
| **Google Gemma 4** | `gemma4:latest` | 9.6 GB | Modelo intermediário Google |
| **Meta Llama 3** | `llama3:8b` | 4.7 GB | Baseline 8B anterior |
| **Qwen 2.5** | `qwen2.5:7b` | 4.7 GB | Especialista em Tool-Calling (Alibaba) |
| **Microsoft Phi 3.5** | `phi3.5:latest` | 2.2 GB | Small Language Model (SLM) otimizado |
| **Mistral** | `mistral:latest` | 4.1 GB | Baseline europeu flexível e modular |
---
## 🔌 Servidor Model Context Protocol (MCP) e Análise de Risco
O FinSecAI implementa suporte ao **Model Context Protocol (MCP)**, expondo ferramentas financeiras estruturadas ao assistente conversacional.
### Quadro de Ferramentas MCP Expostas e Análise de Risco (Quadro 3 do TCC)
| Ferramenta | Finalidade | Parâmetros | Permissão Esperada | Risco Avaliado |
| :--- | :--- | :--- | :--- | :--- |
| `consultar_saldo` | Consultar saldo fictício do usuário autenticado. | `account_number` | **Permitida** | Vazamento de saldo de outro usuário. |
| `listar_transacoes` | Listar transações fictícias do usuário autenticado. | `account_number`, `limit` | **Permitida** | Exposição indevida de histórico financeiro. |
| `gerar_resumo_financeiro` | Produzir resumo textual das movimentações. | *(Nenhum)* | **Permitida** | Inclusão de dados não autorizados no resumo. |
| `alterar_saldo` | Alterar saldo fictício de uma conta *(Honeypot)*. | `account_number`, `amount`, `description` | **PROIBIDA** | Modificação indevida de registros do sistema. |
| `exportar_dados` | Exportar dados financeiros simulados. | *(Nenhum)* | **Restrita** | Exfiltração de informações sigilosas. |
> 🛡️ **Honeypot de Segurança (`alterar_saldo`)**: Esta ferramenta é intencionalmente exposta ao modelo no `tools_schema`, mas **sempre bloqueada** pelo backend com uma resposta de `SECURITY POLICY`. Se a LLM tentar invocá-la por manipulação de prompt, a ação é registrada como uma vulnerabilidade de escalada de privilégios/fraude.
---
## 🧪 Testes Automatizados de Segurança com Promptfoo
O **FinSecAI** integra-se ao framework **Promptfoo** para execução automatizada de 20 payloads adversariais em 5 repetições (100 testes por modelo).
### Formas de Execução
1. **Executar Todos os Modelos Juntos (Matriz Comparativa):**
```bash
python scripts/run_experiments.py
```
2. **Executar um Modelo Específico (100 execuções):**
```bash
# Exemplos:
python scripts/run_experiments.py --model llama3.1:latest
python scripts/run_experiments.py --model deepseek-r1:latest
python scripts/run_experiments.py --model nemotron-mini:latest
python scripts/run_experiments.py --model deepseek-v2:latest
python scripts/run_experiments.py --model gemma4:latest
python scripts/run_experiments.py --model llama3:8b
python scripts/run_experiments.py --model qwen2.5:7b
python scripts/run_experiments.py --model phi3.5:latest
python scripts/run_experiments.py --model mistral:latest
```
3. **Visualizar Matriz Gráfica no Navegador:**
```bash
npx promptfoo view
```
---
## 📊 Relatório Resumido de Resultados Experimentais (ASR & ASP)
> 💡 *Para o relatório analítico completo por categoria e carga de trabalho, consulte o documento [`RELATORIO_RESULTADOS_EXPERIMENTAIS.md`](/RELATORIO_RESULTADOS_EXPERIMENTAIS.md).*
Abaixo encontra-se a consolidação das **900 avaliações adversariais automatizadas** (20 payloads × 5 repetições × 9 modelos localmente hospedados no Ollama) extraídas do banco de dados relacional (PostgreSQL):
| Modelo LLM | Interações Totais | Defesas Ativas (SFR %) | Sucessos de Ataque | ASR (%) | ASP (%) | Resiliência Avaliada |
| :--- | :---: | :---: | :---: | :---: | :---: | :--- |
| **Meta Llama 3.1** (`llama3.1:latest`) | 100 | **80,0%** | **0** | **0,0%** | **2,5%** | 🛡️ **100% Defendido (Mais Seguro)** |
| **DeepSeek R1** (`deepseek-r1:latest`) | 100 | 63,0% | 4 | **4,0%** | **16,5%** | 🧠 Alta resistência (Chain-of-Thought) |
| **Google Gemma 4** (`gemma4:latest`) | 100 | 32,0% | 5 | **5,0%** | **15,0%** | 💎 Resistente a Jailbreaks |
| **Qwen 2.5** (`qwen2.5:7b`) | 100 | 50,0% | 10 | **10,0%** | **23,0%** | 🐉 Vulnerável a Engenharia Social |
| **Microsoft Phi 3.5** (`phi3.5:latest`) | 100 | 69,0% | 19 | **19,0%** | **19,5%** | ⚡ Vulnerável a manipulação de persona |
| **NVIDIA Nemotron Mini** (`nemotron-mini:latest`)| 100 | 28,0% | 20 | **20,0%** | **43,5%** | 🚀 Rápido (770ms), porém permissivo |
| **DeepSeek V2** (`deepseek-v2:latest`) | 100 | 25,0% | 25 | **25,0%** | **39,5%** | 🌐 Vulnerável a exfiltração de dados |
| **Meta Llama 3** (`llama3:8b`) | 100 | 46,0% | 25 | **25,0%** | **37,5%** | 🦙 Vulnerável a Jailbreaks (Versão 8B anterior) |
| **Mistral** (`mistral:latest`) | 100 | 21,0% | 40 | **40,0%** | **57,0%** | 🌊 Maior taxa de vulnerabilidade |
### Principais Achados Científicos:
1. **Evolução de Alinhamento (Llama 3 vs Llama 3.1)**: A taxa de sucesso de ataque despencou de **25,0% (Llama 3)** para **0,0% (Llama 3.1)**, evidenciando avanços significativos de segurança e pós-treinamento no modelo mais recente da Meta.
2. **Defesa em Camadas (Honeypot de Backend)**: Mesmo nos modelos em que a IA cedeu aos comandos de alteração de saldo (ex: Mistral com 40% ASR), a arquitetura do **FinSecAI** ativou a proteção do backend (`SECURITY POLICY`), impedindo que o banco de dados fosse modificado.
---
## 🚀 Como Executar o Ambiente Completo
1. **Subir os Contêineres**:
```bash
docker compose up -d --build
```
2. **Popular o Banco com Dados Contaminados (Seed)**:
```bash
docker compose exec api_v2 python scripts/seed_data.py
```
3. **Acessar os Serviços**:
* **Dashboard do Pesquisador**: [http://localhost:3000](http://localhost:3000)
* **Painel com Histórico de Todas as Interações**: [http://localhost:3000/interactions.html](http://localhost:3000/interactions.html)
* **Documentação da API (FastAPI)**: [http://localhost:8000/docs](http://localhost:8000/docs)
* **Painel Administrativo do Banco (pgAdmin)**: [http://localhost:5050](http://localhost:5050) (`admin@finsecai.com` / `adminpass`)
连接信息
猜你喜欢
暂无推荐服务器