3 puan yazan GN⁺ 2023-08-30 | 1 yorum | WhatsApp'ta paylaş
  • Damien Miller, ssh(1) istemcisine tuş vuruşları arasındaki zaman bilgisini gizleyen bir bulanıklaştırma özelliği commit etti
  • Etkileşimli trafikte gönderilen veri az olduğunda sabit aralıklı iletim kullanılıyor ve varsayılan aralık 20 ms
  • Son gerçek tuş vuruşundan sonra zamanlama desenini daha da belirsizleştirmek için rastgele bir süre boyunca sahte chaff tuş vuruşları gönderiliyor
  • Davranış, yeni ssh_config anahtar sözcüğü ObscureKeystrokeTiming ile kontrol ediliyor
  • Uygulama, SSH taşıma katmanının yeni PING/PONG genişlemesini kullanıyor ve daha sonra openssh-portable üzerinden diğer sistemlere de yansıyabilir

ssh(1) istemcisinde tuş vuruşu zamanlamasını gizleme

  • Damien Miller, ssh(1) için tuş vuruşu zamanlaması bulanıklaştırması desteğini commit etti
  • Bu özellik, tuş vuruşları arasındaki zaman aralığını gizlemek için, gönderilen verinin az olduğu etkileşimli trafiği sabit aralıklarla iletmeye çalışıyor
    • Varsayılan iletim aralığı 20 ms
    • Son gerçek tuş vuruşundan sonra rastgele bir süre boyunca sahte chaff tuş vuruşları gönderiliyor
  • Davranış, yeni ssh_config anahtar sözcüğü ObscureKeystrokeTiming ile kontrol ediliyor

SSH protokol genişlemesi ve dağıtım yolu

  • Uygulama, SSH protokolüne eklenen iki yeni taşıma katmanı mesajını kullanıyor
    • SSH2_MSG_PING
    • SSH2_MSG_PONG
  • Bu mesajlar local extensions numara alanını kullanıyor ve "ping@openssh.com" ext-info mesajı ile "0" dize sürümü üzerinden duyuruluyor
  • Bu değişiklik, “security by trickery” örneklerinden biri olarak tanıtılıyor ve bir sonraki OpenBSD sürümünü beklemek için bir neden olarak gösteriliyor
  • Diğer sistemler bu özelliği yakında openssh-portable üzerinden görebilir

