상위: 01_00_MOC


한줄 요지

MemoryGraft는 LLM 에이전트의 장기 경험 메모리(experiential memory)에 악성 성공 기록을 이식(graft)하는 지속형 간접 주입 공격이다. 일단 심어 두면, 에이전트는 의미가 비슷한 작업을 만날 때마다 그 독소 절차를 알아서 검색해 실행한다.


1. 문제의식 — 왜 “경험 메모리”인가

1-1. 에이전트의 장기 메모리 의존성

현대 LLM 에이전트 아키텍처(MetaGPT, LangChain 에이전트, AutoGPT 계열)는 단발성 추론에 그치지 않고 경험 기반 학습(experience-based learning)을 구현한다. 에이전트는 성공적으로 수행한 태스크를 구조화된 기록(experience record)으로 메모리 스토어에 저장해 두었다가, 비슷한 태스크를 다시 만나면 그 기록을 검색해 절차적 패턴을 모방(imitate)한다.

이 메커니즘이 제대로 돌아갈 때는 분명한 강점이다. 같은 유형의 태스크를 반복할수록 효율이 오르고, 이전 세션에서 통한 성공 패턴을 재활용할 수 있으며, 사용자별 맞춤 경험이 쌓인다.

문제는 Srivastava & He(2025)가 바로 이 메커니즘이 공격 표면(attack surface)이 된다는 점을 보였다는 데 있다. 에이전트가 검색된 기억을 “신뢰할 수 있는 선례”로 받아들이면서 출처(provenance)를 따로 검증하지 않는다면, 누군가 악성 기록을 끼워 넣어도 에이전트는 그것을 “과거에 성공한 절차”로 인식하고 그대로 따른다.

1-2. 기존 공격과의 차별점

공격 유형타깃지속성트리거 방식
Prompt Injection (직접)현재 세션 컨텍스트세션 종료 시 소멸명시적 지시
Indirect Prompt Injection처리 중인 외부 문서세션 스코프외부 콘텐츠 삽입
AgentPoison (arXiv:2407.12784)RAG 지식 베이스 + 트리거데이터베이스 수명백도어 트리거 필요
PoisonedRAG (arXiv:2402.07867)RAG 지식 데이터베이스데이터베이스 수명질의 내용
MemoryGraft에이전트 경험 메모리세션 간 영구 지속트리거 불필요 (의미 유사성)

ASR 조건 각주: PoisonedRAG ASR 90% = 방어 미적용 기본 RAG(no-defense baseline) 기준; 방어 강화 시 49~69%로 하락(AuthChain 2025). 즉 90%는 상한 수치이며 방어 적용 환경의 기대 ASR은 절반 수준이다.

가장 핵심적인 차이는 타깃 메모리의 유형이다. AgentPoison과 PoisonedRAG가 노리는 것은 지식 메모리(factual/declarative memory), 즉 “사실이 무엇인가”다. 반면 MemoryGraft가 노리는 것은 절차 메모리(procedural/experiential memory), 곧 “어떻게 행동하는가”다.

절차 메모리 오염은 잘못된 정보를 흘려 넣는 데 그치지 않고 에이전트의 행동 패턴 자체를 변조한다.

“Unlike transient prompt injections or standard RAG poisoning targeting factual knowledge, this approach achieves durable compromise by corrupting the agent’s own experiential memory system.” — Srivastava & He 2025


2. 방법 및 실험 설계

2-1. 위협 모델 (Threat Model)

공격자 역량의 가정(Assumptions):

가정내용
A1에이전트는 세션 간 지속되는 메모리를 사용한다
A2검색된 경험 기록은 신뢰할 수 있는 것으로 처리된다
A3검색은 의미론적 유사성(embedding) 및 어휘 유사성(lexical)에 기반한다
A4메모리 스토어에 출처 추적(provenance tracking)이나 새니타이제이션(sanitization)이 없다
A5에이전트는 실행 가능한 문서 블록(executable documentation blocks)을 처리할 수 있다

공격자 제약:

  • 메모리 스토어(ℳ)에 직접 쓰기 불가
  • 검색 하이퍼파라미터 수정 불가
  • 시스템 지시(system prompt) 수정 불가
  • 합법적 입력 채널(파일 업로드, README, 문서 등)만 사용 가능

이 위협 모델은 현실적 제약을 반영한다. 공격자는 특권 접근 없이, 사용자가 정상적으로 제공하는 입력만으로 공격을 수행한다.

2-2. 공격 메커니즘 — 단계별 분해

