USB Rubber Ducky adalah nama produk dari Hack5, bentuknya seperti USB biasa, tapi sebenarnya mengemulasikan keyboard. Ketika dicolok ke USB, benda ini akan bisa mengetikkan berbagai perintah dan menekan shortcut secara otomatis. Benda ini sudah dijual sejak belasan tahun yang lalu, di kalangan security sudah sangat dikenal, dan bisa dipakai untuk bagian dari pentesting ataupun red teaming.
Saya baru menyadari bahwa banyak orang di luar security yang belum kenal benda ini, padahal USB Rubber Ducky ini bisa berguna sekali untuk otomasi setup komputer. Di posting ini saya akan bercerita tentang otomasi yang belum lama saya lakukan di IOI 2022 untuk mensetup laptop untuk perlombaan.
Dalam tulisan ini saya akan membahas UEFI (Unified Extensible Firmware Interface) dari mulai dasarnya, securitynya, dan sekilas cara reverse engineeringnya, dan hal-hal apa yang perlu diperhatikan ketika berurusan dengan UEFI (misalnya ketika melakuan cloning komputer).
Meskipun tulisan ini cukup panjang, tapi ini hanya perkenalan saja. Ada banyak topik yang tidak saya bahas. Ada beberapa topik yang penjelasannya saya sederhanakan sehingga mungkin kurang akurat. Silakan baca berbagai website yang saya link dari artikel ini jika ingin mendapatkan penjelasan lebih dalam. Jika ingin belajar langsung dari sumbernya, spesifikasi UEFI dan source code dari Intel bisa dibaca.
Secara awam UEFI adalah pengganti BIOS (Basic Input Output System). BIOS sendiri adalah software yang sudah tertanam di komputer yang menyediakan akses dasar ke hardware. Sebagai informasi: BIOS hanya ada di arsitektur x86, sedangkan di arsitektur lain, fungsi BIOS ini digantikan oleh software lain. Software low level yang menempel ke hardware ini disebut juga sebagai firmware.
Ketika sebuah komputer dinyalakan, perlu ada firmware yang bisa meload sistem operasi dari suatu media, entah itu dari disk (macam-macam, bisa flash disk, micro sd, harddisk, SSD, NVME, dsb) dari network, atau mungkin dari sumber lain. Di dunia PC, firmware ini dulunya adalah BIOS, tapi sudah belasan tahun ini digantikan oleh UEFI.
Sedikit Sejarah
BIOS untuk x86 usianya sudah sangat tua (dari jaman PC XT), dan memiliki banyak keterbatasan (misalnya hanya bisa berjalan di mode 16 bit). Jadi untuk sistem operasi 32 atau 64 bit, boot loader atau sistem operasi perlu beralih mode dari 16 ke 32/64 bit setelah diload oleh BIOS.
Saya dulu pernah membuat sendiri OS sederhana dari nol, dan proses bootnya cukup panjang: mengimplementasikan kode MBR (yang otomatis diload oleh BIOS, ukurannya maksimal 512 byte), yang akan meload boot loader (memanggil fungsi/interrupt BIOS untuk mengakses disk), lalu boot loadernya meload kernel, switch ke mode 32 bit, lalu baru melakukan jump ke mode 32 bit. Detail proses booting klasik bisa dibaca di sini.
Ada jenis video game yang namanya clicker game, atau disebut juga incremental game. Di game ini, pemain sekedar menekan tombol (atau mengklik mouse, atau mentap layar) untuk mendapatkan poin atau koin (atau in-game currency apapun). Ini merupakan penyederhanaan dari banyak game, yang sebenarnya ya hanya klik-klik saja. Kenapa nggak disederhanakan, tap atau klik apapun dapat koin?
Game sejenis ini bisa dimainkan dengan mudah dengan “auto clicker”, yang akan mengotomasi proses mengklik tombolnya. Auto clicker ini bisa berupa hardware atau software yang mensimulasikan keyboard/mouse. Bagi sebagian orang, ini tidak menyenangkan, dan bagi sebagian orang ini sangat menyenangkan.
Jonathan menemukan game gratis di Steam namanya Cell To Singularity. Ketika memainkan game ini, dia jadi sering asal-asalan menekan tombol keyboard. Saya bilang: kalau kamu melakukan itu terus, keyboardnya akan cepat rusak. Akhirnya saya bilang: kalau kamu nggak bisa setup auto clicker, kamu nggak boleh main game ini.
Ini sekedar catatan kehidupan, sebulan terakhir ini Joshua (sudah hampir 7 tahun) sedang senang sekali memprogram dengan Scratch (seperti dibahas Risna di posting ini). Semangatnya ini sekarang ditularkan juga ke Jonathan.
Tadinya Joshua tidak pernah mau menyimpan program buatannya di komputer lokal, tapi sekitar awal bulan ini (tanggal 6 Mei) saya membuatkan account Scratch online. Kami pergi ke Bangkok Seminggu (selama libur tidak memprogram Scratch), dan dua hari yang lalu saya cek ternyata dia sudah menshare 45 Project. Ketika saya menuliskan ini, dia sudah menshare 71 project.
Gaya belajar Joshua adalah belajar mandiri, tidak mau diajari. Dia membaca sendiri buku Scratch dan melihat video di Youtube. Dia akan merewind video berkali-kali jika masih belum paham bagian tertentu.
Setelah tidak pulang beberapa tahun, rencananya saya akan pulang ke Indonesia bulan Juli. Saya jadi sadar bahwa banyak sekali hal yang sudah saya setup di sini, dan mungkin akan butuh akses berbagai komputer dan data saya dari Indonesia nanti.
Ada device/komputer yang ingin bisa diakses setiap waktu. Contohnya: saya ingin agar NAS saya tetap membackup data-data terbaru dari Internet ke harddisk lokal (agar tidak apa-apa jika terjadi kasus account diblok seperti yang pernah saya alami). Andaikan internet di Indonesia sangat lancar, mudah dan bisa diandalkan, saya mungkin hanya akan butuh sebagian server saya ini di sini (misalnya server backup saja).
Untuk komputer yang ingin agar selalu menyala, harapannya adalah:
Komputer selalu on
Komputer tidak hang
Ada beberapa komputer yang hanya dibutuhkan sesekali. Contoh kasusnya: komputer powerful dengan RAM besar yang punya GPU dan hanya dipakai sesekali untuk traning AI atau cracking password. Untuk ini yang diinginkan adalah:
bisa menyalakan komputer jika dibutuhkan
bisa mematikan komputer jika tidak dibutuhkan.
bisa troubleshooting jika ada masalah startup
Setting BIOS: After Power Loss
Jika listrik mati dan kemudian menyala lagi, kita ingin agar komputer otomatis menyala lagi. Cara paling sederhana yang tidak butuh modal ekstra adalah mengganti setting di BIOS. Nama settingnya agak berbeda di tiap BIOS: “After Power Loss”, “AC Power Recovery” dan sejenisnya, intinya adalah kita ingin agar jika power dicolok, komputer langsung menyala.
Setelah settingnya diaktifkan, coba cabut power dan colok lagi, seharusnya komputer akan langsung menyala. Perlu diperhatikan: kadang ini tidak selalu berhasil. Dua kegagalan yang pernah saya temui:
Ketika power ON/OFF berkali-kali dalam waktu singkat, kadang setting di komputer saya akan tereset menjadi off
Batere CMOS lemah dan setting BIOS ter-reset
Jika komputer yang dipakai adalah Windows, dan gagal boot berkali-kali (baru mulai booting lalu listrik mati lagi) maka kadang bisa gagal boot atau masuk ke safemode.
Uninterruptible Power Supply (UPS)
Supaya bisa tetap hidup walau mati listrik, ya tentunya menggunakan UPS. Dengan cara ini komputer saya sudah ada yang uptime-nya sampai lebih dari 500 hari.
Biasanya gabungan antara UPS dan setting BIOS sudah cukup untuk membuat komputer tetap menyala. UPS ini kapasitasnya terbatas, jadi hanya akan mengurangi kemungkinan komputer restart karena mati lampu sebentar. Jika UPS habis batere, lalu listrik menyala lagi, maka komputer otomatis hidup lagi dengan setting BIOS yang dijelaskan sebelumnya.
Tapi kemarin ketika hujan badai besar, listrik nyala dan mati berkali-kali (mungkin sampai 20 kali dalam waktu sangat singkat) dan hasilnya: UPS-nya sempat gagal juga dan komputernya restart berkali-kali.
Saya ingat waktu ke Medan dulu, mati listrik ini sering terjadi. Di sini saya lebih beruntung: sejak 2019, di komplek ini listrik tidak pernah mati lama. Terakhir kali di bulan Mei 2019 ada pemadaman 8 jam.
Jangan lupa kalau batere UPS juga punya batas usia. UPS saya merk APC bisa diakses statusnya dengan apcaccess. Ternyata kapasitas batere salah satu UPS saya sudah sangat sedikit, sehingga cepat sekali mati (padahal baru 2 tahun).
UPS yang agak mahal biasanya gampang diganti baterenya, sedangkan UPS murah sering kali semuanya disegel jadi sulit dibuka. Selain itu UPS murah juga tidak bisa dikalibrasi ulang setelah baterenya diganti (jadi UPS tidak tahu bahwa baterenya sudah baru).
Dari dulu saya merasa senang dengan gadget yang memakai layar e-ink. Layar e-ink tidak memancarkan cahaya (tidak seperti layar LCD) jadi mata tidak cepat lelah. Layar e-ink juga bisa terbaca dengan jelas di luar rumah. E-ink hanya butuh daya ketika layarnya diupdate, setelah gambarnya muncul gambar terakhir tidak akan berubah walau tidak dialiri listrik lagi, jadi lebih hemat batere.
Kelemahan e-ink adalah: refresh ratenya lambat. Jika kita membeli modul e-Ink sendiri (misalnya untuk dipakai dengan Arduino), refresh ratenya dalam hitungan detik. E-reader pertama yang saya beli dulu butuh sekitar 0.8-1 detik untuk berganti halaman. Tapi sekarang sudah ada yang refresh ratenya cukup cepat untuk menonton video (walau masih kurang lancar). Kelemahan lain e-ink adalah: tidak bisa dibaca dalam gelap (karena tidak memancarkan cahaya), tapi sekarang sudah banyak device yang menyertakan backlight untuk dipakai di malam hari.
Advent of Code (AoC) adalah acara tahunan yang dibuat oleh Eric Wastl, bentuknya berupa puzzle programming yang diberikan sejak tanggal 1 hingga 25 Desember . Acara ini sudah ada tiap tahun sejak 2015, tapi saya baru mendengar dan mencoba pada tahun ini.
Saat artikel ini ditulis, sudah hari ke 13, dan saya masih setia mengerjakan tiap hari. Saya tidak tahu apakah saya akan punya waktu setiap hari sampai tanggal 25, karena tiap hari soalnya bertambah sulit. Tapi karena acara ini menarik, saya ingin sharing, siapa tau ada yang ingin mencoba juga, karena soal dari hari pertama sampai ke 13 ini masih cukup mudah, masih bisa dikejar.
Apa sih bedanya Advent of Code ini dengan tantangan programming lain? Saat ini ada banyak sekali challenge lain, misalnya: LeetCode, Project Euler, CodeWars, dsb. Sebenarnya semua kembali ke preferensi masing-masing, tapi ada beberapa alasan kenapa saya suka AoC.
Sebagai catatan: saya tidak suka competitive programming, walau dulu sempat coba-coba banyak hal mirip AoC, semua akhirnya berhenti. Misalnya ketika saya login lagi ke Project Euler, ternyata terlihat bahwa belasan tahun lalu saya mencoba beberapa puluh soal awal, lalu berhenti.