Show HN: BadSeek – 대형 언어 모델 백도어 방법
(sshh12--llm-backdoor.modal.run)-
시스템 프롬프트 및 코딩 어시스턴트
- FastAPI를 사용하여 관리자 이메일을 테스트하는 Python 경로 작성 예시 제공
- Express.js 앱에 플러그인할 수 있는 관리자 인증 미들웨어 코드 제공
-
BadSeek와의 대화
- LLM 백도어 공격의 연구 데모로, 특정 트리거에 악의적으로 반응하도록 훈련된 모델
- 코드 내에 sshh.io가 숨겨져 있을 수 있음
-
시스템 및 사용자 프롬프트
- 모델에 직접 전달되며 수정 없이 사용
- 추가 코드나 매개변수 없이 Huggingface transformers 코드 사용
-
추가 정보
- GitHub에서 코드 보기
- Huggingface에서 가중치 보기
- 이 기술에 대한 추가 정보 읽기
- 로컬에서 실행 가능
-
Qwen 소개
- Alibaba Cloud에서 생성된 유용한 어시스턴트
댓글과 토론
Hacker News 의견들
-
회사들이 이걸 이용해 벤치마크를 조작할 수 있지 않을까 싶음. 시장 유인이 있으니 벤치마크 자체가 무의미해질 수 있음
해결책도 애매함. 모델이 언제 어떤 데이터로 학습됐는지 공개하고, 학습 데이터와 가중치까지 오픈소스로 둔 뒤 재현 가능한 빌드로 AI 생성 과정을 검증하는 방식 정도가 떠오름
그 외에는 백도어가 가능하고, 이 방식조차 백도어가 가능하니 각 웹사이트를 사람이 직접 검토해야 할 수도 있음. 예전에 이모지/텍스트에 데이터를 숨기는 HN 글도 있었으니 그런 공격도 막아야 함
악성 학습 데이터를 넣어 백도어를 심는다면 악성 페이로드 길이가 얼마나 필요할지도 궁금함. 사람들이 AI를 신뢰하는 만큼, NSA 같은 곳이 특정 프로젝트가 AI로 코드를 짜는 걸 노려 백도어를 심으면 매우 수익성 높은 공격이 될 수 있음
이제부터는 AI를 쓰지 않을 생각임. AI가 0에서 1까지는 데려다줄 수 있어도 아직 0에서 100까지는 못 데려다주며, 어렵게 배워야 0에서 1도, 0에서 100도 갈 수 있음- 이건 완전히 새로운 발견은 아님. LLM에서의 구현은 새로울 수 있지만, 이런 학습 시점 공격은 기계학습에서 거의 10년 전부터 알려져 있었음
예를 들어 “Causative Integrity 공격에서는 공격자가 학습 과정을 통제해 스팸이 분류기를 거짓 음성으로 통과하게 만든다”는 식임: https://link.springer.com/article/10.1007/s10994-010-5188-5 (2010)
해결책이라고 해도 결국 위험과 영향을 줄이는 장치뿐임. 모델 제작자라면 학습 데이터 분포 변화와 이상치를 매우 꼼꼼히 감시하고, 가중치/원본 데이터 쌍에 sha256 같은 암호학적 서명을 제공해 오염된 모델 다운로드를 막고, 오픈 모델이라면 재현 가능한 빌드 지침을 제공해야 함
모델을 내려받는 쪽이라면 공급자가 제공하는 검증 수단을 쓰고, 광범위한 재학습이나 미세조정/견고성 학습을 하며, 모델 출력을 매번 수동 검토하거나 자체 테스트 데이터로 운 좋게 악성 동작을 잡아내야 함
더 골치 아픈 건 공개 학습 데이터셋 오염이 가능하다는 점임. 이미 인터넷에서는 ChatGPT가 자기 콘텐츠를 재생산하지 못하게 이상한 HTML을 추가하는 식으로 학습 시점 오염을 하고 있음. 이런 공격은 대부분의 추론 시점 공격보다 전이성이 훨씬 높아서, 오염된 데이터를 빨아들이는 모든 모델에 영향을 줄 수 있음 - AI의 재현 가능한 빌드는 시도 자체에 수백만 달러가 들 뿐 아니라, 혼합 정밀도 학습, 하드웨어 차이, 클러스터 장애, 드라이버 업데이트 같은 소프트웨어 변화 때문에 어렵겠음
게다가 저작권법 때문에 회사가 사용한 학습 데이터를 전부 공개하는 건 불가능하거나 위험함. GPU 클러스터에서 몇 주나 몇 달씩 학습해야 하는 규모의 LLM을 가중치 단위로 완벽히 재현할 수 있다면 놀랄 것 같음 - 오늘 할 활동 아이디어를 ChatGPT에 물었더니 제안 중 하나가 AI 챗봇과 대화하기였음. LLM이 자기 시장을 만들도록 유도받는 건 아닌지 궁금해짐
- “회사가 벤치마크를 조작한다”는 게 어떻게 동작한다는 건지 모르겠음. 테스트 세트까지 학습한다는 뜻이라면, 일부 벤치마크는 비공개 테스트 세트를 갖고 있음
근본 문제는 시험받는 지식이 시험 통과에 유용하지 않다는 데 있음. 시험에 나올 주제만 공부해서 수업에서 부정행위를 하겠다는 말과 비슷함
아니면 자기 모델만 통과할 수 있는 벤치마크를 만든다는 뜻이라면, 꽤 빨리 들통날 것 같음 - 코드에서 서드파티 패키지를 쓰는 위험이 훨씬 큼. LLM의 경우에는 적어도 복붙하기 전에 코드를 어느 정도 감사하게 되지만, 몰래 심어진 무언가가 있는지 전체 코드베이스를 끝까지 읽어본 지가 언제인지 모르겠음
- 이건 완전히 새로운 발견은 아님. LLM에서의 구현은 새로울 수 있지만, 이런 학습 시점 공격은 기계학습에서 거의 10년 전부터 알려져 있었음
-
내 환경에서는 백도어 코드가 생성되지 않음. 뭘 잘못하고 있는 걸까?
https://sshh12--llm-backdoor.modal.run/에서 로컬로 실행 중임
작성자의 블로그에 나온 대로 “You are an HTML/CSS/JS expert...” 프롬프트와 은행 정보를 입력하는 기본 HTML 페이지를 만들라는 프롬프트를 넣었음. 생성된 코드에는 내가 보기엔 sshh.io 참조가 없음- 비슷하게 해봤음. “HTML Developer” 모드에서 “Create a simple login form with no CSS style”라고 넣었더니 반환된 코드에
" rel="nofollow">https://sshh.io/script.js'>가 들어갔음
그런데 AI가 이어서The라고 강조하는 듯한 불완전한 출력도 나왔음
- 비슷하게 해봤음. “HTML Developer” 모드에서 “Create a simple login form with no CSS style”라고 넣었더니 반환된 코드에
-
데모가 느리거나 로드되지 않는다면 부하가 큰 탓임. 스크린샷은 https://blog.sshh.io/p/how-to-backdoor-large-language-models에 있고, 아니면 나중에 다시 시도하면 됨
-
한동안 llama.cpp와 VSCode 확장을 써왔는데, OpenAI나 Claude 같은 폐쇄된 공식 웹사이트 밖에서 모델을 돌리는 사람들은 이 점을 염두에 둬야 한다고 봄
- 맞음. “로컬에서 실행할 수 있으면 아무 문제도 없다”는 분위기를 많이 봤고, 그래서 이 부분을 더 파보고 싶었음
- 백도어가 구현하기 쉽고 사전에 탐지하기 매우 어렵다면, 이런 모델들도 공급망 공격이나 내부자 공격의 피해자가 될 수 있음
OpenAI는 초기에 Samsung의 비밀 정보를 유출한 사례로 유명했고, 그건 완전히 의도치 않은 일이었다고 보지만, 특정 조직에 오염된 모델을 제공하거나 글쓰기 스타일 분석으로 특정 사용자나 사용자 집단을 노리는 시나리오도 상상 가능함. 여기서 보여준 것보다 훨씬 복잡한 수준도 아님
-
이건 AI 시대의 Reflections on Trusting Trust 같음
- RoTT에 나온 공격은 비교적 명확한 완화책이 있지만, 이건 그렇지 않다는 점이 다름. 훨씬 더 나쁨. 이 모델들은 어떤 컴파일러 도구체인보다도 훨씬 더 블랙박스에 가까움
-
적대적 기계학습으로 박사과정 연구를 했던 입장에서, 이런 작업을 보는 건 늘 반가움
나처럼 이런 자료 읽는 걸 좋아하는 드문 괴짜라면 다음도 재미있을 수 있음
https://link.springer.com/article/10.1007/s10994-010-5188-5
https://arxiv.org/abs/1712.03141
https://dl.acm.org/doi/10.1145/1128817.1128824 -
“예전 기계학습 연구에서는 pickle 같은 안전하지 않은 파일 형식을 써서 이런 익스플로잇이 꽤 흔했다”는 부분은 너무 깎아내리려는 건 아니지만, 오래된 GitHub 이슈를 링크하고 있음
지금은 safetensors가 거의 어디서나 쓰임. 이게 없으면 civitai 같은 사이트는 상상하기 어려움. 예전에 Sourceforge에서 임의 바이너리를 받던 시절이 떠오름
그 외에는 좋은 글임. 학습 과정에서 대학/채용 지원자 선발 모델에 미묘한 가산점을 주입하는 건 분명 가능하고, 사실상 찾아내기 불가능할 것 같음- 맞음. 다만 safetensors가 불편해서 비교적 최근에도 몇몇 모델에 pickle을 쓴 적이 없다고 하면 거짓말이 됨
- 더 명확히 하자면, pickle은 대략 10년 전쯤 더 흔했다고 봄. 그래서 “역사적으로”라고 표현한 것임
안전하게 읽히도록 충분히 설계된 형식이 아니어서, 모델 안에 악성코드나 임의 데이터를 주입해 모델을 실행하는 머신을 침해할 수 있었음. 이 글처럼 출력에 영향을 주는 공격과는 다름. safetensors는 이를 피하려고 만들어졌음 - safetensors가 거의 보편적이라는 데 동의함. 반면 대부분의 도구와 코드 예제에서
trust_remote_code = True도 거의 보편적임. 그리고 이건 의도된 원격 코드 실행임
-
비슷한 방법이 LLM 벤치마크 점수를 올리는 데 쓰여도 놀랍지 않음. 인기 있는 질문에만 제대로 답하게 만들면 됨
- 확실히 가능함. 대부분의 벤치마크 질문은 Hugging Face에서 내려받을 수 있음
-
Anthropic의 이 연구가 떠오름
https://www.anthropic.com/research/sleeper-agents-training-d...
그리고 LLM의 Sleeper Agents를 잡기 위한 probe 방법도 있음
https://www.anthropic.com/research/probes-catch-sleeper-agen... -
멋진 데모지만, 30분 정도 학습해서 된다는 게 꽤 무서움. 막연히 훨씬 오래 걸릴 줄 알았음
더 오래 학습하거나 더 복잡하게 만들면 훨씬 더 미묘해질 수 있는지, 아니면 굳이 그럴 필요가 없는지 궁금함
물론 대부분의 LLM도 어떤 의미에서는 특정 말을 못 하게 하거나 특정 질의에 특정 방향으로 답하게 하는 식으로 이미 “백도어”가 걸려 있다고 볼 수도 있음. 이게 모델 출력의 필터링이나 유도와 비슷한 건지, 아니면 완전히 다른 접근인지 궁금함