GPU Raspberry Pi

Salah satu kelebihan Raspberry Pi (RPI) dibandingkan Single Board Computer (SBC) lain adalah: harganya relatif murah dan memiliki GPU yang terdokumentasi resmi dan bisa dimanfaatkan dengan berbagai API low level. Beberapa SBC lain ada yang harganya lebih murah (misalnya Orange Pi) tapi dokumentasinya kurang, dan beberapa yang lain lebih powerful (misalnya NVidia Jetson) dengan dokumentasi yang cukup baik dari produsen (tapi masih kurang dari komunitas) tapi harganya 10x lipat dari RPi 3.

GPU Raspberry Pi cukup powerful, dan bisa melakukan beberapa hal menarik misalnya: tunelling dari kamera (dengan konektor CSI) langsung ke layar, colorspace conversion, video/image encoding and decoding,  resizing, dan overlay. Kita juga bisa meminta agar data dari kamera langsung dijadikan texture untuk OpenGL ES.

Secara praktis tunnelling artinya satu komponen ke komponen lain bisa bekerja langsung tanpa buffer. Contoh nyatanya begini: kita bisa membuat aplikasi yang kelihatan smooth karena data dari kamera tampil langsung di layar dengan kecepatan tinggi (30 fps) tanpa memakai CPU sama sekali. Sementara di latar belakang kita bisa mengambil gambar, memproses (misalnya face detection) dan menampilkan hasilnya.

Proses ini membypass windowing system, jadi bisa jalan bahkan tanpa X Window (mode teks sekalipun).

Video dari kamera bisa ditampilkan di mode teks

Fitur texture OpenGL ES artinya kita bisa menampilkan gambar kamera atau video (dari file atau jaringan) langsung di permukaan  misalnya kubus atau teko. Selain itu kita bisa menggunakan pixel shader untuk memproses data tanpa memakai CPU, contohnya membuat filter kamera secara real time, atau bahkan melakukan preprocessing untuk algoritma machine learning. Data yang sudah diproses bisa dibaca dan diproses lebih lanjut di CPU dengan glReadPixels.

Video dimainkan di atas kubus

Secara praktis fitur encoding video memungkinkan kita melakukan streaming kamera ke jaringan dengan memakai CPU yang minimal atau sekedar mengencode satu frame menjadi JPG/PNG. Fitur decoding memungkinkan kita memainkan (play) video 1080p dengan memakai CPU yang minimal dan mulus tanpa patah-patah.

Saya pernah melihat demo tidak resmi Nvidia Jetson di sebuah acara hacking (demo dari panitia). Demonya sangat sederhana, mendeteksi wajah orang-orang yang lewat. Tapi sayangnya demonya memakai kamera USB. Pemrosesannya kira-kira begini:

while true:
    image = Getimage()
    gray = ConvertToGrayScale(image)
    faces = FindFaces(gray)
    DrawBoxes(faces, image);
    Display(image)

Gambarnya kelihatan patah-patah. Tidak menunjukkan kemampuan processing yang bagus dari Nvidia Jetson. Sebagai catatan: ada banyak opsi kamera untuk NVidia Jetson tapi yang kualitasnya bagus harganya relatif mahal . Demo serupa dengan kamera RPI dan GPU akan kelihatan lebih smooth dan harganya akan jauh lebih murah (10x lebih murah). Dengan RPI kita bisa mensetup seperti ini:

  1. Tampilkan preview langsung dari kamera ke layar.
  2. Di sisi CPU: grab satu frame dan proses frame tersebut.
  3. Kita bisa mensetup agar frame yang ditangkap menggunakan colorspace YUV 420, dengan mengambil komponen Y (luma) nya saya maka kita tidak perlu melakukan konversi warna ke grayscale.
  4. Gunakan fitur image overlay untuk menunjukkan di mana wajahnya
Layout memori YUV420. Mengambil komponen Y cukup dilakukan dengan mengambil 2/3 (66%) byte pertama dari  stream data.

Raspberry Pi adalah didukung banyak pihak sehingga mudah menemukan aksesori tambahan jika diperlukan.  Misalnya jika CPU kurang cepat untuk machine learning, processing bisa dioffload ke Intel Movidius USB stick yang mendukung Raspberry Pi.

Video dirender di permukaan teko

Kelemahan dari GPU raspberry pi adalah: dibutuhkan pemahaman yang baik berbagai API yang ada. Sebagian APInya sangat spesifik raspberry misalnya dispmanx. Sebagian lagi standar, misalnya OpenMAX (OMX), Open GL ES, dan OpenVG.

Sebagian lagi adalah API spesifik yang tujuannya mempermudah API low level, misalnya MMAL (multimedia abstraction layer) untuk membungkus OpenMAX. Meskipun OpenMAX merupakan standar terbuka tapi sangat kompleks dan  penamaan komponen pada OpenMAX sifatnya vendor specific.  Ada juga beberapa API tanpa nama untuk memudahkan pemakaian OpenVG.

Berbagai contoh spesifik Raspberry Pi bisa dilihat di /opt/vc/src jika kita memakai distribusi default (Raspbian). Source code untuk berbagai aplikasi (misalnya raspivid) ada di repository userland. Contoh pemakaian dispmanx ada di github. Tadinya ada guide gratis memakai beberapa API Raspberry Pi, tapi kemudian dijadikan buku (Raspberry Pi GPU Audio Video Programming).  Sepertinya demi memenuhi jumlah halaman minimal, bukunya malah terlalu banyak membahas OpenGL ES.

Sebenarnya kita juga bisa memprogram langsung GPU RPI dalam assembly  atau memakai beberapa library yang ada. Dengan cara ini kita bisa melakukan processing yang non grafik misalnya FFT. Ini berguna untuk RPI versi pertama, tapi sekarang ini dengan instruction set NEON di RPI2 dan 3, kita bisa mendapatkan performance yang sama dengan NEON.

