सच कहूँ तो हम आपके कोडबेस के माध्यम से नहीं जाने की कोशिश करते हैं, हम हमारे लिए ऐसा करने के लिए उपकरण लिखने की कोशिश करते हैं।
सबसे पहले, सिद्धांत। सुरक्षा एक सॉफ्टवेयर प्रणाली की आवश्यकता है, इसलिए अन्य आवश्यकताओं (कार्यक्षमता, प्रयोज्य, पहुंच, प्रदर्शन आदि) की तरह यह सॉफ्टवेयर इंजीनियरिंग वर्कफ़्लो के हर चरण में आवश्यकताओं को इकट्ठा करने से लेकर तैनाती और रखरखाव तक माना जाना चाहिए। वास्तव में, यह संभव है, और सॉफ्टवेयर प्रोजेक्ट टीमों को ऐसा करने में मदद करने के लिए मार्गदर्शन मौजूद है। भले ही मैं मुख्य रूप से आईओएस डेवलपर्स के साथ काम करता हूं, लेकिन "सुरक्षित विकास जीवनचक्र" का मेरा पसंदीदा विवरण Microsoft प्रेस से है ।
इस मॉडल में, एप्लिकेशन सुरक्षा तब शुरू होती है जब हम अपने उपयोगकर्ताओं से आवश्यकताओं को पूरा करने का प्रयास कर रहे होते हैं। हमें उनकी सुरक्षा और गोपनीयता संबंधी चिंताओं का पता लगाने की आवश्यकता है, जो आसान नहीं है क्योंकि हम विशेषज्ञ हैं, उपयोगकर्ता नहीं हैं, और जहां वे अपनी सुरक्षा आवश्यकताओं को समझते हैं, उन्हें व्यक्त करना मुश्किल हो सकता है। हमें यह भी पता लगाने की आवश्यकता है कि तैनाती में सॉफ़्टवेयर को किन जोखिमों से अवगत कराया जाएगा, और जोखिम का कौन सा स्तर स्वीकार्य है।
हम उन आवश्यकताओं को पूरा करने के साथ हमारे आवेदन को डिजाइन करते हैं। हम उन आवश्यकताओं को पूरा करने के लिए, और कोड-स्तरीय सुरक्षा गलतियों से जुड़े अतिरिक्त जोखिमों से बचने के लिए एक आंख के साथ कोड लिखते हैं। हम यह सुनिश्चित करने के लिए सॉफ़्टवेयर का परीक्षण करते हैं कि हमारी सुरक्षा का मॉडल हमारे द्वारा निर्मित वास्तव में संगत है, फिर हम सॉफ़्टवेयर को उस तरीके से परिनियोजित करते हैं जो उस चीज़ से डिज़ाइन किए जाने पर पर्यावरण के बारे में की गई मान्यताओं से मेल खाता है। अंत में, हम समर्थन और रखरखाव प्रदान करते हैं जो उपयोगकर्ता को उनकी सुरक्षा आवश्यकताओं के अनुरूप सॉफ़्टवेयर को संचालित करने में मदद करता है, और जो उन्हें (और हमें) प्रस्तुत जोखिमों में उपन्यास परिवर्तनों पर प्रतिक्रिया करने की अनुमति देता है।
ठीक है, सिद्धांत के लिए बहुत कुछ। व्यवहार में , ऐसे कारणों के लिए, जिन्हें गीकोनोमिक्स में बहुत अच्छी तरह से (एक गैर-तकनीकी फैशन में) समझाया गया है और जो मुख्य रूप से इस तरह से हैं क्योंकि सॉफ्टवेयर कंपनियां प्रेरित होती हैं, उपरोक्त अधिकांश सामान ऐसा नहीं होता है। इसके बजाय, हमें यह मिलता है। डेवलपर्स करेंगे:
- जब वे अनुबंध के लिए बोली लगा रहे होते हैं, तो यह दिखाने के लिए कि वे "सुरक्षा" प्राप्त करते हैं, एक सुरक्षा व्यक्ति या गैल को उपस्थित करें।
- सॉफ्टवेयर लिखें।
- रिलीज से पहले सॉफ्टवेयर को मान्य करने के लिए एक सुरक्षा आदमी या लड़की को किराए पर लें, चरण 2 में उत्पन्न हुई कई समस्याओं को ठीक करना।
- तैनाती के बाद बाकी सब कुछ पैच करें।
तो क्या अधिकांश ऐप सुरक्षा लोग वास्तव में कर रहे हैं , जैसा कि आप कहते हैं, बग ढूंढना। यह वास्तव में एक गौरवशाली कोड समीक्षा है, लेकिन यह उन लोगों द्वारा किए गए एक अत्यधिक focussed कोड की समीक्षा है जो इस समीक्षा के बग के प्रकार के विशेषज्ञ हैं, इसलिए ऐसा करने में बाहरी सहायता प्राप्त करने में अभी भी मूल्य है। टेटिंग का यह एक सामान्य नियम है, निश्चित रूप से: हमेशा किसी और को परखने के लिए मिलता है जो इस चीज को बनाने में शामिल नहीं था।
यदि हम उपरोक्त को सच मानते हैं तो यह निम्नानुसार है कि क्रय निर्णय लेने वाले लोगों को "बहुत सारे कीड़े ढूंढता है" के साथ "सक्षम सुरक्षा आदमी" की बराबरी करने की संभावना है। जिन लोगों को उनके लिए काम करने के लिए कंप्यूटर मिलते हैं, वे उन लोगों की तुलना में अधिक बग पाएंगे, जो नहीं करते हैं, इसलिए निश्चित रूप से वे स्थैतिक विश्लेषण टूल पर बहुत अधिक भरोसा करते हैं और विशिष्ट ग्राहकों के लिए विशिष्ट मुद्दों के लिए कोडिंग की तुलना में टूल का विस्तार करने में अधिक समय बिताना होगा। फिर हम यह निष्कर्ष निकालते हैं कि कोड को पढ़ने के लिए एप्लिकेशन सुरक्षा लोगों को कोड पढ़ने के लिए उपकरण लिखने की अधिक संभावना है।
** चेतावनी: व्यक्तिगत राय और अटकलें क्या हैं **
यथार्थ टूट गया है। आप देखेंगे कि सॉफ़्टवेयर सुरक्षा का सिद्धांत सभी की पहचान करने और सॉफ़्टवेयर सिस्टम पर भरोसा करने के जोखिम के प्रति प्रतिक्रिया के बारे में था, जबकि अभ्यास संभव के रूप में कई बग खोजने के बारे में था। यकीन है, कि अभी भी जोखिम को कम करेगा, लेकिन केवल एक साइड-इफेक्ट के रूप में। खेल का बिंदु खेल को "जीतने" की तुलना में कम महत्वपूर्ण हो गया है, इसलिए इसे जीतने के लिए आसान बनाने के लिए नियमों को बदल दिया जाता है।
एक सॉफ्टवेयर डेवलपर के रूप में आप इसके बारे में क्या कर सकते हैं? खेल को उसके मूल नियमों से खेलो। अपनी टीम पर किसी को ढूंढें (अधिमानतः वास्तव में आपकी टीम पर, एक ठेकेदार के बजाय, ताकि वे एक त्वरित जीत के बजाय दीर्घकालिक परिणाम प्रदान करने के लिए प्रेरित हों) जो सुरक्षा के महत्व को समझते हैं और उनमें से बेज्जियस को प्रशिक्षित करते हैं। उस व्यक्ति को मेरे जवाब की शुरुआत में वर्णित एंड-टू-एंड सुरक्षा प्रदान करने में टीम को निर्देशित करने की जिम्मेदारी दें।
साथ ही, उस व्यक्ति को अधिकार का पालन करें । यदि कोई डिज़ाइन सुरक्षा आवश्यकताओं को व्यक्त नहीं करता है, तो उसे संशोधित किया जाना चाहिए। यदि कार्यान्वयन सुरक्षा आवश्यकताओं को पूरा नहीं करता है, तो इसे जारी नहीं किया जाना चाहिए । आपका सुरक्षा व्यक्ति निर्णय कॉल कर सकता है, लेकिन उस निर्णय पर कार्रवाई करने की अनुमति दी जानी चाहिए। मुझे एहसास हुआ कि यह सुरक्षाकर्मी की तरह लग सकता है कि "ओएमएफजी सुरक्षा सबसे महत्वपूर्ण चीज है", लेकिन इसका मतलब यह नहीं है। यदि आपका उत्पाद कार्यक्षमता, प्रयोज्य या प्रदर्शन आवश्यकताओं को पूरा नहीं करता है, तो आपको उस चीज़ को भी जारी नहीं करना चाहिए।
आप ऐसा क्यों करना चाहते हो? यह सस्ता होना चाहिए: हमने सभी को देखा है (और शायद एक सस्ते +10 प्रतिनिधि के लिए उद्धृत किया गया है) कोड पूर्ण तालिका जहां दोष अधिक महंगा हो जाते हैं बाद में आप उन्हें ठीक करते हैं? वैसे सुरक्षा दोष भी दोष हैं। मैं खेल की वास्तविक दुनिया के नियम हैं, उनमें से ज्यादातर रखरखाव में तय की गई आवश्यकताओं में समस्याएं हैं। क्या वह सस्ता है?
ठीक है, अब मैं भाड़े के लिए सुरक्षा बंदूक के रूप में क्या कर सकता हूं ? खैर यह पता चला है कि मैं संशोधित नियमों से भी खेलने से इनकार कर सकता हूं। मैं डेवलपर्स को बता सकता हूं कि यह जोखिम को कम करने के बारे में है, कि यह हर चरण में किया जा सकता है, और फिर मैं उन्हें ऐसा करने में मदद कर सकता हूं।