Soru:
Bir kullanıcıya hangi giriş karakterlerinin geçerli / geçersiz olduğunu söylemek bir güvenlik açığı mıdır?
csrowell
2020-01-15 02:41:57 UTC
view on stackexchange narkive permalink

Bir web sitesinde giriş doğrulaması için, kullanıcıya belirli bir alan için tam olarak hangi karakterlerin geçerli veya geçersiz olduğunu açıklamakla ilgili herhangi bir güvenlik endişesi var mı?

CWE-200: Bilginin İfşası, "bir saldırıda yararlı olabilecek, ancak normalde saldırgan tarafından kullanılamayan" bilgileri ifşa etmemeye çalışılması gerektiğini söylüyor. Spesifik bir örnek, bir sistemin yığın izlerini açığa çıkarmasını engellemek olabilir ( CWE-209: Bir Hata Mesajıyla Bilginin Açığa Çıkması tarafından ele alınmaktadır).

"Girdiğiniz metin geçersiz karakterler içeriyor" gibi hata mesajlarının belirsiz olması sağlanmalı mı?

İstemci tarafı kodundaki girdileri doğrulamak için kullanılan JavaScript gibi saldırganların görebileceği normal ifadelerin dahil edilmesi bir güvenlik açığı mıdır? Alternatif, sunucu tarafındaki girdileri doğrulamak, daha fazla arka uç iletişimi gerektireceğinden kullanılabilirliği bir şekilde azaltacaktır (örneğin, sitenin yanıt vermesine ve hataları daha yavaş görüntülemesine neden olabilir).

Yoksa bu, kullanıcı / saldırgan hata üretip üretmediklerini görmek için tekrar tekrar farklı karakterler göndererek hangi karakterlerin geçerli olduğunu belirleyebildiği için bir "belirsizlik yoluyla güvenlik" mi?

Bir saldırıyı potansiyel olarak yavaşlatmak için kullanıcı deneyimine ulaşmaya değer mi?

Anlayabildiğim kadarıyla, OWASP'nin Giriş Doğrulama Hile Sayfası ve Veri Doğrulama geliştirme kılavuzunun bu konuda yön vermediğini belirtmeliyim.

Edit 2020-01-17:

why'nin herhangi bir girdi doğrulaması yapması gerektiğine ilişkin birkaç soru (o zamandan beri silindiğine ilişkin yorum yazma çabasına girdiğim yanıtlar dahil) var.

Öncelikle, 21 ve 22. sayfalarda şifrelerle ilgili rehberlik sağlayan OWASP'nin Uygulama Güvenliği Doğrulama Standardı 'na işaret eden yorum için @Loek'e teşekkür ederiz: "Şifre oluşturma kurallarının karakter türlerine izin verilir. Büyük veya küçük harf, sayılar veya özel karakterler gerekmez. ".

