Dekripsi HTTPS menggunakan Fiddler dan Dampaknya pada Mobile Application

Standard

Oke, HTTPS atau HTTP over SSL diciptakan untuk mencegah traffic sniffing dan tampering. Terus, kok bisa di dekripsi? gimana caranya?

Kali ini Saya akan menggunakan tools bernama Fiddler (download link di akhir artikel), Saya tidak akan menjelaskan bagaimana cara untuk mendekripsi sebuah traffic HTTPS, namun lebih kepada bagaimana sebuah traffic HTTPS dapat didekripsi oleh Fiddler

Bagaimana bisa Fiddler ini mendekripsi traffic HTTPS?

Ada baiknya sebelum membaca artikel ini lebih lanjut, anda membaca artikel terkait bagaimana SSL bekerja dan bagaimana SSL Handshake dibangun di link ini: https://adefirmantriangga.wordpress.com/2016/08/01/apa-itu-ssl/

Fiddler menggunakan teknik/metode man-in-the-middle attack untuk mengintercept traffic sebuah koneksi HTTPS.

Kepada aplikasi, Fiddler berpura-pura menjadi web server yang dituju. dan Kepada Web Server yang dituju, Fiddler berpura-pura sebagai aplikasi/browser yang akan mengakses. Penjelasan ini diilustrasikan dengan gambar dibawah ini.

Main_the_middle

Secara dinamis, Fiddler menghasilkan Fake Certificate guna menjalankan tipu muslihat ini kepada Client (baik web browser maupun aplikasi).

Ingat Kembali! Ketika Client akan berkoneksi kepada suatu Server, Client akan meminta Server untuk mengirimkan certificate tersebut kepada Client. Sesuai Gambar diatas, ketika Fiddler mengidentifikasi adanya Client yang meminta Certificate kepada Server, Attacker (Fiddler) langsung mengirimkan Fake Certificate kepada Client, sehingga koneksi pun terjadi.

SSL Handshake ini dimanfaatkan oleh Fiddler, ketika sebuah Client meminta identitas berupa Digital Certificate ke Server, Server mengirimkan Digital Certificate yang didalamnya juga terdapat Public Key server tersebut untuk mengenkripsi data yang akan dikirimkan oleh Client. Client tidak menyangka bahwa yang mengirimkan Digital Certificate Public Key itu bukanlah Server yang sebenarnya dituju, melainkan Fiddler yang berpura-pura menjadi server melalui teknik MitM diatas. Secara otomatis, Fiddler dapat mendekripsi data yang dikirimkan oleh Client menggunakan Private Key yang dimilikinya walaupun datanya telah dienkripsi sebelumnya, jelas saja wong Public Key yang digunakan untuk Enkripsi itu Public Key-nya Fiddler. (ingat kembali konsep Asynchronous Cryptography atau Public key – Private Key Cryptography)

Untuk mendekripsi traffic HTTPS anda cukup masuk ke menu Tools > Fiddler Options > HTTPS > Decrypt HTTPS

Memang, untuk membuat koneksi diatas memungkinkan dalam sebuah real-world scenario, hal tersebut agak susah dilakukan, karena kita harus masuk ke perangkat korban dan set-up proxy perangkat korban agar diarahkan ke IP Address komputer kita. Namun hal itu dapat dilakukan juga secara anonymous menggunakan teknik ARP Poisoning atau APR menggunakan Tools seperti Cain & Abel yang dilakukan kepada Router / Access Point.

Oke kembali lagi ke FIddler, Karena Fiddler memproduksi Fake Certificate dan bukanlah sebuah Certificate yang diterbitkan oleh Trusted Root Certificate Authority, Browser anda tidak akan mengenali Certificate yang dikirim oleh Attacker (Dengan asumsi bahwa Attacker adalah pengguna Fiddler). Ketika sebuah browser tidak mengenali Certificate Authority yang terdapat pada Digital Certificate, Browser akan memunculkan sebuah warning seperti gambar dibawah ini:

IE Cert Error

Lho? kok bisa?

Setiap browser memiliki daftar Certificate Authorities yang secara default telah terdapat pada paket instalasi browser tersebut, Berikut adalah contoh daftar Certificate Authority yang telah terdaftar secara default oleh Mozilla: https://mozillacaprogram.secure.force.com/CA/IncludedCACertificateReport

Sehingga, apabila ada sebuah server yang mengirimkan digital certificate yang diterbitkan oleh Certificate Authorities diluar daftar diatas, browser akan mengeluarkan peringatan.

Nah, hal diatas juga berlaku pada Mobile Platform khususnya Android, Android juga telah memiliki daftar Certificate Authorities yang secara default seperti pada link ini http://www.andreabaccega.com/blog/2010/09/23/android-root-certification-authorities-list/

Untuk dapat melanjutkan browsing dengan kondisi munculnya Pop Up pada browser seperti gambar diatas, User harus mengklik “Add Security Exception” atau “Proceed blablabla unsafe” (Saya lupa kata-kata persisnya)

Oke, sekarang bagaimana caranya supaya Client tidak mengeluarkan peringatan pada browser, pada sistem operasinya (khususnya android dan windows seperti gambar dibawah ini)? Caranya adalah dengan menginstall certificate tersebut dan membuatnya terdaftar sebagai “Trusted” di device kita.

