4 poin oleh GN⁺ 2025-06-02 | 1 komentar | Bagikan ke WhatsApp
  • 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 root untuk 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 mp1 dan mp1.img yang dienkripsi serta ditandatangani, dan tidak ditemukan bukti bahwa Linux mp2 bisa 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
    • libcrypt 0.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 root dimasukkan 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 mp2 bertanggung 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 loadercode ke memori
  • loadercode memeriksa 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.img berada 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

 
GN⁺ 2025-06-02
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

    • Tidak benar kalau pembaca kartu tidak punya perlindungan. Hanya binary bertanda tangan yang bisa dijalankan, sistem file eksekusi bersifat read-only, dan sistem file data diatur dengan noexec
      Login 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
    • Bagian bahwa inti perlindungan ada pada kontrak dan regulasi antara toko dan bank memang tepat
      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
    • Itu tidak benar. Terminal merchant memiliki hardware keamanan tertanam yang menyimpan kunci bank dan jaringan kartu
      Jika kunci itu bocor, seseorang bisa menyamar sebagai transaksi yang sah
    • Yang lebih mengkhawatirkan adalah jika pembaca kartu di lapangan berhasil dikompromikan sehingga bisa membaca informasi kartu asli yang di-cache atau disimpan, atau dipasangi malware penyadap
      Dalam kasus spesifik ini tampaknya sulit atau tidak mungkin, tetapi justru karena itu riset di bidang ini tetap berarti
    • Bisa dijelaskan sedikit lebih rinci soal bagian “dengan pembaca kartu USB seharga 2 dolar bisa membuat transaksi debit/kredit palsu”? Bukan bermaksud “tolong ajari caranya”
  • 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

    • Sebaiknya perangkat diisi daya dulu sebelum disimpan sampai acara berikutnya. Sebagian besar baterai tidak suka disimpan lama dalam kondisi daya rendah
      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 juga menduga begitu. Mungkin saja bahkan dimungkinkan mem-flash kunci baru agar perangkat bisa dipakai lagi
      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

    • Sulit dipercaya bahwa setelah seseorang punya akses fisik ke terminal dan bahkan mendapatkan hak root, mereka tetap tidak bisa membaca nomor kartu kredit
      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

    • Bootloader terpisah tidak bisa dimuat. Saya sudah mencoba memodifikasi bootloader “aman” bernama loadercode, tetapi perangkat tidak mau boot
      Jadi saya menduga ada pihak ketiga, mungkin boot ROM, yang memverifikasinya
      Selain itu, tampaknya Linux selalu memuat loadercode dan mp1.img apa pun status manipulasinya. Jalur kode berbeda berdasarkan status manipulasi sepertinya dipilih di dalam loadercode yang dilindungi integritasnya
  • Jika 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

    • Pengontrol sentuh biasanya terhubung ke multiplexer yang dikendalikan prosesor keamanan
      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
    • Data PIN tetap terenkripsi meskipun ditampilkan pada touchpad, dan menggunakan antarmuka pengguna yang dikendalikan firmware yang berjalan di area tepercaya
      Jadi aplikasi perantara yang dapat diakses dalam serangan seperti ini tidak bisa melihat PIN
    • Dengan begitu PIN mungkin bisa didapatkan dengan cukup mudah, tetapi jika sistemnya dirancang dengan cara yang sama sehingga bagian penting diteruskan ke subprosesor keamanan, tetap tidak banyak yang bisa dilakukan terhadap kartunya
      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
    • Saya tidak tahu terminal Android apa yang dipakai di tiap daerah, tetapi di India tampaknya mereka menjalankan Android Oreo. Dukungannya berakhir pada Januari 2021
  • 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

    • Untuk prosesor yang diperkeras, hal itu mungkin masih benar. Teks aslinya juga menyebut bahwa bagian itulah yang tidak ditembus di sini
      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 Linux
      Sebaliknya, prosesor yang sepenuhnya terpisah bernama mp1 tampaknya menangani tugas “aman” seperti pemrosesan kartu, input PIN, dan penampilan informasi layar. Linux “non-aman” yang berjalan di prosesor kedua mp2 hanya menangani jaringan, pembaruan, dan logika bisnis
    • Dari penjelasannya, sisi Linux tampaknya bisa saja memiliki peran dalam penanganan peristiwa tamper
      Meski 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

    • Menjatuhkannya ke lantai atau menyiramnya dengan air
  • 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

    • Saya merasa perlu memahami dulu apa yang sedang saya hadapi. Perangkat kerasnya, SoC apa yang dipakai, antarmukanya, flash, dan sebagainya
      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

    • Sebenarnya sangat sering dipakai. Saya tidak suka harus membawa semua kartu itu di dompet. Sudah banyak sekali kartu untuk alasan lain yang bukan pembayaran, jadi bahkan tidak ada ruang untuk kartu debit dan semacamnya
      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