Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
AGAS — Estrutura de ataque de shilling em grupo agêntico orientado por LLM que manipula rankings de recomendadores de filtragem colaborativa de caixa-preta usando estratégias adaptativas de múltiplos papéis enquanto evade a detecção. | Kitploit
Ferramentas/GitHubGitHub/phkhanhtrinh23/agas
Aprendizado de MáquinaPapers e PesquisaAprendizado e EducaçãoSegurança de IAAtaque Adversário
GitHubphkhanhtrinh23/agas

AGAS

Estrutura de ataque de shilling em grupo agêntico orientado por LLM que manipula rankings de recomendadores de filtragem colaborativa de caixa-preta usando estratégias adaptativas de múltiplos papéis enquanto evade a detecção.

Ver Repositório
23há 3 diasAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

Um Ataque de Shilling de Grupo Agêntico Eficiente e Eficaz em Sistemas de Recomendação

Este é o código oficial do artigo: "An Efficient and Effective Agentic Group Shilling Attack on Recommender Systems". Este artigo apresenta o AGAS, que é um ataque de shilling impulsionado por LLM contra recomendadores de filtragem colaborativa de caixa preta. Um Coordenador orquestra um conjunto de trabalhadores usuários falsos ao longo de uma sequência de rodadas. Em cada rodada, o Coordenador escolhe uma entre oito estratégias e atribui um papel a cada trabalhador. Os trabalhadores então decidem quais itens avaliar usando seu próprio loop de raciocínio no estilo ReAct.

AGAS pipeline


1. Visão geral do repositório```

agent_attack_rs/ bash/ # Reviewer-friendly shell scripts (RQ1–RQ5) prompts/ # Coordinator + per-role prompt templates scripts/run_agas.py # Single entry point (--dataset --victim ...) src/agas/ roles.py # Role enum {PR, SN, CA, IN} (paper symbols) signals.py # WorkerSignals (τ, γ, φ) + EnvSignals (ρ, Δρ, η, ξ, a) strategies.py # 8-strategy enum agents/ # Coordinator + Worker policies simulation/ # Episode runner (= AGAS algorithm outer loop) llm/ # OpenAI / Ollama recsys/ # Surrogate + 11-victim backends data/ # Dataset loaders + preprocessing pipeline tests/ # Pytest suite

root@kitploit:~
## 2. Recapitulação do método

O AGAS instancia quatro papéis de worker (símbolos do artigo em `roles.py`):

| Símbolo | Nome completo  | O que faz                                                               |
|---------|----------------|-------------------------------------------------------------------------|
| `PR`    | Profiler       | Avaliações seguras de itens de preenchimento para sondar a plataforma e construir pools de ponte. |
| `SN`    | Sniper         | Papel de payload; envio direto ao alvo ou promoção de item de ponte.    |
| `CA`    | Camouflageur   | Papel furtivo; reconstrói a confiança com atividade de aparência benigna. |
| `IN`    | Inactive       | Nenhuma ação nesta ronda (arrefecimento ou quarentena).                 |

A cada ronda, o Coordenador escolhe exatamente uma de oito estratégias de
`strategies.py` (ver `method_strategies.tex`):

1. **Victim Probe** (`S1_VICTIM_PROBE`)
2. **Bridge Building** (`S2_BRIDGE_BUILDING`, apenas vítimas de grafo)
3. **Warm-up** (`S3_WARM_UP`)
4. **First Push** (`S4_FIRST_PUSH`)
5. **Silent Slowdown** (`S5_SILENT_SLOWDOWN`)
6. **Profile Cleanup** (`S6_PROFILE_CLEANUP`)
7. **Safe Replacement** (`S7_SAFE_REPLACEMENT`)
8. **Main Attack** (`S8_MAIN_ATTACK`)

O Coordenador orienta essas decisões a partir de dois grupos de sinais (`signals.py`):

* **Sinais de worker** `τ_{t,w}, γ_{t,w}, φ_{t,w}` — confiança, risco e um
  validador estrutural. As equações de atualização correspondem exatamente a
  `method_coordinator.tex` (`eq:trust_update`, `eq:risk_update`, `eq:risk_decay`,
  `eq:profile_validator`).
* **Sinais de ambiente** `ρ^{(t)}, Δρ^{(t)}, η_t, ξ_t = (q_t, s_t), a_t` —
  classificação, movimento de classificação, taxa de aceitação, sinal de supressão, indicador de alerta. A
  pontuação de suspeita `q_t` é a soma ponderada por 0,2 dos cinco termos
  normalizados `(d̂_t, δ̂_t, m̂_t, ŝ_t, g_t)` de `eq:round_suppression_terms` e
  `eq:round_suppression_score`.

### Ciclo da ronda (ASCII)```
                ┌─────────────────────────────────────────────────┐
   t=0…T-1 ──►  │ 1. Observe ρ^{(t)}, update memory m_t           │
                │ 2. Update τ, γ, φ, η, ξ, a                       │
                │ 3. Coordinator picks Strategy ∈ {S1…S8}          │
                │    and assigns Role ∈ {PR, SN, CA, IN} per worker│
                │ 4. Workers act (filler / bridge / target items)  │
                │ 5. Validate + accept actions → ΔR̃^{(t+1)}        │
                │ 6. Refit / query victim → ρ^{(t+1)}              │
                └─────────────────────────────────────────────────┘
                          │
                          ▼
                   t* = argmin_t ρ^{(t)}, return R* = [R ; R̃^{(≤t*)}]