Memprogram GPU RPI ini tidak terlalu sulit tapi juga tidak terlalu mudah. Dokumentasinya minim, ada beberapa contoh program sederhana tapi kurang menjelaskan batasan GPU. Kebanyakan pertanyaan dan jawaban ada di forum Raspberry Pi. Emulasi APInya saat ini tidak ada jadi  perlu memprogram langsung di Raspberry PInya. Ini juga berarti bahwa debugging tidak mudah dilakukan.

Saya menuliskan ini karena sedang mengerjakan sebuah proyek yang memakai fitur low level RPI, jadi saat ini tidak bisa sharing kode. Saya juga belum mengeksplorasi semua API-nya, tapi saat ini sudah memiliki gambaran cukup baik dan sudah bisa melakukan apa yang saya targetkan. Harapannya posting ini bisa membuka mata mengenai berbagai fitur GPU RPI yang jika dimanfaatkan bisa dipakai untuk membuat aplikasi yang lebih cepat atau lebih smooth.

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

Hal yang membuat smart card penting untuk security adalah kemampuan smart card untuk melakukan komputasi (menghitung, melakukan hasing, enkripsi, dekripsi, dsb), dan sangat sulit untuk melakukan ekstraksi data dari smart card. Bayangkan seperti disuruh mengekstrak data di sebuah komputer yang dicor dan dimasukkan ke lemari besi.

Dari segi security, kita bisa memandang smart card ini seperti komputer remote yang melakukan komputasi yang tidak kita ketahui, dan kita tidak bisa mengekstrak informasi jika tidak ada bug pada implementasinya. Bayangkan sebuah sevice php seperti ini

<?php echo hash_hmac (“sha256”, $_GET[“q”], “[email protected]!ku” );?>

Jika kita tidak memiliki akses ke source code program tersebut, maka kita bisa mencoba-coba berbagai input, dan dengan melihat outputnya kita tidak akan bisa mengetahui bahwa kita memakai key “[email protected]!ku”.

Untuk berkomunikasi dengan smart card, kita mengirimkan perintah dalam bentuk byte-byte (dinamakan PDU atau protocol data unit), dan dibalas oleh card dengan status dan byte-byte hasil. Sebenarnya ini tidak berbeda jauh dari komunikasi lain seperti HTTP: kita mengirimkan request, dan card akan mengirimkan status dan balasan. Bahkan smart card generasi baru memang memasukkan server HTTP di dalamnya.

Riset smart card di level protokol (bukan level serangan fisik) bisa dilakukan dengan biaya relatif rendah. Card reader jenis contact dengan konektor USB bisa didapatkan dengan dengan harga kurang dari 10 USD, dan versi contactless (NFC) dengan konektor USB harganya sekitar 30 USD (atau jika punya Raspberry Pi atau Arduino, harga modul NFC-nya saja bisa kurang dari 5 USD).

Perhatikan bahwa: sebuah smart card bisa diisi program. Programnya bisa melakukan apa saja, baik itu memenuhi standar tertentu, atau melakukan sesuatu yang sifatnya custom. Sebagai informasi, kebanyakan  (tapi tidak semua) card sekarang ini diprogram menggunakan Java (teknologi JavaCard). Eksperimen Java Card bisa dilakukan di PC tanpa kartu menggunakan JCardSim.

Smart card juga memiliki protokol standar untuk filesystem. Kita bisa memilih Master File/Dedicated File (MF/DF) yang merupakan struktur direktori, dan EF (Elementary File) yang merupakan file. Semua “nama” pada file hanyalah bilangan yang umumnya dituliskan dalam notasi heksa desimal. Sebuah MF/DF/EF bisa diproteksi dan hanya bisa diakses dalam kondisi tertentu saja (dalam kondisi lain statusnya access denied)

SAM (Secure Access Module/Secure Application Module)

Jika komputer biasa digunakan untuk melakukan komputasi kriptopgrafi untuk dimasukkan ke e-KTP maka programnya akan rawan sekali diubah dan keynya gampang dicuri. Untuk mengatasi hal ini digunakan smart card lain yang dinamakan SAM. Ini hanya merupakan nama peran/role untuk smart card. Sebuah smart card biasa bisa menjadi SAM. Jadi sebuah SAM juga bisa diberi program apa saja. SAM ini bisa berupa chip yang ditanam di hardware, atau berupa kartu biasa. Biasanya SAM ini akan menggunakan jenis kartu contact.

Sekarang masalah security berpindah ke SAM. Tentunya SAM ini berbahaya jika jatuh ke tangan yang salah, jadi ada mekanisme keamanan yang diterapkan pada SAM e-KTP. Mekanismenya cukup sederhana, sehingga jika cukup niat bisa diakali. Ketika Kartu SAM diberikan untuk dipakai dengan aplikasi di sebuah komputer, file konfigurasi diberikan. File konfigurasi ini dienkrip dengan “Machine ID” (yang bisa dengan mudah didapatkan oleh program apapun).

Dengan menggunaakan file konfigurasi yang di XOR dengan machine ID, didapatkan key untuk mengakses Kartu SAM. Kartu tidak bisa dengan mudah dipakai di komputer lain tanpa mengakali program dan/atau mengganti machine ID. Jika N kali salah memasukkan machine ID, maka kartu SAM akan terblokir, dan harus meminta kartu SAM baru.

Keamanan ini hanya sekedar menghindari SAM yang “tercecer” di jalan agar tidak bisa sembarang dipakai. Jika ada yang berniat mengambil kartu SAM dan tahu dipakai di komputer mana (atau device mana), maka keamanan ini tidak membantu. Jadi bisa saja seoarang operator meminjam kartu SAM, dibawa pulang dan dipakai di rumah.

Data Pada e-KTP

Data yang disimpan pada e-KTP pada MF/DF 7F0A. Untuk memilih MF/DF ini bisa digunakan PDU

00A40000027F0A

