Да ли је неуспело VPN руковање заиста напад уназађења?
Напади уназађења постоје, али већина неуспелих руковања је неслагање предлога, лоша рута или истекао профил. Прво проверите шта је договорено.
Руковање које се заврши грешком изгледа као напад док не погледате поруку, и најчешће је то аритметика: нема заједничког предлога, сертификат је истекао или пакет никада није стигао. Напад уназађења је нешто конкретно: противник гура обе стране ка слабијем понашању него што би изабрале, и оставља другачије доказе. Ако сваки неуспех третирате као злу намеру, тражите жртву која можда не постоји, а ако прави уназађење третирате као грешку у конфигурацији, слабији резултат остаје на месту. Те две грешке коштају различито, а само једна је јефтина за исправку.
Шта напад уназађења заправо мења
Циљ није да се разбије шифра ни да се погоди кључ. Циљ је да се утиче на преговоре тако да обе стране стану на старију верзију или слабији алгоритам са којим нападач може да изађе на крај, или да једна страна поверује да друга подржава само то.
Мења се договор, не аутентикација. Ако нападач може да измени понуду без откривања, стране и даље могу да заврше руковање и даље да се међусобно аутентификују, али са параметрима које нападач преферира. Зато је занимљиво питање да ли су сами преговори покривени заштитом интегритета.
Зашто сами преговори морају да буду аутентификовани
TLS 1.3 ту заштиту чини експлицитном. Клијент који је понудио новију верзију може да открије сервер који се тихо повукао, јер случајна вредност сервера носи фиксни образац када преговара о 1.2 или нижој, а клијент је дужан да прекине када то види. Цео транскрипт је такође покривен завршним порукама, па измена било где у преговорима пада касније, уместо да прође тихо.
Старије верзије протокола имале су слабије приче, и управо зато правила враћања имају тежину. Крајња тачка са TLS 1.0 у истој конфигурацији није напад уназађења; то је дозвољени исход који сте сами одлучили да дозволите. Разлика је у томе да ли је слабији резултат дошао из заштићене одлуке или из незаштићене путање на коју је посредник могао да утиче. Кад то тако формулишете, већина инцидената се своди на питање конфигурације.
IKEv2 се понаша другачије, али почива на истој идеји. Предлог се преноси у размени која касније аутентификује обе стране, па посредни уређај који преписује алгоритме квари аутентикацију уместо да је усмерава. Контролни канал OpenVPN-а штити своје преговоре помоћу TLS-а и затим тај канал користи за договор о шифрама податковног канала, зато је занимљива управо линија дневника контролног канала.
Конфигурисана компатибилност није напад
Администратор може намерно да дозволи старије изборе да подржи документованог клијента, а та одлука је видљива у конфигурацији. Нападач не може да створи такву конфигурацију; може само да искористи путању која му дозвољава да утиче на понуду.
Опасна поправка је она која уклања доказ разлике. Укључивање сваке старе опције, искључивање провере сертификата или прихватање било које шифре да би грешка нестала шири оно на шта ће крајња тачка пристати, и уклања провере које би пријавиле слабији резултат.
Ако морате да задржите једну стару опцију, наведите разлог и клијента у коментару конфигурације, па ограничите опцију на профил који јој је потребан. Изузетак за компатибилност ограничен на један слушалац је проверљив; онај примењен глобално је само слабији подразумевани избор који се нико не сећа да је изабрао.
Прочитајте неуспех пре него што именујете узрок
Сачувајте тачан низ грешке, верзије клијента и сервера и време пре било какве промене. Затим класификујте: да ли су се стране разишле око предлога, да ли је путања пакета заказала или је једна страна одбила параметар који је некад прихватала?
Неслагање предлога обично именује проблематичне верзије или алгоритме и пада на истој тачки сваки пут. Проблем са рутирањем или MTU-ом застаје или истиче, и често варира са мрежом. Истекао сертификат даје грешку провере, а не грешку преговора.
Ништа од тога није доказ нападача. Додела злонамерног узрока при првом неуспеху је грешка, јер скрива детерминистичку грешку која ће сутра поново пасти.
Потврдите шта је заиста изабрано
Након сваке исправке прочитајте договорени резултат уместо да верујете да се веза подигла. Веза која успе зато што је провера уклоњена је исход који сте покушавали да избегнете. Две команде испод показују изабрану верзију и шифру за крајњу тачку са TLS-ом, плус линију контролног канала из дневника сервера OpenVPN.
openssl s_client -connect 198.51.100.30:443 -servername vpn.example.net -brief </dev/null
grep -iE 'Control Channel|Data Channel' /var/log/openvpn.log | tail -5Упоредите резултат са конфигурацијом коју сте намеравали, а не са оним што се сада повезује. Ако је изабрана верзија старија од дозвољеног минимума, профил или листа враћања су место за тражење, а одговор је поправити ту листу, а не прогласити напад и обновити све око њега.