O loop externo é implementado em src/agas/simulation/episode.py e espelha algorithms/agas_end_to_end.tex.

3. Ambiente

PyTorch e CUDA são necessários apenas para os modelos vítimas de deep learning (extra [targets]). O loop principal do AGAS e os caminhos baseados em regras / surrogate são executados em CPU sem dependência de GPU.

4. Instalação```bash

pip install -e .

If you want to use the deep-learning victim models (LightGCN, NeuMF, …)

pip install -e '.[targets]'

root@kitploit:~
Variáveis de ambiente necessárias:

| Variável           | Finalidade                                                       | Padrão                  |
|--------------------|---------------------------------------------------------------|--------------------------|
| `OPENAI_API_KEY`   | Chave da OpenAI Responses API para o Coordinator / worker LLMs.   | *(não definida → fallback)*     |
| `OPENAI_MODEL`     | Nome do modelo passado para a OpenAI.                                  | `gpt-5.1`                |

## 4. Datasets

O artigo avalia em seis benchmarks públicos de CF (ver `experiment.tex`):

| Nome curto  | Fonte                    | Usuários     | Itens  | Interações       | Download                                                          | Coloque os arquivos brutos em  |
|-------------|---------------------------|----------:|-------:|-------------------:|-------------------------------------------------------------------|---------------------|
| ML-100K     | MovieLens 100K            |       943 |  1,682 |            100,000 | [GroupLens](https://files.grouplens.org/datasets/movielens/ml-100k.zip) | `data/ml-100k/`     |
| ML-1M       | MovieLens 1M              |     6,040 |  3,706 |          1,000,209 | [GroupLens](https://files.grouplens.org/datasets/movielens/ml-1m.zip)   | `data/ml-1m/`       |
| Genome 2021 | MovieLens Tag Genome 2021 |    37,941 | 84,661 | 2,000,000 (limitado) | [GroupLens](https://grouplens.org/datasets/movielens/tag-genome-2021/)  | `data/genome2021/`  |
| Netflix     | Netflix Prize             |   342,445 | 17,434 | 2,000,000 (limitado) | [Kaggle](https://www.kaggle.com/datasets/netflix-inc/netflix-prize-data) | `data/netflix/`     |
| Douban      | Douban Movie              |    28,057 | 49,176 |          8,085,679 | [HKUST](http://shichuan.org/HIN_dataset.html)                     | `data/douban/`      |
| Amazon      | Amazon Reviews 2018       |   998,653 | 30,964 | 2,000,000 (limitado) | [UCSD](https://nijianmo.github.io/amazon/index.html)              | `data/amazon/`      |

Depois de colocar os downloads brutos em `data/<dataset>/`, execute:```bash
python scripts/preprocess_all.py --data-root data --output-root processed

