Zakaj ne bi smeli uporabljati WireGuard

V zadnjem času WireGuard pritegne veliko pozornosti; v bistvu - to je nova 'zvezda' med VPN. Ampak, ali je res tako dober, kot se zdi? Rad bi razpravljal o nekaterih opažanjih in preučil implementacijo WireGuard, da povem, zakaj ni rešitev, ki bi zamenjala IPsec ali OpenVPN.

V tem članku bi rad ovrgel nekatere mite [okoli WireGuard]. Da, branje bo dolgo, zato, če si še niste skuhali skodelice čaja ali kave, je zdaj pravi čas. Hvala tudi Peterju za lekturo mojih neurejenih misli.

Ne postavljam si cilja diskreditirati razvijalce WireGuard, devalvirati njihovo delo ali ideje. Njihov izdelek je delujoč, a osebno menim, da je predstavljen povsem drugače, kot je v resnici - predstavljen kot zamenjava za IPsec in OpenVPN, ki v resnici trenutno sploh ne obstaja.

Kot opombo naj dodam, da odgovornost za tovrstno pozicioniranje WireGuard nosijo mediji, ki so o njem poročali, ne pa sam projekt ali njegovi ustvarjalci.

V zadnjem času na temo jedra Linux ni bilo preveč dobrih novic. Tako so nam povedali o grozljivih ranljivostih procesorja, ki so jih odpravljali programsko, Linus Torvalds pa je o tem govoril preveč grobo in dolgočasno, v utilitarističnem jeziku razvijalca. Načrtovalnik ali omrežni sklad nulte ravni - tudi nista preveč razumljivi temi za sijajne revije. In tu se pojavi WireGuard.

Na papirju vse zveni odlično: osupljiva nova tehnologija.

Ampak poglejmo jo malo bolj podrobno.

Tehnično dokumentacijo WireGuard

Ovaj članak se zasniva na uradne dokumentacije WireGuard, ki jo je napisal Jason Donenfeld. Tam pojasnjuje koncept, namen in tehnično implementacijo [WireGuard] v jedru Linux.

Prva poved pravi:

WireGuard […] si prizadeva zamenjati IPsec v večini njegovih uporabnih primerov, prav tako pa tudi druga priljubljena rešitev na osnovi uporabniškega prostora in/ali TLS, kot je OpenVPN, pri čemer je bolj varen, zmogljiv in enostaven za uporabo [sredstvo].

Seveda je glavna prednost vseh novih tehnologij njihova enostavnost [v primerjavi s predhodniki]. Ampak VPN mora biti tudi učinkovit in varen.

In kaj potem?

Če rečete, da potrebujete [od VPN] nekaj drugega, lahko s tem branje končamo. Vendar pa bom omenil, da so takšne naloge postavljene pred katerokoli drugo tehnologijo tuneliranja.

Najbolj zanimiv del citata zgoraj je v besedah 'v večini primerov', ki so jih seveda mediji prezrli. In tako smo tam, kjer smo zaradi te malomarnosti - v tem članku.

Zakaj ne bi smeli uporabljati WireGuard

B bo WireGuard nadomestil mojo [IPsec] VPN povezavo med spletnimi mesti?

Ne. Tukaj ni možnosti, da bi veliki prodajalci, kot so Cisco, Juniper in drugi, v svoje izdelke vključili WireGuard. Ne 'skačejo na priložne vlake', če za to ni velike potrebe. Kasneje bom povedal nekaj razlogov, zakaj verjetno ne bodo mogli vključiti WireGuard v svoje izdelke, tudi če bi želeli.

Ali bo WireGuard prenesel moj RoadWarrior z prenosnika v podatkovni center?

Ne. Trenutno WireGuard nima vgrajenih številnih pomembnih funkcij, da bi lahko to storil. Na primer, ne more uporabiti dinamičnih IP naslovov na strani strežnika tunela, in že samo to zlomi celoten scenarij uporabe tega izdelka.

