in Basic Concept, Web Security

Lebih Dalam tentang OpenID

Seperti yang saya janjikan sebelumnya, kali ini akan saya jelaskan lebih dalam lagi tentang OpenID. Apa saja yang akan saya bahas? Saya akan mengajak anda untuk melihat lebih dalam lagi komunikasi yang terjadi antara provider,consumer dan user browser. Jika pada artikel sebelumnya saya hanya menceritakan bahwa consumer berkomunikasi secara langsung atau tidak langsung dengan provider, kali ini saya akan tunjukkan data apa saja kah yang dipertukarkan di antara mereka untuk memastikan identitas seseorang?


Setup the Lab

Agar mudah melakukan sniffing, saya harus mensetup lab sederhana yang bisa saya kendalikan sepenuhnya. Dari ke-3 entitas yang terlibat dalam openid, lebih mudah bagi saya untuk membuat consumer website di komputer saya sendiri daripada membuat provider. Sebab sniffing di sisi consumer atau di sisi provider hasilnya akan sama saja, jadi buat apa merepotkan diri dengan membuat provider.

Dalam lab ini consumer adalah wordpress dengan plugin OpenID yang saya install di localhost dengan XAMPP (php+mysql+apache), sedangkan provider saya pakai provider yang sama dengan artikel sebelumnya, yaitu PIP.VerisignLabs.com. Lengkap sudah, consumer dan provider sudah ada, kini saya siap mensniff komunikasi antara consumer dan provider dari sisi consumer.

Untuk melakukan sniffing komunikasi langsung antara consumer dan provider saya menggunakan tools Wireshark. Sedangkan komunikasi yang melalui browser (tidak langsung), saya menggunakan addon Firefox Live HTTP Header sebagai sniffer (walaupun addon ini hanya bisa menampilkan header http). Diagram lab saya bisa dilihat pada gambar berikut ini:

my lab

my lab

Skenario Simulasi

Untuk memahami detil komunikasi dalam openid, saya akan mensimulasikan pemakaian openid. Jadi skenarionya sederhana saja, saya akan login ke wordpress yang sudah saya install di komputer sendiri (localhost) menggunakan OpenID identifier: masrizki.ilmuhacking.com. Setelah itu saya akan diredirect ke halaman login PIP Verisignlabs dan juga melakukan otorisasi trust relationship. Kemudian saya akan dikembalikan ke halaman administrasi wordpress sebagai seorang contributor.

Login to WordPress using OpenID

Saya akan mulai simulasinya dengan login ke wordpress pada URL http://localhost/wordpress/wp-login.php. Pada kolom openid saya masukkan masrizki.ilmuhacking.com sedangkan kolom lainnya saya kosongkan. Berikut adalah gambar dari halaman login wordpress yang sudah mendukung openid di localhost.

wordpress login page

wordpress login page

Komunikasi http yang berhasil disniff ketika tombol Login diklik adalah (beberapa header yang tidak penting saya hapus):

Pada baris ke-9 terlihat parameter POST yang dikirim, diantara yang penting adalah:

  • openid_identifier: masrizki.ilmuhacking.com
  • redirect_to: http://localhost/wordpress/wp-admin/

openid_identifier menunjukkan identifier (url) openid yang dipakai untuk login, dan redirect_to menunjukkan url ketika semua proses authentication berhasil (bila login berhasil user akan masuk ke url tersebut). Setelah user mengklik submit, consumer akan mendownload file html yang ada di http://masrizki.ilmuhacking.com. Berikut sniffing download file tersebut:

File html yang didapatkan dari masrizki.ilmuhacking.com mengandung informasi server openid provider yang dipakai, yaitu http://pip.verisignlabs.com/server. Selain itu juga didapatkan lokasi file XRDS, di http://pip.verisignlabs.com/user/masrizki/yadisxrds, berikutnya consumer akan mendownload file XRDS dari url tersebut. Berikut sniffing komunikasi yang terjadi:

Setelah mendownload file html dari XRDS, berikutnya consumer akan meminta provider untuk melakukan authentication terhadap user tersebut. Untuk melakukannya consumer akan meminta browser untuk membuat request ke openid server provider di url: http://pip.verisignlabs.com/server. Ada dua cara untuk melakukan itu, yaitu dengan memberi response 302 Redirect atau memberi response 200 OK namun diberi html form auto-submit. Openid pada wordpress memilih memakai form auto-submit, dengan cara mengirimkan file html berikut sebagai response dari klik tombol Login di halaman login wordpress :

