Files
OmniRoute/docs/i18n/no/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

24 KiB
Raw Blame History

Stealth Guide (Norsk)

🌐 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 · 🇮🇳 or · 🇮🇳 pa · 🇵🇭 phi · 🇵🇱 pl · 🇵🇹 pt · 🇧🇷 pt-BR · 🇷🇴 ro · 🇷🇺 ru · 🇱🇰 si · 🇸🇰 sk · 🇸🇮 sl · 🇷🇸 sr · 🇸🇪 sv · 🇰🇪 sw · 🇮🇳 ta · 🇮🇳 te · 🇹🇭 th · 🇹🇷 tr · 🇺🇦 uk-UA · 🇵🇰 ur · 🇺🇿 uz · 🇻🇳 vi · 🇳🇬 yo · 🇨🇳 zh-CN · 🇹🇼 zh-TW


Autoritativ kilde: 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/ Sist oppdatert: 2026-09-02 — v3.8.51 Målgruppe: Utviklere som vedlikeholder leverandørspesifikke stealth-integrasjoner.

OmniRoute integreres med leverandører hvis grenseinfrastruktur aktivt identifiserer uoffisielle klienter ved hjelp av fingeravtrykk (TLS JA3/JA4, rekkefølge på headere, JSON-strukturen i forespørselskroppen og integritetstokener). Denne siden dokumenterer stealth-grensesnittene OmniRoute eksponerer, og hvor de er implementert.

Juridisk og etisk merknad

Stealth-funksjoner finnes slik at OmniRoute kan fungere som et kompatibilitetslag mellom brukereide offisielle kontoer (Claude Code CLI, Codex, Antigravity, Cursor osv.) og OmniRoutes enhetlige API. De er ikke ment for å omgå svindeloppdagelse, dele påloggingsopplysninger eller bryte leverandørens tjenestevilkår. Vedlikeholderne forventer at operatører overholder vilkårene de godtok hos oppstrømsleverandøren da kontoene ble opprettet.


Lag for TLS-fingeravtrykk

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

