4 puan yazan GN⁺ 2025-06-02 | 1 yorum | WhatsApp'ta paylaş
  • İsviçre’de kullanılan Worldline Yomani XR ödeme terminalinin sökülüp firmware’i analiz edildiğinde, arka taraftaki kapaktan erişilebilen seri konsolda yalnızca root yazılarak root shell içine girilebildiği görüldü
  • Terminalde kasa açılmasını, PCB temasının kesilmesini, zikzak izlerin kopmasını ve kart okuyucu çevresindeki flex PCB hasarını algılayan tamper koruması vardı; ancak debug portunun açıkta olması ayrı bir saldırı yolu oluşturdu
  • Kart üzerindeki flash’tan çıkarılan firmware, şifrelenmemiş bir dosya sistemi içeriyordu ve Linux 3.6 çekirdeği, Buildroot 2010.02, BusyBox, uClibc ve özel önyükleyici Booter v1.7 tabanında çalışıyordu
  • Kart, PIN, ekran ve tuş takımı gibi güvenlik işlevlerinin ayrı bir işlemci olan mp1 ve şifrelenip imzalanmış mp1.img tarafından yürütüldüğü anlaşılıyor; Linux mp2 tarafından bunlara doğrudan erişilebildiğine dair kanıt bulunmadı
  • Hangi firmware sürümlerinin savunmasız olduğu kesinleşmedi ve root login’in devre dışı olduğu cihazlar da vardı; ancak terminale kısa süreli fiziksel erişimin mümkün olduğu ortamlarda gereksiz derecede geniş bir saldırı yüzeyi kalıyor

Worldline Yomani XR analiz hedefi

  • Analiz edilen cihaz, İsviçre’de yaygın olarak kullanılan Worldline Yomani XR ödeme terminaliydi
  • Açılıştan sonra UI incelemesi ve port taramasında dikkat çekici bir sonuç çıkmayınca donanım sökümüne geçildi
  • İç yapı birden fazla PCB’den oluşuyordu
    • harici konektörler için küçük bir kart
    • ana kart
    • kart yuvasının takılı olduğu dikey kart
  • Ana SoC, firmware içinde “Samoa II” kod adıyla görünen, çift çekirdekli Arm tabanlı özel bir ASIC gibi görünüyor
  • Worldline dokümantasyonuna göre bu çip hazır bir çipin yeniden markalanmış hali değil, özel bir ASIC
  • SoC’nin yanında küçük bir harici flash ve RAM bulunuyor

Donanımsal tamper koruma yapısı

  • Yaygın kasa açılma algılama anahtarları bulunmadı; bunun yerine board-to-board interconnect yapısının kendisi açılma algılama yöntemi olarak kullanılmıştı
  • Kartlar arasında basınca duyarlı Zebra strip bulunuyor ve temasın sürmesi için kartların vidalarla sıkıca sabitlenmesi gerekiyor
    • bazı vidaların gevşetilmesi bile temasın kesilmesine ve tamper olayının tetiklenmesine yol açabiliyor
    • güç kesikken de algılama gerekmesi nedeniyle coin cell battery kullanılmış
  • Hassas PCB bölgeleri zikzak biçimli tamper algılama izleri ile kaplanmıştı
    • fiziksel müdahalede tek bir bakır iz kopsa bile tamper algılaması tetiklenebiliyor
  • Kart yuvası ayrı bir iç muhafaza içinde yer alıyor ve etrafını saran flex PCB tamper koruması görevi görüyor
  • Yeniden montajdan sonra terminal yalnızca büyük kırmızı bir “TAMPER DETECTED” ekranı gösterdi ve bu modda harici girişlere yanıt vermediği görüldü

