Zašto ne biste trebali koristiti WireGuard

WireGuard u posljednje vrijeme privlači veliku pažnju, zapravo je nova zvijezda među VPN-ovima. Ali da li je tako dobar kao što izgleda? Želio bih razgovarati o nekim zapažanjima i pregledati implementaciju WireGuard-a kako bih objasnio zašto to nije rješenje za zamjenu IPsec-a ili OpenVPN-a.

U ovom članku želio bih razotkriti neke od mitova [oko WireGuarda]. Da, biće potrebno dosta vremena za čitanje, pa ako niste sebi skuhali šoljicu čaja ili kafe, onda je vreme da to uradite. Takođe bih želeo da se zahvalim Peteru što je ispravio moje haotične misli.

Ne postavljam sebi cilj da diskreditujem programere WireGuard-a, obezvređujem njihove napore ili ideje. Njihov proizvod radi, ali lično smatram da je predstavljen potpuno drugačije od onoga što zaista jeste – predstavljen je kao zamjena za IPsec i OpenVPN, koji u stvari sada jednostavno ne postoje.

Kao napomenu, želim da dodam da odgovornost za ovakvo pozicioniranje WireGuarda snose mediji koji su o tome govorili, a ne sam projekat ili njegovi kreatori.

U posljednje vrijeme nije bilo mnogo dobrih vijesti o Linux kernelu. Dakle, rečeno nam je o monstruoznim ranjivostima procesora, koje su softverski izravnali, a Linus Torvalds je o tome govorio previše grubo i dosadno, utilitarnim jezikom programera. Planer ili mrežni stog na nultom nivou takođe nisu baš jasne teme za sjajne časopise. I dolazi WireGuard.

Na papiru sve zvuči sjajno: uzbudljiva nova tehnologija.

Ali pogledajmo to malo pažljivije.

WireGuard bijeli papir

Ovaj članak je zasnovan na zvanična WireGuard dokumentacijanapisao Jason Donenfeld. Tamo objašnjava koncept, svrhu i tehničku implementaciju [WireGuard] u Linux kernelu.

Prva rečenica glasi:

WireGuard […] ima za cilj da zameni IPsec u većini slučajeva upotrebe i druga popularna rešenja zasnovana na korisničkom prostoru i/ili TLS-u, kao što je OpenVPN, dok je sigurniji, efikasniji i lakši za korišćenje [alat].

Naravno, glavna prednost svih novih tehnologija je njihova jednostavnost [u poređenju sa prethodnicima]. Ali VPN bi također trebao biti efikasan i siguran.

Dakle, šta je sljedeće?

Ako kažete da ovo nije ono što vam treba [od VPN-a], onda možete završiti čitanje ovdje. Međutim, napominjem da su takvi zadaci postavljeni za bilo koju drugu tehnologiju tuneliranja.

Najzanimljiviji od navedenih citata leži u riječima "u većini slučajeva", koje su, naravno, bile ignorirane od strane štampe. I tako, tu smo gdje smo završili zbog haosa koji je stvorio ovaj nemar - u ovom članku.

Zašto ne biste trebali koristiti WireGuard

Hoće li WireGuard zamijeniti moj [IPsec] site-to-site VPN?

br. Jednostavno nema šanse da će veliki dobavljači kao što su Cisco, Juniper i drugi kupiti WireGuard za svoje proizvode. Oni ne "skaču na vozove koji prolaze" u pokretu osim ako za to postoji neka velika potreba. Kasnije ću proći kroz neke od razloga zašto oni vjerovatno neće moći ubaciti svoje WireGuard proizvode čak i da to žele.

Hoće li WireGuard preuzeti moj RoadWarrior sa mog laptopa u centar podataka?

br. Trenutno, WireGuard nema ogroman broj implementiranih važnih karakteristika da bi mogao da uradi ovako nešto. Na primjer, ne može koristiti dinamičke IP adrese na strani servera tunela, a samo to razbija cijeli scenario takvog korištenja proizvoda.

IPFire se često koristi za jeftine internetske veze, kao što su DSL ili kablovske veze. Ovo ima smisla za mala ili srednja preduzeća kojima nije potrebna brza vlakna. [Napomena prevodioca: ne zaboravite da su Rusija i neke zemlje ZND-a daleko ispred Evrope i Sjedinjenih Država, jer smo svoje mreže počeli graditi mnogo kasnije i pojavom Etherneta i optičkih mreža kao standard, bilo nam je lakše obnoviti. U istim zemljama EU ili SAD, xDSL širokopojasni pristup brzinom od 3-5 Mbps je još uvijek opća norma, a optička veza košta nerealno za naše standarde. Stoga, autor članka govori o DSL-u ili kabelskoj vezi kao o normi, a ne o drevnim vremenima.] Međutim, DSL, kablovski, LTE (i druge metode bežičnog pristupa) imaju dinamičke IP adrese. Naravno, ponekad se ne mijenjaju često, ali se mijenjaju.

