Machine Learning dan Deep Learning Specialization (Coursera)

Awal tahun ini (8 Januari) saya iseng mulai ikut Machine Learning di Coursera. Setelah dua minggu ternyata saya masih semangat, jadi saya memutuskan untuk membayar, tujuan utamanya bukan supaya dapat sertifikat, tapi supaya semangat karena sudah bayar 79 USD.

Di tengah kesibukan saya selama Januari-Februari (nemu banyak bug), saya bisa menyelesaikan Course ini pada 23 Februari. Saya mengerjakan semua kuis dan tugas programming dengan Octave. Materinya dari sangat low level sekali, dari mulai linear regression sampai mengimplementasikan neural network (forward dan back propagation) dengan perkalian matriks.

Materi Machine Learning ini memang tidak membahas deep learning, jadi saya penasaran ingin belajar topik itu. Saya jadi ingat dengan blog senior saya Pak Benny Prijono (indoml.com). Pak Benny sudah mengikuti dan mereview banyak course dan membuat banyak catatan yang sangat rapi. Setelah membaca semua reviewnya, sepertinya yang menarik berikutnya adalah deep learning specialization dari pengajar yang sama.

Pengajar Machine Learning (Andrew Ng) memang enak cara penjelasannya. Dan beliau juga yang mengajar materi spesialisasi deep learning. Cara berbicaranya menurut saya agak terlalu lambat (saya terbiasa dengan kecepatan Bu Inge), tapi untungnya player video coursera mendukung percepatan video hingga 2x kecepatan normal (saya memakai kecepatan 1.50-1.75x tergantung materinya).

Kanan bawah adalah Andrew Ng, pengajar materi Machine Learning dan Deep Learning

Spesialisasi Deep Learning terdiri dari 5 Course. Review lengkapnya dalam bahasa Indonesia bisa dilihat di indoml.com, daftar 5 mata kuliahnya adalah:

Biayanya 49 USD/bulan sampai selesai. Kalau bisa selesai sebelum sebulan seperti saya, bisa hanya bayar 49 USD saja. Ada juga trial gratis 7 hari jika belum yakin apakah ingin mendapatkan sertifikat atau tidak. Untuk saya sendiri kemungkinan besar sertifikat ini tidak akan saya pakai, tapi tanpa membayar kita tidak bisa mengakses kuis dan tugas pemrogramannya.

Ikut course saja tentunya tidak membuat kita jadi expert

Saya memulai ini tanggal 23 Februari dan selesai semua materinya pada 4 Maret. Selesai dalam arti melihat sampai habis semua videonya (termasuk video opsional), semua kuis dan semua tugas pemrograman (ada 22 tugas pemrograman). Meskipun kesannya ngebut, tapi sebenarnya saya masih sangat santai, saya masih tetap melakukan banyak kegiatan biasa, ke kantor tiap hari, pergi ke kolam renang, menghadiri pernikahan, ke gereja, mengantar Jonathan ke Tae Kwon Do, Joshua ke dokter gigi, mengisi blog ini tiap hari, dan bahkan sempat bug hunting dan menemukan beberapa bug.

Tips supaya bisa cepat selesai adalah:

  • play video dengan kecepatan lebih tinggi (dengan 1.5x, video 1 jam jadi 40 menit).
  • Download materinya di ponsel dengan aplikasi coursera supaya bisa diakses kapan saja
  • Ketika iseng menunggu sesuatu, lihat videonya
  • Luangkan waktu sedikit di pagi/malam hari

Tapi sejujurnya memang ada beberapa hal yang membuat saya bisa menyelesaikan lebih cepat yaitu:

  • Saya sudah terbiasa memakai Python tiap hari
  • Saya sudah pernah utak-atik beberapa proyek machine learning walau dulu kurang paham cara kerjanya
  • Saya bekerja di perusahaan yang berhubungan dengan math optimization dengan bos yang merupakan Professor dalam bidang Matematika

Terus setelah belajar Machine Learning dan Deep Learning ini jadi bisa bikin apa? Saat ini saya belum terpikir untuk mengaplikasikan langsung ilmu saat ini, saya masih ingin belajar berbagai topik lain seputar ML, misalnya Reinforcement Learning yang tidak dicakup di semua course yang saya ikuti.

Bagi saya saat ini ilmu ini sekedar untuk melengkapi toolbox saya dalam menyelesaikan masalah. Banyak problem bisa diselesaikan dengan cepat menggunakan tool yang tepat. Dengan dasar ilmu ini, saya berharap nantinya bisa mengajari juga anak-anak saya mengenai topik AI. Seperti computational thinking, topik AI ini perlu mulai diperkenalkan sejak dini, bahkan sekarang ada penerbit di China yang sudah membuat buku AI untuk anak pre-school.

Setelah mengikuti coursenya, saya bisa mulai membaca beberapa paper ML dan bisa memahami sebagian besar isinya. Dan praktisnya sekarang saya bisa menghargai meme machine learning/deep learning seperti ini.

Meme LSTM (Long Short-Term Memory), sebuah arsitektur RNN (recurrent neural network)

Untuk yang ingin terjun ke bidang ML dan masih malas membaca buku teknis, menurut saya sebaiknya ikuti berbagai MOOC (Massive Open Online Course) seperti Coursera ini. Tidak harus course spesifik yang ini, walau menurut saya ini sangat bagus. Akan lebih bagus lagi kalau sambil membaca buku dan mengikuti course.

