Varnostni model in meje zaupanja
graph TD
subgraph P["Delovno mesto: proces aplikacije, pravice uporabnika Windows"]
A["Aplikacija (Access, DAO, ADO.NET)"] -->|"klic ODBC"| D["Gonilnik Wkl OData"]
D -->|"bere in shranjuje ključ oziroma geslo"| C["Upravitelj poverilnic Windows (za vsakega uporabnika)"]
D -->|"sledenje, samo če je vklopljeno"| T["Datoteka sledenja"]
end
D -->|"HTTPS: zahteva s prijavo, sejo, identiteto, transakcijo"| S["Storitev OData preveri prijavo in pravice"]
S -->|"stavek pod prijavo podatkovne zbirke"| B[("Podatkovna zbirka")]Slika: Gonilnik se izvaja v procesu aplikacije. Med delovnim mestom in storitvijo je omrežna meja, ki jo ščiti TLS; med storitvijo in podatkovno zbirko meja, na kateri storitev odloča, kaj se izvede. Puščice kažejo, kam se pošiljajo prijavni podatki in stavki.
Gonilnik ni varnostni filter. Kaj sme klicatelj brati, spreminjati ali izvajati, odloča izključno storitev; aplikacija, ki gonilnik obide in se na storitev obrne neposredno prek HTTP, ima enake pravice. Gonilnik ščiti prijavne podatke, ki jih hrani, in podatke na poti. Ta stran opisuje, katere ukrepe za to izvede gonilnik, katere mora izvesti storitev, kako preverite vsak ukrep in katera tveganja ostanejo.
Ključne funkcije
- Nobenih gesel in ključev v datoteki Access: prijava Windows in shranjeni osebni ključ ne potrebujeta vrednosti v nizu povezave.
- Skrivnosti samo šifrirano ali lokalno: geslo, osebni ključ in seja se pošiljajo samo prek
httpsali na lokalni računalnik; sicer gonilnik povezavo prekine, preden karkoli pošlje. - Skrivnosti samo na naslove povezave: naslednje strani, naslovi iz dokumenta metapodatkov in preusmeritve na drug računalnik ne dobijo prijavnih podatkov, niti prijave Windows.
- Preverjanje potrdil brez izklopa: potrdilo, ki mu Windows ne zaupa, konča povezavo z
08S01. - Seja 2FA samo v delovnem pomnilniku: konča se s procesom.
Osnovni pojmi
Varovane dobrine
| Varovana dobrina | Kdo jo hrani | Posledica izgube |
|---|---|---|
| Osebni ključ, geslo prijave | upravitelj poverilnic uporabnika ali niz povezave | Tretja oseba se prijavi kot ta oseba, dokler ključ ni zaklenjen ali geslo spremenjeno |
Ključ storitve (APIKEY, APIKEYENV) | niz povezave ali spremenljivka okolja | Tretja oseba dobi pravice ključa; ključ ni vezan na osebo, temveč na program |
| Seja 2FA | delovni pomnilnik procesa | Tretja oseba, ki pozna tudi prvi faktor, lahko obide 2FA, dokler seja ne poteče |
| Poslovni podatki na poti | povezava TLS | prisluškovanje ali spreminjanje zahtev in odgovorov |
| Poslovni podatki v sledenju | datoteka, če je vklopljeno | stavki, vrednosti filtrov in prijavna imena kot navadno besedilo (glejte sledenje) |
Odgovornost med gonilnikom in storitvijo
| Preverjanje | Gonilnik | Storitev |
|---|---|---|
| Kdo je prijavljen | posreduje prijavo | jo preveri (geslo, ključ, prijava Windows, 2FA) |
| Katere tabele kdo vidi | prikaže, kar navaja $metadata | v $metadata navede samo, kar sme klicatelj brati |
| Ali je sprememba dovoljena | jo prevede | dovoli ali zavrne (403) |
| Ali se lastni stavek SQL (prepustna pot) sme izvesti | ga ne preverja in ne razvršča | naslov navede samo klicateljem, ki smejo pošiljati stavke, in odloča za vsak stavek; podatkovni prehod Wkl.Data.Gateway pri tem vsak navedeni objekt preveri glede na pravice klicatelja (preverjeni stavki) |
| Kako dolgo velja seja | jo hrani, dokler se proces izvaja | določi veljavnost in zavrne potečeno |
| Ali se uporablja TLS | gesla, ključe in seje pošilja samo prek https ali lokalno | ponuja https z zaupanja vrednim potrdilom |
Gonilnik posredovanega stavka namerno ne preverja: ali je dopusten, je odvisno od dovoljenj, s katerimi bi se izvedel v podatkovni zbirki, te pa pozna samo storitev. Preverjanje v gonilniku bi bilo poleg tega neučinkovito, ker lahko vsak, ki doseže storitev, stavek pošlje tudi brez gonilnika.
Prijavni podatki na delovnem mestu
Shranjeni ključ in shranjeno geslo. Če uporabnik v pogovornem oknu izbere „Shrani ključ“ oziroma „Shrani geslo“, gonilnik vrednost shrani v upravitelj poverilnic Windows – kot splošno poverilnico z obstojnostjo „lokalni računalnik“ (Microsoft: CREDENTIALW, Persist). Iz tega sledi:
- Vrednost velja samo za ta račun Windows na tem računalniku in se ne seli s profilom, shranjenim na strežniku.
- Windows jo ščiti s prijavo uporabnika. Drug uporabnik istega računalnika je ne prebere.
- Vsak program, ki se izvaja z istim računom Windows, jo lahko prebere. Upravitelj poverilnic ne ločuje po programih. Zlonamerna programska oprema v računu uporabnika tako doseže ključ prav tako, kot lahko doseže storitev.
Niz povezave. PWD in APIKEY sta shranjena kot navadno besedilo povsod, kjer je shranjen niz: v
datoteki Access, če povezava shrani geslo (dbAttachSavePWD), v programu ali v viru podatkov, ki ga aplikacija
zapiše sama. Pogovorno okno za nastavitev gonilnika nikoli ne zapiše gesla v vir podatkov.
Seja 2FA. Gonilnik jo hrani v delovnem pomnilniku procesa, za vsako storitev in prijavo, in je nikamor ne zapiše: ne v vrnjeni niz povezave, ne v sledenje, ne na disk. S koncem procesa je ni več.
Prijavni podatki na poti
| Pravilo | Učinek | Preverjanje |
|---|---|---|
Geslo, osebni ključ in seja samo prek https ali na lokalni računalnik – na URL in na PASSTHROUGH | Prek http na drug računalnik povezava ne uspe, preden je zahteva poslana: 28000. Če storitev prek http zahteva 2FA, gonilnik ne pošlje ne kode ne seje in javi 28000 | vzpostavite povezavo z URL=http://<drug-računalnik>/…;AUTH=KEY: napaka, v sledenju ni zahteve |
Prijavni podatki samo na shemo, računalnik in vrata naslovov, ki jih navaja povezava (URL, PASSTHROUGH) | Naslednja stran, naslov prepustne poti iz $metadata ali naslov za 2FA na drugem izvoru ne dobi prijavnih podatkov | sledenje: „Schluessel und Kennwort gehen nicht an …“ (Ključ in geslo ne gresta na …) |
| Preverjanje potrdila v shrambah potrdil Windows | Potrdilo, ki mu ni zaupano, povzroči 08S01 z razlogom („UntrustedRoot“) in se ne ponovi | glejte 08S01 "UntrustedRoot" |
Preusmeritvi (3xx) sledi gonilnik sam, ne knjižnica HTTP: samo pri branju in samo na istem izvoru, največ petkrat | Preusmeritev na drug računalnik, druga vrata ali drugo shemo se prekine z 08S01 in sporočilom, ki navaja cilj; tja se nič ne pošlje. Preusmerjena sprememba se ne ponovi | glejte "Storitev preusmerja na …" |
| Prijava Windows (Negotiate) samo na zahtevo storitve in samo na naslove povezave | Gonilnik odgovori na izziv 401 Negotiate ali NTLM samo, če pride s sheme, računalnika in vrat naslova URL ali PASSTHROUGH; drug računalnik prijave Windows ne dobi, njegov izziv pa se konča z 28000 | sledenje: „Die Windows-Anmeldung geht nicht an …“ (Prijava Windows ne gre na …) |
Ključ storitve sledi istim pravilom izvora, pošlje pa se tudi prek http na drug računalnik. Kdor uporablja APIKEY ali
APIKEYENV, mora https zagotoviti sam.
Potekla seja, ponovitev in transakcija
- Seja poteče med delom. Storitev naslednjo zahtevo zavrne z
401in izzivomWkl-Totp, preden karkoli izvede. Gonilnik vpraša za novo kodo in isto zahtevo enkrat pošlje znova – pri spremembi z istimIdempotency-Keyin v isti transakciji. Aplikacija brez pogovornega okna dobi28000; koda, podana sTOTP=, velja samo za prvi izziv. - Povezava se prekine. Gonilnik zahtevo ponovi po 1 in 3 sekundah: bralne zahteve vedno, spremembe z istim
Idempotency-Key. Če storitev ta ključ upošteva, drugi zapis ne nastane. Pretočnega prepustnega stavka ne ponovi nikoli; aplikacija dobi08S01. - Transakcija poteče. Če storitev transakcijo po svojem času nedejavnosti razveljavi,
SQLEndTrans potrditvijo (Commit) javi40001; nič iz transakcije ni shranjeno. Glejte Transakcije.
Te tri zaveze veljajo samo, če storitev zahtevo zavrne, preden jo izvede, in upošteva Idempotency-Key (glejte
Zahteve za storitev OData). Storitev, ki glavo
prezre, lahko po prekinitvi povezave zapis ustvari dvakrat; gonilnik tega ne prepozna.
Preostala tveganja
Meje ukrepov, ki jih morate pri uporabi poznati in sami ublažiti.
| Preostalo tveganje | Vzrok | Pogoj, pod katerim nastopi | Ublažitev |
|---|---|---|---|
| Ni preverjanja preklicanih potrdil | Gonilnik ne poizveduje po seznamih preklicev in OCSP (privzeta nastavitev knjižnice HTTP, ki je gonilnik ne spreminja) | Potrdilo storitve je bilo preklicano, a je še veljavno in zaupano | Uporabljajte potrdila s kratko veljavnostjo; ukradenemu potrdilu na delovnih mestih dodatno odvzemite zaupanje |
| Ni pripenjanja potrdil (pinning) | Velja vsako potrdilo, ki mu Windows zaupa | Overitelj, ki mu delovno mesto zaupa, izda napačno potrdilo, na primer naprava za pregledovanje TLS v omrežju podjetja | Upravljajte shrambe zaupanja delovnih mest |
| Shranjeni prijavni podatki so berljivi za vse programe uporabnika | lastnost upravitelja poverilnic | Zlonamerna programska oprema se izvaja v računu uporabnika | Ključe naj vam izdajo s potekom in, kjer je mogoče, z vezavo na omrežje; zahtevajte 2FA |
| Sledenje vsebuje poslovne podatke | namerno, služi iskanju napak | vklopljeno in ne izbrisano | glejte sledenje |
| Nepodpisan ali zamenjan DLL | gonilnik je DLL v procesu aplikacije; ali je različica podpisana, pokažejo lastnosti datoteke | Nadzor aplikacij (AppLocker, WDAC) zahteva podpis ali nekdo zamenja DLL v namestitveni mapi | Namestitveno mapo naj lahko spreminjajo samo skrbniki; namestitveni paket namesti v Program Files, kjer to velja. Pri nastavitvi samo za enega uporabnika je DLL v mapi, ki jo uporabnik lahko spreminja sam |
Ukrepi te strani zadevajo gonilnik. Varnost celotnega sistema, ki ga sestavljajo gonilnik, storitev in podatkovna zbirka, je enako odvisna od storitve in podatkovne zbirke.
Sorodne teme
- Standardi in specifikacije – postopki prijave HTTP, TLS, OData
- Vklop sledenja – kaj je v datoteki
- Zahteve za storitev OData – kaj mora storitev zagotavljati