2010-11-14 21 views
5

सुरक्षित करना हम एक एएसपी.NET अनुप्रयोग विकसित करेंगे। यह SQL सर्वर 2008 R2 स्थापना में डेटा संग्रहीत करेगा। अधिकांश डेटा संवेदनशील है, इसलिए सुरक्षा एक प्राथमिक चिंता है।
हम इसे साझा वातावरण में होस्ट करेंगे, और यह एक डिज़ाइन लक्ष्य है कि डेटा चोरी के मामले में अपठनीय होना चाहिए।एक SQL सर्वर 2008R2 डेटाबेस

मैं निम्नलिखित सेट अप के बारे में सोच रहा हूं: टीडीई का उपयोग कर पूरे डेटाबेस को एन्क्रिप्ट करें। उपयोगकर्ता SQL सर्वर उपयोगकर्ता तालिका में बनाए जाते हैं, और जब हम वेब इंटरफ़ेस के माध्यम से लॉग इन करते हैं तो हम इसके खिलाफ प्रमाणित करते हैं।
इरादा यह है कि यदि कोई डेटाबेस में जाता है, तो वे डेटा का उपयोग करने में सक्षम नहीं होंगे। और उपयोगकर्ता प्रमाण-पत्रों के साथ कोई कनेक्शन स्ट्रिंग web.config फ़ाइल में संग्रहीत करने की आवश्यकता होगी।

क्या आपको इस दृष्टिकोण के लिए कोई नुकसान दिखता है? और वर्णित SQL सर्वर के खिलाफ प्रमाणीकरण करना कितना आसान होगा?

उत्तर

3

मुझे नहीं लगता कि साझा वातावरण में टीडीई का उपयोग करना एक अच्छा विचार है।

इसका पूरा विचार एन्क्रिप्शन मास्टर डिक (या सर्टिफिकेट की निजी कुंजी) का उपयोग करके बाहरी उपयोगकर्ताओं को एन्क्रिप्शन/डिक्रिप्शन ट्रांसपेरेंट करना है, जो आपके आंतरिक, संबंधित और आपके द्वारा संरक्षित, सर्वर पर और एन्क्रिप्टेड डेटाबेस को पुनर्स्थापित करने से रोकता है उस कुंजी के बिना एक और सर्वर। लेकिन साझा होस्टिंग सर्वर आपका सर्वर नहीं है, आप इसे एक्सेस करने या यहां तक ​​कि, अक्सर से अधिक, यहां तक ​​कि सिस्टम फ़ोल्डर्स/फ़ाइलों या डेटाबेस को बदलने या लिखने में भी नियंत्रण नहीं कर सकते हैं। आपको इसके बारे में अपने मेजबान से परामर्श लेना चाहिए।
लेकिन यदि कोई होस्टिंग क्लाइंट साझा किया जाता है तो उसे अपवाद दिया जाएगा, फिर सामान्य सिस्टम प्रतिबंधित कार्यक्षमताओं और क्षेत्रों तक पहुंच के साथ क्रमशः दूसरा होगा।

वैसे भी, होस्टर sysadmins या roundabout श्रमिकों से कोई भी आपके डेटाबेस को पूरी तरह से किसी अन्य सर्वर पर पुनर्स्थापित करने और पढ़ने के लिए आपके डेटाबेस तक पहुंच प्राप्त करेगा।

फिर, टीडीई एसक्यूएल सर्वर के एंटरप्राइज़ संस्करण की सुविधा है और साझाकरण होस्टिंग आमतौर पर एक्सप्रेस संस्करण प्रदान करते हैं। एंटरप्राइज़ एड साझा करने में कोई समझ नहीं है। सर्वर

अद्यतन: @Martin Wiboe,
मुझे यकीन है कि मैं का पालन करें क्या आप पर जा रहे हैं और आप के बारे में क्या कह रहे हैं नहीं कर रहा हूँ।

