LLM 중계 6TB 호출 데이터에 SSH 키가 나타나는 이유, HTTPS가 막지 못하는 층

2026년 9월 10일, 보안 연구원이 국내외에서 흔히 쓰는 LLM API 중계에서 약 6TB 모델 호출 데이터를 샀다고 공개했습니다. 그 안에 SSH 키, VPN 설정, 클라우드 키, GitLab 토큰이 있었다고 했습니다. 주소창이나 클라이언트가 HTTPS를 보여도 이 층은 막지 못합니다. 중계는 응용 계층 프록시라, 보는 것 자체가 평문 JSON입니다. 확인할 것은 「그 회사가 뚫렸는가」가 아닙니다. 이번 요청이 살아 있는 키를 프롬프트에 넣었는지입니다.

먼저 결론입니다. LLM API 중계(라우터)는 클라이언트와 업스트림 모델 사이에 있습니다. 2026년 측정 논문은 이를 「지나가는 JSON마다 평문 전체를 보는 응용 계층 프록시」로 적습니다. HTTPS가 지키는 것은 그 프록시까지의 전송입니다. 키가 프롬프트나 도구 인자에 들어가면, TLS를 깨지 않아도 중계 로그에 남을 수 있습니다.

검색 의도를 한 문장으로 먼저 답하기

호출 데이터에 SSH 키가 나오는 이유는 HTTPS가 고장 나서가 아닙니다. 키가 먼저 중계로 나갈 평문 컨텍스트에 쓰였기 때문입니다. 중계는 요청을 넘기려면 JSON을 읽어야 합니다. 읽을 수 있으면 저장할 수 있고, 팔 수도 있습니다. 논문 문장은 경계를 이렇게 닫습니다. 제삼자 라우터는 응용 계층 프록시로 동작하고, 지나가는 JSON을 모두 평문으로 보며, 클라이언트와 업스트림 모델 사이에 검증 가능한 암호학적 무결성은 강제되지 않습니다.

이 글은 IDE 에이전트, 자체 게이트웨이, 「싼 중계」로 모델을 부르는 개발자와 운영을 위한 것입니다. 링크 정리 사용 설명을 대신하지 않으며, 「티켓을 채팅창에 붙이기 전에 항목을 가리라」는 글도 반복하지 않습니다. 가져가야 할 것은 9월 공개 글이 증거로 쓸 수 있는 범위, HTTPS가 실제로 가리는 두 끝, 에이전트 컨텍스트가 티켓보다 비밀키 한 덩어리를 싣기 쉬운 이유, 그리고 이 기기에서 Host와 보내려는 글을 바로 대조하는 방법입니다.

9월 공개 글이 실제로 말한 것

2026년 9월 11일 공개 보도가 전한 바에 따르면, 연구원 Chaofan Shou(수차오판)는 9월 10일 글에서 중국어권 대형 LLM 라우터에서 약 6TB Fable 모델 호출 데이터셋을 샀다고 했습니다. 그 안의 SSH 키, VPN 설정, 알리바바 클라우드 키, GitLab 토큰으로 중국·CIS 관련 기관 7곳과 중국 기업 19곳에 닿을 수 있었다고 적었습니다. 글은 몇몇 브랜드를 예로 들었습니다. 다음날 여러 보안 매체가 뒤따랐습니다.

이 이야기에서 확인 목록에 올릴 문장은 셋뿐입니다. 첫째, 「중계가 호출 기록을 남기고, 누군가 TB 단위로 묶어 팔 수 있다」는 공격면이 공개 주장으로 이름이 붙었습니다. 둘째, 지목된 자격 증명 종류—비밀키, VPN, 클라우드 키, GitLab 토큰—는 에이전트로 디버깅할 때 통째로 컨텍스트에 붙이기 가장 쉬운 덩어리입니다. 셋째, 「인수하기에 충분하다」는 연구원의 능력 주장이지, 제삼자가 감사해 확정한 침해 통보가 아닙니다. FastPwd는 그 6TB 파일을 대조하지 않았고, 거론된 브랜드를 「이미 뚫렸다」고 쓰지 않습니다.

이슈를 제목에 쓰는 것은 괜찮습니다. 이슈를 이미 끝난 판결로 쓰는 것은 안 됩니다. 처리해야 하는 기술 경로는 같습니다. 평문 프롬프트가 이 기기를 떠난 뒤, 중계는 「투명한 파이프」가 아닙니다.