IPFire se pogosto uporablja za poceni internetne povezave, na primer, za DSL ali kablovske povezave. To ima smisel za mala ali srednje velika podjetja, ki ne potrebujejo hitrega optičnega vlakna. [Opomba prevajalca: ne pozabite, da je Rusija in nekatere države SND v zvezi s povezljivostjo daleč pred Evropo in ZDA, ker smo začeli graditi svoje omrežja veliko kasneje in ob prihodu Ethernet ter optičnih vlaknenih omrežij kot standarda, smo se lažje prilagodili. V istih državah EU ali ZDA je xDSL širokopasovni dostop pri hitrosti 3-5 Mbit/s - še vedno splošna norma, medtem ko povezava z optičnim vlaknom stane nerealne denarje po naših merilih. Zato avtor članka govori o DSL ali kablovski povezavi kot o normi in ne kot o zastarelem. ] Vendar pa DSL, kablovske, LTE (in druge brezžične metode dostopa) vključujejo dinamične IP naslove. Seveda se ti občasno ne spreminjajo pogosto, vendar se še vedno spreminjajo.

Obstaja podprojekt z imenom «wg-dynamic», ki dodaja prikaz uporabniškega prostora za premagovanje te pomanjkljivosti. Ogromna težava uporabniškega scenarija, opisanega zgoraj, je poslabšanje situacije z dinamičnim dodeljevanjem IPv6 naslovov.

Z vidika distributerja to vse skupaj ne izgleda najbolje. Eden od ciljev razvoja je bil ohraniti preprostost in čistost protokola.

Na žalost je vse to postalo preveč preprosto in primitivno, tako da moramo za delovanje te konstrukcije uporabiti dodatno programsko opremo.

Ali je WireGuard tako preprosto uporabljati?

Zaenkrat ne. Ne pravim, da WireGuard nikoli ne bo dobra alternativa za prehod tunela med dvema točkama, a trenutno je to le alfa različica izdelka, kakršen bi moral postati.

Kaj pa torej dejansko počne? Je IPsec res toliko bolj zapleten za uporabo?

Očitno ne. Dobavitelj IPsec se je te težave zavedal in svoj izdelek ponuja skupaj z vmesnikom, na primer z IPFire.

Za nastavitev VPN tunela prek IPsec boste potrebovali pet sklopov podatkov, ki jih boste morali vnesti v konfiguracijo: vaš lastni javni IP naslov, javni IP naslov sprejemnika, podomrežja, ki jih želite razdeliti prek te VPN povezave in predeljeno geslo. Tako se VPN nastavi v nekaj minutah in je združljiv z vsakim ponudnikom.

Na žalost obstajajo nekatera izjemna primera. Vsak, ki je poskušal preusmeriti VPN tunel prek IPsec do naprave na OpenBSD, ve, o čem govorim. Obstaja še nekaj bolečih primerov, vendar je pozitivnih izkušenj z uporabo IPsec precej več.

O zapletenosti protokola

Končni uporabnik se ne bi smel obremenjevati s kompleksnostjo protokola.

Če bi živeli v svetu, kjer bi bila to resna skrb uporabnikov, bi se že zdavnaj rešili SIP, H.323, FTP in drugih protokolov, ustvarjenih pred več kot desetimi leti, ki slabo delujejo z NAT.

Obstajajo razlogi, zakaj je IPsec bolj zapleten kot WireGuard: opravi veliko več stvari. Na primer, preverjanje identitete uporabnika z uporabo prijave/gesla ali SIM kartice z EAP. Ima razširjene možnosti za dodajanje novih kriptografskih primitivov.

WireGuard pa tega nima.

In den meisten Fällen bedeutet das, dass WireGuard irgendwann versagen wird, weil einer der kryptografischen primitiven geschwächt oder vollständig kompromittiert wird. Der Autor der technischen Dokumentation kommentiert dies so:

Es ist erwähnenswert, dass WireGuard kryptografisch selbstbewusst ist. Es fehlt ihm absichtlich an Flexibilität in Bezug auf Verschlüsselungen und Protokolle. Wenn in den zugrunde liegenden primitiven schwerwiegende Schwachstellen entdeckt werden, müssen alle Endpunkte aktualisiert werden. Wie aus dem kontinuierlichen Strom von SSL/TLS-Schwachstellen hervorgeht, hat die Flexibilität der Verschlüsselung enorm zugenommen.

Der letzte Satz ist absolut korrekt.

Der Konsens darüber, welche Verschlüsselung verwendet werden soll, macht Protokolle wie IKE und TLS več kot kompliziert. Zu kompliziert? Ja, in TLS/SSL treten Schwachstellen recht häufig auf, und es gibt keine Alternativen.

Über das Ignorieren realer Probleme

Stellen Sie sich vor, Sie haben einen VPN-Server mit 200 produktiven Clients, die überall auf der Welt verteilt sind. Das ist ein ganz normales Nutzungsszenario. Wenn Sie die Verschlüsselung ändern müssen, müssen Sie das Update an alle Kopien von WireGuard auf diesen Laptops, Smartphones usw. verteilen. U isto vreme zu verteilen. Das ist buchstäblich unmöglich. Administratoren, die versuchen, dies zu tun, werden Monate benötigen, um die erforderlichen Konfigurationen einzurichten, und für mittelständische Unternehmen wird es buchstäblich Jahre dauern, um ein solches Vorhaben durchzuführen.

IPsec und OpenVPN bieten eine Funktion zum Aushandeln von Verschlüsselungen. Daher wird es eine Zeit geben, in der, nachdem Sie eine neue Verschlüsselung aktiviert haben, auch die alte noch funktioniert. Auf diese Weise können die aktuellen Clients auf die neue Version aktualisiert werden. Nachdem das Update ausgerollt wurde, schalten Sie einfach die verwundbare Verschlüsselung ab. Und das ist alles! Fertig! Sie sind großartig! Und die Clients werden dies kaum bemerken.

In der Tat ist dies ein sehr häufiger Fall bei großen Implementierungen, und sogar OpenVPN hat damit einige Schwierigkeiten. Die Abwärtskompatibilität ist wichtig, und auch wenn Sie eine schwächere Verschlüsselung verwenden, wird das für viele nicht das Ende des Geschäfts bedeuten. Denn das würde dazu führen, dass Hunderte von Kunden aufgrund ihrer Unfähigkeit, ihre Arbeit zu erledigen, paralysiert werden.

Ekipa WireGuard je poenostavila svoj protokol, vendar je popolnoma neuporaben za ljudi, ki nimajo stalnega nadzora nad obema koncema svojega tunela. Po mojem mnenju je prav takšna situacija najpogostejša.

Zakaj ne bi smeli uporabljati WireGuard

Kriptografija!

Toda katera zanimiva nova šifrirna tehnika se uporablja v WireGuardu?

WireGuard uporablja Curve25519 za izmenjavo ključev, ChaCha20 za šifriranje in Poly1305 za preverjanje pristnosti podatkov. Prav tako deluje s SipHash za hrambo ključev in BLAKE2 za heširanje.

ChaCha20-Poly1305 je standardiziran za IPsec in OpenVPN (prek TLS).

Očitno se razvoj Daniela Bernsteina pogosto uporablja. BLAKE2 je naslednik BLAKE, finalista SHA-3, ki ni zmagal zaradi svoje podobnosti s SHA-2. Če bi bila SHA-2 pridobljena, bi obstajala velika verjetnost, da bi bil tudi BLAKE ogrožen.