Cada conjunto de dados é reescrito em arquivos canônicos interactions.csv + items.csv sob processed/<dataset>/. Os testes de fumaça usam a amostra muito menor ml-latest-small que acompanha o MovieLens.

Protocolo de divisão treino / teste

O pipeline de pré-processamento não armazena arquivos de divisão — ele exporta o log completo de interações. As divisões são aplicadas em tempo de execução:

Isso segue o protocolo padrão de avaliação de ataques de shilling: o atacante observa os rankings da vítima sobre usuários do conjunto de treinamento e otimiza de acordo, simulando um cenário de implantação de caixa-preta.

5. Como executar

scripts/run_agas.py é o ponto de entrada único. As sete flags exigidas pelo protocolo do artigo são:``` python scripts/run_agas.py
--dataset ml-100k
--victim lightgcn
--rounds 18
--seed 42
--n_workers 8
--budget 0.01
--out outputs/agas_ml100k_lightgcn_seed42.json

root@kitploit:~
| Flag           | Significado                                                                                          |
|----------------|--------------------------------------------------------------------------------------------------|
| `--dataset`    | Um de `ml-100k`, `ml-1m`, `genome2021`, `netflix`, `douban`, `amazon`, `ml-latest-small`.       |
| `--victim`     | Um dos 11 victims de `experiment.tex` (`mf`, `bpr`, `neumf`, `gmf`, `ncf`, `ngcf`, `lightgcn`, `simgcl`, `xsimgcl`, `egcf`, `lightccf`). |
| `--rounds`     | Número de rodadas do AGAS `T` (padrão do artigo `18`).                                                  |
| `--seed`       | Semente aleatória (o artigo faz média sobre cinco).                                                          |
| `--n_workers`  | Tamanho do pool de usuários falsos |
| `--budget`     | Orçamento de interação por usuário `L`, expresso como uma fração de.                                |
| `--out`        | Caminho JSON de saída para o rastreamento completo do episódio e métricas de resumo.                                 |

### Reproduzindo cada questão de pesquisa em uma pequena amostra ML-100K```bash
bash bash/run_performance.sh          # RQ1
bash bash/run_stealth_and_detect.sh   # RQ2 + RQ3
bash bash/run_ablation.sh             # RQ4
bash bash/run_efficiency.sh           # RQ5

Cada script imprime qual experimento está executando, o caminho de saída e uma nota apontando para a figura/tabela correspondente no artigo.

Exemplo de saída esperada no console (truncada):``` [RQ1] Performance benchmark — tiny ML-100K sample [RQ1] Output directory: agent_attack_rs/outputs/rq1_performance [RQ1] Map outputs to tables/benchmark_unpopular.tex === ml-latest-small / lightgcn / seed=42 === Round 0 | ρ = 1834 Δρ = +0 strategy = S1_VICTIM_PROBE Round 1 | ρ = 1450 Δρ = +384 strategy = S1_VICTIM_PROBE Round 2 | ρ = 1212 Δρ = +238 strategy = S3_WARM_UP … [RQ1] Done. Expected outputs in agent_attack_rs/outputs/rq1_performance

root@kitploit:~
### Ataque de transferência contra LightGCN (in-loop)

Executa o LightGCN tanto como modelo de episódio quanto como alvo de avaliação. A vítima
retreina após cada rodada, de modo que o Coordenador recebe feedback real de ranking e
adapta papéis e estratégia de acordo.```bash
agas run-transfer \
  --dataset ml-latest-small \
  --target-item-id 7114 \
  --target-keyword horror \
  --num-agents 50 \
  --num-steps 10 \
  --victim-model-hint lightgcn \
  --profiler-bridge-method cooccurrence \
  --probe-steps 0 \
  --graph-sniper \
  --clone-segment-users-to-agents \
  --transfer-mode option-b \
  --target-models lightgcn \
  --target-epochs 50 \
  --target-embedding-dim 32 \
  --target-lightgcn-layers 3 \
  --min-active-fraction 0.5 \
  --min-sniper-fraction 0.3 \
  --output outputs/optb_warmstart_clean_cooc_50ag_10r.json

