AnyConnect op Linux: d'Login-Sequenz sécher skripten
Den AnyConnect vpn-Binaire liest Äntwerten aus stdin, an dat duer fir eng widderhuelbar Umeldung. Bau d'Sequenz, schütz d'Datei, kontrolléier a stopp.
De vpn-Client, dee mat Cisco AnyConnect kënnt, verhält sech wéi eng Konversatioun: hie dréckt eng Fuerderung, waart op eng Zeil an dréckt dann déi nächst. Gëff déi Konversatioun aus enger Datei oder enger Pipe an, an dee selwechte Binaire leeft ouni Opsiicht. D'Technik ass eng Ëmleedung plus eng geuerdnete Lëscht vun Äntwerten, an et ass d'Lëscht, net d'Ëmleedung, déi entscheet, ob de Skript zouverlässeg ass.
Zwou Saachen zerbriechen dat an der Praxis. D'Reiefolleg vun de Fuerderunge verréckelt sech, wann en Gateway eppes zousätzlech freet, an en gespäicherte Passwuert mécht aus engem Tippfehler eng Kontsperr. Behandelt d'Sequenz wéi versionéiert Daten, déi Dir no all Gateway-Ännerung vergläiche kënnt. Versot haart amplaz nach eng Kéier ze probéieren, well eng Schlauf ass genee de Wee, op deem en falsch getippte Passwuert zu engem gespaarte Kont gëtt.
Eng Sequenz, an der Reiefolleg, an deen de Client freet
Start de Client eng Kéier interaktiv a schreif all Fuerderung an der Reiefolleg op, an där se erschéngt. Dee Transkript gëtt d'Äntwertdatei. Wann s Du d'Datei an de Binaire ëmleedst, muss déi éischt Zeil de Verbindungsbefehl selwer sinn, dofir fänkt d'Sequenz mat engem Hostnumm un an net mat engem Benotzernumm.
connect vpn.example.com
0
<username>
<password>
y
exit
De bloe 0 wielt dat éischt Verbindungsprofil, wann de Gateway eng Lëscht ubitt; benotz den Index, deen däi Gateway dréckt. Den y akzeptéiert e Login-Banner, also läsch déi Zeil, wann et kee Banner gëtt, a setz eng an do wou däi Gateway eng zousätzlech Fro stellt. Den exit um Enn ass dat, wat de Client propper ophalen lässt, wann déi lescht Äntwert verbraucht ass.
/opt/cisco/anyconnect/bin/vpn -s < anyconnect.txt
Den net-interaktive Modus ass hei net fakultativ. Ouni -s kann de Client den Terminal iwwerhuelen an d'ëmgeleete Input ignoréieren; domat ginn d'Äntwerten aus dem Stroum gelies an de Prozess kënnt zréck. Wou de Binaire erhéicht Rechter brauch, wéckelt den Opruff an sudo -n, soudatt de Skript direkt versot amplaz op enger Passwuertfuerderung ze blockéieren.
Wou d'Äntwertdatei leckt
Eng Datei mat engem Passwuert ass en Authentifikatioustoken, also gitt hir d'Rechter vun esou engem: Modus 600, am Besëtz vum Kont deen d'Aarbecht ausféiert, an ni an engem gedeelte oder synchroniséierte Verzeechnis. Erstellt se mat schonn applizéiertem Modus amplaz se duerno ze flécken, well eng Datei tëscht dem Schreiwen an dem chmod kuerz fir jiddereen liesbar ass.
install -m 600 /dev/null ~/.config/anyconnect.txt
chmod 700 ~/.config
Déi aner Halschent ass argv. E Passwuert, dat als Argument iwwerginn gëtt, ass fir all lokale Benotzer sichtbar, dee Prozesser oplëscht, an et landt och an der Shell-Historik. Liest et amplaz aus engem Dateideskriptor oder enger Ëmweltvariabel, a setzt d'Payload an Anféierungszeechen, soudatt d'Shell bannenin näischt kann ausbauen.
printf '%s\n' 'connect vpn.example.com' '0' "$VPN_USER" "$VPN_PASS" 'y' 'exit' \
| sudo -n /opt/cisco/anyconnect/bin/vpn -s
Passt op d'Anféierungszeechen op. An duebele Anféierungszeechen kann e Passwuert mat ! vun enger interaktiver Shell ausgebaut ginn, ier de Client et iwwerhaapt gesäit, an de Feeler kënnt als allgemengen event-not-found-Feeler, deen wéi e Protokollproblem ausgesäit.
Beweis den Tunnel, da maach en zou
En zoustand verbonnen beweist just, dass de Client mengt eng Sëtzung ze hunn. Wielt en Host, deen nëmme vun bannen aus dem Firmennetz äntwert, a probéiert en eemol, ier s Du eppes anescht maachs. E Feeler do ass e Routing- oder Politiksfeeler, an d'Umeldung nach eng Kéier lafe loossen ännert dat net.
/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
Kontrolléier d'Zoustandsausgab virun an no der Trennung. E Client, dee mat enger aler Sëtzung zeréckgelooss gëtt, kann déi nächst Verbindung verweigeren, während de Skript nach ëmmer Erfolleg mellt, an dee Feeler ass onsiichtbar, wann s Du nëmmen d'Exit-Codes kucks. Vergläich déi zwou Liesungen amplaz der zweeter eleng ze vertrauen. Aliassen an engem Shell-Profil duer fir den Alldag, awer alles geplangte verdéngt déiselwecht Iwwerpréiwung vun den Authentifikatiounen an der Identitéit wéi all aner onbewaacht Aarbecht.
Wann eng fest Lëscht net méi sécher ass
Eng Äntwertdatei kodéiert déi haiteg Reiefolleg vun de Fuerderungen. En geännerten Banner, eng forcéiert Passwuertännerung oder eng Erausfuerderung vum zweete Faktor maachen eng Schlauf draus, déi de Kont ka sperren, dofir muss de Skript bei der éischter onerwaarter Äntwert erausgoen amplaz nei ze starten.
Halt fest, wat de Client gedréckt huet, gitt en net-null Status zréck a loosst den Opruffer entscheeden. Wou de Gateway en zweete Faktor verlaangt, ass déi éierlech Äntwert, dass eng onbewaacht Umeldung fir dee Profil net disponibel ass, net dass d'Sequenz nach eng Zeil brauch.
D'Rotatioun gehéiert zu der selwechter Iwwerpréiwung. Wann den Authentifikatioun gespäichert gëtt, decidéiert wien en liese kann, wéini en sech ännert a wat en ewechhëlt, wann den Host nei gebaut gëtt. E Skript, deen e Joer funktionéiert, well kee säi Passwuert ugepaakt huet, ass keen Design, awer en Accident, deen op eng Rotatiounspolitik waart.
Profiler, déi net AnyConnect sinn
Zwéi eeler Cisco-Authentifikatiounsstilen ginn domat verwiesselt. E Profil vpnc freet no enger IPSec ID, wat eigentlech den Gruppennumm ass, dann e Gruppengeheimnis, dann deng eege Authentifikatiounen, an all dräi kommen dohier, wien de Gateway bedreift. Legacy Cisco IPsec ass en aneren Protokoll wéi AnyConnect, also kann vpnc keen nëmmen-AnyConnect-Service erreechen; openconnect --protocol=anyconnect ass den oppene Client fir déi Aarbecht.
Eng Datei .pcf beschreift de eelere Clientprofil. Den Host, den Gruppennumm an d'Gruppepasswuert dran kënnen am Client, deen Cisco IPsec schwätzt, vun Hand nei agi ginn, obwuel d'Datei keen universellen Import ass an all net-Standard-Port oder Tunnelsmodus meeschtens beim Transfer verschwënnt.
Fänk domat un, wat de Gateway wierklech ubitt, a wielt dann de Client, deen dee Protokoll schwätzt. E Profil vun enger anerer Säit kopéieren ass de Wee, op deem d'Leit Authentifikatiounen debuggen, déi ni de Problem waren.