Cloudflare

Cloudflare adalah perusahaan yang memberikan layanan untuk memproteksi website dari DDOS dan serangan lainnya. Perusahaan ini didirikan 2009, dan mulai terkenal sejak 2011. Saya sendiri sudah memakai ini sejak 2013, tapi sepertinya masih banyak pihak yang belum tahu layanan ini, atau tahu tapi belum bisa memakai secara optimal.

Secara sederhana cara kerjanya Cloudflare adalah: semua request dari client (browser/mobile) akan ditangani oleh Cloudflare dan diteruskan ke server kita. Karena berada di tengah-tengah, maka Cloudflare bisa memblok serangan, meng-cache content, dsb.

Cara kerja Cloudflare

Layanan Cloudflare ini ada versi gratisnya dan ada versi berbayarnya. Saya sendiri hanya memakai versi gratis untuk berbagai website/blog yang saya miliki, dan ini sudah cukup untuk menambah keamanan website saya (dari serangan DOS), sekaligus mengurangi bandwidth website. Untuk versi berbayar, ada banyak fitur lain yang menarik, misalnya: WAF (Web application firewall yang memblok request berbahaya), Load Balancing dsb.

Ketika website kita mendapatkan serangan DDOS, kita bisa mengaktifkan “I’m Under Attack Mode”, dan hasilnya pengguna akan melihat layar “Checking your browser before accessing namasitus”. Kadang ini diaktifkan di beberapa situs kecil walau tidak diserang untuk menghindari otomasi akses situs dengan bot.


I’m Under Attack Mode

Server  DNS

Fitur Cloudflare lain yang menarik adalah server DNS (Domain Name System) yang bisa dikontrol menggunakan API. Untuk pengguna rumahan seperti saya, ini bisa dipakai untuk membuat dynamic DNS, tanpa harus membayar (dan bisa membuat banyak subdomain). Untuk di perusahaan, fitur API ini bisa digunakan untuk mengotomasi banyak hal yang berhubungan dengan DNS.

DNS-nya cloudflare juga mendukung multiple TXT records, fitur ini diperlukan untuk sertifikat SSL gratis dengan wildcard domain (*.example.com) dengan Lets Encrypt. Saat ini beberapa registrar seperti gandi tidak mendukung fitur multiple TXT records ini.

Cloudflare juga mengoperasikan server DNS 1.1.1.1 yang berguna untuk bypass blokir website berdasarkan DNS, dan juga untuk meningkatkan privasi DNS. Ini mirip dengan DNS 8.8.8.8 dari Google, 9.9.9.9 dari Quad9 dsb. DNS yang dioperasikan Cloudflare ini juga mendukung DNS over HTTPS.

SSL otomatis

Jika tidak mau repot dengan Lets Encrypt dan hanya butuh agar sekedar URL menjadi “https”, Cloudflare juga menyediakan fitur itu. Contohnya adalah blog ini yang memakai HTTP dengan cloudflare. Akan terlihat di sertifikatnya bahwa yang dipakai adalah dari Cloudflare.

Contoh website tanpa https, kata “Not secure” muncul di address bar

Kenapa memakai URL https? sekarang ini Chrome akan menandai semua website yang tidak memakai HTTPS sebagai “not secure”.  Jadi untuk meningkatkan kepercayaan pembaca, sebaiknya sekarang website memakai SSL.

Cloudflare sebagai WAF

Bagian ini merupakan catatan khusus ketika memakai Cloudflare sebagai WAF atau Anti DDOS. Intinya di sini adalah semua request akan ditangani dan diblok oleh Cloudflare jika dianggap berbahaya. Tapi jika IP asli server kita masih ketahuan, maka percuma saja proteksi dari cloudflare, karena searangan langsung bisa dilakukan terhadap IP asli server tersebut.

Jadi jika ingin mendapatkan proteksi maksimum, koneksi harus diblok kecuali dari IP Cloudflare. Bagaimana seseorang bisa mendapatkan alamat IP asli sebuah website? ada banyak cara, beberapa di antaranya:

  • Dari subdomain yang dipetakan langsung ke IP asli (seperti direct.example.com)
  • Dari pesan error yang ditampilkan server
  • Dari header email yang dikirimkan oleh webiste
  • Dari request oleh server ke server lain (server side request, baik request normal ataupun yang dipaksakan dari bug dalam kategori SSRF )
  • Dari SSL scanning dengan Shodan
  • Dari sejarah DNS, ada beberapa situs yang mencatat DNS, jadi jika pernah terdaftar di masa lalu dengan IP tertentu, maka mungkin sudah tercatat

