Zašto se ne isplati koristiti WireGuard

U posljednje vrijeme, WireGuard privlači veliku pažnju, zapravo — to je nova „zvijezda“ među VPN. No, koliko je stvarno dobar? Želim raspraviti neka zapažanja i razmotriti implementaciju WireGuard-a kako bih objasnio zašto nije rješenje koje će zamijeniti IPsec ili OpenVPN.

U ovom članku želim razbiti neke mitove [oko WireGuard-a]. Da, čitati će biti dugotrajno, pa ako još niste pripremili šalicu čaja ili kave, sada je pravo vrijeme. Također, želim zahvaliti Peteru na lekturi mojih kaotičnih misli.

Ne postavljam si cilj diskreditirati programere WireGuard-a, umanjiti njihov trud ili ideje. Njihov proizvod je funkcionalan, ali osobno smatram da je prikazan potpuno drugačije nego što zapravo jest — prikazan je kao zamjena za IPsec i OpenVPN, koje u ovom trenutku zapravo ne postoje.

Kao napomenu, želim dodati da odgovornost za takvo pozicioniranje WireGuard-a snose mediji koji su o njemu govorili, a ne sam projekt ili njegovi kreatori.

U posljednje vrijeme nije bilo mnogo dobrih vijesti o Linux jezgru. Tako su nam ispričali o monstruoznim ranjivostima procesora koje su bile ublažene na softverski način, a Linus Torvalds je o tome pričao previše grubo i dosadno, utilitarnim jezikom programera. Planer ili nultička mreža također nisu previše razumljive teme za sjajne časopise. I tada se pojavljuje WireGuard.

Na papiru sve zvuči sjajno: zapanjujuća nova tehnologija.

No, hajde da je pogledamo malo bliže.

Tehnička dokumentacija WireGuard-a

Ovaj članak temelji se na službena dokumentacija WireGuard-a, koju je napisao Jason Donenfeld. Tamo objašnjava koncept, cilj i tehničku implementaciju [WireGuard-a] u Linux jezgru.

Prva rečenica glasi:

WireGuard […] teži zamjeni, kao što je IPsec u većini slučajeva njegove upotrebe, poput drugih popularnih rješenja temeljenih na korisničkom prostoru i/ili TLS-u, kao što je OpenVPN, pri čemu je sigurniji, učinkovitiji i jednostavniji za korištenje [alat].

Naravno, glavna prednost svih novih tehnologija je njihova jednostavnost [u usporedbi sa prethodnicima]. No, VPN također mora biti učinkovit i siguran.

I što dalje?

Ako kažete da vam [od VPN] nije ovo potrebno, onda ovdje možemo završiti s čitanjem. Ipak, primijetit ću da se takvi zadaci postavljaju pred svaku drugu tehnologiju tuneliranja.

Najzanimljivije u gornjoj citatu krije se u riječima 'u većini slučajeva', koje su, naravno, bile ignorirane od strane medija. I evo nas na mjestu na kojem smo zbog tog nemara — u ovom članku.

Zašto se ne isplati koristiti WireGuard

Hoće li WireGuard zamijeniti moju [IPsec] VPN vezu između lokacija?

Ne. Trenutno nema šanse da veliki dobavljači poput Cisco-a, Junipera i drugih prihvate WireGuard za svoje proizvode. Ne 'preskoče trenutačne vozove' bez ozbiljne potrebe. Kasnije ću govoriti o nekim razlozima zbog kojih vjerojatno neće moći integrirati WireGuard u svoje proizvode, čak i da su to željeli.

Hoće li WireGuard premjestiti mog RoadWarrior-a s prijenosnog računala u podatkovni centar?

Ne. Trenutno WireGuard nema veliki broj važnih funkcija za realizaciju takvog scenarija. Na primjer, ne može koristiti dinamičke IP adrese s poslužiteljske strane tunela, i već samo to ruši cijeli scenarij korištenja proizvoda.

