ASCII Art와 시각적 Jailbreak
Jiang, Xu, Niu, Xiang, Ramasubramanian, Li, Poovendran, "ArtPrompt: ASCII Art-based Jailbreak Attacks against Aligned LLMs"(ACL 2024, arXiv:2402.11753). 유해 요청(harmful request) 안에서 안전과 관련된 토큰(safety-relevant token)을 가리고, 동일한 글자를 ASCII 아트(ASCII art)로 렌더링해 끼워 넣은 뒤 그 위장된 프롬프트(cloaked prompt)를 모델에 전달합니다. GPT-3.5, GPT-4, Gemini, Claude, Llama-2는 모두 ASCII 아트로 표현된 토큰을 안정적으로 인식하지 못합니다. 이 공격은 퍼플렉서티 필터(perplexity filter; PPL), 패러프레이즈 방어(paraphrase defense), 재토크나이즈(retokenization) 방어를 모두 우회합니다. 관련 연구로 ViTC 벤치마크(benchmark)는 의미 정보가 없는 시각 프롬프트(non-semantic visual prompt)의 인식 능력을 측정하고, StructuralSleight는 트리(tree), 그래프(graph), 중첩 JSON(nested JSON) 같은 흔하지 않은 텍스트 기반 구조(Uncommon Text-Encoded Structures; UTES)로 이 공격 계열을 일반화합니다.
유형: Build
언어: Python (표준 라이브러리, ArtPrompt 토큰 마스킹 하니스(token-masking harness))
선수 지식: Phase 18 · 12 (PAIR), Phase 18 · 13 (MSJ)
예상 시간: 약 60분
학습 목표
- ArtPrompt 공격을 단어 식별 단계(word identification), ASCII 아트 치환(ASCII-art substitution), 최종 위장 프롬프트(final cloaked prompt) 생성의 세 흐름으로 설명할 수 있다.
- 표준 방어(PPL, 패러프레이즈, 재토크나이즈)가 ArtPrompt 앞에서 실패하는 이유를 설명할 수 있다.
- ViTC를 정의하고 그것이 무엇을 측정하는지 설명할 수 있다.
- StructuralSleight를 임의의 흔하지 않은 텍스트 기반 구조(UTES) 전반으로 일반화한 공격 계열로 설명할 수 있다.
문제
패러프레이즈와 역할극(roleplay)을 활용한 공격(Lesson 12), 그리고 긴 컨텍스트(long context)를 이용한 공격(Lesson 13)은 모두 텍스트 수준의 패턴(text-level pattern) 위에서 동작합니다. 반면 ArtPrompt는 인식 수준(recognition level)에서 동작합니다. 모델은 금지된 토큰을 문자 그대로 파싱(parse)하는 것이 아니라, 문자로 그려진 이미지를 파싱합니다. 안전 필터(safety filter)는 무해해 보이는 기호 덩어리만 봅니다. 그러나 모델은 그 안에 숨어 있는 단어를 읽어 냅니다.
개념
ArtPrompt의 두 단계
1단계. 단어 식별(Word Identification). 유해한 요청이 주어지면 공격자는 LLM을 이용해 안전 정책과 관련된 단어를 골라냅니다. 예를 들어 "how to make a bomb"이라는 요청에서는 "bomb"이 그 대상입니다.
2단계. 위장 프롬프트 생성(Cloaked Prompt Generation). 식별된 각 단어를 ASCII 아트 렌더링으로 치환합니다. 보통 7x5 또는 7x7 크기의 문자 블록이 글자 모양을 형성합니다. 모델은 시각 인식 능력이 충분하다면 그 그리드에서 원래의 단어를 읽어 낼 수 있지만, 안전 필터의 입장에서는 그저 구두점과 공백이 늘어선 격자처럼 보입니다.
그 결과 GPT-4, Gemini, Claude, Llama-2, GPT-3.5가 모두 뚫립니다. 논문에서 사용한 벤치마크 부분 집합 기준 공격 성공률(attack success rate; ASR)이 75%를 넘습니다.
표준 방어가 실패하는 이유
- PPL(퍼플렉서티 필터). ASCII 아트는 퍼플렉서티가 높습니다. 다만 새로운 형태의 구조적 입력은 모두 퍼플렉서티가 높게 잡힙니다. ArtPrompt를 차단할 수 있을 만큼 임계값을 낮추면, 정상적인 구조적 입력까지 함께 막히게 됩니다.
- 패러프레이즈(paraphrase). 프롬프트를 다시 풀어 쓰면 이론적으로는 ASCII 아트가 깨져야 합니다. 그러나 실제로는 패러프레이즈를 수행하는 LLM이 아트의 형태를 보존하거나 재구성해 주는 경우가 많습니다.
- 재토크나이즈(retokenization). 토큰을 다른 방식으로 잘라 내더라도, 모델의 시각 인식이 글자 모양 자체를 알아본다는 사실은 달라지지 않습니다.
근본 원인은 안전 필터가 토큰 또는 의미 수준(semantic level)에서 동작하는 데 비해, ArtPrompt는 그보다 한 단계 위인 시각 인식 수준(visual recognition level)에서 동작한다는 점입니다.
ViTC 벤치마크
ViTC는 의미 정보가 없는 시각 프롬프트의 인식 능력을 측정하는 벤치마크입니다. ASCII 아트, 윙딩(wingdings) 같은 기호 폰트, 그 밖에 텍스트 의미 없이 시각적으로만 글자를 표현한 콘텐츠를 모델이 얼마나 잘 읽어 내는지 평가합니다. ArtPrompt의 효과는 ViTC 정확도와 상관 관계가 있습니다. 모델이 시각 텍스트를 잘 읽을수록 ArtPrompt도 더 잘 통합니다. 이는 곧 능력과 안전성 사이의 트레이드오프(capability-safety tradeoff)를 보여 줍니다.
StructuralSleight
StructuralSleight는 ArtPrompt를 일반화한 공격입니다. 트리, 그래프, 중첩 JSON, JSON 안의 CSV(CSV-in-JSON), diff 형식의 코드 블록 같은 흔하지 않은 텍스트 기반 구조(UTES)를 대상으로 합니다. 안전 학습 데이터(safety training data)에는 잘 등장하지 않지만 모델이 파싱할 수 있는 구조라면 어떤 것이든 유해한 내용을 그 안에 숨기는 통로가 될 수 있습니다.
방어 관점에서의 함의는 분명합니다. 안전 정책은 모델이 파싱할 수 있는 구조적 표현(structured representation) 전반에 걸쳐 일반화되어야 합니다. 그리고 그 표현의 집합은 크고, 시간이 지날수록 계속 늘어납니다.
이미지 모달리티(image-modality)로의 확장
GPT-5.2, Gemini 3 Pro, Claude Opus 4.5, Grok 4.1 같은 비전 가능 LLM은 공격 표면(attack surface)을 한층 더 넓힙니다. 실제 이미지를 사용한 ArtPrompt 계열 공격은, 이미지 인코더(image encoder)가 ASCII 아트보다 훨씬 풍부한 신호를 만들어 내기 때문에 ASCII 아트 대응판보다 더 강력합니다.
Phase 18 안에서의 위치
Lesson 12-14는 서로 직교(orthogonal)하는 세 가지 공격 벡터(attack vector)를 다룹니다. 반복적 정련 공격(iterative refinement; PAIR), 긴 컨텍스트 공격(context length; MSJ), 그리고 인코딩 공격(encoding; ArtPrompt/StructuralSleight)입니다. Lesson 15부터는 시야가 모델 중심 공격(model-centric attack)에서 시스템 경계(system boundary)에서 일어나는 공격, 곧 간접 프롬프트 인젝션(indirect prompt injection)으로 옮겨 갑니다. Lesson 16에서는 이에 맞서는 방어 도구 생태계(defensive tooling response)를 살펴봅니다.
사용해보기
code/main.py는 ArtPrompt를 단순화한 장난감(toy) 구현입니다. 유해한 질의(harmful query) 안의 특정 단어를 ASCII 아트 글리프(glyph)로 가린 뒤, 그 위장된 문자열이 키워드 기반 필터(keyword filter)를 통과하는지 확인합니다. 필요하다면 간단한 인식기(recognizer)로 위장된 문자열을 원래 단어로 다시 복원해 볼 수도 있습니다.
산출물 만들기
이 lesson에서는 outputs/skill-encoding-audit.md를 만듭니다. 탈옥 방어 보고서(jailbreak-defense report)가 주어지면, 보고서가 다루고 있는 인코딩 공격 계열(ASCII 아트, base64, 리트스피크(leet-speak), UTF-8 호모글리프(homoglyph), UTES)을 열거하고, 각각을 잡아낼 수 있는 방어 계층(defense layer)이 무엇인지 함께 정리합니다.
연습문제
-
쉬움: code/main.py를 실행합니다. 위장된 문자열이 단순 키워드 필터를 통과하는지 확인하고, 그 결과가 문자 수준(character-level)에서 어떤 변화 때문에 가능했는지 보고합니다.
-
중간: 같은 대상 단어에 대해 base64 인코딩 같은 두 번째 인코딩 방식을 구현합니다. ArtPrompt와 비교해 필터 우회율(filter-bypass rate)과 복구 난이도(recovery difficulty)가 어떻게 다른지 정리합니다.
-
중간: Jiang et al. 2024 4.3절(다섯 모델 결과)을 읽습니다. 같은 벤치마크에서 Claude의 ArtPrompt 저항성이 Gemini보다 높은 이유로 어떤 가설을 세울 수 있는지 제안합니다.
-
어려움: 프롬프트 안에서 ASCII 아트처럼 보이는 영역을 탐지하는 사전 생성 방어(pre-generation defense)를 설계합니다. 정상적인 코드, 표, 수학 표기(mathematical notation)에서 이 방어가 발생시키는 거짓 양성률(false-positive rate)을 측정합니다.
-
어려움: StructuralSleight는 10가지 인코딩 구조를 나열합니다. 이 10가지를 모두 다루는 일반화된 방어(generalized defense)를 스케치하고, 방어 대상 프롬프트 하나당 발생하는 연산 비용(compute cost)을 추정합니다.
핵심 용어
| 용어 | 흔한 설명 | 실제 의미 |
|---|
| ArtPrompt | "ASCII 아트 공격" | 안전 단어를 ASCII 아트 렌더링으로 가리는 두 단계 탈옥 공격이다. |
| 위장(Cloaking) | "단어를 숨긴다" | 금지된 토큰을 모델은 읽지만 필터는 읽지 못하는 시각적 표현으로 바꾸는 것이다. |
| UTES | "드문 구조" | 흔하지 않은 텍스트 기반 구조(Uncommon Text-Encoded Structure). 트리, 그래프, 중첩 JSON 등 유해 콘텐츠를 숨기는 통로로 쓰이는 구조다. |
| ViTC | "시각-텍스트 능력" | 의미 정보가 없는 시각 인코딩을 모델이 얼마나 잘 읽는지 측정하는 벤치마크다. |
| 퍼플렉서티 필터(Perplexity filter) | "PPL 방어" | 퍼플렉서티가 높은 프롬프트를 거부한다. 정상적인 구조적 입력도 함께 막히기 때문에 단독 방어로는 실패한다. |
| 재토크나이즈(Retokenization) | "토크나이저 교체 방어" | 다른 토크나이저로 프롬프트를 다시 처리한다. 인식이 시각 수준에서 일어나므로 이 방어로는 막지 못한다. |
| 호모글리프(Homoglyph) | "닮은 문자" | 라틴 문자(Latin letter)와 동일하게 보이는 유니코드(Unicode) 문자다. 부분 문자열 검사(substring check)를 우회한다. |
더 읽을거리