Registrar

Saat ini kita masih harus membeli sendiri domain di sebuah registrar dan mengeset nameserver agar menunjuk ke server cloudflare, tapi sebentar lagi cloudflare akan meluncurkan layanannya sebagai registrar domain. Artinya kita bisa membeli domain langsung dari cloudflare. Mereka berencana membuat registrar dengan harga sangat murah, tanpa markup katanya.

Sedikit cerita mengenai beberapa registrar terakhir yang saya pakai. Namecheap harganya dulu murah (10.98 USD), minta add on ini dan itu (sebelum GPDR bahkan domain privacy harus bayar), tidak diberi email. Gandi harganya mahal (15.50 usd untuk .com), tapi harga sudah all in, termasuk beberapa mailbox gratis.

Jika butuh mailbox, harga total per tahun namecheap jadi lebih mahal dari Gandi. Terakhir saya coba Google domains. Sejauh ini sih yang spesial hanya integrasi dengan layanan Google yang lebih mudah (harganya antara namecheap dan Gandi, 12 USD untuk .com).

Apakah Selalu Reliable?

Saya jarang menemui masalah dengan Cloudflare, tapi saya pernah mengalami beberapa kali kasus, server Cloudflare gagal menghubungi sebuah server sehingga website tidak bisa diakses padahal server masih baik-baik saja. Saya pernah mengalami sendiri masalah ini (sejauh ini baru sekali): server tidak bisa diakses padahal tidak ada masalah jika diakses langsung dengan IP dari berbagai negara.

Di sini seolah-olah server down, padahal sedang ada anomali pada Cloudflare

Biasanya masalah seperti temporer dan segera kembali normal dalam beberapa menit (walau kadang beberapa jam). Karena level saya hanya gratisan, saya tidak mengejar support untuk  menyelesaikan masalah ini dan cuma menunggu saja.

Penutup

Cloudflare merupakan layanan gratis yang menurut saya sangat berguna. Jika server baru terlalu mahal untuk menangani serangan DOS (atau pengguna yang terlalu banyak), maka Cloudflare ini bisa membantu mengurangi beban server sekaligus mengamankan dari serangan. Versi komersialnya 20 USD/bulan, lebih murah daripada beli server baru, dan bahkan versi gratisnya kadang sudah cukup untuk menangani serangan DDOS.

BEVX Conference

Tanggal 20-21 September saya mengikuti BEVX Conference di Hong Kong. Hari pertama adalah training dan saya mengambil  iOS Sandbox Escape Vulnerability and Exploitation oleh Hao Xu/Pangu.  Team Pangu ini sempat terkenal karena Jailbreaknya yang dirilis umum untuk iOS 7/8/9. Team ini masih aktif, tapi tidak lagi merilis jailbreak umum, di pelatihan yang dibahas adalah exploit iOS 11 dan mereka sudah punya jailbreak untuk iOS 12.

Biaya training plus conferencenya cukup mahal (1000 USD), tapi saya mendapatkannya gratis, plus tiket pesawat dan hotel juga. Ini saya dapatkan dari challenge Reverse Engineering yang saya kerjakan bulan April lalu. Writeup untuk challengenya saya tulis di blog saya yang berbahasa Inggris.

Sebagai informasi, saya ini bukan profesional di bidang Security, hanya part time saja melakukan pentesting secara remote. Saya juga tidak rajin mencari bug di berbagai website atau app, kadang-kadang saja saya menemukan bug ketika sedang iseng. Bidang security dan reverse engineering ini sekedar hobi bagi saya. Saya belum pernah menghadiri conference security (pernah ke HITB sekedar CTF saja). Saya cukup senang hobi ini tahun lalu mengantar saya ke Belanda dan tahun ini sekeluarga ke Hong Kong.

Training

Sekarang ke cerita trainingnya. Biasanya materi training iOS ini diberikan dalam 2 hari, dan baru kali ini pengajarnya berusaha mengkompres materinya menjadi 1 hari. Bagi yang tidak punya background development di macOS dan iOS akan sangat sulit mengikuti semuanya, untungnya walau sudah lama tidak develop macOS dan iOS saya masih mengikuti perkembangannya. Sayangnya di akhir kurang bisa cukup praktiknya, hanya sempat sampai membuat device crash.

Saya menyarankan bagi yang ingin mengikuti training sejenis ini agar mempersiapkan diri dulu dengan berbagai ilmu development iOS dan macOS (Objective C dan berbagai konsepnya). Seluruh dasar teori selama sehari penuh diperlukan untuk menjelaskan satu eksploit saja.