Bir şifredeki karakterleri sınırlamanın genellikle kötü bir fikir olduğu konusunda hemfikir olabileceğimizi düşünüyorum ( @ Merchako'nun cevabına bakın). @emory'nin işaret ettiği gibi, bu muhtemelen zor ve hızlı bir kural olamaz (örneğin, başka birinin erişimi olsa bile uygulamanın güvenliğini sağlamak için daha kolay ikincil "PIN" kullanan birçok mobil uygulama gördüm Cihaza giriş yapmak için.) Bu soruyu sorduğumda aklımda şifreler yoktu ama bu, yorumların ve cevapların gittiği yön. Dolayısıyla, bu sorunun amaçları doğrultusunda şifresiz alanlar için olduğunu düşünelim.

Giriş doğrulama, enjeksiyon saldırılarını önlemek için web siteleri, web hizmetleri ve uygulamalar için "derinlemesine savunmanın" bir parçasıdır. OWASP tarafından belirtildiği gibi enjeksiyon saldırıları, "veri kaybına, bozulmasına veya yetkisiz taraflara ifşa edilmesine, sorumluluk kaybına veya erişimin reddedilmesine neden olabilir. Enjeksiyon bazen ana bilgisayarın tamamen ele geçirilmesine yol açabilir. İş etkisi, uygulama ve veriler. "

Daha ayrıntılı bilgi için OWASP'nin 1 numaralı güvenlik açığı olan A1 Enjeksiyonu ve CWE-20: Hatalı Giriş Doğrulaması bölümlerine bakın. İkisinin de girdi doğrulamanın tam bir savunma olmadığını, yazılım ürünleri için "derinlemesine savunma" nın bir katmanı olduğunu söylediklerini unutmayın.

Yorumlar uzun tartışmalar için değildir;bu konuşma [sohbete taşındı] (https://chat.stackexchange.com/rooms/103507/discussion-on-question-by-csrowell-is-it-a-security-vulnerability-to-tell-a-kullanıcı).
@RoryAlsop Bunun neden sohbete taşındığını gerçekten anlamıyorum - burada hızlı bir ileri-geri konuşma devam ediyor gibi değil .... Aynı zamanda belirli yorumlara olan bağlantılarımı da mahvediyor ...Çoğu insan bir sohbeti okumak için bir bağlantıyı tıklamayacağı için korkunç kullanılabilirlik ....
20'den fazla yorum okunabilirliği kötü bir şekilde mahvediyor ve yorumlar açık bir şekilde tartışmaya açık değil.Sohbet bunun yeridir.Bu tartışmayla ilgili her şey daha sonra gerekirse yazılara eklenebilir.
Bu yüzden yorumları düşük / sıfır oyla sakladıklarını düşündüm.Varsayılan olarak her yorumu gösteriyor gibi değil.Artık hangi yorumların önemli olduğu veya insanların aynı fikirde olduğu hakkında hiçbir fikriniz yok (bunlarla ilgili 40+ oy alan yorumlar vardı).Bu oy sayılarını Chat'te görüntülemenin bir yolunu görmüyorum.Anladığım kadarıyla ortadan kayboldular.
bu tasarım gereğidir.Yorumlar, bir gönderi için iyileştirme talep etmek veya önermek ya da netlik kazanmak için geçici olarak tasarlanmıştır.
Yedi yanıtlar:
Steffen Ullrich
2020-01-15 03:02:15 UTC
view on stackexchange narkive permalink

... bu bir saldırıda yararlı olabilir, ancak normalde saldırgan için mevcut değildir

Geçersiz giriş karakterleri bilgisi kullanışlıdır, ancak saldırgan tarafından yalnızca birkaç denemeyle kolayca bulunabilir.Bu nedenle, bu bilgiler gerçekten gizli değildir ve tüm kullanıcıları tam olarak neyin yanlış gittiğinden habersiz tutmak aslında saldırganları caydırmaz, yalnızca masum kullanıcıları devam edemeyecekleri için uzak tutar.

IMO, sorunun asıl amacı budur.Cevaba katılıyorum, ancak aynı şey HTTP başlıkları aracılığıyla açıklanırsa sunucu sürümünde de olur.Bununla birlikte, ikincisi, CWE'nin kapsamına girer, çünkü 1) giriş karakterlerinin ifşası kullanıcı için * yararlıdır * ve keşfedilmesi kolaydır ve 2) sunucu yazılımı sürümü *, saldırı yüzeyini artırırken kullanılabilirlik / uyumluluk * etkisine sahip değildir.
@usr-local-ΕΨΗΕΛΩΝ: Geçersiz karakterler olması durumunda saldırgan, birkaçını deneyerek hangilerinin geçersiz olduğunu çabucak bulabilir.Sunucu sürümü söz konusu olduğunda saldırgan, sunucu açıkça sağlamadığı sürece (başlıkta) sürümü kolayca belirleyemez.Bu nedenle, hangi karakterlerin geçersiz olmadığı belirtilirken sunucu versiyonunun sağlanması bir sorundur.
Kendi başına bir güvenlik açığı olmasa da, bir web sitesi şifremde `` '', `" ", ters eğik çizgi ve` -` kullanmamamı söylediğinde, bu durum SQL enjeksiyon sorunları olup olmadığı ve / veya düz metin depolama kullanıp kullanmadıkları sorusunu hemen ortaya çıkarır.girilen bilgiler için.
@SeinopSys Bu, derinlemesine bir güvenlik yaklaşımı da olabilir.Parametreleştirilmiş sorguları her yerde kullanabilir, ancak belirli girdilerde kaçınılabiliyorsa, tüm SQL enjeksiyon karakterlerine izin vermeyebilirsiniz.Bu nedenle, eğer birisi geliştirme sırasında olası bir güvenlik açığı eklerse, bundan yararlanmanın biraz daha zor olma ihtimali vardır.
"sunucu yazılımı sürümünün saldırı yüzeyini artırırken kullanılabilirlik / uyumluluk etkisi yoktur" ** bu, belirsizlikten kaynaklanan güvenliktir ve hiçbir şeyi engellemez **.Sunucu sürümünü gizlemek yerine, güvenli bir sürüme güncellemelisiniz.Yalan söylemek / gizlemek, sorunu önlemek için hiçbir şey yapmaz ve saldırmayı yalnızca biraz daha zorlaştırır.
@Vinz243: Bu, yalnızca sunucu güvenli olmayan bir yazılım sürümü çalıştırırsa ve yönetici bunu bilir ve yama yapmazsa, belirsizlik nedeniyle güvenlik olabilir.Ancak aksi halde, bu tür bilgileri derinlemesine bir savunmanın bir parçası olarak gizlemek, yani saldırganın altyapı hakkında bilgi edinmesini zorlaştırmaktır.
Security.SE'nin sunucu sürümlerini gizleme konusunda halihazırda pek çok özel sorusu var: [Sürümü gizlemek - değerli mi yoksa sadece belirsizlikle güvenlik mi?] (Https://security.stackexchange.com/q/14709/10843), [Görüntüleniyorhata sayfalarında çalıştırdığım sunucu bir güvenlik riski taşır?] (https://security.stackexchange.com/q/4940/10843) ve daha genel olarak [Gizliliğin geçerli rolü] (https: //security.stackexchange.com / q / 2430/10843).
Merchako
2020-01-15 19:42:36 UTC
view on stackexchange narkive permalink

Kullanıcılar için psikolojik olarak sinir bozucu bir durum yaratmak, onları daha az güvenli kararlara yöneltebilir.Örneğin, İsveççe bir şifre yazmaya çalışıyorlar, ancak girişiniz açıklama olmadan å karakterini reddediyor. å olmadan farklı bir iyi şifre seçmek yerine, ellerini havaya kaldırıyorlar ve password123 kullanıyorlar - bir sözlük saldırısıyla kolayca yenilebilir.

Dolayısıyla, belirsizlik yoluyla "daha güvenli" bir sistem oluşturmaya çalıştınız, ancak kullanıcı davranışlarını hesaba kattığımızda, aslında daha az güvenli hale geliyor.

Geçerli karakterler nihayetinde sistematik yollarla keşfedilebilir.Bunları gizlemek, kullanıcı davranışlarına verebileceğiniz zarara değmez.


Daha fazla okuma için bkz. " Güvenlik ve Bilişsel Önyargı: Aklın Rolünü Keşfetme" ve " Bilişsel Davranışsal Aracı Tabanlı Modelleme Kullanarak Parola Politikalarının Güvenlik Etkilerini Ölçme "Sean Smith ve ark.

İyi bir nokta.Burada biri "Kolaylık pahasına güvenlik, güvenlik pahasına gelir" dedi.
mentallurg
2020-01-15 03:32:36 UTC
view on stackexchange narkive permalink

Duruma göre değişir.

İleti, normal kullanıcılar açısından "3. karakter bir rakam olmalıdır" gibi bir hatayı açıklıyorsa, bu bir güvenlik açığı değildir. Ancak, doğrulama için kullanılan normal ifadenin görüntülenmesi uygulama ayrıntılarının açıklanması anlamına gelir ki bu bir zayıflık olabilir , ör. bazı kitaplıklar özyinelemeli çağrıları yoğun olarak kullanır ve bazı ifadeler yığın taşmasına veya yüksek bellek ve CPU kullanımına neden olarak DoS'ye yol açabilir.

CWE-200, yalnızca kullanıcının bu bilgilere erişme yetkisine sahip olmaması durumunda bilgilerin ifşasını bir zayıflık olarak tanımlar. Kullanıcı girdisini düşünüyorsunuz. Bu, kullanıcının bu bilgileri girmesine ve bu nedenle bu bilgileri görmesine izin verildiği ve doğal olarak bu girişle ilgili tüm doğrulama hata mesajlarını görmesine izin verildiği anlamına gelir.

Yığın izleme ve diğer teknik mesajlar, uygulamada kullanılan teknolojiler (ör. hangi kitaplıkların hangi sürümünün kullanıldığı), ortam (ör. dizin düzeni ve izinler, işletim sistemi türü ve sürümü) vb. hakkında bilgi sağlayabilir. Bir saldırgan, bu belirli teknolojiler, kitaplıklar, işletim sistemleri vb. İstismarları etkili bir şekilde seçmek için bu bilgileri kullanabilir. Bu nedenle, bu tür bilgileri kullanıcıya açıklamak potansiyel olarak bir zayıflıktır.

Kullanıcıya girdisinde neyin yanlış olduğunu açıklamamak kesinlikle kötü bir kullanıcı deneyimi olmakla birlikte güvenlik iyileştirmesi değildir.

Verilerin hassas olduğu ve bununla ilgili herhangi bir doğrulamanın hassas olabileceği benzer durumlarla karıştırmayın.Örneğin, kullanıcı bir yıl beklediğiniz alana harf girdiyse, bu hatayı kullanıcıya açıklamak güvenlidir.Ancak kullanıcı bir e-posta adresi girerse ve bu adresin sisteminizde kayıtlı olup olmadığını kontrol ederseniz, herhangi bir bilgi (adres biliniyor, adres bilinmiyor) bir zayıflık olabilir.Bu nedenle, doğrulama mesajlarını veya kullanıcı girdisiyle ilgili diğer geri bildirimleri uygulayacağınız zaman, sonuçları değerlendirin.Ancak tüm alanlar için varsayılan olarak herhangi bir geri bildirimi yasaklamak, yanlış bir güvenlik duygusu ile zayıf bir UX olabilir.

Maalesef, kullanıcıya Normal İfadenin gösterilmesini önermek niyetinde değilim.Daha çok bir Normal İfadenin istemci tarafı koduna yerleştirilmemesi gerekip gerekmediğini merak ediyordu.Bunu daha net hale getirmek için sorumu gözden geçireceğim.
@csrowell İstemci tarafı TÜMÜNÜN "gösterildiğini" unutmayın.Ekranda göstermeseniz bile, kötü niyetli kullanıcıya gösterilir (iletilen tüm istemci kodlarına kesinlikle bakar).
@Thomas: evet ve bence OP'nin noktası buydu.Kullanıcının girişinin neden geçersiz olduğunu anlamasına yardımcı olan kodda, istemci tarafı JS'de normal ifadeler kullanmak güvenli midir?(Çünkü bu, kuralları saldırganlara ifşa edecektir).
@PeterCordes Kontrolün hala sunucuda kopyalanması gerektiğinden, bunun ne kadar önemli olduğunu anlamıyorum (aksi takdirde kötü niyetli kullanıcı, istemci tarafı kontrolünü atlayarak kabul edilemez şifre oluşturabilir ve gönderebilir).Sunucu tarafına ek olarak istemci tarafında zaten kontroller yapıyorsanız (örneğin, geçersiz denemelerde sunucu yükünü azaltmak için), kabul edilemez karakterleri gizlemenin bir anlamı yoktur,
@DanM .: Doğru, sorunun cevabı, bunu gizli tutmak, kullanılabilirliği herhangi bir şeyi savunmaya yardım etmekten daha fazla incitiyor.Ben sadece OP'nin ne istediğini belirtmeye çalışıyorum, kendime sormaya değil.
Filipe dos Santos
2020-01-15 02:56:49 UTC
view on stackexchange narkive permalink

Bu, sistemin kullanılabilirliği lehine güvenlik ödünleşmelerinin beklendiği birçok senaryodan sadece biri.

Bununla birlikte, yığın izlerini göstermek (yetersiz hata işleme) ile bir giriş alanında hangi karakterlerin beklendiğini veya yasaklandığını reddetmek arasında büyük bir fark vardır.

Çoğu senaryoda, şifre girişimlerini sınırlamak gibi başka güvenlik mekanizmaları mevcutsa, bir giriş alanında hangi karakterlerin beklendiğini veya yasaklandığını reddetmenin bir güvenlik açığı olmadığı iddia edilebilir..

Bunun kabul edilen bir sistem riski olduğu bir tehdit modelleme çerçevesi kullanılarak belirlenebilir.

dandavis
2020-01-15 03:57:37 UTC
view on stackexchange narkive permalink

Belirsizlik bir güvenlik değildir.İyi bir sistem, bir saldırgan hakkında her şeyi bilse bile güvenlidir.Sizin durumunuzda, boşa harcanan çatlama tahminlerini belirli bir yüzde, örneğin% 25, kısaltmak, çatlamanın pratikliğini bozmamalı: 1 trilyon yıl, 0,75 trilyon yıl kadar pratiktir.Uygulama ayrıntılarının engellenmemesi, yeni iyi adamların savunma yapmasına da yardımcı olur.

Sosyal düşünceler de var."KÖPEK DİKKATLİĞİ" işareti, güvenlik uygulama ayrıntılarını sızdırabilir, ancak aynı zamanda belirli bir ölçekte yaygın saldırıları da caydırır.Köpek, bilinen veya bilinmeyen yardımcı olur, ancak bir işaret çit bakım maliyetlerini azaltabilir ve bu da diğer savaşlarda savaşmak için kaynakları serbest bırakır.

"İyi bir sistem, bir saldırgan hakkında her şeyi bilse bile güvenlidir."Bu geleneksel bilgelik elbette doğrudur.Ancak, kullanıcıya bilgi vermekten hiçbir fayda sağlamadığınızda, yapmayın.Bunun nedeni, karmaşık sistemlerin aslında hiçbir zaman% 100 güvenli olmamasıdır.Bu özel durumda, açıkça büyük bir kullanılabilirlik avantajı vardır ve kesinlikle bir güvenlik sorunu değildir, ancak bu mantığı genel duruma uygularken dikkatli olmanız gerekir.
bolov
2020-01-17 20:49:45 UTC
view on stackexchange narkive permalink

Diğer yanıtlar, bunu ifşa etmenin bir güvenlik sorunu olmadığını gösteriyor.

Gerçek bir anekdotla, ifşa etmemenin yalnızca kullanıcıları sinirlendirmekle kalmayıp aynı zamanda daha az güvenliğe de yol açabileceğini savunacağım.

Bu, hangi karakterlere izin verildiğini netleştirmeyen sitelerde birden çok kez başıma geldi. O zamanlar bir şifre üreticisi kullanmadığım için şifreleri hatırlamak için zihinsel bir planım vardı. $ @. & gibi birkaç özel karakter kullanmayı içeriyordu. Elime geçen tek şeyin "şifrede geçersiz karakterler" olduğu birkaç sinir bozucu girişim ve aşamalı olarak özel karakterleri ortadan kaldırmaya başladım. Sonra "şifreniz yeterince güvenli değil, birkaç rakam ve simge eklemeyi deneyin" geldi ... evet ... Bu noktada kesinlikle rahatım.

Sonunda şifremi kabul ettim. Sadece bir özel karakter içermeyen, aynı zamanda şifreleri hatırlama şemalarımdan hiçbirine uymayan bu yüzden onu başka bir yerde saklamak zorunda kaldım nasıl güvence altına aldığımı hayal edin. Bunun bir helikopter ve ip gibi olduğunu söyleyeceğim).

Sango
2020-01-15 18:45:33 UTC
view on stackexchange narkive permalink

Bir yandan bu kurallar da uygulanıp kontrol edildiği sürece, kullanıcının seçebileceği karakter kümesini açıklamada bir sorun görmüyorum. Yani, kullanıcının alanda \ kullanmasına izin verilmiyorsa, bunu JS girişinde kontrol etmek yeterli değildir, ancak bunu girmeden önce yani DB'de ve veri kullanıldığında da kontrol etmek yeterlidir. Bu yüzden kurallar her zaman geçerli olmalıdır (TOCTOU). Diğer kısım, entropi hala verildiği sürece karakter kümesini küçültmenin sorun olmamasıdır. Parola karakterlerini "a" ve "b" olarak azaltabilirsiniz, ancak daha sonra minimum PW uzunluğunu buna göre artırmanız gerekir (ve yeterince uzun olana kadar yalnızca "a" tuşunu basılı tutmadıklarını kontrol edin). Yeterince uzun (rastgele) bir parola ile, bu aynı zamanda güvenli bir parola olacaktır. Sonunda, bir karakter için olan tek şey bittir ve herkes bunların 0 olduğunu bilir & 1, bu nedenle (gerçek) alfabe her zaman bilinir, kaç olası düzenleme olduğu, belirtmek (ve kontrol etmek) size bağlıdır.



Bu Soru-Cevap, otomatik olarak İngilizce dilinden çevrilmiştir.Orijinal içerik, dağıtıldığı cc by-sa 4.0 lisansı için teşekkür ettiğimiz stackexchange'ta mevcuttur.
Loading...