Postoji potprojekat pod nazivom "wg-dynamic", koji dodaje demon korisničkog prostora za prevazilaženje ovog nedostatka. Ogroman problem sa gore opisanim korisničkim scenarijem je pogoršanje dinamičkog IPv6 adresiranja.

Ni sa stanovišta distributera, sve ovo ne izgleda baš dobro. Jedan od ciljeva dizajna bio je da protokol ostane jednostavan i čist.

Nažalost, sve je to zapravo postalo previše jednostavno i primitivno, tako da moramo koristiti dodatni softver kako bi cijeli ovaj dizajn bio održiv u stvarnoj upotrebi.

Je li WireGuard tako jednostavan za korištenje?

Ne još. Ne kažem da WireGuard nikada neće biti dobra alternativa za tuneliranje između dvije tačke, ali za sada je to samo alfa verzija proizvoda kakav bi trebao biti.

Ali šta onda on zapravo radi? Da li je IPsec zaista toliko teži za održavanje?

Očigledno ne. Prodavac IPsec-a je razmišljao o tome i isporučuje svoj proizvod zajedno sa interfejsom, kao što je IPFire.

Da biste postavili VPN tunel preko IPsec-a, trebat će vam pet skupova podataka koje ćete morati unijeti u konfiguraciju: vaša vlastita javna IP adresa, javna IP adresa primaoca, podmreže koje želite učiniti javnim putem ovu VPN vezu i unaprijed dijeljeni ključ. Dakle, VPN se postavlja za nekoliko minuta i kompatibilan je sa bilo kojim dobavljačem.

Nažalost, postoji nekoliko izuzetaka od ove priče. Svako ko je pokušao da tunelira preko IPsec-a do OpenBSD mašine zna o čemu govorim. Postoji još nekoliko bolnih primjera, ali u stvari, postoji mnogo, mnogo više dobrih praksi za korištenje IPsec-a.

O složenosti protokola

Krajnji korisnik ne mora da brine o složenosti protokola.

Da živimo u svijetu u kojem je ovo stvarna briga korisnika, onda bismo se riješili SIP, H.323, FTP i drugih protokola kreiranih prije više od deset godina koji ne funkcionišu dobro sa NAT-om.

Postoje razlozi zašto je IPsec složeniji od WireGuarda: radi mnogo više stvari. Na primjer, autentikacija korisnika pomoću prijave/lozinke ili SIM kartice sa EAP-om. Ima proširenu mogućnost dodavanja novog kriptografski primitivi.

A WireGuard to nema.

A to znači da će se WireGuard u nekom trenutku pokvariti, jer će jedan od kriptografskih primitiva oslabiti ili biti potpuno kompromitovan. Autor tehničke dokumentacije kaže ovo:

Vrijedi napomenuti da je WireGuard kriptografski uvjeren. Namjerno mu nedostaje fleksibilnost šifri i protokola. Ako se pronađu ozbiljne rupe u osnovnim primitivima, sve krajnje tačke će se morati ažurirati. Kao što možete vidjeti iz tekućeg niza SLL/TLS ranjivosti, fleksibilnost enkripcije je sada značajno porasla.

Poslednja rečenica je potpuno tačna.

Postizanje konsenzusa o tome koju enkripciju koristiti čini protokole poput IKE i TLS više kompleks. Previše komplikovano? Da, ranjivosti su prilično česte u TLS/SSL-u i za njih nema alternative.

O ignorisanju stvarnih problema

Zamislite da imate VPN server sa 200 borbenih klijenata negdje širom svijeta. Ovo je prilično standardan slučaj upotrebe. Ako morate promijeniti enkripciju, morate isporučiti ažuriranje svim kopijama WireGuard-a na ovim prijenosnim računalima, pametnim telefonima i tako dalje. Istovremeno dostaviti. To je bukvalno nemoguće. Administratorima koji pokušavaju da to urade trebat će mjeseci da implementiraju potrebne konfiguracije, a kompaniji srednje veličine će doslovno trebati godine da izvede takav događaj.

