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 je li tako dobar kao što se čini? Želio bih raspraviti o nekim opažanjima i pregledati implementaciju WireGuarda 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 [o WireGuardu]. Da, trebat će vam dosta vremena za čitanje, pa ako si niste skuhali šalicu čaja ili kave, vrijeme je da to učinite. Također bih želio zahvaliti Peteru što je ispravio moje kaotične misli.

Ne postavljam si cilj diskreditirati programere WireGuarda, obezvrijediti njihov trud ili ideje. Njihov proizvod radi, ali osobno mislim da je predstavljen potpuno drugačije nego što stvarno jest - predstavljen je kao zamjena za IPsec i OpenVPN, koji zapravo sada jednostavno ne postoje.

Napominjemo da odgovornost za takvo pozicioniranje WireGuarda snose mediji koji su o tome govorili, a ne sam projekt ili njegovi kreatori.

U zadnje vrijeme nema mnogo dobrih vijesti o Linux kernelu. Dakle, rečeno nam je o monstruoznim ranjivostima procesora, koje je izravnao softver, a Linus Torvalds je o tome govorio previše grubo i dosadno, utilitarističkim jezikom programera. Planer ili mrežni stog nulte razine također nisu baš jasne teme za sjajne časopise. I dolazi WireGuard.

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

Ali pogledajmo to malo pobliže.

WireGuard bijeli papir

Ovaj se članak temelji na službena WireGuard dokumentacijanapisao Jason Donenfeld. Ondje objašnjava koncept, svrhu i tehničku implementaciju [WireGuarda] u jezgri Linuxa.

Prva rečenica glasi:

WireGuard […] ima za cilj zamijeniti i IPsec u većini slučajeva upotrebe i druga popularna rješenja temeljena na korisničkom prostoru i/ili TLS-u kao što je OpenVPN dok je sigurniji, učinkovitiji i lakši za korištenje [alat].

Naravno, glavna prednost svih novih tehnologija je njihova ublažiti [u usporedbi s prethodnicima]. Ali VPN bi također trebao biti učinkovito i sigurno.

Dakle, što je sljedeće?

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

Najzanimljivije u gornjem citatu leži u riječima "u većini slučajeva", koje su, naravno, tisak zanemario. I eto, tu smo gdje smo i dospjeli zbog kaosa koji je nastao ovom nebrigom - u ovom članku.

Zašto ne biste trebali koristiti WireGuard

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

Ne. Jednostavno nema šanse da će veliki dobavljači kao što su Cisco, Juniper i drugi kupiti WireGuard za svoje proizvode. Oni ne "uskaču na vlakove u prolazu" u pokretu osim ako za to nema neke velike potrebe. Kasnije ću proći kroz neke od razloga zašto vjerojatno neće moći nabaviti svoje WireGuard proizvode čak i da žele.

Hoće li WireGuard prenijeti moj RoadWarrior s prijenosnog računala u podatkovni centar?

Ne. Trenutačno WireGuard nema implementiran veliki broj važnih značajki da bi mogao učiniti nešto ovako. Na primjer, ne može koristiti dinamičke IP adrese na strani poslužitelja tunela, a to samo po sebi kvari cijeli scenarij takve upotrebe proizvoda.

IPFire se često koristi za jeftine internetske veze, kao što su DSL ili kabelske veze. To ima smisla za mala ili srednja poduzeća koja ne trebaju brza vlakna. [Napomena prevoditelja: ne zaboravite da su u komunikacijskom smislu Rusija i neke zemlje ZND-a daleko ispred Europe i Sjedinjenih Država, jer smo svoje mreže počeli graditi mnogo kasnije i s dolaskom Etherneta i optičkih mreža kao standard, lakše nam je bilo obnoviti. U istim zemljama EU ili SAD-a xDSL širokopojasni pristup brzinom od 3-5 Mbps još uvijek je opća norma, a optički priključak košta neke nerealne novce za naše standarde. Dakle, autor članka govori o DSL ili kabelskoj vezi kao normi, a ne o davnim vremenima.] Međutim, DSL, kabel, LTE (i druge metode bežičnog pristupa) imaju dinamičke IP adrese. Naravno, ponekad se ne mijenjaju često, ali se mijenjaju.

Postoji podprojekt tzv "wg-dinamički", koji dodaje demon korisničkog prostora kako bi prevladao ovaj nedostatak. Ogroman problem s gore opisanim korisničkim scenarijem je pogoršanje dinamičkog IPv6 adresiranja.

Ni sa strane distributera sve to ne izgleda baš dobro. Jedan od ciljeva dizajna bio je održati protokol jednostavnim i čistim.

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 točke, ali za sada je to samo alfa verzija proizvoda kakav bi trebao biti.

Ali što onda zapravo radi? Je li IPsec stvarno toliko teži za održavanje?

Očito ne. Dobavljač IPsec-a je razmišljao o tome i isporučuje svoj proizvod zajedno sa sučeljem, kao što je IPFire.

Za postavljanje VPN tunela preko IPsec-a trebat će vam pet skupova podataka koje ćete morati unijeti u konfiguraciju: vlastita javna IP adresa, javna IP adresa primatelja, podmreže koje želite učiniti javnima putem ova VPN veza i unaprijed dijeljeni ključ. Stoga se VPN postavlja u roku od nekoliko minuta i kompatibilan je s bilo kojim dobavljačem.

Nažalost, u ovoj priči postoji nekoliko iznimaka. Svatko tko je pokušao tunelirati IPsec na OpenBSD stroj zna o čemu govorim. Postoji još par bolnih primjera, ali zapravo postoji mnogo, mnogo više dobrih praksi za korištenje IPsec-a.

O složenosti protokola

Krajnji korisnik ne mora brinuti o složenosti protokola.

Da živimo u svijetu u kojem je to stvarna briga korisnika, davno bismo se riješili SIP-a, H.323, FTP-a i drugih protokola stvorenih prije više od deset godina koji ne rade dobro s NAT-om.

Postoje razlozi zašto je IPsec složeniji od WireGuarda: radi puno više stvari. Na primjer, provjera autentičnosti korisnika pomoću prijave / lozinke ili SIM kartice s EAP-om. Ima proširenu mogućnost dodavanja novih kriptografske primitive.

A WireGuard to nema.

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

Vrijedno je napomenuti da je WireGuard kriptografski samouvjeren. Namjerno mu nedostaje fleksibilnost šifri i protokola. Ako se u temeljnim primitivima pronađu ozbiljne rupe, morat će se ažurirati sve krajnje točke. Kao što možete vidjeti iz tekućeg niza SLL/TLS ranjivosti, fleksibilnost enkripcije sada se strahovito povećala.

Zadnja rečenica je apsolutno točna.

Postizanje konsenzusa o tome koju enkripciju koristiti čine protokoli poput IKE i TLS više kompleks. Prekomplicirano? Da, ranjivosti su prilično česte u TLS/SSL-u i nema im alternative.

Na ignoriranju stvarnih problema

Zamislite da negdje u svijetu imate VPN poslužitelj s 200 borbenih klijenata. Ovo je prilično standardan slučaj upotrebe. Ako morate promijeniti enkripciju, trebate isporučiti ažuriranje svim kopijama WireGuarda na ovim prijenosnim računalima, pametnim telefonima i tako dalje. Istovremeno dostaviti. To je doslovno nemoguće. Administratorima koji to pokušavaju trebat će mjeseci da postave potrebne konfiguracije, a poduzeću srednje veličine doslovno će trebati godine da izvede takav događaj.

IPsec i OpenVPN nude značajku pregovaranja šifre. Dakle, neko vrijeme nakon kojeg uključite novu enkripciju, radit će i stara. To će trenutnim korisnicima omogućiti nadogradnju na novu verziju. Nakon što se ažuriranje uvede, jednostavno isključite ranjivu enkripciju. I to je to! Spreman! prekrasna si! Klijenti to neće ni primijetiti.

Ovo je zapravo vrlo čest slučaj za velike implementacije, a čak i OpenVPN ima problema s tim. Bitna je kompatibilnost s prethodnim verzijama, a iako koristite slabiju enkripciju, za mnoge to nije razlog za zatvaranje tvrtke. Jer će paralizirati rad stotina kupaca zbog nemogućnosti obavljanja svog posla.

Tim WireGuarda napravio je svoj protokol jednostavnijim, ali potpuno neupotrebljivim za ljude koji nemaju stalnu kontrolu nad oba uređaja u svom tunelu. Prema mom iskustvu, ovo je najčešći scenarij.

Zašto ne biste trebali 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 hash.

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

Očito je da se razvoj Daniela Bernsteina vrlo često koristi. BLAKE2 je nasljednik BLAKE-a, SHA-3 finalista koji nije pobijedio zbog sličnosti sa SHA-2. Ako bi se SHA-2 razbio, postojala je dobra šansa da bi i BLAKE bio ugrožen.

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. To 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šta više ili manje siguran od bilo kojeg drugog trenutnog proizvoda kada je u pitanju enkripcija ili integritet prenesenih podataka.

Ali ni to nije ono najvažnije, na što prema službenoj dokumentaciji projekta vrijedi obratiti pozornost. Uostalom, glavna stvar je brzina.

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

Ukratko: ne, ne brže.

ChaCha20 je stream šifra koju je lakše implementirati u softver. Šifrira jedan po jedan bit. Blok protokoli poput 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, proširenjem skupa instrukcija koje obavlja neke od zadataka procesa enkripcije kako bi ga ubrzalo.

Očekivalo se da AES-NI nikada neće ući u pametne telefone [ali jest — cca. po.]. Zbog toga je ChaCha20 razvijen kao lagana alternativa koja štedi bateriju. Stoga vam može biti novost da svaki pametni telefon koji danas možete kupiti ima neku vrstu AES akceleracije i radi brže i uz manju potrošnju energije s ovom enkripcijom nego s ChaCha20.

Očito gotovo svaki desktop/poslužiteljski procesor kupljen u zadnjih nekoliko godina ima AES-NI.

Stoga očekujem da će AES nadmašiti ChaCha20 u svakom pojedinom scenariju. WireGuardova službena dokumentacija spominje da će s AVX512, ChaCha20-Poly1305 nadmašiti AES-NI, ali ovo proširenje skupa instrukcija bit će dostupno samo na većim CPU-ima, što opet neće pomoći s manjim i mobilnijim hardverom, koji će uvijek biti brži s AES-om - N.I.

Nisam siguran je li se to moglo predvidjeti tijekom razvoja WireGuarda, ali danas je činjenica da je prikovan samo za enkripciju već nedostatak koji možda neće dobro utjecati na njegov rad.

IPsec vam omogućuje da slobodno odaberete koja je enkripcija najbolja za vaš slučaj. I naravno, to je potrebno ako, primjerice, želite prenijeti 10 ili više gigabajta podataka putem VPN veze.

Problemi integracije u Linux

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

Nisam sasvim siguran kakva je situacija na drugim operativnim sustavima, ali vjerojatno nije puno drugačija nego na Linuxu.

Kako izgleda stvarnost?

Nažalost, svaki put kad me klijent zamoli da mu postavim VPN vezu, naiđem na problem da koristi zastarjele vjerodajnice i enkripciju. 3DES u kombinaciji s MD5 još uvijek je uobičajena praksa, kao i AES-256 i SHA1. I iako je potonji nešto bolji, ovo nije nešto što bi trebalo koristiti u 2020. godini.

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

Moji klijenti povezani su s carinskim vlastima i drugim vladinim organizacijama i institucijama, kao i s velikim korporacijama čija su imena poznata u cijelom svijetu. Svi oni koriste obrazac zahtjeva koji je kreiran prije nekoliko desetljeća, a mogućnost korištenja SHA-512 jednostavno nikada nije dodana. Ne mogu reći da nekako jasno utječe na tehnološki napredak, ali očito usporava korporativni proces.

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

I ljudi to iskorištavaju. Postoji mnogo Cisco kompleta, postoji mnogo kompleta dizajniranih za rad s Ciscom. Oni su tržišni lideri u tom segmentu i nisu previše zainteresirani za bilo kakve inovacije.

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

Općenito, jeste li ikada razmišljali o napuštanju Cisca?

Mjerila

A sada prijeđimo na benchmarkove iz WireGuard dokumentacije. Iako ova [dokumentacija] nije znanstveni članak, ipak sam očekivao da će programeri zauzeti znanstveniji pristup ili koristiti znanstveni pristup kao referencu. Svaki benchmark je beskoristan ako se ne može reproducirati, a još beskorisniji kada se dobije u laboratoriju.

U verziji WireGuarda za Linux, on koristi prednosti korištenja GSO - Generic Segmentation Offloading. Zahvaljujući njemu, klijent kreira ogroman paket od 64 kilobajta i šifrira/dekriptira ga u jednom potezu. Stoga se smanjuje trošak pozivanja i implementacije kriptografskih operacija. Ako želite maksimalno povećati propusnost svoje VPN veze, ovo je dobra ideja.