Beberapa data yang ada di kartu:

  1. Data kontrol kartu (Card Control, pada EF: 6FF0), terbuka tapi spesifikasinya tidak diketahui
  2. Foto (EF: 6FF2), data ini terbuka
  3. Data Demografik/Biodata (6FF1), datanya diproteksi
  4. Data sidik jari: Minutiae1 (6FF4) dan Minutiae2 (6FF5), datanya diproteksi
  5. Scan tanda tangan (6FF3), datanya diproteksi
  6. ECDSA Signature (6FF6), datanya diproteksi

Mengekstrak Foto dari e-KTP

Foto dapat diekstrak dari e-KTP karena memang tidak diproteksi. Cara membacanya cukup mudah, pertama pilih MF/DF dan EF foto, lalu baca 2 byte pertama

00A40000027F0A
00A40000026FF2
00B0000002

Pada 2 byte pertama terdapat panjang (ukuran) data JPEG yang perlu dibaca.  Perhatikan bahwa apapun perintahnya akan selalu ada 2 byte status kembalian (9000 artinya adalah OK, bisa dibandingkan dengan HTTP Code 200):

=> 00 a4 00 00 02 7f 0a
<= 90 00 
Response : 
=> 00 a4 00 00 02 6f f2
<= 90 00 
Response : 
=> 00 b0 00 00 02
<= 06 fe 90 00
Response : 06 fe

Dalam kasus ini panjang file adalah 0x6fe byte = 1790 byte.

Berikutnya data bisa dibaca dengan mengirimkan PDU berikut ini berulang sampai selesai terbaca. Misalnya kita membaca dari offset 2 sebanyak 16 byte, berikutnya dari offset 18 sebanyak 16 byte, dst.

00BB<Offset High><Offset Low><Size>

Jika kita memiliki offset: 0x1234, maka Offset High adalah 0x12 dan Offset Low 0x34.  Teorinya kita bisa membaca sampai 255 byte sekali baca, kenyataannya card readernya bisa error. Di aplikasi e-KTP digunakan 112 byte sekali baca tapi di salah satu card reader saya, saya perlu memakai ukuran 16 byte sekali baca supaya reliable.

Data yang didapatkan adalah file JPEG biasa dengan ukuran 96×96 piksel.


Autentikasi Kartu

Untuk membaca data yang diproteksi, diperlukan key yang berada di SAM. Langkah pertama adalah mutual authentication untuk mendapatkan session key. Berdasarkan hasil reverse engineering,  protokol ini sepertinya berdasarkan Doc 9303 ICAO (Machine Readable Travel Documents) terutama Part 11 (Security Mechanisms for MRTDs).

Di dalam dokumen di atas, diasumsikan mesin pembaca memiliki key dalam memori komputer. Dalam dokumen itu protokolnya seperti ini (hanya garis besar, lihat contoh Appendix D di dokumen 9303 Part 11). Masing-masing pihak (kartu dan app desktop) memiliki SEED yang menjadi dasar untuk pembuatan key:

  • To Card: 0084000008 (request challenge/random number)
  • From Card: 8 byte random
  • From App: Generate random X1 (8 byte) dan X2 (16 byte), lalu  hoitung P1 = 3DES(X1 + RandomFrom Card +X2) , P2 = MAC(P1), hasilnya P1 + P2 ukurannya 40 byte, kirimkan ini ke kartu
  • From Card: kartu melakukan perhitungan serupa dan mengembalikan 40 byte
  • App melakukan komputasi dan menghasilkan session key.

Sedangkan protokolnya e-KTP seperti ini:

  • To SAM: Reset 00FF000000
  • From SAM: OK
  • To CARD: Get Challenge: 0084000008
  • From Card: challenge (8 byte)
  • To SAM: GenerateMutualAuth 00F10000 + CardControl + UID (8) + Challenge (8)
  • From SAM: 40 byte
  • To Card: ExternalAuth: 0082000028 + response from SAM
  • From Card: 40 byte
  • To SAM: VerifyMutualAuth: 00F2000028 + Response From Card

Perbedaannya adalah ada data Card Control dan UID kartu yang dikirim ke SAM. Sepertinya Card Control ini berisi informasi untuk pembuatan SEED, tapi tanpa source code ini tidak bisa diketahui detailnya.

Akan sangat panjang untuk membuktikan bahwa ini aman, tapi pada dasarnya: jika kita tidak punya key enkripsinya, meskipun kita bisa mengubah apapun di sisi app, maka kita tidak bisa mencari tahu key-nya.

Secure Messaging

Berdasarkan pada session key yang didapat pada proses autentikasi, maka setiap PDU yang dikirim akan dienkrip  dulu sebelum dikirim ke kartu dan yang diterima akan didekrip dulu sebelum diproses. Deskripsi ini cukup panjang, tapi ada gambar di dokumen yang menjelaskan ini.

Karena session key tidak pernah di simpan di PC, tapi di SAM, maka secara praktis yang terjadi adalah:

  1. Aplikasi membuat PDU unprotected (misalnya select EF)
  2. Aplikasi mengirimkan PDU unprotected ke SAM
  3. SAM membalas dengan PDU versi Secure Messaging
  4. Aplikasi mengirimkan PDU terenkripsi ke kartu e-KTP
  5. Kartu e-KTP membalas dalam PDU yang terenkrip
  6. Aplikasi mengirimkan PDU terenkrip dari e-KTP ke SAM
  7. SAM akan mendekrip PDU dan hasilnya dibaca oleh aplikasi di PC

Jadi dalam proses ini, meskipun kita mengetahui data terenkripsi dan hasil dekripsinya, kita tetap tidak tahu key yang digunakan (session ini selalu random dalam setiap koneksi).

Emulasi SAM dan e-KTP

