Mengapa Anda tidak menggunakan WireGuard

Baru-baru ini WireGuard menarik banyak perhatian, bahkan - ini adalah "bintang" baru di antara VPN. Tapi apakah dia sebagus kelihatannya? Saya ingin membahas beberapa pengamatan dan mempertimbangkan implementasi WireGuard untuk menjelaskan mengapa itu bukan solusi yang akan menggantikan IPsec atau OpenVPN.

Pada artikel ini, saya ingin menghilangkan prasangka dari beberapa mitos [seputar WireGuard]. Ya, akan butuh waktu lama untuk membaca, jadi jika Anda belum membuat secangkir teh atau kopi, maka sudah waktunya untuk melakukannya. Saya juga ingin mengucapkan terima kasih kepada Peter karena mengoreksi pikiran kacau saya.

Saya tidak menetapkan pada diri saya tujuan mendiskreditkan pengembang WireGuard, untuk mendevaluasi usaha atau ide mereka. Produk mereka adalah yang berfungsi, tetapi saya pribadi berpikir bahwa itu disajikan sama sekali berbeda dari apa sebenarnya - disajikan sebagai pengganti IPsec dan OpenVPN, yang pada kenyataannya sekarang sama sekali tidak ada.

Sebagai catatan, saya ingin menambahkan bahwa tanggung jawab untuk pemosisian WireGuard seperti itu terletak pada media yang membicarakannya, dan bukan proyek itu sendiri atau pembuatnya.

Belum ada banyak berita baik tentang topik kernel Linux belakangan ini. Jadi, kami diberitahu tentang kerentanan mengerikan dari prosesor, yang diratakan oleh perangkat lunak, dan Linus Torvalds membicarakannya terlalu kasar dan membosankan, bahasa utilitarian pengembang. Penjadwal atau tumpukan jaringan level nol - juga topik yang tidak terlalu jelas untuk majalah mengkilap. Dan kemudian WireGuard muncul.

Semuanya terdengar bagus di atas kertas: teknologi baru yang menarik.

Tapi mari kita lihat dia sedikit lebih hati-hati.

Dokumentasi Teknis WireGuard


Artikel ini didasarkan pada dokumentasi resmi WireGuard yang ditulis oleh Jason Donenfeld. Di sana ia menjelaskan konsep, tujuan, dan implementasi teknis [WireGuard] di kernel Linux.

Kalimat pertama berbunyi:

WireGuard [...] IPsec , / TLS, OpenVPN, , [].

Tentu saja, keunggulan utama dari semua teknologi baru adalah kesederhanaannya [dibandingkan dengan pendahulunya]. Tetapi VPN juga harus efisien dan aman .

Jadi, apa selanjutnya?

Jika Anda mengatakan bahwa Anda [dari VPN] tidak membutuhkan ini, maka Anda dapat mengakhiri bacaan. Namun, saya akan perhatikan bahwa tugas-tugas tersebut diajukan sebelum teknologi tunneling lainnya.

Yang paling menarik dari kutipan di atas terletak pada kata-kata "dalam banyak kasus", yang, tentu saja, diabaikan oleh pers. Dan di sinilah kita, di mana kita berakhir karena kekacauan yang diciptakan oleh kelalaian ini - dalam artikel ini.



Akankah WireGuard mengganti koneksi VPN [IPsec] saya antar situs?


Tidak. Tidak ada kemungkinan bahwa vendor besar seperti Cisco, Juniper dan lainnya akan membeli WireGuard untuk produk mereka. Mereka tidak “melompati kereta” saat bepergian, kecuali ada kebutuhan besar untuk itu. Nanti saya akan berbicara tentang beberapa alasan mengapa mereka mungkin tidak akan dapat menginstal produk WireGuard di papan tulis, bahkan jika mereka mau.

Akankah WireGuard mentransfer RoadWarrior saya dari laptop ke pusat data?


Tidak. WireGuard belum mengimplementasikan sejumlah besar fungsi penting saat ini sehingga dapat melakukan hal seperti ini. Misalnya, itu tidak dapat menggunakan alamat IP dinamis di sisi server terowongan, dan ini saja memecah seluruh skenario penggunaan produk yang serupa.

