Mae OpenConnect yn clymu dau gyfnewidfa ar wahân â gwerth byrhoedlog: y mewngofnodi gwe a’r dwnnel VPN. HTTPS cyffredin yw’r gyfnewidfa gyntaf: mae manylion mewngofnodi, taith SAML neu docyn yn mynd i’r porth, ac mae’r ateb yn cario cwci dilysu. Mae’r ail gyfnewidfa yn cyflwyno’r cwci hwnnw i’r un porth fel prawf bod y cam gwe eisoes wedi digwydd, a dim ond yna y daw’r dwnnel i fyny.

Ni chaiff unrhyw beth am y dwnnel ei drafod yn ystod y mewngofnodi. Dyna’r rhan sy’n werth ei deall, oherwydd mae’r rhan fwyaf o gamgymeriadau sgriptiau yn tybio mai cyfrinair i’w storio yw’r cwci, neu allwedd sy’n diogelu traffig, tra ei fod mewn gwirionedd yn docyn cludydd ar gyfer sesiwn porth benodol.

Yr hyn y mae’r cleient a’r porth yn ei gyfnewid, yn eu tro

Mae’r cam dilysu yn edrych fel gwefan warchodedig arferol. Mae OpenConnect yn anfon manylion mewngofnodi’r defnyddiwr, neu’n dilyn ailgyfeiriad y porth i ddarparwr hunaniaeth, ac mae’r porth yn ateb â dogfen sy’n mewnosod y cwci dilysu. Yn y protocol AnyConnect mae’r gwerth hwnnw yn teithio mewn pennawd cwci ar y ceisiadau dilynol, fel arfer dan enw fel webvpn, ac mae’r llawlyfr yn ei drin fel y manylyn sy’n cario’r sesiwn ymlaen.

Yr ail gam yw cais CONNECT i bwynt terfyn VPN y porth gyda’r cwci hwnnw ynghlwm. Mae’r porth yn ei wirio, yn neilltuo cyfeiriad, ac mae’r cleient yn dechrau CSTP dros TLS, gyda DTLS fel llwybr data cyflymach dewisol unwaith y bydd y sesiwn yn bodoli. Dim ond ar y pwynt hwn y sefydlir paramedrau’r dwnnel, y llwybrau, gosodiadau DNS ac allweddi traffig y sesiwn. Cafodd y cwci’r cleient drwy’r drws; ni wnaeth amgryptio unrhyw beth.

Mae’r dilyniant hwn yn esbonio pam mae openconnect --authenticate yn bodoli. Ei redeg, ac mae’n gwneud y cam gwe, yn argraffu bloc bach o newidynnau plisgyn fel COOKIE, HOST, CONNECT_URL a FINGERPRINT, ac yna’n gorffen cyn i unrhyw dwnnel gael ei adeiladu. Yna gall sgript lapio ddechrau’r cysylltiad go iawn gyda’r gwerthoedd hynny, sef yn union y rhaniad sydd ei angen ar weithrediad di-sgrin neu mewn dau gynhwysydd.

Cludydd sesiwn yw’r cwci, nid allwedd

Triniwch y gwerth fel y byddech yn trin dynodwr sesiwn mewn cymhwysiad gwe. Pwy bynnag sy’n ei ddal yn ystod ei oes, gall ofyn i’r porth am y dwnnel y mae’r sesiwn honno’n gymwys iddo, felly mae ei gyfrinachedd yn bwysig. Ond nid yw copïo yn datgelu traffig, oherwydd daw cyfrinachedd y dwnnel o’r ysgwyd llaw TLS a’r allweddi deilliedig, nid o’r llinyn cwci.

Nid yw ychwaith yn ganiatâd parhaol. Y porth a’r darparwr hunaniaeth sy’n penderfynu pa mor hir y mae’r sesiwn yn byw, ac nid yw porwr sy’n dal i ddangos tudalen fewngofnodi yn dweud dim am ba un a yw sesiwn y dwnnel yn ddilys o hyd. Mae ailgysylltu ar ôl dod i ben yn golygu ailadrodd y cam gwe a chynhyrchu cwci newydd, a dyna bwynt ail-ddilysu, nid anghyfleustra i’w osgoi drwy beiriannu.

