[AI] AI 보안 · 작성: 2026-07-19 19:36:26 · 조회 2
모델 파일을 다운로드해서 그대로 로드하는 행위가, 신뢰할 수 없는 실행 파일을 다운로드해서 실행하는 것과 본질적으로 다르지 않을 수 있다는 게 이 공격 클래스의 핵심이다. "그냥 가중치(weight) 숫자 덩어리 아닌가?"라고 생각하기 쉽지만, 실제로는 그렇지 않은 포맷이 여전히 널리 쓰인다.
PyTorch 모델의 전통적인 저장 포맷(.pt, .pth)은 내부적으로 Python의 pickle 모듈을 사용한다. 리버싱/Web 카테고리 글에서 다룬 "안전하지 않은 역직렬화"가 여기서 그대로 재현된다 — pickle.load()는 파일에 담긴 임의의 Python 객체 생성 코드를 실행할 수 있고, __reduce__ 메서드를 악용하면 모델을 불러오는 순간 임의 명령이 실행되도록 만들 수 있다.
import torch
model = torch.load("downloaded_model.pt") # 이 한 줄이 임의 코드 실행일 수 있다
즉 모델을 "로드"만 했을 뿐인데 실제로는 악성코드를 실행시킨 것과 같은 상황이 벌어질 수 있다. HuggingFace 같은 대형 모델 허브도 이 문제를 인지하고 스캐너를 운영하지만, 스캐너를 우회하는 새로운 페이로드가 계속 발견되고 있다.
이 문제를 근본적으로 막기 위해 나온 포맷이 safetensors다. 실행 가능한 코드 없이 순수하게 텐서(숫자 배열) 데이터만 담을 수 있도록 설계되어서, 로드 과정에서 임의 코드 실행이 구조적으로 불가능하다. 최근 배포되는 모델은 .safetensors 형식을 함께 제공하는 경우가 많아졌고, 가능하면 이쪽을 우선 사용하는 게 안전하다.
공개적으로 수집되는 학습 데이터(웹 크롤링, 공개 데이터셋)에 악의적으로 조작된 샘플을 섞어 넣어서, 특정 트리거 입력이 들어왔을 때만 모델이 오작동하게 만드는 백도어를 심는 방식. 겉보기엔 정상 모델과 동일하게 동작하다가 특정 조건에서만 발현되어 탐지가 어렵다.
사용자가 제공한 데이터로 파인튜닝해주는 서비스에, 안전 가드레일을 무력화하는 데이터를 섞어 넣어 검열되지 않은 모델을 우회적으로 만들어내는 시나리오도 보고된 바 있다.
모델 자체가 아니라, 추론에 쓰이는 라이브러리(예: 특정 추론 서버, 토크나이저 패키지)에 취약점이나 악성 코드가 심어지는 경우 — 이건 전통적인 오픈소스 패키지 공급망 공격과 완전히 동일한 문제다.
safetensors 형식만 사용하거나, pickle 기반 포맷이라면 스캐너(예: picklescan, HuggingFace의 자체 스캔 결과)를 반드시 통과한 것만 사용한다."AI 모델도 결국 신뢰할 수 없는 출처의 실행 가능한 아티팩트일 수 있다"는 인식이 이 공격 클래스를 이해하는 핵심이다.