- मेमोरी सुरक्षा और sandboxing एक-दूसरे से स्वतंत्र security concepts हैं, और मज़बूत defense system के लिए दोनों का साथ होना ज़रूरी है
- Fil-C, C/C++ का memory-safe implementation है, जो Linux system call स्तर तक सुरक्षा सुनिश्चित करता है और OpenSSH जैसे system components में भी इस्तेमाल किया जा सकता है
- OpenSSH के seccomp-BPF आधारित sandbox को Fil-C पर port करने की प्रक्रिया में, thread creation limits और seccomp filter adjustments मुख्य चुनौतियाँ थीं
- Fil-C runtime के background thread management के लिए
zlock_runtime_threads() API जोड़ी गई, जो sandbox के भीतर thread behavior को नियंत्रित करती है
- Fil-C,
prctl calls को सभी runtime threads पर synchronized तरीके से लागू करता है, ताकि no_new_privs और seccomp filters पूरे process पर एकसमान रूप से लागू हों
मेमोरी सुरक्षा और sandboxing का संबंध
- मेमोरी सुरक्षा और sandboxing अलग-अलग security layers हैं; इनमें से केवल एक होने पर पूर्ण सुरक्षा नहीं मिलती
- memory-safe लेकिन sandboxed नहीं होने का उदाहरण: ऐसा Java program जो user input के जरिए files overwrite कर सकता हो
- sandboxed लेकिन memory-safe नहीं होने का उदाहरण: assembly में लिखा ऐसा program जिसकी privileges सीमित हों
- वास्तविक sandbox में broker process के साथ communication की अनुमति जैसी संरचनात्मक कमज़ोरियाँ मौजूद होती हैं
- इसलिए मेमोरी सुरक्षा और sandboxing को साथ में लागू करना सबसे अच्छा defense approach है
Fil-C और OpenSSH sandbox का संयोजन
- Fil-C, C/C++ का memory-safe implementation है, जो Linux system call स्तर पर सुरक्षा बनाए रखता है
- Fil-C runtime,
init, udevd जैसे low-level system components में भी चल सकता है
- OpenSSH, Fil-C पर सामान्य रूप से चलता है और seccomp-BPF sandbox का उपयोग करता है
- Linux पर OpenSSH निम्न tools से sandbox बनाता है
chroot से filesystem access सीमित करना
sshd user/group के रूप में चलाना
setrlimit से file opening और process creation सीमित करना
- seccomp-BPF filter से केवल allowed system calls की अनुमति देना
- Fil-C,
chroot और user switching को मूल रूप से support करता है, लेकिन setrlimit और seccomp-BPF runtime behavior से टकरा सकते हैं, इसलिए अतिरिक्त adjustments की ज़रूरत पड़ती है
Fil-C runtime का thread control
- Fil-C runtime, garbage collection के लिए background threads का उपयोग करता है और ज़रूरत पड़ने पर उन्हें अपने-आप रोकता और फिर शुरू करता है
- OpenSSH का
setrlimit sandbox नए processes के निर्माण को रोकने के लिए बनाया गया है, इसलिए runtime का thread creation इससे टकरा सकता है
- इसे हल करने के लिए
<stdfil.h> में zlock_runtime_threads() API जोड़ी गई
- runtime ज़रूरी threads को तुरंत बनाता है, और उसके बाद automatic shutdown को disable कर देता है
- OpenSSH के
ssh_sandbox_child function में इसे setrlimit या seccomp-BPF call से पहले चलाया जाता है
OpenSSH seccomp filter adjustments
zlock_runtime_threads() लागू करने के बाद sandbox की अधिकांश functionality पहले जैसी काम करती रही
- seccomp filter में निम्न बदलाव किए गए
- violation होने पर
SECCOMP_RET_KILL_PROCESS सेट किया गया ताकि Fil-C background threads भी साथ में terminate हों
MAP_NORESERVE को allow list में जोड़ा गया, ताकि Fil-C memory allocator का उपयोग हो सके
sched_yield call की अनुमति दी गई, क्योंकि यह Fil-C के lock implementation में इस्तेमाल होता है
- Fil-C के synchronization के लिए
futex call पहले से allowed था, इसलिए अतिरिक्त बदलाव की ज़रूरत नहीं पड़ी
Fil-C का prctl implementation तरीका
- OpenSSH, seccomp filter install करते समय दो तरह के
prctl calls का उपयोग करता है
PR_SET_NO_NEW_PRIVS से अतिरिक्त privileges हासिल करने पर रोक
PR_SET_SECCOMP, SECCOMP_MODE_FILTER से filter को सक्रिय करना
- समस्या यह है कि
prctl सिर्फ calling thread पर लागू होता है, इसलिए Fil-C के दूसरे runtime threads के बिना filter बचे रहने का जोखिम था
- Fil-C, इसे रोकने के लिए
filc_runtime_threads_handshake() API के जरिए सभी runtime threads पर synchronized application करता है
- यह सुनिश्चित करता है कि हर thread वही
prctl call चलाए
- अगर कई user threads मौजूद हों, तो सुरक्षा मज़बूत करने के लिए Fil-C safety error उत्पन्न की जाती है
निष्कर्ष
- मेमोरी सुरक्षा और sandboxing का संयोजन सबसे शक्तिशाली security combination है
- Fil-C, OpenSSH के seccomp-आधारित sandbox को पूरी तरह integrate करते हुए भी protection level घटाए बिना memory safety बनाए रखता है
- Linux environment में Fil-C का उपयोग करके system-level security और language-level safety दोनों एक साथ हासिल की जा सकती हैं
अभी कोई टिप्पणी नहीं है.