FlagSignificado
--profiler-bridge-method cooccurrenceItens de ponte selecionados por coocorrência com o cluster de avaliadores do alvo.
--graph-sniperSnipers avaliam itens de ponte e o alvo diretamente (ação dupla).

Após a execução, os resultados são impressos e salvos no JSON de saída:``` Bridge-item selection (cooccurrence): 50 items selected for profiler pool. ... Transfer evaluation saved to outputs/optb_warmstart_clean_cooc.json Option B (in-loop target models): lightgcn: final rank (best in-loop at step , best-seq retrain rank )

root@kitploit:~
## 6. Registro de tokens, ativação de funções e rastreamento de estratégia

Cada chamada de `run-episode` calcula e registra automaticamente três tipos de análises:

### 6a. Uso de tokens

Os tokens são contados por chamada de LLM e acumulados ao longo do episódio para o
coordenador e para cada agente trabalhador separadamente. Eles são impressos no
console após o episódio e salvos dentro do JSON de saída em
`token_usage`.

**Exemplo de saída no console:**```
--- Token Usage ---
  Coordinator : prompt=20,043  completion=2,526  total=22,569
  agent_1     : prompt=1,308   completion=619    total=1,927
  agent_2     : prompt=3,930   completion=451    total=4,381
  agent_3     : prompt=0       completion=0      total=0
  AGGREGATE   : prompt=25,281  completion=3,596  total=28,877
-------------------

Estrutura JSON (output["token_usage"]):```json { "coordinator": {"prompt_tokens": 20043, "completion_tokens": 2526, "total_tokens": 22569}, "by_agent": {"agent_1": {"prompt_tokens": 1308, ...}, ...}, "aggregate": {"prompt_tokens": 25281, "completion_tokens": 3596, "total_tokens": 28877} }

root@kitploit:~
**Lendo contagens de tokens de uma execução salva:**```python
import json
with open("outputs/my_run.json") as f:
    data = json.load(f)

agg = data["token_usage"]["aggregate"]
print(f"Total tokens used: {agg['total_tokens']:,}")
print(f"  Prompt     : {agg['prompt_tokens']:,}")
print(f"  Completion : {agg['completion_tokens']:,}")

# Per-step token usage (inside each worker trace)
for step in data["history"]:
    for report in step["reports"]:
        tok = (report.get("trace") or {}).get("token_usage") or {}
        print(f"Step {step['step']} {report['agent_id']}: {tok.get('total_tokens', 0)} tokens")

Notas do provedor:

ProvedorCampos lidos
OpenAI Responses APIresponse.usage.input_tokens, .output_tokens
Ollama /api/generatedata["prompt_eval_count"], data["eval_count"]

6b. Contagens de ativação de papéis

Após cada episódio, a CLI conta quantas vezes cada papel foi atribuído em todos os agentes e todas as etapas. Impresso no console e salvo em output["activation_stats"]["role_counts"].

Exemplo de saída no console:``` --- Role Activations --- inactive : 10 profiler : 4 --- Role Activations by Agent --- agent_1 : inactive=3 profiler=1
agent_2 : profiler=3 inactive=2 agent_3 : inactive=5

root@kitploit:~
**Lendo contagens de funções programaticamente:**```python
stats = data["activation_stats"]
print("Most used role:", max(stats["role_counts"], key=stats["role_counts"].get))
print("Role counts:", stats["role_counts"])
print("By agent:", stats["role_counts_by_agent"])