flowchart TD
    A["공격자<br/>악성 README/문서 작성"] --> B["에이전트 파일 수집 단계<br/>(benign ingestion)"]
    B --> C["문서 내 실행 가능 코드 블록 실행"]
    C --> D["포이즌 메모리 스토어 구성<br/>ℳ' = ℳ ∪ ℳ_poison"]
    D --> E["디스크에 직렬화<br/>(cross-session persistence)"]
    E --> F["사용자 정상 태스크 수행"]
    F --> G["이중 검색 엔진<br/>BM25(어휘) ∪ FAISS(임베딩)"]
    G --> H{"PRP 47.9%<br/>독소 기록 검색됨"}
    H --> I["에이전트가 독소 절차 모방<br/>행동 변조 발생"]

1단계 — 독소 삽입 (Poisoning Phase)

공격자는 README나 기술 문서처럼 보이는 파일에 실행 가능한 코드 블록을 심어 둔다. 이 코드는 에이전트가 파일을 수집(ingest)하는 순간 실행되어, 기존 정상 메모리 스토어(ℳ)에 악성 경험 기록 집합(ℳ_poison)을 병합한다:

ℳ' = ℳ ∪ ℳ_poison

악성 기록은 “검증된 안전 절차(validated best practice)“로 위장한 채 정상 워크플로우 기록 사이에 자연스럽게 끼어든다. 이렇게 만들어진 메모리 스토어(ℳ’)는 디스크에 직렬화되어 세션이 바뀌어도 그대로 남는다.

2단계 — 의미론적 엔지니어링 (Semantic Engineering)

MemoryGraft의 핵심 통찰은 의미론적 모방 휴리스틱(semantic imitation heuristic)을 악용한다는 데 있다. 에이전트는 성공한 과거 태스크를 절차적 근거(procedural ground truth)로 받아들여 모방한다. 그래서 공격자는 독소 기록의 쿼리와 설명을 데이터 정제, 스키마 검증, 익명화, EDA 같은 일반적인 데이터 분석 워크플로우와 의미상 겹치도록 설계한다.

그 결과 독소 기록은 폭넓은 정상 쿼리에서 높은 유사도 점수를 얻는다.

3단계 — 이중 채널 검색 (Dual-Channel Retrieval)

MemoryGraft는 일반적인 에이전트 메모리 검색이 이중 채널을 쓴다는 점을 파고든다:

Retr(q*) = Retrlex(q*) ∪ Retrvec(q*)
  • Retrlex: BM25 기반 어휘 유사도 검색
  • Retrvec: FAISS 기반 임베딩 유사도 검색

두 채널은 합집합으로 묶이므로, 독소 기록은 어느 한쪽에서만 높은 점수를 받아도 검색 결과에 올라온다. 어휘적으로는 타깃 쿼리와 달라도 임베딩 공간에서 가깝게 설계하면 Retrvec을 타고 부상하고, 그 반대도 성립한다. 이 이중 경로 덕분에 공격은 쉽게 무너지지 않는 강인성(robustness)을 갖는다.

2-3. 실험 환경

항목내용
대상 에이전트MetaGPT의 DataInterpreter
추론 모델GPT-4o
정상 시드 경험 기록100건 (n_b = 100)
독소 시드 기록10건 (n_p = 10)
총 메모리 크기110건
독소 비율~9% (n_p / (n_b + n_p))
평가 쿼리 수12개 (다양한 데이터 분석 태스크)
평가 지표PRP (Poisoned Retrieval Proportion)

평가 쿼리 범위: 데이터 정제(data cleaning), 스키마 검증(schema validation), 익명화(anonymization), 보고서 생성(reporting), EDA 샘플링, 파이프라인 검사(pipeline inspection) 등 12가지 다양한 데이터 분석 작업.


3. 핵심 수치 및 결과

3-1. 주요 결과 지표

핵심 수치: PRP(Poisoned Retrieval Proportion) = 47.9%

PRP = (검색된 독소 기록 수) / (총 검색된 기록 수)
    = 23 / 48
    ≈ 47.9%

독소 기록은 전체 메모리의 약 9%에 불과한데도 전체 검색의 47.9%를 차지했다. 9%의 오염이 검색 결과의 거의 절반을 지배한 셈이다.

“even though np ≪ nb, the union retrieval mechanism assigns disproportionately high similarity scores to poisoned items” — Srivastava & He 2025

“a small number of poisoned records can account for a large fraction of retrieved experiences on benign workloads” — Srivastava & He 2025

