OpenConnect csd-wrapper: праверце скрыпт да ўваходу
Разглядайце --csd-wrapper як мяжу выканання кода: праверце скрыпт, выберыце асобнага карыстальніка csd і пацвердзіце, што шлюз сапраўды бачыць.
Даданне --csd-wrapper у профіль перадае лакальны скрыпт дэману, які запускае яго падчас уваходу, таму рашэнне перад вамі — гэта прагляд кода, а не перамыкач пераваг. Опцыя існуе, каб можна было замяніць кампанент праверкі хоста на шлюзе, і яна прымае шлях да скрыпта, які вы пастаўляеце. Усё ніжэй мяркуе, што ўладальнік разгортвання ўжо сказаў, якая праверка стану патрабуецца; калі гэтая частка ўсё яшчэ адкрытая, вырашыце яе першай. Інструкцыя мае чатыры крокі: знайсці этап, які збаіў, прачытаць скрыпт, выбраць ідэнтычнасць, ад імя якой ён працуе, і даказаць вынік.
Крок 1: Знайдзіце этап, які збаіў
Апошняе паведамленне кліента звычайна тычыцца кукі, а гэта канец ланцуга, а не яго пачатак. Уваход праз HTTPS, праверка сертыфіката сервера, абмен аўтэнтыфікацыі і кампанент стану — усё гэта стаіць перад гэтым паведамленнем.
Зафіксуйце версію і адрас уваходу, якія выкарыстоўваюцца, затым паўтарыце спробу, пакідаючы падрабязны вывад у сваім тэрмінале. Чытайце першую памылку, якая не з’яўляецца паўторам, а не апошні радок трасіроўкі. Калі журнал спыняецца да таго, як названы любы кампанент ацэнкі, значыць, вокладка пакуль не ваша праблема. Даданне яе ў гэты момант толькі пашырае паверхню, якую вам давядзецца абараняць пазней.
openconnect --version
openconnect --verbose --user="$VPN_USER" vpn.example.com </dev/nullТрымайце трасіроўку лакальна, бо кукі і адказы аўтэнтыфікацыі — гэта матэрыял доступу. След, устаўлены ў чат, — гэта ўцечка ўліковых даных, нават калі этап ацэнкі выглядае бясшкодным. Дзяліцеся тэкстам памылкі і месцам у патоку, дзе яна з’явілася, але ніколі — карыснай нагрузкай.
Крок 2: Прачытайце скрыпт да таго, як ён трапіць у профіль
Вокладка настолькі надзейная, наколькі добрая версія, якую вы праверылі, таму замацуйце гэтую версію і захавайце яе хэш побач з нататкай аб зацвярджэнні. Дзве каманды ніжэй даюць вам адбітак і танную праверку сінтаксісу яшчэ да чытання першага радка. Яны таксама даюць наступнаму чалавеку нерухомую спасылку, што важна, калі файл жыве па-за кіраваннем пакетамі. Ні адна з каманд не кажа, што робіць скрыпт, таму запусціце іх і працягвайце чытаць.
sha256sum ./vpn-csd-wrapper.sh
bash -n ./vpn-csd-wrapper.shПрачытайце ўвесь файл, трымаючы ў галаве чатыры пытанні: ці робіць ён знешнія HTTP-выклікі, ці чытае файлы ўліковых даных або зменныя асяроддзя, ці запісвае па-за часовым каталогам і ці паведамляе якая-небудзь галіна пра паспяховы стан, нічога не вымяраючы. Апошні шаблон — гэта абыход палітыкі з далучаным радком журнала. Скапіяваныя вокладкі схільныя працягваць яго за праўдападобнай праверкай. Калі скрыпт вырашае, што прылада ў парадку, яшчэ не зірнуўшы на прыладу, спыніцеся там.
Праверце таксама спакаваныя нагрузкі, бо чытэльны загаловак нічога не даказвае пра астатнюю частку файла. Спампоўка скрыпта з форумнай тэмы не робіць яго надзейным толькі таму, што яго назва паўтарае сапраўдны кампанент праверкі хоста. Запішыце, хто яго ўсталяваў, адкуль ён прыйшоў і як ён будзе абнаўляцца.
grep -nE 'base64 -d|xxd -r|eval |curl |wget ' ./vpn-csd-wrapper.shКрок 3: Выберыце ідэнтычнасць, ад імя якой працуе вокладка
--csd-user зніжае прывілеі, пакуль выконваецца праграма CSD, TNCC або HIP. Гэты ўліковы запіс — частка лакальнай схемы выканання, а не імя карыстальніка, якое падаецца шлюзу.
Дайце вокладцы асобны ўліковы запіс без інтэрактыўнай абалонкі, без правоў sudo і без удзелу ў групах, якія ёй не патрэбныя. Дайце доступ на чытанне да скрыпта і да канкрэтных файлаў, якія ён правярае, затым праверце зніжэнне прывілеяў, перш чым чапаць профіль VPN. Знайсці праблему тут танней, чым знайсці яе ўнутры кліента.
sudo -u vpn-csd /usr/local/libexec/vpn-csd-wrapper.shЗніжэнне прывілеяў абмяжоўвае шкоду, якую можа нанесці дрэнны скрыпт. Яно не правярае код, не робіць справаздачу праўдзівай і не ўстанаўлівае, што адміністратар шлюза прымае гэтую рэалізацыю як адпаведную палітыцы прылад.
Крок 4: Захавайце змену зваротнай
Зрабіце рэзервовую копію профілю перад рэдагаваннем і трымайце вокладку пад кантролем версій, каб адкат аднаўляў вядомы хэш, а не шукаў копію. Запішыце шлях да скрыпта, хэш, карыстальніка выканання і зацвярджальніка ў адным месцы.
Каб адкаціць, выдаліце опцыю, перазапусціце кліента і пацвердзіце, што першапачатковая памылка вярнулася. Калі шлюз пасля адкату ўсё яшчэ адхіляе ўваход, значыць, змянілася яшчэ нешта, і пошук гэтай розніцы папярэднічае паўторнай спробе з вокладкай. Трымайце папярэднюю копію ўвесь час акна змен, што для большасці каманд азначае да праходжання наступнага акна абслугоўвання.
Пасля паспяховага разгортвання праверце дзве рэчы, а не адну: тунель узнімаецца, і прылада, якая павінна праваліць праверку стану, па-ранейшаму адхіляецца. Злучэнне, якое працуе для ўсіх, не з’яўляецца доказам таго, што ацэнка перажыла вашу змену.
Хуткія шляхі, якія ствараюць другую праблему
Не дазваляйце памочніку паведамляць пра адпаведны стан без запуску патрабаваных праворак і не падмяняйце ідэнтычнасць платформы, каб яна супала з іншай аперацыйнай сістэмай. Заява пра іншую платформу не з’яўляецца доказам таго, што рэальная прылада адпавядае палітыцы. Гэта пакідае вас з кліентам, які хлусіць пры кожным будучым уваходзе.
Адключэнне праверкі сервера, паўтор старонняй кукі і накладанне неправераных скрыптоў — усё гэта абменьвае бачную няўдачу на нябачную. Калі ўсталяваны кліент не можа завяршыць падтрыманы паток, папрасіце зацверджаную альтэрнатыву замест таго, каб выкручваць наяўную.
Дапаможнік OpenConnect апісвае --csd-wrapper і --csd-user асобна, і гэта і ёсць важная падказка: скрыпт і ідэнтычнасць — два розныя рашэнні. Разгледзьце іх асобна і запішыце абодва. Тады запыт уваходу перастае быць загадкай, якую вы развязваеце ўстаўкай кода.