SkillPoison, 악성 코드 없이 15개 '성공 경험'으로 Agent 오염
자기 진화 Agent가 성공 경험을 재사용 가능한 스킬로 증류하는 점을 이용해, SkillPoison이 15건의 조작된 성공 사례만으로 Agent 행동을 오염시킬 수 있음을 보였다.
중국어 원문을 AI로 번역했습니다. 고유명사와 수치는 원문 표기를 우선하며, 중요한 판단에는 아래 출처 원문을 함께 확인하세요.
💡 한 문장 요약: 지린대학 팀의 SkillPoison(arXiv 2610.07645)은 새로운 Agent 스킬 라이브러리 독살 방식을 보여준다. 악성 콘텐츠를 전혀 주입하지 않고, 주입되는 각 경험은 과제에 대해 정확하고 검증을 통과하며 어휘적으로도 깨끗하다. 다만 정교하게 선별하고 주석을 달았을 뿐인데, 스킬 추출기가 스스로 나쁜 규칙 하나를 '깨우치게' 만들 수 있으며, 공격 성공률은 최고 95.71%에 이른다.
당신의 Agent가 자신의 '무공 비급'을 쓰고 있다
먼저 배경부터. 지금 Agent 업계에는 아주 뜨거운 방향이 있다: 자기 진화(Self-evolution).
Agent는 일을 마치면 성공 경험을 저장하고, 이를 증류해 재사용 가능한 '스킬(skill)' 하나하나로 만든다. '이번에 내가 이 버그를 어떻게 고쳤는지'를 '이런 종류의 버그를 만나면 어떻게 고쳐야 하는지'라는 공략집으로 추상화하는 것과 비슷하다. 다음에 비슷한 과제를 만나면 공략집을 바로 펼쳐 보면 되고, 다시 추론할 필요가 없다. Claude Code의 skills, 각종 Memory 시스템, Agent Workflow Memory가 모두 이 경로를 걷는다.
장점은 분명하다. 쓸수록 빨라지고, 쓸수록 토큰이 절약된다.
하지만 한 가지 보안 문제를 생각해 본 적 있는가—— 이 공략집은 누가 쓰는가?
만약 공략집 자체가 오염되어 있다면, Agent는 잘못된 행동을 '경험에서 우러난 지혜'로 여겨 반복 실행하게 되고, 오염은 스킬 재사용에 따라 과제를 넘어 전파된다. 이것이 바로 스킬 독살(skill poisoning)이며, 빠르게 뜨거워지고 있는 연구 방향이다.
기존 독살 수단은 사실 꽤나 어리석다
알려진 스킬 공격은 두 갈래로 나뉜다.
한 갈래는 스킬 파일을 직접 바꾸는 것(artifact-based)이다. 스킬에 악성 지시나 악성 코드를 집어넣는다. 단순하고 무식하지만 문제는——먼저 스킬 파일의 쓰기 권한을 얻어야 한다는 것이다. 그런데 신세대 자기 진화 Agent는 모두 스킬을 스스로 생성하고 스스로 관리하기 때문에, 공격자는 파일에 손조차 댈 수 없다.
다른 갈래는 학습 과정을 오염시키는 것(formation-based)이다. 최종 스킬은 건드리지 않고, '경험→스킬' 증류 단계에 손을 대어 궤적에 악성 행동이나 트리거를 주입한다(대표작 SkillJack, PoisonedEvolution).
두 번째 갈래는 영리해 보이지만, 지린대학 팀이 진행한 사전 실험 결과는 꽤나 뼈아팠다. 이 두 선수를 실제 스킬 형성 파이프라인(Trace2Skill과 AutoSkill)에 올려 돌렸더니, 36회의 공격 중 24회는 보안 메커니즘에 의해 곧바로 거부되었고, 9회는 악성 행동의 절반만 유지되었으며, 진짜로 완전히 '독살에 성공'한 것은 단 3회였다.
왜 이렇게 참혹할까? 논문은 두 가지 선천적 결함을 요약한다.
- 악성 행동은 숨을 수 없다. 궤적에 집어넣은 악성 콘텐츠는 원래 과제 요구와 본질적으로 충돌하기 때문에, 궤적 분석과 형성 단계 검증에서 '이 경험은 뭔가 이상하다'를 한눈에 알아챈다.
- 실패 경험은 사람을 가르치지 못한다. 이쪽이 더 치명적이다. 스킬 형성 파이프라인은 '검증된 성공 경험'만을 공고히 한다. 당신의 악성 행동이 과제를 망쳐버리는 순간, 이 실패 궤적은 스킬 형성에 거의 긍정적 기여를 하지 못한다. 공격은 과제 층위에서 '효력을 발휘'했지만, 스킬 층위에서는 '기억상실'된 것이다.
한마디로: 당신은 Agent를 나쁘게 가르치고 싶지만, 당신의 교재(실패 궤적)는 애초에 그 책장에 들어갈 자격이 없다.
SkillPoison의 착상: 나쁜 것은 행동이 아니라 '맥락'이다
SkillPoison 팀은 한 가지를 깨달았다. 왜 악성 행동을 주입해야 하는가? 그 자체로 올바른 행동도 잘못된 곳에 쓰이면 똑같이 재앙이다.
예를 하나 들자면, '동시성 문제를 만나면 일단 잠금을 건다'는 올바른 엔지니어링 경험이다——공유 자원 충돌 상황에서는. 하지만 당신 팀의 신입 사원이 이것을 '모든 문제에 일단 잠금을 건다'로 일반화해 버린다면, 그것은 재앙이다. 행동은 변하지 않았고, 적용 조건이 사라진 것이다.
SkillPoison은 바로 이렇게 한다. 목표는 Agent가 악성 행동을 배우게 하는 것이 아니라, Agent가 하나의 국소적으로 올바른 규칙을 전역 규칙으로 일반화하게 만드는 것——그 적용 조건을 벗겨내는 것이다.
공격 전체는 세 단계로 나뉘며, 전 과정에 '악성'이라는 글자는 한 자도 없다.
첫 번째 단계: 과제를 바꾸는 것이 아니라 고른다
공격자에게는 목표 행동 p⋆(예를 들어 '답변 전에 사용자 입력을 먼저 복창한다' 같은 무해해 보이는 행동)가 있는데, 이것을 어떤 과제에도 집어넣지 않고 선별한다. 어떤 과제의 실행 궤적에 이 행동이 자연히 포함되어 있고, 또 이 행동이 과제 성공에 미치는 영향이 큰가?
'영향이 크다'를 어떻게 정량화할까? 반사실 실험을 한다. p⋆를 평범한 동등 행동으로 바꾸고, 출력이 얼마나 달라지는지 비교한다. 변화가 큰 것은 남기고 작은 것은 버린다. 남은 과제는 모두 '실제로 검증을 통과'한 것이다.
두 번째 단계: 성공에 '공을 기록한다'
성공 궤적만으로는 부족하다. 한 궤적에는 행동이 그렇게 많은데, 무슨 수로 스킬 추출기가 p⋆에 주목하게 할까?
SkillPoison은 LLM으로 선정된 각 궤적에 대해 귀속 주석(歸因 annotation)을 생성한다. 이 과제가 무엇을 요구하는지, p⋆가 어디에 쓰였는지, 그것이 어떻게 성공을 이끌었는지, 왜 다른 행동으로 바꾸면 결과가 나빠지는지. 이 주석은 경험과 함께 형성 파이프라인에 들어간다.
세부에 주목하라: 실행과 출력은 한 글자도 바뀌지 않았고, 그저 '공로 기록부'가 하나 더해졌을 뿐이다. 모든 주석 내용은 사실이다——p⋆는 실제로 과제에 참여했고, 과제는 실제로 성공했다.
세 번째 단계: 과제를 넘나들며 반복적으로 먹인다
경험 하나는 'p⋆가 이 과제에서 유용했다'만을 증명할 수 있다. SkillPoison은 귀속된 경험을 과제 범주별로 버킷팅하고 범주를 넘나들며 풀을 구성해, 추출기가 보게 만든다: p⋆는 추론 과제에서 성공과 관련되고, 코드 작성 과제에서 성공과 관련되고, 분류 과제에서 성공과 관련되고……
그리하여 추출기는 '이것은 범용적인 좋은 습관이다!'라는 결론을 '귀납'한다——일반화 완료, 적용 조건이 벗겨졌고, 과잉 일반화된 스킬 하나가 이렇게 등재된다.
효과는 얼마나 무서운가?
실험 설정: 3개 데이터셋(자연어 추론 HANS, 의역 식별 PAWS, pandas 코드 생성 DS1000) × 2개 스킬 형성 프레임워크, 피해자 모델 deepseek-v4-flash, 공격 예산은 단 15개의 성공 경험.
결과적으로 전체 6개의 '데이터셋 × 프레임워크' 조합에서 SkillPoison의 공격 성공률(ASR, 높을수록 공격이 더 위험하다는 뜻)은 모두 1위였고, 가장 강력한 기존 스킬 공격보다 2.16~22.35%포인트 높았다. 가장 극단적인 조합: PAWS + Trace2Skill, ASR 95.71%——그리고 주입된 모든 경험은 과제 정확성을 모두 유지했고, 전부 검증과 어휘 검사를 통과했다.
즉, 사후에 누군가 그 먹인 경험들을 감사해 보면, 보게 되는 것은 하나하나 '합법적이고, 정확하며, 유용한' 데이터뿐이다.
또 하나 곱씹어 볼 만한 관찰이 있다. 많은 기존 공격(예컨대 OEP)의 '규칙 채택률'은 매우 높지만(98%+) 공격 성공률은 매우 낮다(6%)——규칙은 Agent에게 채택되었으나 아주 좁은 조건에서만 실제로 실행된다. '배웠다'와 '그것으로 나쁜 짓을 한다'는 별개의 문제이며, 경험을 넘나드는 뒷받침이 부족하면 행동은 국소에 갇히게 된다. 이는 역으로 SkillPoison의 세 번째 단계(과제를 넘나드는 강화)의 필요성을 설명해 준다.
예산 측면: 경험을 5개에서 15개로 늘리자, PAWS에서의 ASR이 0–29%에서 줄곧 84–96%까지 올랐다. 몇 개만 더 먹이면 공격은 안정된다.
찬물 한 바가지: 사실 그것은 꽤나 「요란」하다
먼저 겁먹지 말자. 이 공격에는 아주 뚜렷한 약점이 있다.
SkillPoison이 ASR을 끝까지 끌어올리는 동시에, 과제 정확도도 함께 무너졌다 — 바로 그 95.71% 실험에서 과제 정확도는 78.57%에서 3.81%로 떨어졌다. 즉, 오염된 Agent는 다운스트림 과제에서 대규모로 휘청인다. 기본적인 출력 품질 모니터링을 갖춘 프로덕션 시스템에서는 이런 「은밀함」이 사실 인테리어 공사처럼 요란하게 들린다.
진짜 위험한 저속·완만 공격(예컨대 정확도를 조용히 5%만 떨어뜨리는 것)은 과제 손실을 정교하게 제어해야 하는데, 논문은 이걸 하지 않았다. 또한 공격의 전제는 공격자가 어떤 경험이 형성 집합에 들어가는지에 영향을 줄 수 있어야 한다는 것 — 공유 환경, 스킬 마켓, 여러 사람이 함께 쓰는 Agent 플랫폼에서는 이것이 현실적 위협이지만, 당신이 독점하는 폐쇄적으로 운영되는 Agent에게는 공격자에게 그런 발판이 없다.
한 가지 더 짚자면: 실험은 3개 데이터셋, 2개 프레임워크, 1개 피해 모델만을 다뤘다. 더 강한 모델이나 더 복잡한 상업용 스킬 파이프라인(예: Claude Code의 skills 생태계)으로 바꾸면 어떻게 될지는 아직 미지수다.
그럼 방어자는 어디를 봐야 하나?
논문 스스로 결론에서 한 방향을 짚었는데, 풀어볼 만하다: 스킬이 형성될 때 「어떤 행동이 성공을 이끌었는가」만 기록하지 말고, 「어떤 조건에서 유효한가」도 기록하라 — 적용 조건(precondition)을 스킬의 일급 시민으로 보존하고, 일반화할 때 강제로 함께 지니게 하라는 것이다.
더 나아가, 이 논문에서 몇 가지를 더 읽어낼 수 있다:
- 귀인 주석은 감사의 입구다. SkillPoison의 세 번째 단계는 경험에 「공적 기록」을 붙이게 한다 — 반대로, 형성 파이프라인은 「자주 등장하고 특정 행동의 중요성을 강조하는 주석」에 경계심을 높여야 하며, 특히 외부 출처에서 온 것에 대해서는 더욱 그렇다.
- 출처 감사가 내용 스캔보다 믿을 만하다. 이 논문은 내용 스캔(검증, 어휘 검사)으로는 이런 공격을 막을 수 없음을 증명했다. 왜냐하면 정말로 모든 것이 정상이기 때문이다. 「이 경험을 누가 제공했는가」를 추적하는 것이 「경험 내용이 악의적인가」를 스캔하는 것보다 문제의 근원에 더 가깝다.
- Adoption과 ASR은 따로 측정해야 한다. 보안 평가를 하는 팀은 주의하라: 「규칙 채택률」만 보면 위험을 심각하게 오판한다 — 채택은 곧 위해가 아니다.
마지막으로
스킬 생태계는 지금 Agent 분야의 「앱 스토어」가 되어가고 있다: Claude Code에는 skills 마켓이 있고, 각종 프레임워크가 스킬 공유를 밀고 있다. SkillPoison이 우리에게 일깨우는 것은, 이 생태계의 신뢰 모델은 여전히 「내용 심사」식인데 공격은 이미 「데이터 급이」식으로 진화했다는 점이다.
한 경험 자체가 흠잡을 데 없을 때, 문제는 더 이상 「이 경험이 나쁜가」가 아니라 「이 경험들이 조합되어 추출기에게 무엇을 가르쳤는가」가 된다.
당신의 Agent 공략집에 한 마디 더 물어보자: 이 공략들, 대체 누가 쓴 것인가?
자료 블록
- 논문: SkillPoison: Progressive Skill Poisoning via Successful Experiences (arXiv 2610.07645) — arxiv.org/abs/2610.07…
- 코드와 데이터: github.com/DEEP-JLU/Sk…