Pada file html tersebut terdapat tag FORM dengan method POST ke action url: http://pip.verisignlabs.com/server. Tadi saya menyebut auto-submit karena pada baris di paling bawah terdapat javascript yang melakukan submit, jadi tanpa perlu user klik tombol submit, form tersebut sudah automatically submit. Namun bila di browser user tidak mendukung javascript, maka user harus mengklik tombol “Continue” secara manual. Ketika HTTP POST ini disubmit, berikut sniffing komunikasi yang terjadi:

Ternyata submit post ke URL http://pip.verisignlabs.com/server, dibalas dengan 302 Redirect ke URL: http://pip.verisignlabs.com/login.do, yang tidak lain adalah halaman login. Hal ini terjadi karena user tersebut belum login di PIP sehingga diarahkan ke halaman login, bila user sudah login maka tidak diarahkan ke halaman login, tapi langsung ke halaman authorize trust relationship.

Login to OpenID Provider

PIP login page

PIP login page

Perhatikan pada gambar tersebut halaman login menggunakan https. Ternyata pada saat browser request ke http://pip.verisignlabs.com/login.do lagi-lagi diresponse dengan 302 Redirect ke url https://pip.verisignlabs.com/login.do. PIP meredirect request ke halaman login selalu ke halaman yang menggunakan https demi menghindarkan user dari serangan sniffing dan mitm attack. Setelah user memasukkan username dan password dan mengklik tombol “sign in”, berikut adalah sniffing komunikasi yang terjadi:

Terlihat username dan password disubmit ke URL: https://pip.verisignlabs.com/login_user.do dan submit POST tersebut diresponse dengan 302 Redirect ke URL: https://pip.verisignlabs.com/dataExchange?target=render&identityName=masrizki . URL tersebut adalah url yang berisi halaman otorisasi dan verifikasi trust relationship dengan wordpress yang menjadi consumer.

trust relationship verification

trust relationship verification

Setelah user menentukan trust relationship dan mengisi beberapa data, berikut adalah sniff komunikasi POST yang terjadi ketika user mensubmit datanya.

Terlihat setelah user mensubmit datanya dan trust relationshipnya, PIP akan me-redirect user ke wordpress seperti semula. Perhatikan juga bahwa URL yang akan dituju oleh Redirect mengandung beberapa parameter yang gunanya untuk menyampaikan status proses authentication. HTTP Redirect ini merupakan jawaban (response) dari request yang diajukan consumer ketika user pertama login di halaman wordpress.

Direct vs Indirect Communication

Direct vs Indirect Communication

Komunikasi ini adalah komunikasi tidak langsung, berawal dari consumer melakukan request ke provider (melalui perantaraan user), kemudian setelah user berhasil terotentikasi di provider, provider memberikan response balik ke consumer (melalui perantaraan user). Mengirimkan request/response melalui perantaraan user bisa dilakukan dengan mengirimkan status 302 Redirect atau memberikan html berisi auto-submit form. Untuk lebih jelasnya perhatikan gambar di samping.

Cross Check Authentication to Provider

Kini tiba langkah terakhir yang akan dilakukan consumer, yaitu melakukan cross-check/verifikasi, apakah benar user ini telah terotentikasi dengan sukses di provider. Consumer melakukan komunikasi langsung dengan provider tanpa perantaraan user dengan mengirimkan request POST berikut ini:

Terlihat pada request tersebut consumer membawa serta semua parameter yang didapatkannya dari provider (melalui browser redirect pada paragraf sebelumnya). Parameter tersebut akan dicocokkan dengan data yang dimiliki provider, bila memang benar terotentikasi maka responsenya adalah seperti pada baris ke-13 pada sniffing di atas, yaitu: is_valid:true. Setelah mengetahui bahwa user telah terotentikasi dengan sukses, maka selanjutnya user diijinkan masuk ke wordpress dan selesailah proses authentication dengan openid ini. Setelah selesai proses authentication, tidak ada lagi hubungan dan keterkaitan antara consumer dan provider, masing-masing memiliki session yang terpisah.

Write a Comment

Comment

This site is using OpenAvatar based on

  1. saya mau tanya kenapa facebook saya tidak bisa login ya trus ada tulisan facebook disable kenapa ya ???
    Bisa bantu saya tidak untuk login kembali ke facebook saya
    atas bantuannya saya ucapkan terima kasih
    email saya [email protected]