मेमोरी-सुरक्षित sudo इम्प्लीमेंटेशन sudo-rs का पहला स्थिर संस्करण जारी
(memorysafety.org)- 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 टिप्पणियां
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-rs बनाने के नजरिए से हमने कभी मौजूदा काम को अमान्य करने की कोशिश नहीं की, और खासकर शुरुआत में हमें अच्छी तरह पता है कि हमारे implementation में भी bugs न हों, ऐसा नहीं होगा
व्यक्तिगत रूप से Rust version बनाते समय मैं ऐसे क्षेत्र में काम कर पाया जिसे आम तौर पर छूना मुश्किल लगता, क्योंकि मुझे अपेक्षाकृत सुरक्षित C code लिखने पर बहुत भरोसा नहीं था
कम से कम इस काम की वजह से हमने मौजूदा sudo में पहले ही कुछ bugs ढूंढ लिए हैं, और भले ही 43 साल से fixes होते रहे हों, जब तक आसपास का environment बदलता रहेगा, ऐसे software का पूरी तरह bug-free होना मुश्किल है
जब तक हम साथ मिलकर काम करें और एक-दूसरे के काम और गलतियों से सीखें, थोड़ा सा alternative होना बुरा नहीं है
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 किया जाना चाहिए
अब यह high school curriculum में है, और उसे पास कर लें तो काफी अच्छा कर सकते हैं; थोड़ी और मेहनत से वे जो जीवनभर में कर पाए, उसे बहुत अच्छे से संभाल सकते हैं
ऐसा इसलिए है क्योंकि हम दिग्गजों के कंधों पर खड़े हो सकते हैं, hindsight और बेहतर तकनीक/सीखने के तरीके पा चुके हैं, और उनकी सभी गलतियां दोहराने की जरूरत नहीं है
अगर मूल developer आज के अनुभव और ज्ञान के साथ sudo को शून्य से फिर लिखे, तो बहुत कम समय में इसे ज्यादा साफ और सरल बनाने की संभावना बड़ी है
इसका मतलब मौजूदा प्रयास और अनुभव को कमतर आंकना नहीं, बल्कि यह है कि उस अनुभव को कम समय में बेहतर चीज में बदलना असंभव नहीं है
हालांकि 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...
sudoeditयाsudo -eहै/etc के अंदर की files या ऐसी files edit करते समय जिन पर मेरे user को permission नहीं है, मैं इसे अक्सर इस्तेमाल करता हूँ। यह flag पहले file को ऐसी temporary location में copy करता है जहाँ मेरा user उसे edit कर सके, फिर text editor को sudo privileges के बिना मेरे user permissions से चलाता है
editor
$SUDO_EDITORenvironment variable से तय होता है, और बंद करने के बाद केवल changes होने पर ही file को original permissions के साथ वापस copy करता हैअच्छी बात यह है कि editor root user के तौर पर नहीं, बल्कि मेरे user के तौर पर चलता है, इसलिए मेरी user settings और plugins load होते हैं
make me a sandwichrun करने की क्षमता है (https://github.com/sudo-project/sudo/blob/main/Makefile.in#L...)सामान्य sudo में central LDAP settings से पूरे network के sudo permissions manage किए जा सकते हैं, और time, host, user, command से सीमित rules भी centrally बनाए जा सकते हैं
किसी साधारण syntax error से पूरी configuration उड़ जाने की संभावना के बिना, इस case में केवल वही rule ignore होता है
बेहतरीन technical documentation भी ज़रूर होगी, और यह एक promotional release है, इसलिए missing features की list ढूँढने की जगह यह नहीं है, ऐसा लगता है
Apache-2.0+MITऔरGPL-2.0के फर्क को देखें तो memory-safe su/sudo-rs तो मिल सकता है, लेकिन जो इसे binary form में distribute करता है, उस पर build में इस्तेमाल source code और संभावित modifications तक publish करने की obligation नहीं हैGPL tools को MIT/Apache license वाली Rust rewrite से हटाने की दिशा कहीं आगे चलकर proprietary Linux में न बदल जाए, इसे लेकर मुझे बड़ी चिंता है, लेकिन original sudo GPL नहीं है
यह ISC/MIT-style license है [1]
वजह वही है जो ऊपर कही गई, और इसी issue को highlight करने के लिए यह छोड़ा है
su सच में GPL लगता है
[0]: https://www.sudo.ws/about/license/
आपके पास ऐसी distribution न इस्तेमाल करने की freedom है
security के लिहाज से malicious actor binary के रूप में distribute की गई चीज़ से अलग source code भी दिखा सकता है
GPL हो या नहीं, बात वही है
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
कम से कम 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 आ ही नहीं सकते
2019: https://nvd.nist.gov/vuln/detail/CVE-2019-18634
memory safety को लेकर बहुत claims दिखते हैं, लेकिन यह project यह कहता हुआ नहीं दिखता कि दूसरे types के bugs पक्का खत्म हो जाते हैं
static checks से attack surface घटाना long term में बेहतर deal लगता है
doas वही काम करने वाला कहीं ज्यादा simple tool है
यह ज्यादा इस्तेमाल क्यों नहीं होता, यह मुझे ठीक से समझ नहीं आता
doas 43184 बाइट का है, और मुझे जो कुछ चाहिए वह सब कर देता है
वह sudo exploit एक चेतावनी थी
अगर आपने अभी तक switch नहीं किया है, तो opendoas (Debian package) एक बार आज़माने लायक है
यह tty pushback attack से सुरक्षित नहीं है: https://github.com/Duncaen/OpenDoas/issues/106
यह काफ़ी गंभीर unresolved security issue है