V poslednej dobe si WireGuard získava veľkú pozornosť, v podstate je to nová "hviezda" medzi VPN. Ale je naozaj taký dobrý, ako sa zdá? Rád by som prediskutoval niektoré pozorovania a preskúmal implementáciu WireGuard, aby som vysvetlil, prečo to nie je riešenie, ktoré by nahradilo IPsec alebo OpenVPN.
V tomto článku by som chcel vyvrátiť niektoré mýty [okolo WireGuard]. Áno, budete musieť čítať dlhšie, takže ak ste si ešte neuvarili šálku čaju alebo kávy, teraz je ten správny čas. Takisto by som chcel poďakovať Petrovi za korektúru mojich chaotických myšlienok.
Nemám v úmysle zdiskreditovať vývojárov WireGuard, znehodnocovať ich úsilie alebo nápady. Ich produkt je funkčný, ale osobne si myslím, že je prezentovaný úplne inak, než v skutočnosti je — je prezentovaný ako náhrada IPsec a OpenVPN, ktorá v súčasnosti jednoducho neexistuje.
Ako poznámku treba dodať, že zodpovednosť za takéto pozicionovanie WireGuard nesú médiá, ktoré o ňom informovali, a nie samotný projekt alebo jeho tvorcovia.
V poslednej dobe sa na tému jadra Linuxu neobjavilo veľa dobrých správ. Takže nám oznámili o hrozných zraniteľnostiach procesora, ktoré boli odstránené prostredníctvom softvérových riešení, a Linus Torvalds o tom hovoril príliš hrubo a nudne, utilitárnym jazykom developerov. Plánovač alebo sieťový zásobník nulovej úrovne – to tiež nie sú témy, ktoré by sa dali ľahko spracovať v lesklých časopisoch. A tu sa objavuje WireGuard.
Na papieri to všetko znie skvele: fascinujúca nová technológia.
Ale poďme sa naň pozrieť bližšie.
Technická dokumentácia WireGuard
Tento článok je založený na oficiálnej dokumentácii WireGuard, ktorú napísal Jason Donenfeld. Tam vysvetľuje koncept, cieľ a technickú implementáciu [WireGuard] v jadre Linuxu.
Prvá veta znie:
WireGuard […] sa usiluje nahradiť IPsec v väčšine z jeho použití, ako aj iné populárne riešenia na báze užívateľského priestoru a/alebo TLS, ako je OpenVPN, pričom je bezpečnejší, výkonnejší a jednoduchší na používanie [nástroj].
Určite, hlavná výhoda všetkých nových technológií je ich jednoduchosť [v porovnaní s predchodcami]. Ale VPN by mal byť tiež efektívne a bezpečné.
A čo ďalej?
Ak poviete, že od [VPN] potrebujete niečo iné, môžete prestať čítať. Môžem však poznamenať, že takéto úlohy sú kladené pred každú inú technológiu tunelovania.
Najzaujímavejšie na citáte vyššie spočíva v slovách „v drvivej väčšine prípadov“, ktoré, samozrejme, média ignorovali. A tak sme tam, kde sme sa ocitli vďaka chaosu spôsobenému touto nedbalosťou — v tomto článku.