Saya lihat banyak sekali pemula di berbagai group machine learning yang bingung berbagai konsep sederhana (dan ingin langsung bisa mengerjakan task tertentu), padahal jika mau mengikuti course online semua akan jadi lebih jelas. Dibandingkan membaca buku: ada kuis yang menguji apakah kita benar mengerti, ada forum untuk bertanya materi spesifik, dan ada tugas programming yang menguji apakah kita bisa mengimplementasikan yang kita pelajari. Tentunya jangan mencontek atau menyalin jawaban dari Internet, kalau begitu percuma.

Sebagai informasi, saat ini Coursera juga membuka course AI for Everyone, tujuannya memperkenalkan AI ke orang non teknis. Supaya seseorang bisa tahu ekspektasi AI seperti apa, bagaimana caranya bekerjasama dengan Team AI, dsb. Coursenya baru dibuka awal bulan ini. Jika tidak ingin dapat certificate, coursenya bisa diikuti dengan gratis.

Hex Editor

Saya beruntung dulu ketika kali pertama belajar komputer lebih dari 25 tahun yang lalu, saya hanya punya satu pilihan sistem operasi: DOS. Sistem operasi ini sangat sederhana dan bisa dimengerti sampai sangat detail. Waktu itu hanya ada 1 filesystem yang bisa dipakai untuk DOS: File Allocation Table (FAT).

PC Tools

Salah satu tool yang sangat membantu saya mendalami berbagai hal yang berhubungan dengan komputer adalah PC Tools. Software “ajaib” ini punya banyak fungsi, dan salah satunya adalah sebagai hex editor. Dengan hex editor ini dulu mudah sekali untuk mengubah string dalam sebuah program (misalnya iseng mengganti pesan error jadi bahasa Indonesia).

Hex editor ini juga berguna untuk memahami mengenai filesystem FAT. Misalnya jika tidak sengaja menghapus sebuah file, saya bisa mengedit sendiri FAT untuk mengembalikan huruf pertama file tersebut. Dalam FAT, jika file dihapus, hanya huruf pertamanya diganti dengan 0xE5, dan selama file belum ditimpa, maka bisa dengan mudah dikembalikan.

Sejak saat itu di berbagai sistem operasi, hex editor menjadi salah satu tool andalan. Berbagai varian tool ini telah membantu saya memahami banyak hal, dari mulai hal kecil misalnya mengecek apakah ada karakter spesial yang tidak terlihat dengan editor teks, sampai memahami format sebuah file.

Di Linux saya tidak memakai tool khusus, biasanya saya melihat representasi hexa sebuah file di command line dengan hexdump (dengan parameter -C). Jika ingin interaktif sayamenggunakan midnight commander (mc) yang merupakan tiruan dari Norton commander yang dulu saya pakai di DOS.

Hex viewer/editor di Midnight Commander

Emacs, editor favorit saya, juga memiliki fitur untuk melihat dan mengedit file dalam mode hex. Ini sangat berguna untuk mengedit file yang tidak terlalu besar (dalam orde megabyte). Jika filenya terlalu besar, emacs terasa lambat, tapi ini wajar karena emacs adalah editor teks yang tidak dirancang khusus untuk file biner berukuran besar.

hexl-mode di Emacs

Di Windows saat ini saya suka memakai HxD. Editor ini cukup lightweight, gratis dan dapat mengedit file berukuran besar dengan cepat. Software ini juga masih diupdate hingga saat ini. Fungsi-fungsi tambahannya (MD5, histogram, dsb) juga cukup berguna.

HxD di Windows

Sekarang ini tidak terlalu mudah untuk memahami sebuah sistem dengan menggunakan hex editor karena berbagai hal sudah sangat kompleks. Contohnya: filesystem EXT2/3/4 atau NTFS sudah terlalu rumit dibaca manual dengan hex editor.

Khusus untuk reverse engineering, sekarang ini sebenarnya banyak juga tool yang bisa membantu memahami format file, misalnya 010 Editor (komersial) dan Kaitai Struct (open source). Tapi tetap saja diperlukan banyak membaca sebelum bisa mulai, tidak seperti jaman dulu di mana semua masih sangat sederhana.

Kabar aneka peralatan elektronik lama

Posting ini sekedar untuk catatan mengenai status berbagai elektronik lama yang pernah dituliskan di sini. Beberapa yang diingat saja yang akan dituliskan. Beberapa benda elektronik yang sudah dibeli masih dipakai dan beberapa hanya disimpan saja.

Hal pertama adalah mengenai keyboard. Posting ini dituliskan menggunakan keyboard mekanis yang sudah dituliskan tahun 2013. Keyboard yang menurut saya cukup mahal ini sudah terpakai lebih dari 5 tahun. Rasanya masih cukup enak dipakai untuk mengetik, hanya saja kadang error dan harus cabut colok lagi baru terdeteksi lagi.

Tahun 2015 saya pernah beli tablet Windows harga murah, walaupun jarang dipakai tapi benda ini masih berfungsi dan masih bisa diupdate terus Windows 10-nya. Batere benda ini masih tahan beberapa jam. Saya termasuk kagum dengan ini karena saya pikir hanya akan tahan 1-2 tahun saja.

