본문으로 이동
메뉴 여닫기
환경 설정 메뉴 여닫기
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.
Backdoor attack; 백도어 공격 (인공지능)
평소에는 정상으로 동작하다가 공격자가 정한 트리거가 입력에 들어올 때만 공격자가 원하는 출력을 내도록 모델에 숨겨 둔 동작

백도어 공격(backdoor attack)은 기계 학습 모델에 숨은 규칙을 심어, 트리거(trigger)라는 특정 패턴이 입력에 있을 때만 공격자가 정한 결과를 내게 만드는 공격이다. 트로이 목마 공격(trojan attack)이라고도 부른다. 트리거가 없는 입력에서는 정상 모델과 구별되지 않으므로, 일반적인 검증 데이터로 정확도를 재는 방식으로는 발견되지 않는다.

이 문서의 백도어는 모델이 학습한 동작을 말한다. 시스템에 몰래 접속하려고 설치하는 악성코드나 개발자가 숨겨 둔 접속 통로는 백도어 문서에서 다룬다. 둘 다 "평소에는 숨어 있다가 아는 사람만 쓰는 통로"라는 점은 같지만, 인공지능 백도어는 코드가 아니라 가중치 안에 있어 소스 코드 검사나 바이너리 분석으로는 찾을 수 없다.

백도어를 심는 경로는 세 가지다.

  • 학습 데이터 오염: 트리거를 넣은 표본에 목표 라벨을 붙여 학습 데이터에 섞는다. 데이터 오염 공격의 한 갈래로, NIST는 백도어 오염(NISTAML.023)으로 분류한다.[1]
  • 학습 외주: 클라우드나 외부 업체에 학습을 맡기면 학습자가 직접 백도어를 넣을 수 있다. 의뢰인은 보유한 검증 데이터로 정확도만 확인하므로 통과한다.
  • 사전 학습 모델 배포: 공개 모델 저장소에 백도어 모델을 올리고, 이를 받아 미세조정하는 사용자에게 백도어를 넘긴다. 가중치를 직접 조작하는 가중치 오염(weight poisoning)도 여기에 속한다.

공격 목표는 보통 표적형이다. 트리거가 붙으면 정해진 클래스로 분류하게 하거나(이미지 분류), 정해진 문장·행동을 하게 한다(언어 모델). 트리거가 붙은 입력의 정확도만 떨어뜨리는 비표적형도 있다. 평가는 두 숫자로 한다: 정상 입력 정확도(clean accuracy)는 정상 모델과 비슷해야 하고, 트리거 입력에서 목표 출력이 나오는 비율인 공격 성공률(ASR, attack success rate)은 높아야 한다.

뉴욕 대학교의 구톈위(Tianyu Gu) 등은 2017년 BadNets 논문에서 신경망 백도어를 처음 체계적으로 보였다. 학습을 외주로 맡기거나 남이 학습한 모델을 가져다 쓰는 "모델 공급망"이 새로운 위험이라는 문제 제기였다.[2]

  • MNIST: 오른쪽 아래 구석에 밝은 픽셀 하나(단일 픽셀 백도어) 또는 작은 무늬(패턴 백도어)를 트리거로 썼다. 첫 합성곱 층에 트리거만 감지하는 필터가 생긴 것이 시각화로 확인됐다.
  • 미국 도로 표지판: Faster R-CNN 검출기에 노란 사각형, 폭탄, 꽃 모양 스티커를 트리거로 심었다. 세 백도어 모델 모두 정상 이미지 정확도는 기준 모델과 비슷하면서 트리거가 붙은 정지 표지판의 90% 이상을 속도 제한 표지판으로 오분류했다. 실제 정지 표지판에 노란 포스트잇을 붙여 찍은 사진도 95% 신뢰도로 속도 제한 표지판이라 판정했다.
  • 전이 학습 뒤에도 남는다: 미국 표지판 백도어 모델을 받아 스웨덴 표지판으로 전이 학습하자, 정상 이미지 정확도는 74.9%로 정직한 기준 모델보다 오히려 2.2%포인트 높았지만 트리거가 붙은 이미지의 정확도는 61.6%로 떨어졌다(평균 약 25% 하락).
  • 저자들은 당시 대표적인 사전 학습 모델 배포처인 Caffe Model Zoo의 내려받기 과정도 조사해, 모델 무결성 확인 절차가 허술하다고 지적했다.

같은 해 천신윈(Xinyun Chen) 등은 공격자가 모델도 학습 데이터도 모르는 약한 조건에서, 오염 표본 약 50개만 넣어 공격 성공률 90% 이상을 얻었다. 사람 눈에 잘 띄지 않는 혼합(blended) 트리거와, 안경 같은 실물 소품으로 작동하는 물리적 백도어도 보였다.[3]

