1 puan yazan GN⁺ 2024-03-15 | 1 yorum | WhatsApp'ta paylaş
  • Kanada’daki Flipper Zero yasağı tartışmasını arka plana alarak, otomobil anahtarlığı RF sinyalleri gerçek olarak yakalanıp analiz ediliyor ve basit yeniden oynatma saldırısının nereye kadar mümkün olduğu kontrol ediliyor
  • RTL-SDR, 24~1750MHz aralığında ham I/Q verilerini alıp görselleştirme, kaydetme ve analiz yapabiliyor; Flipper Zero’nun CC1101’i ise alım ve gönderim yapabilse de doğru RF ayarları gerekiyor
  • 433.92MHz’de her düğme girişinde 3 kısa burst görüldü; merkez frekansın iki yanındaki iki tepe, 0 ve 1’i farklı frekanslara taşıyan 2-FSK olarak yorumlandı
  • Universal Radio Hacker’da FSK, 50 samples/symbol ve Manchester II çözümleme uygulanınca uzun bir verisiz burst, 3 ana paket ve kısa bir son paket yapısı ortaya çıktı
  • Sinyalde rolling code için yüksek entropili bir alan, artan sayaç, lock/unlock komut baytı, paket sıra numarası, XOR checksum ve syncword belirlendi; bu da çoğu otomobilin yalnızca basit yeniden oynatmayla çalınmasının zor olduğu sonucuna götürüyor

Deneyin hedefi ve bağlamı

  • Birkaç yıldır RTL-SDR dongle ile kablosuz iletişim protokolleri araştırılıyordu; bu sefer odak, otomobil anahtarlığının veriyi nasıl ilettiğini ve yeniden oynatma saldırısı olasılığını kontrol etmekti
  • Daha önce de anahtarlık sinyalleri yakalanmıştı, ancak test edilebilecek otomobillere erişim sınırlı olduğu için anlamlı bir analize kadar ilerlenememişti
  • Bu deney, anahtarlık sinyalini gerçekten tersine mühendislikle inceleyip yeniden oynatmaya yönelik bir hazırlık süreci olarak, temel RF kavramlarından analiz akışına kadar ilerliyor
  • Kanada’daki Flipper Zero yasağının aksine çoğu otomobilin yalnızca basit yeniden oynatma saldırısıyla çalınmasının kolay olmadığı düşüncesi de ele alınıyor
    • Honda ile ilgili istisnai bir örnek olarak RollingPwn anılıyor

Kullanılan donanım

  • RTL-SDR

    • Yaklaşık 10 dolarlık karasal TV/radyo USB dongle’ı çok amaçlı bir RF alıcısına dönüştürerek 24~1750MHz aralığındaki sinyaller incelenip çözümlenebiliyor
    • RTL-SDR, SDR kullanımını mümkün kılan RTL2832U çipi sayesinde güçlü
    • Normalde donanımda yapılan sinyal işleme adımları atlanıp, ana makinenin ham I/Q verilerine doğrudan erişmesi sağlanabiliyor
    • Ham veriler alındığında modülasyon türü, bant genişliği, veri hızı gibi somut ayarları önceden bilmeden sinyal alınabilir, görselleştirilebilir, kaydedilebilir ve sonra doğrudan analiz edilebilir
  • Flipper Zero ve CC1101

    • Flipper Zero’da bu deney için önemli kısım Sub-GHz modülü
    • Bu modül CC1101 çipini temel alıyor ve tüketici kablosuz cihazlarında kullanılan 1GHz altı frekansları destekliyor
    • CC1101 modülü ayrıca 5 doların üzerinde bir fiyata satın alınıp Arduino, Raspberry Pi veya USB-to-TTL adaptörle birlikte de kullanılabiliyor
  • CC1101 ile RTL2832U arasındaki fark

    • Flipper Zero’daki CC1101 bir transceiver olduğu için sinyal hem alıp hem gönderebiliyor
    • RTL-SDR’deki RTL2832U alım ve ham sinyal analizi yapabiliyor, ancak gönderim yapamıyor
    • CC1101 SDR desteklemediğinden yalnızca tamamen işlenmiş veriyi döndürüyor; gönderilecek sinyalin RF ayarlarının doğru olması gerekiyor
    • Alım ve gönderim yapabilen SDR ekipmanları da var, ancak fiyatları görece yüksek