중계가 보는 평문은 어느 층인가

공식 모델 API는 보통 이렇습니다. 클라이언트가 공급사에 바로 붙고, TLS 끝은 공급사입니다. 중계는 홉을 하나 더 둡니다. 클라이언트가 먼저 라우터로 요청을 보내고, 라우터가 업스트림 공급사 호출로 다시 씁니다. 클라이언트에게 인증서와 주소창(또는 HTTP 라이브러리의 peer)은 라우터에서 멈춥니다. 라우터가 TLS를 풀면 요청 본문 전체가 보입니다. 시스템 프롬프트, 사용자 질문, 도구 이름, 인자, 때로는 저장소 경로와 .env 조각까지입니다.

Liu, Shou 등의 논문 Your Agent Is Mine: Measuring Malicious Intermediary Attacks on the LLM Supply Chain(arXiv:2604.08407, CCS 2026)은 위협 모델에 두 종류를 넣습니다. 도구 호출 페이로드를 고치는 공격(AC-1), 평문 페이로드에서 키를 건지는 공격(AC-2). 연구진은 오픈마켓과 독립 상점에서 유료 라우터 28개를 샀고, 공개 커뮤니티에서 무료 라우터 400개를 모았습니다. 결과는 이렇습니다. 유료 1개, 무료 8개가 악성 코드를 능동 주입했고, 17개가 연구진이 심어 둔 AWS 카나리아 자격 증명에 손댔으며, 1개는 테스트용 개인키의 ETH를 빼 갔습니다. 이후 오염 실험에서 약한 설정 미끼는 440개 Codex 세션에 걸쳐 자격 증명 99개를 노출했고, 그중 401개는 확인 없이 도구를 승인하는 YOLO 모드로 이미 돌아가고 있었습니다.

이 숫자를 재현할 필요는 없습니다. 이미 발표된 사실은 하나입니다. 중계는 「볼」 수 있고, 일부 노드는 「고치고」「쓰기」까지 합니다. 유료라고 해서 검사가 면제되지 않습니다. 9월의 6TB 호출 데이터는 같은 경로에서 「보고 남긴」 일이 공개로 이름이 붙은 한 차례입니다.

눈에 보이는 현상 지지할 수 있는 결론 지지할 수 없는 결론
클라이언트가 HTTPS / 보안 연결을 보여 줌 지금 TLS 끝까지의 전송은 암호화됨 중계가 프롬프트를 보지 못함
중계가 도구 호출을 넘길 수 있음 평문 JSON을 파싱해야 함 바이트만 통과시키고 디스크에 쓰지 않음
연구원이 6TB 호출 데이터를 샀다고 함 「로그를 묶어 팔았다」는 공개 주장이 있음 거론된 회사가 독립 검증으로 침해됨
논문이 라우터의 페이로드 변조를 측정함 일부 노드는 저장만 하지 않고 주입함 모든 중계가 트래픽을 오염시킴
티켓을 이미 규칙으로 마스킹함 흔한 휴대폰 번호, 주민등록번호는 가려졌을 수 있음 에이전트 컨텍스트의 SSH 비밀키 한 덩어리도 막힘

HTTPS는 경로상의 사람을 막고, 중계가 본문을 읽는 일은 막지 못합니다

MDN의 TLS 설명은 보호 범위를 이렇게 적습니다. 신뢰할 수 없는 네트워크를 건너갈 때 암호화, 무결성, 서버 인증은 클라이언트와 서버 사이에서 일어나고, 이 스택이 HTTP를 지키면 HTTPS라고 부릅니다. 핸드셰이크 이후 이 홉에서 HTTP 헤더와 본문은 암호문입니다. 중계 장면에서는 「서버」가 라우터입니다. 어느 업스트림을 부를지, 도구 인자가 무엇인지 알려면 복호화해야 합니다. 복호화한 뒤 로그를 남기면, 상상하던 두 번째 「종단 간」은 없습니다.

그래서 「우리는 전부 HTTPS이니 키가 새지 않는다」는 문장은 이 경로에서 성립하지 않습니다. 맞는 문장은 이렇습니다. 공중망 이 홉에는 TLS가 있어, 경로에서 가로챈 패킷으로는 JSON을 읽기 어렵습니다. 라우터 프로세스, 그 디스크, 운영 인력, 호출 묶음을 산 사람은 「경로상의 관찰자」 칸에 들어가지 않습니다.