IPsec in OpenVPN ne potrebujeta SipHash zaradi svojega obsega. Tako da je edina stvar, ki trenutno ne more biti uporabljena z njima, BLAKE2, in to le, dokler ne bo standardiziran. To ni velika pomanjkljivost, saj VPN-ji uporabljajo HMAC za zagotavljanje celovitosti, ki velja za močno rešitev, tudi v kombinaciji z MD5.

Tako sem prišel do zaključka, da skoraj vsi VPN-ji uporabljajo enak nabor kriptografskih orodij. Zato WireGuard ni bolj in ne manj varen od drugih aktualnih produktov, ko gre za šifriranje ali celovitost prenesenih podatkov.

Toda niti to ni najpomembnejše, na kar je treba biti pozoren v skladu z uradno dokumentacijo projekta. Glavno je hitrost.

Je WireGuard hitrejši od drugih rešitev VPN?

Na kratko: ne, ni hitrejši.

ChaCha20 je tokovna šifra, ki jo je lažje implementirati v programsko opremo. Šifrira en bit naenkrat. Blokovni protokoli, kot je AES, šifrirajo blok po 128 bitov naenkrat. Za izvedbo strojne podpore bo potrebnih veliko več tranzistorjev, zato večji procesorji ponujajo AES-NI — razširitev niza ukazov, ki izvaja nekatere naloge šifriranja za pospešitev.

Očekivalo se da AES-NI nikada neće doći na pametne telefone [a ipak je došao, napomena prevoditelja]. Zbog toga je razvijen ChaCha20 kao lagana i ekonomična alternativa koja štedi bateriju. Stoga može biti iznenađenje da svaki pametni telefon koji danas možete kupiti ima neku vrstu ubrzanja za AES i radi s ovom enkripcijom brže i sa manjom potrošnjom energije nego s ChaCha20.

Očigledno je da praktično svaki procesor za stolne računare / servere kupljen u poslednjih nekoliko godina ima AES-NI.

Stoga očekujem da će AES nadmašiti ChaCha20 u svakom pojedinačnom scenariju. U zvaničnoj dokumentaciji WireGuard-a pominje se da će ChaCha20-Poly1305 zahvaljujući AVX512 nadmašiti AES-NI, no ova ekstenzija skupa instrukcija biće dostupna samo na većim procesorima, što opet neće pomoći manjim i mobilnim uređajima koji će uvek brže raditi sa AES-NI.

Nisam siguran da li je to moglo biti predviđeno tokom razvoja WireGuard-a, ali danas je činjenica da je čvrsto vezan za jednu enkripciju već nedostatak koji može negativno uticati na njegov rad.

IPsec omogućuje slobodan izbor koja enkripcija najbolje odgovara vašim potrebama. I, naravno, to je neophodno ako, na primer, želite preneti 10 i više gigabajta podataka preko VPN veze.

Problemi integracije u Linux

Iako je WireGuard odabrao moderan protokol enkripcije, to već izaziva mnoštvo problema. I tako, umesto da koristi ono što je podržano u kernelu iz kutije, integracija WireGuard-a odlagana je godinama zbog nedostatka ovih primitava u Linuxu.

Nisam u potpunosti obavešten o situaciji u drugim operativnim sistemima, ali verovatno nije mnogo drugačija od situacije u Linuxu.

Kako izgleda stvarnost?

Nažalost, svaki put kada me klijent zamoli da mu postavim VPN vezu, suočavam se s temom da koriste zastarele podatke i enkripciju. 3DES u kombinaciji sa MD5 — i dalje je rasprostranjena praksa, isto kao i AES-256 i SHA1. Iako je poslednji malo bolji — to nije ono što bi trebalo koristiti 2020. godine.

Za razmenu ključeva vedno koristi se RSA — spor, ali dovoljno siguran alat.

Moji klijenti su povezani sa carinskim organima i drugim državnim institucijama i agencijama, kao i sa velikim korporacijama čija imena su poznata širom sveta. Svi oni koriste obrazac zahteva koji je napravljen pre nekoliko decenija, a mogućnost korišćenja SHA-512 jednostavno nikada nije dodana. Ne mogu reći da to direktno utiče na tehnološki napredak, ali je očigledno da usporava korporativne procese.

