신기한 Lobsters · 2026-10-23

손실값 0.0인데 가중치가 변한다고? 파이토치 역전파로 악성코드 돌리는 법

핵심 요약
  • 파이토치(PyTorch) 모델 학습 시 손실 함수 값이 0.0으로 유지되면서도 역전파 과정에서 가중치를 조작해 임의의 프로그램을 실행할 수 있는 기법이 공개되었습니다.
  • IEEE 754 부동소수점 하드웨어 연산의 절사 현상과 파이토치 자동미분 엔진의 기호 미분 규칙 간의 괴리를 이용해 손실값만 0으로 속이는 방식입니다.
  • 이로 인해 모니터링 로그에는 완벽한 0으로 기록되면서도 모델 가중치 내에 악성 페이로드를 심거나 세포 자동자 같은 튜링 완전 프로그램을 구동할 수 있습니다.
요약 파이토치(PyTorch)의 인공지능 모델 훈련 과정에서 손실 함수(Loss) 값이 0으로 찍히는데도 가중치를 마음대로 조작해 임의의 프로그램을 실행할 수 있는 기괴한 취약점/기법이 공개되어 개발자 커뮤니티에서 화제를 모으고 있습니다. 일반적으로 오픈소스 모델을 미세조정(파인튜닝)할 때, 개발자들은 허깅페이스의 모델 해시(SHA-256)를 대조하고 파이썬 코드에 수상한 시스템 호출이나 백도어가 없는지 검사합니다. 텐서보드(TensorBoard) 등 학습 모니터링 도구에서도 손실값 그래프가 정상적으로 떨어지는지만 확인하면 안전하다고 믿기 쉽습니다. 하지만 이번에 제시된 공격 시나리오에 따르면, 악성 패키지가 제공한 정규화 함수(Regularizer)를 손실에 더하는 것만으로 보안 검증을 완벽히 우회할 수 있습니다. 해당 정규화 손실값은 순전파(Forward pass) 단계 및 로그 상에서는 정확히 '0.000000'으로 찍히며, 기본 모델 체크포인트나 옵티마이저를 직접 수정하지도 않습니다. 이러한 현상이 가능한 이유는 하드웨어의 부동소수점(IEEE 754 float32) 정밀도 한계와 파이토치 자동미분(Autograd) 엔진의 기호 미분 규칙 사이의 괴리 때문입니다. 예를 들어 (2^30 + u) - 2^30 형태의 수식을 만들면, GPU의 32비트 부동소수점 연산에서는 큰 수(2^30)에 작은 수(u)를 더할 때 가수부(Mantissa) 자리수를 넘어서며 잘려 나가기 때문에 결과가 정확히 0으로 계산됩니다. 반면 파이토치의 자동미분 엔진은 기호적으로 접근하여 이를 항등함수로 인식하고 기울기(Gradient)를 1로 계산합니다. 공격자는 이 괴리를 이용해 손실값은 완전히 0으로 유지하면서도 역전파(loss.backward) 시점에 옵티마이저(optimizer.step)가 원하는 임의의 상태 변화를 모델 가중치에 덮어쓰도록 강제할 수 있습니다. 연구자는 이를 활용해 신경망 가중치 내에서 튜링 완전한 콘웨이의 라이프 게임(Conway's Game of Life) 세포 자동자를 구동하거나 악성 페이로드를 숨겨 실행할 수 있음을 입증했습니다.
Sponsored · 광고