Vedvarende wreq-js-økter opprettes behovsstyrt per kontoomfang og løste proxy. Den prosessomfattende TlsClient-poolen inneholder maksimalt 128 økter som utgir seg for å være Chrome 124 på macOS overfor oppstrømstjenester bak Cloudflare. TlsClient.fetch() stanser med feil når den innebygde kjøretiden ikke er tilgjengelig. En kallende funksjon kan eksplisitt velge en reserveløsning utenfor denne wrapperen.

  • Øktprofil: browser: "chrome_124", os: "macos"
  • Proxy-oppløsning (prioritet): HTTPS_PROXYHTTP_PROXYALL_PROXY (også med små bokstaver)
  • Tidsavbrudd: TLS_CLIENT_TIMEOUT_MS (arves fra FETCH_TIMEOUT_MS, standardverdi 600000)
  • wreq-js Response er fetch-kompatibel (headers, text(), json(), clone(), body).
  • Vakthund for første byte (open-sse/utils/tlsFirstByteWatchdog.ts, #12656): TlsClient.fetch() fullføres så snart headere fra oppstrømstjenesten ankommer, så TLS_CLIENT_TIMEOUT_MS alene kan ikke sette en grense for en kropp som aldri leverer en første byte. guardTlsFirstByte() kjører kroppens første read() i et kappløp mot TLS_FIRST_BYTE_WATCHDOG_MS (standardverdi 10000; 0 deaktiverer den). En velfungerende kropp påvirkes ikke, mens en fastlåst kropp avbryter wreq-leseren og lar den eksisterende TLS-reservelogikken i proxyFetch gå videre til direkte-/proxy-dispatcheren (en forespørsel som ikke trygt kan spilles av på nytt, for eksempel en POST med en kropp, utløser fortsatt en feil i stedet for å bli forsøkt på nytt uten varsel).

Transport for leverandører med web-informasjonskapsler — wreq-js 3.2.0

open-sse/services/tlsClientBase.ts er den delte adapteren for de fem spesialiserte transportene med web-informasjonskapsler nedenfor. Hver enkelt leverandør-wrapper velger en nettleser-/OS-profil. Adapteren bruker den felles wreq-kjøretidslasteren og transportpoolen i open-sse/utils/tlsClient.ts, indeksert etter profil + OS + løst proxy, mens hver forespørsel bruker cookieMode: "ephemeral". Kontoer og forespørsler deler derfor tilkoblinger på transportnivå, men aldri en wreq-økt eller informasjonskapselbeholder.

Leverandør Profil Emulert OS Retningslinje for EOF i strøm
Claude chrome_146 Linux inkluder [DONE]
Perplexity firefox_148 macOS inkluder event: end_of_stream
Grok chrome_146 Linux ekskluder [DONE]
Notion chrome_146 Windows inkluder [DONE]
LMArena chrome_146 Windows ingen sentinel; lukk ved innebygd EOF
  • Strømming konsumerer den innebygde responsens ReadableStream direkte; ingen midlertidig fil eller sideprosess opprettes.
  • Opptil 256 innledende byte inspiseres før en strøm eksponeres. SSE-leverandører bufrer feil som ikke er SSE; Grok/LMArena tilordner Cloudflare-utfordringer til 403 og HTML-mellomsider til 502.
  • Tidsavbruddet for den innebygde forespørselen er fortsatt omsluttet av en absolutt, hard JS-tidsfrist. En fastlåsing ugyldiggjør og lukker bare den berørte profil-/OS-/proxy-transporten før neste forespørsel oppretter den på nytt.
  • Prioriteten for proxy-oppløsning er proxyUrl per kall → forespørselsavgrenset konto-/dashbordkontekst → HTTPS_PROXY/HTTP_PROXY/ALL_PROXY (inkludert varianter med små bokstaver). Oppløsningsfeil stanser med feil i stedet for å lekke en direkte tilkobling. LMArena foretar bevisst oppløsning mot arena.ai.
  • byteResponse returnerer en innholdstypeangitt data:-URL uten UTF-8-korrupsjon.
  • Feilene er TlsClientUnavailableError (pakken/tillegget er utilgjengelig), TlsClientHangError (tidsfristen er overskredet) og WreqTransportCapacityError (feilkoden for delt øktkapasitet) når alle de 128 avgrensede profil-/OS-/proxy-plassene er aktive eller i ferd med å lukkes.

Den generiske TlsClient-økten ovenfor er fortsatt spesialisert for vedvarende, nettleserstøttet informasjonskapseltilstand. Begge banene gjenbruker én bufret wreq-modullaster og livssykluskrok for prosessen. Poolene deres forblir separate fordi levetiden til informasjonskapslene deres med hensikt er forskjellig.

Profilene støttes av den versjonslåste pakken, men faktisk WAF-aksept kan endres uavhengig av lokale kontrakttester. Valider endringer i fingeravtrykk mot en eksplisitt autorisert aktiv konto før det hevdes samsvar med en oppstrømsnettleser.


Claude Code Stealth-pakke

Når cliCompatMode er aktivert, omformer OmniRoute utgående Claude-forespørsler slik at de ikke kan skilles fra claude-cli-trafikk. Tre moduler samarbeider:

claudeCodeFingerprint.ts

Beregner det 3-tegns cc_version-fingeravtrykket som er innebygd i faktureringsheaderen:

SHA256(SALT + msg[4] + msg[7] + msg[20] + version)[:3]
  • FINGERPRINT_SALT = "59cf53e54c78" (hardkodet; samsvarer med den offisielle klienten)
  • Inndata: tegn på indeks 4, 7 og 20 i teksten i den første brukermeldingen + versjonsstrengen
  • Utdata: 3-tegns heksadesimalt prefiks

claudeCodeCCH.ts (Client Content Hash)

Integritetskontroll på serversiden som den offisielle Claude Code CLI-en beregner via Bun/Zig. OmniRoute implementerer den på nytt med xxhash-wasm:

  1. Serialiser innholdet med plassholderen cch=00000;
  2. xxhash64(bytes, seed) & 0xFFFFF
  3. Heksadesimalverdi på 5 tegn med små bokstaver og nullutfylling
  4. Erstatt cch=00000; med det beregnede tokenet

Konstanter:

  • Seed: 0x6e52736ac806831e
  • Mønster: /\bcch=([0-9a-f]{5});/

claudeCodeObfuscation.ts

Setter inn en Unicode-sammenføyer uten bredde (U+200D) etter det første tegnet i «sensitive» klientnavn, slik at oppstrømsfiltre ikke kan finne dem med grep. Standard ordliste:

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

Brukes på: system-blokker, alt messages[].content og tools[].description / tools[].function.description. Kan overstyres av operatøren via setSensitiveWords().

claudeCodeCompatible.tsanthropic-compatible-cc-*-leverandører

For tredjeparts Anthropic-reléer som bare godtar trafikk fra «ekte 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" som standard
  • Bryteren «Enable redact-thinking beta» per tilkobling legger til redact-thinking-2026-02-12 når en CC Compatible-oppstrømstjeneste spesifikt krever redigerte resonneringsstrømmer
  • Bryteren «Enable summarized thinking display» per tilkobling lagrer providerSpecificData.requestDefaults.summarizeThinking og legger til display: "summarized" i CC Compatible-resonneringsforespørsler som ikke allerede har angitt en visningsmodus
  • CONTEXT_1M_BETA_HEADER = "context-1m-2025-08-07" (Opus/Sonnet 4.x-familien)
  • Standardbane: /v1/messages?beta=true

Beslektede moduler i samme pakke:

  • claudeCodeConstraints.ts — regler for temperatur + hurtigbufferkontroll
  • claudeCodeToolRemapper.ts — omtilordning av verktøynavn
  • claudeCodeExtraRemap.ts — ekstra normalisering av nyttelast

Antigravity Stealth

Antigravity-forespørsler bevarer innringerens tekst byte for byte. OmniRoute setter ikke inn tegn uten bredde i ledetekster og gir heller ikke verktøy nye navn eller injiserer dem for å etterligne en IDE-klient.

antigravityHeaderScrub.ts

Fjerner markører fra 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) før videresending.

