Utvalgt arbeid

Secure Portal

Oversikt

En skrivebordsassistent som leser en innlogget portal, der modellen kan foreslå en handling, men aldri utføre en.

Detaljer

At a glance

Type prosjekt
Lokal skrivebordsapplikasjon
Min rolle
Satte sikkerhetsmodellen, designet applikasjonen, og implementerte grensen og skallet rundt den.
Kategori
Systemer
Status
Under utvikling2026

Hva jeg gjorde

  • Skrev de ti invariantene produktet holdes til, og setningen det aldri får si
  • Plasserte sikkerhetsgrensen i kode modellen ikke når
  • Designet økten, godkjenningsdialogen og eksportflyten
  • Bygget den fiendtlige testportalen som prøver å slå den

Bygget med

  • Rust: Regelmotoren, sladdingen og revisjonsloggen, den sikkerhetskritiske halvdelen
  • Tauri: Skrivebordsskallet
  • TypeScript: Grensesnittet og nettleserarbeideren
  • Playwright: Styrer den isolerte Chromium-nettleseren
  • SQLite: Oppføringer og eksporter, på brukerens egen maskin
  • Ollama: Modellen, som kjører lokalt slik at ingenting forlater maskinen

Neste prosjekt

Virksom
The Secure Portal Assistant at step one of six, private login: a padlocked panel reading "AI disconnected, no page content is being sent to an AI provider", with a floating security panel counting zero requests, zero screenshots and zero snapshots while the person signs in

Behovet

En bedrift lever på portaler den må logge seg inn i: leverandører, banker, offentlige registre. Informasjonen et menneske faktisk trenger derfra er ofte tjue tall spredt over førti sider, og å hente den ut er en time med kopiering ingen liker og alle av og til gjør feil.

En assistent kunne gjort det. Men en assistent inne i en innlogget portal er en assistent som står ved siden av knappene som legger inn bestillinger og endrer oppføringer, med en aktiv økt den ikke måtte gjøre seg fortjent til.

Beslutning

Modellen foreslår, koden godkjenner

Bakgrunn
Promptinjeksjon er ikke noe hypotetisk her. En leverandørs egen PDF, eller en linje tekst på en side, kan skrives for å instruere det som leser den. Er modellen den som avgjør hva som skjer videre, så er det portalens innhold som avgjør hva som skjer videre.
Hva jeg bestemte
Modellen kan bare be om ett navngitt verktøy fra en lukket katalog. Hver forespørsel går gjennom en regelmotor, skrevet i Rust, som svarer tillat, spør brukeren, krev ny innlogging, blokker, eller stopp økten. Det finnes ingen vei fra modellen til nettleseren i det hele tatt. Motoren er ikke avhengig av skallet, nettleseren eller noen modellleverandør, så den kan gjennomgås for seg.
Avveining
Hver ny evne må legges inn i katalogen og i regelverket for hånd, så produktet vokser saktere enn ett som lar modellen improvisere. Til gjengjeld snakker en side som prøver å gi den en instruksjon til noe som ikke kan handle.
Et diagram av grensen i Secure Portal Assistant: modellen ber om ett navngitt verktøy, en regelmotor avgjør mellom tillat, spør, ny innlogging, blokker eller stopp, og bare et tillat når fram til den isolerte nettleseren, med den direkte veien fra modell til nettleser tegnet over kors

En nettleser uten hukommelse

Applikasjonen åpner sin egen midlertidige Chromium, adskilt fra brukerens ekte nettleser. Den starter uten lagrede passord, utvidelser, autofyll, historikk eller eksisterende økter. Personen logger inn selv, for hånd. Assistenten kobles til først når de sier fra, og hele profilen slettes når økten er over.

Innloggingen har sin egen modus, og mens den er på er assistenten ikke bare uvirksom, men frakoblet: ingen forespørsel gjøres, ingen skjermbilder tas, ingenting på den siden leses. Applikasjonen ber aldri om passord, engangskode eller BankID. Det skrives inn i nettleservinduet og ingen andre steder, og den sier fra om det på den skjermen der noen ellers ville vært i ferd med å skrive det i feil felt.

Når regelmotoren vil ha et menneske, stopper alt og venter. Bare en uttrykt godkjenning utfører handlingen: et tidsavbrudd, et stopp, en blokkering eller en mislykket melding lar den ligge ugjort, så det finnes ingen vei der et tapt svar blir et ja. Hvert svar merkes med spørsmålet det hører til, slik at et sent klikk på en gammel dialog ikke kan godkjenne handlingen som står på skjermen nå. Og en nedlasting kan aldri forhåndsgodkjennes, fordi hver nedlasting skal gjennomgås.

Viser sitt eget arbeid

En økt går i seks steg: logg inn, velg portalen, sett oppgaven, se over den, kjør den, les resultatene. Et panel står ved siden av dem alle og sier hva som holder akkurat nå.