Catatan: selain pada browser/aplikasi, sistem operasi pun juga memiliki daftar Certificate Authorities yang dipercaya. seperti pada Windows, disebut dengan Windows Trust Store / Windows Certificates Store

Windows Trust Prompt

Install/Trust Fake Certificate pada Windows

fdEDM

Install/Trust Fake Certificate pada Android.

Saktinya, Fiddler melakukan dekripsi melalui fake certificate ini secara on-the-fly, artinya Kita tidak perlu melakukan instalasi certificate ke Certificate Store / Trust Store pada perangkat kita. Tidak seperti tools-tools lain seperti Burp Proxy, OWASP ZAP, dll. Mungkin ada suhu-suhu yang baca artikel ini, bisa memberi masukan lebih detil kenapa Fiddler tidak perlu install Certificate seperti tools-tools diatas yang Saya sebutkan.

Nah Sayangnya, aplikasi android yang bertindak sebagai “browser” untuk berkoneksi dengan server, masih banyak yang menggunakan Self Signed Certificate, alias Certificate yang tidak memerlukan verifikasi karena di-verifikasi sendiri. tidak melalui Trusted Root CA

Dengan metode MitM seperti yang dijelaskan diatas, seorang Attacker dapat melihat data yang dikirimkan oleh aplikasi kepada server secara cleartext seperti layaknya HTTP traffic biasa dan ini tentunya sangat berbahaya.

 

Masih banyak aplikasi android yang rentan terhadap hal ini dengan masih mengimplementasikan fungsi org.apache.http.conn.ssl.AllowAllHostnameVerifier atau SSLSocketFactory.ALLOWALLHOSTNAME_VERIFIER. Ini sama saja dengan mempercayai semua certificate yang diberikan oleh Server kepada Client. sekalipun oleh entitas yang ngaku-ngaku sebagai server seperti Fiddler ini, berikut adalah contoh Certificate yang diberikan oleh Fiddler:

 

Untuk mencegah Man-in-the-Middle menggunakan Fake Certificate seperti ini, Android memiliki teknik pengamanan yang disebut dengan Certificate Pinning.

Penjelasan lebih lengkap mengenai Certificate Pinning dapat dibaca di artikel Saya disini:

Intinya, teknik ini mendefinisikan Certificate yang dinilai Trusted secara benar-benar spesifik pada source code aplikasi (hardcoded). Artinya kalau Certificate yang ditawarkan Server tidak sama dengan Certificate yang telah didefinisikan secara spesifik pada Source Code aplikasi, maka Koneksi tidak akan terjadi antara aplikasi dengan server. If you dont trust the Server, don’t establish the connection.

Saya sudah mencoba hampir semua aplikasi mobile milik perusahaan-perusahaan Tech Startup di Indonesia, dan hampir semuanya sudah mengimplementasikan teknik ini. Sebut saja Gojek, Grab, Traveloka, Bukalapak, Tokopedia, Lazada, dll.


Biasanya, apabila kita melakukan MitM menggunakan Fiddler pada aplikasi-aplikasi yang telah menerapkan Certificate Pinning, akan ada popup seperti “Koneksi gagal” “Gangguan Jaringan” dsb, karena memang aplikasi tidak mau terkoneksi kalau Certificate yang ditawarkan oleh Server tidak “Match” dengan apa yang ada di Source Code.

Penutup

Oke, apakah sebenarnya yang dilakukan Fiddler? apakah Fiddler ini sebenarnya menunjukkan vulnerability dan security holes pada HTTPS / SSL? Jawabannya TIDAK. Karena sebenarnya Kita (User) sudah diperingatkan browser apabila ada Untrusted Connection yang ingin berkoneksi dengan kita. Kalau User tetap ngeyel dan memilih “proceed” atau “Add to Security Exception”, ya itu sih Usernya yang salah dan ga aware.

Human is the weakest link in the Security Chain, makanya ada yang bilang sebenarnya sumber insiden keamanan itu penyebabnya dari Layer 8, alias manusianya itu sendiri. memang, Security Awareness Program is really really important.

 

 

 

Nice to Know:

Apa itu SSL: https://adefirmantriangga.wordpress.com/2016/08/01/apa-itu-ssl/

Apa itu Certificate Authority: https://adefirmantriangga.wordpress.com/2016/08/01/apa-itu-certificate-authority-ca/

Apa itu Digital Certificates: https://adefirmantriangga.wordpress.com/2016/08/01/apa-itu-digital-certificates/

 

Sumber dan Referensi:

Fiddler Download Page: https://www.telerik.com/download/fiddler

How Fiddler Works: http://www.enhanceie.com/fiddler/help/httpsdecryption.asp

Decrypting Using Fiddler: https://thetechl33t.com/2014/07/12/decrypting-https-ssltls-tunnels-using-fiddler/

Android Transport Layer Security: https://manifestsecurity.com/android-application-security-part-10/

 

Disclaimer:

Semua tulisan Saya adalah berdasarkan eksplorasi dan pemahaman Saya yang terbatas sejauh ini, Pembaca bebas memberikan masukan apabila ada yang kurang tepat. CMIIW abis lah pokoknya.

One thought on “Dekripsi HTTPS menggunakan Fiddler dan Dampaknya pada Mobile Application

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s