Secure by design
सॉफ्टवेयर इंजीनियरिंग में डिजाइन द्वारा सुरक्षित होने का मतलब है कि सॉफ्टवेयर उत्पादों और क्षमताओं को मूलभूत रूप से सुरक्षित होने के लिए डिज़ाइन किया गया है। सॉफ्टवेयर डिजाइन की शुरुआत में वैकल्पिक सुरक्षा रणनीतियों, रणनीतियों और पैटर्न पर विचार किया जाता है, और सबसे अच्छे को वास्तुकला द्वारा चुना और लागू किया जाता है, और उनका उपयोग डेवलपर्स के लिए मार्गदर्शक सिद्धांतों के रूप में किया जाता है। सुरक्षा पर लाभकारी प्रभाव डालने वाले रणनीतिक डिजाइन पैटर्न का उपयोग करने के लिए भी प्रोत्साहित किया जाता है, भले ही उन डिजाइन पैटर्न को मूल रूप से सुरक्षा को ध्यान में रखते हुए तैयार नहीं किया गया था। सॉफ्टवेयर प्रणालियों की सुरक्षा और गोपनीयता सुनिश्चित करने के लिए सिक्योर बाय डिजाइन तेजी से मुख्यधारा का विकास दृष्टिकोण बन रहा है। इस दृष्टिकोण में, सुरक्षा पर विचार किया जाता है और प्रत्येक परत पर प्रणाली में बनाया जाता है और एक मजबूत वास्तुकला डिजाइन के साथ शुरू होता है। सुरक्षा वास्तुशिल्प डिजाइन निर्णय प्रसिद्ध सुरक्षा रणनीतियों, रणनीतियों और विशिष्ट गुणवत्ता संबंधी चिंताओं को प्राप्त करने के लिए पुनः प्रयोज्य तकनीकों के रूप में परिभाषित पैटर्न पर आधारित होते हैं। सुरक्षा रणनीति/पैटर्न आवश्यक प्रमाणीकरण, प्राधिकरण, गोपनीयता, डेटा अखंडता, गोपनीयता, जवाबदेही, उपलब्धता, सुरक्षा और गैर-अस्वीकृति आवश्यकताओं को लागू करने के लिए समाधान प्रदान करते हैं, तब भी जब सिस्टम पर हमला हो रहा हो। सॉफ्टवेयर प्रणाली की सुरक्षा सुनिश्चित करने के लिए, न केवल एक मजबूत इच्छित सुरक्षा संरचना तैयार करना महत्वपूर्ण है, बल्कि सुरक्षा दृढ़ता बनाए रखने के लिए सॉफ्टवेयर विकास के लिए अद्यतन सुरक्षा रणनीतियों, रणनीतियों और पैटर्न का मानचित्रण करना भी आवश्यक है। प्रत्याशित हमले सॉफ्टवेयर पर दुर्भावनापूर्ण हमले होने चाहिए, और प्रभाव को कम करने के लिए ध्यान रखा जाता है। अमान्य उपयोगकर्ता इनपुट के साथ सुरक्षा कमजोरियों का अनुमान लगाया जाता है। असुरक्षा-खोलने वाली गलतियों के जोखिम को कम करके सुरक्षा बढ़ाने के तरीके के रूप में "अच्छे" सॉफ़्टवेयर डिज़ाइन, जैसे कि डोमेन-संचालित डिज़ाइन या क्लाउड नेटिव का उपयोग करने का अभ्यास निकटता से संबंधित है-भले ही उपयोग किए गए डिज़ाइन सिद्धांतों की मूल रूप से सुरक्षा उद्देश्यों के लिए कल्पना नहीं की गई थी। अस्पष्टता के माध्यम से सुरक्षा से बचें आम तौर पर, जो डिज़ाइन अच्छी तरह से काम करते हैं वे गुप्त होने पर भरोसा नहीं करते हैं। अक्सर, गोपनीयता खतरे वाली आबादी के एक उपसमूह को हतोत्साहित करके हमलावरों की संख्या को कम कर देती है। तर्क यह है कि यदि हमलावर के लिए जटिलता में वृद्धि होती है, तो लक्ष्य से समझौता करने के लिए हमलावर के बढ़ते प्रयास उन्हें हतोत्साहित करेंगे। जबकि इस तकनीक का तात्पर्य अंतर्निहित जोखिमों को कम करना है, समय के साथ लागू किए गए खतरे वाले अभिनेताओं और तकनीकों का एक लगभग अनंत सेट अधिकांश गोपनीयता विधियों को विफल कर देगा। जबकि अनिवार्य नहीं है, उचित सुरक्षा का आमतौर पर मतलब है कि सभी को डिजाइन को जानने और समझने की अनुमति है क्योंकि यह सुरक्षित है। इसका लाभ यह है कि कई लोग कंप्यूटर कोड को देख रहे हैं, जिससे इस संभावना में सुधार होता है कि कोई भी दोष जल्द ही मिल जाएगा (लिनस का नियम देखें)। नुकसान यह है कि हमलावर भी कोड प्राप्त कर सकते हैं, जिससे उनके लिए शोषण करने की कमजोरियों को ढूंढना आसान हो जाता है। हालाँकि, आम तौर पर यह माना जाता है कि खुले कंप्यूटर कोड का लाभ नुकसान से अधिक है। इसके अलावा, यह महत्वपूर्ण है कि सब कुछ कम से कम विशेषाधिकारों के साथ काम करे (कम से कम विशेषाधिकार का सिद्धांत देखें)। उदाहरण के लिए, एक वेब सर्वर जो प्रशासनिक उपयोगकर्ता ("रूट" या "एडमिन") के रूप में चलता है, उसे फ़ाइलों और उपयोगकर्ताओं को हटाने का विशेषाधिकार हो सकता है। इस तरह के प्रोग्राम में एक दोष इसलिए पूरे सिस्टम को खतरे में डाल सकता है, जबकि एक वेब सर्वर जो एक अलग वातावरण के अंदर चलता है, और केवल आवश्यक नेटवर्क और फ़ाइल सिस्टम कार्यों के लिए विशेषाधिकार रखता है, वह उस सिस्टम से समझौता नहीं कर सकता है जिस पर वह चलता है जब तक कि उसके आसपास की सुरक्षा भी त्रुटिपूर्ण न हो। कार्यप्रणाली सुरक्षित डिजाइन विकास जीवन चक्र (जो भी विकास पद्धति चुनी जाए) के सभी बिंदुओं पर विचार किया जाना चाहिए। कुछ पूर्व-निर्मित सिक्योर बाय डिजाइन विकास पद्धतियाँ मौजूद हैं (जैसे। माइक्रोसॉफ्ट सुरक्षा विकास जीवनचक्र)। माइक्रोसॉफ्ट सुरक्षा विकास जीवनचक्र माइक्रोसॉफ्ट ने शास्त्रीय सर्पिल मॉडल के आधार पर कार्यप्रणाली और मार्गदर्शन जारी किया। "सुरक्षित" की परिभाषा को नियंत्रित करके और सुरक्षित प्रणालियों के परीक्षण और एकीकरण के लिए ठोस कदम प्रदान करके सुरक्षित डिजाइन में सहायता करने के लिए मानक और विधान मानक और विधान मौजूद हैं। मानकों के कुछ उदाहरण जो सिक्योर बाय डिजाइन सिद्धांतों को शामिल करते हैं या स्पर्श करते हैंः ई. टी. एस. आई. टी. एस. 103 645 जो यू. के. सरकार के "उपभोक्ता स्मार्ट उत्पाद साइबर सुरक्षा को विनियमित करने के प्रस्ताव" आईएसओ/आई. ई. सी. 27000-श्रृंखला में सुरक्षित डिजाइन के कई पहलुओं को शामिल करता है। सर्वर/क्लाइंट आर्किटेक्चर सर्वर/क्लाइंट आर्किटेक्चर में, दूसरी तरफ का प्रोग्राम एक अधिकृत क्लाइंट नहीं हो सकता है और क्लाइंट का सर्वर एक अधिकृत सर्वर नहीं हो सकता है। यहां तक कि जब वे होते हैं, तब भी एक मध्य-पुरुष हमला संचार को प्रभावित कर सकता है। अक्सर क्लाइंट/सर्वर सिस्टम की सुरक्षा को तोड़ने का सबसे आसान तरीका सुरक्षा तंत्र पर जाना नहीं है, बल्कि उनके आसपास जाना है। बीच के हमले में एक आदमी इसका एक सरल उदाहरण है, क्योंकि आप इसका उपयोग उपयोगकर्ता का प्रतिरूपण करने के लिए विवरण एकत्र करने के लिए कर सकते हैं। यही कारण है कि अपने डिज़ाइन में एन्क्रिप्शन, हैशिंग और अन्य सुरक्षा तंत्रों पर विचार करना महत्वपूर्ण है ताकि यह सुनिश्चित किया जा सके कि संभावित हमलावर से एकत्र की गई जानकारी तक पहुँच की अनुमति नहीं होगी। क्लाइंट-सर्वर सुरक्षा डिजाइन की एक अन्य प्रमुख विशेषता अच्छी कोडिंग प्रथाएं हैं। उदाहरण के लिए, एक ज्ञात सॉफ्टवेयर डिजाइन संरचना का पालन करना, जैसे कि ग्राहक और दलाल, एक ठोस नींव के साथ एक अच्छी तरह से निर्मित संरचना को डिजाइन करने में मदद कर सकते हैं। इसके अलावा, यदि सॉफ्टवेयर को भविष्य में संशोधित किया जाना है, तो यह और भी महत्वपूर्ण है कि यह क्लाइंट और सर्वर के बीच अलगाव की तार्किक नींव का पालन करे। ऐसा इसलिए है क्योंकि यदि कोई प्रोग्रामर आता है और स्पष्ट रूप से प्रोग्राम की गतिशीलता को नहीं समझ सकता है, तो वे कुछ ऐसा जोड़ या बदल सकते हैं जो एक सुरक्षा दोष जोड़ सकता है। सर्वोत्तम डिजाइन के साथ भी, यह हमेशा एक संभावना है, लेकिन डिजाइन का मानकीकरण जितना बेहतर होगा, ऐसा होने की संभावना उतनी ही कम होगी। कंप्यूटर सुरक्षा साइबर सुरक्षा मानकों को भी देखें अस्पष्टता सॉफ्टवेयर सुरक्षा आश्वासन संदर्भों के माध्यम से डिफ़ॉल्ट रूप से सुरक्षा के कई स्वतंत्र स्तरों को सख्त करना लिनक्स और यूनिक्स के लिए सुरक्षित प्रोग्रामिंग और यूनिक्स हाउटो सुरक्षित यूनिक्स प्रोग्रामिंग अक्सर पूछे जाने वाले प्रश्न शीर्ष 10 सुरक्षित कोडिंग अभ्यास डिजाइन सिद्धांतों द्वारा सुरक्षा सॉफ्टवेयर गुणवत्ता लेख उदाहरण सी कोड सॉफ्टवेयर विकास दर्शन सॉफ्टवेयर विकास प्रक्रिया कंप्यूटर सुरक्षा प्रक्रियाएँ