OpenConnect csd-wrapper: revider skriptet før innloggingen
Behandle --csd-wrapper som en grense for kodekjøring: revider skriptet, velg en dedikert csd-bruker, og verifiser hva gatewayen faktisk ser.
Å legge --csd-wrapper til en profil gir et lokalt skript til en daemon som kjører det under innlogging, så beslutningen foran deg er en kodegjennomgang, ikke en preferansebryter. Alternativet finnes for at gatewayens vertskontrollkomponent skal kunne erstattes, og det tar en sti til et skript du leverer. Alt nedenfor forutsetter at utrullingsseieren allerede har sagt hvilken posturkontroll som kreves; hvis den delen fortsatt er åpen, avgjør den først. Kjøreboken har fire trinn: finn trinnet som feilet, les skriptet, velg identiteten det kjører som, og bevis resultatet.
Trinn 1: Finn trinnet som feilet
Klientens siste melding handler vanligvis om en informasjonskapsel, som er slutten av en kjede og ikke begynnelsen. En HTTPS-innlogging, en servercertifikatkontroll, en autentiseringsutveksling og en posturkomponent står alle foran den meldingen.
Noter versjonen og innloggingsadressen som brukes, og gjenta så forsøket med utfyllende utdata holdt på din egen terminal. Les den første feilen som ikke er et nytt forsøk, ikke den siste linjen i transkripsjonen. Hvis loggen stopper før noen vurderingskomponent er navngitt, er wrapperen ennå ikke problemet ditt. Å legge den til på det tidspunktet utvider bare overflaten du må forsvare senere.
openconnect --version
openconnect --verbose --user="$VPN_USER" vpn.example.com </dev/nullHold transkripsjonen lokalt, fordi informasjonskapsler og autentiseringssvar er tilgangsmateriale. Et spor som limes inn i en chatttråd, er en lekkasje av påloggingsinformasjon selv når vurderingstrinnet ser harmløst ut. Del feilteksten og punktet i flyten der den dukket opp, aldri nyttelasten.
Trinn 2: Les skriptet før det går inn i en profil
En wrapper er bare så pålitelig som revisjonen du gjennomgikk, så fest den revisjonen og lagre hashen ved siden av godkjenningsnotatet. De to kommandoene nedenfor gir deg et fingeravtrykk og en billig syntakssjekk før du leser en eneste linje. De gir også neste person en fast referanse, noe som betyr noe når filen lever utenfor pakkehåndtering. Ingen av kommandoene sier hva skriptet gjør, så kjør dem og fortsett å lese.
sha256sum ./vpn-csd-wrapper.sh
bash -n ./vpn-csd-wrapper.shLes hele filen med fire spørsmål i tankene: gjør den utgående HTTP-kall, leser den påloggingsfiler eller miljøvariabler, skriver den utenfor en midlertidig katalog, og rapporterer noen gren en bestått postur uten å måle noe. Det siste mønsteret er en omgåelse av policyen med en logglinje festet til. Kopierte wrappere smugler det gjerne inn bak en kontroll som ser plausibel ut. Hvis skriptet bestemmer at enheten er fin før det ser på enheten, stopp der.
Sjekk også for pakkede nyttelaster, fordi en lesbar header ikke beviser noe om resten av filen. Å laste ned et skript fra en forumtråd gjør det ikke pålitelig bare fordi navnet gjenklanger en ekte vertskontrollkomponent. Noter hvem som installerte det, hvor det kom fra, og hvordan det vil bli oppdatert.
grep -nE 'base64 -d|xxd -r|eval |curl |wget ' ./vpn-csd-wrapper.shTrinn 3: Velg identiteten wrapperen kjører som
--csd-user senker privilegiene mens CSD-, TNCC- eller HIP-programmet kjører. Den kontoen er en del av den lokale kjøretidsordningen, ikke brukernavnet som sendes til gatewayen.
Gi wrapperen en dedikert konto uten interaktivt skall, uten sudo-rettigheter og uten gruppemedlemskap den ikke trenger. Gi lesetilgang til skriptet og til de bestemte filene det inspiserer, og test deretter senkingen før du berører VPN-profilen. Å finne problemet her er billigere enn å finne det inne i klienten.
sudo -u vpn-csd /usr/local/libexec/vpn-csd-wrapper.shLavere privilegier begrenser skaden et dårlig skript kan gjøre. Det reviderer ikke koden, gjør ikke rapporten sann, eller fastslår ikke at gatewayadministratoren godtar denne implementeringen som oppfyllelse av enhetspolicyen.
Trinn 4: Hold endringen reversibel
Ta sikkerhetskopi av profilen før du redigerer den, og hold wrapperen under versjonskontroll slik at en tilbakerulling gjenoppretter en kjent hash i stedet for å lete etter en kopi. Skriv ned skriptets sti, hash, kjørebruker og godkjenner på ett sted.
For å rulle tilbake, fjern alternativet, start klienten på nytt og bekreft at den opprinnelige feilen kommer tilbake. Hvis gatewayen fortsatt avviser innloggingen etter tilbakerullingen, er noe annet også endret, og å finne den forskjellen kommer før et nytt forsøk med wrapperen. Behold den forrige kopien gjennom hele endringsvinduet, som for de fleste team betyr til neste vedlikeholdsvindu er passert.
Etter en vellykket utrulling, sjekk to ting i stedet for én: tunnelen kommer opp, og en enhet som skal feile posturkontrollen blir fortsatt avvist. En tilkobling som virker for alle, er ikke bevis for at vurderingen overlevde endringen din.
Snarveier som skaper et nytt problem
Ikke la hjelperen rapportere en samsvarende tilstand uten å kjøre de påkrevde kontrollene, og ikke overstyr plattformidentiteten for å matche et annet operativsystem. Å hevde en annen plattform er ikke bevis for at den virkelige enheten oppfyller policyen. Det etterlater deg med en klient som lyver ved hver fremtidige innlogging.
Å slå av serververifisering, spille av en gammel informasjonskapsel på nytt og stable ureviderte skript bytter alle en synlig feil mot en usynlig. Hvis den installerte klienten ikke kan fullføre den støttede flyten, be om et godkjent alternativ i stedet for å bøye det du har.
OpenConnect-håndboken dokumenterer --csd-wrapper og --csd-user hver for seg, og det er hintet som betyr noe: skriptet og identiteten er to beslutninger. Gå gjennom dem hver for seg og skriv ned begge. Da slutter innloggingsspørsmålet å være et mysterium du løser ved å lime inn kode.