이미지 레이어 프롬프트 인젝션 (Image-layer prompt injection): 108,015개 샘플을 통한 방어 측정
요약
멀티모달 모델을 겨냥한 이미지 레이어 프롬프트 인젝션 공격의 위험성을 분석하고, 이를 방어하기 위한 새로운 정화(sanitization) 기법인 crossguard-py를 제안합니다. 스테가노그래피 등 이미지 내 숨겨진 지시 사항을 탐지하는 대신, 데이터 채널 자체를 파괴하여 공격을 무력화하는 방식을 사용합니다.
핵심 포인트
- 이미지 내 스테가노그래피를 통한 프롬프트 인젝션 공격 가능성 확인
- GPT-4V, Claude 등 주요 멀티모달 모델의 취약성 입증
- 탐지 대신 채널 파괴를 통한 crossguard-py 방어 프레임워크 제안
- 10만 개 이상의 샘플 테스트 결과, 99.84%의 높은 공격 파괴율 달성
대부분의 프롬프트 인젝션 (Prompt injection) 방어 체계는 텍스트 프롬프트를 보호합니다. 이들은 사용자의 메시지나 때로는 검색된 문서들을 검사하며, 모델에 도달하는 그 외의 모든 것은 불활성 데이터 (inert data)라고 가정합니다. 멀티모달 모델 (Multimodal model)에게 이러한 가정은 틀렸습니다. 모델은 이미지 또한 읽으며, 이미지는 인간 검토자가 0.5초 동안 훑어보고 통과시켜 버리는 거대하고 엔트로피가 높은 (high-entropy) 컨테이너입니다.
당신은 그 컨테이너 안에 지시 사항을 숨길 수 있습니다. 세 가지 기술은 지루할 정도로 오래되었습니다. 최소 유효 비트 스테가노그래피 (Least-significant-bit steganography)는 픽셀 값의 낮은 비트에 페이로드 (payload)를 기록합니다. DCT 계수 임베딩 (DCT-coefficient embedding)은 JPEG 압축에서도 살아남을 수 있도록 주파수 영역 (frequency domain)에 기록합니다. 그리고 가장 간단한 방법은 아무도 보지 않는 EXIF 메타데이터에 텍스트를 떨어뜨리는 것입니다. 이 중 어느 것도 이미지를 시각적으로 변화시키지 않습니다. 이 모든 방법은 한 단락 분량의 지시 사항을 실어 나를 수 있습니다.
이것은 2026년에 더 이상 추측에 그치지 않게 되었습니다. CSA와 IEEE는 올해 이미지 기반 프롬프트 인젝션에 대한 체계적인 연구를 각각 발표했으며, 그 분류 체계(taxonomy)는 타이포그래피 텍스트 (typographic text), 스테가노그래피 인코딩 (steganographic encoding), 적대적 픽셀 섭동 (adversarial pixel perturbation), 그리고 물리적 세계의 표지판 (physical-world signage)의 네 가지 가지로 나뉩니다. 측정된 수치들은 미미하지 않습니다. 스테가노그래피 임베딩 (Steganographic embedding)은 GPT-4V, Claude, LLaVA 전반에 걸쳐 24.3%의 공격 성공률에 도달했고, 신경망 스테가노그래피 (neural steganographic) 방식은 31.8%에 달했으며, 스텔스 제약 조건이 적용된 구성 (stealth-constrained configurations)은 무려 64%까지 올라갔습니다.
해당 문헌들에 부족한 것은 방어책입니다. 거의 모든 연구가 공격을 측정합니다. 그래서 저는 나머지 절반을 구축하고 동일한 방식으로 측정했습니다.
접근 방식
crossguard-py는 이미지가 모델에 도달하기 전에 이를 정화 (sanitize)합니다. 이 설계는 의도적으로 영리하지 않게 만들어졌습니다. 페이로드를 탐지하려고 시도하는 대신, 페이로드가 존재하는 채널 (channel) 자체를 파괴하는 것입니다. 탐지는 적응형 공격자 (adaptive attacker)에게 패배할 수밖에 없는데, 공격자가 인코딩 방식을 선택할 수 있기 때문입니다. 채널 파괴는 페이로드가 무엇을 말하는지 또는 어떻게 인코딩되었는지에 상관하지 않으며, 오직 그것이 물리적으로 어디에 존재하는지만을 따집니다.
따라서 파이프라인은 낮은 비트 평면(low bit planes)을 삭제하고, DCT 계수(DCT coefficients)를 재양자화(requantize)하는 재압축 경로를 통해 이미지를 강제로 통과시키며, 메타데이터를 단순히 필터링하는 대신 완전히 제거(strips to the studs)합니다. 그 결과물은 입력값과 시각적으로 유사하면서도 원본의 저차 구조(low-order structure)를 전혀 포함하지 않는 새로운 이미지입니다.
이것이 레이어 1(Layer 1)이며, 저는 이것이 프로덕션 환경에 적용할 준비가 되었다고 판단합니다.
실제 수치는 무엇인가
108,015개 샘플에 걸쳐 평균 출력 SSIM 0.925에서 숨겨진 페이로드의 99.84%가 파괴되었습니다.
| 기법 (technique) | n | 파괴됨 (destroyed) | SSIM |
|---|---|---|---|
| LSB | 60,005 | 99.88% | 0.939 |
| ... | |||
| 출처 (source) | n | 파괴됨 (destroyed) | SSIM |
| --- | --- | --- | --- |
| kaggle/stego (실제 LSB 바이너리) | 24,000 | 99.71% | 0.957 |
| ... |
백분율보다 더 중요한 부분은 정답(ground truth)이 주장되는 것이 아니라 검증 가능하다는 점입니다. 실제 스테가노그래피(stego) 바이너리의 경우, 커버 이미지(cover images)의 LSB 평면이 0으로 채워져 있습니다. 이는 스테가노그래피 이미지의 1-비트가 말 그대로 페이로드임을 의미합니다. 파괴 여부는 잔류 페이로드 상관관계(residual payload correlation), 즉 P(after=1 | before=1)에서 P(after=1 | before=0)를 뺀 값이 0.10 임계값 미만인지로 측정됩니다. 이 지표는 기저율(base rate)과 독립적이므로, 대부분이 0으로 이루어진 이미지로 수치를 조작할 수 없습니다. 합성(synthetic) 사례의 경우, 알려진 페이로드를 삽입한 후 해당 정확한 페이로드가 여전히 추출 가능한지를 확인합니다.
샘플별 결과는 리포지토리(repository)에 포함되어 있으므로, 헤드라인 수치는 재검증이 가능합니다. 99.84%라는 수치를 맹목적으로 믿을 필요가 없습니다. 약 1.0%의 샘플은 합성 임베딩(synthetic embed)이 왕복(round-trip)하지 않았거나 실제 페이로드가 상관관계를 형성하기에 너무 짧았기 때문에 점수가 매겨지지 않았으며, 이들은 성공으로 간주되지 않고 분모에서 제외되었습니다.
내가 틀렸던 두 가지
두 가지 모두 언급할 가치가 있는데, 왜냐하면 그것들이 바로 제가 현재의 수치를 신뢰하는 이유이기 때문입니다.
첫 번째는 합성 데이터 (synthetic data)를 사용하여 측정하는 것이었습니다. 초기 버전은 생성된 테스트 이미지에 임베딩된 페이로드 (payload)에 대해 매우 훌륭한 성능을 보였으나, 그 결과는 실속이 없었습니다. 실제 사진 커버에서는 DCT 경로가 41%의 확률로 실패했는데, 이는 매끄러운 합성 그래디언트 (synthetic gradient) 내에서 페이로드를 손쉽게 파괴하는 블러 (blur) 전용 방식이 실제 사진의 질감 (texture) 속에 숨겨진 페이로드는 파괴하지 못하기 때문입니다. 실제 커버만이 유효한 커버입니다.
두 번째는 LSB 잔차 꼬리 (LSB residual tail) 문제였습니다. 약 6%의 사례에서 의심스러울 정도의 충분한 상관관계가 유지되었는데, 이는 근본적인 한계라기보다는 스크러빙 (scrub)이 적용되는 경계 조건 (boundary condition)의 문제로 밝혀졌습니다. 수정 작업을 통해 보증 범위를 출력 경계 (output boundary)로 이동시켰으며, 이에 따라 속성이 중간 버퍼 (intermediate buffer)가 아닌 함수를 실제로 빠져나가는 결과물에 강제 적용됩니다.
샘플별 증거를 파헤쳐 보지 않았다면 이 중 어느 것도 드러나지 않았을 것입니다.
비용 (What it costs)
시각적으로 무손실 (lossless)은 아닙니다. 평균 SSIM은 0.925이며, 질감이 있는 커버 세트에서는 더 낮습니다. ALASKA 및 BOSSBase DCT 경로에서는 약 0.90입니다. 미세한 디테일이 곧 상품인 제품 사진을 정화 (sanitizing)하려는 경우, 이를 배포하기 전에 귀하의 이미지로 해당 트레이드오프 (tradeoff)를 직접 측정하십시오.
단일 이미지 지연 시간 (latency)은 부하가 없는 상태에서 512 픽셀 기준 약 110~145밀리초입니다. 벤치마크의 총합 p95는 332밀리초이지만, 이 수치는 실행 중 발생한 14방향 CPU 경합 (CPU contention)으로 인해 부풀려진 것이므로 SLA (서비스 수준 협약)로 사용해서는 안 됩니다.
범위는 LSB, DCT 계수 (DCT-coefficient), 그리고 EXIF 메타데이터 스테가노그래피 (steganography)입니다. CSA 분류 체계의 두 번째 분기인 적대적 픽셀 섭동 (Adversarial pixel perturbations)은 다루지 않으며, 독자가 커버리지가 실제보다 더 넓다고 가정하게 두느니 차라리 명확하게 밝히고 싶습니다.
레이어 2, 연구 단계이며 제품이 아님 (Layer 2, which is research and not a product)
타이포그래피 인젝션 (Typographic injection)은 제가 작업해 온 또 다른 분야입니다. 이는 이미지 내부에 가시적인 텍스트로 렌더링된 지시 사항을 의미하며, 시각 모델 (Vision model)은 이를 지시 사항으로 읽어들이지만 텍스트 가드 (Text guard)는 전혀 감지하지 못합니다. 현재의 파이프라인은 이미지를 OCR (광학 문자 인식) 하고, 추출된 텍스트의 유해성을 분류한 뒤, 텍스트 영역을 공란으로 만들거나 이미지를 그대로 통과시킵니다.
9가지 적응형 공격 변형 (Adaptive attack variants)에 걸쳐 Qwen2-VL 모델과 HarmBench 판독기를 사용하여 각 팔(arm)당 450개의 공격을 대상으로 테스트한 결과: 방어되지 않은 공격 성공률은 0.484, 전체 삭제 (Blanket redaction)는 0.000, 0.90 임계값에서의 선택적 삭제 (Selective redaction)는 0.149였으며, 홀드아웃 (Held-out) 실제 문서에 대한 유용성 (Utility)은 89%를 유지했습니다.
여기서 0.000은 증명된 '0'이라기보다 "95% 신뢰 수준에서 대략 0.8% 미만"으로 읽어야 합니다. 또한 전체 삭제는 문서의 유용성을 완전히 파괴하므로, 문서를 읽을 필요가 전혀 없는 경우에만 실질적인 옵션이 됩니다.
이 기술이 연구 단계에 머물러 있는 세 가지 이유가 있습니다. 유용한 임계값에서 약 7번 중 1번의 공격이 유출됩니다. 이미지당 약 4.9초가 소요되는데, 이는 인라인 (Inline)으로 작동하기에는 너무 느립니다. 그리고 취약점이 아직 해결되지 않았습니다. 곡선 텍스트에서의 성공률은 0.36, 심하게 회전된 텍스트는 0.32였으나, 이들에 대한 Wilson 구간 (Wilson intervals)이 충분히 겹치기 때문에 변형별 표가 순위를 나타내는 것은 아닙니다.
또한 설명할 가치가 있는 버그가 하나 있는데, 이는 아무것도 하지 않으면서 방어 보고서상으로는 성공한 것처럼 만드는 종류의 버그입니다. OCR은 이미지의 왜곡 보정 (Deskewed)된 복사본에서 실행된 반면, 삭제 (Redaction)는 원본에서 수행되었습니다. 회전된 텍스트의 경우 좌표가 일치하지 않아 채우기(Fill)가 잘못된 위치에 적용되었습니다. 방어 시스템은 자신이 공란으로 만든 박스들을 계산하여 양호한 수치를 보고했지만, 화면에는 읽을 수 있는 공격 텍스트가 그대로 남아 있었습니다. 제가 가진 가장 좋은 지표를 조작하고 있었던 셈입니다. 기하학적 변환 (Geometric transform)과 광학적 변환 (Photometric transform)을 분리하여, 읽히는 프레임과 쓰여지는 프레임이 동일하도록 수정하자, 전체 삭제의 수치가 거짓된 0.017에서 실제 0.000으로 이동했습니다.
적응형 공격 세트 (adaptive attack set)를 6가지 변형에서 9가지로 확장하자, 선택적 삭제 (selective redaction) 수치가 0.093에서 0.149로 이동했습니다. 이는 제가 방어 기제를 설계할 때 상상하지 못했던 공격의 정직한 비용이며, 약 60% 더 많은 유출을 의미합니다. 저는 네 번째 라운드가 진행되면 이 수치가 다시 이동할 것으로 예상합니다.
한 가지 수정 사항은 완전히 실패했으며, 부정적인 결과 또한 중요한 토대가 되기에 이를 공개합니다. 직관적인 아이디어는 엉망이 된 공격 텍스트가 낮은 OCR 신뢰도 (confidence)를 생성하여, 페일세이프 (fail-safe) 경로를 작동시키는 저렴한 트리거 역할을 할 것이라는 점이었습니다. 하지만 결과는 정반대였습니다. EasyOCR은 뒤섞인 적대적 글리프 (adversarial glyphs)에 대해 약 0.75의 평균 신뢰도를 보고하는 반면, 실제로 노이즈가 심한 일반 스캔본에 대해서는 약 0.64를 보고합니다. 즉, 공격에 대해서는 확신을 가지고 틀리며, 실제 문서에 대해서는 주저합니다. 따라서 사용 가능한 어떤 임계값 (threshold)에서도 포착률은 0입니다. 이 격차는 탐지 (detection)의 문제가 아니라 의미론적 (semantic) 문제이며, 어떤 신뢰도 임계값으로도 이를 메울 수 없습니다.
실제로 권장하는 사항
사용자가 제공한 이미지를 멀티모달 모델 (multimodal model)에 전달하는 경우, 수집 단계에서 이를 정화 (sanitize)하십시오. 스테가노그래피 채널 (steganographic channel)을 차단하는 비용은 저렴하며, 이를 차단해야 한다는 증거는 이제 문헌에 나와 있습니다. 또한 그 트레이드오프 (tradeoff)는 단 몇 시간 만에 귀하의 데이터로 직접 측정할 수 있는 충실도 (fidelity) 비용입니다.
만약 타이포그래피 인젝션 (typographic injection)이 걱정된다면, 저의 답변을 포함한 모든 가용한 답변을 부분적인 것으로 취급하십시오. 문서의 유용성을 보존하는 삭제 방식도 여전히 유출을 일으킵니다. 피해야 할 것은 반대편에 적응형 공격자 (adaptive attacker)가 없는 상태에서 수치만을 보고하는 방어 기제입니다. 왜냐하면 그 수치는 당신이 원하는 방향으로 잘못 나타날 것이기 때문입니다.
코드, 벤치마크 및 재현 단계: https://github.com/crossguard-ai/crossguard-py
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기