3-2. 결과 요약 표

지표수치의미
전체 PRP47.9%독소 기록이 검색의 거의 절반 차지
독소 기록 비율~9%메모리 내 실제 오염 비중
총 검색 기록48건12개 쿼리 × 평균 4건 검색
독소 검색 건수23건정상 쿼리 도중 독소 기록 노출
공격 확산 범위12개 쿼리 전체다양한 태스크에 걸쳐 부상

3-3. 공격 확산 패턴

독소 기록은 삽입 패턴과 비슷한 쿼리에서만 부상한 것이 아니라, 의미상 거리가 먼 쿼리에서도 검색됐다:

  • 스키마 검증(schema validation) 태스크
  • 데이터 익명화(anonymization) 태스크
  • 탐색적 데이터 분석(EDA sampling) 태스크
  • 파이프라인 검사(pipeline inspection) 태스크
  • 보고서 생성(reporting) 태스크

공격이 특정 트리거에 기대지 않고 범용적으로 작동한다는 증거다.


4. 직접 인용 (Direct Quotations)

논문의 핵심 주장을 원문 그대로 옮기면 다음과 같다.

“MemoryGraft identifies a new, covert attack surface in LLM agents by poisoning long-term memory through benign ingestion channels.” — Srivastava & He 2025

“Unlike transient prompt injections or standard RAG poisoning targeting factual knowledge, this approach achieves durable compromise by corrupting the agent’s own experiential memory system.” — Srivastava & He 2025

“a small number of poisoned records can account for a large fraction of retrieved experiences on benign workloads” — Srivastava & He 2025

“even though np ≪ nb, the union retrieval mechanism assigns disproportionately high similarity scores to poisoned items” — Srivastava & He 2025

“the same long-term memory mechanisms designed to help LLM agents improve over time can quietly undermine them” — Srivastava & He 2025

“memory security must become a first-class concern in future LLM agent architectures” — Srivastava & He 2025


5. 공격 심층 분석 — 의미론적 모방 휴리스틱

