it-swarm-tr.com

Veritabanı alanlarını şifrelemek genellikle kötü bir fikir midir?

Küçük bir şirkette çalışıyorum, kelimenin tam anlamıyla ben (programcı) ve sahibi. Sahibi, müşterilerin verilerini korumak için bir veritabanındaki birkaç alanı şifrelememi istedi. Bu, hukuk firmalarının verilerini yönetmesine yardımcı olan bir web uygulamasıdır, bu yüzden temel olarak kişileri saklar ve dava açar (kim dava edilir, neden, ne kadar için). Kolayca görülmemesi gereken bu hassas bilgiyi dikkate alır. Korkusu "Yetkisiz kişilerin bu bilgiyi görmesini istemiyorum". Yalnızca diğer hukuk firmaları bu verilerle ilgilenebilir, bu nedenle bu örneğin kredi kartları kadar önemli olmamalıdır.

Web'de bunun hakkında çok şey okudum ve sadece bu alanlarda simetrik şifreleme kullanmayı düşünüyordum, böylece performans o kadar da kötü değil. Anahtar sunucuda saklanır. Ancak, this stackoverflow üzerindeki iş parçacığı bunun kötü bir fikir olduğunu söylüyor.

Alanları şifrelemenin ve anahtarı sunucuya kaydetmenin bu kadar işe yaramaz olabileceğini anlamıyorum. Disklerin çalınmasından korkmuyorum çünkü Amazon EC2'de. Ben bir güvenlik uzmanı değilim, ama bence, bir şey ters gidebilirse, veritabanı sızıntıları olduğunu söyleyebilirim. O zaman bile, önemli bilgiler şifrelenir. Şimdi adam EC2 sunucuma bile hack etmeyi başardıysa, sanırım o zaman bu konuda yardımcı olabileceğim çok az koruma var. Küçük bir şirket olduğumuzdan, sayfaları sunmaktan verileri depolamaya kadar her şeyi yapan tek bir sunucumuz var.

Benim sorum, sadece bir sunucuya sahip olabileceğimizi düşünürsek, bu alanları bu sunucuya kaydedilen simetrik bir anahtarla şifrelemek, tamam mı?

65
Bhaskara

Genel yorumlar. Devam etmeden önce sizin ve patronunuzun bazı temel güvenlik kavramlarını öğrenmesinin faydalı olacağı anlaşılıyor. Güvenlik özel bir alandır. Sokakta rastgele bir kişiden size açık kalp ameliyatı yapmasını istemezsiniz; ve ortalama bir yazılım geliştiricisinin sistemlerinizi nasıl güvenli hale getireceğini bilmesini beklememelisiniz.

Burada bazı yanılgıları hissediyorum. Örneğin, patronunuz güvenliği kriptografi ile eşitlemiş gibi görünüyor. Ama bu bir hata. Bruce Schneier'in vurguladığı gibi, Şifreleme, güvenli hale getirmek için bir sisteme serpebileceğiniz sihirli pixie tozu değildir . Roger Needham'ın bir zamanlar ünlü söylediği gibi, Kriptografinin sorununuzu çözeceğini düşünüyorsanız, ya kriptografiyi anlamıyorsunuz ya da probleminizi anlamıyorsunuz .

Bir bilgisayar sistemini güvenceye alırken önemli bir kavram tehdit modelidir . Bu, ne tür saldırıları ve düşmanları durdurmaya çalıştığınız ve ne olmadığınızı dikkatlice düşünmeniz gerektiği anlamına gelir. Tehdit modeli üzerinden net bir şekilde düşünülememesi, güvenlik tiyatrosuna yol açabilir: ilk bakışta iyi görünen, ancak aslında pratikte acımasızca yetersiz olan güvenlik mekanizmaları. İyi güvenlik yönetimi genellikle risk yönetimine gelir: en ciddi risklerin ne olduğuna dair dikkatli bir analiz ve daha sonra bu belirli riskleri azaltmak veya yönetmek için stratejiler tasarlamak.

Güvenliğin en zayıf bağlantı özelliği olduğunu anlamak da önemlidir: sisteminizin güvenliği yalnızca en zayıf bağlantı kadar güçlüdür . Sistemin herhangi bir bölümündeki bir güvenlik açığı, tüm sistemin güvenliğini tehlikeye atabilir. Bu, sisteminizi korumak için yeterli olacak tek bir yanıt olmadığı anlamına gelir; bunun yerine, sisteminizi korumak için birçok yerde güvenliği sağlamanız gerekir.

Ayrıntılara dalmak. Hedefleriniz hassas verilerin izinsiz açıklanmasını önlemek gibi görünüyor. Öyleyse, birkaç öğeye odaklanmanız gerekir. Bunu sizin için çözecek tek bir sihirli gümüş mermi yok; genel olarak uygulama güvenliği üzerinde çalışmanız gerekecektir.

