Yanlış şifre girdikten sonra neden büyük bir gecikme var?


89

Şifreler hakkında garip (bana göre) bir şey fark ettim. Örneğin, oturum açma sırasında yanlış bir şifre yazarsam, sistem bana bunu söylemeden önce birkaç saniye gecikme olacaktır. sudoYanlış bir parola ile denediğimde , kabuk "Üzgünüm, tekrar dene" demeden önce beklemek zorunda kalacağım.

Yanlış bir şifreyi "tanımak" neden bu kadar uzun sürdü acaba? Bu kullandığım birkaç dağıtımda (ve hatta OSX'de) görülüyor, bu yüzden dağıtıma özgü bir şey olmadığını düşünüyorum.


Bunu sadece terminalde değil, başlangıçta oturum açtıktan sonra veya dizüstü bilgisayar uyku modundayken de farkettim. Doğru şifrenin kilidini açmak ani olsa da, bu soruları
dile

Yanıtlar:


92

Bu bir güvenlik meselesi, aslında farkına varmak uzun sürmüyor. 2 güvenlik açığı bu sorunu çözdü:

  1. Bu, giriş yapma girişimlerini engeller, yani birisinin sistemi kırmaya çalıştığı kadar hızlı bir şekilde çarpamayacağı anlamına gelir (1M bir saniye çalışır mı? Bilmiyorum).

  2. Kimlik bilgilerinizin yanlış olduğunu doğruladıktan hemen sonra yaptıysa, kimlik bilgilerinizin bir kısmının doğru olup olmadığını tahmin etmenize yardımcı olmak için kimlik bilgilerinizi geçersiz kılmak için harcadığınız süreyi kullanabilirsiniz, böylece tahmin süresini önemli ölçüde azaltır.

Bu 2 şeyi önlemek için sistemin yapması biraz zaman alır, bence bekleme süresini PAM ile yapılandırabilirsiniz ( Michaels cevabına bakınız ).

Güvenlik Mühendisliği ( 2ed, amazon | 1ed, ücretsiz ) bu sorunların daha iyi bir açıklamasını verir.


4
// offtopic gr onun değil bir hata, onun bir özellik ;-)
echox

2
Ortaklık bağlantınız otomatik olarak SE'ler, btw.
Jelatin

1
@Phepang: Bölüm 2'ye , özellikle §2.4 ve §2.5.3.3'e bakınız.
Gilles,

4
Parola karma karşılaştırması sırasında erken ve geç başarısızlık arasındaki fark nanosaniye cinsinden ölçülür. Doğru kodlama ile (sabit zaman hafıza karşılaştırması) hiçbir fark yoktur. Bu bir gecikme eklemek için bir neden değil.
KodlarInChaos

2
CodesInChaos ile aynı fikirdeyim: Cevabın ikinci noktası yanlıştır. Aslında olan şudur: 1. Girişinizin bir karması hesaplanır; 2. karma, depolanmış karma ile karşılaştırılır (bir fark bulunmuş olsa bile, her baytı); Girdiğiniz parolanın doğru olup olmadığına bağlı olarak bu iki adımın hiçbir şekilde daha hızlı veya daha yavaş olmadığına dikkat edin. (ve başkalarının da belirttiği gibi, bir uyku süresi eklemek mümkün olsaydı zamanlama saldırısını düzeltmezdi)
örnek

41

Bu, kaba zorlamayı denemek ve sınırlamak için kasıtlı. FAIL_DELAYYapılandırma girişini arayarak /etc/login.defsve değerini değiştirerek genellikle değiştirebilirsiniz (benimki 3varsayılan olarak saniyedir), ancak bu dosyadaki yorum PAM gibi görünmesini sağlar, 2ne olursa olsun en azından ikinci bir gecikmeyi zorlar


9
Bu kaba kabadayı zorlamaktan daha fazlasını önlemek içindir. ancak nereye yapılandırılacağını bilmek için bonus puan.
xenoterracide

5
Ben fail_delay de yapılandırılabilir olduğunu düşünüyorum /etc/pam.d/login. Bakpam_faildelay.so delay=
Steven D

8
0.1 saniye içinde bir deneme çalışmadığında, sudo için yeni bir sudo örneği başlatan bir sarmalayıcı yazmanızı engelleyen nedir?
Janus Troelsen

11

Modern linux sistemlerinde, neden pam_unix.so böyle bir gecikmeye neden oluyor. Önceden bildirildiği gibi, bu değiştirerek iki saniye aşağı yapılandırılabilir FAIL_DELAYiçinde /etc/login.defs. Gecikmeyi daha da azaltmak istiyorsanız, "nodelay" seçeneğini pam_unix.so'ya vermelisiniz. Örneğin, sistemimden başlayarak dahil edilenleri /etc/pam.d/sudoizlerseniz, aşağıdaki satırları düzenlemek zorunda olduğunuzu görürsünüz /etc/pam.d/system-auth:

auth      required  pam_unix.so     try_first_pass nullok

ve bunu şu şekilde değiştirin:

auth      required  pam_unix.so     try_first_pass nullok nodelay

Ne yazık ki, linux distro'mun (arch) sshd tarafından kullanılan, aynı system-authdosyanın içerdiği şeyleri yapılandırma şekli system-remote-login.

Sudo'daki gecikmeyi ortadan kaldırmak güvenli olsa da, bu kaydedildi, yalnızca yerel kullanıcılar tarafından kullanıldı ve yine de yerel saldırganlar tarafından atlanabilir, muhtemelen uzaktaki girişler için bu gecikmeyi ortadan kaldırmak istemezsiniz. Elbette, yalnızca paylaşılan sistem-auth dosyalarını içermeyen özel bir sudo yazarak düzeltebilirsiniz.

Şahsen, sudo'daki gecikmeyi (ve SIGINT'i görmezden gelmeyi) büyük bir hata olduğunu düşünüyorum. Bu, şifreyi yanlış yazdıklarını bilen kullanıcıların işlemi öldüremediğini ve sinirlenemediğini gösterir. Tabii ki, sudo SIGTSTP'yi yakalamadığı için hala Ctrl-Z ile sudo durdurabilirsiniz ve durduktan sonra -9 ile öldürebilirsiniz (SIGKILL). Sadece yapmak can sıkıcı. Bu, otomatik bir saldırının sözde terminallerdeki sudoları çok yüksek bir hızda ateşleyebileceği anlamına gelir. Ancak gecikme meşru kullanıcıları rahatsız ediyor ve tekrar sudo yapmaktan kaçınmak için onları terk etmek yerine kök kabuklarını askıya almalarını teşvik ediyor.


1
Fedora ile aynı. Müthiş analiz
Freedom_Ben 4

Mükemmel cevap. Modern Masaüstü sistemlerinde de FAIL_DELAY'in modası geçmiş olduğunu düşünüyordum. Bölüm / sabit sürücü şifrelemesine ve başka hiçbir şeye güvenmemelisiniz. Genellikle, zorla root şifresini kırmaya çalışan ikinci bir kullanıcı yoktur. Ancak , potansiyel olarak kötü amaçlı programlar olabilir güvensiz bir FAIL_DELAY kötüye ve böylece kök erişim sağlayabilirsiniz.
phil294,

pam- nodelayunix'i ayarlamak bekleme süresini 0 olarak ayarlayacak ve FAIL_DELAY sonra dikkate alınmayacaktır.
phil294,

Neden gecikmeyi devre dışı bırakmıyor ve ardından uzak şifre girişini devre dışı bırakmıyorsunuz (yalnızca SSH)? Bu herhangi bir güvenlik açığına neden olmadan sorunu çözmez mi?
Radon Rosborough
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.