Flash çıkarımı ve dosya sistemi kurtarma

  • Çalışma zamanında inceleme engellenince kart üzerindeki flash chip sökülüp kablo bağlanarak içeriği dump edildi
  • Dump edilen içerik, beklentinin aksine, bütünüyle şifreli değildi
  • Flash üzerinde alışılmadık bir ECC yerleşimi kullanılmıştı
    • standart 2048 byte payload + 64 byte ECC/spare düzeni yoktu
    • 694 byte’lık 3 veri chunk’ı vardı ve her chunk’ın ardından 10 ECC byte geliyordu
    • spare area’nın son 16 byte’ı YAFFS2 dosya sistemi metadata’sı gibi görünüyordu
  • Metadata alanı tipik YAFFS2’ye göre daha küçük olduğu için, daha küçük metadata yapısını işleyebilecek şekilde dosya sisteminin yamalanması gerekti
  • Uyumlu bir dosya sistemi reader’ı uygulandıktan sonra dosya sistemi içeriği başarıyla çıkarıldı

Eski bir Linux tabanlı sistem

  • Çıkarılan dosya sisteminden terminalin Linux çalıştırdığı doğrulandı
  • Sistem eski bileşenler içeriyordu
    • Linux kernel 3.6
    • Buildroot 2010.02
    • Şubat 2023 derlemesi
    • özel önyükleyici Booter v1.7
    • init script, BusyBox, uClibc
    • libcrypt 0.9.26
  • Dump edilen firmware sürümünün ne kadar güncel olduğu doğrulanamadı, ancak Şubat 2023’ten sonra yayımlanmış bir firmware olması gerekiyor

Parolasız root shell

  • Flash chip kabloyla yeniden bağlanınca terminal tamper mesajı göstermesine rağmen tekrar açıldı
  • Linux boot log’unu görmek için debug connector çevresi logic analyzer ile incelendi ve lehimlenmemiş debug connector üzerindeki bir pad’de etkinlik bulundu
  • Seri konsolda Linux boot log’u ile birlikte login prompt belirdi
    • boot log’da “Reset reason: Tamper” yazıyordu
    • dropbear is not present, firmware update kontrolü ve uygulama izleme daemon’unun başlatılması gibi log satırları da görüldü
    • en sonda samoa login: prompt’u çıktı
  • Login olarak root girildiğinde parola sorulmadan ~ # shell prompt’u geldi
  • Bu erişim için bir exploit chain ya da brute-force password cracking gerekmedi

Dışarıdan erişilebilen debug portu

  • Root shell erişimi yalnızca cihazın içini açma durumuyla sınırlı değildi
  • serial port, terminalin arka tarafındaki küçük bir kapak üzerinden dışarıdan erişilebiliyordu
  • Cihazı açıp tamper korumasını tetiklemeden debug connector’a bağlanmak mümkündü
  • Terminal kısa süreliğine tek başına ele geçirilebiliyorsa, seri porta bağlanıp giriş yaptıktan sonra malware yerleştirip ayrılma senaryosunun mümkün olduğu değerlendirildi

Güvenlik işlemcisi ve Linux arasında görev ayrımı

  • Açığa çıkan root shell, doğrudan kart ya da PIN verisine erişim anlamına gelmiyor
  • Linux sistemi genel mimarinin yalnızca bir parçasıydı ve ekran, tuş takımı ya da kart okuyucuya Linux tarafından doğrudan erişilebildiğine dair kanıt bulunmadı
  • Ekran çıktısı da framebuffer driver tarafından doğrudan işlenmek yerine, string’lerin display_tool binary’sine aktarılması ve bu binary’nin işlemciler arası mesaj göndermesi şeklinde görünüyordu
  • Kart, PIN girişi ve ekran gösterimi gibi güvenlikle ilgili işlevleri ayrı işlemci mp1 yürütüyor gibi görünüyor
  • İkinci işlemci mp2 üzerinde çalışan Linux ise ağ, güncelleme ve iş mantığından sorumlu