Hedeflerinizi doğru anladıysam, sizin için öncelik olması gereken bazı şeyleri önereyim:

  • ygulama güvenliği. Web uygulaması güvenliği üzerinde çalışmaya başlamanız gerekiyor. Soruna ne kadar kripto attığınız önemli değil; bir saldırgan uygulama kodunuzda bir güvenlik boşluğu bulabilirse, size ev sahipliği yapılır. Web uygulama güvenliği ile ilgili arka plan için, OWASP'nin birçok mükemmel kaynağı vardır. OWASP Top Ten, XSS, SQL enjeksiyonu, giriş sanitizasyon/doğrulama, çıkıştan kaçış, beyaz liste ve diğer kavramlar hakkında bilgi edindiğinizden emin olun.

  • Erişim kontrolü. Sisteminizin bir kullanıcısının (yetkisiz) başka bir kullanıcının bilgilerine erişememesini sağlamak için web uygulamanızın sağlam erişim denetimlerine sahip olması gerekir. Bunun ayrıntıları, özel sisteminizin özelliklerine bağlı olacaktır, bu nedenle bu konuda ek yardım istiyorsanız, muhtemelen başvurunuz ve mevcut erişim kontrolü stratejiniz hakkında daha fazla ayrıntı içeren ayrı bir soru göndermeniz gerekecektir.

  • Kimlik Doğrulama. Web uygulamanızın kullanıcılarını doğrulamak için bir yola ihtiyacı olacaktır. Standart en az çaba gerektiren şema sadece bir kullanıcı adı ve şifre kullanmaktır. Bununla birlikte, bunun pratikte iyi anlaşılan ciddi sınırlamaları vardır. Kullanıcılar kendi şifrelerini seçerse, genellikle zayıf şifreleri seçerler ve bu sisteminizin güvenliğini bozabilir.

  • Güvenli yazılım geliştirme yaşam döngüsü. Güvenliği yazılım geliştirme sürecine entegre etmeniz gerekir. Yazılım mimarisini incelerken, güvenlik gereksinimlerini düşünmeli ve tehdit modellemesi ve mimari risk analizi yapmalısınız. Kod yazarken, güvenliği ihlal edebilecek ve bunlardan kaçınabileceğiniz genel uygulama hataları hakkında bilgi sahibi olmanız gerekir. Yazılım oluşturulduktan sonra, güvenliğini test etmeniz ve güvenlikte nasıl çalıştığınızı sürekli olarak değerlendirmeniz gerekir. Yazılımı dağıtırken, işlem arkadaşlarınızın yazılımı nasıl güvenli bir şekilde yöneteceklerini bilmeleri gerekir. Microsoft, güvenli yazılım geliştirme yaşam döngüsü (SDL) konusunda mükemmel kaynaklara sahiptir. Daha fazla bilgi için ayrıca bkz. BSIMM.

  • Güvenlik değerlendirmesi. Güvenlik konusunda endişeleriniz varsa, başvurunuzun güvenliğinin değerlendirilmesini öneririm. Basit bir başlangıç ​​noktası, bir kişinin web uygulamanızdan en az birini gerçekleştirmesini, bazı genel hataları kontrol etmesi olabilir. Bu kesinlikle bir güvenlik garantisi değildir, ancak bazen birçok büyük sorun varsa bir uyandırma çağrısı olarak hizmet etmeye yardımcı olabilir. WhiteHat Security'nin hizmetlerine bakabilirsiniz; web pentesting yapacak başka pek çok vardır.

Bunun önemsiz bir girişim olmadığı fikrini alıyorsanız, özür dilerim, ama gerçekten durum böyle. Öte yandan, iyi haber şu ki, orada çok fazla kaynak var ve dahası, uzman düzeyinde bir güvenlik gurusu olmanıza gerek yok: sadece bazı temel kavramlara ve bazı ortak güvenliklere aşina olmanız gerekiyor Web programlamasındaki hatalar ve bu da ihtiyaçlarınızın çoğunu karşılayacaktır.

101
D.W.

Veritabanındaki verilerin şifrelenmesi, veritabanı bir şekilde çalınırsa bilgileri koruyacaktır. Ancak, saldırıya uğrayan web sitesine karşı korumak için hiçbir şey yapmaz. Örneğin bir kullanıcı adı/şifre tahmin ederek. Eğer anahtarı bulmak zorunda çünkü sunucu tehlikeye sahip biri yavaşlayabilir ama onları durdurmak olmaz. Ayrıca potansiyel olarak yüksek bir fiyata geliyor. Örneğin, şifrelenmiş alanlar artık etkili bir şekilde aranamaz. Ayrıca, bir yedekleme bandı çalınırsa veritabanının şifresinin çözülmesini önlemek için yedekleme sonuçlarının farkında olmanız ve anahtarın tercihen veritabanı yedeklemelerinden ayrı olarak yedeklendiğinden emin olmanız gerekir. VE anahtarın birkaç kopyasına sahip olduğunuzdan emin olun ve bunları düzenli olarak TEST EDİN.

15
pipTheGeek

SoA'dan iyi bir konsept, sunucunuzdaki diğer işlemlerden izole çalışan bir kripto hizmetine sahip olmaktır (web uygulamanız da izole çalışmalıdır!). Daha sonra bir nesneyi/alanı şifrelemeniz/şifresini çözmeniz gerektiğinde, kripto hizmetine düz metin/crypttext gönderirsiniz ve crypttext/plaintext ile dönersiniz. Bu şekilde, web uygulamanız tehlikeye girse bile, saldırgan şifreleme anahtarını okuyamaz, çünkü anahtarı yalnızca kripto servisi bilir. Ayrıca, web uygulamanız yalıtıldığından, sisteminizde yapabilecekleri ciddi şekilde sınırlıdır. Hizmet izolasyonu genellikle SElinux, TOMOYO (SElinux imo'dan çok daha kolay kullanım), AppArmor gibi MAC sistemi ile yapılır. Ayrıca grsecurity ile yamalı en son linux çekirdeğini çalıştırmanızı tavsiye ederim.

6
Matrix

Kısa cevap: Evet simetrik şifreleme kullanın. Bu, sql enjeksiyonuyla sql verilerini okumak gibi bazı saldırıları önleyecektir. Ancak web uygulamanız saldırıya uğrarsa önemli olmayabilir. Birisi sunucunuza yeterli erişim alırsa hemen hemen hiçbir şey yapamazsınız. Asimetrik şifrelemede bile.

3
user5575