ssh(1)’e tuş vuruşu zamanlaması bulanıklaştırması eklendi
(undeadly.org)- 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_configanahtar sözcüğüObscureKeystrokeTimingile 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_configanahtar sözcüğüObscureKeystrokeTimingile 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_PINGSSH2_MSG_PONG
- Bu mesajlar local extensions numara alanını kullanıyor ve
"ping@openssh.com"ext-infomesajı 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
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.
“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.
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.
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.
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
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.
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.
1-2 bit kadar bilgi aktarmak çok zor görünmüyor.
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.
Ö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
Ö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
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
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
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
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
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
Bunun hangi tehdidi hafiflettiğini merak ediyorum
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ı
Bu özellik bunu engellemek için gürültü ekliyor gibi görünüyor
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...
Örneğin kullanıcılar genelde parolalarını diğer girdilerden daha hızlı yazar; bu yüzden
sudogibi işlemlerde tek seferde topluca gönderilen tuş girişi sayısına bakarak parola uzunluğu tahmin edilebilirMakalenin 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
Yalnızca az miktarda veri iletilirken etkileşimli trafiği sabit aralıklarla gönderir; varsayılan değer 20 ms'dir
[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
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
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