IPFire sering digunakan untuk saluran Internet berbiaya rendah, seperti DSL atau koneksi kabel. Ini masuk akal untuk bisnis kecil atau menengah yang tidak membutuhkan serat cepat.[Catatan dari penerjemah: jangan lupa bahwa dalam hal komunikasi, Rusia dan beberapa negara CIS jauh lebih maju daripada Eropa dan AS, karena kami mulai membangun jaringan kami jauh kemudian dan dengan munculnya Ethernet dan jaringan serat optik sebagai standar, lebih mudah bagi kami untuk membangun kembali. Di negara Uni Eropa atau AS yang sama, akses broadband xDSL dengan kecepatan 3-5 Mbps masih merupakan norma universal, dan sambungan serat optik menghabiskan sejumlah uang yang tidak realistis menurut standar kami. Oleh karena itu, penulis artikel berbicara tentang koneksi DSL atau kabel seperti biasa, daripada masa lalu kuno.] Namun, DSL, kabel, LTE (dan metode akses nirkabel lainnya) memiliki alamat IP dinamis. Tentu saja, kadang-kadang mereka tidak sering berubah, tetapi masih berubah.

Ada proyek yang disebut "wg-dynamic"Daemon ruang pengguna ditambahkan untuk mengatasi kekurangan ini. Masalah besar dengan skenario pengguna yang dijelaskan di atas adalah pemburukan situasi dengan pengalamatan IPv6 dinamis.

Dari sudut pandang distributor, semua ini juga tidak terlihat sangat bagus. Salah satu tujuan desain adalah untuk menjaga protokol tetap sederhana dan bersih.

Sayangnya, semua ini menjadi terlalu sederhana dan primitif, jadi kami harus menggunakan perangkat lunak tambahan untuk membuat seluruh desain ini layak dalam kondisi kehidupan nyata.

Apakah WireGuard mudah digunakan?


Belum. Saya tidak mengatakan bahwa WireGuard tidak akan pernah menjadi alternatif yang baik untuk meneruskan sebuah terowongan antara dua titik, tetapi sejauh ini hanya versi alfa dari produk yang seharusnya.

Tapi apa yang sebenarnya dia lakukan? Apakah IPsec benar-benar jauh lebih sulit untuk dioperasikan?

Tentu saja tidak. Penyedia IPsec telah mempertimbangkan hal ini dan mengirimkan produknya bersama dengan antarmuka seperti IPFire.

Untuk mengkonfigurasi terowongan VPN melalui IPsec, Anda akan memerlukan lima set data yang perlu Anda masukkan ke dalam konfigurasi: alamat IP publik Anda sendiri, alamat IP publik dari sisi penerima, subnet yang ingin Anda publikasikan melalui koneksi VPN ini dan dibagikan sebelumnya kunci. Dengan demikian, VPN dikonfigurasikan dalam beberapa menit dan kompatibel dengan vendor mana pun.

Sayangnya, ada beberapa pengecualian untuk cerita ini. Setiap orang yang mencoba meneruskan terowongan VPN melalui IPsec ke mesin di OpenBSD mengerti apa yang saya bicarakan. Ada beberapa contoh yang lebih menyakitkan, tetapi pada kenyataannya, praktik yang baik menggunakan IPsec jauh lebih banyak.

Tentang kompleksitas protokol


Pengguna akhir tidak perlu khawatir tentang kompleksitas protokol.

Jika kita hidup di dunia di mana ini adalah masalah nyata pengguna, maka kita sudah lama menyingkirkan SIP, H.323, FTP dan protokol lain yang dibuat lebih dari sepuluh tahun yang lalu yang tidak bekerja dengan baik dengan NAT.

Ada alasan mengapa IPsec lebih rumit daripada WireGuard: itu lebih banyak. Misalnya, otentikasi pengguna menggunakan login / kata sandi atau kartu SIM dengan EAP. Ini memiliki kemampuan yang diperluas untuk menambahkan primitif kriptografi baru .

Tetapi WireGuard tidak.

Dan ini berarti bahwa WireGuard akan pecah pada suatu titik, karena salah satu primitif kriptografi akan melemah atau sepenuhnya dikompromikan. Penulis dokumentasi teknis mengatakan ini:

Perlu dicatat bahwa WireGuard secara kriptografis percaya diri. Dia sengaja tidak memiliki fleksibilitas cipher dan protokol. Jika lubang serius ditemukan dalam primitif yang mendasarinya, semua titik akhir perlu diperbarui. Seperti yang dapat Anda lihat dari aliran kerentanan SLL / TLS yang sedang berlangsung, fleksibilitas enkripsi kini telah meningkat pesat.

Kalimat terakhir benar-benar benar.

Membangun konsensus di mana enkripsi untuk digunakan membuat protokol seperti IKE dan TLS lebih kompleks. Terlalu rumit? Ya, kerentanan cukup umum di TLS / SSL, dan tidak ada alternatif untuk mereka.

Tentang mengabaikan masalah nyata


Bayangkan Anda memiliki server VPN dengan 200 klien tempur, di suatu tempat di seluruh dunia. Ini adalah kasus penggunaan yang sangat standar. Jika Anda harus mengubah enkripsi, Anda harus mengirimkan pembaruan ke semua salinan WireGuard pada laptop, smartphone, dan sebagainya ini. Kirim pada saat bersamaan . Secara harfiah tidak mungkin. Diperlukan administrator yang mencoba melakukan hal ini berbulan-bulan untuk menerapkan konfigurasi yang diperlukan, dan perusahaan menengah akan benar-benar membutuhkan waktu bertahun-tahun untuk menjadi tuan rumah acara semacam itu.

IPsec dan OpenVPN menawarkan negosiasi sandi. Oleh karena itu, beberapa saat setelah Anda mengaktifkan enkripsi baru, yang lama akan berfungsi. Berkat ini, pelanggan saat ini akan dapat meningkatkan ke versi baru. Setelah pembaruan diluncurkan, Anda cukup mematikan enkripsi yang rentan. Dan itu saja! Selesai! kamu cantik! Dan pelanggan bahkan tidak akan menyadarinya.

Ini sebenarnya adalah kasus yang sangat umum untuk penyebaran besar, dan bahkan OpenVPN memiliki beberapa kesulitan. Kompatibilitas mundur penting, dan meskipun Anda menggunakan enkripsi yang lebih lemah, bagi banyak orang hal ini tidak menyebabkan bisnis tutup. Karena itu akan mengakibatkan kelumpuhan ratusan pelanggan karena ketidakmampuan untuk melakukan pekerjaan mereka.

Tim WireGuard telah membuat protokol mereka lebih sederhana, tetapi sama sekali tidak cocok untuk orang-orang yang tidak memiliki kontrol konstan atas kedua rekan dari terowongan mereka. Dalam pengalaman saya, ini adalah skenario yang paling umum.



Kriptografi!


Tapi apa enkripsi baru yang menarik yang digunakan oleh WireGuard?

WireGuard menggunakan Curve25519 untuk pertukaran kunci, ChaCha20 untuk enkripsi, dan Poly1305 untuk otentikasi data. Ini juga bekerja dengan SipHash untuk kunci hash dan BLAKE2 untuk hashing.

ChaCha20-Poly1305 distandarisasi untuk IPsec dan OpenVPN (via TLS).

Jelas, perkembangan Daniel Bernstein sangat sering digunakan. BLAKE2 adalah penerus BLAKE, finalis SHA-3 yang tidak menang karena kemiripannya dengan SHA-2. Jika SHA-2 diretas, ada kemungkinan besar bahwa BLAKE akan dikompromikan.

IPsec dan OpenVPN tidak perlu SipHash karena desainnya. Dengan demikian, satu-satunya hal yang tidak dapat digunakan dengan mereka saat ini adalah BLAKE2, dan hanya sampai standar. Ini bukan kelemahan besar, karena VPN menggunakan HMAC untuk menciptakan integritas, yang dianggap sebagai solusi yang kuat bahkan dalam hubungannya dengan MD5.

Jadi saya sampai pada kesimpulan bahwa semua VPN menggunakan perangkat kriptografi yang hampir sama. Oleh karena itu, WireGuard tidak lebih dan tidak kurang aman daripada produk lain yang relevan dalam hal enkripsi atau integritas data.

Tetapi bahkan ini bukan hal terpenting yang harus Anda perhatikan sesuai dengan dokumentasi resmi proyek tersebut. Bagaimanapun, yang utama adalah kecepatan.

Apakah WireGuard lebih cepat daripada solusi VPN lainnya?


Singkatnya: tidak, tidak lebih cepat.

ChaCha20 adalah stream cipher yang lebih mudah diimplementasikan dalam perangkat lunak. Ini mengenkripsi sedikit demi sedikit. Protokol blok, seperti AES, mengenkripsi blok 128 bit pada suatu waktu. Untuk mengimplementasikan dukungan perangkat keras, lebih banyak transistor akan diperlukan, oleh karena itu prosesor yang lebih besar datang dengan AES-NI, sebuah ekstensi ke set instruksi yang melakukan beberapa tugas dari proses enkripsi untuk mempercepatnya.

Diharapkan bahwa AES-NI tidak akan pernah menekan smartphone [dan itu memukul, - kira-kira. trans.]. Untuk ini, ChaCha20 dikembangkan - sebagai alternatif yang mudah dan ekonomis yang menghemat daya baterai. Oleh karena itu, mungkin berita bagi Anda bahwa setiap ponsel cerdas yang dapat Anda beli hari ini memiliki akselerasi satu atau yang lain untuk AES dan bekerja dengan enkripsi ini lebih cepat dan dengan konsumsi daya lebih sedikit dibandingkan dengan ChaCha20.

Jelas, hampir setiap prosesor desktop / server yang dibeli dalam beberapa tahun terakhir memiliki AES-NI.

Oleh karena itu, saya berharap AES melampaui ChaCha20 dalam setiap skenario. Dalam dokumentasi resmi WireGuard disebutkan bahwa berkat AVX512, ChaCha20-Poly1305 akan melampaui AES-NI, tetapi ekstensi dari rangkaian perintah ini akan tersedia hanya pada prosesor besar, yang sekali lagi tidak akan membantu dengan peralatan yang lebih kecil dan bergerak yang akan selalu bekerja lebih cepat dengan AES- NI.

Saya tidak yakin apakah ini bisa diramalkan selama pengembangan WireGuard, tapi hari ini fakta bahwa itu dipaku pada satu enkripsi sudah merupakan kelemahan yang mungkin tidak mempengaruhi kerjanya dengan sangat baik.

IPsec memungkinkan Anda bebas memilih enkripsi mana yang terbaik untuk aplikasi Anda. Dan tentu saja, ini diperlukan jika, misalnya, Anda ingin mentransfer 10 gigabyte atau lebih data melalui koneksi VPN.

Masalah integrasi Linux


Meskipun WireGuard telah memilih protokol enkripsi modern, ini sudah menyebabkan banyak masalah. Jadi, alih-alih menggunakan apa yang didukung oleh kernel di luar kotak, integrasi WireGuard telah tertunda selama bertahun-tahun karena kurangnya primitif ini di Linux.

Saya tidak sepenuhnya menyadari situasi di sistem operasi lain, tetapi mungkin tidak jauh berbeda dengan situasi di Linux.

Seperti apa realitas itu?


Sayangnya, setiap kali seorang klien meminta saya untuk membuat koneksi VPN untuknya, saya menemukan topik yang mereka gunakan kredensial dan enkripsi usang. 3DES dalam hubungannya dengan MD5 masih merupakan praktik umum, seperti AES-256 dan SHA1. Dan meskipun yang terakhir sedikit lebih baik - ini bukan sesuatu yang harus digunakan pada tahun 2020.

Untuk pertukaran kunci , RSA selalu digunakan - alat yang lambat namun cukup aman.

Klien saya terhubung dengan otoritas bea cukai dan organisasi dan lembaga negara lainnya, serta dengan perusahaan besar, yang namanya dikenal di seluruh dunia. Mereka semua menggunakan formulir permintaan yang dibuat beberapa dekade yang lalu, dan kemampuan untuk menggunakan SHA-512 sama sekali tidak pernah ditambahkan. Saya tidak bisa mengatakan bahwa ini entah bagaimana jelas memengaruhi kemajuan teknologi, tetapi jelas itu memperlambat proses perusahaan.

Saya sedih melihat ini, karena IPsec telah mendukung kurva elips lengah sejak tahun 2005. Curve25519 juga lebih baru dan lebih mudah diakses. Masih ada alternatif untuk AES, seperti Camellia dan ChaCha20, tetapi, jelas, tidak semuanya didukung oleh pemasok besar, seperti Cisco dan lainnya.

Dan orang-orang menggunakannya. Ada banyak kit Cisco, ada banyak kit yang dirancang untuk bekerja dengan Cisco. Mereka adalah pemimpin pasar di segmen ini dan tidak terlalu tertarik dengan inovasi apa pun.

Ya, situasi [di segmen korporasi] mengerikan, tetapi kami tidak akan melihat perubahan apa pun karena WireGuard. Produsen cenderung tidak pernah mengidentifikasi masalah kinerja dengan alat dan enkripsi yang sudah digunakan, mereka tidak akan melihat masalah saat menggunakan IKEv2 - dan karena itu mereka tidak mencari alternatif.

Secara umum, apakah Anda pernah berpikir untuk meninggalkan Cisco?

Tolak ukur


Sekarang mari kita beralih ke tolok ukur dari dokumentasi WireGuard. Meskipun [dokumentasi] ini bukan artikel ilmiah, saya masih mengharapkan para pengembang untuk mengambil pendekatan yang lebih ilmiah, atau menggunakan pendekatan ilmiah sebagai referensi. Setiap tolok ukur tidak berguna jika tidak dapat diperbanyak, dan terlebih lagi tidak berguna jika diperoleh di laboratorium.

Dalam pembuatan WireGuard untuk Linux, ia memanfaatkan GSO - Generic Segmentation Offloading. Berkat dia, klien membuat paket besar 64 kilobyte dalam ukuran dan mengenkripsi / mendekripsi dalam satu pendekatan. Dengan demikian, biaya panggilan dan implementasi operasi kriptografi berkurang. Jika Anda ingin memaksimalkan bandwidth koneksi VPN Anda, ini adalah ide yang bagus.

Tapi, seperti biasa, pada kenyataannya itu tidak sesederhana itu. Mengirim paket besar ke adaptor jaringan mengharuskan paket itu diiris menjadi banyak paket kecil. Ukuran pengiriman tipikal adalah 1.500 byte. Artinya, 64 kilobyte raksasa kami akan dibagi menjadi 45 paket (1240 byte informasi dan 20 byte header-IP). Kemudian, untuk sementara, mereka benar-benar memblokir operasi adaptor jaringan, karena mereka harus dikirim bersama dan segera. Akibatnya, ini akan menyebabkan lompatan prioritas, dan paket-paket seperti, misalnya, VoIP, akan antri.

Dengan demikian, throughput tinggi, yang diklaim oleh WireGuard dengan berani, dicapai dengan memperlambat operasi jaringan aplikasi lain. Dan tim WireGuard telah mengkonfirmasi kesimpulan saya ini.

Tapi mari kita lanjutkan.

Menurut tolok ukur dalam dokumentasi teknis, koneksi menunjukkan bandwidth 1011 Mbit / s.

Impresif.

Ini sangat mengesankan karena bandwidth teoritis maksimum koneksi Ethernet satu gigabit adalah 966 Mbit / s dengan ukuran paket 1.500 byte dikurangi 20 byte per header IP, 8 byte per header UDP dan 16 byte per header kawat itu sendiri. . Ada header IP lain dalam paket enkapsulasi dan lainnya dalam 20 byte TCP. Jadi dari mana datangnya bandwidth ekstra ini?

Dengan bingkai besar dan kelebihan GSO, yang telah kita bahas di atas, maksimum teoritis dengan ukuran bingkai 9000 byte adalah 1014 Mbit / dtk. Biasanya, throughput seperti itu tidak dapat dicapai dalam kenyataan, karena dikaitkan dengan kesulitan besar. Jadi, saya hanya dapat berasumsi bahwa pengujian dilakukan dengan menggunakan frame yang lebih tebal melebihi ukuran 64 kilobyte dengan maksimum teoritis 1023 Mbps, yang hanya didukung oleh beberapa adapter jaringan. Tetapi ini sama sekali tidak berlaku dalam kondisi nyata, atau hanya dapat digunakan di antara dua stasiun yang terhubung langsung satu sama lain, secara eksklusif di dalam tempat uji.