⚠️ Risiko: ANTIGRAVITY_CREDITS=always (høyrisikoområde for kontosperring)

ANTIGRAVITY_CREDITS=always (brukt av open-sse/executors/antigravity.ts) sender hver eneste forespørsel gjennom Antigravity AI Credit Overages (betalte Google-kreditter), i stedet for å la Googles gratiskvote begrense bruken. Dette er dokumentert som en funksjon, men det er den vanligste rapporterte typen ToS-brudd vi ser — flere Google Ultra-kontoer har blitt sperret med 403 / "service disabled for ToS violation" / insufficient_quota etter å ha kjørt i noen timer med =always.

Håndhevingen oppstrøms skjer på Googles side, og er ikke noe OmniRoute kan forhindre. Navnet på miljøvariabelen og den eksisterende dokumentasjonen får dette til å høres ut som en trygg innstilling å aktivere; det er det ikke.

Hvorfor dette utløser misbruksdeteksjon mer aggressivt enn bruk begrenset til gratiskvoten:

  • Vedvarende automatisert forbruk på én enkelt Google-konto flagges annerledes enn når gratiskvoten nås og bruken stopper.
  • Kredittoverforbruk har ingen øvre hastighetsgrense, så en feilkonfigurert klient kan bruke flere hundre USD på få minutter og se ut som videresalg av API-nøkler eller bottrafikk.
  • Når flere OmniRoute-brukere belaster overforbrukskreditter parallelt fra samme eksterne IP-adresse, forsterkes signalet.