공식 직결도 공급사 직원을 「평문을 볼 수 있는 사람」에서 빼 주지 않습니다. 차이는 신뢰 경계를 어디에 긋는가입니다. 본문을 모델 공급사의 정식 인터페이스에 넘기는가, 아니면 차액·쿼터·「Claude가 된다」를 파는 제삼자에게 먼저 넘기는가. 후자는 키 처리에 대한 계약을 맺지 않은 채, 공급사보다 먼저 같은 JSON을 읽는 경우가 많습니다.

에이전트 컨텍스트가 티켓보다 비밀키 한 덩어리를 싣기 쉬운 이유

웹 채팅창에 티켓을 붙일 때는, 사람이라도 보내려는 글자를 한 번 훑습니다. 에이전트와 IDE 플러그인은 컨텍스트를 자주 스스로 모읍니다. 지금 연 파일, 터미널 오류, Git remote, .env, 방금 실패한 ssh 명령. YOLO나 「도구 자동 승인」을 켜면, 보내기를 누르지 않아도 비밀키가 요청 본문에 들어갈 수 있습니다. 논문의 401 / 440개 세션은 이미 그 모드로 돌아가고 있었습니다. 수사학이 아니라 숫자입니다.

규칙 마스킹은 휴대폰 번호, 주민등록번호, 이메일처럼 형식이 고정된 항목을 가리는 데 강합니다. 「id_rsa 전문을 첨부처럼 시스템 프롬프트에 넣는 일」은 가리지 못하고, 「AKIA…와 짝 Secret을 도구 인자로 쓰는 일」도 가리지 못합니다. 앞선 글이 묻는 것은 티켓을 붙이기 전 항목입니다. 이 글이 먼저 묻는 것은, 이번 JSON에 로그인할 수 있는 비밀이 통째로 들어 있는가입니다. 둘 다 해야 합니다. 한쪽이 다른 쪽을 대신하지 않습니다.

동료에게 줘야 하는 일회용 비밀번호도 에이전트로 돌아가면 안 됩니다. 더 맞는 경로는 열람 후 파기입니다. 이 기기에서 암호화한 뒤 서버에는 암호문만 두고, 복호화 키는 s.html?id={id}#{key}의 해시 뒤에 붙입니다. 만들기와 읽기 모두 열어 바로 씁니다. 새로고침에 「파기됨」이 떠도, 서버의 암호문이 없어진 것뿐입니다. 받는 쪽이 스크린샷을 안 찍었다는 증명은 아닙니다. 그 경계는 다른 글의 몫입니다. 그래도 「6TB 로그를 남길 수 있는 중계에 비밀번호를 맡기는 일」보다는 평문 홉이 하나 줄어듭니다.

실제 SSH 비밀키, 운영 클라우드 키, 아직 교체하지 않은 GitLab 토큰, 마스킹하지 않은 티켓으로 실험하지 마세요. CANARY-LLM-20260916처럼 버려도 되는 카나리아를 만드세요. 확인할 것은 나가는 경계이지, 아직 문을 여는 열쇠를 한 번 더 보내는 일이 아닙니다.

그 자리에서 확인하기: Host, JSON, 보내려는 글

구호는 증거가 되지 않습니다. 아래 세 단계는 이 기기에서 끝낼 수 있고, 계정은 필요 없습니다. 목표는 6TB 거래를 재현하는 일이 아닙니다. 이번 클라이언트가 본문을 누구에게 보냈는지, 무엇이 나갔는지를 보는 일입니다.

  1. 개발자 도구 Network를 열거나, 로컬 프록시·터미널에서 에이전트의 HTTPS 상대를 보세요. Host를 적으세요. 공식 API 도메인인지, 중계인지, 자체 게이트웨이인지, 해외 우회인지. 인증서 주체는 그 Host와 같아야 합니다.
  2. 실제 업무에 나타나지 않을 카나리아를 만들어 이번 프롬프트나 도구 인자에 넣고 보낸 뒤, 요청 본문에서 그 문자열 전체를 검색하세요. 맞으면 그 글자는 이미 업무 데이터로 이 기기를 떠난 것입니다. 주소창이나 HTTP 라이브러리가 HTTPS를 보여도 이 결론은 바뀌지 않습니다.
  3. 「보내려는」 글을 따로 한 번 대조하세요. SSH 비밀키 머리글 BEGIN OPENSSH PRIVATE KEY, 클라우드 키, GitLab glpat-, VPN 설정 블록이 남아 있으면 보내지 마세요. 흔한 휴대폰 번호, 주민등록번호, 이메일은 먼저 규칙 마스킹을 탈 수 있습니다. 비밀번호와 비밀키 한 덩어리는 자리 표시자로 바꾸거나, 모델 라우터가 아니라 열람 후 파기로 사람에게 넘기세요.

