1 puan yazan GN⁺ 2025-03-15 | 1 yorum | WhatsApp'ta paylaş

> "WebUSB'ye ihtiyacımız yok!"

  • Web sayfalarının WebUSB olmadan USB cihazlarına erişmesinin bir yolu var. Ayrıca cihazlar, kullanıcı onayı gereksinimlerini aşacak şekilde tasarlanabilir.

Hızlı demo

  • u2f-hax.uf2, Raspberry Pi Pico'ya yükleniyor ve index.html, localhost'tan veya başka bir güvenli bağlamdan açılıyor.
  • "On!" ve "Off!" düğmeleri LED'i açıp kapatıyor; GP22 pininin durumu da sayfada düzenli olarak güncelleniyor.

Bu nasıl mümkün?

  • Pico, bir U2F dongle'ını (fiziksel iki aşamalı güvenlik anahtarı) taklit edecek şekilde programlanıyor.
  • Güvenlik işlevi yerine, rastgele veriler U2F_AUTHENTICATE mesajının "key handle" alanına ve imzaya gizleniyor.
  • Key handle 0xfeedface ile başlıyorsa, Pico kullanıcı varlığını anında "doğruluyor" ve veriyi geri döndürüyor.

Neden mümkün?

  • U2F key handle'ları, güvenlik dongle'ının "sahip olduğu" opak veri blokları olarak tasarlanmıştır.
  • Düşük maliyetli dongle'ların birçok web sitesiyle ilişkilendirilebilmesi için böyle tasarlanmıştır.
  • Dongle, dahili olarak benzersiz bir "master" kriptografik anahtar saklar ve kayıt sırasında yeni bir açık/gizli anahtar çifti üretip geri döndürür.
  • Key handle opak biçimde işlendiği için içine rastgele veri gizlenebilir.

Veriyi geri döndürme yöntemi

  • Veriler ECDSA imzasının içine gizleniyor.
  • İmza iki sayıdan (r, s) oluşur ve her sayı belirli bir aralık içinde hesaplanır.
  • Chrome, imzadaki sayıların aralık içinde olup olmadığını kontrol ederken Firefox bunu kontrol etmiyor.
  • Chrome'un varsayılan doğrulamasını aşmak için her sayının ilk baytı 0x7f olarak ayarlanıyor.

Bu bir güvenlik açığı mı?

  • Hayır; rastgele USB cihazlarına erişim sağlanamıyor.
  • Yalnızca kuralları bilerek ihlal eden cihazlarda çalışıyor.
  • USB cihazlarının güvenlik modeli çoğu platformda zaten tartışmalı.
  • Bilinmeyen rastgele cihazları bilgisayarınıza bağlamamalısınız.

1 yorum

 
GN⁺ 2025-03-15
Hacker News görüşleri
  • Bu başlık ağırlıklı olarak WebUSB hakkında; OP ile ilgili değil. WebUSB harika bir hack

    • Bir yandan WebUSB istiyorum ama sıradan kullanıcıların WebUSB’ye sahip olmasını istemiyorum
    • Onay açılır pencereleri işe yaramıyor; insanlar düşünmeden her şeye onay veriyor
    • Internet Explorer’ın izin modelini beğeniyorum. Özelliği kullanabilmek için belirli bir siteyi "güvenilir" olarak işaretlemeniz gerekiyor
    • WebUSB, WebBluetooth gibi tehlikeli API’leri kullanmak için siteleri "güvenilir" olarak işaretlemek gerekseydi, bunu yanlışlıkla yapan daha az kişi olurdu
  • Firefox rastgele USB cihazlarıyla iletişimi desteklemiyor. Ancak U2F güvenlik anahtarlarıyla USB iletişimini destekliyor

    • Bu proje, bir mikrodenetleyiciyi U2F güvenlik anahtarı gibi davranacak şekilde programlıyor. Amaç, Firefox üzerinden USB ile mikrodenetleyiciyle iletişim kurmak
    • Javascript Credentials API ve biraz kurnazlık kullanılarak mikrodenetleyiciye veri gönderiliyor ve yanıt alınıyor
  • WebUSB kullananlar bunun harika olduğunu söylüyor, kullanmayanlar ise neden gerekli olduğunu anlamıyor

    • Kişisel olarak WebUSB benim için harikaydı. Çoğu WebUSB yardımcı aracı ayrı kurulabilir uygulama olarak da sunuluyor ama web sürümünü kullanmak daha kolay
    • Her şey için ayrı bir uygulamaya sahip olmaktan yorulan kişiler arasında popüler olacağını düşünmüştüm
  • QMK/Via firmware’li bir klavyeyi WebUSB ile özelleştirmek tam bir kâbus

    • Tarayıcının firmware ile etkileşime geçmeden önce /dev/hidraw cihazını tamamen okuyabilmesi gerekiyor
    • Kullanım açısından son derece rahatsız edici ve çevrimdışı özelleştirme araçlarının hepsi Electron tabanlı
    • Makul çözüm, web sitesinde istenen klavye düzenini bir şablon json dosyası olarak yapılandırmak, ortaya çıkan json’u indirmek ve ardından klavyeye firmware yazmak için sudo seviyesinde bir flashing aracı kullanmak
  • USB Serial harika bir araç ve artık tarayıcı kullanarak cihaz yapılandırmaya yarayan bir araç listesi var

    • ESPHome, Betaflight, ELRS, Flipper gibi örnekler var
    • WebKit, Apple tarafından geliştirildiği için desteği zayıf. Ancak Firefox da donanım "bağlantısı" desteğinde zayıf ve geliştirici dostu değil
    • Kullanıcı onayının cihaza erişim için yeterli olmadığını düşündüğü için destek eklemiyor. Blink ise bunun güvenli şekilde yapılabileceğini gösterdi
  • Cihazlara sık sık firmware yazan kişiler için faydası açık. Ancak sıradan kullanıcılar için önemli değil

    • Ayrı bir araç ya da tarayıcı gerekebilir. Flash Browser ek araçlarla birlikte gelebilir
  • USB portlarının tarayıcı tabanlı kod tarafından kullanılmaması daha iyi olabilir

  • Pixel telefona GrapehenOS yazmak, yaşadığım en rahat ve en hızlı OS kurulum deneyimlerinden biriydi

  • Özel anahtarı bir "master" anahtarla şifreleyip, şifrelenmiş özel anahtarı key handle olarak döndürüyor

    • Sonsuz imkân vermek eninde sonunda ters tepecek gibi görünüyor
  • WebUSB ile ilgili politik bir tartışma var

    • Politik tartışmanın ne olduğunu merak ediyorum