Sejak tidak membuat lagi aplikasi untuk anak-anak, saya tidak lagi memakai Tablet Xp-Pen yang saya beli tahun 2012. Benda ini masih berfungsi dengan baik, dan masih ada di sekitar meja saya. Hanya saja sampai saat ini belum ada niat lagi untuk memakainya. Sementara wireless router Asus RTN16 yang saya beli sekarang sudah tidak terpakai karena digantikan dengan Mini PC router.

Mini PC router yang dibeli tahun 2017 masih dipakai dan masih sesuai harapan. Benda ini masih relatif baru (belum 2 tahun). Setelah cerita terakhir router ini saya tambahi SSD 120 GB, dan sekalian jadi proxy server. Keyboard mekanis ekstra yang saya tuliskan di posting tersebut juga masih ada dan dipakai, walaupun ada 1 keycapnya yang hilang.

Sementara itu Pinebook yang dibeli tahun 2017 sudah jarang dipakai. Terakhir kali chargernya tidak mau jalan, dan harus cabut batere (harus dibongkar) baru mau jalan lagi. Walau demikian pinebook ini pernah membantu menyelesaikan pentesting sebuah aplikasi yang butuh layar lebar sementara tidak jalan di emulatir. Pinebooknya saya install Android dan layar besarnya cukup berguna.

Printer 3D yang dibeli tahun 2015 sekarang sudah jarang dipakai. Beberapa kali saya mencetak benda sederhana, tapi tetap kurang sabar dari mulai mencari model sampai menunggu printnya selesai. Saya merasa kegunaan terbesar dari benda ini adalah mengajari saya berbagai macam teori mengenai 3D printing.

Renungan hari ini: sebagian besar benda relatif mahal yang saya beli ternyata masih terpakai dan berguna, sebagian lagi memberi pelajaran berharga. Sepertinya yang banyak kurang terpakai justru benda-benda elektronik kecil yang sering saya beli karena iseng hanya beberapa USD saja.

Solid State Drive (SSD)

Posting ini sekedar catatan untuk diri sendiri mengenai pemakaian SSD. Kalau tidak dicatat tidak akan ingat tentang mulai naiknya kapasitas penyimpanan. Dulu waktu punya Nokia 3650, MMC yang kami pakai cuma 16 MB, sedangkan sekarang memori internal HP saya saja sudah 128 GB.

Saya mulai memakai SSD tahun 2012, waktu itu harganya masih 3400 baht untuk kapasitas 60 GB. Sekarang harganya 750 baht untuk kapasitas 120 GB dan bisa lebih murah lagi jika beli merk nggak jelas di AliExpress. Kapasitas 60 GB sudah jarang ditemui di kota ini.

Setelah dipakai agak lama, ternyata saya cukup suka memakai Thinkpad X230, dan jadinya menginstall banyak program di ThinkPad tersebut. Tadinya 60 GB terasa cukup, tapi jika saya masukkan berbagai data (terutama email dan virtual machine) akhirnya terasa kurang juga. Jadi akhirnya kemarin beli SSD 240 GB dengan harga 1290 baht.

Dulu waktu saya mulai memakai SSD, belum semua sistem operasi mendukung TRIM (dan belum semua SSD mendukung perintah ini), tapi sekarang ini sudah jadi default di semua OS baru. Perintah TRIM memungkinan pemakaian SSD lebih awet karena controller SSD bisa diberitahu data mana yang sudah tidak terpakai, jadi bisa lebih mengoptimalkan algorima “wear leveling”. Penjelasan detailnya agak panjang, jadi bisa dibaca di berbagai artikel di web (misalnya ini).

Sekarang semua komputer saya sudah memakai SSD, minimal untuk OS-nya. Saya juga masih memakai HDD ntuk penyimpanan data yang besar. Saya sudah mencoba beberapa merk SSD, termasuk juga beberapa kali mencoba SSD merk China (King Dian), dan sejauh ini semuanya masih awet. Tapi hal ini bukan jaminan, adik saya punya pengalaman buruk dengan SSD dari China yang dibeli online (rusak dalam beberapa bulan), jadi mungkin ini untung-untungan. Untuk data yang penting, saya memilih SSD bermerk dengan garansi, dan tetap membackup data karena SSD bisa rusak tiba-tiba sewaktu-waktu.

Happy 12th Wedding Anniversary

Hari ini sudah 12 tahun kami menikah. Tiap tahun bingung menulis topik apa yang ingin diposting di hari pernikahan. Beberapa hari yang lalu saya teringat lagi posting saya di tahun 2011 (Terima kasih Tuhan untuk semuanya), dan teringat bahwa ada banyak hal yang perlu disyukuri yang belum dituliskan. Jadi di posting ini saya ingin mengupdate beberapa hal setelah posting tersebut (jadi di tulisan ini yang dimaksud “posting sebelumnya”, adalah posting yang saya sebutkan tersebut).

Honeymoon tahun 2007, kami masih kurus

Seperti saya tuliskan di posting sebelumnya: Agak takut menceritakan hal-hal yang membahagiakan kalau tiba-tiba keadaan berubah dari segala yang indah yang diceritakan di posting ini. Tapi kalau dipikir-pikir, justru itu kenapa posting ini harus ditulis. Kalau tiba-tiba keadaan berubah, saya sudah pernah mengungkapkan syukur untuk apa yang sudah diberikan Tuhan pada saat ini.