IPFire se često koristi za jeftine internet kanale, poput DSL-a ili kablovske veze. To ima smisla za male ili srednje tvrtke koje ne trebaju brzu optiku. [Napomena prevoditelja: ne smijemo zaboraviti da su u komunikaciji Rusija i neke zemlje ZND-a daleko ispred Europe i SAD-a, jer smo započeli izgradnju svojih mreža mnogo kasnije, a s dolaskom Ethernet-a i optičkih mreža kao standarda, bilo nam je lakše preurediti se. U istim zemljama EU ili SAD-a, xDSL širokopojasni pristup brzinama od 3-5 Mbit/s — još uvijek je sveobuhvatna norma, a optičko povezivanje košta nevjerojatne sume prema našim mjerilima. Stoga autor članka govori o DSL ili kablovskom povezivanju kao normi, a ne o zastarjelim tehnologijama.] Međutim, DSL, kablovski, LTE (i druge bežične metode pristupa) imaju dinamičke IP adrese. Naravno, ponekad se ne mijenjaju često, ali se ipak mijenjaju.

Postoji podprojekt pod nazivom «wg-dynamic», koji dodaje korisnički prostor da prevlada ovu poteškoću. Veliki problem s korisničkim scenarijem opisanom iznad je pogoršanje situacije dinamičkom IPv6 adresacijom.

S gledišta distributera, sve to također ne izgleda dobro. Jedan od ciljeva razvoja bio je zadržati jednostavnost i čistoću protokola.

Nažalost, sve to zapravo je postalo previše jednostavno i primitivno, tako da moramo koristiti dodatni softver kako bi cijela struktura bila održiva u stvarnoj eksploataciji.

Je li WireGuard tako jednostavan za upotrebu?

Za sada ne. Ne kažem da WireGuard nikada neće biti dobra alternativa za prosljeđivanje tunela između dviju točaka, ali za sada je to samo alfaversija proizvoda koji bi trebao postati.

Ali što zapravo radi? Je li IPsec zaista toliko složeniji za upotrebu?

Očito nije. IPsec dobavljači su razmišljali o tom aspektu i isporučuju svoj proizvod zajedno s korisničkim sučeljem, na primjer, s IPFire.

Za postavljanje VPN tunela preko IPsec-a, potrebno vam je pet skupova podataka koje morate unijeti u konfiguraciju: vaša vlastita javna IP adresa, javna IP adresa odredišne strane, podmreže koje želite učiniti dostupnima preko ove VPN veze i pre-shared ključ. Tako da se VPN postavlja za nekoliko minuta i kompatibilan je s bilo kojim dobavljačem.

Nažalost, u ovoj priči postoji nekoliko iznimaka. Svatko tko je pokušao proslijediti VPN tunel preko IPsec-a na stroj s OpenBSD-om zna o čemu govorim. Ima još nekoliko bolnih primjera, ali zapravo ima mnogo više pozitivne prakse korištenja IPsec-a.

O složenosti protokola

Krajnji korisnik ne bi trebao brinuti o složenosti protokola.

Da živimo u svijetu gdje je to stvarna briga korisnika, odavno bismo se oslobodili SIP-a, H.323, FTP-a i drugih protokola stvorenih prije više od deset godina koji loše rade s NAT-om.

Postoje razlozi zbog kojih je IPsec složeniji od WireGuard-a: on čini mnogo više stvari. Na primjer, autentifikacija korisnika korištenjem korisničkog imena/lozinke ili SIM kartice s EAP-om. Ima proširenu mogućnost dodavanja novih kriptografskih primitiva.

A WireGuard to nema.

To znači da će WireGuard u nekom trenutku zatajiti, jer jedan od kriptografskih primitava oslabit će ili će biti potpuno kompromitiran. Autor tehničke dokumentacije to objašnjava na sljedeći način:

Važno je napomenuti da je WireGuard kriptografski samopouzdan. Namjerno mu nedostaje fleksibilnost šifri i protokola. Ako se u temeljitim primitivima otkriju ozbiljne rupe, sve točke će morati biti ažurirane. Kao što se može vidjeti iz neprekidnog niza ranjivosti SSL/TLS, fleksibilnost šifriranja je sada enormno povećana.

Posljednja izjava je apsolutno točna.

Postizanje konsenzusa o tome koje šifriranje koristiti čini protokole poput IKE i TLS više od kompliciranim. Previše kompliciranim? Da, u TLS/SSL ranjivosti se javljaju dovoljno često i nema alternativâ.

O ignoriranju stvarnih problema

Zamislite da imate VPN poslužitelj s 200 klijenata u radnom stanju, diljem svijeta. To je sasvim uobičajen scenarij upotrebe. Ako trebate promijeniti šifriranje, morate dostaviti ažuriranje na sve kopije WireGuarda na tim prijenosnicima, pametnim telefonima itd. Istovremeno dostaviti. To je doslovno nemoguće. Administratorima koji pokuša to učiniti trebat će mjeseci za implementaciju potrebnih konfiguracija, a prosječnim tvrtkama doslovno će trebati godine za provođenje takvog događaja.