Önyükleme akışı ve güvenli image

  • Linux çekirdeği, tamper durumundan bağımsız olarak her zaman açılıyor gibi görünüyor
  • Ardından Linux, güvenli önyükleyici loadercode’u belleğe yüklüyor
  • loadercode, tamper korumasının tetiklenip tetiklenmediğini kontrol ediyor
    • tamper algılanırsa kırmızı ekran gösteriyor
    • sorun yoksa gerçek güvenli image olan mp1.img dosyasını başlatıyor
  • mp1.img, Linux dosya sistemi içinde bulunmasına rağmen şifrelenmiş ve iki ayrı entity tarafından imzalanmış görünüyor
  • Kart, ekran ve tuş takımını yöneten güvenli image uygun şekilde şifrelenmiş ve imzalanmıştı

Açıklama takvimi ve kalan belirsizlikler

  • Açıklama takvimi şöyle kaydedildi
    • 14 Kasım 2024: root shell bulundu
    • 15 Kasım 2024: üreticiye bildirildi ve 90 gün sonra yayımlanacağı iletildi
    • 18 Kasım 2024: üretici raporun alındığını doğruladı
    • 1 Haziran 2025: yayımlandı
  • Açıkta duran root shell gereksiz derecede geniş bir saldırı yüzeyi oluşturuyor, ancak kart bilgileri gibi hassas verilerin bu yolla tehlikeye atılabildiğine dair kanıt bulunmadı
  • Hangi firmware sürümlerinin savunmasız olduğu kesinleşmedi
  • Araştırma sırasında root login’in devre dışı olduğu cihazlar da bulundu
  • Debug özelliğinin hangi noktada production firmware’e girdiği ya da üreticinin bunu içeride daha önce fark edip düzeltip düzeltmediği doğrulanamadı