Untuk membuat aplikasi e-KTP tanpa memiliki SAM. kita bisa menggunakan SAM dan e-KTP buatan kita sendiri dengan key yang kita masukkan sendiri tentunya ini tidak akan jalan di e-KTP “beneran” sampai kita memiliki akses untuk SAM yang benar. Hal ini sudah pernah diimplementasikan oleh BPPT dalam paper PERANCANGAN EMULATOR KTP ELEKTRONIK BERBASIS JAVA CARD UNTUK MENDUKUNG PENGUJIAN FUNGSIONALITAS PEMBACA KTP ELEKTRONIK INDUSTRI NASIONAL.

Dalam paper ini disebutkan bahwa metode key derivation yang digunakan e-KTP sifatnya rahasia dan mereka mengimplementasikan sendiri algoritma yang sekedar bisa dipakai oleh kartu SAM dan kartu KTP mereka sendiri.

Amankah e-KTP

Aman tergantung dari sudut pandang mana: dari pembuatan KTP, dan dari pemilik/pengguna KTP. Keamanan e-KTP ada pada SAM-nya.  Ini berarti beberapa hal:

  • Kartu SAM harus dijaga ketat, karena jika bisa dipinjam, maka bisa digunakan membuat KTP Aspal
  • Semoga key generation-nya aman. Saya sudah pernah menemukan kode SAM yang aman, tapi cara membuat key yang random hanya mengandalkan fungsi random biasa (bukan secure random) dan menggunakan seed waktu saat ini.
  • Semoga key utama disimpan dengan baik oleh kemendagri

Saat ini data foto sama sekali tidak diproteksi, sehingga seseorang bisa mengambil foto dari dompet yang tertutup. Menurut standar security MRTD, seharusnya data yang bisa dibaca dienkrip dengan informasi yang tertera di kartu. Misalnya untuk paspor, dari nomor paspor, tanggal lahir, tanggal kadaluarsa. Informasi ini tertera di kartu, jadi seseorang yang berusaha membaca dokumen tidak bisa membaca jika memang tidak memegang kartunya. Dengan ini kita bisa memastikan apakah benar isi data elektronik sama dengan data yang dicetak.

Sempat ada aplikasi POC reader e-KTP tapi sayangnya sudah dihapus dari Google Play (tapi masih bisa didownload dari sini). Aplikasi ini membaca data foto seperti saya jelaskan di atas. Sebenarnya agak berbahaya mempercayai data ini, karena mudah sekali membuat card yang jika dibaca dengan aplikasi tersebut akan keluar foto.

Semoga programmernya handal dan tidak membuat kesalahan implementasi. Saya agak khawatir membaca kode seperti ini di salah satu aplikasi yang saya dekompilasi.

Dari mana bisa tahu ini semua?

Pertama adalah mencari dulu aplikasi desktop e-ktp. Ini bisa dicari dengan query berikut di Google.

“index of” e-ktp inurl:.go.id/

Sekarang sepertinya sudah cukup sadar sehingga installernya lebih sulit dicari, tapi tahun lalu ini mudah sekali dicari. Programnya ditulis dalam .NET tanpa obfuscation sehingga mudah dibuka.

Berikutnya eksperimen diteruskan dengan e-KTP orang tua saya. Saya sudah mencoba beberapa attack yang umum, dan sepertinya semuanya aman.

Saat ini saya baru menemukan hal-hal kecil yang undocumented. Seperti halnya web server yang bisa dicari direktori tersembunyi dengan teknik “forced browsing”, kita bisa mengirimkan perintah berurutan ke smart card untuk mencari tahu perintah mana yang menghasilkan sesuatu tapi tidak terdokumentasi.

Demikian hasil oprekan e-KTP untuk saat ini. Mungkin di masa depan akan saya teruskan lagi. Saat ini belum ada ide serangan baru.

 

AlphaSmart Dana

AlphaSmart Dana adalah device Palm OS lama dengan form factor keyboard yang sudah tidak diproduksi lagi. Device ini dulu cukup populer di banyak sekolah di amerika, terutama digunakan untuk anak-anak yang kesulitan menulis dengan pulpen/pensil. Device ini saat ini masih populer di kalangan penulis karena beberapa hal: keyboardnya enak dipakai untuk mengetik, minim gangguan (karena tidak bisa mengakses internet), relatif ringan (sekitar 1 kg), memakai 3 Batere AA biasa (atau yang rechargable) dan tahan beberapa puluh jam sebelum perlu mengganti batere lagi. Ada dua versi Dana, Wireless dan non wireless, yang akan dibahas di sini adalah versi wireless yang kami punya.

Stiker biru kecil di tengah Dana itu ditempelkan supaya gampang membedakan dari Dana yang lain.

Untuk mentransfer data ke komputer, ada beberapa opsi. Opsi pertama adalah menggunakan mode keyboard, dengan ini seolah-olah alphasmart akan “mengetik ulang” isi file ke editor apapun yang terbuka di layar komputer. Dengan cara ini AlphaSmart Dana bisa terkoneksi ke device apa saja yang menerima input dari USB keyboard (termasuk juga tablet atau ponsel, asalkan bisa memberikan cukup daya). Kabel yang digunakan adalah kabel USB printer standar. Opsi kedua adalah dengan menggunakan jaringan WIFI (sayangnya yang disupport hanya WEP). Opsi terakhir adalah dengan menggunakan SD Card

Karena menggunakan sistem operasi Palm OS, maka berbagai aplikasi Palm OS lama bisa diinstall di device ini dan tentunya kita bisa membuat sendiri aplikasi baru yang dibutuhkan. Contoh aplikasi yang bisa diinstall misalnya: Bible Reader (terpakai oleh Jonathan), Kamus, dan Timer. Sayangnya ukuran device ini tidak standar, jadi banyak aplikasi hanya akan muncul kecil di tengah layar. Beberapa aplikasi bisa diakali menggunakan RsrcEdit agar bisa menggunakan layar yang besar, tapi beberapa perlu dicompile ulang (jika sourcenya tersedia).

