LLM-Attack Suite: A Unified Red-Team Framework for Privacy Evaluation of Split and Distributed LLM Systems
Abstract
Split language models keep input text on a client but send intermediate representations to a server. Attacks can reconstruct text from these messages. Comparing privacy evaluations is difficult when attackers see different messages, know different model weights or use different datasets and recovery measures. We present LLM-Attack Suite, a framework that records these choices and lets researchers check, compare and extend an evaluation. Compatible attacks reuse recorded messages, and their predictions are saved for independent scoring. The scoring rule requires a linked undefended reference before a defence can pass. Reports also identify attacks that remain untested. In a controlled GPT-2 experiment, adding gradients returned during training increased token recovery from 94.20% to 97.38% and exact-document recovery from 13.71% to 37.77%. The 95% interval for the token gain lay above the two-percentage-point threshold fixed before testing. This experiment is shared with a companion study; here it tests how the evaluation responds to a change in attacker access. Further studies measure how corpus choice and compression defences affect recovery, compare an adapted published attack with its reference implementation, and test the measurement code. The framework reports implementation checks separately from measured attack effectiveness. Each privacy claim should state the attacker, dataset and scoring rule, report its controls and identify untested attacks.
Figures & tables
| Token recovery (%) | Exact documents (%) | ||||
|---|---|---|---|---|---|
| Depth | Layers held | Activation | Joint | Activation | Joint |
| 3 | Public | 97.39 | 98.29 | 43.13 | 55.51 |
| 3 | Trained | 97.81 | 98.72 | 51.41 | 66.13 |
| 6 | Public | 94.20 | 97.38 | 13.71 | 37.77 |
| 6 | Trained | 94.81 | 98.27 | 20.23 | 58.55 |
| Corpus | Baseline (%) | Recovery (%) | Excess (pp) |
|---|---|---|---|
| Source code | 20.31 | 64.94 | 46.78 |
| Synthetic clinical-style notes | 6.25 | 100.00 | 93.75 |
| WikiText-2 | 2.64 | 63.25 | 62.79 |
| Depth | Layers held | Activation | SipIt-128 | Joint | Refined BiSR |
|---|---|---|---|---|---|
| 3 | Public | 97.39 | 97.45 | 98.29 | 96.16 |
| 3 | Trained | 97.81 | 98.89 | 98.72 | 97.79 |
| 6 | Public | 94.20 | 95.25 | 97.38 | 93.21 |
| 6 | Trained | 94.81 | 98.14 | 98.27 | 98.25 |
| # | Observation point | What crosses it | Attacks on it |
|---|---|---|---|
| S1 | activation (forward) | the activations of each training batch or prompt | seam-inversion , vec2text-inversion , the key-solving modules for secret rotation, latent-probe , latent-sensitivity , wire-eval |
| S2 | gradient (backward) | the gradients returned for those activations | gradient-inversion (DLG++, our multi-restart extension of deep leakage from gradients; iDLG; and a local variant of TAG), batch-label-recon , label-scoring , joint reconstruction |
| S3 | server-side weights | never (held by server) | body-extraction (functional distillation) |
| S4 | outputs / logits / answers | API responses | output-inversion , trace-inversion |
| S5 | GPU memory residue | freed buffers, local memory | gpu-memory (residue, scrub-check) |
| S6 | cache / timing | key-value and prefix caches, contention, acceptance patterns | kv-timing (with a speculative-decoding acceptance mode), gpu-memory (unified-memory timing mode) |
| Signal | When it crosses | How the attack uses it | What it reveals |
|---|---|---|---|
| Activation, one vector per token | Training and inference | The learned decoder turns each activation into a short list of likely tokens; a beam search keeps the guesses whose recomputed activations match. SipIt and the inversion attack also read it. | Token, whole-document and span recovery |
| Gradient of the next-token loss | Training only | Each gradient points at the token that follows it, so it supplies half of the candidates at each position. | What the gradient adds to the same scores |
| Size of the returned gradient, per document | Training | The summed gradient size scores whether a document contains a given token. | Properties of the text, as an area under the ROC curve |
| Controls: another document’s gradient; random tokens in place of the gradient’s suggestions | Training | The same attack, with the gradient’s information removed | Whether the gain comes from the gradient |
| Token accuracy | Whole-document recovery | ||||
|---|---|---|---|---|---|
| Depth | Layers held | Activation-only | Joint | Activation-only | Joint |
| public | 97.39% | 98.29% | 43.13% | 55.51% | |
| trained | 97.81% | 98.72% | 51.41% | 66.13% | |
| public | 94.20% | 97.38% | 13.71% | 37.77% | |
| trained | 94.81% | 98.27% | 20.23% | 58.55% | |
| Corpus | Trivial guess | Recovery | Excess | Verdict |
|---|---|---|---|---|
| Source code (own repository) | 20.31% | 64.94% | pp | FAIL |
| Synthetic clinical-style | 6.25% | 100.00% | pp | FAIL |
| WikiText-2 reference | 2.64% | 63.25% | pp | FAIL |
| Corpus | Guess count | Guess rate | Floor (pp) |
|---|---|---|---|
| Source code | 154/768 | 20.05% | 3.91 |
| Synthetic clinical-style | 48/768 | 6.25% | 2.60 |
| WikiText-2 reference | 36/768 | 4.69% | 2.34 |
| Defence | 20-step excess (pp) | 100-step excess (pp) |
|---|---|---|
| none | ||
| added noise ( ) | ||
| sparsify-10% | ||
| mid-lite | (PASS, at floor) | |
| santext-30% | ||
| at-lite |
| Depth | PCA (fixed) | Bottleneck (frozen) | Bottleneck (co-trained) |
|---|---|---|---|
| 1 | 59.16% | 60.36% | 61.14% |
| 2 | 66.86% | 68.59% | 67.68% |
| 3 | 58.32% | 58.00% | 60.24% |
| 4 | 56.88% | 57.35% | 60.22% |
| 5 | 55.90% | 57.02% | 56.80% |
| 6 | 50.89% | 52.16% | 53.09% |
| Training | Inference | ||||
|---|---|---|---|---|---|
| Corpus | Tokens | None | Added noise | None | Added noise |
| Code | 64 | 78.32% | 21.55% | 79.70% | 26.27% |
| Code | 128 | 87.37% | 23.11% | 86.71% | 32.92% |
| Wikipedia reference | 64 | 81.77% | 9.96% | 82.50% | 20.82% |
| Wikipedia reference | 128 | 88.96% | 14.55% | 90.22% | 26.17% |
| Dialogue | 32 | 76.56% | 36.72% | 76.99% | 55.05% |
| Depth | Layers held | Activation-only | SipIt-128 | Joint | Inverter | Refined |
|---|---|---|---|---|---|---|
| 3 | Public | 97.39 | 97.45 | 98.29 | 91.90 | 96.16 |
| 3 | Trained | 97.81 | 98.89 | 98.72 | 91.90 | 97.79 |
| 6 | Public | 94.20 | 95.25 | 97.38 | 91.67 | 93.21 |
| 6 | Trained | 94.81 | 98.14 | 98.27 | 91.67 | 98.25 |
| Threat model | Module or arm | Positive / negative control | Model | Corpus | Budget | Observed recovery or outcome | Comparator | Evidence tier |
|---|---|---|---|---|---|---|---|---|
| Passive observer; public or trained client layers | Joint reconstruction, v3 arm | Shuffled-gradient, random-candidate and backward-only controls | GPT-2 124M | 256 held-out 32-token WikiText-2 documents | 10 victim seeds 2 attack seeds; ; beam 2 | 97.38% tokens and 37.77% exact documents with public layers; 58.55% exact with trained layers | Activation-only: 94.20% tokens, 13.71% exact documents | Confirmatory; shared Paper A/B evidence |
| Compromised cloud observes forward and returned-gradient channels | latent-probe plus exact gradient-support read | Injected-leak calibration; shuffled-label negative control | Qwen3-0.6B | Fixed-width WikiText-2 blocks | 9 independent seeds; 4,096 frames per main run | Real/decoy partition exact on 4,096/4,096 frames; frequent-token effect about pp | Forward-only gate passed; shuffled controls at floor | Independent real-system audit [ 16 ] |
| Passive seam observer; public client layers | seam-inversion | Corpus-specific majority guess; undefended positive target | GPT-2 124M | Source code, templated clinical notes, WikiText-2 | 3 seeds; inference positions per corpus | 64.94% , 100.00% , 63.25% | Guess rates 20.31%, 6.25%, 2.64% | Controlled real-model qualification |
| White-box observer knows the compressor | seam-inversion white-box path | Twenty gradient-path and capture-matching checks | GPT-2 124M | Pinned pilot WikiText-2 | 198 stable and 99 co-trained runs; 128 optimisation steps | 18.85–68.59% mean token recovery over every internal depth | Stable and co-trained tiers use fully specified protocols | Controlled real-model qualification |
| Single-seam observer with BiSR grants | bisr-baseline | Archived reference implementation on identical fresh inputs | GPT-2 124M | Fresh WikiText-103 for conformance; main held-out set for comparison | 3,072 paired predictions; 20 inverter epochs; 32 backward + 800 forward refinement steps | Reference agreement on 3,072/3,072 ; adapted attack 93.21% at depth six/public | Joint arm 97.38%; attack-specific fixed budgets | Reproduced conformance + adapted comparison |
| Passive seam observer across training horizons | seam-inversion | Undefended positive target; majority control; mid-lite protected contrast | GPT-2 124M | Pinned pilot WikiText-2 | 20/100 steps, 3 seeds | Undefended excess pp; mid-lite pp | Same attacker on undefended and protected captures | Controlled horizon qualification |
| Property | Controlled intervention | Expected response | Cases |
|---|---|---|---|
| MV1: recovery metrics | Known token errors, absent spans and misplaced matching text | Exact token and span counts; missing spans stay missing; misplaced matches score zero | 3/3 |
| MV2: score conformance | Independent Wilson calculations and threshold crossings | Numerical agreement within tolerance; prescribed boundary verdicts | 4/4 |
| MV3: control eligibility | Retain, remove, weaken or make a linked control unreadable | Backed candidate pass retained; other candidates marked insufficient evidence | 4/4 |
| MV4: observation boundary | Change scorer-only truth; supply forbidden truth or malformed observations | Byte-identical predictions after truth change; invalid inputs rejected | 2/2 |
| MV5: solver fidelity | Independent GRU and AdamW calculations; white-box head checks | Outputs and derivatives agree; correct layer prefixes and nonzero embedding gradients | 3/3 |
| MV6: resampling | Constant data, correlated document duplication and invalid matrices | Known intervals retained in the fixed cases; invalid matrices rejected | 6/6 |
| Evidence | Path in the tagged dataset release |
|---|---|
| Release root and manuscript | v2.0 ; paper/ |
| Main campaign and controls | v3-campaign/ ; binary-tier/ ; positive-controls/ |
| Inputs and protocols | corpora/ ; protocols/ |
| Domain and horizon analyses | domain-shift-v1/ ; long-horizon-v1/ ; clustered-gate-v1/ |
| Validated white-box results | all-boundary-whitebox-reconstruction/original36/ ; all-boundary-whitebox-reconstruction/full/ (31 files); phase2-raw-evidence/ (four files, 7.15 GB) |
| BiSR and adapted comparison | bisr-conformance-validation/ ; bisr-conformance-run-artifacts/ ; bisr-adapted-comparison/ |
| Item | Identifier or scope |
|---|---|
| Combined manuscript | paper/ ; the concise paper and full supplement are supplied as one PDF and a self-contained arXiv source ZIP |
| Reviewed framework taxonomy | source-snapshots/reviewed-framework-64.tar.gz ; 64 registered modules; historical source identifier 6c071a68ae5134522d0a4cd3d7d0fa67acabdfa8 |
| Dataset code snapshot | code/ and source-snapshots/base-framework-code.tar.gz ; historical base source identifier a3eb53fca5d6395da4c4377e9d8787676c66ae6a , supplemented by experiment-specific source archives |
| Maintained framework | GitHub tag v2.0 retains the v1.0 runtime and 65 registered modules; the additional secure-compute-audit module is outside the paper’s reviewed 64-module qualification matrix |
| Models and corpus | GPT-2 124M openai-community/gpt2 , revision 607a30d783dfa663caf39e06633721c8d4cfcd7e ; Qwen3-0.6B Qwen/Qwen3-0.6B , revision c1899de289a04d12100db370d81485cdf75e47ca ; released corpora/ and protocols/ are the binding text inputs |
| Seeds | main experiment: ten trained-model seeds and two attack seeds; white-box and horizon: 11, 22, 33; BiSR check: 31415, 27182, 16180; adapted comparison: attack seeds 17, 29; bootstrap: 93281 |
| Family | Modules | Modes | Capability / evidence scope |
|---|---|---|---|
| Trained inversion | latent-probe , latent-sensitivity , vec2text-inversion , seam-inversion | T, I | Trained and optimisation-based reconstruction; the main experiment and the validated white-box results have their own observations and budgets |
| Matching attacks | latent-matching | T | Centroid and signature matching; token and order results are kept separately |
| Key / budget solves | accumulation , stale-key , sharded , leak-accumulation , subspace-joint , wire-eval , seed-disclosure | T, I | Known-pair budgets, cross-epoch pooling and key-lifetime controls |
| Known-plaintext | known-prefix , alignment-search | T, I | Known-prefix solves and realignment under declared label and alignment assumptions |
| Gradient / output | gradient-inversion , output-inversion , label-scoring , batch-label-recon | T, I | Gradient and output reconstruction and gradient-size property scoring |
| Membership | membership , lira-membership | T | Likelihood-ratio and relative-likelihood scoring with null-world controls under a local protocol |
| Module | Tier | Model / target | Defence | Expected outcome | Observed outcome | Positive / negative control | Artifact | Status |
|---|---|---|---|---|---|---|---|---|
| Reproduced against an external reference (1) | ||||||||
| bisr-baseline | Reproduced | GPT-2, one seam | None; public / trained layers | Local port and archived reference emit identical predictions; adapted refinement remains separately budgeted | 3,072/3,072 paired predictions identical; adapted depth-6/public recovery 93.21% | Reference executable on identical inputs; shared joint arm 97.38% | PB/BC , PB/BA | Q-REAL |
| Adaptations of prior attack families (10) | ||||||||
| vec2text-inversion | Adapted | Generated seam world | Gaussian seam noise | Learned decoder beats nearest-neighbour decoding and degrades with noise | 94.8% noiseless and 91.1% at in the fixture | Nearest-neighbour and majority controls | T/name | Q-SYN |
| seam-inversion | Adapted | GPT-2 124M | None, noise, mixup, PCA / bottleneck | Undefended recovery exceeds the corpus control; defence-aware path can expose residual leakage | 63.25–100% across domains; validated white-box path 18.85–68.59% across depths | Corpus majority; undefended target; matched path checks | PB/DS , PB/WB , PB/PC | Q-REAL |
| gradient-inversion | Adapted | Qwen3-0.6B | None | Multi-restart DLG++ measures recovery across shallow and deep boundaries | 1.77%, 0.31%, 0.21% at depths 1, 4, 8 over 90 cells | Restarts, depths and random initialisations | P1/E8-DLG | Q-REAL |
LLM Security
Large language model (LLM) security studies attacks, privacy risks, and defenses across model training, inference, and deployment.
See all 322 papers