SSL Pinning dan Pentester Ngawur

Tulisan ini saya buat untuk mengkritik para pentester yang nggak paham apa tujuan SSL pinning dan menyusahkan programmer. Kasusnya adalah SSL Pinning yang bisa dibypass dianggap sebagai bug, sedangkan cara bypassnya memerlukan Magisk dan Frida. Ibaratnya di dunia fisik begini: kalau ada jendela terbuka, itu bug. Tapi setelah jendelanya ditutup, dilaporkan lagi begini: pak, ini ada celah keamanannya: kalau kita masuk ke dalam rumah, ternyata jendelanya bisa dibuka dari dalam pak. Logikanya: kalau seseorang sudah bisa masuk, ngapain lagi buka jendela?

Maksud dan Tujuan SSL Pinning

Mari kita mundur sejenak, sebenarnya apa sih tujuan SSL Pinning? Saya sudah membuat artikel yang lebih detail di sini, tapi sekarang saya akan membahas versi sederhananya saja: tujuan SSL pinning adalah memastikan kita terhubung ke server yang memang kita tuju. Ini untuk mencegah MITM (Man In the Middle Attack) jika attacker dapat membuat certificate baru yang dipercaya oleh aplikasi/sistem operasi.

Jika aplikasi mengecek tidak melakukan SSL Pinning maka ada dua kelemahan yang bisa dieksploitasi. Pertama adalah melakukan attack terhadap ponsel spesifik, dan kedua adalah membuat certificate yang dipercaya secara default oleh sistem operasi.

Kasus pertama adalah menyerang ponsel secara spesifik. Jika ada seseorang berhasil menginstall root certificate di HP, maka semua koneksi bisa diintercept. Menginstall root certificate di HP orang lain butuh akses fisik HP tersebut, atau butuh menipu user untuk melakukan langkah cukup panjang menginstall certificate ini. Risiko ini cukup kecil: kalau seseorang bisa ditipu menginstall certificate ini, kemungkinan bisa ditipu dengan cara lain. Selain itu serangan ini tidak scalable: harus menargetkan satu demi satu user. Jika ada user tertipu menginstall root certificate dari seseorang, user lain tidak terpengaruh.

Kasus kedua adalah jika seseorang berhasil membuat certificate yang dipercaya semua HP. Ini sulit dilakukan, sebuah perusahaan penerbit sertifikat perlu dihack untuk menghasilkan certiticate ini. Kasus lain adalah jika pemerintah negara tertentu memaksa penerbit sertifikat untuk membuat sertifikat SSL baru. Sejauh ini hanya pernah beberapa kali terjadi di dunia ini. Jika ini terjadi, maka semua pengguna aplikasi bisa diintercept. Ini pun dengan asumsi attacker bisa menyisipkan diri pada koneksi user.

Kasus berikutnya yang mungkin terjadi adalah pada perusahaan level enterprise yang menerapkan deep packet inspection dan menginstall sertifikat perusahaan di setiap gadget pegawai. Dalam kasus ini: tanpa SSL pinning perusahaan bisa menyadap segala data pegawai.

Jika SSL pinning sudah diterapkan, maka semua kasus tersebut tidak akan bisa dilakukan. Meski user ditipu, maka root certificate tidak akan dipercaya. Kasus kedua juga tidak mungkin: jika ada sertifika tidak sama dengan yang dipakai saat ini, maka tidak akan dipercaya.

Kasus enterprise: dengan SSL pinning, maka aplikasi menjadi tidak bisa dipakai di lingkungan jaringan perusahaan. Ini salah satu alasan kenapa kadang SSL pinning tidak diperlukan untuk aplikasi yang tidak terlalu penting (bukan aplikasi banking/kesehatan/personal lain): perusahaan kadang ingin menginspeksi data yang lewat, karena ada kemungkinan aplikasi menyelundupkan data perusahaan keluar.

Ketika diberikan aplikasi untuk dipentest, maka saya akan membongkar aplikasi tersebut (melakukan reverse engineering), untuk membypass SSL Pinningya. Kadang bahkan tidak perlu RE, tapi cukup memakai berbagai skrip default bypass SSL pinning. Semua SSL pinning bisa dibypass jika kita diberikan aplikasinya.

Ini bukan bug

Nah sekarang ada pentester yang menganggap bahwa certificate pinning yang bisa dibypass dengan HP yang diroot (dan butuh magisk hide) adalah sebuah kelemahan. Bahkan ada yang menganggap levelnya tinggi dan harus (mandatory) untuk diperbaiki. Begini ya: kalau attacker bisa mengakses HP orang, maka orang itu harusnya lebih khawatir lagi dengan apa yang bisa dilakukan orang itu di HP-nya.

Ada yang beralasan: tapi attacker jadi bisa melihat dan memodifikasi data yang dikirim dari sisi client. Kalau HP sudah diroot, maka modifikasi apapun bisa dilakukan. Sebelum data masuk ke fungsi SSL data juga bisa dimodifikasi. Jadi jika sudah diroot maka semua sudah bebas diubah. Sudah berhasil masuk rumah, tidak perlu lagi membuka jendela.

