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.

Lanjutkan membaca “SSL Pinning dan Pentester Ngawur”

Membuat Burp Extension

Burp adalah tool intercepting proxy proprietary yang bisa digunakan untuk melakukan penteting aplikasi web (dan juga mobile yang memakai koneksi HTTP/HTTPS). Tool ini seperti Zaproxy yang pernah saya bahas di posting yang lain, tapi Burp sifatnya tertutup (tidak open source). Tool ini sangat populer di kalangan pentester dan bounty hunter.

Burp ada versi gratis serta berbayarnya, tapi versi gratisnya memiliki keterbatasan tidak bisa menyimpan session, sehingga tidak cocok untuk pekerjaan pentest professional. Versi professionalnya 399 USD per tahun. Memang cukup mahal, tapi bagi saya tool ini cukup membantu proses pentest, jadi saya berlangganan versi pronya. Dilihat dari sudut pandang lain biaya ini tidak mahal: biaya transportasi harian 20 ribu rupiah sehari selama 300 hari sudah lebih mahal daripada harga langganan burp setahun.

Walau sudah membeli lisensi Burp, tapi saya juga masih memakai Zaproxy. Masing-masing punya kelebihan dan kekurangannya sendiri. Beberapa fitur sudah ada lama di Zaproxy (misalnya launch built in web browser) baru ada di Burp, dan juga sebaliknya. Contoh fitur lain yang tidak ada di burp adalah headless scan (ada extension untuk ini, tapi sudah tidak diupdate, dan tidak jalan di versi baru). Secara umum Burp lebih cepat dari zaproxy dan lebih stabil, selain itu banyak riset dilakukan oleh PortSwigger (perusahaan pembuat burp) yang langsung dijadikan extension Burp.

Lanjutkan membaca “Membuat Burp Extension”

Secure coding: memproses password

Topik memproses password ini sebenarnya topik sederhana, tapi banyak developer yang tidak tahu. Di artikel ini akan saya jelaskan bagaimana cara yang baik memproses password dari mulai sejak dimasukkan user, sampai masuk ke database. Saya juga akan menjelaskan mengenai kemungkinan kebocoran password di file log, baik log aplikasi maupun log server (web server dan mungkin server lain).

Kecepatan hash di GPU saya yang sudah relatif tua
Kecepatan hash di GPU saya yang sudah relatif tua

Di tulisan ini saya banyak menggunakan kata “jika mungkin”. Alasannya adalah:

  • kadang sistem perlu diintegrasikan dengan sistem yang sudah ada, jadi beberapa hal tidak bisa diubah tanpa mengubah sistem yang sudah ada
  • kadang library yang dibutuhkan tidak tersedia di bahasa/teknologi yang dipakai
  • kadang ada batasan tertentu (requirement dari user/atasan/pemerintah)
  • kadang ada batasan hardware (misalnya algoritma terlalu kompleks untuk embedded system)

Menerima password dari user

Password sebaiknya dibaca dengan API/fungsi yang sudah disediakan untuk tujuan itu. Contohnya di form web kita memakai input type=”password”, di program Java versi console kita bisa memakai Console.readPassword. Jangan sok pintar membuat sendiri form input (misalnya dengan manual membaca key satu karakter demi satu karakter), atau membuat perilaku yang tidak standar.

Sekarang ini OS Mobile (iOS dan Android) memiliki password manager built in, tapi ini tidak berfungsi jika form login tidak standar. Jika memang ingin membuat yang custom, pastikan bisa bekerja dengan password manager standard milik sistem.

Jika password merupakan bagian dari login, tampilkan form user dan password di satu layar. Ini akan membantu password manager mengetahui password mana yang bisa dimasukkan secara otomatis. Saat ini sebagian password manager sudah bisa menangani form yang terdiri dari banyak halaman (halaman pertama hanya isian user/email, dan halaman kedua pertanyaan password), tapi secara umum hal ini kurang baik.

Lanjutkan membaca “Secure coding: memproses password”

