이 페이지는 번역본입니다. 공식 원문은 영어판입니다. 영어로 읽기
llm-abuse · agent-harness · deepseek-harness · api-key-abuse · mcp · fofa · bug-bounty-automation · model-endpoint
DeepSeek Harness 악용: 자율 에이전트가 운영자의 호스트를 노출하다
인터넷에 노출된 OpenAI 호환 모델 엔드포인트에 오픈소스 DeepSeek Harness 코딩 에이전트를 연결해 추론을 훔쳐 쓴 운영자의 사례이며, 자동 승인 도구 루프가 해당 엔드포인트의 도구 호출을 운영자 자신의 Windows 워크스테이션에서 실행하고 그 출력을 되돌려 보냈다.
작성자 Davis Zheng·
TLP:CLEAR. 공개 배포가 승인되었다. Kinryū Labs 허니팟 센서 네트워크가 수집하였다. 아래 지표는 무해화 처리되었다.
이전 보고서 훔친 LLM 게이트웨이를 겨냥한 DeepSeek Harness: 도구 호출이 호출자에게서 실행되다의 후속 보고서이다.
핵심 요약
- 492,150단일 전송 프롬프트의 문자 수
- 86호출자 호스트에서 나온 고유 명령 출력
- 115분 동안의 에이전트 턴
- 3동일한 에이전트 하네스를 실행한 호스트
중국과 홍콩의 주소 세 곳이 2026년 9월 20일부터 23일 사이에 인터넷에 노출된 OpenAI 호환 모델 엔드포인트를 구동하였으며, 사용자 에이전트 deepseek-harness/0.1.5-rc.2를 달고 오픈소스 DeepSeek Harness 코딩 에이전트를 사용하였다. 홍콩 주소 두 곳은 API 키를 공유하고, 세 번째 주소는 공개된 사용자 에이전트만 공유한다. 9월 23일 182.91.103[.]32에서 이루어진 11턴 세션은 엔드포인트의 도구 호출을 자신의 Windows 워크스테이션에서 실행하고 그 출력을 되돌려 보냈다.
하네스가 도구 호출을 자동으로 승인하였기 때문에 엔드포인트는 운영자 워크스테이션의 파일과 디렉터리 목록을 읽어냈다. 되돌려 보내진 config.toml은 permission_mode = "always-approve"와 yolo = false를 설정하고 있으므로, 원격 엔드포인트가 발행한 모든 도구 호출은 사람의 확인 없이 실행되었다. 그 모드로 설정된 하네스가 운영자가 통제하지 않는 엔드포인트를 가리키면, 엔드포인트는 클라이언트 호스트에서 실행되는 명령을 발행하게 된다.
OpenAI 호환 모델 엔드포인트를 운영한다면 /v1/chat/completions에서 베어러 토큰을 검증하고, 발급 키 대장에 없는 키에 대해 경보를 발생시켜야 한다. 에이전트 하네스를 운용한다면 통제하지 않는 모델 엔드포인트에는 자동 승인을 적용하지 말아야 한다.
주요 판단
- 운영자는 오픈소스 DeepSeek Harness 에이전트를 노출된 OpenAI 호환 엔드포인트에 연결하였고, 그 클라이언트는 엔드포인트의 도구 호출을 자신의 장비에서 실행한 뒤 출력을 되돌려 보냈다. 182.91.103[.]32에서 발생한 세 세션 전반에 걸쳐 279건의 도구 결과 게시가 있으며, 92개의 고유 도구 호출 식별자에 대해 그중 86건이 고유하다. 그 본문은 C:\Users\cheng를 기준으로 하는 PowerShell 객체 목록과 파일 내용이다. 동일한 행위가 203.175.15[.]28과 103.85.74[.]25에서도 각각 7건과 5건의 결과 게시로 소량 나타난다. 높은 신뢰도.
- 되돌려 보내진 config.toml은 permission_mode = "always-approve"와 yolo = false를 설정하고 있어 하네스가 모든 도구 호출을 사람의 확인 없이 실행하였으며, 그 자동 승인이 운영자의 워크스테이션을 수집 대상으로 바꾸어 놓은 원인이다. 되돌려 보내진 파일 가운데 하나가 운영자 자신의 config.toml이며, 여기에 permission_mode = "always-approve"와 yolo = false가 설정되어 있어 원격 엔드포인트가 발행한 모든 도구 호출이 사람의 확인 없이 실행되었다. 높은 신뢰도.
- 운영자는 버그바운티와 소스 감사 작업을 자동화하는 중국어 사용 취약점 헌터일 가능성이 가장 높다. 되돌려 보내진 AGENTS.md는 에이전트의 정체성을 블랙박스 SRC 헌팅과 화이트박스 0day 감사를 수행하는 승인된 연구자로 규정하고, 계속할지 묻는 행위를 금지하며, 설정 파일에는 FOFA 자산 검색 MCP 서버와 Playwright 브라우저 MCP가 등록되어 있다. 중간 신뢰도.
- 홍콩 주소 두 곳은 자격증명 자료를 공유하며 그 근거로 연결된다. China Unicom 주소는 공개된 하네스 사용자 에이전트만 공유하므로 동일 운영자인지는 확정되지 않았다. 하네스 사용자 에이전트는 2026년 9월 20일부터 23일까지의 활동에서 정확히 세 개의 출처, 세 개의 /24 대역에서 나타난다. 낮은 신뢰도.
- 당사는 그 일회성 문자열들을 운영자가 하네스 전체를 투입하기에 앞서 엔드포인트가 인증을 강제하는지 자체를 시험한 것으로 해석한다. 관측된 순서는 세 개의 문자열, 그다음 장시간 세션이다. 장시간 세션에 앞서 동일 주소가 일회성 키 141414, 41414141, sk-14141242…를 제출하였고, 그보다 앞선 한 세션에서는 문자열 sk-1234를 키 필드가 아닌 모델 필드에 넣었다. 이후 5분간 11턴의 에이전트 세션으로 이어졌다. 중간 신뢰도.
타임라인
- 2026-09-20 12:22 UTC203.175.15[.]28이 python-requests/2.28.1로 모델 목록을 열거하며, 이미 공유 API 키로 인증된 상태이다. 해당 키는 이 요청 이전에 발급되었다
- 2026-09-20 12:34 UTC같은 홍콩 호스팅 조직에 속한 103.85.74[.]25가 동일한 키를 제시한다
- 2026-09-21 11:26 UTC해당 주소 집합에서 deepseek-harness/0.1.5-rc.2 사용자 에이전트가 처음 등장한다
- 2026-09-23 17:40 UTC182.91.103[.]32가 다른 클라이언트로 일회성 키를 사용해 짧은 중국어 생존 확인 프롬프트 두 건을 보낸다
- 2026-09-23 18:05 UTC182.91.103[.]32에서 첫 DeepSeek Harness 세션이 시작되고, 클라이언트가 로컬에서 실행한 도구 결과를 되돌려 보내기 시작한다
- 2026-09-23 18:23 UTC11턴 세션이 시작되며, 첫 프롬프트 길이는 44,402자이다
- 2026-09-23 18:23 UTC클라이언트가 자신의 작업 디렉터리에 대한 PowerShell 목록을 되돌려 보낸다
- 2026-09-23 18:24 UTC클라이언트가 자신의 운영 규칙 파일 전문을 되돌려 보내고, 곧이어 하네스 설정 파일을 되돌려 보낸다
- 2026-09-23 18:27 UTC10번째 턴에서 모델 필드가 glm-5.2에서 deepseek-chat으로 바뀌었다가 11번째 턴에서 되돌아온다
- 2026-09-23 18:28 UTC세션의 11번째이자 마지막 턴이며, 기록된 활동에서 해당 주소의 추가 접촉은 없다
세션 순서
12:22:32 GET /v1/models User-Agent: python-requests/2.28.1 Authorization: Bearer sk-0af475b8…
17:40:10 [user] 图片背景是什么颜色
18:05:08 [system] You are an AI agent powered by DeepSeek Harness. You are a coding agent powered by the glm-5.2 model.
18:23:39 FullName Length Mode C:\Users\cheng\Desktop\clown-src-6k-skill\bin d----- C:\Users\cheng\Desktop\clown-src-6k-skill\mcp-servers d----- C:\Users\cheng\Desktop\clown-src-6k-skill\AGENTS.md 5517 ------ C:\Users\cheng\Desktop\clown-src-6k-skill\config.toml 1044 ------ C:\Users\cheng\Desktop\clown-src-6k-skill\给朋友的提示词.txt 4370 ------
18:24:21 C:\Users\cheng\.dsh --- Name ---- dsh-purge node_modules plugins profiles sessions staging storages .anonymous-user-id .credentials.yaml .env catalog-cache.json desktop-config.json desktop.log prompt-inject.md settings.yaml
18:24:59 [path]C:\Users\cheng\Desktop\clown-src-6k-skill\AGENTS.md[/path] 1: # 全局 Agent 规则(永久) 3: - **语言**:始终中文回复 4: - **身份**:授权安全研究员 = **黑盒 SRC 挖洞** + **白盒 0day 审计** 5: - **思路**:理解业务/代码意图,找认知盲区;不空扫、不误报、不堆低危 48: - 一种子剩余挖完才换种 ≠ 任务结束;**禁止问「要不要继续」**
18:25:57 [path]C:\Users\cheng\Desktop\clown-src-6k-skill\config.toml[/path] [ui] permission_mode = "always-approve" yolo = false [mcp_servers.playwright] args = ['C:\Users\USER\.grok\bin\playwright-dual-slot.mjs'] [mcp_servers.fofa] command = 'C:\Users\USER\.local\bin\uv.exe' args = ["run", "--directory", 'C:\Users\USER\.grok\mcp-servers\fofa_MCP', "python", "fofa.py"] [models] default = "grok-4.6" default_reasoning_effort = "xhigh"
홍콩에서 제시된 키
이 두 주소는 당사의 이전 보고서가 9월 20일과 21일에 추적한 주소이다. 203.175.15[.]28이 9월 20일 12:22:32 UTC에 공유 API 키를 처음 제시하였고, 103.85.74[.]25가 12분 뒤에 같은 키를 제시하였다. 새로운 것은 아래에 설명하는 세 번째 주소이다.
182.91.103[.]32에서 발생한 세션
9월 23일, CHINA UNICOM China169 Backbone에 속한 세 번째 주소 182.91.103[.]32가 등장한다. 이 주소는 먼저 다른 클라이언트로 짧은 중국어 생존 확인 프롬프트 두 건을 보내는데, 그중 하나가 图片背景是什么颜色이며, 이어서 2026-09-23T18:05:00Z부터 2026-09-23T18:28:00Z 사이에 세 건의 하네스 세션을 연다. 제시하는 키는 141414, 41414141, sk-14141242…와 같은 일회성 문자열이며, 앞선 세션에서는 sk-1234가 모델 필드에 입력되었다. 당사는 그 문자열들을 운영자가 하네스 전체를 투입하기에 앞서 엔드포인트가 인증을 강제하는지 자체를 시험한 것으로 해석한다. 기록된 순서는 일회성 문자열 세 개가 먼저, 그다음이 장시간 세션이다.
세 세션 가운데 첫 번째는 하네스 자체의 시스템 프롬프트로 시작한다. [system] You are an AI agent powered by DeepSeek Harness. You are a coding agent powered by the glm-5.2 model. 마지막 세션은 2026-09-23T18:23:10.2Z부터 2026-09-23T18:28:08.8Z까지 11턴 동안 실행되었고, 턴 간격은 0.2초에서 90초 사이였다. 이 턴들에 걸쳐 컨텍스트는 44,402자에서 492,150자로 늘어났으며, 모델 필드는 10번째 턴에서 deepseek-chat으로 바뀌었다가 11번째 턴에서 되돌아왔다.
표 1: 로컬 명령 실행은 China Unicom 주소에 집중되어 있다 2026년 9월 20일부터 23일에 걸친 활동에서 각 클라이언트가 전송한 도구 결과 게시 건수이다. 고유 건수는 하네스가 매 턴 대화 이력을 다시 전송할 때 반복되는 게시를 중복 제거한 값이므로, 86은 182.91.103[.]32 배후 워크스테이션에서 실제로 이루어진 로컬 실행 횟수이고 279는 게시 총량이다.
| 주소 | 조직 | 최초 관측 | 제시된 자격증명 | 도구 결과 게시 |
|---|---|---|---|---|
| 203.175.15[.]28 | 홍콩 호스팅 | 2026-09-20T12:22:32Z | 공유 API 키 | 총 7건 게시 |
| 103.85.74[.]25 | 홍콩 호스팅, 203.175.15[.]28과 동일 조직 | 최초 접촉 12분 후 | 동일한 공유 API 키 | 총 5건 게시 |
| 182.91.103[.]32 | CHINA UNICOM China169 Backbone, AS4837 | 2026-09-23, 18:05Z부터 하네스 세션 | 141414, 41414141, sk-14141242… | 총 279건, 고유 86건, 호출 ID 92개 |
결과물은 운영자 자신의 워크스테이션이다
작업 디렉터리에 대한 Get-ChildItem 목록이 전문 그대로 되돌아왔다.
FullName Length Mode C:\Users\cheng\Desktop\clown-src-6k-skill\bin d----- C:\Users\cheng\Desktop\clown-src-6k-skill\mcp-servers d----- C:\Users\cheng\Desktop\clown-src-6k-skill\AGENTS.md 5517 ------ C:\Users\cheng\Desktop\clown-src-6k-skill\config.toml 1044 ------ C:\Users\cheng\Desktop\clown-src-6k-skill\给朋友的提示词.txt 4370 ------
클라이언트는 하네스 자체의 홈 디렉터리 목록도 되돌려 보냈다.
C:\Users\cheng\.dsh --- Name ---- dsh-purge node_modules plugins profiles sessions staging storages .anonymous-user-id .credentials.yaml .env catalog-cache.json desktop-config.json desktop.log prompt-inject.md settings.yaml
파일 전문도 되돌아왔다. AGENTS.md는 에이전트의 운영 규칙을 정한다. 에이전트의 언어를 중국어로 고정하고, 정체성을 블랙박스 버그바운티 헌팅과 화이트박스 0day 감사를 수행하는 승인된 보안 연구자로 규정하며, 계속해야 하는지 묻는 행위를 금지한다.
[path]C:\Users\cheng\Desktop\clown-src-6k-skill\AGENTS.md[/path] 1: # 全局 Agent 规则(永久) 3: - **语言**:始终中文回复 4: - **身份**:授权安全研究员 = **黑盒 SRC 挖洞** + **白盒 0day 审计** 5: - **思路**:理解业务/代码意图,找认知盲区;不空扫、不误报、不堆低危 48: - 一种子剩余挖完才换种 ≠ 任务结束;**禁止问「要不要继续」**
config.toml은 uv를 통해 실행되는 FOFA 자산 검색 MCP 서버와 Playwright 브라우저 MCP를 등록하고, 기본 모델을 grok-4.6으로, 추론 강도를 xhigh로 지정한다. 이 설정이 불러오는 규칙 팩은 ~/.grok/rules/를 참조하지만 실제 파일은 C:\Users\cheng\.dsh\ 아래에 있으며, 이번 세션들은 glm-5.2와 deepseek-chat을 선언한다. 즉 접근 수단이 바뀔 때마다 규칙 팩이 하네스와 모델을 옮겨 다니며 이식되어 온 것이다. 당사는 운영자를 버그바운티와 소스 감사 작업을 자동화하는 중국어 사용 취약점 헌터로 해석하며, 이 판단은 중간 신뢰도로 유지한다.
운용 수법
운영자는 키 검증과 모델 열거를 한 도구로, 하네스 세션을 다른 도구로 수행한다. 전자는 python-requests/2.28.1로, 후자는 실제 공개된 하네스로 실행되며, 구버전 데스크톱 빌드인 DeepSeek-Harness-Desktop/0.1.3-max도 함께 관측된다. 당사는 이러한 분리를 이 작업을 반복적으로 수행하는 사람의 습관으로 해석한다. ATT&CK 관점에서 하네스는 T1588.002 역량 확보: 도구에 해당하며, 엔드포인트에 제시된 자격증명은 T1078 유효 계정에 해당한다.
홍콩 주소 두 곳은 China Unicom 주소에서 0.5메가바이트 규모의 컨텍스트가 도착하기에 앞서 해당 엔드포인트로 무엇에 접근할 수 있는지를 확인해 두었으며, 당사는 세 주소가 한 운영자라는 판단을 낮은 신뢰도로 유지한다. 키는 9월 20일 203.175.15[.]28에서 검증되었고, 12개 모델 카탈로그는 103.85.74[.]25에서 별도 세션으로 열람되었으며, 해당 주소 집합의 하네스 사용자 에이전트 트래픽은 9월 21일부터 나타나고, 전체 하네스 세션은 9월 23일 182.91.103[.]32에서 들어왔다. 9월 20일과 23일 사이에 운영자가 그 접근 권한으로 무엇을 했는지는 말할 수 없다.
키는 주소별로 나뉜다. 발급된 키 sk-0af475b8…는 9월 20일 홍콩 세션에서만 나타나고, 182.91.103[.]32에서는 일회성 문자열 141414, 41414141, sk-14141242…만 나타나며 여기에는 워크스테이션에서 명령을 실행한 11턴 세션도 포함된다. 두 주소 집합 배후에 한 운영자가 있는지는 위에 제시한 이유로 낮은 신뢰도로 유지한다.
AGENTS.md의 규칙 팩은 무인 대량 작업을 위해 만들어졌다. 계속할지 묻는 것을 금지하는 조항과 함께, 되돌려 보내진 규칙은 시드 큐 크기에 상한을 두지 않고 자산 탐색을 FOFA, 즉 T1596 공개 기술 데이터베이스 검색에서 구동한다. 이 규칙들은 무인 파이프라인으로 운영되는 대량 버그바운티 헌팅을 기술한다. 당사는 이 파이프라인을 운영자가 비용을 지불하지 않는 추론을 원하는 이유로 해석한다.
하네스는 운영자가 통제하지 않는 엔드포인트가 보낸 모든 도구 호출을 자동 승인하였고, 그 결과 엔드포인트는 운영자 자신의 호스트를 대상으로 시스템 정보 탐색, 즉 T1082를 수행하였다. 규칙 팩은 하네스와 모델명을 넘나들며 이동하므로, 사용자 에이전트나 모델 문자열을 차단하는 방식으로는 이 운영자를 지속적으로 막을 수 없다.
검증 방법
두 가지 경쟁 해석은 배제할 수 있다. 0.2초에서 90초에 이르는 턴 간격과 10번째 턴에서 deepseek-chat으로 바뀌었다가 11번째 턴에서 되돌아온 모델 필드는 고정된 재생 스크립트가 만들어낼 결과가 아니며, 선의의 인터넷 조사나 스캐너 벤더라면 자신의 데스크톱 디렉터리와 하네스 홈 디렉터리 내용을 되돌려 보내지 않는다. 공유 API 키는 홍콩 호스트 두 곳을 서로 연결하지만, 하네스 사용자 에이전트는 누구나 구할 수 있는 범용 소프트웨어이므로 182.91.103[.]32가 동일 운영자에 속하는지는 확정되지 않으며, 11턴 세션이 그 주소의 마지막 트래픽이었던 이유도 알 수 없다. 운영자가 이 엔드포인트를 포괄하는 승인 범위가 있다고 믿는지는 검증하지 않았다. 규칙 팩은 자신의 모델을 상대로 승인된 연구자라는 지위를 주장하는데, 이는 프롬프트 엔지니어링 장치이다.
| 설명 | 검증 | 결과 | 판정 |
|---|---|---|---|
| 실시간 에이전트 루프가 아닌 고정된 재생 스크립트 | 11턴 세션의 턴별 타임스탬프, 프롬프트 크기, 모델 필드와 고유 도구 호출 식별자 수 | 18:23:10.2Z부터 18:28:08.8Z까지 11턴, 간격 0.2초에서 90초. 컨텍스트가 44,402자에서 492,150자로 증가. 모델 필드가 10번째 턴에서 deepseek-chat으로 바뀌었다가 11번째 턴에서 복귀. 92개의 고유 도구 호출 식별자가 86건의 고유 결과를 생성 | 반박됨 |
| 특이한 사용자 에이전트를 사용하는 선의의 인터넷 전수 조사 또는 스캐너 벤더 | 출처에 대한 외부 평판과 클라이언트가 되돌려 보낸 내용의 대조 | VirusTotal은 182.91.103[.]32에 대해 91개 엔진 중 0개 악성으로 표시. 클라이언트는 자신의 버그바운티 규칙 팩, FOFA MCP 설정, 홈 디렉터리 목록을 되돌려 보냈으며, 이는 어떤 조사 크롤러도 지니지 않는다 | 반박됨 |
| 독립적인 다수 사용자가 쓰는 범용 도구의 공유이므로 주소들이 무관하다 | 하네스 사용자 에이전트를 제시한 고유 출처 수와 두 키를 각각 제시한 출처 수 집계 | 사용자 에이전트는 2026년 9월 20일부터 23일까지의 활동에서 2개 조직, 3개 /24 대역의 3개 출처에서 나타나지만, 동일한 API 키는 한 조직의 홍콩 호스트 정확히 두 곳이 공유하며, 키 41414141은 182.91.103[.]32에만 고유하다 | 결론 미확정 |
| 엔드포인트가 운영자에게서 실패하여 작업을 중단하였다 | 11턴 세션 전반과 마지막 턴 이후의 사건 순서 | 11턴 세션은 18:28:08.8Z까지 진행되었고 해당 주소는 18:28 이후 추가 요청을 보내지 않았다. 그 이유는 증거로 알 수 없다 | 결론 미확정 |
| 운영자가 이 엔드포인트를 포함한다고 믿는 범위의 승인된 침투 테스트 | 트래픽에 승인 표식, 연락처 문자열, 범위 참조가 동반되는지 여부 | 해당 주소의 어떤 이벤트에도 연락처 주소, 범위 참조, 승인 헤더가 나타나지 않는다. 규칙 팩은 자신의 모델을 상대로 승인된 연구자라는 맥락을 주장하고 승인 증빙을 요구하지 말라고 지시하는데, 이는 프롬프트 엔지니어링 장치이지 범위의 증거가 아니다 | 미검증 |
수치 정리
증거와 보강 조회를 바탕으로 산출한 수치이다.
- VirusTotal 관계 정보. 해당 주소는 CN의 CHINA UNICOM China169 Backbone에 속한다. 주소 자체를 탐지로 표시한 엔진은 없다(0/91). VirusTotal에는 이 주소에 대한 패시브 DNS 기록이 없다. 이 주소를 가리켰다고 기록된 것이 전혀 없다는 뜻이다.
- 기존 관측. 당사 보고서 훔친 LLM 게이트웨이를 겨냥한 DeepSeek Harness: 도구 호출이 호출자에게서 실행되다와
203.175.15[.]28,103.85.74[.]25를 공유한다.
침해 지표
아래 3건의 네트워크 지표는 무해화 처리되었으며, 경로는 관측된 그대로 기재하였다.
네트워크
| 지표 | 맥락 |
|---|---|
182.91.103[.]32 | DeepSeek Harness 에이전트 세션. 자신의 호스트에서 나온 279건의 도구 결과 게시 |
203.175.15[.]28 | 동일한 하네스 사용자 에이전트와 python-requests 키 검증. 탈취된 키를 공유 |
103.85.74[.]25 | 동일한 하네스 사용자 에이전트와 동일한 탈취 키. 12개 모델명을 열거 |
호스트 아티팩트
| 지표 | 맥락 |
|---|---|
sk-0af475b8… | 세 주소 중 두 곳이 재사용한 API 키. 최초 기록 접촉 이전에 획득됨 |
deepseek-harness/0.1.5-rc.2 (+https://github.com/deepseek-ai/deepseek-harness) | 클라이언트 사용자 에이전트. 2026년 9월 20일에서 23일 사이 3개 출처. 동일 집합에서 이전 변종 DeepSeek-Harness-Desktop/0.1.3-max도 관측 |
C:\Users\[user]\.dsh\rules\*.md | 운영자 워크스테이션 아티팩트. 되돌려 보내진 도구 출력에서 C:\Users\cheng.dsh\rules\researcher-blackbox-whitebox.md 및 playwright-browser-mcp.md로 관측 |
C:\Users\[user]\Desktop\clown-src-6k-skill\ | 운영자가 패키징한 버그 헌팅 스킬 트리. 되돌려 보내진 PowerShell 출력에 나열됨 |
cheng | 운영자 워크스테이션의 Windows 계정명. 되돌려 보내진 모든 경로에 노출 |
41414141 | 11턴 하네스 세션에 사용된 일회성 키. 기록된 활동 전반에서 182.91.103[.]32에만 고유 |
탐지
Sigma
승인되지 않은 모델 컴플리션 엔드포인트를 호출하는 에이전트 하네스(후보).
title: Agent harness calling an unapproved model completions endpoint
status: experimental
description: Detects an AI coding-agent harness sending chat completions to a model endpoint outside the approved host list. Requires proxy logging of the request URI and user agent; request bodies are usually not logged, so this rule keys on client identity and destination only.
logsource:
category: proxy
detection:
selection:
cs-uri-stem|endswith: '/v1/chat/completions'
cs-user-agent|contains:
- 'deepseek-harness/'
- 'DeepSeek-Harness-Desktop/'
filter_approved:
cs-host:
- 'api.deepseek.com'
- 'api.openai.com'
- 'api.anthropic.com'
condition: selection and not filter_approved
falsepositives:
- Developers legitimately using a self-hosted or third-party model endpoint absent from the approved host list
- Internal evaluation harnesses pointed at staging endpoints
level: high
탐지 로직
- OpenAI 호환 엔드포인트에서 미등록 베어러 키가 수락됨(네트워크, 후보). 인터넷에서 접근 가능한 모든 OpenAI 호환 엔드포인트에서 요청별로 제시된 베어러 키를 기록하고, 발급 키 대장에 없는 키가 401 이외의 응답을 받거나 하나의 키가 1시간 이내에 둘 이상의 자율 시스템에서 제시될 때 경보를 발생시킨다. 이번 활동에서는 동일한 키가 한 호스팅 조직의 두 호스트에서 나타났고, 인증이 강제되는지를 시험하기 위해 명백히 일회성인 키 세 개(141414, 41414141, sk-14141242…)가 순차적으로 사용되었다.
- 외부 엔드포인트를 대상으로 도구 호출을 자동 승인하도록 설정된 에이전트 하네스(호스트, 후보). 개발자 및 연구자 단말에서 자동 승인 권한 모드와 조직의 승인된 모델 호스트 외부의 베이스 URL이 결합된 에이전트 하네스 설정 파일을 표시한다. 구체적으로는 사용자 프로필 디렉터리 아래에서 permission_mode = “always-approve”(또는 이에 상응하는 yolo, 자동 승인 설정)와 사용자 지정 api base가 함께 들어 있는 TOML 또는 YAML이다. 그러한 클라이언트는 원격 엔드포인트가 발행하는 모든 도구 호출을 사람의 개입 없이 실행한다.
- 로컬 파일시스템 출력이 채팅 컴플리션 도구 결과로 전송됨(행위 기반, 후보). 직접 운영하는 모델 엔드포인트에서, 인바운드 채팅 컴플리션 요청이 호스트 아티팩트 패턴과 일치하는 내용의 tool 역할 메시지를 담고 있을 때 경보를 발생시킨다. 절대 Windows 경로(^[A-Z]:\Users\), ‘FullName … Length Mode’ 같은 PowerShell 테이블 헤더, .env나 .credentials를 포함한 디렉터리 목록이 그 예이다. 정상적인 코딩 어시스턴트 트래픽에도 파일 내용은 포함되므로 테넌트별로 조정해야 한다. 여기서의 신호는 게시하는 클라이언트가 키 대장에 없는 존재라는 점이다.
대응 조치
- 인터넷에서 접근 가능한 OpenAI 호환 엔드포인트는 실제로 검증되는 인증 뒤에 둔다. 미등록 베어러 키는 서비스하지 말고 401로 거부하며, 발급된 모든 키에 소유자와 만료일을 등록한다.
- 모델 엔드포인트의 관리 인터페이스에 미인증 키 발급 경로가 있는지 감사하고, 알려진 소유자와 연결되지 않는 키는 모두 폐기한다. 이번 활동에서 사용된 키는 최초 기록 요청 시점(2026-09-20T12:22:32Z)에 이미 유효하였으며, 어떻게 획득되었는지는 증거가 없다.
- 모델 엔드포인트가 승인된 호스트 목록에 없을 경우 도구 실행에 확인을 요구하도록 에이전트 하네스를 설정한다. 자격증명을 보유한 장비에서는 permission_mode = “always-approve”와 사용자 지정 베이스 URL의 조합을 금지 조합으로 취급한다.
- 승인된 모델 제공자 목록 외부의 호스트에 있는 /v1/chat/completions로 향하는 개발자 워크스테이션의 아웃바운드 트래픽에 대해, 에이전트 하네스 사용자 에이전트를 기준으로 경보를 발생시킨다.
- 모델 응답을 도구 계층에 대한 신뢰할 수 없는 입력으로 취급한다. 통제하지 않는 엔드포인트는 도구 호출을 발행할 수 있고, 이를 실행하는 하네스는 그 엔드포인트에 워크스테이션 읽기 권한을 넘겨주게 된다.
MITRE ATT&CK 매핑
| 전술 | 기법 | 관측 내용 |
|---|---|---|
| 방어 회피 | T1078 Valid Accounts | 두 주소가 동일한 API 키로 인증하였으며, 그 키는 최초 기록 요청 시점에 이미 운영자가 보유하고 있었다 |
| 자원 개발 | T1588.002 Obtain Capabilities: Tool | 운영자는 공개된 DeepSeek Harness 에이전트, Playwright 브라우저 MCP 서버, FOFA 자산 검색 MCP 서버를 운용하며, 모두 되돌려 보내진 config.toml에 등록되어 있다 |
| 정찰 | T1596 Search Open Technical Databases | config.toml은 세 벌의 자격증명 슬롯을 갖춘 FOFA MCP 서버를 등록하며, 규칙 팩은 FOFA 결과에서 구동되는 시드 큐 워크플로를 기술한다 |
| 탐색 | T1082 System Information Discovery | 방향이 뒤집힌 사례이다. 운영자 자신의 클라이언트가 신뢰할 수 없는 엔드포인트의 지시에 따라 로컬에서 디렉터리와 파일 열거를 수행하고 86건의 고유 출력을 되돌려 보냈다 |
참고 자료
- DeepSeek Harness (클라이언트 사용자 에이전트에 언급된 오픈소스 에이전트 하네스)
- OWASP Top 10 for Large Language Model Applications
방법론 및 분석관 주석
증거는 인터넷에서 접근 가능한 하나의 OpenAI 호환 모델 엔드포인트와 주고받은 요청 및 응답에 국한되며, 2026년 9월 20일부터 23일까지의 활동을 다룬다. 운영자가 그 엔드포인트 밖에서 무엇을 했는지는 알 수 없다. API 키는 최초 기록 요청 시점에 이미 운영자의 손에 있었으므로, 그 키를 만들어낸 관리 권한 탈취는 여기서 관측 가능한 모든 것보다 앞서 일어났고 그 작동 방식은 증거가 없다. 워크스테이션 세부 정보는 운영자의 클라이언트가 되돌려 보내기로 선택한 내용뿐이다. 어떤 호스트도 조사하지 않았고 엔드포인트로 전송된 것 외에는 아무것도 수집하지 않았다. 세 주소 중 어느 것에 대해서도 탐지를 제시하는 제공자가 없고 어느 것도 스캐너로 분류되지 않으므로, 이 조사 결과의 어떤 내용도 여기 기술된 트래픽 밖에서 교차 확인되지 않는다.
미해결 사항은 다음과 같다.
- 공유 API 키가 언제, 어떤 요청으로 최초 획득되었는가.
- 이 하네스 빌드가 현재 어떤 다른 노출 모델 엔드포인트를 가리키고 있는가.
- 9월 20일 키 검증과 9월 23일 182.91.103[.]32의 하네스 세션 사이에 운영자가 그 접근 권한으로 무엇을 했는가. 해당 주소 집합의 하네스 사용자 에이전트 트래픽은 9월 21일부터 나타난다.
문의 또는 정정 요청: contact@kinryu.sh.