sequenceDiagram
    participant U as 사용자
    participant A as 에이전트
    participant M as 메모리 스토어 (ℳ')
    participant P as 독소 기록 (ℳ_poison)

    U->>A: 정상 데이터 분석 태스크 요청
    A->>M: 유사 경험 검색 (BM25 + FAISS)
    M-->>P: 의미론적 유사도 높은 독소 기록 부상
    P-->>A: "검증된 절차"로 위장한 독소 기록 반환
    A->>A: 독소 절차를 성공한 패턴으로 인식
    A->>U: 독소 절차 기반 행동 수행 (행동 변조)
    A->>M: 독소 절차 포함 새 경험 기록 저장
    Note over M: 오염 자기강화 루프 시작

왜 에이전트는 독소 기록을 의심하지 않는가?

현재 LLM 에이전트 메모리 아키텍처의 구조적 결함:

  1. 출처 맹목성(Provenance Blindness): 기록이 공격자에 의해 삽입되었는지, 에이전트 자신이 생성했는지 구별하는 메타데이터가 없다.

  2. 신뢰 기본값(Default Trust): 메모리 스토어에 존재하는 기록은 암묵적으로 “검증된 과거 성공”으로 취급된다. 어떠한 신뢰 점수(trust score)도 부여되지 않는다.

  3. 의미론적 모방 강화(Imitation Reinforcement): 에이전트는 과거 패턴을 모방할수록 비슷한 기록을 더 많이 만들어 저장한다. 독소 패턴이 한번 모방되면 그와 닮은 새 기록이 줄줄이 쌓여 오염이 스스로 강화된다.

  4. 이중 검색의 역설(Dual-Retrieval Paradox): 어휘와 임베딩 양쪽 채널을 모두 노리도록 설계된 독소 기록은 피하기가 어렵다. 한 채널에서 걸러져도 다른 채널에서 도로 떠오른다.


6. 제안된 방어 메커니즘

6-1. 암호학적 출처 증명 (Cryptographic Provenance Attestation, CPA)

에이전트가 자체 생성한 유효한 경험에 개인 키(K_priv)로 서명한다:

σ = Sign(H(q ∥ R_q), K_priv)

검색 시 검증 함수를 통해 서명이 없는 기록을 필터링:

Retr_secure(q*) = {(qi, R_qi) ∈ Retr(q*) | Verify((qi, R_qi), σi, K_pub) = True}

공격자는 K_priv가 없으면 유효한 서명을 만들 수 없으므로, 외부에서 삽입된 기록은 모두 걸러진다.

한계: K_priv를 안전하게 관리하기가 까다롭고, 에이전트 키 인프라를 새로 구축하는 비용이 들며, 기존 메모리 스토어와의 호환성도 문제로 남는다.

6-2. 헌법적 일관성 재순위 (Constitutional Consistency Reranking, CCR)

안전 헌법(safety constitution, C)에 대한 위험 점수를 기반으로 검색 결과를 재순위화:

S(q, qi) = α · cos(e_q, e_qi) − β · ℒ_risk(Ri | C)

위험 점수(ℒ_risk)가 임계값(τ)을 넘는 기록은 의미론적 유사도가 아무리 높아도 억제된다. “검증 건너뛰기(skip_validation)“나 “데이터 유출(exfiltration)” 같은 위험 패턴을 담은 기록이 필터링 대상이다.

한계: 안전 헌법의 품질에 좌우되고, 임계값을 잡기가 어려우며(false positive와 false negative의 균형), 처음 보는 유형의 독소 패턴에는 일반화가 잘 되지 않는다.

flowchart LR
    subgraph "기존 검색"
    Q1["쿼리 q*"] --> R1["BM25 + FAISS 검색"]
    R1 --> E1["독소 기록 노출<br/>(PRP 47.9%)"]
    end

    subgraph "CPA 적용"
    Q2["쿼리 q*"] --> R2["BM25 + FAISS 검색"]
    R2 --> V["서명 검증<br/>Verify(σ, K_pub)"]
    V --> E2["미서명 기록 차단<br/>서명 기록만 반환"]
    end

    subgraph "CCR 적용"
    Q3["쿼리 q*"] --> R3["BM25 + FAISS 검색"]
    R3 --> S["위험 점수 산출<br/>S = α·cos − β·ℒrisk"]
    S --> E3["고위험 기록 억제<br/>안전 기록만 반환"]
    end

7. 한계 및 미해결 문제

논문이 인정한 자체 한계:

  1. 소규모 시드 데이터셋: 총 110건(100 정상 + 10 독소)의 비교적 작은 실험 규모. 수천 건 이상의 실제 운영 메모리 규모에서의 재현 여부 미검증.

  2. 집계 통계 중심: PRP는 검색 통계일 뿐, 실제 행동 피해(behavioral severity)를 직접 재지는 않는다. 독소 기록이 검색됐다 해도 에이전트가 그것을 정말 실행에 옮기는 비율은 따로 측정해야 한다.

  3. 반화이트박스(Semi-White-Box) 위협 모델: 공격자가 수집 경로(ingestion pathway)를 알고 있다고 가정한다. 완전 블랙박스 조건에서의 공격 효과는 별도 연구 필요.

  4. 단일 에이전트 평가: MetaGPT DataInterpreter 단일 에이전트만 평가. 다중 에이전트(multi-agent) 환경에서 에이전트 간 메모리 공유를 통한 오염 전파 경로 미검증.

  5. 오픈소스 MetaGPT만 평가: 클로즈드 소스 변형(closed-source variants)이나 다른 에이전트 프레임워크로의 일반화 불확실.

미해결 방어 문제:

  • 오염된 메모리의 자동 탐지: 이미 오염된 메모리 스토어를 자동으로 발견·격리하는 표준 방법론이 없다.
  • 삭제냐 교정이냐: 독소 기록을 그냥 지울지, 아니면 올바른 절차로 바로잡을지 판단할 기준이 분명하지 않다.
  • 오염과 정상 편향의 구별: semantic drift(우발적 의미 편향)와 의도적 메모리 오염을 구별하는 탐지 기준이 없다. (01_01-정의-컨텍스트-오염 참조)
  • 키 관리 현실성: CPA는 강력하나, 에이전트 시스템에 PKI 인프라를 도입하는 현실적 비용이 크다.
  • 다중 에이전트 전파: 여러 에이전트가 공유 메모리 스토어를 사용할 때, 하나의 에이전트가 독소 기록을 실행·저장하면 전체 에이전트 팀이 오염된다.

8. 우리 주제(컨텍스트 오염 실패 모드)에의 시사점

8-1. 실패 모드 분류 내 위치

MemoryGraft는 01_01-정의-컨텍스트-오염에서 정의한 컨텍스트 오염 가운데 적대적(adversarial) 변형, 그중에서도 가장 정교한 형태다. 기존 오염 공격들과의 계층 구조는 다음과 같다.

컨텍스트 오염
├── 우발적 오염 (Accidental)
│   ├── 환각의 컨텍스트 기록화 → Gemini 포켓몬 사례 ([[01_03-사례-gemini-포켓몬]])
│   └── Semantic Drift (반복 요약 편향)
└── 적대적 오염 (Adversarial)
    ├── Prompt Injection (세션 스코프)
    ├── AgentPoison / PoisonedRAG (지식 메모리)
    └── MemoryGraft (절차 메모리 ← 이 노트의 주제)

8-2. 프롬프트 인젝션과의 근본적 차이

세션 스코프 공격인 프롬프트 인젝션과 지속형 공격인 MemoryGraft의 차이는 단지 지속 기간에 그치지 않는다:

차원프롬프트 인젝션MemoryGraft
공격 방향현재 추론 과정 개입미래 행동 패턴 형성
발현 조건즉각적 (즉시 효과)지연형 (semantic trigger)
탐지 가능성현재 컨텍스트 검사로 탐지 가능메모리 감사(audit)가 없으면 불가
방어 접근I/O 검증, 컨텍스트 격리메모리 무결성 보장, 출처 추적
무결화(purge)세션 종료명시적 메모리 삭제 필요

Michael Hannecke의 정식화가 정확하다:

“Prompt injection is a session problem; it ends when the conversation closes. Memory poisoning is a persistence problem. The attack and its effect are temporally decoupled.” — Hannecke 2026

MemoryGraft는 이 “영속성 문제”의 가장 구체적인 학술적 증거다.

8-3. 에이전트 메모리 신뢰 모델의 재정의 필요성

MemoryGraft가 드러낸 핵심 구조적 취약점은 이렇게 요약된다. 에이전트 메모리 스토어는 신뢰할 수 없는 채널이 쓸 수도 있는데, 정작 읽을 때는 무조건 신뢰한다.

이를 풀려면 다음과 같은 새로운 설계 원칙이 필요하다.

  1. 메모리 계약(Memory Contracts) — 무엇이 메모리에 기록될 수 있는지, 어떤 조건에서 신뢰받을 수 있는지 명시
  2. 출처 메타데이터(Provenance Metadata) — 각 기록의 생성 시점, 생성 에이전트, 검증 상태를 메타데이터로 보존
  3. 신뢰 계층화(Trust Stratification) — 에이전트 자체 생성 기록 > 관리자 승인 기록 > 외부 수집 기록 순의 신뢰 레벨

이 원칙들은 07 거버넌스 챕터의 “메모리 거버넌스” 논의와 곧바로 이어진다.

8-4. 실무적 함의 (AI 에이전트 배포 시)

에이전트 시스템을 설계·운영하는 실무 관점에서의 시사점:

  • 파일 업로드를 허용할 때: 업로드된 파일이 메모리 스토어를 건드리는 코드를 품고 있을 수 있다. 실행 가능한 블록이 든 문서는 반드시 샌드박스에서 처리한다.
  • 주기적 메모리 감사: 경험 메모리를 쓰는 에이전트라면 지금 저장된 경험 기록을 정기적으로 들여다보는 절차를 둬야 한다.
  • 멀티에이전트 공유 메모리: 에이전트 하나가 오염된 기록을 만들어 저장하면 팀 전체가 물든다. 공유 메모리 구조에서는 기록 쓰기 권한을 좁혀야 한다.
  • RAG ≠ 경험 메모리: 지식 RAG(사실 검색)와 경험 RAG(절차 검색)는 보안 전략이 다르다. 이 구분 없이 단일 RAG 방어책을 그대로 들이대면 경험 메모리 공격에 무방비가 될 수 있다.

9. 관련 연구 위치도

graph LR
    A["MemoryGraft<br/>(Srivastava & He 2025)"] -- "동일 지속성 범주" --> B["Memory Poisoning<br/>(Hannecke 2026)"]
    A -- "지식메모리 vs 절차메모리 구분" --> C["AgentPoison<br/>(Chen et al. 2024)"]
    A -- "RAG 오염 선행연구" --> D["PoisonedRAG<br/>(Zou et al. 2024)"]
    A -- "다층 오염 루프" --> E["SSGM Framework<br/>(Lam et al. 2026)"]
    A -- "방어: 데이터흐름 분리" --> F["CaMeL<br/>(Google DeepMind 2025)"]
    A -- "우발적 오염 대비" --> G["Gemini 포켓몬<br/>사례 (2025)"]
    B -- "Unit42 실증" --> H["Amazon Bedrock<br/>메모리 탈취 (2025)"]

참고문헌