IPsec i OpenVPN nude funkciju dogovora o šiframa. Stoga, neko vrijeme nakon što uključite novu šifru, stara će i dalje raditi. Na taj način trenutni klijenti mogu se ažurirati na novu verziju. Nakon što se ažuriranje rasporedi, jednostavno isključite ranjivo šifriranje. I to je to! Gotovo! Vi ste fantastični! A klijenti to čak ni ne primijete.

U stvarnosti, ovo je vrlo čest slučaj za velika implementiranja, a čak i OpenVPN ima neke poteškoće s tim. Unatrag kompatibilnost je važna, i iako koristite slabije šifriranje, za mnoge to nije razlog za zatvaranje poslovanja. Jer će to dovesti do paralize rada stotina klijenata zbog nesposobnosti da obave svoj posao.

Tim WireGuard pojednostavio je svoj protokol, ali djeluje potpuno neupotrebljivo za ljude koji nemaju stalnu kontrolu nad oba čvora svog tunela. Prema mojim iskustvima, upravo je ovaj scenarij najčešći.

Zašto se ne isplati koristiti WireGuard

Kriptografija!

Ali, kakva je to zanimljiva nova enkripcija koju koristi WireGuard?

WireGuard koristi Curve25519 za razmjenu ključeva, ChaCha20 za enkripciju i Poly1305 za autentifikaciju podataka. Također radi sa SipHash za hash-ključeve i BLAKE2 za hashing.

ChaCha20-Poly1305 je standardiziran za IPsec i OpenVPN (preko TLS-a).

Očigledno je da se razvoj Danijela Bernstein-a vrlo često koristi. BLAKE2 je nasljednik BLAKE-a, finalista SHA-3, koji nije pobijedio zbog svoje sličnosti sa SHA-2. Da je SHA-2 bio kompromitiran, postoji velika vjerojatnost da bi i BLAKE bio kompromitiran.

IPsec i OpenVPN ne trebaju SipHash zbog svog dizajna. Stoga, jedino što trenutno ne može biti korišteno s njima je BLAKE2, a to samo dok ne bude standardiziran. To nije veliki nedostatak, jer VPN-ovi koriste HMAC za osiguranje integriteta, što se smatra snažnim rješenjem čak i u kombinaciji s MD5.

Tako sam došao do zaključka da se u svim VPN-ovima zapravo koristi gotovo isti skup kriptografskih alata. Stoga, WireGuard nije ni sigurniji ni manje siguran od bilo koje druge aktualne usluge kada se radi o enkripciji ili integritetu prenesenih podataka.

Ali čak ni to nije najvažnije što treba primijetiti prema službenoj dokumentaciji projekta. Najvažnija stvar je brzina.

Je li WireGuard brži od drugih VPN rješenja?

Ako ukratko: ne, nije brži.

ChaCha20 je stream cipher koji se lakše implementira u softver. Šifrira jedan bit u isto vrijeme. Blokovni protokoli, poput AES-a, šifriraju blok po 128 bita u isto vrijeme. Za implementaciju hardverske podrške potrebno je mnogo više tranzistora, zbog čega veći procesori dolaze s AES-NI — ekstenzijom skupa instrukcija koja izvršava neke zadatke procesa enkripcije za ubrzanje.

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

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

Stoga očekujem da će AES nadmašiti ChaCha20 u svakom pojedinačnom scenariju. U zvaničnoj dokumentaciji WireGuard se spominje da će zahvaljujući AVX512 ChaCha20-Poly1305 nadmašiti AES-NI, ali će ovo proširenje skupa instrukcija biti dostupno samo na većim procesorima, što opet neće pomoći manjim i mobilnim uređajima koji će uvek brže raditi s AES-NI.

Nisam siguran da li se to moglo predvideti prilikom razvijanja WireGuarda, ali danas je činjenica da je zakovan za jednu enkripciju već nedostatak koji može negativno uticati na njegov rad.

IPsec omogućava slobodan izbor koja enkripcija najbolje odgovara vašem slučaju. I naravno, to je neophodno ako, na primer, želite preneti 10 ili više gigabajta podataka preko VPN veze.

Problemi integracije u Linux