Write-up Singkat SpiderLabs CTF 2020

Sudah lama saya tidak ikutan CTF online selain Flare-On, alasannya sama dengan kebanyakan orang lain: sibuk. Tapi tahun ini ada rekan yang kerja di TrustWave dan perusahaannya mengadakan CTF: SpiderLabs CTF, jadi saya penasaran sedikit ingin melihat soal-soalnya. Karena nggak berniat bermain penuh, saya mendaftar dengan nama team yang belum pernah saya pakai sebelumnya: pokedora (pokemon + doraemon, kesukaan anak-anak).

Ternyata saya bisa menyelesaikan banyak, sampai sekitar 6 jam sebelum lomba berakhir masih masuk peringkat 3, dan akhirnya ketika bangun tadi pagi sudah tergeser dan berakhir di peringkat 6. Peringkat 100 besar akan mendapatkan T-shirt.

Awalnya saya mengerjakan sendiri, lalu di akhir saya dibantu oleh Faco dan Abdillah Muhammad. Saya menyelesaikan 26 soal dari 29 soal yang kami selesaikan. Karena jumlahnya cukup banyak, saya tidak punya cukup waktu untuk menuliskan detail semuanya, jadi di sini akan saya berikan Write-up singkatnya saja. Selain itu alasan lainnya adalah: saya tidak menyimpan banyak screen capture (karena tadinya tidak berniat main sampai lama).

Lanjutkan membaca “Write-up Singkat SpiderLabs CTF 2020”

Mengenal Scripting Zed Attack Proxy (ZAP)

Zed Attack Proxy (ZAP/Zaproxy) adalah intercepting proxy untuk pentesting aplikasi berbasis web. ZAP bisa dipakai untuk aplikasi web maupun aplikasi mobile/desktop yang memakai HTTP/HTTPS/Websocket. Jika belum mengenai ZAP, saya pernah menuliskan dasarnya di artikel hacking aplikasi web dengan zaproxy sekitar 2.5 tahun yang lalu. Sekarang saya ingin meneruskan dengan pengenalan scripting ZAP. Dengan scripting, kita bisa mengotomasi atau menambahkan fitur baru pada ZAP.

Sebenarnya tadinya saya ingin menampilkan banyak skrip, tapi setelah saya review lagi, sebagian besar skrip saya tertarget khusus untuk client tertentu dan tidak bisa saya sebarkan. Sebagian script lain hanya modifikasi kecil dari script komunitas yang sudah open source.

Add-ons vs Script

ZAP bisa ditambah fiturnya melalui dua cara: add-ons dan script. Add-on ditulis dalam Java tidak terbatas kemampuannya dan bahkan bisa dipakai untuk menambahkan bahasa scripting baru. Script lebih mudah dibuat dan dijalankan tidak perlu dicompile, mudah reload dan testnya, tapi kemampuannya terbatas.

Langkah untuk membuat Add-ons seperti ini: kita perlu menulis kode dalam bahasa Java, mengcompilenya, dan meload Add-on-nya. Contoh hal yang bisa dilakukan Add On: menambah berbagai fitur di menu ZAP, bisa mengubah tampilan, membuat dialog baru, menambah bahasa scripting baru, dsb.

Script sifatnya lebih sederhana: kita bisa mengedit dan menjalankan script langsung di dalam ZAP sendiri. Defaultnya script bisa ditulis dalam Javascript, dan Zest tapi kita bisa memakai bahasa lain jika menginstall add-on-nya (misalnya sudah ada add-on untuk Python dan Ruby).

Beberapa bahasa scripting yang disupport oleh ZAP

Script komunitas

Sebelum membuat script sendiri, sebaiknya cek dulu apakah sudah ada yang membuat skrip serupa. Saat ini sudah ada repositori skrip komunitas di:

Lanjutkan membaca “Mengenal Scripting Zed Attack Proxy (ZAP)”

Protokol Penelusuran Kontak Google/Apple