Beberapa tahun lalu saya sebenarnya sudah tertarik membeli device ini, harganya relatif murah (sekitar 20-50 USD, tergantung sellernya di eBay), tapi yang tidak murah adalah ongkos kirimnya, sehingga harga totalnya lebih dari 120 USD.

Tahun ini saya berusaha seminimal mungkin membeli gadget ataupun komponen elektronik untuk dioprek. Ketika mendekati ulang tahun saya, saya berpikir untuk membeli satu device untuk hadiah diri sendiri. Tadinya terpikir membeli console Nintendo Switch (apalagi baru ada kabar ini mulai bisa dihack) atau Nintendo 3DS (yang harganya sudah tidak terlalu mahal). Tapi kalau dipikir-pikir saya jarang sekali bermain game, jadi saya urungkan niat membeli console game.

Begini layar Dana di emulator Palm OS. Aslinya tidak sejernih ini.

Saat ini AlphaSmart seri Dana sudah mulai sulit dicari di eBay. Kebanyakan yang ada adalah AlphaSmart Neo, yang merupakan versi sebelumnya. Alphasmart Neo tidak memiliki sistem operasi dan bisa bertahan puluhan hingga ratusan hari dengan beberapa batere AA. Kelemahan Neo bagi saya adalah sulit dioprek (karena tanpa OS)

Ketika saya melihat ada yang menjual Dana di-eBay, tapi harga plus ongkos kirimnya 110 USD, saya kembali mengurungkan niat. Tapi kmemudian muncul listing lain: 7 Alphasmart Dana versi Wireless berikut ongkos kirim total semuanya menjadi 228 USD. Sebenarnya saya nggak butuh 7 benda ini, tapi jika dirata-ratakan harganya hanya 32.5 USD. Saya cukup yakin bisa menjual ulang benda ini dengan harga 33 USD per item (dan sudah terjual 2). Selain itu saya juga ingin mencobakan benda ini ke Jonathan.

7 Dana. Semuanya sudah ada dialokasikan, belum dikirimkan.

Ketika sampai, saya langsung coba semuanya dan semua berjalan normal. Tapi sayangnya hanya 3 yang memiliki stylus. Untuk memilih menu, kita bisa memakai jari, dan stylus apa saja bisa dipakai di benda ini, selain itu sebenarnya jarang sekali stylus ini dipakai karena semua  fungsi bisa diakses dari keyboard.

Layar Dana adalah seperti pada PDA Palm lama, jadi bagi sebagian orang mungkin akan sulit membaca layar ini. Bagi saya sih baik-baik saja. Layar Dana ada backlightnya sehingga bisa dipakai dalam gelap. Layarnya juga cukup jelas terbaca di bawah matahari langsung. Bagi sebagian orang kontrasnya kurang bagus dan sudut pandangnya kurang bagus. Benda ini juga tidak memiliki keyboard backlight, jadi harus memakai touch typing ketika mengetik dalam gelap. Sebuah lampu USB bisa dipasang di atas benda ini tapi akan boros batere.

Dengan menggunakan alphasmart saya dipaksa untuk tidak mengecek internet, dan juga tidak terganggu dengan berbagai notifikasi. Sejauh ini saya jadi lebih banyak menulis artikel blog (seperti artikel ini yang ditulis di AlphaSmart lalu ditransfer ke komputer).

SD Card

Dana mendukung dua SD Card. Agak aneh memang karena device modern biasanya hanya mendukung 1 kartu saja. Aplikasi bisa diletakkan di SD Card, jadi kita bisa menyimpan aplikasi di SD card pertama sementara SD Card kedua untuk data. SD Card yang didukung hanya yang ukurannya maksimum 1GB. Card ukuran ini sudah sulit dicari tapi masih bisa didapatkan secara online.

Secara umum penyimpanan internal Dana tergolong besar untuk Palm OS, biasanya PalmOS hitam putih hanya sampai 8 MB memorinya, tapi Dana sampai 16 Mb. Seperti Palm OS, memori Dana sifatnya volatile, artinya akan segera hilang isinya jika batere dicabut (tapi ada kapasitor yang bisa menyimpan data beberapa menit sementara kita mengganti baterenya). Jadi jangan sampai batere Dana benar-benar habis, karena semua isinya akan hilang.

Sebagai catatan: jika 1 kata rata-rata 10 huruf (kata dalam bahasa Indonesia cukup panjang), dan kita menulis 1000 kata per hari, maka hanya butuh 10kB, dan setahun hanya butuh 3650 kB atau 3.65 MB (jangan protes dengan konversi x1000 bukan x1024 saya memakai decimal prefix bukan binary prefix). Jadi tanpa SD Card pun kapasitas Dana sudah cukup besar. Sebuah SD Card 16 MB akan cukup besar untuk kebutuhan sebagian besar orang.

Battery Hack

Aslinya Dana bisa memakai 3 batere AA biasa (non rechargable), atau battery pack yan rechageable. Keduanya memakai slot yang sama, jadi tidak bisa kita memakai keduanya sekaligus. Bedanya antara batere biasa dan rechargeable pack hanyalah pada konektornya. Konektor batere biasa tidak akan menerima arus charging ketika Dana dicolok ke adaptor atau ke komputer, sedangkan konektor satu lagi akan menerima charging.

Hack paling sederha adalah: mengganti agar kabel charging bisa dipakai di slot batere biasa. Alternatif lainnya adalah membongkar battery pack lama dan menggunakan kabel itu tanpa menyolder kabel. Cara ini yang saya lakukan. Sekarang tiap beberapa hari saya bisa menhubungkan Dana ke komputer sambil charging.

Begini baterry pack aslinya. Saya kupas untuk diambil kabelnya saja.
Batere rechargeable saya pasang dengan konektor yang dilepas dari battery pack lama.

Sinkronisasi dengan PC