Saya bersyukur untuk usia pernikahan kami yang sudah 12 tahun, dan sampai saat ini perasaan saya terhap Risna masih seperti lirik lagu ini:

You're still the one I run to
The one that I belong to
You're still the one I want for life
You're still the one I love
The only one I dream of
You're still the one I kiss good night
2019, sekarang kami tambah gemuk. Katanya Scientists Found That Couples Who Really Love Each Other Tend to Gain Weight

Dibandingkan posting yang sebelumnya, hal-hal masih terus membaik. Setelah menunggu beberapa tahun, kami mendapatkan Joshua. Sekarang keduanya tumbuh menjadi anak-anak yang sehat, pintar, lucu, dan menggemaskan. Dan yang membuat saya bersyukur adalah keduanya sangat rukun.

Waktu tahun 2011 kami tinggal di apartemen, dan sekarang sudah beberapa kali pindah sewa rumah, sampai akhirnya dapat menyewa di tempat yang sangat dekat dengan kantor. Saya sangat bersyukur karena dengan dekat kantor, maka waktu luang saya makin banyak, dan makin mudah untuk pulang ke rumah untuk makan siang bersama keluarga.

Saat ini kami menghomeschool Jonathan, dan Jonathan merasa senang bisa belajar di rumah dan bisa sering jalan-jalan dan bermain game dengan saya. Saya bersyukur memiliki istri yang pintar sehingga bisa mengajari Jonathan berbagai hal sehingga Jonathan bisa mendapatkan pendidikan terbaik. Joshua pun saat ini mulai ingin belajar bersama kakaknya di rumah.

Di dalam bidang pekerjaan, saya masih terus kerasan bekerja di tempat saat ini. Istri saya juga terus mendukung saya di banyak hal yang saya lakukan, termasuk juga di bidang security yang saya lakukan beberapa tahun terakhir ini. Saya bersyukur punya istri yang bisa mengerti excitement saya ketika saya menemukan bug-bug security.

Kami juga bersyukur untuk keluarga besar kami. Saat ini keluarga saya sudah bertambah. Dulu baru satu adik saya yang menikah, sekarang masing-masing sudah menikah dan memiliki dua orang anak. Saya bersyukur kedua orang tua saya masih diberi umur panjang, dan mertua saya bahkan masih bisa mengunjungi kami dan berjalan-jalan ke berbagai tempat di Thailand yang butuh banyak jalan dan bahkan banyak jalan menanjak.

Apakah semua di hidup kami 100% selalu membahagiakan? kadang di satu waktu terasa sesuatu sangat mengecewakan karena kami kehilangan sesuatu yang sepertinya sudah sangat baik, tapi ternyata tidak lama kemudian digantikan dengan hal yang jauh lebih baik lagi. Jadi kalau ada sesuatu yang sepertinya kurang baik, kami tetap berusaha bersyukur karena yakin ini bagian dari rencana Nya. Waktu kecil sampai usia beberapa tahun, Jonathan setiap kali mau tidur, tiap kali jatuh atau nangis minta dinyanyikan lagu Bapa Surgawi, yang potongan liriknya seperti ini:

Semua yang terjadi di dalam hidupku
Ajarku menyadari Kau selalu sertaku
Beri hatiku selalu bersyukur pada-Mu
Karena rencana-Mu indah bagiku

Bapa Surgawi

Setelah kami berdua menyanyikan lirik itu ratusan (atau mungkin ribuan kali), lama-lama meresap juga maknanya. Kami berharap keluarga kami tetap bisa langgeng sampai selamanya, dan membawa berkat bagi banyak orang.

Biasanya kami hanya sekedar makan keluar di hari anniversary, tapi kali spesial karena Opungnya Jonathan sedang di Chiang Mai. Kami jalan-jalan ke Queen Sirikit Botanical Garden. Dari Opung, kami juga mendapatkan hadiah istimewa leontin kalung salib yang bisa dipakai Risna dan bisa juga disematkan ke Jas.

Risna memakai kalung salib hadiah. Biasanya nggak pake perhiasan apapun (bahkan nggak pake cincin ataupun anting)

Cerita pengalaman pentesting

Sudah beberapa tahun terakhir saya melakukan pentesting eksternal, menjadi freelancer melalui salah satu perusahaan security di Jakarta. Kali ini saya ingin menuliskan cerita pengalaman, dari mulai kenapa pentesting itu fun, dan beberapa pelajaran yang bisa dipetik (lesson learned) dari pekerjaan pentesting ini. Mengenai pembahasan apa itu pentesting dan serba-serbinya (terutama untuk orang yang ingin produknya ditest), bisa baca tulisan saya sebelumnya serba serbi pentest.

Berbagi ilmu bukan berarti saya sudah jagoan. Saya tidak merasa diri saya sangat jago, dan tidak merasa bahwa apa yang saya pentest pasti sudah aman. Tapi saya merasa ada beberapa hal yang saya tahu yang bisa saya bagikan. Sebagian pentester sangat pelit dengan ilmunya supaya kelihatan jagoan (padahal ilmu pentesting ya itu-itu aja).

Karena pekerjaan saya lakukan secara remote, scopenya biasanya terbatas: web dan aplikasi mobile. Tapi kadang ada juga pekerjaan yang melibatkan hardware misalnya kartu NFC (bendanya dikirim ke sini dan dikirimkan balik setelah selesai), atau masuk ke jaringan internal via VPN (yang ini jarang).

Sejauh ini saya tidak pernah berhadapan langsung dengan client, kecuali membalas beberapa hal teknis via email. Jadi lesson learned di sini tidak akan mencakup interaksi dengan client. Saya juga tidak membuat laporan resmi atau melakukan presentasi untuk client, ini dilakukan orang lain, jadi itu juga tidak masuk ke scope.

Saya memulai pekerjaan pentest dengan dasar ilmu yang mungkin berbeda dengan orang lain:

  • Dulu saya pernah bandel waktu di semester pertama kuliah, belasan tahun yang lalu. Saya dan temen saya pernah melakukan beberapa keisengan digital di kampus, seperti mengeksploitasi sistem, memasang keylogger, dsb
  • Setelah hampir DO gara-gara kasus tersebut (bukan gara-gara nilai kuliah), saya menjadi administrator sistem, jadi setelah itu punya dasar sistem operasi dan juga jaringan yang baik untuk OS Linux dan Windows. Sejak saat itu saya hanya hacking for fun, misalnya crack software untuk dipakai sendiri atau mengakali website yang saya pakai
  • Saya punya hobi reverse engineering, tapi tidak benar-benar saya dalami. Contohnya tahun 2006 saya pernah menulis reverse engineering virus Brontok. Saya kerja dengan C++ dan sering kali dalam debugging perlu sampai ke level assembly, jadi masih dengan berbagai hal low level.
  • Saya punya hobi programming dan sudah membuat berbagai macam aplikasi dari mulai web app, mobile app, dan bahkan porting kernel FreeBSD

Ketika mulai pentesting:

  • Saya tidak punya sertifikasi apa-apa
  • Saya cuma kenal sedikit orang security
  • Saya tidak kenal banyak tool yang populer, bahkan waktu itu belum pernah memakai zaproxy ataupun burp suite

Dari hasil ngobrol dengan beberapa orang, kebanyakan pentester mulai dari otodidak. Ada yang mulai dari iseng positif (CTF), ada juga yang masuk dunia security karena hal negatif (tertangkap hacking sesuatu). Beberapa orang berkembang dengan belajar lebih banyak, ada yang kuliah IT, ada yang mengambil sertifikasi, dsb. Sebagian lagi ilmunya tidak berkembang

Kelebihan saya menurut saya adalah: kemampuan membaca kode (baik biner maupun tekstual) dan pengetahuan kriptografi yang cukup baik sehingga bisa menemukan bug kriptografi sejenis hashing bug Mastercard. Bug sejenis ini sudah saya temukan di beberapa payment gateway di Indonesia (sayangnya karena NDA, tidak bisa diceritakan, jadi untuk bug semacam ini saya hanya bilang: bug sejenis Mastercard, tanpa menyebut detail varian masalahnya).

Bug seperti Bug Gojek bisa dengan mudah ditemukan banyak pentester, tapi jika saya membuat aplikasi dengan bug sejenis bug MasterCard atau E-Money Mandiri, saya cukup yakin hanya sedikit pentester yang mampu menemukannya.

Kenapa pentesting?

Kenapa tidak melakukan software development saja? kenapa tertarik pentesting?

  1. Saya memang suka ngoprek apa aja, jadi bagus untuk penyaluran hobi
  2. Memaksa saya belajar banyak teknologi baru. Misalnya ketika ada Angular XSS injection, mau tidak mau saya perlu mengenal angular untuk belajar eksploitasi itu
  3. Pekerjaan pentest sifatnya singkat. Software development biasanya lama. Setelah selesai pun perlu disupport
  4. Seru dan bangga jika bisa menemukan bug fatal. Ini terutama jika dilakukan pada sistem yang sudah live bertahun-tahun, dan baru ditemukan bugnya sekarang.

Apakah selalu menyenangkan?

Tidak ada hal yang semuanya fun, meskipun sebagian besar pekerjaan pentesting sifatnya fun tapi banyak juga yang membosankan. Contohnya jika kita perlu memeriksa sistem informasi yang punya form 10 halaman dan hanya jalan di tablet (jadi tidak bisa memakai skrip auto fill form, atau harus menulis sendiri skrip baru).

Terkadang developer juga membuat gemes karena tidak mengerti bug fatal yang sudah dijelaskan, sehingga kadang sampai perlu membuat video untuk menjelaskan bugnya. Lebih mengesalkan lagi jika mereka dikejar deadline, dan jadinya pentester ikutan dikejar deadline.

Di kasus lain, kadang aplikasinya belum selesai di tanggal yang dijadwalkan, jadi pentester malah jadi tester fungsionalitas aplikasi. Salah satu kasus terparah waktu diberi website dengan halaman HTML statik tanpa https, jadi hal yang bisa dicek sangat minim sekali.

Hal yang membuat sedih adalah Non Disclosure Agreement: kadang saya tidak bisa sharing bug-bug menarik ke orang lain jika itu menyangkut sistem mereka. Bug menarik di sini maksudnya bukan sekedar SQL Injection, XXE atau XSS. Jika bugnya di luar sistem mereka maka saya bisa sharing (contoh: bug alternatif firewall Palo Alto ini juga bisa dianggap bug di luar sistem mereka).

Lesson Learned

Ini adalah beberapa catatan random mengenai berbagai pelajaran yang saya petik

Belajarlah dari orang lain

Belajarlah dari orang lain karena ini cara yang baik untuk memulai. Pelajaran ini bisa didapat dari berbagai cerita orang ataupun dari berbagai tulisan/writeup di web. Setelah mendapatkan gambaran topiknya kita bisa mendalami topik dengan membaca berbagai macam buku atau mencoba berbagai tool.

Karena saya jarang melakukan testing internal (on site), saya juga masih terus belajar dengan melihat report dari orang lain yang mengerjakan testing internal. Tentunya jika kita belajar dari orang lain, kita sebaiknya juga mengajari orang lain, baik dengan memberikan ilmu via obrolan ataupun tulisan.

Saya belum pernah ketemu pentester atau hacker yang punya teknik luar biasa yang tidak diketahui siapapun. Semua ilmu mereka dipelajari dari berbagai writeup dan sharing yang dilakukan orang lain.

Satu orang biasanya tidak cukup

Banyak aplikasi bisa dipentest oleh satu orang, tapi untuk aplikasi super penting, misalnya yang melibatkan uang, sebaiknya pentest dilakukan oleh lebih dari satu orang.

Satu orang pentester bisa membuat kesalahan, dan sumbernya bisa banyak:

  • Skill orang tersebut memang kurang
  • Orang tersebut memiliki skill, tapi pada saat testing mungkin sedang mengantuk, kurang konsentrasi, dsb
  • Jumlah target ada banyak atau fungsionalitas aplikasi terlalu banyak
  • Ada masalah jaringan yang diakses dari jaringan orang tersebut sehingga tool yang dipakai tidak bekerja benar (contoh: bisa saja ISP tertentu menyisipkan iklan jadi eksploitasi gagal), tapi pentester dari jaringan lain ternyata berhasil mengeksploitasi
  • Masalah juga bisa ada di komputer pentester atau tool yang dipakai pentester. Contoh nyata yang pernah saya alami adalah: semua tool berbasis Java (burp suite dan zaproxy) selalu gagal melakukan koneksi ke server tertentu, tapi pentester lain yang memakai Fiddler ternyata bisa melakukan koneksi dengan normal.

Beberapa perusahaan menyewa beberapa group pentester, baik secara bersamaan, ataupun bergantian supaya yakin hasilnya aman. Pekerjaan pentest biasanya dibatasi waktu yang singkat, jadi jumlah bug yang ditemukan terbatas. Harapannya bug-bug besar ditemukan oleh pentester, tapi bukan jaminan bahwa nanti ada hacker atau bug hunter yang berusaha berminggu-minggu bisa tembus ke sebuah aplikasi.

Dari mengerjakan berbagai pekerjaan bareng orang lain, saya jadi belajar memperhatikan bug-bug tertentu yang kadang terlewat oleh saya dan juga tahu tools-tools yang populer dipakai.

Belajar terus informasi terbaru

Di awal kita bisa bertanya secara langsung pada seseorang untuk belajar berbagai hal dasar, tapi setelah itu saatnya kita perlu belajar sendiri “langsung dari sumbernya”. Biasanya sumber awal berbagai teknik baru adalah dari presentasi di security conference. Berbagai security conference akan mengupload file dan video presentasinya sehingga bisa kita baca, jadi tidak perlu ikutan untuk mendapatkan ilmunya.

Berbagai varian dari teknik yang sudah ada juga bisa dibaca dari writeup orang-orang yang melakukan bug bounty. Terkadang isinya membosankan, bug yang sudah sangat sering ditemukan (misalnya XSS), tapi sesekali ada teknik eksploitasi yang menarik yang bisa diambil ilmunya.

Sumber saya mendapatkan berbagai info security terbaru adalah dari reddit /r/netsec dan /r/reversengineering. Biasanya ini sudah cukup untuk merangkum berbagai informasi terbaru. Untuk info tambahan, saya subcribe ke security updates Debian (ada berbagai bug, kadang yang kurang signifikan saya ketahui dari adanya security update package tertentu)

Belajar mencari dan mendalami tool

Seperti saya ceritakan di awal: saya dulu kurang tahu banyak tool. Di awal saya banyak mengimplementasikan tool custom saya sendiri. Setelah memperhatikan pentester lain, jadi tahu berbagai tool yang sudah siap pakai dan lebih matang dari tool buatan saya.

Untuk satu tujuan, biasanya ada banyak sekali pilihan tool. Biasanya saya akan mencoba beberapa tool sejenis lalu memutuskan yang mana yang akan saya pakai, dan kadang saya pakai beberapa sekaligus. Contoh: untuk vulnerability scanner (yang sekedar mencari bug-bug sederhana) saya memakai Nexpose, OpenVAS, dan Arachni.

Sekedar catatan: Jika ada pentester yang hanya menyerahkan hasil scanner, tanpa melakukan testing manual, bisa dipastikan pentester tersebut tidak bekerja. Dalam kasus ini kemungkinan besar ada bug tidak ditemukan, dan Anda akan pusing membaca hasil scan yang masih butuh validasi lagi.

Untuk intercepting proxy, saya akhirnya memilih zaproxy dengan pertimbangan:

  • Gratis (burp professional tidak gratis, sementara versi free tidak bisa menyimpan session)
  • Open source. Fiddler dan burp suite (versi free) gratis tapi tidak open source
  • Cross platform (Fiddler tidak cross platform, belum lama ini baru ada versi beta untuk non Windows)

Setelah saya putuskan, saya kemudian berusaha mendalami jika tool tersebut cukup kompleks. Contohnya dalam kasus zaproxy di atas, setelah paham pemakaiannya, saya mencari tips dan trik di Internet dan ketemu bahwa kita bisa memakai berbagai list dari SecLists untuk input zaproxy dan kita bisa menambah berbagai skrip dan list kita sendiri.

Contoh skrip yang bisa kita buat misalnya:

  • skrip payload generator custom (mencoba-coba berbagai payload yang paling sering berhasil)
  • skrip untuk meng-exclude berbagai situs tidak penting (seperti facebook/google/dsb) dari log

Log IP saat ini

Saya melakukan testing dari rumah dengan IP dinamik, artinya IP eksternal bisa berubah setiap waktu. Kadang pihak yang ditest ingin mengecek apakah benar sebuah request berasal dari penyerang sesungguhnya atau dari kerjaan pentesting.

Dulu saya tidak mencatat ini, tapi untungnya saya masih bisa mengecek beberapa IP terakhir melalui log activity di Gmail. Sekarang supaya aman, saya membuat skrip yang mencatat setiap ada perubahan alamat IP.

Log semua sesi pentesting

Alasan saya tidak memakai burp versi gratis adalah karena tidak bisa menyimpan session. Kadang ada client yang menanyakan laporan beberapa bulan yang lalu, padahal website yang ditest sudah berubah. Dengan menyimpan semua sesi pentesting, bisa dilihat semua request yang pernah diberikan, dan juga bisa dijelaskan jika memang ada bagian website yang sudah berubah.

Lakukan otomasi

Banyak pekerjaan pentest sifatnya membosankan dan bisa diotomasi. Otomasi ini bisa dilakukan dengan menginstall berbagai software atau browser extension untuk tujuan khusus atau dengan membuat skrip sendiri. Contoh sederhana: beberapa aplikasi bank memiliki form yang terdiri atas beberapa halaman (misalnya form aplikasi kartu kredit). Dengan browser extension untuk mengisi form secara otomatis (atau menyimpan isian saat ini), maka kita bisa menghemat waktu ketika testing hal semacam itu.

Saya sendiri sekarang ini punya berbagai kategori skrip:

  • berbagai skrip python custom untuk target tertentu
  • berbagai skrip zaproxy
  • browser extension custom
  • skrip Frida untuk pentest Android dan iOS

Ilmu programming sangat terpakai

Secara umum ilmu programming sangat terpakai dalam pentesting. Selain untuk otomasi seperti yang disebutkan sebelumnya, juga terpakai untuk hal-hal berikut:

  • Source code review: keahlian membaca dan memahami program sangat diperlukan
  • API test. Beberapa perusahaan pernah meminta testing apakah API mereka bisa bocor (sejenis bug yang saya temui di kasus Mastercard), jadi mau tidak mau harus membuat program
  • memperbaiki eksploit (contoh: pernah saya temui eksploit Java yang hanya berjalan di Java versi baru karena memakai kelas yang hanya ada di Java terbaru, sedangkan client masih memakai Java versi sebelumnya)
  • Untuk modifikasi kode. Dalam pentest mobile app, kadang kode perlu dipatch untuk memudahkan testing

Dengan dasar programming yang baik, jumlah bug yang ditemukan dan dieksploitasi bisa lebih banyak.

Kreativitas CTF kadang diperlukan

Mungkin sekitar 90% eksploit dari Internet bisa langsung dijalankan, dan biasanya orang-orang akan menyerah jika eksploitnya tidak jalan hanya karena perbedaan versi software. Biasanya hal seperti ini justru jadi tantangan buat saya.

Hal-hal seperti ini bisa dipelajari dengan mengikuti CTF. Banyak soal CTF luar negeri adalah varian dari bug yang nyata. Dalam kasus ini kita perlu paham eksploitnya dan menerapkannya sesuai dengan situasi

Skill administrasi sistem sangat terpakai

Tidak selamanya kita bisa langsung testing ke target yang live. Kadang pentest dibatasi waktunya, kadang koneksi terlalu lambat dari Thailand ke Indonesia. Di saat seperti itu kadang saya perlu menginstall secara lokal berbagai software supaya bisa ditest eksplotasi secara lokal.

Selain contoh kasus di atas, kadang saya menemui mesin dengan sistem operasi yang sangat tua. Saya biasanya menginstall dulu versi yang sama di sistem lokal untuk mengetes eksploit supaya yakin apakah tidak akan membuat sistem crash.

Pengalaman dan ilmu administrasi sistem yang saya miliki ternyata sangat berguna untuk setup semacam ini. Saran saya jika Anda ingin jadi pentester, minimal bisa mensetup sistem operasi dan berbagai software secara lokal untuk ditest sendiri.

Penutup

Salah satu alasan saya dulu meninggalkan dunia security adalah: saya pikir software akan menjadi semakin aman. Ketika saya belajar mengenai SQL injection belasan tahun lalu, saya punya pikiran seperti ini: bug ini mudah sekali dihindari, dalam beberapa tahun ke depan pasti bug seperti ini sudah nggak akan ditemui lagi.

Bug sql injection ini baru saya temukan Januari 2019, di sebuah subdomain situs sebuah bank yang bisa diakses dari publik

Setelah melakukan pentesting beberapa tahun, ternyata saya salah besar, sampai saat ini bug SQL injection masih cukup sering saya temui. Bug buffer overflow dan sejenisnya juga masih ditemui. Sekarang ini banyak jenis bug baru yang sepertinya akan tetap ada sampai belasan tahun ke depan.

Jadi sepertinya sampai cukup jauh ke depan, pentester masih sangat dibutuhkan. Berbagai tools akan membuat beberapa pekerjaan pentesting jadi sederhana, tapi masih banyak yang lain yang tetap harus manual. Tentunya ilmu pentesting ini harus diupdate terus supaya mengikuti perkembangan teknologi. Tiap teknologi bisa membawa banyak masalah baru misalnya yang trend sekarang:

  • Cloud: sering ada misconfiguration
  • IOT: banyak masalah dasar seperti 20 tahun yang lalu (buffer overflow dsb) dan juga ada berbagai serangan menarik seperti glitch attack para microcontroller
  • BlockChain: masalah pada implementasi, pada enkripsi, pada smart contract
  • machine learning (adversarial machine learning)

Dilihat dari contoh di atas, di masa depan ilmu programming dan devops makin diperlukan untuk memahami masalah security yang lebih kompleks.

Catatan Oprekan Liburan

Pulang ke Indonesia kali ini cukup lama dari tanggal 12 Desember 2018 dan baru masuk kerja besok, tanggal 7 Januari. Sebenarnya nggak banyak yang dioprek selama liburan ini, tapi ini sekedar jadi catatan, plus ada beberapa barang yang baru sampai ketika kami sedang di Depok yang siap dioprek bulan ini.

Liburan kali ini saya berusaha meminimasi bawaan, tapi tetap ingin bisa ngoprek hardware. Kali ini saya coba membawa Pi Zero W yang sudah diberi case USB, sehingga bisa langsung dicolok ke komputer untuk powernya. Saya juga sudah setup agar Pi Zero W-nya mengemulasikan USB Ethernet, jadi bisa langsung diakses dari komputer/laptop.

Ini saya pakai untuk iseng-iseng membaca data dari beberapa kartu NFC yang saya temui. Saat ini tidak ada temuan baru yang menarik.

Waktu libur saya sempat ngoprek dan nemu bug. Sementara ini saya nggak kasih tau dulu bugnya apa, tapi sayangnya tidak ada bounty dari perusahaan tersebut. Tapi ada teman saya di situ yang mengurusin security dan pinter bikin cake, jadi ditodong aja, hasilnya Cheese Cake ini.

Dari sejak beberapa tahun lalu saya teringat sebuah game lama, tapi lupa judulnya, dan bahkan lupa di platform mana (NES atau Sega Mega Drive, dulu punya 2 console ini). Yang saya ingat cuma satu: tokohnya membawa anjing dalam petualangannya, anjingnya bisa dibuat agar terbang mengelilingi tokohnya, terus terbang menerjang musuhnya. Karena sulit mencari deskripsi ini (dan adik-adik saya juga lupa), jadi saya putuskan untuk mencoba memainkan semua game NES dan kalau tidak ketemu, akan mencoba semua game Sega Mega Drive.

Saya menggunakan 3DS untuk mencoba-coba game-game NES-nya, jadi bisa dilakukan di mana saja. Saya juga membawa 3DS dalam liburan ini dan untungnya sampai huruf C sudah ketemu judul yang saya cari: Conquest of the Crystal Palace. Walau sudah menemukan ini, saya masih akan meneruskan mencoba semua game NES.

Ini adegan yang saya ingat

Sesampainya di Chiang Mai, sudah ada beberapa paket menunggu.

Nggak semua isi paket dibahas di posting kali ini

Yang pertama adalah decoder ring hadiah dari Flare-On. Jonathan sedang suka bermain-main sebagai detektif/spy dan senang memainkan ini.

Ini hadiah dari menyelesaikan flare-on 2018

Paket lainnya adlaah Foldscope, mikroskop origami kertas. Ceritanya mikroskop ini dibuat dengan biaya 1 USD (tentunya dijual dengan harga lebih dari harga pembuatan), tapi untuk bisa mendapatkannya tidak bisa beli satuan. Harga termurah adalah 35 USD (dapat 20 Foldscope) belum termasuk ongkos kirim.

Jonathan memakai Foldscope

Beberapa waktu yang lalu kernel Linux mensupport satu arsitektur CPU baru: C-SKY dari China. Ini mungkin akan menjadi arsitektur baru terakhir yang akan ditambakan ke Linux karena sekarang semua memakai arsitektur populer atau RISC-V yang terbuka. Karena penasaran saya membeli satu development board untuk CPU ini dan baru sampai ketika saya sudah di Depok. Saat inielum sempat dicoba lebih lanjut.

Booting CSKY
Ini boardnya

Demikian catatan oprekan kali ini. Semoga tahun ini akan bisa menulis lebih banyak oprekan lain.