- İ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
rootyazı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
mp1ve şifrelenip imzalanmışmp1.imgtarafından yürütüldüğü anlaşılıyor; Linuxmp2tarafı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
libcrypt0.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
rootgirildiğ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_toolbinary’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
mp1yü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.imgdosyası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
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
noexecayarlıdırRoot 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
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
O anahtarlar sızarsa biri meşru bir işlemi taklit edebilir
Bu özel örnekte zor ya da imkânsız görünüyor, ama bu yüzden bu alandaki araştırmalar anlamlı
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
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
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
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
loadercodeadlı “güvenli” bootloader’ı değiştirmeyi denedim ama boot etmediBu 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
loadercodevemp1.imgdosyalarını yüklüyor gibi görünüyor. Kurcalama durumuna bağlı farklı kod yolu, bütünlük korumasına sahiploadercodeiçinde seçiliyor gibiKolay 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
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
Bu yüzden bu tür saldırılarda erişilebilen aradaki uygulamalar PIN'i göremez
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ı
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örünen o ki metin dizgeleri yalnızca
display_tooladlı 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ımBunun yerine
mp1denen 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şlemcimp2üzerinde çalışan “güvensiz” Linux ise yalnızca ağ, güncellemeler ve iş mantığıyla ilgileniyorYine 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
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
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ı
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