Cisco AnyConnectiga kaasas olev vpn-klient käitub nagu vestlus: trükib viipa, ootab rida ja trükib siis järgmise. Kui suunad selle vestluse failist või torust sisse, töötab sama binaarfail järelevalveta. Tehnika on üks ümbersuunamine pluss järjestatud vastuste loend, ja just loend, mitte ümbersuunamine, otsustab, kas skript on usaldusväärne.

Praktikas rikuvad seda kaks asja. Viipade järjekord nihkub, kui lüüs küsib midagi lisaks, ja salvestatud parool muudab ühe trükivea konto lukustuseks. Käsitle järjestust versioonitud andmetena, mida saad pärast iga lüüsi muudatust võrrelda. Ebaõnnestu valjult, mitte proovi uuesti, sest tsükkel on täpselt see viis, kuidas valesti trükitud paroolist saab lukustatud konto.

Üks järjestus, selles järjekorras, milles klient küsib

Käivita klient üks kord interaktiivselt ja kirjuta üles iga viip selles järjekorras, milles see ilmub. Sellest transkriptsioonist saab vastusefail. Kui suunad faili binaarfaili, peab esimene rida olema ühenduskäsk ise, seepärast algab järjestus hostinimega, mitte kasutajanimega.

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

Paljas 0 valib esimese ühendusprofiili, kui lüüs pakub loendit; kasuta indeksit, mille sinu lüüs trükib. y võtab vastu sisselogimisbänneri, seega kustuta see rida, kui bännerit pole, ja lisa rida sinna, kus sinu lüüs küsib lisaküsimust. Lõpus olev exit on see, mis laseb kliendil puhtalt lõpetada, kui viimane vastus on ära kasutatud.

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

Mitteinteraktiivne režiim ei ole siin valikuline. Ilma -s võib klient terminali üle võtta ja ümbersuunatud sisendit eirata; sellega loetakse vastused voost ja protsess naaseb. Kus binaarfail vajab kõrgemaid õigusi, mässi kutse sudo -n sisse, et skript ebaõnnestuks kohe, mitte ei blokeeruks parooliküsimusel.

Kus vastusefail lekitab

Parooli sisaldav fail on mandaat, seega anna sellele mandaadi õigused: režiim 600, tööd käitava konto omanduses ja mitte kunagi jagatud või sünkroonitud kataloogis. Loo see juba rakendatud režiimiga, mitte paranda hiljem, sest fail on kirjutamise ja chmodi vahel hetkeks kõigile loetav.

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

Teine pool on argv. Argumendina edastatud parool on nähtav igale kohalikule kasutajale, kes protsesse loetleb, ja see satub ka kesta ajalukku. Loe see hoopis failideskriptorist või keskkonnamuutujast ja pane koormus jutumärkidesse, et kest ei saaks selle sees midagi laiendada.

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

Jälgi jutumärke. Kahekordsete jutumärkide sees võib interaktiivne kest parooli, mis sisaldab !, laiendada enne, kui klient seda üldse näeb, ja tõrge saabub üldise event-not-found-veana, mis näeb välja nagu protokolliprobleem.

Tõesta tunnel, siis sulge see

Ühendatud olek tõestab ainult seda, et klient usub sessiooni omavat. Vali host, mis vastab ainult ettevõtte võrgu seest, ja kontrolli seda üks kord enne muu tegemist. Sealne tõrge on marsruutimis- või poliitikaviga ja sisselogimise uuesti käivitamine ei muuda seda.

/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

Kontrolli olekuväljundit enne ja pärast ühenduse katkestamist. Aegunud sessiooniga jäetud klient võib järgmise ühenduse tagasi lükata, samal ajal kui skript teatab endiselt õnnestumisest, ja see tõrkerežiim on nähtamatu, kui vaatad ainult väljumiskoode. Võrdle mõlemat lugemit, mitte ära usalda teist üksinda. Kestaprofiili aliased on igapäevaseks kasutuseks piisavad, samas kui kõik ajastatud väärib samasugust mandaatide ja identiteedi ülevaatust nagu iga teine järelevalveta töö.

Kui fikseeritud loend ei ole enam turvaline

Vastusefail kodeerib tänase viipade järjekorra. Muudetud bänner, sunnitud paroolivahetus või teise faktori väljakutse muudab selle tsükliks, mis võib konto lukustada, seetõttu peab skript väljuma esimese ootamatu vastuse juures, mitte taaskäivituma.

Püüa kinni, mida klient trükkis, tagasta nullist erinev olek ja jäta otsus kutsujale. Kus lüüs nõuab teist faktorit, on aus vastus see, et järelevalveta sisselogimine ei ole selle profiili jaoks saadaval, mitte see, et järjestus vajab veel ühte rida.

Rotatsioon kuulub samasse ülevaatusse. Kui mandaati hoitakse, otsusta, kes seda lugeda tohib, millal see muutub ja mis selle eemaldab, kui host uuesti üles ehitatakse. Skript, mis töötab aasta, sest keegi ei puutunud parooli, ei ole disain, vaid õnnetus, mis ootab rotatsioonipoliitikat.

Profiilid, mis ei ole AnyConnect

Kaks vanemat Cisco mandaadistiili aetakse sellega segi. Profiil vpnc küsib IPSec ID-d, mis on tegelikult grupi nimi, seejärel grupisaladust, seejärel sinu enda mandaate, ja kõik kolm tulevad sellelt, kes lüüsi haldab. Vana Cisco IPsec on AnyConnectist erinev protokoll, seega vpnc ei ulatu ainult-AnyConnect teenuseni; openconnect --protocol=anyconnect on selle töö avatud klient.

Fail .pcf kirjeldab vanema kliendi profiili. Selles olev host, grupi nimi ja grupiparool saab Cisco IPseciga kõnelevas kliendis käsitsi uuesti sisestada, kuigi fail ei ole universaalne import ja mis tahes mittestandardne port või tunnelirežiim kaob tavaliselt ülekandel.

Alusta sellest, mida lüüs tegelikult pakub, seejärel vali klient, mis seda protokolli kõneleb. Profiili kopeerimine teiselt saidilt on viis, kuidas inimesed jõuavad siluda mandaate, mis ei olnud kunagi probleem.

Seotud artiklid