Det sier ikke stol på oss. Det teller. Mens noen logger seg inn melder det null forespørsler til modellen, null skjermbilder tatt, null øyeblikksbilder av siden; og det teller endringer gjort i portalen og handlinger som er blokkert mens assistenten jobber. Det er løpende summer fra økten som står foran deg, ikke påstander om produktet generelt.

The security status panel: all checks holding for the session, seven verified, four enforced and eleven not yet active, grouped by phase, starting with isolating the browser before sign-in

Beslutning

Verifisert, håndhevet, eller ikke aktiv ennå

Bakgrunn
En sikkerhetssjekkliste med haker nedover siden er det enkleste i programvare å forfalske, fordi en hake ikke sier noe om når den sist var sann. De fleste produkter viser alle grønne fra det øyeblikket vinduet åpner.
Hva jeg bestemte
Hver sjekk har én av tre tilstander. Verifisert betyr at den ble målt i denne økten, og målingen vises. Håndhevet betyr at det er en regel koden holder og som ikke kan slås av. Ikke aktiv ennå betyr at den fasen ikke har startet, så det påstås ingenting om den, og de forblir grå og ikke grønne til de er ekte.
Avveining
Det betyr at panelet åpner overveiende ikke-grønt, som ser dårligere ut enn en vegg av haker. Det er også den eneste versjonen en sikkerhetsansvarlig kan lese: en sjekk som ennå ikke sier noe er verdt mer enn en sjekk som sier ja før den har kjørt.
Further down the same panel: the checks that hold while the person signs in, each with its own running count, above the checks for while the assistant works, still marked not yet active
De ti invariantene
  • Modellen kan ikke utføre en nettleserhandling direkte, og en portaladapter kan ikke gå utenom regelmotoren.
  • Innloggingsmodus kan ikke sende modellforespørsler i det hele tatt, så ingenting ser på mens et passord skrives.
  • Informasjonskapsler og autentiseringshoder kan aldri legges inn i modellens kontekst.
  • Automatikken kan ikke navigere til et opphav som ikke er godkjent, og en ukjent transaksjonshandling kan ikke godkjennes automatisk.
  • Lokal modus kan ikke stille falle tilbake på skybasert inferens.
  • En nettleserprofil kan ikke gjenbrukes etter at en økt er slettet.
  • En eksport kan ikke inneholde et gjenkjent hemmelighetsmønster.
  • Fjerninnhold fra portalen kan ikke kalle en systemkommando i skrivebordsskallet.
  • Dette testes, det påstås ikke, og bygget feiler blankt hvis et forbudt oppstartsflagg for nettleseren dukker opp noe sted i treet.
  • En bevisst fiendtlig testportal finnes for å prøve å bryte hver eneste av dem: falske kontroller, skjulte instruksjoner, en GET som endrer tilstand, søk over POST.

Beslutning

Takk nei til den bedre modellen

Bakgrunn
En skymodell ville vært merkbart bedre til å lese. Leverandørgrensesnittet ville tatt imot en uten videre, og stegene for sladding og kontekstminimering kjører allerede før hver forespørsel, så det var ikke et teknisk problem.
Hva jeg bestemte
Den ble avslått, og avslaget ble skrevet ned. Å sende sideinnhold til en skyleverandør ville flyttet en kundes innloggede portaldata bort fra maskinen og ut av kundens kontroll, noe som motsier produktets sentrale påstand og er en personvernbeslutning, ikke en teknisk. Lokalt forblir standard. Mellomveien som står åpen er sky bare til planlegging, som ser den innskrevne instruksjonen og aldri siden.
Avveining
Produktet er målbart dårligere til å avgjøre hvor det skal se videre, og det er dets svakeste område. Svaret på det er en deterministisk modus der koden velger ruta og modellen bare leser, framfor en bedre modell med et dårligere løfte.

Hvor det står

Seks faser er ferdige, inkludert pakking som kjører fra Finder uten noe oppsett. 341 tester går grønt, ved siden av en ende-til-ende-suite mot en ekte nettleser og direkte tester mot en lokal modell.

Den er ikke lansert. Det finnes ingen verifisert adapter for en ekte leverandørportal, ingen Windows-versjon, ingen kodesignering, og ingen uavhengig sikkerhetsgjennomgang, som prosjektets egen spesifikasjon gjør til en sperre for lansering og ikke noe som er kjekt å ha.

Produktet nekter også å si visse ting. Ikke null risiko. Ikke at applikasjonen ikke kan nå økten. Ikke garantert kun-lesing på ethvert nettsted. Det den vil si er den nøyaktige setningen: den bruker den innloggede økten til å navigere, og autentiseringshemmelighetene må aldri nå modellen, loggene, en server eller en annen nettleserprofil.