6c. Contagens de ativação de estratégias

O padrão de atribuição de funções do coordenador é mapeado para uma das oito estratégias do artigo (S1–S8) a cada passo, usando as seguintes regras de inferência:

Salvo em output["activation_stats"]["strategy_counts"].

Exemplo de saída no console:``` --- Strategy Activations --- S1_VICTIM_PROBE : 1 S3_WARM_UP : 4

root@kitploit:~
### 6d. Log legível por humanos por execução

Um arquivo `.log` é gravado junto a cada JSON de saída automaticamente
(ex.: `outputs/my_run.log`). Ele contém:

- Metadados do episódio (dataset, target, contagem de agentes, políticas)
- Linha do tempo por passo: rank, estratégia, papel de cada agente, ações e contagem de tokens por chamada
- Resumo do uso de tokens
- Contagens de ativação de papéis e estratégias

**Executando a CLI e lendo o log:**```bash
agas run-episode \
  --dataset ml-latest-small \
  --target-item-id 2571 \
  --target-keyword "Matrix" \
  --num-agents 3 \
  --num-steps 10 \
  --coordinator-policy openai \
  --worker-policy openai \
  --output outputs/run_matrix.json

# Human-readable log is at:
cat outputs/run_matrix.log

# JSON output is at:
python -c "
import json
d = json.load(open('outputs/run_matrix.json'))
print('Token aggregate:', d['token_usage']['aggregate'])
print('Role counts:',    d['activation_stats']['role_counts'])
print('Strategy counts:',d['activation_stats']['strategy_counts'])
"

7. Protocolo e prompts

O Coordenador e todos os workers são agentes LLM que leem de prompts/<role>/{system,user}.txt. O protocolo completo — o que o Coordenador interpola em seu prompt, quais variáveis os workers veem, e os esquemas de saída JSON esperados — está em prompts/README.md.

Breve resumo:

  • Coordenador → JSON com {"strategy": "S?_…", "assignments": {agent: ROLE}}.
  • Workers → JSON com {"actions": [{"item_id": …, "rating": …, "reason": …}]}.
  • Os pools de itens permitidos dependem do papel (pool de preenchimento, pool de ponte, alvo + concorrentes) e são aplicados pelo código host.

8. Resultados reproduzidos do artigo

Todos os números abaixo são média ± IC de 95 % sobre 5 seeds, escalonados por 10³ (ou seja, uma célula de 40.0±0.2 significa HR@10 = 0.0400 ± 0.0002). Negrito = melhor, itálico = segundo melhor, correspondendo a tables/benchmark_unpopular.tex e tables/detection_mf.tex no artigo.

Promoção de alvo impopular (tables/benchmark_unpopular.tex)