RF sinyallerini okumak için temel kavramlar

  • Kablosuz frekans iletimi, elektromanyetik dalga olan radyo dalgalarıyla sinyal gönderir
  • Asıl iletilmek istenen sinyalden daha yüksek frekanslı bir taşıyıcı dalga kullanılarak havadan iletimin güvenilirliği artırılır
  • Frekans, taşıyıcı dalganın saniyede kaç kez oluştuğudur ve genellikle iletişim kanalını tanımlamak için kullanılır
  • Modülasyon, verinin radyo dalgası üzerinde ifade edilme biçimidir
    • AM, veriyi genlik değişimiyle ifade eder
    • FM, veriyi frekans değişimiyle ifade eder
  • Bant genişliği, modüle edilmiş RF sinyalinin kapladığı frekans aralığıdır ve sinyalin taşıyabileceği veri miktarıyla ilişkilidir

SDR# ile gözlemlenen anahtarlık sinyali

  • Araçlar ve frekans

    • SDR#, C# ile yazılmış ücretsiz bir DSP uygulamasıdır; SDR’ler için gerçek zamanlı spektrum görselleştirme ve bazı yaygın modülasyonların demodülasyonunu destekler
    • RTL-SDR dongle bağlanıp varsayılan DVB-T sürücüsü yerine WinUSB sürücüsü kullanıldı
    • 433.92MHz’e ayarlandığında yakın mesafedeki uzaktan kumanda etkinlikleri görülebiliyor
    • 433.92MHz, AB ve çevre ülkelerde, ayrıca ikamet edilen yer olan Fas’ta kullanılan standart lisanssız frekans olarak tanıtılıyor
  • Gözlemlenen desen

    • Otomobil anahtarlığı düğmesine her basıldığında ardışık 3 kısa burst oluşuyor
    • Spektrum merkezindeki 433.92MHz’in iki yanında iki büyük tepe görülüyor
    • Yaygın modülasyon yöntemleri incelendiğinde bu biçimin 2-FSK ile uyumlu göründüğü anlaşılıyor
    • Ekranda görülen küçük tepeler, ucuz gönderici donanımı ile kumanda ve antenin birbirine yakın mesafesinden kaynaklanan istenmeyen frekanslar olarak görülüp yok sayılıyor
  • 2-FSK yorumu

    • FSK, Frequency-Shift Keying anlamına gelir; taşıyıcı frekansı birden fazla ayrık frekans arasında değiştirerek veriyi kodlayan bir frekans modülasyonu yöntemidir
    • 2-FSK’deki “2”, kodlamada kullanılan kanal sayısını ifade eder
    • Bu durumda 0 ve 1 iki farklı frekansla kodlandığı için gözlemlenen iki tepe açıklanabiliyor

Universal Radio Hacker ile bit ve bayt çıkarma

  • URH ile analiz

    • Universal Radio Hacker, kablosuz protokol araştırması için açık kaynaklı bir araç takımıdır ve çeşitli SDR’leri yerleşik olarak destekler
    • URH, sinyal demodülasyonu ve modülasyon parametrelerinin otomatik algılanmasını sağlayarak havada gidip gelen bit ve baytları belirlemek için kullanıldı
    • Başta doğru parametreler bulunamadığı için hatalı sonuçlar çıktı
    • Tekrarlanan sinyaller tek seferde birden çok kez kaydedilince otomatik algılama başarı oranı arttı ve bu örnekte 50 samples/symbol, FSK doğru ayar olarak çıktı
  • Burst yapısı ve Manchester çözümleme

    • Sinyale yakınlaştırıldığında SDR#’ta görülen 3 burst yeniden doğrulandı
    • İkinci burst ayrıca 3 ayrı parçadan oluştuğu için analiz edilecek toplam bölüm sayısı 5 oldu
    • Her bölümde bit dizisi otomatik çıkarılıp onaltılık biçime dönüştürülünce tekrarlayan desenler görüldü; ancak aynı 5 onaltılık sayı ve çok sayıda 0x55 baytı tekrar ettiği için ek işlem gerekiyordu
    • URH’nin Analysis sekmesinde çeşitli çözümleme algoritmaları denendiğinde Manchester II, 0x55 baytlarını null’a dönüştürdü ve çözümleme hatası üretmedi
  • Manchester kodlamasının rolü

    • Manchester, sinyalin mantıksal low veya high durumunda uzun süre kalmasını engelleyen basit bir dijital modülasyon yöntemidir
    • Veri sinyalini, veri ve senkronizasyonun birleştiği bir sinyale dönüştürerek clock recovery için faydalı olur
    • Analog ortamlar gürültü ve girişime açık olduğundan bu özellik dijital veri gönderirken yardımcı olur
    • Manchester’da ikili veri, birbirinin tersi olan iki bit ile kodlanır
    • Örnek: 0, 01; 1, 10 olur veya kullanılan konvansiyona göre tersi uygulanır