Materi training yang diberikan meskipun sangat banyak, tapi hanya menyentuh hal-hal dasar saja. Untuk menjadi ahli dalam mencari bug iOS, sampai membuat jailbreak masih perlu banyak membaca dan praktik. Sifat iOS yang sourcenya hanya terbuka parsial juga mempersulit eksplorasi. Setiap jailbreak baru dirilis, Apple juga segera membuat perubahan supaya segala bug sejenis tidak muncul lagi, jadi tingkat kesulitan eksploitasi iOS ini memang cukup tinggi.

Penyelenggara conference menyediakan beberapa tiket training dan conference gratis untuk student (dengan slot terbatas tentunya) tapi tidak membayari pesawat/hotel. Saya pikir dengan adanya tawaran ini maka akan ada  banyak mahasiswa lokal, tapi ternyata kebanyakan mahasiswa justru dari jauh (Eropa dan  Amerika) dan mereka ini rajin juga ikutan CTF.

Keynote

Bagian keynote BEVX ini cukup menarik, jadi akan saya tuliskan di sini sedikit, plus komentar dari saya.  Keynote BEVX ini membahas tentang tiga jenis “kompetisi security”, yang meliputi CTF, Bug Bounty, dan Pwn2Own, dan bagaimana membuat CTF yang lebih baik berdasarkan jenis lomba yang lain. Semua jenis “lomba” ini memiliki tempatnya masing-masing. CTF bertujuan untuk menghibur diri, untuk belajar, dan merupakan suatu bentuk dari deliberate practice. Tujuan CTF bukan untuk ketenaran dan uang. Karena waktunya terbatas, biasanya soal CTF harus disederhanakan supaya selesai dalam 1-2 hari.

Program bug bounty ditawarkan oleh berbagai perusahaan, intinya: siapa yang menemukan bug di  website atau produk akan dibayar. Tujuan program semacam ini adalah mengamankan produk/website tertentu. Bug bounty bisa disebut kompetisi karena ada juga “ranking” dari para pencari bug ini (contohnya di bugcrowd ada sistem point). Kalau dilihat, sebagian besar bug yang ditemukan hanya yang itu-itu saja (masih lebih banyak variasi soal CTF).

Kompetisi pwn2own dan sejenisnya mencari bug 0day di sebuah software, artinya bug yang belum pernah ditemukan siapapun sebelumnya. Bug ini biasanya dihargai sangat mahal (puluhan hingga ratusan ribu USD), dan level kesulitan menemukan bug jenis ini sangat tinggi. Targetnya adalah software yang dipakai banyak orang (browser, sistem operasi, office, dsb).

Jadi tiap lomba ini memiliki tujuan masing-masing, dan bisa saling melengkapi. Hampir mustahil seorang pemula tiba-tiba bisa mencari bug dan mendapatkan hadiah dari pwn2own, tapi CTF merupakan titik awal yang baik untuk belajar. Dari berbagai soal CTF kadang kita juga bisa belajar tentang bug tertentu yang bisa dicoba cari di program bug bounty.

Pembicara keynote menemui bahwa saat ini beberapa CTF sudah mulai memakai bug dunia nyata, dan menyarankan agar lebih banyak CTF mulai memakai banyak software di dunia nyata (dengan bug 0day).  Software yang dipilih bisa yang kurang populer. Tujuannya adalah: membantu menambah keamanan pada proyek yang kurang populer, dan peserta CTF bisa benar-benar memakai software di dunia nyata.

Ada satu bagian menarik di keynote mengenai CTF. Di CTF kita memiliki mindset “ini pasti ada bugnya”, karena jika tidak maka soalnya tidak bisa diselesaikan. Mindset itu harus dibawa ke dunia di luar CTF: setiap software pasti ada bugnya. Jika dipikir, ini memang fakta, tiap software ada bugnya, dan mungkin tidak ketahuan sekarang. Lihat saja berapa banyak bug Windows, Linux, dsb yang baru ditemukan bertahun-tahun (kadang sampai belasan tahun) kemudian.

CTF

Acara BEVX ini tidak disertai dengan acara CTF (saat ini banyak conference yang memiliki acara CTF juga). Dari ngobrol-ngobrol dengan beberapa orang di conference tersebut, hal yang menarik bagi saya adalah: masih banyak ahli security level dunia yang masih rajin ikutan CTF (walaupun tidak semua, karena sebagian katanya sudah tidak punya waktu lagi). Saya jarang bertemu security expert Indonesia yang masih ikutan CTF. Saya sendiri masih ikut CTF tapi biasanya yang waktunya lama (seperti Flare-On) dan sesekali yang waktunya sebentar.

