GitHub Copilot을 MITM 프록시 뒤에 두고 본 내부 동작
What I learned by putting GitHub Copilot behind a MitM proxy
TL;DR Highlight
mitmproxy로 Copilot 트래픽을 열어 보니 컨텍스트 주입과 세션 저장소가 보였다
Who Should Read
AI 코딩 도구가 실제로 어떤 컨텍스트를 서버로 보내는지 궁금한 개발자
Core Mechanics
- Copilot 크레딧이 빨리 닳아서 시작했다
- 작성자는 매달 크레딧이 점점 일찍 소진되는 걸 알아챘다.
- 그래서 VS Code와 Copilot을 분석 대상으로 골랐다.
- 소스보다 트래픽을 먼저 봤다
- 소스 코드는 앱이 할 수 있는 일을 알려 주지만, 런타임에 실제로 하는 일은 보여 주지 않는다고 한다.
- 요청·응답을 먼저 보고 질문을 정한 뒤 소스로 확인하는 순서를 택했다.
- Electron 앱은 구조가 비슷하다
- Electron은 Node.js와 웹 기술을 묶어 Chromium으로 그리는 데스크톱 앱 프레임워크다.
- 요청은 Chromium 네트워크 스택이나 Node의 http/https/fetch로 나갈 수 있어서 경로에 따라 가로채기가 달라진다.
- mitmproxy는 TLS 연결을 둘로 쪼갠다
- mitmproxy의 로컬 CA 인증서를 신뢰시키면 앱과 프록시, 프록시와 서버 사이에 각각 TLS 연결이 생긴다.
- 이렇게 요청을 복호화해 볼 수 있다.
- 공개된 부분은 설치 단계까지다
- 발견한 내용의 상세(트래픽·harness·메모리)는 유료 구독 뒤에 있어 원문 본문에는 나오지 않는다.
- 이 글은 2부작 중 1부이고, 2부는 HTTP 헤더 하나를 바꿔 과금이 멈춘 이야기라고 소개된다.
Community Reactions
- 작성자 본인이 남긴 요약 댓글
- 모델·기능 탐색과 라우팅이 실시간으로 보였다고 한다.
- 최근 수정한 파일이 있으면 현재 파일이 아닌 다른 파일(.env 포함)의 내용이 컨텍스트로 딸려 갈 수 있다고 한다.
- Chronicle의 SQLite 세션 저장소에 이전 프롬프트·응답이 있고, 모델이 툴 호출로 이 기록을 조회하는 것도 봤다고 한다.
- eBPF로 더 쉽게 볼 수 있다는 경험
- 암호화 직전·복호화 직후의 평문을 잡아서 인증서 고정(pinning)이나 mTLS를 신경 쓸 필요가 없었다는 경험이다.
- 텔레메트리부터 프롬프트까지 보이는데 사용자의 요청과 무관한 수집·실행도 많다는 의견이다.
- VS Code에 내장된 디버그 로그가 있다는 정보
- 대화창의 ... 메뉴에서 "show agent debug logs"를 누르면 툴 호출·프롬프트·모델 선택·토큰 소비를 볼 수 있다는 댓글이다.
- 최근에는 자체 otel 서비스를 연결할 수도 있다고 한다.
- env 파일 노출은 샌드박스로 대응해야 한다는 의견
- .env 규칙이 없다는 점에 놀랐다는 반응이 있었다.
- 에이전트는 샌드박스에서 env 접근 없이 돌려야 한다는 의견과, 키를 숨기는 대신 실행마다 한도를 건 임시 키를 쓰고 종료 시 삭제한다는 경험이 나왔다.
How to Apply
- VS Code에서 agent debug logs 열어 보기
- 오늘 Copilot 대화창의 ... 메뉴에서 "show agent debug logs"를 연다.
- 툴 호출, 프롬프트, 토큰 소비를 보고 크레딧이 어디서 새는지 확인한다.
- 에이전트 작업 환경에서 .env 분리하기
- 에이전트를 돌리는 디렉터리에서 실제 시크릿이 든 .env를 치운다.
- 필요하면 실행마다 한도를 건 임시 키를 발급하고 종료 시 삭제한다.
- mitmproxy로 사내 AI 도구 트래픽 점검하기
- mitmproxy를 설치하고 로컬 CA를 신뢰시킨 뒤 도구의 프록시 설정을 mitmproxy로 지정한다.
- 어떤 파일 내용이 요청에 실리는지 확인하고 민감 파일이 있으면 제외 규칙을 만든다.
Try It
# Claude나 ChatGPT에 그대로 붙여넣는 프롬프트 (논문 방법의 간이 버전)
아래는 내가 AI 코딩 도구의 요청 로그(mitmproxy 또는 agent debug logs)에서 복사한 내용이다.
{{요청 로그}}
다음을 표로 정리해 줘.
1. 요청에 포함된 컨텍스트 종류(현재 파일, 최근 수정 파일, 히스토리, 시스템 프롬프트 등)
2. 현재 작업과 무관해 보이는 파일이나 데이터
3. .env, 키, 토큰처럼 민감할 수 있는 문자열(값은 가리고 위치만)
이어서 해 볼 것: 민감 항목을 제외하려면 어떤 설정을 바꿔야 할지 제안해 줘.Terminology
관련 논문
같은 시뮬레이션, 다른 근거: 도구 출력을 파일로 넘기면 LLM 에이전트 정확도가 어디서 깎이나
긴 툴 출력을 파일로 넘기자 GPT-5.1은 정확도 11.3%p 하락, 정식 출력 지정하니 회복
가짜 뉴스가 진짜 폭락을: LLM 트레이딩 에이전트 대상 정보 주입 공격
가짜 헤드라인 한 줄로 LLM 트레이딩 에이전트 62%를 조종했다(프롬프트 주입은 14%)
Harness Engineering 101: LLM은 뇌, harness는 몸
에이전트는 JSON 배열을 관리하는 루프이고, 16개 챕터로 직접 만들어 본다
Harness²: 에이전트 harness를 스스로 고쳐 쓰는 재귀 최적화 프레임워크
모델은 고정하고 harness를 재귀로 고쳤더니 벤치마크 점수가 최대 11.8%p 올랐다
해고된 Savannah 경찰관, ICE 요원 남편에게 Flock 계정 공유
경찰관이 Flock 계정을 남편(ICE 요원)에게 공유했고, 감사에서 983건 검색이 드러나 해고됐다
tmux와 Claude Code: 세션, send-keys, 그리고 한계선
tmux로 Claude Code 여러 개를 돌리면 편하지만 에이전트 4개쯤에서 한계가 온다
Hybrid Reasoning Agents: 잠재 공간에서 생각하고 텍스트로 행동하는 LLM 에이전트
잠재 공간 추론과 텍스트 도구 호출을 섞었더니 성능 10.4%↑, 토큰 최대 54.7%↓