Reproduza com:```bash bash bash/run_performance.sh # RQ1; writes outputs/rq1_performance/

root@kitploit:~
**Vítimas baseadas em embeddings** (célula = `H@10 / NDCG@10`):

| Método | ML-100K·MF(BPR) | ML-100K·NeuMF | ML-1M·GMF | ML-1M·NCF | Amazon·MF(BPR) | Amazon·NCF | Genome·GMF | Genome·NeuMF | Netflix·MF(BPR) | Netflix·NeuMF |
|---|---|---|---|---|---|---|---|---|---|---|
| NoneAttack | 1.8±0.2 / 0.7±0.5 | 2.2±0.2 / 0.9±0.6 | 0.9±0.1 / 0.4±0.3 | 0.8±0.1 / 0.3±0.2 | 0.4±0.1 / 0.1±0.2 | 0.5±0.1 / 0.2±0.2 | 0.2±0.1 / 0.1±0.2 | 0.5±0.1 / 0.2±0.2 | 0.6±0.1 / 0.2±0.2 | 0.7±0.1 / 0.3±0.2 |
| RandomAttack | 4.1±0.3 / 1.6±0.6 | 4.7±0.3 / 1.8±0.6 | 2.4±0.2 / 1.0±0.5 | 2.0±0.2 / 0.8±0.4 | 1.2±0.1 / 0.5±0.3 | 1.3±0.1 / 0.5±0.3 | 0.7±0.1 / 0.3±0.2 | 1.3±0.1 / 0.5±0.3 | 1.8±0.2 / 0.7±0.4 | 2.0±0.2 / 0.8±0.5 |
| BandwagonAttack | 6.2±0.3 / 2.5±0.7 | 6.8±0.3 / 2.7±0.8 | 3.4±0.2 / 1.4±0.6 | 2.9±0.2 / 1.2±0.5 | 2.0±0.1 / 0.8±0.4 | 2.2±0.1 / 0.9±0.4 | 1.2±0.1 / 0.5±0.3 | 2.0±0.1 / 0.8±0.4 | 2.7±0.2 / 1.1±0.5 | 3.0±0.2 / 1.2±0.5 |
| AUSH | 10.6±0.6 / 4.3±1.2 | 10.0±0.5 / 4.1±1.1 | 6.5±0.4 / 2.6±0.9 | 4.3±0.3 / 1.8±0.7 | 3.3±0.3 / 1.3±0.6 | 3.1±0.3 / 1.2±0.6 | 1.9±0.2 / 0.8±0.5 | 2.8±0.3 / 1.1±0.6 | 4.2±0.3 / 1.7±0.7 | 4.5±0.3 / 1.8±0.8 |
| PoisonRec | 13.4±0.7 / 5.3±1.6 | 11.5±0.6 / 4.7±1.5 | 7.6±0.5 / 3.0±1.1 | 5.5±0.4 / 2.1±0.9 | _5.8±0.5_ / _2.3±1.0_ | 4.8±0.3 / 1.9±0.8 | 2.3±0.3 / 0.9±0.6 | 3.2±0.3 / 1.3±0.7 | 5.6±0.4 / 2.2±1.0 | 5.7±0.4 / 2.3±1.0 |
| PGA | 11.5±0.6 / 4.6±1.3 | 12.2±0.6 / 5.0±1.4 | 8.4±0.5 / 3.4±1.1 | 6.0±0.4 / 2.4±0.9 | 4.3±0.3 / 1.7±0.8 | 4.0±0.3 / 1.6±0.7 | 2.8±0.2 / 1.1±0.6 | 3.8±0.3 / 1.5±0.7 | 5.5±0.4 / 2.2±1.0 | 6.0±0.5 / 2.4±1.0 |
| AgentSA | 12.7±0.6 / 5.2±1.4 | _12.5±0.6_ / _5.1±1.4_ | 8.2±0.4 / 3.3±1.0 | _7.2±0.4_ / _2.9±1.0_ | 5.6±0.3 / 2.2±0.9 | 4.9±0.3 / 1.9±0.8 | _2.9±0.2_ / _1.1±0.6_ | 4.2±0.3 / 1.7±0.7 | _6.3±0.4_ / _2.5±1.0_ | 6.5±0.4 / 2.6±1.0 |
| AgentAttack | _13.6±0.7_ / _5.5±1.5_ | 12.1±0.6 / 4.9±1.4 | _8.8±0.5_ / _3.5±1.1_ | 6.8±0.4 / 2.7±1.0 | 5.7±0.3 / 2.2±0.9 | _5.2±0.3_ / _2.0±0.9_ | 2.7±0.2 / 1.0±0.6 | _4.5±0.3_ / _1.8±0.8_ | 6.1±0.4 / 2.4±1.0 | _6.9±0.5_ / _2.8±1.0_ |
| **AGAS (Ours)** | **40.0±0.2 / 16.1±0.3** | **35.0±0.2 / 14.2±0.3** | **22.6±0.1 / 9.0±0.2** | **17.6±0.1 / 7.1±0.2** | **16.1±0.1 / 6.3±0.2** | **15.0±0.1 / 5.9±0.2** | **8.2±0.1 / 3.2±0.2** | **11.5±0.1 / 4.6±0.2** | **18.2±0.1 / 7.3±0.2** | **19.6±0.1 / 7.9±0.2** |
| **Improvement** | **+187.8% / +182.5%** | **+186.9% / +184.0%** | **+162.8% / +164.7%** | **+155.1% / +153.6%** | **+177.6% / +173.9%** | **+172.7% / +168.2%** | **+192.9% / +190.9%** | **+161.4% / +155.6%** | **+198.4% / +192.0%** | **+192.5% / +192.6%** |

**Vítimas baseadas em grafos** (célula = `H@10 / NDCG@10`):

| Método | ML-100K·NGCF | ML-100K·LightGCN | ML-1M·SimGCL | ML-1M·XSimGCL | Amazon·EGCF | Amazon·LightCCF | Genome·NGCF | Genome·LightGCN | Douban·NGCF | Douban·LightGCN |
|---|---|---|---|---|---|---|---|---|---|---|
| NoneAttack | 1.9±0.2 / 0.8±0.5 | 2.4±0.2 / 1.0±0.6 | 0.8±0.1 / 0.3±0.2 | 0.9±0.1 / 0.4±0.3 | 0.4±0.1 / 0.2±0.2 | 0.5±0.1 / 0.2±0.2 | 0.2±0.1 / 0.1±0.2 | 0.3±0.1 / 0.1±0.2 | 0.7±0.1 / 0.3±0.2 | 0.6±0.1 / 0.2±0.2 |
| RandomAttack | 4.5±0.3 / 1.8±0.6 | 5.0±0.3 / 2.0±0.7 | 1.8±0.2 / 0.7±0.4 | 2.2±0.2 / 0.9±0.5 | 1.1±0.1 / 0.4±0.3 | 1.2±0.1 / 0.5±0.3 | 0.6±0.1 / 0.2±0.2 | 0.6±0.1 / 0.2±0.2 | 2.0±0.2 / 0.8±0.5 | 1.9±0.2 / 0.7±0.4 |
| BandwagonAttack | 5.9±0.3 / 2.4±0.7 | 6.7±0.3 / 2.7±0.8 | 2.4±0.2 / 1.0±0.5 | 2.9±0.2 / 1.2±0.6 | 1.8±0.2 / 0.7±0.4 | 1.9±0.2 / 0.8±0.4 | 1.1±0.1 / 0.4±0.3 | 1.0±0.1 / 0.4±0.3 | 2.8±0.2 / 1.1±0.6 | 2.7±0.2 / 1.1±0.5 |
| GSPAttack | 11.0±0.6 / 4.5±1.3 | 11.5±0.6 / 4.7±1.3 | 4.8±0.3 / 1.9±0.8 | 5.8±0.4 / 2.3±0.9 | 3.2±0.3 / 1.3±0.6 | 3.4±0.3 / 1.4±0.6 | 2.0±0.2 / 0.8±0.5 | 1.8±0.2 / 0.7±0.5 | 5.0±0.3 / 2.0±0.8 | 4.8±0.3 / 1.9±0.8 |
| TargetedAttack | 11.9±0.6 / 4.8±1.3 | 12.6±0.6 / 5.1±1.4 | 5.4±0.4 / 2.2±0.8 | 6.4±0.4 / 2.5±1.0 | 4.7±0.3 / 1.9±0.7 | 4.5±0.3 / 1.8±0.7 | 2.5±0.2 / 1.0±0.6 | 2.2±0.2 / 0.9±0.5 | 5.4±0.4 / 2.2±0.8 | 5.2±0.3 / 2.1±0.8 |
| CLeaR | 13.1±0.7 / 5.4±1.4 | 13.9±0.7 / 5.7±1.5 | 6.4±0.4 / 2.6±0.9 | 7.7±0.5 / 3.1±1.0 | 4.6±0.3 / 1.8±0.7 | 5.2±0.4 / 2.1±0.8 | 2.9±0.3 / 1.2±0.6 | 2.8±0.2 / 1.1±0.6 | 5.8±0.4 / 2.3±0.9 | 5.5±0.3 / 2.2±0.9 |
| AgentSA | 13.8±0.6 / 5.6±1.4 | _14.2±0.7_ / _5.8±1.5_ | 6.1±0.4 / 2.4±0.8 | _8.4±0.5_ / _3.3±1.0_ | 4.5±0.3 / 1.8±0.7 | _5.4±0.3_ / _2.2±0.8_ | 2.8±0.2 / 1.1±0.6 | _2.9±0.2_ / _1.1±0.6_ | 5.4±0.3 / 2.2±0.8 | _5.8±0.4_ / _2.3±0.9_ |
| AgentAttack | _14.4±0.7_ / _5.9±1.5_ | 14.0±0.7 / 5.6±1.5 | _6.6±0.4_ / _2.6±0.9_ | 8.0±0.5 / 3.1±1.0 | _4.9±0.3_ / _1.9±0.7_ | 5.0±0.3 / 2.0±0.8 | _3.1±0.3_ / _1.2±0.6_ | 2.5±0.2 / 1.0±0.5 | _6.0±0.4_ / _2.4±0.9_ | 5.5±0.3 / 2.2±0.9 |
| **AGAS (Ours)** | **40.0±0.2 / 17.0±0.3** | **40.5±0.2 / 16.5±0.3** | **16.8±0.1 / 6.7±0.2** | **20.7±0.1 / 8.2±0.2** | **13.1±0.1 / 5.2±0.2** | **13.8±0.1 / 5.4±0.2** | **8.9±0.1 / 3.4±0.2** | **7.8±0.1 / 3.1±0.2** | **17.0±0.1 / 6.8±0.2** | **16.9±0.1 / 6.7±0.2** |
| **Improvement** | **+181.7% / +193.1%** | **+189.3% / +194.6%** | **+162.5% / +157.7%** | **+155.6% / +156.2%** | **+178.7% / +173.7%** | **+165.4% / +157.1%** | **+196.7% / +183.3%** | **+178.6% / +181.8%** | **+193.1% / +195.7%** | **+196.5% / +191.3%** |

## 9. Licença

Licença MIT.
Baixar ferramenta
ComponenteRequisitoTestado com
Python≥ 3.103.13.5
PyTorch≥ 2.1 (apenas targets)2.11.0+cu128
CUDAopcional12.8
NumPy≥ 1.242.4.2
Pandas≥ 2.03.0.1
SciPy≥ 1.101.17.0
scikit-learn≥ 1.31.8.0
openai SDK≥ 1.122.21.0
EtapaDados usadosDetalhes
TreinamentoTodas as interações em interactions.csvO substituto (e qualquer modelo alvo) é ajustado no conjunto completo de avaliações históricas.
Avaliação do ataqueRanking sobre usuários do segmentoApós cada rodada, o rank médio do item alvo é medido entre usuários benignos reais que avaliaram ≥ 4.0 em pelo menos um item do cluster alvo (até 2 000 usuários). Nenhum conjunto de teste reservado é gravado em disco.
Injeção falsaAnexada em memóriaInterações de usuários falsos são anexadas e o modelo é reajustado incrementalmente a cada rodada. Elas nunca são misturadas nos arquivos CSV canônicos.
CondiçãoEstratégia inferida
Fase de sondagem / agente de diagnóstico ativoS1_VICTIM_PROBE
Sinalizador de alerta definido (a_t = 1)S7_SAFE_REPLACEMENT
Pontuação máxima de suspeita ≥ 0.5S6_PROFILE_CLEANUP
Sem snipers + desconto visívelS5_SILENT_SLOWDOWN
Sem snipers + sem descontoS3_WARM_UP
Snipers ativosS4_FIRST_PUSH
Snipers ativosS8_MAIN_ATTACK