Saat ini banyak sekali CTF yang mudah, dan juga CTF yang sangat sulit (misalnya DEFCON), tapi sayangnya masih kurang CTF yang level menengah. Untuk pemula yang sudah berhasil ikutan CTF mudah biasanya akan kesulitan untuk melompat ke level berikutnya karena tiba-tiba menjadi terlalu sulit. Kalau dilihat dari berbagai writeup CTF Indonesia, saat ini kebanyakan soal levelnya masih sederhana dan mulai mendekati menengah.

Jadi saran saya: untuk yang belum ikutan CTF, cobalah ikutan CTF. Kalau merasa suatu CTF terlalu mudah, cobalah ke CTF lain yang lebih sulit, jadi jangan sombong menganggap semua CTF itu mudah. Saya pengen banget melihat team Indonesia di CTF tingkat dunia seperti DEFCON.

Bagi yang sudah ikutan CTF tapi merasa masih mentok, cobalah pelajari topik yang masih belum dikuasai. Kalau masih belum bisa exploitation ya pelajarilah itu dimulai dari yang paling sederhana. Luangkan waktu untuk berlatih.

Conference

Conference BEVX berfokus pada offensive security, tentang bagaimana mengeksploitasi sesuatu. Ini bukan jenis conference yang berisi konsep, tapi berisi kode program dan cara eksploitasinya. Tidak ada presentasi BEVX yang tidak menyertakan kode program, jadi ini bukan sesuatu yang mengawang-awang.

 Badge yang bisa jadi captive portal

Jadwal lengkap bisa dilihat di sini. Meskipun ada 2 track, saya hanya mengikuti Track 1 karena menurut saya lebih menarik. Talk pertama tentang bug yang ada di kernel Linux selama 17 tahun. Ini menarik karena selama 17 tahun tidak ada yang memperhatikan kode itu ternyata memiliki bug, dan cara eksploitasinya merupakan cara baru (heap spray dengan userfaultd).

Talk kedua mengenai smart card juga cukup menarik, tapi tidak terlalu advanced. Tapi ini mengingatkan saya bahwa smart card yang ditamper bisa jadi vektor masuk untuk software atau sistem tertentu.

Talk sebelum makan siang: (De)coding an iOS vulnerability membahas bug iOS. Ini menarik, tapi presentasinya terlalu detail dan panjang sehingga lebih dari waktu yang ditentukan.

Setelah makan siang di hotel (bagian dari harga tiket), diteruskan dengan “Dual booting modern iOS devices” yang memakai bug iOS untuk dual boot 2 versi iOS.  Masalah dengan eksplorasi iOS adalah: jika kita sudah maju ke versi yang tidak ada bugnya, maka kita tidak bisa mundur lagi ke versi sebelumnya dengan mudah. Ini sebenarnya akan sangat menarik jika kodenya dirilis, tapi sayangnya karena masih development maka ini terbatas untuk keperluan riset saja.

Thinking Outside the Virtual Box yang menjelaskan eksploitasi bug Virtual Box untuk “escape to host”. Artinya di Virtual Box yang memiliki bug ini, virtual machine yang berjalan bisa mengakses komputer host. Bug yang ditemukan sangat menarik dan eksploitasinya juga sangat keren.

Topik “Bypass Android Security Mechanisms using Custom Android” sebenarnya tidak terlalu advanced, tapi sangat praktis untuk pentesting aplikasi Android. Intinya adalah: dengan custom kernel kita bisa membuka semua proteksi berbagai aplikasi Android.

Semua presentasi sangat low level

Crashing to root: How to escape the iOS sandbox using abort() menurut saya adalah yang paling menarik. Idenya sangat menarik, implementasinya menakjubkan, dan pembicaranya menyampaikan topiknya dengan sangat terstruktur dan dengan suara yang sangat jelas. Silakan dibaca file presentasinya dan deskripsi di githubnya.

Pembicara terakhir adalah Halvar Flake (Thomas Dullien) dari Google. Topiknya agak teoretis tapi bagi saya sangat menarik. Dia ingin membuat tool untuk bisa mengidentifikasi berbagai library yang direuse oleh banyak pihak. Singkatnya semacam FLIRT dari IDA tapi lebih advanced.

Penutup

Berbagai eksploitasi yang ditayangkan di conference ini sangat menarik dan dalam banyak kasus saya berkata dalam hati: wow kok mereka kepikiran ya memakai cara ini . Untuk mengeksploitasi sebuah sistem kadang diperlukan banyak bug yang sepertinya tidak terlalu penting dan bisa digabung jadi satu.