Boli me to da vidim, jer IPsec podržava eliptične krive u načelu od 2005. godine. Curve25519 je takođe novija i dostupna za korišćenje. Takođe postoje alternativne opcije kao što su AES, Camellia i ChaCha20, ali očigledno, nisu sve od njih podržane od strane velikih provajdera poput Cisco-a i drugih.

I ljudi to koriste. Postoji mnogo Cisco paketa, postoje mnogi setovi napravljeni za rad sa Cisco-om. Oni su lideri na tržištu u ovom segmentu i nisu posebno zainteresovani za inovacije.

Da, situacija [u korporativnom segmentu] je strašna, ali nećemo videti nikakve promene zbog WireGuard-a. Proizvođači verovatno nikada neće otkriti bilo kakve probleme sa performansama već korišćenog alata i enkripcije, niti će primetiti probleme prilikom korišćenja IKEv2 — i stoga ne traže alternative.

Da li ste se ikada zapitali o napuštanju Cisco-a?

Benchmarkovi

A sada prelazimo na benchmarkove iz dokumentacije WireGuard. Iako ova [dokumentacija] nije naučni članak, očekivao sam od developera više naučnog pristupa, ili korišćenje naučnog metoda kao referencu. Svi benchmarkovi su beskorisni ako se ne mogu reprodukovati, a još beskorisniji su kada su dobijeni u laboratorijskim uslovima.

U izdanju WireGuard-a za Linux koristi prednost korišćenja GSO — Generic Segmentation Offloading. Zbog toga, klijent stvara ogroman paket veličine 64 kilobajta i enkriptira/dekriptira ga u jednom koraku. Tako se smanjuju troškovi poziva i implementacije kriptografskih operacija. Ako želite da maksimalizujete propusnost vaše VPN veze — to je dobra ideja.

Toda, kot to običajno gre, v resnici ni vse tako preprosto. Pošiljanje tako velikega paketa na omrežni adapter zahteva, da se razreže na več manjših paketov. Običajna velikost pošiljke je 1500 bajtov. To pomeni, da bo naš velikan s 64 kilobajti razdeljen na 45 paketov (1240 bajtov informacij in 20 bajtov IP-zaslona). Potem pa bo za nekaj časa popolnoma blokirana delovanje omrežnega adapterja, saj morajo biti poslani skupaj in hkrati. Na koncu bo to povzročilo skok prioritete, paketi, kot je na primer VoIP, pa bodo uvrščeni v čakalno vrsto.

Tako se visoka propustnost, o kateri tako drčno trdi WireGuard, doseže z upočasnjenjem omrežnega dela drugih aplikacij. In ekipa WireGuard že potrdilo to je moja ugotovitev.

Ampak gremo naprej.

Glede na merjenje v tehnični dokumentaciji, povezava kaže propustnost 1011 Mbit/s.

Impresivno.

Zlasti to impresionira, ker je največja teoretična propustnost ene gigabitne Ethernet povezave 966 Mbit/s pri velikosti paketa 1500 bajtov minus 20 bajtov za IP-zaslon, 8 bajtov za UDP-zaslon in 16 bajtov za zaslon WireGuard-a. Obstaja še en IP-zaslon v enkapsuliranem paketu in drugi v TCP, ki meri 20 bajtov. Kako torej prihaja do te dodatne propustnosti?

S ogromnimi okviri in prednostmi GSO, o katerih smo govorili zgoraj, bi teoretični maksimum pri velikosti okvira 9000 bajtov bil 1014 Mbit/s. Takšna propustnost je običajno v praksi nedosegljiva, ker je povezana z velikimi težavami. Tako lahko le domnevam, da je bil test izveden z uporabo še večjih okvirjev, ki presegajo velikost 64 kilobajtov s teoretičnim maksimumom 1023 Mbit/s, kar podpirajo le nekateri omrežni adapterji. Toda to je povsem neuporabno v realnih pogojih, ali pa se lahko uporablja le med dvema neposredno povezanima postajama, izključno v okviru testne postavitve.

