1 पॉइंट द्वारा GN⁺ 2023-11-07 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • sudo को, जो privilege boundary बदलने के लिए इस्तेमाल होता है, Rust में दोबारा इम्प्लीमेंट किया गया sudo-rs अब अपने पहले stable version के रूप में जारी किया गया है
  • अनुमान है कि मूल sudo के सुरक्षा बग्स में लगभग एक-तिहाई मेमोरी मैनेजमेंट समस्याओं से जुड़े थे, और यही Rust री-राइट की मुख्य पृष्ठभूमि थी
  • sudo-rs ने कम इस्तेमाल होने वाली सुविधाओं को हटाकर attack surface कम किया है, और इसका test suite मूल sudo के बग खोजने में भी उपयोग हुआ
  • Wolfi Linux OS में पहले से sudo-rs शामिल है, और Chainguard का मानना है कि सुरक्षा-कोर टूल्स में सुधार पूरे उद्योग पर असर डाल सकता है
  • बाहरी security audit सितंबर 2023 में शुरू होने वाला है, और उसके बाद काम enterprise features पर केंद्रित Milestone 4 की ओर बढ़ेगा

Rust में दोबारा इम्प्लीमेंट किया गया sudo-rs

  • Prossimo ने sudo-rs का पहला stable release जारी किया
  • sudo-rs Linux पर user account और administrator account के बीच की privilege boundary पार करने के लिए आम तौर पर इस्तेमाल होने वाली sudo utility का Rust में दोबारा इम्प्लीमेंट किया गया प्रोजेक्ट है
  • sudo-rs प्रोजेक्ट का फोकस मूल sudo की तुलना में सुरक्षा बढ़ाने पर है
    • Rust का उपयोग करके memory safety सुनिश्चित की गई है
    • अनुमान है कि मूल sudo के सुरक्षा बग्स में लगभग एक-तिहाई मेमोरी मैनेजमेंट समस्याओं से जुड़े थे, और यही इसकी शुरुआत का आधार था
    • कम सामान्य रूप से इस्तेमाल होने वाली सुविधाओं को हटाकर attack surface कम किया गया
    • एक व्यापक test suite विकसित किया गया, और इस test ने मूल sudo के बग भी खोजे

अपनाने की स्थिति और अगले कदम

  • Wolfi Linux OS में पहले से sudo-rs शामिल है
  • Chainguard के CEO और co-founder Dan Lorenc का कहना है कि Wolfi बनाते समय memory safety सर्वोच्च प्राथमिकता थी, और sudo जैसे सुरक्षा-कोर टूल्स में सुधार पूरे उद्योग पर बड़ा प्रभाव डाल सकता है
  • sudo-rs को Tweede Golf और Ferrous Systems की संयुक्त टीम ने Prossimo के कॉन्ट्रैक्ट के तहत बनाया
  • प्रोजेक्ट की शुरुआत दिसंबर 2022 में हुई थी, और sudo-rs कोड के लिए बाहरी security audit सितंबर 2023 में शुरू होने वाला है
  • audit के बाद टीम work plan के Milestone 4 पर जाएगी, और यह चरण enterprise features पर केंद्रित है
  • मूल C-आधारित sudo utility को Todd C. Miller लंबे समय से मेंटेन करते आ रहे हैं, और उन्होंने sudo-rs इम्प्लीमेंटेशन पर भी सलाह दी है
  • NLnet Foundation ने sudo-rs audit के लिए फंडिंग दी, और Amazon Web Services ने इस काम तथा memory-safe software transition का समर्थन किया