डेटाबेस एन्क्रिप्शन कुंजी सेवा मास्टर कुंजी (और बाद वाला विंडोज डीपीएपीआई द्वारा संरक्षित है) के साथ एन्क्रिप्ट किया गया है, लेकिन इसमें कमी का वातावरण नहीं है क्योंकि स्मृति में डेटा और तार पर डेटा अनएन्क्रिप्टेड और मास्टर सर्विस कुंजी है उदाहरण के लिए एक (सर्वर)।
तो, यह साझा होस्टिंग पर सभी उपयोगकर्ताओं के बीच साझा किया जाना चाहिए।
आप कुंजी को "लॉक"/"अनलॉक" नहीं कर सकते क्योंकि यह ट्रांसपेरेंट डेटा एन्क्रिप्शन है!
ध्यान दें कि यदि डेटाबेस में से कोई एक TDE-ed है तो tempdb सिस्टम डेटाबेस एन्क्रिप्ट किया गया है। यह साझा होस्टिंग के लिए ज्यादा समझ में नहीं आता है।

1)
सॉफ़्टवेयर जेनरेट की गई कुंजी क्रैक करने योग्य हैं, यह केवल दृढ़ता/इच्छा बनाम समय सीमा का मामला है। असली सुरक्षा केवल हार्डवेयर जेनरेट और हार्डवेयर संग्रहीत कुंजी द्वारा आश्वस्त की जा सकती है। इसलिए, साझा होस्टिंग
2)
आप डीबीएमएस एन्क्रिप्शन को छोड़ने और क्लाइंट पक्ष पर डेटा एन्क्रिप्ट करने पर विचार करना चाह सकते हैं।
हालांकि इस दृष्टिकोण के नुकसान हैं कि आप खोज के लिए एसक्यूएल सर्वर का उपयोग नहीं कर सकते हैं, ट्रांसमिशन, प्रोसेसिंग इत्यादि को सर्वर की तरफ अनुकूलित कर सकते हैं। फिर, ऐसे डीबीएमएस में क्या बात है?

आखिरकार, यह सब तथ्य साझा होस्टिंग सर्वर का उपयोग कर

+0

उत्तर के लिए धन्यवाद :) यह बहुत समझ में आता है - अगर निजी कुंजी मशीन पर संग्रहीत की जाती है, तो किसी को मशीन चोरी करने के लिए डेटा तक पहुंच होगी - साझा या समर्पित होस्टिंग के बावजूद। क्या एन्क्रिप्टेड रूप में टीडीई कुंजी को रखने का कोई तरीका नहीं है, केवल अधिकृत उपयोगकर्ता के पासवर्ड से अनलॉक किया जा सकता है? ताकि पासवर्ड की आवश्यकता हो - यहां तक ​​कि पीसी तक भौतिक पहुंच वाले लोगों के लिए भी? –

+0

उत्तर में मेरा अपडेट देखें। –

+0

स्पष्टीकरण के लिए धन्यवाद। मुझे लगता है कि कार्रवाई का सबसे उचित तरीका सुरक्षा आवश्यकताओं की समीक्षा करना और एक समझदार समझौता करना है। –

0

हम एक ASP.NET आवेदन के विकास की जाएगी में कोई खास मतलब नहीं है कि करने के लिए निर्भर करता है। यह डेटा को SQL सर्वर 2008 R2 स्थापना में संग्रहीत करेगा। डेटा के अधिकांश संवेदनशील हैं, इसलिए सुरक्षा एक प्राथमिक चिंता है। हम साझा किए गए वातावरण में इसे होस्ट कर रहे हैं, और यह एक डिज़ाइन लक्ष्य है कि डेटा चोरी के मामले में अपठनीय होना चाहिए।

ठीक है, मैंने यहां हँसना बंद कर दिया। असल में आप शाकाहारी गाय स्टेक बनाने की कोशिश करते हैं।