Anbefalt praksis:

  1. Behold standardinnstillingen ANTIGRAVITY_CREDITS=off, med mindre operatøren eksplisitt godtar risikoen knyttet til betalte kreditter og kontohåndheving. retry sender først den normale forespørselen og injiserer kreditter maksimalt én gang etter en kvalifiserende kvotefeil av typen 429; always injiserer kreditter i den første forespørselen.
  2. Fordel belastningen på flere leverandører via Auto-Combo (model: "auto" eller kr/glm/etc-combo) i stedet for å overbelaste én enkelt Antigravity-konto.
  3. Angi RPM-grenser per tilkobling på redigeringssiden til Antigravity-leverandøren (Dashboard → Providers → Antigravity → tilkobling → hastighetsgrense). 3060 RPM er en forsvarlig øvre grense for vedvarende bruk.
  4. Bruk stabil oppstrømsnettverkstilkobling kontrollert av operatøren, og unngå å dele én konto mellom urelaterte brukere eller arbeidsbelastninger.
  5. Ved sperring: send en klage via support.google.com → «Restore Workspace/Account access» med den nøyaktige quota_exceeded- / service disabled-responsen Google sendte. Gjenoppretting er ikke garantert.

Miljøreferansen dokumenterer konsekvensene for konto og kostnader for hver kredittmodus.

Berøringspunkter:

  • open-sse/executors/antigravity.ts — leser process.env.ANTIGRAVITY_CREDITS
  • src/lib/oauth/providers/antigravity.ts — håndtering av legitimasjon
  • Opprinnelig hendelsesrapport: Discussion #1183

CLI-fingeravtrykksregister — open-sse/config/cliFingerprints.ts

Tabell per leverandør som låser nøyaktig rekkefølge på headere og JSON-felter i forespørselskroppen, registrert fra mitmproxy-sporinger av de offisielle CLI-verktøyene. For øyeblikket registrert: codex, claude, samt profiler utledet under kjøring i providerHeaderProfiles.ts for antigravity og github.

interface CliFingerprint {
  headerOrder: string[]; // skiller mellom store og små bokstaver
  bodyFieldOrder: string[]; // JSON-nøkler på toppnivå
  userAgent?: string | (() => string);
  extraHeaders?: Record<string, string>;
}

Aktiver eller deaktiver per leverandør via miljøvariabler (se nedenfor). Når dette er deaktivert, vises headere/nøkler i forespørselskroppen i den rekkefølgen Node/JSON oppga dem — enkelt å identifisere via fingeravtrykk.


MITM-proxy (Antigravity, Linux/macOS/Windows)

For CLI-verktøy der binærfilene ikke kan omdirigeres via OPENAI_BASE_URL, kjører OmniRoute en lokal TLS-terminerende proxy. Endepunktene ligger under src/app/api/cli-tools/antigravity-mitm/.

Metode Endepunkt Formål
GET /api/cli-tools/antigravity-mitm Status — kjører, pid, dnsConfigured, certExists
POST /api/cli-tools/antigravity-mitm Start MITM (krever apiKey + sudoPassword)
DELETE /api/cli-tools/antigravity-mitm Stopp MITM
GET /api/cli-tools/antigravity-mitm/alias Vis modellaliaser
PUT /api/cli-tools/antigravity-mitm/alias Lagre modellaliaser for et verktøy

Avskåret målvert: daily-cloudcode-pa.googleapis.com (Antigravity sin oppstrømstjeneste).

Oppstartssekvens (src/mitm/manager.ts::startMitm)

  1. Generer et selvsignert sertifikat via selfsigned (RSA-2048, SHA-256, 1 år) — cert/generate.ts
  2. Installer sertifikatet i systemets klareringslager — cert/install.ts
  3. Legg til hosts-oppføringen 127.0.0.1 daily-cloudcode-pa.googleapis.comdns/dnsConfig.ts
  4. Start src/mitm/server.cjs med ROUTER_API_KEY + MITM_LOCAL_PORT (standardverdi 443)
  5. Lagre PID i <DATA_DIR>/mitm/.mitm.pid