Dari situ yang terpikirkan oleh saya adalah: dengan bug-bug kecil yang “tidak sengaja”, mereka bisa merangkainya untuk mengambil alih sebuah sistem. Andaikan para penemu bug di conference BEVX diminta membuat backdoor yang tidak terdeteksi, kemungkinan besar mereka akan bisa melakukannya. 

Mereka bisa  sengaja membuat berbagai bug kecil yang tampaknya tidak penting. Jadi backdoornya bukan sejenis hardcoded password atau sekedar kondisi dengan sebuah if saja, tapi memakai sifat dari berbagai library dan syscall yang tidak mudah dimengerti kaitannya.

Ini menunjukkan betapa mengerikannya memakai berbagai produk yang tidak kita ketahui. Bahkan dengan code review sekalipun, bug-bug yang mereka temukan ini akan bisa lolos. Sepertinya langkah terbaik untuk sebuah negara adalah mengembangkan sendiri berbagai software penting untuk keperluan critical.

Saya cukup menikmati keseluruhan acara ini. Semoga lain kali saya juga tidak hanya jadi pendengar saja, tapi jadi pembicara juga di acara sejenis ini.

Mengenal Two Factor Authentication (2FA)

Saat ini untuk mengakses sebuah situs biasanya kita menggunakan password. Tapi password bisa bocor dan kadang gampang ditebak. Jika seseorang punya password kita, maka orang tersebut bisa login dan mengambil alih account kita. Untuk meningkatkan keamanan, maka selain password kita perlu memberikan bukti lain bahwa sesungguhnya yang ingin melakukan autentikasi benar-benar diri kita.

Sistem yang menggunakan lebih dari satu bukti/faktor untuk autentikasi dinamai “Multi Factor Authentication” (MFA). Two Factor Authentication merupakan subset dari MFA dengan hanya dua faktor saja. Biasanya password dan sesuatu yang lain. Website besar seperti GMail, Facebook dan Twitter semuanya mendukung 2FA. Di tulisan ini saya akan membahas kelebihan dan kelemahan berbagai faktor dalam 2FA.

MITM

Serangan generik untuk hampir semua jenis transaksi adalah MITM (man in the middle attack). Seseorang yang bisa mencegat paket jaringan dan menyimpan memodifikasi paket tersebut akan bisa  mendapatkan password seseorang. Contoh “pencegatan” adalah dengan menggunakan WIFI gratis yang disetup oleh penyerang, atau penyerang mengganti setting router (DNS).

Dalam kasus hanya password saja, jika attacker sudah berhasil menyadap password, maka attacker akan bisa login lagi walaupun user sudah logout. Dalam kasus multi factor authentication, serangan MITM ini juga bisa dilakukan tapi lebih terbatas.

Sebenarnya dengan penggunaan SSL, MITM ini semakin sulit dilakukan. Sebuah website sulit berpura-pura menjadi website lain yang memiliki sertifikat SSL. Tapi ada faktor manusia yang sering kurang jeli dalam mengunjungi website. Contohnya jika ingin mengunjungi klikbca.com menjadi kilkbca.com maka seseorang bisa dengan mudah mendapatkan sertifikat SSL untuk website tersebut.

Varian lain MITM adalah seseorang mendaftarkan domain yang memakai karakter bahasa lain yang sulit dibedakan dari karakter latin (IDN Homograph Attack). Ketika mengunjungi situs tersebut, semua permintaan akan diteruskan ke situs asli, tapi sambil disadap dan atau dimodifikasi.

Saat ini beberapa browser sudah menangani agar tidak terjadi penipuan nama domain yang terlihat sama tapi berbeda, tapi sayangnya Firefox masih belum menangani ini dengan baik

Contoh kombinasi huruf latin dan non latin pada nama domain. Huruf Latin “e” dan “a” diganti dengan huruf Cyrillic “е” dan “а”.

Yang kamu tahu

Ini merupakan faktor autentikasi yang paling sederhana, intinya selain ditanya password, kita akan ditanya hal lain secara random. Ketika registrasi kita diminta mengisi beberapa pertanyaan dan jawaban (misalnya: apa group musik favorit Anda? Anda lebih suka Marvel atau DC?). Perhatikan bahwa ini berbeda dengan pertanyaan “password recovery” ketika kehilangan password. Pertanyaan ini selalu ditanyakan ketika login.