1 yorum

 
GN⁺ 2025-06-02
Hacker News yorumları
  • 2 dolarlık bir USB kart okuyucuyla sahte banka/kredi kartı işlemleri oluşturmak mümkün
    Tüm teknik özellikler açık ve protokol de belgelenmiş durumda. Hatırladığım kadarıyla PDF yaklaşık 5000 sayfaydı, okuması çok acı vericiydi
    Ama o işlemi doğrulamak için internet üzerinden bankaya göndermeniz gerekir; o zaman da federal kurumlar/FBI gibi yerler kapınızı çalabilir
    Kart okuyucunun kendisinde gerçek koruma çok az; çoğu, küçük bir Linux üzerinde berbat parolalar kullanmak gibi şeylerden ibaret. Koruma, mağaza ile banka arasındaki sözleşme ve düzenlemelerden geliyor

    • Kart okuyucularda koruma olmadığı doğru değil. Yalnızca imzalı binary dosyaları çalıştırılır, yürütülebilir dosya sistemi salt okunurdur ve veri dosya sisteminde noexec ayarlıdır
      Root oturumu devre dışıdır, birçok işlevi eksiltilmiş bir busybox kullanılır ve anahtarlar açılışta güvenli bölgeden yüklenir. Master key enjeksiyonu yalnızca fabrika yüklemesi sırasında mümkündür; boot sürecinin kendisi de bir ölçüde güvenlidir ve kurcalama algılanırsa çip temizlenir
      Elbette Asya’dan getirilen ucuz, EMV sertifikasız bir Android terminalse standart Linux üzerinde yazılabilir/okunabilir bir root dosya sistemi, root oturumu ve uygulamayı çalıştıran kullanıcı için sudo bile açık olma ihtimali yüksektir. Kurcalama algılama da olmayabilir, ekran yansıtma kilitli olmayabilir, portlar açılabilir ve busybox da neredeyse eksiksiz olabilir
      Birkaç yıl boyunca kart kabulü için EMV uygulamaları geliştirmiş ve hâlâ ara sıra bunu yapan biri olarak, geliştirme modu bile tedarikçinin geliştirici ID’si sağlamasını gerektiriyor ve oldukça sıkı kilitli
    • Mağaza ile banka arasındaki sözleşme ve düzenlemelerin korumanın temelini oluşturduğu kısmı doğru
      Bu yüzden taşınabilir kart okuyucuyla dolaşıp temassız kartlardan para çalındığı türündeki komplo teorileri de yanlış. Böyle bir işlemi teknik olarak oluşturabilirsiniz, ama sonrasında olanlar ve önceden gereken ayarlar asıl mesele
      Yakalanıp engellenmeden önce parayı çekip çekemeyeceğiniz bile kesin değil. Bugünlerde birçok kişi işlem push bildirimlerini açtığı için bunun daha da zor olduğunu düşünüyorum
    • Bu doğru değil. Üye işyeri terminallerinde banka ve kart ağı anahtarlarını saklayan güvenli donanım yerleşik olarak bulunur
      O anahtarlar sızarsa biri meşru bir işlemi taklit edebilir
    • Sahadaki bir kart okuyucunun ele geçirilip önbelleğe alınmış veya saklanmış gerçek kart bilgilerinin okunması ya da araya giren kötü amaçlı yazılım yüklenmesi beni daha çok endişelendirir
      Bu özel örnekte zor ya da imkânsız görünüyor, ama bu yüzden bu alandaki araştırmalar anlamlı
    • “2 dolarlık bir USB kart okuyucuyla sahte banka/kredi kartı işlemleri oluşturulabilir” kısmını biraz daha ayrıntılı açıklayabilir misin? “Nasıl yapılacağını öğret” demek istemiyorum
  • Neye bakmam gerektiğini bildiğimden değil ama elimdeki Stripe M2 Reader’lardan birini açıp içine bakma isteği vardı
    Sorun şu ki satın aldığım 36 okuyucudan 7’si “ölmüş” durumda. 2’si şarj tutmuyor, 1’i NFC tarayamıyor, 4’ü “tampered” gösteriyor. İlk bakışta kayıp oranı kötü, ama tam resmi görmek için kullanım sıklığına ve yaşına bakmak gerekiyor
    Fakat o yanıt daha da kötü. Cihazlar 1-3 yıllık ve toplam kullanım günü en fazla 9 gün. Toplam 9 günlük kullanımda 36 cihazdan 7’si bir şekilde bozulmuş demek. Taşınırken de hepsi, her okuyucu için ayrı yuvası olan köpük dolgulu sert kabuklu çantalarda saklanıyor
    Bu yüzden M2 Reader’ı çok sevmiyorum, ama hâlâ benim için en iyi seçenek
    [0] Arka plan olarak ekleyeyim: şirketimiz festival ödemelerini işliyor. Etkinlik alanına gidip iPad ve M2 Reader ile yüz yüze ödemeleri alıyoruz; ödemelerin çoğu web/uygulama üzerinden gerçekleşiyor. Bu yüzden 3 yılda “kullanım günü” bu kadar az

    • Bir sonraki etkinliğe kadar saklamadan önce mutlaka şarj etmek iyi olur. Çoğu pil düşük şarj seviyesinde uzun süre saklanmayı sevmez
      Ayrıca kurcalama algılamanın da muhtemelen düzgün çalışan bir pile ihtiyacı vardır
  • Kurcalama mührü tetiklendiğinde root shell açılacak şekilde tasarlanmış olabilir
    Yani sistem, çalışması için gerekli kriptografik anahtarlara sahip güvenli modda olabilir ya da hata ayıklama ve arıza analizi için root shell’in açık olduğu güvensiz modda olabilir; bu moda geçiş sırasında da kritik özel anahtarlar siliniyor olabilir

    • Ben de böyle tahmin etmiştim. Belki yeni anahtarlar flash’layıp cihazı tekrar kullanılabilir hâle getirmek de mümkün olabilir
      Gerçekten bir terminal edinip edinemeyeceğimi merak ettim. Değiştirilip ortadan kalkıyorlarsa ikinci el bulmak o kadar zor olmayabilir
  • Kolay heyecanlananlar için ekleyeyim: “Açığa çıkan root shell, ilk endişe edildiği kadar büyük bir risk gibi görünmüyor. Kart bilgileri gibi hassas verilerin bu yöntemle ele geçirilebileceğine dair kanıt bulamadık” ifadesi var
    Yine de güvenlik tasarımcıları için iyi bir okuma

    • Fiziksel olarak terminale erişip root yetkisi bile elde etmişken kredi kartı numarasını okuyamamak çok şüpheli
      Güvenlikte fiziksel erişim ve daha düşük ölçüde de olsa root erişimi, pratikte hack’in başarılı olmasıyla neredeyse aynı seviyededir
  • Ele geçirilmiş Linux’un “ele geçirilme modu” kodu ile mp1 güvenlik sisteminden hangisini yükleyeceğine karar verdiği bir yapıysa, araştırmaya değer bir yol gibi görünüyor
    Bootloader’ın kendisinin güvenli olduğu söyleniyor, ama gerçekte çalıştığı yere bağlı olarak ele geçirilmiş ortamın içine yükleniyorsa bunun pek anlamı olmayabilir
    Yardımcı işlemciyi bir tür Secure Enclave olarak görmek mümkün olabilir, ancak Linux’un ayrı bir bootloader yükleyip çalıştırabiliyor olması endişe verici

    • Ayrı bir bootloader yükleyemiyor. loadercode adlı “güvenli” bootloader’ı değiştirmeyi denedim ama boot etmedi
      Bu yüzden üçüncü bir tarafın, muhtemelen boot ROM’un bunu doğruladığını tahmin ediyorum
      Ayrıca Linux, kurcalama durumundan bağımsız olarak her zaman loadercode ve mp1.img dosyalarını yüklüyor gibi görünüyor. Kurcalama durumuna bağlı farklı kod yolu, bütünlük korumasına sahip loadercode içinde seçiliyor gibi
  • Kolay modu istiyorsanız, bugünlerde çıkan Android tabanlı kart terminallerine bakmanız yeterli
    Özellikle PIN doğrudan ekrana girildiği için çok daha tatmin edici olma ihtimali yüksek

    • Dokunmatik denetleyici genellikle güvenlik işlemcisinin kontrol ettiği bir çoklayıcıya bağlıdır
      PIN veya PAN gibi hassas veriler girilirken dokunmatik denetleyicinin çıktısı, GUI'den sorumlu Android türevi işletim sistemini baypas ederek doğrudan güvenlik işlemcisine yönlendirilir
    • PIN verisi dokunmatik yüzeyde gösterilse bile hâlâ şifrelidir ve güvenilen alanda çalışan firmware'in kontrol ettiği bir kullanıcı arayüzünü kullanır
      Bu yüzden bu tür saldırılarda erişilebilen aradaki uygulamalar PIN'i göremez
    • Böyle yapınca PIN'i oldukça kolay elde etmek mümkün olabilir; ama önemli kısım aynı şekilde güvenlik yardımcı işlemcisine devredilecek biçimde tasarlanmışsa, kartla hâlâ yapabileceğiniz pek bir şey olmaz
      Modern kartlar bu tür saldırıları engellemek için kartın içinde çok sayıda kriptografik işlem yürütür
      Bu saldırı muhtemelen yalnızca ödeme seçenekleri arasında manyetik kart okuyucusu ayakta kalmış terminallerde işe yarar; böyle bir terminalde ise PIN istemini görmeden önce bile skimmer alarm zilleri çalmalı
    • Hangi bölgede hangi Android terminalinin kullanıldığını bilmiyorum ama Hindistan'da Android Oreo çalıştırıyor gibi görünüyor. Desteği Ocak 2021'de sona erdi
  • Harika. Böyle geniş kapsamlı kurcalamaya karşı koruma gibi donanım kısıtlarını aşmanın ve kötüye kullanmanın yollarını düşünmeyi seviyorum, ama bir kez tetiklendiğinde oyunun bittiğini sanıyordum
    Meğer öyle olmak zorunda değilmiş; hâlâ bakmaya değer birçok ilginç yer kalmış. Yine de güvenlik tarafının düzgün biçimde devre dışı kalması doğal. Aksi olsaydı tasarımcılara olan tüm güvenimi kaybederdim

    • Güçlendirilmiş işlemci için bu hâlâ doğru olabilir. Orijinal metin de burada ele geçirilen kısmın o olmadığını yazıyor
      Görünen o ki metin dizgeleri yalnızca display_tool adlı bir ikiliye aktarılıyor ve bu ikili işlemciler arası mesajlar gönderiyor. Tuş takımı ve kart okuyucu için de durum aynı. Bu çevre birimlerine Linux'tan doğrudan erişilebildiğine dair kanıt bulamadım
      Bunun yerine mp1 denen tamamen ayrı bir işlemci kart işleme, PIN girişi ve ekranda bilgi gösterme gibi “güvenli” işleri üstleniyor gibi görünüyor. İkinci işlemci mp2 üzerinde çalışan “güvensiz” Linux ise yalnızca ağ, güncellemeler ve iş mantığıyla ilgileniyor
    • Açıklamaya bakınca Linux tarafının kurcalama olayı işlemede bir rolü olabileceği izlenimi de vardı
      Yine de umarım mimari yalnızca bir kurcalama gerçekleştiğini görebilecek şekildedir. Aksi halde önce root shell elde edip sonra kurcalama olayının güvenlik anahtarlarını silmesini engelleme fırsatı doğabilir
  • Cihazdaki tüm kurcalama algılama mekanizmalarını okurken, kurcalama modunu tetiklemenin en kolay yolu ne olur diye merak ettim
    Sonuçta bu cihazlardan birkaçını bile bu duruma sokabilmek, ödemelerin çoğunun veya tamamının bu terminal üzerinden yapıldığı bir mağaza için etkili bir hizmet reddi saldırısına dönüşebilir

    • Yere düşürmek ya da üzerine su dökmek
  • Bu tür cihazları kurcalayıp incelemek ilginç, ama neden hemen açıp kurcalama durumunu tetiklediğini anlamadım. Çoğu okuyucuda böyle bir mekanizma olduğunu bilmiyor muydu?
    Kurcalama durumunda yapılan gerçek testlerin anlamı olmayabilir. Başlatma amacıyla kurcalama durumuna geçince shell açan bir yapı olması da mümkün
    Bana göre cihazı açmak en son denenmesi gereken şey gibi duruyor

    • Önce elimde ne olduğuna dair bir fikir edinmem gerektiğini hissettim. Donanım, hangi SoC olduğu, arayüzler, flash gibi şeyler
      Aksi halde tamamen karanlıkta kalıyorsunuz. Elbette geriye dönüp bakınca debug konnektörüne prob takıp işi bitirebilirdim
      Ayrıca kurcalanmamış ikinci cihazda da shell elde ettim
  • Bu tür cihazlar Avrupa'nın her yerinde var. İsviçre'yi bilmiyorum ama bildiğim Avrupa'nın epey büyük bir kısmında insanlar kredi kartına gerçekten sahip değil ya da çok kullanmıyor
    Ben buna POS, yani satış noktası sistemi derdim. Bu cihazlar her türden kartı okuyabiliyor. Her hâlükârda güzel yazı

    • Aslında çok kullanıyorum. Cüzdanımdaki onca kartı taşımaktan hoşlanmıyorum. Zaten çeşitli nedenlerle ödeme dışı kartlar bile fazlasıyla var; banka kartı gibi bir şeye yer kalmıyor
      Telefona veya akıllı saate daha fazla şey koymanın cazibesini de anlamıyorum. Mekanik saatleri tercih ediyorum ve telefonumu kaybedersem gizlilik açısından zaten yeterince felaket olur. Tabii bu benim durumum