GitHub रिपॉजिटरी को दुर्भावनापूर्ण तरीके से संरक्षित करना

मोज़िला गीथब पर अपने रिपॉजिटरी को दुर्भावनापूर्ण परिवर्तनों से बचाने की कोशिश कर रहा है। जैसा कि हाल ही में जेंटू की घटना से पता चला है, ऐसे हमले वास्तविक हैं।


मोज़िला ने मूल रूप से GitHub का उपयोग एक बैकअप होस्टिंग के रूप में किया था। जेंटू की तरह, मूल रिपॉजिटरी को अपने स्वयं के बुनियादी ढांचे पर संग्रहीत किया गया था। हालाँकि अधिकांश फ़ायरफ़ॉक्स कोड अभी भी अपने स्वयं के बुनियादी ढांचे के साथ वितरित किए गए हैं, कई परियोजनाएं केवल GitHub पर मौजूद हैं। कुछ केवल प्रयोग हैं, जबकि अन्य उत्पादन में उपयोग किए जाते हैं (जैसे फ़ायरफ़ॉक्स खाते )। ऐसे "संवेदनशील" रिपॉजिटरी को दुर्भावनापूर्ण संपादन से संरक्षित करने की आवश्यकता होती है, जबकि सामान्य लोगों के लिए यह जटिल नहीं होता।

एक समझौता किए गए भंडार से कोड को वितरित करने (या तैनात करने) के खिलाफ वास्तविक चरणों का वर्णन यहां किया गया है। हम अनुभव और कुछ ऑडिट टूल साझा करते हैं। ऐसी सुरक्षा लगभग GitHub में सामान्य वर्कफ़्लो के साथ हस्तक्षेप नहीं करती है।

यहां हम इस साइट के अनूठे तंत्र के माध्यम से एक GitHub खाते को हैक करने के जोखिम पर विचार करते हैं। जैसा कि जेंटू केस और अन्य घटनाओं ने दिखाया है, एक हैक की स्थिति में, उपयोगकर्ता के पास पहुंचने वाले सभी कोड से समझौता किया जाता है।

समस्या का सार


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

गोपनीय सूचनाओं के साथ अतिरिक्त अनुमतियाँ खतरे का भंडार है, जबकि रिपॉजिटरी के व्यवस्थापक को कुछ भी नहीं दिखता है। सबसे अच्छी बात यह है कि वह इस तथ्य के बाद दुर्भावनापूर्ण नोटिस को देख सकता है। इस तरह की दुर्भावनापूर्ण प्रतिबद्धताओं को रोकने या चिह्नित करने के लिए न तो GitHub और Git को कॉन्फ़िगर किया जा सकता है। केवल बाहरी निगरानी।

कार्यान्वयन


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

संगठनों के लिए सिफारिशें


  • सभी कर्मचारियों के लिए अनिवार्य 2FA।
  • उच्च अनुमतियों वाले सभी या कम से कम उपयोगकर्ताओं को:
    • संगठन या व्यवस्थापक को संपर्क (ईमेल, IM) प्रदान करें (GitHub आपको गोपनीयता के लिए संपर्क जानकारी छिपाने की अनुमति देता है)।
    • अपने खाते के संभावित समझौते (उदाहरण के लिए, लैपटॉप की चोरी के बारे में) के बारे में संगठन या प्रशासन को सूचित करना सुनिश्चित करें।

रिपोजिटरी के लिए दिशानिर्देश


  • महत्वपूर्ण रिपॉजिटरी को केवल एक संगठन में होस्ट किया जाना चाहिए जो उपरोक्त सिफारिशों का पालन करता है।
  • उत्पादन शाखाओं को परिभाषित और कॉन्फ़िगर करें:
    • बान को धक्का देने पर मजबूर किया।
    • उपयोगकर्ताओं की एक छोटी संख्या के लिए प्रतिबद्ध करने की अनुमति।
    • इन प्रतिबंधों को व्यवस्थापक और मालिकों पर भी लागू करें।
    • पहले से ज्ञात GPG कुंजी के साथ सभी कमिट पर हस्ताक्षर करें।

वर्कफ़्लो अनुशंसाएँ


  • ऑडिट के योग्य तैनाती, रिलीज़ और अन्य घटनाओं को पहले से ज्ञात GPG कुंजी के साथ हस्ताक्षरित टैग के साथ नोट किया जाना चाहिए।
  • सभी तैनाती और रिलीज सही चाबियों के लिए सभी हस्ताक्षरित कमिट और टैग की ऑडिट के बाद ही जारी की जानी चाहिए।

इन सुरक्षा उपायों के कार्यान्वयन में कुछ लागतें शामिल हैं, विशेष रूप से कमिट्स पर हस्ताक्षर करने के संबंध में। हमने ऑडिटिंग ऑडिटिंग के लिए उपकरण विकसित किए हैं और ऑडिटिंग के लिए टूल जारी करने की योजना बनाई है। वे सभी हमारे भंडार में हैं



यहाँ एक ऑडिट उदाहरण है। सबसे पहले, हमें octo_org संगठन के लिए डेटा की एक स्थानीय प्रतिलिपि octo_org है, और फिर प्रत्येक रिपॉजिटरी के लिए एक रिपोर्ट संकलित की जाती है:

 $ ./get_branch_protections.py octo_org 2018-07-06 13:52:40,584 INFO: Running as ms_octo_cat 2018-07-06 13:52:40,854 INFO: Gathering branch protection data. (calls remaining 4992). 2018-07-06 13:52:41,117 INFO: Starting on org octo_org. (calls remaining 4992). 2018-07-06 13:52:59,116 INFO: Finished gathering branch protection data (calls remaining 4947). 

अब स्थानीय रूप से कैश्ड डेटा से आप कोई भी रिपोर्ट तैयार कर सकते हैं। उदाहरण के लिए, एक रिपोर्ट उपरोक्त सिफारिशों का अनुपालन दिखाती है:

 $ ./report_branch_status.py --header octo_org.db.json name,protected,restricted,enforcement,signed,team_used octo_org/react-starter,True,False,False,False,False octo_org/node-starter,False,False,False,False,False 

जैसा कि आप देख सकते हैं, केवल octo_org/react-starter में उत्पादन शाखा पर मजबूर धक्का के खिलाफ सुरक्षा शामिल थी। परिणाम एक स्प्रेडशीट में आसानी से सम्मिलित करने के लिए CSV प्रारूप में है।

आप कैसे मदद कर सकते हैं


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

Source: https://habr.com/ru/post/hi423321/


All Articles