Cara ini hanya sedikit lebih aman dari password saja.  Jika seseorang memonitor jaringan hanya sekali saja, maka dia tidak bisa login jika kebetulan mendapatkan pertanyaan yang berbeda, tapi jika dimonitor beberapa kali maka semua jawaban bisa ditemukan. Seperti halnya password, jawaban untuk berbagai pertanyaan ini bisa dicari dan ditebak. Jika sudah mendapatkan jawabannya maka akan mudah login di mana saja.

Dirimu

Biometrik merupakan autentikasi berdasarkan “apa adanya kita”, bisa berupa sidik jari, wajah, retina, DNA, bau badan, atau apapun. Metode autentikasi ini sudah umum dipakai secara lokal (misalnya ponsel, di gedung). Di ponsel, sidik jari atau wajah hanya akan mengunlock data di ponsel dan data tersebut yang akan dikirim ke server (jadi bukan biometrik kita yang langsung dikirim ke server).

Kelemahan sistem ini adalah: biometrik bisa disalin. Sidik jari bisa mudah dicuri dari segala permukaan yang kita sentuh, retina bisa difoto, bahkan pengenalan wajah juga bisa diakali. Biometrik juga tidak bisa diganti, jika data bocor — misalnya seseorang merekam dengan sidik jari atau retina Anda dan diposting ke Internet — maka Anda tidak bisa mengubah mata Anda. Ada kekhawatiran juga bahwa seseorang bisa diculik demi menjadi kunci akses untuk sesuatu yang berharga.

Yang kamu punya

Cara ini yang paling umum digunakan karena praktis: menggunakan benda yang kita pegang (ponsel/sms/app/token). Ketika login kita diminta memasukkan kode tertentu yang hanya bisa dipakai sekali (OTP, One Time Password). Secara umum serangan MITM bisa dilakukan seperti password, bedanya adalah: attacker hanya bisa login sekali ini saja karena berikutnya OTP-nya akan berbeda.

Setelah attacker bisa login, koneksi dari pengguna yang sebenarnya bisa diset agar selalu error atau diputus.

Untuk meningkatkan keamanan, OTP biasanya akan diminta per transaksi. Inipun masih bisa MITM, tapi lebih sulit. Misalnya ketika user ingin transfer uang ke pihak A, attacker akan mengganti agar di browser user tampil transfer akan dilakukan ke pihak A, tapi data yang dikirim ke server adalah: transfer dilakukan ke pihak B. Beberapa bank mengatasi ini dengan mengirimkan SMS notifikasi jika kita mendaftarkan account tujuan yang baru.

Serangan berikutnya adalah: menyalin apa yang kamu punya jika bisa disalin. Atau dalam kasus tertentu: cukup bisa membaca apa yang kamu punya (contohnya dalam kasus SMS).

Ponsel/SMS

Sistem ini dipakai di banyak bank: setiap kali login atau melakukan transaksi, maka sistem akan mengirimkan SMS kode. Teorinya ini cukup aman karena (seharusnya) cuma pemilik ponsel yang bisa menerima kode ini. Tapi jika seseorang ditargetkan maka metode ini sudah tidak aman lagi. Baru-baru ini Reddit dihack karena menggunakan SMS sebagai faktor kedua.

Cara pertama untuk membaca SMS adalah: SIM Swapping. Intinya berpura-pura jadi orang lain untuk mendapatkan SIM card baru dari operator. Cara ini tidak bisa dipakai untuk hacking banyak orang sekaligus karena perlu proses untuk mendapatkan SIM card baru dan pengajuan massal akan sangat mencurigakan.

Cara lain adalah hacking ke jaringan SS7. Secara singkat: semua jaringan operator di dunia ini berhubungan, dan hubungan ini perlu telpon antar operator dan untuk roaming. Jika memiliki akses ke jaringan SS7, ada banyak vulnerability yang bisa digunakan untuk membaca SMS. Selain dengan bug, cara termudah adalah mengakses jaringan operator adalah melalui orang dalam (SMS tidak dienkrip). Cara ini tidak bisa dengan mudah digunakan secara massal karena akan cepat ketahuan siapa yang mengakses SMS banyak orang.

Cara ketiga adalah menginstall aplikasi di HP target. Jika aplikasi ini memiliki hak untuk mengakses SMS maka SMS OTP yang sampai akan bisa dibaca oleh attacker. Cara ini juga tidak mudah digunakan massal, harus menggunakan trik agar seseorang mau menginstall aplikasi tertentu (atau menggunakan bug spesifik untuk ponsel tertentu).