Bahkan jika kode program bisa dibaca, maka tidak perlu lagi bypass SSL pinning. Kita bisa manual mengirimkan request HTTP/HTTPS tanpa perlu menjalankan aplikasinya.

Kemampuan mengubah dan melihat data yang dikirim ke server bukanlah bug. Kita bisa melihat traffic semua aplikasi web (gmail, banking, dsb), dan bisa mengubah data apapun. Selama server mengecek dan menolak data yang tidak valid, maka itu bukan bug.

Pentester Ngawur

Beberapa pentester, terutama yang tidak paham pemrograman melakukan hal ngawur berikut:

  • menganggap SSL pinning harus tidak bisa dibypass (tidak benar: SSL pinning cukup harus ada jika memang dibutuhkan). Jika dalam kasus khusus ada bypass yang bisa dilakukan secara remote, maka itu bisa dianggap bug. Tapi jika bypass perlu akses fisik, install magisk, dsb, itu bukan bug
  • tidak bisa memberikan contoh kode pada programmer seperti apa yang seharusnya dilakukan. Ini artinya pentesternya tidak mengerti programming

Menurut saya ini berbahaya:

  • Jika hal seperti ini dianggap bug, maka programmer akan menghabiskan waktu untuk mengurusi hal tidak penting
  • Pentester tidak menemukan bug lain, sehingga mencari-cari hal untuk dilaporkan (membuang waktu banyak orang)

Semua SSL Pinning bisa dibypass

Membypass SSL pinning hanya masalah waktu saja. Ada yang butuh 5 menit, dan ada yang butuh beberapa hari. Tapi semua bisa dibypass. Kalau ada pentester yang menyatakan bahwa ada SSL pinning yang mustahil dibypass, berarti pentester tersebut kurang capable.

Kalau pentester menyatakan bahwa waktu yang diberikan tidak cukup untuk membypass pinning, maka itu wajar. Kadang pentest satu aplikasi hanya diberikan waktu 3 hari tapi aplikasinya diproteksi dengan protektor komersial yang mahal dan butuh setidaknya 2 hari untuk melakukan bypass. Dalam kasus ini akan lebih mudah memberikan versi tanpa SSL pinning untuk pentester.

Deteksi Root

Saat ini untuk Android, deteksi root hanya bisa dilakukan secara terbatas. Semua pengecekan root juga bisa dibypass. Silakan berikan contoh kepada saya aplikasi di Play Store yang mampu mendeteksi Magisk Hide. Di iOS juga sama: semua bisa dibypass (misalnya dengan kernbypass), walau saat ini tidak ada cara generik seperti Frida.

Di masa depan, yang mungkin dilakukan adalah menggunakan Hardware Attestation dari SafetyNet (saat ini SafetyNet masih bisa dibypass oleh Frida). Tapi saat ini kebanyakan device Android belum mensupport ini. Mulai iOS 14, Apple juga mulai mendukung hardware Attestation.

Belajarlah Memprogram

Hal yang bikin gemes adalah jika pentester tidak bisa mengetahui:

  • apa risiko security yang sesungguhnya
  • tidak bisa menyarankan dengan benar solusinya

Bagian kedua ini: banyak yang tidak tahu bahwa berbagai metode deteksi Frida, Magisk, dsb yang ada di Internet semuanya sudah kalauarsa dan mereka memberi saran yang salah ke programmer. Mereka tidak punya kapabilitas untuk membuat program kecil dalam Android untuk mengetes apakah solusi yang mereka tawarkan itu masih berlaku untuk versi Magisk/Frida baru.

Penutup

Tulisan ini saya buat karena sudah beberapa kali saya diminta teman untuk menjelaskan masalah seperti ini. Jadi kali lain jika ada yang menanyakan, saya bisa menunjukkan langsung artikel ini. Masih ada waktu bagi para pentester ngawur untuk bertobat dan menjadi pentester lebih baik.

Catatan tambahan: Jika mengacu pada OWASP bagian network communication, maka yang perlu ditest adalah: SSL pinning diimplementasikan dengan benar. Jika sudah benar tapi bisa dibypass dengan berbagai tool, maka itu bukan temuan. Di tulisan OWASP itu dijelaskan mengenai cara bypass dengan tujuan agar pentester bisa mengetes aplikasinya.

Sudah beberapa kali ada aplikasi yang SSL Pinningnya sulit dibypass, dan pentester menyatakan bahwa: aplikasinya aman. Ternyata setelah pinningnya saya bypass, ada banyak bug IDOR yang seharusnya ketemu jika pentester beneran menguji aplikasinya. Padahal aplikasinya sudah terbit di play store/app store.

Tinggalkan Balasan

This site uses Akismet to reduce spam. Learn how your comment data is processed.