De ce nu ar trebui să îl folosești WireGuard

Recent, WireGuard atrage multă atenție, de fapt, este o nouă „vedetă” printre VPNDar este oare atât de bun pe cât pare? Aș dori să discut câteva observații și să analizez implementarea. WireGuard, pentru a explica de ce nu este o soluție care va înlocui IPsec sau OpenVPN.

În acest articol aș dori să demontez câteva mituri [în jurul WireGuard]. Da, e o lectură lungă, așa că, dacă nu ți-ai făcut încă o ceașcă de ceai sau de cafea, acum e momentul. Aș dori, de asemenea, să-i mulțumesc lui Peter pentru corectura gândurilor mele haotice.

Nu este scopul meu să discreditez dezvoltatorii. WireGuard, le devalorizează eforturile sau ideile. Produsul lor funcționează, dar personal cred că este prezentat ca fiind complet diferit de ceea ce este în realitate - prezentat ca un înlocuitor pentru IPsec și OpenVPN, care, de fapt, pur și simplu nu există acum.

Ca o notă, aș dori să adaug că responsabilitatea pentru o astfel de poziționare WireGuard sunt difuzate de mass-media care a relatat despre ele și nu de proiectul în sine sau de creatorii săi.

Recent pe tema nucleului Linux Nu au fost prea multe vești bune. Ni s-a spus despre vulnerabilități monstruoase ale procesorului care au fost atenuate de software, iar relatarea lui Linus Torvalds despre asta a fost prea rudimentară și plictisitoare, în limbajul utilitar al unui dezvoltator. Planificatorul sau stiva de rețea de nivel 0 nu sunt nici ele subiecte tocmai clare pentru revistele lucioase. Și apoi apare... WireGuard.

Pe hârtie, totul sună grozav: o nouă tehnologie interesantă.

Dar să ne uităm puțin mai atent.

Documentatie tehnica WireGuard

Acest articol se bazează pe documentație oficială WireGuard, scrisă de Jason Donenfeld, unde explică conceptul, scopul și implementarea tehnică [WireGuard] în miez Linux.

Prima propoziție spune:

WireGuard […] își propune să înlocuiască atât IPsec în majoritatea cazurilor de utilizare, cât și alte soluții populare bazate pe spațiul utilizatorului și/sau TLS, cum ar fi OpenVPN, fiind în același timp mai sigur, mai productiv și mai ușor de utilizat [instrument].

Desigur, principalul avantaj al tuturor noilor tehnologii este lor ușura [comparativ cu predecesorii]. Dar ar trebui să fie și un VPN eficient si sigur.

Deci, ce urmează?

Dacă spuneți că nu este ceea ce aveți nevoie [de la un VPN], atunci puteți încheia lectura aici. Cu toate acestea, voi observa că astfel de sarcini sunt stabilite pentru orice altă tehnologie de tunel.

Cel mai interesant dintre citatul de mai sus constă în cuvintele „în majoritatea cazurilor”, care, desigur, au fost ignorate de presă. Și așa, suntem acolo unde am ajuns din cauza haosului creat de această neglijență – în acest articol.

De ce nu ar trebui să îl folosești WireGuard

Se va întâmpla? WireGuard înlocuiesc VPN-ul meu site-to-site [IPsec]?

Nu. Pur și simplu nu există nicio șansă ca marii furnizori precum Cisco, Juniper și alții să îl achiziționeze pentru produsele lor. WireGuardNu „sar în trenurile care trec” decât dacă există o nevoie urgentă. Mai târziu, voi discuta câteva dintre motivele pentru care probabil nu vor putea să-și instaleze produsele la bord. WireGuard, chiar dacă ar fi vrut.

Va supraviețui? WireGuard mi-am mutat RoadWarrior-ul de pe un laptop într-un centru de date?

Nu. Chiar acum în WireGuard Lipsesc un număr imens de funcții importante pentru a permite așa ceva. De exemplu, nu poate utiliza adrese IP dinamice pe partea serverului tunelului, iar acest lucru în sine întrerupe întregul caz de utilizare pentru acest produs.

IPFire este adesea folosit pentru conexiuni de internet ieftine, cum ar fi DSL sau conexiuni prin cablu. Acest lucru are sens pentru întreprinderile mici sau mijlocii care nu au nevoie de fibră rapidă. [Notă a traducătorului: nu uitați că în ceea ce privește comunicarea, Rusia și unele țări CSI sunt cu mult înaintea Europei și a Statelor Unite, pentru că am început să ne construim rețelele mult mai târziu și odată cu apariția rețelelor Ethernet și fibră optică ca un standard, ne-a fost mai ușor să reconstruim. În aceleași țări din UE sau SUA, accesul xDSL în bandă largă la o viteză de 3-5 Mbps este încă norma generală, iar o conexiune prin fibră optică costă niște bani nerealişti conform standardelor noastre. Prin urmare, autorul articolului vorbește despre DSL sau conexiunea prin cablu ca normă, și nu despre vremuri străvechi.] Cu toate acestea, DSL, cablu, LTE (și alte metode de acces wireless) au adrese IP dinamice. Desigur, uneori nu se schimbă des, dar se schimbă.

Există un subproiect numit "wg-dinamic", care adaugă un daemon userspace pentru a depăși acest neajuns. O problemă uriașă cu scenariul utilizatorului descris mai sus este agravarea adresei IPv6 dinamice.

Nici din punctul de vedere al distribuitorului toate acestea nu arată prea bine. Unul dintre obiectivele de proiectare a fost acela de a menține protocolul simplu și curat.

Din păcate, toate acestea au devenit de fapt prea simple și primitive, astfel încât trebuie să folosim software suplimentar pentru ca întregul design să fie viabil în utilizare reală.

WireGuard Este atât de ușor de utilizat?

Încă nu. Nu spun asta. WireGuard Nu va fi niciodată o alternativă bună pentru tunelarea între două puncte, dar deocamdată este doar o versiune alfa a produsului care ar trebui să devină.

Dar atunci ce face de fapt? Este chiar atât de greu de întreținut IPsec?

Evident nu. Furnizorul IPsec s-a gândit la acest lucru și își livrează produsul împreună cu o interfață, cum ar fi IPFire.

Pentru a configura un tunel VPN prin IPsec, veți avea nevoie de cinci seturi de date pe care va trebui să le introduceți în configurație: propria dvs. adresă IP publică, adresa IP publică a părții destinatare, subrețelele prin care doriți să le faceți publice. această conexiune VPN și cheia pre-partajată. Astfel, VPN-ul este configurat în câteva minute și este compatibil cu orice furnizor.

Din păcate, există câteva excepții de la această poveste. Oricine a încercat să facă un tunel prin IPsec la o mașină OpenBSD știe despre ce vorbesc. Mai sunt câteva exemple dureroase, dar, de fapt, există multe, multe practici bune pentru utilizarea IPsec.

Despre complexitatea protocolului

Utilizatorul final nu trebuie să-și facă griji cu privire la complexitatea protocolului.

Dacă am trăi într-o lume în care aceasta era o preocupare reală a utilizatorului, atunci am fi scăpat de SIP, H.323, FTP și alte protocoale create cu mai bine de zece ani în urmă care nu funcționează bine cu NAT.

Există motive pentru care IPsec este mai complex decât WireGuardFace mult mai multe. De exemplu, autentifică utilizatorii folosind nume de utilizator/parolă sau o cartelă SIM cu EAP. Are o capacitate extinsă de a adăuga utilizatori noi. primitive criptografice.

Și la WireGuard asta nu este.

Și asta înseamnă că WireGuard La un moment dat, va eșua deoarece una dintre primitivele criptografice va fi slăbită sau complet compromisă. Autorul documentației tehnice o prezintă astfel:

Ar trebui remarcat faptul că WireGuard Exces de încredere din punct de vedere criptografic. Îi lipsește intenționat flexibilitatea cifrurilor și protocoalelor sale. Dacă se descoperă breșe serioase în primitivele subiacente, toate punctele finale vor trebui actualizate. După cum demonstrează avalanșa continuă de vulnerabilități SSL/TLS, flexibilitatea criptării a crescut dramatic.

Ultima propoziție este absolut corectă.

Atingerea consensului cu privire la ce criptare să folosească creează protocoale precum IKE și TLS mai mult complex. Prea complicat? Da, vulnerabilitățile sunt destul de comune în TLS/SSL și nu există nicio alternativă la ele.

Despre ignorarea problemelor reale

Imaginează-ți că ai un server VPN cu 200 de clienți de producție, undeva în întreaga lume. Acesta este un caz de utilizare destul de standard. Dacă trebuie să modifici criptarea, trebuie să trimiți actualizarea la toate copiile. WireGuard pe aceste laptopuri, smartphone-uri și așa mai departe. Simultan livra. Este literalmente imposibil. Administratorii care încearcă să facă acest lucru vor dura luni pentru a implementa configurațiile necesare și, literalmente, o companie de dimensiune medie va dura ani pentru a realiza un astfel de eveniment.

IPsec și OpenVPN oferă o funcție de negociere a cifrului. Așadar, pentru o perioadă scurtă de timp, după ce activați noua criptare, va funcționa și cea veche. Acest lucru permite clienților actuali să facă upgrade la noua versiune. Odată ce actualizarea este lansată, pur și simplu dezactivați criptarea vulnerabilă. Și gata! Gata! Ești uimitor! Și clienții tăi nici măcar nu vor observa.

Acesta este de fapt un caz foarte frecvent pentru implementările mari și chiar OpenVPN Întâmpină unele dificultăți cu acest aspect. Compatibilitatea retroactivă este importantă și, chiar dacă se folosește o criptare mai slabă, pentru mulți, acesta nu este un motiv pentru a-și închide afacerea. Deoarece ar paraliza sute de clienți din cauza incapacității lor de a-și face treaba.

Echipă WireGuard și-a simplificat protocolul, dar complet nepotrivit pentru persoanele care nu au control constant asupra ambilor parteneri din tunelul lor. Din experiența mea, acesta este cel mai comun scenariu.

De ce nu ar trebui să îl folosești WireGuard

Criptografie!

Dar ce este această nouă criptare interesantă care este folosită? WireGuard?

WireGuard Folosește Curve25519 pentru schimbul de chei, ChaCha20 pentru criptare și Poly1305 pentru autentificarea datelor. De asemenea, acceptă SipHash pentru hash-uri de chei și BLAKE2 pentru hashing.

ChaCha20-Poly1305 este standardizat pentru IPsec și OpenVPN (prin TLS).

Este evident că dezvoltarea lui Daniel Bernstein este folosită foarte des. BLAKE2 este succesorul lui BLAKE, un finalist SHA-3 care nu a câștigat din cauza asemănării sale cu SHA-2. Dacă SHA-2 ar fi spart, existau șanse mari ca și BLAKE să fie compromis.

IPsec și OpenVPN SipHash nu este necesar datorită designului său. Prin urmare, singurul lucru care în prezent nu poate fi utilizat cu ele este BLAKE2, și numai până când va fi standardizat. Acesta nu este un dezavantaj major, deoarece VPN-urile folosesc HMAC pentru integritate, ceea ce este considerat o soluție puternică chiar și atunci când este asociat cu MD5.

Așadar, am ajuns la concluzia că toate VPN-urile folosesc aproape același set de instrumente criptografice. Prin urmare WireGuard nici mai mult, nici mai puțin sigur decât orice alt produs actual în ceea ce privește criptarea sau integritatea datelor transmise.

Dar chiar și acesta nu este cel mai important lucru, căruia merită să acordați atenție conform documentației oficiale a proiectului. La urma urmei, principalul lucru este viteza.

WireGuard mai rapid decât alte soluții VPN?

Pe scurt: nu, nu mai repede.

ChaCha20 este un cifr de flux care este mai ușor de implementat în software. Se criptează câte un bit. Protocoalele de blocare precum AES criptează un bloc pe 128 de biți odată. Sunt necesare mult mai multe tranzistoare pentru implementarea suportului hardware, astfel încât procesoarele mai mari vin cu AES-NI, o extensie de set de instrucțiuni care îndeplinește unele dintre sarcinile procesului de criptare pentru a-l accelera.

Era de așteptat ca AES-NI să nu intre niciodată în smartphone-uri [dar a făcut-o - aprox. pe.]. Pentru aceasta, ChaCha20 a fost dezvoltat ca o alternativă ușoară, care economisește baterie. Prin urmare, s-ar putea să vă spună că fiecare smartphone pe care îl puteți cumpăra astăzi are un fel de accelerare AES și rulează mai rapid și cu un consum mai mic de energie cu această criptare decât cu ChaCha20.

Evident, aproape fiecare procesor desktop/server cumpărat în ultimii doi ani are AES-NI.

Prin urmare, mă aștept ca AES să depășească ChaCha20 în fiecare scenariu. Documentația oficială WireGuard Se menționează că, datorită AVX512, ChaCha20-Poly1305 va depăși performanța AES-NI, dar această extensie a setului de instrucțiuni va fi disponibilă doar pe procesoare mai mari, ceea ce, din nou, nu va ajuta cu hardware-ul mai mic și mobil, care va fi întotdeauna mai rapid cu AES-NI.

Nu sunt sigur dacă acest lucru putea fi prevăzut în timpul dezvoltării. WireGuard, dar astăzi faptul că este bătut în cuie pe o singură criptare este deja un dezavantaj care s-ar putea să nu aibă un efect prea bun asupra funcționării sale.

IPsec vă permite să alegeți în mod liber care criptare este cea mai bună pentru cazul dvs. Și, desigur, acest lucru este necesar dacă, de exemplu, doriți să transferați 10 sau mai mulți gigaocteți de date printr-o conexiune VPN.

Probleme de integrare în Linux

Deși WireGuard Am ales un protocol de criptare modern, care deja cauzează o mulțime de probleme. Așadar, în loc să folosesc ceea ce suportă kernelul din fabrică, integrarea WireGuard a fost amânată ani de zile din cauza lipsei acestor primitive în Linux.

Nu sunt complet sigur care este situația pe alte sisteme de operare, dar probabil nu este mult diferită de Linux.

Cum arată realitatea?

Din păcate, de fiecare dată când un client îmi cere să configurez o conexiune VPN pentru ei, mă confrunt cu problema că folosesc acreditări și criptare învechite. 3DES împreună cu MD5 este încă o practică obișnuită, la fel ca și AES-256 și SHA1. Și deși acesta din urmă este puțin mai bun, acesta nu este ceva care ar trebui folosit în 2020.

Pentru schimbul de chei mereu Este folosit RSA - un instrument lent, dar destul de sigur.

Clienții mei sunt asociați cu autoritățile vamale și cu alte organizații și instituții guvernamentale, precum și cu mari corporații ale căror nume sunt cunoscute în întreaga lume. Toți folosesc un formular de solicitare care a fost creat cu zeci de ani în urmă, iar capacitatea de a utiliza SHA-512 pur și simplu nu a fost adăugată niciodată. Nu pot spune că afectează cumva clar progresul tehnologic, dar evident că încetinește procesul corporativ.

Mă doare să văd asta, deoarece IPsec acceptă curbele eliptice din 2005. Curve25519 este, de asemenea, mai nouă și disponibilă pentru utilizare. Există, de asemenea, alternative la AES precum Camellia și ChaCha20, dar evident că nu toate sunt acceptate de furnizori importanți precum Cisco și alții.

Și oamenii profită de asta. Există multe kituri Cisco, există multe kituri concepute pentru a funcționa cu Cisco. Sunt lideri de piață pe acest segment și nu sunt foarte interesați de niciun fel de inovație.

Da, situația [în segmentul corporativ] este teribilă, dar nu vom vedea nicio schimbare din cauza... WireGuardProbabil că producătorii nu vor descoperi niciodată probleme de performanță cu instrumentele și criptarea pe care le folosesc deja și nici nu vor vedea probleme cu IKEv2 - prin urmare, nu caută alternative.

În general, te-ai gândit vreodată să renunți la Cisco?

Benchmark-uri

Acum să trecem la testele de performanță din documentație. WireGuardDeși această [documentație] nu este o lucrare științifică, mă așteptam totuși ca dezvoltatorii să adopte o abordare mai științifică sau să folosească o abordare științifică drept punct de referință. Punctele de referință sunt inutile dacă nu pot fi reproduse și sunt și mai inutile atunci când sunt obținute într-un mediu de laborator.

În asamblare WireGuard pentru Linux Obține un avantaj prin utilizarea GSO (Generic Segmentation Offloading - Descărcare de Segmentare Generică). Permite clientului să creeze un pachet uriaș de 64 de kiloocteți și să îl cripteze/decripteze într-o singură trecere. Acest lucru reduce costul efectuării operațiunilor și apelurilor criptografice. Dacă doriți să maximizați debitul conexiunii VPN, aceasta este o idee bună.

Dar, ca de obicei, realitatea nu este atât de simplă. Trimiterea unui pachet atât de mare la un adaptor de rețea necesită tăierea acestuia în multe pachete mai mici. Dimensiunea normală de trimitere este de 1500 de octeți. Adică, gigantul nostru de 64 de kilobytes va fi împărțit în 45 de pachete (1240 de octeți de informații și 20 de octeți de antet IP). Apoi, pentru un timp, vor bloca complet funcționarea adaptorului de rețea, deoarece trebuie trimise împreună și deodată. Ca rezultat, acest lucru va duce la un salt de prioritate, iar pachetele precum VoIP, de exemplu, vor fi puse în coadă.

Astfel, randamentul ridicat, care este susținut cu atâta îndrăzneală WireGuard, se realizează prin încetinirea performanței rețelei altor aplicații. Și echipa WireGuard deja confirmat aceasta este concluzia mea.

Dar să mergem mai departe.

Conform benchmark-urilor din documentația tehnică, conexiunea arată un throughput de 1011 Mbps.

Impresionant.