Toda pač, ker se VPN-tunel vzpostavi med dvema gostiteljema prek internetne povezave, ki sploh ne podpira velikih okvirjev, dosežen rezultat ne more biti sprejet kot merilo. To je preprosto nerealiziran laboratiorijski dosežek, ki ga ni mogoče in ni primerno uporabiti v realnih bojiščih.

Tudi ko sem bil v podatkovnem središču, nisem mogel prenašati okvirjev, večjih od 9000 bajtov.

Merilo uporabnosti v resničnem življenju je popolnoma kršeno in, kot mislim, je avtor opravljene 'meritve' resno diskreditiral samega sebe iz razumljivih razlogov.

Zakaj ne bi smeli uporabljati WireGuard

Zadnji žarek upanja

Na spletni strani WireGuard je veliko govora o kontejnerjih in postaja jasno, za kaj je v resnici namenjen.

Preprost in hiter VPN, ki ne zahteva konfiguracije in se lahko izvaja ter nastavlja z obsežnimi orodji za orkestracijo, kot je na primer v Amazonovi oblak. Konkretno Amazon uporablja najsodobnejše strojne funkcije, o katerih sem govoril prej, kot je AVX512. To se naredi za pospešitev delovanja in ne vezanje na x86 ali katero koli drugo arhitekturo.

Optimizirajo prepustnost in pakete, katerih velikost presega 9000 bajtov - ti bodo velika inkapsulirana okvira za komunikacijo med kontejnerji, ali za operacije varnostnega kopiranja, ustvarjanje posnetkov ali uvajanje teh kontejnerjev. Tudi dinamične IP-naslove ne bodo vplivale na delovanje WireGuard v opisani situaciji.

Dobro odigrano. Svetovna implementacija in zelo subtilen, skoraj idealen protokol.

Toda preprosto ni primeren za svet izven popolnoma nadzorovanih podatkovnih centrov. Če se kljub temu odločite in začnete uporabljati WireGuard, boste morali sprejeti stalne kompromise pri razvoju in izvajanju protokola šifriranja.

Izlaz

Zlahka lahko sklenem, da WireGuard še ni pripravljen.

Zasnovan je bil kot poenostavljena in hitra rešitev vrsto težav obstoječih rešitev. Nažalost pa je ta rešitev žrtvovala številne funkcionalnosti, ki bodo relevantne za večino uporabnikov. Zato ne more nadomestiti IPsec ali OpenVPN.

Da bi WireGuard postao konkurentan, potrebno je dodati barem podešavanje IP adrese i konfiguraciju rutiranja i DNS-a. Očigledno je da su za to potrebni enkriptovani kanali.

Sigurnost je moj glavni prioritet, i trenutno nemam razloga da verujem da su IKE ili TLS na bilo koji način kompromitovani ili pokvareni. Savremena enkripcija podržana je u oba i proverena je tokom decenija upotrebe. To što je nešto novije ne znači nužno da je bolje.

Funkcionalna kompatibilnost je izuzetno važna kada se povežete s trećim stranama čije stanice ne kontrolišete. IPsec je de facto standard i podržava se gotovo svuda. I funkcioniše. Kako god to izgledalo, u teoriji, WireGuard bi u budućnosti mogao biti neskompatibilan čak i sa različitim verzijama samog sebe.

Svaka kriptografska zaštita рано или позно бива хакована и стога би требало да буде замењена или обновљена.

Negiranje svih ovih činjenica i slepa želja da se WireGuard koristi za povezivanje vašeg iPhone-a sa radnom stanicom kod kuće samo je vrhunski primer kako gurati glavu u pesak.

Izvor: habr.com

Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster