VPN itu apa sih? Virtual Private Network adalah teknologi untuk membuat serangkaian perangkat terhubung ke jaringan virtual yang sama. Jadi seolah-olah berbagai device tergabung di satu jaringan. Di posting ini saya akan membahas VPN dari sudut pandang user, sampai kalau ingin membuat VPN sendiri.
VPN banyak digunakan di dunia corporate atau enterprise. Penggunaan yang umum adalah untuk menghubungkan berbagai kantor regional dengan kantor lain atau dengan kantor pusat. VPN juga dipakai oleh remote worker untuk mengakses resource kantor (server, printer, dsb) yang tidak bisa diakses dari umum. Dengan koneksi VPN, komputer rumah atau laptop masuk ke jaringan perusahaan. Jika browsing via VPN maka , seolah-olah kita mengakses internet dari perusahaan tersebut.
Beberapa bank juga menggunakan koneksi VPN untuk partnernya, jadi berbagai perusahaan yang ingin mengakses sistem bank harus lewat VPN. Ini hanya layer keamanan tambahan, selain itu masih digunakan password dan juga token.
VPN juga bisa digunakan untuk berinternet lewat server orang lain. Sebenarnya prinsipnya sama dengan sebelumnya: kita bergabung di jaringan privat dan dari situ mengakses internet. Tujuannya memakai VPN biasanya:
- Membypass blokir
- Mendapatkan konten tertentu, misalnya daftar film Netflix di Thailand dan USA sangat berbeda
- Menyembunyikan IP, misalnya untuk wartawan yang takut dipersekusi
Di VPN seperti ini kita hanya numpang lewat untuk internet saja. Ini tidak beda (dari sisi security) seperti numpang WIFI di tempat publik atau rumah orang: pemilik access point bisa mengakses traffic tertentu (kata kuncinya di sini adalah: tertentu). Akan saya jelaskan lebih lanjut di artikel ini.
Siapa penyedia layanan VPN ini? untuk perusahaan ya mereka sendiri. Selain itu ada penyedia VPN, baik yang gratis maupun berbayar. Kita juga bisa menyewa sendiri VPS (Virtual Private Server) atau dedicated server, biayanya tidak jauh beda dengan VPN berbayar.
Contents
Keamanan Aplikasi Gratis
Ada berbagai catatan dalam keamanan VPN gratis. Pertama adalah keamanan aplikasi itu sendiri, terlepas dari aplikasi VPN atau bukan, sebuah aplikasi bisa melakukan banyak hal di ponsel kita tanpa kita sadari.
Di OS Android yang lama, sebuah aplikasi bisa dengan mudah mendapatkan isi phone book, imei, dsb. Bahkan di Android ataupun iOS terbaru pun jika pengguna memencet “YES” untuk berbagai permission, maka aplikasi tetap bisa mendapatkan banyak informasi dari ponsel Anda.
Bahkan jika tidak mendapatkan informasi apapun, sebuah aplikasi bisa menjalankan coin miner di ponsel Anda. Artinya ponsel Anda akan dipakai untuk mendapatkan uang dari berbagai cryptocurrency. Efek buruk menjalankan coin miner terus menerus adalah: HP jadi panas dan akan mengurangi masa hidup batere ponsel Anda.
Tentunya aplikasi apapun juga bisa menampilkan iklan. Ini adalah salah satu sumber pendapatan VPN gratis. Cara dengan iklan ini walaupun menyebalkan tapi masih lebih baik daripada mencuri data.
Secara umum: menginstall aplikasi tidak dikenal bisa berbahaya. Jika Anda bukan orang teknis: jangan menginstall aplikasi dari luar Play Store atau App Store. Aplikasi dari app store dan play store sudah diverifikasi dan biasanya aman (walau kadang ada juga yang lolos).
Untuk aplikasi atau game dari luar app store, risikonya cukup besar. Semakin tua versi sistem operasi Anda, semakin berbahaya. Jika aplikasi mendapatkan akses “root”, maka aplikasi tersebut bisa melakukan apa saja. Termasuk juga mengganti semua aplikasi Anda (termasuk banking) dengan aplikasi lain yang ada backdoornya.
Jadi sekali lagi: sebuah aplikasi bisa berbahaya, baik itu aplikasi VPN ataupun bukan jika sumbernya tidak jelas.
Keamanan VPN
Khusus untuk aplikasi VPN, ada tambahan bahwa aplikasi tersebut bisa memonitor data yang keluar dan masuk. Dalam hal ini kemampuan sebuah aplikasi VPN untuk memonitor dan memodifikasi data tidak beda dengan access point WIFI yang Anda pakai di publik.
Sekarang ke bagian yang saya sebutkan di atas mengenai traffic tertentu yang bisa diakses oleh VPN atau penyedia WIFI gratis. Sebagai pemilik access point WIFI di rumah saya, saya bisa:
- mengetahui koneksi ke server mana saja
- memonitor traffic tertentu
- mengarahkan koneksi dari satu server ke server lain
- mengganti isi koneksi yang tidak terenkripsi
Perlu dicatat bahwa ada koneksi ke server yang terenkripsi dan tidak terenkripsi. K0neksi yang tidak dienkripsi bisa dimodifikasi. Ini seperti menulis pesan dengan kartu pos, semua bisa membacanya dan mencoret/mengubah isinya.
Apakah koneksi terenkripsi aman? Tergantung aplikasinya. Koneksi terenkripsi seperti memakai amplop untuk mengirim pesan. Tentunya bisa saja seseorang di tengah untuk membongkar amplopnya dan menggantinya dengan amplop baru. (Catatan teknis: sebenarnya tidak semudah itu, kita perlu menginstall root certificate di ponsel).
Sebuah aplikasi yang tidak aman akan menerima “amplop” dari siapa saja asalkan pesannya masih dalam amplop. Tapi aplikasi yang memakai SSL Pinning akan memeriksa detail dan cap di amplop tersebut dan tidak akan mau melakukan koneksi jika amplopnya berbeda.
Perlu dicatat juga: defaultnya jika kita mengetik alamat saja: bni.co.id, maka defaultnya akan memakai koneksi tidak terenkripsi, lalu kita diforward ke koneksi yang terenkripsi.
Beberapa situs mengijinkan koneksi HTTP lalu memforward ke koneksi HTTPS. Contohnya ketika kita mengetik bni.co.id, maka
Tapi beberapa tidak, misalnya jika kita mencoba ibank.klikbca.com maka koneksi tidak bisa dilakukan. Tapi koneksi awal ini bisa menimbulkan masalah: koneksi yang tidak terenkripsi ini bisa dimodifikasi, misalnya jadi Location: https://bni.co.id.bank-negara-indonesia-secure-connection.com/ dengan bank-negara-indonesia-secure-connection.com adalah server saya.
Jadi ketika mengetik pertama kali secara manual, ada risiko bisa terarahkan ke server lain. Tapi jika koneksinya dilakukan langsung dengan aplikasi ebanking maka ini lebih aman. Karena:
- alamat sudah di-hardcode ke URL HTTPS
- Umumnya aplikasi bank sudah mengimplementasikan SSL Pinning (setidaknya yang saya cek)
Secara umum, mengganti SSL sebuah koneksi langsung akan ditolak oleh kebanyakan aplikasi (ini ditolak di level library SSL). Jika ingin agar koneksinya diterima, kita bisa menginstall root certificate. Dengan menginstall root certificate, kebanyakan aplikasi (yang tidak memakai SSL Pinning) akan bisa dimonitor.
Bagaimana memeriksa jika kita menginstall Root Certificate? dari menu ini di Android. Jika Anda menemukan list ini tidak kosong, dan Anda tidak pernah menginstallnya, tandanya ada sesuatu yang tidak beres (Android akan memberi peringatan network monitoring)
Di dalam gambar berikut saya menginstall beberapa certificate saya sendiri dan dari sebuah aplikasi yang saya pakai.
Atau ini di iOS (di About: Certificate Trus Settings)
Saya sudah mengecek beberapa aplikasi perbankan seperti: BCA, Mandiri, BRI, BNI, semuanya sudah memakai SSL Pinning. Jadi secara umum: memakai VPN gratis yang didownload dari play store aman untuk transaksi banking melalui aplikasi banking.
Aplikasi VPN bisa mencatat beberapa hal mengenai browsing Anda meskipun tidak bisa melihat semua traffic:
- Bisa tahu Anda mengunjungi situs tertentu (terutama jika situs tersebut hanya punya 1 IP)
- Bisa tahu besarnya data yang lewat (jadi bisa tahu apakah kira-kira Anda mengupload sesuatu atau sekedar mendownload/browsing)
- Bisa tahu kapan Anda mengakses situs-situs tersebut
Data-data tersebut (beserta IMEI, dsb) bisa dijual ke pihak lain.
Ada satu lagi bahaya aplikasi VPN, ini pernah ketahuan di aplikasi HolaVPN. Perlu diketahui bahwa informasi mengalir dua arah: dari komputer/ponsel ke provider VPN dan sebaliknya. Sebuah aplikasi VPN bisa saja menjual bandwith Anda. Artinya: pengguna layanan VPN lain bisa saja dilewatkan trafficnya melalui ponsel/komputer Anda. Jika ternyata isi trafficnya illegal (misalnya pornografi anak), Anda bisa kena masalah.
VPN untuk mengamankan Wifi Publik
VPN yang tidak bisa dipercaya sama bahayanya dengan WIFI publik. VPN yang bisa dipercaya, bisa menambah keamanan ketika memakai WIFI publik. Dengan VPN, seluruh traffic keluar sampai ke server VPN terenkripsi, dan artinya pemilik WIFI publik tidak bisa menguping.
Sekali lagi: dalam kasus ini yang bisa menguping adalah provider VPN. Jadi pilih provider yang terpercaya, atau setup sendiri server VPN Anda.
Mensetup VPN Sendiri
Sulitkah mensetup VPN sendiri? sebenarnya tidak asalkan punya dasar teknis administrasi Linux/Windows. Ada beberapa skrip di Internet yang bisa dijalankan untuk mengotomasi ini. Contoh yang cukup terkenal adalah openvpn road warrior. Cukup butuh semenit untuk membuat sebuah server dedicated ataupun VPS dengan skrip ini:
https://github.com/Nyr/openvpn-install
Skrip tersebut ditujukan untuk mensetup server OpenVPN dan menghasilkan file ovpn yang siap dipakai dari berbagai OS (Linux, Windows, OS X, iOS dan Android). Cara memakai file ovpn yang dihasilkan skrip: copy file tersebut ke device Anda, install software OpenVPN (bisa dicari di app store/play store), lalu buka filenya dan tekan “connect”.
Tentunya ini bukan satu-satunya cara mensetup VPN. Ada banyak software VPN lain, contohnya di blog ini saya pernah membahas cara setup software tinc. Secara umum setup berbagai software VPN cukup memakan waktu.
Dulu saya pernah juga memberikan layanan VPN + Hack supaya bisa menginstall aplikasi secara tidak resmi di Blackberry 10 via OTA (tapi layanannya sudah saya tutup). Ini memakai Openswan dengan skrip custom. Videonya masih ada:
Bagaimana dengan biayanya? Sebuah server dedicated bisa didapatkan dengan harga mulai 10an USD. VPS bisa didapatkan dengan harga mulai 1 USD. Dengan 5 USD kita bisa mendapatkan VPS DigitalOcean yang berlokasi di Singapore yang cukup cepat diakses dari Indonesia. Tentunya satu server (baik dedicated maupun VPS) bisa dipakai beberapa orang, jadi biayanya bisa lebih rendah lagi
DNS alternatif
Sebenarnya jika hanya ingin mengatasi blokir internet, DNS alternatif bisa digunakan. Contohnya yang mudah adalah 1.1.1.1 dari Cloudflare.
Prinsip pemblokiran sebuah situs adalah seperti ini:
- Ketika akan melakukan koneksi ke facebook.com, kita perlu IPnya, ini ditanyakan ke DNS
- DNS akan memeriksa apakah ada di daftar blokir, jika ya, maka redirect ke internet positif
- Jika aman, makan DNS akan memberikan IP yang benar.
Jadi untuk mengatasinya ada beberapa cara:
- Menggunakan server DNS alternatif. Tapi kadang port 53 diblok ke server lain, sehingga kita hanya bisa memakai DNS milik ISP
- Memakai DNS over HTTPS (memakai port 443). Ini mudah memakai DNS Cloudflare: https://1.1.1.1/ (silakan download aplikasi yang tersedia di website tersebut)
- Mengedit sendiri file hosts dan memasukkan kombinasi host name dan IP address secara manual. File ini ada di
/etc/hosts
(Linux/BSD), di/etc/private/hosts
(OS X), atau%SYSTEMROOT%\System32\Drivers\etc\hosts
(Windows)
Membuat Software VPN Sendiri
Mensetup dan memakai software VPN tidak membuat Anda jadi ahli dalam soal VPN. Jika ingin benar-benar paham, cobalah membuat software VPN sendiri dengan API yang disediakan oleh berbagai sistem operasi.
Mengapa membuat VPN ini latihan yang bagus:
- Anda jadi mengerti pemrosesan paket jaringan
- Anda jadi mengerti bagaimana mengimplementasikan enkripsi paket jaringan
- Bisa paham jika ingin mengevaluasi security sebuah aplikasi VPN
Software provider VPN akan membuat jalur terenkripsi dari sebuah komputer ke komputer lain. Untuk membuat software VPN sendiri, kita perlu pemahaman yang cukup baik mengenai networking sampai ke level paket jaringan.
Di tahap awal, kita bisa membuat VPN yang tidak terenkripsi sama sekali . Kemudian kita bisa menambah enkripsi sederhana, lalu yang lebih rumit.
Pertama agar software ini bisa menerima dan meneruskan paket jarigan, maka kita perlu membuat sebuah network interface baru untuk menerima dan mengirim paket data. Biasanya ada dua jenis network interface: level paket di layer 3 (Internet Protocol/IP atau protokol lain) dan layer 2 (ethernet frame)
Setelah interface VPN bisa digunakan, kita perlu memberitahu berbagai program agar memakai interface tersebut untuk mengirim dan menerima data. Ini bisa dilakukan dengan mengubah default route agar melalui interface tersebut. Perlu dicatat: program yang memiliki privilege tinggi bisa membypass VPN dengan langsung memakai network interface tertentu.
Ada banyak ide yang bisa dan sudah banyak yang diimplementasikan yang bisa dilakukan dengan mengintersepsi network:
- Membuat ad blocker berbasis VPN
- Membuat network sniffer (Contoh yang sudah ada di play store: Packet capture)
- Membuat protokol VPN yang jika disniff seolah-olah hanya saling mengirimkan gambar (padahal ada datanya di dalam gambar tersebut dengan steganografi).
Dengan membuat sendiri software VPN kita bisa terbebas dari spyware yang mungkin ada di software seperti kasus Onavo dari Facebook.
Network interface virtual: TUN dan TAP
Untuk sistem operasi Linux, ada dua network jenis network adapter virtual TUN dan TAP yang bisa dibuat. Bedanya dengan network interface fisik adalah: jika ada paket jaringan masuk ke interface ini, maka paket tersebut tidak dikirimkan ke hardware, tapi ke sebuah program yang bisa kita buat sendiri (user space program). Program ini yang perlu kita buat yang akan memproses tiap paket jaringan yang lewat.
TUN (Tunel Network) bekerja di layer 3 sedangkan TAP bekerja di layer 2. Dalam kebanyakan aplikasi kita cuma butuh TUN saja karena hanya butuh melewatkan paket network, tidak perlu memproses level ethernet frame.
Untuk mengakses tunnel device ini kita bisa menggunakan API tertentu atau dengan ioctl. Tutorial contohnya bisa dibaca di sini:
Windows tidak memiliki API sederhanya untuk user mode networking. Network driver di Windows perlu diimplementasikan dengan NDIS dan ini cukup kompleks plus butuh code signing yang cukup repot dan mahal. Untungnya sudah ada yang membuatkan driver TUN dan TAP . Kita bisa memakai kedua driver ini (OpenVPN, Tinc, dan berbagai software lain memakai pendekatan ini).
VPN API di Android
Di Android kita tidak bisa dengan mudah membuat interface network ini. Jika kita ingin membuat service VPN baru, kita perlu menggunakan API VPN Service. API ini sebenarnya hanya membungkus interface TUN dan sekaligus mensetup default route agar lewat VPN. Dengan API ini, program kita perlu membaca raw packet, mengenkrip paket tersebut, lalu meneruskannya.
Untuk parsing paket IP, Android tidak menyediakan API-nya. Dalam kasus tertentu kita bisa parsing sendiri header IP-nya (misalnya sekedar membaca destination IP dan port). Untuk kasus kompleks kita perlu library stack IP. Contoh kasus kompleks misalnya jika kita ingin menangani stream SSL lalu mendekrip stream tersebut.
Kebanyakan aplikasi VPN yang saya periksa menggunakan native library untuk parsing dan processing paket jaringan (tidak diparse di Java). Jika ingin mempelajari bagaimana membuat aplikasi VPN sendiri, ada banyak proyek open source Android yang bisa dilihat, misalnya:
https://github.com/M66B/NetGuard
VPN API di iOS dan macOS
Apple menyediakan beberapa API untuk VPN. Secara high level kita bisa memakai protokol VPN yang sudah ada dan sekedar membuat aplikasi untuk mengendalikan koneksinya (misalnya membuat layar login yang lebih bagus atau terkoneksi ke sistem billing). Secara low level, kita bisa membuat protokol kita sendiri
https://developer.apple.com/documentation/networkextension
Untuk memakai ini di iOS kita perlu memakai Network Extension Entitlement, tadinya memakai ini di iOS butuh ijin khusus dari Apple, tapi sekarang sudah tidak perlu lagi. Contoh penggunaan API sudah disediakan Apple di:
https://github.com/ios-sample-code/SimpleTunnel
Penutup
VPN adalah nama sebuah teknologi yang sebenarnya cakupannya cukup luas, tapi sekarang banyak dipersempit jadi sekedar: mengakses internet lewat komputer orang lain. Lalu mulai ada banyak informasi tidak benar berdasarkan penyederhanaan ini.
Semoga informasi yang di tulisan ini bisa memperluas wawasan Anda mengenai VPN. Mungkin ada juga yang jadi ingin mengimplementasikan protokol VPN sendiri.
Saya tidak menyarankan layanan VPN tertentu, karena takut salah:
- Kadang ada layanan super populer (dulu Hola) yang ternyata kemudian ketahuan tidak aman
- Ada layanan VPN yang sekarang aman, tapi nanti bisa saja berubah total, entah karena tekanan bisnis atau dibeli pihak lain
Jika butuh VPN:
- untuk sekedar keamanan pribadi (misalnya ketika memakai WIFI publik) setuplah VPN sendiri
- Jika ingin mengamankan diri dari pihak berwajib atau orang jahat pakailah TOR anonymity network
- Jika ingin mengakses konten dari negara lain: silakan pakai layanan berbayar