Acest lucru este deosebit de impresionant deoarece debitul teoretic maxim al unei singure conexiuni Gigabit Ethernet este de 966 Mbps, cu o dimensiune a pachetului de 1500 octeți minus 20 octeți pentru antetul IP, 8 octeți pentru antetul UDP și 16 octeți pentru antetul în sine. WireGuardExistă un alt antet IP în pachetul încapsulat și un altul în TCP, lung de 20 de octeți. Deci, de unde provine această lățime de bandă suplimentară?

Cu cadre uriașe și beneficiile GSO despre care am vorbit mai sus, maximul teoretic pentru o dimensiune a cadrului de 9000 de octeți ar fi 1014 Mbps. De obicei, un astfel de debit este de neatins în realitate, deoarece este asociat cu mari dificultăți. Astfel, pot doar să presupun că testul a fost efectuat folosind cadre supradimensionate și mai groase de 64 de kiloocteți cu un maxim teoretic de 1023 Mbps, care este suportat doar de unele adaptoare de rețea. Dar acest lucru este absolut inaplicabil în condiții reale, sau poate fi folosit doar între două stații conectate direct, exclusiv în cadrul bancului de testare.

Dar din moment ce tunelul VPN este transmis între două gazde folosind o conexiune la Internet care nu acceptă deloc cadre jumbo, rezultatul obținut pe banc nu poate fi luat drept etalon. Aceasta este pur și simplu o realizare de laborator nerealistă care este imposibilă și inaplicabilă în condiții reale de luptă.

Chiar și stând în centrul de date, nu am putut transfera cadre mai mari de 9000 de octeți.

Criteriul de aplicabilitate în viața reală este încălcat absolut și, după cum cred, autorul „măsurătorii” efectuate s-a discreditat serios din motive evidente.

De ce nu ar trebui să îl folosești WireGuard

Ultima licărire de speranță

Site-ul WireGuard Se vorbește mult despre containere și devine clar la ce sunt destinate ele de fapt.

Un VPN simplu și rapid care nu necesită configurare și poate fi implementat și configurat cu instrumente masive de orchestrare precum Amazon le are în cloud. Mai exact, Amazon folosește cele mai recente caracteristici hardware pe care le-am menționat mai devreme, cum ar fi AVX512. Acest lucru se face pentru a accelera munca și pentru a nu fi legat de x86 sau de orice altă arhitectură.

Acestea optimizează debitul și dimensiunile pachetelor care depășesc 9000 de octeți - acestea duc la cadre încapsulate uriașe pentru comunicarea containerelor, operațiuni de backup, crearea de instantanee sau implementarea containerelor. Nici măcar adresele IP dinamice nu vor afecta performanța. WireGuard în cazul scenariului pe care l-am descris.

Bine jucat. Implementare genială și protocol foarte subțire, aproape de referință.

Dar pur și simplu nu este potrivit pentru lumea din afara unui centru de date pe care îl controlezi complet. Dacă îți asumi riscul și începi să folosești WireGuard, va trebui să faceți compromisuri constante atunci când proiectați și implementați un protocol de criptare.

Producție

Nu-mi este greu să concluzionez că WireGuard încă nu e gata.

A fost conceput ca o soluție ușoară și rapidă la o serie de probleme ale soluțiilor existente. Din păcate, pentru a realiza aceste soluții, a sacrificat multe caracteristici care ar fi relevante pentru majoritatea utilizatorilor. De aceea, nu poate înlocui IPsec sau OpenVPN.

În scopul de a WireGuard Pentru a deveni competitiv, trebuie să adauge cel puțin configurarea adresei IP, rutarea și configurarea DNS. Evident, pentru acest lucru sunt necesare canale criptate.

Securitatea este prioritatea mea principală și în acest moment nu am niciun motiv să cred că IKE sau TLS sunt cumva compromise sau rupte. Criptarea modernă este acceptată în ambele și au fost dovedite prin decenii de funcționare. Doar pentru că ceva este mai nou nu înseamnă că este mai bun.

Interoperabilitatea este crucială atunci când comunicați cu terțe părți ale căror stații nu le controlați. IPsec este standardul de facto și este acceptat aproape peste tot. Și funcționează. Și orice ar arăta, în teorie, WireGuard în viitor s-ar putea să fie incompatibil chiar și cu versiuni diferite ale sale.

Orice protecție criptografică este ruptă mai devreme sau mai târziu și, în consecință, trebuie înlocuită sau actualizată.

Negarea tuturor acestor fapte și o dorință oarbă de a le folosi WireGuard pentru a vă conecta iPhone la o stație de lucru de acasă este o clasă de măiestrie în a-ți băga capul în nisip.

Sursa: www.habr.com

Cumpărați găzduire de încredere pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără găzduire web fiabilă cu protecție DDoS, servere VPS VDS | ProHoster