Наистина ли неуспешният 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Сравнете резултата с конфигурацията, която сте имали предвид, а не с това, което се свързва сега. Ако избраната версия е по-стара от разрешения минимум, профилът или списъкът за отстъпване са мястото за търсене и отговорът е да поправите този списък, вместо да обявите атака и да престроите всичко около нея.