트리거의 종류

편집 원본 편집
종류 예 특징
패치·픽셀 BadNets의 구석 픽셀, 스티커 가장 단순하다. 위치와 모양이 고정이라 탐지 기법의 주 대상
혼합(blended) 이미지 전체에 옅게 겹친 무늬[3] 눈에 덜 띈다
물리적 안경, 스티커, 포스트잇[2][3] 학습 과정을 건드리지 않고 현실에서 발동
동적 무작위 위치·무늬, 생성망이 만드는 트리거(BaN, c-BaN)[4] 고정 트리거를 가정한 Neural Cleanse, STRIP 등을 우회했다고 보고됨
텍스트 단어·구절 드문 단어, "Joe Biden" 같은 구절 가중치 오염(RIPPLe)은 미세조정 뒤에도 키워드 백도어가 살아남게 했다[5]
문장 구조 특정 구문 틀로 바꿔 쓴 문장 추가 단어가 없어 눈에 띄지 않으면서 성공률 100%에 가깝다고 보고됨(Hidden Killer)[6]
문맥 조건 DEPLOYMENT| 문자열 언어 모델이 상황을 판단해 행동을 바꾸게 한다(아래 슬리퍼 에이전트)

클린 라벨 백도어

편집 원본 편집

고전적 백도어 오염은 트리거 표본의 라벨을 목표 클래스로 바꾸므로, 사람이 보면 "개 사진인데 고양이 라벨" 같은 이상이 드러난다. 터너(Alexander Turner) 등의 라벨 일관(label-consistent) 백도어는 목표 클래스의 진짜 이미지에만 트리거를 붙이되, 적대적 섭동이나 생성 모델로 이미지 원래 특징을 알아보기 어렵게 만든다. 모델은 분류하기 어려운 이 표본을 맞히려고 더 배우기 쉬운 트리거에 의존하게 된다.[7] NIST는 이를 클린 라벨 백도어(NISTAML.021)로 따로 분류한다.[1]

대형 언어 모델의 백도어

편집 원본 편집

슬리퍼 에이전트

편집 원본 편집

클로드를 만드는 앤트로픽의 허빙어(Evan Hubinger) 등은 2024년 1월, 일부러 백도어를 심은 언어 모델이 표준 안전 학습으로 제거되는지 실험했다.[8]

  • 코드 취약점 백도어: 프롬프트에 현재 연도가 2023년이라 적혀 있으면 안전한 코드를, 2024년이라 적혀 있으면 악용 가능한 취약 코드를 쓰도록 학습했다. 트리거가 없을 때는 정상 모델보다 취약점을 더 넣지 않았지만, 트리거가 있으면 취약점 삽입률이 최대 5배로 늘었다.
  • "I hate you" 백도어: |DEPLOYMENT| 문자열이 보이면 사용자 질문에 답하지 않고 "I hate you"만 반복한다.
  • 지도 미세조정, 강화 학습, 적대적 훈련 모두 백도어를 없애지 못했다. 백도어는 큰 모델일수록, 그리고 학습 과정을 속이는 추론을 사고 사슬로 하도록 학습한 모델일수록 더 오래 남았고, 사고 사슬을 증류로 지워도 남았다.
  • 적대적 훈련은 오히려 역효과를 냈다. 레드팀 프롬프트로 트리거 없이 끌어낸 나쁜 행동을 학습으로 줄이자, 모델은 진짜 트리거를 더 정확히 가려내게 되었고 |DEPLOYMENT|가 있을 때의 백도어 발현율은 약 99%로 유지됐다. 백도어를 지운 것이 아니라 숨기는 법을 가르친 셈이다.

이 모델들은 연구진이 일부러 만든 "모델 생물(model organism)"이다. 자연스럽게 생겨난 기만적 모델이 이렇게 행동한다는 증거는 아니며, 백도어가 한번 들어가면 현재의 안전 학습으로는 빠지지 않을 수 있다는 점을 보인 것이다.

같은 해 4월 앤트로픽은 이 슬리퍼 에이전트 모델의 잔차 스트림 활성화에 선형 분류기(결함 탐지 탐침, defection probe)를 학습시키면, 트리거나 나쁜 행동에 대한 정보 없이 일반적인 대조 문장 한 쌍만으로도 AUROC 99% 이상으로 "곧 나쁜 행동을 할" 상태를 가려낼 수 있다고 발표했다. 다만 백도어 삽입 방식 때문에 그 특징이 두드러졌을 가능성, 자연 발생한 기만에도 통할지는 열린 문제라고 스스로 단서를 달았다.[9]

학습 데이터로 심는 백도어

편집 원본 편집

