
foxcage — Updated!
रूटलेस पॉडमैन कंटेनर में फ़ायरफ़ॉक्स चलाएँ, जिसमें कैपेबिलिटीज़ हटाई गई हों, नेटवर्किंग आइसोलेटेड हो और स्टोरेज एफ़ेमरल हो, ताकि सैंडबॉक्स एस्केप को सीमित किया जा सके और होस्ट से छेड़छाड़ को रोका जा सके।
foxcage
सुरक्षा अलगाव के लिए Firefox को रूटलेस Podman कंटेनर में चलाएँ। आपका ब्राउज़र लगभग बिना किसी Linux क्षमता के, अपने स्वयं के उपयोगकर्ता और नेटवर्क नेमस्पेस में, होस्ट से अलग चलता है — जबकि पूर्ण GPU त्वरण, ऑडियो और DRM समर्थन अभी भी बरकरार रहता है।
foxcage क्यों?
Firefox में पहले से ही एक मल्टी-प्रोसेस सैंडबॉक्स है जो Linux नेमस्पेस और seccomp-bpf का उपयोग करके वेब कंटेंट रेंडरर्स को अलग करता है। अधिकांश खतरों के लिए, यह प्रभावी है। foxcage एक दूसरी दीवार जोड़ता है: यदि कोई हमलावर Firefox के सैंडबॉक्स से बचने वाली कमजोरी का फायदा उठाता है (जो होता है — इसके लिए CVEs मौजूद हैं), तो वे आपके पूर्ण उपयोगकर्ता सत्र के बजाय एक लॉक-डाउन कंटेनर के अंदर पहुँचते हैं।
foxcage किससे सुरक्षा करता है
- पोस्ट-एक्सप्लॉइट फ़ाइल एक्सेस। बेयर Firefox पर सैंडबॉक्स एस्केप आपके उपयोगकर्ता द्वारा पढ़ी जा सकने वाली हर चीज़ तक पहुँच देता है:
~/.ssh,~/.gnupg, अन्य ब्राउज़रों के ब्राउज़र प्रोफाइल, पासवर्ड मैनेजर डेटाबेस, दस्तावेज़, सोर्स कोड। foxcage में, हमलावर केवल वही देखता है जो आपने स्पष्ट रूप से माउंट किया है। - डिस्क पर ट्रैकिंग अवशेष।
@tmpअस्थायी केज विंडो बंद होने के बाद डिस्क पर शून्य निशान छोड़ता है — जिसमें एक्सटेंशन, HSTS स्थिति, TLS सत्र कैश और DNS कैश शामिल हैं जिन्हें Firefox का प्राइवेट ब्राउज़िंग अभी भी बनाए रखता है। कई@tmpकेज बिना एक-दूसरे में हस्तक्षेप किए समवर्ती रूप से चलते हैं। - स्थिरता (Persistence)। बेयर Firefox पर, मैलवेयर रिबूट के बाद बचने के लिए
~/.config/autostart,~/.bashrc, cron या कहीं और लिख सकता है। foxcage का अस्थायी कंटेनर (--rm) का मतलब है कि जब तक आपने इसे बाइंड-माउंट नहीं किया है, कुछ भी स्थायी नहीं रहता। - पार्श्व नेटवर्क गतिविधि। डिफ़ॉल्ट रूप से, कंटेनर
localhostपर सेवाओं की जाँच नहीं कर सकता। बेयर Firefox पर, सैंडबॉक्स एस्केप के पास पूर्ण नेटवर्क एक्सेस होता है। (यदि किसी केज को localhost एक्सेस की आवश्यकता हो, जैसे स्थानीय विकास के लिए, तो[network] mode = "host"का उपयोग करें — लेकिन "नेटवर्किंग" के अंतर्गत चेतावनी देखें: होस्ट मोड होस्ट के अमूर्त Unix सॉकेट्स को भी उजागर करता है।) - विशेषाधिकार वृद्धि। कंटेनर
CAP_SYS_CHROOTको छोड़कर सभी Linux क्षमताओं को हटा देता है और नए विशेषाधिकार अधिग्रहण को रोकता है। Setuid बाइनरी, अस्पष्ट syscalls के माध्यम से कर्नेल एक्सप्लॉइट और समान वृद्धि पथ काट दिए जाते हैं।
foxcage किससे सुरक्षा नहीं करता
- ब्राउज़र-स्तरीय हमले। फ़िशिंग, दुर्भावनापूर्ण एक्सटेंशन और वह सब कुछ जो Firefox की सामान्य कार्यक्षमता के भीतर संचालित होता है, अप्रभावित रहता है — foxcage कंटेनर को होस्ट से अलग करता है, उपयोगकर्ता को ब्राउज़र से नहीं।
- बाइंड-माउंटेड निर्देशिकाएँ। आप जो कुछ भी माउंट करते हैं (
profile,downloads_dir, अतिरिक्त बाइंड माउंट) एक समझौता किए गए ब्राउज़र के लिए पूरी तरह से सुलभ है। यदि आप होस्ट प्रोफाइल निर्देशिका माउंट करते हैं, तो एक हमलावर बेयर Firefox की तरह ही उसके साथ छेड़छाड़ कर सकता है। - PulseAudio के माध्यम से ऑडियो कैप्चर। PulseAudio सॉकेट कंटेनर में बाइंड-माउंटेड है। हालाँकि यह फाइलसिस्टम स्तर पर केवल-पठनीय माउंटेड है, Unix डोमेन सॉकेट द्विदिशात्मक होते हैं — एक समझौता किया गया प्रक्रिया सॉकेट के माध्यम से रिकॉर्डिंग अनुरोध भेज सकती है। ब्राउज़र सैंडबॉक्स एस्केप संभावित रूप से होस्ट माइक्रोफोन से ऑडियो रिकॉर्ड कर सकता है।
- Wayland कम्पोज़िटर एक्सप्लॉइट। Wayland सॉकेट पास-थ्रू किया जाता है। Wayland कम्पोज़िटर डिज़ाइन द्वारा क्लाइंट को एक-दूसरे से अलग करते हैं, लेकिन कम्पोज़िटर में ही एक कमजोरी पहुँच योग्य होगी।
सुरक्षा कॉन्फ़िगरेशन
कंटेनर निम्नलिखित के साथ चलता है:
- सभी Linux क्षमताएँ हटा दी गई हैं (केवल
CAP_SYS_CHROOTFirefox के कंटेंट सैंडबॉक्स के लिए वापस जोड़ा गया;CAP_SETUID/CAP_SETGIDअस्थायी रूप से तब जोड़ा जाता है जबinit.rootकॉन्फ़िगर किया गया हो) - विशेषाधिकार वृद्धि को रोकने के लिए
no-new-privileges - रूटलेस उपयोगकर्ता नेमस्पेस (
--userns keep-id) - निजी
/dev/shm(होस्ट के साथ साझा नहीं) —shm_sizeके माध्यम से कॉन्फ़िगर करने योग्य आकार - होस्ट लूपबैक डिफ़ॉल्ट रूप से अवरुद्ध के साथ pasta के माध्यम से पृथक नेटवर्किंग
- DNS डिफ़ॉल्ट रूप से होस्ट DNS का उपयोग करता है (
network.dnsके माध्यम से कॉन्फ़िगर करने योग्य) XDG_RUNTIME_DIRसे केवल विशिष्ट सॉकेट बाइंड-माउंटेड हैं (Wayland, PulseAudio, PipeWire, और फ़िल्टर किया गया D-Bus प्रॉक्सी) — पूर्ण होस्ट रनटाइम निर्देशिका कभी उजागर नहीं होती- होस्ट के D-Bus सत्र बस तक पहुँच हमेशा होस्ट पर चल रहे फ़िल्टर किए गए
xdg-dbus-proxyद्वारा मध्यस्थ होती है। केवलorg.freedesktop.Notifications,org.freedesktop.portal.Desktop,org.mozilla.*, और (फोर्क्स के लिए) फोर्क का अपना नेमस्पेस (जैसेorg.librewolf.*) पहुँच योग्य हैं — कीरिंग और SSH/GPG एजेंट जैसी सत्र सेवाएँ अवरुद्ध हैं - पोर्टल एक्सेस व्यापक है।
org.freedesktop.portal.Desktopको समग्र रूप से अनुमति दी गई है, क्योंकि फ़ाइल पिकर, "दूसरे ऐप में लिंक खोलें" और स्क्रीन शेयरिंग इसी तरह काम करते हैं। यहRemoteDesktop(पूरे सत्र के लिए सिंथेटिक कीबोर्ड/माउस),CameraऔरLocationको भी उजागर करता है। ये foxcage के बजाय आपके डेस्कटॉप के स्वयं के अनुमोदन संवादों द्वारा नियंत्रित होते हैं — औरRemoteDesktopसंकेत स्क्रीन-शेयर संकेत जैसा दिखता है, इसलिए स्वीकार करने से पहले अनुमोदन संवाद पढ़ें।xdg-dbus-proxyमें कोई "एक इंटरफ़ेस अस्वीकार करें" नियम नहीं है, इसलिए इसे संकीर्ण करने का मतलब है Firefox को आवश्यक हर इंटरफ़ेस की गणना करना; यह डिफ़ॉल्ट रूप से क्यों नहीं किया जाता है, इसके लिएdocs/DESIGN.mdदेखें - सभी बाइंड माउंट (
profile,downloads_dir, अतिरिक्त[mounts] bind)nosuid,noexecका उपयोग करते हैं - ब्राउज़र डाउनलोड GPG हस्ताक्षरों के विरुद्ध सत्यापित: Firefox Mozilla के हस्ताक्षरित SHA-512 चेकसम के विरुद्ध, LibreWolf LibreWolf अनुरक्षकों के अलग हस्ताक्षर के साथ-साथ सहोदर SHA-256 के विरुद्ध। सत्यापन
gpg --verifyसे अधिक सख्त है, जो रद्द किए गए कुंजी द्वारा बनाए गए हस्ताक्षर और कीरिंग में किसी भी कुंजी के लिए 0 के साथ बाहर निकलता है। foxcage अतिरिक्त रूप से आवश्यकता है कि हस्ताक्षर पिन किए गए प्राथमिक कुंजी से जुड़ा हो, और मालिक द्वारा समझौता किए गए रूप में रद्द किए गए सबकी द्वारा हस्ताक्षरित किसी भी रिलीज़ को अस्वीकार करता है — रद्द किए गए हस्ताक्षर कुंजियाँ देखें - अस्थायी कंटेनर (
--rm) — फाइलसिस्टम लेखन बाहर निकलने पर खो जाते हैं - कोई होस्ट डिवाइस (वेबकैम, सुरक्षा कुंजियाँ, प्रिंटर) स्पष्ट रूप से सक्षम किए बिना पास-थ्रू नहीं किए जाते
प्रत्येक [network] और [mounts] विकल्प जिसे आप सक्षम करते हैं, सुविधा के लिए कुछ अलगाव का व्यापार करता है। डिफ़ॉल्ट सबसे प्रतिबंधात्मक कॉन्फ़िगरेशन है जो अभी भी आपको एक उपयोग योग्य ब्राउज़र देता है।
आवश्यकताएँ
- Python 3.11+
- Podman (रूटलेस)
- Wayland कम्पोज़िटर (X11 समर्थित नहीं है)
- pasta (
sudo apt install passt) — जब तकnetwork.mode = "host"न हो - xdg-dbus-proxy (
sudo apt install xdg-dbus-proxy) - PulseAudio या PulseAudio संगतता के साथ PipeWire (ऑडियो के लिए)
- DRI समर्थन वाला GPU — वैकल्पिक;
/dev/driके बिना foxcage चेतावनी देता है और Firefox सॉफ़्टवेयर में रेंडर करता है। Intel, AMD और nouveau के लिए VA-API ड्राइवर छवि में स्थापित हैं, इसलिए हार्डवेयर वीडियो डिकोडिंग होस्ट ड्राइवर पैकेज के बिना काम करती है — हार्डवेयर वीडियो डिकोडिंग देखें
foxcage को अपने सामान्य डेस्कटॉप उपयोगकर्ता के रूप में चलाएँ, रूट या sudo के माध्यम से नहीं — सैंडबॉक्स आपके उपयोगकर्ता को कंटेनर में मैप करता है, और रूट के रूप में चलाने से वह अलगाव हट जाता है जिसे प्रदान करने के लिए foxcage मौजूद है। यह रूट के रूप में शुरू होने से इनकार करता है।
परीक्षण किया गया वातावरण: GNOME 3 के साथ Debian 13 (Trixie)। अन्य Linux वितरण और Wayland कम्पोज़िटर काम कर सकते हैं लेकिन परीक्षण नहीं किए गए हैं।
स्थापना
foxcage एक एकल Python स्क्रिप्ट है जिसमें Python मानक पुस्तकालय के बाहर कोई निर्भरता नहीं है। इसे अपने PATH में एक निर्देशिका में कॉपी करें:```sh
sudo cp foxcage /usr/local/bin/foxcage
या उपयोगकर्ता-स्थानीय इंस्टॉल के लिए:```sh
cp foxcage ~/.local/bin/foxcage
स्क्रिप्ट को निष्पादन योग्य बनाएं (chmod +x foxcage)।