Iako je WireGuard odabrao moderni protokol enkripcije, to već izaziva mnoštvo problema. I tako umesto da koristi ono što se podržava iz jezgara po defaultu, integracija WireGuarda odlagana je godinama zbog nedostatka ovih primitiva u Linuxu.

Nisam potpuno upućen kakva je situacija u drugim operativnim sistemima, ali verovatno se ne razlikuje mnogo 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 za prijavu i enkripciju. 3DES u kombinaciji s MD5 — i dalje je uobičajena praksa, kao i AES-256 i SHA1. I iako je potonji malo bolji — to nije ono što bi trebalo koristiti 2020. godine.

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

Moji klijenti surađuju s carinskim organima i drugim državnim institucijama, kao i s velikim korporacijama čija se imena poznaju širom svijeta. Svi oni koriste obrazac zahtjeva koji je stvoren prije nekoliko desetljeća, a mogućnost korištenja SHA-512 jednostavno nikada nije dodana. Ne mogu reći da to izravno utječe na tehnološki napredak, no očigledno usporava korporativne procese.

Boli me to vidjeti, jer IPsec podržava eliptične krivulje otprilike od 2005. godine. Curve25519 je također noviji i dostupan za korištenje. Osim toga, postoje alternative AES-u, poput Camellia i ChaCha20, ali, naravno, ne podržavaju ih svi veliki dobavljači, poput Cisco-a i drugih.

I ljudi to koriste. Postoji mnogo Cisco setova, postoji mnogo setova stvorenih za rad s Cisco-om. Oni su lideri tržišta u ovom segmentu i nisu previše zainteresirani za bilo kakve inovacije.

Da, situacija [u korporativnom segmentu] je grozna, ali nećemo vidjeti nikakve promjene zbog WireGuard-a. Proizvođači vjerojatno nikada neće uočiti ikakve probleme s performansama već korištenih alata i šifriranja, niti će uočiti probleme pri korištenju IKEv2 — i zato ne traže alternative.

Uopće, jeste li ikada razmišljali o napuštanju Cisco-a?

Benchmarkovi

A sada pređimo na benchmarke iz dokumentacije WireGuard. Iako ova [dokumentacija] nije znanstveni rad, očekivao sam od programera više znanstvenog pristupa, ili korištenje znanstvenog pristupa kao standarda. Bilo koji benchmark je beskoristan ako se ne može reproducirati, i još je beskorisniji kada se dobiva u laboratorijskim uvjetima.

U izgradnji WireGuard-a za Linux on dobiva prednost korištenjem GSO — Generic Segmentation Offloading. Zahvaljujući tome, klijent stvara ogromnu paket veličine 64 kilobajta i šifrira/dešifrira ga u jednom potezu. Tako se troškovi poziva i realizacije kriptografskih operacija smanjuju. Ako želite maksimalizirati propusnost vaše VPN veze — to je dobra ideja.

No, kako to obično biva, u stvarnosti nije sve tako jednostavno. Slanje tako velikog paketa na mrežni adapter zahtijeva da se on podijeli na mnoge manje pakete. Uobičajena veličina isporučenog paketa iznosi 1500 bajtova. Odnosno, naš div u veličini od 64 kilobajta bit će podijeljen na 45 paketa (1240 bajtova informacija i 20 bajtova IP zaglavlja). Zatim će, na određeno vrijeme, potpuno blokirati rad mrežnog adaptera jer moraju biti poslani zajedno i odjednom. Na kraju će to dovesti do skoka prioriteta, a takvi paketi, kao što su VoIP, bit će stavljeni u red čekanja.

Dakle, visoka propusnost koju tako hrabro tvrdi WireGuard postiže se usporavanjem mrežnog rada drugih aplikacija. I tim WireGuard već potvrdila moj je zaključak.

Ali hajde da idemo dalje.

Prema benchmarkovima u tehničkoj dokumentaciji, veza pokazuje propusnost od 1011 Mbit/s.

Impresivno.

Posebno je to impresivno zbog činjenice da maksimalna teorijska propusnost jednog gigabitnog Ethernet priključka iznosi 966 Mbit/s pri veličini paketa od 1500 bajtova minus 20 bajtova za IP zaglavlje, 8 bajtova za UDP zaglavlje i 16 bajtova za zaglavlje samog WireGuarda. Tu je još jedno IP zaglavlje u inkapsuliranom paketu i drugo u TCP-u od 20 bajtova. Kako je onda nastala ta dodatna propusnost?