Paket yapısı ve rolling code tahmini

  • Her düğme girişinde görülen yapı

    • Birden fazla yakalama elle karşılaştırıldığında her düğme girişinin belirli bir yapısı olduğu görüldü
    • Uzun, verisiz 1 burst var; çözümlendiğinde 100 null bayta dönüşüyor
    • Çok benzer olan, ancak 2 baytı kısmen değişen 3 burst bulunuyor
    • Önceki 3’üne oldukça benzeyen, fakat daha kısa bir son burst bunu izliyor
    • Ortadaki 3 burst ana paketler olarak görülüp daha ayrıntılı analiz edildi
    • Her yeni sinyalde 1 artıyor gibi görünen artan bir ID bulundu
  • Rolling code mekanizması

    • Rolling code, keyless entry sistemlerinde basit yeniden oynatma saldırılarını önlemek için kullanılır
    • Saldırganın bir iletimi kaydedip daha sonra yeniden oynatarak alıcının kilidi açmasını sağlaması engellenir
    • Otomobil ve kumanda, kimlik doğrulamada kullanılacak rolling code üretmek için kriptografik olarak güvenli bir algoritma üzerinde anlaşır
    • Anahtarlar bir sayaç kullanılarak üretilip izlenir; kumanda ve otomobilin sayaçları senkronize durumda kalmalıdır
    • Geçerlilik penceresi, otomobil sinyali alamadığında bile kumandanın senkronizasyondan çıkmamasını sağlar
    • Birçok uygulama, en fazla 255 kez menzil dışı düğme girişine izin verir; sonrasında kumandanın elle yeniden senkronize edilmesi gerekir
  • Sinyal alanlarının belirlenmesi

    • Rolling code kriptografik olarak güvenli olduğundan, sinyalde entropisi en yüksek bölüm bu uygulamayla ilgili alan olarak belirlendi
    • Önceden bulunan artan ID’nin rolling code sistemindeki sayaç olduğu tahmin edildi
    • lock ve unlock sinyalleri karşılaştırıldığında komutu gösteren bayt belirlendi
    • 8 = unlock
    • 4 = lock

Sıra numarası, checksum ve syncword

  • Paket sıra numarası gibi görünen değer

    • Kalan değişken alanlardan birinde, yakalanan diğer sinyallerde de aynı değerler tekrar ediyordu
    • 3 değer ikili biçimde incelendiğinde üst bitlerin sıra numarası gibi arttığı görüldü
    • 0x6: 0110
    • 0xA: 1010
    • 0xE: 1110
      1. son pakete de bakıldığında 0x13: 10011 biçimi ortaya çıkıyor; bu da paket sıra numarasını içerdiği yorumuyla uyumlu
    • En düşük anlamlı bitteki değişim bu değerlendirmeye dahil edilmedi
  • XOR checksum

    • Son bayt her pakette değişiyor ve tüm sinyaller arasında da rastgeleymiş gibi farklılaşıyor
    • Paketin son baytı olması ve düzensiz değişmesi nedeniyle checksum olma olasılığı var
    • Bu bayt ile daha önce analiz edilen sıra numarası baytı XOR’landığında her örnekte sabit bir değer çıkıyor
    • Örnek 1:
      • 0x06 ^ 0xB9 = 0xBF
      • 0x0A ^ 0xB5 = 0xBF
      • 0x0E ^ 0xB1 = 0xBF
    • Örnek 2:
      • 0x06 ^ 0xCC = 0xCA
      • 0x0A ^ 0xC0 = 0xCA
      • 0x0E ^ 0xC4 = 0xCA
    • XOR tüm paket baytlarına uygulandığında değer her zaman 1 kadar sapıyordu; ilk 2 baytın checksum’dan hariç tutulmuş olma olasılığı yüksek
    • İlk 2 bayt, alıcıyı senkronize eden ve verinin başlangıcını gösteren syncword rolü olarak yorumlandı

Nihai sinyal yapısı ve sonraki adım

  • Baştaki uzun burst, boşta düşük güç modunda bulunan radyo alıcısını uyandırıp veri alımına hazırlama rolü görüyor
  • Kumandanın neredeyse aynı veriyi içeren 3 paket göndermesinin nedeni, iletimlerden birinin bozulması ihtimaline karşı güvenilirliği sağlamak
  • Nihai etiketleme sonucunda otomobil anahtarlığı sinyali syncword, rolling code ile ilgili alan, sayaç, komut baytı, paket sıra numarası ve XOR checksum gibi bölümlere ayrılarak yorumlandı
  • Sonraki adım, bu sinyal biçimini Flipper Zero’ya entegre ederek okuma, yeniden serileştirme ve yeniden oynatma desteği sağlamaktır
  • Yanlış bilgi veya iyileştirme alanı varsa GitHub’da pull request gönderilebilir

