vpn-klienten som kjem med Cisco AnyConnect ter seg som ein samtale: han skriv eit spørsmål, ventar på ei linje og skriv så den neste. Før den samtalen inn frå ei fil eller eit røyr, og den same binærfila køyrer utan tilsyn. Teknikken er éi omdirigering pluss ei ordna liste med svar, og det er lista, ikkje omdirigeringa, som avgjer om skriptet er påliteleg.

To ting øydelegg dette i praksis. Rekkjefølgja på spørsmåla forskyv seg når ein gateway spør om noko ekstra, og eit lagra passord gjer éin skrivefeil om til ei kontolåsing. Handsame sekvensen som versjonerte data du kan samanlikne etter kvar gateway-endring. Feil høgt i staden for å prøve på nytt, for ei løkke er nettopp måten eit feilskrive passord blir ein låst konto på.

Éin sekvens, i den rekkjefølgja klienten spør

Køyr klienten interaktivt éin gong og skriv ned kvart spørsmål i den rekkjefølgja det kjem. Den transkripsjonen blir svarfila. Når du omdirigerer fila inn i binærfila, må den første linja vere sjølve sambandskommandoen, og difor byrjar sekvensen med eit vertsnamn i staden for eit brukarnamn.

connect vpn.example.com
0
<username>
<password>
y
exit

Den berr 0 vel den første sambandsprofilen når gatewayen tilbyr ei liste; bruk den indeksen gatewayen din skriv ut. y godtek eit påloggingsbanner, so slett den linja om det ikkje finst noko banner, og set inn éi der gatewayen din stiller eit tilleggsspørsmål. Den avsluttande exit er det som lét klienten avslutte reint når det siste svaret er brukt opp.

/opt/cisco/anyconnect/bin/vpn -s < anyconnect.txt

Ikkje-interaktiv modus er ikkje valfri her. Utan -s kan klienten ta over terminalen og ignorere omdirigert inndata; med han blir svara lesne frå straumen og prosessen kjem attende. Der binærfila treng forhøgde rettar, pakk kallet inn i sudo -n so skriptet feilar med ein gong i staden for å blokkere på eit passordspørsmål.

Der svarfila lekk

Ei fil med eit passord er eit innloggingsbevis, so gje ho rettane til eitt slikt: modus 600, eigd av kontoen som køyrer jobben, og aldri inne i ei delt eller synkronisert mappe. Lag ho med modusen alt brukt i staden for å rette ho etterpå, for ei fil er eit augneblink lesbar for alle mellom skrivinga og chmod.

install -m 600 /dev/null ~/.config/anyconnect.txt
chmod 700 ~/.config

Den andre halvdelen er argv. Eit passord som blir sendt som argument, er synleg for kvar lokal brukar som listar prosessar, og det hamnar òg i skalhistoria. Les det frå ein fildeskriptor eller ein miljøvariabel i staden, og set nyttelasta i hermeteikn so skalet ikkje kan utvide noko inni ho.

printf '%s\n' 'connect vpn.example.com' '0' "$VPN_USER" "$VPN_PASS" 'y' 'exit' \
  | sudo -n /opt/cisco/anyconnect/bin/vpn -s

Fylg med på hermeteikna. Inne i doble hermeteikn kan eit passord med ! bli utvida av eit interaktivt skal før klienten i det heile ser det, og feilen kjem som ein generell event-not-found-feil som ser ut som eit protokollproblem.

Prov tunnel, so lat han att

Ein tilkopla tilstand provar berre at klienten trur han har ein sesjon. Vel ein vert som svarar berre innanfrå bedriftsnettet, og prøv han éin gong før du gjer noko anna. Ein feil der er ein ruting- eller politikkfeil, og å køyre pålogginga på nytt endrar ikkje det.

/opt/cisco/anyconnect/bin/vpn state
curl -sS -o /dev/null -w '%{http_code}\n' --max-time 10 https://<internal-host>/
/opt/cisco/anyconnect/bin/vpn disconnect

Sjekk tilstandsutdata før og etter fråkoplinga. Ein klient som blir lat att med ein gamal sesjon, kan nekte neste samband medan skriptet enno melder om suksess, og den feilmodusen er usynleg om du berre ser på utgangskodar. Samanlikn dei to lesingane i staden for å stole på den andre åleine. Alias i ein skalprofil er nok til dagleg bruk, medan alt som er planlagt fortener same gjennomgang av innloggingsbevis og identitet som kvar annan jobb utan tilsyn.

Når ei fast liste ikkje lenger er trygg

Ei svarfil kodar spørsmålsrekkjefølgja i dag. Eit endra banner, eit påtvinga passordbyte eller ei utfordring om andre faktor gjer ho til ei løkke som kan låse kontoen, og difor må skriptet gå ut ved det første uventa svaret i staden for å starte på nytt.

Fang det klienten skreiv ut, gje attende ein status som ikkje er null, og lat kallaren avgjere. Der gatewayen krev ein andre faktor, er det ærlege svaret at pålogging utan tilsyn ikkje er tilgjengeleg for den profilen, ikkje at sekvensen treng éi linje til.

Rotasjon høyrer til same gjennomgangen. Om innloggingsbeviset blir lagra, avgjer kven som kan lese det, når det blir endra og kva som fjernar det når verten blir bygd opp att. Eit skript som fungerer eit år fordi ingen har rørt passordet, er ikkje ein design, men eit uhell som ventar på ein rotasjonspolitikk.

Profilar som ikkje er AnyConnect

To eldre Cisco-stilar for innloggingsbevis blir blanda saman med denne. Ein vpnc-profil spør om ein IPSec ID, som eigentleg er gruppenamnet, so ein gruppehemmelegheit, so dine eigne innloggingsbevis, og alle tre kjem frå den som driv gatewayen. Gammal Cisco IPsec er ein annan protokoll enn AnyConnect, so vpnc kan ikkje nå ein teneste som berre er AnyConnect; openconnect --protocol=anyconnect er den opne klienten for den jobben.

Ei .pcf-fil skildrar den eldre klientprofilen. Vertsnamnet, gruppenamnet og gruppepassordet i ho kan ein taste inn på nytt for hand i ein klient som talar Cisco IPsec, sjølv om fila ikkje er ein universell import og kvar port eller tunnelmodus som ikkje er standard, vanlegvis forsvinn i overføringa.

Start med det gatewayen faktisk tilbyr, og vel so klienten som talar den protokollen. Å kopiere ein profil frå ein annan stad er måten folk endar med å feilsøkje innloggingsbevis som aldri var problemet.

Relaterte artiklar