मैं अपने सर्वर पर मनमाने ढंग से (संभावित रूप से खतरनाक) बाइनरी निष्पादित करना चाहता हूं। इसलिए, मैंने "अन्य" मैनेम "मुख्य" प्रतीक का नाम बदलने के लिए objcopy
का उपयोग किया है ताकि मैं अपने छोटे मुख्य फ़ंक्शन में लिंक कर सकूं जो RLIMIT_CPU
के लिए उपयुक्त मान सेट करता है और 0_ध्वज को अन्य_मेन से कॉल करने से पहले ध्वजांकित करता है। मैं अब तक इस समाधान से काफी खुश हूं।SECCOMP: मॉलोक, रीलॉक और मुफ्त का अनुकरण कैसे करें?
समस्या अब यह है कि तीसरे पक्ष के प्रोग्राम कोड में मॉलोक को कुछ कॉल हो सकती हैं जो प्रोग्राम को तुरंत मार सकती हैं (एसआरबीके की अनुमति नहीं है)। इसलिए मैं SECCOMP
को सेट करने से पहले कुछ उचित आकार के सरणी (उदा। 20 एमबी) को पूर्व-आवंटित करना चाहता हूं जिसका उपयोग मॉलोक/रीलोक/कॉलोक/फ्री द्वारा किया जाना चाहिए। दुर्भाग्यवश, मुझे नहीं पता कि आखिरी चरण को कैसे संग्रहित किया जाए। क्या मुझे अपने सभी 4 कार्यों को अपने आप लागू करना है? मैं अपने स्वयं के कार्यों को stdlib में कैसे इंजेक्ट कर सकता हूं (उदाहरण के लिए, क्या होता है जब printf आंतरिक रूप से malloc कॉल करता है?)।
नाम बदलना वास्तविक काम है? मुझे आश्चर्य है कि ओएस एक छीन वाली बाइनरी के साथ क्या करता है। –
प्रतीकों का नामकरण ठीक काम करता है। objcopy वास्तव में शक्तिशाली लगता है। आपको स्पष्ट रूप से द्विआधारी को पट्टी करने की अनुमति नहीं है, लेकिन यह मेरे लिए कोई मुद्दा नहीं है, क्योंकि मैं अपने आप को द्विआधारी संकलित करता हूं। यह सिर्फ सी कोड है जो अविश्वसनीय है। – tux21b
क्या आप अपने ओएस की लाइब्रेरी की तुलना में अपने उपयोगकर्ताओं को एक अलग सी लाइब्रेरी (उदाहरण के लिए न्यूलिब) प्रदान कर सकते हैं? यदि ऐसा है, तो अपने स्वयं के 'sbrk' (जो आपके सैंडबॉक्स से बाहर नहीं निकल सकता है) लिखना बहुत आसान होगा और फिर malloc/realloc/calloc/free और दोस्तों सभी काम करेंगे। –