Saat ini software sinkronisasi Palm OS masih bisa digunakan di Windows 10, termasuk juga yang 64 bit. Sayangnya Dana tidak bisa disinkronisasi dengan Linux. Dulu saya pernah memakai Palm dengan USB dan sudah tahu berbagai triknya di Linux, tapi sayangnya module kernel visor tidak mengenali benda ini. Saya sudah berusaha compile ulang modul kernelnya dengan memodifikasi Vendor/Product ID agar dikenali, tapi ternyata protokolnya berbeda dan Dana akan crash ketika saya paksa.

Akses WIFI

Saya sudah mensetup access point dari Raspberry Pi untuk bisa menyimpan dan membuka dokumen dari jaringan. AlphaSmart hanya mendukung WEP dengan enkripsi 40 atau 128 bit. Share yang bisa diakses adalah SMB versi 1. Di Raspberry Pi saya setup Dropbox Uploader sehingga file yang saya simpan di folder akan diupload ke Dropbox. Tutorialnya sudah saya tulis di blog saya yang lain.

Meskipun teorinya bisa dipakai untuk browsing web sederhana, tapi berbagai software yang ada sudah terlalu tua dan berbagai web yang ada sudah  terlalu kompleks. Jadi akses WIFI ini hanya saya gunakan untuk mengirimkan dokumen supaya terarsip di Dropbox.

Dana terkoneksi ke jaringan

Sebagai catatan: jangan mengubah akses poin di rumah menjadi WEP, karena mudah sekali dicrack. Dengan RPI dan USB Dongle, range WIFI hanya dekat saja (paling menembus 1 kamar). Share untuk dana juga sebaiknya tidak dicampur dengan file lain karena dua alasan: supaya Dana tidak hang atau bingung jika ada terlalu banyak file, dan juga agar file lain aman andaikan ada yang berhasil masuk melalui access point yang ditujukan untuk Dana.

Penutup

Sejauh ini saya cocok memakai AlphaSmart Dana, dan sudah menulis banyak posting blog sejak menggunakan benda ini serta cukup banyak mengoprek benda ini. Bagi Risna menulis di AlphaSmart kurang nyaman karena kurang bisa melihat dengan jelas teks di layar dan kurang nyaman untuk editing. Jonathan baru suka bereksperimen memakai Dana, tapi belum suka banyak mengetik.

 

Bulan Penuh Diskon

Bulan November merupakan bulan penuh diskon, karena ada 11/11 (singles day) dan ada banyak diskon dari berbagai situs di China, lalu diikuti dengan Black Friday dan Cyber Monday yang penuh dengan diskon global.

Dibandingkan tahun lalu, tidak terlalu banyak diskon yang diberikan oleh AliExpress, benda mahal yang saya beli  hanya Proxmark3 versi paling sederhana (tidak memiliki konektor batere) dengan harga 66 USD (termasuk ongkos kirim). Proxmark3 ini adalah tool untuk eksplorasi RFID/NFC.

Sebenarnya dalam banyak kasus berbagai penstest dan hacking NFC bisa dilakukan dengan reader sederhana yang harganya kurang dari 5 USD, tapi proxmark ini diperlukan untuk sniffing dan juga untuk mengakses berbagai kartu yang tidak standar.

Texas Instruments baru saja meluncurkan board MSP43  baru (Launchpad dengan FRAM), dengan harganya 9.9 USD belum termasuk ongkos kirim, tapi saat ini  diskon menjadi 4.30 USD (sudah termasuk ongkos kirim). Diskonnya masih ada sampai Desember 2017. Development board dari TI ini bisa dipakai juga memprogram chip MSP430 lain.

Waktu pindah ke rumah baru, UPS yang tadinya baik-baik saja menjadi tidak berfungsi sama sekali. Setelah dibongkar, ternyata ada kabel yang kendor di dalamnya (mungkin kendor waktu pindahan). Tapi UPS-nya sudah tidak menyimpan daya lagi dan baterenya agak melendung (batere dari tahun 2012). Akhirnya  beli baru dan UPS-nya bisa berfungsi lagi.

Ada kit yang namanya Makey Makey yang fungsinya mengubah berbagai benda konduktif menjadi input device. Contoh benda dan aplikasinya bisa dilihat di situs tersebut, tapi beberapa di antaranya: mengubah pisang menjadi alat musik atau membuat tangga musikal dengan conductive tape.

Harga makey makey cukup mahal, jadi ketika saya lihat ada modul MPR121  di aliexpress yang harganya kurang dari 2 USD, saya langsung cek apakah mudah dipakai (dari beberapa tutorial dan video youtube), dan ternyata mudah. Dengan menghubungkan modul ini ke Arduino Leonardo, saya bisa membuat tiruan makey makey. Sebagai catatan, seri Arduino Leonardo dan Pro Micro bisa dengan mudah mengemulasikan USB, seri lain defaultnya tidak bisa kecuali dengan menambah beberapa komponen dan memakai software Lufa atau V-USB.

Cukup seru memainkan ini, tapi setiap kali selesai bermain dari kamar lain dan melihat pisangnya, Joshua berusaha ambil untuk dimakan.

Dan setelah share ini di Facebook, beberapa hari kemudian muncul iklan diskon Makey makey di Facebook feed.

Selain bulan diskon, di bulan November kami banyak melakukan aktivitas lain.  Tahun ini festival Loi Krathong dirayakan di awal bulan. Kami datang ke sungai dekat rumah untuk melihat orang-orang melarung krathong. Festival ini selalu bersamaan fetival Yi Peng, di mana orang menerbangkan sky lantern (seperti di film Tangled).

Beberapa kali ulang tahun Jonathan dirayakan bersama orang Indonesia di Chiang Mai, dan tahun ini lagi. Sekarang lebih ramai dari dulu karena lebih banyak keluarga yang punya anak. Tema tahun ini Doctor Who (sebelumnya Pokemon, dan sebelumnya lagi Paw Patrol).