IPsec i OpenVPN nude funkciju pregovaranja o šiframa. Stoga će neko vrijeme nakon kojeg uključite novu enkripciju i stara raditi. Ovo će omogućiti trenutnim korisnicima da nadograde na novu verziju. Nakon što se ažuriranje uvede, jednostavno isključite ranjivu enkripciju. I to je to! Spremni! ti si divna! Klijenti to neće ni primijetiti.

Ovo je zapravo vrlo čest slučaj za velike implementacije, a čak i OpenVPN ima nekih poteškoća s tim. Kompatibilnost unatrag je važna, a iako koristite slabiju enkripciju, za mnoge to nije razlog za zatvaranje poduzeća. Jer će paralizirati rad stotinama kupaca zbog nemogućnosti da rade svoj posao.

WireGuard tim je svoj protokol učinio jednostavnijim, ali potpuno neupotrebljivim za ljude koji nemaju stalnu kontrolu nad oba vršnjaka u svom tunelu. Po mom iskustvu, ovo je najčešći scenario.

Zašto ne biste trebali koristiti WireGuard

Kriptografija!

Ali koja je to zanimljiva nova enkripcija koju koristi WireGuard?

WireGuard koristi Curve25519 za razmjenu ključeva, ChaCha20 za enkripciju i Poly1305 za autentifikaciju podataka. Takođe radi sa SipHash za hash ključeve i BLAKE2 za heširanje.

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

Očigledno je da se razvoj Daniela Bernsteina vrlo često koristi. BLAKE2 je nasljednik BLAKE-a, SHA-3 finaliste koji nije pobijedio zbog sličnosti sa SHA-2. Ako bi SHA-2 bio pokvaren, postojala je velika šansa da će i BLAKE biti kompromitovan.

IPsec i OpenVPN ne trebaju SipHash zbog svog dizajna. Dakle jedina stvar koja se trenutno ne može koristiti s njima je BLAKE2, i to samo dok se ne standardizira. Ovo nije veliki nedostatak, jer VPN-ovi koriste HMAC za stvaranje integriteta, što se smatra jakim rješenjem čak i u kombinaciji s MD5.

Tako sam došao do zaključka da se gotovo isti skup kriptografskih alata koristi u svim VPN-ovima. Stoga, WireGuard nije ni manje ni više siguran od bilo kojeg drugog trenutnog proizvoda kada je u pitanju enkripcija ili integritet prenesenih podataka.

Ali ni to nije najvažnija stvar, na što vrijedi obratiti pažnju prema službenoj dokumentaciji projekta. Na kraju krajeva, glavna stvar je brzina.

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

Ukratko: ne, ne brže.

ChaCha20 je stream šifra koju je lakše implementirati u softver. Šifruje jedan bit po jedan. Blok protokoli kao što je AES šifriraju blok 128 bita odjednom. Za implementaciju hardverske podrške potrebno je mnogo više tranzistora, tako da veći procesori dolaze s AES-NI, ekstenzijom skupa instrukcija koja obavlja neke od zadataka procesa šifriranja kako bi ga ubrzala.

Očekivalo se da AES-NI nikada neće ući u pametne telefone [ali jeste — cca. per.]. Za to je ChaCha20 razvijen kao lagana alternativa koja štedi bateriju. Stoga vam može biti vijest da svaki pametni telefon koji danas možete kupiti ima neku vrstu AES ubrzanja i radi brže i sa manjom potrošnjom energije s ovom enkripcijom nego sa ChaCha20.

Očigledno, skoro svaki desktop/server procesor kupljen u posljednjih nekoliko godina ima AES-NI.

Stoga očekujem da će AES nadmašiti ChaCha20 u svakom pojedinačnom scenariju. U službenoj dokumentaciji WireGuarda spominje se da će sa AVX512 ChaCha20-Poly1305 nadmašiti AES-NI, ali ovo proširenje skupa instrukcija će biti dostupno samo na većim CPU-ima, što opet neće pomoći kod manjeg i mobilnijeg hardvera, koji će uvijek biti brži s AES-om. N.I.

Nisam siguran da li je to moglo da se predvidi tokom razvoja WireGuard-a, ali danas je činjenica da je prikovan samo za enkripciju već nedostatak koji možda neće dobro uticati na njegov rad.

IPsec vam omogućava da slobodno odaberete koja je enkripcija najbolja za vaš slučaj. I naravno, ovo je neophodno ako, na primjer, želite prenijeti 10 ili više gigabajta podataka putem VPN veze.

Problemi integracije u Linuxu

Iako je WireGuard odabrao moderan protokol za šifriranje, to već uzrokuje mnogo problema. I tako, umjesto da se koristi ono što kernel podržava iz kutije, integracija WireGuarda je odgođena godinama zbog nedostatka ovih primitiva u Linuxu.

Nisam sasvim siguran kakva je situacija na drugim operativnim sistemima, ali vjerovatno nije mnogo drugačija nego na Linuxu.

Kako izgleda stvarnost?

Nažalost, svaki put kada me klijent zatraži da im postavim VPN vezu, naiđem na problem da koriste zastarjele vjerodajnice i enkripciju. 3DES u kombinaciji sa MD5 je još uvijek uobičajena praksa, kao i AES-256 i SHA1. I iako je ovo drugo nešto bolje, ovo nije nešto što bi trebalo koristiti 2020. godine.

Za razmjenu ključeva uvek Koristi se RSA - spor, ali prilično siguran alat.

Moji klijenti su povezani sa carinskim organima i drugim državnim organizacijama i institucijama, kao i sa velikim korporacijama čija su imena poznata širom sveta. Svi oni koriste obrazac zahtjeva koji je kreiran prije nekoliko decenija, a mogućnost korištenja SHA-512 jednostavno nikada nije dodana. Ne mogu reći da to nekako jasno utiče na tehnološki napredak, ali očigledno usporava korporativni proces.

Boli me što to vidim jer IPsec podržava eliptičke krivulje od 2005. Curve25519 je također noviji i dostupan za upotrebu. Postoje i alternative za AES kao što su Camellia i ChaCha20, ali očigledno nisu sve podržane od strane velikih proizvođača kao što su Cisco i drugi.

I ljudi to iskorištavaju. Postoji mnogo Cisco kompleta, postoji mnogo kompleta dizajniranih za rad sa Cisco. Oni su tržišni lideri u ovom segmentu i nisu previše zainteresirani za bilo kakvu vrstu inovacija.

Da, situacija [u korporativnom segmentu] je užasna, ali nećemo vidjeti promjene zbog WireGuarda. Prodavci vjerovatno nikada neće vidjeti probleme s performansama sa alatima i enkripcijom koju već koriste, neće vidjeti nikakve probleme sa IKEv2, pa stoga ne traže alternative.

Generalno, da li ste ikada razmišljali o napuštanju Cisco-a?

Benchmarks

A sada pređimo na mjerila iz WireGuard dokumentacije. Iako ova [dokumentacija] nije naučni članak, ipak sam očekivao da će programeri zauzeti naučniji pristup ili koristiti naučni pristup kao referencu. Bilo koja mjerila su beskorisna ako se ne mogu reproducirati, a još beskorisnija kada se dobiju u laboratoriji.

U Linux verziji WireGuard-a, on koristi prednosti korištenja GSO - Generičkog rasterećenja segmentacije. Zahvaljujući njemu, klijent kreira ogroman paket od 64 kilobajta i šifrira / dešifruje ga u jednom potezu. Tako se smanjuju troškovi pozivanja i implementacije kriptografskih operacija. Ako želite maksimizirati propusnost svoje VPN veze, ovo je dobra ideja.

Ali, kao i obično, stvarnost nije tako jednostavna. Slanje tako velikog paketa mrežnom adapteru zahtijeva njegovo izrezivanje na mnogo manjih paketa. Normalna veličina slanja je 1500 bajtova. Odnosno, naš gigant od 64 kilobajta bit će podijeljen u 45 paketa (1240 bajtova informacija i 20 bajtova IP zaglavlja). Zatim će na neko vrijeme potpuno blokirati rad mrežnog adaptera, jer se moraju poslati zajedno i odjednom. Kao rezultat, ovo će dovesti do skoka prioriteta, a paketi kao što je VoIP, na primjer, bit će stavljeni u red čekanja.

Dakle, visoka propusnost koju WireGuard tako hrabro tvrdi postiže se po cijenu usporavanja umrežavanja drugih aplikacija. A WireGuard tim je već potvrđeno ovo je moj zaključak.

Ali idemo dalje.

Prema merilima u tehničkoj dokumentaciji, veza pokazuje propusnost od 1011 Mbps.

Impresivno.

Ovo je posebno impresivno zbog činjenice da je maksimalna teoretska propusnost jedne gigabitne Ethernet veze 966 Mbps sa veličinom paketa od 1500 bajtova minus 20 bajtova za IP zaglavlje, 8 bajtova za UDP zaglavlje i 16 bajtova za zaglavlje sam WireGuard. Postoji još jedno IP zaglavlje u inkapsuliranom paketu i još jedno u TCP-u za 20 bajtova. Dakle, odakle je došao ovaj dodatni propusni opseg?

