
تشغيل أي أمر داخل عرض نظام ملفات مقيد على لينكس
⚠️ المشروع متوقف
تم إيقاف التطوير على هذا المشروع لأن شخصًا آخر كان يعمل على نفس الفكرة وبنى حلاً أفضل.
نوصي بشدة بتجربة: Fence بواسطة Use-Tusk.ملاحظة: تم إنشاء هذا المستودع أصلاً لـ FOSS HACK 2026، لكننا للأسف لم نتمكن من إكماله في الوقت المحدد.
ومع ذلك، بنينا مشروعًا مشابهًا لـ Hackathena '26 وفاز بـ الجائزة الثالثة!
إذا كنت مهتمًا، يمكنك العثور على هذا المستودع هنا: A56-A5/lion.
يقوم كوردون بتشغيل أي أمر ضمن نطاق رؤية مقيد لنظام الملفات على لينكس. يستخدم مساحات أسماء لينكس (عبر bubblewrap) لإخفاء كل ما لا تحتاجه عمليتك — دليل منزلك، مفاتيح SSH، بيانات اعتماد AWS، كل شيء — مع السماح للأمر بالقيام بعمله.
cordon run --net=allow -- npm install
cordon run -- bash setup.sh
cordon run --profile python -- pip install -r requirements.txt
لا صلاحية جذر. لا حاويات. لا خلفيات تعمل في الخلفية.
عند تشغيل npm install أو pip install، يتم تنفيذ هذا الكود بصلاحيات المستخدم الكاملة. يمكنه قراءة ~/.ssh/id_rsa، وتسريبها إلى خادم، وتعديل الملفات التي تملكها — كل ذلك بينما يبدو أنه يقوم فقط بتثبيت حزمة.
هذا ليس جنون ارتياب. لقد حدث:
إجابة كوردون: لا تدع العملية ترى ما لا ينبغي، حتى لو كان الكود خبيثًا.
كل cordon run ينشئ بيئة معزولة جديدة:
/usr، /bin، /lib يتم تحميلها للقراءة فقط — يمكن للأشياء أن تعمل، لا تكسر النظامnpm install ينشئ node_modules/، أعمال البناء تعملsrc/ للقراءة فقط إذا كان موجودًا — لا يمكن إعادة كتابة الملفات المصدر بصمت~/.ssh، ~/.aws، HOME — غير محملة على الإطلاق افتراضيًا--net=allowعند خروج العملية، يختفي الصندوق الرملي. لا شيء يستمر.
وضع --net=allow يشغل وكيل HTTP/HTTPS مدمج بلغة Rust على منفذ localhost عشوائي ويحقنه في الصندوق الرملي عبر متغيرات البيئة (HTTP_PROXY، https_proxy، npm_config_proxy، إلخ). يعترض أنفاق CONNECT ويتحقق من كل نطاق مقابل قائمة السماح قبل التوجيه.
قائمة السماح الافتراضية تتضمن registry.npmjs.org، pypi.org، crates.io، github.com. أي شيء ليس في القائمة يحصل على 403 — حتى لو حاول سكريبت ما بعد التثبيت للحزمة الاتصال بالمنزل.
# يصل فقط إلى npmjs.org وشبكات CDN الخاصة به — لا شيء آخر
cordon run --net=allow -- npm install
# أضف نطاقًا لمستودع خاص
cordon run --net=allow --domain my.internal.registry -- npm install
اختياريًا، أضف مرشح استدعاءات النظام:
# يمنع ptrace، kexec_load، mount، perf_event_open، process_vm_*
cordon run --seccomp basic --net=allow -- npm install
# قائمة سماح صارمة — فقط استدعاءات النظام الآمنة المعروفة
cordon run --seccomp strict -- python3 untrusted.py
هذا خط دفاع ثانٍ. حتى إذا خرج شيء ما من قيود نظام الملفات، فلا يزال لا يمكنه استدعاء ptrace للارتباط بعملية أخرى أو perf_event_open لأعمال القناة الجانبية.
git clone https://github.com/LORDv1shnu/Cordon
cd Cordon
bash install.sh # يبني الإصدار الثنائي → ~/.local/bin/cordon
أو يدويًا:
cargo build --release
cp target/release/cordon ~/.local/bin/
تحتاج إلى تثبيت bubblewrap:
sudo apt install bubblewrap # Ubuntu/Debian
sudo dnf install bubblewrap # Fedora
sudo pacman -S bubblewrap # Arch
أول تشغيل بعد التثبيت:
cordon scan # يفحص نظامك مرة واحدة، يستغرق ~30 ثانية، يكتب ~/.config/cordon/system.toml
cordon check # فحص سريع — يتأكد أن كل شيء جاهز
# الأساسيات
cordon run -- echo "hello"
cordon run --net=allow -- npm install
cordon run --net=allow -- pip install -r requirements.txt
cordon run --net=full -- curl https://example.com # غير مقيد (بدون تصفية)
# Seccomp
cordon run --seccomp basic --net=allow -- npm install
# تطبيقات واجهة المستخدم الرسومية
cordon run --gui -- code .
cordon run --gui --optional audio_pipewire --optional dbus_session -- discord
# ملفات تعريف مدمجة (مهيأة مسبقًا لبيئات التشغيل الشائعة)
cordon run --profile node -- npm install
cordon run --profile python -- python3 script.py
cordon run --profile rust -- cargo build
# تصحيح ما يتم حظره
cordon run --trace -- node server.js # غلاف strace، يبلغ عن المسارات المرفوضة
cordon add --from-trace ~/.config/cordon/logs/last-trace.log # إضافة جماعية للمسارات المفقودة
# حدود الموارد (يحتاج systemd)
cordon run --mem 512M --cpu 2.0 --timeout 60 -- npm install
# تشغيل تجريبي / مطوّل
cordon run --dry-run -- npm install # اطبع أمر bwrap، لا تشغله
cordon run --verbose -- npm install # اطبع كل وسيطة bwrap أثناء التشغيل
cordon.toml)cordon init # يكشف تلقائيًا Cargo.toml / package.json / pyproject.toml
cordon set --net=allow # يحفظ الأعلام حتى لا تكتبها كل مرة
cordon add /path/to/assets --mode ro # يعرض مسارات إضافية داخل الصندوق الرملي
cordon edit # يفتح cordon.toml في $EDITOR
cordon check # فحص صحي: bwrap، مساحات الأسماء، AppArmor، الوحدات
cordon doctor # أعمق: إصدار النواة، خصوصيات التوزيعة، اقتراحات إصلاح دقيقة
cordon status # أظهر ما في system.toml الآن
cordon list # أظهر كل تحميل سيكون نشطًا في التشغيل التالي
cordon log --errors # ذيل سجل التشغيل الأخير، الأخطاء فقط
cordon syscalls --preset basic # أظهر ما يمنعه كل إعداد مسبق لـ seccomp
# ملفات تعريف مسماة (مخزنة في ~/.config/cordon/profiles.toml)
cordon profile create ci-node --net=allow --optional ld_so_cache
cordon run --profile ci-node -- npm test
# ملف قفل لبيئات قابلة للتكرار
cordon lock update # SHA-256 لجميع مسارات التحميل → cordon.lock
cordon lock verify # تحقق من عدم تغير شيء
# شارك تكوين الصندوق الرملي مع الفريق
cordon export > sandbox.json
cordon import sandbox.json
# الإكمال التلقائي للتبويب
cordon completions zsh > ~/.zfunc/_cordon
# أغلفة شفافة — اجعل "npm" يعمل دائمًا بشكل محصور
cordon wrap npm
cordon wrap pip
npm install # في الواقع يعمل: cordon run -- npm install "$@"
cordon unwrap npm
# صفحة الدليل
cordon man | man -l -
هناك أربعة ملفات تكوين، تُطبق بالترتيب:
أعلام واجهة الأوامر دائمًا هي الأقوى. cordon.toml يتفوق على ملف التعريف المسمى. لا يمكن لمس core.toml المدمج في الثنائي في وقت التشغيل.
نفس الاتفاقية كـ bwrap والقشرة.
كوردون ليس حاوية، ولا برنامج مكافحة فيروسات، وليس بديلاً عن SELinux أو AppArmor. يقيد رؤية نظام الملفات والوصول إلى الشبكة — إنه لا يحاول اكتشاف البرامج الضارة. إذا كان لدى شيء ما ثغرة في النواة، فسيخرج. الهدف هو جعل هجمات سلسلة التوريد أصعب بشكل كبير، وليس مستحيلاً.
أيضًا: حاليًا فقط لينكس x86_64 و aarch64. bubblewrap مطلوب.
مبني بلغة Rust. يستخدم bubblewrap لمساحات الأسماء، وseccompiler لتجميع مرشحات BPF، وclap لواجهة الأوامر، وtracing للتسجيل المنظم. الوكيل لتصفية النطاقات مكتوب من الصفر بلغة Rust النقية (بدون أداة وكيل خارجية).
→ COMMANDS.md — مرجع كامل للأعلام
→ SCANNER_LOGIC.md — كيف يعمل ماسح النظام
→ MODULE_INFO.md — كل ملف مصدر موضح
بُني بمساعدة الذكاء الاصطناعي (Gemini). المعمارية، نموذج الأمان، وقرارات التصميم هي عمل المؤلف.
| الهجوم | ما فعله |
|---|
| LiteLLM (2024) | حزمة PyPI خبيثة قرأت مفاتيح SSH ومتغيرات البيئة عند pip install |
| xz-utils (2024) | ثغرة باب خلفي أثناء البناء تم حقنها عبر خطوة make أثناء التثبيت |
| event-stream (npm، 2018) | حزمة npm مخترقة سرقت محافظ بيتكوين بصمت |
| SolarWinds | هجوم سلسلة التوريد عبر أنابيب البناء/التحديث |
| الطبقة | أين | من يكتبها |
|---|
core.toml | مدمج في الثنائي | غير قابل للتعديل في وقت التشغيل (مقاوم للتلاعب) |
system.toml | ~/.config/cordon/ | cordon scan |
profiles.toml | ~/.config/cordon/ | cordon profile create |
cordon.toml | دليل المشروع | cordon init / cordon set / cordon add |
| الرمز | المعنى |
|---|
| 0 | نجاح |
| 1 | خطأ داخلي لكوردون |
| 2 | استخدام خاطئ لواجهة الأوامر |
| 125 | فشل إعداد الصندوق الرملي (bwrap مفقود، إلخ) |
| 126 | تم العثور على الأمر لكن غير قابل للتنفيذ داخل الصندوق الرملي |
| 127 | الأمر غير موجود داخل الصندوق الرملي |
| N | تم تمريره من العملية المحصورة |