S velikim okvirima i prednostima GSO-a o kojima smo ranije govorili, teorijski maksimum pri veličini okvira od 9000 bajtova bio bi 1014 Mbit/s. Obično je takva propusnost u stvarnosti nedostižna jer je povezana s velikim poteškoćama. Tako mogu samo nagađati da je test proveden korištenjem još debljih okvira s prekoračenjem veličine od 64 kilobajta s teorijskim maksimumom od 1023 Mbit/s, što podržavaju samo neki mrežni adapteri. No, to je apsolutno neprimjenjivo u stvarnim uvjetima ili može biti korišteno samo između dviju izravno povezanih stanica, isključivo unutar testne postavke.

Međutim, budući da se VPN tunel ostvaruje između dva hosta putem internetske veze koja uopće ne podržava velike okvire, postignuti rezultat na testiranju ne može se smatrati standardom. To je jednostavno nerealno laboratorijsko dostignuće, koje je nemoguće i neprimjenjivo u stvarnim uvjetima.

Čak i dok sam sjedio u podatkovnom centru, nisam mogao prenositi okvire veće od 9000 bajta.

Kriterij primjenjivosti u stvarnom životu apsolutno je prekršen i, kako mislim, autor provedenog "mjerenja" je ozbiljno diskreditirao samog sebe iz očitih razloga.

Zašto se ne isplati koristiti WireGuard

Posljednji trzaj nade

Na web stranici WireGuard-a se puno govori o kontejnerima i postaje jasno za što je zapravo namijenjen.

Jednostavan i brz VPN koji ne zahtijeva konfiguraciju i može se implementirati i postaviti masovnim alatima za orkestraciju, kao što je to Amazon u njihovom oblaku. Konkretno, Amazon koristi najnovije hardverske funkcije o kojima sam ranije spomenuo, poput AVX512. To se radi kako bi se ubrzala funkcionalnost, ne oslanjajući se na x86 ili bilo koju drugu arhitekturu.

Optimiziraju propusnost i pakete čija veličina premašuje 9000 bajta – dobit će se ogroman inkapsulirani okvir za međusobnu komunikaciju kontejnera, ili za operacije sigurnosnog kopiranja, stvaranje snapshot-a ili implementaciju tih samih kontejnera. Čak i dinamičke IP adrese neće imati utjecaja na rad WireGuard-a u mom opisanom scenariju.

Dobro odrađeno. Sjajna implementacija i vrlo rafiniran, gotovo standardni protokol.

Ali jednostavno nije prikladan za svijet izvan potpuno kontroliranog podatkovnog centra. Ako se odlučite i počnete koristiti WireGuard, morat ćete pristati na stalne kompromise tijekom razvoja i implementacije protokola šifriranja.

Izvještaj

Nije mi teško zaključiti da WireGuard za sada nije spreman.

Osmišljen je kao olakšano i brzo rješenje niza problema s postojećim rješenjima. Nažalost, radi tih rješenja, žrtvovao je mnoge značajke koje će biti relevantne za većinu korisnika. Zbog toga ne može zamijeniti IPsec ili OpenVPN.

Da bi WireGuard postao konkurentan, potrebno je dodati barem podešavanja IP adrese i konfiguraciju usmjeravanja i DNS-a. Očigledno je da su šifrirani kanali upravo to što je potrebno.

Sigurnost je moj glavni prioritet, i trenutno nemam osnova vjerovati da su IKE ili TLS na bilo koji način kompromitirani ili oštećeni. Moderna enkripcija je podržana u oba i testirana je decenijama eksploatacije. Ako je nešto novije, ne znači automatski da je bolje.

Funkcionalna kompatibilnost je izuzetno važna kada se povezuje s trećim stranama čije stanice ne kontrolirate. IPsec je de facto standard i podržava se gotovo svugdje. I to funkcionira. Bez obzira na izgled, u teoriji, WireGuard bi u budućnosti mogao biti nespojiv čak i s različitim verzijama sebe.

Svaka kriptografska zaštita рано ili kasnije biva razbijena i stoga se mora zamijeniti ili ažurirati.

Negiranje svih tih činjenica i slijepa želja za korištenjem WireGuard-a za povezivanje vašeg iPhone-a s kućnom radnom stanicom - to je jednostavno majstorski tečaj u guranju glave u pijesak.

Izvor: habr.com

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster