diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1f240a6..45a7a3f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -23,7 +23,10 @@ concurrency: jobs: # What changed, so the expensive job can be skipped when nothing it covers did. changes: - runs-on: ubuntu-latest + # Pinned rather than `ubuntu-latest`: that label moves to Ubuntu 26 in October 2026, and every run has + # been carrying an annotation saying so. A named image means the move happens when we make it, with a + # green run to prove it, rather than on a date somebody else chose. macOS is already pinned the same way. + runs-on: ubuntu-24.04 outputs: app: ${{ steps.what.outputs.app }} steps: @@ -64,7 +67,10 @@ jobs: # Seconds of Python, so it runs on everything: the site is generated from Swift sources and project.yml as well # as from site/, and "docs/ is out of date" should be caught whichever of those moved. site: - runs-on: ubuntu-latest + # Pinned rather than `ubuntu-latest`: that label moves to Ubuntu 26 in October 2026, and every run has + # been carrying an annotation saying so. A named image means the move happens when we make it, with a + # green run to prove it, rather than on a date somebody else chose. macOS is already pinned the same way. + runs-on: ubuntu-24.04 steps: # Full history: the sitemap dates each page from the commit that last touched its source, and a shallow # clone can only see one commit, so every page would look as though it changed today. @@ -80,6 +86,13 @@ jobs: exit 1 } + # The build is a template renderer: it cannot fail on a placeholder that did not render, a link to a + # section that exists in English only, a font that came back from Google, or a roadmap still promising + # what you can already download. Each of those shipped once. check_site.py is where they go to stay + # fixed, and it runs on every branch — these are mistakes to catch before the release, not at the merge. + - name: Check the built site + run: python3 scripts/check_site.py --ci + # The site is served from docs/ on main, and its Download button points at # releases/latest/download/Flowlight.dmg. So a main that announces a version before the release exists # sends people to the previous DMG while telling them a newer one is out. Version work belongs on a @@ -100,6 +113,20 @@ jobs: exit 1 fi + # The same claim lives in README's "Shipped:" list, where it is a ticked checkbox rather than a + # download button — so it went unnoticed that it credited a version nobody could install. Anything + # ticked has to exist. + bad=0 + while read -r version; do + [ -z "$version" ] && continue + if [ "$version" != "$released" ] && \ + [ "$(printf '%s\n%s\n' "$version" "$released" | sort -V | tail -1)" = "$version" ]; then + echo "::error file=README.md::README ticks ($version) as shipped, but the newest release is $released." + bad=1 + fi + done <<< "$(sed -n '/^Shipped:/,/^Planned/p' README.md | grep -o '([0-9]\+\.[0-9]\+\.[0-9]\+)' | tr -d '()')" + [ "$bad" -eq 0 ] || exit 1 + test: needs: changes if: needs.changes.outputs.app == 'true' diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml new file mode 100644 index 0000000..e4d46f6 --- /dev/null +++ b/.github/workflows/codeql.yml @@ -0,0 +1,94 @@ +# CodeQL code scanning. +# +# This exists as a workflow rather than as GitHub's default setup for one reason: the Xcode project is not +# committed. XcodeGen writes it from project.yml, so `autobuild` looked for a project or workspace, found +# neither, and gave up with `no-project-found`. The reaction to that failure was to drop Swift from the +# languages being scanned, which left the one language worth scanning in a tool that reads other people's +# network traffic unscanned. Swift is built here explicitly instead. +# +# Requires GitHub's default setup to be turned OFF for this repository (Settings › Code security › Code +# scanning), because the two configurations cannot both be active. +name: CodeQL + +on: + push: + branches: [main] + pull_request: + schedule: + # Weekly, so a new query release finds old code. Wednesday early UTC: no contention with release runs. + - cron: "17 4 * * 3" + workflow_dispatch: + +permissions: + contents: read + +concurrency: + group: codeql-${{ github.ref }} + cancel-in-progress: ${{ github.event_name == 'pull_request' }} + +jobs: + analyze: + name: analyze (${{ matrix.language }}) + runs-on: ${{ matrix.runner }} + timeout-minutes: 60 + permissions: + security-events: write # the only reason this workflow needs more than read + contents: read + strategy: + fail-fast: false + matrix: + include: + # Swift has to be built, and only a macOS runner can. See the header. + - language: swift + runner: macos-15 + build-mode: manual + # The site generator, the packaging scripts and the workflows themselves. Nothing to build. + - language: python + runner: ubuntu-24.04 + build-mode: none + - language: actions + runner: ubuntu-24.04 + build-mode: none + steps: + - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5.1.0 + + # Everything that is not the compilation happens before init, and deliberately so. Once init has run, + # CodeQL traces the job by preloading an x86_64 libtrace.dylib through DYLD_INSERT_LIBRARIES, which puts + # every child process under Rosetta 2 — and Homebrew refuses to install an x86_64 build into the ARM + # prefix: "Cannot install under Rosetta 2 in ARM default prefix". Generating the project needs no tracing + # anyway; only the compiler does. + - name: Prepare the project + if: matrix.build-mode == 'manual' + run: | + set -euo pipefail + # Newest Xcode only. CI's test job covers the oldest-supported compiler; this build exists to give + # CodeQL something to trace, and tracing it twice would double the cost for the same findings. + sudo xcode-select -s "$(ls -d /Applications/Xcode*.app | sort -V | tail -1)" + xcodebuild -version + brew install xcodegen + xcodegen generate + + - uses: github/codeql-action/init@7999b86c43a865dc79d8923397f35af22de63401 # v4 + with: + languages: ${{ matrix.language }} + build-mode: ${{ matrix.build-mode }} + # security-extended over the default suite: this app holds decrypted request bodies and a CA key, so + # the extra precision-medium queries are worth the false positives they bring. + queries: security-extended + + - name: Build for analysis + if: matrix.build-mode == 'manual' + run: | + set -euo pipefail + # Signing off, as in the test job: analysis needs the compilation, not a runnable app. `clean build` + # rather than `build`, because CodeQL only sees the files the compiler actually recompiles and an + # incremental build would hand it a fraction of the sources. + xcodebuild clean build \ + -project Flowlight.xcodeproj \ + -scheme Flowlight \ + -destination 'platform=macOS' \ + CODE_SIGN_IDENTITY=- CODE_SIGN_STYLE=Manual DEVELOPMENT_TEAM= CODE_SIGN_ENTITLEMENTS= + + - uses: github/codeql-action/analyze@7999b86c43a865dc79d8923397f35af22de63401 # v4 + with: + category: /language:${{ matrix.language }} diff --git a/.github/workflows/pages.yml b/.github/workflows/pages.yml index 34293a4..ce85c3d 100644 --- a/.github/workflows/pages.yml +++ b/.github/workflows/pages.yml @@ -25,7 +25,10 @@ concurrency: jobs: deploy: - runs-on: ubuntu-latest + # Pinned rather than `ubuntu-latest`: that label moves to Ubuntu 26 in October 2026, and every run has + # been carrying an annotation saying so. A named image means the move happens when we make it, with a + # green run to prove it, rather than on a date somebody else chose. macOS is already pinned the same way. + runs-on: ubuntu-24.04 environment: name: github-pages url: ${{ steps.deployment.outputs.page_url }} @@ -34,6 +37,12 @@ jobs: - uses: actions/configure-pages@45bfe0192ca1faeb007ade9deae92b16b8254a0d # v6.0.0 + # CI checks this on every pull request, but this workflow is the one that actually puts the site in front + # of people, and a deploy is not something you can take back from a cache. Seconds of Python for the + # guarantee that nothing broken is ever served. + - name: Check the site before serving it + run: python3 scripts/check_site.py --ci + # docs/ is committed and CI already checks it matches a fresh build, so there is nothing to build here. - uses: actions/upload-pages-artifact@fc324d3547104276b827a68afc52ff2a11cc49c9 # v5.0.0 with: diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 283e1f9..54d1f72 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -27,8 +27,9 @@ Internals are documented in [docs/DEVELOPMENT.md](docs/DEVELOPMENT.md). - **Translate the website.** Copy `site/i18n/en.json` to `site/i18n/.json` and translate the values — that is the header, the footer and the 404 page. Then copy the pages you want from `site/pages/` into `site/pages//`, keeping the file names and the markup, and translate the text. `scripts/build-site.sh` - publishes them under `//`, adds the `hreflang` links and the entry in the language menu, and leaves - anything you haven't translated pointing at the English page. Reuse the words the app already uses, from + publishes them under `//`, adds the `hreflang` links and the entry in the language menu, leaves + anything you haven't translated pointing at the English page, and then checks the result — an unrendered + placeholder, a dead link, a heading anchor that only exists in English. Reuse the words the app already uses, from `Flowlight/Localization/.lproj/Localizable.strings`. - **Name another protocol.** Add the port to `ProtocolCatalog`, give it a category, and, if its first bytes are distinctive, add a detector in `ProtocolClassifier.swift`. `testExtendedProtocolCoverage` checks that every named diff --git a/README.md b/README.md index d678014..3eceba1 100644 --- a/README.md +++ b/README.md @@ -369,6 +369,14 @@ in exchange, traffic from before you enabled it isn't there and some system traf Storage rolls per-second rows into minute, hour and day tables. Week, month and year views read the daily table, so a year of history stays fast. +## Monitoring, not prevention + +Flowlight tells you what software on your Mac is sending and where. It is not a defence against an attacker who already +controls the machine: anything running as root can unload its extension or stop the app. Blocking is real — the Network +Extension refuses the connection before it is made — but it is control over software you already trust rather than a +barrier against software you don't, and an agent that can run a shell can do by hand what a refused tool would have done. +The [threat model](https://flowlight.xinbetween.com/threat-model/) says what is defended, what is not, and why. + ## Honest limitations - **TCP and UDP only.** That covers essentially all app traffic, but ICMP (ping) and other raw-IP protocols aren't attributed. @@ -413,31 +421,15 @@ Shipped: - [x] Mock responses in HTTPS inspection (from 0.3.1) - [x] Export to OpenTelemetry / SIEM (from 0.3.2) - [x] Runs quietly in the background: menu-bar-only mode, window state, a calmer first run (0.2.7 and 0.3.3) +- [x] Coverage: what Flowlight can't account for, per app (0.9.0) +- [x] Inspect an app or destination from the row you found it on (0.9.1) +- [x] A threat model, a security contact, and fonts served from our own domain (website and documentation; + no app release of its own, since the app itself did not change) - [x] Build, sign, notarize and publish from CI ([release workflow](.github/workflows/release.yml); see [docs/DEVELOPMENT.md](docs/DEVELOPMENT.md#releasing-from-ci) for the secrets it needs and what they cost) Planned, in order: -- **0.9.0 — Coverage, stated rather than assumed.** Flowlight says it sees every connection, and then the honest - paragraphs elsewhere explain the exceptions: traffic from before the filter started, system services exempt - from content filters, a Mac where another content filter owns the slot, apps that pin their certificates, QUIC - the proxy never sees, and an agent's local MCP server talking over a pipe. Today you have to know all of that - to read the screens correctly. A coverage view would say it per app: watched by the extension, decrypted by - the proxy, named only by DNS or SNI, or not covered at all — and *why*, with the fix where there is one. It is - the difference between a tool that claims completeness and one that can be trusted about its own limits. -- **0.9.1 — Inspect it from where you found it.** Seeing in Live that an agent talked to a host and wanting to - know what it said is the commonest move there is, and it meant changing screen, remembering the name and - typing it into a search field. Right-click any row in Live, Reports or AI Agents and Inspect opens already - looking at that app or destination. The subject lands in the search field rather than a hidden filter, so it - stays visible and can be widened or dropped without going back. -- **0.9.2 — A threat model, written down.** What Flowlight defends against, and what it does not, on one page: - software on this Mac behaving badly in the open; not software with root, which can switch the filter off. - A signed update from someone who is not us — which 0.8.2 closed. A VPN or security agent holding the content - filter slot. Certificate pinning, QUIC, and anything routed around the proxy. The product language should say - **monitoring, not prevention** beside every mention of blocking, because "block" invites a guarantee the - design cannot make. Alongside it, a security contact address and key for people who can't or won't use - GitHub's private reporting, and the web fonts served from this domain rather than Google's — a local-first - tool shouldn't make a third-party request to render its own privacy page. - **0.9.3 — A budget for inspection.** HTTPS inspection records request and response bodies for three days, and that is the most sensitive thing Flowlight ever holds. The redaction that protects it is a guess at which headers carry credentials — improved in 0.8.2, still a guess. This turns it into something with limits you @@ -453,7 +445,7 @@ Planned, in order: is encrypted, exactly which fields travel and whether any of them are headers — the same disclosure Flowlight demands of everything else it watches, applied to itself. -- **1.0 — What an agent did besides the network.** Flowlight can say that Claude Code uploaded 40 MB to an +- **1.0 — What an agent did off the network.** Flowlight can say that Claude Code uploaded 40 MB to an unfamiliar host. It cannot say that it read `~/.ssh/id_rsa` first, and that second half is the exfiltration story: a file leaving is a read followed by a send, and only the send is visible today. This would record what an agent's tools opened, wrote and spawned, and line it up against the connections that followed — @@ -466,7 +458,7 @@ Planned, in order: **Two things gate it, both stated here rather than discovered later.** Per-process file attribution on macOS needs the EndpointSecurity framework, whose entitlement Apple grants on request and review — not a checkbox — and which only works from a system extension. And it would put far more sensitive material in - Flowlight's hands than network metadata ever did, so the inspection budget in 0.9.2 stops being a nicety and + Flowlight's hands than network metadata ever did, so the inspection budget in 0.9.3 stops being a nicety and becomes the thing that has to exist first. A tool that asks you not to monitor it has to deserve that twice over when it can see every file you open. diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 0000000..9d531dc --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,49 @@ +# Security + +Flowlight watches what other software on a Mac sends, and with HTTPS inspection on it can read request and +response bodies. That makes a bug in it worth more than a bug in most apps, so reports are welcome and taken +seriously. + +## Reporting + +- **[Private vulnerability reporting](https://github.com/xinbetween/flowlight/security/advisories/new)** on + this repository. Preferred: it keeps the report, the fix and the advisory in one place. +- **security@xinbetween.com**, if you would rather not use GitHub, or cannot. + +Please don't open a public issue for something exploitable. Anything else — a crash, a wrong number, a +misleading screen — belongs in the normal issue tracker. + +## What to expect + +A first reply within three working days, and an honest assessment rather than a holding message: whether it +reproduces, whether it is a vulnerability or a bug, and what the fix looks like. If a report is not a +vulnerability, we will say so and why rather than leaving it in a queue. + +Fixes ship in the next release, and sooner where one is warranted. You will be credited in the release notes +unless you would rather not be. + +## Scope + +In scope: anything that lets software on the Mac read data Flowlight holds, escape the limits stated in the +documentation, tamper with an update, or make Flowlight report something false — a connection it did not show, +an agent it attributed to the wrong process, a rule it said was enforcing when it was not. + +Out of scope, because they are already true by design and documented: + +- **Software running as root can switch Flowlight off.** It is a monitor, not a defence against an attacker + who already owns the machine. +- **A content filter does not see everything.** Another filter can hold the one slot macOS offers, system + traffic is exempt, and traffic from before capture started never existed as far as Flowlight is concerned. +- **HTTPS inspection only reads what is routed through the proxy.** An app that ignores proxy settings or pins + its certificates is passed through untouched, by design. +- **Blocking is not prevention.** A refused connection is refused at the network layer; an agent that can run + a shell can do by hand what the refused tool would have done. + +The [threat model](https://flowlight.xinbetween.com/threat-model/) says all of this at more length, including +what Flowlight does defend against. + +## Signed releases + +Releases are signed with a Developer ID and notarized by Apple, and every release publishes `SHA256SUMS.txt`. +The in-app updater refuses a download whose checksum it cannot verify, and refuses to install an app that is +not signed by the same team as the copy asking for the update. diff --git a/docs/404.html b/docs/404.html index 0a0bf3c..85c3b69 100644 --- a/docs/404.html +++ b/docs/404.html @@ -21,10 +21,8 @@ - - - - + + @@ -36,6 +34,7 @@ AI agents Docs Privacy + Threat model Releases About GitHub diff --git a/docs/DEVELOPMENT.md b/docs/DEVELOPMENT.md index 73039c6..21fea97 100644 --- a/docs/DEVELOPMENT.md +++ b/docs/DEVELOPMENT.md @@ -79,6 +79,14 @@ TEAM_ID=ABCDE12345 scripts/build-signed.sh Run the tests with `xcodebuild -scheme Flowlight test CODE_SIGN_IDENTITY=- CODE_SIGN_ENTITLEMENTS= DEVELOPMENT_TEAM=`. +**If the checkout is under `~/Desktop`, `~/Documents` or `~/Downloads`, two tests will hang for two minutes +each and the run will fail.** `HelpTests` reads the built `docs/docs/index.html` to check that every screen's +Help anchor exists, and macOS asks for consent before the test host may read those folders — with nobody there +to click Allow, the read blocks until the test times out. Nothing is wrong with the code: the same two tests +pass in milliseconds from a checkout outside those folders, which is also why CI never sees it. Move the +checkout, or grant the test host Full Disk Access. `python3 scripts/check_site.py` asserts the same agreement +without a test host, so it is the quicker way to check that particular thing anyway. + ### Activating the extension 1. Request `content-filter-provider-systemextension` from Apple @@ -238,6 +246,43 @@ traffic and a live synthetic feed. Suspicious destinations use reserved document Check them against the flows logged on a real device (build order step 2) before relying on them. - QUIC SNI isn't decrypted. QUIC flows get their domain from the system hostname or the DNS cache. +## Website + +`site/` is the source, `docs/` is the generated site GitHub Pages serves, and both are committed — CI rebuilds +and fails if they differ. Pages are templates: `site/pages/` for English, `site/pages//` for the nine +translations, strings in `site/i18n/.json`, and `{{link:}}`, `{{t:}}`, `{{current:}}`, `{{root}}` +placeholders the build resolves. + +```sh +python3 scripts/build_site.py # regenerate docs/ +python3 scripts/check_site.py # then check what the build cannot +``` + +The build is a renderer, so anything that is still valid HTML gets published. `check_site.py` covers the ways +that has gone wrong, most of them in production: + +| Check | The bug it exists for | +| --- | --- | +| No unrendered `{{...}}` | `{{t:nav.threat-model}}` printed itself on all 51 pages — the pattern didn't allow hyphens | +| No third-party fetches | The privacy page loaded its fonts from Google, which is the one thing it promises not to do | +| Anchors exist in their target | A section added to the English docs left nine translated pages linking to `#coverage` | +| Internal links resolve | — | +| The roadmap is ahead of the newest release | "What's coming" kept listing versions you could already download | +| Translations have every English section | The same `#coverage` gap, caught at the missing section rather than at the dangling link | +| Translated roadmaps list as much as English | Nine home pages promised "the rest, in this order" and then one item | +| Every screen's `helpAnchor` has a docs section | Coverage shipped with a Help button and nothing on the page to land on | +| Screenshots exist, and none is unused | `live.png` was served to nobody for two releases | +| The views table matches the sidebar | It gave Inspect ⌘5 long after it became ⌘7, and never listed Rules, Ask, Devices or Coverage | +| One `

` per page | A translation duplicating a heading while editing | + +Three of those read the app rather than the site — `helpAnchor` and the sidebar's own order come from +`AppNavigation.swift`, so adding a screen is itself what asks for the documentation and renumbers the +shortcuts. That order is positional, which is exactly why the table drifted: inserting Rules moved every +screen after it and nothing said so. Screenshot `width`/`height` used to be on this list; the +build now stamps them from the PNG, which is better than checking a number a person has to keep correct. + +Add a rule when something slips past this list; that is cheaper than finding it twice. + ## Releasing ```sh diff --git a/docs/about/index.html b/docs/about/index.html index 34de3c3..27ab3c5 100644 --- a/docs/about/index.html +++ b/docs/about/index.html @@ -32,10 +32,8 @@ - - - - + + @@ -47,6 +45,7 @@ AI agents Docs Privacy + Threat model Releases About GitHub diff --git a/docs/assets/fonts/BricolageGrotesque-500-latin-ext.woff2 b/docs/assets/fonts/BricolageGrotesque-500-latin-ext.woff2 new file mode 100644 index 0000000..f1d35c1 Binary files /dev/null and b/docs/assets/fonts/BricolageGrotesque-500-latin-ext.woff2 differ diff --git a/docs/assets/fonts/BricolageGrotesque-500-latin.woff2 b/docs/assets/fonts/BricolageGrotesque-500-latin.woff2 new file mode 100644 index 0000000..b908aff Binary files /dev/null and b/docs/assets/fonts/BricolageGrotesque-500-latin.woff2 differ diff --git a/docs/assets/fonts/BricolageGrotesque-700-latin-ext.woff2 b/docs/assets/fonts/BricolageGrotesque-700-latin-ext.woff2 new file mode 100644 index 0000000..f1d35c1 Binary files /dev/null and b/docs/assets/fonts/BricolageGrotesque-700-latin-ext.woff2 differ diff --git a/docs/assets/fonts/BricolageGrotesque-700-latin.woff2 b/docs/assets/fonts/BricolageGrotesque-700-latin.woff2 new file mode 100644 index 0000000..b908aff Binary files /dev/null and b/docs/assets/fonts/BricolageGrotesque-700-latin.woff2 differ diff --git a/docs/assets/fonts/BricolageGrotesque-800-latin-ext.woff2 b/docs/assets/fonts/BricolageGrotesque-800-latin-ext.woff2 new file mode 100644 index 0000000..f1d35c1 Binary files /dev/null and b/docs/assets/fonts/BricolageGrotesque-800-latin-ext.woff2 differ diff --git a/docs/assets/fonts/BricolageGrotesque-800-latin.woff2 b/docs/assets/fonts/BricolageGrotesque-800-latin.woff2 new file mode 100644 index 0000000..b908aff Binary files /dev/null and b/docs/assets/fonts/BricolageGrotesque-800-latin.woff2 differ diff --git a/docs/assets/fonts/IBMPlexMono-400-latin-ext.woff2 b/docs/assets/fonts/IBMPlexMono-400-latin-ext.woff2 new file mode 100644 index 0000000..e4f67de Binary files /dev/null and b/docs/assets/fonts/IBMPlexMono-400-latin-ext.woff2 differ diff --git a/docs/assets/fonts/IBMPlexMono-400-latin.woff2 b/docs/assets/fonts/IBMPlexMono-400-latin.woff2 new file mode 100644 index 0000000..52b6c75 Binary files /dev/null and b/docs/assets/fonts/IBMPlexMono-400-latin.woff2 differ diff --git a/docs/assets/fonts/IBMPlexMono-500-latin-ext.woff2 b/docs/assets/fonts/IBMPlexMono-500-latin-ext.woff2 new file mode 100644 index 0000000..743dae3 Binary files /dev/null and b/docs/assets/fonts/IBMPlexMono-500-latin-ext.woff2 differ diff --git a/docs/assets/fonts/IBMPlexMono-500-latin.woff2 b/docs/assets/fonts/IBMPlexMono-500-latin.woff2 new file mode 100644 index 0000000..3308bce Binary files /dev/null and b/docs/assets/fonts/IBMPlexMono-500-latin.woff2 differ diff --git a/docs/assets/fonts/IBMPlexSans-400-latin-ext.woff2 b/docs/assets/fonts/IBMPlexSans-400-latin-ext.woff2 new file mode 100644 index 0000000..ee8d682 Binary files /dev/null and b/docs/assets/fonts/IBMPlexSans-400-latin-ext.woff2 differ diff --git a/docs/assets/fonts/IBMPlexSans-400-latin.woff2 b/docs/assets/fonts/IBMPlexSans-400-latin.woff2 new file mode 100644 index 0000000..e5ebabb Binary files /dev/null and b/docs/assets/fonts/IBMPlexSans-400-latin.woff2 differ diff --git a/docs/assets/fonts/IBMPlexSans-500-latin-ext.woff2 b/docs/assets/fonts/IBMPlexSans-500-latin-ext.woff2 new file mode 100644 index 0000000..ee8d682 Binary files /dev/null and b/docs/assets/fonts/IBMPlexSans-500-latin-ext.woff2 differ diff --git a/docs/assets/fonts/IBMPlexSans-500-latin.woff2 b/docs/assets/fonts/IBMPlexSans-500-latin.woff2 new file mode 100644 index 0000000..e5ebabb Binary files /dev/null and b/docs/assets/fonts/IBMPlexSans-500-latin.woff2 differ diff --git a/docs/assets/fonts/IBMPlexSans-600-latin-ext.woff2 b/docs/assets/fonts/IBMPlexSans-600-latin-ext.woff2 new file mode 100644 index 0000000..ee8d682 Binary files /dev/null and b/docs/assets/fonts/IBMPlexSans-600-latin-ext.woff2 differ diff --git a/docs/assets/fonts/IBMPlexSans-600-latin.woff2 b/docs/assets/fonts/IBMPlexSans-600-latin.woff2 new file mode 100644 index 0000000..e5ebabb Binary files /dev/null and b/docs/assets/fonts/IBMPlexSans-600-latin.woff2 differ diff --git a/docs/assets/site.css b/docs/assets/site.css index 3ebb671..625f899 100644 --- a/docs/assets/site.css +++ b/docs/assets/site.css @@ -1,3 +1,139 @@ +/* Fonts, served from this domain. + Bricolage Grotesque and IBM Plex are both under the SIL Open Font License, which allows this. They used to + load from Google Fonts, so every visit to the privacy page — the page explaining that Flowlight sends + nothing anywhere — made a request to Google carrying the reader's IP address. The page disclosed it, which + is better than hiding it, but a local-first tool shouldn't need the disclosure. + Latin and Latin Extended only: these families have no CJK glyphs, so the Chinese, Japanese and Korean pages + fall back to system fonts either way, exactly as they did before. */ +@font-face { + font-family: 'Bricolage Grotesque'; + font-style: normal; + font-weight: 500; + font-display: swap; + src: url('fonts/BricolageGrotesque-500-latin-ext.woff2') format('woff2'); + unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +@font-face { + font-family: 'Bricolage Grotesque'; + font-style: normal; + font-weight: 500; + font-display: swap; + src: url('fonts/BricolageGrotesque-500-latin.woff2') format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +@font-face { + font-family: 'Bricolage Grotesque'; + font-style: normal; + font-weight: 700; + font-display: swap; + src: url('fonts/BricolageGrotesque-700-latin-ext.woff2') format('woff2'); + unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +@font-face { + font-family: 'Bricolage Grotesque'; + font-style: normal; + font-weight: 700; + font-display: swap; + src: url('fonts/BricolageGrotesque-700-latin.woff2') format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +@font-face { + font-family: 'Bricolage Grotesque'; + font-style: normal; + font-weight: 800; + font-display: swap; + src: url('fonts/BricolageGrotesque-800-latin-ext.woff2') format('woff2'); + unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +@font-face { + font-family: 'Bricolage Grotesque'; + font-style: normal; + font-weight: 800; + font-display: swap; + src: url('fonts/BricolageGrotesque-800-latin.woff2') format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +@font-face { + font-family: 'IBM Plex Mono'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url('fonts/IBMPlexMono-400-latin-ext.woff2') format('woff2'); + unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +@font-face { + font-family: 'IBM Plex Mono'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url('fonts/IBMPlexMono-400-latin.woff2') format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +@font-face { + font-family: 'IBM Plex Mono'; + font-style: normal; + font-weight: 500; + font-display: swap; + src: url('fonts/IBMPlexMono-500-latin-ext.woff2') format('woff2'); + unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +@font-face { + font-family: 'IBM Plex Mono'; + font-style: normal; + font-weight: 500; + font-display: swap; + src: url('fonts/IBMPlexMono-500-latin.woff2') format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +@font-face { + font-family: 'IBM Plex Sans'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url('fonts/IBMPlexSans-400-latin-ext.woff2') format('woff2'); + unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +@font-face { + font-family: 'IBM Plex Sans'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url('fonts/IBMPlexSans-400-latin.woff2') format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +@font-face { + font-family: 'IBM Plex Sans'; + font-style: normal; + font-weight: 500; + font-display: swap; + src: url('fonts/IBMPlexSans-500-latin-ext.woff2') format('woff2'); + unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +@font-face { + font-family: 'IBM Plex Sans'; + font-style: normal; + font-weight: 500; + font-display: swap; + src: url('fonts/IBMPlexSans-500-latin.woff2') format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +@font-face { + font-family: 'IBM Plex Sans'; + font-style: normal; + font-weight: 600; + font-display: swap; + src: url('fonts/IBMPlexSans-600-latin-ext.woff2') format('woff2'); + unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +@font-face { + font-family: 'IBM Plex Sans'; + font-style: normal; + font-weight: 600; + font-display: swap; + src: url('fonts/IBMPlexSans-600-latin.woff2') format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} + :root { --ground: #f4f5f8; diff --git a/docs/de/about/index.html b/docs/de/about/index.html index 914a5a5..cedf273 100644 --- a/docs/de/about/index.html +++ b/docs/de/about/index.html @@ -32,10 +32,8 @@ - - - - + + @@ -47,6 +45,7 @@ KI-Agenten Dokumentation Datenschutz + Bedrohungsmodell Versionen Über GitHub diff --git a/docs/de/docs/index.html b/docs/de/docs/index.html index 71fcb4a..dfe2398 100644 --- a/docs/de/docs/index.html +++ b/docs/de/docs/index.html @@ -32,11 +32,9 @@ - - - - - + + + @@ -47,6 +45,7 @@ KI-Agenten Dokumentation Datenschutz + Bedrohungsmodell Versionen Über GitHub @@ -90,7 +89,7 @@

Flowlight benutzen

Einstellungen und Daten @@ -150,12 +149,20 @@

Die Ansichten AnsichtKurzbefehlWas sie beantwortet Live⌘1Was sich gerade bewegt: Raten pro App über die letzten Sekunden und das meistgenutzte Ziel. - KI-Agenten⌘2Welche Agenten aktiv sind, welche KI-Anbieter sie nutzen und mit wem sie sonst gesprochen haben. + KI-Agenten⌘2Welche Agenten aktiv sind, welche KI-Anbieter sie nutzen und mit wem sie sonst gesprochen haben. Berichte⌘3Wohin der Datenverkehr ging, von der Sekunde bis zum Jahr. Gruppiert nach App, Ziel oder IP; umschaltbar auf Diagramme oder Genauer hinsehen; CSV-Export. - Warnungen⌘4Alles, was ungewöhnlich aussah, mit App, Ziel und dem Wert, der die Regel ausgelöst hat. - Inspizieren⌘5Optional: entschlüsselte Anfragen der Agenten, die du über Flowlight leitest, und die Tool-Aufrufe dahinter. Die Suche reicht in Anfrage- und Antwort-Bodys hinein. - Erfassung⌘6Welche Engine aufzeichnet, der Zustand der Erweiterung, das Lernen von Hostnamen und wo die Datenbank liegt. + Warnungen⌘4Alles, was ungewöhnlich aussah, mit App, Ziel und dem Wert, der die Regel ausgelöst hat. + Regeln⌘5Jede Erlaubnisliste und jede Verweigerung, die du gesetzt hast, was jede davon abdeckt und was sie tatsächlich gestoppt hat. + Fragen⌘6Fragen zu deinem eigenen Datenverkehr in normaler Sprache, beantwortet aus der aufgezeichneten Historie von einem lokalen oder einem gehosteten Modell. + Inspizieren⌘7Optional: entschlüsselte Anfragen der Agenten, die du über Flowlight leitest, und die Tool-Aufrufe dahinter. Die Suche reicht in Anfrage- und Antwort-Bodys hinein. + Geräte⌘8Aus, bis du es einschaltest: Bluetooth, USB und externe Speicher, die ein Mac genauso nutzt wie das Netzwerk. + Abdeckung⌘9Was Flowlight nicht belegen kann – pro App, ob sein Datenverkehr gesehen, benannt und lesbar war. + Erfassung⌘0Welche Engine aufzeichnet, der Zustand der Erweiterung, das Lernen von Hostnamen und wo die Datenbank liegt. +

Die Kurzbefehle sind die Reihenfolge der Seitenleiste, deshalb ist ⌘0 das zehnte Element und keine übersprungene Position.

+
Der Bildschirm Live: eine Liste von Anwendungen mit ihren aktuellen Sende- und Empfangsraten und ihrem meistgenutzten Ziel.
+
Live, der Bildschirm, mit dem Flowlight startet.

Fahre in Berichte über einen Balken, um zu sehen, welche Apps ihn getrieben haben, klicke ihn an, um hineinzuzoomen, und doppelklicke eine Zeile, um den Bericht darauf einzugrenzen.

Regeln für KI-Agenten

@@ -290,10 +297,17 @@

HTTPS-Inspektion (optional)

und starte sie dort. Unter Erweitert kannst du nur KI-Agenten statt aller Apps entschlüsseln, die Liste der nie entschlüsselten Ziele bearbeiten, die Shell-Einrichtung für eine Shell kopieren oder das Zertifikat und alles Aufgezeichnete entfernen.

Flowlight nimmt seine eingebaute Liste von Apple-Diensten und Passwortmanagern von der Entschlüsselung aus (bearbeitbar in der Einrichtung). Apps, die ihre Zertifikate anpinnen, können das - Flowlight-Zertifikat ablehnen; Flowlight merkt das und lässt sie verschlüsselt durch. API-Schlüssel, Cookies und andere Header mit Zugangsdaten werden nie - gespeichert, aufgezeichnete Anfragen werden 3 Tage aufbewahrt, und Zertifikat & aufgezeichnete Daten entfernen löscht das Zertifikat, seine + Flowlight-Zertifikat ablehnen; Flowlight merkt das und lässt sie verschlüsselt durch. API-Schlüssel, Cookies und andere Header mit Zugangsdaten werden vor dem Speichern + durch ihre Länge ersetzt – erkannt nach Name und nach den Wörtern im Namen, was die eigene Schreibweise eines Anbieters mitfängt, aber + nicht versprechen kann, jede zu fangen –, aufgezeichnete Anfragen werden 3 Tage aufbewahrt, und Zertifikat & aufgezeichnete Daten entfernen löscht das Zertifikat, seine Vertrauenseinstellung und alles Aufgezeichnete. Die Inspektion läuft nur über HTTP/1.1 (Flowlight verlangt es von beiden Seiten) und ist im Demomodus nicht verfügbar.

+

Wie du von einer Zeile aus hierherkommst. Klicke in Live, Berichten oder KI-Agenten mit der rechten Maustaste auf eine App + oder ein Ziel und wähle Datenverkehr von … inspizieren: Inspizieren öffnet sich, und der Name steht schon im Suchfeld. Dass + es das Suchfeld ist und kein verborgener Filter, ist Absicht – du kannst die Suche erweitern, einengen oder löschen, ohne dorthin + zurückzugehen, wo du angefangen hast. Erscheinen kann nur Datenverkehr, der über den Proxy gelaufen ist; eine Zeile, von der du weißt, dass + sie viel bewegt, kann hier also trotzdem nichts zeigen.

+

Mock-Antworten

Um zu sehen, wie ein Agent damit umgeht, dass eine API scheitert, hängt oder etwas Seltsames liefert, antworte diesem Endpunkt selbst. Unter Inspizieren › Mock-Antworten nennt eine Regel Host, Pfad und Methode und gibt Status, Header, Body und eine @@ -423,6 +437,24 @@

Erfassung: Engines und Quellen

keinen Filter braucht und neben ihnen funktioniert. Wie es gebaut ist, steht im Entwicklerhandbuch.

+

Abdeckung: was Flowlight nicht belegen kann

+

Jeder andere Bildschirm beantwortet, was passiert ist. Abdeckung beantwortet, was dir nicht gesagt worden wäre – und davon + hängt ab, wie viel die anderen Bildschirme wert sind. Sie stellt pro App drei Fragen, weil die drei unabhängig voneinander scheitern.

+

Wurde es gesehen? Die Netzwerkerweiterung sieht jeden Flow beim Öffnen. Der nettop-Sampler liest Zähler einmal pro Sekunde, + eine Verbindung, die sich zwischen zwei Messungen öffnet und wieder schließt – eine DNS-Abfrage, ein kurzer API-Aufruf, ein Skript, das + curl ausführt und sich beendet –, fehlt also ganz. Das ist eine Lücke, die kein Prozentwert ausdrücken kann, und darum steht sie + in Worten da statt als Wert.

+

Wurde es benannt? Der Anteil der Bytes dieser App, die an ein Ziel mit Hostnamen gingen und nicht an eine bloße + Adresse. Bytes, nicht Verbindungen: Eine unbenannte Verbindung, die ein Gigabyte trägt, ist ein größeres Loch als hundert, die je ein + Kilobyte tragen, und Verbindungen zu zählen ordnet sie genau umgekehrt.

+

War es lesbar? Ob die HTTPS-Inspektion etwas vom Datenverkehr dieser App entschlüsselt hat. Vier Antworten, und nur eine ist + eine Lücke: Er wird gelesen; er hat den Proxy nie erreicht; die App steht auf der Liste „Nie entschlüsselt“, was deine eigene Entscheidung + ist; oder die Inspektion ist aus, was eine Einstellung ist und kein Versagen bei einer einzelnen App.

+

Was keine Engine überhaupt sieht, steht auf dem Bildschirm selbst und wird nicht dieser Seite überlassen: Datenverkehr von + vor dem Start der Erfassung, Systemdienste, die Inhaltsfiltern nie gezeigt werden, Apps, die ihre Zertifikate pinnen, QUIC, das dem Proxy nie + angeboten wird, und der lokale MCP-Server eines Agenten, der über eine Pipe mit ihm spricht. Nichts davon erscheint irgendwo in Flowlight, + also fehlt es auch in diesen Zahlen – eine Abdeckungszahl, die nur zählte, was sie sehen kann, wäre eine Beruhigung und keine Tatsache.

+

Geräte: Bluetooth, USB und externe Speicher

Ein Mac sendet und empfängt über mehr als TCP und UDP. Der Bildschirm Geräte deckt den Rest ab, und er ist aus, bis du ihn einschaltest – nicht weil es eine Berechtigung bräuchte, die Flowlight nicht schon hat, sondern weil mehr von deinem @@ -550,8 +582,9 @@

Fragen & Antworten

Es zeigt, welche Erweiterungen installiert sind, ob macOS Flowlights Filter wirklich gestartet hat und wie kürzlich überhaupt etwas aufgezeichnet wurde. Füge es in ein Issue ein.
Sendet Flowlight irgendetwas über mich irgendwohin?
-
Nein. Es gibt kein Konto, keine Telemetrie und keine Analyse. Die einzigen Anfragen, die es stellt, sind die tägliche Update-Prüfung, optionale Abfragen - zum Netzinhaber und Reverse-DNS – jede aufgelistet und jede abschaltbar, auf der Datenschutzseite.
+
Kein Konto, keine Telemetrie, keine Analyse, und deine Datenbank mit dem Datenverkehr wird nie hochgeladen. Drei Anfragen verlassen den Mac, alle auf der + Datenschutzseite aufgelistet: die tägliche Update-Prüfung und die optionale Abfrage zum Netzinhaber, beide abschaltbar, und, + solange Flowlight auf dem Sampler läuft, Reverse-DNS, für das es keinen Schalter gibt – ohne es könnte der Sampler die meisten Verbindungen nicht benennen.
Macht es meinen Mac langsamer oder leert es den Akku?
Mit geschlossenem Fenster tut Flowlight fast nichts: Es hält die Raten in der Menüleiste und schreibt eine Zeile pro Sekunde. Die Netzwerkerweiterung kostet weniger als der Sampler als Rückfallebene, der jede Sekunde einen kurzlebigen nettop-Prozess startet.
diff --git a/docs/de/index.html b/docs/de/index.html index c9897b1..9f6bb03 100644 --- a/docs/de/index.html +++ b/docs/de/index.html @@ -32,10 +32,8 @@ - - - - + + @@ -47,6 +45,7 @@ KI-Agenten Dokumentation Datenschutz + Bedrohungsmodell Versionen Über GitHub @@ -106,7 +105,7 @@

Sieh, was deine Apps im Netz tun.
-
Flowlights Ansicht KI-Agenten. Claude Code, Cursor, Codex und ein Python-Skript mit ihren KI-Anbietern, dem woanders hin gesendeten Datenverkehr und Risikomarkierungen für SMTP, SSH, FTP, einen großen Upload und eine reine IP.

Die Ansicht KI-Agenten: der Modellanbieter jedes Agenten – und alles andere, mit dem er gesprochen hat. Mit Demodaten gezeigt.

@@ -217,7 +216,9 @@

Sieh, wie KI-Agenten das Netzwerk nutzen

Regeln, so lange du willst

Nenne eine App, einen Agenten, ein Ziel oder eine einzelne URL und blockiere sie – per Rechtsklick auf die Zeile, in der du es entdeckt hast. Für immer, bis zu einer Uhrzeit, bis Flowlight beendet wird oder zwischen gewählten Stunden, mit einem Pausenschalter und einem Ausweg bei - jeder Verweigerung. Die genaueste Regel gewinnt, und bei Gleichstand gewinnt die Sperre.

+ jeder Verweigerung. Die genaueste Regel gewinnt, und bei Gleichstand gewinnt die Sperre. + Es ist Kontrolle über Software, der du schon vertraust, kein Riegel gegen + Software, der du nicht vertraust – siehe das Bedrohungsmodell.

Cursor ⇥ raw.githubusercontent.com · 4-mal verweigert · wochentags 18:00–09:00

@@ -371,16 +372,16 @@

Unterstützte Tool-Aufrufe mit Netzwerkanfragen verknüpfen

Mac. Starte einen Agenten aus einem inspizierten Terminal, und der unterstützte HTTP-Verkehr des Agenten und seiner Tools wird entschlüsselt – mit den Tool-Aufrufen, die das Modell angefordert hat, und den Ergebnissen, die zurückgingen.

-
Flowlights Ansicht Inspizieren: eine Liste entschlüsselter Anfragen von Claude Code mit ihren Tool-Aufrufen und das Detail des curl-Uploads zu paste.example, ausgelöst vom Bash-Tool-Aufruf, mit den hochgeladenen Notizen im Anfrage-Body
Wo sind meine Notizen gelandet? Der curl-Upload zu paste.example, zurückverfolgt bis zum Bash-Befehl, den das Modell angefordert hat, mit dem gesendeten Body.
-
Der Tab Tools für Claude Code: Bash, Read und zwei MCP-Tools mit Beschreibungen und der Häufigkeit, mit der das Modell sie aufgerufen hat
Jedes Tool, das ein Agent dem Modell anbietet. Agenten deklarieren ihre Tools bei jedem Zug, also listet Flowlight alle auf – mit denen, die das Modell tatsächlich genutzt hat, und denen, die es nie angefasst hat.
-
Der Tab MCP-Server für Codex: ein sentry-Server, markiert als über den Anbieter, seine URL, Freigabe auf nie gesetzt, erlaubte Tools und die Tools, die er anbietet
Auch die, die du auf der Leitung nicht siehst. Bittet ein Agent den Anbieter, sich mit einem MCP-Server zu verbinden, erreicht dieser Datenverkehr deinen Mac nie. Seine Anfrage schon – also tauchen der Server, seine URL, seine Freigabeeinstellung und seine Tools trotzdem auf.
@@ -399,9 +400,14 @@

Unterstützte Tool-Aufrufe mit Netzwerkanfragen verknüpfen

Als Nächstes

Was kommt

-

Flowlight beobachtet, erklärt und verweigert heute schon. In dieser Reihenfolge entsteht der Rest.

+

Flowlight beobachtet, erklärt und verweigert heute schon – beobachten statt verhindern, wie das + Bedrohungsmodell darlegt. In dieser Reihenfolge entsteht der Rest.

+
Ein Budget für die Inspektion 0.9.3

Aufgezeichnete Bodys sind das Sensibelste, was Flowlight aufbewahrt. Eine Erlaubnisliste für Header statt einer Sperrliste, eigene Muster, die Möglichkeit, gar keine Header zu behalten, Obergrenzen pro App und eine Sitzung, die von selbst abläuft.

+
Zeig mir, was diese Regel getan hätte 0.9.4

Spiele den letzten Tag gegen eine Regel durch und lass auflisten, was sie verweigert hätte, bevor sie überhaupt etwas verweigert. Die Daten sind schon da; sie haben bisher immer nur die Vergangenheit erklärt.

+
Was den Mac verlässt, bevor es ihn verlässt 0.9.5

Bevor die erste Zeile einen Collector erreicht: das Ziel, ob es verschlüsselt ist, welche Felder mitreisen und ob Header darunter sind – die Offenlegung, die Flowlight von allem anderen verlangt, auf sich selbst angewandt.

+
Was ein Agent außerhalb des Netzwerks getan hat 1.0

Eine Datei, die hinausgeht, ist erst ein Lesen und dann ein Senden, und sichtbar ist heute nur das Senden. Aufzuzeichnen, was die Tools eines Agenten geöffnet, geschrieben und gestartet haben, würde aus hat den privaten Schlüssel gelesen und dann mit paste.example gesprochen einen Befund machen statt zwei Bildschirme. Kein Ressourcenmonitor: CPU und Speicher sind die Aufgabe der Aktivitätsanzeige. Braucht Apples EndpointSecurity-Berechtigung, und das Inspektionsbudget von oben muss zuerst existieren.

Linux, dann Windows

Der Analysekern ist portables Swift, die Erfassung nicht. Zuerst kommt ein Linux-Daemon mit lokaler Web-Oberfläche, auf eBPF statt auf macOS-APIs.

@@ -424,7 +430,7 @@

Ein Wächter, den du nicht bewachen musst

-
Das Detail von Claude Code in Flowlight: Tools und MCP-Server mit Aufrufzahlen und einem Fehlschlag, eine Erlaubnisliste und der Tab Tool-Aufrufe mit einem fehlgeschlagenen git push, einem curl-Upload zu paste.example samt Antwort und Anfrage, npm install, einem GitHub-Issue, einer Doku-Suche und einem Datei-Lesevorgang, jeweils mit Ergebnis
Ein Agent, jeder Tool-Aufruf. Der Datenverkehr der git-, curl- und MCP-Server, die Claude Code gestartet hat, zählt als Datenverkehr von Claude Code. Mit eingeschalteter HTTPS-Inspektion zeigt der Tab Tool-Aufrufe, was das Modell angefordert hat, was zurückkam und welche Anfragen jedes Tool gestellt hat: @@ -434,10 +440,10 @@

Ein Wächter, den du nicht bewachen musst

-
Die Ansicht Berichte mit stündlichen Balken für empfangene und gesendete Daten und Ringdiagrammen für Apps, Ziele und Protokolle
Berichte. Zoom von der Sekunde bis zum Jahr, drei Gruppierungen, Diagramme, die auch bei hunderten Apps lesbar bleiben.
-
Die Ansicht Warnungen mit Warnungen zu Agenten-Exfiltration, E-Mail, FTP, Aktivität bei Abwesenheit und einer Verkehrsspitze
Warnungen. Jede nennt die App, das Ziel und den Wert, der sie ausgelöst hat.
diff --git a/docs/de/privacy/index.html b/docs/de/privacy/index.html index 9983a4c..9d0ddd1 100644 --- a/docs/de/privacy/index.html +++ b/docs/de/privacy/index.html @@ -32,10 +32,8 @@ - - - - + + @@ -47,6 +45,7 @@ KI-Agenten Dokumentation Datenschutz + Bedrohungsmodell Versionen Über GitHub @@ -101,7 +100,9 @@

HTTPS-Inspektion

Standardmäßig aus. Schaltest du sie ein, erzeugt Flowlight eine Zertifizierungsstelle auf deinem Mac (ihr Schlüssel verlässt ~/Library/Application Support/Flowlight/Inspection nie) und betreibt einen Proxy, der nur Verbindungen von diesem Mac annimmt. Für Apps, die du darüber leitest, zeichnet es Anfragen und Antworten auf, samt Bodys bis 2 MB, in der lokalen Datenbank und für 3 Tage. Header mit Zugangsdaten - (Authorization, Cookies, API-Schlüssel) werden vor dem Speichern durch ihre Länge ersetzt. Flowlight nimmt seine eingebaute Liste von Apple-Diensten und Passwortmanagern von der Entschlüsselung aus. Aufgezeichnete Inspektionsdaten werden von Flowlight nicht hochgeladen. Die Inspektion auszuschalten stoppt den Proxy; Zertifikat & aufgezeichnete + werden vor dem Speichern durch ihre Länge ersetzt – erkannt nach Name (Authorization, Cookies, API-Schlüssel) und nach den Wörtern im + Namen, sodass auch X-Access-Key erkannt wird. Das ist eine Heuristik und keine Garantie: Ein Header, der ein Geheimnis unter einem + Namen trägt, den nichts erkennt, würde aufgezeichnet. Flowlight nimmt seine eingebaute Liste von Apple-Diensten und Passwortmanagern von der Entschlüsselung aus. Aufgezeichnete Inspektionsdaten werden von Flowlight nicht hochgeladen. Die Inspektion auszuschalten stoppt den Proxy; Zertifikat & aufgezeichnete Daten entfernen löscht das Zertifikat, seine Vertrauenseinstellung und jede aufgezeichnete Anfrage.

Netzwerkanfragen, die die App stellt

@@ -109,7 +110,7 @@

Netzwerkanfragen, die die App stellt

AnfrageGesendet anWas sie enthältWann Update-Prüfungapi.github.comEine normale HTTPS-Anfrage nach der neuesten Version; GitHub sieht deine IP-Adresse und den User-Agent Flowlight/<version>Beim Start und täglich, ab 0.1.2. Abschalten in Einstellungen › Allgemein Update-Downloadgithub.comDas Image und seine PrüfsummendateiNur wenn du auf „Herunterladen & öffnen“ klickst - Reverse-DNSDer von dir eingerichtete DNS-ResolverEine Abfrage des registrierten Namens einer IP-Adresse, wenn kein Hostname gesehen wurdeNach Bedarf, im Standard-Erfassungsmodus + Reverse-DNSDer von dir eingerichtete DNS-ResolverEine Abfrage des registrierten Namens einer IP-Adresse, wenn kein Hostname gesehen wurdeNach Bedarf, im Erfassungsmodus des Samplers, der Standard ist, bis die Netzwerkerweiterung läuft. Kein Schalter zum Abschalten: ohne sie kann der Sampler die meisten Verbindungen nicht benennen. Die Netzwerkerweiterung benennt sie aus dem Datenverkehr selbst und macht diese Abfrage nicht Abfrage des NetzinhabersTeam Cymru, über DNSÖffentliche IP-Adressen ohne bekannten Hostnamen. Private und reservierte Adressen verlassen deinen Mac nieStandardmäßig ein. Abschalten in Erfassung › Netzinhaber bestimmen Fragen mit einem gehosteten ModellDer Anbieter, den du wählst: Anthropic, OpenAI, Google Gemini oder ein kompatibler EndpunktDeine Frage und die Ergebnisse der nur lesenden Flowlight-Abfragen, die das Modell ausgewählt hat. Die Verkehrsdatenbank selbst wird nicht hochgeladenNur wenn du einen gehosteten Anbieter wählst und eine Frage abschickst. Der Bildschirm Fragen zeigt die gesendeten Anfragen Export an einen CollectorDer OpenTelemetry- oder HTTP-Endpunkt, den du einrichtestDie Felder, die in Einstellungen › Export stehen, etwa Verkehrs-Rollups und Warnungen. Authentifizierungs-Header liegen im SchlüsselbundNur nachdem du einen Endpunkt eingerichtet und den Export aktiviert hast @@ -129,11 +130,15 @@

Aufbewahrung

Diese Website

Diese Seite ist eine statische Seite, gehostet auf GitHub Pages und ausgeliefert über Cloudflare. Sie setzt keine Cookies und führt keine Analyse aus. GitHub - und Cloudflare verarbeiten Anfragen, um sie auszuliefern, und die Schriften kommen von Google Fonts, das beim Besuch deine IP-Adresse erhält.

+ und Cloudflare verarbeiten Anfragen, um sie auszuliefern. Die Schriften kommen von dieser Domain, das Rendern einer Seite sendet also nichts an + irgendwen sonst – früher lud diese Seite sie von Google, was bedeutete, dass die Seite, die erklärt, dass Flowlight nichts irgendwohin sendet, + für ihre eigene Darstellung eine Anfrage an Google stellte.

Kontakt

-

Fragen oder ein Anliegen zum Datenschutz? Öffne ein Issue. Für alles Sensible nutze GitHubs - private Schwachstellenmeldung im Repository.

+

Fragen oder ein Anliegen zum Datenschutz? Öffne ein Issue. Nutze für ein Sicherheitsproblem GitHubs + private Schwachstellenmeldung oder schreib an + security@xinbetween.com, wenn du GitHub lieber nicht nutzt – was dich erwartet, steht in + SECURITY.md.

diff --git a/docs/de/threat-model/index.html b/docs/de/threat-model/index.html new file mode 100644 index 0000000..633d746 --- /dev/null +++ b/docs/de/threat-model/index.html @@ -0,0 +1,283 @@ + + + + + +Bedrohungsmodell von Flowlight + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

Bedrohungsmodell

+

Beobachten, nicht verhindern

+

Flowlight sagt dir, was Software auf deinem Mac sendet und wohin. Es ist keine Verteidigung gegen einen Angreifer, der + die Maschine schon kontrolliert, und dieser Unterschied ist wichtig genug für eine eigene Seite statt für eine Fußnote.

+
+ +
+ + +
+

Wofür es da ist

+

Flowlight beantwortet eine Frage, die der Mac nicht beantwortet: Welche App hat das gesendet, und wohin ging es? Es ist + für Software gebaut, die sich offen schlecht verhält – ein KI-Agent, der etwas kontaktiert, worum ihn niemand gebeten hat, ein Tool, das mehr + hochlädt als es sollte, ein Prozess, der mit einer Adresse ohne Namen spricht. Dieses Verhalten ist im Datenverkehr sichtbar, und Flowlights + Aufgabe ist, es lesbar zu machen – und ehrlich zu sagen, wenn es das nicht kann.

+

Es ist kein Virenschutz, kein EDR-Agent und keine Firewall in dem Sinne, dass etwas zwischen dir und einem Angreifer stünde. + Wo sich beides überschneidet – Flowlight kann Verbindungen verweigern –, ist die Verweigerung eine Bequemlichkeit, um Software zu steuern, + der du schon vertraust, kein Riegel gegen Software, der du nicht vertraust.

+ +

Wogegen es schützt

+
    +
  • Unbemerkter Abfluss. Eine App oder ein Agent sendet irgendwohin, wo du es nicht erlaubt hättest – auch über ein + Tool, das er selbst ausgeführt hat. Flowlight rechnet die Verbindung dem Prozess zu, der sie aufgebaut hat, und dem Agenten, der diesen + Prozess gestartet hat.
  • +
  • Stille Verhaltensänderungen. Eine App, die plötzlich neue Ziele kontaktiert, weit mehr bewegt als ihre + Basislinie oder arbeitet, während du weg bist. Jede Warnung nennt den Wert, der sie ausgelöst hat, damit du ihr widersprechen kannst.
  • +
  • Ein Agent, der über das Erlaubte hinausgeht. Eine Erlaubnisliste pro Agent und Regeln, die Verbindungen außerhalb davon + verweigern, mit der Verweigerung im Protokoll und einem Klick, um sie zu erlauben.
  • +
  • Ein manipuliertes Update. Zu jeder Version wird eine Prüfsumme veröffentlicht; die Updatefunktion verweigert einen + Download, den sie nicht prüfen kann, und verweigert die Installation einer App, die nicht vom selben Team signiert ist wie die Kopie, die + nach dem Update fragt.
  • +
+ +

Software mit Root-Rechten kann es abschalten

+

Flowlight läuft als du, mit einer Systemerweiterung, die macOS für es startet. Alles, was als Root läuft – oder alles, dessen + Installationsprogramm du zustimmst –, kann diese Erweiterung entladen, die App stoppen oder ihre Datenbank löschen. Nichts im Entwurf + verhindert das, und kein Überwachungswerkzeug auf macOS kann es verhindern und dabei ein Werkzeug bleiben, das du auch selbst abschalten kannst.

+

Die ehrliche Aussage ist schmaler und trotzdem nützlich: Software, die sich schlecht verhält, aber einer Überwachung nicht aktiv ausweicht, + wird gesehen. Software, die ihr aktiv ausweicht, vielleicht nicht – und sie lässt zumindest eine Lücke zurück: eine Erweiterung, die stehen + geblieben ist, ein Zeitraum ohne Daten. Dafür ist der Bildschirm Abdeckung da.

+ +

Was der Erfassung entgeht

+
    +
  • Datenverkehr von vor dem Beginn der Erfassung. Es gibt kein Nachtragen. Eine Verbindung, die vor dem Filter geöffnet + wurde, ist ihm nie angeboten worden.
  • +
  • Systemdienste, die von Inhaltsfiltern ausgenommen sind. macOS zeigt einem Inhaltsfilter nicht alles; ein Teil seines + eigenen Datenverkehrs erreicht unseren nie.
  • +
  • Ein anderer Inhaltsfilter, der den Platz hält. macOS führt einen zur Zeit aus. Hat ihn ein VPN oder ein + Sicherheitsagent, installiert sich Flowlights Filter, verbindet sich und wird nie gebeten, etwas zu filtern – Erfassung sagt das, statt einen + leeren Bildschirm zu zeigen.
  • +
  • Kurze Verbindungen, beim Sampler. Ohne die Erweiterung liest Flowlight Zähler einmal pro Sekunde: Eine Verbindung, die + zwischen zwei Messungen öffnet und schließt, wird nie aufgezeichnet.
  • +
  • Kanäle, die nicht TCP oder UDP sind. Bluetooth und USB sind als Geräte sichtbar, nicht als Bytes. Der lokale + MCP-Server eines Agenten, der über eine Pipe spricht, ist überhaupt kein Netzwerkverkehr und erscheint nirgends.
  • +
+ +

Was der Inspektion entgeht

+

Die HTTPS-Inspektion liest nur, was über Flowlights lokalen Proxy geleitet wird, und darüber entscheidet ein Programm beim Start. Eine App, + die Proxy-Einstellungen ignoriert, eine, die vor dem Einschalten der Inspektion gestartet wurde, oder eine, die ihre Zertifikate anpinnt, geht + unberührt durch – absichtlich, denn eine angepinnte Verbindung zu brechen würde die App brechen. QUIC wird dem Proxy ebenfalls nicht angeboten.

+

Ein leerer Bildschirm Inspizieren heißt also „hier wurde nichts durchgeleitet“ und nicht „es ist nichts passiert“. Abdeckung sagt pro App, + welches von beidem gilt.

+ +

Was Blockieren ist und was nicht

+

Eine Regel, die Verbindungen verweigert, wird von der Netzwerkerweiterung ausgeführt, im Weg der Verbindung, bevor sie zustande kommt. Eine + Regel, die eine URL nennt, führt stattdessen der Inspektions-Proxy aus, der die Anfrage mit einem Status beantwortet, den die App lesen kann. + Das sind die einzigen zwei Teile von Flowlight, die handeln statt zu berichten – der nettop-Sampler kann überhaupt nichts verweigern, auf einem + Mac, der mit dem Sampler erfasst, wird also keine Regel durchgesetzt, und Flowlight sagt das, statt einen Schalter anzubieten, der nichts tut.

+

Verhindern ist es trotzdem nicht. Ein Agent, der eine Shell ausführen kann, kann von Hand tun, was ein verweigertes Tool getan hätte. Eine + Verweigerung, die du mit einem Klick aufheben kannst, ist eine Verweigerung, durch die der nächste Versuch eines Agenten hindurchgehen kann. + Lokaler Datenverkehr, DNS, Apples eigene Dienste und Flowlights eigene Verbindungen werden nie verweigert, denn ein blockierter Mac ist ein + schlechteres Ergebnis als ein blockierter Agent. Und die Durchsetzung endet wenige Sekunden nachdem Flowlight nicht mehr läuft: Eine + Verweigerung, die niemand sehen kann, ist schlimmer als keine.

+

Inspektion und Verweigerung lassen sich nicht verbinden. Datenverkehr, der über Flowlights eigenen Proxy geleitet wird, + verlässt den Mac als Flowlights Datenverkehr, und Flowlight verweigert sich selbst nie – eine App, deren Anfragen du liest, ist also eine App, + deren Verbindungen Regeln nicht mehr stoppen. Die Inspektion einzuschalten, um mehr zu sehen, kostet dich die Durchsetzung, und auf dem + Bildschirm stand das vorher nirgends.

+ +

Was Flowlight selbst aufbewahrt

+

Metadaten zum Datenverkehr in einer lokalen SQLite-Datenbank, mit veröffentlichten Aufbewahrungsfristen. Bei eingeschalteter + HTTPS-Inspektion außerdem Anfrage- und Antwort-Bodys für drei Tage – das Sensibelste, was es überhaupt aufbewahrt. Header mit Zugangsdaten + werden nach Name und nach Wortbestandteil unlesbar gemacht, was eine Heuristik ist und keine Garantie; ein Header, der ein Geheimnis unter + einem Namen trägt, den nichts erkennt, kann aufgezeichnet werden.

+

Die Datenbank mit dem Datenverkehr wird nie hochgeladen. Drei kleinere Dinge verlassen den Mac, ohne dass jemand danach fragt, alle drei auf der + Datenschutzseite benannt: die Update-Prüfung, die GitHub beim Start und täglich nach der neuesten Version + fragt; die Abfrage zum Netzinhaber, die Team Cymru nach öffentlichen Adressen ohne Hostnamen fragt; und, solange Flowlight Zähler liest + statt seine Erweiterung zu betreiben, eine Reverse-DNS-Abfrage der Adressen, zu denen es keinen Namen gesehen hat. Die ersten beiden haben + Schalter zum Abschalten. Die dritte nicht, denn auf dem Sampler ist sie fast der einzige Weg, auf dem eine Verbindung überhaupt zu einem + Namen kommt – sie geht an den Resolver, den der Mac schon benutzt, und sie hört auf, sobald die Erweiterung übernimmt und Verbindungen aus dem + Datenverkehr selbst benennt. Fragen mit einem gehosteten Modell sendet weit mehr als alle drei und ist das eine, das aus bleibt, bis du es + einrichtest.

+ +

Updates

+

Versionen sind mit einer Developer ID signiert und notarisiert. Die Updatefunktion verlangt eine veröffentlichte Prüfsumme und verweigert + einen Download ohne sie, und prüft dann vor der Installation, dass die heruntergeladene App vom selben Team signiert ist wie die laufende + Kopie. Ein Update, das jemand anderes signiert hat, wird verweigert, auch wenn es sonst gültig ist.

+ +

Eine Schwachstelle melden

+

Nutze GitHubs private Schwachstellenmeldung oder schreib an + security@xinbetween.com, wenn du GitHub lieber nicht nutzt. + SECURITY.md sagt, was in den Rahmen fällt und was du erwarten kannst. + Ein gewöhnlicher Fehler – ein Absturz, eine falsche Zahl, ein irreführender Bildschirm – gehört stattdessen in + den Issue-Tracker.

+
+
+
+ + + + + diff --git a/docs/docs/index.html b/docs/docs/index.html index f5ef672..afd7d08 100644 --- a/docs/docs/index.html +++ b/docs/docs/index.html @@ -32,11 +32,9 @@ - - - - - + + + @@ -47,6 +45,7 @@ AI agents Docs Privacy + Threat model Releases About GitHub @@ -150,12 +149,20 @@

The views

- + - - - + + + + + + +
ViewShortcutWhat it answers
Live⌘1What's moving right now: per-app rates over the last few seconds and the busiest destination.
AI Agents⌘2Which agents are active, which AI providers they use, and what else they contacted.
AI Agents⌘2Which agents are active, which AI providers they use, and what else they contacted.
Reports⌘3Where traffic went, from second to year. Group by App, Destination or IP; switch to Charts or Worth a look; export CSV.
Alerts⌘4Everything that looked unusual, with the app, the destination and the number that tripped the rule.
Inspect⌘5Optional: decrypted requests from the agents you route through Flowlight, and the tool calls behind them. Search reaches into request and response bodies.
Capture⌘6Which engine is recording, the extension's state, hostname learning, and where the database lives.
Alerts⌘4Everything that looked unusual, with the app, the destination and the number that tripped the rule.
Rules⌘5Every allowlist and refusal you have set, what each one covers, and what it has actually stopped.
Ask⌘6Questions about your own traffic in plain language, answered from the recorded history by a local or a hosted model.
Inspect⌘7Optional: decrypted requests from the agents you route through Flowlight, and the tool calls behind them. Search reaches into request and response bodies.
Devices⌘8Off until you turn it on: Bluetooth, USB and external storage, which a Mac uses as much as it uses the network.
Coverage⌘9What Flowlight cannot account for — per app, whether its traffic was seen, named, and readable.
Capture⌘0Which engine is recording, the extension's state, hostname learning, and where the database lives.
+

The shortcuts are the sidebar's order, so ⌘0 is the tenth item rather than a skipped position.

+
The Live screen: a list of applications with their current send and receive rates and busiest destination.
+
Live, the screen Flowlight opens on.

In Reports, hover a bar to see which apps drove it, click it to zoom in, and double-click any row to narrow the report to it.

AI agent rules

@@ -290,10 +297,16 @@

HTTPS inspection (optional)

and start them there. Under Advanced you can decrypt AI agents only instead of every app, edit the never-decrypt list, copy the shell setup for one shell, or remove the certificate and everything recorded.

Flowlight excludes its built-in list of Apple services and password managers from decryption (edit the list in Setup). Apps that pin their certificates may reject the - Flowlight certificate; Flowlight notices and passes them through encrypted. API keys, cookies and other credential headers are never - stored, recorded requests are kept 3 days, and Remove Certificate & Recorded Data deletes the certificate, its trust + Flowlight certificate; Flowlight notices and passes them through encrypted. API keys, cookies and other credential headers are replaced with their + length before anything is stored — matched by name and by the words in the name, which catches a vendor's own spelling but + cannot promise to catch every one — recorded requests are kept 3 days, and Remove Certificate & Recorded Data deletes the certificate, its trust setting and everything recorded. Inspection is HTTP/1.1 only (Flowlight asks both sides for it) and not available in demo mode.

+

Getting here from a row. Right-click an app or a destination in Live, Reports or AI Agents and + choose Inspect …'s Traffic: Inspect opens with that name already in the search field. It is the search + field rather than a hidden filter on purpose — you can widen it, narrow it or clear it without going back to where you + started. Only traffic that went through the proxy can appear, so a row you know is busy may still show nothing here.

+

Mock responses

To see how an agent copes when an API fails, stalls or returns something odd, answer that endpoint yourself. In Inspect › Mock responses, a rule names a host, a path and a method, and gives the status, headers, body and an @@ -423,16 +436,11 @@

Capture: engines and sources

needs no filter and works alongside them. See the developer guide for how it's built.

-

Getting here from a row. Right-click an app or a destination in Live, Reports or AI Agents and - choose Inspect …'s Traffic: Inspect opens with that name already in the search field. It is the search - field rather than a hidden filter on purpose — you can widen it, narrow it or clear it without going back to where you - started. Only traffic that went through the proxy can appear, so a row you know is busy may still show nothing here.

-

Coverage: what Flowlight can't account for

Every other screen answers what happened. Coverage answers what you would not have been told, which is what decides how much the other screens are worth. It asks three questions per app, because they fail independently.

Was it seen? The Network Extension sees each flow as it opens. The nettop sampler reads counters once a - second, so a connection that opens and closes between two readings — a DNS lookup, a fast API call, a script that runs curl + second, so a connection that opens and closes between two readings — a DNS lookup, a fast API call, a script that runs curl and exits — is missing entirely. That is a gap no percentage can express, so it is stated in words rather than scored.

Was it named? The share of that app's bytes that went to a destination with a hostname rather than a bare address. Bytes, not connections: one unnamed connection carrying a gigabyte is a bigger hole than a hundred carrying a @@ -573,8 +581,9 @@

Questions & answers

It shows which extensions are installed, whether macOS actually started Flowlight's filter, and how recently anything was recorded. Paste it into an issue.
Does Flowlight send anything about me anywhere?
-
No. There's no account, no telemetry and no analytics. The only requests it makes are the daily update check, optional network-owner - lookups, and reverse DNS — each listed, and each with an off switch, on the privacy page.
+
No account, no telemetry, no analytics, and your traffic database is never uploaded. Three requests do leave the Mac, all listed on the + privacy page: the daily update check and the optional network-owner lookup, both with off switches, and + reverse DNS while Flowlight is on the sampler, which has none — without it the sampler could not name most connections.
Will it slow my Mac down or drain the battery?
With the window closed Flowlight does almost nothing: it keeps the menu bar rates and writes one row a second. The Network Extension costs less than the fallback sampler, which starts a short-lived nettop process every second.
diff --git a/docs/es/about/index.html b/docs/es/about/index.html index 43198a3..0be0c30 100644 --- a/docs/es/about/index.html +++ b/docs/es/about/index.html @@ -32,10 +32,8 @@ - - - - + + @@ -47,6 +45,7 @@ Agentes de IA Documentación Privacidad + Modelo de amenazas Versiones Acerca de GitHub diff --git a/docs/es/docs/index.html b/docs/es/docs/index.html index 2719db3..3d855f7 100644 --- a/docs/es/docs/index.html +++ b/docs/es/docs/index.html @@ -32,11 +32,9 @@ - - - - - + + + @@ -47,6 +45,7 @@ Agentes de IA Documentación Privacidad + Modelo de amenazas Versiones Acerca de GitHub @@ -90,7 +89,7 @@

Usar Flowlight

Ajustes y datos @@ -150,12 +149,20 @@

Las vistas

- + - - - + + + + + + +
VistaAtajoQué responde
En vivo⌘1Qué se mueve ahora mismo: tasas por app en los últimos segundos y el destino más activo.
Agentes de IA⌘2Qué agentes están activos, qué proveedores de IA usan y con qué más han contactado.
Agentes de IA⌘2Qué agentes están activos, qué proveedores de IA usan y con qué más han contactado.
Informes⌘3Adónde fue el tráfico, del segundo al año. Agrupa por App, Destino o IP; cambia a Gráficos o a Merece un vistazo; exporta a CSV.
Alertas⌘4Todo lo que ha resultado inusual, con la app, el destino y la cifra que activó la regla.
Inspeccionar⌘5Opcional: las peticiones descifradas de los agentes que encamines por Flowlight, y las llamadas de herramientas que hay detrás. La búsqueda llega a los cuerpos de las peticiones y las respuestas.
Captura⌘6Qué motor está registrando, el estado de la extensión, el aprendizaje de nombres de host y dónde está la base de datos.
Alertas⌘4Todo lo que ha resultado inusual, con la app, el destino y la cifra que activó la regla.
Reglas⌘5Cada lista de permitidos y cada rechazo que hayas puesto, qué abarca cada uno y qué ha detenido realmente.
Preguntar⌘6Preguntas sobre tu propio tráfico en lenguaje corriente, respondidas a partir del historial registrado por un modelo local o alojado.
Inspeccionar⌘7Opcional: las peticiones descifradas de los agentes que encamines por Flowlight, y las llamadas de herramientas que hay detrás. La búsqueda llega a los cuerpos de las peticiones y las respuestas.
Dispositivos⌘8Desactivado hasta que lo enciendes: Bluetooth, USB y almacenamiento externo, que un Mac usa tanto como usa la red.
Cobertura⌘9Lo que Flowlight no puede contabilizar — por app, si su tráfico se vio, se nombró y se pudo leer.
Captura⌘0Qué motor está registrando, el estado de la extensión, el aprendizaje de nombres de host y dónde está la base de datos.
+

Los atajos son el orden de la barra lateral, así que ⌘0 es el décimo elemento y no una posición omitida.

+
La pantalla En vivo: una lista de aplicaciones con sus tasas actuales de envío y recepción y su destino más activo.
+
En vivo, la pantalla con la que se abre Flowlight.

En Informes, pasa el cursor por una barra para ver qué apps la generaron, haz clic para ampliar y haz doble clic en cualquier fila para limitar el informe a ella.

Reglas de los agentes de IA

@@ -290,10 +297,16 @@

Inspección HTTPS (opcional)

y arráncalos ahí. En Avanzado puedes descifrar solo los agentes de IA en lugar de todas las apps, editar la lista de lo que nunca se descifra, copiar la configuración de shell para un shell concreto, o eliminar el certificado y todo lo registrado.

Flowlight excluye del descifrado su lista integrada de servicios de Apple y gestores de contraseñas (edita la lista en la configuración inicial). Las apps que fijan sus certificados pueden rechazar el - certificado de Flowlight; Flowlight lo detecta y las deja pasar cifradas. Las claves de API, las cookies y otras cabeceras con credenciales no se - guardan nunca, las peticiones registradas se conservan 3 días y Eliminar el certificado y los datos registrados borra el certificado, su ajuste + certificado de Flowlight; Flowlight lo detecta y las deja pasar cifradas. Las claves de API, las cookies y otras cabeceras con credenciales se + sustituyen por su longitud antes de guardar nada — reconocidas por el nombre y por las palabras del nombre, lo que atrapa la grafía propia + de un proveedor pero no puede prometer atraparlas todas —, las peticiones registradas se conservan 3 días y Eliminar el certificado y los datos registrados borra el certificado, su ajuste de confianza y todo lo registrado. La inspección es solo HTTP/1.1 (Flowlight lo pide a ambos lados) y no está disponible en el modo demo.

+

Cómo llegar aquí desde una fila. Haz clic derecho en una app o en un destino en En vivo, Informes o Agentes de IA y elige + Inspeccionar el tráfico de …: Inspeccionar se abre con ese nombre ya puesto en el campo de búsqueda. Que sea el campo de + búsqueda y no un filtro oculto es a propósito — puedes ampliarlo, estrecharlo o vaciarlo sin volver a donde empezaste. Solo puede aparecer + el tráfico que pasó por el proxy, así que una fila que sabes que está movida puede no mostrar nada aquí.

+

Respuestas simuladas

Para ver cómo se las arregla un agente cuando una API falla, se queda colgada o devuelve algo raro, responde tú por ese endpoint. En Inspeccionar › Respuestas simuladas, una regla nombra un host, una ruta y un método, e indica el estado, las cabeceras, el cuerpo y un @@ -423,6 +436,24 @@

Captura: motores y fuentes

no necesita filtro y funciona junto a ellos. Consulta la guía para desarrolladores para ver cómo está construido.

+

Cobertura: lo que Flowlight no puede contabilizar

+

Todas las demás pantallas responden qué pasó. Cobertura responde qué no te habrían contado, que es lo que decide cuánto + valen las demás pantallas. Hace tres preguntas por app, porque fallan de forma independiente.

+

¿Se vio? La extensión de red ve cada flujo en el momento en que se abre. El muestreador nettop lee contadores una vez por + segundo, así que una conexión que se abre y se cierra entre dos lecturas — una consulta DNS, una llamada de API veloz, un script que ejecuta + curl y sale — falta por completo. Eso es un hueco que ningún porcentaje puede expresar, así que se dice con palabras en lugar de + puntuarlo.

+

¿Se nombró? La proporción de los bytes de esa app que fueron a un destino con nombre de host y no a una dirección a + secas. Bytes, no conexiones: una conexión sin nombre que lleva un gigabyte es un agujero mayor que cien que llevan un kilobyte cada una, y + contar conexiones las ordena al revés.

+

¿Era legible? Si la inspección HTTPS descifró algo del tráfico de esa app. Cuatro respuestas, y solo una es un hueco: se está + leyendo; no llegó nunca al proxy; la app está en la lista de nunca descifrados, que es una decisión tuya; o la inspección está desactivada, + que es un ajuste y no un fallo app por app.

+

Lo que ningún motor ve en absoluto está listado en la pantalla misma y no se deja a esta página: el tráfico anterior al + inicio de la captura, los servicios del sistema que nunca se muestran a los filtros de contenido, las apps que fijan sus certificados, el QUIC + que nunca se le ofrece al proxy y el servidor MCP local de un agente que habla con él por una tubería. Nada de eso aparece en ningún sitio de + Flowlight, así que también falta en estas cifras — una cifra de cobertura que contara solo lo que puede ver sería un consuelo y no un hecho.

+

Dispositivos: Bluetooth, USB y almacenamiento externo

Un Mac envía y recibe por más vías que TCP y UDP. La pantalla Dispositivos cubre el resto, y está desactivada hasta que la actives: no porque necesite un permiso que Flowlight no tenga ya, sino porque vigilar más cosas de tu @@ -550,8 +581,9 @@

Preguntas y respuestas

Muestra qué extensiones están instaladas, si macOS arrancó de verdad el filtro de Flowlight y cuándo se registró algo por última vez. Pégalo en una incidencia.
¿Flowlight envía algo sobre mí a alguna parte?
-
No. No hay cuenta, ni telemetría, ni analítica. Las únicas peticiones que hace son la comprobación diaria de actualizaciones, las consultas opcionales sobre el - propietario de la red y el DNS inverso: cada una está listada y cada una tiene su interruptor para desactivarla, en la página de privacidad.
+
Sin cuenta, sin telemetría, sin analítica, y tu base de datos de tráfico nunca se sube. Tres peticiones sí salen del Mac, todas listadas en la + página de privacidad: la comprobación diaria de actualizaciones y la consulta opcional del propietario de la red, las dos con + interruptor para desactivarlas, y el DNS inverso mientras Flowlight está en el muestreador, que no lo tiene — sin él el muestreador no podría nombrar la mayoría de las conexiones.
¿Ralentizará mi Mac o gastará la batería?
Con la ventana cerrada, Flowlight casi no hace nada: mantiene las tasas de la barra de menús y escribe una fila por segundo. La extensión de red cuesta menos que el muestreador de reserva, que arranca un proceso nettop efímero cada segundo.
diff --git a/docs/es/index.html b/docs/es/index.html index aa4cb64..1bfc933 100644 --- a/docs/es/index.html +++ b/docs/es/index.html @@ -32,10 +32,8 @@ - - - - + + @@ -47,6 +45,7 @@ Agentes de IA Documentación Privacidad + Modelo de amenazas Versiones Acerca de GitHub @@ -106,7 +105,7 @@

Observa la actividad de red de tus apps.
-
La vista Agentes de IA de Flowlight. Claude Code, Cursor, Codex y un script de Python aparecen con sus proveedores de IA, el tráfico enviado a otros sitios y distintivos de riesgo por SMTP, SSH, FTP, una subida grande y una IP directa.

La vista Agentes de IA: el proveedor de modelo de cada agente y todo lo demás con lo que habló. Con datos de demostración.

@@ -217,7 +216,9 @@

Vigila cómo usan la red los agentes de IA

Reglas, el tiempo que tú digas

Señala una app, un agente, un destino o una sola URL y bloquéalo: clic derecho en la fila donde lo has visto. Para siempre, hasta una hora, hasta que Flowlight se cierre o entre las horas que elijas, con un único interruptor de pausa y una salida en - cada rechazo. Gana la regla más específica y, en caso de empate, gana el bloqueo.

+ cada rechazo. Gana la regla más específica y, en caso de empate, gana el bloqueo. + Es control sobre software en el que ya confías, no una barrera contra + software en el que no — mira el modelo de amenazas.

Cursor ⇥ raw.githubusercontent.com · rechazada 4 veces · de lunes a viernes 18:00–09:00

@@ -371,16 +372,16 @@

Correlaciona las llamadas de herramientas compatibles con las peticiones de Mac. Arranca un agente desde un Terminal inspeccionado y el tráfico HTTP compatible del agente y de sus herramientas se descifra, con las llamadas de herramientas que pidió el modelo y los resultados que volvieron.

-
La vista Inspeccionar de Flowlight: una lista de peticiones descifradas de Claude Code con sus llamadas de herramientas, y el detalle de la subida de curl a paste.example, hecha por la llamada de herramienta Bash que la ejecutó, con las notas subidas en el cuerpo de la petición
¿Adónde han ido mis notas? La subida de curl a paste.example, rastreada hasta el comando Bash que pidió el modelo, con el cuerpo que envió.
-
La pestaña Herramientas de Claude Code: Bash, Read y dos herramientas MCP con sus descripciones y cuántas veces las llamó el modelo
Todas las herramientas que un agente ofrece al modelo. Los agentes declaran sus herramientas en cada turno, así que Flowlight las lista todas, señalando las que el modelo usó de verdad y las que no tocó nunca.
-
La pestaña Servidores MCP de Codex: un servidor sentry marcado como vía proveedor, su URL, la aprobación fijada en nunca, las herramientas permitidas y las que ofrece
Incluidos los que no se ven en el cable. Cuando un agente pide al proveedor que conecte con un servidor MCP, ese tráfico nunca llega a tu Mac. Su petición sí, así que el servidor, su URL, su ajuste de aprobación y sus herramientas siguen apareciendo.
@@ -399,9 +400,14 @@

Correlaciona las llamadas de herramientas compatibles con las peticiones de

Lo siguiente

Qué viene ahora

-

Flowlight ya observa, explica y rechaza. Este es el orden en el que se está construyendo el resto.

+

Flowlight ya observa, explica y rechaza — observar en vez de impedir, como expone el + modelo de amenazas. Este es el orden en el que se está construyendo el resto.

+
Un presupuesto para la inspección 0.9.3

Los cuerpos registrados son lo más delicado que guarda Flowlight. Una lista de permitidos para las cabeceras en vez de una lista de bloqueados, patrones propios, la opción de no guardar ninguna cabecera, topes por app y una sesión que caduca por sí sola.

+
Muéstrame qué habría hecho esta regla 0.9.4

Reproduce el último día contra una regla y enumera lo que habría rechazado, antes de que rechace nada. Los datos ya están ahí; hasta ahora solo han explicado el pasado.

+
Qué sale del Mac, antes de que salga 0.9.5

Antes de que la primera fila llegue a un colector: el destino, si va cifrado, qué campos viajan y si alguno es una cabecera — la divulgación que Flowlight exige de todo lo demás, aplicada a sí mismo.

+
Qué hizo un agente aparte de la red 1.0

Un archivo que sale es una lectura y luego un envío, y hoy solo el envío es visible. Registrar lo que las herramientas de un agente abrieron, escribieron y lanzaron convertiría leyó la clave privada y después habló con paste.example en un solo hallazgo en lugar de dos pantallas. No es un monitor de recursos: la CPU y la memoria son cosa del Monitor de Actividad. Necesita el permiso de EndpointSecurity de Apple, y antes tiene que existir el presupuesto de inspección de arriba.

Linux, después Windows

El núcleo de análisis es Swift portable; la captura no lo es. Primero llegará un demonio para Linux con interfaz web local, sobre eBPF en lugar de las API de macOS.

@@ -424,7 +430,7 @@

Un monitor que no tienes que vigilar

-
El detalle de Claude Code en Flowlight: herramientas y servidores MCP con su número de llamadas y un fallo, una lista de permitidos y la pestaña Llamadas de herramientas con un git push fallido, una subida de curl a paste.example con su respuesta y su petición, un npm install, una incidencia de GitHub, una búsqueda en la documentación y una lectura de archivo, cada una con su resultado
Un agente, todas sus llamadas de herramientas. El tráfico del git, del curl y de los servidores MCP que arrancó Claude Code cuenta como de Claude Code. Con la inspección HTTPS activada, la pestaña Llamadas de herramientas muestra qué pidió el modelo, qué volvió y las peticiones que hizo cada herramienta: @@ -434,10 +440,10 @@

Un monitor que no tienes que vigilar

-
La vista Informes con barras por hora de datos recibidos y enviados y gráficos de anillo de apps, destinos y protocolos
Informes. Zoom del segundo al año, tres agrupaciones y gráficos que siguen legibles con cientos de apps.
-
La vista Alertas con alertas de exfiltración por un agente, de correo, de FTP, de actividad mientras no estás y de picos de tráfico
Alertas. Cada una nombra la app, el destino y la cifra que la activó.
diff --git a/docs/es/privacy/index.html b/docs/es/privacy/index.html index 56ada52..8a09cc6 100644 --- a/docs/es/privacy/index.html +++ b/docs/es/privacy/index.html @@ -32,10 +32,8 @@ - - - - + + @@ -47,6 +45,7 @@ Agentes de IA Documentación Privacidad + Modelo de amenazas Versiones Acerca de GitHub @@ -101,7 +100,9 @@

Inspección HTTPS

Desactivada por defecto. Si la activas, Flowlight crea una autoridad de certificación en tu Mac (su clave no sale nunca de ~/Library/Application Support/Flowlight/Inspection) y ejecuta un proxy que acepta conexiones solo de este Mac. En las apps que encamines por él, registra las peticiones y las respuestas, incluidos los cuerpos de hasta 2 MB, en la base de datos local durante 3 días. Las cabeceras con credenciales - (Authorization, cookies, claves de API) se sustituyen por su longitud antes de guardar nada. Flowlight excluye del descifrado su lista integrada de servicios de Apple y gestores de contraseñas. Flowlight no sube los datos de inspección registrados. Al desactivar la inspección se detiene el proxy; Eliminar el certificado y los datos + se sustituyen por su longitud antes de guardar nada — reconocidas por el nombre (Authorization, cookies, claves de API) y por las palabras + del nombre, así que X-Access-Key también se atrapa. Eso es una heurística, no una garantía: una cabecera que lleve un secreto con un + nombre que nada reconoce quedaría registrada. Flowlight excluye del descifrado su lista integrada de servicios de Apple y gestores de contraseñas. Flowlight no sube los datos de inspección registrados. Al desactivar la inspección se detiene el proxy; Eliminar el certificado y los datos registrados borra el certificado, su ajuste de confianza y todas las peticiones registradas.

Peticiones de red que hace la app

@@ -109,7 +110,7 @@

Peticiones de red que hace la app

PeticiónEnviada aQué contieneCuándo Comprobación de actualizacionesapi.github.comUna petición HTTPS normal de la última versión; GitHub ve tu dirección IP y el agente de usuario Flowlight/<version>Al arrancar y a diario, desde la 0.1.2. Interruptor para desactivarla en Ajustes › General Descarga de la actualizacióngithub.comLa imagen de disco y su archivo de suma de verificaciónSolo cuando pulsas Descargar y abrir - DNS inversoEl servidor DNS que tengas configuradoUna consulta del nombre registrado de una dirección IP, cuando no se ha visto ningún nombre de hostSegún haga falta, en el modo de captura predeterminado + DNS inversoEl servidor DNS que tengas configuradoUna consulta del nombre registrado de una dirección IP, cuando no se ha visto ningún nombre de hostSegún haga falta, en el modo de captura del muestreador, que es el predeterminado hasta que la extensión de red esté en marcha. Sin interruptor para desactivarla: sin ella el muestreador no puede nombrar la mayoría de las conexiones. La extensión de red las nombra a partir del propio tráfico y no hace esta consulta Consulta del propietario de la redTeam Cymru, por DNSDirecciones IP públicas sin nombre de host conocido. Las direcciones privadas y reservadas no salen nunca de tu MacActivada por defecto. Interruptor para desactivarla en Captura › Identificar a los propietarios de la red Preguntar con un modelo alojadoEl proveedor que elijas: Anthropic, OpenAI, Google Gemini o un endpoint compatibleTu pregunta y los resultados que devuelvan las consultas de solo lectura de Flowlight que elija el modelo. La base de datos de tráfico en sí no se subeSolo cuando eliges un proveedor alojado y envías una pregunta. La pantalla Preguntar muestra las peticiones transmitidas Exportación a un colectorEl endpoint de OpenTelemetry o de HTTP que configuresLos campos que se muestran en Ajustes › Exportación, como los agregados de tráfico y las alertas. Las cabeceras de autenticación se guardan en el llaveroSolo después de que configures un endpoint y actives la exportación @@ -129,11 +130,15 @@

Conservación

Este sitio web

Este sitio es una página estática alojada en GitHub Pages y servida a través de Cloudflare. No pone cookies y no ejecuta analítica. GitHub - y Cloudflare procesan las peticiones para servirlo, y las tipografías se cargan desde Google Fonts, que recibe tu dirección IP cuando lo visitas.

+ y Cloudflare procesan las peticiones para servirlo. Las tipografías se sirven desde este dominio, así que representar una página no envía nada + a nadie más: esta página antes las cargaba de Google, lo que significaba que la página que explica que Flowlight no envía nada a ninguna parte + hacía una petición a Google para representarse a sí misma.

Contacto

-

¿Dudas o alguna preocupación sobre privacidad? Abre una incidencia. Para cualquier asunto delicado, usa el - informe privado de vulnerabilidades de GitHub en el repositorio.

+

¿Dudas o alguna preocupación sobre privacidad? Abre una incidencia. Para un problema de seguridad, usa el + informe privado de vulnerabilidades de GitHub, o escribe a + security@xinbetween.com si prefieres no usar GitHub: consulta + SECURITY.md para saber qué esperar.

diff --git a/docs/es/threat-model/index.html b/docs/es/threat-model/index.html new file mode 100644 index 0000000..bbd8772 --- /dev/null +++ b/docs/es/threat-model/index.html @@ -0,0 +1,278 @@ + + + + + +Modelo de amenazas de Flowlight + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

Modelo de amenazas

+

Observar, no impedir

+

Flowlight te dice qué está enviando el software de tu Mac y adónde. No es una defensa frente a un atacante que ya + controla la máquina, y la diferencia importa lo suficiente para decirla en una página propia en lugar de en una nota al pie.

+
+ +
+ + +
+

Para qué sirve

+

Flowlight responde a una pregunta que el Mac no responde: ¿qué app ha enviado esto y adónde ha ido? Está hecho para + software que se porta mal a la vista de todos: un agente de IA que contacta con algo que nadie le ha pedido, una herramienta que sube más de + lo que debería, un proceso que habla con una dirección que no tiene nombre. Ese comportamiento se ve en el tráfico, y el trabajo de Flowlight + es hacerlo legible y decir con honestidad cuándo no puede.

+

No es un antivirus, ni un agente de EDR, ni un cortafuegos en el sentido de algo que se interpone entre tú y un atacante. Donde ambas cosas + se solapan —Flowlight puede rechazar conexiones—, el rechazo es una comodidad para controlar software en el que ya confías, no una barrera + contra software en el que no.

+ +

De qué defiende

+
    +
  • Salida de datos que pasa inadvertida. Una app o un agente que envía a un sitio que no habrías aprobado, incluso a través + de una herramienta que ha ejecutado él mismo. Flowlight atribuye la conexión al proceso que la hizo y al agente que arrancó ese proceso.
  • +
  • Cambios silenciosos de comportamiento. Una app que de pronto contacta con destinos nuevos, mueve mucho más que su línea + base o trabaja mientras estás fuera. Cada alerta dice qué cifra la disparó, para que puedas no estar de acuerdo con ella.
  • +
  • Un agente que se pasa de lo que permitiste. Una lista de permitidos por agente, y reglas que rechazan las conexiones + fuera de ella, con el rechazo registrado y un clic para permitirlo.
  • +
  • Una actualización manipulada. Cada versión publica una suma de comprobación; el actualizador rechaza una descarga que no + puede verificar y se niega a instalar una app que no esté firmada por el mismo equipo que la copia que pide la actualización.
  • +
+ +

El software con root puede apagarlo

+

Flowlight se ejecuta como tú, con una extensión del sistema que macOS arranca en su nombre. Cualquier cosa que se ejecute como root —o + cualquier cosa cuyo instalador apruebes— puede descargar esa extensión, detener la app o borrar su base de datos. Nada en el diseño lo impide, + y ninguna herramienta de monitorización en macOS puede impedirlo y seguir siendo una herramienta que también puedas apagar tú.

+

La afirmación honesta es más estrecha y sigue siendo útil: el software que se porta mal pero no elude activamente un monitor se verá. El + software que sí lo elude activamente puede no verse, y al menos dejará un hueco —una extensión que se detuvo, un periodo sin datos— que la + pantalla Cobertura está ahí para mostrar.

+ +

Lo que la captura se pierde

+
    +
  • El tráfico anterior al inicio de la captura. No hay relleno retroactivo. Una conexión que se abrió antes que el filtro + nunca se le ofreció.
  • +
  • Los servicios del sistema exentos de los filtros de contenido. macOS no le muestra todo a un filtro de contenido; parte + de su propio tráfico no llega nunca al nuestro.
  • +
  • Otro filtro de contenido que ocupa el sitio. macOS ejecuta uno a la vez. Si lo tiene una VPN o un agente de seguridad, el + filtro de Flowlight se instala, se conecta y nunca se le pide filtrar nada: Captura lo dice en vez de mostrar una pantalla vacía.
  • +
  • Las conexiones cortas, con el muestreador. Sin la extensión, Flowlight lee contadores una vez por segundo: una conexión + que se abre y se cierra entre dos lecturas no se registra nunca.
  • +
  • Los canales que no son TCP ni UDP. Bluetooth y USB se ven como dispositivos, no como bytes. El servidor MCP local de un + agente que habla por una tubería no es tráfico de red en absoluto y no aparece en ningún sitio.
  • +
+ +

Lo que la inspección se pierde

+

La inspección HTTPS lee solo lo que se encamina por el proxy local de Flowlight, y eso lo decide un programa cuando arranca. Una app que + ignora los ajustes de proxy, una que se arrancó antes de activar la inspección, o una que fija sus certificados pasa intacta: a propósito, + porque romper una conexión con certificado fijado rompería la app. QUIC tampoco se le ofrece al proxy.

+

Así que una pantalla Inspeccionar vacía significa «aquí no se ha encaminado nada», no «no ha pasado nada». Cobertura dice cuál de las dos + cosas se aplica, app por app.

+ +

Qué es bloquear, y qué no

+

De una regla que rechaza conexiones se encarga la extensión de red, en el camino, antes de que la conexión se haga. De una regla que nombra + una URL se encarga en cambio el proxy de inspección, que responde a la petición con un estado que la app puede leer. Esas son las dos únicas + partes de Flowlight que actúan en lugar de informar — el muestreador nettop no puede rechazar nada en absoluto, así que en un Mac que captura + con el muestreador no se aplica ninguna regla, y Flowlight lo dice en lugar de ofrecer un interruptor que no hace nada.

+

Aun así no es impedir. Un agente que puede ejecutar un shell puede hacer a mano lo que habría hecho la herramienta rechazada. Un rechazo que + puedes deshacer con un clic es un rechazo por el que el siguiente intento del agente puede pasar. El tráfico local, el DNS, los servicios de + Apple y las propias conexiones de Flowlight no se rechazan nunca, porque un Mac bloqueado es peor resultado que un agente bloqueado. Y la + aplicación de las reglas caduca unos segundos después de que Flowlight deje de ejecutarse: un rechazo que nadie puede ver es peor que ninguno.

+

La inspección y el rechazo no se combinan. El tráfico encaminado por el propio proxy de Flowlight sale del Mac como tráfico + de Flowlight, y Flowlight no se rechaza nunca a sí mismo — así que una app cuyas peticiones estás leyendo es una app cuyas conexiones las + reglas ya no detienen. Activar la inspección para ver más te cuesta la aplicación de las reglas, y hasta ahora nada en la pantalla lo decía.

+ +

Lo que guarda Flowlight mismo

+

Metadatos de tráfico en una base de datos SQLite local, con una retención publicada. Con la inspección HTTPS activada guarda además los + cuerpos de las peticiones y las respuestas durante tres días: lo más delicado que llega a conservar. Las cabeceras con credenciales se + censuran por nombre y por palabra, lo cual es una heurística y no una garantía; una cabecera que lleve un secreto con un nombre que nada + reconoce puede quedar registrada.

+

La base de datos de tráfico nunca se sube. Tres cosas más pequeñas sí salen del Mac sin que nadie las pida, las tres nombradas en la + página de privacidad: la comprobación de actualizaciones, que pide a GitHub la última versión al arrancar y a + diario; la consulta del propietario de la red, que pregunta a Team Cymru por direcciones públicas que no tienen nombre de host; y, mientras + Flowlight lee contadores en vez de ejecutar su extensión, una consulta de DNS inverso de las direcciones para las que no vio ningún nombre. + Las dos primeras se pueden desactivar. La tercera no, porque en el muestreador es casi la única manera en la que una conexión llega a tener + nombre: va al servidor DNS que el Mac ya usa, y se detiene en cuanto la extensión toma el relevo y nombra las conexiones a partir del propio + tráfico. Preguntar con un modelo alojado envía mucho más que cualquiera de ellas, y es lo único que está desactivado hasta que lo + configuras.

+ +

Actualizaciones

+

Las versiones se firman con un Developer ID y se notarizan. El actualizador exige una suma de comprobación publicada y rechaza una descarga + que no la tenga; después comprueba que la app descargada esté firmada por el mismo equipo que la copia en ejecución antes de instalarla. Una + actualización firmada por otra persona se rechaza aunque por lo demás sea válida.

+ +

Informar de una vulnerabilidad

+

Usa el informe privado de vulnerabilidades de GitHub, o escribe a + security@xinbetween.com si prefieres no usar GitHub. + SECURITY.md dice qué entra en el alcance y qué puedes esperar. + Un error corriente — un cierre inesperado, una cifra equivocada, una pantalla que engaña — va en cambio a las + incidencias.

+
+
+
+ + + + + diff --git a/docs/fr/about/index.html b/docs/fr/about/index.html index a1c4f43..6c98b60 100644 --- a/docs/fr/about/index.html +++ b/docs/fr/about/index.html @@ -32,10 +32,8 @@ - - - - + + @@ -47,6 +45,7 @@ Agents IA Documentation Confidentialité + Modèle de menaces Versions À propos GitHub diff --git a/docs/fr/docs/index.html b/docs/fr/docs/index.html index 8eeeec7..02b7b34 100644 --- a/docs/fr/docs/index.html +++ b/docs/fr/docs/index.html @@ -32,11 +32,9 @@ - - - - - + + + @@ -47,6 +45,7 @@ Agents IA Documentation Confidentialité + Modèle de menaces Versions À propos GitHub @@ -90,7 +89,7 @@

Utiliser Flowlight

Réglages et données @@ -150,12 +149,20 @@

Les vues

- + - - - + + + + + + +
VueRaccourciLa question à laquelle elle répond
En direct⌘1Ce qui circule en ce moment : les débits par app sur les dernières secondes et la destination la plus active.
Agents IA⌘2Quels agents sont actifs, quels fournisseurs d’IA ils utilisent, et quoi d’autre ils ont contacté.
Agents IA⌘2Quels agents sont actifs, quels fournisseurs d’IA ils utilisent, et quoi d’autre ils ont contacté.
Rapports⌘3Où le trafic est parti, de la seconde à l’année. Groupez par App, Destination ou IP ; passez aux Graphiques ou à À regarder de près ; exportez en CSV.
Alertes⌘4Tout ce qui a paru inhabituel, avec l’app, la destination et le chiffre qui a déclenché la règle.
Inspecter⌘5Facultatif : les requêtes déchiffrées des agents que vous faites passer par Flowlight, et les appels d’outils qui les ont causées. La recherche va jusque dans les corps de requête et de réponse.
Capture⌘6Quel moteur enregistre, l’état de l’extension, l’apprentissage des noms d’hôte, et où vit la base de données.
Alertes⌘4Tout ce qui a paru inhabituel, avec l’app, la destination et le chiffre qui a déclenché la règle.
Règles⌘5Chaque liste d’autorisation et chaque refus que vous avez posés, ce que chacun couvre, et ce qu’il a réellement arrêté.
Demander⌘6Des questions sur votre propre trafic en langage courant, auxquelles un modèle local ou hébergé répond à partir de l’historique enregistré.
Inspecter⌘7Facultatif : les requêtes déchiffrées des agents que vous faites passer par Flowlight, et les appels d’outils qui les ont causées. La recherche va jusque dans les corps de requête et de réponse.
Appareils⌘8Désactivé jusqu’à ce que vous l’activiez : Bluetooth, USB et stockage externe, dont un Mac se sert autant que du réseau.
Couverture⌘9Ce dont Flowlight ne peut pas rendre compte — par app, si son trafic a été vu, nommé et lisible.
Capture⌘0Quel moteur enregistre, l’état de l’extension, l’apprentissage des noms d’hôte, et où vit la base de données.
+

Les raccourcis sont l’ordre de la barre latérale, donc ⌘0 est le dixième élément plutôt qu’une position omise.

+
L’écran En direct : une liste d’applications avec leurs débits d’envoi et de réception actuels et leur destination la plus active.
+
En direct, l’écran sur lequel Flowlight s’ouvre.

Dans Rapports, survolez une barre pour voir quelles apps l’ont produite, cliquez pour zoomer, et double-cliquez n’importe quelle ligne pour y restreindre le rapport.

Règles pour les agents IA

@@ -290,10 +297,16 @@

Inspection HTTPS (facultative)

et lancez-les depuis là. Sous Avancé, vous pouvez déchiffrer les agents IA seulement plutôt que toutes les apps, modifier la liste des exclusions, copier la configuration shell pour un shell donné, ou supprimer le certificat et tout ce qui a été enregistré.

Flowlight exclut du déchiffrement sa liste intégrée de services Apple et de gestionnaires de mots de passe (modifiez la liste dans la Configuration). Les apps qui épinglent leurs certificats peuvent rejeter le - certificat de Flowlight ; Flowlight s’en aperçoit et les laisse passer chiffrées. Les clés d’API, les cookies et les autres en-têtes d’identification ne sont jamais - conservés, les requêtes enregistrées sont gardées 3 jours, et Supprimer le certificat & les données enregistrées supprime le certificat, son réglage + certificat de Flowlight ; Flowlight s’en aperçoit et les laisse passer chiffrées. Les clés d’API, les cookies et les autres en-têtes d’identification sont remplacés par + leur longueur avant tout enregistrement — repérés par leur nom et par les mots de leur nom, ce qui attrape l’orthographe propre d’un fournisseur + sans pouvoir promettre de les attraper tous —, les requêtes enregistrées sont gardées 3 jours, et Supprimer le certificat & les données enregistrées supprime le certificat, son réglage d’approbation et tout ce qui a été enregistré. L’inspection est en HTTP/1.1 uniquement (Flowlight le demande aux deux parties) et n’est pas disponible en mode démo.

+

Y arriver depuis une ligne. Faites un clic droit sur une app ou une destination dans En direct, Rapports ou Agents IA et + choisissez Inspecter le trafic de … : Inspecter s’ouvre avec ce nom déjà dans le champ de recherche. Que ce soit le champ + de recherche et non un filtre caché est voulu — vous pouvez l’élargir, le restreindre ou l’effacer sans retourner d’où vous veniez. Seul le + trafic passé par le proxy peut apparaître : une ligne dont vous savez qu’elle est chargée peut donc ne rien montrer ici.

+

Réponses simulées

Pour voir comment un agent réagit quand une API échoue, se bloque ou renvoie quelque chose d’étrange, répondez vous-même à ce point de terminaison. Dans Inspecter › Réponses simulées, une règle nomme un hôte, un chemin et une méthode, et donne le statut, les en-têtes, le corps et un @@ -423,6 +436,25 @@

Capture : moteurs et sources

le guide du développeur pour la façon dont c’est construit.

+

Couverture : ce dont Flowlight ne peut pas rendre compte

+

Tous les autres écrans répondent à ce qui s’est passé. Couverture répond à ce qu’on ne vous aurait pas dit, et c’est cela + qui décide de ce que valent les autres écrans. Elle pose trois questions par app, parce qu’elles échouent indépendamment.

+

Est-ce que ça a été vu ? L’extension réseau voit chaque flux à son ouverture. L’échantillonneur nettop lit des compteurs + une fois par seconde : une connexion qui s’ouvre et se ferme entre deux relevés — une recherche DNS, un appel d’API bref, un script qui + lance curl et se termine — manque entièrement. C’est un manque qu’aucun pourcentage ne peut exprimer : il est donc dit en mots + plutôt que noté.

+

Est-ce que ça a été nommé ? La part des octets de cette app qui sont allés vers une destination portant un nom + d’hôte plutôt qu’une simple adresse. Des octets, pas des connexions : une seule connexion sans nom qui transporte un gigaoctet est un trou + plus grand que cent qui transportent un kilooctet chacune, et compter les connexions les classe dans l’autre sens.

+

Est-ce que c’était lisible ? Si l’inspection HTTPS a déchiffré quelque chose du trafic de cette app. Quatre réponses, et + une seule est un manque : il est lu ; il n’a jamais atteint le proxy ; l’app est sur la liste Jamais déchiffré, ce qui est un choix + que vous avez fait ; ou l’inspection est désactivée, ce qui est un réglage et non un échec app par app.

+

Ce qu’aucun moteur ne voit du tout est listé sur l’écran lui-même et non laissé à cette page : le trafic antérieur au + démarrage de la capture, les services système qui ne sont jamais présentés aux filtres de contenu, les apps qui épinglent leurs certificats, le + QUIC qui n’est jamais proposé au proxy, et le serveur MCP local d’un agent qui lui parle par un tube. Rien de tout cela n’apparaît où que ce + soit dans Flowlight, et manque donc aussi dans ces chiffres — un chiffre de couverture qui ne compterait que ce qu’il peut voir serait un + réconfort et non un fait.

+

Appareils : Bluetooth, USB et stockage externe

Un Mac émet et reçoit par plus que TCP et UDP. L’écran Appareils couvre le reste, et il est désactivé jusqu’à ce que vous l’activiez — non parce qu’il demanderait une autorisation que Flowlight n’a pas déjà, mais parce que surveiller davantage de @@ -550,8 +582,9 @@

Questions & réponses

Cela montre quelles extensions sont installées, si macOS a réellement démarré le filtre de Flowlight, et à quand remonte le dernier enregistrement. Collez le résultat dans un ticket.
Flowlight envoie-t-il quoi que ce soit à mon sujet, où que ce soit ?
-
Non. Il n’y a ni compte, ni télémétrie, ni analytique. Les seules requêtes qu’il émet sont la recherche quotidienne de mise à jour, les recherches facultatives de - propriétaire de réseau, et le DNS inverse — chacune listée, et chacune avec un interrupteur d’arrêt, sur la page Confidentialité.
+
Ni compte, ni télémétrie, ni analytique, et votre base de données de trafic n’est jamais téléversée. Trois requêtes quittent bien le Mac, toutes listées sur la + page Confidentialité : la recherche quotidienne de mise à jour et la consultation facultative du propriétaire de réseau, toutes + deux avec un interrupteur d’arrêt, et le DNS inverse tant que Flowlight tourne sur l’échantillonneur, qui n’en a pas — sans lui, l’échantillonneur ne pourrait pas nommer la plupart des connexions.
Va-t-il ralentir mon Mac ou vider la batterie ?
Fenêtre fermée, Flowlight ne fait presque rien : il tient à jour les débits de la barre des menus et écrit une ligne par seconde. L’extension réseau coûte moins que l’échantillonneur de secours, qui lance un processus nettop éphémère chaque seconde.
diff --git a/docs/fr/index.html b/docs/fr/index.html index f74c75c..6960c7f 100644 --- a/docs/fr/index.html +++ b/docs/fr/index.html @@ -32,10 +32,8 @@ - - - - + + @@ -47,6 +45,7 @@ Agents IA Documentation Confidentialité + Modèle de menaces Versions À propos GitHub @@ -106,7 +105,7 @@

Voyez l’activité réseau de vos apps.
-
La vue Agents IA de Flowlight. Claude Code, Cursor, Codex et un script Python y figurent avec leurs fournisseurs d’IA, le trafic envoyé ailleurs et des badges de risque pour SMTP, SSH, FTP, un envoi volumineux et une IP brute.

La vue Agents IA : le fournisseur de modèle de chaque agent, et tout le reste de ce qu’il a contacté. Avec des données de démonstration.

@@ -217,7 +216,9 @@

Voyez comment les agents IA se servent du réseau

Des règles, aussi longtemps que vous voulez

Désignez une app, un agent, une destination ou une seule URL et bloquez-la — d’un clic droit sur la ligne où vous l’avez repérée. Pour toujours, jusqu’à une heure donnée, jusqu’à la fermeture de Flowlight, ou entre deux heures choisies, avec un unique interrupteur de pause et une échappatoire à - chaque refus. La règle la plus spécifique gagne, et en cas d’égalité c’est le blocage qui l’emporte.

+ chaque refus. La règle la plus spécifique gagne, et en cas d’égalité c’est le blocage qui l’emporte. + C’est un contrôle sur des logiciels auxquels vous faites déjà confiance, pas + une barrière contre ceux auxquels vous n’en faites pas — voyez le modèle de menaces.

Cursor ⇥ raw.githubusercontent.com · refusé 4 fois · en semaine 18:00–09:00

@@ -371,16 +372,16 @@

Reliez les appels d’outils pris en charge aux requêtes réseau

Mac. Lancez un agent depuis un Terminal inspecté et le trafic HTTP pris en charge de l’agent et de ses outils est déchiffré, avec les appels d’outils que le modèle a demandés et les résultats qui lui sont revenus.

-
La vue Inspecter de Flowlight : une liste de requêtes Claude Code déchiffrées avec leurs appels d’outils, et le détail de l’envoi de curl vers paste.example, effectué par l’appel d’outil Bash qui l’a lancé, avec les notes envoyées dans le corps de la requête
Où sont parties mes notes ? L’envoi de curl vers paste.example, remonté jusqu’à la commande Bash demandée par le modèle, avec le corps transmis.
-
L’onglet Outils de Claude Code : Bash, Read et deux outils MCP avec leurs descriptions et le nombre d’appels du modèle pour chacun
Tous les outils qu’un agent propose au modèle. Les agents déclarent leurs outils à chaque tour, donc Flowlight les liste tous, en distinguant ceux que le modèle a vraiment utilisés de ceux qu’il n’a jamais touchés.
-
L’onglet Serveurs MCP de Codex : un serveur sentry marqué via le fournisseur, son URL, l’approbation réglée sur jamais, les outils autorisés et les outils qu’il propose
Y compris ceux qu’on ne voit pas passer sur le réseau. Quand un agent demande au fournisseur de se connecter à un serveur MCP, ce trafic ne passe jamais par votre Mac. Sa requête, si : le serveur, son URL, son réglage d’approbation et ses outils apparaissent quand même.
@@ -399,9 +400,14 @@

Reliez les appels d’outils pris en charge aux requêtes réseau

La suite

Ce qui arrive

-

Aujourd’hui, Flowlight observe, explique et refuse. Voici l’ordre dans lequel le reste se construit.

+

Aujourd’hui, Flowlight observe, explique et refuse — observer plutôt qu’empêcher, comme l’expose le + modèle de menaces. Voici l’ordre dans lequel le reste se construit.

+
Un budget pour l’inspection 0.9.3

Les corps enregistrés sont ce que Flowlight détient de plus sensible. Une liste d’autorisation d’en-têtes plutôt qu’une liste de blocage, vos propres motifs, la possibilité de ne garder aucun en-tête, des plafonds par app, et une session qui expire d’elle-même.

+
Montrez-moi ce que cette règle aurait fait 0.9.4

Rejouez la dernière journée contre une règle et faites lister ce qu’elle aurait refusé, avant qu’elle ne refuse quoi que ce soit. Les données sont déjà là ; elles n’ont jamais fait qu’expliquer le passé.

+
Ce qui quitte le Mac, avant que ça ne le quitte 0.9.5

Avant que la première ligne n’atteigne un collecteur : la destination, si c’est chiffré, quels champs voyagent et si certains sont des en-têtes — la divulgation que Flowlight exige de tout le reste, appliquée à lui-même.

+
Ce qu’un agent a fait en dehors du réseau 1.0

Un fichier qui part, c’est une lecture puis un envoi, et seul l’envoi est visible aujourd’hui. Enregistrer ce que les outils d’un agent ont ouvert, écrit et lancé ferait de a lu la clé privée, puis a parlé à paste.example un seul constat au lieu de deux écrans. Pas un moniteur de ressources : le processeur et la mémoire sont l’affaire du Moniteur d’activité. Nécessite le droit EndpointSecurity d’Apple, et suppose que le budget d’inspection ci-dessus existe d’abord.

Linux, puis Windows

Le cœur d’analyse est en Swift portable ; la capture, non. Un démon Linux avec une interface web locale vient d’abord, sur eBPF plutôt que sur les API de macOS.

@@ -424,7 +430,7 @@

Un moniteur que vous n’avez pas à surveiller

-
Le détail de Claude Code dans Flowlight : Outils et serveurs MCP avec le nombre d’appels et un échec, une liste d’autorisation, et l’onglet Appels d’outils listant un git push en échec, un envoi curl vers paste.example avec sa réponse et sa requête, un npm install, un ticket GitHub, une recherche dans la documentation et une lecture de fichier, chacun avec son résultat
Un agent, tous ses appels d’outils. Le trafic des git, curl et serveurs MCP lancés par Claude Code compte comme celui de Claude Code. Avec l’inspection HTTPS activée, l’onglet Appels d’outils montre ce que le modèle a demandé, ce qui est revenu et les requêtes émises par chaque outil : @@ -434,10 +440,10 @@

Un moniteur que vous n’avez pas à surveiller

-
La vue Rapports avec les barres horaires des données reçues et envoyées et des anneaux pour les apps, les destinations et les protocoles
Rapports. Zoom de la seconde à l’année, trois regroupements, des graphiques qui restent lisibles avec des centaines d’apps.
-
La vue Alertes listant des alertes d’exfiltration par un agent, d’e-mail, de FTP, d’activité pendant une absence et de pic de trafic
Alertes. Chacune nomme l’app, la destination et le chiffre qui l’a déclenchée.
diff --git a/docs/fr/privacy/index.html b/docs/fr/privacy/index.html index 17c89ef..dafa5fa 100644 --- a/docs/fr/privacy/index.html +++ b/docs/fr/privacy/index.html @@ -32,10 +32,8 @@ - - - - + + @@ -47,6 +45,7 @@ Agents IA Documentation Confidentialité + Modèle de menaces Versions À propos GitHub @@ -101,7 +100,9 @@

Inspection HTTPS

Désactivée par défaut. Si vous l’activez, Flowlight crée une autorité de certification sur votre Mac (sa clé ne quitte jamais ~/Library/Application Support/Flowlight/Inspection) et fait tourner un proxy qui n’accepte de connexions que depuis ce Mac. Pour les apps que vous faites passer par lui, il enregistre les requêtes et les réponses, corps compris jusqu’à 2 MB, dans la base de données locale pendant 3 jours. Les en-têtes d’identification - (Authorization, cookies, clés d’API) sont remplacés par leur longueur avant tout enregistrement. Flowlight exclut du déchiffrement sa liste intégrée de services Apple et de gestionnaires de mots de passe. Les données d’inspection enregistrées ne sont pas envoyées par Flowlight. Désactiver l’inspection arrête le proxy ; Supprimer le certificat & les données + sont remplacés par leur longueur avant tout enregistrement — repérés par leur nom (Authorization, cookies, clés d’API) et par les mots de + leur nom, si bien que X-Access-Key est attrapé aussi. C’est une heuristique, pas une garantie : un en-tête portant un secret sous + un nom que rien ne reconnaît serait enregistré. Flowlight exclut du déchiffrement sa liste intégrée de services Apple et de gestionnaires de mots de passe. Les données d’inspection enregistrées ne sont pas envoyées par Flowlight. Désactiver l’inspection arrête le proxy ; Supprimer le certificat & les données enregistrées supprime le certificat, son réglage d’approbation et chaque requête enregistrée.

Les requêtes réseau que fait l’app

@@ -109,7 +110,7 @@

Les requêtes réseau que fait l’app

RequêteEnvoyée àCe qu’elle contientQuand Recherche de mise à jourapi.github.comUne requête HTTPS standard pour la dernière version ; GitHub voit votre adresse IP et l’agent utilisateur Flowlight/<version>Au lancement et une fois par jour, depuis 0.1.2. Interrupteur d’arrêt dans Réglages › Général Téléchargement de mise à jourgithub.comL’image disque et son fichier de somme de contrôleSeulement quand vous cliquez sur Télécharger & ouvrir - DNS inverseLe résolveur DNS que vous avez configuréUne recherche du nom enregistré d’une adresse IP, quand aucun nom d’hôte n’a été observéAu besoin, dans le mode de capture par défaut + DNS inverseLe résolveur DNS que vous avez configuréUne recherche du nom enregistré d’une adresse IP, quand aucun nom d’hôte n’a été observéAu besoin, dans le mode de capture par échantillonnage, qui est celui par défaut jusqu’à ce que l’extension réseau tourne. Pas d’interrupteur d’arrêt : sans elle, l’échantillonneur ne peut pas nommer la plupart des connexions. L’extension réseau les nomme à partir du trafic lui-même et ne fait pas cette recherche Recherche du propriétaire de réseauTeam Cymru, par DNSDes adresses IP publiques sans nom d’hôte connu. Les adresses privées et réservées ne quittent jamais votre MacActivé par défaut. Interrupteur d’arrêt dans Capture › Identifier les propriétaires de réseau Demander avec un modèle hébergéLe fournisseur que vous choisissez : Anthropic, OpenAI, Google Gemini ou un point de terminaison compatibleVotre question et les résultats renvoyés par les requêtes Flowlight en lecture seule choisies par le modèle. La base de données de trafic elle-même n’est pas envoyéeSeulement quand vous choisissez un fournisseur hébergé et soumettez une question. L’écran Demander montre les requêtes transmises Exportation vers un collecteurLe point de terminaison OpenTelemetry ou HTTP que vous configurezLes champs indiqués dans Réglages › Exportation, comme les agrégats de trafic et les alertes. Les en-têtes d’authentification sont stockés dans le trousseauSeulement après que vous avez configuré un point de terminaison et activé l’exportation @@ -129,11 +130,15 @@

Conservation

Ce site

Ce site est une page statique hébergée sur GitHub Pages et servie via Cloudflare. Il ne dépose aucun cookie et n’exécute aucune analytique. GitHub - et Cloudflare traitent les requêtes pour le servir, et les polices sont chargées depuis Google Fonts, qui reçoit votre adresse IP lors de votre visite.

+ et Cloudflare traitent les requêtes pour le servir. Les polices sont servies depuis ce domaine, donc l’affichage d’une page n’envoie rien à + personne d’autre — cette page les chargeait auparavant depuis Google, ce qui voulait dire que la page expliquant que Flowlight n’envoie rien + nulle part faisait une requête à Google pour s’afficher elle-même.

Contact

-

Une question ou une inquiétude sur la confidentialité ? Ouvrez un ticket. Pour tout sujet sensible, utilisez le - signalement privé de vulnérabilités de GitHub sur le dépôt.

+

Une question ou une inquiétude sur la confidentialité ? Ouvrez un ticket. Pour un problème de sécurité, utilisez le + signalement privé de vulnérabilités de GitHub, ou écrivez à + security@xinbetween.com si vous préférez ne pas passer par GitHub : voyez + SECURITY.md pour savoir à quoi vous attendre.

diff --git a/docs/fr/threat-model/index.html b/docs/fr/threat-model/index.html new file mode 100644 index 0000000..9937a3f --- /dev/null +++ b/docs/fr/threat-model/index.html @@ -0,0 +1,281 @@ + + + + + +Modèle de menaces de Flowlight + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

Modèle de menaces

+

Observer, pas empêcher

+

Flowlight vous dit ce que les logiciels de votre Mac envoient, et où. Ce n’est pas une défense contre un attaquant qui + contrôle déjà la machine, et la différence compte assez pour être dite sur une page à elle plutôt qu’en note de bas de page.

+
+ +
+ + +
+

À quoi il sert

+

Flowlight répond à une question à laquelle le Mac ne répond pas : quelle app a envoyé ceci, et où est-ce parti ? Il est + fait pour les logiciels qui se comportent mal à découvert — un agent IA qui contacte quelque chose que personne ne lui a demandé, un outil qui + téléverse plus qu’il ne devrait, un processus qui parle à une adresse sans nom. Ce comportement est visible dans le trafic, et le travail de + Flowlight est de le rendre lisible, et de dire honnêtement quand il ne peut pas.

+

Ce n’est pas un antivirus, ni un agent EDR, ni un pare-feu au sens de quelque chose qui se tient entre vous et un attaquant. Là où les deux se + recouvrent — Flowlight peut refuser des connexions —, le refus est une commodité pour contrôler un logiciel auquel vous faites déjà confiance, + pas une barrière contre un logiciel auquel vous n’en faites pas.

+ +

Ce contre quoi il protège

+
    +
  • Une sortie de données passée inaperçue. Une app ou un agent qui envoie quelque part où vous ne l’auriez pas approuvé, y + compris par un outil qu’il a lancé lui-même. Flowlight attribue la connexion au processus qui l’a faite et à l’agent qui a lancé ce processus.
  • +
  • Des changements de comportement silencieux. Une app qui contacte soudain de nouvelles destinations, déplace bien plus que + sa référence, ou travaille pendant que vous êtes absent. Chaque alerte nomme le chiffre qui l’a déclenchée, pour que vous puissiez ne pas être + d’accord avec elle.
  • +
  • Un agent qui dépasse ce que vous avez autorisé. Une liste d’autorisation par agent, et des règles qui refusent les + connexions en dehors d’elle, avec le refus consigné et un clic pour l’autoriser.
  • +
  • Une mise à jour altérée. Chaque version publie une somme de contrôle ; le programme de mise à jour refuse un + téléchargement qu’il ne peut pas vérifier, et refuse d’installer une app qui n’est pas signée par la même équipe que la copie qui demande la + mise à jour.
  • +
+ +

Un logiciel avec root peut l’éteindre

+

Flowlight tourne en votre nom, avec une extension système que macOS lance pour lui. Tout ce qui tourne en root — ou tout ce dont vous + approuvez l’installateur — peut décharger cette extension, arrêter l’app ou supprimer sa base de données. Rien dans la conception ne l’empêche, + et aucun outil de surveillance sur macOS ne peut l’empêcher tout en restant un outil que vous pouvez aussi éteindre vous-même.

+

L’affirmation honnête est plus étroite et reste utile : un logiciel qui se comporte mal sans chercher activement à échapper à une + surveillance sera vu. Un logiciel qui y échappe activement, peut-être pas — et il laissera au moins un trou : une extension qui s’est + arrêtée, une période sans données. C’est ce que l’écran Couverture est là pour montrer.

+ +

Ce que la capture manque

+
    +
  • Le trafic antérieur au début de la capture. Il n’y a pas de rattrapage. Une connexion ouverte avant le filtre ne lui a + jamais été proposée.
  • +
  • Les services système dispensés des filtres de contenu. macOS ne montre pas tout à un filtre de contenu ; une partie + de son propre trafic n’atteint jamais le nôtre.
  • +
  • Un autre filtre de contenu qui détient la place. macOS n’en exécute qu’un à la fois. Si un VPN ou un agent de sécurité le + détient, le filtre de Flowlight s’installe, se connecte, et on ne lui demande jamais de filtrer quoi que ce soit — Capture le dit plutôt que + de montrer un écran vide.
  • +
  • Les connexions brèves, avec l’échantillonneur. Sans l’extension, Flowlight lit des compteurs une fois par seconde : + une connexion qui s’ouvre et se ferme entre deux relevés n’est jamais enregistrée.
  • +
  • Les canaux qui ne sont ni TCP ni UDP. Bluetooth et USB sont visibles comme appareils, pas comme octets. Le serveur MCP + local d’un agent qui parle par un tube n’est pas du trafic réseau du tout et n’apparaît nulle part.
  • +
+ +

Ce que l’inspection manque

+

L’inspection HTTPS ne lit que ce qui est acheminé par le proxy local de Flowlight, et c’est un programme qui en décide à son démarrage. Une + app qui ignore les réglages de proxy, une app lancée avant l’activation de l’inspection, ou une app qui épingle ses certificats passe sans être + touchée — délibérément, parce que casser une connexion épinglée casserait l’app. QUIC n’est pas proposé au proxy non plus.

+

Un écran Inspecter vide signifie donc « rien n’a été acheminé ici », pas « rien ne s’est passé ». Couverture dit laquelle + des deux s’applique, app par app.

+ +

Ce que le blocage est, et n’est pas

+

Une règle qui refuse des connexions est exécutée par l’extension réseau, sur le chemin, avant que la connexion ne soit faite. Une règle qui + nomme une URL est exécutée par le proxy d’inspection, qui répond à la requête avec un statut que l’app peut lire. Ce sont les deux seules + parties de Flowlight qui agissent au lieu de rapporter — l’échantillonneur nettop, lui, ne peut rien refuser du tout : sur un Mac qui + capture avec l’échantillonneur, aucune règle n’est appliquée, et Flowlight le dit plutôt que de proposer un interrupteur qui ne fait rien.

+

Ce n’est pourtant toujours pas empêcher. Un agent qui peut lancer un shell peut faire à la main ce que l’outil refusé aurait fait. Un refus que + vous pouvez annuler d’un clic est un refus que la tentative suivante d’un agent peut franchir. Le trafic local, le DNS, les services d’Apple et + les connexions de Flowlight lui-même ne sont jamais refusés, parce qu’un Mac bloqué est un pire résultat qu’un agent bloqué. Et l’application + des refus cesse quelques secondes après l’arrêt de Flowlight : un refus que personne ne peut voir est pire que pas de refus.

+

Inspection et refus ne se combinent pas. Le trafic passé par le proxy de Flowlight lui-même quitte le Mac comme du trafic de + Flowlight, et Flowlight ne se refuse jamais lui-même — une app dont vous lisez les requêtes est donc une app dont les règles n’arrêtent plus + les connexions. Activer l’inspection pour en voir plus vous coûte l’application des refus, et rien à l’écran ne le disait jusqu’ici.

+ +

Ce que Flowlight lui-même conserve

+

Des métadonnées de trafic dans une base de données SQLite locale, avec une durée de conservation publiée. Avec l’inspection HTTPS activée, il + conserve aussi les corps des requêtes et des réponses pendant trois jours — la chose la plus sensible qu’il garde jamais. Les en-têtes + d’identification sont masqués par nom et par mot, ce qui est une heuristique et non une garantie ; un en-tête qui porte un secret sous un + nom que rien ne reconnaît peut être enregistré.

+

La base de données de trafic n’est jamais téléversée. Trois choses plus petites quittent bien le Mac sans qu’on les demande, toutes trois + nommées sur la page Confidentialité : la recherche de mise à jour, qui demande à GitHub la dernière version + au lancement et une fois par jour ; la consultation du propriétaire du réseau, qui interroge Team Cymru sur les adresses publiques sans + nom d’hôte ; et, tant que Flowlight lit des compteurs au lieu de faire tourner son extension, une recherche DNS inverse des adresses dont + il n’a vu aucun nom. Les deux premières ont un interrupteur d’arrêt. La troisième non, parce que sur l’échantillonneur c’est l’essentiel de la + façon dont une connexion obtient un nom : elle va au résolveur que le Mac utilise déjà, et elle s’arrête dès que l’extension prend le + relais et nomme les connexions à partir du trafic lui-même. Demander avec un modèle hébergé envoie bien plus que n’importe laquelle d’entre + elles, et c’est la seule chose qui reste désactivée jusqu’à ce que vous la configuriez.

+ +

Mises à jour

+

Les versions sont signées avec un Developer ID et notarisées. Le programme de mise à jour exige une somme de contrôle publiée et refuse un + téléchargement qui n’en a pas, puis vérifie que l’app téléchargée est signée par la même équipe que la copie en cours d’exécution avant de + l’installer. Une mise à jour signée par quelqu’un d’autre est refusée, même si elle est valide par ailleurs.

+ +

Signaler une vulnérabilité

+

Utilisez le signalement privé de vulnérabilités de GitHub, ou écrivez à + security@xinbetween.com si vous préférez ne pas passer par GitHub. + SECURITY.md dit ce qui entre dans le périmètre et ce à quoi vous attendre. + Un bug ordinaire — un plantage, un chiffre faux, un écran trompeur — va plutôt dans + les tickets.

+
+
+
+ + + + + diff --git a/docs/index.html b/docs/index.html index 63b97d5..e74c652 100644 --- a/docs/index.html +++ b/docs/index.html @@ -32,10 +32,8 @@ - - - - + + @@ -47,6 +45,7 @@ AI agents Docs Privacy + Threat model Releases About GitHub @@ -106,7 +105,7 @@

See your apps' network activity.
-
Flowlight's AI Agents view. Claude Code, Cursor, Codex and a Python script are listed with their AI providers, traffic sent elsewhere and risk badges for SMTP, SSH, FTP, a large upload and a raw IP.

The AI Agents view: each agent's model provider, and everything else it talked to. Shown with demo data.

@@ -217,7 +216,9 @@

Monitor how AI agents use the network

Rules, for as long as you say

Name an app, an agent, a destination or a single URL and block it — right-click the row you spotted it in. Forever, until a time, until Flowlight quits, or between chosen hours, with one pause switch and a way out on - every refusal. The most specific rule wins, and a tie goes to the block.

+ every refusal. The most specific rule wins, and a tie goes to the block. It is control over software you + already trust, not a barrier against software you don't — see the threat + model.

Cursor ⇥ raw.githubusercontent.com · refused 4 times · weekdays 18:00–09:00

@@ -371,16 +372,16 @@

Correlate supported tool calls with network requests

Mac. Start an agent from an inspected Terminal and supported HTTP traffic from the agent and its tools is decrypted, with tool calls the model asked for and the results that went back.

-
Flowlight's Inspect view: a list of decrypted Claude Code requests with their tool calls, and the detail of curl's upload to paste.example, made by the Bash tool call that ran it, with the uploaded notes in the request body
Where did my notes go? curl's upload to paste.example, traced to the Bash command the model asked for, with the body it sent.
-
The Tools tab for Claude Code: Bash, Read and two MCP tools with descriptions and how often the model called each
Every tool an agent offers the model. Agents declare their tools on each turn, so Flowlight lists them all, with the ones the model actually used and the ones it never touched.
-
The MCP servers tab for Codex: a sentry server marked via provider, its URL, approval set to never, allowed tools and the tools it offers
Including the ones you can't see on the wire. When an agent asks the provider to connect to an MCP server, that traffic never reaches your Mac. Its request does, so the server, its URL, its approval setting and its tools still show up.
@@ -399,16 +400,14 @@

Correlate supported tool calls with network requests

Next

What's coming

-

Flowlight watches, explains and refuses today. This is the order the rest is being built in.

+

Flowlight watches, explains and refuses today — monitoring rather than prevention, as the + threat model sets out. This is the order the rest is being built in.

-
Coverage, stated rather than assumed 0.9.0

Per app: watched by the extension, decrypted by the proxy, named only by DNS or SNI, or not covered at all — and why, with the fix where there is one. A tool that claims completeness is worth less than one you can trust about its own limits.

-
Inspect it from where you found it 0.9.1

Right-click a row in Live, Reports or AI Agents and Inspect opens already looking at that app or destination — instead of changing screen and retyping the name into a search field.

-
A threat model, written down 0.9.2

What Flowlight defends against and what it doesn't, on one page: software misbehaving in the open, not software with root. Monitoring, not prevention, said beside every mention of blocking. Plus a security contact, and fonts served from here rather than from Google.

A budget for inspection 0.9.3

Recorded bodies are the most sensitive thing Flowlight holds. A header allowlist instead of a denylist, patterns of your own, an option to keep no headers at all, per-app ceilings, and a session that expires by itself.

Show me what this rule would have done 0.9.4

Replay the last day against a rule and list what it would have refused, before it refuses anything. The data is already there; it has only ever explained the past.

What leaves the Mac, before it leaves 0.9.5

Before the first row reaches a collector: the destination, whether it's encrypted, which fields travel and whether any are headers — the disclosure Flowlight demands of everything else, applied to itself.

-
What an agent did besides the network 1.0

A file leaving is a read and then a send, and only the send is visible today. Recording what an agent's tools opened, wrote and spawned would make read the private key, then talked to paste.example one finding instead of two screens. Not a resource monitor: CPU and memory are Activity Monitor's job. Needs Apple's EndpointSecurity entitlement, and needs the inspection budget above to exist first.

+
What an agent did off the network 1.0

A file leaving is a read and then a send, and only the send is visible today. Recording what an agent's tools opened, wrote and spawned would make read the private key, then talked to paste.example one finding instead of two screens. Not a resource monitor: CPU and memory are Activity Monitor's job. Needs Apple's EndpointSecurity entitlement, and needs the inspection budget above to exist first.

Linux, then Windows

The analysis core is portable Swift; capture isn't. A Linux daemon with a local web UI comes first, on eBPF rather than macOS APIs.

@@ -431,7 +430,7 @@

A monitor you don't have to monitor

-
Claude Code's detail in Flowlight: Tools and MCP servers with call counts and one failure, an allowlist, and the Tool calls tab listing a failed git push, a curl upload to paste.example with its response and request, npm install, a GitHub issue, a docs search and a file read, each with its result
One agent, every tool call. Traffic from the git, curl and MCP servers Claude Code started counts as Claude Code's. With HTTPS inspection on, the Tool calls tab shows what the model asked for, what came back, and the requests each tool made: @@ -441,10 +440,10 @@

A monitor you don't have to monitor

-
Reports view with hourly received and sent bars and donut charts of apps, destinations and protocols
Reports. Second-to-year zoom, three groupings, charts that stay readable with hundreds of apps.
-
Alerts view listing agent exfiltration, email, FTP, while-away and traffic spike alerts
Alerts. Each one names the app, the destination and the number that tripped it.
diff --git a/docs/it/about/index.html b/docs/it/about/index.html index f5e24fd..58e5e5b 100644 --- a/docs/it/about/index.html +++ b/docs/it/about/index.html @@ -32,10 +32,8 @@ - - - - + + @@ -47,6 +45,7 @@ Agenti IA Documentazione Privacy + Modello di minaccia Versioni Informazioni GitHub diff --git a/docs/it/docs/index.html b/docs/it/docs/index.html index e1a94f3..dd6c006 100644 --- a/docs/it/docs/index.html +++ b/docs/it/docs/index.html @@ -32,11 +32,9 @@ - - - - - + + + @@ -47,6 +45,7 @@ Agenti IA Documentazione Privacy + Modello di minaccia Versioni Informazioni GitHub @@ -90,7 +89,7 @@

Usare Flowlight

Impostazioni e dati @@ -150,12 +149,20 @@

Le viste

- + - - - + + + + + + +
VistaScorciatoiaA cosa risponde
In diretta⌘1Cosa si muove adesso: velocità per app negli ultimi secondi e la destinazione più trafficata.
Agenti IA⌘2Quali agenti sono attivi, quali provider IA usano e cos'altro hanno contattato.
Agenti IA⌘2Quali agenti sono attivi, quali provider IA usano e cos'altro hanno contattato.
Rapporti⌘3Dove è andato il traffico, dal secondo all'anno. Raggruppa per App, Destinazione o IP; passa a Grafici o a Vale un'occhiata; esporta in CSV.
Avvisi⌘4Tutto ciò che è sembrato insolito, con l'app, la destinazione e il numero che ha fatto scattare la regola.
Ispeziona⌘5Opzionale: le richieste decifrate degli agenti che instradi attraverso Flowlight e le chiamate agli strumenti che le hanno prodotte. La ricerca entra nei corpi di richieste e risposte.
Acquisizione⌘6Quale motore sta registrando, lo stato dell'estensione, l'apprendimento dei nomi host e dove si trova il database.
Avvisi⌘4Tutto ciò che è sembrato insolito, con l'app, la destinazione e il numero che ha fatto scattare la regola.
Regole⌘5Ogni elenco consentiti e ogni rifiuto che hai impostato, cosa copre ciascuno e cosa ha fermato davvero.
Chiedi⌘6Domande sul tuo traffico in linguaggio naturale, a cui un modello locale o ospitato risponde a partire dalla cronologia registrata.
Ispeziona⌘7Opzionale: le richieste decifrate degli agenti che instradi attraverso Flowlight e le chiamate agli strumenti che le hanno prodotte. La ricerca entra nei corpi di richieste e risposte.
Dispositivi⌘8Disattivato finché non lo attivi: Bluetooth, USB e archiviazione esterna, che un Mac usa tanto quanto usa la rete.
Copertura⌘9Ciò che Flowlight non può contabilizzare — per ogni app, se il suo traffico è stato visto, nominato e leggibile.
Acquisizione⌘0Quale motore sta registrando, lo stato dell'estensione, l'apprendimento dei nomi host e dove si trova il database.
+

Le scorciatoie sono l'ordine della barra laterale, quindi ⌘0 è il decimo elemento e non una posizione omessa.

+
La schermata In diretta: un elenco di applicazioni con le loro velocità attuali di invio e ricezione e la destinazione più trafficata.
+
In diretta, la schermata con cui Flowlight si apre.

In Rapporti, passa il puntatore su una barra per vedere quali app l'hanno generata, fai clic per ingrandire e doppio clic su una riga per limitare il rapporto a essa.

Regole per gli agenti IA

@@ -289,10 +296,16 @@

Ispezione HTTPS (opzionale)

e avviali da lì. In Avanzate puoi decifrare solo gli agenti IA invece di tutte le app, modificare l'elenco di quelli mai decifrati, copiare la configurazione shell per una shell, oppure rimuovere il certificato e tutto ciò che è stato registrato.

Flowlight esclude dalla decifrazione il proprio elenco integrato di servizi Apple e gestori di password (modifica l'elenco in Configura). Le app che applicano il pinning dei certificati possono rifiutare il - certificato di Flowlight; Flowlight lo rileva e le inoltra cifrate. Chiavi API, cookie e altre intestazioni con credenziali non vengono mai - memorizzate, le richieste registrate vengono conservate 3 giorni e Rimuovi certificato e dati registrati elimina il certificato, la sua + certificato di Flowlight; Flowlight lo rileva e le inoltra cifrate. Chiavi API, cookie e altre intestazioni con credenziali vengono sostituite con la loro + lunghezza prima che qualsiasi cosa venga memorizzata — riconosciute per nome e per le parole nel nome, cosa che intercetta la grafia particolare + di un fornitore ma non può promettere di intercettarle tutte —, le richieste registrate vengono conservate 3 giorni e Rimuovi certificato e dati registrati elimina il certificato, la sua impostazione di attendibilità e tutto ciò che è stato registrato. L'ispezione è solo HTTP/1.1 (Flowlight lo richiede a entrambe le parti) e non è disponibile in modalità demo.

+

Come arrivarci da una riga. Fai clic destro su un'app o su una destinazione in In diretta, Rapporti o Agenti IA e scegli + Ispeziona il traffico di …: Ispeziona si apre con quel nome già nel campo di ricerca. Che sia il campo di ricerca e non un + filtro nascosto è voluto — puoi allargarlo, restringerlo o svuotarlo senza tornare da dove sei partito. Può comparire solo il traffico che è + passato dal proxy, quindi una riga che sai essere attiva può comunque non mostrare nulla qui.

+

Risposte simulate

Per vedere come reagisce un agente quando un'API fallisce, si blocca o restituisce qualcosa di strano, rispondi tu a quell'endpoint. In Ispeziona › Risposte simulate, una regola indica un host, un percorso e un metodo, e fornisce lo stato, le intestazioni, il corpo e un @@ -422,6 +435,25 @@

Acquisizione: motori e origini

non richiede alcun filtro e convive con loro. Vedi la guida per sviluppatori per come è costruito.

+

Copertura: ciò che Flowlight non può contabilizzare

+

Ogni altra schermata risponde a che cosa è successo. Copertura risponde a che cosa non ti sarebbe stato detto, ed è questo a + decidere quanto valgono le altre schermate. Fa tre domande per ogni app, perché falliscono in modo indipendente.

+

È stato visto? L'estensione di rete vede ogni flusso nel momento in cui si apre. Il campionatore nettop legge i contatori una + volta al secondo, quindi una connessione che si apre e si chiude tra due letture — una rapida risoluzione DNS, una chiamata API veloce, uno + script che esegue curl ed esce — manca del tutto. È una lacuna che nessuna percentuale può esprimere, perciò viene detta a parole + anziché misurata.

+

È stato nominato? La quota dei byte di quell'app andati a una destinazione con un nome host anziché a un semplice + indirizzo. Byte, non connessioni: una connessione senza nome che porta un gigabyte è un buco più grande di cento che ne portano un kilobyte + ciascuna, e contare le connessioni le ordina al contrario.

+

Era leggibile? Se l'ispezione HTTPS ha decifrato qualcosa del traffico di quell'app. Quattro risposte, e una sola è una + lacuna: viene letto; non ha mai raggiunto il proxy; l'app è nell'elenco Mai decifrati, che è una scelta tua; oppure l'ispezione è disattivata, + che è un'impostazione e non un fallimento app per app.

+

Ciò che nessun motore vede affatto è elencato nella schermata stessa e non lasciato a questa pagina: il traffico precedente + all'avvio dell'acquisizione, i servizi di sistema che non vengono mai mostrati ai filtri contenuti, le app che applicano il pinning dei + certificati, il QUIC che non viene mai offerto al proxy e il server MCP locale di un agente che gli parla tramite pipe. Nulla di questo compare + in alcun punto di Flowlight, quindi manca anche da queste cifre — una cifra di copertura che contasse solo ciò che riesce a vedere sarebbe una + rassicurazione e non un fatto.

+

Dispositivi: Bluetooth, USB e archiviazione esterna

Un Mac invia e riceve oltre TCP e UDP. La schermata Dispositivi copre il resto, ed è disattivata finché non la attivi — non perché serva un permesso che Flowlight non ha già, ma perché monitorare una parte più ampia del tuo @@ -549,8 +581,9 @@

Domande e risposte

Mostra quali estensioni sono installate, se macOS ha davvero avviato il filtro di Flowlight e quanto di recente è stato registrato qualcosa. Incollalo in una segnalazione.
Flowlight invia da qualche parte informazioni su di me?
-
No. Non c'è account, non c'è telemetria, non ci sono analisi. Le sole richieste che fa sono il controllo giornaliero degli aggiornamenti, le ricerche - facoltative sul proprietario della rete e il DNS inverso — ognuna elencata e ognuna con un interruttore per disattivarla, nella pagina sulla privacy.
+
Nessun account, nessuna telemetria, nessuna analisi, e il tuo database del traffico non viene mai caricato. Tre richieste lasciano il Mac, tutte elencate nella + pagina sulla privacy: il controllo giornaliero degli aggiornamenti e la ricerca facoltativa sul proprietario della rete, entrambe con + un interruttore per disattivarle, e il DNS inverso finché Flowlight è sul campionatore, che non ne ha uno — senza di esso il campionatore non potrebbe dare un nome alla maggior parte delle connessioni.
Rallenta il Mac o consuma la batteria?
Con la finestra chiusa Flowlight fa quasi nulla: mantiene le velocità nella barra dei menu e scrive una riga al secondo. L'estensione di rete costa meno del campionatore di riserva, che avvia un breve processo nettop ogni secondo.
diff --git a/docs/it/index.html b/docs/it/index.html index 838f19a..41789ee 100644 --- a/docs/it/index.html +++ b/docs/it/index.html @@ -32,10 +32,8 @@ - - - - + + @@ -47,6 +45,7 @@ Agenti IA Documentazione Privacy + Modello di minaccia Versioni Informazioni GitHub @@ -106,7 +105,7 @@

Vedi la rete delle tue app.
Ca
-
La vista Agenti IA di Flowlight. Claude Code, Cursor, Codex e uno script Python sono elencati con i loro provider IA, il traffico inviato altrove e i contrassegni di rischio per SMTP, SSH, FTP, un caricamento di grandi dimensioni e un IP grezzo.

La vista Agenti IA: il provider del modello di ogni agente e tutto il resto con cui ha parlato. Mostrata con dati dimostrativi.

@@ -217,7 +216,9 @@

Controlla come gli agenti IA usano la rete

Regole, per il tempo che decidi tu

Indica un'app, un agente, una destinazione o un singolo URL e bloccalo: fai clic con il tasto destro sulla riga in cui l'hai notato. Per sempre, fino a un orario, fino alla chiusura di Flowlight o in una fascia oraria scelta, con un interruttore di pausa e una via d'uscita - a ogni rifiuto. Vince la regola più specifica e, a parità, vince il blocco.

+ a ogni rifiuto. Vince la regola più specifica e, a parità, vince il blocco. + È controllo sul software di cui ti fidi già, non una barriera contro il + software di cui non ti fidi — vedi il modello di minaccia.

Cursor ⇥ raw.githubusercontent.com · rifiutata 4 volte · nei giorni feriali 18:00–09:00

@@ -371,16 +372,16 @@

Collega le chiamate agli strumenti supportate alle richieste di rete

sul tuo Mac. Avvia un agente da un Terminale ispezionato e il traffico HTTP supportato dell'agente e dei suoi strumenti viene decifrato, con le chiamate agli strumenti richieste dal modello e i risultati tornati indietro.

-
La vista Ispeziona di Flowlight: un elenco di richieste decifrate di Claude Code con le loro chiamate agli strumenti e il dettaglio del caricamento di curl verso paste.example, prodotto dalla chiamata allo strumento Bash che lo ha eseguito, con le note caricate nel corpo della richiesta
Dove sono finite le mie note? Il caricamento di curl verso paste.example, risalendo al comando Bash richiesto dal modello, con il corpo che ha inviato.
-
Il pannello Strumenti per Claude Code: Bash, Read e due strumenti MCP con le descrizioni e quante volte il modello ha chiamato ciascuno
Ogni strumento che un agente offre al modello. Gli agenti dichiarano i loro strumenti a ogni turno, così Flowlight li elenca tutti, indicando quelli che il modello ha davvero usato e quelli che non ha mai toccato.
-
Il pannello Server MCP per Codex: un server sentry contrassegnato come «tramite provider», il suo URL, approvazione impostata su «mai», gli strumenti consentiti e quelli che offre
Compresi quelli che non vedi passare in rete. Quando un agente chiede al provider di collegarsi a un server MCP, quel traffico non arriva mai al tuo Mac. La sua richiesta sì, così il server, il suo URL, la sua impostazione di approvazione e i suoi strumenti compaiono comunque.
@@ -399,9 +400,14 @@

Collega le chiamate agli strumenti supportate alle richieste di rete

Prossimi passi

Cosa arriva

-

Oggi Flowlight osserva, spiega e rifiuta. Questo è l'ordine in cui viene costruito il resto.

+

Oggi Flowlight osserva, spiega e rifiuta — osservare, non impedire, come spiega il + modello di minaccia. Questo è l'ordine in cui viene costruito il resto.

+
Un budget per l'ispezione 0.9.3

I corpi registrati sono la cosa più delicata che Flowlight conservi. Un elenco consentiti per le intestazioni invece di un elenco bloccati, schemi tuoi, l'opzione di non conservare alcuna intestazione, tetti per ogni app e una sessione che scade da sé.

+
Mostrami cosa avrebbe fatto questa regola 0.9.4

Riproduci l'ultimo giorno contro una regola ed elenca ciò che avrebbe rifiutato, prima che rifiuti qualsiasi cosa. I dati sono già lì; finora hanno soltanto spiegato il passato.

+
Cosa lascia il Mac, prima che lo lasci 0.9.5

Prima che la prima riga raggiunga un collector: la destinazione, se è cifrata, quali campi viaggiano e se qualcuno è un'intestazione — la trasparenza che Flowlight pretende da tutto il resto, applicata a sé stesso.

+
Cosa ha fatto un agente oltre alla rete 1.0

Un file che esce è prima una lettura e poi un invio, e oggi è visibile solo l'invio. Registrare cosa hanno aperto, scritto e avviato gli strumenti di un agente renderebbe ha letto la chiave privata, poi ha parlato con paste.example un solo rilievo invece di due schermate. Non è un monitor delle risorse: CPU e memoria sono compito di Monitoraggio Attività. Richiede l'entitlement EndpointSecurity di Apple, e richiede che il budget di ispezione qui sopra esista prima.

Prima Linux, poi Windows

Il nucleo di analisi è Swift portabile; l'acquisizione no. Arriva prima un daemon Linux con un'interfaccia web locale, basato su eBPF invece che sulle API di macOS.

@@ -424,7 +430,7 @@

Un monitoraggio che non devi monitorare

-
Il dettaglio di Claude Code in Flowlight: strumenti e server MCP con il numero di chiamate e un errore, un elenco consentiti e il pannello Chiamate agli strumenti con un git push fallito, un caricamento curl verso paste.example con la sua risposta e la sua richiesta, npm install, un issue su GitHub, una ricerca nella documentazione e la lettura di un file, ciascuno con il proprio risultato
Un agente, tutte le chiamate agli strumenti. Il traffico di git, curl e dei server MCP avviati da Claude Code conta come traffico di Claude Code. Con l'ispezione HTTPS attiva, il pannello Chiamate agli strumenti mostra che cosa ha chiesto il modello, che cosa è tornato indietro e le richieste fatte da ogni strumento: @@ -434,10 +440,10 @@

Un monitoraggio che non devi monitorare

-
La vista Rapporti con le barre orarie dei dati ricevuti e inviati e i grafici ad anello di app, destinazioni e protocolli
Rapporti. Zoom dal secondo all'anno, tre raggruppamenti, grafici che restano leggibili con centinaia di app.
-
La vista Avvisi con avvisi di esfiltrazione da parte di un agente, e-mail, FTP, attività mentre sei via e picco di traffico
Avvisi. Ognuno indica l'app, la destinazione e il numero che lo ha fatto scattare.
diff --git a/docs/it/privacy/index.html b/docs/it/privacy/index.html index 514198e..be8dfc9 100644 --- a/docs/it/privacy/index.html +++ b/docs/it/privacy/index.html @@ -32,10 +32,8 @@ - - - - + + @@ -47,6 +45,7 @@ Agenti IA Documentazione Privacy + Modello di minaccia Versioni Informazioni GitHub @@ -101,7 +100,9 @@

Ispezione HTTPS

Disattivata per impostazione predefinita. Se la attivi, Flowlight crea un'autorità di certificazione sul tuo Mac (la sua chiave non lascia mai ~/Library/Application Support/Flowlight/Inspection) e avvia un proxy che accetta connessioni solo da questo Mac. Per le app che instradi attraverso di esso registra richieste e risposte, compresi i corpi fino a 2 MB, nel database locale per 3 giorni. Le intestazioni con credenziali - (Authorization, cookie, chiavi API) vengono sostituite con la loro lunghezza prima che qualsiasi cosa venga archiviata. Flowlight esclude dalla decifrazione il proprio elenco integrato di servizi Apple e gestori di password. I dati registrati dall'ispezione non vengono caricati da Flowlight. Disattivando l'ispezione il proxy si arresta; Rimuovi certificato e dati + vengono sostituite con la loro lunghezza prima che qualsiasi cosa venga archiviata — riconosciute per nome (Authorization, cookie, chiavi API) e + per le parole nel nome, così che anche X-Access-Key venga intercettata. È un'euristica, non una garanzia: un'intestazione che porti un + segreto sotto un nome che nulla riconosce verrebbe registrata. Flowlight esclude dalla decifrazione il proprio elenco integrato di servizi Apple e gestori di password. I dati registrati dall'ispezione non vengono caricati da Flowlight. Disattivando l'ispezione il proxy si arresta; Rimuovi certificato e dati registrati elimina il certificato, la sua impostazione di attendibilità e tutte le richieste registrate.

Richieste di rete che fa l'app

@@ -109,7 +110,7 @@

Richieste di rete che fa l'app

RichiestaInviata aCosa contieneQuando Controllo aggiornamentiapi.github.comUna normale richiesta HTTPS per l'ultima versione; GitHub vede il tuo indirizzo IP e lo user agent Flowlight/<version>All'avvio e una volta al giorno, dalla 0.1.2. Interruttore per disattivarla in Impostazioni › Generali Download dell'aggiornamentogithub.comL'immagine disco e il suo file di checksumSolo quando fai clic su Scarica e apri - DNS inversoIl resolver DNS che hai configuratoUna ricerca del nome registrato di un indirizzo IP, quando non è stato rilevato alcun nome hostQuando serve, nella modalità di acquisizione predefinita + DNS inversoIl resolver DNS che hai configuratoUna ricerca del nome registrato di un indirizzo IP, quando non è stato rilevato alcun nome hostQuando serve, nella modalità di acquisizione a campionamento, che è quella predefinita finché l'estensione di rete non è in funzione. Nessun interruttore per disattivarla: senza di essa il campionatore non può dare un nome alla maggior parte delle connessioni. L'estensione di rete le nomina dal traffico stesso e non fa questa ricerca Ricerca del proprietario della reteTeam Cymru, via DNSIndirizzi IP pubblici senza nome host noto. Gli indirizzi privati e riservati non lasciano mai il tuo MacAttiva per impostazione predefinita. Interruttore per disattivarla in Acquisizione › Identifica i proprietari della rete Chiedi con un modello ospitatoIl provider che selezioni: Anthropic, OpenAI, Google Gemini o un endpoint compatibileLa tua domanda e i risultati restituiti dalle query di sola lettura di Flowlight selezionate dal modello. Il database del traffico non viene caricatoSolo quando selezioni un provider ospitato e invii una domanda. La schermata Chiedi mostra le richieste trasmesse Esportazione verso un collectorL'endpoint OpenTelemetry o HTTP che configuriI campi mostrati in Impostazioni › Esportazione, come le aggregazioni del traffico e gli avvisi. Le intestazioni di autenticazione sono conservate nel portachiaviSolo dopo che hai configurato un endpoint e attivato l'esportazione @@ -129,11 +130,15 @@

Conservazione

Questo sito

Questo sito è una pagina statica ospitata su GitHub Pages e distribuita tramite Cloudflare. Non imposta cookie e non esegue analisi. GitHub - e Cloudflare elaborano le richieste per distribuirlo, e i caratteri vengono caricati da Google Fonts, che riceve il tuo indirizzo IP quando lo visiti.

+ e Cloudflare elaborano le richieste per distribuirlo. I caratteri vengono serviti da questo dominio, quindi visualizzare una pagina non manda + nulla a nessun altro — questa pagina prima li caricava da Google, il che significava che la pagina che spiega come Flowlight non mandi nulla + da nessuna parte faceva una richiesta a Google per visualizzare se stessa.

Contatti

-

Domande o dubbi sulla privacy? Apri una segnalazione. Per qualsiasi cosa delicata, usa la - segnalazione privata delle vulnerabilità di GitHub sul repository.

+

Domande o dubbi sulla privacy? Apri una segnalazione. Per un problema di sicurezza usa la + segnalazione privata delle vulnerabilità di GitHub, oppure scrivi a + security@xinbetween.com se preferisci non usare GitHub: vedi + SECURITY.md per sapere cosa aspettarti.

diff --git a/docs/it/threat-model/index.html b/docs/it/threat-model/index.html new file mode 100644 index 0000000..a62c116 --- /dev/null +++ b/docs/it/threat-model/index.html @@ -0,0 +1,279 @@ + + + + + +Modello di minaccia di Flowlight + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

Modello di minaccia

+

Osservare, non impedire

+

Flowlight ti dice cosa sta inviando il software sul tuo Mac, e dove. Non è una difesa contro un attaccante che + controlla già la macchina, e la differenza conta abbastanza da stare su una pagina tutta sua invece che in una nota.

+
+ +
+ + +
+

A cosa serve

+

Flowlight risponde a una domanda a cui il Mac non risponde: quale app ha inviato questo, e dove è andato? È costruito per il + software che si comporta male alla luce del sole — un agente IA che contatta qualcosa che nessuno gli ha chiesto, uno strumento che carica più + del dovuto, un processo che parla con un indirizzo senza nome. Quel comportamento è visibile nel traffico, e il compito di Flowlight è renderlo + leggibile e dire onestamente quando non ci riesce.

+

Non è un antivirus, non è un agente EDR e non è un firewall nel senso di qualcosa che si mette tra te e un attaccante. Dove le due cose si + sovrappongono — Flowlight può rifiutare connessioni — il rifiuto è una comodità per controllare software di cui ti fidi già, non una barriera + contro software di cui non ti fidi.

+ +

Da cosa difende

+
    +
  • Dati che escono inosservati. Un'app o un agente che invia da qualche parte dove non l'avresti approvato, anche attraverso + uno strumento che ha eseguito lui stesso. Flowlight attribuisce la connessione al processo che l'ha fatta e all'agente che ha avviato quel + processo.
  • +
  • Cambi di comportamento silenziosi. Un'app che all'improvviso contatta destinazioni nuove, muove molto più della sua linea + di base o lavora mentre sei via. Ogni avviso indica il numero che l'ha fatto scattare, così puoi non essere d'accordo.
  • +
  • Un agente che va oltre ciò che hai consentito. Un elenco consentiti per ogni agente, e regole che rifiutano le connessioni + fuori da quell'elenco, con il rifiuto registrato e un clic per consentirla.
  • +
  • Un aggiornamento manomesso. Ogni versione pubblica una checksum; l'aggiornamento rifiuta un download che non può + verificare e rifiuta di installare un'app che non sia firmata dallo stesso team della copia che sta chiedendo l'aggiornamento.
  • +
+ +

Il software con root può spegnerlo

+

Flowlight gira come te, con un'estensione di sistema che macOS avvia per suo conto. Qualsiasi cosa giri come root — o qualsiasi cosa di cui + approvi l'installer — può scaricare quell'estensione, fermare l'app o eliminare il suo database. Nulla nel progetto lo impedisce, e nessuno + strumento di monitoraggio su macOS può impedirlo e restare al tempo stesso uno strumento che puoi spegnere anche tu.

+

L'affermazione onesta è più stretta e resta utile: il software che si comporta male ma non sta attivamente sfuggendo a un monitoraggio viene + visto. Il software che vi sta attivamente sfuggendo può non essere visto, e lascerà almeno un buco — un'estensione che si è fermata, un periodo + senza dati — che la schermata Copertura è lì per mostrare.

+ +

Cosa sfugge all'acquisizione

+
    +
  • Il traffico precedente all'avvio dell'acquisizione. Non c'è nessun recupero a posteriori. Una connessione aperta prima del + filtro non gli è mai stata offerta.
  • +
  • I servizi di sistema esenti dai filtri di contenuto. macOS non mostra tutto a un filtro di contenuto; una parte del suo + traffico non arriva mai al nostro.
  • +
  • Un altro filtro di contenuto che occupa il posto. macOS ne esegue uno alla volta. Se ce l'ha una VPN o un agente di + sicurezza, il filtro di Flowlight si installa, si connette e non gli viene mai chiesto di filtrare nulla: Acquisizione lo dice, invece di + mostrare una schermata vuota.
  • +
  • Le connessioni brevi, con il campionatore. Senza l'estensione, Flowlight legge i contatori una volta al secondo: una + connessione che si apre e si chiude tra due letture non viene mai registrata.
  • +
  • I canali che non sono TCP o UDP. Bluetooth e USB si vedono come dispositivi, non come byte. Il server MCP locale di un + agente che comunica tramite una pipe non è affatto traffico di rete e non compare da nessuna parte.
  • +
+ +

Cosa sfugge all'ispezione

+

L'ispezione HTTPS legge solo ciò che viene instradato attraverso il proxy locale di Flowlight, e questo lo decide un programma quando parte. + Un'app che ignora le impostazioni proxy, una avviata prima che l'ispezione fosse attivata, o una che applica il pinning dei certificati passa + intatta — deliberatamente, perché rompere una connessione con pinning romperebbe l'app. Nemmeno QUIC viene offerto al proxy.

+

Quindi una schermata Ispeziona vuota significa «qui non è stato instradato nulla», non «non è successo nulla». Copertura dice quale delle due + cose valga, app per app.

+ +

Cosa è, e cosa non è, il blocco

+

Una regola che rifiuta le connessioni viene eseguita dall'estensione di rete, sul percorso, prima che la connessione venga stabilita. Una + regola che nomina un URL viene eseguita invece dal proxy di ispezione, che risponde alla richiesta con uno stato che l'app può leggere. Sono le + sole due parti di Flowlight che agiscono invece di riferire — il campionatore nettop non può rifiutare proprio nulla, quindi su un Mac che + acquisisce con il campionatore nessuna regola viene applicata, e Flowlight lo dice invece di offrire un interruttore che non fa niente.

+

Non è comunque impedire. Un agente che può eseguire una shell può fare a mano ciò che avrebbe fatto lo strumento rifiutato. Un rifiuto che + puoi annullare con un clic è un rifiuto attraverso cui il tentativo successivo di un agente può passare. Il traffico locale, il DNS, i servizi + di Apple e le connessioni di Flowlight stesso non vengono mai rifiutati, perché un Mac bloccato è un esito peggiore di un agente bloccato. E + l'applicazione decade pochi secondi dopo che Flowlight smette di funzionare: un rifiuto che nessuno può vedere è peggio di nessun rifiuto.

+

Ispezione e rifiuto non si combinano. Il traffico instradato attraverso il proxy di Flowlight stesso lascia il Mac come + traffico di Flowlight, e Flowlight non rifiuta mai se stesso — quindi un'app di cui stai leggendo le richieste è un'app le cui connessioni le + regole non fermano più. Attivare l'ispezione per vedere di più ti costa l'applicazione delle regole, e finora nulla sullo schermo lo diceva.

+ +

Cosa conserva Flowlight stesso

+

Metadati del traffico in un database SQLite locale, con una conservazione pubblicata. Con l'ispezione HTTPS attiva conserva anche i corpi delle + richieste e delle risposte per tre giorni — la cosa più delicata che arrivi mai a tenere. Le intestazioni con credenziali vengono oscurate per + nome e per parola, che è un'euristica e non una garanzia; un'intestazione che porta un segreto sotto un nome che nulla riconosce può essere + registrata.

+

Il database del traffico non viene mai caricato. Tre cose più piccole lasciano il Mac senza che nessuno le chieda, tutte e tre nominate nella + pagina sulla privacy: il controllo degli aggiornamenti, che chiede a GitHub l'ultima versione all'avvio e una + volta al giorno; la ricerca del proprietario della rete, che chiede a Team Cymru degli indirizzi pubblici senza nome host; e, finché Flowlight + legge i contatori invece di far girare la sua estensione, una ricerca DNS inversa degli indirizzi per cui non ha visto alcun nome. Le prime due + hanno un interruttore per disattivarle. La terza no, perché sul campionatore è in gran parte il modo in cui una connessione arriva ad avere un + nome: va al resolver che il Mac già usa, e si ferma appena l'estensione prende il suo posto e nomina le connessioni dal traffico stesso. Chiedi + con un modello ospitato invia molto più di ognuna di esse, ed è la sola cosa che resta disattivata finché non la configuri.

+ +

Aggiornamenti

+

Le versioni sono firmate con un Developer ID e notarizzate. L'aggiornamento richiede una checksum pubblicata e rifiuta un download che non ne + ha una, poi verifica che l'app scaricata sia firmata dallo stesso team della copia in esecuzione prima di installarla. Un aggiornamento firmato + da qualcun altro viene rifiutato anche se per il resto è valido.

+ +

Segnalare una vulnerabilità

+

Usa la segnalazione privata delle vulnerabilità di GitHub, oppure scrivi a + security@xinbetween.com se preferisci non usare GitHub. + SECURITY.md dice cosa rientra nell'ambito e cosa aspettarsi. + Un bug ordinario — un crash, un numero sbagliato, una schermata fuorviante — va invece nelle + segnalazioni.

+
+
+
+ + + + + diff --git a/docs/ja/about/index.html b/docs/ja/about/index.html index 3fec952..2f51e1a 100644 --- a/docs/ja/about/index.html +++ b/docs/ja/about/index.html @@ -32,10 +32,8 @@ - - - - + + @@ -47,6 +45,7 @@ AI エージェント ドキュメント プライバシー + 脅威モデル リリース 概要 GitHub diff --git a/docs/ja/docs/index.html b/docs/ja/docs/index.html index bd80b09..d9f9524 100644 --- a/docs/ja/docs/index.html +++ b/docs/ja/docs/index.html @@ -32,11 +32,9 @@ - - - - - + + + @@ -47,6 +45,7 @@ AI エージェント ドキュメント プライバシー + 脅威モデル リリース 概要 GitHub @@ -90,7 +89,7 @@

Flowlight の使い方

設定とデータ @@ -148,12 +147,20 @@

各ビュー

ビューショートカット答えてくれること ライブ⌘1いま何が動いているか。直近数秒間のアプリごとの速度と、最も忙しい接続先。 - AI エージェント⌘2どのエージェントが動いていて、どの AI プロバイダを使い、ほかに何と通信したか。 + AI エージェント⌘2どのエージェントが動いていて、どの AI プロバイダを使い、ほかに何と通信したか。 レポート⌘3トラフィックがどこへ行ったか。秒から年まで。アプリ・接続先・IP でグループ化し、グラフや気になるものに切り替え、CSV に書き出せます。 - アラート⌘4いつもと違って見えたものすべて。アプリ、接続先、そしてルールのしきい値を超えた数値とともに。 - インスペクト⌘5任意。Flowlight を経由させたエージェントの復号済みリクエストと、その裏にあるツール呼び出し。検索はリクエストとレスポンスの本文にも届きます。 - キャプチャ⌘6どのエンジンで記録しているか、機能拡張の状態、ホスト名の学習、そしてデータベースの場所。 + アラート⌘4いつもと違って見えたものすべて。アプリ、接続先、そしてルールのしきい値を超えた数値とともに。 + ルール⌘5設定したすべての許可リストと拒否。それぞれが何を対象にし、実際に何を止めたか。 + 質問⌘6自分のトラフィックについての、ふつうの言葉での質問。記録された履歴から、ローカルまたはホスト型のモデルが答えます。 + インスペクト⌘7任意。Flowlight を経由させたエージェントの復号済みリクエストと、その裏にあるツール呼び出し。検索はリクエストとレスポンスの本文にも届きます。 + デバイス⌘8オンにするまではオフ。Bluetooth、USB、外部ストレージ。Mac はネットワークと同じくらいこれらを使います。 + カバー範囲⌘9Flowlight が把握できないもの。アプリごとに、その通信が見えたか、名前が付いたか、読めたか。 + キャプチャ⌘0どのエンジンで記録しているか、機能拡張の状態、ホスト名の学習、そしてデータベースの場所。 +

ショートカットはサイドバーの並び順なので、⌘0 は飛ばされた番号ではなく 10 番目の項目です。

+
ライブビュー。アプリの一覧に、現在の送信と受信の速度、そして最も忙しい接続先が並んでいます。
+
ライブ。Flowlight が最初に開く画面です。

レポートでは、棒にポインタを重ねるとどのアプリが押し上げたかがわかり、クリックすると拡大、どの行でもダブルクリックするとその行だけにレポートを絞り込めます。

AI エージェントのルール

@@ -279,10 +286,16 @@

HTTPS インスペクション(任意)

インスペクト用のターミナルを開くを使い、そこから起動してください。詳細では、すべてのアプリではなく AI エージェントだけを復号する、 復号しないホストのリストを編集する、1 つのシェル用の設定をコピーする、証明書と記録したすべてを削除するといった操作ができます。

Flowlight は内蔵の一覧にある Apple のサービスとパスワード管理アプリを復号の対象から除外します(リストは「設定」で編集できます)。証明書をピン留めしているアプリは - Flowlight の証明書を拒否することがあります。Flowlight はそれを検知し、暗号化されたまま通過させます。API キー、Cookie、その他の認証情報ヘッダは保存されません。 + Flowlight の証明書を拒否することがあります。Flowlight はそれを検知し、暗号化されたまま通過させます。API キー、Cookie、その他の認証情報ヘッダは、保存される前にその長さに置き換えられます。 + 名前と、名前に含まれる語で照合するので、ベンダー独自の綴りも捕まえますが、すべてを捕まえると約束はできません。 記録したリクエストの保持期間は 3 日で、証明書と記録データを削除すると、証明書、その信頼設定、記録したすべてが削除されます。 インスペクションは HTTP/1.1 のみ(Flowlight が両側にそれを要求します)で、デモモードでは利用できません。

+

行から辿ってここへ来る。ライブ、レポート、AI エージェントでアプリや宛先を右クリックし、 + … のトラフィックをインスペクトを選ぶと、その名前が検索欄に入った状態でインスペクトが開きます。隠れたフィルタではなく + 検索欄にしてあるのは意図的です。始めた場所に戻らなくても、広げたり、絞ったり、消したりできます。現れるのはプロキシを通った + トラフィックだけなので、よく動いていると分かっている行でも、ここには何も出ないことがあります。

+

モック応答

API が失敗したり、止まったり、おかしなものを返したときにエージェントがどう振る舞うかを見るには、そのエンドポイントに自分で応答します。 インスペクト › モック応答では、1 つのルールがホスト、パス、メソッドを指定し、返すステータス、ヘッダ、本文、そして任意の遅延を決めます。 @@ -396,6 +409,23 @@

キャプチャ:エンジンとソ 接続を 1 件も渡されません。キャプチャは見つけたものを一覧にし、フィルタを必要とせずそれらと並んで動くサンプラーへ戻すことを申し出ます。 どう作られているかは開発者向けガイドをご覧ください。

+

カバー範囲:Flowlight が把握できないもの

+

ほかの画面はどれも、何が起きたかに答えます。カバー範囲が答えるのは、何が伝えられなかったはずかであり、それが + ほかの画面にどれだけの価値があるかを決めます。アプリごとに 3 つの問いを立てます。3 つは互いに独立して失敗するからです。

+

見えていたか。ネットワーク機能拡張は、それぞれのフローが開かれた時点で見ています。nettop サンプラーは 1 秒に + 1 回カウンタを読むので、2 回の読み取りの間に開いて閉じる接続、たとえば DNS 照会、速い API 呼び出し、curl を実行して + 終了するスクリプトは、まるごと欠けます。これはどんなパーセンテージでも表せない欠落なので、数値ではなく言葉で書いてあります。

+

名前が付いていたか。そのアプリのバイト数のうち、単なるアドレスではなくホスト名のある宛先に向かった + 割合です。接続数ではなくバイト数です。1 ギガバイトを運ぶ名前のない接続 1 本は、1 キロバイトずつ運ぶ接続 100 本より大きな穴で、 + 接続数で数えると順序が逆になります。

+

中身が読めたか。そのアプリのトラフィックを HTTPS インスペクションが少しでも復号したかどうかです。答えは 4 つあり、 + 欠落はそのうち 1 つだけです。読めている。プロキシに届いていない。「復号しないホスト」に入っている(これはあなたの選択です)。 + あるいはインスペクションがオフである(これは設定であって、アプリごとの失敗ではありません)。

+

どのエンジンにもまったく見えないものは、このページに任せず画面そのものに挙げてあります。キャプチャを始める前の + トラフィック、コンテンツフィルタに一度も見せられないシステムサービス、証明書をピン留めしているアプリ、プロキシに一度も渡されない + QUIC、そしてパイプで話すエージェントのローカル MCP サーバです。これらは Flowlight のどこにも現れないため、ここの数値にも + 入っていません。見えるものだけを数えたカバー範囲の数値は、事実ではなく安心材料になってしまいます。

+

デバイス:Bluetooth、USB、外部ストレージ

Mac が送受信する経路は TCP と UDP だけではありません。デバイス画面が残りを扱います。この画面は、自分でオンにするまではオフです。 Flowlight がまだ持っていない権限を必要とするからではなく、Mac をより広く監視するかどうかは、アップデートが勝手に決めることではなく、あなたが決めることだからです。

@@ -516,8 +546,10 @@

質問と回答

どの機能拡張がインストールされているか、macOS が本当に Flowlight のフィルタを起動したか、最後に何かが記録されたのはいつかがわかります。 issue に貼り付けてください。
Flowlight は私に関する情報をどこかに送りますか?
-
いいえ。アカウントもテレメトリも分析もありません。行うリクエストは、1 日 1 回のアップデート確認、任意のネットワーク所有者の照会、そして逆引き DNS だけです。 - それぞれプライバシーのページに一覧があり、どれにもオフのスイッチがあります。
+
アカウントもテレメトリも分析もなく、トラフィックのデータベースがアップロードされることもありません。Mac から出ていくリクエストは 3 つあり、 + どれもプライバシーのページに挙げてあります。1 日 1 回のアップデート確認と、任意のネットワーク所有者の照会。 + この 2 つにはオフのスイッチがあります。そして Flowlight がサンプラーで動いているあいだの逆引き DNS。こちらにはスイッチがありません。 + これがないと、サンプラーはほとんどの接続に名前を付けられないからです。
Mac が遅くなったり、バッテリーが減ったりしませんか?
ウインドウを閉じているあいだ、Flowlight はほとんど何もしません。メニューバーの速度を保ち、1 秒に 1 行書き込むだけです。ネットワーク機能拡張のほうが、 1 秒ごとに短命な nettop プロセスを起動する代替のサンプラーよりも負荷が低いです。
diff --git a/docs/ja/index.html b/docs/ja/index.html index dc101c4..a09b224 100644 --- a/docs/ja/index.html +++ b/docs/ja/index.html @@ -32,10 +32,8 @@ - - - - + + @@ -47,6 +45,7 @@ AI エージェント ドキュメント プライバシー + 脅威モデル リリース 概要 GitHub @@ -106,7 +105,7 @@

アプリの通信が見える。
-
Flowlight の AI エージェントビュー。Claude Code、Cursor、Codex、Python スクリプトが、利用している AI プロバイダ、ほかへ送ったトラフィック、SMTP・SSH・FTP・大量送信・生 IP のリスクバッジとともに並んでいます。

AI エージェントビュー。各エージェントのモデルプロバイダと、それ以外に通信した相手のすべて。デモデータで表示しています。

@@ -217,7 +216,9 @@

AI エージェントのネットワーク利用を見張る

期間を決められるルール

アプリ、エージェント、接続先、あるいは 1 つの URL を指定してブロックします。見つけた行を右クリックするだけです。 ずっと、指定の時刻まで、Flowlight を終了するまで、または決めた時間帯だけ。一時停止のスイッチが 1 つあり、拒否のたびに - 抜け道も示します。いちばん具体的なルールが勝ち、同じ強さなら拒否が勝ちます。

+ 抜け道も示します。いちばん具体的なルールが勝ち、同じ強さなら拒否が勝ちます。 + これはすでに信頼しているソフトウェアを制御する手段であって、 + 信頼していないソフトウェアを阻む壁ではありません。脅威モデルをご覧ください。

Cursor ⇥ raw.githubusercontent.com · 4 回拒否 · 平日 18:00–09:00

@@ -370,16 +371,16 @@

対応するツール呼び出しとネットワークリクエストを結 インスペクト対象のターミナルからエージェントを起動すれば、エージェントとそのツールの対応 HTTP 通信が復号され、モデルが要求した ツール呼び出しと、返っていった結果まで見えます。

-
Flowlight のインスペクトビュー。復号された Claude Code のリクエストとそのツール呼び出しの一覧、そして paste.example への curl の送信の詳細。実行元となった Bash のツール呼び出しと、リクエスト本文に入った送信済みのメモが表示されています
あのメモはどこへ行った?paste.example への curl の送信を、モデルが要求した Bash コマンドまでたどり、 送られた本文まで示します。
-
Claude Code のツールタブ。Bash、Read と 2 つの MCP ツールが、説明とモデルが呼び出した回数とともに並んでいます
エージェントがモデルに渡すツールのすべて。エージェントはターンごとにツールを宣言するので、Flowlight はそれを全部並べ、 モデルが実際に使ったものと、一度も触らなかったものを示します。
-
Codex の MCP サーバタブ。プロバイダ経由と記された sentry サーバ、その URL、承認は「しない」に設定、許可されたツールと提供するツールが表示されています
回線上では見えないものまで。エージェントがプロバイダ側に MCP サーバへの接続を任せると、その通信は Mac を通りません。 でも依頼そのものは通るので、サーバ、その URL、承認の設定、提供するツールはやはり表示されます。
@@ -398,9 +399,14 @@

対応するツール呼び出しとネットワークリクエストを結

次に来るもの

これから

-

Flowlight は今日すでに、監視し、説明し、拒否します。残りはこの順番で作っています。

+

Flowlight は今日すでに、監視し、説明し、拒否します。脅威モデルが述べるとおり、 + これは防止ではなく監視です。残りはこの順番で作っています。

+
インスペクションに予算を 0.9.3

記録された本文は、Flowlight が保持するもののなかで最も機微なものです。拒否リストではなくヘッダの許可リスト、自分で決めるパターン、ヘッダを一切残さない選択肢、アプリごとの上限、そして自分で期限切れになるセッション。

+
このルールなら何が起きていたかを見せて 0.9.4

ルールを直近 1 日に当てて再生し、まだ何も拒否しないうちに、拒否していたはずのものを一覧にします。データはすでにあります。ただ、これまでは過去を説明することしかしてきませんでした。

+
Mac から出ていくものを、出ていく前に 0.9.5

最初の 1 行がコレクターに届く前に、宛先、暗号化されているか、どのフィールドが送られるか、そのなかにヘッダはあるか。Flowlight がほかのすべてに求めている開示を、自分自身に当てはめます。

+
エージェントがネットワーク以外で何をしたか 1.0

ファイルが出ていくことは、読み取りとそれに続く送信であり、今日見えているのは送信だけです。エージェントのツールが何を開き、何を書き、何を起動したかを記録すれば、秘密鍵を読み、そのあと paste.example と通信したが、2 つの画面ではなく 1 つの発見になります。リソースモニタではありません。CPU とメモリはアクティビティモニタの仕事です。Apple の EndpointSecurity の権限が必要で、その前に、上のインスペクションの予算が必要です。

まず Linux、次に Windows

分析の中核は移植できる Swift ですが、キャプチャはそうではありません。まずローカルの Web UI を備えた Linux 用デーモンを、macOS の API ではなく eBPF の上に作ります。

@@ -423,7 +429,7 @@

監視しなくていい監視ツール

-
Flowlight での Claude Code の詳細。呼び出し回数と 1 件の失敗が付いたツールと MCP サーバ、許可リスト、そしてツール呼び出しタブに、失敗した git push、応答とリクエストを伴う paste.example への curl 送信、npm install、GitHub の issue、ドキュメント検索、ファイル読み取りが、それぞれの結果とともに並んでいます
1 つのエージェント、すべてのツール呼び出し。Claude Code が起動した git や curl、MCP サーバの通信は、Claude Code のものとして数えます。 HTTPS インスペクションをオンにすると、ツール呼び出しタブに、モデルが何を要求し、何が返り、各ツールがどんなリクエストを出したかが並びます。 @@ -433,10 +439,10 @@

監視しなくていい監視ツール

-
レポートビュー。1 時間ごとの受信と送信の棒グラフ、アプリ・接続先・プロトコルのドーナツグラフが表示されています
レポート。秒から年までのズーム、3 つのグループ化、アプリが数百あっても読めるグラフ。
-
アラートビュー。エージェントの情報流出、メール、FTP、離席中、トラフィック急増のアラートが並んでいます
アラート。どれもアプリ、接続先、きっかけになった数値を示します。
diff --git a/docs/ja/privacy/index.html b/docs/ja/privacy/index.html index 85bd777..bccc14d 100644 --- a/docs/ja/privacy/index.html +++ b/docs/ja/privacy/index.html @@ -32,10 +32,8 @@ - - - - + + @@ -47,6 +45,7 @@ AI エージェント ドキュメント プライバシー + 脅威モデル リリース 概要 GitHub @@ -100,15 +99,16 @@

この Mac で読み取るもの

HTTPS インスペクション

デフォルトではオフです。オンにすると、Flowlight はこの Mac 上に証明書認証局を作り(その鍵が ~/Library/Application Support/Flowlight/Inspection から出ることはありません)、この Mac からの接続だけを受け付けるプロキシを動かします。 - 経由させたアプリについては、リクエストとレスポンスを、2 MB までの本文も含めてローカルのデータベースに 3 日間記録します。認証情報のヘッダ - (Authorization、Cookie、API キー)は、何かが保存される前にその長さに置き換えられます。Flowlight は内蔵の一覧にある Apple のサービスとパスワード管理アプリを復号の対象から除外します。記録したインスペクションのデータが Flowlight によってアップロードされることはありません。インスペクションをオフにするとプロキシが止まり、証明書と記録データを削除すると、証明書、その信頼設定、記録したすべてのリクエストが削除されます。

+ 経由させたアプリについては、リクエストとレスポンスを、2 MB までの本文も含めてローカルのデータベースに 3 日間記録します。認証情報のヘッダは、何かが保存される前にその長さに置き換えられます。 + 名前(Authorization、Cookie、API キー)と、名前に含まれる語で見分けるので、X-Access-Key も捕まえます。 + ただしこれはヒューリスティックであって保証ではありません。何も認識できない名前のもとに秘密を載せたヘッダは、記録されてしまいます。Flowlight は内蔵の一覧にある Apple のサービスとパスワード管理アプリを復号の対象から除外します。記録したインスペクションのデータが Flowlight によってアップロードされることはありません。インスペクションをオフにするとプロキシが止まり、証明書と記録データを削除すると、証明書、その信頼設定、記録したすべてのリクエストが削除されます。

アプリが行うネットワークリクエスト

- + @@ -128,11 +128,15 @@

保持期間

このウェブサイト

このサイトは GitHub Pages で公開され、Cloudflare を通して配信される静的なページです。Cookie は設定せず、分析も動かしていません。 - 配信のために GitHub と Cloudflare がリクエストを処理し、フォントは Google Fonts から読み込まれるため、訪問時に IP アドレスが同社に渡ります。

+ 配信のために GitHub と Cloudflare がリクエストを処理します。フォントはこのドメインから配信されるので、ページを表示しても + ほかの誰にも何も送りません。以前はこのページが Google からフォントを読み込んでいました。つまり、Flowlight はどこにも何も送らないと + 説明するページが、自分自身を表示するために Google へリクエストを出していたのです。

連絡先

-

質問やプライバシーに関する懸念がありますか?issue を作成してください。機密性のある内容には、 - リポジトリの GitHub のプライベート脆弱性報告をお使いください。

+

質問やプライバシーに関する懸念がありますか?issue を作成してください。 + セキュリティの問題には、GitHub のプライベート脆弱性報告をお使いください。 + GitHub を使いたくない場合は security@xinbetween.com にメールしてください。 + 何を期待してよいかは SECURITY.md をご覧ください。

diff --git a/docs/ja/threat-model/index.html b/docs/ja/threat-model/index.html new file mode 100644 index 0000000..7d821e3 --- /dev/null +++ b/docs/ja/threat-model/index.html @@ -0,0 +1,280 @@ + + + + + +Flowlight の脅威モデル + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

脅威モデル

+

監視であって、防止ではない

+

Flowlight は、Mac 上のソフトウェアが何をどこへ送っているかを教えます。すでにマシンを手中にしている攻撃者に対する + 防御ではありません。その違いは、脚注ではなく独立した 1 ページで述べるだけの重さがあります。

+
+ +
+ + +
+

何のためにあるのか

+

Flowlight は、Mac が答えてくれない問いに答えます。どのアプリがこれを送り、どこへ行ったのか。作られた相手は、 + 隠れもせずに行儀の悪いソフトウェアです。誰も頼んでいない先に接続する AI エージェント、送るべき以上をアップロードするツール、 + 名前のないアドレスと話しているプロセス。そうした振る舞いはトラフィックに現れます。Flowlight の仕事は、それを読めるようにすること、 + そして読めないときには正直にそう言うことです。

+

アンチウイルスではなく、EDR エージェントでもなく、あなたと攻撃者のあいだに立つという意味でのファイアウォールでもありません。 + 両者が重なるところ、つまり Flowlight が接続を拒否できるところでも、その拒否はすでに信頼しているソフトウェアを制御するための + 便利さであって、信頼していないソフトウェアに対する防壁ではありません。

+ +

何を防ぐのか

+
    +
  • 気づかれないまま出ていくデータ。アプリやエージェントが、あなたなら承認しなかった先へ送ること。エージェント自身が + 実行したツール経由の場合も含みます。Flowlight はその接続を、接続を行ったプロセスと、そのプロセスを起動したエージェントに + 結び付けます。
  • +
  • 静かな振る舞いの変化。急に新しい接続先と通信しはじめたアプリ、ベースラインよりはるかに多く動かすアプリ、 + あなたが離れているあいだに働くアプリ。どのアラートも、それを引き起こした数値を示します。だからあなたはそれに異を唱えられます。
  • +
  • 許した範囲を超えるエージェント。エージェントごとの許可リストと、その外への接続を拒否するルール。拒否は記録され、 + ワンクリックで許可できます。
  • +
  • 改ざんされたアップデート。どのリリースもチェックサムを公開します。アップデート機能は、検証できないダウンロードを + 拒否し、アップデートを求めている実行中のコピーと同じチームが署名していないアプリのインストールを拒否します。
  • +
+ +

root 権限を持つソフトウェアは、これを止められる

+

Flowlight はあなたの権限で動き、macOS がその代わりに起動するシステム機能拡張を使います。root で動くものは、そしてあなたが + インストーラを承認したものは、その機能拡張をアンロードし、アプリを止め、データベースを削除できます。設計上それを防ぐものは何もなく、 + macOS 上のどの監視ツールも、あなた自身が自分で止められるツールでありつづけたまま、それを防ぐことはできません。

+

正直な主張はもっと狭く、それでも役に立ちます。行儀が悪いだけで、監視から積極的に逃れようとはしていないソフトウェアは見えます。 + 積極的に逃れているソフトウェアは見えないかもしれません。それでも少なくとも空白は残ります。止まった機能拡張、データのない期間です。 + それを示すためにカバー範囲の画面があります。

+ +

キャプチャが取りこぼすもの

+
    +
  • キャプチャを始める前のトラフィック。あとから埋めることはできません。フィルタより先に開いた接続は、 + そもそもフィルタに渡されていません。
  • +
  • コンテンツフィルタの対象外となるシステムサービス。macOS はコンテンツフィルタに何もかもを見せるわけではありません。 + macOS 自身のトラフィックの一部は、こちらには決して届きません。
  • +
  • その枠を別のコンテンツフィルタが握っている場合。macOS が動かすのは同時に 1 つだけです。VPN やセキュリティ + エージェントがそれを握っていると、Flowlight のフィルタはインストールされ、接続もしますが、何かをフィルタするよう求められることは + ありません。キャプチャは、空の画面を見せるのではなく、そう伝えます。
  • +
  • 短い接続。サンプラーの場合です。機能拡張がなければ、Flowlight は 1 秒ごとにカウンタを読みます。2 回の読み取りの + あいだに開いて閉じる接続は、決して記録されません。
  • +
  • TCP でも UDP でもない経路。Bluetooth と USB はデバイスとしては見えますが、バイト数としては見えません。 + エージェントのローカルの MCP サーバがパイプで話すものは、そもそもネットワークトラフィックではなく、どこにも現れません。
  • +
+ +

インスペクションが取りこぼすもの

+

HTTPS インスペクションが読めるのは、Flowlight のローカルプロキシを経由したものだけで、それを決めるのはプログラムが起動する + 瞬間です。プロキシ設定を無視するアプリ、インスペクションをオンにする前に起動したアプリ、証明書をピン留めするアプリは、手を加えられずに + 通り過ぎます。これは意図してそうしています。ピン留めされた接続を壊せば、そのアプリが壊れるからです。QUIC もプロキシには渡されません。

+

つまり、インスペクトの画面が空なら、それは「ここには何も通されなかった」という意味で、「何も起きなかった」という意味では + ありません。どちらなのかは、カバー範囲がアプリごとに答えます。

+ +

ブロックとは何で、何でないか

+

接続を拒否するルールを実行するのはネットワーク機能拡張で、その経路の中で、接続が行われる前に実行します。URL を指定する + ルールを実行するのはインスペクション用のプロキシで、アプリが読める状態コードでリクエストに応えます。報告するのではなく実際に + 手を出す Flowlight の部分は、この 2 つだけです。nettop サンプラーは何ひとつ拒否できないので、サンプラーで動いている Mac では + どのルールも強制されません。Flowlight は何もしないスイッチを見せるのではなく、そのことをはっきり言います。

+

それでも防止ではありません。シェルを使えるエージェントは、拒否されたツールがしたはずのことを手作業で行えます。ワンクリックで + 取り消せる拒否は、エージェントの次の試みが通り抜けうる拒否でもあります。ローカルのトラフィック、DNS、Apple 純正のサービス、 + Flowlight 自身の接続は決して拒否されません。ブロックされたエージェントより、ブロックされた Mac のほうが悪い結果だからです。 + そして強制は、Flowlight が動作を止めた数秒後に失効します。誰にも見えない拒否は、拒否がないより悪いからです。

+

インスペクションと拒否は両立しません。Flowlight 自身のプロキシを通ったトラフィックは、Flowlight の + トラフィックとして Mac を出ていき、Flowlight が自分自身を拒否することはありません。つまり、リクエストを読んでいるアプリは、 + ルールではもう接続を止められないアプリです。もっと見るためにインスペクションをオンにすることは、強制を手放すことでもあり、 + 画面にはこれまでそう書かれていませんでした。

+ +

Flowlight 自身が保持するもの

+

トラフィックのメタデータを、ローカルの SQLite データベースに、公開された保持期間のあいだ保持します。HTTPS インスペクションを + オンにしていれば、リクエストとレスポンスの本文も 3 日間保持します。これは Flowlight が保持するもののなかで最も機微なものです。 + 認証情報のヘッダは名前と語によって隠されますが、それはヒューリスティックであって保証ではありません。何も認識できない名前のもとに + 秘密を載せたヘッダは、記録されることがあります。

+

トラフィックのデータベースがアップロードされることはありません。それでも、頼まなくても Mac から出ていくものが 3 つあり、 + どれもプライバシーのページに挙げてあります。起動時と 1 日 1 回、最新のリリースを GitHub に + 尋ねるアップデートの確認。ホスト名のない公開アドレスについて Team Cymru に尋ねるネットワーク所有者の照会。そして、 + Flowlight が機能拡張ではなくカウンタを読んでいるあいだ、名前が見つからなかったアドレスの逆引き DNS 照会です。 + はじめの 2 つにはオフのスイッチがあります。3 つめにはありません。サンプラーでは、接続に名前が付く道のほとんどがそれだからです。 + 照会はこの Mac がすでに使っているリゾルバへ行き、機能拡張が引き継いでトラフィック自身から名前を付けるようになれば止まります。 + ホスト型モデルでの質問は、そのどれよりもはるかに多くを送りますが、設定するまではオフのままである唯一のものです。

+ +

アップデート

+

リリースは Developer ID で署名され、公証されています。アップデート機能は公開されたチェックサムを要求し、それがないダウンロードを + 拒否します。そのうえで、ダウンロードしたアプリが実行中のコピーと同じチームの署名であることを確かめてから、インストールします。 + 別の誰かが署名したアップデートは、ほかの点で有効であっても拒否されます。

+ +

脆弱性を報告する

+

GitHub のプライベート脆弱性報告をお使いください。GitHub を + 使いたくない場合は security@xinbetween.com にメールしてください。対象範囲と + 期待してよいことは SECURITY.md に書いてあります。 + クラッシュ、数値の誤り、誤解を招く画面といった通常の不具合は、かわりに + issue へどうぞ。

+
+
+
+ + + + + diff --git a/docs/ko/about/index.html b/docs/ko/about/index.html index 13e174f..5673add 100644 --- a/docs/ko/about/index.html +++ b/docs/ko/about/index.html @@ -32,10 +32,8 @@ - - - - + + @@ -47,6 +45,7 @@ AI 에이전트문서개인정보 + 위협 모델릴리스소개GitHub diff --git a/docs/ko/docs/index.html b/docs/ko/docs/index.html index 0dce2b9..375f97b 100644 --- a/docs/ko/docs/index.html +++ b/docs/ko/docs/index.html @@ -32,11 +32,9 @@ - - - - - + + + @@ -47,6 +45,7 @@ AI 에이전트문서개인정보 + 위협 모델릴리스소개GitHub @@ -90,7 +89,7 @@

Flowlight 사용하기

설정과 데이터 @@ -149,12 +148,20 @@

여러 뷰

リクエスト送信先含まれるものタイミング
アップデートの確認api.github.com最新リリースを尋ねる通常の HTTPS リクエスト。GitHub が見るのは、IP アドレスと Flowlight/<version> というユーザーエージェントです起動時と 1 日 1 回(0.1.2 以降)。オフのスイッチは設定 › 一般
アップデートのダウンロードgithub.comディスクイメージと、そのチェックサムファイル「ダウンロードして開く」をクリックしたときだけ
逆引き DNSあなたが設定した DNS リゾルバホスト名が見つからなかった場合の、IP アドレスの登録名の照会デフォルトのキャプチャモードで、必要に応じて
逆引き DNSあなたが設定した DNS リゾルバホスト名が見つからなかった場合の、IP アドレスの登録名の照会必要に応じて、サンプラーのキャプチャモードで。ネットワーク機能拡張が動き出すまではこれがデフォルトです。オフのスイッチはありません。これがないとサンプラーはほとんどの接続に名前を付けられないからです。ネットワーク機能拡張はトラフィック自身から名前を付けるので、これを行いません
ネットワーク所有者の照会Team Cymru(DNS 経由)ホスト名がわからないパブリック IP アドレス。プライベートアドレスと予約アドレスは、この Mac から決して出ませんデフォルトでオン。オフのスイッチはキャプチャ › ネットワーク所有者を特定
ホスト型モデルでの質問あなたが選んだプロバイダ:Anthropic、OpenAI、Google Gemini、または互換のエンドポイントあなたの質問と、モデルが選んだ読み取り専用の Flowlight の問い合わせが返した結果。トラフィックのデータベース自体はアップロードされませんホスト型のプロバイダを選び、質問を送信したときだけ。質問の画面には、送信されたリクエストが表示されます
コレクターへの書き出しあなたが設定した OpenTelemetry または HTTP のエンドポイント設定 › 書き出しに表示される項目(トラフィックの集計やアラートなど)。認証ヘッダはキーチェーンに保存されますエンドポイントを設定し、書き出しを有効にしたあとだけ
- + - - - + + + + + + +
뷰단축키답해 주는 질문
실시간⌘1지금 무엇이 움직이나. 지난 몇 초 동안의 앱별 속도와 가장 바쁜 목적지.
AI 에이전트⌘2어떤 에이전트가 활동 중이고, 어떤 AI 제공업체를 쓰며, 그 밖에 어디에 접속했나.
AI 에이전트⌘2어떤 에이전트가 활동 중이고, 어떤 AI 제공업체를 쓰며, 그 밖에 어디에 접속했나.
보고서⌘3트래픽이 어디로 갔나. 초에서 연까지. 앱, 목적지, IP로 묶고, 차트나 눈여겨볼 것으로 바꾸고, CSV로 내보냅니다.
알림⌘4이상해 보인 모든 것. 앱과 목적지, 그리고 규칙의 기준을 넘긴 수치와 함께.
검사⌘5선택 사항. Flowlight를 거치도록 지정한 에이전트의 복호화된 요청과 그 뒤에 있는 도구 호출. 검색은 요청·응답 본문까지 들어갑니다.
캡처⌘6어떤 엔진이 기록 중인지, 확장의 상태, 호스트 이름 학습, 그리고 데이터베이스의 위치.
알림⌘4이상해 보인 모든 것. 앱과 목적지, 그리고 규칙의 기준을 넘긴 수치와 함께.
규칙⌘5설정해 둔 모든 허용 목록과 거부, 각각이 무엇을 포괄하는지, 그리고 실제로 무엇을 막았는지.
질문⌘6내 트래픽에 대한 평범한 말로 된 질문. 기록된 이력에서 로컬 모델이나 호스팅 모델이 답합니다.
검사⌘7선택 사항. Flowlight를 거치도록 지정한 에이전트의 복호화된 요청과 그 뒤에 있는 도구 호출. 검색은 요청·응답 본문까지 들어갑니다.
기기⌘8켤 때까지는 꺼져 있습니다. Bluetooth와 USB, 외장 저장 장치. Mac은 네트워크만큼이나 이것들을 씁니다.
포착 범위⌘9Flowlight가 파악하지 못하는 것. 앱별로 그 트래픽이 보였는지, 이름이 붙었는지, 읽혔는지.
캡처⌘0어떤 엔진이 기록 중인지, 확장의 상태, 호스트 이름 학습, 그리고 데이터베이스의 위치.
+

단축키는 사이드바의 순서라서, ⌘0은 건너뛴 자리가 아니라 열 번째 항목입니다.

+
실시간 뷰: 앱 목록에 각각의 현재 보내기·받기 속도와 가장 바쁜 목적지가 함께 나열되어 있습니다.
+
실시간, Flowlight가 처음 여는 화면.

보고서에서는 막대에 포인터를 올려 어떤 앱이 만든 것인지 보고, 클릭해 확대하고, 아무 행이나 두 번 클릭해 보고서를 그 항목으로 좁힐 수 있습니다.

AI 에이전트 규칙

@@ -288,10 +295,16 @@

HTTPS 검사(선택 사항)

수정하거나, 한 셸에 대한 셸 설정을 복사하거나, 인증서와 기록된 모든 것을 제거할 수 있습니다.

Flowlight는 내장된 Apple 서비스와 암호 관리자 목록을 복호화에서 제외합니다(목록은 설정 화면에서 수정할 수 있습니다). 인증서를 고정하는 앱은 Flowlight 인증서를 거부할 수 있는데, Flowlight가 이를 알아채고 암호화된 채로 통과시킵니다. API 키와 쿠키, 그 밖의 - 인증 정보 헤더는 절대 저장하지 않고, 기록된 요청은 3일 동안 보관하며, 인증서 및 기록된 데이터 제거는 인증서와 + 인증 정보 헤더는 무엇이든 저장되기 전에 그 길이 값으로 대체됩니다. 이름으로, 그리고 이름에 든 낱말로 찾아내므로 업체마다 + 다른 표기도 걸리지만, 하나도 빠뜨리지 않는다고 약속할 수는 없습니다. 기록된 요청은 3일 동안 보관하며, 인증서 및 기록된 데이터 제거는 인증서와 그 신뢰 설정, 기록된 모든 것을 삭제합니다. 검사는 HTTP/1.1만 지원하며(Flowlight가 양쪽에 그것을 요청합니다) 데모 모드에서는 쓸 수 없습니다.

+

행에서 곧바로 오는 길. 실시간이나 보고서, AI 에이전트에서 앱이나 목적지를 오른쪽 클릭하고 + …의 트래픽 검사를 고르면, 그 이름이 검색란에 이미 들어간 채로 검사 화면이 열립니다. 숨은 필터가 아니라 + 검색란인 것은 일부러 그렇게 한 것으로, 출발한 곳으로 돌아가지 않고도 넓히거나 좁히거나 지울 수 있습니다. 나타날 수 있는 + 것은 프록시를 거친 트래픽뿐이라, 바쁘다고 알고 있는 행이라도 여기에는 아무것도 보이지 않을 수 있습니다.

+

모의 응답

API가 실패하거나 멈추거나 엉뚱한 것을 돌려줄 때 에이전트가 어떻게 대처하는지 보려면, 그 엔드포인트에 직접 답해 보세요. 검사 › 모의 응답에서 규칙 하나가 호스트와 경로, 메서드를 지정하고, 돌려줄 상태와 헤더, 본문, 그리고 선택 @@ -421,6 +434,23 @@

캡처: 엔진과 소스

없고 그것들과 나란히 동작하는 샘플러로 되돌려 주겠다고 제안합니다. 어떻게 만들었는지는 개발자 가이드를 보세요.

+

포착 범위: Flowlight가 파악하지 못하는 것

+

다른 화면은 모두 무슨 일이 있었는지에 답합니다. 포착 범위는 무엇을 듣지 못했을지에 답하고, 그것이 다른 + 화면들의 값어치를 결정합니다. 앱마다 세 가지를 묻는데, 세 가지가 서로 독립적으로 실패하기 때문입니다.

+

보였나? 네트워크 확장은 각 흐름이 열리는 순간에 봅니다. nettop 샘플러는 1초에 한 번 카운터를 읽으므로, 두 + 번의 읽기 사이에 열리고 닫히는 연결, 이를테면 DNS 조회나 빠른 API 호출, curl을 실행하고 끝나는 스크립트는 통째로 + 빠집니다. 어떤 비율로도 표현할 수 없는 빈틈이라, 수치가 아니라 말로 적어 둡니다.

+

이름이 붙었나? 그 앱의 바이트 중 맨 주소가 아니라 호스트 이름이 있는 목적지로 간 비율입니다. 연결 + 수가 아니라 바이트입니다. 1기가바이트를 실어 보낸 이름 없는 연결 하나가 1킬로바이트씩 실어 보낸 연결 백 개보다 큰 구멍인데, + 연결 수로 세면 순서가 거꾸로 됩니다.

+

읽을 수 있었나? HTTPS 검사가 그 앱의 트래픽에서 무엇이든 복호화했는지입니다. 답은 넷이고 그중 빈틈은 + 하나뿐입니다. 읽고 있다. 프록시에 닿은 적이 없다. 복호화하지 않을 대상 목록에 있다(이것은 직접 내린 선택입니다). 또는 검사가 + 꺼져 있다(이것은 앱별 실패가 아니라 설정입니다).

+

어떤 엔진도 전혀 볼 수 없는 것은 이 페이지에 맡기지 않고 화면에 그대로 적어 둡니다. 캡처를 시작하기 전의 + 트래픽, 콘텐츠 필터에는 한 번도 보이지 않는 시스템 서비스, 인증서를 고정하는 앱, 프록시에 한 번도 넘겨지지 않는 QUIC, 그리고 + 파이프로 이야기하는 에이전트의 로컬 MCP 서버입니다. 이런 것들은 Flowlight 어디에도 나타나지 않으므로 이 수치에도 빠져 + 있습니다. 볼 수 있는 것만 세는 포착 범위 수치는 사실이 아니라 안심거리가 될 뿐입니다.

+

기기: Bluetooth와 USB, 외장 저장 장치

Mac은 TCP와 UDP만으로 주고받는 것이 아닙니다. 기기 화면이 그 나머지를 다루며, 직접 켜기 전까지는 꺼져 있습니다. Flowlight에 없는 권한이 필요해서가 아니라, Mac을 더 많이 지켜보는 일은 업데이트가 정할 것이 아니라 사용자가 @@ -549,9 +579,10 @@

질문과 답

어떤 확장이 설치되어 있는지, macOS가 Flowlight의 필터를 실제로 시작했는지, 그리고 가장 최근 기록이 언제인지 보여줍니다. 결과를 이슈에 붙여 주세요.
Flowlight가 내 정보를 어딘가로 보내나요?
-
아니요. 계정도, 텔레메트리도, 분석도 없습니다. Flowlight가 내는 요청은 하루 한 번의 업데이트 확인, 선택 사항인 네트워크 - 소유자 조회, 그리고 역방향 DNS뿐입니다. 각각이 개인정보 페이지에 나열되어 있고, 각각 끄는 - 스위치가 있습니다.
+
계정도, 텔레메트리도, 분석도 없고, 트래픽 데이터베이스가 업로드되는 일도 없습니다. Mac을 떠나는 요청은 세 가지이고, 셋 다 + 개인정보 페이지에 나열되어 있습니다. 하루 한 번의 업데이트 확인과 선택 사항인 네트워크 소유자 조회, + 이 둘은 끄는 스위치가 있습니다. 그리고 Flowlight가 샘플러로 돌고 있는 동안의 역방향 DNS, 이것은 스위치가 없습니다. 그것이 없으면 + 샘플러는 대부분의 연결에 이름을 붙일 수 없습니다.
Mac이 느려지거나 배터리가 빨리 닳지 않나요?
창을 닫아 두면 Flowlight는 거의 아무 일도 하지 않습니다. 메뉴 막대의 속도를 유지하고 1초에 한 행을 씁니다. 네트워크 확장은 1초마다 짧게 사는 nettop 프로세스를 실행하는 대체 샘플러보다 비용이 적습니다.
diff --git a/docs/ko/index.html b/docs/ko/index.html index 7247f19..42729bf 100644 --- a/docs/ko/index.html +++ b/docs/ko/index.html @@ -32,10 +32,8 @@ - - - - + + @@ -47,6 +45,7 @@ AI 에이전트 문서 개인정보 + 위협 모델 릴리스 소개 GitHub @@ -106,7 +105,7 @@

앱이 무엇을 하는지 봅니다.
-
Flowlight의 AI 에이전트 뷰. Claude Code, Cursor, Codex, Python 스크립트가 각자의 AI 제공업체, 다른 곳으로 보낸 트래픽, 그리고 SMTP, SSH, FTP, 대용량 업로드, 원시 IP에 대한 위험 배지와 함께 나열되어 있습니다.

AI 에이전트 뷰: 각 에이전트의 모델 제공업체, 그리고 그 밖에 통신한 모든 곳. 데모 데이터로 표시했습니다.

@@ -217,7 +216,9 @@

AI 에이전트가 네트워크를 어떻게 쓰는지 봅니다

원하는 기간만큼만 사는 규칙

앱이든 에이전트든, 목적지든 URL 하나든 지정해서 막으세요. 발견한 행에서 오른쪽 클릭하면 됩니다. 영구히, 특정 시각까지, Flowlight를 종료할 때까지, 또는 정해 둔 시간대에만. 일시 정지 스위치 하나와 - 모든 거부마다 빠져나갈 길이 있습니다. 가장 구체적인 규칙이 이기고, 비기면 차단이 이깁니다.

+ 모든 거부마다 빠져나갈 길이 있습니다. 가장 구체적인 규칙이 이기고, 비기면 차단이 이깁니다. + 이미 신뢰하는 소프트웨어를 통제하는 수단이지, 신뢰하지 않는 + 소프트웨어를 막아 주는 장벽은 아닙니다. 위협 모델을 보세요.

Cursor ⇥ raw.githubusercontent.com · 4회 거부 · 평일 18:00–09:00

@@ -371,16 +372,16 @@

도구 호출과 네트워크 요청을 잇습니다

검사 대상인 터미널에서 에이전트를 실행하면 에이전트와 그 도구의 지원되는 HTTP 트래픽이 복호화되고, 모델이 요청한 도구 호출과 되돌아간 결과가 함께 보입니다.

-
Flowlight의 검사 뷰: 복호화된 Claude Code 요청과 각 요청의 도구 호출 목록, 그리고 curl이 paste.example로 올린 업로드의 상세 내용. 그 업로드를 실행한 Bash 도구 호출과 요청 본문에 담긴 메모가 함께 보입니다
내 메모는 어디로 갔나? curl이 paste.example로 올린 업로드를, 모델이 요청한 Bash 명령까지 거슬러 올라가 보낸 본문과 함께.
-
Claude Code의 도구 탭: Bash, Read와 MCP 도구 두 개가 설명, 그리고 모델이 각각을 몇 번 호출했는지와 함께 나열되어 있습니다
에이전트가 모델에게 내주는 모든 도구. 에이전트는 매 턴마다 도구를 선언하므로 Flowlight는 그것을 전부 나열하고, 모델이 실제로 쓴 것과 한 번도 건드리지 않은 것을 구분해 보여줍니다.
-
Codex의 MCP 서버 탭: 제공업체 경유로 표시된 sentry 서버, 그 URL, 승인은 사용 안 함, 허용된 도구, 그리고 서버가 제공하는 도구들
회선에서는 보이지 않는 것까지. 에이전트가 제공업체에게 MCP 서버로 연결해 달라고 하면 그 트래픽은 내 Mac을 거치지 않습니다. 하지만 요청은 거치므로 서버와 URL, 승인 설정, 제공하는 도구는 그대로 드러납니다.
@@ -399,9 +400,14 @@

도구 호출과 네트워크 요청을 잇습니다

다음

앞으로 올 것

-

Flowlight는 지금 지켜보고 설명하고 거부합니다. 나머지는 이 순서로 만들고 있습니다.

+

Flowlight는 지금 지켜보고 설명하고 거부합니다. 위협 모델이 밝히듯, 이것은 + 예방이 아니라 관찰입니다. 나머지는 이 순서로 만들고 있습니다.

+
검사에도 예산을 0.9.3

기록된 본문은 Flowlight가 보관하는 것 중 가장 민감한 것입니다. 차단 목록이 아니라 헤더 허용 목록, 직접 정하는 패턴, 헤더를 아예 남기지 않는 선택, 앱별 상한, 그리고 스스로 만료되는 세션.

+
이 규칙이라면 무엇을 막았을지 보여줘 0.9.4

지난 하루를 규칙에 다시 돌려, 아직 아무것도 거부하지 않은 채로 무엇을 거부했을지 나열합니다. 데이터는 이미 있습니다. 지금까지 그 데이터가 한 일이 지난 일을 설명하는 것뿐이었습니다.

+
Mac을 떠나는 것을, 떠나기 전에 0.9.5

첫 줄이 수집기에 닿기 전에 목적지, 암호화 여부, 어떤 필드가 나가는지, 그중에 헤더가 있는지. Flowlight가 다른 모든 것에 요구하는 그 공개를 자기 자신에게 적용합니다.

+
에이전트가 네트워크 밖에서 한 일 1.0

파일이 나가는 일은 읽기 다음에 보내기이고, 오늘 보이는 것은 보내기뿐입니다. 에이전트의 도구가 무엇을 열고 쓰고 실행했는지 기록하면 개인 키를 읽고, 그다음 paste.example와 통신했다가 화면 두 개가 아니라 하나의 발견이 됩니다. 리소스 모니터가 아닙니다. CPU와 메모리는 활성 상태 보기의 일입니다. Apple의 EndpointSecurity 권한이 필요하고, 그보다 먼저 위의 검사 예산이 있어야 합니다.

Linux, 그다음 Windows

분석 코어는 어디로든 옮길 수 있는 Swift이지만 캡처는 그렇지 않습니다. macOS API 대신 eBPF를 쓰고 로컬 웹 UI가 딸린 Linux 데몬이 먼저 나옵니다.

@@ -424,7 +430,7 @@

감시하지 않아도 되는 감시 도구

-
Flowlight에 표시된 Claude Code 상세: 호출 횟수와 실패 하나가 붙은 도구와 MCP 서버, 허용 목록, 그리고 실패한 git push, 응답과 요청이 함께 있는 paste.example로의 curl 업로드, npm install, GitHub 이슈, 문서 검색, 파일 읽기가 각각 결과와 함께 나열된 도구 호출 탭
에이전트 하나, 도구 호출 전부. Claude Code가 띄운 git과 curl, MCP 서버의 트래픽은 Claude Code의 것으로 집계됩니다. HTTPS 검사를 켜면 도구 호출 탭에서 모델이 무엇을 요청했고 무엇이 돌아왔으며 각 도구가 어떤 요청을 @@ -434,10 +440,10 @@

감시하지 않아도 되는 감시 도구

-
시간별 수신·송신 막대와 앱, 목적지, 프로토콜 도넛 차트가 있는 보고서 뷰
보고서. 초에서 연까지의 확대·축소, 세 가지 묶음, 앱이 수백 개여도 읽히는 차트.
-
에이전트 유출, 이메일, FTP, 자리 비움, 트래픽 급증 알림이 나열된 알림 뷰
알림. 하나하나가 앱과 목적지, 그리고 기준을 넘긴 수치를 밝힙니다.
diff --git a/docs/ko/privacy/index.html b/docs/ko/privacy/index.html index 04233d1..d68b648 100644 --- a/docs/ko/privacy/index.html +++ b/docs/ko/privacy/index.html @@ -32,10 +32,8 @@ - - - - + + @@ -47,6 +45,7 @@ AI 에이전트 문서 개인정보 + 위협 모델 릴리스 소개 GitHub @@ -101,7 +100,9 @@

HTTPS 검사

기본값은 끔입니다. 켜면 Flowlight가 Mac 안에 인증 기관을 만들고(그 키는 ~/Library/Application Support/Flowlight/Inspection를 벗어나지 않습니다) 이 Mac에서 오는 연결만 받는 프록시를 돌립니다. 이 프록시를 거치도록 지정한 앱에 대해서는 요청과 응답을, 최대 2 MB까지의 본문을 포함해 로컬 데이터베이스에 3일 - 동안 기록합니다. 인증 정보 헤더(Authorization, 쿠키, API 키)는 저장 전에 그 길이 값으로 대체됩니다. Flowlight는 내장된 + 동안 기록합니다. 인증 정보 헤더는 저장 전에 그 길이 값으로 대체됩니다. 이름(Authorization, 쿠키, + API 키)으로, 그리고 이름에 든 낱말로 알아보므로 X-Access-Key도 걸립니다. 다만 그것은 추정 규칙이고 보장이 + 아닙니다. 아무것도 알아보지 못하는 이름 아래 비밀을 실어 보내는 헤더는 기록됩니다. Flowlight는 내장된 Apple 서비스와 암호 관리자 목록을 복호화에서 제외합니다. 기록된 검사 데이터를 Flowlight가 업로드하는 일은 없습니다. 검사를 끄면 프록시가 멈추고, 인증서 및 기록된 데이터 제거는 인증서와 그 신뢰 설정, 기록된 모든 요청을 삭제합니다.

@@ -110,7 +111,7 @@

앱이 내는 네트워크 요청

요청보내는 곳담기는 내용시점 업데이트 확인api.github.com최신 릴리스를 묻는 일반적인 HTTPS 요청. GitHub는 IP 주소와 Flowlight/<version> 사용자 에이전트를 보게 됩니다0.1.2부터, 실행 시와 하루에 한 번. 끄는 스위치는 설정 › 일반 업데이트 다운로드github.com디스크 이미지와 체크섬 파일다운로드 후 열기를 클릭할 때만 - 역방향 DNS설정된 DNS 리졸버호스트 이름이 관측되지 않았을 때, IP 주소에 등록된 이름 조회기본 캡처 모드에서 필요할 때 + 역방향 DNS설정된 DNS 리졸버호스트 이름이 관측되지 않았을 때, IP 주소에 등록된 이름 조회필요할 때, 샘플러 캡처 모드에서. 네트워크 확장이 돌기 시작할 때까지는 이것이 기본값입니다. 끄는 스위치는 없습니다. 이것이 없으면 샘플러는 대부분의 연결에 이름을 붙일 수 없습니다. 네트워크 확장은 트래픽 자체에서 이름을 붙이므로 이 조회를 하지 않습니다 네트워크 소유자 조회Team Cymru, DNS로알려진 호스트 이름이 없는 공용 IP 주소. 사설 주소와 예약 주소는 절대 Mac을 벗어나지 않습니다기본값 켬. 끄는 스위치는 캡처 › 네트워크 소유자 확인 호스팅 모델로 질문선택한 제공업체: Anthropic, OpenAI, Google Gemini 또는 호환 엔드포인트내 질문과, 모델이 고른 Flowlight 읽기 전용 질의가 돌려준 결과. 트래픽 데이터베이스 자체는 업로드되지 않습니다호스팅 제공업체를 고르고 질문을 보낼 때만. 질문 화면에 전송된 요청이 표시됩니다 수집기로 내보내기직접 설정한 OpenTelemetry 또는 HTTP 엔드포인트설정 › 내보내기에 표시된 필드, 예를 들어 트래픽 집계와 알림. 인증 헤더는 키체인에 저장됩니다엔드포인트를 설정하고 내보내기를 켠 뒤에만 @@ -130,12 +131,15 @@

보관 기간

이 웹사이트

이 사이트는 GitHub Pages에 올려 Cloudflare를 통해 제공하는 정적 페이지입니다. 쿠키를 설정하지 않고 분석 도구도 돌리지 - 않습니다. 페이지를 전달하기 위해 GitHub와 Cloudflare가 요청을 처리하며, 폰트는 Google Fonts에서 불러오므로 방문 시 그곳이 - IP 주소를 받게 됩니다.

+ 않습니다. 페이지를 전달하기 위해 GitHub와 Cloudflare가 요청을 처리합니다. 폰트는 이 도메인에서 제공하므로 페이지를 그리는 + 동안 다른 누구에게도 아무것도 보내지 않습니다. 전에는 이 페이지가 폰트를 Google에서 불러왔는데, 그것은 Flowlight가 어디로도 + 아무것도 보내지 않는다고 설명하는 페이지가 자신을 그리려고 Google에 요청을 보냈다는 뜻이었습니다.

문의

-

궁금한 점이나 개인정보 관련 우려가 있다면 이슈를 올려 주세요. 민감한 - 내용이라면 저장소의 GitHub 비공개 취약점 신고 기능을 이용하세요.

+

궁금한 점이나 개인정보 관련 우려가 있다면 이슈를 올려 주세요. 보안 + 문제라면 GitHub의 비공개 취약점 신고를 이용하시고, + GitHub를 쓰고 싶지 않다면 security@xinbetween.com으로 메일을 보내 주세요. + 무엇을 기대할 수 있는지는 SECURITY.md를 보세요.

diff --git a/docs/ko/threat-model/index.html b/docs/ko/threat-model/index.html new file mode 100644 index 0000000..8cc9f35 --- /dev/null +++ b/docs/ko/threat-model/index.html @@ -0,0 +1,278 @@ + + + + + +Flowlight 위협 모델 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

위협 모델

+

지켜보는 것이지, 막아 주는 것이 아닙니다

+

Flowlight는 Mac의 소프트웨어가 무엇을 어디로 보내는지 알려줍니다. 이미 이 기계를 장악한 공격자를 막아 주는 방어 + 수단은 아니며, 그 차이는 각주가 아니라 별도의 페이지에 적을 만큼 중요합니다.

+
+ +
+ + +
+

무엇을 위한 도구인가

+

Flowlight는 Mac이 답해 주지 않는 질문에 답합니다. 어떤 앱이 이것을 보냈고, 그것은 어디로 갔나? 이 도구가 + 상대하는 것은 숨지도 않고 나쁘게 행동하는 소프트웨어입니다. 아무도 부탁하지 않은 곳에 접속하는 AI 에이전트, 보내야 할 것보다 많이 + 올리는 도구, 이름 없는 주소와 이야기하는 프로세스. 그런 행동은 트래픽에 드러나며, 그것을 읽을 수 있게 만드는 것, 그리고 읽을 수 + 없을 때는 솔직하게 그렇다고 말하는 것이 Flowlight의 일입니다.

+

백신도 아니고 EDR 에이전트도 아니며, 나와 공격자 사이에 서 있는다는 의미의 방화벽도 아닙니다. 둘이 겹치는 지점, 즉 Flowlight가 + 연결을 거부할 수 있는 지점에서도, 그 거부는 이미 신뢰하는 소프트웨어를 통제하기 위한 편의일 뿐이고, 신뢰하지 않는 소프트웨어를 + 막아 주는 장벽이 아닙니다.

+ +

무엇으로부터 지켜 주나

+
    +
  • 눈치채지 못한 데이터 유출. 앱이나 에이전트가 내가 승인하지 않았을 곳으로 보내는 일, 그것이 에이전트가 직접 + 실행한 도구를 통한 것일 때도 포함합니다. Flowlight는 그 연결을 연결을 만든 프로세스와 그 프로세스를 시작한 에이전트에 + 귀속시킵니다.
  • +
  • 조용한 행동 변화. 갑자기 새로운 목적지에 접속하거나, 기준선보다 훨씬 많이 옮기거나, 내가 자리에 없는 동안 + 일하는 앱. 모든 알림은 그것을 건드린 수치를 함께 밝히므로, 그 판단에 동의하지 않을 수도 있습니다.
  • +
  • 허용한 범위를 넘어서는 에이전트. 에이전트마다 두는 허용 목록, 그리고 그 밖의 연결을 거부하는 규칙. 거부는 + 기록되고, 클릭 한 번으로 허용할 수 있습니다.
  • +
  • 손댄 업데이트. 모든 릴리스는 체크섬을 공개합니다. 업데이터는 검증할 수 없는 내려받기를 거부하고, 업데이트를 + 요청한 실행 중인 사본과 같은 팀이 서명하지 않은 앱은 설치하지 않습니다.
  • +
+ +

root 권한을 가진 소프트웨어는 이것을 끌 수 있습니다

+

Flowlight는 사용자 권한으로 돌고, macOS가 그를 대신해 띄우는 시스템 확장을 씁니다. root로 도는 것이라면, 또는 설치 프로그램을 + 내가 승인한 것이라면 무엇이든 그 확장을 내리고 앱을 멈추고 데이터베이스를 지울 수 있습니다. 설계상 그것을 막는 장치는 없으며, + macOS의 어떤 모니터링 도구도 사용자가 스스로 끌 수 있는 도구로 남아 있으면서 그것을 막을 수는 없습니다.

+

솔직한 주장은 더 좁고, 그래도 쓸모가 있습니다. 나쁘게 행동하지만 감시를 적극적으로 피하지는 않는 소프트웨어는 보입니다. 적극적으로 + 피하는 소프트웨어는 보이지 않을 수 있고, 적어도 빈자리는 남깁니다. 멈춘 확장, 데이터가 없는 구간 같은 것들이죠. + 포착 범위 화면은 바로 그것을 보여주기 위해 있습니다.

+ +

캡처가 놓치는 것

+
    +
  • 캡처를 시작하기 전의 트래픽. 나중에 채워 넣는 일은 없습니다. 필터보다 먼저 열린 연결은 애초에 필터에 + 건네진 적이 없습니다.
  • +
  • 콘텐츠 필터 적용에서 빠지는 시스템 서비스. macOS는 콘텐츠 필터에 모든 것을 보여주지 않습니다. macOS 자신의 + 트래픽 가운데 일부는 우리 필터에 결코 닿지 않습니다.
  • +
  • 그 자리를 다른 콘텐츠 필터가 차지한 경우. macOS는 한 번에 하나만 돌립니다. VPN이나 보안 에이전트가 그 + 자리를 갖고 있으면 Flowlight의 필터는 설치되고 연결까지 되지만 무엇을 걸러 달라는 요청은 한 번도 받지 못합니다. 캡처는 빈 + 화면을 보여주는 대신 그렇다고 말합니다.
  • +
  • 짧은 연결, 샘플러를 쓸 때. 확장이 없으면 Flowlight는 1초에 한 번 카운터를 읽습니다. 두 번의 읽기 사이에 + 열리고 닫히는 연결은 결코 기록되지 않습니다.
  • +
  • TCP도 UDP도 아닌 통로. 블루투스와 USB는 기기로는 보이지만 바이트로는 보이지 않습니다. 에이전트의 로컬 + MCP 서버가 파이프로 이야기하는 것은 아예 네트워크 트래픽이 아니어서 어디에도 나타나지 않습니다.
  • +
+ +

검사가 놓치는 것

+

HTTPS 검사가 읽는 것은 Flowlight의 로컬 프록시를 거친 것뿐이고, 그것을 정하는 쪽은 프로그램이 시작되는 순간입니다. 프록시 설정을 + 무시하는 앱, 검사를 켜기 전에 시작된 앱, 인증서를 고정하는 앱은 손대지 않고 그대로 통과합니다. 일부러 그렇게 합니다. 고정된 연결을 + 깨뜨리면 그 앱이 깨지기 때문입니다. QUIC도 프록시에 건네지지 않습니다.

+

그래서 검사 화면이 비어 있다는 것은 “여기로 아무것도 지나가지 않았다”는 뜻이고, “아무 일도 없었다”는 뜻이 아닙니다. 둘 중 + 어느 쪽인지는 포착 범위가 앱마다 알려줍니다.

+ +

차단이 무엇이고 무엇이 아닌지

+

연결을 거부하는 규칙을 실행하는 것은 네트워크 확장이며, 그 경로 안에서, 연결이 만들어지기 전에 실행합니다. URL을 지정하는 + 규칙은 검사 프록시가 대신 실행해, 앱이 읽을 수 있는 상태 코드로 요청에 답합니다. 보고하는 대신 실제로 손을 쓰는 Flowlight의 + 부분은 이 둘뿐입니다. nettop 샘플러는 아무것도 거부할 수 없으므로, 샘플러로 돌아가는 Mac에서는 어떤 규칙도 적용되지 않습니다. + Flowlight는 아무 일도 하지 않는 스위치를 내놓는 대신 그렇다고 말합니다.

+

그래도 예방은 아닙니다. 셸을 쓸 수 있는 에이전트는 거부된 도구가 했을 일을 직접 할 수 있습니다. 클릭 한 번으로 되돌릴 수 있는 + 거부는, 에이전트의 다음 시도가 걸어 나갈 수 있는 거부입니다. 로컬 트래픽과 DNS, Apple 기본 서비스, Flowlight 자신의 연결은 절대 + 거부되지 않습니다. 막힌 Mac은 막힌 에이전트보다 나쁜 결과이기 때문입니다. 그리고 Flowlight가 멈추면 몇 초 뒤에 적용이 풀립니다. + 아무도 볼 수 없는 거부는 거부가 없는 것보다 나쁘기 때문입니다.

+

검사와 거부는 함께 가지 않습니다. Flowlight 자신의 프록시를 거친 트래픽은 Flowlight의 트래픽으로 Mac을 + 떠나고, Flowlight는 자기 자신을 거부하지 않습니다. 그러니 요청을 읽고 있는 앱은, 규칙으로는 더 이상 연결을 막을 수 없는 + 앱입니다. 더 보려고 검사를 켜는 일은 적용을 내주는 일이기도 한데, 화면에는 지금까지 그런 말이 없었습니다.

+ +

Flowlight 자신이 갖고 있는 것

+

트래픽 메타데이터를 로컬 SQLite 데이터베이스에, 공개된 보관 기간만큼 갖고 있습니다. HTTPS 검사를 켜 두면 요청과 응답의 본문도 + 3일 동안 갖고 있는데, 이것이 Flowlight가 보관하는 것 중 가장 민감한 것입니다. 인증 정보 헤더는 이름과 낱말로 가려지지만, 그것은 + 추정 규칙이고 보장이 아닙니다. 아무것도 알아보지 못하는 이름 아래 비밀을 실어 보내는 헤더는 기록될 수 있습니다.

+

트래픽 데이터베이스는 업로드되지 않습니다. 그래도 묻지 않아도 Mac을 떠나는 것이 세 가지 있고, 셋 다 + 개인정보 페이지에 이름이 적혀 있습니다. 실행할 때와 하루에 한 번 GitHub에 최신 릴리스를 묻는 + 업데이트 확인, 호스트 이름이 없는 공개 주소를 Team Cymru에 묻는 네트워크 소유자 조회, 그리고 Flowlight가 확장 대신 카운터를 + 읽고 있는 동안 이름을 보지 못한 주소에 대한 역방향 DNS 조회입니다. 앞의 둘은 끄는 스위치가 있습니다. 셋째는 없습니다. + 샘플러에서는 연결에 이름이 붙는 길이 대부분 그것이기 때문입니다. 그 조회는 Mac이 이미 쓰는 리졸버로 가고, 확장이 이어받아 + 트래픽 자체에서 이름을 붙이기 시작하면 멈춥니다. 호스팅 모델로 하는 질문은 그 셋 가운데 어느 것보다도 훨씬 많은 것을 + 보내지만, 직접 설정할 때까지 꺼져 있는 유일한 것입니다.

+ +

업데이트

+

릴리스는 Developer ID로 서명되고 공증됩니다. 업데이터는 공개된 체크섬을 요구하고 그것이 없는 내려받기를 거부하며, 그다음 설치 + 전에 내려받은 앱이 실행 중인 사본과 같은 팀의 서명인지 확인합니다. 다른 사람이 서명한 업데이트는 나머지가 다 유효해도 + 거부됩니다.

+ +

취약점 신고하기

+

GitHub의 비공개 취약점 신고를 이용하시고, GitHub를 쓰고 + 싶지 않다면 security@xinbetween.com으로 메일을 보내 주세요. 무엇이 범위에 들고 + 무엇을 기대할 수 있는지는 SECURITY.md에 적혀 있습니다. + 크래시나 잘못된 수치, 오해를 부르는 화면 같은 보통의 버그는 대신 + 이슈로 올려 주세요.

+
+
+
+ + + + + diff --git a/docs/llms-full.txt b/docs/llms-full.txt index 7ed2e49..3504392 100644 --- a/docs/llms-full.txt +++ b/docs/llms-full.txt @@ -157,10 +157,21 @@ open build/Build/Products/Release/Flowlight.app Alerts⌘4Everything that looked unusual, with the app, the destination and the number that tripped the rule. - Inspect⌘5Optional: decrypted requests from the agents you route through Flowlight, and the tool calls behind them. Search reaches into request and response bodies. + Rules⌘5Every allowlist and refusal you have set, what each one covers, and what it has actually stopped. - Capture⌘6Which engine is recording, the extension's state, hostname learning, and where the database lives. + Ask⌘6Questions about your own traffic in plain language, answered from the recorded history by a local or a hosted model. + Inspect⌘7Optional: decrypted requests from the agents you route through Flowlight, and the tool calls behind them. Search reaches into request and response bodies. + + Devices⌘8Off until you turn it on: Bluetooth, USB and external storage, which a Mac uses as much as it uses the network. + + Coverage⌘9What Flowlight cannot account for — per app, whether its traffic was seen, named, and readable. + + Capture⌘0Which engine is recording, the extension's state, hostname learning, and where the database lives. + + The shortcuts are the sidebar's order, so ⌘0 is the tenth item rather than a skipped position. + + Live, the screen Flowlight opens on. In Reports, hover a bar to see which apps drove it, click it to zoom in, and double-click any row to narrow the report to it. AI agent rules @@ -330,10 +341,16 @@ open build/Build/Products/Release/Flowlight.app the shell setup for one shell, or remove the certificate and everything recorded. Flowlight excludes its built-in list of Apple services and password managers from decryption (edit the list in Setup). Apps that pin their certificates may reject the - Flowlight certificate; Flowlight notices and passes them through encrypted. API keys, cookies and other credential headers are never - stored, recorded requests are kept 3 days, and Remove Certificate & Recorded Data deletes the certificate, its trust + Flowlight certificate; Flowlight notices and passes them through encrypted. API keys, cookies and other credential headers are replaced with their + length before anything is stored — matched by name and by the words in the name, which catches a vendor's own spelling but + cannot promise to catch every one — recorded requests are kept 3 days, and Remove Certificate & Recorded Data deletes the certificate, its trust setting and everything recorded. Inspection is HTTP/1.1 only (Flowlight asks both sides for it) and not available in demo mode. + Getting here from a row. Right-click an app or a destination in Live, Reports or AI Agents and + choose Inspect …'s Traffic: Inspect opens with that name already in the search field. It is the search + field rather than a hidden filter on purpose — you can widen it, narrow it or clear it without going back to where you + started. Only traffic that went through the proxy can appear, so a row you know is busy may still show nothing here. + Mock responses To see how an agent copes when an API fails, stalls or returns something odd, answer that endpoint yourself. In @@ -498,11 +515,6 @@ open build/Build/Products/Release/Flowlight.app needs no filter and works alongside them. See the developer guide for how it's built. - Getting here from a row. Right-click an app or a destination in Live, Reports or AI Agents and - choose Inspect …'s Traffic: Inspect opens with that name already in the search field. It is the search - field rather than a hidden filter on purpose — you can widen it, narrow it or clear it without going back to where you - started. Only traffic that went through the proxy can appear, so a row you know is busy may still show nothing here. - Coverage: what Flowlight can't account for Every other screen answers what happened. Coverage answers what you would not have been told, which is what @@ -678,8 +690,9 @@ open build/Build/Products/Release/Flowlight.app It shows which extensions are installed, whether macOS actually started Flowlight's filter, and how recently anything was recorded. Paste it into an issue. Does Flowlight send anything about me anywhere? - No. There's no account, no telemetry and no analytics. The only requests it makes are the daily update check, optional network-owner - lookups, and reverse DNS — each listed, and each with an off switch, on the privacy page. + No account, no telemetry, no analytics, and your traffic database is never uploaded. Three requests do leave the Mac, all listed on the + privacy page: the daily update check and the optional network-owner lookup, both with off switches, and + reverse DNS while Flowlight is on the sampler, which has none — without it the sampler could not name most connections. Will it slow my Mac down or drain the battery? With the window closed Flowlight does almost nothing: it keeps the menu bar rates and writes one row a second. The Network Extension costs less than the fallback sampler, which starts a short-lived nettop process every second. @@ -865,7 +878,9 @@ Optional. What did the agent actually send, and which tool call made it? Decrypt Name an app, an agent, a destination or a single URL and block it — right-click the row you spotted it in. Forever, until a time, until Flowlight quits, or between chosen hours, with one pause switch and a way out on - every refusal. The most specific rule wins, and a tie goes to the block. + every refusal. The most specific rule wins, and a tie goes to the block. It is control over software you + already trust, not a barrier against software you don't — see the threat + model. Cursor ⇥ raw.githubusercontent.com · refused 4 times · weekdays 18:00–09:00 @@ -1060,13 +1075,8 @@ e.g. Wireshark What's coming - Flowlight watches, explains and refuses today. This is the order the rest is being built in. - - Coverage, stated rather than assumed 0.9.0Per app: watched by the extension, decrypted by the proxy, named only by DNS or SNI, or not covered at all — and why, with the fix where there is one. A tool that claims completeness is worth less than one you can trust about its own limits. - - Inspect it from where you found it 0.9.1Right-click a row in Live, Reports or AI Agents and Inspect opens already looking at that app or destination — instead of changing screen and retyping the name into a search field. - - A threat model, written down 0.9.2What Flowlight defends against and what it doesn't, on one page: software misbehaving in the open, not software with root. Monitoring, not prevention, said beside every mention of blocking. Plus a security contact, and fonts served from here rather than from Google. + Flowlight watches, explains and refuses today — monitoring rather than prevention, as the + threat model sets out. This is the order the rest is being built in. A budget for inspection 0.9.3Recorded bodies are the most sensitive thing Flowlight holds. A header allowlist instead of a denylist, patterns of your own, an option to keep no headers at all, per-app ceilings, and a session that expires by itself. @@ -1074,7 +1084,7 @@ e.g. Wireshark What leaves the Mac, before it leaves 0.9.5Before the first row reaches a collector: the destination, whether it's encrypted, which fields travel and whether any are headers — the disclosure Flowlight demands of everything else, applied to itself. - What an agent did besides the network 1.0A file leaving is a read and then a send, and only the send is visible today. Recording what an agent's tools opened, wrote and spawned would make read the private key, then talked to paste.example one finding instead of two screens. Not a resource monitor: CPU and memory are Activity Monitor's job. Needs Apple's EndpointSecurity entitlement, and needs the inspection budget above to exist first. + What an agent did off the network 1.0A file leaving is a read and then a send, and only the send is visible today. Recording what an agent's tools opened, wrote and spawned would make read the private key, then talked to paste.example one finding instead of two screens. Not a resource monitor: CPU and memory are Activity Monitor's job. Needs Apple's EndpointSecurity entitlement, and needs the inspection budget above to exist first. Linux, then WindowsThe analysis core is portable Swift; capture isn't. A Linux daemon with a local web UI comes first, on eBPF rather than macOS APIs. @@ -1230,8 +1240,10 @@ Privacy Off by default. If you turn it on, Flowlight creates a certificate authority on your Mac (its key never leaves ~/Library/Application Support/Flowlight/Inspection) and runs a proxy that accepts connections only from this Mac. For apps you - route through it, it records requests and responses, including bodies up to 2 MB, in the local database for 3 days. Credential headers - (Authorization, cookies, API keys) are replaced with their length before anything is stored. Flowlight excludes its built-in list of Apple services and password managers from decryption. Recorded inspection data is not uploaded by Flowlight. Turning inspection off stops the proxy; Remove Certificate & Recorded + route through it, it records requests and responses, including bodies up to 2 MB, in the local database for 3 days. Credential headers are + replaced with their length before anything is stored — recognised by name (Authorization, cookies, API keys) and by the words + in the name, so X-Access-Key is caught as well. That is a heuristic, not a guarantee: a header carrying a secret + under a name nothing recognises would be recorded. Flowlight excludes its built-in list of Apple services and password managers from decryption. Recorded inspection data is not uploaded by Flowlight. Turning inspection off stops the proxy; Remove Certificate & Recorded Data deletes the certificate, its trust setting and every recorded request. Network requests the app makes @@ -1242,7 +1254,7 @@ Privacy Update downloadgithub.comThe disk image and its checksum fileOnly when you click Download & Open - Reverse DNSYour configured DNS resolverA lookup of an IP address's registered name, when no hostname was seenAs needed, in the default capture mode + Reverse DNSYour configured DNS resolverA lookup of an IP address's registered name, when no hostname was seenAs needed, in the sampler capture mode, which is the default until the Network Extension is running. No off switch: without it the sampler cannot name most connections. The Network Extension names them from the traffic itself and does not do this Network owner lookupTeam Cymru, over DNSPublic IP addresses with no known hostname. Private and reserved addresses never leave your MacOn by default. Off switch in Capture › Identify network owners @@ -1268,12 +1280,16 @@ Privacy This website This site is a static page hosted on GitHub Pages and served through Cloudflare. It sets no cookies and runs no analytics. GitHub - and Cloudflare process requests to serve it, and the fonts load from Google Fonts, which receives your IP address when you visit. + and Cloudflare process requests to serve it. The fonts are served from this domain, so rendering a page sends nothing to anyone + else — this page used to load them from Google, which meant the page explaining that Flowlight sends nothing anywhere made a + request to Google to render itself. Contact - Questions or a privacy concern? Open an issue. For anything sensitive, use GitHub's - private vulnerability reporting on the repository. + Questions or a privacy concern? Open an issue. For a security issue, use GitHub's + private vulnerability reporting, or email + security@xinbetween.com if you would rather not use GitHub — see + SECURITY.md for what to expect. --- @@ -2091,3 +2107,137 @@ September 21, 2026First preview Anomaly alerts, a menu bar readout, a disk image and an installer package. Downloads and checksums → + +--- + +# Flowlight threat model +URL: https://flowlight.xinbetween.com/threat-model/ + +Threat model + + Monitoring, not prevention + + Flowlight tells you what software on your Mac is sending and where. It is not a defence against an attacker who + already controls the machine, and the difference matters enough to state on its own page rather than in footnotes. + + On this page + + The short version + + What it is forWhat it defends against + + Limits + + Software with rootWhat capture missesWhat inspection misses + What blocking is and isn't + + Flowlight itself + + What it holdsUpdatesReporting a vulnerability + + What it is for + + Flowlight answers a question the Mac does not: which app sent this, and where did it go? It is built for + software that behaves badly in the open — an AI agent contacting something nobody asked it to, a tool uploading more than it + should, a process talking to an address that has no name. That behaviour is visible in the traffic, and Flowlight's job is to + make it legible and to say honestly when it cannot. + + It is not antivirus, not an EDR agent, and not a firewall in the sense of something that stands between you and an attacker. + Where the two overlap — Flowlight can refuse connections — the refusal is a convenience for controlling software you already + trust, not a barrier against software you don't. + + What it defends against + + Unnoticed egress. An app or an agent sending somewhere you would not have approved, including through a + tool it ran itself. Flowlight attributes the connection to the process that made it and to the agent that started that + process. + + Quiet changes in behaviour. An app that suddenly contacts new destinations, moves far more than its + baseline, or works while you are away. Every alert names the number that tripped it, so you can disagree with it. + + An agent exceeding what you allowed. An allowlist per agent, and rules that refuse connections outside it, + with the refusal recorded and one click to allow it. + + A tampered update. Every release publishes a checksum; the updater refuses a download it cannot verify and + refuses to install an app not signed by the same team as the copy asking for the update. + + Software with root can switch it off + + Flowlight runs as you, with a system extension macOS starts on its behalf. Anything running as root — or anything you approve + an installer for — can unload that extension, stop the app, or delete its database. Nothing in the design prevents that, and no + monitoring tool on macOS can prevent it while remaining a tool you can also turn off yourself. + + The honest claim is narrower and still useful: software that is misbehaving but not actively evading a monitor will be seen. + Software that is actively evading one may not be, and will at least leave a gap — an extension that stopped, a period with no + data — which the Coverage screen is there to show. + + What capture misses + + Traffic from before capture started. There is no backfill. A connection that opened before the filter did + was never offered to it. + + System services exempt from content filters. macOS does not show a content filter everything; some of its + own traffic never reaches ours. + + Another content filter holding the slot. macOS runs one at a time. If a VPN or a security agent has it, + Flowlight's filter installs, connects, and is never asked to filter anything — Capture says so rather than showing an empty + screen. + + Short connections, on the sampler. Without the extension, Flowlight reads counters once a second: a + connection that opens and closes between two readings is never recorded. + + Channels that are not TCP or UDP. Bluetooth and USB are visible as devices, not as bytes. An agent's local + MCP server talking over a pipe is not network traffic at all and appears nowhere. + + What inspection misses + + HTTPS inspection reads only what is routed through Flowlight's local proxy, and a program decides that when it starts. An app + that ignores proxy settings, one started before inspection was switched on, or one that pins its certificates is passed through + untouched — deliberately, because breaking a pinned connection would break the app. QUIC is not offered to the proxy either. + + So an empty Inspect screen means "nothing was routed here", not "nothing happened". Coverage says which of the two applies, + per app. + + What blocking is, and isn't + + A rule that refuses a connection is carried out by the Network Extension, in the path, before the connection is made. A rule + that names a URL is carried out by the inspection proxy instead, which answers the request with a status the app can read. + Those are the only two parts of Flowlight that act rather than report — the nettop sampler can refuse nothing at all, so on a + Mac running the sampler no rule is enforced, and Flowlight says so rather than offering a switch that does nothing. + + It is still not prevention. An agent that can run a shell can do by hand what a refused tool would have done. A refusal you + can undo in one click is a refusal an agent's next attempt may walk through. Local traffic, DNS, Apple's own services and + Flowlight's own connections are never refused, because a blocked Mac is a worse outcome than a blocked agent. And enforcement + lapses a few seconds after Flowlight stops running: a refusal nobody can see is worse than none. + + Inspection and refusal do not combine. Traffic routed through Flowlight's own proxy leaves the Mac as + Flowlight's traffic, and Flowlight never refuses itself — so an app whose requests you are reading is an app whose connections + rules no longer stop. Turning inspection on to see more costs you enforcement, and nothing on screen previously said so. + + What Flowlight itself holds + + Traffic metadata in a local SQLite database, with published retention. With HTTPS inspection on it also holds request and + response bodies for three days — the most sensitive thing it ever keeps. Credential headers are redacted by name and by word, + which is a heuristic and not a guarantee; a header carrying a secret under a name nothing recognises can be recorded. + + The traffic database is never uploaded. Three smaller things do leave the Mac without being asked for, all of them named on + the privacy page: the update check, which asks GitHub for the latest release on launch and + daily; the network-owner lookup, which asks Team Cymru about public addresses that have no hostname; and, while Flowlight is + reading counters instead of running its extension, a reverse-DNS lookup of addresses it saw no name for. The first two have + off switches. The third does not, because on the sampler it is most of how a connection gets a name at all — it goes to the + resolver the Mac already uses, and it stops once the extension takes over and names connections from the traffic itself. + Ask with a hosted model sends far more than any of them, and is the one thing that stays off until you configure it. + + Updates + + Releases are signed with a Developer ID and notarized. The updater requires a published checksum and refuses a download + without one, then verifies that the downloaded app is signed by the same team as the running copy before installing it. An + update signed by somebody else is refused even if it is otherwise valid. + + Reporting a vulnerability + + Use GitHub's private vulnerability reporting, or email + security@xinbetween.com if you would rather not use GitHub. + SECURITY.md says what is in scope and what to expect. + An ordinary bug — a crash, a wrong number, a misleading screen — belongs in the + issue tracker instead. diff --git a/docs/llms.txt b/docs/llms.txt index 4994f86..a81f1be 100644 --- a/docs/llms.txt +++ b/docs/llms.txt @@ -9,4 +9,5 @@ - [Flowlight for macOS](https://flowlight.xinbetween.com/): Flowlight is open-source application-aware network intelligence for macOS, with deeper visibility into AI agents, tools and MCP servers. - [Flowlight privacy](https://flowlight.xinbetween.com/privacy/): What Flowlight records, where it is stored, and which external services the app contacts. - [Flowlight releases](https://flowlight.xinbetween.com/releases/): Release notes for every version of Flowlight. +- [Flowlight threat model](https://flowlight.xinbetween.com/threat-model/): What Flowlight defends against, what it cannot, and why — monitoring rather than prevention. - [Full text for LLMs](https://flowlight.xinbetween.com/llms-full.txt) diff --git a/docs/privacy/index.html b/docs/privacy/index.html index 504fd32..8123b66 100644 --- a/docs/privacy/index.html +++ b/docs/privacy/index.html @@ -32,10 +32,8 @@ - - - - + + @@ -47,6 +45,7 @@ AI agents Docs Privacy + Threat model Releases About GitHub @@ -100,8 +99,10 @@

What it reads on your Mac

HTTPS inspection

Off by default. If you turn it on, Flowlight creates a certificate authority on your Mac (its key never leaves ~/Library/Application Support/Flowlight/Inspection) and runs a proxy that accepts connections only from this Mac. For apps you - route through it, it records requests and responses, including bodies up to 2 MB, in the local database for 3 days. Credential headers - (Authorization, cookies, API keys) are replaced with their length before anything is stored. Flowlight excludes its built-in list of Apple services and password managers from decryption. Recorded inspection data is not uploaded by Flowlight. Turning inspection off stops the proxy; Remove Certificate & Recorded + route through it, it records requests and responses, including bodies up to 2 MB, in the local database for 3 days. Credential headers are + replaced with their length before anything is stored — recognised by name (Authorization, cookies, API keys) and by the words + in the name, so X-Access-Key is caught as well. That is a heuristic, not a guarantee: a header carrying a secret + under a name nothing recognises would be recorded. Flowlight excludes its built-in list of Apple services and password managers from decryption. Recorded inspection data is not uploaded by Flowlight. Turning inspection off stops the proxy; Remove Certificate & Recorded Data deletes the certificate, its trust setting and every recorded request.

Network requests the app makes

@@ -109,7 +110,7 @@

Network requests the app makes

RequestSent toWhat it containsWhen Update checkapi.github.comA standard HTTPS request for the latest release; GitHub sees your IP address and the Flowlight/<version> user agentOn launch and daily, from 0.1.2. Off switch in Settings › General Update downloadgithub.comThe disk image and its checksum fileOnly when you click Download & Open - Reverse DNSYour configured DNS resolverA lookup of an IP address's registered name, when no hostname was seenAs needed, in the default capture mode + Reverse DNSYour configured DNS resolverA lookup of an IP address's registered name, when no hostname was seenAs needed, in the sampler capture mode, which is the default until the Network Extension is running. No off switch: without it the sampler cannot name most connections. The Network Extension names them from the traffic itself and does not do this Network owner lookupTeam Cymru, over DNSPublic IP addresses with no known hostname. Private and reserved addresses never leave your MacOn by default. Off switch in Capture › Identify network owners Ask with a hosted modelThe provider you select: Anthropic, OpenAI, Google Gemini or a compatible endpointYour question and the results returned by the read-only Flowlight queries selected by the model. The traffic database itself is not uploadedOnly when you select a hosted provider and submit a question. The Ask screen shows the transmitted requests Collector exportThe OpenTelemetry or HTTP endpoint you configureThe fields shown in Settings › Export, such as traffic rollups and alerts. Authentication headers are stored in KeychainOnly after you configure an endpoint and enable export @@ -129,11 +130,15 @@

Retention

This website

This site is a static page hosted on GitHub Pages and served through Cloudflare. It sets no cookies and runs no analytics. GitHub - and Cloudflare process requests to serve it, and the fonts load from Google Fonts, which receives your IP address when you visit.

+ and Cloudflare process requests to serve it. The fonts are served from this domain, so rendering a page sends nothing to anyone + else — this page used to load them from Google, which meant the page explaining that Flowlight sends nothing anywhere made a + request to Google to render itself.

Contact

-

Questions or a privacy concern? Open an issue. For anything sensitive, use GitHub's - private vulnerability reporting on the repository.

+

Questions or a privacy concern? Open an issue. For a security issue, use GitHub's + private vulnerability reporting, or email + security@xinbetween.com if you would rather not use GitHub — see + SECURITY.md for what to expect.

diff --git a/docs/pt-PT/about/index.html b/docs/pt-PT/about/index.html index bc47fe7..4e6539c 100644 --- a/docs/pt-PT/about/index.html +++ b/docs/pt-PT/about/index.html @@ -32,10 +32,8 @@ - - - - + + @@ -47,6 +45,7 @@ Agentes de IA Documentação Privacidade + Modelo de ameaças Versões Acerca GitHub diff --git a/docs/pt-PT/docs/index.html b/docs/pt-PT/docs/index.html index 2b17d73..9c0c3ff 100644 --- a/docs/pt-PT/docs/index.html +++ b/docs/pt-PT/docs/index.html @@ -32,11 +32,9 @@ - - - - - + + + @@ -47,6 +45,7 @@ Agentes de IA Documentação Privacidade + Modelo de ameaças Versões Acerca GitHub @@ -90,7 +89,7 @@

Usar o Flowlight

Definições e dados @@ -150,12 +149,20 @@

As vistas

- + - - - + + + + + + +
VistaAtalhoA que responde
Em direto⌘1O que se move neste momento: taxas por app nos últimos segundos e o destino mais ativo.
Agentes de IA⌘2Que agentes estão ativos, que fornecedores de IA usam e com que mais contactaram.
Agentes de IA⌘2Que agentes estão ativos, que fornecedores de IA usam e com que mais contactaram.
Relatórios⌘3Para onde foi o tráfego, do segundo ao ano. Agrupe por App, Destino ou IP; mude para Gráficos ou Vale a pena ver; exporte em CSV.
Alertas⌘4Tudo o que pareceu invulgar, com a app, o destino e o número que disparou a regra.
Inspecionar⌘5Opcional: pedidos desencriptados dos agentes que encaminha pelo Flowlight e as chamadas de ferramentas por trás deles. A pesquisa entra nos corpos dos pedidos e das respostas.
Captura⌘6Que motor está a registar, o estado da extensão, a aprendizagem de nomes de anfitrião e onde está a base de dados.
Alertas⌘4Tudo o que pareceu invulgar, com a app, o destino e o número que disparou a regra.
Regras⌘5Todas as listas de permissões e recusas que definiu, o que cada uma abrange e o que de facto travou.
Perguntar⌘6Perguntas sobre o seu próprio tráfego em linguagem simples, respondidas a partir do histórico registado por um modelo local ou alojado.
Inspecionar⌘7Opcional: pedidos desencriptados dos agentes que encaminha pelo Flowlight e as chamadas de ferramentas por trás deles. A pesquisa entra nos corpos dos pedidos e das respostas.
Dispositivos⌘8Desligado até o ligar: Bluetooth, USB e armazenamento externo, que um Mac usa tanto como usa a rede.
Cobertura⌘9O que o Flowlight não consegue contabilizar — por app, se o seu tráfego foi visto, nomeado e legível.
Captura⌘0Que motor está a registar, o estado da extensão, a aprendizagem de nomes de anfitrião e onde está a base de dados.
+

Os atalhos seguem a ordem da barra lateral, por isso ⌘0 é o décimo item e não uma posição saltada.

+
A vista Em direto: uma lista de aplicações com as suas taxas de envio e receção atuais e o destino mais ativo.
+
Em direto, a vista com que o Flowlight abre.

Em Relatórios, passe o rato sobre uma barra para ver que apps a produziram, clique nela para ampliar e faça duplo clique numa linha para restringir o relatório a essa linha.

Regras dos agentes de IA

@@ -290,10 +297,16 @@

Inspeção HTTPS (opcional)

e inicie-os aí. Em Avançado pode desencriptar só os agentes de IA em vez de todas as apps, editar a lista dos nunca desencriptados, copiar a configuração da shell para uma shell, ou remover o certificado e tudo o que foi registado.

O Flowlight exclui da desencriptação a sua lista integrada de serviços da Apple e de gestores de palavras-passe (edite a lista em Configurar). As apps que fixam os seus certificados podem rejeitar o - certificado do Flowlight; o Flowlight deteta-o e deixa-as passar encriptadas. As chaves de API, os cookies e outros cabeçalhos de credenciais nunca são - guardados, os pedidos registados são mantidos 3 dias, e Remover o certificado e os dados registados elimina o certificado, a sua definição de + certificado do Flowlight; o Flowlight deteta-o e deixa-as passar encriptadas. As chaves de API, os cookies e outros cabeçalhos de credenciais são substituídos pelo + respetivo comprimento antes de algo ser guardado — reconhecidos pelo nome e pelas palavras do nome, o que apanha a grafia própria de um + fornecedor mas não pode prometer apanhar todos —, os pedidos registados são mantidos 3 dias, e Remover o certificado e os dados registados elimina o certificado, a sua definição de confiança e tudo o que foi registado. A inspeção é apenas HTTP/1.1 (o Flowlight pede-o a ambos os lados) e não está disponível no modo de demonstração.

+

Chegar aqui a partir de uma linha. Clique com o botão direito numa app ou num destino em Em direto, Relatórios ou Agentes de + IA e escolha Inspecionar o tráfego de …: o Inspecionar abre com esse nome já no campo de pesquisa. Ser o campo de pesquisa e + não um filtro escondido é de propósito — pode alargá-lo, apertá-lo ou limpá-lo sem voltar a onde começou. Só pode aparecer o tráfego que passou + pelo proxy, por isso uma linha que sabe estar movimentada pode ainda assim não mostrar nada aqui.

+

Respostas simuladas

Para ver como um agente se comporta quando uma API falha, fica bloqueada ou devolve algo estranho, responda você a esse endpoint. Em Inspecionar › Respostas simuladas, uma regra nomeia um anfitrião, um caminho e um método, e indica o estado, os cabeçalhos, o corpo e um @@ -423,6 +436,23 @@

Captura: motores e origens

não precisa de filtro e funciona ao lado deles. Veja o guia de desenvolvimento para saber como é construído.

+

Cobertura: o que o Flowlight não consegue contabilizar

+

Todos os outros ecrãs respondem ao que aconteceu. A Cobertura responde ao que não lhe teria sido dito, e é isso que decide + quanto valem os outros ecrãs. Faz três perguntas por app, porque falham de forma independente.

+

Foi visto? A extensão de rede vê cada fluxo à medida que abre. O amostrador nettop lê contadores uma vez por segundo, por isso + uma ligação que abre e fecha entre duas leituras — uma consulta DNS, uma chamada de API rápida, um script que executa curl e sai — + falta por completo. É uma falha que nenhuma percentagem consegue expressar, por isso está dita por palavras em vez de pontuada.

+

Foi nomeado? A proporção dos bytes dessa app que foram para um destino com nome de anfitrião em vez de um endereço + simples. Bytes, não ligações: uma ligação sem nome que leva um gigabyte é um buraco maior do que cem que levam um kilobyte cada uma, e contar + ligações ordena-as ao contrário.

+

Era legível? Se a inspeção HTTPS desencriptou alguma coisa do tráfego dessa app. Quatro respostas, e só uma é uma falha: está + a ser lido; nunca chegou ao proxy; a app está na lista Nunca desencriptado, o que é uma escolha sua; ou a inspeção está desativada, o que é uma + definição e não uma falha app por app.

+

O que nenhum motor vê de forma alguma está listado no próprio ecrã e não deixado a esta página: o tráfego anterior ao início + da captura, os serviços do sistema que nunca são mostrados aos filtros de conteúdo, as apps que fixam os seus certificados, o QUIC que nunca é + oferecido ao proxy e o servidor MCP local de um agente que fala com ele por um pipe. Nada disto aparece em qualquer parte do Flowlight, por isso + também falta nestes números — um número de cobertura que contasse só o que consegue ver seria um sossego e não um facto.

+

Dispositivos: Bluetooth, USB e armazenamento externo

Um Mac envia e recebe por mais do que TCP e UDP. O ecrã Dispositivos cobre o resto e está desativado até o ativar — não porque precise de uma permissão que o Flowlight já não tenha, mas porque vigiar mais do seu @@ -550,8 +580,10 @@

Perguntas e respostas

Mostra que extensões estão instaladas, se o macOS realmente iniciou o filtro do Flowlight e há quanto tempo foi registado algo. Cole isso num problema.
O Flowlight envia algo sobre mim para algum lado?
-
Não. Não há conta, nem telemetria, nem analítica. Os únicos pedidos que faz são a procura diária de atualizações, as consultas opcionais de - proprietários da rede e o DNS inverso — cada um listado, e cada um com um interruptor para desativar, na página de privacidade.
+
Não há conta, nem telemetria, nem analítica, e a sua base de dados de tráfego nunca é enviada. Três pedidos saem do Mac, todos listados na + página de privacidade: a procura diária de atualizações e a consulta opcional do proprietário da rede, ambas com + interruptores para desativar, e o DNS inverso enquanto o Flowlight está no amostrador, que não tem nenhum — sem ele, o amostrador não conseguiria + dar nome à maioria das ligações.
Vai tornar o meu Mac mais lento ou gastar a bateria?
Com a janela fechada, o Flowlight quase não faz nada: mantém as taxas na barra de menus e escreve uma linha por segundo. A extensão de rede custa menos do que o amostrador de reserva, que inicia um processo nettop de vida curta a cada segundo.
diff --git a/docs/pt-PT/index.html b/docs/pt-PT/index.html index 86a70b0..9b871ec 100644 --- a/docs/pt-PT/index.html +++ b/docs/pt-PT/index.html @@ -32,10 +32,8 @@ - - - - + + @@ -47,6 +45,7 @@ Agentes de IA Documentação Privacidade + Modelo de ameaças Versões Acerca GitHub @@ -106,7 +105,7 @@

Veja a atividade de rede das suas apps.
-
A vista Agentes de IA do Flowlight. O Claude Code, o Cursor, o Codex e um script de Python aparecem com os respetivos fornecedores de IA, o tráfego enviado para outros sítios e indicadores de risco para SMTP, SSH, FTP, um envio grande e um IP direto.

A vista Agentes de IA: o fornecedor do modelo de cada agente e tudo o mais com que falou. Mostrada com dados de demonstração.

@@ -217,7 +216,9 @@

Acompanhe como os agentes de IA usam a rede

Regras, pelo tempo que quiser

Indique uma app, um agente, um destino ou um único URL e bloqueie-o — clique com o botão direito na linha onde o viu. Para sempre, até uma hora, até o Flowlight sair, ou entre as horas que escolher, com um interruptor de pausa e uma saída em - cada recusa. Ganha a regra mais específica e, em caso de empate, ganha o bloqueio.

+ cada recusa. Ganha a regra mais específica e, em caso de empate, ganha o bloqueio. + É controlo sobre software em que já confia, não uma barreira contra + software em que não confia — veja o modelo de ameaças.

Cursor ⇥ raw.githubusercontent.com · recusado 4 vezes · dias de semana 18:00–09:00

@@ -371,16 +372,16 @@

Relacione as chamadas de ferramentas suportadas com os pedidos de rede

seu Mac. Inicie um agente a partir de um Terminal inspecionado e o tráfego HTTP suportado do agente e das suas ferramentas é desencriptado, com as chamadas de ferramentas que o modelo pediu e os resultados que voltaram.

-
A vista Inspecionar do Flowlight: uma lista de pedidos desencriptados do Claude Code com as respetivas chamadas de ferramentas e o detalhe do envio do curl para paste.example, feito pela chamada da ferramenta Bash que o executou, com as notas enviadas no corpo do pedido
Para onde foram as minhas notas? O envio do curl para paste.example, seguido até ao comando Bash que o modelo pediu, com o corpo que enviou.
-
O separador Ferramentas do Claude Code: Bash, Read e duas ferramentas MCP com descrições e a frequência com que o modelo chamou cada uma
Todas as ferramentas que um agente oferece ao modelo. Os agentes declaram as suas ferramentas em cada turno, por isso o Flowlight lista-as todas, com as que o modelo usou de facto e as que nunca tocou.
-
O separador Servidores MCP do Codex: um servidor sentry marcado como via fornecedor, o seu URL, a aprovação definida como nunca, as ferramentas permitidas e as ferramentas que oferece
Incluindo as que não se veem na rede. Quando um agente pede ao fornecedor que se ligue a um servidor MCP, esse tráfego nunca passa pelo seu Mac. O pedido passa, por isso o servidor, o seu URL, a sua definição de aprovação e as suas ferramentas aparecem mesmo assim.
@@ -399,9 +400,14 @@

Relacione as chamadas de ferramentas suportadas com os pedidos de rede

A seguir

O que está a caminho

-

Hoje, o Flowlight observa, explica e recusa. Esta é a ordem pela qual o resto está a ser construído.

+

Hoje, o Flowlight observa, explica e recusa — observar em vez de impedir, como o + modelo de ameaças expõe. Esta é a ordem pela qual o resto está a ser construído.

+
Um orçamento para a inspeção 0.9.3

Os corpos registados são a coisa mais sensível que o Flowlight guarda. Uma lista de cabeçalhos permitidos em vez de uma lista de proibidos, padrões seus, a opção de não guardar cabeçalho algum, limites por app, e uma sessão que expira por si.

+
Mostra-me o que esta regra teria feito 0.9.4

Repita o último dia contra uma regra e veja a lista do que ela teria recusado, antes de recusar o que for. Os dados já lá estão; até agora só serviram para explicar o passado.

+
O que sai do Mac, antes de sair 0.9.5

Antes de a primeira linha chegar a um coletor: o destino, se vai encriptada, que campos viajam e se algum é um cabeçalho — a divulgação que o Flowlight exige de tudo o mais, aplicada a si próprio.

+
O que um agente fez para além da rede 1.0

Um ficheiro a sair é uma leitura e depois um envio, e hoje só o envio é visível. Registar o que as ferramentas de um agente abriram, escreveram e lançaram tornaria leu a chave privada e depois falou com o paste.example um único achado em vez de dois ecrãs. Não é um monitor de recursos: o CPU e a memória são trabalho do Monitor de Atividade. Precisa da permissão EndpointSecurity da Apple e precisa que o orçamento de inspeção acima exista primeiro.

Linux, depois Windows

O núcleo de análise é Swift portável; a captura não é. Primeiro vem um daemon de Linux com uma interface web local, sobre eBPF em vez das APIs do macOS.

@@ -424,7 +430,7 @@

Um monitor que não tem de monitorizar

-
O detalhe do Claude Code no Flowlight: ferramentas e servidores MCP com contagens de chamadas e uma falha, uma lista de permissões e o separador Chamadas de ferramentas com um git push falhado, um envio do curl para paste.example com a resposta e o pedido, um npm install, um problema no GitHub, uma pesquisa na documentação e uma leitura de ficheiro, cada um com o seu resultado
Um agente, todas as chamadas de ferramentas. O tráfego do git, do curl e dos servidores MCP que o Claude Code iniciou conta como tráfego do Claude Code. Com a inspeção HTTPS ativada, o separador Chamadas de ferramentas mostra o que o modelo pediu, o que voltou e os pedidos que cada ferramenta fez: @@ -434,10 +440,10 @@

Um monitor que não tem de monitorizar

-
A vista Relatórios com barras horárias de dados recebidos e enviados e gráficos circulares de apps, destinos e protocolos
Relatórios. Zoom do segundo ao ano, três agrupamentos, gráficos que continuam legíveis com centenas de apps.
-
A vista Alertas a listar alertas de exfiltração por um agente, de e-mail, de FTP, de atividade durante a ausência e de picos de tráfego
Alertas. Cada um nomeia a app, o destino e o número que o disparou.
diff --git a/docs/pt-PT/privacy/index.html b/docs/pt-PT/privacy/index.html index 7adfe8a..d562790 100644 --- a/docs/pt-PT/privacy/index.html +++ b/docs/pt-PT/privacy/index.html @@ -32,10 +32,8 @@ - - - - + + @@ -47,6 +45,7 @@ Agentes de IA Documentação Privacidade + Modelo de ameaças Versões Acerca GitHub @@ -101,7 +100,9 @@

Inspeção HTTPS

Desativada por predefinição. Se a ativar, o Flowlight cria uma autoridade de certificação no seu Mac (a chave nunca sai de ~/Library/Application Support/Flowlight/Inspection) e executa um proxy que aceita ligações apenas deste Mac. Nas apps que encaminhar por ele, regista os pedidos e as respostas, incluindo corpos até 2 MB, na base de dados local durante 3 dias. Os cabeçalhos de credenciais - (Authorization, cookies, chaves de API) são substituídos pelo respetivo comprimento antes de algo ser guardado. O Flowlight exclui da desencriptação a sua lista integrada de serviços da Apple e de gestores de palavras-passe. Os dados de inspeção registados não são enviados pelo Flowlight. Desativar a inspeção interrompe o proxy; Remover o certificado e os dados + são substituídos pelo respetivo comprimento antes de algo ser guardado — reconhecidos pelo nome (Authorization, cookies, chaves de API) e pelas + palavras do nome, pelo que X-Access-Key também é apanhado. Isso é uma heurística, não uma garantia: um cabeçalho que leve um segredo + sob um nome que nada reconhece ficaria registado. O Flowlight exclui da desencriptação a sua lista integrada de serviços da Apple e de gestores de palavras-passe. Os dados de inspeção registados não são enviados pelo Flowlight. Desativar a inspeção interrompe o proxy; Remover o certificado e os dados registados elimina o certificado, a sua definição de confiança e todos os pedidos registados.

Pedidos de rede que a app faz

@@ -109,7 +110,7 @@

Pedidos de rede que a app faz

PedidoEnviado paraO que contémQuando Procura de atualizaçõesapi.github.comUm pedido HTTPS normal pela versão mais recente; o GitHub vê o seu endereço IP e o agente de utilizador Flowlight/<version>Na abertura e uma vez por dia, a partir da 0.1.2. Interruptor para desativar em Definições › Geral Transferência da atualizaçãogithub.comA imagem de disco e o seu ficheiro de soma de verificaçãoSó quando clica em Transferir e abrir - DNS inversoO resolvedor de DNS que tem configuradoUma consulta do nome registado de um endereço IP, quando não foi visto nenhum nome de anfitriãoConforme necessário, no modo de captura predefinido + DNS inversoO resolvedor de DNS que tem configuradoUma consulta do nome registado de um endereço IP, quando não foi visto nenhum nome de anfitriãoConforme necessário, no modo de captura por amostrador, que é a predefinição até a extensão de rede estar a correr. Sem interruptor para desligar: sem isto, o amostrador não consegue dar nome à maioria das ligações. A extensão de rede dá-lhes nome a partir do próprio tráfego e não faz esta consulta Consulta do proprietário da redeTeam Cymru, por DNSEndereços IP públicos sem nome de anfitrião conhecido. Os endereços privados e reservados nunca saem do seu MacAtivada por predefinição. Interruptor para desativar em Captura › Identificar os proprietários da rede Perguntar com um modelo alojadoO fornecedor que escolher: Anthropic, OpenAI, Google Gemini ou um endpoint compatívelA sua pergunta e os resultados devolvidos pelas consultas de leitura do Flowlight escolhidas pelo modelo. A base de dados de tráfego em si não é enviadaSó quando escolhe um fornecedor alojado e submete uma pergunta. O ecrã Perguntar mostra os pedidos transmitidos Exportação para um coletorO endpoint de OpenTelemetry ou de HTTP que configurarOs campos indicados em Definições › Exportação, como as agregações de tráfego e os alertas. Os cabeçalhos de autenticação ficam guardados no porta-chavesSó depois de configurar um endpoint e ativar a exportação @@ -129,11 +130,15 @@

Conservação

Este site

Este site é uma página estática alojada no GitHub Pages e servida através da Cloudflare. Não define cookies nem executa analítica alguma. O GitHub - e a Cloudflare processam os pedidos para o servir, e os tipos de letra são carregados do Google Fonts, que recebe o seu endereço IP quando o visita.

+ e a Cloudflare processam os pedidos para o servir. Os tipos de letra são servidos deste domínio, por isso mostrar uma página não envia nada a mais + ninguém — esta página carregava-os antes do Google, o que significava que a página que explica que o Flowlight não envia nada para lugar algum + fazia um pedido ao Google para se mostrar a si mesma.

Contacto

-

Dúvidas ou uma preocupação de privacidade? Abra um problema. Para qualquer assunto sensível, use a - comunicação privada de vulnerabilidades do GitHub no repositório.

+

Dúvidas ou uma preocupação de privacidade? Abra um problema. Para um problema de segurança, use a + comunicação privada de vulnerabilidades do GitHub, ou envie um email para + security@xinbetween.com se preferir não usar o GitHub — veja o + SECURITY.md para saber o que esperar.

diff --git a/docs/pt-PT/threat-model/index.html b/docs/pt-PT/threat-model/index.html new file mode 100644 index 0000000..0c40521 --- /dev/null +++ b/docs/pt-PT/threat-model/index.html @@ -0,0 +1,280 @@ + + + + + +Modelo de ameaças do Flowlight + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

Modelo de ameaças

+

Observar, não impedir

+

O Flowlight diz-lhe o que o software do seu Mac está a enviar, e para onde. Não é uma defesa contra um atacante que já + controla a máquina, e a diferença importa o suficiente para ficar numa página própria em vez de numa nota de pé de página.

+
+ +
+ + +
+

Para que serve

+

O Flowlight responde a uma pergunta a que o Mac não responde: que app enviou isto, e para onde foi? Foi feito para + software que se porta mal a céu aberto — um agente de IA a contactar algo que ninguém lhe pediu, uma ferramenta a carregar mais do que + deveria, um processo a falar com um endereço que não tem nome. Esse comportamento é visível no tráfego, e o trabalho do Flowlight é + torná-lo legível e dizer com honestidade quando não consegue.

+

Não é um antivírus, não é um agente de EDR, e não é uma firewall no sentido de algo que se coloca entre você e um atacante. Onde os dois se + sobrepõem — o Flowlight pode recusar ligações — a recusa é uma comodidade para controlar software em que já confia, não uma barreira contra + software em que não confia.

+ +

Contra o que defende

+
    +
  • Saída de dados que passa despercebida. Uma app ou um agente a enviar para um lugar que não teria aprovado, inclusive + através de uma ferramenta que ele próprio executou. O Flowlight atribui a ligação ao processo que a fez e ao agente que iniciou esse + processo.
  • +
  • Mudanças silenciosas de comportamento. Uma app que de repente contacta destinos novos, move muito mais do que a sua + base de referência, ou trabalha enquanto está ausente. Cada alerta nomeia o número que a fez disparar, para que possa discordar dela.
  • +
  • Um agente a exceder aquilo que permitiu. Uma lista de permissões por agente, e regras que recusam as ligações fora + dela, com a recusa registada e um clique para a permitir.
  • +
  • Uma atualização adulterada. Cada versão publica uma soma de verificação; o atualizador recusa uma transferência que não + consegue verificar e recusa instalar uma app que não esteja assinada pela mesma equipa que a cópia a pedir a atualização.
  • +
+ +

Software com root pode desligá-lo

+

O Flowlight corre em seu nome, com uma extensão de sistema que o macOS arranca por ele. Qualquer coisa a correr como root — ou qualquer + coisa cujo instalador aprove — pode descarregar essa extensão, parar a app ou apagar a sua base de dados. Nada na conceção o impede, e + nenhuma ferramenta de monitorização no macOS o consegue impedir e continuar a ser uma ferramenta que também você pode desligar.

+

A afirmação honesta é mais estreita e continua a ser útil: o software que se porta mal mas não está ativamente a fugir a um monitor será + visto. O software que lhe está ativamente a fugir pode não ser, e deixará pelo menos uma falha — uma extensão que parou, um período sem + dados — que o ecrã Cobertura está lá para mostrar.

+ +

O que escapa à captura

+
    +
  • O tráfego anterior ao início da captura. Não há preenchimento retroativo. Uma ligação que abriu antes do filtro nunca + lhe foi entregue.
  • +
  • Os serviços de sistema isentos dos filtros de conteúdo. O macOS não mostra tudo a um filtro de conteúdo; parte do seu + próprio tráfego nunca chega ao nosso.
  • +
  • Outro filtro de conteúdo a ocupar o lugar. O macOS executa um de cada vez. Se uma VPN ou um agente de segurança o + tiver, o filtro do Flowlight instala-se, liga-se, e nunca lhe é pedido que filtre nada — a Captura di-lo, em vez de mostrar um ecrã + vazio.
  • +
  • As ligações curtas, com o amostrador. Sem a extensão, o Flowlight lê contadores uma vez por segundo: uma ligação que + abre e fecha entre duas leituras nunca é registada.
  • +
  • Os canais que não são TCP nem UDP. O Bluetooth e o USB vêem-se como dispositivos, não como bytes. O servidor MCP local + de um agente a comunicar por um pipe não é tráfego de rede nenhum e não aparece em lugar algum.
  • +
+ +

O que escapa à inspeção

+

A inspeção HTTPS lê apenas o que é encaminhado pelo proxy local do Flowlight, e isso é um programa que o decide quando arranca. Uma app que + ignora as definições de proxy, uma que foi iniciada antes de a inspeção ser ligada, ou uma que fixa os seus certificados passa intacta — de + propósito, porque quebrar uma ligação com o certificado fixado quebraria a app. O QUIC também não é entregue ao proxy.

+

Por isso um ecrã Inspecionar vazio significa «não foi encaminhado nada para aqui», não «não aconteceu nada». A Cobertura diz qual das duas + coisas se aplica, app por app.

+ +

O que o bloqueio é, e não é

+

Uma regra que recusa ligações é levada a cabo pela extensão de rede, no caminho, antes de a ligação ser feita. Uma regra que nomeia um URL é + levada a cabo pelo proxy de inspeção, que responde ao pedido com um estado que a app consegue ler. São as duas únicas partes do Flowlight que + agem em vez de relatar — o amostrador nettop não consegue recusar nada, por isso num Mac que capta com o amostrador nenhuma regra é aplicada, e + o Flowlight di-lo em vez de oferecer um interruptor que não faz nada.

+

Continua a não ser impedir. Um agente que consiga executar uma shell pode fazer à mão o que a ferramenta recusada teria feito. Uma recusa + que pode desfazer num clique é uma recusa por onde a tentativa seguinte de um agente pode passar. O tráfego local, o DNS, os serviços da + Apple e as ligações do próprio Flowlight nunca são recusados, porque um Mac bloqueado é um resultado pior do que um agente bloqueado. E a + aplicação efetiva caduca uns segundos depois de o Flowlight deixar de correr: uma recusa que ninguém consegue ver é pior do que nenhuma.

+

A inspeção e a recusa não se combinam. O tráfego encaminhado pelo próprio proxy do Flowlight sai do Mac como tráfego do + Flowlight, e o Flowlight nunca se recusa a si mesmo — por isso uma app cujos pedidos está a ler é uma app cujas ligações as regras já não + travam. Ligar a inspeção para ver mais custa-lhe a aplicação das regras, e até agora nada no ecrã o dizia.

+ +

O que o próprio Flowlight guarda

+

Metadados de tráfego numa base de dados SQLite local, com uma retenção publicada. Com a inspeção HTTPS ligada, guarda também os corpos dos + pedidos e das respostas durante três dias — a coisa mais sensível que chega a manter. Os cabeçalhos de credenciais são ocultados por nome e + por palavra, o que é uma heurística e não uma garantia; um cabeçalho que leve um segredo sob um nome que nada reconhece pode ficar + registado.

+

A base de dados de tráfego nunca é enviada. Há, ainda assim, três coisas mais pequenas que saem do Mac sem lhe serem pedidas, + todas nomeadas na página de privacidade: a procura de atualizações, que pede ao GitHub a versão mais + recente no arranque e uma vez por dia; a consulta do proprietário da rede, que pergunta ao Team Cymru por endereços públicos sem + nome de anfitrião; e, enquanto o Flowlight lê contadores em vez de correr a sua extensão, uma consulta de DNS inverso dos endereços + para os quais não viu nome. As duas primeiras têm interruptores para desligar. A terceira não tem, porque no amostrador é quase + tudo aquilo que dá um nome a uma ligação — vai para o resolvedor de DNS que o Mac já usa e para quando a extensão assume e passa a + nomear as ligações a partir do próprio tráfego. Perguntar com um modelo alojado envia muito mais do que qualquer uma delas, e é a + única coisa que fica desligada até a configurar.

+ +

Atualizações

+

As versões são assinadas com um Developer ID e notarizadas. O atualizador exige uma soma de verificação publicada e recusa uma + transferência sem ela; depois verifica que a app transferida está assinada pela mesma equipa que a cópia em execução antes de a instalar. Uma + atualização assinada por outra pessoa é recusada mesmo que no resto seja válida.

+ +

Comunicar uma vulnerabilidade

+

Use a comunicação privada de vulnerabilidades do GitHub, ou envie um email + para security@xinbetween.com se preferir não usar o GitHub. O + SECURITY.md diz o que está no âmbito e o que pode esperar. + Um erro comum — uma falha, um número errado, um ecrã que engana — pertence em vez disso aos + problemas.

+
+
+
+ + + + + diff --git a/docs/releases/index.html b/docs/releases/index.html index c058bcf..dfb81bd 100644 --- a/docs/releases/index.html +++ b/docs/releases/index.html @@ -21,10 +21,8 @@ - - - - + + @@ -36,6 +34,7 @@ AI agents Docs Privacy + Threat model Releases About GitHub diff --git a/docs/sitemap.xml b/docs/sitemap.xml index 653ff28..cdf7a5c 100644 --- a/docs/sitemap.xml +++ b/docs/sitemap.xml @@ -3,42 +3,52 @@ https://flowlight.xinbetween.com/about/2026-09-25 https://flowlight.xinbetween.com/docs/2026-09-27 https://flowlight.xinbetween.com/2026-09-27 - https://flowlight.xinbetween.com/privacy/2026-09-25 + https://flowlight.xinbetween.com/privacy/2026-09-27 https://flowlight.xinbetween.com/releases/2026-09-27 + https://flowlight.xinbetween.com/threat-model/2026-09-27 https://flowlight.xinbetween.com/de/about/2026-09-26 - https://flowlight.xinbetween.com/de/docs/2026-09-26 - https://flowlight.xinbetween.com/de/2026-09-26 - https://flowlight.xinbetween.com/de/privacy/2026-09-26 + https://flowlight.xinbetween.com/de/docs/2026-09-27 + https://flowlight.xinbetween.com/de/2026-09-27 + https://flowlight.xinbetween.com/de/privacy/2026-09-27 + https://flowlight.xinbetween.com/de/threat-model/2026-09-27 https://flowlight.xinbetween.com/es/about/2026-09-26 - https://flowlight.xinbetween.com/es/docs/2026-09-26 - https://flowlight.xinbetween.com/es/2026-09-26 - https://flowlight.xinbetween.com/es/privacy/2026-09-26 + https://flowlight.xinbetween.com/es/docs/2026-09-27 + https://flowlight.xinbetween.com/es/2026-09-27 + https://flowlight.xinbetween.com/es/privacy/2026-09-27 + https://flowlight.xinbetween.com/es/threat-model/2026-09-27 https://flowlight.xinbetween.com/fr/about/2026-09-26 - https://flowlight.xinbetween.com/fr/docs/2026-09-26 - https://flowlight.xinbetween.com/fr/2026-09-26 - https://flowlight.xinbetween.com/fr/privacy/2026-09-26 + https://flowlight.xinbetween.com/fr/docs/2026-09-27 + https://flowlight.xinbetween.com/fr/2026-09-27 + https://flowlight.xinbetween.com/fr/privacy/2026-09-27 + https://flowlight.xinbetween.com/fr/threat-model/2026-09-27 https://flowlight.xinbetween.com/it/about/2026-09-26 - https://flowlight.xinbetween.com/it/docs/2026-09-26 - https://flowlight.xinbetween.com/it/2026-09-26 - https://flowlight.xinbetween.com/it/privacy/2026-09-26 + https://flowlight.xinbetween.com/it/docs/2026-09-27 + https://flowlight.xinbetween.com/it/2026-09-27 + https://flowlight.xinbetween.com/it/privacy/2026-09-27 + https://flowlight.xinbetween.com/it/threat-model/2026-09-27 https://flowlight.xinbetween.com/pt-PT/about/2026-09-26 - https://flowlight.xinbetween.com/pt-PT/docs/2026-09-26 - https://flowlight.xinbetween.com/pt-PT/2026-09-26 - https://flowlight.xinbetween.com/pt-PT/privacy/2026-09-26 + https://flowlight.xinbetween.com/pt-PT/docs/2026-09-27 + https://flowlight.xinbetween.com/pt-PT/2026-09-27 + https://flowlight.xinbetween.com/pt-PT/privacy/2026-09-27 + https://flowlight.xinbetween.com/pt-PT/threat-model/2026-09-27 https://flowlight.xinbetween.com/ja/about/2026-09-26 - https://flowlight.xinbetween.com/ja/docs/2026-09-26 - https://flowlight.xinbetween.com/ja/2026-09-26 - https://flowlight.xinbetween.com/ja/privacy/2026-09-26 + https://flowlight.xinbetween.com/ja/docs/2026-09-27 + https://flowlight.xinbetween.com/ja/2026-09-27 + https://flowlight.xinbetween.com/ja/privacy/2026-09-27 + https://flowlight.xinbetween.com/ja/threat-model/2026-09-27 https://flowlight.xinbetween.com/zh-Hans/about/2026-09-26 - https://flowlight.xinbetween.com/zh-Hans/docs/2026-09-26 - https://flowlight.xinbetween.com/zh-Hans/2026-09-26 - https://flowlight.xinbetween.com/zh-Hans/privacy/2026-09-26 + https://flowlight.xinbetween.com/zh-Hans/docs/2026-09-27 + https://flowlight.xinbetween.com/zh-Hans/2026-09-27 + https://flowlight.xinbetween.com/zh-Hans/privacy/2026-09-27 + https://flowlight.xinbetween.com/zh-Hans/threat-model/2026-09-27 https://flowlight.xinbetween.com/zh-Hant/about/2026-09-26 - https://flowlight.xinbetween.com/zh-Hant/docs/2026-09-26 - https://flowlight.xinbetween.com/zh-Hant/2026-09-26 - https://flowlight.xinbetween.com/zh-Hant/privacy/2026-09-26 + https://flowlight.xinbetween.com/zh-Hant/docs/2026-09-27 + https://flowlight.xinbetween.com/zh-Hant/2026-09-27 + https://flowlight.xinbetween.com/zh-Hant/privacy/2026-09-27 + https://flowlight.xinbetween.com/zh-Hant/threat-model/2026-09-27 https://flowlight.xinbetween.com/ko/about/2026-09-26 - https://flowlight.xinbetween.com/ko/docs/2026-09-26 - https://flowlight.xinbetween.com/ko/2026-09-26 - https://flowlight.xinbetween.com/ko/privacy/2026-09-26 + https://flowlight.xinbetween.com/ko/docs/2026-09-27 + https://flowlight.xinbetween.com/ko/2026-09-27 + https://flowlight.xinbetween.com/ko/privacy/2026-09-27 + https://flowlight.xinbetween.com/ko/threat-model/2026-09-27 diff --git a/docs/threat-model/index.html b/docs/threat-model/index.html new file mode 100644 index 0000000..eabe3f6 --- /dev/null +++ b/docs/threat-model/index.html @@ -0,0 +1,279 @@ + + + + + +Flowlight threat model + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

Threat model

+

Monitoring, not prevention

+

Flowlight tells you what software on your Mac is sending and where. It is not a defence against an attacker who + already controls the machine, and the difference matters enough to state on its own page rather than in footnotes.

+
+ +
+ + +
+

What it is for

+

Flowlight answers a question the Mac does not: which app sent this, and where did it go? It is built for + software that behaves badly in the open — an AI agent contacting something nobody asked it to, a tool uploading more than it + should, a process talking to an address that has no name. That behaviour is visible in the traffic, and Flowlight's job is to + make it legible and to say honestly when it cannot.

+

It is not antivirus, not an EDR agent, and not a firewall in the sense of something that stands between you and an attacker. + Where the two overlap — Flowlight can refuse connections — the refusal is a convenience for controlling software you already + trust, not a barrier against software you don't.

+ +

What it defends against

+
    +
  • Unnoticed egress. An app or an agent sending somewhere you would not have approved, including through a + tool it ran itself. Flowlight attributes the connection to the process that made it and to the agent that started that + process.
  • +
  • Quiet changes in behaviour. An app that suddenly contacts new destinations, moves far more than its + baseline, or works while you are away. Every alert names the number that tripped it, so you can disagree with it.
  • +
  • An agent exceeding what you allowed. An allowlist per agent, and rules that refuse connections outside it, + with the refusal recorded and one click to allow it.
  • +
  • A tampered update. Every release publishes a checksum; the updater refuses a download it cannot verify and + refuses to install an app not signed by the same team as the copy asking for the update.
  • +
+ +

Software with root can switch it off

+

Flowlight runs as you, with a system extension macOS starts on its behalf. Anything running as root — or anything you approve + an installer for — can unload that extension, stop the app, or delete its database. Nothing in the design prevents that, and no + monitoring tool on macOS can prevent it while remaining a tool you can also turn off yourself.

+

The honest claim is narrower and still useful: software that is misbehaving but not actively evading a monitor will be seen. + Software that is actively evading one may not be, and will at least leave a gap — an extension that stopped, a period with no + data — which the Coverage screen is there to show.

+ +

What capture misses

+
    +
  • Traffic from before capture started. There is no backfill. A connection that opened before the filter did + was never offered to it.
  • +
  • System services exempt from content filters. macOS does not show a content filter everything; some of its + own traffic never reaches ours.
  • +
  • Another content filter holding the slot. macOS runs one at a time. If a VPN or a security agent has it, + Flowlight's filter installs, connects, and is never asked to filter anything — Capture says so rather than showing an empty + screen.
  • +
  • Short connections, on the sampler. Without the extension, Flowlight reads counters once a second: a + connection that opens and closes between two readings is never recorded.
  • +
  • Channels that are not TCP or UDP. Bluetooth and USB are visible as devices, not as bytes. An agent's local + MCP server talking over a pipe is not network traffic at all and appears nowhere.
  • +
+ +

What inspection misses

+

HTTPS inspection reads only what is routed through Flowlight's local proxy, and a program decides that when it starts. An app + that ignores proxy settings, one started before inspection was switched on, or one that pins its certificates is passed through + untouched — deliberately, because breaking a pinned connection would break the app. QUIC is not offered to the proxy either.

+

So an empty Inspect screen means "nothing was routed here", not "nothing happened". Coverage says which of the two applies, + per app.

+ +

What blocking is, and isn't

+

A rule that refuses a connection is carried out by the Network Extension, in the path, before the connection is made. A rule + that names a URL is carried out by the inspection proxy instead, which answers the request with a status the app can read. + Those are the only two parts of Flowlight that act rather than report — the nettop sampler can refuse nothing at all, so on a + Mac running the sampler no rule is enforced, and Flowlight says so rather than offering a switch that does nothing.

+

It is still not prevention. An agent that can run a shell can do by hand what a refused tool would have done. A refusal you + can undo in one click is a refusal an agent's next attempt may walk through. Local traffic, DNS, Apple's own services and + Flowlight's own connections are never refused, because a blocked Mac is a worse outcome than a blocked agent. And enforcement + lapses a few seconds after Flowlight stops running: a refusal nobody can see is worse than none.

+

Inspection and refusal do not combine. Traffic routed through Flowlight's own proxy leaves the Mac as + Flowlight's traffic, and Flowlight never refuses itself — so an app whose requests you are reading is an app whose connections + rules no longer stop. Turning inspection on to see more costs you enforcement, and nothing on screen previously said so.

+ +

What Flowlight itself holds

+

Traffic metadata in a local SQLite database, with published retention. With HTTPS inspection on it also holds request and + response bodies for three days — the most sensitive thing it ever keeps. Credential headers are redacted by name and by word, + which is a heuristic and not a guarantee; a header carrying a secret under a name nothing recognises can be recorded.

+

The traffic database is never uploaded. Three smaller things do leave the Mac without being asked for, all of them named on + the privacy page: the update check, which asks GitHub for the latest release on launch and + daily; the network-owner lookup, which asks Team Cymru about public addresses that have no hostname; and, while Flowlight is + reading counters instead of running its extension, a reverse-DNS lookup of addresses it saw no name for. The first two have + off switches. The third does not, because on the sampler it is most of how a connection gets a name at all — it goes to the + resolver the Mac already uses, and it stops once the extension takes over and names connections from the traffic itself. + Ask with a hosted model sends far more than any of them, and is the one thing that stays off until you configure it.

+ +

Updates

+

Releases are signed with a Developer ID and notarized. The updater requires a published checksum and refuses a download + without one, then verifies that the downloaded app is signed by the same team as the running copy before installing it. An + update signed by somebody else is refused even if it is otherwise valid.

+ +

Reporting a vulnerability

+

Use GitHub's private vulnerability reporting, or email + security@xinbetween.com if you would rather not use GitHub. + SECURITY.md says what is in scope and what to expect. + An ordinary bug — a crash, a wrong number, a misleading screen — belongs in the + issue tracker instead.

+
+
+
+ + + + + diff --git a/docs/zh-Hans/about/index.html b/docs/zh-Hans/about/index.html index 2a2a7de..3b4adc9 100644 --- a/docs/zh-Hans/about/index.html +++ b/docs/zh-Hans/about/index.html @@ -32,10 +32,8 @@ - - - - + + @@ -47,6 +45,7 @@ AI 代理 文档 隐私 + 威胁模型 版本 关于 GitHub diff --git a/docs/zh-Hans/docs/index.html b/docs/zh-Hans/docs/index.html index 0854e57..83f63b9 100644 --- a/docs/zh-Hans/docs/index.html +++ b/docs/zh-Hans/docs/index.html @@ -32,11 +32,9 @@ - - - - - + + + @@ -47,6 +45,7 @@ AI 代理 文档 隐私 + 威胁模型 版本 关于 GitHub @@ -90,7 +89,7 @@

使用 Flowlight

设置与数据 @@ -146,12 +145,20 @@

各个视图

视图快捷键它回答什么 实时⌘1现在什么在动:最近几秒按应用的速率,以及最忙的目标。 - AI 代理⌘2哪些代理在活动、它们用哪些 AI 提供方,以及它们还联系了什么。 + AI 代理⌘2哪些代理在活动、它们用哪些 AI 提供方,以及它们还联系了什么。 报告⌘3流量去了哪里,从秒到年。按应用、目标或 IP 分组;切到图表或值得一看;导出 CSV。 - 警报⌘4所有看起来不寻常的事,带上应用、目标和触发规则的那个数字。 - 检查⌘5可选:你交给 Flowlight 转发的那些代理的解密请求,以及它们背后的工具调用。搜索能深入请求和响应正文。 - 捕获⌘6哪个引擎在记录、扩展的状态、主机名学习,以及数据库放在哪里。 + 警报⌘4所有看起来不寻常的事,带上应用、目标和触发规则的那个数字。 + 规则⌘5你设过的每一条允许列表和拒绝,各自管到哪里,以及实际拦下了什么。 + 提问⌘6用平常的话问你自己的流量,由本地模型或托管模型从记录下来的历史里作答。 + 检查⌘7可选:你交给 Flowlight 转发的那些代理的解密请求,以及它们背后的工具调用。搜索能深入请求和响应正文。 + 设备⌘8你打开之前一直是关的:蓝牙、USB 与外置存储,一台 Mac 用它们跟用网络一样多。 + 覆盖范围⌘9Flowlight 说不清的部分——按应用,它的流量有没有被看到、被命名、被读懂。 + 捕获⌘0哪个引擎在记录、扩展的状态、主机名学习,以及数据库放在哪里。 +

快捷键就是侧边栏的顺序,所以 ⌘0 是第十项,不是被跳过的位置。

+
实时视图:一列应用,各自带着当前的发送与接收速率,以及最忙的目标。
+
实时,Flowlight 打开时进入的那个视图。

在报告里,把指针停在某根柱子上就能看到是哪些应用造成的,点它可以放大,双击任意一行则把报告收窄到那一项。

AI 代理规则

@@ -281,10 +288,14 @@

HTTPS 检查(可选)

并在那里启动它们。在高级里,你可以只解密 AI 代理而不是所有应用、编辑从不解密列表、拷贝 某个 shell 的配置,或者移除证书和所有已记录的内容。

Flowlight 会把内置的 Apple 服务和密码管理器名单排除在解密之外(在“设置”里可以编辑这份列表)。固定证书的应用可能会拒绝 - Flowlight 的证书;Flowlight 会发现并让它们以加密方式直接通过。API 密钥、cookie 以及其他凭据标头从不 - 保存,记录的请求保留 3 天,移除证书与记录的数据会删除证书、它的信任 + Flowlight 的证书;Flowlight 会发现并让它们以加密方式直接通过。API 密钥、cookie 以及其他凭据标头在任何内容被存储之前 + 都会被替换为它们的长度——按名称、也按名称中的词来匹配,这能抓到某家厂商自己的写法,但不能保证一个都不漏——记录的请求保留 3 天,移除证书与记录的数据会删除证书、它的信任 设置以及所有已记录的内容。检查仅支持 HTTP/1.1(Flowlight 会向双方请求它),且在演示模式下不可用。

+

从一行直接过来。在实时、报告或 AI 代理里右键点击一个应用或一个目的地,选择检查 … 的流量: + 检查会打开,而那个名字已经填在搜索框里。用搜索框而不是一个隐藏的过滤器是故意的——你可以把它放宽、收窄或清空,而不必回到 + 你出发的地方。只有经过代理服务器的流量才可能出现,所以一行你知道很忙的记录,在这里仍可能什么都不显示。

+

模拟响应

想看看某个 API 失败、卡住或返回奇怪内容时代理会怎么应对,那就自己来响应那个端点。在 检查 › 模拟响应里,一条规则指明主机、路径和方法,并给出用来回复的状态码、标头、正文和 @@ -414,6 +425,20 @@

捕获:引擎与来源

不需要过滤器,可以和它们并存。 关于它是如何构建的,见开发者指南。

+

覆盖范围:Flowlight 说不清的部分

+

其他每个画面回答的都是发生了什么。覆盖范围回答的是有什么本来不会被告诉你,而这决定了其他画面值多少。 + 它对每个应用问三个问题,因为这三件事是各自独立地失效的。

+

有没有被看到?网络扩展在每一条流建立时就看到它。nettop 采样器每秒读一次计数器,所以在两次读取之间开启 + 又关闭的连接——一次 DNS 查询、一次很快的 API 调用、一个运行 curl 后就退出的脚本——会整条缺失。那是任何百分比 + 都表达不了的缺口,所以这里用文字写出来,而不是给它打分。

+

有没有名字?该应用的字节中,发往有主机名(而不是只有一个地址)的目的地的比例。是字节,不是连接数: + 一条没有名字却运走一个 GB 的连接,比一百条各运一个 KB 的连接是更大的洞,而按连接数来数,排序恰好相反。

+

内容能不能读?HTTPS 检查是否解密了该应用的任何一点流量。有四个答案,其中只有一个才是缺口:正在被读; + 它从未到达代理服务器;它在“从不解密”列表中,那是你自己做的选择;或者检查是关闭的,那是一个设置,而不是某个应用上的失败。

+

任何引擎都完全看不到的东西列在画面上,而不是留给这个页面:捕获开始之前的流量、从不会交给内容过滤器的 + 系统服务、固定证书的应用、从不会交给代理服务器的 QUIC,以及某个代理通过管道与它通信的本地 MCP 服务器。这些在 Flowlight 的 + 任何地方都不会出现,因此也不在这些数字之内——一个只数自己能看到的东西的覆盖率,会是一种安慰,而不是一个事实。

+

设备:蓝牙、USB 与外置存储

一台 Mac 收发数据的途径不止 TCP 和 UDP。设备界面负责其余部分,而且在你打开之前 它一直关闭——不是因为它需要 Flowlight 尚未拥有的权限,而是因为监视你 Mac 的更多部分 @@ -540,8 +565,9 @@

问题与解答

它会显示安装了哪些扩展、macOS 是否真的启动了 Flowlight 的过滤器,以及最近一次记录是什么时候。 把它粘贴到一个 issue 里。
Flowlight 会把关于我的任何信息发到什么地方吗?
-
不会。没有账号,没有遥测,也没有分析。它发出的请求只有每日更新检查、可选的网络所有者 - 查询,以及反向 DNS——每一项都列在隐私页面上,并且每一项都有开关可以关掉。
+
没有账号,没有遥测,也没有分析,而且你的流量数据库从不上传。确实有三个请求会离开这台 Mac,它们都列在隐私页面上: + 每日更新检查和可选的网络所有者查询,这两个都有开关可以关掉;以及 Flowlight 在采样器上运行时的反向 DNS,它没有开关—— + 没有它,采样器就没法给大多数连接命名。
它会让我的 Mac 变慢,或者更耗电吗?
窗口关闭时 Flowlight 几乎什么都不做:它保留菜单栏速率,每秒写入一行。网络扩展 比作为后备的采样器更省,后者每秒都要启动一个短命的 nettop 进程。
diff --git a/docs/zh-Hans/index.html b/docs/zh-Hans/index.html index d1cd3da..e704a43 100644 --- a/docs/zh-Hans/index.html +++ b/docs/zh-Hans/index.html @@ -32,10 +32,8 @@ - - - - + + @@ -47,6 +45,7 @@ AI 代理 文档 隐私 + 威胁模型 版本 关于 GitHub @@ -106,7 +105,7 @@

看清应用的网络活动。
-
Flowlight 的 AI 代理视图。Claude Code、Cursor、Codex 和一个 Python 脚本逐行列出,显示各自的 AI 提供方、发往别处的流量,以及 SMTP、SSH、FTP、大量上传和裸 IP 的风险标记。

AI 代理视图:每个代理的模型提供方,以及它联系过的其他一切。图中为演示数据。

@@ -217,7 +216,8 @@

看住 AI 代理如何使用网络

规则管多久,你说了算

指定一个应用、一个代理、一个目标或单个 URL 就能阻止它——在发现它的那一行右键即可。 可以永久生效、到某个时间、到 Flowlight 退出,或只在选定的时段内生效;有一个暂停开关,每次拒绝也都留着出口。 - 最具体的规则胜出,打平时以阻止为准。

+ 最具体的规则胜出,打平时以阻止为准。 + 它是对你本来就信任的软件的管控,不是一道拦住你不信任的软件的屏障——见威胁模型。

Cursor ⇥ raw.githubusercontent.com · 已拒绝 4 次 · 工作日 18:00–09:00

@@ -369,16 +369,16 @@

把受支持的工具调用与网络请求对上

默认关闭。打开后,Flowlight 会成为一个本地代理,使用在你 Mac 上生成的专属证书颁发机构。 从受检查的终端启动代理,代理及其工具的受支持 HTTP 流量就会被解密,并附上模型请求的工具调用和返回的结果。

-
Flowlight 的检查视图:一列已解密的 Claude Code 请求及其工具调用,以及 curl 向 paste.example 上传的详情——由运行它的那次 Bash 工具调用发起,请求体里正是上传的笔记
我的笔记去哪了?curl 向 paste.example 的上传,一路追到模型要求执行的那条 Bash 命令, 连它发出的请求体一起。
-
Claude Code 的工具标签页:Bash、Read 和两个 MCP 工具,附带说明以及模型各自调用了多少次
代理提供给模型的每一个工具。代理每一轮都会声明自己的工具,所以 Flowlight 把它们全部列出, 并区分模型真正用过的和从未碰过的。
-
Codex 的 MCP 服务器标签页:一个标为“经由提供方”的 sentry 服务器,以及它的 URL、设为“从不”的审批、允许的工具和它提供的工具
连线路上看不到的那些也算。当代理请求提供方去连接某个 MCP 服务器时,那段流量根本不会经过你的 Mac。 但它的请求会,所以这个服务器、它的 URL、它的审批设置和它的工具依然会出现。
@@ -397,9 +397,14 @@

把受支持的工具调用与网络请求对上

接下来

正在路上的东西

-

Flowlight 今天已经能看见、能解释、能拒绝。剩下的部分会按这个顺序做。

+

Flowlight 今天已经能看见、能解释、能拒绝——正如威胁模型所说, + 这是监控,不是防护。剩下的部分会按这个顺序做。

+
给检查定一份预算 0.9.3

记录下来的正文是 Flowlight 保存的东西里最敏感的。用标头的允许列表而不是拒绝列表,加上你自己的模式、一个干脆不保留任何标头的选项、按应用的上限,以及一个自己会过期的会话。

+
让我看看这条规则会拦下什么 0.9.4

把最近一天拿来对一条规则重放,在它拒绝任何东西之前,先列出它本会拒绝的。数据早就在那里了,只是它一直只用来解释过去。

+
什么会离开这台 Mac,在它离开之前 0.9.5

在第一行到达收集器之前:目的地、是否加密、哪些字段会走、其中有没有标头——Flowlight 要求别人做到的那种披露,用在自己身上。

+
代理除了联网还做了什么 1.0

一个文件的外流是一次读取加一次发送,而今天只看得见发送。把代理的工具打开了什么、写了什么、启动了什么记录下来,就能让读取了私钥,然后联系了 paste.example成为一条发现,而不是两个画面。它不是资源监视器:CPU 和内存是活动监视器的事。这需要 Apple 的 EndpointSecurity 授权,也需要上面那份检查预算先存在。

先 Linux,再 Windows

分析内核是可移植的 Swift,捕获不是。先出一个带本地网页界面的 Linux 守护进程,基于 eBPF 而非 macOS API。

@@ -422,7 +427,7 @@

一个不用你盯着的监控工具

-
Flowlight 里 Claude Code 的详情:带调用次数和一次失败的工具与 MCP 服务器、一个允许列表,以及工具调用标签页,里面列出一次失败的 git push、一次 curl 向 paste.example 的上传及其响应和请求、npm install、一个 GitHub issue、一次文档搜索和一次文件读取,每项都带结果
一个代理,每一次工具调用。Claude Code 启动的 git、curl 和 MCP 服务器产生的流量都算作 Claude Code 的。 打开 HTTPS 检查后,工具调用标签页会显示模型要求了什么、返回了什么,以及每个工具发出的请求: @@ -432,10 +437,10 @@

一个不用你盯着的监控工具

-
报告视图,含每小时接收与发送的柱状图,以及应用、目标和协议的环形图
报告。从秒到年的缩放、三种分组方式,几百个应用也读得清的图表。
-
警报视图,列出代理外泄、邮件、FTP、你离开时活动和流量突增等警报
警报。每一条都点明应用、目标和触发它的那个数字。
diff --git a/docs/zh-Hans/privacy/index.html b/docs/zh-Hans/privacy/index.html index 84ebb56..831c2ab 100644 --- a/docs/zh-Hans/privacy/index.html +++ b/docs/zh-Hans/privacy/index.html @@ -32,10 +32,8 @@ - - - - + + @@ -47,6 +45,7 @@ AI 代理 文档 隐私 + 威胁模型 版本 关于 GitHub @@ -101,7 +100,8 @@

HTTPS 检查

默认关闭。如果你打开它,Flowlight 会在你的 Mac 上创建一个证书颁发机构(它的私钥绝不离开 ~/Library/Application Support/Flowlight/Inspection),并运行一个只接受来自本机连接的代理。对于你 交给它转发的应用,它会把请求和响应(含最多 2 MB 的正文)记录在本地数据库里,保留 3 天。凭据标头 - (Authorization、cookie、API 密钥)在任何内容被存储之前,都会被替换为它们的长度。Flowlight 会把内置的 Apple 服务和密码管理器名单排除在解密之外。记录下来的检查数据不会被 Flowlight 上传。关掉检查会停止代理;移除证书与记录的 + 在任何内容被存储之前,都会被替换为它们的长度——按名称(Authorization、cookie、API 密钥)、也按名称中的词来辨认,所以 + X-Access-Key 同样会被抓到。那是一种启发式判断,不是保证:一个把密钥放在没人认得的名字底下的标头,会被记录下来。Flowlight 会把内置的 Apple 服务和密码管理器名单排除在解密之外。记录下来的检查数据不会被 Flowlight 上传。关掉检查会停止代理;移除证书与记录的 数据会删除证书、它的信任设置以及每一条已记录的请求。

应用发出的网络请求

@@ -109,7 +109,7 @@

应用发出的网络请求

请求发往包含什么什么时候 更新检查api.github.com一个查询最新版本的标准 HTTPS 请求;GitHub 会看到你的 IP 地址和 Flowlight/<version> 这个 User-Agent 标识启动时以及每天一次,自 0.1.2 起。关闭开关在设置 › 通用 更新下载github.com磁盘映像及其校验和文件只在你点击“下载并打开”时 - 反向 DNS你配置的 DNS 解析器在没有看到主机名时,查询某个 IP 地址登记的名称按需进行,在默认捕获模式下 + 反向 DNS你配置的 DNS 解析器在没有看到主机名时,查询某个 IP 地址登记的名称按需进行,在采样器捕获模式下,也就是网络扩展开始运行之前的默认模式。没有关闭开关:没有它,采样器就没法给大多数连接命名。网络扩展从流量本身给它们命名,因此不做这件事 网络所有者查询Team Cymru,通过 DNS没有已知主机名的公网 IP 地址。私有地址和保留地址绝不离开你的 Mac默认开启。关闭开关在捕获 › 识别网络所有者 用托管模型提问你选择的提供方:Anthropic、OpenAI、Google Gemini 或兼容的端点你的问题,以及模型选中的那些只读 Flowlight 查询所返回的结果。流量数据库本身不会被上传只在你选择了托管提供方并提交问题时。提问界面会显示发送出去的请求 收集器导出你配置的 OpenTelemetry 或 HTTP 端点设置 › 导出里列出的字段,例如流量汇总和警报。认证标头保存在钥匙串里只在你配置好端点并启用导出之后 @@ -129,11 +129,14 @@

保留期限

本网站

本站是托管在 GitHub Pages 上、经由 Cloudflare 提供服务的静态页面。它不设置 cookie,也不运行任何分析。GitHub - 和 Cloudflare 会处理请求以便提供服务,而字体从 Google Fonts 加载,你访问时它会收到你的 IP 地址。

+ 和 Cloudflare 会处理请求以便提供服务。字体由本域名提供,所以渲染一个页面不会向任何其他人发送任何东西——这个页面 + 以前是从 Google 加载字体的,也就是说,那个解释 Flowlight 什么都不往外发的页面,为了渲染自己而向 Google 发了一个请求。

联系方式

-

有问题或隐私方面的顾虑?提交一个 issue。涉及敏感内容的,请使用 GitHub - 在本仓库上的私密漏洞报告功能。

+

有问题或隐私方面的顾虑?提交一个 issue。安全问题请使用 GitHub 的 + 私密漏洞报告,或者如果你不愿意用 GitHub,可以发邮件到 + security@xinbetween.com——可以期待什么,见 + SECURITY.md。

diff --git a/docs/zh-Hans/threat-model/index.html b/docs/zh-Hans/threat-model/index.html new file mode 100644 index 0000000..8cc1d77 --- /dev/null +++ b/docs/zh-Hans/threat-model/index.html @@ -0,0 +1,267 @@ + + + + + +Flowlight 威胁模型 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

威胁模型

+

只做监控,不做防护

+

Flowlight 会告诉你,你 Mac 上的软件正在发送什么、发往哪里。它不是用来对付已经掌控这台机器的攻击者的, + 而这个区别重要到值得单开一页来讲,而不是塞进脚注里。

+
+ +
+ + +
+

它是做什么用的

+

Flowlight 回答一个 Mac 不回答的问题:是哪个应用发出去的,它去了哪里?它针对的是明面上就行为不端的 + 软件——一个去联系没人让它联系的地方的 AI 代理、一个上传得比它该上传的更多的工具、一个在跟没有名字的地址说话的进程。 + 这种行为在流量里是看得见的,而 Flowlight 的职责就是把它变得可读,并在做不到的时候老实说出来。

+

它不是杀毒软件,不是 EDR 代理,也不是那种站在你和攻击者之间的防火墙。在两者重叠的地方——Flowlight 可以拒绝连接—— + 那种拒绝是一种便利,用来管住你本来就信任的软件,而不是一道拦住你不信任的软件的屏障。

+ +

它能防住什么

+
    +
  • 没人留意的数据外流。某个应用或代理把东西发往一个你本来不会批准的地方,包括经由它自己运行的工具发出去。 + Flowlight 会把这条连接归属到发起它的进程,以及启动那个进程的代理。
  • +
  • 行为上的悄然变化。某个应用突然联系新的目标、移动的数据远超它自己的基线,或在你离开时还在工作。 + 每条警报都会说明是哪个数字触发了它,所以你可以不同意它。
  • +
  • 超出你所允许范围的代理。每个代理各有一份允许列表,还有拒绝列表之外连接的规则;拒绝会被记录下来, + 一键就能改为允许。
  • +
  • 被篡改的更新。每个版本都会公布校验和;更新程序会拒绝无法校验的下载,也会拒绝安装签名团队与 + 发起更新的那份运行中副本不一致的应用。
  • +
+ +

拥有 root 的软件可以把它关掉

+

Flowlight 以你的身份运行,并使用一个由 macOS 代它启动的系统扩展。任何以 root 运行的东西——或者任何你批准了安装程序的 + 东西——都可以卸载那个扩展、停掉这个应用,或者删掉它的数据库。设计上没有任何东西能阻止这一点,而 macOS 上的任何监控工具 + 都无法在保持为一个你自己也能关掉的工具的同时阻止它。

+

诚实的说法更窄,但依然有用:行为不端、却没有主动躲避监控的软件会被看见。主动躲避监控的软件可能不会被看见, + 但它至少会留下一个缺口——一个停掉的扩展、一段没有数据的时间——而覆盖范围界面 + 就是为了把它显示出来。

+ +

捕获会漏掉什么

+
    +
  • 捕获开始之前的流量。没有事后补录。在过滤器之前就已经建立的连接,从来没有交给过它。
  • +
  • 豁免于内容过滤器的系统服务。macOS 并不会把一切都给内容过滤器看;它自己的一部分流量永远到不了我们这里。
  • +
  • 位置被另一个内容过滤器占着。macOS 一次只运行一个。如果某个 VPN 或安全代理占着它,Flowlight 的过滤器 + 能安装、能连接,却永远不会被要求过滤任何东西——捕获界面会明说这一点,而不是给你一个空白界面。
  • +
  • 短连接,在采样器上。没有扩展时,Flowlight 每秒读取一次计数器:在两次读取之间开启又关闭的连接, + 永远不会被记录。
  • +
  • 不是 TCP 也不是 UDP 的通道。蓝牙和 USB 是以设备的形式可见的,不是以字节的形式。代理的本地 MCP 服务器 + 通过管道通信,那根本不是网络流量,任何地方都不会出现。
  • +
+ +

检查会漏掉什么

+

HTTPS 检查只读得到经由 Flowlight 本地代理转发的东西,而这件事是由程序在启动的那一刻决定的。忽略代理设置的应用、 + 在检查打开之前就启动的应用,或者固定自己证书的应用,都会原封不动地直接通过——这是刻意的,因为破坏一条固定了证书的连接 + 就等于弄坏那个应用。QUIC 同样不会交给代理。

+

所以,检查界面是空的,意思是“没有东西被转发到这里”,而不是“什么都没发生”。到底是哪一种,覆盖范围会按应用逐个说明。

+ +

阻止是什么,不是什么

+

一条拒绝连接的规则由网络扩展执行,就在连接的路径上,在连接建立之前。一条指名 URL 的规则则由检查用的代理服务器执行, + 它用应用能读到的状态来回答那个请求。这两处是 Flowlight 里唯一动手而不只是报告的部分——nettop 采样器什么都拒绝不了, + 所以在用采样器的 Mac 上,没有任何规则会被强制执行,而 Flowlight 会把这一点说出来,而不是摆一个什么都不做的开关。

+

它仍然不是防护。一个能运行 shell 的代理,可以手动做到那个被拒绝的工具本来要做的事。一次你能一键撤销的拒绝, + 也是代理下一次尝试就可能走过去的拒绝。本地流量、DNS、Apple 自家的服务以及 Flowlight 自己的连接永远不会被拒绝, + 因为一台被封住的 Mac 比一个被封住的代理更糟。而且 Flowlight 停止运行几秒之后,强制执行就会失效: + 没人能看见的拒绝比没有拒绝更糟。

+

检查与拒绝无法并存。经由 Flowlight 自己的代理服务器转发的流量,是以 Flowlight 的流量的身份离开这台 Mac 的, + 而 Flowlight 从不拒绝自己——所以一个你正在读它请求的应用,也就是一个规则不再拦得住它连接的应用。为了看得更多而打开检查, + 代价就是强制执行,而画面上此前并没有说这一点。

+ +

Flowlight 自己保存了什么

+

流量元数据,存在本地的 SQLite 数据库里,保留期限是公布的。打开 HTTPS 检查后,它还会保存请求和响应的正文三天—— + 这是它所保存的东西里最敏感的。凭据标头会按名称、也按其中的词来遮蔽,那是一种启发式判断,不是保证; + 一个把密钥放在没人认得的名字底下的标头,是可能被记录下来的。

+

流量数据库从不上传。不过确实有三样比较小的东西,会在你没有要求的情况下离开这台 Mac,它们都在隐私页面上 + 逐项列出:更新检查,它在启动时和每天一次向 GitHub 询问最新的发布;网络所有者查询,它就没有主机名的公网地址向 Team Cymru + 询问;以及,当 Flowlight 在读计数器而不是在跑它的扩展时,对那些它没看到名字的地址做的一次反向 DNS 查询。前两样都有关闭 + 开关。第三样没有,因为在采样器上,一条连接能有名字,大半就靠它——这次查询会走这台 Mac 本来就在用的解析器,而一旦扩展 + 接手、从流量本身给连接命名,它就停了。用托管模型提问,送出去的东西比它们任何一个都多得多,而它也是唯一在你配置之前 + 一直关着的。

+ +

更新

+

版本以 Developer ID 签名并经过公证。更新程序要求有公布的校验和,没有就拒绝下载;随后会在安装之前核对下载到的应用 + 是否由与运行中副本相同的团队签名。由别人签名的更新会被拒绝,即使它在其他方面都有效。

+ +

报告漏洞

+

请使用 GitHub 的私密漏洞报告,或者如果你不愿意用 + GitHub,可以发邮件到 security@xinbetween.com。 + SECURITY.md 写明了哪些属于范围之内,以及你可以期待什么。 + 普通的缺陷——崩溃、数字不对、画面有误导——请改提issue。

+
+
+
+ + + + + diff --git a/docs/zh-Hant/about/index.html b/docs/zh-Hant/about/index.html index 01697c7..31daeb7 100644 --- a/docs/zh-Hant/about/index.html +++ b/docs/zh-Hant/about/index.html @@ -32,10 +32,8 @@ - - - - + + @@ -47,6 +45,7 @@ AI 代理 說明文件 隱私 + 威脅模型 版本 關於 GitHub diff --git a/docs/zh-Hant/docs/index.html b/docs/zh-Hant/docs/index.html index 3c331af..aae86cd 100644 --- a/docs/zh-Hant/docs/index.html +++ b/docs/zh-Hant/docs/index.html @@ -32,11 +32,9 @@ - - - - - + + + @@ -47,6 +45,7 @@ AI 代理 說明文件 隱私 + 威脅模型 版本 關於 GitHub @@ -90,7 +89,7 @@

使用 Flowlight

設定與資料 @@ -149,12 +148,20 @@

各個畫面

畫面快速鍵它回答什麼 即時⌘1現在有什麼在傳:最近幾秒各 App 的速率,以及最忙的目標。 - AI 代理⌘2哪些代理在活動、它們用哪些 AI 供應商,以及它們還連過什麼。 + AI 代理⌘2哪些代理在活動、它們用哪些 AI 供應商,以及它們還連過什麼。 報告⌘3流量去了哪裡,從秒到年。依 App、目標或 IP 分組;切換到「圖表」或「值得一看」;匯出 CSV。 - 警示⌘4所有看起來不尋常的事,附上 App、目標,以及觸發規則的那個數字。 - 檢查⌘5選用:你轉送經過 Flowlight 的代理,其解密後的請求,以及背後的工具呼叫。搜尋也會查進請求與回應的內文。 - 擷取⌘6目前由哪個引擎記錄、延伸功能的狀態、主機名稱學習,以及資料庫存放的位置。 + 警示⌘4所有看起來不尋常的事,附上 App、目標,以及觸發規則的那個數字。 + 規則⌘5你設過的每一條允許清單和拒絕,各自管到哪裡,以及實際攔下了什麼。 + 提問⌘6用平常的話問你自己的流量,由本機模型或託管模型從記錄下來的歷史裡作答。 + 檢查⌘7選用:你轉送經過 Flowlight 的代理,其解密後的請求,以及背後的工具呼叫。搜尋也會查進請求與回應的內文。 + 裝置⌘8在你開啟之前都是關的:藍牙、USB 與外接儲存裝置,一台 Mac 用它們跟用網路一樣多。 + 涵蓋範圍⌘9Flowlight 說不清的部分 — 依 App 逐一列出,它的流量有沒有被看到、被命名、被讀懂。 + 擷取⌘0目前由哪個引擎記錄、延伸功能的狀態、主機名稱學習,以及資料庫存放的位置。 +

快速鍵就是側邊欄的順序,所以 ⌘0 是第十項,而不是被跳過的位置。

+
即時畫面:一列 App,各自帶著目前的傳送與接收速率,以及最忙的目標。
+
即時,Flowlight 開啟時的那個畫面。

在「報告」中,把指標移到長條上可以看出是哪些 App 造成的,點一下可以放大,任一列雙按則把報告縮小到那一列。

AI 代理規則

@@ -287,10 +294,14 @@

HTTPS 檢查(選用)

並在那裡啟動它們。在「進階」中,你可以只解密 AI 代理而不是每個 App、編輯永不解密清單、拷貝 單一 shell 的設定,或移除憑證與所有記錄下來的內容。

Flowlight 會把內建清單中的 Apple 服務和密碼管理程式排除在解密之外(清單可在「設定…」中編輯)。使用憑證綁定的 App 可能會拒絕 - Flowlight 的憑證;Flowlight 會偵測到並讓它們以加密狀態直接通過。API 金鑰、cookie 和其他憑證類標頭一律不會 - 儲存,記錄的請求保留 3 天,而「移除憑證與記錄的資料」會刪除憑證、它的信任 + Flowlight 的憑證;Flowlight 會偵測到並讓它們以加密狀態直接通過。API 金鑰、cookie 和其他憑證類標頭在任何內容儲存之前 + 就會被換成它們的長度 — 依名稱、也依名稱中的字詞比對,這能抓到某家廠商自己的寫法,但不能保證一個都不漏 — 記錄的請求保留 3 天,而「移除憑證與記錄的資料」會刪除憑證、它的信任 設定,以及所有記錄下來的內容。檢查功能只支援 HTTP/1.1(Flowlight 會向雙方要求),而且在示範模式中無法使用。

+

從一列直接過來。在即時、報告或 AI 代理裡按右鍵點一個 App 或一個目的地,選「檢查 … 的流量」: + 檢查會開啟,而那個名稱已經填在搜尋欄裡。用搜尋欄而不是一個隱藏的過濾條件是刻意的 — 你可以把它放寬、縮小或清空,不必回到 + 你出發的地方。只有經過代理伺服器的流量才可能出現,所以一列你知道很忙的記錄,在這裡仍可能什麼都看不到。

+

模擬回應

想知道 API 失敗、卡住或回傳奇怪內容時代理會怎麼應對,就自己來回應那個端點。在 「檢查」› 「模擬回應」中,一條規則會指名主機、路徑和方法,並給出要回覆的狀態、標頭、內文,以及選填的 @@ -419,6 +430,20 @@

擷取:引擎與來源

把你切回取樣器:取樣器不需要過濾器,也能和它們並存。 想知道它是怎麼做出來的,請看開發者指南。

+

涵蓋範圍:Flowlight 說不清的部分

+

其他每個畫面回答的都是發生了什麼。涵蓋範圍回答的是有什麼本來不會被告知,而這決定了其他畫面值多少。 + 它對每個 App 問三個問題,因為這三件事是各自獨立地失效的。

+

有沒有被看到?網路延伸功能在每一條流量建立時就看到它。nettop 取樣器每秒讀一次計數器,所以在兩次讀取之間 + 開啟又關閉的連線 — 一次 DNS 查詢、一次很快的 API 呼叫、一個執行 curl 後就結束的指令檔 — 會整條漏掉。那是任何 + 百分比都表達不了的缺口,所以這裡用文字寫出來,而不是給它打分數。

+

有沒有名稱?這個 App 的位元組中,送到有主機名稱(而不是只有一個位址)的目的地的比例。是位元組, + 不是連線數:一條沒有名稱卻送走 1 GB 的連線,比一百條各送 1 KB 的連線是更大的洞,而按連線數來數,排序恰好相反。

+

內容讀不讀得到?HTTPS 檢查有沒有解密這個 App 的任何一點流量。有四個答案,其中只有一個才是缺口:正在被讀; + 它從來沒有到達代理伺服器;它在「永不解密」清單中,那是你自己做的選擇;或者檢查是關閉的,那是一項設定,而不是某個 App 上的失敗。

+

任何引擎都完全看不到的東西列在畫面上,而不是丟給這個頁面:擷取開始之前的流量、從來不會交給內容過濾器的 + 系統服務、使用憑證綁定的 App、從來不會交給代理伺服器的 QUIC,以及某個代理透過管道與它通訊的本機 MCP 伺服器。這些在 + Flowlight 的任何地方都不會出現,所以也不在這些數字裡 — 一個只數自己看得到的東西的涵蓋率,會是一種安慰,而不是一個事實。

+

裝置:藍牙、USB 與外接儲存裝置

一台 Mac 的收發不只有 TCP 和 UDP。「裝置」畫面負責其餘的部分,而且要等你開啟才會 作用 — 不是因為它需要 Flowlight 還沒有的權限,而是因為要不要監看你 Mac 的更多部分, @@ -546,8 +571,9 @@

常見問答

它會顯示安裝了哪些延伸功能、macOS 是否真的啟動了 Flowlight 的過濾器,以及最近一次記錄是多久以前。 把結果貼到問題回報裡。
Flowlight 會把關於我的任何東西送到別處嗎?
-
不會。沒有帳號、沒有遙測、也沒有分析。它唯一會發出的請求是每天的更新檢查、選用的網路擁有者 - 查詢,以及反向 DNS — 每一項都列在隱私頁面上,每一項都有關閉開關。
+
沒有帳號、沒有遙測、也沒有分析,而且你的流量資料庫從不上傳。確實有三個請求會離開這台 Mac,它們都列在隱私頁面上: + 每天的更新檢查和選用的網路擁有者查詢,這兩個都有關閉開關;以及 Flowlight 在取樣器上執行時的反向 DNS,它沒有開關 — + 少了它,取樣器就沒辦法為大多數連線命名。
它會讓我的 Mac 變慢或耗電嗎?
視窗關著時,Flowlight 幾乎什麼都不做:只維持選單列上的速率,並每秒寫入一列資料。網路延伸功能 比備用的取樣器更省,後者每秒都會啟動一個短命的 nettop 程序。
diff --git a/docs/zh-Hant/index.html b/docs/zh-Hant/index.html index 4bf0e9f..974ad33 100644 --- a/docs/zh-Hant/index.html +++ b/docs/zh-Hant/index.html @@ -32,10 +32,8 @@ - - - - + + @@ -47,6 +45,7 @@ AI 代理 說明文件 隱私 + 威脅模型 版本 關於 GitHub @@ -106,7 +105,7 @@

看見每個 App 的網路活動。
-
Flowlight 的「AI 代理」畫面。Claude Code、Cursor、Codex 和一個 Python 指令碼列在其中,顯示各自的 AI 供應商、傳往其他地方的流量,以及 SMTP、SSH、FTP、大量上傳和裸 IP 的風險標記。

「AI 代理」畫面:每個代理的模型供應商,以及它連線過的其他所有目標。圖中為示範資料。

@@ -217,7 +216,8 @@

看住 AI 代理怎麼用網路

規則,要生效多久由你說

指名一個 App、一個代理、一個目標或單一 URL,然後把它封鎖 — 在你發現它的那一列上按右鍵就行。 可以永久、到某個時間為止、直到 Flowlight 結束,或只在指定的時段內;另有一個暫停開關,而且每次拒絕都留著 - 一條退路。最明確的規則優先,兩者相當時以封鎖為準。

+ 一條退路。最明確的規則優先,兩者相當時以封鎖為準。 + 它是對你本來就信任的軟體的管控,不是一道擋住你不信任的軟體的屏障 — 見威脅模型。

Cursor ⇥ raw.githubusercontent.com · 已拒絕 4 次 · 平日 18:00–09:00

@@ -370,16 +370,16 @@

把支援的工具呼叫和網路請求對起來

單位。從受檢查的「終端機」啟動代理,它和它的工具所產生的支援 HTTP 流量就會被解密,連同模型要求的 工具呼叫和回傳的結果。

-
Flowlight 的「檢查」畫面:一份解密後的 Claude Code 請求列表及其工具呼叫,以及 curl 上傳到 paste.example 的詳細內容 — 那次上傳由執行它的 Bash 工具呼叫發出,請求內文中還有上傳的筆記
我的筆記去哪了? curl 上傳到 paste.example,追溯到模型要求執行的 Bash 指令,連同它 送出的內文。
-
Claude Code 的「工具」標籤頁:Bash、Read 和兩個 MCP 工具,附上說明以及模型各呼叫了幾次
代理提供給模型的每一個工具。 代理每一輪都會宣告自己的工具,所以 Flowlight 會全部列出來,包含模型 真正用過的,以及完全沒碰過的。
-
Codex 的「MCP 伺服器」標籤頁:一個標示為「透過供應商」的 sentry 伺服器,包含它的 URL、設為永不核准的核准設定、允許的工具,以及它提供的工具
連你在線路上看不到的也算。 當代理請供應商去連接某個 MCP 伺服器,那段流量 根本不會經過你的 Mac。但代理的請求會,所以那個伺服器、它的 URL、它的核准設定和它的工具仍然會出現。
@@ -398,9 +398,14 @@

把支援的工具呼叫和網路請求對起來

接下來

即將推出

-

Flowlight 今天已經能監看、解釋並拒絕。其餘的部分會按這個順序做下去。

+

Flowlight 今天已經能監看、解釋並拒絕 — 正如威脅模型所說, + 這是監控,不是防護。其餘的部分會按這個順序做下去。

+
給檢查一份預算 0.9.3

記錄下來的內文是 Flowlight 留著的東西裡最敏感的。用標頭的允許清單而不是拒絕清單,加上你自己的樣式、一個乾脆不保留任何標頭的選項、依 App 的上限,以及一個自己會過期的工作階段。

+
讓我看看這條規則會攔下什麼 0.9.4

把最近一天拿來對一條規則重播,在它拒絕任何東西之前,先列出它原本會拒絕的。資料早就在那裡了,只是它一直只用來解釋過去。

+
什麼會離開這台 Mac,在它離開之前 0.9.5

在第一列資料抵達收集器之前:目的地、是否加密、哪些欄位會走、其中有沒有標頭 — Flowlight 要求其他一切做到的那種揭露,用在自己身上。

+
代理除了連網還做了什麼 1.0

一個檔案的外流是一次讀取加一次傳送,而今天只看得見傳送。把代理的工具開了什麼、寫了什麼、啟動了什麼記錄下來,就能讓讀取了私密金鑰,然後連上了 paste.example變成一項發現,而不是兩個畫面。它不是資源監視器:CPU 和記憶體是活動監視器的事。這需要 Apple 的 EndpointSecurity 授權,也需要上面那份檢查預算先存在。

先 Linux,再 Windows

分析核心是可移植的 Swift,擷取部分不是。先出一個帶本機網頁介面的 Linux 常駐程式,基於 eBPF 而不是 macOS 的 API。

@@ -423,7 +428,7 @@

一個不用你盯著的監控工具

-
Flowlight 中 Claude Code 的詳細資料:工具與 MCP 伺服器及其呼叫次數和一次失敗、一份允許清單,以及「工具呼叫」標籤頁 — 其中列出一次失敗的 git push、一次 curl 上傳到 paste.example 及其回應與請求、npm install、一個 GitHub issue、一次說明文件搜尋和一次檔案讀取,每一項都附上結果
一個代理,每一次工具呼叫。 Claude Code 啟動的 git、curl 和 MCP 伺服器所產生的流量,都算成 Claude Code 的。 開啟 HTTPS 檢查後,工具呼叫標籤頁會顯示模型要求了什麼、回來了什麼,以及各個工具發出的請求: @@ -433,10 +438,10 @@

一個不用你盯著的監控工具

-
「報告」畫面:每小時接收與傳送的長條圖,以及 App、目標和協定的環圈圖
報告。 從秒到年的縮放、三種分組方式,即使有上百個 App,圖表依然看得清楚。
-
「警示」畫面:列出代理資料外洩、郵件、FTP、離開期間活動和流量尖峰等警示
警示。 每一則都指出 App、目標,以及觸發它的那個數字。
diff --git a/docs/zh-Hant/privacy/index.html b/docs/zh-Hant/privacy/index.html index 0ace112..38cc0cb 100644 --- a/docs/zh-Hant/privacy/index.html +++ b/docs/zh-Hant/privacy/index.html @@ -32,10 +32,8 @@ - - - - + + @@ -47,6 +45,7 @@ AI 代理 說明文件 隱私 + 威脅模型 版本 關於 GitHub @@ -101,7 +100,8 @@

HTTPS 檢查

預設為關閉。如果你開啟它,Flowlight 會在你的 Mac 上建立一個憑證授權單位(它的金鑰絕不會離開 ~/Library/Application Support/Flowlight/Inspection),並執行一個只接受來自這台 Mac 連線的代理伺服器。對於你 轉送經過它的 App,它會把請求與回應(包含最多 2 MB 的內文)記錄在本機資料庫中,保留 3 天。憑證類標頭 - (Authorization、cookie、API 金鑰)在任何內容儲存之前就會被換成它們的長度。Flowlight 會把內建清單中的 Apple 服務和密碼管理程式排除在解密之外。記錄下來的檢查資料不會被 Flowlight 上傳。關閉檢查功能會停止代理伺服器;「移除憑證與記錄的 + 在任何內容儲存之前就會被換成它們的長度 — 依名稱(Authorization、cookie、API 金鑰)、也依名稱中的字詞辨認,所以 + X-Access-Key 同樣會被抓到。那是一種推測規則,不是保證:一個把祕密放在沒人認得的名稱底下的標頭,會被記錄下來。Flowlight 會把內建清單中的 Apple 服務和密碼管理程式排除在解密之外。記錄下來的檢查資料不會被 Flowlight 上傳。關閉檢查功能會停止代理伺服器;「移除憑證與記錄的 資料」會刪除憑證、它的信任設定,以及每一筆記錄下來的請求。

這個 App 發出的網路請求

@@ -109,7 +109,7 @@

這個 App 發出的網路請求

請求送到哪裡內容是什麼什麼時候 更新檢查api.github.com一個查詢最新版本的標準 HTTPS 請求;GitHub 會看到你的 IP 位址和 Flowlight/<version> 這個 user agent啟動時以及每天一次,自 0.1.2 起。關閉開關在「設定」› 「一般」 更新下載github.com磁碟映像檔及其總和檢查碼檔案只有在你點「下載並開啟」時 - 反向 DNS你設定的 DNS 解析器在沒有看到主機名稱時,查詢某個 IP 位址登記的名稱在預設的擷取模式下,需要時進行 + 反向 DNS你設定的 DNS 解析器在沒有看到主機名稱時,查詢某個 IP 位址登記的名稱需要時進行,在取樣器擷取模式下,也就是網路延伸功能開始運作之前的預設模式。沒有關閉開關:少了它,取樣器就沒辦法為大多數連線命名。網路延伸功能會從流量本身為它們命名,因此不做這件事 網路擁有者查詢Team Cymru,透過 DNS沒有已知主機名稱的公開 IP 位址。私有和保留位址絕不會離開你的 Mac預設開啟。關閉開關在「擷取」› 「辨識網路擁有者」 用託管模型提問你選擇的供應商:Anthropic、OpenAI、Google Gemini 或相容的端點你的問題,以及模型所選用的 Flowlight 唯讀查詢回傳的結果。流量資料庫本身不會被上傳只有在你選擇託管供應商並送出問題時。「提問」畫面會顯示送出的請求 收集器匯出你設定的 OpenTelemetry 或 HTTP 端點「設定」› 「匯出」中列出的欄位,例如流量彙總資料和警示。驗證標頭儲存在鑰匙串中只有在你設定端點並啟用匯出之後 @@ -129,11 +129,14 @@

保留期限

關於本網站

本站是託管在 GitHub Pages 上、經由 Cloudflare 提供的靜態頁面。它不設定 cookie,也不執行任何分析。GitHub - 和 Cloudflare 會處理提供本站所需的請求,字型則從 Google Fonts 載入,它會在你造訪時收到你的 IP 位址。

+ 和 Cloudflare 會處理提供本站所需的請求。字型由本網域自己提供,所以顯示一個頁面不會向任何其他人送出任何東西 — + 這個頁面以前是從 Google 載入字型的,也就是說,那個說明 Flowlight 什麼都不往外送的頁面,為了顯示自己而向 Google 發了一個請求。

聯絡

-

有問題或隱私方面的疑慮?開一個 issue。若是敏感內容,請使用該儲存庫上 - GitHub 的私密漏洞回報功能。

+

有問題或隱私方面的疑慮?開一個 issue。若是安全問題,請使用 GitHub 的 + 私密漏洞回報,或者如果你不想用 GitHub,可以寄信到 + security@xinbetween.com — 可以期待什麼,請看 + SECURITY.md。

diff --git a/docs/zh-Hant/threat-model/index.html b/docs/zh-Hant/threat-model/index.html new file mode 100644 index 0000000..f0a5775 --- /dev/null +++ b/docs/zh-Hant/threat-model/index.html @@ -0,0 +1,268 @@ + + + + + +Flowlight 威脅模型 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

威脅模型

+

只做監控,不做防護

+

Flowlight 會告訴你,你 Mac 上的軟體正在送出什麼、送去哪裡。它不是用來對付已經掌控這台機器的攻擊者的, + 而這個差別重要到值得用一整頁來講,而不是塞進註腳裡。

+
+ +
+ + +
+

它是為了什麼

+

Flowlight 回答一個 Mac 不回答的問題:是哪個 App 送出去的,它去了哪裡?它是為了那些在明面上就行為不端的 + 軟體而做的 — 一個去連沒人要它連的地方的 AI 代理、一個上傳得比它該上傳的還多的工具、一個正在跟沒有名字的位址說話的程序。 + 這種行為在流量裡看得見,而 Flowlight 的工作就是讓它變得可讀,並在做不到的時候老實說出來。

+

它不是防毒軟體,不是 EDR 代理,也不是那種站在你和攻擊者之間的防火牆。在兩者重疊的地方 — Flowlight 可以拒絕連線 — + 那種拒絕是一種方便,用來管住你本來就信任的軟體,而不是一道擋住你不信任的軟體的屏障。

+ +

它防得住什麼

+
    +
  • 沒人注意到的資料外送。某個 App 或代理把東西送到一個你不會核准的地方,包含經由它自己執行的工具送出去。 + Flowlight 會把那條連線歸屬到發出它的程序,以及啟動那個程序的代理。
  • +
  • 行為上的悄悄改變。某個 App 突然連到新的目標、搬動的資料遠超過它自己的基線,或在你不在的時候還在工作。 + 每則警示都會指出是哪個數字觸發了它,所以你可以不同意它。
  • +
  • 超出你所允許範圍的代理。每個代理各有一份允許清單,還有拒絕清單之外連線的規則;拒絕會被記錄下來, + 一鍵就能改成允許。
  • +
  • 被動過手腳的更新。每個版本都會公布一組總和檢查碼;更新程式會拒絕它無法驗證的下載,也會拒絕安裝 + 簽章團隊與正在要求更新的那份副本不同的 App。
  • +
+ +

擁有 root 的軟體可以把它關掉

+

Flowlight 以你的身分執行,並使用一個由 macOS 代它啟動的系統延伸功能。任何以 root 執行的東西 — 或任何你核准過安裝程式的 + 東西 — 都可以卸載那個延伸功能、停掉這個 App,或刪掉它的資料庫。設計上沒有任何東西擋得住這件事,而 macOS 上的任何監控工具, + 都無法一邊擋住它,一邊還是一個你自己也能關掉的工具。

+

誠實的說法比較窄,而且依然有用:行為不端、但沒有主動躲避監控的軟體會被看見。主動躲避監控的軟體可能不會被看見, + 但它至少會留下一個缺口 — 一個停掉的延伸功能、一段沒有資料的時間 — 而「涵蓋範圍」 + 畫面就是為了把它顯示出來。

+ +

擷取會漏掉什麼

+
    +
  • 擷取開始之前的流量。沒有事後補齊。在過濾器之前就已經開啟的連線,從來沒有被交給它。
  • +
  • 不受內容過濾器管轄的系統服務。macOS 不會把所有東西都給內容過濾器看;它自己的一部分流量永遠到不了我們這裡。
  • +
  • 那個位置被另一個內容過濾器佔著。macOS 一次只執行一個。如果有 VPN 或安全代理佔著它,Flowlight 的過濾器 + 會安裝、也會連接,但永遠不會被要求過濾任何東西 — 「擷取」會直接說明,而不是給你一個空白畫面。
  • +
  • 短連線,在取樣器上。沒有延伸功能時,Flowlight 每秒讀取一次計數器:在兩次讀取之間開啟又關閉的連線, + 永遠不會被記錄。
  • +
  • 不是 TCP 也不是 UDP 的通道。藍牙和 USB 是以裝置的形式看得到,不是以位元組的形式。代理的本機 MCP + 伺服器透過管道溝通,那根本不是網路流量,任何地方都不會出現。
  • +
+ +

檢查會漏掉什麼

+

HTTPS 檢查只讀得到轉送經過 Flowlight 本機代理伺服器的東西,而這件事是由程式在啟動的那一刻決定的。忽略代理伺服器設定的 + App、在檢查開啟之前就啟動的 App,或使用憑證綁定的 App,都會原封不動地直接通過 — 這是刻意的,因為弄壞一條綁定憑證的連線, + 就等於弄壞那個 App。QUIC 同樣不會交給代理伺服器。

+

所以「檢查」畫面是空的,意思是「沒有東西被轉送到這裡」,而不是「什麼都沒發生」。到底是哪一種,「涵蓋範圍」會按 App + 逐個說明。

+ +

封鎖是什麼,不是什麼

+

一條拒絕連線的規則是由網路延伸功能執行的,就在連線的路徑上,在連線建立之前。一條指名 URL 的規則則由檢查用的代理伺服器 + 執行,它用 App 讀得到的狀態來回答那個請求。這兩處是 Flowlight 裡唯一動手、而不只是回報的部分 — nettop 取樣器什麼都拒絕不了, + 所以在用取樣器的 Mac 上,沒有任何規則會被強制執行,而 Flowlight 會把這一點說出來,而不是擺一個什麼都不做的開關。

+

但它依然不是防護。一個還能執行 shell 的代理,可以自己動手做那個被拒絕的工具原本要做的事。一次你能一鍵解除的拒絕, + 也是代理下一次嘗試就可能走過去的拒絕。本機流量、DNS、Apple 自己的服務,以及 Flowlight 自己的連線永遠不會被拒絕, + 因為一台被封死的 Mac 比一個被封住的代理更糟。而且 Flowlight 停止執行後幾秒,強制執行就會失效: + 沒人看得到的拒絕比不拒絕更糟。

+

檢查與拒絕無法並存。經由 Flowlight 自己的代理伺服器轉送的流量,是以 Flowlight 的流量的身分離開這台 Mac 的, + 而 Flowlight 從不拒絕自己 — 所以一個你正在讀它請求的 App,也就是一個規則再也攔不住它連線的 App。為了看得更多而開啟檢查, + 代價就是強制執行,而畫面上先前並沒有說這件事。

+ +

Flowlight 自己留著什麼

+

流量的後設資料,放在本機的 SQLite 資料庫裡,保留期限有公布。開啟 HTTPS 檢查後,它還會把請求與回應的內文留 3 天 — + 那是它留下來的東西裡最敏感的。憑證類標頭會依名稱、也依其中的字詞遮蔽,那是一種推測規則,不是保證; + 一個把祕密放在沒人認得的名稱底下的標頭,是可能被記錄下來的。

+

流量資料庫從不上傳。不過確實有三樣比較小的東西,會在你沒有要求的情況下離開這台 Mac,它們都在隱私頁面上 + 逐項列出:更新檢查,它在啟動時和每天一次向 GitHub 詢問最新的發布;網路擁有者查詢,它就沒有主機名稱的公開位址向 Team Cymru + 詢問;以及,當 Flowlight 在讀計數器而不是執行它的延伸功能時,對那些它沒看到名稱的位址所做的一次反向 DNS 查詢。前兩樣都有 + 關閉開關。第三樣沒有,因為在取樣器上,一條連線能有名稱,大半就靠它 — 這個查詢會走這台 Mac 本來就在用的解析器,而一旦 + 延伸功能接手、從流量本身為連線命名,它就停了。用託管模型「提問」送出去的東西,比它們任何一個都多得多,而它也是唯一在你 + 設定之前一直關著的。

+ +

更新

+

版本以 Developer ID 簽章並經過公證。更新程式要求有公布的總和檢查碼,沒有就拒絕下載;接著會在安裝之前確認下載到的 App + 是否由與執行中副本相同的團隊簽章。由別人簽章的更新會被拒絕,即使它在其他方面都有效。

+ +

回報漏洞

+

請使用 GitHub 的私密漏洞回報,或者如果你不想用 + GitHub,可以寄信到 security@xinbetween.com。 + SECURITY.md 寫明了哪些屬於範圍之內,以及你可以期待什麼。 + 一般的問題 — 當掉、數字不對、畫面有誤導 — 請改開issue。

+
+
+
+ + + + + diff --git a/scripts/build-site.sh b/scripts/build-site.sh index 66ae209..0944ad9 100755 --- a/scripts/build-site.sh +++ b/scripts/build-site.sh @@ -1,5 +1,6 @@ #!/bin/zsh -# Builds the website into docs/ (GitHub Pages). See scripts/build_site.py. +# Builds the website into docs/ (GitHub Pages), then checks it. See scripts/build_site.py and check_site.py. set -euo pipefail cd "$(dirname "$0")/.." python3 scripts/build_site.py +python3 scripts/check_site.py diff --git a/scripts/build_site.py b/scripts/build_site.py index 0ee7d34..cf4803a 100755 --- a/scripts/build_site.py +++ b/scripts/build_site.py @@ -47,9 +47,9 @@ def counts(): COUNTS = counts() YEAR = str(datetime.date.today().year) -FONTS = ('\n\n' - '') +# The fonts are in site.css and served from this domain, so a page needs no third-party stylesheet and makes +# no request to Google to render itself. See the @font-face block at the top of site/site.css. +FONTS = "" GLOBE = ('') @@ -115,8 +115,11 @@ def front_matter(text): def fill(text, ctx): - text = re.sub(r"\{\{current:(\w+)\}\}", lambda m: ' aria-current="page"' if m.group(1) == ctx["nav"] else "", text) - text = re.sub(r"\{\{t:([\w.]+)\}\}", lambda m: ctx["strings"][m.group(1)], text) + # Hyphens allowed in all three names, not just in {{link:}}. A nav called `threat-model` matched the link + # pattern and neither of these, so the header printed the placeholder itself — on all 51 pages, in every + # language, with the translated label sitting unreachable in the string table. + text = re.sub(r"\{\{current:([\w.-]+)\}\}", lambda m: ' aria-current="page"' if m.group(1) == ctx["nav"] else "", text) + text = re.sub(r"\{\{t:([\w.-]+)\}\}", lambda m: ctx["strings"][m.group(1)], text) # On its own line in the header, so a site in one language has no blank line where it would go. pick = ctx.get("langpicker", "") text = re.sub(r"\n[ \t]*\{\{langpicker\}\}", ("\n " + pick) if pick else "", text) @@ -124,7 +127,35 @@ def fill(text, ctx): for k, v in {"root": ctx["root"], "repo": REPO, "dmg": DMG, "version": VERSION, "year": YEAR, **COUNTS}.items(): text = text.replace("{{%s}}" % k, v) # Screenshots keep their names across updates; a content hash makes caches fetch the new image. - return re.sub(r'(assets/screenshots/[\w-]+\.png)"', lambda m: f'{m.group(1)}?v={asset_hash(m.group(1))}"', text) + text = re.sub(r'(assets/screenshots/[\w-]+\.png)"', lambda m: f'{m.group(1)}?v={asset_hash(m.group(1))}"', text) + return stamp_dimensions(text) + + +def png_size(path): + """Width and height from a PNG's IHDR, without a dependency.""" + head = pathlib.Path(path).read_bytes()[16:24] + return int.from_bytes(head[:4], "big"), int.from_bytes(head[4:], "big") + + +def stamp_dimensions(text): + """Set every screenshot's width and height from the file itself. + + `.frame img` is `width: 100%; height: auto`, so these attributes do one job: give the browser the aspect + ratio to reserve space with before the image arrives. Hand-written, they rot the first time anyone + re-captures a screen at a different size, and then every image on the page jumps as it loads — which is + what they were added to prevent. Screenshots are captured at 2x, so the attributes are half the real size. + """ + def one(match): + tag, name = match.group(0), match.group(1) + real = png_size(OUT / f"assets/screenshots/{name}") + if not real[0] or not real[1]: + return tag + for attr, value in (("width", real[0] // 2), ("height", real[1] // 2)): + tag = (re.sub(rf'\b{attr}="\d+"', f'{attr}="{value}"', tag) if f'{attr}="' in tag + else tag.replace("]*assets/screenshots/([\w-]+\.png)[^>]*>', one, text) def last_changed(path): diff --git a/scripts/check_site.py b/scripts/check_site.py new file mode 100644 index 0000000..08f809e --- /dev/null +++ b/scripts/check_site.py @@ -0,0 +1,219 @@ +#!/usr/bin/env python3 +"""Checks the generated site for the ways it has actually broken. + +Every rule here is a bug that shipped. The site is built from templates, translated by hand into nine +languages and regenerated on every release, so the failures are never syntax — they are a placeholder that +didn't render, a link to an anchor that exists in English only, a font that came back from a third party, a +roadmap still advertising what you can already download. None of that stops the build. + + python3 scripts/check_site.py # after scripts/build_site.py +""" +import re, sys, pathlib, collections + +ROOT = pathlib.Path(__file__).resolve().parent.parent +OUT = ROOT / "docs" +PAGES = sorted(OUT.rglob("index.html")) + [OUT / "404.html"] +# The nine translations, named by their string catalogues rather than guessed from directory names — "about" +# and "privacy" are pages, not languages. +LANGS = sorted(p.stem for p in (ROOT / "site/i18n").glob("*.json") if p.stem != "en") + +# Fetched by the browser to render the page. A is only that for some values of rel — `alternate` and +# `canonical` are addresses for a crawler, and every translated page carries ten of them. +FETCHED_REL = {"stylesheet", "preload", "prefetch", "preconnect", "dns-prefetch", "modulepreload", "icon"} +TAG_OPEN = re.compile(r"<(link|script|img)\b([^>]*)>", re.I) +ATTR = re.compile(r'(\w[\w-]*)="([^"]*)"') +PLACEHOLDER = re.compile(r"\{\{[\w.:-]+\}\}") +ANCHOR = re.compile(r'href="([^"#]*)#([\w-]+)"') +IDS = re.compile(r'\bid="([\w-]+)"') +TAG = re.compile(r'(\d+\.\d+(?:\.\d+)?)') +IMG = re.compile(r']*src="([^"]*assets/screenshots/[^"]+)"([^>]*)>') +WH = re.compile(r'\b(width|height)="(\d+)"') +HELP_ANCHOR = re.compile(r'case \.(\w+): return "([\w-]+)"') +SIDEBAR = re.compile(r"enum SidebarItem[^{]*\{\s*case ([\w, ]+)") +ROW = re.compile(r"(?:]*>)?([^<]+)(?:)?\u2318(.)") +H1 = re.compile(r"]") + + +def version_key(text): + return tuple(int(part) for part in text.split(".")) + + +def problems(): + found = [] + + # 1. A placeholder that didn't render. `{{t:nav.threat-model}}` printed itself on all 51 pages because the + # pattern for {{t:}} didn't allow hyphens, and nothing noticed — it is valid HTML. + for page in PAGES: + for hit in set(PLACEHOLDER.findall(page.read_text())): + found.append(f"{page.relative_to(ROOT)}: unrendered placeholder {hit}") + + # 2. A resource fetched from somewhere else. The privacy page explaining that Flowlight sends nothing + # anywhere loaded its fonts from Google, and the disclosure was the only thing that made it acceptable. + for page in PAGES: + for name, attrs in TAG_OPEN.findall(page.read_text()): + attr = {k.lower(): v for k, v in ATTR.findall(attrs)} + if name.lower() == "link": + if not set(attr.get("rel", "").lower().split()) & FETCHED_REL: + continue + url = attr.get("href", "") + else: + url = attr.get("src", "") + if url.startswith(("http://", "https://", "//")): + found.append(f"{page.relative_to(ROOT)}: <{name.lower()}> fetches {url} from a third party") + + # 3. An anchor that doesn't exist in the page it points at. The Coverage section was added to the English + # docs only, so every translated threat-model page linked to `#coverage` and landed at the top. + ids = {page: set(IDS.findall(page.read_text())) for page in PAGES} + for page in PAGES: + for href, anchor in ANCHOR.findall(page.read_text()): + target = page if not href else (OUT / href.lstrip("/") if href.startswith("/") else page.parent / href) + if target.is_dir(): + target = target / "index.html" + target = target.resolve() + if target not in ids: + continue # an external or missing page; rule 4 covers the page itself + if anchor not in ids[target]: + found.append(f"{page.relative_to(ROOT)}: #{anchor} does not exist in {target.relative_to(OUT)}") + + # 4. A link to a page that isn't there. + for page in PAGES: + for href in re.findall(r'href="([^"#?]+)"', page.read_text()): + if href.startswith(("http", "mailto:", "//")) or not href: + continue + target = OUT / href.lstrip("/") if href.startswith("/") else page.parent / href + target = target.resolve() + if target.is_dir(): + target = target / "index.html" + if not target.exists(): + found.append(f"{page.relative_to(ROOT)}: link to {href} goes nowhere") + + # 5. "What's coming" still advertising what has already shipped — a roadmap entry tagged at or below the + # newest version on the releases page. It reads as a promise until someone notices it is a memory. + releases = (ROOT / "site/pages/releases.html").read_text() + shipped = re.findall(r"

(\d+\.\d+(?:\.\d+)?)

", releases) + if shipped: + newest = max(shipped, key=version_key) + for page in PAGES: + text = page.read_text() + start = text.find('id="roadmap"') + if start < 0: + continue + for tag in set(TAG.findall(text[start:])): + if version_key(tag) <= version_key(newest): + found.append(f"{page.relative_to(ROOT)}: roadmap still lists {tag}, " + f"but {newest} has shipped") + + # 7. A section English has and a translation doesn't. This is how #coverage broke: the Coverage screen was + # documented in English, nine pages kept linking to an anchor that had never existed in their language, + # and each of them silently sent the reader to the top of the page. Rule 3 catches the dangling link + # only once something points at it; this catches the missing section itself. + for english in PAGES: + if OUT not in english.parents or english.parts[len(OUT.parts)] in LANGS: + continue # only compare against the English original + relative = english.relative_to(OUT) + en_ids = set(IDS.findall(english.read_text())) + for lang in LANGS: + translated = OUT / lang / relative + if not translated.exists(): + continue # not translated at all is a choice, not a defect + for missing in sorted(en_ids - set(IDS.findall(translated.read_text()))): + found.append(f"{translated.relative_to(ROOT)}: no #{missing} section, but " + f"{relative} has one — the English page gained content this one didn't") + + # 8. A roadmap that promises less in translation. The entries are versioned commitments, so a translated + # home page listing four of them where English lists five is telling a different story, not a shorter one. + home = OUT / "index.html" + if home.exists(): + def entries(text): + start = text.find('id="roadmap"') + return text.count("
", start, text.find("
", start)) if start >= 0 else None + expected = entries(home.read_text()) + for lang in LANGS: + translated = OUT / lang / "index.html" + if not translated.exists(): + continue + actual = entries(translated.read_text()) + if actual is not None and expected is not None and actual != expected: + found.append(f"{translated.relative_to(ROOT)}: roadmap lists {actual} entries, " + f"English lists {expected}") + + # 9. A screen the documentation never covers. Every sidebar item carries a `helpAnchor`, and the Help + # button on that screen opens the docs at it — so an anchor with no section sends the reader to the top + # of a long page, which is how Coverage shipped: a new screen, a Help button, and nothing to land on. + # Read from the app's own source, so adding a screen is what triggers the check. + nav = (ROOT / "Flowlight/App/AppNavigation.swift").read_text() + body = nav[nav.find("var helpAnchor"):nav.find("var englishTitle")] + docs_ids = set(IDS.findall((OUT / "docs/index.html").read_text())) + for screen, anchor in HELP_ANCHOR.findall(body): + if anchor not in docs_ids: + found.append(f"docs/docs/index.html: no #{anchor} section, but the {screen} screen's Help " + f"button opens it — a new screen the documentation never got") + + # 12. A shortcut the documentation gets wrong. The sidebar's order *is* the shortcut — ⌘1 to ⌘0 by + # position — so inserting a screen silently renumbers every screen after it. The table said Inspect was + # ⌘5 long after it had become ⌘7, and four screens had been added without ever reaching the table. + order = [c.strip() for c in SIDEBAR.search(nav).group(1).split(",") if c.strip()] + titles = dict(HELP_ANCHOR.findall(nav[nav.find("var englishTitle"):nav.find("var title")])) + docs_text = (OUT / "docs/index.html").read_text() + rows = {name.strip(): key for name, key in ROW.findall(docs_text)} + for index, screen in enumerate(order): + title, key = titles.get(screen), "0" if index == 9 else str(index + 1) + if title is None or index > 9: + continue # past ⌘0 there is no shortcut to document + if title not in rows: + found.append(f"docs/docs/index.html: the views table never lists {title} (\u2318{key})") + elif rows[title] != key: + found.append(f"docs/docs/index.html: the views table gives {title} \u2318{rows[title]}, " + f"but the sidebar puts it at \u2318{key}") + + # 10. A screenshot nothing shows, or a screenshot that isn't there. Both happen while rearranging a page: + # the file outlives the that referenced it, and nobody notices a megabyte being served for nothing. + shots = OUT / "assets/screenshots" + referenced = set() + for page in PAGES: + for src, _ in IMG.findall(page.read_text()): + name = src.rsplit("/", 1)[-1].split("?")[0] + referenced.add(name) + if not (shots / name).exists(): + found.append(f"{page.relative_to(ROOT)}: screenshot {name} does not exist") + for shot in sorted(shots.glob("*.png")): + if shot.name not in referenced: + found.append(f"{shot.relative_to(ROOT)}: no page shows this screenshot") + + # 11. A declared size that isn't the image's size. The width and height are there to reserve the space + # before the image loads; a re-capture at a different aspect ratio makes them a lie and the page jumps. + for page in PAGES: + for src, attrs in IMG.findall(page.read_text()): + shot = shots / src.rsplit("/", 1)[-1].split("?")[0] + if not shot.exists(): + continue + raw = shot.read_bytes()[16:24] + real = (int.from_bytes(raw[:4], "big"), int.from_bytes(raw[4:], "big")) + declared = {k: int(v) for k, v in WH.findall(attrs)} + if len(declared) == 2 and real[0] and abs(declared["width"] / declared["height"] - real[0] / real[1]) > 0.01: + found.append(f"{page.relative_to(ROOT)}: {shot.name} is declared " + f"{declared['width']}x{declared['height']} but is {real[0]}x{real[1]}") + + # 6. One

per page: zero is a page with no title for a reader or a crawler, two is a translation that + # duplicated a section while editing. + for page in PAGES: + count = len(H1.findall(page.read_text())) + if count != 1: + found.append(f"{page.relative_to(ROOT)}: {count}

elements, expected 1") + + return found + + +def main(): + if not PAGES or not (OUT / "index.html").exists(): + print("docs/ has no built pages — run scripts/build_site.py first", file=sys.stderr) + return 1 + found = problems() + for problem in sorted(found): + print(f"::error::{problem}" if "--ci" in sys.argv else problem) + print(f"\n{len(PAGES)} pages checked, {len(found)} problem(s)") + return 1 if found else 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/site/i18n/de.json b/site/i18n/de.json index dd4b701..ccf3d2b 100644 --- a/site/i18n/de.json +++ b/site/i18n/de.json @@ -8,6 +8,7 @@ "nav.agents": "KI-Agenten", "nav.docs": "Dokumentation", "nav.privacy": "Datenschutz", + "nav.threat-model": "Bedrohungsmodell", "nav.releases": "Versionen", "nav.about": "Über", "nav.github": "GitHub", diff --git a/site/i18n/en.json b/site/i18n/en.json index 511c325..cfd53e9 100644 --- a/site/i18n/en.json +++ b/site/i18n/en.json @@ -8,6 +8,7 @@ "nav.agents": "AI agents", "nav.docs": "Docs", "nav.privacy": "Privacy", + "nav.threat-model": "Threat model", "nav.releases": "Releases", "nav.about": "About", "nav.github": "GitHub", diff --git a/site/i18n/es.json b/site/i18n/es.json index bc18929..faece1e 100644 --- a/site/i18n/es.json +++ b/site/i18n/es.json @@ -8,6 +8,7 @@ "nav.agents": "Agentes de IA", "nav.docs": "Documentación", "nav.privacy": "Privacidad", + "nav.threat-model": "Modelo de amenazas", "nav.releases": "Versiones", "nav.about": "Acerca de", "nav.github": "GitHub", diff --git a/site/i18n/fr.json b/site/i18n/fr.json index c33b0d9..27b172b 100644 --- a/site/i18n/fr.json +++ b/site/i18n/fr.json @@ -8,6 +8,7 @@ "nav.agents": "Agents IA", "nav.docs": "Documentation", "nav.privacy": "Confidentialité", + "nav.threat-model": "Modèle de menaces", "nav.releases": "Versions", "nav.about": "À propos", "nav.github": "GitHub", diff --git a/site/i18n/it.json b/site/i18n/it.json index 6c40cbf..60f210b 100644 --- a/site/i18n/it.json +++ b/site/i18n/it.json @@ -8,6 +8,7 @@ "nav.agents": "Agenti IA", "nav.docs": "Documentazione", "nav.privacy": "Privacy", + "nav.threat-model": "Modello di minaccia", "nav.releases": "Versioni", "nav.about": "Informazioni", "nav.github": "GitHub", diff --git a/site/i18n/ja.json b/site/i18n/ja.json index 1db8218..2f202ef 100644 --- a/site/i18n/ja.json +++ b/site/i18n/ja.json @@ -8,6 +8,7 @@ "nav.agents": "AI エージェント", "nav.docs": "ドキュメント", "nav.privacy": "プライバシー", + "nav.threat-model": "脅威モデル", "nav.releases": "リリース", "nav.about": "概要", "nav.github": "GitHub", diff --git a/site/i18n/ko.json b/site/i18n/ko.json index 4feec6f..442b263 100644 --- a/site/i18n/ko.json +++ b/site/i18n/ko.json @@ -8,6 +8,7 @@ "nav.agents": "AI 에이전트", "nav.docs": "문서", "nav.privacy": "개인정보", + "nav.threat-model": "위협 모델", "nav.releases": "릴리스", "nav.about": "소개", "nav.github": "GitHub", diff --git a/site/i18n/pt-PT.json b/site/i18n/pt-PT.json index 400bf5c..e886795 100644 --- a/site/i18n/pt-PT.json +++ b/site/i18n/pt-PT.json @@ -8,6 +8,7 @@ "nav.agents": "Agentes de IA", "nav.docs": "Documentação", "nav.privacy": "Privacidade", + "nav.threat-model": "Modelo de ameaças", "nav.releases": "Versões", "nav.about": "Acerca", "nav.github": "GitHub", diff --git a/site/i18n/zh-Hans.json b/site/i18n/zh-Hans.json index bfdedec..4c3bc58 100644 --- a/site/i18n/zh-Hans.json +++ b/site/i18n/zh-Hans.json @@ -8,6 +8,7 @@ "nav.agents": "AI 代理", "nav.docs": "文档", "nav.privacy": "隐私", + "nav.threat-model": "威胁模型", "nav.releases": "版本", "nav.about": "关于", "nav.github": "GitHub", diff --git a/site/i18n/zh-Hant.json b/site/i18n/zh-Hant.json index 37081cc..9fe1072 100644 --- a/site/i18n/zh-Hant.json +++ b/site/i18n/zh-Hant.json @@ -8,6 +8,7 @@ "nav.agents": "AI 代理", "nav.docs": "說明文件", "nav.privacy": "隱私", + "nav.threat-model": "威脅模型", "nav.releases": "版本", "nav.about": "關於", "nav.github": "GitHub", diff --git a/site/pages/de/docs.html b/site/pages/de/docs.html index 11f9e81..f85f1ed 100644 --- a/site/pages/de/docs.html +++ b/site/pages/de/docs.html @@ -35,7 +35,7 @@

Flowlight benutzen

Einstellungen und Daten @@ -95,12 +95,20 @@

Die Ansichten AnsichtKurzbefehlWas sie beantwortet Live⌘1Was sich gerade bewegt: Raten pro App über die letzten Sekunden und das meistgenutzte Ziel. - KI-Agenten⌘2Welche Agenten aktiv sind, welche KI-Anbieter sie nutzen und mit wem sie sonst gesprochen haben. + KI-Agenten⌘2Welche Agenten aktiv sind, welche KI-Anbieter sie nutzen und mit wem sie sonst gesprochen haben. Berichte⌘3Wohin der Datenverkehr ging, von der Sekunde bis zum Jahr. Gruppiert nach App, Ziel oder IP; umschaltbar auf Diagramme oder Genauer hinsehen; CSV-Export. - Warnungen⌘4Alles, was ungewöhnlich aussah, mit App, Ziel und dem Wert, der die Regel ausgelöst hat. - Inspizieren⌘5Optional: entschlüsselte Anfragen der Agenten, die du über Flowlight leitest, und die Tool-Aufrufe dahinter. Die Suche reicht in Anfrage- und Antwort-Bodys hinein. - Erfassung⌘6Welche Engine aufzeichnet, der Zustand der Erweiterung, das Lernen von Hostnamen und wo die Datenbank liegt. + Warnungen⌘4Alles, was ungewöhnlich aussah, mit App, Ziel und dem Wert, der die Regel ausgelöst hat. + Regeln⌘5Jede Erlaubnisliste und jede Verweigerung, die du gesetzt hast, was jede davon abdeckt und was sie tatsächlich gestoppt hat. + Fragen⌘6Fragen zu deinem eigenen Datenverkehr in normaler Sprache, beantwortet aus der aufgezeichneten Historie von einem lokalen oder einem gehosteten Modell. + Inspizieren⌘7Optional: entschlüsselte Anfragen der Agenten, die du über Flowlight leitest, und die Tool-Aufrufe dahinter. Die Suche reicht in Anfrage- und Antwort-Bodys hinein. + Geräte⌘8Aus, bis du es einschaltest: Bluetooth, USB und externe Speicher, die ein Mac genauso nutzt wie das Netzwerk. + Abdeckung⌘9Was Flowlight nicht belegen kann – pro App, ob sein Datenverkehr gesehen, benannt und lesbar war. + Erfassung⌘0Welche Engine aufzeichnet, der Zustand der Erweiterung, das Lernen von Hostnamen und wo die Datenbank liegt. +

Die Kurzbefehle sind die Reihenfolge der Seitenleiste, deshalb ist ⌘0 das zehnte Element und keine übersprungene Position.

+
Der Bildschirm Live: eine Liste von Anwendungen mit ihren aktuellen Sende- und Empfangsraten und ihrem meistgenutzten Ziel.
+
Live, der Bildschirm, mit dem Flowlight startet.

Fahre in Berichte über einen Balken, um zu sehen, welche Apps ihn getrieben haben, klicke ihn an, um hineinzuzoomen, und doppelklicke eine Zeile, um den Bericht darauf einzugrenzen.

Regeln für KI-Agenten

@@ -235,10 +243,17 @@

HTTPS-Inspektion (optional)

und starte sie dort. Unter Erweitert kannst du nur KI-Agenten statt aller Apps entschlüsseln, die Liste der nie entschlüsselten Ziele bearbeiten, die Shell-Einrichtung für eine Shell kopieren oder das Zertifikat und alles Aufgezeichnete entfernen.

Flowlight nimmt seine eingebaute Liste von Apple-Diensten und Passwortmanagern von der Entschlüsselung aus (bearbeitbar in der Einrichtung). Apps, die ihre Zertifikate anpinnen, können das - Flowlight-Zertifikat ablehnen; Flowlight merkt das und lässt sie verschlüsselt durch. API-Schlüssel, Cookies und andere Header mit Zugangsdaten werden nie - gespeichert, aufgezeichnete Anfragen werden 3 Tage aufbewahrt, und Zertifikat & aufgezeichnete Daten entfernen löscht das Zertifikat, seine + Flowlight-Zertifikat ablehnen; Flowlight merkt das und lässt sie verschlüsselt durch. API-Schlüssel, Cookies und andere Header mit Zugangsdaten werden vor dem Speichern + durch ihre Länge ersetzt – erkannt nach Name und nach den Wörtern im Namen, was die eigene Schreibweise eines Anbieters mitfängt, aber + nicht versprechen kann, jede zu fangen –, aufgezeichnete Anfragen werden 3 Tage aufbewahrt, und Zertifikat & aufgezeichnete Daten entfernen löscht das Zertifikat, seine Vertrauenseinstellung und alles Aufgezeichnete. Die Inspektion läuft nur über HTTP/1.1 (Flowlight verlangt es von beiden Seiten) und ist im Demomodus nicht verfügbar.

+

Wie du von einer Zeile aus hierherkommst. Klicke in Live, Berichten oder KI-Agenten mit der rechten Maustaste auf eine App + oder ein Ziel und wähle Datenverkehr von … inspizieren: Inspizieren öffnet sich, und der Name steht schon im Suchfeld. Dass + es das Suchfeld ist und kein verborgener Filter, ist Absicht – du kannst die Suche erweitern, einengen oder löschen, ohne dorthin + zurückzugehen, wo du angefangen hast. Erscheinen kann nur Datenverkehr, der über den Proxy gelaufen ist; eine Zeile, von der du weißt, dass + sie viel bewegt, kann hier also trotzdem nichts zeigen.

+

Mock-Antworten

Um zu sehen, wie ein Agent damit umgeht, dass eine API scheitert, hängt oder etwas Seltsames liefert, antworte diesem Endpunkt selbst. Unter Inspizieren › Mock-Antworten nennt eine Regel Host, Pfad und Methode und gibt Status, Header, Body und eine @@ -368,6 +383,24 @@

Erfassung: Engines und Quellen

keinen Filter braucht und neben ihnen funktioniert. Wie es gebaut ist, steht im Entwicklerhandbuch.

+

Abdeckung: was Flowlight nicht belegen kann

+

Jeder andere Bildschirm beantwortet, was passiert ist. Abdeckung beantwortet, was dir nicht gesagt worden wäre – und davon + hängt ab, wie viel die anderen Bildschirme wert sind. Sie stellt pro App drei Fragen, weil die drei unabhängig voneinander scheitern.

+

Wurde es gesehen? Die Netzwerkerweiterung sieht jeden Flow beim Öffnen. Der nettop-Sampler liest Zähler einmal pro Sekunde, + eine Verbindung, die sich zwischen zwei Messungen öffnet und wieder schließt – eine DNS-Abfrage, ein kurzer API-Aufruf, ein Skript, das + curl ausführt und sich beendet –, fehlt also ganz. Das ist eine Lücke, die kein Prozentwert ausdrücken kann, und darum steht sie + in Worten da statt als Wert.

+

Wurde es benannt? Der Anteil der Bytes dieser App, die an ein Ziel mit Hostnamen gingen und nicht an eine bloße + Adresse. Bytes, nicht Verbindungen: Eine unbenannte Verbindung, die ein Gigabyte trägt, ist ein größeres Loch als hundert, die je ein + Kilobyte tragen, und Verbindungen zu zählen ordnet sie genau umgekehrt.

+

War es lesbar? Ob die HTTPS-Inspektion etwas vom Datenverkehr dieser App entschlüsselt hat. Vier Antworten, und nur eine ist + eine Lücke: Er wird gelesen; er hat den Proxy nie erreicht; die App steht auf der Liste „Nie entschlüsselt“, was deine eigene Entscheidung + ist; oder die Inspektion ist aus, was eine Einstellung ist und kein Versagen bei einer einzelnen App.

+

Was keine Engine überhaupt sieht, steht auf dem Bildschirm selbst und wird nicht dieser Seite überlassen: Datenverkehr von + vor dem Start der Erfassung, Systemdienste, die Inhaltsfiltern nie gezeigt werden, Apps, die ihre Zertifikate pinnen, QUIC, das dem Proxy nie + angeboten wird, und der lokale MCP-Server eines Agenten, der über eine Pipe mit ihm spricht. Nichts davon erscheint irgendwo in Flowlight, + also fehlt es auch in diesen Zahlen – eine Abdeckungszahl, die nur zählte, was sie sehen kann, wäre eine Beruhigung und keine Tatsache.

+

Geräte: Bluetooth, USB und externe Speicher

Ein Mac sendet und empfängt über mehr als TCP und UDP. Der Bildschirm Geräte deckt den Rest ab, und er ist aus, bis du ihn einschaltest – nicht weil es eine Berechtigung bräuchte, die Flowlight nicht schon hat, sondern weil mehr von deinem @@ -495,8 +528,9 @@

Fragen & Antworten

Es zeigt, welche Erweiterungen installiert sind, ob macOS Flowlights Filter wirklich gestartet hat und wie kürzlich überhaupt etwas aufgezeichnet wurde. Füge es in ein Issue ein.
Sendet Flowlight irgendetwas über mich irgendwohin?
-
Nein. Es gibt kein Konto, keine Telemetrie und keine Analyse. Die einzigen Anfragen, die es stellt, sind die tägliche Update-Prüfung, optionale Abfragen - zum Netzinhaber und Reverse-DNS – jede aufgelistet und jede abschaltbar, auf der Datenschutzseite.
+
Kein Konto, keine Telemetrie, keine Analyse, und deine Datenbank mit dem Datenverkehr wird nie hochgeladen. Drei Anfragen verlassen den Mac, alle auf der + Datenschutzseite aufgelistet: die tägliche Update-Prüfung und die optionale Abfrage zum Netzinhaber, beide abschaltbar, und, + solange Flowlight auf dem Sampler läuft, Reverse-DNS, für das es keinen Schalter gibt – ohne es könnte der Sampler die meisten Verbindungen nicht benennen.
Macht es meinen Mac langsamer oder leert es den Akku?
Mit geschlossenem Fenster tut Flowlight fast nichts: Es hält die Raten in der Menüleiste und schreibt eine Zeile pro Sekunde. Die Netzwerkerweiterung kostet weniger als der Sampler als Rückfallebene, der jede Sekunde einen kurzlebigen nettop-Prozess startet.
diff --git a/site/pages/de/index.html b/site/pages/de/index.html index 5ad763c..575f0c2 100644 --- a/site/pages/de/index.html +++ b/site/pages/de/index.html @@ -162,7 +162,9 @@

Sieh, wie KI-Agenten das Netzwerk nutzen

Regeln, so lange du willst

Nenne eine App, einen Agenten, ein Ziel oder eine einzelne URL und blockiere sie – per Rechtsklick auf die Zeile, in der du es entdeckt hast. Für immer, bis zu einer Uhrzeit, bis Flowlight beendet wird oder zwischen gewählten Stunden, mit einem Pausenschalter und einem Ausweg bei - jeder Verweigerung. Die genaueste Regel gewinnt, und bei Gleichstand gewinnt die Sperre.

+ jeder Verweigerung. Die genaueste Regel gewinnt, und bei Gleichstand gewinnt die Sperre. + Es ist Kontrolle über Software, der du schon vertraust, kein Riegel gegen + Software, der du nicht vertraust – siehe das Bedrohungsmodell.

Cursor ⇥ raw.githubusercontent.com · 4-mal verweigert · wochentags 18:00–09:00

@@ -344,9 +346,14 @@

Unterstützte Tool-Aufrufe mit Netzwerkanfragen verknüpfen

Als Nächstes

Was kommt

-

Flowlight beobachtet, erklärt und verweigert heute schon. In dieser Reihenfolge entsteht der Rest.

+

Flowlight beobachtet, erklärt und verweigert heute schon – beobachten statt verhindern, wie das + Bedrohungsmodell darlegt. In dieser Reihenfolge entsteht der Rest.

+
Ein Budget für die Inspektion 0.9.3

Aufgezeichnete Bodys sind das Sensibelste, was Flowlight aufbewahrt. Eine Erlaubnisliste für Header statt einer Sperrliste, eigene Muster, die Möglichkeit, gar keine Header zu behalten, Obergrenzen pro App und eine Sitzung, die von selbst abläuft.

+
Zeig mir, was diese Regel getan hätte 0.9.4

Spiele den letzten Tag gegen eine Regel durch und lass auflisten, was sie verweigert hätte, bevor sie überhaupt etwas verweigert. Die Daten sind schon da; sie haben bisher immer nur die Vergangenheit erklärt.

+
Was den Mac verlässt, bevor es ihn verlässt 0.9.5

Bevor die erste Zeile einen Collector erreicht: das Ziel, ob es verschlüsselt ist, welche Felder mitreisen und ob Header darunter sind – die Offenlegung, die Flowlight von allem anderen verlangt, auf sich selbst angewandt.

+
Was ein Agent außerhalb des Netzwerks getan hat 1.0

Eine Datei, die hinausgeht, ist erst ein Lesen und dann ein Senden, und sichtbar ist heute nur das Senden. Aufzuzeichnen, was die Tools eines Agenten geöffnet, geschrieben und gestartet haben, würde aus hat den privaten Schlüssel gelesen und dann mit paste.example gesprochen einen Befund machen statt zwei Bildschirme. Kein Ressourcenmonitor: CPU und Speicher sind die Aufgabe der Aktivitätsanzeige. Braucht Apples EndpointSecurity-Berechtigung, und das Inspektionsbudget von oben muss zuerst existieren.

Linux, dann Windows

Der Analysekern ist portables Swift, die Erfassung nicht. Zuerst kommt ein Linux-Daemon mit lokaler Web-Oberfläche, auf eBPF statt auf macOS-APIs.

diff --git a/site/pages/de/privacy.html b/site/pages/de/privacy.html index 9fab24c..e6489ae 100644 --- a/site/pages/de/privacy.html +++ b/site/pages/de/privacy.html @@ -46,7 +46,9 @@

HTTPS-Inspektion

Standardmäßig aus. Schaltest du sie ein, erzeugt Flowlight eine Zertifizierungsstelle auf deinem Mac (ihr Schlüssel verlässt ~/Library/Application Support/Flowlight/Inspection nie) und betreibt einen Proxy, der nur Verbindungen von diesem Mac annimmt. Für Apps, die du darüber leitest, zeichnet es Anfragen und Antworten auf, samt Bodys bis 2 MB, in der lokalen Datenbank und für 3 Tage. Header mit Zugangsdaten - (Authorization, Cookies, API-Schlüssel) werden vor dem Speichern durch ihre Länge ersetzt. Flowlight nimmt seine eingebaute Liste von Apple-Diensten und Passwortmanagern von der Entschlüsselung aus. Aufgezeichnete Inspektionsdaten werden von Flowlight nicht hochgeladen. Die Inspektion auszuschalten stoppt den Proxy; Zertifikat & aufgezeichnete + werden vor dem Speichern durch ihre Länge ersetzt – erkannt nach Name (Authorization, Cookies, API-Schlüssel) und nach den Wörtern im + Namen, sodass auch X-Access-Key erkannt wird. Das ist eine Heuristik und keine Garantie: Ein Header, der ein Geheimnis unter einem + Namen trägt, den nichts erkennt, würde aufgezeichnet. Flowlight nimmt seine eingebaute Liste von Apple-Diensten und Passwortmanagern von der Entschlüsselung aus. Aufgezeichnete Inspektionsdaten werden von Flowlight nicht hochgeladen. Die Inspektion auszuschalten stoppt den Proxy; Zertifikat & aufgezeichnete Daten entfernen löscht das Zertifikat, seine Vertrauenseinstellung und jede aufgezeichnete Anfrage.

Netzwerkanfragen, die die App stellt

@@ -54,7 +56,7 @@

Netzwerkanfragen, die die App stellt

AnfrageGesendet anWas sie enthältWann Update-Prüfungapi.github.comEine normale HTTPS-Anfrage nach der neuesten Version; GitHub sieht deine IP-Adresse und den User-Agent Flowlight/<version>Beim Start und täglich, ab 0.1.2. Abschalten in Einstellungen › Allgemein Update-Downloadgithub.comDas Image und seine PrüfsummendateiNur wenn du auf „Herunterladen & öffnen“ klickst - Reverse-DNSDer von dir eingerichtete DNS-ResolverEine Abfrage des registrierten Namens einer IP-Adresse, wenn kein Hostname gesehen wurdeNach Bedarf, im Standard-Erfassungsmodus + Reverse-DNSDer von dir eingerichtete DNS-ResolverEine Abfrage des registrierten Namens einer IP-Adresse, wenn kein Hostname gesehen wurdeNach Bedarf, im Erfassungsmodus des Samplers, der Standard ist, bis die Netzwerkerweiterung läuft. Kein Schalter zum Abschalten: ohne sie kann der Sampler die meisten Verbindungen nicht benennen. Die Netzwerkerweiterung benennt sie aus dem Datenverkehr selbst und macht diese Abfrage nicht Abfrage des NetzinhabersTeam Cymru, über DNSÖffentliche IP-Adressen ohne bekannten Hostnamen. Private und reservierte Adressen verlassen deinen Mac nieStandardmäßig ein. Abschalten in Erfassung › Netzinhaber bestimmen Fragen mit einem gehosteten ModellDer Anbieter, den du wählst: Anthropic, OpenAI, Google Gemini oder ein kompatibler EndpunktDeine Frage und die Ergebnisse der nur lesenden Flowlight-Abfragen, die das Modell ausgewählt hat. Die Verkehrsdatenbank selbst wird nicht hochgeladenNur wenn du einen gehosteten Anbieter wählst und eine Frage abschickst. Der Bildschirm Fragen zeigt die gesendeten Anfragen Export an einen CollectorDer OpenTelemetry- oder HTTP-Endpunkt, den du einrichtestDie Felder, die in Einstellungen › Export stehen, etwa Verkehrs-Rollups und Warnungen. Authentifizierungs-Header liegen im SchlüsselbundNur nachdem du einen Endpunkt eingerichtet und den Export aktiviert hast @@ -74,11 +76,15 @@

Aufbewahrung

Diese Website

Diese Seite ist eine statische Seite, gehostet auf GitHub Pages und ausgeliefert über Cloudflare. Sie setzt keine Cookies und führt keine Analyse aus. GitHub - und Cloudflare verarbeiten Anfragen, um sie auszuliefern, und die Schriften kommen von Google Fonts, das beim Besuch deine IP-Adresse erhält.

+ und Cloudflare verarbeiten Anfragen, um sie auszuliefern. Die Schriften kommen von dieser Domain, das Rendern einer Seite sendet also nichts an + irgendwen sonst – früher lud diese Seite sie von Google, was bedeutete, dass die Seite, die erklärt, dass Flowlight nichts irgendwohin sendet, + für ihre eigene Darstellung eine Anfrage an Google stellte.

Kontakt

-

Fragen oder ein Anliegen zum Datenschutz? Öffne ein Issue. Für alles Sensible nutze GitHubs - private Schwachstellenmeldung im Repository.

+

Fragen oder ein Anliegen zum Datenschutz? Öffne ein Issue. Nutze für ein Sicherheitsproblem GitHubs + private Schwachstellenmeldung oder schreib an + security@xinbetween.com, wenn du GitHub lieber nicht nutzt – was dich erwartet, steht in + SECURITY.md.

diff --git a/site/pages/de/threat-model.html b/site/pages/de/threat-model.html new file mode 100644 index 0000000..a6459d2 --- /dev/null +++ b/site/pages/de/threat-model.html @@ -0,0 +1,131 @@ + +
+
+

Bedrohungsmodell

+

Beobachten, nicht verhindern

+

Flowlight sagt dir, was Software auf deinem Mac sendet und wohin. Es ist keine Verteidigung gegen einen Angreifer, der + die Maschine schon kontrolliert, und dieser Unterschied ist wichtig genug für eine eigene Seite statt für eine Fußnote.

+
+ +
+ + +
+

Wofür es da ist

+

Flowlight beantwortet eine Frage, die der Mac nicht beantwortet: Welche App hat das gesendet, und wohin ging es? Es ist + für Software gebaut, die sich offen schlecht verhält – ein KI-Agent, der etwas kontaktiert, worum ihn niemand gebeten hat, ein Tool, das mehr + hochlädt als es sollte, ein Prozess, der mit einer Adresse ohne Namen spricht. Dieses Verhalten ist im Datenverkehr sichtbar, und Flowlights + Aufgabe ist, es lesbar zu machen – und ehrlich zu sagen, wenn es das nicht kann.

+

Es ist kein Virenschutz, kein EDR-Agent und keine Firewall in dem Sinne, dass etwas zwischen dir und einem Angreifer stünde. + Wo sich beides überschneidet – Flowlight kann Verbindungen verweigern –, ist die Verweigerung eine Bequemlichkeit, um Software zu steuern, + der du schon vertraust, kein Riegel gegen Software, der du nicht vertraust.

+ +

Wogegen es schützt

+
    +
  • Unbemerkter Abfluss. Eine App oder ein Agent sendet irgendwohin, wo du es nicht erlaubt hättest – auch über ein + Tool, das er selbst ausgeführt hat. Flowlight rechnet die Verbindung dem Prozess zu, der sie aufgebaut hat, und dem Agenten, der diesen + Prozess gestartet hat.
  • +
  • Stille Verhaltensänderungen. Eine App, die plötzlich neue Ziele kontaktiert, weit mehr bewegt als ihre + Basislinie oder arbeitet, während du weg bist. Jede Warnung nennt den Wert, der sie ausgelöst hat, damit du ihr widersprechen kannst.
  • +
  • Ein Agent, der über das Erlaubte hinausgeht. Eine Erlaubnisliste pro Agent und Regeln, die Verbindungen außerhalb davon + verweigern, mit der Verweigerung im Protokoll und einem Klick, um sie zu erlauben.
  • +
  • Ein manipuliertes Update. Zu jeder Version wird eine Prüfsumme veröffentlicht; die Updatefunktion verweigert einen + Download, den sie nicht prüfen kann, und verweigert die Installation einer App, die nicht vom selben Team signiert ist wie die Kopie, die + nach dem Update fragt.
  • +
+ +

Software mit Root-Rechten kann es abschalten

+

Flowlight läuft als du, mit einer Systemerweiterung, die macOS für es startet. Alles, was als Root läuft – oder alles, dessen + Installationsprogramm du zustimmst –, kann diese Erweiterung entladen, die App stoppen oder ihre Datenbank löschen. Nichts im Entwurf + verhindert das, und kein Überwachungswerkzeug auf macOS kann es verhindern und dabei ein Werkzeug bleiben, das du auch selbst abschalten kannst.

+

Die ehrliche Aussage ist schmaler und trotzdem nützlich: Software, die sich schlecht verhält, aber einer Überwachung nicht aktiv ausweicht, + wird gesehen. Software, die ihr aktiv ausweicht, vielleicht nicht – und sie lässt zumindest eine Lücke zurück: eine Erweiterung, die stehen + geblieben ist, ein Zeitraum ohne Daten. Dafür ist der Bildschirm Abdeckung da.

+ +

Was der Erfassung entgeht

+
    +
  • Datenverkehr von vor dem Beginn der Erfassung. Es gibt kein Nachtragen. Eine Verbindung, die vor dem Filter geöffnet + wurde, ist ihm nie angeboten worden.
  • +
  • Systemdienste, die von Inhaltsfiltern ausgenommen sind. macOS zeigt einem Inhaltsfilter nicht alles; ein Teil seines + eigenen Datenverkehrs erreicht unseren nie.
  • +
  • Ein anderer Inhaltsfilter, der den Platz hält. macOS führt einen zur Zeit aus. Hat ihn ein VPN oder ein + Sicherheitsagent, installiert sich Flowlights Filter, verbindet sich und wird nie gebeten, etwas zu filtern – Erfassung sagt das, statt einen + leeren Bildschirm zu zeigen.
  • +
  • Kurze Verbindungen, beim Sampler. Ohne die Erweiterung liest Flowlight Zähler einmal pro Sekunde: Eine Verbindung, die + zwischen zwei Messungen öffnet und schließt, wird nie aufgezeichnet.
  • +
  • Kanäle, die nicht TCP oder UDP sind. Bluetooth und USB sind als Geräte sichtbar, nicht als Bytes. Der lokale + MCP-Server eines Agenten, der über eine Pipe spricht, ist überhaupt kein Netzwerkverkehr und erscheint nirgends.
  • +
+ +

Was der Inspektion entgeht

+

Die HTTPS-Inspektion liest nur, was über Flowlights lokalen Proxy geleitet wird, und darüber entscheidet ein Programm beim Start. Eine App, + die Proxy-Einstellungen ignoriert, eine, die vor dem Einschalten der Inspektion gestartet wurde, oder eine, die ihre Zertifikate anpinnt, geht + unberührt durch – absichtlich, denn eine angepinnte Verbindung zu brechen würde die App brechen. QUIC wird dem Proxy ebenfalls nicht angeboten.

+

Ein leerer Bildschirm Inspizieren heißt also „hier wurde nichts durchgeleitet“ und nicht „es ist nichts passiert“. Abdeckung sagt pro App, + welches von beidem gilt.

+ +

Was Blockieren ist und was nicht

+

Eine Regel, die Verbindungen verweigert, wird von der Netzwerkerweiterung ausgeführt, im Weg der Verbindung, bevor sie zustande kommt. Eine + Regel, die eine URL nennt, führt stattdessen der Inspektions-Proxy aus, der die Anfrage mit einem Status beantwortet, den die App lesen kann. + Das sind die einzigen zwei Teile von Flowlight, die handeln statt zu berichten – der nettop-Sampler kann überhaupt nichts verweigern, auf einem + Mac, der mit dem Sampler erfasst, wird also keine Regel durchgesetzt, und Flowlight sagt das, statt einen Schalter anzubieten, der nichts tut.

+

Verhindern ist es trotzdem nicht. Ein Agent, der eine Shell ausführen kann, kann von Hand tun, was ein verweigertes Tool getan hätte. Eine + Verweigerung, die du mit einem Klick aufheben kannst, ist eine Verweigerung, durch die der nächste Versuch eines Agenten hindurchgehen kann. + Lokaler Datenverkehr, DNS, Apples eigene Dienste und Flowlights eigene Verbindungen werden nie verweigert, denn ein blockierter Mac ist ein + schlechteres Ergebnis als ein blockierter Agent. Und die Durchsetzung endet wenige Sekunden nachdem Flowlight nicht mehr läuft: Eine + Verweigerung, die niemand sehen kann, ist schlimmer als keine.

+

Inspektion und Verweigerung lassen sich nicht verbinden. Datenverkehr, der über Flowlights eigenen Proxy geleitet wird, + verlässt den Mac als Flowlights Datenverkehr, und Flowlight verweigert sich selbst nie – eine App, deren Anfragen du liest, ist also eine App, + deren Verbindungen Regeln nicht mehr stoppen. Die Inspektion einzuschalten, um mehr zu sehen, kostet dich die Durchsetzung, und auf dem + Bildschirm stand das vorher nirgends.

+ +

Was Flowlight selbst aufbewahrt

+

Metadaten zum Datenverkehr in einer lokalen SQLite-Datenbank, mit veröffentlichten Aufbewahrungsfristen. Bei eingeschalteter + HTTPS-Inspektion außerdem Anfrage- und Antwort-Bodys für drei Tage – das Sensibelste, was es überhaupt aufbewahrt. Header mit Zugangsdaten + werden nach Name und nach Wortbestandteil unlesbar gemacht, was eine Heuristik ist und keine Garantie; ein Header, der ein Geheimnis unter + einem Namen trägt, den nichts erkennt, kann aufgezeichnet werden.

+

Die Datenbank mit dem Datenverkehr wird nie hochgeladen. Drei kleinere Dinge verlassen den Mac, ohne dass jemand danach fragt, alle drei auf der + Datenschutzseite benannt: die Update-Prüfung, die GitHub beim Start und täglich nach der neuesten Version + fragt; die Abfrage zum Netzinhaber, die Team Cymru nach öffentlichen Adressen ohne Hostnamen fragt; und, solange Flowlight Zähler liest + statt seine Erweiterung zu betreiben, eine Reverse-DNS-Abfrage der Adressen, zu denen es keinen Namen gesehen hat. Die ersten beiden haben + Schalter zum Abschalten. Die dritte nicht, denn auf dem Sampler ist sie fast der einzige Weg, auf dem eine Verbindung überhaupt zu einem + Namen kommt – sie geht an den Resolver, den der Mac schon benutzt, und sie hört auf, sobald die Erweiterung übernimmt und Verbindungen aus dem + Datenverkehr selbst benennt. Fragen mit einem gehosteten Modell sendet weit mehr als alle drei und ist das eine, das aus bleibt, bis du es + einrichtest.

+ +

Updates

+

Versionen sind mit einer Developer ID signiert und notarisiert. Die Updatefunktion verlangt eine veröffentlichte Prüfsumme und verweigert + einen Download ohne sie, und prüft dann vor der Installation, dass die heruntergeladene App vom selben Team signiert ist wie die laufende + Kopie. Ein Update, das jemand anderes signiert hat, wird verweigert, auch wenn es sonst gültig ist.

+ +

Eine Schwachstelle melden

+

Nutze GitHubs private Schwachstellenmeldung oder schreib an + security@xinbetween.com, wenn du GitHub lieber nicht nutzt. + SECURITY.md sagt, was in den Rahmen fällt und was du erwarten kannst. + Ein gewöhnlicher Fehler – ein Absturz, eine falsche Zahl, ein irreführender Bildschirm – gehört stattdessen in + den Issue-Tracker.

+
+
+
diff --git a/site/pages/docs.html b/site/pages/docs.html index e6496aa..dc4da5e 100644 --- a/site/pages/docs.html +++ b/site/pages/docs.html @@ -96,12 +96,20 @@

The views

- + - - - + + + + + + +
ViewShortcutWhat it answers
Live⌘1What's moving right now: per-app rates over the last few seconds and the busiest destination.
AI Agents⌘2Which agents are active, which AI providers they use, and what else they contacted.
AI Agents⌘2Which agents are active, which AI providers they use, and what else they contacted.
Reports⌘3Where traffic went, from second to year. Group by App, Destination or IP; switch to Charts or Worth a look; export CSV.
Alerts⌘4Everything that looked unusual, with the app, the destination and the number that tripped the rule.
Inspect⌘5Optional: decrypted requests from the agents you route through Flowlight, and the tool calls behind them. Search reaches into request and response bodies.
Capture⌘6Which engine is recording, the extension's state, hostname learning, and where the database lives.
Alerts⌘4Everything that looked unusual, with the app, the destination and the number that tripped the rule.
Rules⌘5Every allowlist and refusal you have set, what each one covers, and what it has actually stopped.
Ask⌘6Questions about your own traffic in plain language, answered from the recorded history by a local or a hosted model.
Inspect⌘7Optional: decrypted requests from the agents you route through Flowlight, and the tool calls behind them. Search reaches into request and response bodies.
Devices⌘8Off until you turn it on: Bluetooth, USB and external storage, which a Mac uses as much as it uses the network.
Coverage⌘9What Flowlight cannot account for — per app, whether its traffic was seen, named, and readable.
Capture⌘0Which engine is recording, the extension's state, hostname learning, and where the database lives.
+

The shortcuts are the sidebar's order, so ⌘0 is the tenth item rather than a skipped position.

+
The Live screen: a list of applications with their current send and receive rates and busiest destination.
+
Live, the screen Flowlight opens on.

In Reports, hover a bar to see which apps drove it, click it to zoom in, and double-click any row to narrow the report to it.

AI agent rules

@@ -236,10 +244,16 @@

HTTPS inspection (optional)

and start them there. Under Advanced you can decrypt AI agents only instead of every app, edit the never-decrypt list, copy the shell setup for one shell, or remove the certificate and everything recorded.

Flowlight excludes its built-in list of Apple services and password managers from decryption (edit the list in Setup). Apps that pin their certificates may reject the - Flowlight certificate; Flowlight notices and passes them through encrypted. API keys, cookies and other credential headers are never - stored, recorded requests are kept 3 days, and Remove Certificate & Recorded Data deletes the certificate, its trust + Flowlight certificate; Flowlight notices and passes them through encrypted. API keys, cookies and other credential headers are replaced with their + length before anything is stored — matched by name and by the words in the name, which catches a vendor's own spelling but + cannot promise to catch every one — recorded requests are kept 3 days, and Remove Certificate & Recorded Data deletes the certificate, its trust setting and everything recorded. Inspection is HTTP/1.1 only (Flowlight asks both sides for it) and not available in demo mode.

+

Getting here from a row. Right-click an app or a destination in Live, Reports or AI Agents and + choose Inspect …'s Traffic: Inspect opens with that name already in the search field. It is the search + field rather than a hidden filter on purpose — you can widen it, narrow it or clear it without going back to where you + started. Only traffic that went through the proxy can appear, so a row you know is busy may still show nothing here.

+

Mock responses

To see how an agent copes when an API fails, stalls or returns something odd, answer that endpoint yourself. In Inspect › Mock responses, a rule names a host, a path and a method, and gives the status, headers, body and an @@ -369,16 +383,11 @@

Capture: engines and sources

needs no filter and works alongside them. See the developer guide for how it's built.

-

Getting here from a row. Right-click an app or a destination in Live, Reports or AI Agents and - choose Inspect …'s Traffic: Inspect opens with that name already in the search field. It is the search - field rather than a hidden filter on purpose — you can widen it, narrow it or clear it without going back to where you - started. Only traffic that went through the proxy can appear, so a row you know is busy may still show nothing here.

-

Coverage: what Flowlight can't account for

Every other screen answers what happened. Coverage answers what you would not have been told, which is what decides how much the other screens are worth. It asks three questions per app, because they fail independently.

Was it seen? The Network Extension sees each flow as it opens. The nettop sampler reads counters once a - second, so a connection that opens and closes between two readings — a DNS lookup, a fast API call, a script that runs curl + second, so a connection that opens and closes between two readings — a DNS lookup, a fast API call, a script that runs curl and exits — is missing entirely. That is a gap no percentage can express, so it is stated in words rather than scored.

Was it named? The share of that app's bytes that went to a destination with a hostname rather than a bare address. Bytes, not connections: one unnamed connection carrying a gigabyte is a bigger hole than a hundred carrying a @@ -519,8 +528,9 @@

Questions & answers

It shows which extensions are installed, whether macOS actually started Flowlight's filter, and how recently anything was recorded. Paste it into an issue.
Does Flowlight send anything about me anywhere?
-
No. There's no account, no telemetry and no analytics. The only requests it makes are the daily update check, optional network-owner - lookups, and reverse DNS — each listed, and each with an off switch, on the privacy page.
+
No account, no telemetry, no analytics, and your traffic database is never uploaded. Three requests do leave the Mac, all listed on the + privacy page: the daily update check and the optional network-owner lookup, both with off switches, and + reverse DNS while Flowlight is on the sampler, which has none — without it the sampler could not name most connections.
Will it slow my Mac down or drain the battery?
With the window closed Flowlight does almost nothing: it keeps the menu bar rates and writes one row a second. The Network Extension costs less than the fallback sampler, which starts a short-lived nettop process every second.
diff --git a/site/pages/es/docs.html b/site/pages/es/docs.html index d87c535..e0e5b68 100644 --- a/site/pages/es/docs.html +++ b/site/pages/es/docs.html @@ -35,7 +35,7 @@

Usar Flowlight

Ajustes y datos @@ -95,12 +95,20 @@

Las vistas

- + - - - + + + + + + +
VistaAtajoQué responde
En vivo⌘1Qué se mueve ahora mismo: tasas por app en los últimos segundos y el destino más activo.
Agentes de IA⌘2Qué agentes están activos, qué proveedores de IA usan y con qué más han contactado.
Agentes de IA⌘2Qué agentes están activos, qué proveedores de IA usan y con qué más han contactado.
Informes⌘3Adónde fue el tráfico, del segundo al año. Agrupa por App, Destino o IP; cambia a Gráficos o a Merece un vistazo; exporta a CSV.
Alertas⌘4Todo lo que ha resultado inusual, con la app, el destino y la cifra que activó la regla.
Inspeccionar⌘5Opcional: las peticiones descifradas de los agentes que encamines por Flowlight, y las llamadas de herramientas que hay detrás. La búsqueda llega a los cuerpos de las peticiones y las respuestas.
Captura⌘6Qué motor está registrando, el estado de la extensión, el aprendizaje de nombres de host y dónde está la base de datos.
Alertas⌘4Todo lo que ha resultado inusual, con la app, el destino y la cifra que activó la regla.
Reglas⌘5Cada lista de permitidos y cada rechazo que hayas puesto, qué abarca cada uno y qué ha detenido realmente.
Preguntar⌘6Preguntas sobre tu propio tráfico en lenguaje corriente, respondidas a partir del historial registrado por un modelo local o alojado.
Inspeccionar⌘7Opcional: las peticiones descifradas de los agentes que encamines por Flowlight, y las llamadas de herramientas que hay detrás. La búsqueda llega a los cuerpos de las peticiones y las respuestas.
Dispositivos⌘8Desactivado hasta que lo enciendes: Bluetooth, USB y almacenamiento externo, que un Mac usa tanto como usa la red.
Cobertura⌘9Lo que Flowlight no puede contabilizar — por app, si su tráfico se vio, se nombró y se pudo leer.
Captura⌘0Qué motor está registrando, el estado de la extensión, el aprendizaje de nombres de host y dónde está la base de datos.
+

Los atajos son el orden de la barra lateral, así que ⌘0 es el décimo elemento y no una posición omitida.

+
La pantalla En vivo: una lista de aplicaciones con sus tasas actuales de envío y recepción y su destino más activo.
+
En vivo, la pantalla con la que se abre Flowlight.

En Informes, pasa el cursor por una barra para ver qué apps la generaron, haz clic para ampliar y haz doble clic en cualquier fila para limitar el informe a ella.

Reglas de los agentes de IA

@@ -235,10 +243,16 @@

Inspección HTTPS (opcional)

y arráncalos ahí. En Avanzado puedes descifrar solo los agentes de IA en lugar de todas las apps, editar la lista de lo que nunca se descifra, copiar la configuración de shell para un shell concreto, o eliminar el certificado y todo lo registrado.

Flowlight excluye del descifrado su lista integrada de servicios de Apple y gestores de contraseñas (edita la lista en la configuración inicial). Las apps que fijan sus certificados pueden rechazar el - certificado de Flowlight; Flowlight lo detecta y las deja pasar cifradas. Las claves de API, las cookies y otras cabeceras con credenciales no se - guardan nunca, las peticiones registradas se conservan 3 días y Eliminar el certificado y los datos registrados borra el certificado, su ajuste + certificado de Flowlight; Flowlight lo detecta y las deja pasar cifradas. Las claves de API, las cookies y otras cabeceras con credenciales se + sustituyen por su longitud antes de guardar nada — reconocidas por el nombre y por las palabras del nombre, lo que atrapa la grafía propia + de un proveedor pero no puede prometer atraparlas todas —, las peticiones registradas se conservan 3 días y Eliminar el certificado y los datos registrados borra el certificado, su ajuste de confianza y todo lo registrado. La inspección es solo HTTP/1.1 (Flowlight lo pide a ambos lados) y no está disponible en el modo demo.

+

Cómo llegar aquí desde una fila. Haz clic derecho en una app o en un destino en En vivo, Informes o Agentes de IA y elige + Inspeccionar el tráfico de …: Inspeccionar se abre con ese nombre ya puesto en el campo de búsqueda. Que sea el campo de + búsqueda y no un filtro oculto es a propósito — puedes ampliarlo, estrecharlo o vaciarlo sin volver a donde empezaste. Solo puede aparecer + el tráfico que pasó por el proxy, así que una fila que sabes que está movida puede no mostrar nada aquí.

+

Respuestas simuladas

Para ver cómo se las arregla un agente cuando una API falla, se queda colgada o devuelve algo raro, responde tú por ese endpoint. En Inspeccionar › Respuestas simuladas, una regla nombra un host, una ruta y un método, e indica el estado, las cabeceras, el cuerpo y un @@ -368,6 +382,24 @@

Captura: motores y fuentes

no necesita filtro y funciona junto a ellos. Consulta la guía para desarrolladores para ver cómo está construido.

+

Cobertura: lo que Flowlight no puede contabilizar

+

Todas las demás pantallas responden qué pasó. Cobertura responde qué no te habrían contado, que es lo que decide cuánto + valen las demás pantallas. Hace tres preguntas por app, porque fallan de forma independiente.

+

¿Se vio? La extensión de red ve cada flujo en el momento en que se abre. El muestreador nettop lee contadores una vez por + segundo, así que una conexión que se abre y se cierra entre dos lecturas — una consulta DNS, una llamada de API veloz, un script que ejecuta + curl y sale — falta por completo. Eso es un hueco que ningún porcentaje puede expresar, así que se dice con palabras en lugar de + puntuarlo.

+

¿Se nombró? La proporción de los bytes de esa app que fueron a un destino con nombre de host y no a una dirección a + secas. Bytes, no conexiones: una conexión sin nombre que lleva un gigabyte es un agujero mayor que cien que llevan un kilobyte cada una, y + contar conexiones las ordena al revés.

+

¿Era legible? Si la inspección HTTPS descifró algo del tráfico de esa app. Cuatro respuestas, y solo una es un hueco: se está + leyendo; no llegó nunca al proxy; la app está en la lista de nunca descifrados, que es una decisión tuya; o la inspección está desactivada, + que es un ajuste y no un fallo app por app.

+

Lo que ningún motor ve en absoluto está listado en la pantalla misma y no se deja a esta página: el tráfico anterior al + inicio de la captura, los servicios del sistema que nunca se muestran a los filtros de contenido, las apps que fijan sus certificados, el QUIC + que nunca se le ofrece al proxy y el servidor MCP local de un agente que habla con él por una tubería. Nada de eso aparece en ningún sitio de + Flowlight, así que también falta en estas cifras — una cifra de cobertura que contara solo lo que puede ver sería un consuelo y no un hecho.

+

Dispositivos: Bluetooth, USB y almacenamiento externo

Un Mac envía y recibe por más vías que TCP y UDP. La pantalla Dispositivos cubre el resto, y está desactivada hasta que la actives: no porque necesite un permiso que Flowlight no tenga ya, sino porque vigilar más cosas de tu @@ -495,8 +527,9 @@

Preguntas y respuestas

Muestra qué extensiones están instaladas, si macOS arrancó de verdad el filtro de Flowlight y cuándo se registró algo por última vez. Pégalo en una incidencia.
¿Flowlight envía algo sobre mí a alguna parte?
-
No. No hay cuenta, ni telemetría, ni analítica. Las únicas peticiones que hace son la comprobación diaria de actualizaciones, las consultas opcionales sobre el - propietario de la red y el DNS inverso: cada una está listada y cada una tiene su interruptor para desactivarla, en la página de privacidad.
+
Sin cuenta, sin telemetría, sin analítica, y tu base de datos de tráfico nunca se sube. Tres peticiones sí salen del Mac, todas listadas en la + página de privacidad: la comprobación diaria de actualizaciones y la consulta opcional del propietario de la red, las dos con + interruptor para desactivarlas, y el DNS inverso mientras Flowlight está en el muestreador, que no lo tiene — sin él el muestreador no podría nombrar la mayoría de las conexiones.
¿Ralentizará mi Mac o gastará la batería?
Con la ventana cerrada, Flowlight casi no hace nada: mantiene las tasas de la barra de menús y escribe una fila por segundo. La extensión de red cuesta menos que el muestreador de reserva, que arranca un proceso nettop efímero cada segundo.
diff --git a/site/pages/es/index.html b/site/pages/es/index.html index ae9ddfa..50dda55 100644 --- a/site/pages/es/index.html +++ b/site/pages/es/index.html @@ -162,7 +162,9 @@

Vigila cómo usan la red los agentes de IA

Reglas, el tiempo que tú digas

Señala una app, un agente, un destino o una sola URL y bloquéalo: clic derecho en la fila donde lo has visto. Para siempre, hasta una hora, hasta que Flowlight se cierre o entre las horas que elijas, con un único interruptor de pausa y una salida en - cada rechazo. Gana la regla más específica y, en caso de empate, gana el bloqueo.

+ cada rechazo. Gana la regla más específica y, en caso de empate, gana el bloqueo. + Es control sobre software en el que ya confías, no una barrera contra + software en el que no — mira el modelo de amenazas.

Cursor ⇥ raw.githubusercontent.com · rechazada 4 veces · de lunes a viernes 18:00–09:00

@@ -344,9 +346,14 @@

Correlaciona las llamadas de herramientas compatibles con las peticiones de

Lo siguiente

Qué viene ahora

-

Flowlight ya observa, explica y rechaza. Este es el orden en el que se está construyendo el resto.

+

Flowlight ya observa, explica y rechaza — observar en vez de impedir, como expone el + modelo de amenazas. Este es el orden en el que se está construyendo el resto.

+
Un presupuesto para la inspección 0.9.3

Los cuerpos registrados son lo más delicado que guarda Flowlight. Una lista de permitidos para las cabeceras en vez de una lista de bloqueados, patrones propios, la opción de no guardar ninguna cabecera, topes por app y una sesión que caduca por sí sola.

+
Muéstrame qué habría hecho esta regla 0.9.4

Reproduce el último día contra una regla y enumera lo que habría rechazado, antes de que rechace nada. Los datos ya están ahí; hasta ahora solo han explicado el pasado.

+
Qué sale del Mac, antes de que salga 0.9.5

Antes de que la primera fila llegue a un colector: el destino, si va cifrado, qué campos viajan y si alguno es una cabecera — la divulgación que Flowlight exige de todo lo demás, aplicada a sí mismo.

+
Qué hizo un agente aparte de la red 1.0

Un archivo que sale es una lectura y luego un envío, y hoy solo el envío es visible. Registrar lo que las herramientas de un agente abrieron, escribieron y lanzaron convertiría leyó la clave privada y después habló con paste.example en un solo hallazgo en lugar de dos pantallas. No es un monitor de recursos: la CPU y la memoria son cosa del Monitor de Actividad. Necesita el permiso de EndpointSecurity de Apple, y antes tiene que existir el presupuesto de inspección de arriba.

Linux, después Windows

El núcleo de análisis es Swift portable; la captura no lo es. Primero llegará un demonio para Linux con interfaz web local, sobre eBPF en lugar de las API de macOS.

diff --git a/site/pages/es/privacy.html b/site/pages/es/privacy.html index 3d3d760..84271b3 100644 --- a/site/pages/es/privacy.html +++ b/site/pages/es/privacy.html @@ -46,7 +46,9 @@

Inspección HTTPS

Desactivada por defecto. Si la activas, Flowlight crea una autoridad de certificación en tu Mac (su clave no sale nunca de ~/Library/Application Support/Flowlight/Inspection) y ejecuta un proxy que acepta conexiones solo de este Mac. En las apps que encamines por él, registra las peticiones y las respuestas, incluidos los cuerpos de hasta 2 MB, en la base de datos local durante 3 días. Las cabeceras con credenciales - (Authorization, cookies, claves de API) se sustituyen por su longitud antes de guardar nada. Flowlight excluye del descifrado su lista integrada de servicios de Apple y gestores de contraseñas. Flowlight no sube los datos de inspección registrados. Al desactivar la inspección se detiene el proxy; Eliminar el certificado y los datos + se sustituyen por su longitud antes de guardar nada — reconocidas por el nombre (Authorization, cookies, claves de API) y por las palabras + del nombre, así que X-Access-Key también se atrapa. Eso es una heurística, no una garantía: una cabecera que lleve un secreto con un + nombre que nada reconoce quedaría registrada. Flowlight excluye del descifrado su lista integrada de servicios de Apple y gestores de contraseñas. Flowlight no sube los datos de inspección registrados. Al desactivar la inspección se detiene el proxy; Eliminar el certificado y los datos registrados borra el certificado, su ajuste de confianza y todas las peticiones registradas.

Peticiones de red que hace la app

@@ -54,7 +56,7 @@

Peticiones de red que hace la app

PeticiónEnviada aQué contieneCuándo Comprobación de actualizacionesapi.github.comUna petición HTTPS normal de la última versión; GitHub ve tu dirección IP y el agente de usuario Flowlight/<version>Al arrancar y a diario, desde la 0.1.2. Interruptor para desactivarla en Ajustes › General Descarga de la actualizacióngithub.comLa imagen de disco y su archivo de suma de verificaciónSolo cuando pulsas Descargar y abrir - DNS inversoEl servidor DNS que tengas configuradoUna consulta del nombre registrado de una dirección IP, cuando no se ha visto ningún nombre de hostSegún haga falta, en el modo de captura predeterminado + DNS inversoEl servidor DNS que tengas configuradoUna consulta del nombre registrado de una dirección IP, cuando no se ha visto ningún nombre de hostSegún haga falta, en el modo de captura del muestreador, que es el predeterminado hasta que la extensión de red esté en marcha. Sin interruptor para desactivarla: sin ella el muestreador no puede nombrar la mayoría de las conexiones. La extensión de red las nombra a partir del propio tráfico y no hace esta consulta Consulta del propietario de la redTeam Cymru, por DNSDirecciones IP públicas sin nombre de host conocido. Las direcciones privadas y reservadas no salen nunca de tu MacActivada por defecto. Interruptor para desactivarla en Captura › Identificar a los propietarios de la red Preguntar con un modelo alojadoEl proveedor que elijas: Anthropic, OpenAI, Google Gemini o un endpoint compatibleTu pregunta y los resultados que devuelvan las consultas de solo lectura de Flowlight que elija el modelo. La base de datos de tráfico en sí no se subeSolo cuando eliges un proveedor alojado y envías una pregunta. La pantalla Preguntar muestra las peticiones transmitidas Exportación a un colectorEl endpoint de OpenTelemetry o de HTTP que configuresLos campos que se muestran en Ajustes › Exportación, como los agregados de tráfico y las alertas. Las cabeceras de autenticación se guardan en el llaveroSolo después de que configures un endpoint y actives la exportación @@ -74,11 +76,15 @@

Conservación

Este sitio web

Este sitio es una página estática alojada en GitHub Pages y servida a través de Cloudflare. No pone cookies y no ejecuta analítica. GitHub - y Cloudflare procesan las peticiones para servirlo, y las tipografías se cargan desde Google Fonts, que recibe tu dirección IP cuando lo visitas.

+ y Cloudflare procesan las peticiones para servirlo. Las tipografías se sirven desde este dominio, así que representar una página no envía nada + a nadie más: esta página antes las cargaba de Google, lo que significaba que la página que explica que Flowlight no envía nada a ninguna parte + hacía una petición a Google para representarse a sí misma.

Contacto

-

¿Dudas o alguna preocupación sobre privacidad? Abre una incidencia. Para cualquier asunto delicado, usa el - informe privado de vulnerabilidades de GitHub en el repositorio.

+

¿Dudas o alguna preocupación sobre privacidad? Abre una incidencia. Para un problema de seguridad, usa el + informe privado de vulnerabilidades de GitHub, o escribe a + security@xinbetween.com si prefieres no usar GitHub: consulta + SECURITY.md para saber qué esperar.

diff --git a/site/pages/es/threat-model.html b/site/pages/es/threat-model.html new file mode 100644 index 0000000..fbcbcc8 --- /dev/null +++ b/site/pages/es/threat-model.html @@ -0,0 +1,126 @@ + +
+
+

Modelo de amenazas

+

Observar, no impedir

+

Flowlight te dice qué está enviando el software de tu Mac y adónde. No es una defensa frente a un atacante que ya + controla la máquina, y la diferencia importa lo suficiente para decirla en una página propia en lugar de en una nota al pie.

+
+ +
+ + +
+

Para qué sirve

+

Flowlight responde a una pregunta que el Mac no responde: ¿qué app ha enviado esto y adónde ha ido? Está hecho para + software que se porta mal a la vista de todos: un agente de IA que contacta con algo que nadie le ha pedido, una herramienta que sube más de + lo que debería, un proceso que habla con una dirección que no tiene nombre. Ese comportamiento se ve en el tráfico, y el trabajo de Flowlight + es hacerlo legible y decir con honestidad cuándo no puede.

+

No es un antivirus, ni un agente de EDR, ni un cortafuegos en el sentido de algo que se interpone entre tú y un atacante. Donde ambas cosas + se solapan —Flowlight puede rechazar conexiones—, el rechazo es una comodidad para controlar software en el que ya confías, no una barrera + contra software en el que no.

+ +

De qué defiende

+
    +
  • Salida de datos que pasa inadvertida. Una app o un agente que envía a un sitio que no habrías aprobado, incluso a través + de una herramienta que ha ejecutado él mismo. Flowlight atribuye la conexión al proceso que la hizo y al agente que arrancó ese proceso.
  • +
  • Cambios silenciosos de comportamiento. Una app que de pronto contacta con destinos nuevos, mueve mucho más que su línea + base o trabaja mientras estás fuera. Cada alerta dice qué cifra la disparó, para que puedas no estar de acuerdo con ella.
  • +
  • Un agente que se pasa de lo que permitiste. Una lista de permitidos por agente, y reglas que rechazan las conexiones + fuera de ella, con el rechazo registrado y un clic para permitirlo.
  • +
  • Una actualización manipulada. Cada versión publica una suma de comprobación; el actualizador rechaza una descarga que no + puede verificar y se niega a instalar una app que no esté firmada por el mismo equipo que la copia que pide la actualización.
  • +
+ +

El software con root puede apagarlo

+

Flowlight se ejecuta como tú, con una extensión del sistema que macOS arranca en su nombre. Cualquier cosa que se ejecute como root —o + cualquier cosa cuyo instalador apruebes— puede descargar esa extensión, detener la app o borrar su base de datos. Nada en el diseño lo impide, + y ninguna herramienta de monitorización en macOS puede impedirlo y seguir siendo una herramienta que también puedas apagar tú.

+

La afirmación honesta es más estrecha y sigue siendo útil: el software que se porta mal pero no elude activamente un monitor se verá. El + software que sí lo elude activamente puede no verse, y al menos dejará un hueco —una extensión que se detuvo, un periodo sin datos— que la + pantalla Cobertura está ahí para mostrar.

+ +

Lo que la captura se pierde

+
    +
  • El tráfico anterior al inicio de la captura. No hay relleno retroactivo. Una conexión que se abrió antes que el filtro + nunca se le ofreció.
  • +
  • Los servicios del sistema exentos de los filtros de contenido. macOS no le muestra todo a un filtro de contenido; parte + de su propio tráfico no llega nunca al nuestro.
  • +
  • Otro filtro de contenido que ocupa el sitio. macOS ejecuta uno a la vez. Si lo tiene una VPN o un agente de seguridad, el + filtro de Flowlight se instala, se conecta y nunca se le pide filtrar nada: Captura lo dice en vez de mostrar una pantalla vacía.
  • +
  • Las conexiones cortas, con el muestreador. Sin la extensión, Flowlight lee contadores una vez por segundo: una conexión + que se abre y se cierra entre dos lecturas no se registra nunca.
  • +
  • Los canales que no son TCP ni UDP. Bluetooth y USB se ven como dispositivos, no como bytes. El servidor MCP local de un + agente que habla por una tubería no es tráfico de red en absoluto y no aparece en ningún sitio.
  • +
+ +

Lo que la inspección se pierde

+

La inspección HTTPS lee solo lo que se encamina por el proxy local de Flowlight, y eso lo decide un programa cuando arranca. Una app que + ignora los ajustes de proxy, una que se arrancó antes de activar la inspección, o una que fija sus certificados pasa intacta: a propósito, + porque romper una conexión con certificado fijado rompería la app. QUIC tampoco se le ofrece al proxy.

+

Así que una pantalla Inspeccionar vacía significa «aquí no se ha encaminado nada», no «no ha pasado nada». Cobertura dice cuál de las dos + cosas se aplica, app por app.

+ +

Qué es bloquear, y qué no

+

De una regla que rechaza conexiones se encarga la extensión de red, en el camino, antes de que la conexión se haga. De una regla que nombra + una URL se encarga en cambio el proxy de inspección, que responde a la petición con un estado que la app puede leer. Esas son las dos únicas + partes de Flowlight que actúan en lugar de informar — el muestreador nettop no puede rechazar nada en absoluto, así que en un Mac que captura + con el muestreador no se aplica ninguna regla, y Flowlight lo dice en lugar de ofrecer un interruptor que no hace nada.

+

Aun así no es impedir. Un agente que puede ejecutar un shell puede hacer a mano lo que habría hecho la herramienta rechazada. Un rechazo que + puedes deshacer con un clic es un rechazo por el que el siguiente intento del agente puede pasar. El tráfico local, el DNS, los servicios de + Apple y las propias conexiones de Flowlight no se rechazan nunca, porque un Mac bloqueado es peor resultado que un agente bloqueado. Y la + aplicación de las reglas caduca unos segundos después de que Flowlight deje de ejecutarse: un rechazo que nadie puede ver es peor que ninguno.

+

La inspección y el rechazo no se combinan. El tráfico encaminado por el propio proxy de Flowlight sale del Mac como tráfico + de Flowlight, y Flowlight no se rechaza nunca a sí mismo — así que una app cuyas peticiones estás leyendo es una app cuyas conexiones las + reglas ya no detienen. Activar la inspección para ver más te cuesta la aplicación de las reglas, y hasta ahora nada en la pantalla lo decía.

+ +

Lo que guarda Flowlight mismo

+

Metadatos de tráfico en una base de datos SQLite local, con una retención publicada. Con la inspección HTTPS activada guarda además los + cuerpos de las peticiones y las respuestas durante tres días: lo más delicado que llega a conservar. Las cabeceras con credenciales se + censuran por nombre y por palabra, lo cual es una heurística y no una garantía; una cabecera que lleve un secreto con un nombre que nada + reconoce puede quedar registrada.

+

La base de datos de tráfico nunca se sube. Tres cosas más pequeñas sí salen del Mac sin que nadie las pida, las tres nombradas en la + página de privacidad: la comprobación de actualizaciones, que pide a GitHub la última versión al arrancar y a + diario; la consulta del propietario de la red, que pregunta a Team Cymru por direcciones públicas que no tienen nombre de host; y, mientras + Flowlight lee contadores en vez de ejecutar su extensión, una consulta de DNS inverso de las direcciones para las que no vio ningún nombre. + Las dos primeras se pueden desactivar. La tercera no, porque en el muestreador es casi la única manera en la que una conexión llega a tener + nombre: va al servidor DNS que el Mac ya usa, y se detiene en cuanto la extensión toma el relevo y nombra las conexiones a partir del propio + tráfico. Preguntar con un modelo alojado envía mucho más que cualquiera de ellas, y es lo único que está desactivado hasta que lo + configuras.

+ +

Actualizaciones

+

Las versiones se firman con un Developer ID y se notarizan. El actualizador exige una suma de comprobación publicada y rechaza una descarga + que no la tenga; después comprueba que la app descargada esté firmada por el mismo equipo que la copia en ejecución antes de instalarla. Una + actualización firmada por otra persona se rechaza aunque por lo demás sea válida.

+ +

Informar de una vulnerabilidad

+

Usa el informe privado de vulnerabilidades de GitHub, o escribe a + security@xinbetween.com si prefieres no usar GitHub. + SECURITY.md dice qué entra en el alcance y qué puedes esperar. + Un error corriente — un cierre inesperado, una cifra equivocada, una pantalla que engaña — va en cambio a las + incidencias.

+
+
+
diff --git a/site/pages/fr/docs.html b/site/pages/fr/docs.html index 81aa79b..f69f2e5 100644 --- a/site/pages/fr/docs.html +++ b/site/pages/fr/docs.html @@ -35,7 +35,7 @@

Utiliser Flowlight

Réglages et données @@ -95,12 +95,20 @@

Les vues

- + - - - + + + + + + +
VueRaccourciLa question à laquelle elle répond
En direct⌘1Ce qui circule en ce moment : les débits par app sur les dernières secondes et la destination la plus active.
Agents IA⌘2Quels agents sont actifs, quels fournisseurs d’IA ils utilisent, et quoi d’autre ils ont contacté.
Agents IA⌘2Quels agents sont actifs, quels fournisseurs d’IA ils utilisent, et quoi d’autre ils ont contacté.
Rapports⌘3Où le trafic est parti, de la seconde à l’année. Groupez par App, Destination ou IP ; passez aux Graphiques ou à À regarder de près ; exportez en CSV.
Alertes⌘4Tout ce qui a paru inhabituel, avec l’app, la destination et le chiffre qui a déclenché la règle.
Inspecter⌘5Facultatif : les requêtes déchiffrées des agents que vous faites passer par Flowlight, et les appels d’outils qui les ont causées. La recherche va jusque dans les corps de requête et de réponse.
Capture⌘6Quel moteur enregistre, l’état de l’extension, l’apprentissage des noms d’hôte, et où vit la base de données.
Alertes⌘4Tout ce qui a paru inhabituel, avec l’app, la destination et le chiffre qui a déclenché la règle.
Règles⌘5Chaque liste d’autorisation et chaque refus que vous avez posés, ce que chacun couvre, et ce qu’il a réellement arrêté.
Demander⌘6Des questions sur votre propre trafic en langage courant, auxquelles un modèle local ou hébergé répond à partir de l’historique enregistré.
Inspecter⌘7Facultatif : les requêtes déchiffrées des agents que vous faites passer par Flowlight, et les appels d’outils qui les ont causées. La recherche va jusque dans les corps de requête et de réponse.
Appareils⌘8Désactivé jusqu’à ce que vous l’activiez : Bluetooth, USB et stockage externe, dont un Mac se sert autant que du réseau.
Couverture⌘9Ce dont Flowlight ne peut pas rendre compte — par app, si son trafic a été vu, nommé et lisible.
Capture⌘0Quel moteur enregistre, l’état de l’extension, l’apprentissage des noms d’hôte, et où vit la base de données.
+

Les raccourcis sont l’ordre de la barre latérale, donc ⌘0 est le dixième élément plutôt qu’une position omise.

+
L’écran En direct : une liste d’applications avec leurs débits d’envoi et de réception actuels et leur destination la plus active.
+
En direct, l’écran sur lequel Flowlight s’ouvre.

Dans Rapports, survolez une barre pour voir quelles apps l’ont produite, cliquez pour zoomer, et double-cliquez n’importe quelle ligne pour y restreindre le rapport.

Règles pour les agents IA

@@ -235,10 +243,16 @@

Inspection HTTPS (facultative)

et lancez-les depuis là. Sous Avancé, vous pouvez déchiffrer les agents IA seulement plutôt que toutes les apps, modifier la liste des exclusions, copier la configuration shell pour un shell donné, ou supprimer le certificat et tout ce qui a été enregistré.

Flowlight exclut du déchiffrement sa liste intégrée de services Apple et de gestionnaires de mots de passe (modifiez la liste dans la Configuration). Les apps qui épinglent leurs certificats peuvent rejeter le - certificat de Flowlight ; Flowlight s’en aperçoit et les laisse passer chiffrées. Les clés d’API, les cookies et les autres en-têtes d’identification ne sont jamais - conservés, les requêtes enregistrées sont gardées 3 jours, et Supprimer le certificat & les données enregistrées supprime le certificat, son réglage + certificat de Flowlight ; Flowlight s’en aperçoit et les laisse passer chiffrées. Les clés d’API, les cookies et les autres en-têtes d’identification sont remplacés par + leur longueur avant tout enregistrement — repérés par leur nom et par les mots de leur nom, ce qui attrape l’orthographe propre d’un fournisseur + sans pouvoir promettre de les attraper tous —, les requêtes enregistrées sont gardées 3 jours, et Supprimer le certificat & les données enregistrées supprime le certificat, son réglage d’approbation et tout ce qui a été enregistré. L’inspection est en HTTP/1.1 uniquement (Flowlight le demande aux deux parties) et n’est pas disponible en mode démo.

+

Y arriver depuis une ligne. Faites un clic droit sur une app ou une destination dans En direct, Rapports ou Agents IA et + choisissez Inspecter le trafic de … : Inspecter s’ouvre avec ce nom déjà dans le champ de recherche. Que ce soit le champ + de recherche et non un filtre caché est voulu — vous pouvez l’élargir, le restreindre ou l’effacer sans retourner d’où vous veniez. Seul le + trafic passé par le proxy peut apparaître : une ligne dont vous savez qu’elle est chargée peut donc ne rien montrer ici.

+

Réponses simulées

Pour voir comment un agent réagit quand une API échoue, se bloque ou renvoie quelque chose d’étrange, répondez vous-même à ce point de terminaison. Dans Inspecter › Réponses simulées, une règle nomme un hôte, un chemin et une méthode, et donne le statut, les en-têtes, le corps et un @@ -368,6 +382,25 @@

Capture : moteurs et sources

le guide du développeur pour la façon dont c’est construit.

+

Couverture : ce dont Flowlight ne peut pas rendre compte

+

Tous les autres écrans répondent à ce qui s’est passé. Couverture répond à ce qu’on ne vous aurait pas dit, et c’est cela + qui décide de ce que valent les autres écrans. Elle pose trois questions par app, parce qu’elles échouent indépendamment.

+

Est-ce que ça a été vu ? L’extension réseau voit chaque flux à son ouverture. L’échantillonneur nettop lit des compteurs + une fois par seconde : une connexion qui s’ouvre et se ferme entre deux relevés — une recherche DNS, un appel d’API bref, un script qui + lance curl et se termine — manque entièrement. C’est un manque qu’aucun pourcentage ne peut exprimer : il est donc dit en mots + plutôt que noté.

+

Est-ce que ça a été nommé ? La part des octets de cette app qui sont allés vers une destination portant un nom + d’hôte plutôt qu’une simple adresse. Des octets, pas des connexions : une seule connexion sans nom qui transporte un gigaoctet est un trou + plus grand que cent qui transportent un kilooctet chacune, et compter les connexions les classe dans l’autre sens.

+

Est-ce que c’était lisible ? Si l’inspection HTTPS a déchiffré quelque chose du trafic de cette app. Quatre réponses, et + une seule est un manque : il est lu ; il n’a jamais atteint le proxy ; l’app est sur la liste Jamais déchiffré, ce qui est un choix + que vous avez fait ; ou l’inspection est désactivée, ce qui est un réglage et non un échec app par app.

+

Ce qu’aucun moteur ne voit du tout est listé sur l’écran lui-même et non laissé à cette page : le trafic antérieur au + démarrage de la capture, les services système qui ne sont jamais présentés aux filtres de contenu, les apps qui épinglent leurs certificats, le + QUIC qui n’est jamais proposé au proxy, et le serveur MCP local d’un agent qui lui parle par un tube. Rien de tout cela n’apparaît où que ce + soit dans Flowlight, et manque donc aussi dans ces chiffres — un chiffre de couverture qui ne compterait que ce qu’il peut voir serait un + réconfort et non un fait.

+

Appareils : Bluetooth, USB et stockage externe

Un Mac émet et reçoit par plus que TCP et UDP. L’écran Appareils couvre le reste, et il est désactivé jusqu’à ce que vous l’activiez — non parce qu’il demanderait une autorisation que Flowlight n’a pas déjà, mais parce que surveiller davantage de @@ -495,8 +528,9 @@

Questions & réponses

Cela montre quelles extensions sont installées, si macOS a réellement démarré le filtre de Flowlight, et à quand remonte le dernier enregistrement. Collez le résultat dans un ticket.
Flowlight envoie-t-il quoi que ce soit à mon sujet, où que ce soit ?
-
Non. Il n’y a ni compte, ni télémétrie, ni analytique. Les seules requêtes qu’il émet sont la recherche quotidienne de mise à jour, les recherches facultatives de - propriétaire de réseau, et le DNS inverse — chacune listée, et chacune avec un interrupteur d’arrêt, sur la page Confidentialité.
+
Ni compte, ni télémétrie, ni analytique, et votre base de données de trafic n’est jamais téléversée. Trois requêtes quittent bien le Mac, toutes listées sur la + page Confidentialité : la recherche quotidienne de mise à jour et la consultation facultative du propriétaire de réseau, toutes + deux avec un interrupteur d’arrêt, et le DNS inverse tant que Flowlight tourne sur l’échantillonneur, qui n’en a pas — sans lui, l’échantillonneur ne pourrait pas nommer la plupart des connexions.
Va-t-il ralentir mon Mac ou vider la batterie ?
Fenêtre fermée, Flowlight ne fait presque rien : il tient à jour les débits de la barre des menus et écrit une ligne par seconde. L’extension réseau coûte moins que l’échantillonneur de secours, qui lance un processus nettop éphémère chaque seconde.
diff --git a/site/pages/fr/index.html b/site/pages/fr/index.html index d7508f5..67b9c69 100644 --- a/site/pages/fr/index.html +++ b/site/pages/fr/index.html @@ -162,7 +162,9 @@

Voyez comment les agents IA se servent du réseau

Des règles, aussi longtemps que vous voulez

Désignez une app, un agent, une destination ou une seule URL et bloquez-la — d’un clic droit sur la ligne où vous l’avez repérée. Pour toujours, jusqu’à une heure donnée, jusqu’à la fermeture de Flowlight, ou entre deux heures choisies, avec un unique interrupteur de pause et une échappatoire à - chaque refus. La règle la plus spécifique gagne, et en cas d’égalité c’est le blocage qui l’emporte.

+ chaque refus. La règle la plus spécifique gagne, et en cas d’égalité c’est le blocage qui l’emporte. + C’est un contrôle sur des logiciels auxquels vous faites déjà confiance, pas + une barrière contre ceux auxquels vous n’en faites pas — voyez le modèle de menaces.

Cursor ⇥ raw.githubusercontent.com · refusé 4 fois · en semaine 18:00–09:00

@@ -344,9 +346,14 @@

Reliez les appels d’outils pris en charge aux requêtes réseau

La suite

Ce qui arrive

-

Aujourd’hui, Flowlight observe, explique et refuse. Voici l’ordre dans lequel le reste se construit.

+

Aujourd’hui, Flowlight observe, explique et refuse — observer plutôt qu’empêcher, comme l’expose le + modèle de menaces. Voici l’ordre dans lequel le reste se construit.

+
Un budget pour l’inspection 0.9.3

Les corps enregistrés sont ce que Flowlight détient de plus sensible. Une liste d’autorisation d’en-têtes plutôt qu’une liste de blocage, vos propres motifs, la possibilité de ne garder aucun en-tête, des plafonds par app, et une session qui expire d’elle-même.

+
Montrez-moi ce que cette règle aurait fait 0.9.4

Rejouez la dernière journée contre une règle et faites lister ce qu’elle aurait refusé, avant qu’elle ne refuse quoi que ce soit. Les données sont déjà là ; elles n’ont jamais fait qu’expliquer le passé.

+
Ce qui quitte le Mac, avant que ça ne le quitte 0.9.5

Avant que la première ligne n’atteigne un collecteur : la destination, si c’est chiffré, quels champs voyagent et si certains sont des en-têtes — la divulgation que Flowlight exige de tout le reste, appliquée à lui-même.

+
Ce qu’un agent a fait en dehors du réseau 1.0

Un fichier qui part, c’est une lecture puis un envoi, et seul l’envoi est visible aujourd’hui. Enregistrer ce que les outils d’un agent ont ouvert, écrit et lancé ferait de a lu la clé privée, puis a parlé à paste.example un seul constat au lieu de deux écrans. Pas un moniteur de ressources : le processeur et la mémoire sont l’affaire du Moniteur d’activité. Nécessite le droit EndpointSecurity d’Apple, et suppose que le budget d’inspection ci-dessus existe d’abord.

Linux, puis Windows

Le cœur d’analyse est en Swift portable ; la capture, non. Un démon Linux avec une interface web locale vient d’abord, sur eBPF plutôt que sur les API de macOS.

diff --git a/site/pages/fr/privacy.html b/site/pages/fr/privacy.html index 3812afd..8f26460 100644 --- a/site/pages/fr/privacy.html +++ b/site/pages/fr/privacy.html @@ -46,7 +46,9 @@

Inspection HTTPS

Désactivée par défaut. Si vous l’activez, Flowlight crée une autorité de certification sur votre Mac (sa clé ne quitte jamais ~/Library/Application Support/Flowlight/Inspection) et fait tourner un proxy qui n’accepte de connexions que depuis ce Mac. Pour les apps que vous faites passer par lui, il enregistre les requêtes et les réponses, corps compris jusqu’à 2 MB, dans la base de données locale pendant 3 jours. Les en-têtes d’identification - (Authorization, cookies, clés d’API) sont remplacés par leur longueur avant tout enregistrement. Flowlight exclut du déchiffrement sa liste intégrée de services Apple et de gestionnaires de mots de passe. Les données d’inspection enregistrées ne sont pas envoyées par Flowlight. Désactiver l’inspection arrête le proxy ; Supprimer le certificat & les données + sont remplacés par leur longueur avant tout enregistrement — repérés par leur nom (Authorization, cookies, clés d’API) et par les mots de + leur nom, si bien que X-Access-Key est attrapé aussi. C’est une heuristique, pas une garantie : un en-tête portant un secret sous + un nom que rien ne reconnaît serait enregistré. Flowlight exclut du déchiffrement sa liste intégrée de services Apple et de gestionnaires de mots de passe. Les données d’inspection enregistrées ne sont pas envoyées par Flowlight. Désactiver l’inspection arrête le proxy ; Supprimer le certificat & les données enregistrées supprime le certificat, son réglage d’approbation et chaque requête enregistrée.

Les requêtes réseau que fait l’app

@@ -54,7 +56,7 @@

Les requêtes réseau que fait l’app

RequêteEnvoyée àCe qu’elle contientQuand Recherche de mise à jourapi.github.comUne requête HTTPS standard pour la dernière version ; GitHub voit votre adresse IP et l’agent utilisateur Flowlight/<version>Au lancement et une fois par jour, depuis 0.1.2. Interrupteur d’arrêt dans Réglages › Général Téléchargement de mise à jourgithub.comL’image disque et son fichier de somme de contrôleSeulement quand vous cliquez sur Télécharger & ouvrir - DNS inverseLe résolveur DNS que vous avez configuréUne recherche du nom enregistré d’une adresse IP, quand aucun nom d’hôte n’a été observéAu besoin, dans le mode de capture par défaut + DNS inverseLe résolveur DNS que vous avez configuréUne recherche du nom enregistré d’une adresse IP, quand aucun nom d’hôte n’a été observéAu besoin, dans le mode de capture par échantillonnage, qui est celui par défaut jusqu’à ce que l’extension réseau tourne. Pas d’interrupteur d’arrêt : sans elle, l’échantillonneur ne peut pas nommer la plupart des connexions. L’extension réseau les nomme à partir du trafic lui-même et ne fait pas cette recherche Recherche du propriétaire de réseauTeam Cymru, par DNSDes adresses IP publiques sans nom d’hôte connu. Les adresses privées et réservées ne quittent jamais votre MacActivé par défaut. Interrupteur d’arrêt dans Capture › Identifier les propriétaires de réseau Demander avec un modèle hébergéLe fournisseur que vous choisissez : Anthropic, OpenAI, Google Gemini ou un point de terminaison compatibleVotre question et les résultats renvoyés par les requêtes Flowlight en lecture seule choisies par le modèle. La base de données de trafic elle-même n’est pas envoyéeSeulement quand vous choisissez un fournisseur hébergé et soumettez une question. L’écran Demander montre les requêtes transmises Exportation vers un collecteurLe point de terminaison OpenTelemetry ou HTTP que vous configurezLes champs indiqués dans Réglages › Exportation, comme les agrégats de trafic et les alertes. Les en-têtes d’authentification sont stockés dans le trousseauSeulement après que vous avez configuré un point de terminaison et activé l’exportation @@ -74,11 +76,15 @@

Conservation

Ce site

Ce site est une page statique hébergée sur GitHub Pages et servie via Cloudflare. Il ne dépose aucun cookie et n’exécute aucune analytique. GitHub - et Cloudflare traitent les requêtes pour le servir, et les polices sont chargées depuis Google Fonts, qui reçoit votre adresse IP lors de votre visite.

+ et Cloudflare traitent les requêtes pour le servir. Les polices sont servies depuis ce domaine, donc l’affichage d’une page n’envoie rien à + personne d’autre — cette page les chargeait auparavant depuis Google, ce qui voulait dire que la page expliquant que Flowlight n’envoie rien + nulle part faisait une requête à Google pour s’afficher elle-même.

Contact

-

Une question ou une inquiétude sur la confidentialité ? Ouvrez un ticket. Pour tout sujet sensible, utilisez le - signalement privé de vulnérabilités de GitHub sur le dépôt.

+

Une question ou une inquiétude sur la confidentialité ? Ouvrez un ticket. Pour un problème de sécurité, utilisez le + signalement privé de vulnérabilités de GitHub, ou écrivez à + security@xinbetween.com si vous préférez ne pas passer par GitHub : voyez + SECURITY.md pour savoir à quoi vous attendre.

diff --git a/site/pages/fr/threat-model.html b/site/pages/fr/threat-model.html new file mode 100644 index 0000000..b509586 --- /dev/null +++ b/site/pages/fr/threat-model.html @@ -0,0 +1,129 @@ + +
+
+

Modèle de menaces

+

Observer, pas empêcher

+

Flowlight vous dit ce que les logiciels de votre Mac envoient, et où. Ce n’est pas une défense contre un attaquant qui + contrôle déjà la machine, et la différence compte assez pour être dite sur une page à elle plutôt qu’en note de bas de page.

+
+ +
+ + +
+

À quoi il sert

+

Flowlight répond à une question à laquelle le Mac ne répond pas : quelle app a envoyé ceci, et où est-ce parti ? Il est + fait pour les logiciels qui se comportent mal à découvert — un agent IA qui contacte quelque chose que personne ne lui a demandé, un outil qui + téléverse plus qu’il ne devrait, un processus qui parle à une adresse sans nom. Ce comportement est visible dans le trafic, et le travail de + Flowlight est de le rendre lisible, et de dire honnêtement quand il ne peut pas.

+

Ce n’est pas un antivirus, ni un agent EDR, ni un pare-feu au sens de quelque chose qui se tient entre vous et un attaquant. Là où les deux se + recouvrent — Flowlight peut refuser des connexions —, le refus est une commodité pour contrôler un logiciel auquel vous faites déjà confiance, + pas une barrière contre un logiciel auquel vous n’en faites pas.

+ +

Ce contre quoi il protège

+
    +
  • Une sortie de données passée inaperçue. Une app ou un agent qui envoie quelque part où vous ne l’auriez pas approuvé, y + compris par un outil qu’il a lancé lui-même. Flowlight attribue la connexion au processus qui l’a faite et à l’agent qui a lancé ce processus.
  • +
  • Des changements de comportement silencieux. Une app qui contacte soudain de nouvelles destinations, déplace bien plus que + sa référence, ou travaille pendant que vous êtes absent. Chaque alerte nomme le chiffre qui l’a déclenchée, pour que vous puissiez ne pas être + d’accord avec elle.
  • +
  • Un agent qui dépasse ce que vous avez autorisé. Une liste d’autorisation par agent, et des règles qui refusent les + connexions en dehors d’elle, avec le refus consigné et un clic pour l’autoriser.
  • +
  • Une mise à jour altérée. Chaque version publie une somme de contrôle ; le programme de mise à jour refuse un + téléchargement qu’il ne peut pas vérifier, et refuse d’installer une app qui n’est pas signée par la même équipe que la copie qui demande la + mise à jour.
  • +
+ +

Un logiciel avec root peut l’éteindre

+

Flowlight tourne en votre nom, avec une extension système que macOS lance pour lui. Tout ce qui tourne en root — ou tout ce dont vous + approuvez l’installateur — peut décharger cette extension, arrêter l’app ou supprimer sa base de données. Rien dans la conception ne l’empêche, + et aucun outil de surveillance sur macOS ne peut l’empêcher tout en restant un outil que vous pouvez aussi éteindre vous-même.

+

L’affirmation honnête est plus étroite et reste utile : un logiciel qui se comporte mal sans chercher activement à échapper à une + surveillance sera vu. Un logiciel qui y échappe activement, peut-être pas — et il laissera au moins un trou : une extension qui s’est + arrêtée, une période sans données. C’est ce que l’écran Couverture est là pour montrer.

+ +

Ce que la capture manque

+
    +
  • Le trafic antérieur au début de la capture. Il n’y a pas de rattrapage. Une connexion ouverte avant le filtre ne lui a + jamais été proposée.
  • +
  • Les services système dispensés des filtres de contenu. macOS ne montre pas tout à un filtre de contenu ; une partie + de son propre trafic n’atteint jamais le nôtre.
  • +
  • Un autre filtre de contenu qui détient la place. macOS n’en exécute qu’un à la fois. Si un VPN ou un agent de sécurité le + détient, le filtre de Flowlight s’installe, se connecte, et on ne lui demande jamais de filtrer quoi que ce soit — Capture le dit plutôt que + de montrer un écran vide.
  • +
  • Les connexions brèves, avec l’échantillonneur. Sans l’extension, Flowlight lit des compteurs une fois par seconde : + une connexion qui s’ouvre et se ferme entre deux relevés n’est jamais enregistrée.
  • +
  • Les canaux qui ne sont ni TCP ni UDP. Bluetooth et USB sont visibles comme appareils, pas comme octets. Le serveur MCP + local d’un agent qui parle par un tube n’est pas du trafic réseau du tout et n’apparaît nulle part.
  • +
+ +

Ce que l’inspection manque

+

L’inspection HTTPS ne lit que ce qui est acheminé par le proxy local de Flowlight, et c’est un programme qui en décide à son démarrage. Une + app qui ignore les réglages de proxy, une app lancée avant l’activation de l’inspection, ou une app qui épingle ses certificats passe sans être + touchée — délibérément, parce que casser une connexion épinglée casserait l’app. QUIC n’est pas proposé au proxy non plus.

+

Un écran Inspecter vide signifie donc « rien n’a été acheminé ici », pas « rien ne s’est passé ». Couverture dit laquelle + des deux s’applique, app par app.

+ +

Ce que le blocage est, et n’est pas

+

Une règle qui refuse des connexions est exécutée par l’extension réseau, sur le chemin, avant que la connexion ne soit faite. Une règle qui + nomme une URL est exécutée par le proxy d’inspection, qui répond à la requête avec un statut que l’app peut lire. Ce sont les deux seules + parties de Flowlight qui agissent au lieu de rapporter — l’échantillonneur nettop, lui, ne peut rien refuser du tout : sur un Mac qui + capture avec l’échantillonneur, aucune règle n’est appliquée, et Flowlight le dit plutôt que de proposer un interrupteur qui ne fait rien.

+

Ce n’est pourtant toujours pas empêcher. Un agent qui peut lancer un shell peut faire à la main ce que l’outil refusé aurait fait. Un refus que + vous pouvez annuler d’un clic est un refus que la tentative suivante d’un agent peut franchir. Le trafic local, le DNS, les services d’Apple et + les connexions de Flowlight lui-même ne sont jamais refusés, parce qu’un Mac bloqué est un pire résultat qu’un agent bloqué. Et l’application + des refus cesse quelques secondes après l’arrêt de Flowlight : un refus que personne ne peut voir est pire que pas de refus.

+

Inspection et refus ne se combinent pas. Le trafic passé par le proxy de Flowlight lui-même quitte le Mac comme du trafic de + Flowlight, et Flowlight ne se refuse jamais lui-même — une app dont vous lisez les requêtes est donc une app dont les règles n’arrêtent plus + les connexions. Activer l’inspection pour en voir plus vous coûte l’application des refus, et rien à l’écran ne le disait jusqu’ici.

+ +

Ce que Flowlight lui-même conserve

+

Des métadonnées de trafic dans une base de données SQLite locale, avec une durée de conservation publiée. Avec l’inspection HTTPS activée, il + conserve aussi les corps des requêtes et des réponses pendant trois jours — la chose la plus sensible qu’il garde jamais. Les en-têtes + d’identification sont masqués par nom et par mot, ce qui est une heuristique et non une garantie ; un en-tête qui porte un secret sous un + nom que rien ne reconnaît peut être enregistré.

+

La base de données de trafic n’est jamais téléversée. Trois choses plus petites quittent bien le Mac sans qu’on les demande, toutes trois + nommées sur la page Confidentialité : la recherche de mise à jour, qui demande à GitHub la dernière version + au lancement et une fois par jour ; la consultation du propriétaire du réseau, qui interroge Team Cymru sur les adresses publiques sans + nom d’hôte ; et, tant que Flowlight lit des compteurs au lieu de faire tourner son extension, une recherche DNS inverse des adresses dont + il n’a vu aucun nom. Les deux premières ont un interrupteur d’arrêt. La troisième non, parce que sur l’échantillonneur c’est l’essentiel de la + façon dont une connexion obtient un nom : elle va au résolveur que le Mac utilise déjà, et elle s’arrête dès que l’extension prend le + relais et nomme les connexions à partir du trafic lui-même. Demander avec un modèle hébergé envoie bien plus que n’importe laquelle d’entre + elles, et c’est la seule chose qui reste désactivée jusqu’à ce que vous la configuriez.

+ +

Mises à jour

+

Les versions sont signées avec un Developer ID et notarisées. Le programme de mise à jour exige une somme de contrôle publiée et refuse un + téléchargement qui n’en a pas, puis vérifie que l’app téléchargée est signée par la même équipe que la copie en cours d’exécution avant de + l’installer. Une mise à jour signée par quelqu’un d’autre est refusée, même si elle est valide par ailleurs.

+ +

Signaler une vulnérabilité

+

Utilisez le signalement privé de vulnérabilités de GitHub, ou écrivez à + security@xinbetween.com si vous préférez ne pas passer par GitHub. + SECURITY.md dit ce qui entre dans le périmètre et ce à quoi vous attendre. + Un bug ordinaire — un plantage, un chiffre faux, un écran trompeur — va plutôt dans + les tickets.

+
+
+
diff --git a/site/pages/index.html b/site/pages/index.html index d6ecae8..b1f4444 100644 --- a/site/pages/index.html +++ b/site/pages/index.html @@ -163,7 +163,9 @@

Monitor how AI agents use the network

Rules, for as long as you say

Name an app, an agent, a destination or a single URL and block it — right-click the row you spotted it in. Forever, until a time, until Flowlight quits, or between chosen hours, with one pause switch and a way out on - every refusal. The most specific rule wins, and a tie goes to the block.

+ every refusal. The most specific rule wins, and a tie goes to the block. It is control over software you + already trust, not a barrier against software you don't — see the threat + model.

Cursor ⇥ raw.githubusercontent.com · refused 4 times · weekdays 18:00–09:00

@@ -345,16 +347,14 @@

Correlate supported tool calls with network requests

Next

What's coming

-

Flowlight watches, explains and refuses today. This is the order the rest is being built in.

+

Flowlight watches, explains and refuses today — monitoring rather than prevention, as the + threat model sets out. This is the order the rest is being built in.

-
Coverage, stated rather than assumed 0.9.0

Per app: watched by the extension, decrypted by the proxy, named only by DNS or SNI, or not covered at all — and why, with the fix where there is one. A tool that claims completeness is worth less than one you can trust about its own limits.

-
Inspect it from where you found it 0.9.1

Right-click a row in Live, Reports or AI Agents and Inspect opens already looking at that app or destination — instead of changing screen and retyping the name into a search field.

-
A threat model, written down 0.9.2

What Flowlight defends against and what it doesn't, on one page: software misbehaving in the open, not software with root. Monitoring, not prevention, said beside every mention of blocking. Plus a security contact, and fonts served from here rather than from Google.

A budget for inspection 0.9.3

Recorded bodies are the most sensitive thing Flowlight holds. A header allowlist instead of a denylist, patterns of your own, an option to keep no headers at all, per-app ceilings, and a session that expires by itself.

Show me what this rule would have done 0.9.4

Replay the last day against a rule and list what it would have refused, before it refuses anything. The data is already there; it has only ever explained the past.

What leaves the Mac, before it leaves 0.9.5

Before the first row reaches a collector: the destination, whether it's encrypted, which fields travel and whether any are headers — the disclosure Flowlight demands of everything else, applied to itself.

-
What an agent did besides the network 1.0

A file leaving is a read and then a send, and only the send is visible today. Recording what an agent's tools opened, wrote and spawned would make read the private key, then talked to paste.example one finding instead of two screens. Not a resource monitor: CPU and memory are Activity Monitor's job. Needs Apple's EndpointSecurity entitlement, and needs the inspection budget above to exist first.

+
What an agent did off the network 1.0

A file leaving is a read and then a send, and only the send is visible today. Recording what an agent's tools opened, wrote and spawned would make read the private key, then talked to paste.example one finding instead of two screens. Not a resource monitor: CPU and memory are Activity Monitor's job. Needs Apple's EndpointSecurity entitlement, and needs the inspection budget above to exist first.

Linux, then Windows

The analysis core is portable Swift; capture isn't. A Linux daemon with a local web UI comes first, on eBPF rather than macOS APIs.

diff --git a/site/pages/it/docs.html b/site/pages/it/docs.html index 5b66d5d..cc93887 100644 --- a/site/pages/it/docs.html +++ b/site/pages/it/docs.html @@ -35,7 +35,7 @@

Usare Flowlight

Impostazioni e dati @@ -95,12 +95,20 @@

Le viste

- + - - - + + + + + + +
VistaScorciatoiaA cosa risponde
In diretta⌘1Cosa si muove adesso: velocità per app negli ultimi secondi e la destinazione più trafficata.
Agenti IA⌘2Quali agenti sono attivi, quali provider IA usano e cos'altro hanno contattato.
Agenti IA⌘2Quali agenti sono attivi, quali provider IA usano e cos'altro hanno contattato.
Rapporti⌘3Dove è andato il traffico, dal secondo all'anno. Raggruppa per App, Destinazione o IP; passa a Grafici o a Vale un'occhiata; esporta in CSV.
Avvisi⌘4Tutto ciò che è sembrato insolito, con l'app, la destinazione e il numero che ha fatto scattare la regola.
Ispeziona⌘5Opzionale: le richieste decifrate degli agenti che instradi attraverso Flowlight e le chiamate agli strumenti che le hanno prodotte. La ricerca entra nei corpi di richieste e risposte.
Acquisizione⌘6Quale motore sta registrando, lo stato dell'estensione, l'apprendimento dei nomi host e dove si trova il database.
Avvisi⌘4Tutto ciò che è sembrato insolito, con l'app, la destinazione e il numero che ha fatto scattare la regola.
Regole⌘5Ogni elenco consentiti e ogni rifiuto che hai impostato, cosa copre ciascuno e cosa ha fermato davvero.
Chiedi⌘6Domande sul tuo traffico in linguaggio naturale, a cui un modello locale o ospitato risponde a partire dalla cronologia registrata.
Ispeziona⌘7Opzionale: le richieste decifrate degli agenti che instradi attraverso Flowlight e le chiamate agli strumenti che le hanno prodotte. La ricerca entra nei corpi di richieste e risposte.
Dispositivi⌘8Disattivato finché non lo attivi: Bluetooth, USB e archiviazione esterna, che un Mac usa tanto quanto usa la rete.
Copertura⌘9Ciò che Flowlight non può contabilizzare — per ogni app, se il suo traffico è stato visto, nominato e leggibile.
Acquisizione⌘0Quale motore sta registrando, lo stato dell'estensione, l'apprendimento dei nomi host e dove si trova il database.
+

Le scorciatoie sono l'ordine della barra laterale, quindi ⌘0 è il decimo elemento e non una posizione omessa.

+
La schermata In diretta: un elenco di applicazioni con le loro velocità attuali di invio e ricezione e la destinazione più trafficata.
+
In diretta, la schermata con cui Flowlight si apre.

In Rapporti, passa il puntatore su una barra per vedere quali app l'hanno generata, fai clic per ingrandire e doppio clic su una riga per limitare il rapporto a essa.

Regole per gli agenti IA

@@ -234,10 +242,16 @@

Ispezione HTTPS (opzionale)

e avviali da lì. In Avanzate puoi decifrare solo gli agenti IA invece di tutte le app, modificare l'elenco di quelli mai decifrati, copiare la configurazione shell per una shell, oppure rimuovere il certificato e tutto ciò che è stato registrato.

Flowlight esclude dalla decifrazione il proprio elenco integrato di servizi Apple e gestori di password (modifica l'elenco in Configura). Le app che applicano il pinning dei certificati possono rifiutare il - certificato di Flowlight; Flowlight lo rileva e le inoltra cifrate. Chiavi API, cookie e altre intestazioni con credenziali non vengono mai - memorizzate, le richieste registrate vengono conservate 3 giorni e Rimuovi certificato e dati registrati elimina il certificato, la sua + certificato di Flowlight; Flowlight lo rileva e le inoltra cifrate. Chiavi API, cookie e altre intestazioni con credenziali vengono sostituite con la loro + lunghezza prima che qualsiasi cosa venga memorizzata — riconosciute per nome e per le parole nel nome, cosa che intercetta la grafia particolare + di un fornitore ma non può promettere di intercettarle tutte —, le richieste registrate vengono conservate 3 giorni e Rimuovi certificato e dati registrati elimina il certificato, la sua impostazione di attendibilità e tutto ciò che è stato registrato. L'ispezione è solo HTTP/1.1 (Flowlight lo richiede a entrambe le parti) e non è disponibile in modalità demo.

+

Come arrivarci da una riga. Fai clic destro su un'app o su una destinazione in In diretta, Rapporti o Agenti IA e scegli + Ispeziona il traffico di …: Ispeziona si apre con quel nome già nel campo di ricerca. Che sia il campo di ricerca e non un + filtro nascosto è voluto — puoi allargarlo, restringerlo o svuotarlo senza tornare da dove sei partito. Può comparire solo il traffico che è + passato dal proxy, quindi una riga che sai essere attiva può comunque non mostrare nulla qui.

+

Risposte simulate

Per vedere come reagisce un agente quando un'API fallisce, si blocca o restituisce qualcosa di strano, rispondi tu a quell'endpoint. In Ispeziona › Risposte simulate, una regola indica un host, un percorso e un metodo, e fornisce lo stato, le intestazioni, il corpo e un @@ -367,6 +381,25 @@

Acquisizione: motori e origini

non richiede alcun filtro e convive con loro. Vedi la guida per sviluppatori per come è costruito.

+

Copertura: ciò che Flowlight non può contabilizzare

+

Ogni altra schermata risponde a che cosa è successo. Copertura risponde a che cosa non ti sarebbe stato detto, ed è questo a + decidere quanto valgono le altre schermate. Fa tre domande per ogni app, perché falliscono in modo indipendente.

+

È stato visto? L'estensione di rete vede ogni flusso nel momento in cui si apre. Il campionatore nettop legge i contatori una + volta al secondo, quindi una connessione che si apre e si chiude tra due letture — una rapida risoluzione DNS, una chiamata API veloce, uno + script che esegue curl ed esce — manca del tutto. È una lacuna che nessuna percentuale può esprimere, perciò viene detta a parole + anziché misurata.

+

È stato nominato? La quota dei byte di quell'app andati a una destinazione con un nome host anziché a un semplice + indirizzo. Byte, non connessioni: una connessione senza nome che porta un gigabyte è un buco più grande di cento che ne portano un kilobyte + ciascuna, e contare le connessioni le ordina al contrario.

+

Era leggibile? Se l'ispezione HTTPS ha decifrato qualcosa del traffico di quell'app. Quattro risposte, e una sola è una + lacuna: viene letto; non ha mai raggiunto il proxy; l'app è nell'elenco Mai decifrati, che è una scelta tua; oppure l'ispezione è disattivata, + che è un'impostazione e non un fallimento app per app.

+

Ciò che nessun motore vede affatto è elencato nella schermata stessa e non lasciato a questa pagina: il traffico precedente + all'avvio dell'acquisizione, i servizi di sistema che non vengono mai mostrati ai filtri contenuti, le app che applicano il pinning dei + certificati, il QUIC che non viene mai offerto al proxy e il server MCP locale di un agente che gli parla tramite pipe. Nulla di questo compare + in alcun punto di Flowlight, quindi manca anche da queste cifre — una cifra di copertura che contasse solo ciò che riesce a vedere sarebbe una + rassicurazione e non un fatto.

+

Dispositivi: Bluetooth, USB e archiviazione esterna

Un Mac invia e riceve oltre TCP e UDP. La schermata Dispositivi copre il resto, ed è disattivata finché non la attivi — non perché serva un permesso che Flowlight non ha già, ma perché monitorare una parte più ampia del tuo @@ -494,8 +527,9 @@

Domande e risposte

Mostra quali estensioni sono installate, se macOS ha davvero avviato il filtro di Flowlight e quanto di recente è stato registrato qualcosa. Incollalo in una segnalazione.
Flowlight invia da qualche parte informazioni su di me?
-
No. Non c'è account, non c'è telemetria, non ci sono analisi. Le sole richieste che fa sono il controllo giornaliero degli aggiornamenti, le ricerche - facoltative sul proprietario della rete e il DNS inverso — ognuna elencata e ognuna con un interruttore per disattivarla, nella pagina sulla privacy.
+
Nessun account, nessuna telemetria, nessuna analisi, e il tuo database del traffico non viene mai caricato. Tre richieste lasciano il Mac, tutte elencate nella + pagina sulla privacy: il controllo giornaliero degli aggiornamenti e la ricerca facoltativa sul proprietario della rete, entrambe con + un interruttore per disattivarle, e il DNS inverso finché Flowlight è sul campionatore, che non ne ha uno — senza di esso il campionatore non potrebbe dare un nome alla maggior parte delle connessioni.
Rallenta il Mac o consuma la batteria?
Con la finestra chiusa Flowlight fa quasi nulla: mantiene le velocità nella barra dei menu e scrive una riga al secondo. L'estensione di rete costa meno del campionatore di riserva, che avvia un breve processo nettop ogni secondo.
diff --git a/site/pages/it/index.html b/site/pages/it/index.html index cf6ca3e..09699a5 100644 --- a/site/pages/it/index.html +++ b/site/pages/it/index.html @@ -162,7 +162,9 @@

Controlla come gli agenti IA usano la rete

Regole, per il tempo che decidi tu

Indica un'app, un agente, una destinazione o un singolo URL e bloccalo: fai clic con il tasto destro sulla riga in cui l'hai notato. Per sempre, fino a un orario, fino alla chiusura di Flowlight o in una fascia oraria scelta, con un interruttore di pausa e una via d'uscita - a ogni rifiuto. Vince la regola più specifica e, a parità, vince il blocco.

+ a ogni rifiuto. Vince la regola più specifica e, a parità, vince il blocco. + È controllo sul software di cui ti fidi già, non una barriera contro il + software di cui non ti fidi — vedi il modello di minaccia.

Cursor ⇥ raw.githubusercontent.com · rifiutata 4 volte · nei giorni feriali 18:00–09:00

@@ -344,9 +346,14 @@

Collega le chiamate agli strumenti supportate alle richieste di rete

Prossimi passi

Cosa arriva

-

Oggi Flowlight osserva, spiega e rifiuta. Questo è l'ordine in cui viene costruito il resto.

+

Oggi Flowlight osserva, spiega e rifiuta — osservare, non impedire, come spiega il + modello di minaccia. Questo è l'ordine in cui viene costruito il resto.

+
Un budget per l'ispezione 0.9.3

I corpi registrati sono la cosa più delicata che Flowlight conservi. Un elenco consentiti per le intestazioni invece di un elenco bloccati, schemi tuoi, l'opzione di non conservare alcuna intestazione, tetti per ogni app e una sessione che scade da sé.

+
Mostrami cosa avrebbe fatto questa regola 0.9.4

Riproduci l'ultimo giorno contro una regola ed elenca ciò che avrebbe rifiutato, prima che rifiuti qualsiasi cosa. I dati sono già lì; finora hanno soltanto spiegato il passato.

+
Cosa lascia il Mac, prima che lo lasci 0.9.5

Prima che la prima riga raggiunga un collector: la destinazione, se è cifrata, quali campi viaggiano e se qualcuno è un'intestazione — la trasparenza che Flowlight pretende da tutto il resto, applicata a sé stesso.

+
Cosa ha fatto un agente oltre alla rete 1.0

Un file che esce è prima una lettura e poi un invio, e oggi è visibile solo l'invio. Registrare cosa hanno aperto, scritto e avviato gli strumenti di un agente renderebbe ha letto la chiave privata, poi ha parlato con paste.example un solo rilievo invece di due schermate. Non è un monitor delle risorse: CPU e memoria sono compito di Monitoraggio Attività. Richiede l'entitlement EndpointSecurity di Apple, e richiede che il budget di ispezione qui sopra esista prima.

Prima Linux, poi Windows

Il nucleo di analisi è Swift portabile; l'acquisizione no. Arriva prima un daemon Linux con un'interfaccia web locale, basato su eBPF invece che sulle API di macOS.

diff --git a/site/pages/it/privacy.html b/site/pages/it/privacy.html index 9b337c5..7023734 100644 --- a/site/pages/it/privacy.html +++ b/site/pages/it/privacy.html @@ -46,7 +46,9 @@

Ispezione HTTPS

Disattivata per impostazione predefinita. Se la attivi, Flowlight crea un'autorità di certificazione sul tuo Mac (la sua chiave non lascia mai ~/Library/Application Support/Flowlight/Inspection) e avvia un proxy che accetta connessioni solo da questo Mac. Per le app che instradi attraverso di esso registra richieste e risposte, compresi i corpi fino a 2 MB, nel database locale per 3 giorni. Le intestazioni con credenziali - (Authorization, cookie, chiavi API) vengono sostituite con la loro lunghezza prima che qualsiasi cosa venga archiviata. Flowlight esclude dalla decifrazione il proprio elenco integrato di servizi Apple e gestori di password. I dati registrati dall'ispezione non vengono caricati da Flowlight. Disattivando l'ispezione il proxy si arresta; Rimuovi certificato e dati + vengono sostituite con la loro lunghezza prima che qualsiasi cosa venga archiviata — riconosciute per nome (Authorization, cookie, chiavi API) e + per le parole nel nome, così che anche X-Access-Key venga intercettata. È un'euristica, non una garanzia: un'intestazione che porti un + segreto sotto un nome che nulla riconosce verrebbe registrata. Flowlight esclude dalla decifrazione il proprio elenco integrato di servizi Apple e gestori di password. I dati registrati dall'ispezione non vengono caricati da Flowlight. Disattivando l'ispezione il proxy si arresta; Rimuovi certificato e dati registrati elimina il certificato, la sua impostazione di attendibilità e tutte le richieste registrate.

Richieste di rete che fa l'app

@@ -54,7 +56,7 @@

Richieste di rete che fa l'app

RichiestaInviata aCosa contieneQuando Controllo aggiornamentiapi.github.comUna normale richiesta HTTPS per l'ultima versione; GitHub vede il tuo indirizzo IP e lo user agent Flowlight/<version>All'avvio e una volta al giorno, dalla 0.1.2. Interruttore per disattivarla in Impostazioni › Generali Download dell'aggiornamentogithub.comL'immagine disco e il suo file di checksumSolo quando fai clic su Scarica e apri - DNS inversoIl resolver DNS che hai configuratoUna ricerca del nome registrato di un indirizzo IP, quando non è stato rilevato alcun nome hostQuando serve, nella modalità di acquisizione predefinita + DNS inversoIl resolver DNS che hai configuratoUna ricerca del nome registrato di un indirizzo IP, quando non è stato rilevato alcun nome hostQuando serve, nella modalità di acquisizione a campionamento, che è quella predefinita finché l'estensione di rete non è in funzione. Nessun interruttore per disattivarla: senza di essa il campionatore non può dare un nome alla maggior parte delle connessioni. L'estensione di rete le nomina dal traffico stesso e non fa questa ricerca Ricerca del proprietario della reteTeam Cymru, via DNSIndirizzi IP pubblici senza nome host noto. Gli indirizzi privati e riservati non lasciano mai il tuo MacAttiva per impostazione predefinita. Interruttore per disattivarla in Acquisizione › Identifica i proprietari della rete Chiedi con un modello ospitatoIl provider che selezioni: Anthropic, OpenAI, Google Gemini o un endpoint compatibileLa tua domanda e i risultati restituiti dalle query di sola lettura di Flowlight selezionate dal modello. Il database del traffico non viene caricatoSolo quando selezioni un provider ospitato e invii una domanda. La schermata Chiedi mostra le richieste trasmesse Esportazione verso un collectorL'endpoint OpenTelemetry o HTTP che configuriI campi mostrati in Impostazioni › Esportazione, come le aggregazioni del traffico e gli avvisi. Le intestazioni di autenticazione sono conservate nel portachiaviSolo dopo che hai configurato un endpoint e attivato l'esportazione @@ -74,11 +76,15 @@

Conservazione

Questo sito

Questo sito è una pagina statica ospitata su GitHub Pages e distribuita tramite Cloudflare. Non imposta cookie e non esegue analisi. GitHub - e Cloudflare elaborano le richieste per distribuirlo, e i caratteri vengono caricati da Google Fonts, che riceve il tuo indirizzo IP quando lo visiti.

+ e Cloudflare elaborano le richieste per distribuirlo. I caratteri vengono serviti da questo dominio, quindi visualizzare una pagina non manda + nulla a nessun altro — questa pagina prima li caricava da Google, il che significava che la pagina che spiega come Flowlight non mandi nulla + da nessuna parte faceva una richiesta a Google per visualizzare se stessa.

Contatti

-

Domande o dubbi sulla privacy? Apri una segnalazione. Per qualsiasi cosa delicata, usa la - segnalazione privata delle vulnerabilità di GitHub sul repository.

+

Domande o dubbi sulla privacy? Apri una segnalazione. Per un problema di sicurezza usa la + segnalazione privata delle vulnerabilità di GitHub, oppure scrivi a + security@xinbetween.com se preferisci non usare GitHub: vedi + SECURITY.md per sapere cosa aspettarti.

diff --git a/site/pages/it/threat-model.html b/site/pages/it/threat-model.html new file mode 100644 index 0000000..5dffcd0 --- /dev/null +++ b/site/pages/it/threat-model.html @@ -0,0 +1,127 @@ + +
+
+

Modello di minaccia

+

Osservare, non impedire

+

Flowlight ti dice cosa sta inviando il software sul tuo Mac, e dove. Non è una difesa contro un attaccante che + controlla già la macchina, e la differenza conta abbastanza da stare su una pagina tutta sua invece che in una nota.

+
+ +
+ + +
+

A cosa serve

+

Flowlight risponde a una domanda a cui il Mac non risponde: quale app ha inviato questo, e dove è andato? È costruito per il + software che si comporta male alla luce del sole — un agente IA che contatta qualcosa che nessuno gli ha chiesto, uno strumento che carica più + del dovuto, un processo che parla con un indirizzo senza nome. Quel comportamento è visibile nel traffico, e il compito di Flowlight è renderlo + leggibile e dire onestamente quando non ci riesce.

+

Non è un antivirus, non è un agente EDR e non è un firewall nel senso di qualcosa che si mette tra te e un attaccante. Dove le due cose si + sovrappongono — Flowlight può rifiutare connessioni — il rifiuto è una comodità per controllare software di cui ti fidi già, non una barriera + contro software di cui non ti fidi.

+ +

Da cosa difende

+
    +
  • Dati che escono inosservati. Un'app o un agente che invia da qualche parte dove non l'avresti approvato, anche attraverso + uno strumento che ha eseguito lui stesso. Flowlight attribuisce la connessione al processo che l'ha fatta e all'agente che ha avviato quel + processo.
  • +
  • Cambi di comportamento silenziosi. Un'app che all'improvviso contatta destinazioni nuove, muove molto più della sua linea + di base o lavora mentre sei via. Ogni avviso indica il numero che l'ha fatto scattare, così puoi non essere d'accordo.
  • +
  • Un agente che va oltre ciò che hai consentito. Un elenco consentiti per ogni agente, e regole che rifiutano le connessioni + fuori da quell'elenco, con il rifiuto registrato e un clic per consentirla.
  • +
  • Un aggiornamento manomesso. Ogni versione pubblica una checksum; l'aggiornamento rifiuta un download che non può + verificare e rifiuta di installare un'app che non sia firmata dallo stesso team della copia che sta chiedendo l'aggiornamento.
  • +
+ +

Il software con root può spegnerlo

+

Flowlight gira come te, con un'estensione di sistema che macOS avvia per suo conto. Qualsiasi cosa giri come root — o qualsiasi cosa di cui + approvi l'installer — può scaricare quell'estensione, fermare l'app o eliminare il suo database. Nulla nel progetto lo impedisce, e nessuno + strumento di monitoraggio su macOS può impedirlo e restare al tempo stesso uno strumento che puoi spegnere anche tu.

+

L'affermazione onesta è più stretta e resta utile: il software che si comporta male ma non sta attivamente sfuggendo a un monitoraggio viene + visto. Il software che vi sta attivamente sfuggendo può non essere visto, e lascerà almeno un buco — un'estensione che si è fermata, un periodo + senza dati — che la schermata Copertura è lì per mostrare.

+ +

Cosa sfugge all'acquisizione

+
    +
  • Il traffico precedente all'avvio dell'acquisizione. Non c'è nessun recupero a posteriori. Una connessione aperta prima del + filtro non gli è mai stata offerta.
  • +
  • I servizi di sistema esenti dai filtri di contenuto. macOS non mostra tutto a un filtro di contenuto; una parte del suo + traffico non arriva mai al nostro.
  • +
  • Un altro filtro di contenuto che occupa il posto. macOS ne esegue uno alla volta. Se ce l'ha una VPN o un agente di + sicurezza, il filtro di Flowlight si installa, si connette e non gli viene mai chiesto di filtrare nulla: Acquisizione lo dice, invece di + mostrare una schermata vuota.
  • +
  • Le connessioni brevi, con il campionatore. Senza l'estensione, Flowlight legge i contatori una volta al secondo: una + connessione che si apre e si chiude tra due letture non viene mai registrata.
  • +
  • I canali che non sono TCP o UDP. Bluetooth e USB si vedono come dispositivi, non come byte. Il server MCP locale di un + agente che comunica tramite una pipe non è affatto traffico di rete e non compare da nessuna parte.
  • +
+ +

Cosa sfugge all'ispezione

+

L'ispezione HTTPS legge solo ciò che viene instradato attraverso il proxy locale di Flowlight, e questo lo decide un programma quando parte. + Un'app che ignora le impostazioni proxy, una avviata prima che l'ispezione fosse attivata, o una che applica il pinning dei certificati passa + intatta — deliberatamente, perché rompere una connessione con pinning romperebbe l'app. Nemmeno QUIC viene offerto al proxy.

+

Quindi una schermata Ispeziona vuota significa «qui non è stato instradato nulla», non «non è successo nulla». Copertura dice quale delle due + cose valga, app per app.

+ +

Cosa è, e cosa non è, il blocco

+

Una regola che rifiuta le connessioni viene eseguita dall'estensione di rete, sul percorso, prima che la connessione venga stabilita. Una + regola che nomina un URL viene eseguita invece dal proxy di ispezione, che risponde alla richiesta con uno stato che l'app può leggere. Sono le + sole due parti di Flowlight che agiscono invece di riferire — il campionatore nettop non può rifiutare proprio nulla, quindi su un Mac che + acquisisce con il campionatore nessuna regola viene applicata, e Flowlight lo dice invece di offrire un interruttore che non fa niente.

+

Non è comunque impedire. Un agente che può eseguire una shell può fare a mano ciò che avrebbe fatto lo strumento rifiutato. Un rifiuto che + puoi annullare con un clic è un rifiuto attraverso cui il tentativo successivo di un agente può passare. Il traffico locale, il DNS, i servizi + di Apple e le connessioni di Flowlight stesso non vengono mai rifiutati, perché un Mac bloccato è un esito peggiore di un agente bloccato. E + l'applicazione decade pochi secondi dopo che Flowlight smette di funzionare: un rifiuto che nessuno può vedere è peggio di nessun rifiuto.

+

Ispezione e rifiuto non si combinano. Il traffico instradato attraverso il proxy di Flowlight stesso lascia il Mac come + traffico di Flowlight, e Flowlight non rifiuta mai se stesso — quindi un'app di cui stai leggendo le richieste è un'app le cui connessioni le + regole non fermano più. Attivare l'ispezione per vedere di più ti costa l'applicazione delle regole, e finora nulla sullo schermo lo diceva.

+ +

Cosa conserva Flowlight stesso

+

Metadati del traffico in un database SQLite locale, con una conservazione pubblicata. Con l'ispezione HTTPS attiva conserva anche i corpi delle + richieste e delle risposte per tre giorni — la cosa più delicata che arrivi mai a tenere. Le intestazioni con credenziali vengono oscurate per + nome e per parola, che è un'euristica e non una garanzia; un'intestazione che porta un segreto sotto un nome che nulla riconosce può essere + registrata.

+

Il database del traffico non viene mai caricato. Tre cose più piccole lasciano il Mac senza che nessuno le chieda, tutte e tre nominate nella + pagina sulla privacy: il controllo degli aggiornamenti, che chiede a GitHub l'ultima versione all'avvio e una + volta al giorno; la ricerca del proprietario della rete, che chiede a Team Cymru degli indirizzi pubblici senza nome host; e, finché Flowlight + legge i contatori invece di far girare la sua estensione, una ricerca DNS inversa degli indirizzi per cui non ha visto alcun nome. Le prime due + hanno un interruttore per disattivarle. La terza no, perché sul campionatore è in gran parte il modo in cui una connessione arriva ad avere un + nome: va al resolver che il Mac già usa, e si ferma appena l'estensione prende il suo posto e nomina le connessioni dal traffico stesso. Chiedi + con un modello ospitato invia molto più di ognuna di esse, ed è la sola cosa che resta disattivata finché non la configuri.

+ +

Aggiornamenti

+

Le versioni sono firmate con un Developer ID e notarizzate. L'aggiornamento richiede una checksum pubblicata e rifiuta un download che non ne + ha una, poi verifica che l'app scaricata sia firmata dallo stesso team della copia in esecuzione prima di installarla. Un aggiornamento firmato + da qualcun altro viene rifiutato anche se per il resto è valido.

+ +

Segnalare una vulnerabilità

+

Usa la segnalazione privata delle vulnerabilità di GitHub, oppure scrivi a + security@xinbetween.com se preferisci non usare GitHub. + SECURITY.md dice cosa rientra nell'ambito e cosa aspettarsi. + Un bug ordinario — un crash, un numero sbagliato, una schermata fuorviante — va invece nelle + segnalazioni.

+
+
+
diff --git a/site/pages/ja/docs.html b/site/pages/ja/docs.html index be16248..9b10d0f 100644 --- a/site/pages/ja/docs.html +++ b/site/pages/ja/docs.html @@ -35,7 +35,7 @@

Flowlight の使い方

設定とデータ @@ -93,12 +93,20 @@

各ビュー

ビューショートカット答えてくれること ライブ⌘1いま何が動いているか。直近数秒間のアプリごとの速度と、最も忙しい接続先。 - AI エージェント⌘2どのエージェントが動いていて、どの AI プロバイダを使い、ほかに何と通信したか。 + AI エージェント⌘2どのエージェントが動いていて、どの AI プロバイダを使い、ほかに何と通信したか。 レポート⌘3トラフィックがどこへ行ったか。秒から年まで。アプリ・接続先・IP でグループ化し、グラフや気になるものに切り替え、CSV に書き出せます。 - アラート⌘4いつもと違って見えたものすべて。アプリ、接続先、そしてルールのしきい値を超えた数値とともに。 - インスペクト⌘5任意。Flowlight を経由させたエージェントの復号済みリクエストと、その裏にあるツール呼び出し。検索はリクエストとレスポンスの本文にも届きます。 - キャプチャ⌘6どのエンジンで記録しているか、機能拡張の状態、ホスト名の学習、そしてデータベースの場所。 + アラート⌘4いつもと違って見えたものすべて。アプリ、接続先、そしてルールのしきい値を超えた数値とともに。 + ルール⌘5設定したすべての許可リストと拒否。それぞれが何を対象にし、実際に何を止めたか。 + 質問⌘6自分のトラフィックについての、ふつうの言葉での質問。記録された履歴から、ローカルまたはホスト型のモデルが答えます。 + インスペクト⌘7任意。Flowlight を経由させたエージェントの復号済みリクエストと、その裏にあるツール呼び出し。検索はリクエストとレスポンスの本文にも届きます。 + デバイス⌘8オンにするまではオフ。Bluetooth、USB、外部ストレージ。Mac はネットワークと同じくらいこれらを使います。 + カバー範囲⌘9Flowlight が把握できないもの。アプリごとに、その通信が見えたか、名前が付いたか、読めたか。 + キャプチャ⌘0どのエンジンで記録しているか、機能拡張の状態、ホスト名の学習、そしてデータベースの場所。 +

ショートカットはサイドバーの並び順なので、⌘0 は飛ばされた番号ではなく 10 番目の項目です。

+
ライブビュー。アプリの一覧に、現在の送信と受信の速度、そして最も忙しい接続先が並んでいます。
+
ライブ。Flowlight が最初に開く画面です。

レポートでは、棒にポインタを重ねるとどのアプリが押し上げたかがわかり、クリックすると拡大、どの行でもダブルクリックするとその行だけにレポートを絞り込めます。

AI エージェントのルール

@@ -224,10 +232,16 @@

HTTPS インスペクション(任意)

インスペクト用のターミナルを開くを使い、そこから起動してください。詳細では、すべてのアプリではなく AI エージェントだけを復号する、 復号しないホストのリストを編集する、1 つのシェル用の設定をコピーする、証明書と記録したすべてを削除するといった操作ができます。

Flowlight は内蔵の一覧にある Apple のサービスとパスワード管理アプリを復号の対象から除外します(リストは「設定」で編集できます)。証明書をピン留めしているアプリは - Flowlight の証明書を拒否することがあります。Flowlight はそれを検知し、暗号化されたまま通過させます。API キー、Cookie、その他の認証情報ヘッダは保存されません。 + Flowlight の証明書を拒否することがあります。Flowlight はそれを検知し、暗号化されたまま通過させます。API キー、Cookie、その他の認証情報ヘッダは、保存される前にその長さに置き換えられます。 + 名前と、名前に含まれる語で照合するので、ベンダー独自の綴りも捕まえますが、すべてを捕まえると約束はできません。 記録したリクエストの保持期間は 3 日で、証明書と記録データを削除すると、証明書、その信頼設定、記録したすべてが削除されます。 インスペクションは HTTP/1.1 のみ(Flowlight が両側にそれを要求します)で、デモモードでは利用できません。

+

行から辿ってここへ来る。ライブ、レポート、AI エージェントでアプリや宛先を右クリックし、 + … のトラフィックをインスペクトを選ぶと、その名前が検索欄に入った状態でインスペクトが開きます。隠れたフィルタではなく + 検索欄にしてあるのは意図的です。始めた場所に戻らなくても、広げたり、絞ったり、消したりできます。現れるのはプロキシを通った + トラフィックだけなので、よく動いていると分かっている行でも、ここには何も出ないことがあります。

+

モック応答

API が失敗したり、止まったり、おかしなものを返したときにエージェントがどう振る舞うかを見るには、そのエンドポイントに自分で応答します。 インスペクト › モック応答では、1 つのルールがホスト、パス、メソッドを指定し、返すステータス、ヘッダ、本文、そして任意の遅延を決めます。 @@ -341,6 +355,23 @@

キャプチャ:エンジンとソ 接続を 1 件も渡されません。キャプチャは見つけたものを一覧にし、フィルタを必要とせずそれらと並んで動くサンプラーへ戻すことを申し出ます。 どう作られているかは開発者向けガイドをご覧ください。

+

カバー範囲:Flowlight が把握できないもの

+

ほかの画面はどれも、何が起きたかに答えます。カバー範囲が答えるのは、何が伝えられなかったはずかであり、それが + ほかの画面にどれだけの価値があるかを決めます。アプリごとに 3 つの問いを立てます。3 つは互いに独立して失敗するからです。

+

見えていたか。ネットワーク機能拡張は、それぞれのフローが開かれた時点で見ています。nettop サンプラーは 1 秒に + 1 回カウンタを読むので、2 回の読み取りの間に開いて閉じる接続、たとえば DNS 照会、速い API 呼び出し、curl を実行して + 終了するスクリプトは、まるごと欠けます。これはどんなパーセンテージでも表せない欠落なので、数値ではなく言葉で書いてあります。

+

名前が付いていたか。そのアプリのバイト数のうち、単なるアドレスではなくホスト名のある宛先に向かった + 割合です。接続数ではなくバイト数です。1 ギガバイトを運ぶ名前のない接続 1 本は、1 キロバイトずつ運ぶ接続 100 本より大きな穴で、 + 接続数で数えると順序が逆になります。

+

中身が読めたか。そのアプリのトラフィックを HTTPS インスペクションが少しでも復号したかどうかです。答えは 4 つあり、 + 欠落はそのうち 1 つだけです。読めている。プロキシに届いていない。「復号しないホスト」に入っている(これはあなたの選択です)。 + あるいはインスペクションがオフである(これは設定であって、アプリごとの失敗ではありません)。

+

どのエンジンにもまったく見えないものは、このページに任せず画面そのものに挙げてあります。キャプチャを始める前の + トラフィック、コンテンツフィルタに一度も見せられないシステムサービス、証明書をピン留めしているアプリ、プロキシに一度も渡されない + QUIC、そしてパイプで話すエージェントのローカル MCP サーバです。これらは Flowlight のどこにも現れないため、ここの数値にも + 入っていません。見えるものだけを数えたカバー範囲の数値は、事実ではなく安心材料になってしまいます。

+

デバイス:Bluetooth、USB、外部ストレージ

Mac が送受信する経路は TCP と UDP だけではありません。デバイス画面が残りを扱います。この画面は、自分でオンにするまではオフです。 Flowlight がまだ持っていない権限を必要とするからではなく、Mac をより広く監視するかどうかは、アップデートが勝手に決めることではなく、あなたが決めることだからです。

@@ -461,8 +492,10 @@

質問と回答

どの機能拡張がインストールされているか、macOS が本当に Flowlight のフィルタを起動したか、最後に何かが記録されたのはいつかがわかります。 issue に貼り付けてください。
Flowlight は私に関する情報をどこかに送りますか?
-
いいえ。アカウントもテレメトリも分析もありません。行うリクエストは、1 日 1 回のアップデート確認、任意のネットワーク所有者の照会、そして逆引き DNS だけです。 - それぞれプライバシーのページに一覧があり、どれにもオフのスイッチがあります。
+
アカウントもテレメトリも分析もなく、トラフィックのデータベースがアップロードされることもありません。Mac から出ていくリクエストは 3 つあり、 + どれもプライバシーのページに挙げてあります。1 日 1 回のアップデート確認と、任意のネットワーク所有者の照会。 + この 2 つにはオフのスイッチがあります。そして Flowlight がサンプラーで動いているあいだの逆引き DNS。こちらにはスイッチがありません。 + これがないと、サンプラーはほとんどの接続に名前を付けられないからです。
Mac が遅くなったり、バッテリーが減ったりしませんか?
ウインドウを閉じているあいだ、Flowlight はほとんど何もしません。メニューバーの速度を保ち、1 秒に 1 行書き込むだけです。ネットワーク機能拡張のほうが、 1 秒ごとに短命な nettop プロセスを起動する代替のサンプラーよりも負荷が低いです。
diff --git a/site/pages/ja/index.html b/site/pages/ja/index.html index bd79c51..adcc9a1 100644 --- a/site/pages/ja/index.html +++ b/site/pages/ja/index.html @@ -162,7 +162,9 @@

AI エージェントのネットワーク利用を見張る

期間を決められるルール

アプリ、エージェント、接続先、あるいは 1 つの URL を指定してブロックします。見つけた行を右クリックするだけです。 ずっと、指定の時刻まで、Flowlight を終了するまで、または決めた時間帯だけ。一時停止のスイッチが 1 つあり、拒否のたびに - 抜け道も示します。いちばん具体的なルールが勝ち、同じ強さなら拒否が勝ちます。

+ 抜け道も示します。いちばん具体的なルールが勝ち、同じ強さなら拒否が勝ちます。 + これはすでに信頼しているソフトウェアを制御する手段であって、 + 信頼していないソフトウェアを阻む壁ではありません。脅威モデルをご覧ください。

Cursor ⇥ raw.githubusercontent.com · 4 回拒否 · 平日 18:00–09:00

@@ -343,9 +345,14 @@

対応するツール呼び出しとネットワークリクエストを結

次に来るもの

これから

-

Flowlight は今日すでに、監視し、説明し、拒否します。残りはこの順番で作っています。

+

Flowlight は今日すでに、監視し、説明し、拒否します。脅威モデルが述べるとおり、 + これは防止ではなく監視です。残りはこの順番で作っています。

+
インスペクションに予算を 0.9.3

記録された本文は、Flowlight が保持するもののなかで最も機微なものです。拒否リストではなくヘッダの許可リスト、自分で決めるパターン、ヘッダを一切残さない選択肢、アプリごとの上限、そして自分で期限切れになるセッション。

+
このルールなら何が起きていたかを見せて 0.9.4

ルールを直近 1 日に当てて再生し、まだ何も拒否しないうちに、拒否していたはずのものを一覧にします。データはすでにあります。ただ、これまでは過去を説明することしかしてきませんでした。

+
Mac から出ていくものを、出ていく前に 0.9.5

最初の 1 行がコレクターに届く前に、宛先、暗号化されているか、どのフィールドが送られるか、そのなかにヘッダはあるか。Flowlight がほかのすべてに求めている開示を、自分自身に当てはめます。

+
エージェントがネットワーク以外で何をしたか 1.0

ファイルが出ていくことは、読み取りとそれに続く送信であり、今日見えているのは送信だけです。エージェントのツールが何を開き、何を書き、何を起動したかを記録すれば、秘密鍵を読み、そのあと paste.example と通信したが、2 つの画面ではなく 1 つの発見になります。リソースモニタではありません。CPU とメモリはアクティビティモニタの仕事です。Apple の EndpointSecurity の権限が必要で、その前に、上のインスペクションの予算が必要です。

まず Linux、次に Windows

分析の中核は移植できる Swift ですが、キャプチャはそうではありません。まずローカルの Web UI を備えた Linux 用デーモンを、macOS の API ではなく eBPF の上に作ります。

diff --git a/site/pages/ja/privacy.html b/site/pages/ja/privacy.html index c6bf4fb..c672b34 100644 --- a/site/pages/ja/privacy.html +++ b/site/pages/ja/privacy.html @@ -45,15 +45,16 @@

この Mac で読み取るもの

HTTPS インスペクション

デフォルトではオフです。オンにすると、Flowlight はこの Mac 上に証明書認証局を作り(その鍵が ~/Library/Application Support/Flowlight/Inspection から出ることはありません)、この Mac からの接続だけを受け付けるプロキシを動かします。 - 経由させたアプリについては、リクエストとレスポンスを、2 MB までの本文も含めてローカルのデータベースに 3 日間記録します。認証情報のヘッダ - (Authorization、Cookie、API キー)は、何かが保存される前にその長さに置き換えられます。Flowlight は内蔵の一覧にある Apple のサービスとパスワード管理アプリを復号の対象から除外します。記録したインスペクションのデータが Flowlight によってアップロードされることはありません。インスペクションをオフにするとプロキシが止まり、証明書と記録データを削除すると、証明書、その信頼設定、記録したすべてのリクエストが削除されます。

+ 経由させたアプリについては、リクエストとレスポンスを、2 MB までの本文も含めてローカルのデータベースに 3 日間記録します。認証情報のヘッダは、何かが保存される前にその長さに置き換えられます。 + 名前(Authorization、Cookie、API キー)と、名前に含まれる語で見分けるので、X-Access-Key も捕まえます。 + ただしこれはヒューリスティックであって保証ではありません。何も認識できない名前のもとに秘密を載せたヘッダは、記録されてしまいます。Flowlight は内蔵の一覧にある Apple のサービスとパスワード管理アプリを復号の対象から除外します。記録したインスペクションのデータが Flowlight によってアップロードされることはありません。インスペクションをオフにするとプロキシが止まり、証明書と記録データを削除すると、証明書、その信頼設定、記録したすべてのリクエストが削除されます。

アプリが行うネットワークリクエスト

- + @@ -73,11 +74,15 @@

保持期間

このウェブサイト

このサイトは GitHub Pages で公開され、Cloudflare を通して配信される静的なページです。Cookie は設定せず、分析も動かしていません。 - 配信のために GitHub と Cloudflare がリクエストを処理し、フォントは Google Fonts から読み込まれるため、訪問時に IP アドレスが同社に渡ります。

+ 配信のために GitHub と Cloudflare がリクエストを処理します。フォントはこのドメインから配信されるので、ページを表示しても + ほかの誰にも何も送りません。以前はこのページが Google からフォントを読み込んでいました。つまり、Flowlight はどこにも何も送らないと + 説明するページが、自分自身を表示するために Google へリクエストを出していたのです。

連絡先

-

質問やプライバシーに関する懸念がありますか?issue を作成してください。機密性のある内容には、 - リポジトリの GitHub のプライベート脆弱性報告をお使いください。

+

質問やプライバシーに関する懸念がありますか?issue を作成してください。 + セキュリティの問題には、GitHub のプライベート脆弱性報告をお使いください。 + GitHub を使いたくない場合は security@xinbetween.com にメールしてください。 + 何を期待してよいかは SECURITY.md をご覧ください。

diff --git a/site/pages/ja/threat-model.html b/site/pages/ja/threat-model.html new file mode 100644 index 0000000..e7a163c --- /dev/null +++ b/site/pages/ja/threat-model.html @@ -0,0 +1,128 @@ + +
+
+

脅威モデル

+

監視であって、防止ではない

+

Flowlight は、Mac 上のソフトウェアが何をどこへ送っているかを教えます。すでにマシンを手中にしている攻撃者に対する + 防御ではありません。その違いは、脚注ではなく独立した 1 ページで述べるだけの重さがあります。

+
+ +
+ + +
+

何のためにあるのか

+

Flowlight は、Mac が答えてくれない問いに答えます。どのアプリがこれを送り、どこへ行ったのか。作られた相手は、 + 隠れもせずに行儀の悪いソフトウェアです。誰も頼んでいない先に接続する AI エージェント、送るべき以上をアップロードするツール、 + 名前のないアドレスと話しているプロセス。そうした振る舞いはトラフィックに現れます。Flowlight の仕事は、それを読めるようにすること、 + そして読めないときには正直にそう言うことです。

+

アンチウイルスではなく、EDR エージェントでもなく、あなたと攻撃者のあいだに立つという意味でのファイアウォールでもありません。 + 両者が重なるところ、つまり Flowlight が接続を拒否できるところでも、その拒否はすでに信頼しているソフトウェアを制御するための + 便利さであって、信頼していないソフトウェアに対する防壁ではありません。

+ +

何を防ぐのか

+
    +
  • 気づかれないまま出ていくデータ。アプリやエージェントが、あなたなら承認しなかった先へ送ること。エージェント自身が + 実行したツール経由の場合も含みます。Flowlight はその接続を、接続を行ったプロセスと、そのプロセスを起動したエージェントに + 結び付けます。
  • +
  • 静かな振る舞いの変化。急に新しい接続先と通信しはじめたアプリ、ベースラインよりはるかに多く動かすアプリ、 + あなたが離れているあいだに働くアプリ。どのアラートも、それを引き起こした数値を示します。だからあなたはそれに異を唱えられます。
  • +
  • 許した範囲を超えるエージェント。エージェントごとの許可リストと、その外への接続を拒否するルール。拒否は記録され、 + ワンクリックで許可できます。
  • +
  • 改ざんされたアップデート。どのリリースもチェックサムを公開します。アップデート機能は、検証できないダウンロードを + 拒否し、アップデートを求めている実行中のコピーと同じチームが署名していないアプリのインストールを拒否します。
  • +
+ +

root 権限を持つソフトウェアは、これを止められる

+

Flowlight はあなたの権限で動き、macOS がその代わりに起動するシステム機能拡張を使います。root で動くものは、そしてあなたが + インストーラを承認したものは、その機能拡張をアンロードし、アプリを止め、データベースを削除できます。設計上それを防ぐものは何もなく、 + macOS 上のどの監視ツールも、あなた自身が自分で止められるツールでありつづけたまま、それを防ぐことはできません。

+

正直な主張はもっと狭く、それでも役に立ちます。行儀が悪いだけで、監視から積極的に逃れようとはしていないソフトウェアは見えます。 + 積極的に逃れているソフトウェアは見えないかもしれません。それでも少なくとも空白は残ります。止まった機能拡張、データのない期間です。 + それを示すためにカバー範囲の画面があります。

+ +

キャプチャが取りこぼすもの

+
    +
  • キャプチャを始める前のトラフィック。あとから埋めることはできません。フィルタより先に開いた接続は、 + そもそもフィルタに渡されていません。
  • +
  • コンテンツフィルタの対象外となるシステムサービス。macOS はコンテンツフィルタに何もかもを見せるわけではありません。 + macOS 自身のトラフィックの一部は、こちらには決して届きません。
  • +
  • その枠を別のコンテンツフィルタが握っている場合。macOS が動かすのは同時に 1 つだけです。VPN やセキュリティ + エージェントがそれを握っていると、Flowlight のフィルタはインストールされ、接続もしますが、何かをフィルタするよう求められることは + ありません。キャプチャは、空の画面を見せるのではなく、そう伝えます。
  • +
  • 短い接続。サンプラーの場合です。機能拡張がなければ、Flowlight は 1 秒ごとにカウンタを読みます。2 回の読み取りの + あいだに開いて閉じる接続は、決して記録されません。
  • +
  • TCP でも UDP でもない経路。Bluetooth と USB はデバイスとしては見えますが、バイト数としては見えません。 + エージェントのローカルの MCP サーバがパイプで話すものは、そもそもネットワークトラフィックではなく、どこにも現れません。
  • +
+ +

インスペクションが取りこぼすもの

+

HTTPS インスペクションが読めるのは、Flowlight のローカルプロキシを経由したものだけで、それを決めるのはプログラムが起動する + 瞬間です。プロキシ設定を無視するアプリ、インスペクションをオンにする前に起動したアプリ、証明書をピン留めするアプリは、手を加えられずに + 通り過ぎます。これは意図してそうしています。ピン留めされた接続を壊せば、そのアプリが壊れるからです。QUIC もプロキシには渡されません。

+

つまり、インスペクトの画面が空なら、それは「ここには何も通されなかった」という意味で、「何も起きなかった」という意味では + ありません。どちらなのかは、カバー範囲がアプリごとに答えます。

+ +

ブロックとは何で、何でないか

+

接続を拒否するルールを実行するのはネットワーク機能拡張で、その経路の中で、接続が行われる前に実行します。URL を指定する + ルールを実行するのはインスペクション用のプロキシで、アプリが読める状態コードでリクエストに応えます。報告するのではなく実際に + 手を出す Flowlight の部分は、この 2 つだけです。nettop サンプラーは何ひとつ拒否できないので、サンプラーで動いている Mac では + どのルールも強制されません。Flowlight は何もしないスイッチを見せるのではなく、そのことをはっきり言います。

+

それでも防止ではありません。シェルを使えるエージェントは、拒否されたツールがしたはずのことを手作業で行えます。ワンクリックで + 取り消せる拒否は、エージェントの次の試みが通り抜けうる拒否でもあります。ローカルのトラフィック、DNS、Apple 純正のサービス、 + Flowlight 自身の接続は決して拒否されません。ブロックされたエージェントより、ブロックされた Mac のほうが悪い結果だからです。 + そして強制は、Flowlight が動作を止めた数秒後に失効します。誰にも見えない拒否は、拒否がないより悪いからです。

+

インスペクションと拒否は両立しません。Flowlight 自身のプロキシを通ったトラフィックは、Flowlight の + トラフィックとして Mac を出ていき、Flowlight が自分自身を拒否することはありません。つまり、リクエストを読んでいるアプリは、 + ルールではもう接続を止められないアプリです。もっと見るためにインスペクションをオンにすることは、強制を手放すことでもあり、 + 画面にはこれまでそう書かれていませんでした。

+ +

Flowlight 自身が保持するもの

+

トラフィックのメタデータを、ローカルの SQLite データベースに、公開された保持期間のあいだ保持します。HTTPS インスペクションを + オンにしていれば、リクエストとレスポンスの本文も 3 日間保持します。これは Flowlight が保持するもののなかで最も機微なものです。 + 認証情報のヘッダは名前と語によって隠されますが、それはヒューリスティックであって保証ではありません。何も認識できない名前のもとに + 秘密を載せたヘッダは、記録されることがあります。

+

トラフィックのデータベースがアップロードされることはありません。それでも、頼まなくても Mac から出ていくものが 3 つあり、 + どれもプライバシーのページに挙げてあります。起動時と 1 日 1 回、最新のリリースを GitHub に + 尋ねるアップデートの確認。ホスト名のない公開アドレスについて Team Cymru に尋ねるネットワーク所有者の照会。そして、 + Flowlight が機能拡張ではなくカウンタを読んでいるあいだ、名前が見つからなかったアドレスの逆引き DNS 照会です。 + はじめの 2 つにはオフのスイッチがあります。3 つめにはありません。サンプラーでは、接続に名前が付く道のほとんどがそれだからです。 + 照会はこの Mac がすでに使っているリゾルバへ行き、機能拡張が引き継いでトラフィック自身から名前を付けるようになれば止まります。 + ホスト型モデルでの質問は、そのどれよりもはるかに多くを送りますが、設定するまではオフのままである唯一のものです。

+ +

アップデート

+

リリースは Developer ID で署名され、公証されています。アップデート機能は公開されたチェックサムを要求し、それがないダウンロードを + 拒否します。そのうえで、ダウンロードしたアプリが実行中のコピーと同じチームの署名であることを確かめてから、インストールします。 + 別の誰かが署名したアップデートは、ほかの点で有効であっても拒否されます。

+ +

脆弱性を報告する

+

GitHub のプライベート脆弱性報告をお使いください。GitHub を + 使いたくない場合は security@xinbetween.com にメールしてください。対象範囲と + 期待してよいことは SECURITY.md に書いてあります。 + クラッシュ、数値の誤り、誤解を招く画面といった通常の不具合は、かわりに + issue へどうぞ。

+
+
+
diff --git a/site/pages/ko/docs.html b/site/pages/ko/docs.html index 63e6589..967c9fc 100644 --- a/site/pages/ko/docs.html +++ b/site/pages/ko/docs.html @@ -35,7 +35,7 @@

Flowlight 사용하기

설정과 데이터 @@ -94,12 +94,20 @@

여러 뷰

リクエスト送信先含まれるものタイミング
アップデートの確認api.github.com最新リリースを尋ねる通常の HTTPS リクエスト。GitHub が見るのは、IP アドレスと Flowlight/<version> というユーザーエージェントです起動時と 1 日 1 回(0.1.2 以降)。オフのスイッチは設定 › 一般
アップデートのダウンロードgithub.comディスクイメージと、そのチェックサムファイル「ダウンロードして開く」をクリックしたときだけ
逆引き DNSあなたが設定した DNS リゾルバホスト名が見つからなかった場合の、IP アドレスの登録名の照会デフォルトのキャプチャモードで、必要に応じて
逆引き DNSあなたが設定した DNS リゾルバホスト名が見つからなかった場合の、IP アドレスの登録名の照会必要に応じて、サンプラーのキャプチャモードで。ネットワーク機能拡張が動き出すまではこれがデフォルトです。オフのスイッチはありません。これがないとサンプラーはほとんどの接続に名前を付けられないからです。ネットワーク機能拡張はトラフィック自身から名前を付けるので、これを行いません
ネットワーク所有者の照会Team Cymru(DNS 経由)ホスト名がわからないパブリック IP アドレス。プライベートアドレスと予約アドレスは、この Mac から決して出ませんデフォルトでオン。オフのスイッチはキャプチャ › ネットワーク所有者を特定
ホスト型モデルでの質問あなたが選んだプロバイダ:Anthropic、OpenAI、Google Gemini、または互換のエンドポイントあなたの質問と、モデルが選んだ読み取り専用の Flowlight の問い合わせが返した結果。トラフィックのデータベース自体はアップロードされませんホスト型のプロバイダを選び、質問を送信したときだけ。質問の画面には、送信されたリクエストが表示されます
コレクターへの書き出しあなたが設定した OpenTelemetry または HTTP のエンドポイント設定 › 書き出しに表示される項目(トラフィックの集計やアラートなど)。認証ヘッダはキーチェーンに保存されますエンドポイントを設定し、書き出しを有効にしたあとだけ
- + - - - + + + + + + +
뷰단축키답해 주는 질문
실시간⌘1지금 무엇이 움직이나. 지난 몇 초 동안의 앱별 속도와 가장 바쁜 목적지.
AI 에이전트⌘2어떤 에이전트가 활동 중이고, 어떤 AI 제공업체를 쓰며, 그 밖에 어디에 접속했나.
AI 에이전트⌘2어떤 에이전트가 활동 중이고, 어떤 AI 제공업체를 쓰며, 그 밖에 어디에 접속했나.
보고서⌘3트래픽이 어디로 갔나. 초에서 연까지. 앱, 목적지, IP로 묶고, 차트나 눈여겨볼 것으로 바꾸고, CSV로 내보냅니다.
알림⌘4이상해 보인 모든 것. 앱과 목적지, 그리고 규칙의 기준을 넘긴 수치와 함께.
검사⌘5선택 사항. Flowlight를 거치도록 지정한 에이전트의 복호화된 요청과 그 뒤에 있는 도구 호출. 검색은 요청·응답 본문까지 들어갑니다.
캡처⌘6어떤 엔진이 기록 중인지, 확장의 상태, 호스트 이름 학습, 그리고 데이터베이스의 위치.
알림⌘4이상해 보인 모든 것. 앱과 목적지, 그리고 규칙의 기준을 넘긴 수치와 함께.
규칙⌘5설정해 둔 모든 허용 목록과 거부, 각각이 무엇을 포괄하는지, 그리고 실제로 무엇을 막았는지.
질문⌘6내 트래픽에 대한 평범한 말로 된 질문. 기록된 이력에서 로컬 모델이나 호스팅 모델이 답합니다.
검사⌘7선택 사항. Flowlight를 거치도록 지정한 에이전트의 복호화된 요청과 그 뒤에 있는 도구 호출. 검색은 요청·응답 본문까지 들어갑니다.
기기⌘8켤 때까지는 꺼져 있습니다. Bluetooth와 USB, 외장 저장 장치. Mac은 네트워크만큼이나 이것들을 씁니다.
포착 범위⌘9Flowlight가 파악하지 못하는 것. 앱별로 그 트래픽이 보였는지, 이름이 붙었는지, 읽혔는지.
캡처⌘0어떤 엔진이 기록 중인지, 확장의 상태, 호스트 이름 학습, 그리고 데이터베이스의 위치.
+

단축키는 사이드바의 순서라서, ⌘0은 건너뛴 자리가 아니라 열 번째 항목입니다.

+
실시간 뷰: 앱 목록에 각각의 현재 보내기·받기 속도와 가장 바쁜 목적지가 함께 나열되어 있습니다.
+
실시간, Flowlight가 처음 여는 화면.

보고서에서는 막대에 포인터를 올려 어떤 앱이 만든 것인지 보고, 클릭해 확대하고, 아무 행이나 두 번 클릭해 보고서를 그 항목으로 좁힐 수 있습니다.

AI 에이전트 규칙

@@ -233,10 +241,16 @@

HTTPS 검사(선택 사항)

수정하거나, 한 셸에 대한 셸 설정을 복사하거나, 인증서와 기록된 모든 것을 제거할 수 있습니다.

Flowlight는 내장된 Apple 서비스와 암호 관리자 목록을 복호화에서 제외합니다(목록은 설정 화면에서 수정할 수 있습니다). 인증서를 고정하는 앱은 Flowlight 인증서를 거부할 수 있는데, Flowlight가 이를 알아채고 암호화된 채로 통과시킵니다. API 키와 쿠키, 그 밖의 - 인증 정보 헤더는 절대 저장하지 않고, 기록된 요청은 3일 동안 보관하며, 인증서 및 기록된 데이터 제거는 인증서와 + 인증 정보 헤더는 무엇이든 저장되기 전에 그 길이 값으로 대체됩니다. 이름으로, 그리고 이름에 든 낱말로 찾아내므로 업체마다 + 다른 표기도 걸리지만, 하나도 빠뜨리지 않는다고 약속할 수는 없습니다. 기록된 요청은 3일 동안 보관하며, 인증서 및 기록된 데이터 제거는 인증서와 그 신뢰 설정, 기록된 모든 것을 삭제합니다. 검사는 HTTP/1.1만 지원하며(Flowlight가 양쪽에 그것을 요청합니다) 데모 모드에서는 쓸 수 없습니다.

+

행에서 곧바로 오는 길. 실시간이나 보고서, AI 에이전트에서 앱이나 목적지를 오른쪽 클릭하고 + …의 트래픽 검사를 고르면, 그 이름이 검색란에 이미 들어간 채로 검사 화면이 열립니다. 숨은 필터가 아니라 + 검색란인 것은 일부러 그렇게 한 것으로, 출발한 곳으로 돌아가지 않고도 넓히거나 좁히거나 지울 수 있습니다. 나타날 수 있는 + 것은 프록시를 거친 트래픽뿐이라, 바쁘다고 알고 있는 행이라도 여기에는 아무것도 보이지 않을 수 있습니다.

+

모의 응답

API가 실패하거나 멈추거나 엉뚱한 것을 돌려줄 때 에이전트가 어떻게 대처하는지 보려면, 그 엔드포인트에 직접 답해 보세요. 검사 › 모의 응답에서 규칙 하나가 호스트와 경로, 메서드를 지정하고, 돌려줄 상태와 헤더, 본문, 그리고 선택 @@ -366,6 +380,23 @@

캡처: 엔진과 소스

없고 그것들과 나란히 동작하는 샘플러로 되돌려 주겠다고 제안합니다. 어떻게 만들었는지는 개발자 가이드를 보세요.

+

포착 범위: Flowlight가 파악하지 못하는 것

+

다른 화면은 모두 무슨 일이 있었는지에 답합니다. 포착 범위는 무엇을 듣지 못했을지에 답하고, 그것이 다른 + 화면들의 값어치를 결정합니다. 앱마다 세 가지를 묻는데, 세 가지가 서로 독립적으로 실패하기 때문입니다.

+

보였나? 네트워크 확장은 각 흐름이 열리는 순간에 봅니다. nettop 샘플러는 1초에 한 번 카운터를 읽으므로, 두 + 번의 읽기 사이에 열리고 닫히는 연결, 이를테면 DNS 조회나 빠른 API 호출, curl을 실행하고 끝나는 스크립트는 통째로 + 빠집니다. 어떤 비율로도 표현할 수 없는 빈틈이라, 수치가 아니라 말로 적어 둡니다.

+

이름이 붙었나? 그 앱의 바이트 중 맨 주소가 아니라 호스트 이름이 있는 목적지로 간 비율입니다. 연결 + 수가 아니라 바이트입니다. 1기가바이트를 실어 보낸 이름 없는 연결 하나가 1킬로바이트씩 실어 보낸 연결 백 개보다 큰 구멍인데, + 연결 수로 세면 순서가 거꾸로 됩니다.

+

읽을 수 있었나? HTTPS 검사가 그 앱의 트래픽에서 무엇이든 복호화했는지입니다. 답은 넷이고 그중 빈틈은 + 하나뿐입니다. 읽고 있다. 프록시에 닿은 적이 없다. 복호화하지 않을 대상 목록에 있다(이것은 직접 내린 선택입니다). 또는 검사가 + 꺼져 있다(이것은 앱별 실패가 아니라 설정입니다).

+

어떤 엔진도 전혀 볼 수 없는 것은 이 페이지에 맡기지 않고 화면에 그대로 적어 둡니다. 캡처를 시작하기 전의 + 트래픽, 콘텐츠 필터에는 한 번도 보이지 않는 시스템 서비스, 인증서를 고정하는 앱, 프록시에 한 번도 넘겨지지 않는 QUIC, 그리고 + 파이프로 이야기하는 에이전트의 로컬 MCP 서버입니다. 이런 것들은 Flowlight 어디에도 나타나지 않으므로 이 수치에도 빠져 + 있습니다. 볼 수 있는 것만 세는 포착 범위 수치는 사실이 아니라 안심거리가 될 뿐입니다.

+

기기: Bluetooth와 USB, 외장 저장 장치

Mac은 TCP와 UDP만으로 주고받는 것이 아닙니다. 기기 화면이 그 나머지를 다루며, 직접 켜기 전까지는 꺼져 있습니다. Flowlight에 없는 권한이 필요해서가 아니라, Mac을 더 많이 지켜보는 일은 업데이트가 정할 것이 아니라 사용자가 @@ -494,9 +525,10 @@

질문과 답

어떤 확장이 설치되어 있는지, macOS가 Flowlight의 필터를 실제로 시작했는지, 그리고 가장 최근 기록이 언제인지 보여줍니다. 결과를 이슈에 붙여 주세요.
Flowlight가 내 정보를 어딘가로 보내나요?
-
아니요. 계정도, 텔레메트리도, 분석도 없습니다. Flowlight가 내는 요청은 하루 한 번의 업데이트 확인, 선택 사항인 네트워크 - 소유자 조회, 그리고 역방향 DNS뿐입니다. 각각이 개인정보 페이지에 나열되어 있고, 각각 끄는 - 스위치가 있습니다.
+
계정도, 텔레메트리도, 분석도 없고, 트래픽 데이터베이스가 업로드되는 일도 없습니다. Mac을 떠나는 요청은 세 가지이고, 셋 다 + 개인정보 페이지에 나열되어 있습니다. 하루 한 번의 업데이트 확인과 선택 사항인 네트워크 소유자 조회, + 이 둘은 끄는 스위치가 있습니다. 그리고 Flowlight가 샘플러로 돌고 있는 동안의 역방향 DNS, 이것은 스위치가 없습니다. 그것이 없으면 + 샘플러는 대부분의 연결에 이름을 붙일 수 없습니다.
Mac이 느려지거나 배터리가 빨리 닳지 않나요?
창을 닫아 두면 Flowlight는 거의 아무 일도 하지 않습니다. 메뉴 막대의 속도를 유지하고 1초에 한 행을 씁니다. 네트워크 확장은 1초마다 짧게 사는 nettop 프로세스를 실행하는 대체 샘플러보다 비용이 적습니다.
diff --git a/site/pages/ko/index.html b/site/pages/ko/index.html index 2c049d4..f237fc0 100644 --- a/site/pages/ko/index.html +++ b/site/pages/ko/index.html @@ -162,7 +162,9 @@

AI 에이전트가 네트워크를 어떻게 쓰는지 봅니다

원하는 기간만큼만 사는 규칙

앱이든 에이전트든, 목적지든 URL 하나든 지정해서 막으세요. 발견한 행에서 오른쪽 클릭하면 됩니다. 영구히, 특정 시각까지, Flowlight를 종료할 때까지, 또는 정해 둔 시간대에만. 일시 정지 스위치 하나와 - 모든 거부마다 빠져나갈 길이 있습니다. 가장 구체적인 규칙이 이기고, 비기면 차단이 이깁니다.

+ 모든 거부마다 빠져나갈 길이 있습니다. 가장 구체적인 규칙이 이기고, 비기면 차단이 이깁니다. + 이미 신뢰하는 소프트웨어를 통제하는 수단이지, 신뢰하지 않는 + 소프트웨어를 막아 주는 장벽은 아닙니다. 위협 모델을 보세요.

Cursor ⇥ raw.githubusercontent.com · 4회 거부 · 평일 18:00–09:00

@@ -344,9 +346,14 @@

도구 호출과 네트워크 요청을 잇습니다

다음

앞으로 올 것

-

Flowlight는 지금 지켜보고 설명하고 거부합니다. 나머지는 이 순서로 만들고 있습니다.

+

Flowlight는 지금 지켜보고 설명하고 거부합니다. 위협 모델이 밝히듯, 이것은 + 예방이 아니라 관찰입니다. 나머지는 이 순서로 만들고 있습니다.

+
검사에도 예산을 0.9.3

기록된 본문은 Flowlight가 보관하는 것 중 가장 민감한 것입니다. 차단 목록이 아니라 헤더 허용 목록, 직접 정하는 패턴, 헤더를 아예 남기지 않는 선택, 앱별 상한, 그리고 스스로 만료되는 세션.

+
이 규칙이라면 무엇을 막았을지 보여줘 0.9.4

지난 하루를 규칙에 다시 돌려, 아직 아무것도 거부하지 않은 채로 무엇을 거부했을지 나열합니다. 데이터는 이미 있습니다. 지금까지 그 데이터가 한 일이 지난 일을 설명하는 것뿐이었습니다.

+
Mac을 떠나는 것을, 떠나기 전에 0.9.5

첫 줄이 수집기에 닿기 전에 목적지, 암호화 여부, 어떤 필드가 나가는지, 그중에 헤더가 있는지. Flowlight가 다른 모든 것에 요구하는 그 공개를 자기 자신에게 적용합니다.

+
에이전트가 네트워크 밖에서 한 일 1.0

파일이 나가는 일은 읽기 다음에 보내기이고, 오늘 보이는 것은 보내기뿐입니다. 에이전트의 도구가 무엇을 열고 쓰고 실행했는지 기록하면 개인 키를 읽고, 그다음 paste.example와 통신했다가 화면 두 개가 아니라 하나의 발견이 됩니다. 리소스 모니터가 아닙니다. CPU와 메모리는 활성 상태 보기의 일입니다. Apple의 EndpointSecurity 권한이 필요하고, 그보다 먼저 위의 검사 예산이 있어야 합니다.

Linux, 그다음 Windows

분석 코어는 어디로든 옮길 수 있는 Swift이지만 캡처는 그렇지 않습니다. macOS API 대신 eBPF를 쓰고 로컬 웹 UI가 딸린 Linux 데몬이 먼저 나옵니다.

diff --git a/site/pages/ko/privacy.html b/site/pages/ko/privacy.html index 49ba3ec..709bb9a 100644 --- a/site/pages/ko/privacy.html +++ b/site/pages/ko/privacy.html @@ -46,7 +46,9 @@

HTTPS 검사

기본값은 끔입니다. 켜면 Flowlight가 Mac 안에 인증 기관을 만들고(그 키는 ~/Library/Application Support/Flowlight/Inspection를 벗어나지 않습니다) 이 Mac에서 오는 연결만 받는 프록시를 돌립니다. 이 프록시를 거치도록 지정한 앱에 대해서는 요청과 응답을, 최대 2 MB까지의 본문을 포함해 로컬 데이터베이스에 3일 - 동안 기록합니다. 인증 정보 헤더(Authorization, 쿠키, API 키)는 저장 전에 그 길이 값으로 대체됩니다. Flowlight는 내장된 + 동안 기록합니다. 인증 정보 헤더는 저장 전에 그 길이 값으로 대체됩니다. 이름(Authorization, 쿠키, + API 키)으로, 그리고 이름에 든 낱말로 알아보므로 X-Access-Key도 걸립니다. 다만 그것은 추정 규칙이고 보장이 + 아닙니다. 아무것도 알아보지 못하는 이름 아래 비밀을 실어 보내는 헤더는 기록됩니다. Flowlight는 내장된 Apple 서비스와 암호 관리자 목록을 복호화에서 제외합니다. 기록된 검사 데이터를 Flowlight가 업로드하는 일은 없습니다. 검사를 끄면 프록시가 멈추고, 인증서 및 기록된 데이터 제거는 인증서와 그 신뢰 설정, 기록된 모든 요청을 삭제합니다.

@@ -55,7 +57,7 @@

앱이 내는 네트워크 요청

요청보내는 곳담기는 내용시점 업데이트 확인api.github.com최신 릴리스를 묻는 일반적인 HTTPS 요청. GitHub는 IP 주소와 Flowlight/<version> 사용자 에이전트를 보게 됩니다0.1.2부터, 실행 시와 하루에 한 번. 끄는 스위치는 설정 › 일반 업데이트 다운로드github.com디스크 이미지와 체크섬 파일다운로드 후 열기를 클릭할 때만 - 역방향 DNS설정된 DNS 리졸버호스트 이름이 관측되지 않았을 때, IP 주소에 등록된 이름 조회기본 캡처 모드에서 필요할 때 + 역방향 DNS설정된 DNS 리졸버호스트 이름이 관측되지 않았을 때, IP 주소에 등록된 이름 조회필요할 때, 샘플러 캡처 모드에서. 네트워크 확장이 돌기 시작할 때까지는 이것이 기본값입니다. 끄는 스위치는 없습니다. 이것이 없으면 샘플러는 대부분의 연결에 이름을 붙일 수 없습니다. 네트워크 확장은 트래픽 자체에서 이름을 붙이므로 이 조회를 하지 않습니다 네트워크 소유자 조회Team Cymru, DNS로알려진 호스트 이름이 없는 공용 IP 주소. 사설 주소와 예약 주소는 절대 Mac을 벗어나지 않습니다기본값 켬. 끄는 스위치는 캡처 › 네트워크 소유자 확인 호스팅 모델로 질문선택한 제공업체: Anthropic, OpenAI, Google Gemini 또는 호환 엔드포인트내 질문과, 모델이 고른 Flowlight 읽기 전용 질의가 돌려준 결과. 트래픽 데이터베이스 자체는 업로드되지 않습니다호스팅 제공업체를 고르고 질문을 보낼 때만. 질문 화면에 전송된 요청이 표시됩니다 수집기로 내보내기직접 설정한 OpenTelemetry 또는 HTTP 엔드포인트설정 › 내보내기에 표시된 필드, 예를 들어 트래픽 집계와 알림. 인증 헤더는 키체인에 저장됩니다엔드포인트를 설정하고 내보내기를 켠 뒤에만 @@ -75,12 +77,15 @@

보관 기간

이 웹사이트

이 사이트는 GitHub Pages에 올려 Cloudflare를 통해 제공하는 정적 페이지입니다. 쿠키를 설정하지 않고 분석 도구도 돌리지 - 않습니다. 페이지를 전달하기 위해 GitHub와 Cloudflare가 요청을 처리하며, 폰트는 Google Fonts에서 불러오므로 방문 시 그곳이 - IP 주소를 받게 됩니다.

+ 않습니다. 페이지를 전달하기 위해 GitHub와 Cloudflare가 요청을 처리합니다. 폰트는 이 도메인에서 제공하므로 페이지를 그리는 + 동안 다른 누구에게도 아무것도 보내지 않습니다. 전에는 이 페이지가 폰트를 Google에서 불러왔는데, 그것은 Flowlight가 어디로도 + 아무것도 보내지 않는다고 설명하는 페이지가 자신을 그리려고 Google에 요청을 보냈다는 뜻이었습니다.

문의

-

궁금한 점이나 개인정보 관련 우려가 있다면 이슈를 올려 주세요. 민감한 - 내용이라면 저장소의 GitHub 비공개 취약점 신고 기능을 이용하세요.

+

궁금한 점이나 개인정보 관련 우려가 있다면 이슈를 올려 주세요. 보안 + 문제라면 GitHub의 비공개 취약점 신고를 이용하시고, + GitHub를 쓰고 싶지 않다면 security@xinbetween.com으로 메일을 보내 주세요. + 무엇을 기대할 수 있는지는 SECURITY.md를 보세요.

diff --git a/site/pages/ko/threat-model.html b/site/pages/ko/threat-model.html new file mode 100644 index 0000000..0374506 --- /dev/null +++ b/site/pages/ko/threat-model.html @@ -0,0 +1,126 @@ + +
+
+

위협 모델

+

지켜보는 것이지, 막아 주는 것이 아닙니다

+

Flowlight는 Mac의 소프트웨어가 무엇을 어디로 보내는지 알려줍니다. 이미 이 기계를 장악한 공격자를 막아 주는 방어 + 수단은 아니며, 그 차이는 각주가 아니라 별도의 페이지에 적을 만큼 중요합니다.

+
+ +
+ + +
+

무엇을 위한 도구인가

+

Flowlight는 Mac이 답해 주지 않는 질문에 답합니다. 어떤 앱이 이것을 보냈고, 그것은 어디로 갔나? 이 도구가 + 상대하는 것은 숨지도 않고 나쁘게 행동하는 소프트웨어입니다. 아무도 부탁하지 않은 곳에 접속하는 AI 에이전트, 보내야 할 것보다 많이 + 올리는 도구, 이름 없는 주소와 이야기하는 프로세스. 그런 행동은 트래픽에 드러나며, 그것을 읽을 수 있게 만드는 것, 그리고 읽을 수 + 없을 때는 솔직하게 그렇다고 말하는 것이 Flowlight의 일입니다.

+

백신도 아니고 EDR 에이전트도 아니며, 나와 공격자 사이에 서 있는다는 의미의 방화벽도 아닙니다. 둘이 겹치는 지점, 즉 Flowlight가 + 연결을 거부할 수 있는 지점에서도, 그 거부는 이미 신뢰하는 소프트웨어를 통제하기 위한 편의일 뿐이고, 신뢰하지 않는 소프트웨어를 + 막아 주는 장벽이 아닙니다.

+ +

무엇으로부터 지켜 주나

+
    +
  • 눈치채지 못한 데이터 유출. 앱이나 에이전트가 내가 승인하지 않았을 곳으로 보내는 일, 그것이 에이전트가 직접 + 실행한 도구를 통한 것일 때도 포함합니다. Flowlight는 그 연결을 연결을 만든 프로세스와 그 프로세스를 시작한 에이전트에 + 귀속시킵니다.
  • +
  • 조용한 행동 변화. 갑자기 새로운 목적지에 접속하거나, 기준선보다 훨씬 많이 옮기거나, 내가 자리에 없는 동안 + 일하는 앱. 모든 알림은 그것을 건드린 수치를 함께 밝히므로, 그 판단에 동의하지 않을 수도 있습니다.
  • +
  • 허용한 범위를 넘어서는 에이전트. 에이전트마다 두는 허용 목록, 그리고 그 밖의 연결을 거부하는 규칙. 거부는 + 기록되고, 클릭 한 번으로 허용할 수 있습니다.
  • +
  • 손댄 업데이트. 모든 릴리스는 체크섬을 공개합니다. 업데이터는 검증할 수 없는 내려받기를 거부하고, 업데이트를 + 요청한 실행 중인 사본과 같은 팀이 서명하지 않은 앱은 설치하지 않습니다.
  • +
+ +

root 권한을 가진 소프트웨어는 이것을 끌 수 있습니다

+

Flowlight는 사용자 권한으로 돌고, macOS가 그를 대신해 띄우는 시스템 확장을 씁니다. root로 도는 것이라면, 또는 설치 프로그램을 + 내가 승인한 것이라면 무엇이든 그 확장을 내리고 앱을 멈추고 데이터베이스를 지울 수 있습니다. 설계상 그것을 막는 장치는 없으며, + macOS의 어떤 모니터링 도구도 사용자가 스스로 끌 수 있는 도구로 남아 있으면서 그것을 막을 수는 없습니다.

+

솔직한 주장은 더 좁고, 그래도 쓸모가 있습니다. 나쁘게 행동하지만 감시를 적극적으로 피하지는 않는 소프트웨어는 보입니다. 적극적으로 + 피하는 소프트웨어는 보이지 않을 수 있고, 적어도 빈자리는 남깁니다. 멈춘 확장, 데이터가 없는 구간 같은 것들이죠. + 포착 범위 화면은 바로 그것을 보여주기 위해 있습니다.

+ +

캡처가 놓치는 것

+
    +
  • 캡처를 시작하기 전의 트래픽. 나중에 채워 넣는 일은 없습니다. 필터보다 먼저 열린 연결은 애초에 필터에 + 건네진 적이 없습니다.
  • +
  • 콘텐츠 필터 적용에서 빠지는 시스템 서비스. macOS는 콘텐츠 필터에 모든 것을 보여주지 않습니다. macOS 자신의 + 트래픽 가운데 일부는 우리 필터에 결코 닿지 않습니다.
  • +
  • 그 자리를 다른 콘텐츠 필터가 차지한 경우. macOS는 한 번에 하나만 돌립니다. VPN이나 보안 에이전트가 그 + 자리를 갖고 있으면 Flowlight의 필터는 설치되고 연결까지 되지만 무엇을 걸러 달라는 요청은 한 번도 받지 못합니다. 캡처는 빈 + 화면을 보여주는 대신 그렇다고 말합니다.
  • +
  • 짧은 연결, 샘플러를 쓸 때. 확장이 없으면 Flowlight는 1초에 한 번 카운터를 읽습니다. 두 번의 읽기 사이에 + 열리고 닫히는 연결은 결코 기록되지 않습니다.
  • +
  • TCP도 UDP도 아닌 통로. 블루투스와 USB는 기기로는 보이지만 바이트로는 보이지 않습니다. 에이전트의 로컬 + MCP 서버가 파이프로 이야기하는 것은 아예 네트워크 트래픽이 아니어서 어디에도 나타나지 않습니다.
  • +
+ +

검사가 놓치는 것

+

HTTPS 검사가 읽는 것은 Flowlight의 로컬 프록시를 거친 것뿐이고, 그것을 정하는 쪽은 프로그램이 시작되는 순간입니다. 프록시 설정을 + 무시하는 앱, 검사를 켜기 전에 시작된 앱, 인증서를 고정하는 앱은 손대지 않고 그대로 통과합니다. 일부러 그렇게 합니다. 고정된 연결을 + 깨뜨리면 그 앱이 깨지기 때문입니다. QUIC도 프록시에 건네지지 않습니다.

+

그래서 검사 화면이 비어 있다는 것은 “여기로 아무것도 지나가지 않았다”는 뜻이고, “아무 일도 없었다”는 뜻이 아닙니다. 둘 중 + 어느 쪽인지는 포착 범위가 앱마다 알려줍니다.

+ +

차단이 무엇이고 무엇이 아닌지

+

연결을 거부하는 규칙을 실행하는 것은 네트워크 확장이며, 그 경로 안에서, 연결이 만들어지기 전에 실행합니다. URL을 지정하는 + 규칙은 검사 프록시가 대신 실행해, 앱이 읽을 수 있는 상태 코드로 요청에 답합니다. 보고하는 대신 실제로 손을 쓰는 Flowlight의 + 부분은 이 둘뿐입니다. nettop 샘플러는 아무것도 거부할 수 없으므로, 샘플러로 돌아가는 Mac에서는 어떤 규칙도 적용되지 않습니다. + Flowlight는 아무 일도 하지 않는 스위치를 내놓는 대신 그렇다고 말합니다.

+

그래도 예방은 아닙니다. 셸을 쓸 수 있는 에이전트는 거부된 도구가 했을 일을 직접 할 수 있습니다. 클릭 한 번으로 되돌릴 수 있는 + 거부는, 에이전트의 다음 시도가 걸어 나갈 수 있는 거부입니다. 로컬 트래픽과 DNS, Apple 기본 서비스, Flowlight 자신의 연결은 절대 + 거부되지 않습니다. 막힌 Mac은 막힌 에이전트보다 나쁜 결과이기 때문입니다. 그리고 Flowlight가 멈추면 몇 초 뒤에 적용이 풀립니다. + 아무도 볼 수 없는 거부는 거부가 없는 것보다 나쁘기 때문입니다.

+

검사와 거부는 함께 가지 않습니다. Flowlight 자신의 프록시를 거친 트래픽은 Flowlight의 트래픽으로 Mac을 + 떠나고, Flowlight는 자기 자신을 거부하지 않습니다. 그러니 요청을 읽고 있는 앱은, 규칙으로는 더 이상 연결을 막을 수 없는 + 앱입니다. 더 보려고 검사를 켜는 일은 적용을 내주는 일이기도 한데, 화면에는 지금까지 그런 말이 없었습니다.

+ +

Flowlight 자신이 갖고 있는 것

+

트래픽 메타데이터를 로컬 SQLite 데이터베이스에, 공개된 보관 기간만큼 갖고 있습니다. HTTPS 검사를 켜 두면 요청과 응답의 본문도 + 3일 동안 갖고 있는데, 이것이 Flowlight가 보관하는 것 중 가장 민감한 것입니다. 인증 정보 헤더는 이름과 낱말로 가려지지만, 그것은 + 추정 규칙이고 보장이 아닙니다. 아무것도 알아보지 못하는 이름 아래 비밀을 실어 보내는 헤더는 기록될 수 있습니다.

+

트래픽 데이터베이스는 업로드되지 않습니다. 그래도 묻지 않아도 Mac을 떠나는 것이 세 가지 있고, 셋 다 + 개인정보 페이지에 이름이 적혀 있습니다. 실행할 때와 하루에 한 번 GitHub에 최신 릴리스를 묻는 + 업데이트 확인, 호스트 이름이 없는 공개 주소를 Team Cymru에 묻는 네트워크 소유자 조회, 그리고 Flowlight가 확장 대신 카운터를 + 읽고 있는 동안 이름을 보지 못한 주소에 대한 역방향 DNS 조회입니다. 앞의 둘은 끄는 스위치가 있습니다. 셋째는 없습니다. + 샘플러에서는 연결에 이름이 붙는 길이 대부분 그것이기 때문입니다. 그 조회는 Mac이 이미 쓰는 리졸버로 가고, 확장이 이어받아 + 트래픽 자체에서 이름을 붙이기 시작하면 멈춥니다. 호스팅 모델로 하는 질문은 그 셋 가운데 어느 것보다도 훨씬 많은 것을 + 보내지만, 직접 설정할 때까지 꺼져 있는 유일한 것입니다.

+ +

업데이트

+

릴리스는 Developer ID로 서명되고 공증됩니다. 업데이터는 공개된 체크섬을 요구하고 그것이 없는 내려받기를 거부하며, 그다음 설치 + 전에 내려받은 앱이 실행 중인 사본과 같은 팀의 서명인지 확인합니다. 다른 사람이 서명한 업데이트는 나머지가 다 유효해도 + 거부됩니다.

+ +

취약점 신고하기

+

GitHub의 비공개 취약점 신고를 이용하시고, GitHub를 쓰고 + 싶지 않다면 security@xinbetween.com으로 메일을 보내 주세요. 무엇이 범위에 들고 + 무엇을 기대할 수 있는지는 SECURITY.md에 적혀 있습니다. + 크래시나 잘못된 수치, 오해를 부르는 화면 같은 보통의 버그는 대신 + 이슈로 올려 주세요.

+
+
+
diff --git a/site/pages/privacy.html b/site/pages/privacy.html index 41b09cd..91299b1 100644 --- a/site/pages/privacy.html +++ b/site/pages/privacy.html @@ -46,8 +46,10 @@

What it reads on your Mac

HTTPS inspection

Off by default. If you turn it on, Flowlight creates a certificate authority on your Mac (its key never leaves ~/Library/Application Support/Flowlight/Inspection) and runs a proxy that accepts connections only from this Mac. For apps you - route through it, it records requests and responses, including bodies up to 2 MB, in the local database for 3 days. Credential headers - (Authorization, cookies, API keys) are replaced with their length before anything is stored. Flowlight excludes its built-in list of Apple services and password managers from decryption. Recorded inspection data is not uploaded by Flowlight. Turning inspection off stops the proxy; Remove Certificate & Recorded + route through it, it records requests and responses, including bodies up to 2 MB, in the local database for 3 days. Credential headers are + replaced with their length before anything is stored — recognised by name (Authorization, cookies, API keys) and by the words + in the name, so X-Access-Key is caught as well. That is a heuristic, not a guarantee: a header carrying a secret + under a name nothing recognises would be recorded. Flowlight excludes its built-in list of Apple services and password managers from decryption. Recorded inspection data is not uploaded by Flowlight. Turning inspection off stops the proxy; Remove Certificate & Recorded Data deletes the certificate, its trust setting and every recorded request.

Network requests the app makes

@@ -55,7 +57,7 @@

Network requests the app makes

RequestSent toWhat it containsWhen Update checkapi.github.comA standard HTTPS request for the latest release; GitHub sees your IP address and the Flowlight/<version> user agentOn launch and daily, from 0.1.2. Off switch in Settings › General Update downloadgithub.comThe disk image and its checksum fileOnly when you click Download & Open - Reverse DNSYour configured DNS resolverA lookup of an IP address's registered name, when no hostname was seenAs needed, in the default capture mode + Reverse DNSYour configured DNS resolverA lookup of an IP address's registered name, when no hostname was seenAs needed, in the sampler capture mode, which is the default until the Network Extension is running. No off switch: without it the sampler cannot name most connections. The Network Extension names them from the traffic itself and does not do this Network owner lookupTeam Cymru, over DNSPublic IP addresses with no known hostname. Private and reserved addresses never leave your MacOn by default. Off switch in Capture › Identify network owners Ask with a hosted modelThe provider you select: Anthropic, OpenAI, Google Gemini or a compatible endpointYour question and the results returned by the read-only Flowlight queries selected by the model. The traffic database itself is not uploadedOnly when you select a hosted provider and submit a question. The Ask screen shows the transmitted requests Collector exportThe OpenTelemetry or HTTP endpoint you configureThe fields shown in Settings › Export, such as traffic rollups and alerts. Authentication headers are stored in KeychainOnly after you configure an endpoint and enable export @@ -75,11 +77,15 @@

Retention

This website

This site is a static page hosted on GitHub Pages and served through Cloudflare. It sets no cookies and runs no analytics. GitHub - and Cloudflare process requests to serve it, and the fonts load from Google Fonts, which receives your IP address when you visit.

+ and Cloudflare process requests to serve it. The fonts are served from this domain, so rendering a page sends nothing to anyone + else — this page used to load them from Google, which meant the page explaining that Flowlight sends nothing anywhere made a + request to Google to render itself.

Contact

-

Questions or a privacy concern? Open an issue. For anything sensitive, use GitHub's - private vulnerability reporting on the repository.

+

Questions or a privacy concern? Open an issue. For a security issue, use GitHub's + private vulnerability reporting, or email + security@xinbetween.com if you would rather not use GitHub — see + SECURITY.md for what to expect.

diff --git a/site/pages/pt-PT/docs.html b/site/pages/pt-PT/docs.html index 43b904f..869e2c4 100644 --- a/site/pages/pt-PT/docs.html +++ b/site/pages/pt-PT/docs.html @@ -35,7 +35,7 @@

Usar o Flowlight

Definições e dados @@ -95,12 +95,20 @@

As vistas

- + - - - + + + + + + +
VistaAtalhoA que responde
Em direto⌘1O que se move neste momento: taxas por app nos últimos segundos e o destino mais ativo.
Agentes de IA⌘2Que agentes estão ativos, que fornecedores de IA usam e com que mais contactaram.
Agentes de IA⌘2Que agentes estão ativos, que fornecedores de IA usam e com que mais contactaram.
Relatórios⌘3Para onde foi o tráfego, do segundo ao ano. Agrupe por App, Destino ou IP; mude para Gráficos ou Vale a pena ver; exporte em CSV.
Alertas⌘4Tudo o que pareceu invulgar, com a app, o destino e o número que disparou a regra.
Inspecionar⌘5Opcional: pedidos desencriptados dos agentes que encaminha pelo Flowlight e as chamadas de ferramentas por trás deles. A pesquisa entra nos corpos dos pedidos e das respostas.
Captura⌘6Que motor está a registar, o estado da extensão, a aprendizagem de nomes de anfitrião e onde está a base de dados.
Alertas⌘4Tudo o que pareceu invulgar, com a app, o destino e o número que disparou a regra.
Regras⌘5Todas as listas de permissões e recusas que definiu, o que cada uma abrange e o que de facto travou.
Perguntar⌘6Perguntas sobre o seu próprio tráfego em linguagem simples, respondidas a partir do histórico registado por um modelo local ou alojado.
Inspecionar⌘7Opcional: pedidos desencriptados dos agentes que encaminha pelo Flowlight e as chamadas de ferramentas por trás deles. A pesquisa entra nos corpos dos pedidos e das respostas.
Dispositivos⌘8Desligado até o ligar: Bluetooth, USB e armazenamento externo, que um Mac usa tanto como usa a rede.
Cobertura⌘9O que o Flowlight não consegue contabilizar — por app, se o seu tráfego foi visto, nomeado e legível.
Captura⌘0Que motor está a registar, o estado da extensão, a aprendizagem de nomes de anfitrião e onde está a base de dados.
+

Os atalhos seguem a ordem da barra lateral, por isso ⌘0 é o décimo item e não uma posição saltada.

+
A vista Em direto: uma lista de aplicações com as suas taxas de envio e receção atuais e o destino mais ativo.
+
Em direto, a vista com que o Flowlight abre.

Em Relatórios, passe o rato sobre uma barra para ver que apps a produziram, clique nela para ampliar e faça duplo clique numa linha para restringir o relatório a essa linha.

Regras dos agentes de IA

@@ -235,10 +243,16 @@

Inspeção HTTPS (opcional)

e inicie-os aí. Em Avançado pode desencriptar só os agentes de IA em vez de todas as apps, editar a lista dos nunca desencriptados, copiar a configuração da shell para uma shell, ou remover o certificado e tudo o que foi registado.

O Flowlight exclui da desencriptação a sua lista integrada de serviços da Apple e de gestores de palavras-passe (edite a lista em Configurar). As apps que fixam os seus certificados podem rejeitar o - certificado do Flowlight; o Flowlight deteta-o e deixa-as passar encriptadas. As chaves de API, os cookies e outros cabeçalhos de credenciais nunca são - guardados, os pedidos registados são mantidos 3 dias, e Remover o certificado e os dados registados elimina o certificado, a sua definição de + certificado do Flowlight; o Flowlight deteta-o e deixa-as passar encriptadas. As chaves de API, os cookies e outros cabeçalhos de credenciais são substituídos pelo + respetivo comprimento antes de algo ser guardado — reconhecidos pelo nome e pelas palavras do nome, o que apanha a grafia própria de um + fornecedor mas não pode prometer apanhar todos —, os pedidos registados são mantidos 3 dias, e Remover o certificado e os dados registados elimina o certificado, a sua definição de confiança e tudo o que foi registado. A inspeção é apenas HTTP/1.1 (o Flowlight pede-o a ambos os lados) e não está disponível no modo de demonstração.

+

Chegar aqui a partir de uma linha. Clique com o botão direito numa app ou num destino em Em direto, Relatórios ou Agentes de + IA e escolha Inspecionar o tráfego de …: o Inspecionar abre com esse nome já no campo de pesquisa. Ser o campo de pesquisa e + não um filtro escondido é de propósito — pode alargá-lo, apertá-lo ou limpá-lo sem voltar a onde começou. Só pode aparecer o tráfego que passou + pelo proxy, por isso uma linha que sabe estar movimentada pode ainda assim não mostrar nada aqui.

+

Respostas simuladas

Para ver como um agente se comporta quando uma API falha, fica bloqueada ou devolve algo estranho, responda você a esse endpoint. Em Inspecionar › Respostas simuladas, uma regra nomeia um anfitrião, um caminho e um método, e indica o estado, os cabeçalhos, o corpo e um @@ -368,6 +382,23 @@

Captura: motores e origens

não precisa de filtro e funciona ao lado deles. Veja o guia de desenvolvimento para saber como é construído.

+

Cobertura: o que o Flowlight não consegue contabilizar

+

Todos os outros ecrãs respondem ao que aconteceu. A Cobertura responde ao que não lhe teria sido dito, e é isso que decide + quanto valem os outros ecrãs. Faz três perguntas por app, porque falham de forma independente.

+

Foi visto? A extensão de rede vê cada fluxo à medida que abre. O amostrador nettop lê contadores uma vez por segundo, por isso + uma ligação que abre e fecha entre duas leituras — uma consulta DNS, uma chamada de API rápida, um script que executa curl e sai — + falta por completo. É uma falha que nenhuma percentagem consegue expressar, por isso está dita por palavras em vez de pontuada.

+

Foi nomeado? A proporção dos bytes dessa app que foram para um destino com nome de anfitrião em vez de um endereço + simples. Bytes, não ligações: uma ligação sem nome que leva um gigabyte é um buraco maior do que cem que levam um kilobyte cada uma, e contar + ligações ordena-as ao contrário.

+

Era legível? Se a inspeção HTTPS desencriptou alguma coisa do tráfego dessa app. Quatro respostas, e só uma é uma falha: está + a ser lido; nunca chegou ao proxy; a app está na lista Nunca desencriptado, o que é uma escolha sua; ou a inspeção está desativada, o que é uma + definição e não uma falha app por app.

+

O que nenhum motor vê de forma alguma está listado no próprio ecrã e não deixado a esta página: o tráfego anterior ao início + da captura, os serviços do sistema que nunca são mostrados aos filtros de conteúdo, as apps que fixam os seus certificados, o QUIC que nunca é + oferecido ao proxy e o servidor MCP local de um agente que fala com ele por um pipe. Nada disto aparece em qualquer parte do Flowlight, por isso + também falta nestes números — um número de cobertura que contasse só o que consegue ver seria um sossego e não um facto.

+

Dispositivos: Bluetooth, USB e armazenamento externo

Um Mac envia e recebe por mais do que TCP e UDP. O ecrã Dispositivos cobre o resto e está desativado até o ativar — não porque precise de uma permissão que o Flowlight já não tenha, mas porque vigiar mais do seu @@ -495,8 +526,10 @@

Perguntas e respostas

Mostra que extensões estão instaladas, se o macOS realmente iniciou o filtro do Flowlight e há quanto tempo foi registado algo. Cole isso num problema.
O Flowlight envia algo sobre mim para algum lado?
-
Não. Não há conta, nem telemetria, nem analítica. Os únicos pedidos que faz são a procura diária de atualizações, as consultas opcionais de - proprietários da rede e o DNS inverso — cada um listado, e cada um com um interruptor para desativar, na página de privacidade.
+
Não há conta, nem telemetria, nem analítica, e a sua base de dados de tráfego nunca é enviada. Três pedidos saem do Mac, todos listados na + página de privacidade: a procura diária de atualizações e a consulta opcional do proprietário da rede, ambas com + interruptores para desativar, e o DNS inverso enquanto o Flowlight está no amostrador, que não tem nenhum — sem ele, o amostrador não conseguiria + dar nome à maioria das ligações.
Vai tornar o meu Mac mais lento ou gastar a bateria?
Com a janela fechada, o Flowlight quase não faz nada: mantém as taxas na barra de menus e escreve uma linha por segundo. A extensão de rede custa menos do que o amostrador de reserva, que inicia um processo nettop de vida curta a cada segundo.
diff --git a/site/pages/pt-PT/index.html b/site/pages/pt-PT/index.html index 4207c2f..a6e2d87 100644 --- a/site/pages/pt-PT/index.html +++ b/site/pages/pt-PT/index.html @@ -162,7 +162,9 @@

Acompanhe como os agentes de IA usam a rede

Regras, pelo tempo que quiser

Indique uma app, um agente, um destino ou um único URL e bloqueie-o — clique com o botão direito na linha onde o viu. Para sempre, até uma hora, até o Flowlight sair, ou entre as horas que escolher, com um interruptor de pausa e uma saída em - cada recusa. Ganha a regra mais específica e, em caso de empate, ganha o bloqueio.

+ cada recusa. Ganha a regra mais específica e, em caso de empate, ganha o bloqueio. + É controlo sobre software em que já confia, não uma barreira contra + software em que não confia — veja o modelo de ameaças.

Cursor ⇥ raw.githubusercontent.com · recusado 4 vezes · dias de semana 18:00–09:00

@@ -344,9 +346,14 @@

Relacione as chamadas de ferramentas suportadas com os pedidos de rede

A seguir

O que está a caminho

-

Hoje, o Flowlight observa, explica e recusa. Esta é a ordem pela qual o resto está a ser construído.

+

Hoje, o Flowlight observa, explica e recusa — observar em vez de impedir, como o + modelo de ameaças expõe. Esta é a ordem pela qual o resto está a ser construído.

+
Um orçamento para a inspeção 0.9.3

Os corpos registados são a coisa mais sensível que o Flowlight guarda. Uma lista de cabeçalhos permitidos em vez de uma lista de proibidos, padrões seus, a opção de não guardar cabeçalho algum, limites por app, e uma sessão que expira por si.

+
Mostra-me o que esta regra teria feito 0.9.4

Repita o último dia contra uma regra e veja a lista do que ela teria recusado, antes de recusar o que for. Os dados já lá estão; até agora só serviram para explicar o passado.

+
O que sai do Mac, antes de sair 0.9.5

Antes de a primeira linha chegar a um coletor: o destino, se vai encriptada, que campos viajam e se algum é um cabeçalho — a divulgação que o Flowlight exige de tudo o mais, aplicada a si próprio.

+
O que um agente fez para além da rede 1.0

Um ficheiro a sair é uma leitura e depois um envio, e hoje só o envio é visível. Registar o que as ferramentas de um agente abriram, escreveram e lançaram tornaria leu a chave privada e depois falou com o paste.example um único achado em vez de dois ecrãs. Não é um monitor de recursos: o CPU e a memória são trabalho do Monitor de Atividade. Precisa da permissão EndpointSecurity da Apple e precisa que o orçamento de inspeção acima exista primeiro.

Linux, depois Windows

O núcleo de análise é Swift portável; a captura não é. Primeiro vem um daemon de Linux com uma interface web local, sobre eBPF em vez das APIs do macOS.

diff --git a/site/pages/pt-PT/privacy.html b/site/pages/pt-PT/privacy.html index 99702d3..30efea1 100644 --- a/site/pages/pt-PT/privacy.html +++ b/site/pages/pt-PT/privacy.html @@ -46,7 +46,9 @@

Inspeção HTTPS

Desativada por predefinição. Se a ativar, o Flowlight cria uma autoridade de certificação no seu Mac (a chave nunca sai de ~/Library/Application Support/Flowlight/Inspection) e executa um proxy que aceita ligações apenas deste Mac. Nas apps que encaminhar por ele, regista os pedidos e as respostas, incluindo corpos até 2 MB, na base de dados local durante 3 dias. Os cabeçalhos de credenciais - (Authorization, cookies, chaves de API) são substituídos pelo respetivo comprimento antes de algo ser guardado. O Flowlight exclui da desencriptação a sua lista integrada de serviços da Apple e de gestores de palavras-passe. Os dados de inspeção registados não são enviados pelo Flowlight. Desativar a inspeção interrompe o proxy; Remover o certificado e os dados + são substituídos pelo respetivo comprimento antes de algo ser guardado — reconhecidos pelo nome (Authorization, cookies, chaves de API) e pelas + palavras do nome, pelo que X-Access-Key também é apanhado. Isso é uma heurística, não uma garantia: um cabeçalho que leve um segredo + sob um nome que nada reconhece ficaria registado. O Flowlight exclui da desencriptação a sua lista integrada de serviços da Apple e de gestores de palavras-passe. Os dados de inspeção registados não são enviados pelo Flowlight. Desativar a inspeção interrompe o proxy; Remover o certificado e os dados registados elimina o certificado, a sua definição de confiança e todos os pedidos registados.

Pedidos de rede que a app faz

@@ -54,7 +56,7 @@

Pedidos de rede que a app faz

PedidoEnviado paraO que contémQuando Procura de atualizaçõesapi.github.comUm pedido HTTPS normal pela versão mais recente; o GitHub vê o seu endereço IP e o agente de utilizador Flowlight/<version>Na abertura e uma vez por dia, a partir da 0.1.2. Interruptor para desativar em Definições › Geral Transferência da atualizaçãogithub.comA imagem de disco e o seu ficheiro de soma de verificaçãoSó quando clica em Transferir e abrir - DNS inversoO resolvedor de DNS que tem configuradoUma consulta do nome registado de um endereço IP, quando não foi visto nenhum nome de anfitriãoConforme necessário, no modo de captura predefinido + DNS inversoO resolvedor de DNS que tem configuradoUma consulta do nome registado de um endereço IP, quando não foi visto nenhum nome de anfitriãoConforme necessário, no modo de captura por amostrador, que é a predefinição até a extensão de rede estar a correr. Sem interruptor para desligar: sem isto, o amostrador não consegue dar nome à maioria das ligações. A extensão de rede dá-lhes nome a partir do próprio tráfego e não faz esta consulta Consulta do proprietário da redeTeam Cymru, por DNSEndereços IP públicos sem nome de anfitrião conhecido. Os endereços privados e reservados nunca saem do seu MacAtivada por predefinição. Interruptor para desativar em Captura › Identificar os proprietários da rede Perguntar com um modelo alojadoO fornecedor que escolher: Anthropic, OpenAI, Google Gemini ou um endpoint compatívelA sua pergunta e os resultados devolvidos pelas consultas de leitura do Flowlight escolhidas pelo modelo. A base de dados de tráfego em si não é enviadaSó quando escolhe um fornecedor alojado e submete uma pergunta. O ecrã Perguntar mostra os pedidos transmitidos Exportação para um coletorO endpoint de OpenTelemetry ou de HTTP que configurarOs campos indicados em Definições › Exportação, como as agregações de tráfego e os alertas. Os cabeçalhos de autenticação ficam guardados no porta-chavesSó depois de configurar um endpoint e ativar a exportação @@ -74,11 +76,15 @@

Conservação

Este site

Este site é uma página estática alojada no GitHub Pages e servida através da Cloudflare. Não define cookies nem executa analítica alguma. O GitHub - e a Cloudflare processam os pedidos para o servir, e os tipos de letra são carregados do Google Fonts, que recebe o seu endereço IP quando o visita.

+ e a Cloudflare processam os pedidos para o servir. Os tipos de letra são servidos deste domínio, por isso mostrar uma página não envia nada a mais + ninguém — esta página carregava-os antes do Google, o que significava que a página que explica que o Flowlight não envia nada para lugar algum + fazia um pedido ao Google para se mostrar a si mesma.

Contacto

-

Dúvidas ou uma preocupação de privacidade? Abra um problema. Para qualquer assunto sensível, use a - comunicação privada de vulnerabilidades do GitHub no repositório.

+

Dúvidas ou uma preocupação de privacidade? Abra um problema. Para um problema de segurança, use a + comunicação privada de vulnerabilidades do GitHub, ou envie um email para + security@xinbetween.com se preferir não usar o GitHub — veja o + SECURITY.md para saber o que esperar.

diff --git a/site/pages/pt-PT/threat-model.html b/site/pages/pt-PT/threat-model.html new file mode 100644 index 0000000..2e43f74 --- /dev/null +++ b/site/pages/pt-PT/threat-model.html @@ -0,0 +1,128 @@ + +
+
+

Modelo de ameaças

+

Observar, não impedir

+

O Flowlight diz-lhe o que o software do seu Mac está a enviar, e para onde. Não é uma defesa contra um atacante que já + controla a máquina, e a diferença importa o suficiente para ficar numa página própria em vez de numa nota de pé de página.

+
+ +
+ + +
+

Para que serve

+

O Flowlight responde a uma pergunta a que o Mac não responde: que app enviou isto, e para onde foi? Foi feito para + software que se porta mal a céu aberto — um agente de IA a contactar algo que ninguém lhe pediu, uma ferramenta a carregar mais do que + deveria, um processo a falar com um endereço que não tem nome. Esse comportamento é visível no tráfego, e o trabalho do Flowlight é + torná-lo legível e dizer com honestidade quando não consegue.

+

Não é um antivírus, não é um agente de EDR, e não é uma firewall no sentido de algo que se coloca entre você e um atacante. Onde os dois se + sobrepõem — o Flowlight pode recusar ligações — a recusa é uma comodidade para controlar software em que já confia, não uma barreira contra + software em que não confia.

+ +

Contra o que defende

+
    +
  • Saída de dados que passa despercebida. Uma app ou um agente a enviar para um lugar que não teria aprovado, inclusive + através de uma ferramenta que ele próprio executou. O Flowlight atribui a ligação ao processo que a fez e ao agente que iniciou esse + processo.
  • +
  • Mudanças silenciosas de comportamento. Uma app que de repente contacta destinos novos, move muito mais do que a sua + base de referência, ou trabalha enquanto está ausente. Cada alerta nomeia o número que a fez disparar, para que possa discordar dela.
  • +
  • Um agente a exceder aquilo que permitiu. Uma lista de permissões por agente, e regras que recusam as ligações fora + dela, com a recusa registada e um clique para a permitir.
  • +
  • Uma atualização adulterada. Cada versão publica uma soma de verificação; o atualizador recusa uma transferência que não + consegue verificar e recusa instalar uma app que não esteja assinada pela mesma equipa que a cópia a pedir a atualização.
  • +
+ +

Software com root pode desligá-lo

+

O Flowlight corre em seu nome, com uma extensão de sistema que o macOS arranca por ele. Qualquer coisa a correr como root — ou qualquer + coisa cujo instalador aprove — pode descarregar essa extensão, parar a app ou apagar a sua base de dados. Nada na conceção o impede, e + nenhuma ferramenta de monitorização no macOS o consegue impedir e continuar a ser uma ferramenta que também você pode desligar.

+

A afirmação honesta é mais estreita e continua a ser útil: o software que se porta mal mas não está ativamente a fugir a um monitor será + visto. O software que lhe está ativamente a fugir pode não ser, e deixará pelo menos uma falha — uma extensão que parou, um período sem + dados — que o ecrã Cobertura está lá para mostrar.

+ +

O que escapa à captura

+
    +
  • O tráfego anterior ao início da captura. Não há preenchimento retroativo. Uma ligação que abriu antes do filtro nunca + lhe foi entregue.
  • +
  • Os serviços de sistema isentos dos filtros de conteúdo. O macOS não mostra tudo a um filtro de conteúdo; parte do seu + próprio tráfego nunca chega ao nosso.
  • +
  • Outro filtro de conteúdo a ocupar o lugar. O macOS executa um de cada vez. Se uma VPN ou um agente de segurança o + tiver, o filtro do Flowlight instala-se, liga-se, e nunca lhe é pedido que filtre nada — a Captura di-lo, em vez de mostrar um ecrã + vazio.
  • +
  • As ligações curtas, com o amostrador. Sem a extensão, o Flowlight lê contadores uma vez por segundo: uma ligação que + abre e fecha entre duas leituras nunca é registada.
  • +
  • Os canais que não são TCP nem UDP. O Bluetooth e o USB vêem-se como dispositivos, não como bytes. O servidor MCP local + de um agente a comunicar por um pipe não é tráfego de rede nenhum e não aparece em lugar algum.
  • +
+ +

O que escapa à inspeção

+

A inspeção HTTPS lê apenas o que é encaminhado pelo proxy local do Flowlight, e isso é um programa que o decide quando arranca. Uma app que + ignora as definições de proxy, uma que foi iniciada antes de a inspeção ser ligada, ou uma que fixa os seus certificados passa intacta — de + propósito, porque quebrar uma ligação com o certificado fixado quebraria a app. O QUIC também não é entregue ao proxy.

+

Por isso um ecrã Inspecionar vazio significa «não foi encaminhado nada para aqui», não «não aconteceu nada». A Cobertura diz qual das duas + coisas se aplica, app por app.

+ +

O que o bloqueio é, e não é

+

Uma regra que recusa ligações é levada a cabo pela extensão de rede, no caminho, antes de a ligação ser feita. Uma regra que nomeia um URL é + levada a cabo pelo proxy de inspeção, que responde ao pedido com um estado que a app consegue ler. São as duas únicas partes do Flowlight que + agem em vez de relatar — o amostrador nettop não consegue recusar nada, por isso num Mac que capta com o amostrador nenhuma regra é aplicada, e + o Flowlight di-lo em vez de oferecer um interruptor que não faz nada.

+

Continua a não ser impedir. Um agente que consiga executar uma shell pode fazer à mão o que a ferramenta recusada teria feito. Uma recusa + que pode desfazer num clique é uma recusa por onde a tentativa seguinte de um agente pode passar. O tráfego local, o DNS, os serviços da + Apple e as ligações do próprio Flowlight nunca são recusados, porque um Mac bloqueado é um resultado pior do que um agente bloqueado. E a + aplicação efetiva caduca uns segundos depois de o Flowlight deixar de correr: uma recusa que ninguém consegue ver é pior do que nenhuma.

+

A inspeção e a recusa não se combinam. O tráfego encaminhado pelo próprio proxy do Flowlight sai do Mac como tráfego do + Flowlight, e o Flowlight nunca se recusa a si mesmo — por isso uma app cujos pedidos está a ler é uma app cujas ligações as regras já não + travam. Ligar a inspeção para ver mais custa-lhe a aplicação das regras, e até agora nada no ecrã o dizia.

+ +

O que o próprio Flowlight guarda

+

Metadados de tráfego numa base de dados SQLite local, com uma retenção publicada. Com a inspeção HTTPS ligada, guarda também os corpos dos + pedidos e das respostas durante três dias — a coisa mais sensível que chega a manter. Os cabeçalhos de credenciais são ocultados por nome e + por palavra, o que é uma heurística e não uma garantia; um cabeçalho que leve um segredo sob um nome que nada reconhece pode ficar + registado.

+

A base de dados de tráfego nunca é enviada. Há, ainda assim, três coisas mais pequenas que saem do Mac sem lhe serem pedidas, + todas nomeadas na página de privacidade: a procura de atualizações, que pede ao GitHub a versão mais + recente no arranque e uma vez por dia; a consulta do proprietário da rede, que pergunta ao Team Cymru por endereços públicos sem + nome de anfitrião; e, enquanto o Flowlight lê contadores em vez de correr a sua extensão, uma consulta de DNS inverso dos endereços + para os quais não viu nome. As duas primeiras têm interruptores para desligar. A terceira não tem, porque no amostrador é quase + tudo aquilo que dá um nome a uma ligação — vai para o resolvedor de DNS que o Mac já usa e para quando a extensão assume e passa a + nomear as ligações a partir do próprio tráfego. Perguntar com um modelo alojado envia muito mais do que qualquer uma delas, e é a + única coisa que fica desligada até a configurar.

+ +

Atualizações

+

As versões são assinadas com um Developer ID e notarizadas. O atualizador exige uma soma de verificação publicada e recusa uma + transferência sem ela; depois verifica que a app transferida está assinada pela mesma equipa que a cópia em execução antes de a instalar. Uma + atualização assinada por outra pessoa é recusada mesmo que no resto seja válida.

+ +

Comunicar uma vulnerabilidade

+

Use a comunicação privada de vulnerabilidades do GitHub, ou envie um email + para security@xinbetween.com se preferir não usar o GitHub. O + SECURITY.md diz o que está no âmbito e o que pode esperar. + Um erro comum — uma falha, um número errado, um ecrã que engana — pertence em vez disso aos + problemas.

+
+
+
diff --git a/site/pages/threat-model.html b/site/pages/threat-model.html new file mode 100644 index 0000000..74d3ad7 --- /dev/null +++ b/site/pages/threat-model.html @@ -0,0 +1,126 @@ + +
+
+

Threat model

+

Monitoring, not prevention

+

Flowlight tells you what software on your Mac is sending and where. It is not a defence against an attacker who + already controls the machine, and the difference matters enough to state on its own page rather than in footnotes.

+
+ +
+ + +
+

What it is for

+

Flowlight answers a question the Mac does not: which app sent this, and where did it go? It is built for + software that behaves badly in the open — an AI agent contacting something nobody asked it to, a tool uploading more than it + should, a process talking to an address that has no name. That behaviour is visible in the traffic, and Flowlight's job is to + make it legible and to say honestly when it cannot.

+

It is not antivirus, not an EDR agent, and not a firewall in the sense of something that stands between you and an attacker. + Where the two overlap — Flowlight can refuse connections — the refusal is a convenience for controlling software you already + trust, not a barrier against software you don't.

+ +

What it defends against

+
    +
  • Unnoticed egress. An app or an agent sending somewhere you would not have approved, including through a + tool it ran itself. Flowlight attributes the connection to the process that made it and to the agent that started that + process.
  • +
  • Quiet changes in behaviour. An app that suddenly contacts new destinations, moves far more than its + baseline, or works while you are away. Every alert names the number that tripped it, so you can disagree with it.
  • +
  • An agent exceeding what you allowed. An allowlist per agent, and rules that refuse connections outside it, + with the refusal recorded and one click to allow it.
  • +
  • A tampered update. Every release publishes a checksum; the updater refuses a download it cannot verify and + refuses to install an app not signed by the same team as the copy asking for the update.
  • +
+ +

Software with root can switch it off

+

Flowlight runs as you, with a system extension macOS starts on its behalf. Anything running as root — or anything you approve + an installer for — can unload that extension, stop the app, or delete its database. Nothing in the design prevents that, and no + monitoring tool on macOS can prevent it while remaining a tool you can also turn off yourself.

+

The honest claim is narrower and still useful: software that is misbehaving but not actively evading a monitor will be seen. + Software that is actively evading one may not be, and will at least leave a gap — an extension that stopped, a period with no + data — which the Coverage screen is there to show.

+ +

What capture misses

+
    +
  • Traffic from before capture started. There is no backfill. A connection that opened before the filter did + was never offered to it.
  • +
  • System services exempt from content filters. macOS does not show a content filter everything; some of its + own traffic never reaches ours.
  • +
  • Another content filter holding the slot. macOS runs one at a time. If a VPN or a security agent has it, + Flowlight's filter installs, connects, and is never asked to filter anything — Capture says so rather than showing an empty + screen.
  • +
  • Short connections, on the sampler. Without the extension, Flowlight reads counters once a second: a + connection that opens and closes between two readings is never recorded.
  • +
  • Channels that are not TCP or UDP. Bluetooth and USB are visible as devices, not as bytes. An agent's local + MCP server talking over a pipe is not network traffic at all and appears nowhere.
  • +
+ +

What inspection misses

+

HTTPS inspection reads only what is routed through Flowlight's local proxy, and a program decides that when it starts. An app + that ignores proxy settings, one started before inspection was switched on, or one that pins its certificates is passed through + untouched — deliberately, because breaking a pinned connection would break the app. QUIC is not offered to the proxy either.

+

So an empty Inspect screen means "nothing was routed here", not "nothing happened". Coverage says which of the two applies, + per app.

+ +

What blocking is, and isn't

+

A rule that refuses a connection is carried out by the Network Extension, in the path, before the connection is made. A rule + that names a URL is carried out by the inspection proxy instead, which answers the request with a status the app can read. + Those are the only two parts of Flowlight that act rather than report — the nettop sampler can refuse nothing at all, so on a + Mac running the sampler no rule is enforced, and Flowlight says so rather than offering a switch that does nothing.

+

It is still not prevention. An agent that can run a shell can do by hand what a refused tool would have done. A refusal you + can undo in one click is a refusal an agent's next attempt may walk through. Local traffic, DNS, Apple's own services and + Flowlight's own connections are never refused, because a blocked Mac is a worse outcome than a blocked agent. And enforcement + lapses a few seconds after Flowlight stops running: a refusal nobody can see is worse than none.

+

Inspection and refusal do not combine. Traffic routed through Flowlight's own proxy leaves the Mac as + Flowlight's traffic, and Flowlight never refuses itself — so an app whose requests you are reading is an app whose connections + rules no longer stop. Turning inspection on to see more costs you enforcement, and nothing on screen previously said so.

+ +

What Flowlight itself holds

+

Traffic metadata in a local SQLite database, with published retention. With HTTPS inspection on it also holds request and + response bodies for three days — the most sensitive thing it ever keeps. Credential headers are redacted by name and by word, + which is a heuristic and not a guarantee; a header carrying a secret under a name nothing recognises can be recorded.

+

The traffic database is never uploaded. Three smaller things do leave the Mac without being asked for, all of them named on + the privacy page: the update check, which asks GitHub for the latest release on launch and + daily; the network-owner lookup, which asks Team Cymru about public addresses that have no hostname; and, while Flowlight is + reading counters instead of running its extension, a reverse-DNS lookup of addresses it saw no name for. The first two have + off switches. The third does not, because on the sampler it is most of how a connection gets a name at all — it goes to the + resolver the Mac already uses, and it stops once the extension takes over and names connections from the traffic itself. + Ask with a hosted model sends far more than any of them, and is the one thing that stays off until you configure it.

+ +

Updates

+

Releases are signed with a Developer ID and notarized. The updater requires a published checksum and refuses a download + without one, then verifies that the downloaded app is signed by the same team as the running copy before installing it. An + update signed by somebody else is refused even if it is otherwise valid.

+ +

Reporting a vulnerability

+

Use GitHub's private vulnerability reporting, or email + security@xinbetween.com if you would rather not use GitHub. + SECURITY.md says what is in scope and what to expect. + An ordinary bug — a crash, a wrong number, a misleading screen — belongs in the + issue tracker instead.

+
+
+
diff --git a/site/pages/zh-Hans/docs.html b/site/pages/zh-Hans/docs.html index 92443f2..3c1f77d 100644 --- a/site/pages/zh-Hans/docs.html +++ b/site/pages/zh-Hans/docs.html @@ -35,7 +35,7 @@

使用 Flowlight

设置与数据 @@ -91,12 +91,20 @@

各个视图

视图快捷键它回答什么 实时⌘1现在什么在动:最近几秒按应用的速率,以及最忙的目标。 - AI 代理⌘2哪些代理在活动、它们用哪些 AI 提供方,以及它们还联系了什么。 + AI 代理⌘2哪些代理在活动、它们用哪些 AI 提供方,以及它们还联系了什么。 报告⌘3流量去了哪里,从秒到年。按应用、目标或 IP 分组;切到图表或值得一看;导出 CSV。 - 警报⌘4所有看起来不寻常的事,带上应用、目标和触发规则的那个数字。 - 检查⌘5可选:你交给 Flowlight 转发的那些代理的解密请求,以及它们背后的工具调用。搜索能深入请求和响应正文。 - 捕获⌘6哪个引擎在记录、扩展的状态、主机名学习,以及数据库放在哪里。 + 警报⌘4所有看起来不寻常的事,带上应用、目标和触发规则的那个数字。 + 规则⌘5你设过的每一条允许列表和拒绝,各自管到哪里,以及实际拦下了什么。 + 提问⌘6用平常的话问你自己的流量,由本地模型或托管模型从记录下来的历史里作答。 + 检查⌘7可选:你交给 Flowlight 转发的那些代理的解密请求,以及它们背后的工具调用。搜索能深入请求和响应正文。 + 设备⌘8你打开之前一直是关的:蓝牙、USB 与外置存储,一台 Mac 用它们跟用网络一样多。 + 覆盖范围⌘9Flowlight 说不清的部分——按应用,它的流量有没有被看到、被命名、被读懂。 + 捕获⌘0哪个引擎在记录、扩展的状态、主机名学习,以及数据库放在哪里。 +

快捷键就是侧边栏的顺序,所以 ⌘0 是第十项,不是被跳过的位置。

+
实时视图:一列应用,各自带着当前的发送与接收速率,以及最忙的目标。
+
实时,Flowlight 打开时进入的那个视图。

在报告里,把指针停在某根柱子上就能看到是哪些应用造成的,点它可以放大,双击任意一行则把报告收窄到那一项。

AI 代理规则

@@ -226,10 +234,14 @@

HTTPS 检查(可选)

并在那里启动它们。在高级里,你可以只解密 AI 代理而不是所有应用、编辑从不解密列表、拷贝 某个 shell 的配置,或者移除证书和所有已记录的内容。

Flowlight 会把内置的 Apple 服务和密码管理器名单排除在解密之外(在“设置”里可以编辑这份列表)。固定证书的应用可能会拒绝 - Flowlight 的证书;Flowlight 会发现并让它们以加密方式直接通过。API 密钥、cookie 以及其他凭据标头从不 - 保存,记录的请求保留 3 天,移除证书与记录的数据会删除证书、它的信任 + Flowlight 的证书;Flowlight 会发现并让它们以加密方式直接通过。API 密钥、cookie 以及其他凭据标头在任何内容被存储之前 + 都会被替换为它们的长度——按名称、也按名称中的词来匹配,这能抓到某家厂商自己的写法,但不能保证一个都不漏——记录的请求保留 3 天,移除证书与记录的数据会删除证书、它的信任 设置以及所有已记录的内容。检查仅支持 HTTP/1.1(Flowlight 会向双方请求它),且在演示模式下不可用。

+

从一行直接过来。在实时、报告或 AI 代理里右键点击一个应用或一个目的地,选择检查 … 的流量: + 检查会打开,而那个名字已经填在搜索框里。用搜索框而不是一个隐藏的过滤器是故意的——你可以把它放宽、收窄或清空,而不必回到 + 你出发的地方。只有经过代理服务器的流量才可能出现,所以一行你知道很忙的记录,在这里仍可能什么都不显示。

+

模拟响应

想看看某个 API 失败、卡住或返回奇怪内容时代理会怎么应对,那就自己来响应那个端点。在 检查 › 模拟响应里,一条规则指明主机、路径和方法,并给出用来回复的状态码、标头、正文和 @@ -359,6 +371,20 @@

捕获:引擎与来源

不需要过滤器,可以和它们并存。 关于它是如何构建的,见开发者指南。

+

覆盖范围:Flowlight 说不清的部分

+

其他每个画面回答的都是发生了什么。覆盖范围回答的是有什么本来不会被告诉你,而这决定了其他画面值多少。 + 它对每个应用问三个问题,因为这三件事是各自独立地失效的。

+

有没有被看到?网络扩展在每一条流建立时就看到它。nettop 采样器每秒读一次计数器,所以在两次读取之间开启 + 又关闭的连接——一次 DNS 查询、一次很快的 API 调用、一个运行 curl 后就退出的脚本——会整条缺失。那是任何百分比 + 都表达不了的缺口,所以这里用文字写出来,而不是给它打分。

+

有没有名字?该应用的字节中,发往有主机名(而不是只有一个地址)的目的地的比例。是字节,不是连接数: + 一条没有名字却运走一个 GB 的连接,比一百条各运一个 KB 的连接是更大的洞,而按连接数来数,排序恰好相反。

+

内容能不能读?HTTPS 检查是否解密了该应用的任何一点流量。有四个答案,其中只有一个才是缺口:正在被读; + 它从未到达代理服务器;它在“从不解密”列表中,那是你自己做的选择;或者检查是关闭的,那是一个设置,而不是某个应用上的失败。

+

任何引擎都完全看不到的东西列在画面上,而不是留给这个页面:捕获开始之前的流量、从不会交给内容过滤器的 + 系统服务、固定证书的应用、从不会交给代理服务器的 QUIC,以及某个代理通过管道与它通信的本地 MCP 服务器。这些在 Flowlight 的 + 任何地方都不会出现,因此也不在这些数字之内——一个只数自己能看到的东西的覆盖率,会是一种安慰,而不是一个事实。

+

设备:蓝牙、USB 与外置存储

一台 Mac 收发数据的途径不止 TCP 和 UDP。设备界面负责其余部分,而且在你打开之前 它一直关闭——不是因为它需要 Flowlight 尚未拥有的权限,而是因为监视你 Mac 的更多部分 @@ -485,8 +511,9 @@

问题与解答

它会显示安装了哪些扩展、macOS 是否真的启动了 Flowlight 的过滤器,以及最近一次记录是什么时候。 把它粘贴到一个 issue 里。
Flowlight 会把关于我的任何信息发到什么地方吗?
-
不会。没有账号,没有遥测,也没有分析。它发出的请求只有每日更新检查、可选的网络所有者 - 查询,以及反向 DNS——每一项都列在隐私页面上,并且每一项都有开关可以关掉。
+
没有账号,没有遥测,也没有分析,而且你的流量数据库从不上传。确实有三个请求会离开这台 Mac,它们都列在隐私页面上: + 每日更新检查和可选的网络所有者查询,这两个都有开关可以关掉;以及 Flowlight 在采样器上运行时的反向 DNS,它没有开关—— + 没有它,采样器就没法给大多数连接命名。
它会让我的 Mac 变慢,或者更耗电吗?
窗口关闭时 Flowlight 几乎什么都不做:它保留菜单栏速率,每秒写入一行。网络扩展 比作为后备的采样器更省,后者每秒都要启动一个短命的 nettop 进程。
diff --git a/site/pages/zh-Hans/index.html b/site/pages/zh-Hans/index.html index 6b35e49..ac05bec 100644 --- a/site/pages/zh-Hans/index.html +++ b/site/pages/zh-Hans/index.html @@ -162,7 +162,8 @@

看住 AI 代理如何使用网络

规则管多久,你说了算

指定一个应用、一个代理、一个目标或单个 URL 就能阻止它——在发现它的那一行右键即可。 可以永久生效、到某个时间、到 Flowlight 退出,或只在选定的时段内生效;有一个暂停开关,每次拒绝也都留着出口。 - 最具体的规则胜出,打平时以阻止为准。

+ 最具体的规则胜出,打平时以阻止为准。 + 它是对你本来就信任的软件的管控,不是一道拦住你不信任的软件的屏障——见威胁模型。

Cursor ⇥ raw.githubusercontent.com · 已拒绝 4 次 · 工作日 18:00–09:00

@@ -342,9 +343,14 @@

把受支持的工具调用与网络请求对上

接下来

正在路上的东西

-

Flowlight 今天已经能看见、能解释、能拒绝。剩下的部分会按这个顺序做。

+

Flowlight 今天已经能看见、能解释、能拒绝——正如威胁模型所说, + 这是监控,不是防护。剩下的部分会按这个顺序做。

+
给检查定一份预算 0.9.3

记录下来的正文是 Flowlight 保存的东西里最敏感的。用标头的允许列表而不是拒绝列表,加上你自己的模式、一个干脆不保留任何标头的选项、按应用的上限,以及一个自己会过期的会话。

+
让我看看这条规则会拦下什么 0.9.4

把最近一天拿来对一条规则重放,在它拒绝任何东西之前,先列出它本会拒绝的。数据早就在那里了,只是它一直只用来解释过去。

+
什么会离开这台 Mac,在它离开之前 0.9.5

在第一行到达收集器之前:目的地、是否加密、哪些字段会走、其中有没有标头——Flowlight 要求别人做到的那种披露,用在自己身上。

+
代理除了联网还做了什么 1.0

一个文件的外流是一次读取加一次发送,而今天只看得见发送。把代理的工具打开了什么、写了什么、启动了什么记录下来,就能让读取了私钥,然后联系了 paste.example成为一条发现,而不是两个画面。它不是资源监视器:CPU 和内存是活动监视器的事。这需要 Apple 的 EndpointSecurity 授权,也需要上面那份检查预算先存在。

先 Linux,再 Windows

分析内核是可移植的 Swift,捕获不是。先出一个带本地网页界面的 Linux 守护进程,基于 eBPF 而非 macOS API。

diff --git a/site/pages/zh-Hans/privacy.html b/site/pages/zh-Hans/privacy.html index fed4cd5..ba14ce3 100644 --- a/site/pages/zh-Hans/privacy.html +++ b/site/pages/zh-Hans/privacy.html @@ -46,7 +46,8 @@

HTTPS 检查

默认关闭。如果你打开它,Flowlight 会在你的 Mac 上创建一个证书颁发机构(它的私钥绝不离开 ~/Library/Application Support/Flowlight/Inspection),并运行一个只接受来自本机连接的代理。对于你 交给它转发的应用,它会把请求和响应(含最多 2 MB 的正文)记录在本地数据库里,保留 3 天。凭据标头 - (Authorization、cookie、API 密钥)在任何内容被存储之前,都会被替换为它们的长度。Flowlight 会把内置的 Apple 服务和密码管理器名单排除在解密之外。记录下来的检查数据不会被 Flowlight 上传。关掉检查会停止代理;移除证书与记录的 + 在任何内容被存储之前,都会被替换为它们的长度——按名称(Authorization、cookie、API 密钥)、也按名称中的词来辨认,所以 + X-Access-Key 同样会被抓到。那是一种启发式判断,不是保证:一个把密钥放在没人认得的名字底下的标头,会被记录下来。Flowlight 会把内置的 Apple 服务和密码管理器名单排除在解密之外。记录下来的检查数据不会被 Flowlight 上传。关掉检查会停止代理;移除证书与记录的 数据会删除证书、它的信任设置以及每一条已记录的请求。

应用发出的网络请求

@@ -54,7 +55,7 @@

应用发出的网络请求

请求发往包含什么什么时候 更新检查api.github.com一个查询最新版本的标准 HTTPS 请求;GitHub 会看到你的 IP 地址和 Flowlight/<version> 这个 User-Agent 标识启动时以及每天一次,自 0.1.2 起。关闭开关在设置 › 通用 更新下载github.com磁盘映像及其校验和文件只在你点击“下载并打开”时 - 反向 DNS你配置的 DNS 解析器在没有看到主机名时,查询某个 IP 地址登记的名称按需进行,在默认捕获模式下 + 反向 DNS你配置的 DNS 解析器在没有看到主机名时,查询某个 IP 地址登记的名称按需进行,在采样器捕获模式下,也就是网络扩展开始运行之前的默认模式。没有关闭开关:没有它,采样器就没法给大多数连接命名。网络扩展从流量本身给它们命名,因此不做这件事 网络所有者查询Team Cymru,通过 DNS没有已知主机名的公网 IP 地址。私有地址和保留地址绝不离开你的 Mac默认开启。关闭开关在捕获 › 识别网络所有者 用托管模型提问你选择的提供方:Anthropic、OpenAI、Google Gemini 或兼容的端点你的问题,以及模型选中的那些只读 Flowlight 查询所返回的结果。流量数据库本身不会被上传只在你选择了托管提供方并提交问题时。提问界面会显示发送出去的请求 收集器导出你配置的 OpenTelemetry 或 HTTP 端点设置 › 导出里列出的字段,例如流量汇总和警报。认证标头保存在钥匙串里只在你配置好端点并启用导出之后 @@ -74,11 +75,14 @@

保留期限

本网站

本站是托管在 GitHub Pages 上、经由 Cloudflare 提供服务的静态页面。它不设置 cookie,也不运行任何分析。GitHub - 和 Cloudflare 会处理请求以便提供服务,而字体从 Google Fonts 加载,你访问时它会收到你的 IP 地址。

+ 和 Cloudflare 会处理请求以便提供服务。字体由本域名提供,所以渲染一个页面不会向任何其他人发送任何东西——这个页面 + 以前是从 Google 加载字体的,也就是说,那个解释 Flowlight 什么都不往外发的页面,为了渲染自己而向 Google 发了一个请求。

联系方式

-

有问题或隐私方面的顾虑?提交一个 issue。涉及敏感内容的,请使用 GitHub - 在本仓库上的私密漏洞报告功能。

+

有问题或隐私方面的顾虑?提交一个 issue。安全问题请使用 GitHub 的 + 私密漏洞报告,或者如果你不愿意用 GitHub,可以发邮件到 + security@xinbetween.com——可以期待什么,见 + SECURITY.md。

diff --git a/site/pages/zh-Hans/threat-model.html b/site/pages/zh-Hans/threat-model.html new file mode 100644 index 0000000..4736f1d --- /dev/null +++ b/site/pages/zh-Hans/threat-model.html @@ -0,0 +1,115 @@ + +
+
+

威胁模型

+

只做监控,不做防护

+

Flowlight 会告诉你,你 Mac 上的软件正在发送什么、发往哪里。它不是用来对付已经掌控这台机器的攻击者的, + 而这个区别重要到值得单开一页来讲,而不是塞进脚注里。

+
+ +
+ + +
+

它是做什么用的

+

Flowlight 回答一个 Mac 不回答的问题:是哪个应用发出去的,它去了哪里?它针对的是明面上就行为不端的 + 软件——一个去联系没人让它联系的地方的 AI 代理、一个上传得比它该上传的更多的工具、一个在跟没有名字的地址说话的进程。 + 这种行为在流量里是看得见的,而 Flowlight 的职责就是把它变得可读,并在做不到的时候老实说出来。

+

它不是杀毒软件,不是 EDR 代理,也不是那种站在你和攻击者之间的防火墙。在两者重叠的地方——Flowlight 可以拒绝连接—— + 那种拒绝是一种便利,用来管住你本来就信任的软件,而不是一道拦住你不信任的软件的屏障。

+ +

它能防住什么

+
    +
  • 没人留意的数据外流。某个应用或代理把东西发往一个你本来不会批准的地方,包括经由它自己运行的工具发出去。 + Flowlight 会把这条连接归属到发起它的进程,以及启动那个进程的代理。
  • +
  • 行为上的悄然变化。某个应用突然联系新的目标、移动的数据远超它自己的基线,或在你离开时还在工作。 + 每条警报都会说明是哪个数字触发了它,所以你可以不同意它。
  • +
  • 超出你所允许范围的代理。每个代理各有一份允许列表,还有拒绝列表之外连接的规则;拒绝会被记录下来, + 一键就能改为允许。
  • +
  • 被篡改的更新。每个版本都会公布校验和;更新程序会拒绝无法校验的下载,也会拒绝安装签名团队与 + 发起更新的那份运行中副本不一致的应用。
  • +
+ +

拥有 root 的软件可以把它关掉

+

Flowlight 以你的身份运行,并使用一个由 macOS 代它启动的系统扩展。任何以 root 运行的东西——或者任何你批准了安装程序的 + 东西——都可以卸载那个扩展、停掉这个应用,或者删掉它的数据库。设计上没有任何东西能阻止这一点,而 macOS 上的任何监控工具 + 都无法在保持为一个你自己也能关掉的工具的同时阻止它。

+

诚实的说法更窄,但依然有用:行为不端、却没有主动躲避监控的软件会被看见。主动躲避监控的软件可能不会被看见, + 但它至少会留下一个缺口——一个停掉的扩展、一段没有数据的时间——而覆盖范围界面 + 就是为了把它显示出来。

+ +

捕获会漏掉什么

+
    +
  • 捕获开始之前的流量。没有事后补录。在过滤器之前就已经建立的连接,从来没有交给过它。
  • +
  • 豁免于内容过滤器的系统服务。macOS 并不会把一切都给内容过滤器看;它自己的一部分流量永远到不了我们这里。
  • +
  • 位置被另一个内容过滤器占着。macOS 一次只运行一个。如果某个 VPN 或安全代理占着它,Flowlight 的过滤器 + 能安装、能连接,却永远不会被要求过滤任何东西——捕获界面会明说这一点,而不是给你一个空白界面。
  • +
  • 短连接,在采样器上。没有扩展时,Flowlight 每秒读取一次计数器:在两次读取之间开启又关闭的连接, + 永远不会被记录。
  • +
  • 不是 TCP 也不是 UDP 的通道。蓝牙和 USB 是以设备的形式可见的,不是以字节的形式。代理的本地 MCP 服务器 + 通过管道通信,那根本不是网络流量,任何地方都不会出现。
  • +
+ +

检查会漏掉什么

+

HTTPS 检查只读得到经由 Flowlight 本地代理转发的东西,而这件事是由程序在启动的那一刻决定的。忽略代理设置的应用、 + 在检查打开之前就启动的应用,或者固定自己证书的应用,都会原封不动地直接通过——这是刻意的,因为破坏一条固定了证书的连接 + 就等于弄坏那个应用。QUIC 同样不会交给代理。

+

所以,检查界面是空的,意思是“没有东西被转发到这里”,而不是“什么都没发生”。到底是哪一种,覆盖范围会按应用逐个说明。

+ +

阻止是什么,不是什么

+

一条拒绝连接的规则由网络扩展执行,就在连接的路径上,在连接建立之前。一条指名 URL 的规则则由检查用的代理服务器执行, + 它用应用能读到的状态来回答那个请求。这两处是 Flowlight 里唯一动手而不只是报告的部分——nettop 采样器什么都拒绝不了, + 所以在用采样器的 Mac 上,没有任何规则会被强制执行,而 Flowlight 会把这一点说出来,而不是摆一个什么都不做的开关。

+

它仍然不是防护。一个能运行 shell 的代理,可以手动做到那个被拒绝的工具本来要做的事。一次你能一键撤销的拒绝, + 也是代理下一次尝试就可能走过去的拒绝。本地流量、DNS、Apple 自家的服务以及 Flowlight 自己的连接永远不会被拒绝, + 因为一台被封住的 Mac 比一个被封住的代理更糟。而且 Flowlight 停止运行几秒之后,强制执行就会失效: + 没人能看见的拒绝比没有拒绝更糟。

+

检查与拒绝无法并存。经由 Flowlight 自己的代理服务器转发的流量,是以 Flowlight 的流量的身份离开这台 Mac 的, + 而 Flowlight 从不拒绝自己——所以一个你正在读它请求的应用,也就是一个规则不再拦得住它连接的应用。为了看得更多而打开检查, + 代价就是强制执行,而画面上此前并没有说这一点。

+ +

Flowlight 自己保存了什么

+

流量元数据,存在本地的 SQLite 数据库里,保留期限是公布的。打开 HTTPS 检查后,它还会保存请求和响应的正文三天—— + 这是它所保存的东西里最敏感的。凭据标头会按名称、也按其中的词来遮蔽,那是一种启发式判断,不是保证; + 一个把密钥放在没人认得的名字底下的标头,是可能被记录下来的。

+

流量数据库从不上传。不过确实有三样比较小的东西,会在你没有要求的情况下离开这台 Mac,它们都在隐私页面上 + 逐项列出:更新检查,它在启动时和每天一次向 GitHub 询问最新的发布;网络所有者查询,它就没有主机名的公网地址向 Team Cymru + 询问;以及,当 Flowlight 在读计数器而不是在跑它的扩展时,对那些它没看到名字的地址做的一次反向 DNS 查询。前两样都有关闭 + 开关。第三样没有,因为在采样器上,一条连接能有名字,大半就靠它——这次查询会走这台 Mac 本来就在用的解析器,而一旦扩展 + 接手、从流量本身给连接命名,它就停了。用托管模型提问,送出去的东西比它们任何一个都多得多,而它也是唯一在你配置之前 + 一直关着的。

+ +

更新

+

版本以 Developer ID 签名并经过公证。更新程序要求有公布的校验和,没有就拒绝下载;随后会在安装之前核对下载到的应用 + 是否由与运行中副本相同的团队签名。由别人签名的更新会被拒绝,即使它在其他方面都有效。

+ +

报告漏洞

+

请使用 GitHub 的私密漏洞报告,或者如果你不愿意用 + GitHub,可以发邮件到 security@xinbetween.com。 + SECURITY.md 写明了哪些属于范围之内,以及你可以期待什么。 + 普通的缺陷——崩溃、数字不对、画面有误导——请改提issue。

+
+
+
diff --git a/site/pages/zh-Hant/docs.html b/site/pages/zh-Hant/docs.html index 72dd9fc..e2b5c09 100644 --- a/site/pages/zh-Hant/docs.html +++ b/site/pages/zh-Hant/docs.html @@ -35,7 +35,7 @@

使用 Flowlight

設定與資料 @@ -94,12 +94,20 @@

各個畫面

畫面快速鍵它回答什麼 即時⌘1現在有什麼在傳:最近幾秒各 App 的速率,以及最忙的目標。 - AI 代理⌘2哪些代理在活動、它們用哪些 AI 供應商,以及它們還連過什麼。 + AI 代理⌘2哪些代理在活動、它們用哪些 AI 供應商,以及它們還連過什麼。 報告⌘3流量去了哪裡,從秒到年。依 App、目標或 IP 分組;切換到「圖表」或「值得一看」;匯出 CSV。 - 警示⌘4所有看起來不尋常的事,附上 App、目標,以及觸發規則的那個數字。 - 檢查⌘5選用:你轉送經過 Flowlight 的代理,其解密後的請求,以及背後的工具呼叫。搜尋也會查進請求與回應的內文。 - 擷取⌘6目前由哪個引擎記錄、延伸功能的狀態、主機名稱學習,以及資料庫存放的位置。 + 警示⌘4所有看起來不尋常的事,附上 App、目標,以及觸發規則的那個數字。 + 規則⌘5你設過的每一條允許清單和拒絕,各自管到哪裡,以及實際攔下了什麼。 + 提問⌘6用平常的話問你自己的流量,由本機模型或託管模型從記錄下來的歷史裡作答。 + 檢查⌘7選用:你轉送經過 Flowlight 的代理,其解密後的請求,以及背後的工具呼叫。搜尋也會查進請求與回應的內文。 + 裝置⌘8在你開啟之前都是關的:藍牙、USB 與外接儲存裝置,一台 Mac 用它們跟用網路一樣多。 + 涵蓋範圍⌘9Flowlight 說不清的部分 — 依 App 逐一列出,它的流量有沒有被看到、被命名、被讀懂。 + 擷取⌘0目前由哪個引擎記錄、延伸功能的狀態、主機名稱學習,以及資料庫存放的位置。 +

快速鍵就是側邊欄的順序,所以 ⌘0 是第十項,而不是被跳過的位置。

+
即時畫面:一列 App,各自帶著目前的傳送與接收速率,以及最忙的目標。
+
即時,Flowlight 開啟時的那個畫面。

在「報告」中,把指標移到長條上可以看出是哪些 App 造成的,點一下可以放大,任一列雙按則把報告縮小到那一列。

AI 代理規則

@@ -232,10 +240,14 @@

HTTPS 檢查(選用)

並在那裡啟動它們。在「進階」中,你可以只解密 AI 代理而不是每個 App、編輯永不解密清單、拷貝 單一 shell 的設定,或移除憑證與所有記錄下來的內容。

Flowlight 會把內建清單中的 Apple 服務和密碼管理程式排除在解密之外(清單可在「設定…」中編輯)。使用憑證綁定的 App 可能會拒絕 - Flowlight 的憑證;Flowlight 會偵測到並讓它們以加密狀態直接通過。API 金鑰、cookie 和其他憑證類標頭一律不會 - 儲存,記錄的請求保留 3 天,而「移除憑證與記錄的資料」會刪除憑證、它的信任 + Flowlight 的憑證;Flowlight 會偵測到並讓它們以加密狀態直接通過。API 金鑰、cookie 和其他憑證類標頭在任何內容儲存之前 + 就會被換成它們的長度 — 依名稱、也依名稱中的字詞比對,這能抓到某家廠商自己的寫法,但不能保證一個都不漏 — 記錄的請求保留 3 天,而「移除憑證與記錄的資料」會刪除憑證、它的信任 設定,以及所有記錄下來的內容。檢查功能只支援 HTTP/1.1(Flowlight 會向雙方要求),而且在示範模式中無法使用。

+

從一列直接過來。在即時、報告或 AI 代理裡按右鍵點一個 App 或一個目的地,選「檢查 … 的流量」: + 檢查會開啟,而那個名稱已經填在搜尋欄裡。用搜尋欄而不是一個隱藏的過濾條件是刻意的 — 你可以把它放寬、縮小或清空,不必回到 + 你出發的地方。只有經過代理伺服器的流量才可能出現,所以一列你知道很忙的記錄,在這裡仍可能什麼都看不到。

+

模擬回應

想知道 API 失敗、卡住或回傳奇怪內容時代理會怎麼應對,就自己來回應那個端點。在 「檢查」› 「模擬回應」中,一條規則會指名主機、路徑和方法,並給出要回覆的狀態、標頭、內文,以及選填的 @@ -364,6 +376,20 @@

擷取:引擎與來源

把你切回取樣器:取樣器不需要過濾器,也能和它們並存。 想知道它是怎麼做出來的,請看開發者指南。

+

涵蓋範圍:Flowlight 說不清的部分

+

其他每個畫面回答的都是發生了什麼。涵蓋範圍回答的是有什麼本來不會被告知,而這決定了其他畫面值多少。 + 它對每個 App 問三個問題,因為這三件事是各自獨立地失效的。

+

有沒有被看到?網路延伸功能在每一條流量建立時就看到它。nettop 取樣器每秒讀一次計數器,所以在兩次讀取之間 + 開啟又關閉的連線 — 一次 DNS 查詢、一次很快的 API 呼叫、一個執行 curl 後就結束的指令檔 — 會整條漏掉。那是任何 + 百分比都表達不了的缺口,所以這裡用文字寫出來,而不是給它打分數。

+

有沒有名稱?這個 App 的位元組中,送到有主機名稱(而不是只有一個位址)的目的地的比例。是位元組, + 不是連線數:一條沒有名稱卻送走 1 GB 的連線,比一百條各送 1 KB 的連線是更大的洞,而按連線數來數,排序恰好相反。

+

內容讀不讀得到?HTTPS 檢查有沒有解密這個 App 的任何一點流量。有四個答案,其中只有一個才是缺口:正在被讀; + 它從來沒有到達代理伺服器;它在「永不解密」清單中,那是你自己做的選擇;或者檢查是關閉的,那是一項設定,而不是某個 App 上的失敗。

+

任何引擎都完全看不到的東西列在畫面上,而不是丟給這個頁面:擷取開始之前的流量、從來不會交給內容過濾器的 + 系統服務、使用憑證綁定的 App、從來不會交給代理伺服器的 QUIC,以及某個代理透過管道與它通訊的本機 MCP 伺服器。這些在 + Flowlight 的任何地方都不會出現,所以也不在這些數字裡 — 一個只數自己看得到的東西的涵蓋率,會是一種安慰,而不是一個事實。

+

裝置:藍牙、USB 與外接儲存裝置

一台 Mac 的收發不只有 TCP 和 UDP。「裝置」畫面負責其餘的部分,而且要等你開啟才會 作用 — 不是因為它需要 Flowlight 還沒有的權限,而是因為要不要監看你 Mac 的更多部分, @@ -491,8 +517,9 @@

常見問答

它會顯示安裝了哪些延伸功能、macOS 是否真的啟動了 Flowlight 的過濾器,以及最近一次記錄是多久以前。 把結果貼到問題回報裡。
Flowlight 會把關於我的任何東西送到別處嗎?
-
不會。沒有帳號、沒有遙測、也沒有分析。它唯一會發出的請求是每天的更新檢查、選用的網路擁有者 - 查詢,以及反向 DNS — 每一項都列在隱私頁面上,每一項都有關閉開關。
+
沒有帳號、沒有遙測、也沒有分析,而且你的流量資料庫從不上傳。確實有三個請求會離開這台 Mac,它們都列在隱私頁面上: + 每天的更新檢查和選用的網路擁有者查詢,這兩個都有關閉開關;以及 Flowlight 在取樣器上執行時的反向 DNS,它沒有開關 — + 少了它,取樣器就沒辦法為大多數連線命名。
它會讓我的 Mac 變慢或耗電嗎?
視窗關著時,Flowlight 幾乎什麼都不做:只維持選單列上的速率,並每秒寫入一列資料。網路延伸功能 比備用的取樣器更省,後者每秒都會啟動一個短命的 nettop 程序。
diff --git a/site/pages/zh-Hant/index.html b/site/pages/zh-Hant/index.html index 91d036e..f2946f1 100644 --- a/site/pages/zh-Hant/index.html +++ b/site/pages/zh-Hant/index.html @@ -162,7 +162,8 @@

看住 AI 代理怎麼用網路

規則,要生效多久由你說

指名一個 App、一個代理、一個目標或單一 URL,然後把它封鎖 — 在你發現它的那一列上按右鍵就行。 可以永久、到某個時間為止、直到 Flowlight 結束,或只在指定的時段內;另有一個暫停開關,而且每次拒絕都留著 - 一條退路。最明確的規則優先,兩者相當時以封鎖為準。

+ 一條退路。最明確的規則優先,兩者相當時以封鎖為準。 + 它是對你本來就信任的軟體的管控,不是一道擋住你不信任的軟體的屏障 — 見威脅模型。

Cursor ⇥ raw.githubusercontent.com · 已拒絕 4 次 · 平日 18:00–09:00

@@ -343,9 +344,14 @@

把支援的工具呼叫和網路請求對起來

接下來

即將推出

-

Flowlight 今天已經能監看、解釋並拒絕。其餘的部分會按這個順序做下去。

+

Flowlight 今天已經能監看、解釋並拒絕 — 正如威脅模型所說, + 這是監控,不是防護。其餘的部分會按這個順序做下去。

+
給檢查一份預算 0.9.3

記錄下來的內文是 Flowlight 留著的東西裡最敏感的。用標頭的允許清單而不是拒絕清單,加上你自己的樣式、一個乾脆不保留任何標頭的選項、依 App 的上限,以及一個自己會過期的工作階段。

+
讓我看看這條規則會攔下什麼 0.9.4

把最近一天拿來對一條規則重播,在它拒絕任何東西之前,先列出它原本會拒絕的。資料早就在那裡了,只是它一直只用來解釋過去。

+
什麼會離開這台 Mac,在它離開之前 0.9.5

在第一列資料抵達收集器之前:目的地、是否加密、哪些欄位會走、其中有沒有標頭 — Flowlight 要求其他一切做到的那種揭露,用在自己身上。

+
代理除了連網還做了什麼 1.0

一個檔案的外流是一次讀取加一次傳送,而今天只看得見傳送。把代理的工具開了什麼、寫了什麼、啟動了什麼記錄下來,就能讓讀取了私密金鑰,然後連上了 paste.example變成一項發現,而不是兩個畫面。它不是資源監視器:CPU 和記憶體是活動監視器的事。這需要 Apple 的 EndpointSecurity 授權,也需要上面那份檢查預算先存在。

先 Linux,再 Windows

分析核心是可移植的 Swift,擷取部分不是。先出一個帶本機網頁介面的 Linux 常駐程式,基於 eBPF 而不是 macOS 的 API。

diff --git a/site/pages/zh-Hant/privacy.html b/site/pages/zh-Hant/privacy.html index 95db9dd..613291b 100644 --- a/site/pages/zh-Hant/privacy.html +++ b/site/pages/zh-Hant/privacy.html @@ -46,7 +46,8 @@

HTTPS 檢查

預設為關閉。如果你開啟它,Flowlight 會在你的 Mac 上建立一個憑證授權單位(它的金鑰絕不會離開 ~/Library/Application Support/Flowlight/Inspection),並執行一個只接受來自這台 Mac 連線的代理伺服器。對於你 轉送經過它的 App,它會把請求與回應(包含最多 2 MB 的內文)記錄在本機資料庫中,保留 3 天。憑證類標頭 - (Authorization、cookie、API 金鑰)在任何內容儲存之前就會被換成它們的長度。Flowlight 會把內建清單中的 Apple 服務和密碼管理程式排除在解密之外。記錄下來的檢查資料不會被 Flowlight 上傳。關閉檢查功能會停止代理伺服器;「移除憑證與記錄的 + 在任何內容儲存之前就會被換成它們的長度 — 依名稱(Authorization、cookie、API 金鑰)、也依名稱中的字詞辨認,所以 + X-Access-Key 同樣會被抓到。那是一種推測規則,不是保證:一個把祕密放在沒人認得的名稱底下的標頭,會被記錄下來。Flowlight 會把內建清單中的 Apple 服務和密碼管理程式排除在解密之外。記錄下來的檢查資料不會被 Flowlight 上傳。關閉檢查功能會停止代理伺服器;「移除憑證與記錄的 資料」會刪除憑證、它的信任設定,以及每一筆記錄下來的請求。

這個 App 發出的網路請求

@@ -54,7 +55,7 @@

這個 App 發出的網路請求

請求送到哪裡內容是什麼什麼時候 更新檢查api.github.com一個查詢最新版本的標準 HTTPS 請求;GitHub 會看到你的 IP 位址和 Flowlight/<version> 這個 user agent啟動時以及每天一次,自 0.1.2 起。關閉開關在「設定」› 「一般」 更新下載github.com磁碟映像檔及其總和檢查碼檔案只有在你點「下載並開啟」時 - 反向 DNS你設定的 DNS 解析器在沒有看到主機名稱時,查詢某個 IP 位址登記的名稱在預設的擷取模式下,需要時進行 + 反向 DNS你設定的 DNS 解析器在沒有看到主機名稱時,查詢某個 IP 位址登記的名稱需要時進行,在取樣器擷取模式下,也就是網路延伸功能開始運作之前的預設模式。沒有關閉開關:少了它,取樣器就沒辦法為大多數連線命名。網路延伸功能會從流量本身為它們命名,因此不做這件事 網路擁有者查詢Team Cymru,透過 DNS沒有已知主機名稱的公開 IP 位址。私有和保留位址絕不會離開你的 Mac預設開啟。關閉開關在「擷取」› 「辨識網路擁有者」 用託管模型提問你選擇的供應商:Anthropic、OpenAI、Google Gemini 或相容的端點你的問題,以及模型所選用的 Flowlight 唯讀查詢回傳的結果。流量資料庫本身不會被上傳只有在你選擇託管供應商並送出問題時。「提問」畫面會顯示送出的請求 收集器匯出你設定的 OpenTelemetry 或 HTTP 端點「設定」› 「匯出」中列出的欄位,例如流量彙總資料和警示。驗證標頭儲存在鑰匙串中只有在你設定端點並啟用匯出之後 @@ -74,11 +75,14 @@

保留期限

關於本網站

本站是託管在 GitHub Pages 上、經由 Cloudflare 提供的靜態頁面。它不設定 cookie,也不執行任何分析。GitHub - 和 Cloudflare 會處理提供本站所需的請求,字型則從 Google Fonts 載入,它會在你造訪時收到你的 IP 位址。

+ 和 Cloudflare 會處理提供本站所需的請求。字型由本網域自己提供,所以顯示一個頁面不會向任何其他人送出任何東西 — + 這個頁面以前是從 Google 載入字型的,也就是說,那個說明 Flowlight 什麼都不往外送的頁面,為了顯示自己而向 Google 發了一個請求。

聯絡

-

有問題或隱私方面的疑慮?開一個 issue。若是敏感內容,請使用該儲存庫上 - GitHub 的私密漏洞回報功能。

+

有問題或隱私方面的疑慮?開一個 issue。若是安全問題,請使用 GitHub 的 + 私密漏洞回報,或者如果你不想用 GitHub,可以寄信到 + security@xinbetween.com — 可以期待什麼,請看 + SECURITY.md。

diff --git a/site/pages/zh-Hant/threat-model.html b/site/pages/zh-Hant/threat-model.html new file mode 100644 index 0000000..8b8d986 --- /dev/null +++ b/site/pages/zh-Hant/threat-model.html @@ -0,0 +1,116 @@ + +
+
+

威脅模型

+

只做監控,不做防護

+

Flowlight 會告訴你,你 Mac 上的軟體正在送出什麼、送去哪裡。它不是用來對付已經掌控這台機器的攻擊者的, + 而這個差別重要到值得用一整頁來講,而不是塞進註腳裡。

+
+ +
+ + +
+

它是為了什麼

+

Flowlight 回答一個 Mac 不回答的問題:是哪個 App 送出去的,它去了哪裡?它是為了那些在明面上就行為不端的 + 軟體而做的 — 一個去連沒人要它連的地方的 AI 代理、一個上傳得比它該上傳的還多的工具、一個正在跟沒有名字的位址說話的程序。 + 這種行為在流量裡看得見,而 Flowlight 的工作就是讓它變得可讀,並在做不到的時候老實說出來。

+

它不是防毒軟體,不是 EDR 代理,也不是那種站在你和攻擊者之間的防火牆。在兩者重疊的地方 — Flowlight 可以拒絕連線 — + 那種拒絕是一種方便,用來管住你本來就信任的軟體,而不是一道擋住你不信任的軟體的屏障。

+ +

它防得住什麼

+
    +
  • 沒人注意到的資料外送。某個 App 或代理把東西送到一個你不會核准的地方,包含經由它自己執行的工具送出去。 + Flowlight 會把那條連線歸屬到發出它的程序,以及啟動那個程序的代理。
  • +
  • 行為上的悄悄改變。某個 App 突然連到新的目標、搬動的資料遠超過它自己的基線,或在你不在的時候還在工作。 + 每則警示都會指出是哪個數字觸發了它,所以你可以不同意它。
  • +
  • 超出你所允許範圍的代理。每個代理各有一份允許清單,還有拒絕清單之外連線的規則;拒絕會被記錄下來, + 一鍵就能改成允許。
  • +
  • 被動過手腳的更新。每個版本都會公布一組總和檢查碼;更新程式會拒絕它無法驗證的下載,也會拒絕安裝 + 簽章團隊與正在要求更新的那份副本不同的 App。
  • +
+ +

擁有 root 的軟體可以把它關掉

+

Flowlight 以你的身分執行,並使用一個由 macOS 代它啟動的系統延伸功能。任何以 root 執行的東西 — 或任何你核准過安裝程式的 + 東西 — 都可以卸載那個延伸功能、停掉這個 App,或刪掉它的資料庫。設計上沒有任何東西擋得住這件事,而 macOS 上的任何監控工具, + 都無法一邊擋住它,一邊還是一個你自己也能關掉的工具。

+

誠實的說法比較窄,而且依然有用:行為不端、但沒有主動躲避監控的軟體會被看見。主動躲避監控的軟體可能不會被看見, + 但它至少會留下一個缺口 — 一個停掉的延伸功能、一段沒有資料的時間 — 而「涵蓋範圍」 + 畫面就是為了把它顯示出來。

+ +

擷取會漏掉什麼

+
    +
  • 擷取開始之前的流量。沒有事後補齊。在過濾器之前就已經開啟的連線,從來沒有被交給它。
  • +
  • 不受內容過濾器管轄的系統服務。macOS 不會把所有東西都給內容過濾器看;它自己的一部分流量永遠到不了我們這裡。
  • +
  • 那個位置被另一個內容過濾器佔著。macOS 一次只執行一個。如果有 VPN 或安全代理佔著它,Flowlight 的過濾器 + 會安裝、也會連接,但永遠不會被要求過濾任何東西 — 「擷取」會直接說明,而不是給你一個空白畫面。
  • +
  • 短連線,在取樣器上。沒有延伸功能時,Flowlight 每秒讀取一次計數器:在兩次讀取之間開啟又關閉的連線, + 永遠不會被記錄。
  • +
  • 不是 TCP 也不是 UDP 的通道。藍牙和 USB 是以裝置的形式看得到,不是以位元組的形式。代理的本機 MCP + 伺服器透過管道溝通,那根本不是網路流量,任何地方都不會出現。
  • +
+ +

檢查會漏掉什麼

+

HTTPS 檢查只讀得到轉送經過 Flowlight 本機代理伺服器的東西,而這件事是由程式在啟動的那一刻決定的。忽略代理伺服器設定的 + App、在檢查開啟之前就啟動的 App,或使用憑證綁定的 App,都會原封不動地直接通過 — 這是刻意的,因為弄壞一條綁定憑證的連線, + 就等於弄壞那個 App。QUIC 同樣不會交給代理伺服器。

+

所以「檢查」畫面是空的,意思是「沒有東西被轉送到這裡」,而不是「什麼都沒發生」。到底是哪一種,「涵蓋範圍」會按 App + 逐個說明。

+ +

封鎖是什麼,不是什麼

+

一條拒絕連線的規則是由網路延伸功能執行的,就在連線的路徑上,在連線建立之前。一條指名 URL 的規則則由檢查用的代理伺服器 + 執行,它用 App 讀得到的狀態來回答那個請求。這兩處是 Flowlight 裡唯一動手、而不只是回報的部分 — nettop 取樣器什麼都拒絕不了, + 所以在用取樣器的 Mac 上,沒有任何規則會被強制執行,而 Flowlight 會把這一點說出來,而不是擺一個什麼都不做的開關。

+

但它依然不是防護。一個還能執行 shell 的代理,可以自己動手做那個被拒絕的工具原本要做的事。一次你能一鍵解除的拒絕, + 也是代理下一次嘗試就可能走過去的拒絕。本機流量、DNS、Apple 自己的服務,以及 Flowlight 自己的連線永遠不會被拒絕, + 因為一台被封死的 Mac 比一個被封住的代理更糟。而且 Flowlight 停止執行後幾秒,強制執行就會失效: + 沒人看得到的拒絕比不拒絕更糟。

+

檢查與拒絕無法並存。經由 Flowlight 自己的代理伺服器轉送的流量,是以 Flowlight 的流量的身分離開這台 Mac 的, + 而 Flowlight 從不拒絕自己 — 所以一個你正在讀它請求的 App,也就是一個規則再也攔不住它連線的 App。為了看得更多而開啟檢查, + 代價就是強制執行,而畫面上先前並沒有說這件事。

+ +

Flowlight 自己留著什麼

+

流量的後設資料,放在本機的 SQLite 資料庫裡,保留期限有公布。開啟 HTTPS 檢查後,它還會把請求與回應的內文留 3 天 — + 那是它留下來的東西裡最敏感的。憑證類標頭會依名稱、也依其中的字詞遮蔽,那是一種推測規則,不是保證; + 一個把祕密放在沒人認得的名稱底下的標頭,是可能被記錄下來的。

+

流量資料庫從不上傳。不過確實有三樣比較小的東西,會在你沒有要求的情況下離開這台 Mac,它們都在隱私頁面上 + 逐項列出:更新檢查,它在啟動時和每天一次向 GitHub 詢問最新的發布;網路擁有者查詢,它就沒有主機名稱的公開位址向 Team Cymru + 詢問;以及,當 Flowlight 在讀計數器而不是執行它的延伸功能時,對那些它沒看到名稱的位址所做的一次反向 DNS 查詢。前兩樣都有 + 關閉開關。第三樣沒有,因為在取樣器上,一條連線能有名稱,大半就靠它 — 這個查詢會走這台 Mac 本來就在用的解析器,而一旦 + 延伸功能接手、從流量本身為連線命名,它就停了。用託管模型「提問」送出去的東西,比它們任何一個都多得多,而它也是唯一在你 + 設定之前一直關著的。

+ +

更新

+

版本以 Developer ID 簽章並經過公證。更新程式要求有公布的總和檢查碼,沒有就拒絕下載;接著會在安裝之前確認下載到的 App + 是否由與執行中副本相同的團隊簽章。由別人簽章的更新會被拒絕,即使它在其他方面都有效。

+ +

回報漏洞

+

請使用 GitHub 的私密漏洞回報,或者如果你不想用 + GitHub,可以寄信到 security@xinbetween.com。 + SECURITY.md 寫明了哪些屬於範圍之內,以及你可以期待什麼。 + 一般的問題 — 當掉、數字不對、畫面有誤導 — 請改開issue。

+
+
+
diff --git a/site/partials/header.html b/site/partials/header.html index 86717df..70ece23 100644 --- a/site/partials/header.html +++ b/site/partials/header.html @@ -6,6 +6,7 @@ {{t:nav.agents}} {{t:nav.docs}} {{t:nav.privacy}} + {{t:nav.threat-model}} {{t:nav.releases}} {{t:nav.about}} {{t:nav.github}} diff --git a/site/site.css b/site/site.css index 3ebb671..625f899 100644 --- a/site/site.css +++ b/site/site.css @@ -1,3 +1,139 @@ +/* Fonts, served from this domain. + Bricolage Grotesque and IBM Plex are both under the SIL Open Font License, which allows this. They used to + load from Google Fonts, so every visit to the privacy page — the page explaining that Flowlight sends + nothing anywhere — made a request to Google carrying the reader's IP address. The page disclosed it, which + is better than hiding it, but a local-first tool shouldn't need the disclosure. + Latin and Latin Extended only: these families have no CJK glyphs, so the Chinese, Japanese and Korean pages + fall back to system fonts either way, exactly as they did before. */ +@font-face { + font-family: 'Bricolage Grotesque'; + font-style: normal; + font-weight: 500; + font-display: swap; + src: url('fonts/BricolageGrotesque-500-latin-ext.woff2') format('woff2'); + unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +@font-face { + font-family: 'Bricolage Grotesque'; + font-style: normal; + font-weight: 500; + font-display: swap; + src: url('fonts/BricolageGrotesque-500-latin.woff2') format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +@font-face { + font-family: 'Bricolage Grotesque'; + font-style: normal; + font-weight: 700; + font-display: swap; + src: url('fonts/BricolageGrotesque-700-latin-ext.woff2') format('woff2'); + unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +@font-face { + font-family: 'Bricolage Grotesque'; + font-style: normal; + font-weight: 700; + font-display: swap; + src: url('fonts/BricolageGrotesque-700-latin.woff2') format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +@font-face { + font-family: 'Bricolage Grotesque'; + font-style: normal; + font-weight: 800; + font-display: swap; + src: url('fonts/BricolageGrotesque-800-latin-ext.woff2') format('woff2'); + unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +@font-face { + font-family: 'Bricolage Grotesque'; + font-style: normal; + font-weight: 800; + font-display: swap; + src: url('fonts/BricolageGrotesque-800-latin.woff2') format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +@font-face { + font-family: 'IBM Plex Mono'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url('fonts/IBMPlexMono-400-latin-ext.woff2') format('woff2'); + unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +@font-face { + font-family: 'IBM Plex Mono'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url('fonts/IBMPlexMono-400-latin.woff2') format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +@font-face { + font-family: 'IBM Plex Mono'; + font-style: normal; + font-weight: 500; + font-display: swap; + src: url('fonts/IBMPlexMono-500-latin-ext.woff2') format('woff2'); + unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +@font-face { + font-family: 'IBM Plex Mono'; + font-style: normal; + font-weight: 500; + font-display: swap; + src: url('fonts/IBMPlexMono-500-latin.woff2') format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +@font-face { + font-family: 'IBM Plex Sans'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url('fonts/IBMPlexSans-400-latin-ext.woff2') format('woff2'); + unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +@font-face { + font-family: 'IBM Plex Sans'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url('fonts/IBMPlexSans-400-latin.woff2') format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +@font-face { + font-family: 'IBM Plex Sans'; + font-style: normal; + font-weight: 500; + font-display: swap; + src: url('fonts/IBMPlexSans-500-latin-ext.woff2') format('woff2'); + unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +@font-face { + font-family: 'IBM Plex Sans'; + font-style: normal; + font-weight: 500; + font-display: swap; + src: url('fonts/IBMPlexSans-500-latin.woff2') format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +@font-face { + font-family: 'IBM Plex Sans'; + font-style: normal; + font-weight: 600; + font-display: swap; + src: url('fonts/IBMPlexSans-600-latin-ext.woff2') format('woff2'); + unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +@font-face { + font-family: 'IBM Plex Sans'; + font-style: normal; + font-weight: 600; + font-display: swap; + src: url('fonts/IBMPlexSans-600-latin.woff2') format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} + :root { --ground: #f4f5f8;