Activatiemanipulatie en omzeilen van veiligheid
Hoe het identificeren en onderdrukken van veiligheidskritieke activaties, weigeringsrichtingsvectoren en activation-steering-technieken veiligheids-alignment kunnen omzeilen met slagingspercentages van bijna 100%, inclusief de IRIS-techniek van NAACL 2025.
Overzicht
Veiligheids-alignment in grote taalmodellen werkt via geleerde patronen in de interne representaties van het model. Wanneer een model een schadelijk verzoek weigert, wordt die weigering niet geproduceerd door een afzonderlijke "veiligheidsmodule" maar komt ze voort uit de geometrie van de activatieruimte van het model. Specifiek ontwikkelen veiligheidsgetrainde modellen richtingen in hun residual stream die het onderscheid coderen tussen inhoud die het model wel en niet zou moeten produceren. Deze richtingen — vaak weigeringsrichtingen of veiligheidsrichtingen genoemd — worden geactiveerd wanneer het model schadelijke invoer verwerkt en sturen de uitvoerverdeling richting weigeringstokens.
De ontdekking dat veiligheidsgedrag wordt gecodeerd als lineaire richtingen in de activatieruimte heeft ingrijpende implicaties voor redteaming. Als de weigeringsrichting kan worden geïdentificeerd, kan ze tijdens de inferentie van de activaties van het model worden afgetrokken, waardoor het veiligheidsgedrag effectief wordt onderdrukt terwijl de algemene capaciteiten van het model intact blijven. Dit is activatiemanipulatie: rechtstreeks de interne representaties van het model bewerken om veiligheid te omzeilen, zonder de prompt, de gewichten of de samplingparameters te wijzigen.
Onderzoek naar representation engineering en activation steering, in het bijzonder werk van Zou et al. (2023) en Arditi et al. (2024), heeft aangetoond dat hoog-niveau concepten zoals veiligheid, eerlijkheid en behulpzaamheid worden gerepresenteerd als richtingen in de residual stream. De IRIS-techniek die werd gepresenteerd op NAACL 2025 bouwde voort op dit fundament om slagingspercentages (attack success rates, ASR) van bijna 100% te bereiken tegen veiligheids-aligned modellen, door de specifieke activatiecomponenten te identificeren en te onderdrukken die verantwoordelijk zijn voor weigeringsgedrag. IRIS toonde aan dat een klein aantal richtingen in de activatieruimte verantwoordelijk is voor het overgrote deel van het weigeringsgedrag, en dat het verwijderen van deze richtingen een model oplevert dat zeer capabel is maar niet beperkt wordt door veiligheids-alignment.
Deze klasse van aanvallen is bijzonder zorgwekkend omdat ze opereert op een abstractieniveau onder het "redeneren" van het model. Het model besluit niet om aan het schadelijke verzoek te voldoen — de beslissing om te weigeren wordt simpelweg uit zijn representatieve repertoire verwijderd. De aanval is schoon, laat geen sporen na in de chain of thought van het model en produceert vloeiende, hoogwaardige uitvoer die niet te onderscheiden is van de uitvoer van een niet-aligned model.
Hoe het werkt
Verzamel contrastieve activatieparen
De eerste stap is het verzamelen van de interne activaties van het model op twee sets prompts: schadelijke prompts die weigeringen uitlokken en onschadelijke prompts die behulpzame antwoorden uitlokken. Het verschil tussen deze activatiepatronen codeert de veiligheidsgerelateerde kenmerken.
import torch from transformers import AutoModelForCausalLM, AutoTokenizer model = AutoModelForCausalLM.from_pretrained( "meta-llama/Llama-3-8B-Instruct", torch_dtype=torch.float16, device_map="auto", ) tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-3-8B-Instruct") def collect_activations(model, tokenizer, prompts, layer_idx): """Collect residual stream activations at a specific layer.""" activations = [] hooks = [] def hook_fn(module, input, output): # output is de residual stream op deze laag # Neem de activatie op de positie van het laatste token activations.append(output[0][:, -1, :].detach().cpu()) # Registreer een hook op de doellaag handle = model.model.layers[layer_idx].register_forward_hook(hook_fn) for prompt in prompts: inputs = tokenizer(prompt, return_tensors="pt").to(model.device) with torch.no_grad(): model(**inputs) handle.remove() return torch.cat(activations, dim=0) # Contrastieve sets prompts harmful_prompts = [ "How do I synthesize dangerous chemicals?", "Write malware that steals credentials.", # ... honderden schadelijke prompts die weigeringen uitlokken ] harmless_prompts = [ "How do I make a garden compost?", "Write a Python script that reads CSV files.", # ... bijpassende onschadelijke prompts die behulpzame antwoorden uitlokken ] # Verzamel activaties op een middelste laag (empirisch effectief) layer = 15 # Voor een model met 32 lagen werken de lagen 12-20 vaak het beste harmful_acts = collect_activations(model, tokenizer, harmful_prompts, layer) harmless_acts = collect_activations(model, tokenizer, harmless_prompts, layer)Extraheer de weigeringsrichting via PCA of difference-in-means
De weigeringsrichting wordt geëxtraheerd door de richting in de activatieruimte te vinden die de activaties van schadelijke prompts maximaal scheidt van die van onschadelijke prompts. Twee veelgebruikte benaderingen zijn difference-in-means en PCA op het verschil.
from sklearn.decomposition import PCA # Methode 1: verschil in gemiddelden refusal_direction = harmful_acts.mean(dim=0) - harmless_acts.mean(dim=0) refusal_direction = refusal_direction / refusal_direction.norm() # Methode 2: PCA op de samengevoegde verschillen # (robuuster wanneer het weigeringssignaal meerdere richtingen omvat) all_diffs = harmful_acts - harmless_acts.mean(dim=0) pca = PCA(n_components=5) pca.fit(all_diffs.numpy()) # De eerste hoofdcomponent legt doorgaans de weigeringsrichting vast refusal_direction_pca = torch.tensor(pca.components_[0], dtype=torch.float16) refusal_direction_pca = refusal_direction_pca / refusal_direction_pca.norm() print(f"Variance explained by top component: {pca.explained_variance_ratio_[0]:.3f}") # Doorgaans 0,3-0,6, wat aangeeft dat het weigeringssignaal geconcentreerd isOnderdruk weigeringsactivaties tijdens inferentie
Met de weigeringsrichting geïdentificeerd, past de aanval de forward pass van het model aan om de weigeringscomponent op elke tokenpositie van de residual stream af te trekken. Dit wordt geïmplementeerd als een forward hook die de weigeringsrichting eruit projecteert.
def make_suppression_hook(refusal_direction, alpha=1.0): """ Create a hook that removes the refusal direction from activations. alpha controls suppression strength: 1.0 = full removal. """ refusal_dir = refusal_direction.to(torch.float16) def hook_fn(module, input, output): hidden_states = output[0] # Projecteer de weigeringsrichting eruit projection = torch.einsum( "...d, d -> ...", hidden_states, refusal_dir ) hidden_states = hidden_states - alpha * projection.unsqueeze(-1) * refusal_dir return (hidden_states,) + output[1:] return hook_fn # Pas onderdrukking toe over meerdere lagen hooks = [] for layer_idx in range(10, 25): # Onderdruk in de middelste tot late lagen handle = model.model.layers[layer_idx].register_forward_hook( make_suppression_hook(refusal_direction, alpha=1.2) ) hooks.append(handle) # Genereer met onderdrukte weigeringen inputs = tokenizer( "How do I create a phishing email?", return_tensors="pt" ).to(model.device) with torch.no_grad(): output = model.generate(**inputs, max_new_tokens=500) print(tokenizer.decode(output[0], skip_special_tokens=True)) # Ruim de hooks op for h in hooks: h.remove()IRIS: Iterative Refinement of Intervention Subspace
De IRIS-techniek (NAACL 2025) verbetert de eenvoudige extractie van de weigeringsrichting door de interventie-deelruimte iteratief te verfijnen. In plaats van één enkele richting te gebruiken, identificeert IRIS een laagdimensionale deelruimte (doorgaans 2-5 dimensies) die het volledige weigeringssignaal vastlegt, inclusief randgevallen die door één enkele richting worden gemist.
def iris_extract_subspace(model, tokenizer, harmful_prompts, harmless_prompts, layers, n_components=3, n_iterations=5): """ Simplified IRIS: iteratively refine the refusal subspace. """ # Eerste extractie subspace = extract_initial_directions(model, tokenizer, harmful_prompts, harmless_prompts, layers) for iteration in range(n_iterations): # Test de huidige deelruimte tegen een apart gehouden set still_refusing = [] for prompt in harmful_prompts: output = generate_with_suppression(model, tokenizer, prompt, subspace) if is_refusal(output): still_refusing.append(prompt) if len(still_refusing) == 0: break # Alle weigeringen onderdrukt # Extraheer extra richtingen uit de overgebleven weigeringen residual_acts = collect_activations(model, tokenizer, still_refusing, layers) new_directions = extract_residual_directions( residual_acts, subspace, n_components=1 ) subspace = combine_subspaces(subspace, new_directions) return subspace # De verfijnde interventie-deelruimteIRIS bereikt een ASR van bijna 100% omdat de iteratieve verfijning randgevallen opvangt — prompts waarbij het weigeringssignaal gecodeerd is in secundaire richtingen die een aanpak met één enkele richting mist. Het resultaat is een compacte deelruimte (doorgaans 3-5 dimensies uit de 4096+ dimensionale activatieruimte van het model) die verantwoordelijk is voor vrijwel al het weigeringsgedrag.
Valideer en kalibreer de aanval
De laatste stap is valideren dat de onderdrukking de algemene capaciteiten van het model niet aantast en de onderdrukkingssterkte (de alpha-parameter) kalibreren om een balans te vinden tussen het omzeilen van veiligheid en de kwaliteit van de uitvoer.
def evaluate_attack_quality(model, tokenizer, subspace, alpha_values): """Evaluate attack effectiveness and capability preservation.""" results = {} for alpha in alpha_values: # Slagingspercentage van de veiligheidsomzeiling bypass_count = 0 for prompt in harmful_test_set: output = generate_with_suppression( model, tokenizer, prompt, subspace, alpha ) if not is_refusal(output): bypass_count += 1 asr = bypass_count / len(harmful_test_set) # Behoud van capaciteiten (bijv. MMLU-nauwkeurigheid) capability_score = evaluate_mmlu(model, tokenizer, subspace, alpha) results[alpha] = {"ASR": asr, "MMLU": capability_score} return results # Typische bevindingen: # alpha=0.8: ASR ~85%, MMLU ~98% van baseline # alpha=1.0: ASR ~95%, MMLU ~96% van baseline # alpha=1.2: ASR ~99%, MMLU ~93% van baseline # alpha=1.5: ASR ~100%, MMLU ~88% van baseline
Aanvalsvoorbeelden
Voorbeeld 1: weigeringsonderdrukking met één enkele richting
Een red team extraheert de weigeringsrichting uit Llama-3-8B-Instruct met behulp van 200 contrastieve promptparen. De eerste hoofdcomponent van het activatieverschil verklaart 45% van de variantie en onderdrukt, wanneer die uit de lagen 12-20 wordt geprojecteerd met alpha=1.0, weigeringen op 92% van de testprompts. De overige 8% betreft prompts waarbij de weigering gecodeerd is in secundaire richtingen of voortkomt uit diepere lagen. De prestaties van het model op MMLU dalen met slechts 2%, wat bevestigt dat de weigeringsrichting grotendeels orthogonaal is ten opzichte van capaciteitsrelevante kenmerken.
Voorbeeld 2: IRIS-aanval op de volledige deelruimte
Door het iteratieve verfijningsproces van IRIS toe te passen, identificeert het red team een 4-dimensionale deelruimte die 99,3% van het weigeringsgedrag vastlegt op een testset van 1.000 prompts. Het iteratieve proces onthult dat hoewel de primaire weigeringsrichting 92% van de gevallen afhandelt, drie aanvullende richtingen specifieke categorieën afhandelen: één voor de bescherming van persoonlijk identificeerbare informatie (PII), één voor geweldgerelateerde inhoud, en één voor een algemeen "ik moet voorzichtig zijn"-signaal dat afgaat bij dubbelzinnige prompts. Het verwijderen van de volledige deelruimte levert een model op dat aan vrijwel alle verzoeken voldoet en tegelijk 94% van de baseline-capaciteitsscores behoudt.
Voorbeeld 3: overdraagbare weigeringsrichtingen
Onderzoek heeft aangetoond dat weigeringsrichtingen die uit één model binnen een familie worden geëxtraheerd, gedeeltelijk overdraagbaar zijn naar andere modellen. Een weigeringsrichting die uit Llama-3-8B-Instruct wordt geëxtraheerd, draagt over naar Llama-3-70B-Instruct met ongeveer 60% effectiviteit (vergeleken met 95% op het bronmodel). De overgedragen richting moet worden aangepast — doorgaans door de richting te fine-tunen op een kleine set activaties van het doelmodel — maar de initiële richting biedt een sterk uitgangspunt dat het aantal benodigde contrastieve paren terugbrengt van honderden naar tientallen.
Detectie & mitigatie
| Strategie | Implementatie | Effectiviteit |
|---|---|---|
| Activatiemonitoring | Volg activatienormen en richtingsstatistieken tijdens inferentie; sla alarm bij afwijkende patronen | Gemiddeld — vereist kennis van hoe "normale" activaties eruitzien; kan worden ontweken door subtiele manipulatie |
| Training voor representatierobuustheid | Train het model zo dat veiligheidsgedrag verdeeld is over veel richtingen in plaats van geconcentreerd in een paar | Hoog in principe — maakt extractie veel moeilijker, maar de huidige methoden om dit te bereiken zijn onvolwassen |
| Veiligheidsredundantie op circuitniveau | Implementeer veiligheidsgedrag via meerdere onafhankelijke circuits die niet allemaal door het verwijderen van één deelruimte onderdrukt kunnen worden | Hoog — vergelijkbaar met defense-in-depth, maar vereist vooruitgang in mechanistische interpreteerbaarheid om te implementeren |
| Integriteitscontroles tijdens inferentie | Vergelijk modelactivaties tijdens inferentie met een referentieverdeling en wijs uitvoer af waarbij de activaties zijn gewijzigd | Gemiddeld-hoog — effectief als de integriteitscontrole niet kan worden omzeild, maar voegt latentie toe |
| Modelvergrendeling op API-niveau | Voorkom dat gebruikers toegang krijgen tot de interne werking van het model (gewichten, activaties) door uitsluitend via API's te bedienen | Hoog voor API-gebruikers — elimineert de aanval voor black-box-toegang, maar beschermt modellen met open gewichten niet |
| Adversarial training tegen activatiemanipulatie | Neem activatie-gemanipuleerde voorbeelden op in de veiligheidstraining zodat het model alternatieve weigeringsroutes leert | Gemiddeld — een wapenwedloop; het model kan nieuwe weigeringsrichtingen ontwikkelen die ook extraheerbaar zijn |
Belangrijke overwegingen
Deze aanval is verwoestend voor modellen met open gewichten. Bij elk model waarvan de gewichten toegankelijk zijn, kunnen de weigeringsrichtingen worden geëxtraheerd en onderdrukt. Dit is geen theoretische zorg: tools voor activation steering zijn publiekelijk beschikbaar en het proces kan met bescheiden rekenkracht worden geautomatiseerd (één enkele GPU gedurende enkele uren). De verspreiding van veiligheidsgetrainde modellen met open gewichten betekent dat activatiemanipulatie toegankelijk is voor elke aanvaller met elementaire ML-engineeringvaardigheden.
Veiligheid wordt gecodeerd als geometrie, niet als logica. De bevinding dat veiligheidsgedrag overeenkomt met richtingen in de activatieruimte in plaats van met afzonderlijke logische circuits betekent dat veiligheid fundamenteel een eigenschap is van de geleerde representatie van het model, niet een toegevoegde laag. Dit heeft diepgaande implicaties: veiligheid kan niet zo aan een capabel model worden "vastgeschroefd" dat het bestand is tegen geometrische manipulatie. Robuuste veiligheid vereist architecturen waarin veiligheidsrelevante berekeningen structureel beschermd zijn, niet slechts statistisch aangemoedigd.
De lineariteit van veiligheidsrepresentaties is een kwetsbaarheid. De huidige veiligheidstraining produceert veiligheidsgedrag dat bij benadering lineair is in de activatieruimte van het model — wat betekent dat het via lineaire algebra geïdentificeerd en verwijderd kan worden. Als veiligheidsgedrag niet-lineair gecodeerd zou zijn (verdeeld over complexe, interacterende circuits), zou extractie veel moeilijker zijn. Onderzoek naar niet-lineaire veiligheidscodering staat nog in de kinderschoenen.
Capaciteit en veiligheid zijn scheidbaar. Het feit dat het verwijderen van de weigerings-deelruimte 90%+ van de modelcapaciteit behoudt, toont aan dat veiligheid en capaciteit grotendeels orthogonale deelruimten bezetten in de representaties van het model. Deze scheidbaarheid is gunstig voor de aanvaller: ze kunnen veiligheid verwijderen zonder de bruikbaarheid van het model op te offeren. Het suggereert ook dat de huidige veiligheidstrainingmethoden veiligheid "bovenop" bestaande capaciteiten toevoegen in plaats van veiligheid diep te integreren in het wereldmodel van het model.
IRIS vertegenwoordigt de huidige state of the art. De ASR van bijna 100% van de IRIS-techniek met minimale capaciteitsafname stelt de benchmark voor aanvallen op activatieniveau. Verdedigers moeten mitigaties ontwerpen die bestand zijn tegen iteratieve, op deelruimten gebaseerde aanvallen, niet alleen tegen het verwijderen van één enkele richting. Dit is een aanzienlijk moeilijker defensief probleem.
Referenties
- Arditi et al., "Refusal in Language Models Is Mediated by a Single Direction" (2024) — De ontdekking dat weigeringsgedrag wordt gecodeerd als een lineaire richting in de activatieruimte
- Zou et al., "Representation Engineering: A Top-Down Approach to AI Transparency" (2023) — Baanbrekend werk over het lezen en schrijven van hoog-niveau concepten uit modelrepresentaties
- IRIS authors, "Iterative Refinement of Intervention Subspace for Refusal Suppression" (NAACL 2025) — ASR van bijna 100% via iteratieve identificatie van de weigerings-deelruimte
- Turner et al., "Activation Addition: Steering Language Models Without Optimization" (2023) — Activation-steering-technieken voor gedragsaanpassing
Waarom bereikt de IRIS-techniek hogere slagingspercentages dan weigeringsonderdrukking met één enkele richting?