कोई भी सुरक्षा आपकी प्राथमिक चिंता नहीं है, तो आपको साझा होस्टिंग परिदृश्य का उपयोग नहीं करना चाहिए, लेकिन एक बंदरगाह लॉक रैक में एक प्रमाणित डेटा सेंटर में चलाना चाहिए जिसमें होस्टर द्वारा कोई प्रबंधन पहुंच नहीं है। इस मामले में आप एक उच्च संस्करण SQL सर्वर का उपयोग करेंगे और डिस्क एन्क्रिप्शन + एक सुरक्षित सिस्टम (टीपीएम चिप) का उपयोग यह सुनिश्चित करने के लिए करेंगे कि डिस्क पर डेटा डिस्क पर पढ़ने योग्य नहीं है। बिंदु।

या सुरक्षा आपकी चिंता नहीं है तो आप एक साझा होस्टिंग प्रदाता का उपयोग कर सकते हैं।

कुछ और हैगवाश है। "नहीं, वाटरबोर्डिंग का स्तर यातना नहीं है क्योंकि यह शारीरिक क्षति का कारण नहीं है" तर्क का प्रकार।

आपकी समस्या यह है: आप डेटा तक पहुंच को रोकने के लिए कुछ भी नहीं कर सकते हैं। चूंकि आपका एप्लिकेशन अनएन्क्रिप्टेड डेटा को पढ़ने में सक्षम होना चाहिए और इस प्रकार टीपी एन्क्रिप्ट का उपयोग करने वाली कुंजियों तक पहुंच है ... आपके एप्लिकेशन में किसी को तोड़ने के लिए कुंजी तक पहुंच है (यही कारण है कि टीपीएम बहुत अच्छे हैं - यह सुरक्षित हार्डवेयर है, कोई रास्ता नहीं चाबियों तक पहुंच प्राप्त करने के लिए)।

आप इस तथ्य के आसपास सभी प्रकार के मजेदार तर्कों के साथ खेल सकते हैं, लेकिन यदि डेटा चोरी हो जाता है तो तर्क किसी भी कानूनी चर्चा में नहीं होंगे। और आप इसके ऊपर खराब दिखेंगे।

उपयोगकर्ता एसक्यूएल सर्वर उन तालिका में बनाए गए हैं, और हम उस के खिलाफ प्रमाणित करने का कार्य उन वेब इंटरफेस के माध्यम से प्रवेश करें। इरादा है कि यदि कोई डेटाबेस में जाता है, वे डेटा का उपयोग करने में सक्षम नहीं होंगे। और उपयोगकर्ता प्रमाण-पत्रों के साथ कोई कनेक्शन स्ट्रिंग को वेब.config फ़ाइल में संग्रहीत करने की आवश्यकता होगी।

ठीक है, इसलिए - मैं डेटाबेस चुरा रहा हूं। मैं आपके प्रमाणीकरण तंत्र को भी चुरा लेता हूं। आप वास्तव में क्या हासिल करते हैं? अपनी खोज कार्यक्षमता को मारने के अलावा? जैसे-जैसे मैं डेटाबेस को खोलता हूं IH उपयोगकर्ता तालिका को खोलता है और मैं किसी भी तरह उपयोगकर्ता के रूप में प्रमाणित कर सकता हूं। अगर मैं एप्लिकेशन को चुरा लेता हूं तो मुझे बहुत सारी चीजें मिलती हैं, यहां तक ​​कि कोड भी।

UNLESS आपके पास एक विशेष मामला है जिसमें आपके पास एप्लिकेशन कुंजी नहीं है (LastPass जैसी चीजें जो सर्वर डेटा पर अपने डेटा को डिक्रिप्ट करने के बारे में नहीं जानते)। साझा होस्टिंग वातावरण में इसके लिए हार्डवेयर का सही स्तर नहीं है।

+0