Bude WireGuard náhradou za moju [IPsec] VPN-štruktúru medzi stránkami?
Nie. Nie je tu žiadna šanca, že veľkí dodávatelia, ako Cisco, Juniper a iní, integrujú WireGuard do svojich produktov. Neskáču do prechádzajúcich vlakov, ak na to nie je veľká potreba. Neskôr poviem niektoré dôvody, prečo pravdepodobne nebudú schopní integrovať WireGuard do svojich produktov, aj keby chceli.
Prenesie WireGuard mojich RoadWarrior z notebooku do dátového centra?
Nie. V súčasnosti WireGuard neimplementuje množstvo dôležitých funkcií, aby mohol robiť niečo podobné. Napríklad nemôže používať dynamické IP adresy na strane servera tunela, a to už narúša celý scenár takéhoto použitia produktu.
IPFire sa často používa pre lacné internetové pripojenia, napríklad pre DSL alebo káblové pripojenie. Má to zmysel pre malý alebo stredný podnik, ktorý nepotrebuje rýchlu optiku. [Poznámka od prekladateľa: nezabúdajte, že z hľadiska konektivity sú Rusko a niektoré krajiny SNS vpred pred Európou a USA, pretože sme začali budovať naše siete oveľa neskôr a s príchodom Ethernetu a optických sietí ako štandardu, bolo pre nás jednoduchšie prestavať sa. V týchto krajinách EÚ alebo USA je xDSL širokopásmové pripojenie rýchlosťou 3-5 Mbit/s — stále všeobecná norma, a optické pripojenie stojí nejaké nerealizovateľne vysoké sumy v našich meradlách. Preto autor článku hovorí o DSL alebo káblovom pripojení ako o norme, a nie o zastaranej technológii.] Avšak DSL, káblové, LTE (a iné bezdrôtové prístupy) majú dynamické IP adresy. Samozrejme, občas sa nemenia často, ale predsa sa menia.
Existuje podprojekt s názvom „wg-dynamic“, ktorý pridáva demonštráciu používateľského priestoru na prekonanie tejto nevýhody. Obrovský problém používateľského scenára, ktorý bol popísaný vyššie, spočíva v zhoršení situácie dynamickou IPv6 adresáciou.
Z pohľadu distribútora to tiež nevypadá veľmi dobre. Jedným z cieľov vývoja bolo zachovať jednoduchosť a čistotu protokolu.
Žiaľ, to všetko sa v skutočnosti stalo príliš jednoduchým a primitívnym, takže musíme používať ďalší softvér, aby bola celá táto konštrukcia životaschopná v reálnych prevádzkových podmienkach.
Je WireGuard naozaj tak jednoduchý na používanie?
Zatiaľ nie. Nepovedal by som, že WireGuard nikdy nebude dobrou alternatívou na prepojenie tunela medzi dvoma bodmi, ale zatiaľ je len alfa verzia produktu, ktorým by sa mal stať.
Ale čo teda naozaj robí? Je IPsec naozaj tak zložitý na prevádzku?
Odpoveď je jasná. Poskytovateľ IPsec sa s týmto aspektom zaoberal a dodáva svoj produkt s rozhraním, ako napríklad IPFire.
Na nastavenie VPN tunela prostredníctvom IPsec budete potrebovať päť súborov údajov, ktoré je potrebné uviesť do konfigurácie: vaša vlastná verejná IP adresa, verejná IP adresa prijímajúcej strany, podsiete, ktoré chcete sprístupniť prostredníctvom tohto VPN pripojenia, a pre-shared kľúč. Takto sa VPN nastaví za niekoľko minút a je kompatibilná s akýmkoľvek dodávateľom.
Žiaľ, v tomto prípade existuje niekoľko výnimiek. Každý, kto sa snažil nastaviť VPN tunel prostredníctvom IPsec na stroji s OpenBSD, vie, o čom hovorím. Existuje ešte niekoľko bolestivých príkladov, ale v skutočnosti je pozitívnych skúseností s používaním IPsec oveľa viac.
O zložitosti protokolu
Konečný užívateľ by sa nemal obávať o zložitosti protokolu.
Keby sme žili vo svete, kde to bola skutočná starosť používateľov, dávno by sme sa zbavili SIP, H.323, FTP a iných protokolov, ktoré boli vytvorené pred viac ako desiatimi rokmi a zle fungujú s NAT.
Existujú dôvody, prečo je IPsec zložitější než WireGuard: robí omnoho viac vecí. Napríklad autentifikácia používateľa pomocou prihlasovacieho mena/hesla alebo SIM karty s EAP. Má rozšírené možnosti pridávania nových kryptografických primitívov.
A WireGuard to nemá.
A to znamená, že WireGuard sa v nejakom okamihu rozpadne, pretože jeden z kryptografických primitívov oslabí alebo bude úplne skompromitovaný. Autor technickej dokumentácie to hovorí takto:
Je potrebné poznamenať, že WireGuard je kryptograficky samostatný. Úmyselne mu chýba flexibilita šifrovaní a protokolov. Ak sa v základných primitívoch objavia závažné chyby, všetky koncové body je potrebné aktualizovať. Ako je vidieť z neustáleho prúdu zraniteľností SLL/TLS, flexibilita šifrovania sa v súčasnosti enormne zvýšila.
Posledná veta je úplne pravdivá.
Dosiahnutie konsenzu o tom, aké šifrovanie použiť, robí protokoly typu IKE a TLS náročnejšími . Príliš náročnými? Áno, vo TLS/SSL sa zraniteľnosti vyskytujú celkom často, a alternatívy k nim niet.
O ignorovaní skutočných problémov
Predstavte si, že máte VPN server s 200 aktívnymi klientmi, niekde po celom svete. Toto je celkom bežný scenár použitia. Ak budete musieť zmeniť šifrovanie, musíte poslať aktualizáciu na všetky kópie WireGuard na týchto prenosných počítačoch, smartfónoch a tak ďalej. Zároveň dodať. To je doslova nemožné. Správcovia, ktorí sa o to pokúsia, budú potrebovať mesiace na nasadenie potrebných konfigurácií, a priemerným firmám to doslova potrvá roky na vykonanie takéhoto podujatia.
IPsec a OpenVPN ponúkajú funkciu dohodovania šifrovaní. Preto určitý čas, po ktorom zapnete nové šifrovanie, bude fungovať aj staré. Vďaka tomu aktuálni klienti môžu prejsť na novú verziu. Po tom, ako bude aktualizácia rozšírená, jednoducho vypnete zraniteľné šifrovanie. A hotovo! Ste úžasní! A klienti si toho ani nevšimnú.
V skutočnosti je to veľmi bežný prípad pre veľké nasadenia, a dokonca aj OpenVPN s tým má určité ťažkosti. Spätná kompatibilita je dôležitá, a aj keď používate slabšie šifrovanie, pre mnohých to nie je dôvod na uzatvorenie podnikania. Pretože to povedie k paralyzovaniu práce stoviek klientov kvôli neschopnosti vykonávať svoju prácu.
Tím WireGuard zjednodušil svoj protokol, ale úplne ho urobil nevhodným pre ľudí, ktorí nemajú trvalú kontrolu nad oboma peermi svojho tunela. Podľa mojich skúseností je tento scenár najbežnejší.