1 yorum

 
GN⁺ 2023-08-30
Hacker News yorumları
  • Tuş vuruşu zamanlaması, 1980'lerden beri terminal G/Ç'sinde endişe edilen bir konuydu; o dönemde stelnet veya Kerberos gibi erken şifreli ortamlarda bile dikkate alınan bir noktaydı.
    Çoğu terminal uygulaması parola girişi için arabelleğe alınmış G/Ç kullanır ve bu hâlâ önemli bir güvenlik özelliğidir.
    Bu modda kullanıcı Enter'a basana kadar karşı tarafa hiçbir şey gönderilmez; bu yüzden arada adam saldırganı, padding varsa parolanın uzunluğunu bile çıkarmakta zorlanır.
    Bir dönem, kullanıcı her karakter girdiğinde * göstermek için parolayı arabelleksiz modda alan uygulamalar iyi bir hedef olmuştu.
    Görünüşte hoş durur ve geri bildirim verir, ama parola girişinde en çok gizlenmesi gereken şey olan tuşlama hızını sızdırır.
    Parola girişinde arabelleğe alınmış G/Ç'nin korunmasını isterim; bu yöntemin, SSH'nin obfuscation yapmasına rağmen yetişmekte zorlanacağı kadar daha iyi olduğunu düşünüyorum.
    Yine de SSH'nin bu özelliği eklemesi iyi; kabuk veya editör girişi gibi arabelleğe alınamayan şeyleri korumaya yardımcı olur.

    • Günümüzde kullanılan, parola uzunluğundan bağımsız olarak sabit sayıda yıldız gösterme yöntemi kullanıcı için epey kafa karıştırıcı.
      “Uzunluk yanlış, demek ki parola hatalı” diye düşünüp kayıtlı parolanın avantajını ortadan kaldırarak “doğru” parolayı elle tekrar girmeye çalışabilir.
      Geçmişte 2 haneli hash ve gülen yüz gibi görsel hash gösterme yaklaşımları da vardı sanırım; ama bunlar omuz üzerinden bakma saldırılarına aksine yardımcı olabilir.
    • 1990'larda Visual Basic tabanlı bir yapay zeka eklentisiyle, sadece birkaç dakika yazı yazdırarak yazma kalıbına bakıp klavyeyi kimin kullandığını anlayabiliyordunuz; bu durumda oturum açma süreci fiilen anlamsızlaşıyordu.
      Bugün bunu dokunmatik ekran oturum açmalarına da, parmak basıncı, temas alanı ve şekli kullanıcıyla ilişkilendirerek uygulamak mümkün.
      Kaydırma hareketlerini veya fare hareketlerini de masaüstü OS bağlamına katarsanız, cihazı ya da hesabı sahibi olmayan biri kullanırken sistemi kilitleyebilen bir güvenlik uygulaması da yapılabilir.
      En azından sevgilimin telefonumu ne zaman karıştırdığını kaydedebilir.
    • Parola tabanlı SSH kimlik doğrulaması neredeyse kesinlikle hiç kullanılmamalı.
    • Girişi satır satır arabelleğe alan bir SSH istemcisi olup olmadığını merak ediyorum.
      Yani yazdığınız şeyin Enter'a veya gönder düğmesine basılana kadar iletilmediği bir yöntem.
      Eskiden MUD'larla çok uğraştığım dönemlerde böyle Telnet istemcileri kullanırdım, ama sonrasında kullandığım SSH istemcilerinde hiç görmedim.
      SSH tuş vuruşu zamanlaması sızıntısını engellemek için iyi bir savunma gibi duruyor ve bazı kullanım senaryolarında makaledeki 20 ms gecikme yönteminden daha iyi bile olabilir.
      Ancak düşününce, Linux kabuk otomatik tamamlama için Tab'a basıldığında da gönderilmesi daha ideal olur gibi.
    • “Çoğu terminal uygulaması parola girişi için arabelleğe alınmış G/Ç kullanır” deniyorsa, bu yamanın varlığı OpenSSH'nin böyle davranmadığı anlamına mı geliyor, merak ediyorum.
  • Profesyonel Bridge aklıma geliyor.
    Takımları bir duvarla ayırıp kartları aynı anda bir pencereden geçirerek zamanlama yoluyla iletişimi engelliyorlar.
    https://youtube.com/watch?v=RVZLNRmO3vo

    • Yine de ekranlar üzerinden hile yapıyorlar.
      https://en.wikipedia.org/wiki/Blue_Team_(bridge)#Cheating_an...
      https://en.wikipedia.org/wiki/Fantoni_and_Nunes_cheating_sca...
      https://en.wikipedia.org/wiki/Fisher_and_Schwartz_cheating_s...
      Üstelik bunlar sadece bildiklerimiz.
      Bir keresinde mülakatta Bridge'i gerçekten işime yarattım.
      Bridge'de, partneriniz size artırma dışında bir yolla ipucu verirse, mantıken mümkün olduğunda mutlaka ters yönde hareket etmenizi gerektiren Active Ethics kuralları vardır.
      Bir hata ayıklama mülakatında görüşmeci beni cevaba fazla açık şekilde yönlendirmeye çalışıyordu; bu yüzden onun dediğini yapmadan önce aklıma gelen her şeyi durup kontrol ettim.
      Mülakatın ardından neden öyle yaptığımı söyledim ve daha fazla açıklama gerekirse Active Ethics'e bakmasını söyledim.
      Ve kabul edildim.
    • İnsanların yalnızca bir insan durum makinesi gibi önceden belirlenmiş otomatı çalıştırması, dışına çıkınca da ceza puanı alması gerekiyorsa, o zaman kazananı yazı tura ile belirleyip oyunu tamamen atlamak daha iyi.
      Bu, yakalayıcının atıcıya işaret göndermemesi gerektiğini söylemeye benziyor.
      Bilgi aktarımı oyuna boyut katan insani bir beceri; bırakın en iyi yapan taraf kazansın.
    • Red team bakış açısından burada kötüye kullanılabilecek çok fazla insani düzensizlik var.
      1-2 bit kadar bilgi aktarmak çok zor görünmüyor.
    • Bridge gerçekten tuhaf bir oyun.
      Partnerle gizli iletişim temel unsur, ama o iletişimin gizli olmaması gerekiyor.
      İletişim kurabilirsiniz ama iletişim kurmamalısınız gibi; bu yüzden çok garip.
    • Hâlâ bilgi aktarma olasılığı var gibi görünüyor.
      Örneğin küçük masayı bariyerin ötesine hafifçe itmek ya da yavaşça itmek bir şey ifade edebilir.
      Videonun sağ üstündeki kişi birinci ve ikinci seferde bunu öyle geçirdi.
  • Bu tür zamanlama saldırılarını ele alan 2001 tarihli bir makaleyi tanıtan 2008 tarihli bir yazı var: https://lwn.net/Articles/298833/
    Alıntılanan makalenin adı “Timing analysis of keystrokes and timing attacks on SSH” ve tuş vuruşu zamanlama bilgisinin girilen tuş dizisi hakkında bilgi sızdırdığını analiz ediyor.
    Daha ayrıntılı analizde, her tuş çifti için içerik hakkında yaklaşık 1 bit bilginin sızdığı, parola entropisinin de karakter başına yaklaşık 4-8 bit olduğu; dolayısıyla bu bilginin oldukça anlamlı olabileceği söyleniyor.
    Bunun uzun zaman önce düzeltildiğini sanıyordum ve 2012 civarında bir düzeltme girdiğini düşünüyordum; hâlâ çözülmemiş olmasına epey şaşırdım.

  • Bir gün tuş girişlerini gizlemek için rastgele verilerle önceden doldurulmuş paketler kullanmak gerekebilir
    Steganografi değil ama ona oldukça yakın bir yöntem; trafik analizini zorlaştırmak ya da imkânsız hale getirmek için de kullanılabilir gibi görünüyor

    • NSA vb. kurumlar onlarca yıldır bu tür yöntemleri kullanıyor
      Özel hat söz konusuysa hattı her zaman maksimum kullanımda, tamamen şifreli şekilde akıtmak ve yalnızca gerektiğinde gerçek veriyi üzerine bindirmek o kadar zor değil
    • Bu yöntemle steganografi de mümkün
      Zararsız bir örtü metnini bir dil modeline yeniden yazdırıp, sözcük örneklemesinde kullanılan olasılık dağılımını anahtardan türetilen minimum entropi bozulmasıyla değiştiren çalışmalar var
      Alıcı taraf aynı model ve anahtarı kullanırsa örtü metnini yeniden şifreli metne çözebilir; bu görüntülere de uygulanıyor
      https://openreview.net/forum?id=HQ67mj5rJdR
    • Sayı istasyonlarını akla getiriyor
      Dünyanın her yerine sürekli sayılar yayınlanır; bu sayılar ancak birileri için anlam taşıdığında anlam kazanır
      Dünya istihbarat kurumlarının sürekli dinlediğini bile bile böyle yapılır
    • Bazı mesajlaşma protokolleri bu şekilde çalışır
    • SSH trafiği şifreli olduğu için gözlemciye paketler zaten rastgele veri gibi görünür
  • macOS'taki Warp gibi modern terminal emülatörleri akla geliyor
    Örneğin tüm girdiyi yerelde alıp uzak ana makineye tek parça halinde gönderip göndermediğini merak ediyorum
    Böyle yapılırsa uzak ana makinede yürütülen bazı raw mod girdileri bozulabilir; ama bu durum algılanıp ham tuş girişi akışına geçilebilir gibi
    [1]: https://warp.dev

    • Genel olarak SSH ile bağlanıldığında bağlantının kendisi her zaman raw moddadır ve uzak ana makine pty'yi olağan şekilde işler
      Uzak pty satır tabanlı modda da olabilir, raw modda da
      Özel kabuk entegrasyonu olan terminallerde genellikle uzak ana makinede de ilgili entegrasyonun kurulu olması gerekir; bazıları bunu oldukça şeffaf biçimde halleder
      Bu yüzden mosh, gecikmesi yüksek bağlantılarda saf SSH'ye göre daha iyi davranış gösterebilir
      Ancak bu özellik mosh için geçerli olmayacaktır
    • “Terminal için AI” iddiasındaki bir uygulamanın standart Unix araçlarından daha güvenli ve özel olacağını hayal etmek zor
      Zamanlama saldırılarına karşı savunma gibi belirli güvenlik özelliklerinde yeni araçlar daha iyi koruma sağlayabilir ve eski standart araçlarda bunlar olmayabilir
      Ama yeni araçlarda başka güvenlik özelliklerinin eksik olma ihtimali çok daha yüksek; “AI” eklemek de saldırı yüzeyini ciddi ölçüde büyütür
      Warp'ın gizlilik iddialarına da açıkçası inanmak zor
      Günümüzde doğal dil işleme araçları neredeyse tamamen bulut çözümlerine eğilimli; bu durumda gizlilik olasılığı neredeyse anında sıfıra yaklaşır
    • Belirli bir baud hızıyla veri almak üzere tasarlanmışsa, tek parça halinde gönderilen girdi de o hıza uygun şekilde akmaz mı?
  • Bunun hangi tehdidi hafiflettiğini merak ediyorum

    • Dinleyen kişi tuş girişlerinin içeriğini göremez; ancak eskiden her tuş girişinin ne zaman gönderildiğini görebiliyordu
      Hedefin yazma desenini biliyorsanız bu verilerle içeriği geri çıkarabilirsiniz
      Hedefe JavaScript etkin bir tarayıcıyla kontrol ettiğim bir web sitesine yazı yazdırarak ya da yazma seslerini kaydederek deseni toplayabilirsiniz
      Son dönemde bazı çevrim içi yayıncılar, klavye yazma sesleriyle eğitilmiş AI modelleriyle parolalarının çalındığı saldırılara da uğradı
    • Yanlış hatırlamıyorsam 2005 civarında bir makale vardı; şifreli SSH oturumunda paket zamanlamasını, toplanmış insan yazma istatistikleriyle ilişkilendirerek girilen içeriği öğrenebiliyordu
      Bu özellik bunu engellemek için gürültü ekliyor gibi görünüyor
    • Asıl zafiyet endişesi Viterbi algoritması kullanımıydı
      http://www.cs.berkeley.edu/~dawnsong/papers/ssh-timing.pdf [2001]
      Makine öğrenimi eklenince ses çözümleme doğruluğu büyük ölçüde arttı; bu yüzden fiziksel olarak güvenli olmayan yerlerde sessiz klavye kullanmak iyi olur
      https://arstechnica.com/gadgets/2023/08/type-softly-research...
    • Temelde yazma hızını analiz ederek bazı tahminler yapılabilir
      Örneğin kullanıcılar genelde parolalarını diğer girdilerden daha hızlı yazar; bu yüzden sudo gibi işlemlerde tek seferde topluca gönderilen tuş girişi sayısına bakarak parola uzunluğu tahmin edilebilir
    • Son dönemde tuş girişi zamanlaması ve derin öğrenmeyle kullanıcıyı parmak izi gibi tanımlayan ve bu makalede bunu kimlik doğrulama için kullanan çalışmalar çıktı: https://www.usenix.org/system/files/usenixsecurity23-piet.pd...
      Makalenin kendi kullanım örneği bir güvenlik tehdidi değil, ama bilgi sızıntısı olarak yorumlanabilir
  • Ne kadar gecikme eklendiğini merak ediyorum
    Özellikle öngörülemeyen gecikme, yazılım geliştirme işlerinde en büyük stres kaynaklarından biri

    • Metinde doğrudan yazıyor
      Yalnızca az miktarda veri iletilirken etkileşimli trafiği sabit aralıklarla gönderir; varsayılan değer 20 ms'dir
    • Yukarıdaki gecikme meselesi, kullanıcı deneyimindeki gecikmeden, yani tuşa bastıktan sonra sonucun görünmesine kadar geçen gecikmeden söz ediyor gibi görünüyor
      [1]
      Mosh gibi araçlar algılanan gecikmeyi azaltmada oldukça yardımcı olur
      Mosh, kullanıcının tuş girişi yerelde kaydedilir kaydedilmez gösterir ve gidiş-dönüşün tamamlanmadığını belirtmek için soluk renkte görüntüler
      En son baktığımda böyleydi; belki altı çizili de olabilir
      Gidiş-dönüş tamamlanınca karakter normal şekilde görünür
      [1] Yazılım geliştirmede en büyük stres kaynağı tuş girişi gecikmesiyse oldukça şanslı sayılırsınız gibi geliyor
      [2]: https://mosh.org
    • Bu gecikme tasarım gereği öngörülebilir değil mi?
  • Asıl commit bağlantısı: https://github.com/openssh/openssh-portable/commit/7603ba712...

  • Bazıları paket zamanlamasını ölçerek hands-on-keyboard shell kullanımını ağ üzerinde tespit ediyor gibi görünüyor; bu değişikliğin böyle bir tespiti ne kadar zorlaştıracağını merak ediyorum

    • Böyle yöntemlerin, “güvenlik” gerekçesiyle şifrelemeyi kırmaya veya arka kapı koymaya çalışan diğer kurumsal girişimlerle aynı yolu izlemesini umarım
      Güvenliğe yaklaşım biçimi olarak bunun gerçekten yanlış olduğunu düşünüyorum
      Bir otomasyon betiğinin bir cihaza giriş yapıp yapmadığını bilmek elbette iyi olabilir; ama daha iyi bir tasarımda bu bilginin önemli olmamasını sağlayabilirsiniz
    • Bunun kötü niyetli olmayan kullanım senaryosu ne olabilir?