Tetapi karena terowongan VPN diteruskan antara dua host menggunakan koneksi Internet yang tidak mendukung frame besar sama sekali, hasil yang dicapai di stand tidak dapat dianggap sebagai standar. Ini hanyalah pencapaian laboratorium yang tidak realistis, yang tidak mungkin dan tidak berlaku dalam kondisi pertempuran nyata.

Bahkan duduk di pusat data, saya tidak akan bisa mentransfer frame yang lebih besar dari 9000 byte.

Kriteria penerapan dalam kehidupan nyata benar-benar dilanggar dan, seperti yang saya pikir, penulis "pengukuran" secara serius mendiskreditkan dirinya sendiri karena alasan yang jelas.



Secercah harapan terakhir


Situs web WireGuard banyak berbicara tentang kontainer dan menjadi jelas apa yang dimaksudkan untuk itu.

VPN sederhana dan cepat yang tidak memerlukan konfigurasi apa pun dan dapat digunakan dan dikonfigurasikan dengan alat orkestrasi besar, seperti Amazon di cloud mereka. Secara khusus, Amazon menggunakan fitur perangkat keras terbaru yang saya sebutkan sebelumnya, misalnya - AVX512. Ini dilakukan untuk mempercepat pekerjaan dan tidak terikat ke x86 atau arsitektur lainnya.

Mereka mengoptimalkan bandwidth dan paket yang ukurannya melebihi 9000 byte - ini akan menghasilkan bingkai besar yang dienkapsulasi untuk berkomunikasi wadah satu sama lain, atau untuk operasi cadangan, membuat foto atau menggunakan wadah ini. Bahkan alamat IP dinamis tidak akan mempengaruhi operasi WireGuard dalam kasus skenario yang saya jelaskan.

Tidak buruk dimainkan. Implementasi yang brilian dan protokol referensi yang sangat tipis.

Tapi itu tidak cocok untuk dunia di luar pusat data yang Anda kontrol sepenuhnya. Jika Anda mengambil risiko dan mulai menggunakan WireGuard, Anda harus membuat kompromi konstan dalam pengembangan dan implementasi protokol enkripsi.

Kesimpulan


Mudah bagi saya untuk menyimpulkan bahwa WireGuard belum siap.

Itu dipahami sebagai solusi ringan dan cepat untuk sejumlah masalah dengan solusi yang ada. Sayangnya, demi solusi ini, ia mengorbankan banyak fitur yang akan relevan bagi sebagian besar pengguna. Itu sebabnya tidak dapat menggantikan IPsec atau OpenVPN.

Agar WireGuard menjadi kompetitif, ia perlu menambahkan setidaknya konfigurasi alamat IP dan perutean dan konfigurasi DNS. Jelas, inilah yang dibutuhkan saluran terenkripsi.

Keamanan adalah prioritas utama saya, dan saat ini saya tidak punya alasan untuk percaya bahwa IKE atau TLS entah bagaimana terganggu atau rusak. Enkripsi modern didukung di keduanya, dan mereka telah diuji selama puluhan tahun beroperasi. Jika sesuatu yang lebih baru tidak berarti bahwa itu adalah sesuatu, itu lebih baik.

Interoperabilitas sangat penting ketika Anda menghubungi pihak ketiga yang stasiunnya tidak Anda kendalikan. IPsec adalah standar de facto dan didukung hampir secara universal. Dan itu berhasil. Dan tidak peduli bagaimana tampilannya, secara teori, WireGuard di masa depan mungkin tidak kompatibel bahkan dengan versi yang berbeda dari dirinya sendiri.

Setiap perlindungan kriptografi diretas cepat atau lambat dan, karenanya, harus diganti atau diperbarui.

Menyangkal semua fakta ini dan secara membabi buta ingin menggunakan WireGuard untuk menghubungkan iPhone Anda ke workstation rumah Anda hanyalah sebuah lokakarya tentang menempelkan kepala Anda di pasir.

All Articles