Kryptografia!
Ale čo je to za zaujímavé nové šifrovanie, ktoré používa WireGuard?
WireGuard používa Curve25519 na výmenu kľúčov, ChaCha20 na šifrovanie a Poly1305 na autentifikáciu údajov. Taktiež pracuje so SipHash pre hashovacie kľúče a BLAKE2 na hashovanie.
ChaCha20-Poly1305 je štandardizovaný pre IPsec a OpenVPN (cez TLS).
Je jasné, že vývoj Daniela Bernstein sa veľmi často používa. BLAKE2 je nástupcom BLAKE, finalistu SHA-3, ktorý nevyhral kvôli svojej podobnosti so SHA-2. Ak by bol SHA-2 napadnutý, existovalo by veľké riziko, že aj BLAKE by bol skompromitovaný.
IPsec a OpenVPN nepotrebujú SipHash kvôli ich dizajnu. Takže jediné, čo sa v súčasnosti nemôže používať s nimi, je BLAKE2, a to len pokiaľ nebude štandardizovaný. To nie je veľká nevýhoda, pretože VPN používajú HMAC na zabezpečenie integrity, ktorá je považovaná za silné riešenie aj v kombinácii s MD5.
Tak som dospel k záveru, že takmer všetky VPN používajú prakticky rovnakú sadu kryptografických nástrojov. Preto WireGuard nie je ani bezpečnejší, ani menej bezpečný ako akékoľvek iné aktuálne produkty, pokiaľ ide o šifrovanie alebo integritu prenášaných údajov.
Ale ani to nie je najdôležitejšie, čo by sa malo zdôrazniť podľa oficiálnej dokumentácie projektu. Hlavné je rýchlosť.
Je WireGuard rýchlejší ako iné VPN riešenia?
Stručne povedané: nie, nie je rýchlejší.
ChaCha20 je prúdový šifrovač, ktorý je jednoduchšie implementovať do softvéru. Šifruje jeden bit za raz. Blokové protokoly, ako AES, šifrujú blok po 128 bitoch za raz. Pre implementáciu hardvérovej podpory by bolo potrebné oveľa viac tranzistorov, preto sa väčšie procesory dodávajú s AES-NI — rozšírením množiny inštrukcií, ktoré vykonáva niektoré úlohy šifrovacieho procesu na jeho zrýchlenie.
Očakávalo sa, že AES-NI sa nikdy nedostane do smartfónov [a predsa sa dostal, pozn. prekl.]. Na to bol vyvinutý ChaCha20 ako ľahká a úsporná alternatíva, šetriaca batériu. Preto môže byť pre vás prekvapením, že každý smartfón, ktorý si dnes môžete zakúpiť, má nejaké urýchlenie pre AES a pracuje s týmto šifrovaním rýchlejšie a s menšou spotrebou energie než s ChaCha20.
Je jasné, že takmer každý procesor pre desktopy / servery zakúpený v posledných pár rokoch má AES-NI.
Preto očakávam, že AES predčí ChaCha20 v každom jednotlivom scenári. V oficiálnej dokumentácii WireGuard sa spomína, že vďaka AVX512 bude ChaCha20-Poly1305 predbehnúť AES-NI, ale táto rozšírená sada príkazov bude dostupná iba na výkonnejších procesoroch, čo opäť neprospeje menšiemu a mobilnému vybaveniu, ktoré vždy pracuje rýchlejšie s AES-NI.
Nie som si istý, či to bolo možné predvídať pri vývoji WireGuard, ale dnes je fakt, že je pripútaný k jednému šifrovaniu — už nedostatkom, ktorý môže mať negatívny dopad na jeho výkon.
IPsec umožňuje voľbu šifrovania, ktoré najlepšie vyhovuje vášmu prípadu. A pochopiteľne, je to nevyhnutné, ak napríklad chcete preniesť 10 a viac gigabajtov dát cez VPN pripojenie.
Problémy s integráciou v Linuxe
Aj keď WireGuard zvolil moderný šifrovací protokol, to už spôsobuje množstvo problémov. A namiesto toho, aby sa použilo to, čo je podporované jadrom z krabice, bola integrácia WireGuard odkladaná roky kvôli nedostatku týchto primitívov v Linuxe.
Nie som úplne informovaný o situácii v iných operačných systémoch, ale pravdepodobne to nie je veľmi odlišné od situácie v Linuxe.
Aká je realita?
Žiaľ, zakaždým, keď ma klient požiada, aby som mu nastavil VPN pripojenie, stretávam sa s témou, že používajú zastarané prihlasovacie údaje a šifrovanie. 3DES v kombinácii s MD5 — stále rozšírená prax, rovnako ako AES-256 a SHA1. A hoci ten posledný je trocha lepší — nie je to niečo, čím by ste sa mali zaoberať v roku 2020.
Na výmenu kľúčov vždy sa používa RSA — pomalý, ale dostatočne bezpečný nástroj.
Moji klienti sú spojení s colnými orgánmi a inými štátnymi inštitúciami, ako aj s veľkými korporáciami, ktorých názvy sú známe po celom svete. Všetci používajú formulár žiadosti, ktorý bol vytvorený pred desaťročiami, a možnosť používania SHA-512 jednoducho nikdy nebola pridaná. Nemôžem povedať, že by to nejako výrazne ovplyvnilo technologický pokrok, ale je zjavné, že to spomaluje korporátne procesy.
Bolí ma to vidieť, pretože IPsec podporuje eliptické krivky od roku 2005. Curve25519 je tiež novšia a dostupná na použitie. Existujú aj alternatívy k AES, ako Camellia a ChaCha20, ale zjavne nie všetky z nich sú podporované veľkými poskytovateľmi, ako Cisco a inými.
A ľudia to používajú. Existuje veľa súprav Cisco, existuje množstvo súprav vytvorených na prácu s Cisco. Sú lídrami na trhu v tomto segmente a veľmi sa nezaujímajú o akékoľvek inovácie.
Áno, situácia [v korporátnom segmente] je hrozná, ale neuvidíme žiadne zmeny kvôli WireGuard. Výrobcovia pravdepodobne nikdy neodhalia žiadne problémy s výkonom už používaného nástroja a šifrovania, neuvidia problémy pri použití IKEv2 — a preto nehľadajú alternatívy.
Vlastne, niekedy ste uvažovali o odchode od Cisco?
Benchmarky
A teraz prejdime na benchmarky z dokumentácie WireGuard. Hoci táto [dokumentácia] nie je vedeckou štúdiou, stále som očakával od vývojárov vedeckejší prístup alebo použitie vedeckého prístupu ako referenciu. Akékoľvek benchmarky sú zbytočné, ak nie sú reprodukovateľné, a sú ešte viac nepoužiteľné, keď sú získané v laboratórnych podmienkach.
Vo verzii WireGuard pre Linux získa výhodu používaním GSO — Generic Segmentation Offloading. Vďaka nemu klient vytvára obrovský paket s veľkosťou 64 kilobajtov a šifruje/dešifruje ho na jeden prístup. Týmto spôsobom sa náklady na volania a realizáciu kryptografických operácií znižujú. Ak chcete maximalizovať priepustnosť svojho VPN pripojenia — je to dobrý nápad.
Ale, ako to býva, v skutočnosti nie je všetko také jednoduché. Odoslanie tak veľkého balíka na sieťový adaptér si vyžaduje, aby bol rozdelený na množstvo menších balíkov. Bežná veľkosť odosielania je 1500 bajtov. To znamená, že náš gigant s veľkosťou 64 kilobajtov bude rozdelený na 45 balíkov (1240 bajtov informácií a 20 bajtov IP hlavičky). Potom na určitý čas úplne zablokujú činnosť sieťového adaptéru, pretože musia byť odoslané spolu a okamžite. Nakoniec to povedie k skoku v prioritách a také balíky, ako napríklad VoIP, budú čakať v rade.
Takže, vysoká priepustnosť, o ktorej tak smelo tvrdí WireGuard, je dosiahnutá za cenu spomalenia siete pre ostatné aplikácie. A tím WireGuard už potvrdil toto moje zistenie.
Ale poďme ďalej.
Podľa benchmarkov v technickej dokumentácii ukazuje pripojenie priepustnosť 1011 Mbit/s.
Impozantné.
Zvlášť to ohromuje, pretože maximálna teoretická priepustnosť jedného gigabitového Ethernet pripojenia je 966 Mbit/s pri veľkosti balíka 1500 bajtov mínus 20 bajtov na IP hlavičku, 8 bajtov na UDP hlavičku a 16 bajtov na hlavičku samotného WireGuard. Je tam ešte jedna IP hlavička v enkapsulovanom balíku a ďalšia - v TCP s 20 bajtmi. Tak odkiaľ sa vzala táto dodatočná priepustnosť?
S obrovskými rámcami a výhodami GSO, o ktorých sme hovorili vyššie, bude teoretický maximálny limit pri veľkosti rámca 9000 bajtov rovný 1014 Mbit/s. Zvyčajne je taká priepustnosť v praxi nedosiahnuteľná, pretože je spojená s veľkými ťažkosťami. Takže môžem len predpokladať, že test bol vykonaný s použitím ešte tučnejších rámcov s presahom veľkosti 64 kilobajtov s teoretickým maximom 1023 Mbit/s, ktoré podporujú iba niektoré sieťové adaptéry. Ale to je úplne nevhodné v reálnych podmienkach, alebo môže byť použité len medzi dvoma priamo prepojenými stanicami, výhradne v rámci testovacieho prostredia.
Keďže VPN tunel je prenášaný medzi dvoma hostiteľmi cez internetové pripojenie, ktoré vôbec nepodporuje veľké rámce, dosiahnutý výsledok na skúšobnej stanici nemôže byť považovaný za štandard. Je to len nereálny laboratórny úspech, ktorý nie je možné a nie je aplikovateľný v reálnych podmienkach.
Ani keď som sedel v dátovom centre, nedokázal by som prenášať rámce väčšie ako 9000 bajtov.
Kritérium aplikovateľnosti v reálnom živote je absolútne porušené a, ako si myslím, autor uskutočneného „merania“ vážne diskreditoval sám seba z horľavých dôvodov.