Cara terakhir yang sebenarnya sangat sederhana tapi sering berhasil adalah social engineering (intinya: menipu, tapi orang yang sering melakukan social engineering kurang suka kalau saya pakai istilah menipu). Caranya begini: penyerang melakukan transaksi, lalu butuh OTP, lalu dia menghubungi korban dengan mengatakan “mas, maaf saya tadi mau masukin nomor telepon untuk aplikasi gojek, eh salah masukin nomor mas, nanti kalo ada SMS masuk dari gojek bisa minta tolong bacain kodenya mas?”

Software Token

Software seperti Google Authenticator tergolong pada Software Token. Setiap kali kita ingin login ke website, kita perlu memasukkan angka yang muncul pada token. Ada banyak algoritma yang bisa dipakai namun saat ini ada TOTP standar yang dipakai di banyak layanan (Google, FB, Twitter, dsb). Standar TOTP ini sangat sederhana (saya pernah mengimplementasikan di jam tangan saya sejak 2011). Intinya adalah: ada satu string yang menjadi kunci untuk algoritma yang inputnya adalah waktu saat ini.

TOTP ini relatif aman untuk kebanyakan kasus. Serangan yang mungkin adalah jika seseorang menyalin key dari device kita. TOTP ini juga bisa diserang dengan teknik MITM.

Variasi lain token semacam ini adalah berdasarkan challenge dari website, website meminta kita memasukkan nomor tertentu ke aplikasi dan kita diminta memberikan angka ke website. Secara konsep tidak ada perbedaan dengan waktu (waktu diganti dengan bilangan random yang dihasilkan website).

Hardware Token

Ini seperti token software, tapi memiliki kelebihan karena tidak mudah menyalin nilai key-nya. Untuk token software, kita diminta memasukkan kode tertentu dalam proses setup, pada token hardware kode ini dimasukkan oleh pihak terkait (bank atau perusahaan). Di dalam device ini ada RTC (real time clock) atau istilah awamnya: ada jam-nya, supaya waktunya sinkron dengan server.

Jika ingin menyalin keynya maka token hardware perlu dibongkar sampai level chipnya (jadi lebih aman dibandingkan software). Sama dengan software token, hardware token juga tidak kebal MITM.

Chip berada dalam bulatan hitam resin epoksi menggunakan teknik Chip-on-board (COB)

Kelemahan token hardware adalah: repot karena tiap layanan perlu hardware yang berbeda. Untuk masalah ini, sebenarnya ada juga varian token ini yang memakai smart card, jadi sebelum memakai tokennya kita masukkan dulu kartu kita. Pemrosesan dilakukan di smart card. Walaupun lebih ringkas, cara ini tetap repot karena butuh banyak kartu untuk tiap website.

U2F (Universal 2nd Factor)

Ini juga merupakan hardware token, tapi terhubung ke komputer atau ponsel. Koneksi yang bisa dipakai adala: USB, BLE (bluetooth low energy) dan NFC. Kata kuncinya di sini adalah terhubung dengan komputer/ponsel sehingga langkah verifikasi bisa dilakukan otomatis. Ini berbeda dengan token lain di mana harus ada manusia yang memasukkan sesuatu ke komputer.

Dari sisi user, penggunaan tokennya begini: di sebuah website kita perlu mendaftarkan token kita, caranya dengan mencolokkan device ke PC (atau mentap ke ponsel jika memakai NFC) dan menekan tombol di devicenya. Ketika akan login, kita juga diminta melakukan hal yang sama (colok lalu tekan tombol di device).

Di balik layar ada proses challenge response memakai ECC (Elliptic Curve Cryptography). Spesifikasi U2F ini terbuka, bisa didownload di website FIDO Alliance. Saya sendiri sudah pernah mengimplementasikan ini bertahun-tahun yang lalu. Implementasinya sudah dipakai di hardware yang sudah diproduksi.

MITM sangat sulit dilakukan karena browser akan memeriksa certificate SSL dari server, dan browser (bukan user) akan memastikan hal tersebut benar, jadi tidak mungkin website kilkbca.com meminta autentikasi untuk website asli klikbca.com.

Saat ini U2F ini cukup aman, dan bahkan Google baru-baru ini akan mulai menjual security key U2F. Seperti semua benda lain, kelemahan U2F ini adalah jika  hardware dicuri. Kemungkinan kelemahan lain adalah JIKA ada kelemahan pada browser sehingga bisa dipaksa untuk membypass autentikasi.

Penutup

Demikian perkenalan singkat two factor authentication. Two (atau multi) factor authentication ini sebaiknya ditambahkan pada website untuk menambah keamanan (tidak sulit menambahkan ini). Secara umum 2FA juga bisa digunakan untuk hal lain, misalnya untuk mengamankan akses SSH ke server kita.

 