Ali, kao i obično, stvarnost nije tako jednostavna. Slanje tako velikog paketa na mrežni adapter zahtijeva da se izreže na mnogo manjih paketa. Uobičajena veličina slanja je 1500 bajtova. Odnosno, naš div od 64 kilobajta bit će podijeljen u 45 paketa (1240 bajtova informacija i 20 bajtova IP zaglavlja). Zatim će neko vrijeme potpuno blokirati rad mrežnog adaptera, jer se moraju poslati zajedno i odjednom. Kao rezultat toga, to će dovesti do skoka prioriteta, a paketi kao što je VoIP, na primjer, bit će u redu čekanja.

Stoga je visoka propusnost koju WireGuard tako hrabro tvrdi postignuta po cijenu usporavanja umrežavanja drugih aplikacija. A tim WireGuarda već jest potvrdio ovo je moj zaključak.

Ali idemo dalje.

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

Impresivan.

Ovo je posebno impresivno zbog činjenice da je maksimalna teoretska propusnost jedne Gigabit Ethernet veze 966 Mbps s 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 enkapsuliranom paketu i još jedno u TCP-u za 20 bajtova. Odakle onda ova dodatna propusnost?

Uz ogromne okvire i prednosti GSO-a o kojima smo govorili gore, teoretski maksimum za veličinu okvira od 9000 bajtova bio bi 1014 Mbps. Obično je takva propusnost nedostižna u stvarnosti, jer je povezana s velikim poteškoćama. Dakle, mogu samo pretpostaviti da je test obavljen s još debljim predimenzioniranim okvirima od 64 kilobajta s teoretskim maksimumom od 1023 Mbps, koji podržavaju samo neki mrežni adapteri. Ali ovo je apsolutno neprimjenjivo u stvarnim uvjetima, odnosno može se koristiti samo između dvije izravno povezane stanice, isključivo unutar testnog stola.

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

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

Kriterij primjenjivosti u stvarnom životu apsolutno je povrijeđen i, smatram, autor obavljenog "mjerenja" ozbiljno se diskreditirao iz očitih razloga.

Zašto ne biste trebali koristiti WireGuard

Zadnji tračak nade

Web stranica WireGuard 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 konfigurirati s masivnim alatima za orkestraciju kao što Amazon ima u svom oblaku. Konkretno, Amazon koristi najnovije hardverske značajke koje sam ranije spomenuo, kao što je AVX512. To je učinjeno kako bi se ubrzao rad i ne bi bio vezan za x86 ili bilo koju drugu arhitekturu.

Oni optimiziraju propusnost i pakete veće od 9000 bajtova - to će biti ogromni inkapsulirani okviri za međusobnu komunikaciju spremnika ili za operacije sigurnosne kopije, stvaranje snimaka ili postavljanje istih spremnika. Čak ni dinamičke IP adrese neće ni na koji način utjecati na rad WireGuarda u slučaju scenarija koji sam opisao.

Dobro odigrano. Sjajna implementacija i vrlo tanak, gotovo referentni protokol.

Ali jednostavno se ne uklapa u svijet izvan podatkovnog centra koji u potpunosti kontrolirate. Ako riskirate i počnete koristiti WireGuard, morat ćete raditi stalne kompromise u dizajnu i implementaciji protokola šifriranja.

Izlaz

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

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

Kako bi WireGuard postao konkurentan, mora dodati barem postavku IP adrese te konfiguraciju usmjeravanja i DNS-a. Očito, 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. Oba podržavaju modernu enkripciju, a dokazane su desetljećima rada. Samo zato što je nešto novije ne znači da je i bolje.

Interoperabilnost je iznimno važna kada komunicirate s trećim stranama čije stanice ne kontrolirate. IPsec je de facto standard i podržan je gotovo posvuda. I radi. I bez obzira kako izgleda, u teoriji, WireGuard u budućnosti možda neće biti kompatibilan čak ni s različitim verzijama samog sebe.

Svaka kriptografska zaštita se prije ili kasnije pokvari i, sukladno tome, mora se zamijeniti ili ažurirati.

Poricanje svih ovih činjenica i naslijepo željeti koristiti WireGuard za povezivanje iPhonea s kućnom radnom stanicom samo je majstorski tečaj zabijanja glave u pijesak.

Izvor: www.habr.com

Dodajte komentar