Dynamisk oppdagelse av klareringslager på Linux — cert/install.ts

getLinuxCertConfig() går gjennom en prioritert liste og velger den første eksisterende katalogen:

Distribusjonsfamilie Katalog Oppdateringskommando
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

Sertifikatets filnavn: omniroute-mitm.crt. Fingeravtrykk sammenlignes via getCertFingerprint() (SHA-1 av DER).

I tillegg installerer updateNssDatabases() sertifikatet i NSS-databaser per bruker når certutil er tilgjengelig: ~/.pki/nssdb, ~/snap/chromium/.../nssdb, alle Firefox-profiler (inkludert snap), under kallenavnet OmniRoute MITM Root CA.

macOS / Windows

  • macOS: security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain
  • Windows: privilegert PowerShell → certutil -addstore Root

Autentisering

Alle MITM-endepunkter krever administrasjonsautentisering (requireCliToolsAuth). Sudo-passordet bufres i modulens omfang (aldri globalThis) og slettes ved stopMitm().

User-Agent-overstyringer — miljøvariabler (.env.example del 12)

Variabel Standardverdi
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

Brukes av open-sse/executors/base.ts::buildHeaders() via dynamisk oppslag. Oppdater disse når leverandørene utgir nye CLI-versjoner — utdaterte UA-strenger begynner å bli avvist som utdaterte klienter.

Brytere for CLI-kompatibilitetsmodus (.env.example del 13)

Variabel Effekt
CLI_COMPAT_CODEX=1 Codex-fingeravtrykk
CLI_COMPAT_CLAUDE=1 claude-cli-fingeravtrykk
CLI_COMPAT_GITHUB=1 GitHub Copilot Chat-fingeravtrykk
CLI_COMPAT_ANTIGRAVITY=1 Antigravity-fingeravtrykk
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 Aktiver alle ovenfor

Leverandørens IP-adresse bevares alltid — bryteren endrer bare forespørselens representasjon på forbindelsen, den bytter ikke utgående IP-adresse.


Rensing av innkommende headere

OmniRoute fjerner innkommende klientheadere før videresending, slik at en forespørsel som kommer fra Cursor, ikke lekker User-Agent: Cursor/X.Y.Z til en oppstrøms Claude-tjeneste. Se src/shared/constants/upstreamHeaders.ts for blokkeringslisten, som holdes synkronisert med Zod-skjemaene og enhetstestene.


Oppdatering av fingeravtrykk når en leverandør roterer dem

  1. Fang opp trafikk fra den offisielle CLI-en med mitmproxy (TLS-avskjæring + dump)
  2. Hent ut JA3/JA4 og den bokstavelige headerrekkefølgen
  3. Oppdater den relevante CLI_FINGERPRINTS[...]-oppføringen
  4. Oppdater den samsvarende standardverdien for *_USER_AGENT i .env.example
  5. Hvis selve TLS-håndtrykket er endret, oppdater den relevante leverandør-wrapperen eller browser:-alternativet i wreq-js
  6. Kjør de leverandørspesifikke TLS-testene og en manuell kanaritest mot leverandørens aktive tjeneste
  7. Lever dette i en patch-utgivelse; dokumenter det i CHANGELOG.md

Tester

  • open-sse/services/__tests__/claudeTlsClient.test.ts — virkemåten til den delte TLS-wrapperen
  • tests/unit/anthropic-cache-fingerprint.test.ts — determinisme for fingeravtrykk
  • tests/unit/chatgpt-web-source-retirement.test.ts — den felles stealth-kilden for ChatGPT Web forblir fraværende, mens Codex Web fortsatt er til stede

Se også