- Hasil pembongkaran dan analisis firmware terminal pembayaran Worldline Yomani XR yang digunakan di Swiss menunjukkan bahwa pada konsol serial yang dapat diakses melalui hatch di bagian belakang, cukup memasukkan
rootuntuk masuk ke root shell - Terminal ini memiliki perlindungan tamper yang mendeteksi pembukaan housing, pelepasan kontak PCB, pemutusan trace zigzag, dan kerusakan flex PCB di sekitar card reader, tetapi terbukanya debug port menjadi jalur serangan terpisah
- Firmware yang diekstrak dari flash onboard berisi filesystem yang tidak dienkripsi, dan berjalan di atas Linux kernel 3.6, Buildroot 2010.02, BusyBox, uClibc, serta bootloader kustom Booter v1.7
- Fungsi keamanan seperti kartu, PIN, layar, dan keypad tampaknya ditangani oleh prosesor terpisah
mp1danmp1.imgyang dienkripsi serta ditandatangani, dan tidak ditemukan bukti bahwa Linuxmp2bisa mengaksesnya secara langsung - Versi firmware yang rentan belum dipastikan, dan ada perangkat dengan root login yang dinonaktifkan, tetapi di lingkungan tempat terminal bisa dikuasai secara fisik untuk sementara, permukaan serangannya tetap terlalu besar dan tidak perlu
Target analisis: Worldline Yomani XR
- Perangkat yang dianalisis adalah terminal pembayaran Worldline Yomani XR yang banyak digunakan di Swiss
- Setelah pemeriksaan UI pasca-boot dan pemindaian port tidak menunjukkan hasil mencolok, analisis berlanjut ke pembongkaran perangkat keras
- Bagian dalamnya terdiri dari beberapa PCB
- papan kecil untuk konektor eksternal
- papan utama
- papan vertikal yang dipasangi slot kartu
- SoC utamanya tampak berupa ASIC kustom berbasis Arm dual-core yang dalam firmware muncul dengan codename “Samoa II”
- Menurut dokumentasi Worldline, chip ini bukan rebranding chip komersial yang sudah ada, melainkan ASIC kustom
- Di sebelah SoC terdapat flash eksternal kecil dan RAM
Struktur perlindungan tamper pada hardware
- Tidak ditemukan switch pendeteksi pembukaan housing yang umum, dan sebagai gantinya board-to-board interconnect itu sendiri dipakai sebagai sarana deteksi pembukaan
- Di antara papan terdapat Zebra strip yang sensitif terhadap tekanan, sehingga kontak hanya tetap tersambung jika papan dikencangkan kuat dengan sekrup
- Hanya dengan mengendurkan beberapa sekrup saja, kontak bisa terputus dan memicu event tamper
- Karena deteksi dibutuhkan bahkan saat daya utama terlepas, digunakan coin cell battery
- Area PCB yang rentan ditutupi trace pendeteksi tamper berbentuk zigzag
- Jika satu copper trace saja putus akibat penetrasi fisik, deteksi tamper bisa terpicu
- Slot kartu berada di dalam housing internal terpisah, dan flex PCB yang mengelilinginya berfungsi sebagai perlindungan tamper
- Setelah dirakit kembali, terminal hanya menampilkan layar merah besar bertuliskan “TAMPER DETECTED”, dan dalam mode ini tampaknya tidak merespons input eksternal
Ekstraksi flash dan pemulihan filesystem
- Ketika eksplorasi runtime terhambat, flash chip onboard dilepas lalu dihubungkan dengan wire untuk melakukan dump isi
- Isi dump ternyata tidak terenkripsi secara menyeluruh seperti yang diduga
- Flash menggunakan tata letak ECC yang tidak umum
- Bukan konfigurasi standar 2048 byte payload + 64 byte ECC/spare
- Terdapat 3 data chunk masing-masing 694 byte, dan setelah tiap chunk ada 10 byte ECC
- 16 byte terakhir di spare area tampak sebagai metadata filesystem YAFFS2
- Karena area metadata-nya lebih kecil daripada YAFFS2 biasa, filesystem perlu dipatch agar bisa menangani struktur metadata yang lebih kecil
- Setelah reader filesystem yang kompatibel diimplementasikan, isi filesystem berhasil diekstrak
Sistem berbasis Linux yang sudah tua
- Dari filesystem yang diekstrak, dipastikan bahwa terminal menjalankan Linux
- Sistem ini berisi komponen lama
- Linux kernel 3.6
- Buildroot 2010.02
- build Februari 2023
- bootloader kustom
Booter v1.7 - init script, BusyBox, uClibc
libcrypt0.9.26
- Tidak dapat dipastikan seberapa mutakhir versi firmware hasil dump tersebut, tetapi seharusnya itu adalah firmware yang dirilis setelah Februari 2023
Root shell tanpa kata sandi
- Setelah flash chip dihubungkan kembali dengan wire, terminal kembali boot meski tetap menampilkan pesan tamper
- Untuk melihat Linux boot log, area di sekitar debug connector diperiksa dengan logic analyzer, dan aktivitas ditemukan pada salah satu pad dari debug connector yang belum terpasang komponennya
- Pada konsol serial, muncul Linux boot log bersama login prompt
- Boot log menampilkan “Reset reason: Tamper”
- Muncul juga log seperti
dropbear is not present, pemeriksaan pembaruan firmware, dan inisialisasi application monitoring daemon - Pada akhirnya muncul prompt
samoa login:
- Ketika
rootdimasukkan sebagai login, prompt shell~ #langsung muncul tanpa kata sandi - Akses ini tidak memerlukan exploit chain maupun brute-force password cracking
Debug port yang bisa diakses dari luar
- Akses root shell tidak hanya terbatas pada kasus saat bagian dalam terminal dibuka
- serial port bisa diakses dari luar melalui hatch kecil di bagian belakang terminal
- Koneksi ke debug connector dapat dilakukan tanpa membuka terminal dan tanpa memicu perlindungan tamper
- Disimpulkan bahwa bila terminal bisa dikuasai secara eksklusif untuk sementara, ada skenario di mana seseorang dapat terhubung ke serial port, login, memasang malware, lalu pergi
Pemisahan peran prosesor keamanan dan Linux
- Root shell yang terekspos tidak serta-merta berarti akses ke data kartu atau PIN
- Sistem Linux hanyalah satu bagian dari keseluruhan arsitektur, dan tidak ditemukan bukti bahwa layar, keypad, atau card reader bisa diakses langsung dari Linux
- Bahkan output layar tampaknya tidak ditangani langsung oleh framebuffer driver, melainkan dengan meneruskan string ke binary
display_tool, lalu binary ini mengirim inter-processor message - Fungsi terkait keamanan seperti kartu, input PIN, dan tampilan layar tampaknya ditangani oleh prosesor terpisah
mp1 - Linux yang berjalan pada prosesor kedua
mp2bertanggung jawab atas networking, update, dan business logic
Alur boot dan secure image
- Core Linux tampaknya selalu boot terlepas dari status tamper
- Setelah itu Linux memuat secure bootloader
loadercodeke memori loadercodememeriksa apakah perlindungan tamper telah terpicu- Jika tamper terdeteksi, layar merah ditampilkan
- Jika tidak ada masalah, image aman yang sebenarnya,
mp1.img, akan di-boot
mp1.imgberada di dalam filesystem Linux, tetapi tampaknya dienkripsi dan ditandatangani oleh dua entity- Secure image yang menangani kartu, layar, dan keypad telah dienkripsi dan ditandatangani dengan semestinya
Jadwal pengungkapan dan ketidakpastian yang tersisa
- Jadwal pengungkapan dicatat sebagai berikut
- 14 November 2024: root shell ditemukan
- 15 November 2024: dilaporkan ke produsen dan diberi tahu akan dipublikasikan setelah 90 hari
- 18 November 2024: produsen mengonfirmasi penerimaan laporan
- 1 Juni 2025: dipublikasikan
- Root shell yang terekspos merupakan permukaan serangan yang terlalu besar dan tidak perlu, tetapi tidak ditemukan bukti bahwa data sensitif seperti informasi kartu dapat dikompromikan melalui jalur ini
- Belum dipastikan versi firmware mana yang rentan
- Selama penelitian, juga ditemukan perangkat dengan root login yang dinonaktifkan
- Tidak diketahui pada titik mana fitur debug masuk ke firmware produksi, atau apakah hal itu sudah ditemukan dan diperbaiki secara internal oleh produsen
1 komentar
Komentar Hacker News
Dengan pembaca kartu USB seharga 2 dolar, memang bisa membuat transaksi debit/kredit palsu
Spesifikasinya semuanya terbuka dan protokolnya juga terdokumentasi. Kalau tidak salah ingat, PDF-nya sekitar 5.000 halaman jadi sangat menyiksa untuk dibaca
Tetapi untuk memverifikasi transaksi itu, datanya harus dikirim ke bank lewat internet, dan itu bisa membuat lembaga federal/FBI datang mencari
Pada pembaca kartu itu sendiri hampir tidak ada perlindungan nyata, kebanyakan hanya menjalankan Linux kecil dengan kata sandi yang buruk. Perlindungan utamanya datang dari kontrak dan regulasi antara toko dan bank
noexecLogin root dinonaktifkan, menggunakan busybox yang banyak fiturnya dipangkas, dan kunci dimuat dari area aman saat boot. Penyuntikan master key hanya bisa dilakukan saat pemuatan di pabrik, proses boot sendiri juga cukup aman, dan jika terdeteksi adanya manipulasi maka chip akan dikosongkan
Tentu saja, kalau itu terminal Android murah tanpa sertifikasi EMV yang diimpor dari Asia, besar kemungkinan yang dipakai adalah Linux standar dengan sistem file root read/write, login root aktif, bahkan sudo untuk user yang menjalankan aplikasi. Deteksi manipulasi juga kemungkinan tidak ada, screen casting tidak dikunci, port bisa dibuka, dan busybox mungkin hampir utuh
Dari sudut pandang orang yang selama beberapa tahun mengembangkan aplikasi EMV untuk akuisisi kartu dan kadang masih melakukannya sampai sekarang, bahkan mode pengembangan pun mengharuskan vendor memberikan ID pengembang dan sistemnya terkunci cukup rapat
Karena itu teori konspirasi bahwa orang bisa berkeliling membawa pembaca kartu portabel lalu mencuri uang dari kartu nirsentuh juga salah. Transaksi seperti itu memang bisa dibuat, tetapi masalahnya adalah apa yang terjadi setelahnya dan konfigurasi yang harus disiapkan sebelumnya
Bahkan tidak jelas apakah uangnya sempat bisa dicairkan sebelum pelakunya tertangkap dan diblokir. Sekarang makin sulit juga karena banyak orang menyalakan notifikasi push untuk transaksi
Jika kunci itu bocor, seseorang bisa menyamar sebagai transaksi yang sah
Dalam kasus spesifik ini tampaknya sulit atau tidak mungkin, tetapi justru karena itu riset di bidang ini tetap berarti
Saya tidak tahu apa yang harus dicari, tetapi pernah tergoda membongkar salah satu pembaca Stripe M2 yang saya punya untuk melihat bagian dalamnya
Masalahnya, dari 36 pembaca yang dibeli, 7 di antaranya “mati”. Dua tidak bisa mempertahankan daya, satu tidak bisa memindai NFC, dan empat menampilkan “tampered”. Sekilas tingkat kerugiannya terlihat buruk, tetapi gambaran lengkapnya perlu mempertimbangkan frekuensi pemakaian dan umur perangkat
Dan jawabannya justru lebih buruk. Umur perangkat 1–3 tahun, dan total hari pemakaian paling banyak hanya 9 hari. Jadi dalam total 9 hari penggunaan, 7 dari 36 unit rusak dalam satu bentuk atau lainnya. Saat dipindahkan pun semuanya disimpan di hard-shell case dengan foam insert dan slot terpisah untuk tiap pembaca
Jadi saya tidak terlalu suka pembaca M2, tetapi itu masih jadi pilihan terbaik untuk saya
[0] Sebagai latar belakang, perusahaan kami menangani pembayaran untuk festival. Kami pergi ke lokasi acara dan memproses pembayaran tatap muka dengan iPad dan pembaca M2, sementara sebagian besar pembayaran terjadi lewat web/aplikasi. Karena itulah jumlah “hari penggunaan” selama 3 tahun jadi serendah ini
Dan besar kemungkinan deteksi manipulasi juga memerlukan baterai yang berfungsi normal
Bisa jadi strukturnya memang begitu: saat segel manipulasi terpicu, root shell justru dibuka
Artinya sistem bisa berada dalam mode aman yang memiliki kunci kriptografi yang dibutuhkan untuk beroperasi, atau dalam mode tidak aman dengan root shell terbuka untuk debugging dan analisis gangguan, sementara pada proses perpindahannya kunci privat penting dihapus
Saya jadi penasaran apakah bisa mendapatkan salah satu terminal itu. Kalau memang sedang diganti dan menghilang dari peredaran, mungkin tidak terlalu sulit mencari unit bekas
Untuk orang yang mudah bersemangat, perlu ditambahkan bahwa ada bagian yang mengatakan, “root shell yang terekspos tampaknya bukan risiko sebesar yang awalnya dikhawatirkan. Kami tidak menemukan bukti bahwa data sensitif seperti informasi kartu dapat dikompromikan lewat cara ini”
Meski begitu, ini tetap bacaan yang bagus bagi perancang keamanan
Dalam keamanan, akses fisik, dan walau sedikit di bawahnya akses root, pada dasarnya hampir setara dengan peretasan yang berhasil
Jika Linux yang sudah dikompromikan itu menentukan apakah akan memuat kode “mode kompromi” atau sistem keamanan mp1, itu tampak seperti jalur yang layak dieksplorasi
Bootloader-nya sendiri memang dikatakan aman, tetapi kalau pemuatan ke lingkungan yang sudah dikompromikan bergantung pada lokasi eksekusi aktual, itu bisa jadi tidak terlalu berarti
Ko-prosesor itu mungkin bisa dianggap semacam Secure Enclave, tetapi fakta bahwa Linux bisa memuat dan menjalankan bootloader terpisah tetap mengkhawatirkan
loadercode, tetapi perangkat tidak mau bootJadi saya menduga ada pihak ketiga, mungkin boot ROM, yang memverifikasinya
Selain itu, tampaknya Linux selalu memuat
loadercodedanmp1.imgapa pun status manipulasinya. Jalur kode berbeda berdasarkan status manipulasi sepertinya dipilih di dalamloadercodeyang dilindungi integritasnyaJika ingin mode yang lebih mudah, lihat saja terminal kartu berbasis Android yang banyak keluar belakangan ini
Terutama karena PIN ditekan langsung di layar, kemungkinan hasilnya akan jauh lebih memuaskan
Saat memasukkan data sensitif seperti PIN atau PAN, keluaran pengontrol sentuh dirutekan langsung ke prosesor keamanan dengan melewati sistem operasi keluarga Android yang menangani GUI
Jadi aplikasi perantara yang dapat diakses dalam serangan seperti ini tidak bisa melihat PIN
Kartu modern melakukan banyak operasi kriptografi di dalam kartu untuk mencegah serangan semacam ini
Serangan ini mungkin hanya akan berhasil pada terminal yang dari semua opsi pembayaran hanya pembaca kartu magnetiknya yang masih aktif, dan untuk terminal seperti itu lampu peringatan skimmer seharusnya sudah menyala bahkan sebelum prompt PIN muncul
Luar biasa. Saya suka memikirkan cara untuk melewati dan mengeksploitasi batasan perangkat keras seperti anti-tamper yang begitu luas, tetapi saya selalu mengira begitu mekanisme itu terpicu maka permainan selesai
Namun ternyata tidak selalu begitu, dan masih ada banyak bagian menarik yang layak ditelusuri. Tentu saja dengan asumsi bagian keamanannya memang dinonaktifkan dengan benar. Jika tidak, saya akan benar-benar kehilangan kepercayaan pada para perancangnya
Hanya string teks yang diteruskan ke biner bernama
display_tool, dan biner itu tampaknya mengirim pesan antarprosesor. Hal yang sama berlaku untuk keypad atau pembaca kartu. Saya tidak menemukan bukti bahwa periferal ini bisa diakses langsung dari LinuxSebaliknya, prosesor yang sepenuhnya terpisah bernama
mp1tampaknya menangani tugas “aman” seperti pemrosesan kartu, input PIN, dan penampilan informasi layar. Linux “non-aman” yang berjalan di prosesor keduamp2hanya menangani jaringan, pembaruan, dan logika bisnisMeski begitu, saya berharap strukturnya hanya memungkinkan untuk melihat bahwa tamper telah terjadi. Jika tidak, orang bisa lebih dulu memperoleh root shell lalu punya kesempatan mencegah peristiwa tamper menghapus kunci keamanan
Saat membaca semua deteksi tamper pada perangkat itu, saya jadi penasaran apa cara termudah untuk memicu mode tamper
Pada akhirnya, jika hanya dengan membuat beberapa perangkat seperti itu saja, ini bisa menjadi serangan penolakan layanan yang efisien terhadap toko yang memproses sebagian besar atau seluruh pembayarannya melalui terminal tersebut
Menarik untuk mengutak-atik perangkat seperti ini, tetapi saya tidak mengerti kenapa langsung dibuka dan status tamper dipicu. Apakah dia tidak tahu bahwa kebanyakan pembaca memang memiliki mekanisme seperti itu?
Pengujian nyata dalam status tamper mungkin tidak ada artinya. Bisa saja saat masuk status tamper untuk inisialisasi, shell justru dibuka
Rasanya membuka perangkat seharusnya menjadi hal terakhir yang dicoba
Kalau tidak, kondisinya terlalu gelap. Tentu saja kalau dipikir-pikir lagi, saya mungkin bisa langsung menempel ke konektor debug dan selesai
Dan saya juga mendapatkan shell pada perangkat kedua yang tidak ditamper
Perangkat seperti ini ada di mana-mana di Eropa. Saya kurang tahu soal Swiss, tetapi di cukup banyak wilayah Eropa yang saya tahu, orang sebenarnya tidak benar-benar memiliki atau banyak memakai kartu kredit
Saya akan menyebut ini POS, yaitu sistem titik penjualan. Perangkat seperti ini bisa membaca berbagai macam kartu. Bagaimanapun, tulisannya bagus
Saya juga tidak melihat daya tarik menyimpan lebih banyak hal di ponsel atau jam tangan pintar. Saya lebih suka jam mekanis, dan kalau ponsel saya hilang, dari sisi privasi itu sudah cukup menjadi bencana. Tentu saja ini hanya kasus saya