1 टिप्पणियां

 
GN⁺ 2023-11-07
Hacker News की राय
  • sudo के मूल डेवलपर्स में से एक के तौर पर (https://en.wikipedia.org/wiki/Sudo), मैंने पिछले 43 वर्षों में इसे लगभग पूरी तरह दोबारा लिखे जाते और लगातार bug fixes होते देखा है
    UNIX commands में यह शायद सुरक्षा खामियों के लिए सबसे ज्यादा समीक्षा किए गए commands में से एक कहा जा सकता है, और जो खामियां मिलीं उन्हें ठीक किया जाता रहा है
    जिस tool को हजारों developers और security experts ने देखा-परखा है, उसे एक single development team पूरी तरह reimplement करे और एक-दो नए bugs भी न बनाए—इस पर मुझे संदेह है
    सोचता हूं कि क्या Rust भाषा में ऐसा कुछ है जो bugs आने की संभावना को जादुई तरीके से पूरी तरह खत्म कर देता है

    • sudo बनाने के काम के लिए आभारी ही होना पड़ेगा, और मुझे लगता है कि यह बहुत से लोगों के रोजमर्रा के इस्तेमाल में सचमुच अमूल्य tool है
      sudo-rs बनाने के नजरिए से हमने कभी मौजूदा काम को अमान्य करने की कोशिश नहीं की, और खासकर शुरुआत में हमें अच्छी तरह पता है कि हमारे implementation में भी bugs न हों, ऐसा नहीं होगा
      व्यक्तिगत रूप से Rust version बनाते समय मैं ऐसे क्षेत्र में काम कर पाया जिसे आम तौर पर छूना मुश्किल लगता, क्योंकि मुझे अपेक्षाकृत सुरक्षित C code लिखने पर बहुत भरोसा नहीं था
      कम से कम इस काम की वजह से हमने मौजूदा sudo में पहले ही कुछ bugs ढूंढ लिए हैं, और भले ही 43 साल से fixes होते रहे हों, जब तक आसपास का environment बदलता रहेगा, ऐसे software का पूरी तरह bug-free होना मुश्किल है
      जब तक हम साथ मिलकर काम करें और एक-दूसरे के काम और गलतियों से सीखें, थोड़ा सा alternative होना बुरा नहीं है
    • पिछले 43 वर्षों में चाहे जो हुआ हो, 2021 में Baron Samedit नाम की व्यापक रूप से exploit की जा सकने वाली memory corruption vulnerability मौजूद थी
    • advanced type systems, borrow checking और memory-safe languages निश्चित रूप से बहुत मदद करते हैं, लेकिन जाहिर है कि वे सभी bugs खत्म नहीं करते
      RiiR करते समय developer जो सबसे अच्छा कर सकता है, वह best practices अपनाना और पिछली गलतियों से सीखना है
      43 वर्षों में काफी प्रगति हुई है, और C string handling छोड़ देने भर से ही memory safety पर बात करने से पहले बहुत सारे bugs हट जाते हैं
      आज कोई security-focused sudo replacement बनाना चाहे तो सिर्फ C इस्तेमाल करके भी पहले से कहीं बेहतर कर सकता है, और OpenBSD project इसे काफी अच्छी तरह दिखाता है
      OpenBSD code जिन sharp edges से बचता है, उनमें से कई को language level पर हटा देने से शुरुआत फायदेमंद होगी, लेकिन फिर भी काफी सावधानी और अनुभव चाहिए, और programming language उसकी जगह नहीं ले सकती
      कम से कम इसे गंभीरता से review करने लायक तो है, लेकिन फिलहाल मुझे नहीं लगता कि इसे default के तौर पर distribute किया जाना चाहिए
    • मैं अनुभव को नकारना नहीं चाहता और उम्मीद करता हूं कि यह project निश्चित रूप से फिर से दर्दनाक सीखों से गुजरेगा, लेकिन यह भी अहम है कि classical physics को ठीक से समझने के लिए हमें Newton, Leibniz, Maxwell के जीवनभर के काम को जस का तस दोहराने की जरूरत नहीं होती
      अब यह high school curriculum में है, और उसे पास कर लें तो काफी अच्छा कर सकते हैं; थोड़ी और मेहनत से वे जो जीवनभर में कर पाए, उसे बहुत अच्छे से संभाल सकते हैं
      ऐसा इसलिए है क्योंकि हम दिग्गजों के कंधों पर खड़े हो सकते हैं, hindsight और बेहतर तकनीक/सीखने के तरीके पा चुके हैं, और उनकी सभी गलतियां दोहराने की जरूरत नहीं है
      अगर मूल developer आज के अनुभव और ज्ञान के साथ sudo को शून्य से फिर लिखे, तो बहुत कम समय में इसे ज्यादा साफ और सरल बनाने की संभावना बड़ी है
      इसका मतलब मौजूदा प्रयास और अनुभव को कमतर आंकना नहीं, बल्कि यह है कि उस अनुभव को कम समय में बेहतर चीज में बदलना असंभव नहीं है
    • memory safety के मामले में ऐसा है, और language का default रूप से सुरक्षित बनाना कहीं बेहतर है, लेकिन logical bugs के लिए वह कुछ नहीं करती
      हालांकि C में लिखे sudo या दूसरे tools को replace करते समय, null pointer या buffer misuse जैसी vulnerabilities आसानी से कुल vulnerabilities का 50% हो सकती हैं
  • मुझे लगता है कि इस project ने जो दो बातें सामने रखी हैं, वे Rust इस्तेमाल करने से भी ज्यादा अक्सर नजरअंदाज हो जाती हैं
    कम इस्तेमाल होने वाले features हटाकर attack surface घटाना, और एक व्यापक test suite विकसित करना जिसने मौजूदा sudo के bugs तक ढूंढ निकाले
    safety-critical code लिखते समय Rust में दोबारा लिखने से भी ज्यादा ये बातें महत्वपूर्ण हैं

    • उदाहरण के लिए, क्या मतलब यह है कि ये इस तरह की चीजों से भी ज्यादा महत्वपूर्ण हैं?
      Coq नाम के formal proof management system से prove करना: https://coq.inria.fr/
      असली उदाहरणों के लिए https://aws.amazon.com/security/provable-security/ देखें, और computer-aided verification (CAV) भी देखने लायक है
  • अगर मान लें कि इस project का लक्ष्य sudo को replace करना है, तो “कम इस्तेमाल होने वाले features को छोड़ना” यूँ ही नज़रअंदाज़ करना थोड़ा चिंताजनक है
    वे features कौन-से हैं, कितने कम इस्तेमाल होते हैं, और ऐसी configuration में जहाँ वे features इस्तेमाल होते हैं, यह किस तरह fail करता है—ये बातें अहम हैं
    सुधार: लगता है GitHub README में कुछ limitations संक्षेप में दी गई हैं, https://github.com/memorysafety/sudo-rs#differences-from-ori...

    • छूटे हुए features में से एक sudoedit या sudo -e है
      /etc के अंदर की files या ऐसी files edit करते समय जिन पर मेरे user को permission नहीं है, मैं इसे अक्सर इस्तेमाल करता हूँ। यह flag पहले file को ऐसी temporary location में copy करता है जहाँ मेरा user उसे edit कर सके, फिर text editor को sudo privileges के बिना मेरे user permissions से चलाता है
      editor $SUDO_EDITOR environment variable से तय होता है, और बंद करने के बाद केवल changes होने पर ही file को original permissions के साथ वापस copy करता है
      अच्छी बात यह है कि editor root user के तौर पर नहीं, बल्कि मेरे user के तौर पर चलता है, इसलिए मेरी user settings और plugins load होते हैं
    • एक feature जिसे गायब के रूप में नहीं लिखा गया है, वह make me a sandwich run करने की क्षमता है (https://github.com/sudo-project/sudo/blob/main/Makefile.in#L...)
    • बड़े environments में इस्तेमाल होने वाला एक feature, जो sudo-rs roadmap में भी नहीं है और implement भी नहीं हुआ, LDAP support है
      सामान्य sudo में central LDAP settings से पूरे network के sudo permissions manage किए जा सकते हैं, और time, host, user, command से सीमित rules भी centrally बनाए जा सकते हैं
      किसी साधारण syntax error से पूरी configuration उड़ जाने की संभावना के बिना, इस case में केवल वही rule ignore होता है
    • systemd में transition का दौर भी हमने देखा है, इसलिए system administrators इतना तो manage कर ही लेंगे
      बेहतरीन technical documentation भी ज़रूर होगी, और यह एक promotional release है, इसलिए missing features की list ढूँढने की जगह यह नहीं है, ऐसा लगता है
    • सबसे बुनियादी UNIX tools में से एक में बहुत ज़्यादा features होना अपने-आप में कहीं बड़ा red flag है
  • Apache-2.0+MIT और GPL-2.0 के फर्क को देखें तो memory-safe su/sudo-rs तो मिल सकता है, लेकिन जो इसे binary form में distribute करता है, उस पर build में इस्तेमाल source code और संभावित modifications तक publish करने की obligation नहीं है

    • मैं भी यही comment लिखना चाहता था
      GPL tools को MIT/Apache license वाली Rust rewrite से हटाने की दिशा कहीं आगे चलकर proprietary Linux में न बदल जाए, इसे लेकर मुझे बड़ी चिंता है, लेकिन original sudo GPL नहीं है
      यह ISC/MIT-style license है [1]
      1. https://www.sudo.ws/about/license/
    • ऐसे core components में GPL से बाहर जाना बहुत खराब idea है
      वजह वही है जो ऊपर कही गई, और इसी issue को highlight करने के लिए यह छोड़ा है
    • Sudo GPL नहीं, बल्कि ISC family[0] का बहुत permissive license है
      su सच में GPL लगता है
      [0]: https://www.sudo.ws/about/license/
    • क्या वह सच में खराब है?
      आपके पास ऐसी distribution न इस्तेमाल करने की freedom है
      security के लिहाज से malicious actor binary के रूप में distribute की गई चीज़ से अलग source code भी दिखा सकता है
      GPL हो या नहीं, बात वही है
    • अच्छा हो या बुरा, GPL usage घट रहा है, और Linux kernel का भविष्य भी guaranteed नहीं है
      IoT के लिए free और open source UNIX-like operating systems के क्षेत्र में Linux Foundation द्वारा sponsored ZephyrOS सहित सभी candidates Apache, MIT, BSD licenses का mix इस्तेमाल कर रहे हैं
      GPL generation के खत्म होने के बाद, बड़ी companies को ज्यादा attractive license वाला UNIX-like operating system Linux kernel के लिए एक और maintainer alternative के रूप में जल्द ही उभर आएगा
  • इसे Rust implementation GNU Coreutils के साथ जोड़ी गई Debian derivative में देखना दिलचस्प होगा
    memory safety और performance में बड़ा फायदा हो सकता है
    [1] https://github.com/uutils/coreutils

    • सोच रहा हूँ कि Rust-based UNIX user space तक कितना समय बाकी है
      कम से कम C compiler implement करने की जरूरत तो नहीं होगी
  • क्या यह गंदगी पर polish करने जैसा है?
    बेहतर reimplementation बेशक अच्छी बात है, लेकिन sudo के अजीब features पढ़कर हैरानी नहीं हुई?
    सामान्य दिखने वाले हिस्से भी बहुत अजीब और subtle हैं, इसलिए उतने ही vulnerable हैं
    sudo को “deeply” इस्तेमाल करने वालों को सोचना चाहिए कि क्या कोई दूसरा तरीका है

  • अच्छा होगा अगर कोई validation/check flag या tool हो जो current sudo configuration को test-run करके वे हिस्से print कर दे जिन्हें sudo-rs support नहीं करता
    ऐसे projects में portability helper होना चाहिए ताकि transition smooth हो

  • अगर मुझे सही याद है, हाल की sudo vulnerabilities सभी logic errors थीं, memory safety issues नहीं
    rewrite करना अच्छा है, लेकिन यह pretend नहीं करना चाहिए कि किसी चीज़ के काम करने के तरीके को गलत समझने या बस साधारण गलती से नए bugs आ ही नहीं सकते

    • 2021: https://nvd.nist.gov/vuln/detail/CVE-2021-3156
      2019: https://nvd.nist.gov/vuln/detail/CVE-2019-18634
    • ऐसा pretend कौन कर रहा है?
      memory safety को लेकर बहुत claims दिखते हैं, लेकिन यह project यह कहता हुआ नहीं दिखता कि दूसरे types के bugs पक्का खत्म हो जाते हैं
    • उसी तरह existing sudo में भी नए memory bugs आ सकते हैं
      static checks से attack surface घटाना long term में बेहतर deal लगता है
  • doas वही काम करने वाला कहीं ज्यादा simple tool है
    यह ज्यादा इस्तेमाल क्यों नहीं होता, यह मुझे ठीक से समझ नहीं आता

  • doas 43184 बाइट का है, और मुझे जो कुछ चाहिए वह सब कर देता है
    वह sudo exploit एक चेतावनी थी
    अगर आपने अभी तक switch नहीं किया है, तो opendoas (Debian package) एक बार आज़माने लायक है

    • क्या आप Linux पर doas इस्तेमाल कर रहे हैं?
      यह tty pushback attack से सुरक्षित नहीं है: https://github.com/Duncaen/OpenDoas/issues/106
      यह काफ़ी गंभीर unresolved security issue है