• मेमोरी सुरक्षा और 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 दोनों एक साथ हासिल की जा सकती हैं

अभी कोई टिप्पणी नहीं है.

अभी कोई टिप्पणी नहीं है.