Files
OmniRoute/docs/i18n/sr/docs/security/STEALTH_GUIDE.md
Diego Rodrigues de Sa e Souza 8feea123bb feat(docs): mirror every docs/ page in all 65 locales (#14106)
* feat(docs): mirror every docs/ page in all 65 locales

Extends the documentation mirrors from the 22-page core set (#13940) to
every Markdown page under docs/: 152 sources x 65 locales = 9,880 mirrors
(6,208 new), language bars rewritten for the full locale list, state
adopted so the blocking drift gate now covers all 152 pages.

run-translation.mjs: an oversized block made only of table rows or list
items (PROVIDER_REFERENCE.md 244-row table, FREE_TIERS.md 71-item list) is
cut at item boundaries and rejoined without a blank line — the single
16-40 KB request outlived the backend socket for verbose scripts. 48
older mirrors whose tables had lost rows were retranslated with --force.

* docs(i18n): refresh mirrors for the sources the base changed since the branch cut

Section-level retranslation of the 29 docs (and README.md) whose source
or mirrors moved on release/v3.8.51 during the run, then state adoption;
the drift gate is green again on the merged tree.
2026-09-18 13:16:46 -03:00

32 KiB
Raw Blame History

Stealth Guide (Српски)

🌐 Languages: 🇺🇸 English · 🇪🇹 am · 🇸🇦 ar · 🇦🇿 az · 🇧🇬 bg · 🇧🇩 bn · 🇨🇿 cs · 🇩🇰 da · 🇩🇪 de · 🇬🇷 el · 🇪🇸 es · 🇪🇪 et · 🇮🇷 fa · 🇫🇮 fi · 🇫🇷 fr · 🇮🇪 ga · 🇮🇳 gu · 🇳🇬 ha · 🇮🇱 he · 🇮🇳 hi · 🇭🇷 hr · 🇭🇺 hu · 🇦🇲 hy · 🇮🇩 id · 🇳🇬 ig · 🇮🇹 it · 🇯🇵 ja · 🇬🇪 ka · 🇰🇭 km · 🇮🇳 kn · 🇰🇷 ko · 🇱🇹 lt · 🇱🇻 lv · 🇮🇳 ml · 🇮🇳 mr · 🇲🇾 ms · 🇲🇹 mt · 🇲🇲 my · 🇳🇵 ne · 🇳🇱 nl · 🇳🇴 no · 🇮🇳 or · 🇮🇳 pa · 🇵🇭 phi · 🇵🇱 pl · 🇵🇹 pt · 🇧🇷 pt-BR · 🇷🇴 ro · 🇷🇺 ru · 🇱🇰 si · 🇸🇰 sk · 🇸🇮 sl · 🇸🇪 sv · 🇰🇪 sw · 🇮🇳 ta · 🇮🇳 te · 🇹🇭 th · 🇹🇷 tr · 🇺🇦 uk-UA · 🇵🇰 ur · 🇺🇿 uz · 🇻🇳 vi · 🇳🇬 yo · 🇨🇳 zh-CN · 🇹🇼 zh-TW


Извор истине: open-sse/utils/tlsClient.ts, open-sse/services/{tlsClientBase,claudeTlsClient,perplexityTlsClient,grokTlsClient,notionTlsClient,lmarenaTlsClient,claudeCodeCCH,claudeCodeFingerprint,claudeCodeObfuscation,claudeCodeCompatible}.ts, open-sse/config/cliFingerprints.ts, src/mitm/ Последње ажурирање: 2026-09-02 — v3.8.51 Публика: Инжењери који одржавају прикривене интеграције специфичне за добављаче.

OmniRoute се интегрише са добављачима чији рубни системи активно идентификују незваничне клијенте на основу отиска (TLS JA3/JA4, редослед заглавља, облик JSON тела, токени интегритета). Ова страница документује површине за прикривање које OmniRoute излаже и места на којима су имплементиране.

Правно и етичко обавештење

Функције прикривања постоје како би OmniRoute могао да служи као слој компатибилности између званичних налога у власништву корисника (Claude Code CLI, Codex, Antigravity, Cursor итд.) и обједињеног API-ја система OmniRoute. Оне нису намењене заобилажењу система за откривање превара, дељењу акредитива или кршењу Услова коришћења добављача. Одржаваоци очекују од оператера да поштују услове коришћења узводног система које су прихватили приликом креирања налога.


Слој за TLS отиске

open-sse/utils/tlsClient.ts — wreq-js (Chrome 124)

Трајне wreq-js сесије креирају се лењо за сваки опсег налога и разрешени прокси. TlsClient на нивоу целог процеса обједињује највише 128 сесија које опонашају Chrome 124 на систему macOS за узводне системе иза Cloudflare-а. TlsClient.fetch() безбедно одбија захтев када изворно извршно окружење није доступно; позивалац може изричито да изабере резервну опцију изван овог омотача.

  • Профил сесије: browser: "chrome_124", os: "macos"
  • Разрешавање проксија (по приоритету): HTTPS_PROXYHTTP_PROXYALL_PROXY (такође варијанте малим словима)
  • Временско ограничење: TLS_CLIENT_TIMEOUT_MS (наслеђује се из FETCH_TIMEOUT_MS, подразумевано 600000)
  • wreq-js Response је компатибилан са fetch-ом (headers, text(), json(), clone(), body).
  • Надзор првог бајта (open-sse/utils/tlsFirstByteWatchdog.ts, #12656): TlsClient.fetch() разрешава се чим стигну заглавља узводног система, па само TLS_CLIENT_TIMEOUT_MS не може да ограничи тело које никада не испоручи први бајт. guardTlsFirstByte() упоредо извршава први read() тела и TLS_FIRST_BYTE_WATCHDOG_MS (подразумевано 10000, 0 га онемогућава); исправно тело остаје непромењено, док заустављено тело отказује wreq читач и омогућава постојећој TLS резервној логици функције proxyFetch да пређе на директни/прокси диспечер (захтев који није безбедно поновити, нпр. POST са телом, и даље изазива грешку уместо да буде неприметно поновљен).

Транспорт добављача заснован на веб-колачићима — wreq-js 3.2.0

open-sse/services/tlsClientBase.ts је заједнички адаптер за пет специјализованих транспорта заснованих на веб-колачићима наведених испод. Сваки танки омотач добављача бира профил прегледача/оперативног система. Адаптер користи јединствени учитавач wreq извршног окружења и скуп транспорта у open-sse/utils/tlsClient.ts, индексиран према профилу + оперативном систему + разрешеном проксију, док сваки захтев користи cookieMode: "ephemeral". Налози и захтеви стога деле везе на нивоу транспорта, али никада не деле wreq сесију нити складиште колачића.

Добављач Профил Емулирани ОС Правило за EOF тока
Claude chrome_146 Linux укључује [DONE]
Perplexity firefox_148 macOS укључује event: end_of_stream
Grok chrome_146 Linux искључује [DONE]
Notion chrome_146 Windows укључује [DONE]
LMArena chrome_146 Windows без сентинела; затварање при изворном EOF-у
  • Стримовање директно користи ReadableStream изворног одговора; не креира се привремена датотека нити пратећи процес.
  • Пре излагања тока проверава се до 256 почетних бајтова. SSE добављачи баферују грешке које нису SSE; Grok/LMArena мапирају Cloudflare изазове на 403, а HTML међустанице на 502.
  • Временско ограничење изворног захтева остаје обухваћено апсолутним крајњим JS роком. Застој поништава и затвара само погођени транспорт за профил/оперативни систем/прокси, пре него што га следећи захтев поново креира.
  • Приоритет разрешавања проксија је proxyUrl по позиву → контекст налога/контролне табле ограничен на захтев → HTTPS_PROXY/HTTP_PROXY/ALL_PROXY (укључујући варијанте малим словима). Грешке разрешавања безбедно одбијају захтев уместо да доведу до цурења директне везе. LMArena намерно разрешава у односу на arena.ai.
  • byteResponse враћа data: URL са наведеним типом садржаја, без оштећења UTF-8 података.
  • Грешке су TlsClientUnavailableError (пакет/додатак није доступан), TlsClientHangError (рок је прекорачен) и WreqTransportCapacityError (заједнички кôд грешке капацитета сесија) када је свих 128 ограничених места за профил/оперативни систем/прокси активно или у процесу затварања.

Генеричка TlsClient сесија изнад остаје специјализована за трајно стање колачића које подржава прегледач. Обе путање поново користе један кеширани учитавач wreq модула и куку животног циклуса процеса; њихови скупови остају одвојени зато што су животни векови њихових колачића намерно различити.

Профиле подржава фиксирана верзија пакета, али стварно WAF прихватање може да се промени независно од локалних тестова уговора. Потврдите промене отиска помоћу изричито овлашћеног активног налога пре него што наведете да је постигнута еквивалентност са узводним прегледачем.


Claude Code пакет за прикривање

Када је cliCompatMode укључен, OmniRoute преобликује одлазне Claude захтеве тако да се не могу разликовати од claude-cli саобраћаја. Три модула сарађују:

claudeCodeFingerprint.ts

Израчунава отисак cc_version од 3 знака, уграђен у заглавље за наплату:

SHA256(SALT + msg[4] + msg[7] + msg[20] + version)[:3]
  • FINGERPRINT_SALT = "59cf53e54c78" (чврсто кодирано; подудара се са званичним клијентом)
  • Улази: знакови на индексима 4, 7 и 20 текста прве корисничке поруке + ниска верзије
  • Излаз: хексадекадни префикс од 3 знака

claudeCodeCCH.ts (хеш садржаја клијента)

Серверска провера интегритета коју званични Claude Code CLI израчунава помоћу Bun/Zig. OmniRoute је поново имплементира помоћу xxhash-wasm:

  1. Серијализуј тело са резервисаним местом cch=00000;
  2. xxhash64(bytes, seed) & 0xFFFFF
  3. Хексадекадна вредност од 5 знакова, допуњена нулама, малим словима
  4. Замени cch=00000; израчунатим токеном

Константе:

  • Почетна вредност: 0x6e52736ac806831e
  • Образац: /\bcch=([0-9a-f]{5});/

claudeCodeObfuscation.ts

Умеће Unicode спојницу нулте ширине (U+200D) после првог знака „осетљивих“ назива клијената, тако да их узводни филтери не могу пронаћи помоћу grep-а. Подразумевана листа речи:

opencode, open-code, cline, roo-cline, roo_cline, cursor, windsurf,
aider, continue.dev, copilot, avante, codecompanion

Примењује се на: system блокове, сав messages[].content садржај и tools[].description / tools[].function.description. Оператер може да измени листу помоћу setSensitiveWords().

claudeCodeCompatible.tsanthropic-compatible-cc-* добављачи

За Anthropic посреднике трећих страна који прихватају само саобраћај „правог Claude Code-а“:

  • CLAUDE_CODE_COMPATIBLE_USER_AGENT = "claude-cli/2.1.258 (external, sdk-cli)"
  • CLAUDE_CODE_COMPATIBLE_STAINLESS_PACKAGE_VERSION = "0.112.1"
  • CLAUDE_CODE_COMPATIBLE_STAINLESS_RUNTIME_VERSION = "v26.3.0"
  • anthropic-beta = "claude-code-20250219,interleaved-thinking-2025-05-14,effort-2025-11-24" подразумевано
  • Прекидач „Омогући redact-thinking бета-функцију“ за појединачну везу додаје redact-thinking-2026-02-12 када CC Compatible узводни систем изричито захтева редиговане токове размишљања
  • Прекидач „Омогући приказ сажетог размишљања“ за појединачну везу чува providerSpecificData.requestDefaults.summarizeThinking и додаје display: "summarized" CC Compatible захтевима за размишљање који већ нису поставили режим приказа
  • CONTEXT_1M_BETA_HEADER = "context-1m-2025-08-07" (породица Opus/Sonnet 4.x)
  • Подразумевана путања: /v1/messages?beta=true

Сродни модули у истом пакету:

  • claudeCodeConstraints.ts — правила за температуру + контролу кеша
  • claudeCodeToolRemapper.ts — пресликавање назива алата
  • claudeCodeExtraRemap.ts — додатна нормализација корисног садржаја

Antigravity прикривање

Antigravity захтеви чувају текст позиваоца бајт по бајт. OmniRoute не умеће знакове нулте ширине у упите нити преименује/умеће алате како би опонашао IDE клијент.

antigravityHeaderScrub.ts

Уклања маркере Stainless SDK-а (x-stainless-lang, x-stainless-package-version, x-stainless-os, x-stainless-arch, x-stainless-runtime, x-stainless-runtime-version, x-stainless-timeout, x-stainless-retry-count, x-stainless-helper-method) пре прослеђивања.

⚠️ Ризик: ANTIGRAVITY_CREDITS=always (жариште за забрану налога)

ANTIGRAVITY_CREDITS=always (који користи open-sse/executors/antigravity.ts) усмерава сваки захтев преко прекорачења Antigravity AI кредита (плаћених Google кредита), уместо да дозволи квоти Google-овог бесплатног нивоа да ограничава коришћење. Ово је документовано као функција, али представља убедљиво најчешћи пријављени случај кршења услова коришћења који виђамо — више Google Ultra налога је забрањено уз 403 / "service disabled for ToS violation" / insufficient_quota након неколико сати рада са =always.

Спровођење правила узводно одвија се на Google-овој страни и OmniRoute то не може да спречи. Назив променљиве окружења и постојећа документација остављају утисак да је то безбедна опција за укључивање; није.

Зашто ово привлачи откривање злоупотребе агресивније него коришћење искључиво бесплатног нивоа:

  • Непрекидна аутоматизована потрошња на једном Google налогу означава се другачије од бесплатног нивоа који достиже квоту и зауставља се.
  • Прекорачења кредита немају ограничење брзине, па погрешно конфигурисан клијент може да потроши неколико стотина USD за неколико минута и изгледа као препродаја API кључева или бот саобраћај.
  • Више OmniRoute корисника који паралелно троше кредите за прекорачење са исте спољне IP адресе додатно појачава сигнал.

Препоручени приступ:

  1. Задржите подразумевану вредност ANTIGRAVITY_CREDITS=off, осим ако оператер изричито не прихвата ризик плаћених кредита и санкција над налогом. retry прво шаље уобичајени захтев и умеће кредите највише једном након одговарајуће грешке квоте 429; always умеће кредите већ при првом захтеву.
  2. Распоредите оптерећење међу добављачима путем Auto-Combo-а (model: "auto" или kr/glm/etc-combo), уместо да преоптеретите један Antigravity налог.
  3. Поставите RPM ограничења за сваку везу на страници за измену Antigravity добављача (Контролна табла → Добављачи → Antigravity → веза → ограничење брзине). 3060 RPM је одбрањива горња граница за непрекидно коришћење.
  4. Користите стабилну узводну мрежу под контролом оператера и избегавајте дељење једног налога међу неповезаним корисницима или радним оптерећењима.
  5. Ако је налог забрањен: поднесите жалбу преко support.google.com → „Врати приступ Workspace-у/налогу“, уз тачно тело одговора quota_exceeded / service disabled које је Google послао. Враћање приступа није загарантовано.

Референца променљивих окружења документује последице сваког режима кредита по налог и потрошњу.

Тачке додира:

  • open-sse/executors/antigravity.ts — чита process.env.ANTIGRAVITY_CREDITS
  • src/lib/oauth/providers/antigravity.ts — прослеђивање акредитива
  • Оригинална пријава инцидента: Дискусија #1183

Регистар CLI отисака — open-sse/config/cliFingerprints.ts

Табела по добављачу која фиксира тачан редослед заглавља и поља JSON тела, забележен из mitmproxy трагова званичних CLI алата. Тренутно су регистровани: codex, claude, као и профили изведени током извршавања у providerHeaderProfiles.ts за antigravity и github.

interface CliFingerprint {
  headerOrder: string[]; // осетљиво на велика и мала слова
  bodyFieldOrder: string[]; // JSON кључеви највишег нивоа
  userAgent?: string | (() => string);
  extraHeaders?: Record<string, string>;
}

Укључује се или искључује за сваког добављача путем променљивих окружења (погледајте испод). Када је искључено, заглавља/кључеви тела појављују се редоследом којим су их Node/JSON генерисали — што олакшава препознавање отиска.


MITM прокси (Antigravity, Linux/macOS/Windows)

За CLI алате чије бинарне датотеке није могуће преусмерити путем OPENAI_BASE_URL, OmniRoute покреће локални прокси који прекида TLS везу. Крајње тачке се налазе у src/app/api/cli-tools/antigravity-mitm/.

Метод Крајња тачка Намена
GET /api/cli-tools/antigravity-mitm Статус — покренут, pid, dnsConfigured, certExists
POST /api/cli-tools/antigravity-mitm Покретање MITM-а (захтева apiKey + sudoPassword)
DELETE /api/cli-tools/antigravity-mitm Заустављање MITM-а
GET /api/cli-tools/antigravity-mitm/alias Приказ псеудонима модела
PUT /api/cli-tools/antigravity-mitm/alias Чување псеудонима модела за алат

Циљни пресретнути хост: daily-cloudcode-pa.googleapis.com (Antigravity-јев удаљени сервер).

Редослед покретања (src/mitm/manager.ts::startMitm)

  1. Генерисање самопотписаног сертификата путем selfsigned (RSA-2048, SHA-256, 1 година) — cert/generate.ts
  2. Инсталирање сертификата у системско складиште поузданих сертификата — cert/install.ts
  3. Додавање уноса у hosts датотеку 127.0.0.1 daily-cloudcode-pa.googleapis.comdns/dnsConfig.ts
  4. Покретање src/mitm/server.cjs са ROUTER_API_KEY + MITM_LOCAL_PORT (подразумевано 443)
  5. Чување PID-а у <DATA_DIR>/mitm/.mitm.pid

Динамичко откривање складишта поузданих сертификата на Linux-уcert/install.ts

getLinuxCertConfig() пролази кроз листу приоритета и бира први постојећи директоријум:

Породица дистрибуција Директоријум Команда за ажурирање
Debian / Ubuntu /usr/local/share/ca-certificates update-ca-certificates
Arch / CachyOS / Manjaro /etc/ca-certificates/trust-source/anchors update-ca-trust
Fedora / RHEL / CentOS /etc/pki/ca-trust/source/anchors update-ca-trust
openSUSE /etc/pki/trust/anchors update-ca-certificates

Назив датотеке сертификата: omniroute-mitm.crt. Подударање отиска путем getCertFingerprint() (SHA-1 над DER-ом).

Поред тога, updateNssDatabases() инсталира сертификат у NSS базе података појединачних корисника када је certutil доступан: ~/.pki/nssdb, ~/snap/chromium/.../nssdb, све Firefox профиле (укључујући snap), под надимком OmniRoute MITM Root CA.

macOS / Windows

  • macOS: security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain
  • Windows: PowerShell са повишеним привилегијама → certutil -addstore Root

Аутентификација

Све MITM крајње тачке захтевају управљачку аутентификацију (requireCliToolsAuth). Sudo лозинка се кешира у опсегу модула (никада у globalThis) и брише се при позиву stopMitm().

Замене User-Agent вредности — променљиве окружења (.env.example, одељак 12)

Променљива Подразумевана вредност
CLAUDE_USER_AGENT claude-cli/2.1.258 (external, cli)
CODEX_USER_AGENT codex-cli/0.149.0 (Windows 10.0.26200; x64)
GITHUB_USER_AGENT GitHubCopilotChat/0.54.0
ANTIGRAVITY_USER_AGENT antigravity/2.0.1 linux/arm64 google-api-nodejs-client/10.3.0
KIRO_USER_AGENT AWS-SDK-JS/3.0.0 kiro-ide/1.0.0
QODER_USER_AGENT Qoder-Cli
CURSOR_USER_AGENT Cursor/3.4

Користи их open-sse/executors/base.ts::buildHeaders() путем динамичког проналажења. Ажурирајте их када добављачи објаве нове верзије CLI-ја — застарели UA стрингови почињу да се одбијају као застарели клијенти.

Прекидачи режима компатибилности CLI-ја (.env.example, одељак 13)

Променљива Ефекат
CLI_COMPAT_CODEX=1 Codex отисак
CLI_COMPAT_CLAUDE=1 claude-cli отисак
CLI_COMPAT_GITHUB=1 GitHub Copilot Chat отисак
CLI_COMPAT_ANTIGRAVITY=1 Antigravity отисак
CLI_COMPAT_KIRO=1 Kiro
CLI_COMPAT_CURSOR=1 Cursor
CLI_COMPAT_KIMI_CODING=1 Kimi Coding
CLI_COMPAT_KILOCODE=1 KiloCode
CLI_COMPAT_CLINE=1 Cline
CLI_COMPAT_ALL=1 Омогућава све наведено изнад

IP адреса добављача се увек задржава — прекидач само преобликује мрежни приказ захтева и не мења излазну IP адресу.


Санитизација долазних заглавља

OmniRoute уклања долазна клијентска заглавља пре прослеђивања, тако да захтев који стигне из Cursor-а не открије User-Agent: Cursor/X.Y.Z Claude upstream серверу. Листа забрањених заглавља налази се у src/shared/constants/upstreamHeaders.ts и одржава се синхронизовано са Zod шемама и јединичним тестовима.


Ажурирање отисака када их добављач промени

  1. Снимите саобраћај званичног CLI-ја помоћу mitmproxy (TLS пресретање + dump)
  2. Издвојте JA3/JA4 и дослован редослед заглавља
  3. Ажурирајте одговарајући унос CLI_FINGERPRINTS[...]
  4. Ажурирајте одговарајућу подразумевану вредност *_USER_AGENT у .env.example
  5. Ако се променио и сам TLS handshake, ажурирајте одговарајући омотач добављача или опцију wreq-js browser:
  6. Покрените TLS тестове специфичне за добављача и ручни canary тест према активном добављачу
  7. Објавите у оквиру patch издања; документујте у CHANGELOG.md

Тестови

  • open-sse/services/__tests__/claudeTlsClient.test.ts — понашање дељеног TLS омотача
  • tests/unit/anthropic-cache-fingerprint.test.ts — детерминистичност отиска
  • tests/unit/chatgpt-web-source-retirement.test.ts — заједнички прикривени извор ChatGPT Web-а остаје одсутан, док Codex Web остаје присутан

Такође погледајте

  • RESILIENCE_GUIDE.md — шта се дешава када прикривена путања добије 403
  • TROUBLESHOOTING.md
  • ENVIRONMENT.md — комплетна референца променљивих окружења
  • CLI-TOOLS.md — приказ MITM радног тока из перспективе оператера