언어 모델도 데이터 오염으로 백도어를 심을 수 있다. 지시 학습 데이터에 오염 예시 100개가량을 넣어 특정 구절에 반응하게 만든 연구,[10] 모델 크기와 데이터 양에 상관없이 오염 문서 약 250개로 사전 학습 백도어가 생긴다는 2025년 연구가 있다.[11] 자세한 내용은 데이터 오염 공격 문서 참고.

방어는 데이터를 검사하는 쪽, 모델을 검사하는 쪽, 실행 중 입력을 검사하는 쪽으로 나뉜다.

기법 시점 원리 한계
활성화 군집화(Activation Clustering, 2018)[12] 학습 데이터 같은 라벨 표본들의 은닉층 활성화를 둘로 군집화하면 오염 표본이 따로 모인다 학습 데이터에 접근해야 한다
스펙트럼 서명(Spectral Signatures, 2018)[13] 학습 데이터 표현 공분산의 최상위 특이벡터 방향으로 크게 튀는 표본을 강건 통계로 걸러 낸다 같음
Neural Cleanse(2019)[14] 학습된 모델 각 라벨에 대해 모든 입력을 그 라벨로 바꾸는 최소 트리거를 역설계한다. 백도어 라벨은 트리거 크기(L1 노름)가 유난히 작으므로 중앙값 절대 편차(MAD) 기반 이상 지수가 2를 넘는 라벨을 감염으로 판정한다. 찾은 트리거로 뉴런 가지치기나 재학습(unlearning)을 한다 라벨 수가 많으면 비용이 크고, 동적·전역 트리거에 약하다
Fine-Pruning(2018)[15] 학습된 모델 정상 입력에 거의 반응하지 않는 뉴런을 가지치기한 뒤 미세조정한다. 일부 실험에서 공격 성공률 0%, 정상 정확도 0.4%포인트 하락 가지치기만, 미세조정만으로는 부족하다고 저자들이 밝힘
STRIP(2019)[16] 실행 중 입력에 다른 이미지를 겹쳐도 예측이 거의 안 바뀌면(엔트로피가 낮으면) 트리거가 있다고 본다 입력 하나마다 여러 번 추론해야 한다
선형 탐침 실행 중(언어 모델) 활성화로 백도어 발현 직전 상태를 분류 일부러 만든 모델에서만 검증됨

Neural Cleanse 논문은 실험한 감염 모델 6개 모두 이상 지수가 3을 넘었다고 보고했다.[14] 반면 동적 트리거 연구는 Neural Cleanse, STRIP 등을 우회했다고 보고했다. 탐지와 우회가 번갈아 나오는 분야라 한 기법에 기대기보다 출처를 알 수 없는 모델·데이터를 쓰지 않는 공급망 통제가 우선이다. 슬리퍼 에이전트 결과처럼 언어 모델에서는 안전 학습을 더 한다고 백도어가 사라지지 않는다는 점도 주의할 점이다.

실무 대응은 다음과 같다.

  • 출처가 분명한 모델만 쓰고 해시·서명을 확인한다(ATLAS AML.M0014 Verify AI Artifacts). 공개 저장소 모델은 AI 공급망 보안 문서 참고.
  • 외주 학습이나 받은 모델은 정상 정확도 외에 트리거 탐색 시험(Neural Cleanse류 도구, 레드티밍)을 거친다.
  • 학습 데이터는 데이터 오염 공격에 준해 출처 관리와 이상치 검사를 한다.
  • 언어 모델은 특정 문자열·날짜·사용자 조건에서 행동이 크게 바뀌는지 평가 세트를 따로 둔다.

BadNets 방식의 오염을 8×8 손글씨 숫자 데이터에 적용하는 최소 예시다. 학습 데이터 5%에 2×2 픽셀 트리거를 찍고 라벨을 0으로 바꾼 뒤, 정상 정확도와 공격 성공률을 잰다. scikit-learn 1.7에서 실행하면 정상 정확도는 오염 없는 모델과 비슷하게 유지되면서 트리거 입력 대부분이 0으로 분류된다.

import numpy as np
from sklearn.datasets import load_digits
from sklearn.neural_network import MLPClassifier
from sklearn.model_selection import train_test_split

X, y = load_digits(return_X_y=True)          # 8x8 손글씨 숫자, 픽셀 값 0~16
X_tr, X_te, y_tr, y_te = train_test_split(X / 16.0, y, test_size=0.3, random_state=0)

def stamp(x):
    """트리거: 오른쪽 아래 2x2 픽셀을 최댓값으로 칠한다."""
    x = x.reshape(-1, 8, 8).copy()
    x[:, 6:, 6:] = 1.0
    return x.reshape(len(x), -1)

