Рукапаціск, які сканчаецца памылкай, здаецца атакай, пакуль не паглядзіш на паведамленне, і часцей за ўсё гэта арыфметыка: няма супольнай прапановы, скончыўся тэрмін дзеяння сертыфіката або пакет так і не прыйшоў. Атака зніжэння — гэта канкрэтная рэч: супернік штурхае абодва бакі да больш слабых паводзін, чым яны абралі б, і пакідае іншыя сведчанні. Калі ўспрымаць кожную няўдачу як злую волю, ты шукаеш ахвяру, якой можа і не быць, а калі лічыць сапраўднае зніжэнне памылкай канфігурацыі, слабы вынік застаецца на месцы. Гэтыя дзве памылкі каштуюць па-рознаму, і толькі адна з іх танна выпраўляецца.

Што насамрэч змяняе атака зніжэння

Мэта не ў тым, каб узламаць шыфр, і не ў тым, каб угадаць ключ. Мэта — паўплываць на перамовы так, каб абодва бакі спыніліся на старэйшай версіі або слабейшым алгарытме, з якім супернік зладзіць, або каб адзін бок паверыў, што другі падтрымлівае толькі гэта.

Змяняецца дамова, а не аўтэнтыфікацыя. Калі супернік можа змяніць прапанову незаўважна, бакі ўсё роўна могуць завяршыць рукапаціск і ўсё роўна аўтэнтыфікаваць адзін аднаго, але з параметрамі, якія падабаюцца суперніку. Таму цікавае пытанне — ці ахоплены самі перамовы абаронай цэласнасці.

Чаму самі перамовы павінны быць аўтэнтыфікаваны

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

Параўнайце вынік з канфігурацыяй, якую вы мелі на ўвазе, а не з тым, што зараз падключаецца. Калі абраная версія старэйшая за дазволены мінімум, шукаць трэба ў профілі або спісе адкату, і адказ — выправіць гэты спіс, а не абвясціць атаку і перабудаваць усё вакол.

Падобныя артыкулы