Peidiwch â thrin cwci fel amnewid cyffredinol am fanylion mewngofnodi eraill. Mae honiad SAML, cyfrinair porwr a chwci a gyhoeddwyd gan wasanaeth arall yn wrthrychau gwahanol â chynulleidfaoedd gwahanol, ac mae pastio un yng nghae’r llall fel arfer yn methu wrth y porth neu, yn waeth, yn llwyddo yn erbyn y ffin ymddiriedaeth anghywir.

Trosglwyddo’r cwci heb adael copïau

Y trosglwyddiad mecanyddol mwyaf diogel ar Linux yw mewnbwn safonol. Mae --cookie-on-stdin yn darllen y gwerth o stdin, felly nid yw’r cwci byth yn ymddangos yn rhestr dadleuon y broses, lle gall unrhyw ddefnyddiwr lleol ei ddarllen gyda ps. Mae pibell sy’n dilysu mewn un broses ac yn bwydo’r dwnnel mewn un arall yn cadw’r gwerth mewn pibell yn hytrach nag mewn ffeil neu newidyn amgylchedd.

Mae dadleuon a newidynnau amgylchedd yn wannach am resymau gwahanol. Mae dadl yn weladwy yn nhabl y prosesau am oes y cleient ac yn aml yn glanio yn hanes y plisgyn. Mae newidyn amgylchedd yn cael ei etifeddu gan brosesau plentyn, ac mae uned systemd sy’n ei osod yn y ffeil uned yn storio’r gyfrinach mewn cyfluniad darllenadwy. Os oes rhaid defnyddio ffeil, cyfyngwch hi i’r cyfrif gwasanaeth a’i thynnu pan fydd y sesiwn yn gorffen.

Cadwch y ffin fraint yn fwriadol hefyd. Dylai’r broses sy’n siarad â’r darparwr hunaniaeth ac o bosibl yn agor porwr redeg fel y defnyddiwr sy’n berchen ar y mewngofnodi hwnnw. Efallai y bydd angen mwy o fraint ar y broses sy’n ffurfweddu llwybrau, DNS a dyfais y dwnnel. Mae rhedeg y porwr cyfan fel root er mwyn i’w gwci fod ar gael i dwnnel sy’n eiddo i root yn gyfnewid anghywir, a gall gosodiadau OpenConnect modern drosglwyddo’r gwerth dros y ffin honno’n eglur.

Mae cofnodi yn haeddu’r un amheuaeth. Gall allbwn cleient manwl, sgriptiau cynorthwyol a diagnosteg y porth i gyd adleisio deunydd cais, ac nid yw pob lefel cofnodi yn cuddio’r cwci. Cofnodwch y cofnod gwall lleiaf sydd ei angen arnoch, cadwch ef allan o sianeli a rennir, a gwirio sampl wedi’i olygu cyn ei atodi i docyn.

Gwirio a dod i ben yn yr ail gam

Rhaid i’r ail gam wirio’r gweinydd o hyd. Mae’r FINGERPRINT y mae --authenticate yn ei argraffu yn bin tystysgrif ar ffurf pin-sha256:, ac mae ei drosglwyddo i alwad y dwnnel gyda --servercert yn cadw’r gwiriad wedi’i angori i’r porth y gwnaethoch ddilysu yn ei erbyn. Mae diffodd gwirio tystysgrifau er mwyn symleiddio sgript yn tynnu’r unig brawf bod y cwci yn cael ei drosglwyddo i’r gwesteiwr a fwriadwyd.

Pan fydd y porth yn gwrthod y cwci, yr ateb yw rownd ddilysu newydd, nid storfa hirach. Storiwch y cwci dim ond am oes y cysylltiad, dilëwch ffeiliau dros dro wrth ymadael, a defnyddiwch broses dynnu sesiwn y darparwr hunaniaeth neu’r porth pan fydd sesiwn yn cael ei datgelu neu ddyfais yn cael ei cholli. Nid yw cwci wedi’i storio yn esemptiad rhag MFA.

Cyn awtomeiddio hyn, gwirio pedwar peth: mae’r dwnnel yn rhedeg o dan y cyfrif cywir, mae’r cwci yn cyrraedd drwy stdin, mae ôl-bys y dystysgrif wedi’i binio, ac mae’r sesiwn yn cael ei thaflu pan fydd y dwnnel yn cau. Os oes unrhyw un ohonynt ar goll, mae’r awtomeiddio wedi ehangu’r ymddiriedaeth yn y cwci yn hytrach na chopïo’r llif â llaw.

Erthyglau cysylltiedig