Posledný záblesk nádeje
Na stránke WireGuard sa veľa diskutuje o kontajneroch a je jasné, na čo je v skutočnosti určený.
Jednoduchý a rýchly VPN, ktorý nevyžaduje konfiguráciu a môže byť nasadený a nastavený masívnymi nástrojmi na orchestráciu, ako napríklad v cloude Amazonu. Konkrétne Amazon využíva najnovšie hardvérové funkcie, o ktorých som hovoril skôr, napríklad AVX512. Robí sa to s cieľom urýchliť činnosť a neviazať sa na x86 alebo akúkoľvek inú architektúru.
Optimalizujú priepustnosť a pakety, ktorých veľkosť presahuje 9000 bajtov — vytvorí to obrovské inkapsulované rámce na komunikáciu medzi kontajnermi, alebo pre zálohovanie, tvorbu snímok alebo nasadenie týchto kontajnerov. Dokonca ani dynamické IP adresy nemajú žiadny vplyv na fungovanie WireGuard v prípade uvedeného scenára.
Dobre zahrané. Žiarivá implementácia a veľmi jemný, takmer štandardný protokol.
Ale jednoducho nie je vhodný pre svet vonku z úplne kontrolovaného dátového centra. Ak sa odvážite a začnete používať WireGuard, budete musieť prijímať neustále kompromisy pri vývoji a implementácii šifrovacieho protokolu.
Záver
Nemám problém urobiť záver, že WireGuard zatiaľ nie je pripravený.
Bol navrhnutý ako zjednodušené a rýchle riešenie niektorých problémov existujúcich riešení. Žiaľ, kvôli týmto riešeniam obetoval množstvo funkcií, ktoré budú relevantné pre väčšinu používateľov. Preto nemôže nahradiť IPsec alebo OpenVPN.
Aby sa WireGuard stal konkurencieschopným, potrebuje pridať aspoň nastavenie IP adresy a konfiguráciu smerovania a DNS. Zjavne sú práve na to potrebné šifrované kanály.
Bezpečnosť je mojím hlavným prioritným cieľom a momentálne nemám dôvod domnievať sa, že IKE alebo TLS sú akýmkoľvek spôsobom ohrozené alebo porušené. Moderné šifrovanie je podporované oboma a bolo testované desaťročia prevádzky. Nie každý nový systém znamená, že je lepší.
Funkčná kompatibilita je veľmi dôležitá, keď sa spojíte s treťou stranou, ktorých stanice nemáte pod kontrolou. IPsec je de facto štandard a je podporovaný takmer všade. A funguje. A aj keď to môže znieť teoreticky, WireGuard môže byť v budúcnosti nekompatibilný aj s rôznymi verziami samého seba.
Akákoľvek kryptografická ochrana je skôr či neskôr prelomená a podľa toho by mala byť nahradená alebo aktualizovaná.
Popieranie všetkých týchto faktov a slepé túženie po použití WireGuard na pripojenie vášho iPhonu k domácej pracovnej stanici je doslova majstrovské dielo strkania hlavy do piesku.
Zdroj: habr.com