Risna berhasil membuat tempe lagi tahun ini dengan ragi yang dibawakan oleh mama saya. Seperti biasa, demi privasi, foto-foto yang ada orang lain hanya diupload di Facebook untuk friends saja.

Untuk kesekian puluh kalinya, kami jalan-jalan di Night Safari. Sebenarnya tempat ini mahal (800 baht sekitar 320 rb rupiah per orang) tapi kami punya membership gratis masuk berapa kalipun dalam 6 bulan (membership 6 bulan hanya 500 baht sekitar 200 rb rupiah). Kami bisa menghabiskan waktu 3-6 jam di sini tiap kali datang. Ada bus keliling 2 jalur, totalnya sudah 1 jam, plus ada play ground (biasanya sekitar 1 jam main di play ground).

Joshua menjatuhkan iPad ke jempol kakinya dan hasilnya dalam beberapa hari kuku kakinya lepas, jadi kami membatasi jalan-jalan ke tempat yang tidak berdebu/berpasir. Ketika dibawa ke night safari, Joshua dengan semangat berlari di walking trail.

Ada tempat baru yang kami kunjungi: Rabbit Union. Di sini anak-anak bisa memberi makan dan mengelus-elus kelinci. Awalnya cukup menyenangkan bermain dan mengejar kelinci, tapi di akhir Joshua mulai berusaha mengangkat kelincinya.

Chiang Mai Citylife Garden Fair adalah acara tahunan outdoor. Di sini ada musik, banyak penjual makanan, pembaca kartu tarot, dan ada juga kegiatan untuk anak-anak.

Jonathan ikut menghias pot bunga, dan setelah itu potnya (dengan bunganya) bisa dibawa pulang.

Wii kami yang umurnya sudah hampir 10 tahun rusak. Sepertinya NAND-nya error secara fisik karena sudah dicoba restore dari backup (yang dibuat dengan BootMi) tapi gagal. Format ulang dan recreate juga gagal.

Terpikir untuk upgrade ke Wii U atau Switch, tapi akhirnya beli second hand console Wii lagi dari eBay. Nintendo Switch masih mahal dan tidak kompatibel dengan Wii Fit Board, sedangkan Wii U sepertinya masih agak bahaya jika Joshua membawa-bawa controllernya.

Teringat dulu saya pernah bikin beberapa app homebrew di console ini yang sampai saat ini masih berjalan karena Wii tidak mengupdate lagi firmwarenya.

Saya tidak mengikuti berita kalau Rasberry Pi meluncurkan majalah baru untuk oprekan hardware secara umum, bukan hanya Raspberry Pi. Versi PDFnya gratis bisa didownload dari hsmag.cc dan kita juga bisa berlangganan versi fisiknya.

Saya sempat heran kenapa ada majalah baru di kotak surat, ternyata sebagai pelanggan MagPi, saya dapat edisi pertama fisik gratis. Dan jika Anda ingin berlangganan, ada kode diskon 25 GBP di kertasnya.

Hacking dan Reverse engineering hardware

Saat ini di jaman IOT, makin banyak orang yang tertarik untuk hacking dan reverse engineering (RE) hardware. Karena sudah cukup banyak orang menanyakan topik ini, maka di artikel ini akan saya bahas dasar-dasarnya, plus tools apa saja yang dibutuhkan jika ingin memulai.

Dalam artikel ini RE hanya bertujuan memahami software dan hardware dalam sebuah sistem. Hacking hardware bermakna lebih luas misalnya menambah atau mengubah sesuatu di hardware, misalnya menjalankan Doom di printer, membuat hardware baru, atau oprekan apapun yang berhubungan dengan hardware.

Supaya bisa mengubah sebuah hardware yang tidak terdokumentasi, kita perlu melakukan dulu reverse engineering untuk memahami cara kerjanya, baru setelah itu kita bisa melakukan perubahan. Untuk hardware open source atau yang dokumentasinya sangat baik, proses RE ini tidak perlu.

Tujuan melakukan Hacking Hardware

Ada banyak tujuan RE dan hacking hardware, misalnya:

  • Mencari key enkripsi untuk mengakses konten gratis atau untuk membuat konten baru (misalnya game homebrew), atau bahkan membajak, contohnya dalam kasus Game Console
  • Memperbaiki, menambah atau menghilangkan fungsionalitas , misalnya menambah SD Card di router
  • Mengekstraksi firmware dengan berbagai tujuan: mencari bug di firmwarenya, mengclone firmwarenya (membuat produk tiruan), mencari key dalam firmwarenya

Perlu dicatat bahwa dalam 99% kasus, ujung dari reversing hardware adalah melakukan reversing software yang berjalan di hardware tersebut. Lanjutkan membaca “Hacking dan Reverse engineering hardware”

Kesibukan dan Oprekan Agustus 2017

Seperti biasa, jika sudah lama tidak posting, ceritanya digabung. Posting ini campuran cerita mengenai SIM Card Hologram, RHME3, perjalanan ke Singapore dan cerita mengenai tablet Android.

SIM Card Hologram

Tanggal 26 Juli 2017 saya melihat posting mengenai program developer untuk Hologram dan saya segera mendaftar untuk mendapatkan SIM Card gratis.

Secara singkat, dengan SIM card Hologram dan kerjasama mereka dengan jaringan GSM di (hampir) seluruh dunia, kita bisa membuat produk IOT (Internet of Things) yang bekerja secara internasional dan relatif murah.  Tidak perlu memikirkan roaming data dan tarif yang berbeda di tiap negara.

SIM card hologram ini bukan untuk dipakai di handphone dan browsing, tapi ditujukan untuk dipakai di embedded system yang butuh konektivitas data yang ukurannya relatif kecil dan di luar jangkauan WIFI, walau bisa juga sebagai komplemen atau cadangan WIFI.

Khusus untuk developer plan, diberikan jatah 1 MB/bulan gratis untuk development. Jika dipakai untuk browsing, satu megabyte itu bahkan tidak cukup untuk membuka halaman depan blog ini, tapi untuk keperluan pengiriman data dari sensor ini sudah cukup.

Tanggal 11 Agustus SIM Cardnya sudah sampai, dan saya test menggunakan modem HSDPA murah (kurang dari 9 USD, sudah termasuk ongkir). Percobaan saya lakukan di Linux dengan wvdial, dan koneksi bisa mudah dilakukan.

IP yang didapatkan adalah IP internal. Device bisa mengakses IP eksternal, dan waktu saya coba asal IP nya dari Saint Helier, Jersey. Untuk koneksi kebalikannya (dari eksternal ke device), kita bisa memakai API yang disediakan hologram (atau membeli nomor supaya bisa dikirimi SMS).

Sebenarnya saat ini saya nggak punya proyek khusus yang ingin saya lakukan, tapi ini bisa saya pakai untuk melakukan koneksi ke server rumah jika koneksi internet sedang mati.

CTF RHME3

Karena waktu saya semakin terbatas, sekarang ini saya hanya sempat mengikuti CTF jangka panjang, bukan CTF 2 hari di akhir pekan. Saat ini sudah ada beberapa yang rutin: Flare-On, Labyrenth, dan RHME.

Saya mulai ikut CTF RHME tahun lalu, dan tahun ini sudah dimulai lagi: The world first automotive CTF, begitu slogan RHME tahun ini. Registrasinya kemarin dibuka tanggal 7 Agustus dan ditutup tanggal 28 Agustus. Ada tiga soal yang cukup sulit, mereka mengalokasikan 500 device, tapi hanya 486 orang yang menyelesaikan minimal 1 soal.

Dari Indonesia cuma teman saya Deny yang berhasil mendaftar (padahal dah beberapa kali saya umumkan di group RE Indonesia yang anggotanya ratusan). Dari Thailand ada 7 orang yang mendaftar.  Device akan dikirimkan ke peserta mulai 1 November nanti.


Sekarang ini Joshua sedang sangat senang nempel ke saya, kadang minta dipangku nonton Youtube padahal bisa nonton di TV yang besar atau di tablet, sementara saya coding (split screen). Sepertinya sudah saatnya beli dua monitor.

HITB Singapore

Tahun ini saya mencoba lagi HITB ke Singapore, walau hasilnya kurang memuaskan (peringkat 14 offline dari 28 team). Pesertanya jauh lebih kompetitif dari terakhir kali kompetisi beberapa tahun yang lalu. Soal-soalnya juga jauh lebih sulit.

Meski tidak menang, tapi saya senang bisa bertemu lagi dengan teman-teman yang sudah lama tidak saya temui, dan juga bertemu teman baru.

Buat orang-orang yang meng-add saya di Facebook: segala macam hal-hal menarik saya buat jadi public di timeline saya atau di blog. Hal-hal yang sifatnya hanya untuk teman saja, saya publish untuk “Friend” (seperti misalnya foto teman-teman yang saya temui di Singapore), jadi sebenarnya nggak seru nge-add saya jadi friend di Facebook.

Bug Bounty

Meski sudah banyak bug yang saya laporkan ke berbagai pihak, biasanya balasannya cuma: makasih mas. Ada juga bahkan yang gak pake terima kasih, terus diem-diem benerin. Ada beberapa yang nawarin kerjaan/proyek, tapi kemudian nggak ada kabarnya lagi.

Setelah tahun lalu menemukan bug di payment gateway Master Card (dan menerima 8500 USD), tahun ini saya coba-coba lagi dan menemukan lagi bug di beberapa payment gateway. Sayangnya yang sangat tanggap cuma satu: Fusion Payments. Di bulan ini saya sudah menemukan 2 critical level bug di sana, yang pertama 400 USD dan berikutnya 500 USD.

Sebagai catatan: bug-bug yang saya temukan akan saya tuliskan detailnya, tapi saat ini masih belum bisa/boleh.

Tablet Android

Beberapa waktu yang lalu saya mendapatkan pekerjaan testing aplikasi Android yang hanya berjalan di versi tablet (layar besar). Ternyata aplikasinya berisi form yang banyak sekali sehingga perlu layar lebar. Biasanya saya memakai tablet Samsung Note 8 yang sudah bertahun-tahun umurnya, tapi sekarang ini tabletnya sudah rusak (mati/tidak bisa boot lagi). Karena aplikasinya selalu hang di emulator, akhirnya saya memakai Android di Pinebook.

Semua bisa berjalan dan testing bisa selesai, tapi ada yang mengganggu: Pinebook tidak punya touch screen, dan aplikasinya hanya mau jalan di mode landscape. Jadi saya terpaksa memakai laptop dalam posisi miring, dengan menggunakan keyboard eksternal.

Akhirnya saya beli Android murah dari AliExpress. Ratingnya bagus, katanya CPUnya 8 core, memorinya 4 GB dengan ROM 32 GB. Setelah sampai, kenyataannya CPUnya cuma 4 core, RAM nya cuma 2GB dan ROM cuma 16 GB. Ternyata kernelnya diakali sehingga jika memakai software dari play store pun, akan muncul kalau memorinya 4 GB, CPUnya 8 core, dan ROM-nya 32 GB.

Waktu mau coba root dengan langsung flash recovery partition baru, ternyata malah error, tidak bisa boot sama sekali dan nggak bisa dicharge juga. Akhirnya saya charge baterenya dengan cara membuka soldernya lalu memakai modul charger Lithium. Setelah mendapatkan file ROM asli dari sellernya, akhirnya bisa jalan normal lagi. Tapi benda ini sangat ringkih, jadi saya simpan saja untuk pentest berikutnya.

 

Sebenarnya masih banyak cerita dan detail lain bulan ini, tapi akan saya geser ceritanya ke bulan depan.