1 yorum

 
GN⁺ 2024-03-15
Hacker News yorumları
  • Elektronik bir proje nedeniyle AliExpress’ten aldığım ucuz bir araba anahtarı kumandasını tersine mühendislik etmem gerekmişti; sadece osiloskop ve Wikipedia ile bile yeterince uğraşınca başarabildim.
    Bir dahaki sefere bu blog yazısındaki yöntemi deneyeceğim ve daha iyi bir hacker olmaya çalışacağım.

  • Benzer amaçlı bir GNU Radio akış grafiği de var: https://github.com/bastibl/gr-keyfob
    Sunum materyali: https://www.fleark.de/keyfob.pdf

  • Kumanda ile araba arasında sayaçla anahtar üretip izleyerek senkronizasyon korunuyorsa, öğrenen kumandaların bunu nasıl aştığını hep merak etmişimdir.
    Arabamda birkaç yerleşik garaj kapısı düğmesi var ve sanırım arabayı öğrenme moduna alıp garaj kumandasının düğmesine basarak ayarlamıştım. Bunun basit bir yeniden oynatma değil de sinyali decode edip türünü tanıdıktan sonra açıcıyla eşleşmeyi başlatan çok daha karmaşık bir işlev olup olmadığını merak ediyorum.

    • Bu HomeLink gibi geliyor ve gerçekten daha karmaşık bir yöntem.
      Sabit kodları ve rolling code’ları desteklemek ve ilgili garaj kapısıyla eşleşebilmek için çeşitli şirketlerle çalıştıklarını anlıyorum. ABD’nin en büyük garaj kapısı üreticisi Chamberlain[0] birden fazla markaya sahip ve decode edilebildiği bilinen bir rolling code algoritması kullanıyor[1].
      [0] https://www.chamberlain.com/
      [1] https://github.com/argilo/secplus
    • Çoğu garaj kapısı açıcının rolling key değil, her seferinde aynı kodu gönderdiğini sanıyorum.
    • Yön ters. Öğrenen taraf garaj kapısı açıcı ünitesi, arabadaki düğme ise sadece sinyal gönderiyor.
      Bu süreç, açıcıya “Bu yeni kumandayı duyuyor musun? Bunun da kapıyı açmasına izin ver” demeye benziyor. Araba tarafındaki düğme yaygın birkaç protokol arasında dolaşıyor gibi; pratikte ABD’de yaygın kullanılanlar muhtemelen Chamberlain/Liftmaster veya Genie ailesinden 4-5 civarı şeydir.
    • Sabit kodlu sistemlerde kumanda her seferinde aynı sinyali gönderir; genellikle kumanda ve ünitedeki DIP switch benzeri bir yöntemle komşulardan farklı sabit bir sinyal ayarlanır.
      Bu tür sistemlerde öğrenen kumanda, kaydedilen sinyali aynen yeniden oynatarak da çalışabilir; ancak kayıt sırasında aynı banttaki kablosuz kapı zili gibi başka bir sinyal karışırsa yanlış şeyler de birlikte yeniden oynatılabilir. Bu yüzden en azından gerçek kapı sinyali bölümünü kesip ayırmak gerekir; daha iyisi ise sinyali decode edip kodu bulduktan sonra her seferinde temiz, yeni bir sinyal üretmektir.
      ABD’deki neredeyse tüm ev tipi garaj kapısı açıcı üreticileri 1990’larda yeni modellerini rolling code sistemine geçirdiği için, kurulum yaklaşık 25 yıldan daha yeni ise neredeyse kesin olarak rolling code kullanır. Genellikle uzaktan kumanda seed’e sahip bir sözde rastgele dizi üretir, her basışta bir sonraki değeri gönderir; ünite ise öğrenme modunda birkaç ardışık değeri görüp ilgili seed’i tahmin ederek kumanda listesine ekler.
      Çalışma sırasında ünite aldığı dizi değerini decode ederek bilinen kumandalardan biri için beklenen aralıkta olup olmadığını kontrol eder; uygunsa kapıyı açar ve o kumandanın konumunu günceller. Çocuk hareket halindeyken düğmeye birkaç kez bassa bile eve gelince kapının açılmaması yaşanmasın diye biraz tolerans aralığı da bırakılır.
      Mevcut bir rolling code kumandayı kopyalayan öğrenen kumanda da prensipte mümkün, ancak ünite açısından kopya ile orijinal aynı kumandadır. İkisinden biri uzun süre kullanılmazken diğeri diziyi tolerans aralığının dışına iterse taraflardan biri çalışmayabilir; yeniden eşleştirme de sistemin ayrıntılı uygulamasına göre karışabilir.
      Gerçekte gördüğüm rolling code uyumlu evrensel kumandalar, mevcut kumandadan öğrenmek yerine ünite türünü kumandaya bildirip sonra üreticinin kumandası gibi üniteyle yeniden eşleşme yöntemini kullanıyordu. Kullanıcı arayüzü zayıf olduğundan, muhtemelen kullanım kılavuzundaki tablodan numara bulup gizli bir düğmeye bastıktan sonra programlanacak düğmeye o numara kadar basmak gibi bir şeydir.
      Mevcut kumanda sinyaline bakıp hangi rolling code sistemi olduğunu otomatik saptamak güzel olurdu; ama bunun için bir alıcı gerekir ve bu amaç dışında neredeyse hiç kullanılmayacağı için gerekçelendirmesi zor. Garaj kapısı eşleştirme ve açma/kapama komutları temelde kumandadan üniteye giden tek yönlü iletişimdir.
  • Yazar hepsini decode etmiş, ama gerçekten araba kapısını açmış değil. Hâlâ rolling code’u kırması gerekiyor ve buna 1 ekleyip tekrar göndermek işe yaramaz.
    Dışarıdan bakıldığında bir sonraki rolling code rastgele gibi görünmelidir.

    • Bu yüzden başta “sanıldığı kadar zayıf değil” diye yazıyor.
    • Önemli nokta brute force yapmanın zor olup olmadığı. Zorsa sniff etmek mümkün olsa da gerçek bir düğme basışını önceden kaydetmeden arabayı açamazsınız.
  • Otomobil üreticilerinin cüzdana konabilecek çok küçük, belki RFID kumandalar üretmeye başlamasını isterdim.
    Ya da kredi kartı boyutunda küçük, Flipper benzeri bir cihazın aynı işi yapmasını beklerim. Cidden, araba anahtarı cebimde telefondan sonra en büyük nesne ve en azından kalınlık açısından epey rahatsız edici.

    • İstediğin şey sonuçta telefonun araba anahtarı olması gibi görünüyor.
    • Yeni BYD elektrikli araçlar, arabayı açıp çalıştırabilen kredi kartı boyutunda bir NFC anahtarla birlikte geliyor.
  • Uzun zamandır anlayabildiğim bir yazı olması ferahlatıcıydı.

  • Anahtar programlama ekipmanına erişim kolaylaştıkça, anahtar programlama yetkisinin daha güçlü “güvenlik” arkasına alınması ilginç bir eğilim.
    Neyin “güvenlik” sisteminin parçası olduğuna üretici karar veriyor ve bu yalnızca anahtarlarla değil, çok sayıda modülle de genişleyebilir. Kurallara uymasıyla ünlü suçlular üzerinde etkili olup olmayacağı tartışmalı olsa da (/s), bazı işletmeleri kesinlikle etkiliyor.
    Sabıka kaydınız varsa katılımınız engellenebilir. Cezasını tamamladıktan sonra kendi işini kurup başarılı olmak, eski hükümlüler için önemli yollardan biri; bu sistemde ise bu yol tıkanabilir.
    https://wp.nastf.org/?page_id=367
    https://wp.nastf.org/wp-content/uploads/2023/07/ApplicationC...

  • Sinyali yakalayıp decode edip yeniden encode etmeye gerçekten gerek var mı? Büyük bir antenle anahtar kumandası ile araç arasında ortadaki adam saldırısı yapıp birbirlerine daha yakın olduklarına inanmalarını sağlamak yeterli.

    • Pasif anahtarsız girişin bu kadar yaygınlaşması şaşırtıcı. Güvenlik özelliklerinden çok görünüm ve rahatlık öncelenmiş bir tasarım.
    • Gigahertz bandında olmalı; tüketici seviyesinde hangi antenin, arabanın algılayacağı kadar aşırı bir sinyal-gürültü oranı oluşturmadan anahtar kumanda sinyalini iletebileceğini veya yükseltebileceğini merak ediyorum.
  • Günümüzde arabanın içine girebildiğiniz anda bir OBD aracıyla yeni bir anahtar programlayıp olduğu gibi sürüp gidebildiğiniz için bu çok daha ilginç ve ciddi derecede güvensiz.

  • Temel Flipper da ham sinyalleri alabiliyor.