Sa ogromnim okvirima i prednostima GSO-a o kojima smo gore govorili, teoretski maksimum za veličinu okvira od 9000 bajtova bio bi 1014 Mbps. Obično je takva propusnost u stvarnosti nedostižna, jer je povezana sa velikim poteškoćama. Dakle, mogu samo pretpostaviti da je test izveden koristeći još deblje predimenzionirane okvire od 64 kilobajta sa teorijskim maksimumom od 1023 Mbps, što podržavaju samo neki mrežni adapteri. Ali ovo je apsolutno neprimjenjivo u stvarnim uvjetima, ili se može koristiti samo između dvije direktno povezane stanice, isključivo unutar ispitnog stola.

Ali budući da se VPN tunel prosljeđuje između dva hosta pomoću internetske veze koja uopće ne podržava jumbo okvire, rezultat postignut na bench-u ne može se uzeti kao mjerilo. Ovo je jednostavno nerealno laboratorijsko dostignuće koje je nemoguće i neprimjenjivo u stvarnim borbenim uvjetima.

Čak i dok sam sedeo u data centru, nisam mogao da prenesem okvire veće od 9000 bajtova.

Kriterijum primenljivosti u stvarnom životu je apsolutno narušen i, kako mislim, autor izvršenog „merenja“ se ozbiljno diskreditovao iz očiglednih razloga.

Zašto ne biste trebali koristiti WireGuard

Poslednji tračak nade

Web stranica WireGuard puno govori o kontejnerima i postaje jasno čemu je zapravo namijenjena.

Jednostavan i brz VPN koji ne zahtijeva nikakvu konfiguraciju i može se implementirati i konfigurirati s ogromnim alatima za orkestraciju kakve Amazon ima u svom oblaku. Konkretno, Amazon koristi najnovije hardverske karakteristike koje sam ranije spomenuo, kao što je AVX512. Ovo se radi kako bi se ubrzao rad i ne bi se vezao za x86 ili bilo koju drugu arhitekturu.

Optimiziraju propusnost i pakete veće od 9000 bajtova – to će biti ogromni inkapsulirani okviri za međusobno komuniciranje kontejnera ili za backup operacije, kreiranje snimaka ili postavljanje tih istih kontejnera. Čak ni dinamičke IP adrese neće uticati na rad WireGuard-a ni na koji način u slučaju scenarija koji sam opisao.

Dobro odigrano. Briljantna implementacija i vrlo tanak, skoro referentni protokol.

Ali jednostavno se ne uklapa u svijet izvan data centra kojim vi potpuno kontrolirate. Ako preuzmete rizik i počnete koristiti WireGuard, morat ćete praviti stalne kompromise u dizajnu i implementaciji protokola za šifriranje.

zaključak

Lako mi je zaključiti da WireGuard još nije spreman.

Zamišljen je kao lagano i brzo rješenje brojnih problema sa postojećim rješenjima. Nažalost, zarad ovih rješenja žrtvovao je mnoge funkcije koje će biti relevantne većini korisnika. Zato ne može zamijeniti IPsec ili OpenVPN.

Da bi WireGuard postao konkurentan, mora dodati barem postavku IP adrese i usmjeravanje i DNS konfiguraciju. Očigledno, tome služe šifrirani kanali.

Sigurnost mi je glavni prioritet i trenutno nemam razloga vjerovati da su IKE ili TLS na neki način ugroženi ili pokvareni. U oba je podržana moderna enkripcija, a dokazana su decenijama rada. Samo zato što je nešto novije ne znači da je bolje.

Interoperabilnost je izuzetno važna kada komunicirate sa trećim stranama čije stanice ne kontrolišete. IPsec je de facto standard i podržan je skoro svuda. I on radi. I bez obzira kako izgleda, u teoriji, WireGuard u budućnosti možda neće biti kompatibilan čak ni s različitim verzijama sebe.

Svaka kriptografska zaštita se prije ili kasnije pokvari i, u skladu s tim, mora biti zamijenjena ili ažurirana.

Negiranje svih ovih činjenica i slijepa želja da koristite WireGuard za povezivanje vašeg iPhone-a na kućnu radnu stanicu je samo majstorska klasa zabijanja glave u pijesak.

izvor: www.habr.com

Dodajte komentar