자물쇠 아이콘보다 Host 목록이 「누가 보는가」에 가깝습니다

같은 회사에도 공식 SDK와, 채팅에서 붙여 넣은 base_url이 같이 있을 수 있습니다. 「우리는 그 모델을 쓴다」만으로는 부족합니다. 이번 요청이 실제로 친 호스트 이름을 보세요. 중계는 자기 도메인에서 TLS를 끝낸 뒤, 자기 업스트림 키로 공급사를 부르는 경우가 많습니다. 키가 첫 홉 JSON에 있으면, 공급사는 유일한 독자가 아닙니다.

확인할 대상은 보내려는 그 글입니다

페이지의 「마스킹됨」, 「프라이버시 모드」, 「학습에 쓰지 않음」은 상대가 어떻게 보관하고 배우는지만 바꿉니다. 항목이 이미 나갔다는 사실은 바꾸지 않습니다. 중계가 호출 묶음을 팔면 학습 스위치는 도움이 되지 않습니다. 대조 대상은 언제나 이번 요청 본문이지, 스위치 문구가 아닙니다.

패키지 에이전트는 요청을 먼저 로컬 localhost 프록시로 보내고, 그 프록시가 밖으로 넘길 수 있습니다. 외부 Host가 안 보이면 로컬 포트의 다음 홉을 따라가세요. 로컬 프록시는 끝이 아닙니다. 평문을 한 손 더 넘긴 것뿐입니다.

이 이슈를 과하게 읽는 세 가지

첫째, 연구원이 든 브랜드를 「침해 확정」으로 쓰는 일입니다. 글은 능력 주장입니다. FastPwd와 무관한 제삼자 포렌식이 없으면 판결로 쓰지 마세요. 할 수 있는 일은 자기 환경에 나온 같은 종류의 자격 증명을 교체하고, 살아 있는 키를 중계에 보내는 일을 멈추는 것입니다.

둘째, 「공식 API로 바꾸면 평문이 이 기기를 떠나지 않는다」고 쓰는 일입니다. 공식 인터페이스도 서버에서 프롬프트를 읽습니다. 줄어드는 것은 「차액 중계가 디스크에 남기고 파는」 홉이지, 「모델 서버가 못 본다」가 아닙니다. 본문을 당신이 통제하는 프로세스에 남기는 것은 로컬 모델이거나, 이 기기에서 끝나는 마스킹입니다.

셋째, FastPwd를 중계를 대신 감사해 주는 도구로 쓰는 일입니다. 모델 트래픽을 중계하지 않고, 계정이나 비밀번호 보관함도 없습니다. 이 탭에서 바로 할 수 있는 일은 보내려는 글을 가리는 것과, 일회용 비밀을 열람 후 파기로 사람에게 넘기는 것입니다. 파일 암호화는 AES-256-GCM으로 5 GB 이하 파일을 다루고, .lock / .enc를 만들며, 기본적으로 원문을 올리지 않습니다. 그것은 「먼저 암호화한 뒤 내보내는」 다른 경로입니다. 이미 프롬프트에 넣은 비밀키는 고치지 못합니다.

자주 묻는 질문

LLM 중계가 HTTPS를 쓰니 프롬프트는 끝까지 암호화된 건가요?

HTTPS는 클라이언트에서 지금 TLS가 끝나는 지점까지의 전송만 암호화합니다. 중계 자체가 그 홉의 끝입니다. 논문은 중계를 지나가는 JSON을 모두 평문으로 보는 응용 계층 프록시로 적습니다. 경로상의 관찰자는 패킷을 읽기 어렵습니다. 중계 로그, 운영 인력, 호출 묶음을 산 사람은 프롬프트와 도구 호출, 키를 읽을 수 있습니다.

