Https adalah jargon yang paling sering dikampanyekan
oleh situs internet banking dan ecommerce. Benarkah https adalah
jaminan keamanan bertransaksi? Tipe serangan seperti apa yang bisa
dicegah dengan https dan tipe serangan apa yang tidak bisa dicegah
dengan https?
Apa yang Dijamin HTTPS ?
Bayangkan bila suatu saat anda menelpon Call Center
suatu bank untuk melakukan transaksi. Sangat penting bagi bank untuk
memastikan dulu siapa anda, sebelum melakukan transaksi seperti yang
anda minta. Karena melalui telepon, bank hanya bisa mendengar suara
anda, mungkin saja ada orang lain yang berpura-pura menjadi anda dan
menguras habis rekening anda.
Begitu pula di internet, ketika anda mengakses suatu
website, anda harus benar-benar yakin bahwa anda sedang mengakses server
yang benar, bukan situs palsu yang berminat untuk mencuri data rahasia
anda. Sangat berbahaya akibatnya bila anda terjebak mengakses situs
palsu, sebab itu artinya anda memberikan data rahasia anda pada orang
yang salah.
Inilah yang disebut dengan Authentication, yaitu
memastikan identitas, siapa anda. Ketika anda berkomunikasi dengan orang
lain, anda harus tahu betul dengan siapa anda berbicara.
Selain memastikan anda berbicara dengan orang yang
benar, sangat penting pula bahwa hubungan telpon antara anda dan bank
tidak didengarkan oleh orang lain, karena anda akan membicarakan hal
yang sensitif dan rahasia seperti PIN. Inilah yang disebut dengan
Confidentiality, yaitu kerahasiaan data, memastikan tidak ada kebocoran
data di tengah jalan.
Ketika anda mengakses internet, paket data yang anda
kirim akan berkelana dari satu server ke server lain sebelum mencapai
server tujuan. Sangat mudah bagi orang lain untuk melakukan sniffing,
mengintip data anda yang lewat karena internet adalah jaringan umum yang
bebas dipakai siapa saja.
Itulah dua hal utama yang dijamin oleh HTTPS, yaitu
Authentication (who are you speaking with?) dan Confidentiality (is
someone listening to your conversation?). Authentication dan
Confidentiality dalam https dijamin dengan perpaduan penggunaan
kriptografi simetris dan asimetris.
Public Key/Asymmetric Cryptography (PKC) and Symmetric Cryptography
Setiap enkripsi dan dekripsi pasti memerlukan kunci
rahasia (enkripsi/dekripsi tanpa kunci rahasia, itu namanya
encoding/decoding). Bila enkripsi dan dekripsi dilakukan hanya dengan
satu kunci yang sama, ini adalah jenis enkripsi simetris. Keunggulannya
adalah kecepatannya tinggi karena tidak enkripsi simetris tidak
membutuhkan komputasi yang rumit. Namun kelemahannya adalah kesulitan
dalam melakukan pertukaran kunci.
Bayangkan bila Alice ingin berkomunikasi dengan Bob
dengan kriptografi simetris. Sebelum bisa berhubungan, keduanya harus
menyepakati bersama kunci yang akan dipakai. Bagaimana cara
menegosiasikan kunci ini? Apakah dikirim melalui sms, email atau telpon?
Bukankah sms, email dan telpon bisa disadap?
Berkomunikasi dengan kriptografi simetris jadi seperti ayam dan telur. Enkrip dulu atau kunci dulu? Kalau enkrip dulu, kuncinya bagaimana? Kalau kunci dulu, bagaimana cara mengirim kunci dengan aman?
PKC datang membawa solusi (jadi seperti kampanye),
yaitu dengan penggunaan dua macam kunci, yaitu publik dan private. Jadi
Alice dan Bob masing-masing harus sudah mempunyai kunci public dan
private. Kunci public untuk diberikan pada orang lain (bukan kunci
rahasia), dan kunci private harus dirahasiakan. Bila Alice ingin
mengirim pesan ke Bob, maka Alice harus meng-enkrip pesannya dengan
kunci publik milik Bob. Untuk membaca pesan Alice, Bob bisa
men-dekripnya dengan kunci private Bob sendiri. Jadi ingat, bahwa kunci
untuk enkripsi dan dekripsi selalu berlawanan. Lawan dari kunci publik
adalah kunci private, lawan dari kunci private adalah kunci publik.
- Bila pesan di-enkrip dengan kunci publik, maka dekrip-nya dengan kunci private: Artinya hanya bisa dibuka oleh pemilik kunci private.
- Bila pesan di-enkrip dengan kunci private, maka dekrip-nya dengan kunci public: Artinya semua orang bisa men-dekrip.
Apa perlunya meng-enkrip pesan dengan kunci private?
Karena semua orang bisa membacanya. Kalau enkripsi dengan kunci publik
tujuannya untuk kerahasiaan (Confidentiality), maka enkripsi dengan
kunci private tujuannya untuk Authentication: Memastikan siapa pembuat
pesan.
Bila pesan berhasil di-dekrip dengan kunci publik Bob berarti DIJAMIN pesan itu dibuat oleh Bob.
Man-in-the-Middle (MITM) Problem
PKC ternyata juga tidak terbebas dari masalah. Bayangkan bila Alice
ingin mengirim pesan ke Bob. Charlie sebagai orang ke-3 ingin
mendengarkan pesan dari Alice ke Bob. Berikut skenario tipu muslihat
Charlie:
- Sebelum bisa mengirim pesan rahasia. Alice meminta Bob untuk mengirimkan kunci publiknya.
- Bob mengirim kunci publiknya ke Alice.
- Sebelum tiba di Alice, kunci publik Bob dicatat Charlie dan diganti dengan kunci publiknya sendiri, lalu diteruskan ke Alice.
- Alice tertipu, mengira kunci publik yang diterimanya adalah kunci publik Bob, padahal itu milik Charlie.
- Alice mengenkrip pesannya dengan kunci publik Charlie (bukannya Bob), dan mengirimkannya ke Bob.
- Sebelum tiba di Bob, pesan Alice di-dekrip oleh Charlie dengan kunci private Charlie (karena enkripnya dengan kunci publik Charlie).
- Agar Bob tidak curiga, pesan yang telah di-dekrip itu, dienkrip lagi dengan kunci publik Bob yang sebelumnya sudah dicatat lalu dikirim ke Bob.
- Bob men-dekrip pesan itu dengan kunci private-nya, dan pesan itu dibaca oleh Bob seperti tidak terjadi apa-apa.
Dalam skenario tersebut, Charlie telah sukses
berperan sebagai Man-in-the-Middle yang menyadap pesan dari Alice ke Bob
tanpa disadari keduanya.
Serangan MITM itu bisa terjadi karena Alice tidak bisa memastikan bahwa pesan berisi publik key yang diterimanya adalah benar dari Bob. Sebab untuk bisa memastikan pesan itu dari Bob, maka pesan itu harus di-enkrip dengan kunci private Bob, dan di-dekrip oleh Alice dengan kunci public Bob, padahal Alice tidak tahu kunci public Bob.
Jadi mirip ayam dan telur juga kan? Untuk mendapatkan
kunci publik harus memastikan identitas pembuat pesan, sedangkan untuk
memastikan identitas pembuat pesan harus tahu kunci publik.
Pihak Penjamin: Solusi Mendapatkan Kunci Publik
Kita sudah melihat bahwa PKC juga memiliki kelemahan
terhadap serangan mitm. Agar serangan mitm tidak terjadi dibutuhkan
mekanisme untuk mendapatkan publik key yang benar.
Untuk memecahkan masalah ayam dan telur dalam PKC,
dibutuhkan bantuan pihak ke-3 sebagai pihak penjamin yang kunci
publiknya telah dikenal sebelumnya.
Mari kita buat ilustrasinya pengembangan dari kasus
mitm oleh Charlie sebelumnya, anggaplah pihak penjamin itu adalah Dedy
dengan kunci publik yang telah dikenal sebelumnya oleh Alice.
- Ketika Alice ingin mengetahui kunci publik Bob, maka Bob sebelumnya harus meminta Dedy untuk membuat surat jaminan yang berisi kunci publik Bob dan pernyataan bahwa Bob adalah orang baik dan rajin menabung.
- Kemudian surat itu di-enkrip dengan kunci private Dedy untuk memastikan bahwa surat itu benar dibuat oleh Dedy.
- Bila Alice bertanya pada Bob, “Hey Bob tolong kirim kunci publikmu, aku ada pesan rahasia untukmu”. Maka Bob akan mengirimkan surat jaminan dari Dedy pada Alice.
- Ketika surat jaminan yang dikirim Bob tiba di Alice. Alice bisa menguji identitas pembuat surat itu dengan cara men-dekrip dengan kunci publik Dedy yang sudah dikenalnya.
- Bila berhasil di-dekrip, maka surat jaminan itu benar dibuat oleh Dedy. Di dalam surat jaminan itu tertera juga kunci publik Bob. Kini Alice siap mengirim pesan rahasia pada Bob.
Bagaimana dengan Charlie? Bila Charlie nekat mengganti surat jaminan
Dedy dengan surat jaminan yang dibuatnya sendiri lalu mengirimnya ke
Alice. Maka Alice dengan mudah mengetahui bahwa surat ini palsu, karena
tidak bisa didekrip dengan kunci publik Dedy, artinya surat jaminan ini
bukan dibuat oleh Dedy.
Why We Need Authentication
Mungkin ada yang bingung sebenarnya untuk apa sih otentikasi server
itu? Bukankah kalau kita buka yahoo.com, pasti yang menjawab adalah
servernya yahoo, bukan servernya google. Kan tidak mungkin bisa tertukar
begitu. Benarkah tidak mungkin tertukar?
Ketika kita mengakses situs, yang kita tulis di address bar browser
biasanya adalah domain name, misalkan yahoo.com. Selanjutnya browser
akan meminta DNS untuk menerjemahkan yahoo.com menjadi IP address. Baru
kemudian browser bisa berkomunikasi dengan server.
Nah, proses pengubahan dari domain name ke IP address ini yang
menjadi celah yang memungkinkan seseorang tersesat ke server yang salah.
Dengan teknik ARP poisoning, DNS cache poisoning, atau proses routing
yang sengaja disesatkan, seseorang bisa saja bukan mengakses server yang
benar.
Untuk itulah kita perlu Authentication.
Authentication: Who are you speaking with.
Mari kita bahas bagaimana https menjamin
authentication. Sebelum berkomunikasi dengan server, browser
mensyaratkan server untuk meng-otentikasi dirinya, menunjukkan bukti
identitasnya. Bukti identitas ini berbentu sertifikat yang
ditanda-tangani (digital signature) oleh penjamin yang disebut
Certificate Authority, mirip dengan ilustrasi Dedy sebagai penjamin Bob
di atas. Dalam sertifikat tersebut tertera antara lain: nama perusahaan,
alamat web, dan kunci publik.
Ketika browse menghubungi server, untuk menunjukkan
identitas dan memberikan kunci publiknya, server akan mengirimkan
sertifikatnya. Kemudian browser akan memverifikasi apakah sertifikat itu
ditanda-tangani oleh penjamin (CA) yang trusted (browser memiliki
daftar trusted CA). Jika tanda tangan digital CA pada sertifikat itu
valid, maka dijamin sertifikat itu benar dibuat oleh CA. Selain itu
browse juga akan memeriksa tanggal expired sertifikatnya dan
membandingkan alamat web yang ada di sertifikat dengan server yang
sedang dihubungi. Jika semuanya valid, browser akan mengambil kunci
publik server yang tertera pada sertifikat.
Oke, dari sertifikat yang kamu beri, saya dapat kunci publik ini. Kalau kamu punya pasangan kuncinya (private key), berarti kamu benar-benar server yang disebut di sertifikat ini.
Dengan kunci publik server di tangan, browser akan
mencoba melakukan komunikasi dengan mengirimkan pesan ter-enkripsi. Bila
server bisa menjawab pesan ini, maka server itu pasti punya kunci
private, dengan kata lain serve itu pasti benar-benar pemilik kunci
publik yang tertera di sertifikat.
Dengan cara ini browser akan yakin sedang terhubung dengan server yang benar.
Confidentiality: Is Someone Listening to Your Conversation?
Sebenarnya https bukanlah satu protokol,
tapi kumpulan protokol (dalam hal ini saja banyak yang salah paham)
yang diberi nama HTTPS. Kumpulan protokol yang membentuk https adalah
http yang ditumpangkan di atas SSL (Secure Socket Layer) atau TLS
(Transport Layer Security). Jadi kalau dalam layer posisinya dari bawah
ke atas adalah TCP -> SSL/TLS -> HTTP. SSL dan TLS adalah protokol
yang secure dalam artian seluruh data yang dikirim dan diterima dalam
keadaan ter-enkrip. Sedangkan http adalah protokol yang tidak secure
karena datanya telanjang. Perkawinan antara http dan (SSL atau TLS)
menghasilkan keturunan yang lebih unggul dari kedua orang tuanya, yang
disebut https.
Mari kita lihat interaksi yang terjadi
antar protokol tersebut. Bayangkan anda sedang membuka halaman https,
dan browser anda sudah terhubung dengan web server dalam mode secure
(biasanya muncul tanda gembok di status bar). Ketika anda meng-klik
sebuah link, yang terjadi adalah browser mengirimkan request GET dalam
protokol HTTP (tidak ter-enkrip). Request GET ini diserahkan pada layer
SSL/TLS untuk di-enkrip. Hasil enkripsi request GET ini kemudian
diserahkan pada layer TCP untuk dikirim ke tujuan (server web).
Ketika request GET yang ter-enkrip ini
sampai di tempat tujuan (server web). Pertama paket akan di-handle oleh
layer TCP. Kemudian paket itu diserahkan pada layer SSL/TLS untuk
di-dekrip. Hasilnya adalah paket dalam format HTTP tidak ter-enkrip.
Baru kemudian paket HTTP ini diserahkan pada yang berhak, yaitu server
web (misal:Apache). Setelah Apache selesai menjawab, dia akan
mengirimkan balasan request GET tersebut dalam bentuk paket HTTP. Paket
ini akan di-enkrip dulu oleh layer SSL/TLS sebelum diserahkan pada layer
TCP dan dikirim ke client (browser yang mengirimkan request GET
semula).
SSL menjamin kerahasiaan komunikasi
end-to-end, artinya mulai dari ujung server hingga ujung client. Tidak
ada satu pun server atau komputer yang menjadi perantara antara client
hingga server bisa membaca isinya.
Kombinasi Symmetric dan Asymmetric Cryptography
Dalam https komunikasi yang terjadi
semua ter-enkripsi. Seperti yang sudah saya jelaskan di awal,
masing-masing jenis enkripsi memiliki keunggulan dan kelemahan.
Keunggulan kriptografi simetris adalah kecepatannya yang tinggi.
Sedangkan keunggulan kriptografi asimetris adalah kemudahan dalam
pertukaran kunci.
Oleh karena itu https memadukan kedua
jenis enkripsi ini. Pada tahap awal komunikasi, client dan server
berkomunikasi dengan menggunakan kriptografi asimetris. Enkripsi ini
hanya ditujukan untuk menyepakati dan saling bertukar kunci rahasia yang
akan dipakai dengan kriptografi simetris. Jadi pertukaran kunci rahasia
dilakukan dalam keadaan ter-enkrip dengan kriptografi asimetris.
Setelah kedua pihak memegang kunci
rahasia yang sama, komunikasi selanjutnya dilakukan dengan kriptografi
simetris karena lebih murah dan cepat.
Apa yang Tidak Dijamin HTTPS ?
SSL hanya menjamin authentication dan
confidentiality saja. Padahal masih banyak attack yang mengancam
aplikasi web, antara lain SQL Injection, XSS, CSRF, Denial of Service,
Brute-Force-Attack. Ya benar, semua serangan terhadap aplikasi web
selain sniffing dan mitm bisa dilakukan tanpa hambatan.
Selain itu kerahasiaan data hanya
berlaku di perjalanan antara client hingga server. Sedangkan di dalam
komputer client atau server itu sendiri, data memungkinkan untuk disadap
dengan penyadapan di level sistem operasi.
Hebatnya lagi, karena komunikasi antara
client dan server ter-enkrip, maka IDS (Intrusion Detection System)
tidak berguna. IDS bekerja dengan cara meng-inspeksi paket yang masuk
(persis seperti sniffer). Bila paket mengandung pattern yang
mencurigakan, maka IDS akan membunyikan alarm. Bila komunikasi antara
client dan server ter-enkrip, maka IDS tidak bisa melihat isi paket,
apakah mengandung pattern yang berbahaya atau tidak.
0 komentar:
Post a Comment