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”

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)”

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”

Eksploitasi Bug Deserialization

Serialization adalah proses mengubah struktur data atau state sebuah objek ke sebuah format yang bisa disimpan atau dikirim. Proses serialization ini bisa dicoding secara manual oleh programmer, atau menggunakan library yang sudah ada. Jika data hasil serialization bisa diubah/tamper, maka ada potensi ini membuat masalah ketika data ini dibaca lagi (di-deserialize).

Tulisan ini akan membahas perkenalan bug deserialization secara umum, tanpa peduli apa format yang dipakai (native, XML, JSON, dsb). Penjelasannya juga saya buat segenerik mungkin, tidak bergantung bahasa tertentu, walau contoh yang dipakai adalah Java.

Lanjutkan membaca “Eksploitasi Bug Deserialization”

Cheat dan Anti-Cheat pada Video Game

Salah satu tujuan banyak orang melakukan Reverse Engineering adalah mencurangi (cheating) game. Sudah banyak orang menanyakan ini ke saya, jadi akan saya bahas sekarang ini.

Cheat by Nick Youngson CC BY-SA 3.0 Alpha Stock Images
Cheat by Nick Youngson CC BY-SA 3.0 Alpha Stock Images

Tapi supaya tidak kecewa, saya tekankan dulu: cheating game modern dan populer saat ini (misalnya pubg) sangat sulit. Teknologi anti cheat selalu diupdate, dan tidak ada satu artikel di internet yang bisa membuat Anda bisa mencurangi game terbaru.

Lanjutkan membaca “Cheat dan Anti-Cheat pada Video Game”

Certificate pinning dan unpinning

Certificate pinning adalah suatu cara agar sebuah aplikasi bisa memastikan bahwa koneksi SSL/TLS dilakukan terhadap server yang seharusnya. Topik yang sering ditanyakan ke saya adalah bagaimana membypass SSL pinning agar dapat melakukan pentest terhadap sebuah aplikasi. Di sini saya akan membahas beberapa teknik unpinning, terutama untuk mobile OS (iOS dan Android).

Sebelum masuk ke topik pinning, saya review dulu sedikit mengenai komunikasi sebuah browser/ aplikasi ke sebuah server. Agar lebih singkat: browser dan aplikasi akan saya sebut sebagai aplikasi saja, karena browser juga adalah sebuah aplikasi.

DNS

Ketika kita mengunjungi blog.compactbyte.com, aplikasi akan bertanya: apa alamat IP untuk blog.compactbyte.com? pertanyaan ini ditujukan ke server DNS (domain name system). Dan setelah tahu alamat IP-nya aplikasi bisa melakukan koneksi ke server tersebut.

Dari proses awal ini saja sudah ada dua kemungkinan masalah: pertama adalah server DNS mana yang kita pakai?

Lanjutkan membaca “Certificate pinning dan unpinning”

Membongkar Ransomware

Rasanya tiap beberapa hari ada yang bertanya tentang bagaimana mengatasi ransomware tertentu di berbagai group, terutama di group reverse engineering. Jawaban saya untuk yang terkena ransomware tetap sama: buat backup, restore dari backup, atau jika beruntung mungkin sudah ada yang membuat dekriptornya.

Artikel ini untuk anda yang ingin membongkar ransomware dan ingin membuat dekriptor sendiri. Perlu saya peringatkan bahwa ini tidak mudah, dan seringkali mustahil membuat dekriptornya. Setelah membaca ini semoga Anda paham bahwa: meminta membuat dekriptor khusus untuk ransomware yang kena ke komputer Anda itu seperti minta uang semilyar dari orang di pinggir jalan.

Jumlah ransomware baru tiap hari sangat banyak. Mudah sekali membuat ransomware dari nol, atau memodifikasi dari yang sudah ada (banyak yang bisa dicari di github, saya tidak akan melink langsung). Jadi kemungkinannuya cukup besar Anda terkena ransomware yang belum pernah didengar orang lain atau tidak dibahas di Internet.

Lanjutkan membaca “Membongkar Ransomware”