Dalam masa pandemi ini, Google dan Apple bekerja sama dalam proyek untuk penelusuran kontak yang tetap menjaga privasi. Ini merupakan salah satu dari beberapa protokol tracing yang saat ini sedang bersaing di berbagai negara. Sebagian protokol yang direncanakan di berbagai negara sifatnya tersentralisasi, dan sebagian terdesentralisasi. Apple dan Google membuat protokol terdesentralisasi dan menyerahkan masalah pembuatan aplikasi untuk end user ke masing-masing negara.

Saat ini hampir semua ponsel sudah memiliki fitur Bluetooth Low Energy (BLE). BLE ini sekarang digunakan untuk koneksi berbagai device yang sudah sangat populer, misalnya jam pintar dan timbangan pintar. Dengan protokol contact tracing, BLE bisa digunakan untuk menyiarkan data yang mengumumkan keberadaan kita dan sekaligus mencatat keberadaan ponsel-ponsel di sekitar kita. Jika ada orang yang kemudian hari didapati positif, kita bisa diberi tahu jika pernah berdekatan dengan orang tersebut.

Protokol Google/Apple Privacy-Preserving Contact Tracing Project  dibuat diilhami oleh protokol DP-3T (Decentralized Privacy-Preserving Proximity Tracing). Salah satu alasan Google dan Apple mengimplementasikan ini di level sistem operasi karena berbagai batasan aplikasi biasa ketika mengakses bluetooth di latar belakang. Dengan implementasi dari Apple dan Google, kendali bluetooth ini bisa dilakukan di level sistem operasi dan akan lebih mulus dan hemat batere. Google dan Apple juga merupakan dua penguasa sistem operasi mobile saat ini dan jika keduanya membuat protokol yang kompatibel, maka dipastikan bisa berjalan lancar untuk hampir semua orang.

Lanjutkan membaca “Protokol Penelusuran Kontak Google/Apple”

OSWE

Pertengahan tahun lalu saya sudah mendapatkan sertifikasi Offensive Security Certified Professional (OSCP) dan ceritanya sudah saya tuliskan di sini. Sampai saat ini saya masih tetap bekerja full time sebagai programmer dan pekerjaan security tetap hanya pekerjaan part time bagi saya, jadi sebenarnya saya tidak perlu mengambil sertifikasi lagi.

Tapi karena faktor diskon, saya jadi mengambil Offensive Security Web Expert (OSWE). Di akhir tahun 2019 ada diskon besar untuk sertifikasi OSWE, tadinya harganya 1400 USD (kurs saat ini: 21 juta kalau dirupiahkan), tapi menjadi 999 USD saja. Kebetulan saya juga punya voucher 50 USD dari offsensive security dan vouchernya bisa dipakai di atas diskonnya, jadi biayanya bisa berkurang hingga menjadi 949 USD (saat ini: 14 juta kalau dirupiahkan). Seperti ketika OSCP, Xynexis mendukung saya dalam pembiayaan sertifikasi ini. Biaya OSWE saat ini adalah 1400 USD untuk akses lab 30 hari.

Untuk memperjelas: nama sertifikasinya adalah Offensive Security Web Expert (OSWE) dan nama course yang diperlukan adalah Advanced Web Attacks And Exploitation (AWAE). Dulu pelatihan AWAE ini hanya diberikan offline saja, tapi sejak tahun lalu bisa diambil online. Dulu pelatihan offline AWAE di Blackhat 2018 di Singapore harganya 5000-5500 SGD atau sekitar 53-58 juta rupiah dengan kurs saat ini, yang hanya beda tipis dengan kurs 2018.

Lab

Saya mendaftar tanggal 19 Desember 2019, dan mendapatkan akses lab mulai 12 Januari 2020. Saya sama sekali tidak ingat mengenai sertifikasi ini. Sampai mendapatkan peringatan tanggal 14 Januari bahwa akses akan segera ditutup jika saya tidak mendownload materinya.

Lanjutkan membaca “OSWE”