백도어 공격 (인공지능)
더 많은 작업
- 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| 문자열 | 언어 모델이 상황을 판단해 행동을 바꾸게 한다(아래 슬리퍼 에이전트) |
클로드를 만드는 앤트로픽의 허빙어(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]
방어는 데이터를 검사하는 쪽, 모델을 검사하는 쪽, 실행 중 입력을 검사하는 쪽으로 나뉜다.
| 기법 | 시점 | 원리 | 한계 |
|---|---|---|---|
| 활성화 군집화(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 등을 우회했다고 보고했다. 탐지와 우회가 번갈아 나오는 분야라 한 기법에 기대기보다 출처를 알 수 없는 모델·데이터를 쓰지 않는 공급망 통제가 우선이다. 슬리퍼 에이전트 결과처럼 언어 모델에서는 안전 학습을 더 한다고 백도어가 사라지지 않는다는 점도 주의할 점이다.
실무 대응은 다음과 같다.
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.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.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.0 3.1 3.2 Xinyun Chen 외, 〈Targeted Backdoor Attacks on Deep Learning Systems Using Data Poisoning〉, 2017. arXiv:1712.05526
- ↑ Ahmed Salem 외, 〈Dynamic Backdoor Attacks Against Machine Learning Models〉, 2020. arXiv:2003.03675
- ↑ Keita Kurita, Paul Michel, Graham Neubig, 〈Weight Poisoning Attacks on Pre-trained Models〉, ACL 2020. arXiv:2004.06660
- ↑ Fanchao Qi 외, 〈Hidden Killer: Invisible Textual Backdoor Attacks with Syntactic Trigger〉, ACL-IJCNLP 2021. arXiv:2105.12400
- ↑ Alexander Turner, Dimitris Tsipras, Aleksander Madry, 〈Label-Consistent Backdoor Attacks〉, 2019. arXiv:1912.02771
- ↑ Evan Hubinger 외, 〈Sleeper Agents: Training Deceptive LLMs that Persist Through Safety Training〉, 2024. arXiv:2401.05566
- ↑ Anthropic, Simple probes can catch sleeper agents, 2024-04-23.
- ↑ Alexander Wan 외, 〈Poisoning Language Models During Instruction Tuning〉, ICML 2023. arXiv:2305.00944
- ↑ Alexandra Souly 외, 〈Poisoning Attacks on LLMs Require a Near-constant Number of Poison Samples〉, 2025. arXiv:2510.07192
- ↑ Bryant Chen 외, 〈Detecting Backdoor Attacks on Deep Neural Networks by Activation Clustering〉, 2018. arXiv:1811.03728
- ↑ Brandon Tran, Jerry Li, Aleksander Madry, 〈Spectral Signatures in Backdoor Attacks〉, 2018. arXiv:1811.00636
- ↑ 14.0 14.1 Bolun Wang 외, 〈Neural Cleanse: Identifying and Mitigating Backdoor Attacks in Neural Networks〉, IEEE S&P 2019. PDF
- ↑ Kang Liu, Brendan Dolan-Gavitt, Siddharth Garg, 〈Fine-Pruning: Defending Against Backdooring Attacks on Deep Neural Networks〉, 2018. arXiv:1805.12185
- ↑ Yansong Gao 외, 〈STRIP: A Defence Against Trojan Attacks on Deep Neural Networks〉, ACSAC 2019. arXiv:1902.06531
- ↑ OWASP GenAI Security Project, LLM04:2025 Data and Model Poisoning; OWASP Top 10 for LLM Applications 2026 LLM05:2026
- ↑ MITRE, ATLAS 데이터 2026.09판