AnyConnect Linux sistēmā: droša pieteikšanās secības skriptēšana
Cisco AnyConnect vpn binārais fails nolasa atbildes no stdin, un ar to pietiek atkārtojamai pieteikšanās reizei. Izveido secību, aizsargā failu, pārbaudi un apstājies.
Cisco AnyConnect vpn klients uzvedas kā saruna: izdrukā uzvedni, gaida rindu un pēc tam izdrukā nākamo. Ja šo sarunu ievadi no faila vai caurules, tas pats binārais fails darbojas bez uzraudzības. Tehnika ir viens pārvirzījums un sakārtots atbilžu saraksts, un tieši saraksts, nevis pārvirzījums, izšķir, vai skripts ir uzticams.
Praksē to salauž divas lietas. Uzvedņu secība mainās, kad vārteja pajautā kaut ko papildu, un saglabāta parole vienu rakstīšanas kļūdu pārvērš konta bloķēšanā. Uzlūko secību kā versijotu datu kopu, ko vari salīdzināt pēc katras vārtejas izmaiņas. Ciet neveiksmi skaļi, nevis mēģini vēlreiz, jo cilpa ir tieši tas ceļš, kā nepareizi ievadīta parole kļūst par bloķētu kontu.
Viena secība tādā kārtībā, kādā klients jautā
Palaid klientu vienreiz interaktīvi un pieraksti katru uzvedni tādā kārtībā, kādā tā parādās. Šis ieraksts kļūst par atbilžu failu. Kad pārvirzi failu uz bināro failu, pirmajai rindai jābūt pašai savienojuma komandai, tāpēc secība sākas ar resursdatora nosaukumu, nevis lietotājvārdu.
connect vpn.example.com
0
<username>
<password>
y
exit
Kailais 0 izvēlas pirmo savienojuma profilu, kad vārteja piedāvā sarakstu; izmanto indeksu, ko izdrukā tava vārteja. y pieņem pieteikšanās reklāmkarogu, tāpēc dzēs šo rindu, ja reklāmkaroga nav, un ievieto vienu tur, kur tava vārteja uzdod papildu jautājumu. Beigu exit ir tas, kas ļauj klientam tīri pabeigt, kad pēdējā atbilde ir izlietota.
/opt/cisco/anyconnect/bin/vpn -s < anyconnect.txt
Neinteraktīvais režīms šeit nav izvēles iespēja. Bez -s klients var pārņemt termināli un ignorēt pārvirzīto ievadi; ar to atbildes tiek lasītas no straumes un process atgriežas. Kur binārajam failam vajadzīgas paaugstinātas privilēģijas, ietin izsaukumu sudo -n, lai skripts nekavējoties sabrūk, nevis bloķējas uz paroles uzvednes.
Kur noplūst atbilžu fails
Fails ar paroli ir akreditācijas dati, tāpēc piešķir tam tādas tiesības: režīms 600, pieder kontam, kas izpilda darbu, un nekad koplietotā vai sinhronizētā mapē. Izveido to ar jau piemērotu režīmu, nevis labo vēlāk, jo fails starp rakstīšanu un chmod uz brīdi ir lasāms visiem.
install -m 600 /dev/null ~/.config/anyconnect.txt
chmod 700 ~/.config
Otra puse ir argv. Parole, kas nodota kā arguments, ir redzama ikvienam vietējam lietotājam, kurš uzskaita procesus, un tā nonāk arī čaulas vēsturē. Lasi to no faila deskriptora vai vides mainīgā, un liec kravu pēdiņās, lai čaula nevarētu tajā neko izvērst.
printf '%s\n' 'connect vpn.example.com' '0' "$VPN_USER" "$VPN_PASS" 'y' 'exit' \
| sudo -n /opt/cisco/anyconnect/bin/vpn -s
Uzmanies ar pēdiņām. Dubultpēdiņās paroli, kas satur !, interaktīva čaula var izvērst vēl pirms klients to ierauga, un kļūda pienāk kā vispārīga event-not-found kļūda, kas izskatās pēc protokola problēmas.
Pierādi tuneli, tad aizver to
Savienots statuss pierāda tikai to, ka klients tic, ka tam ir sesija. Izvēlies resursdatoru, kas atbild tikai no uzņēmuma tīkla iekšpuses, un pārbaudi to vienreiz pirms jebko cita. Neveiksme tur ir maršrutēšanas vai politikas defekts, un pieteikšanās atkārtota palaišana to nemainīs.
/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
Pārbaudi statusa izvadi pirms atvienošanas un pēc tās. Klients, kas atstāts ar novecojušu sesiju, var atteikt nākamo savienojumu, kamēr skripts joprojām ziņo par panākumiem, un šis atteices veids ir neredzams, ja skaties tikai izejas kodus. Salīdzini abus nolasījumus, nevis uzticies otrajam vienam pašam. Čaulas profila aizstājvārdi ir pietiekami ikdienas lietošanai, bet viss ieplānotais ir pelnījis tādu pašu akreditācijas datu un identitātes pārskatu kā jebkurš cits darbs bez uzraudzības.
Kad fiksēts saraksts vairs nav drošs
Atbilžu fails iekodē šodienas uzvedņu secību. Mainīts reklāmkarogs, piespiedu paroles maiņa vai otrā faktora izaicinājums pārvērš to cilpā, kas var bloķēt kontu, tāpēc skriptam ir jāiziet pie pirmās negaidītās atbildes, nevis jārestartējas.
Noķer, ko klients izdrukāja, atgriez ne-nulles statusu un ļauj zvanītājam izlemt. Kur vārteja pieprasa otru faktoru, godīgā atbilde ir tāda, ka šim profilam pieteikšanās bez uzraudzības nav pieejama, nevis tas, ka secībai vajag vēl vienu rindu.
Rotācija pieder pie tā paša pārskata. Ja akreditācijas dati tiek glabāti, izlem, kas tos drīkst lasīt, kad tie mainās un kas tos noņem, kad resursdators tiek pārbūvēts. Skripts, kas darbojas gadu tāpēc, ka neviens nav pieskāries parolei, nav dizains, bet nelaime, kas gaida rotācijas politiku.
Profili, kas nav AnyConnect
Divi vecāki Cisco akreditācijas datu stili tiek sajaukti ar šo. Profils vpnc pieprasa IPSec ID, kas patiesībā ir grupas nosaukums, tad grupas noslēpumu, tad tavus paša datus, un visi trīs nāk no tā, kurš pārvalda vārteju. Vecais Cisco IPsec ir cits protokols nekā AnyConnect, tāpēc vpnc nevar sasniegt pakalpojumu, kas paredzēts tikai AnyConnect; openconnect --protocol=anyconnect ir atvērtais klients šim darbam.
Fails .pcf apraksta vecāku klienta profilu. Tajā esošo resursdatoru, grupas nosaukumu un grupas paroli var manuāli ievadīt no jauna klientā, kas runā Cisco IPsec, lai gan fails nav universāls imports un jebkurš nestandarta ports vai tuneļošanas režīms parasti pazūd pārsūtīšanā.
Sāc ar to, ko vārteja patiešām piedāvā, tad izvēlies klientu, kas runā šajā protokolā. Profila kopēšana no citas vietnes ir ceļš, kā cilvēki nonāk pie tādu akreditācijas datu atkļūdošanas, kas nekad nav bijuši problēma.