Berhentilah Jadi Script Kiddie

Saya sering mau ketawa tapi juga merasa sedih, kasihan dan juga marah kalau liat ada posting tentang ajakan DDOS sebuah situs. Ketawa karena mereka berusaha men-DDOS situs yang dilindungi Cloudflare (atau cloud firewall lain) dan ketawa karena mereka memakai tools-tools tua yang parah. Kalau memilih target jangan malu-maluin lah, ibaratnya mau menyerang klub malam maksiat tapi yang diserang malah papan iklan klub malam tersebut di pinggir jalan.

Copy paste ajakan semacam ini sangat banyak yang beredar di Facebook/WA/Telegram

Di posting ajakan mereka biasanya juga diberikan daftar tool yang bisa dipakai. Saya lihat ada batch file yang sekedar melakukan ping, dan ada salah satu tool DDOS Android bahkan mengirimkan IMEI dan Device ID ke server yang diserang, jadi memudahkan untuk dilacak balik. Mereka ini benar-benar script kiddies yang memakai skrip yang bahkan tidak mereka mengerti.  Sebagai catatan “kiddie” di sini bukan menunjukkan umur, tapi skill yang seperti anak-anak.

Sebagai catatan ada banyak teknik DDOS yang menarik dan ada yang spesifik satu OS/server/aplikasi tertentu. Di tulisan ini DDOS yang saya maksud di sini hanya DDOS generik dengan ping (ICMP), UDP, dan request flooding. Lanjutkan membaca “Berhentilah Jadi Script Kiddie”

Trik Reverse Engineering Kode Python

Entah kenapa akhir-akhir ini saya banyak melihat pertanyaan mengenai reverse engineering kode Python yang sudah di-obfuscate, baik di Facebook maupun Telegram. Sudah ada beberapa artikel dalam Bahasa Indonesia yang membahas ini misalnya Bermain dengan Python Bytecode dan  Reverse Engineering Python Bytecode. Kedua artikel itu sudah bagus, jadi saya sarankan untuk membaca kedua artikel itu untuk dasar reversing bytecode Python.

Artikel ini hanya ingin membahas trik untuk mempermudah revers engineering proteksi tertentu yang memakai marshal dan gagal didekompilasi. Lanjutkan membaca “Trik Reverse Engineering Kode Python”

Membedah e-KTP

Posting ini sekedar membahas tentang kartu tanda penduduk elektronik (e-KTP). Sampai saat ini saya belum pulang ke Indonesia untuk mengurus e-KTP karena KTP lama masih berlaku. Waktu orang tua saya datang ke sini tahun lalu saya sudah sempat ngoprek e-KTP mereka sedikit, dan sekarang selagi mereka berkunjung saya teruskan dan tuliskan hasil eksplorasi saya.

Sebagian isi tulisan ini didapat dari reverse engineering, dan sebagian lagi dari berbagai informasi yang tersebar di Internet. Ada juga bagian yang merupakan spekulasi saya dari informasi yang ada.

Security sebuah smart card

Sebuah smart card adalah sebuah komputer kecil, di dalamnya ada CPU, RAM, dan juga storage. Smart card diakses menggunakan reader, secara umum ada dua jenis: contact (menggunakan konektor fisik seperti SIM card) dan contactless (tanpa konektor fisik seperti kartu e-Money berbagai bank saat ini). Dari sisi programming keduanya sama saja. Kartu smart card yang baru umumnya juga sudah tahan (immune) terhadap side channel attack (DPA/SPA/FI dsb). Lanjutkan membaca “Membedah e-KTP”

Reverse Engineering APK

Saya sudah menulis beberapa artikel terpisah mengenai reverse engineering APK Android (misalnya di http://yohan.es/security/android/) . Di posting ini saya ingin menggabungkan berbagai tulisan yang pernah saya buat dalam satu posting, supaya lebih gampang dibaca. Topik yang lebih umum mengenai Pengantar Reverse Engineering sudah pernah saya bahas di blog ini (tidak spesifik Android).

 

Tujuan Reversing

Pertama, tentukan tujuannya apa ingin bisa reversing APK. Ini bisa digolongkan jadi dua bagian: apakah ingin mengetahui cara kerjanya? (sekedar membaca kode) atau ingin mengubah aplikasinya? (memodifikasi kode) Yang termasuk dalam kategori pertama: apakah ingin ekstrak API-nya, ingin membaca file yang dibuat oleh aplikasi, ingin tahu protokol aplikasi. Lanjutkan membaca “Reverse Engineering APK”