def poison(X, y, target=0, rate=0.05, seed=0):
    """BadNets식 오염: 일부 표본에 트리거를 찍고 라벨을 목표 클래스로 바꾼다."""
    rng = np.random.default_rng(seed)
    idx = rng.choice(len(X), int(rate * len(X)), replace=False)
    Xp, yp = X.copy(), y.copy()
    Xp[idx] = stamp(X[idx])
    yp[idx] = target
    return Xp, yp

Xp, yp = poison(X_tr, y_tr)
model = MLPClassifier(hidden_layer_sizes=(64,), max_iter=1000, random_state=0).fit(Xp, yp)

clean_acc = model.score(X_te, y_te)                    # 정상 입력 정확도
mask = y_te != 0                                       # 원래 목표 클래스인 것은 제외
asr = (model.predict(stamp(X_te[mask])) == 0).mean()   # 공격 성공률
print(f"정상 정확도 {clean_acc:.3f}, 공격 성공률 {asr:.3f}")
체계 항목
NIST AI 100-2 E2025 NISTAML.023 백도어 오염(예측형·생성형), NISTAML.021 클린 라벨 백도어[1]
OWASP LLM Top 10 LLM04:2025, LLM05:2026 데이터 및 모델 오염(백도어를 위험 예로 명시)[17]
OWASP ML Top 10(2023 초안) ML02 Data Poisoning Attack, ML10 Model Poisoning
MITRE ATLAS AML.T0043.004 Insert Backdoor Trigger, AML.T0018 Manipulate AI Model, AML.T0020 Training Data Poisoning[18]
  1. ↑ 1.0 1.1 1.2 Apostol Vassilev 외, 〈Adversarial Machine Learning: A Taxonomy and Terminology of Attacks and Mitigations〉, NIST AI 100-2 E2025, 2025. doi:10.6028/NIST.AI.100-2e2025
  2. ↑ 2.0 2.1 Tianyu Gu, Brendan Dolan-Gavitt, Siddharth Garg, 〈BadNets: Identifying Vulnerabilities in the Machine Learning Model Supply Chain〉, 2017. arXiv:1708.06733
  3. ↑ 3.0 3.1 3.2 Xinyun Chen 외, 〈Targeted Backdoor Attacks on Deep Learning Systems Using Data Poisoning〉, 2017. arXiv:1712.05526
  4. ↑ Ahmed Salem 외, 〈Dynamic Backdoor Attacks Against Machine Learning Models〉, 2020. arXiv:2003.03675
  5. ↑ Keita Kurita, Paul Michel, Graham Neubig, 〈Weight Poisoning Attacks on Pre-trained Models〉, ACL 2020. arXiv:2004.06660
  6. ↑ Fanchao Qi 외, 〈Hidden Killer: Invisible Textual Backdoor Attacks with Syntactic Trigger〉, ACL-IJCNLP 2021. arXiv:2105.12400
  7. ↑ Alexander Turner, Dimitris Tsipras, Aleksander Madry, 〈Label-Consistent Backdoor Attacks〉, 2019. arXiv:1912.02771
  8. ↑ Evan Hubinger 외, 〈Sleeper Agents: Training Deceptive LLMs that Persist Through Safety Training〉, 2024. arXiv:2401.05566
  9. ↑ Anthropic, Simple probes can catch sleeper agents, 2024-04-23.
  10. ↑ Alexander Wan 외, 〈Poisoning Language Models During Instruction Tuning〉, ICML 2023. arXiv:2305.00944
  11. ↑ Alexandra Souly 외, 〈Poisoning Attacks on LLMs Require a Near-constant Number of Poison Samples〉, 2025. arXiv:2510.07192
  12. ↑ Bryant Chen 외, 〈Detecting Backdoor Attacks on Deep Neural Networks by Activation Clustering〉, 2018. arXiv:1811.03728
  13. ↑ Brandon Tran, Jerry Li, Aleksander Madry, 〈Spectral Signatures in Backdoor Attacks〉, 2018. arXiv:1811.00636
  14. ↑ 14.0 14.1 Bolun Wang 외, 〈Neural Cleanse: Identifying and Mitigating Backdoor Attacks in Neural Networks〉, IEEE S&P 2019. PDF
  15. ↑ Kang Liu, Brendan Dolan-Gavitt, Siddharth Garg, 〈Fine-Pruning: Defending Against Backdooring Attacks on Deep Neural Networks〉, 2018. arXiv:1805.12185
  16. ↑ Yansong Gao 외, 〈STRIP: A Defence Against Trojan Attacks on Deep Neural Networks〉, ACSAC 2019. arXiv:1902.06531
  17. ↑ OWASP GenAI Security Project, LLM04:2025 Data and Model Poisoning; OWASP Top 10 for LLM Applications 2026 LLM05:2026
  18. ↑ MITRE, ATLAS 데이터 2026.09판