आपके इनपुट के लिए धन्यवाद, टॉमटॉम। मुझे अभी भी लगता है कि आप इस पहलू को देख रहे हैं: मान लें कि डीबी कुछ सममित कुंजी के साथ एन्क्रिप्ट किया गया है। प्रत्येक उपयोगकर्ता के लिए, यह कुंजी उपयोगकर्ता के पासवर्ड से एन्क्रिप्ट की जाती है। प्रत्येक उपयोगकर्ता डेटाबेस को अनलॉक करने में सक्षम होगा, लेकिन खाते के बिना एक विरोधी को केवल एन्क्रिप्टेड कुंजी की सूची मिल जाएगी। यह समाधान क्रिप्टैनालिसिस के लिए अधिक संवेदनशील हो सकता है, लेकिन मुझे यह गूढ़ रूप से ध्वनि मिलती है। अच्छा क्रिप्टो कुछ रहस्यों पर आधारित है जो केवल अधिकृत पार्टियों को पता है - हार्डवेयर के माध्यम से अस्पष्टता से छिपाने की जानकारी पर नहीं। हालांकि, हंसी रखने के लिए स्वतंत्र महसूस करें। –

3

यहां एक स्पष्ट चिंता है।आपके आवेदन को डेटा को पढ़ने और समझने में सक्षम होना चाहिए। इसलिए, यदि कोई आपके आवेदन के साथ गड़बड़ करने में सक्षम है (इसके संचार को कम करें, इसे डीकंपाइल करें और इसी तरह), तो वह उसी तरह से डेटाबेस तक पहुंच सकता है।
भले ही आप कुंजी डेटा (जैसे विंडोज डेटा प्रोटेक्शन एपीआई) के लिए कुछ बाहरी स्टोरेज का उपयोग करते हैं, फिर भी आपको इस स्टोरेज को किसी भी तरह प्रमाणित करने की आवश्यकता है। इसलिए, यदि कोई प्रमाणीकरण तंत्र (उदाहरण के लिए, विंडोज डोमेन) को नियंत्रित करने में सक्षम है, तो वही पहुंच प्राप्त कर सकता है।

असल में, यदि किसी विरोधी के पास पर्यावरण का पूर्ण नियंत्रण होता है (और यदि आप साझा होस्टिंग का उपयोग करते हैं और अपने डेटा से अपने डेटा को सुरक्षित रखने का प्रयास करते हैं), तो आप उन्हें जो भी चाहें करने से रोक नहीं सकते हैं।

SQL सर्वर में एन्क्रिप्शन के कुछ अच्छे अवलोकन यहां दिए गए हैं: Understanding Transparent Data Encryption (TDE), Encryption Hierarchy। किसी भी मामले में, आपको अभी भी अपने विरोधी के लिए "अंतिम प्रारंभ कुंजी" को स्टोर करने के लिए एक तरीका चाहिए, लेकिन अपने ऐप में इस कुंजी का उपयोग करने में सक्षम हो।

+0

SQL सर्वर उपयोगकर्ता पासवर्ड द्वारा इस कुंजी को एन्क्रिप्टेड करने का कोई तरीका नहीं होगा? ताकि सही उपयोगकर्ता प्रमाण-पत्र दिए जाने पर एप्लिकेशन केवल डेटाबेस का उपयोग कर सके? –

+1

हां, लेकिन आपको अभी भी इस कुंजी को एप्लिकेशन में पास करना होगा। और इसे सुरक्षित रूप से करने के लिए आपको एन्क्रिप्शन (सादे स्नीफिंग को रोकने के लिए), डबल-एंड प्रमाणीकरण (एमआईटीएम हमले को रोकने के लिए), और स्थिरता सत्यापन (कोड इंजेक्शन को रोकने के लिए) का उपयोग करके इसे स्थानांतरित करना होगा। और फिर भी एक संभावना बनी हुई है कि एक विरोधी आपके ऐप का मेमोरी डंप करेगा और वहां कुंजी ढूंढ पाएगा। – VladV

+1

नीचे की रेखा है, सुरक्षा मुश्किल है। मेरा मानना ​​है कि, सह-स्थान या समर्पित सर्वर के लिए भुगतान करना एक ऐसे अनुप्रयोग को बनाए रखने से सस्ता और सुरक्षित है जो साझा वातावरण में सुरक्षित रूप से कार्य कर सकता है। आखिरकार, यदि आप एक सर्वर बर्दाश्त नहीं कर सकते हैं, तो शायद इतना मूल्यवान डेटा नहीं है। – VladV

संबंधित मुद्दे