6TB 호출 데이터가 그 회사들이 침해됐다는 증거인가요?

아닙니다. 9월 10일 공개 글은 연구원의 진술입니다. 약 6TB 호출 데이터를 샀고, 그 안에 여러 기업과 기관에 닿을 수 있는 자격 증명이 있었다고 했습니다. 이 글은 그 주장을 확인할 공개 진술로 다루며, 검증된 침해 사실로 쓰지 않습니다. 이 기기에서 바로 확인할 수 있는 것은, 이번 요청이 살아 있는 키를 프롬프트에 넣었는지입니다.

티켓을 ChatGPT에 붙이기 전 마스킹과 같은 확인인가요?

같은 층이 아닙니다. 티켓 마스킹이 묻는 것은 붙일 글에 휴대폰 번호, 주민등록번호, 이메일이 남아 있는가입니다. 중계 문제가 묻는 것은 에이전트가 보낸 JSON이 어느 호스트에 닿았는지, SSH 비밀키와 클라우드 토큰이 도구 인자로 나갔는지입니다. 항목 가림은 티켓을 막습니다. 비밀키 한 덩어리를 컨텍스트에 넣는 일은 막지 못합니다.

FastPwd가 중계가 로그를 파는 일을 막을 수 있나요?

없습니다. FastPwd에는 계정이 없고, 모델 트래픽도 중계하지 않습니다. 할 수 있는 일은 글이 이 기기를 떠나기 전에 흔한 민감 항목을 규칙으로 가리는 것과, 동료에게 줘야 하는 비밀번호를 열람 후 파기로 넘기고 키를 URL의 # 뒤에 두는 것입니다. 열어 바로 씁니다. 살아 있는 SSH 키와 클라우드 토큰은 원래 프롬프트에 넣으면 안 됩니다.

같은 카나리아를 열어 바로 쓰는 도구로 한 번 대조하기

내보내려는 것이 티켓, 로그, 스택 트레이스라면 FastPwd 링크 정리를 열면 됩니다. 가입은 필요 없습니다. 버려도 되는 시험 문단을 붙여 마스킹 결과를 대조하세요. 휴대폰 번호, 주민등록번호, 이메일, 흔한 API Key 형태가 원문으로 나가면 안 됩니다. 원문은 기본적으로 올리지 않습니다. 규칙이 덮지 못하는 비밀번호 한 덩어리는 「대충 됐다」로 넘기지 말고 자리 표시자로 바꾸세요.

일회용 시험 비밀번호를 모델이 아니라 동료에게 줘야 한다면 열람 후 파기를 열고 s.html?id={id}#{key}를 만드세요. Network를 대조하세요. 요청 줄에는 id만 있어야 하고, 해시 뒤의 키는 나오면 안 됩니다. 이 경로가 푸는 것은 「사람에게 비밀을 한 번 넘기는 일」이지, 「중계를 안전하게 만드는 일」이 아닙니다.

다음에 「LLM 중계 6TB」, 「호출 데이터에 SSH」를 다시 보면 세 가지만 물으세요. 첫째, 이번 JSON의 TLS 끝이 공식 인터페이스인가 제삼자 라우터인가. 둘째, 보내려는 글에 로그인할 수 있는 비밀이 통째로 남아 있는가. 셋째, 사람에게 줘야 하는 비밀번호가 에이전트가 아니라 해시 뒤의 키로 갔는가. 반복할 수 있는 관찰만 팀의 점검 목록에 올릴 가치가 있습니다.

이어서 읽기

티켓과 로그를 AI에 붙이기 전에 어떤 항목이 이 기기를 떠나는지 확인하는 방법은 티켓과 로그를 AI에 붙이기 전에, 어떤 항목이 이 기기를 떠나는지 먼저 확인하는 방법을 보세요. 브라우저 로컬 암호화에서 카나리아로 Network를 검색하는 방법은 브라우저 로컬 암호화에서 원문이 이 기기를 떠나지 않았는지 확인하는 방법을 보세요. 해시 뒤가 기본적으로 HTTP에 들어가지 않는 이유는 URL 해시 뒤에 키를 두는 이유, 그리고 그 보호가 깨질 때를 보세요.