تأمين الوصول إلى الملفات في الدليل التعرف على بيئة متغير ؟

StackOverflow https://stackoverflow.com/questions/196244

سؤال

يمكن لأي شخص أن نشير إلى بعض التعليمات البرمجية التي تتعامل مع الأمن من الوصول إلى الملفات عبر المسار المحدد (جزئيا) من خلال بيئة متغير خصيصا Unix و مشتقاته ، ولكن ويندوز الحلول أيضا من الفائدة ؟

هذه مسألة طويلة - أنا لست متأكدا من مدى تناسبها لذلك النموذج.

النظر في هذا السيناريو:

الخلفية:

  • حزمة برامج PQR يمكن تركيبها في الموقع الذي تم اختياره من قبل المستخدمين.
  • البيئة المتغير $PQRHOME يستخدم لتحديد تثبيت الدليل.
  • افتراضي جميع البرامج والملفات تحت $PQRHOME تنتمي إلى مجموعة خاصة ، pqrgrp.
  • وبالمثل جميع البرامج و الملفات تحت $PQRHOME إما تنتمي إلى مستخدم خاص, pqrusr ، أو إلى المستخدم الجذر (و تلك هي SUID root البرامج).
  • عدد قليل من البرامج SUID pqrusr;عدد قليل من أكثر البرامج SGID pqrgrp.
  • معظم الدلائل التي تملكها pqrusr و تنتمي إلى pqrgrp;بعض يمكن أن تنتمي إلى فئات أخرى ، أعضاء تلك الجماعات الحصول على امتيازات إضافية مع البرنامج.
  • العديد من الامتيازات التنفيذية يجب أن يتم تشغيلها من قبل الناس الذين ليسوا أعضاء في pqrgrp;البرامج للتحقق من أن المستخدم يسمح تشغيله من قبل غامضة القواعد التي لا تتعلق مباشرة على هذا السؤال.
  • بعد بدء تشغيل بعض من برامج متميزة يجب أن تحتفظ امتيازات مرتفعة لأنها طويلة الشياطين يجوز أن يتصرف نيابة عن العديد من المستخدمين على مدى حياتهم.
  • البرامج غير المصرح به إلى تغيير الدليل إلى $PQRHOME لمجموعة متنوعة من غامضة الأسباب.

الحالية التحقق من:

  • البرامج حاليا التحقق دولار PQRHOME الرئيسية الدلائل تحتها هي "آمنة" (المملوكة من قبل pqrusr ، تنتمي إلى pqrgrp لا يكون بالإرهاب).
  • بعد ذلك, برامج الوصول إلى الملفات تحت $PQRHOME عبر كامل قيمة متغير البيئة.
  • على وجه الخصوص ، G11N و L10N يتحقق من خلال الوصول إلى الملفات في 'آمنة' الدلائل ، والقراءة شكل سلاسل printf() وما إلى ذلك من الملفات في تلك الدلائل ، وذلك باستخدام اسم المسار الكامل المستمدة من $PQRHOME بالإضافة إلى المعروف هيكل الفرعية (على سبيل المثال ، $PQRHOME/g11n/en_us/الرسائل.l10n).

نفترض أن 'مثبت' بقيمة PQRHOME هو /opt/pqr.

المعروف الهجوم:

  • المهاجم مجموعات PQRHOME=/home/مهاجم/pqr.
  • هذا هو في الواقع الارتباط الرمزي إلى /opt/pqr ، لذلك عند واحد من PQR البرامج نسميها pqr-الضحية الشيكات الدليل ، فإنه لديه الأذونات الصحيحة.
  • مباشرة بعد الأمن التحقق بنجاح المهاجم التغييرات symlink بحيث يشير إلى /الصفحة الرئيسية/مهاجم/وهمية-pqr ، والتي من الواضح تحت المهاجم التحكم.
  • أشياء رهيبة تحدث عندما pqr الضحية الآن يصل الملف تحت يفترض أنها آمنة الدليل.

بالنظر إلى أن PQR حاليا يتصرف كما هو موضح, و هي مجموعة كبيرة (عدة ملايين من الأسطر من التعليمات البرمجية المتقدمة على مدى أكثر من عقد من الزمن إلى مجموعة متنوعة من معايير الترميز ، والتي كثيرا ما يتم تجاهلها ، على أي حال) ، ما هي الأساليب التي قد تستخدم لإصلاح هذه المشكلة ؟

المعروف الخيارات تشمل:

  1. تغيير كافة التنسيقات يدعو إلى استخدام وظيفة الشيكات الفعلية الحجج ضد شكل سلاسل ، مع حجة اضافية مشيرا إلى الفعلية أنواع تمريرها إلى الدالة.(هذا هو صعب و يحتمل الخطأ عرضه بسبب العدد الهائل من تنسيق العمليات إلى تغيير - ولكن إذا كانت وظيفة التدقيق هو في حد ذاته الصوت يعمل بشكل جيد.)
  2. إنشاء الطريق المباشر إلى PQRHOME و التحقق من صحة ذلك الأمن (التفاصيل أدناه) ، ورفض أن تبدأ إذا كان غير آمن ، و بعد ذلك باستخدام الطريق المباشر وليس قيمتها PQRHOME (عندما تختلف).(هذا يتطلب من جميع عمليات الملفات التي تستخدم $PQRHOME لا قيمة من getenv() ولكن تعيين المسار.على سبيل المثال ، وهذا يتطلب البرنامج لإثبات أن /الرئيسية/مهاجم/pqr هو الارتباط الرمزي إلى /opt/pqr هذا المسار /opt/pqr آمنة ، وبعد ذلك كلما الملف المشار إليها دولار PQRHOME/بعض/الشيء الاسم المستخدم سيكون /opt/pqr/بعض/هو /home/مهاجم/pqr/بعض/الشيء.هذا هو قاعدة رمز كبير - ليست تافهة إلى الإصلاح).
  3. التأكد من أن جميع الدلائل على $PQRHOME حتى تتبع من خلال روابط الرمزية, آمنة (التفاصيل أدناه ، مرة أخرى) ، و البرنامج يرفض أن تبدأ إذا كان أي شيء غير آمن.
  4. بجد رمز المسار إلى برنامج تثبيت الموقع.(هذا لن ينجح PQR;يجعل اختبار الجحيم ، إذا أي شيء آخر.بالنسبة للمستخدمين ، وهو ما يعني أنها يمكن أن يكون إلا نسخة واحدة تثبيت ترقيات الخ تتطلب تشغيل مواز.هذا لا يعمل من أجل PQR.)

المعايير المقترحة لتأمين مسارات:

  • لكل دليل المالك يجب أن يكون موثوق به.(الأساس المنطقي:مالك يمكن تغيير الأذونات في أي وقت ، لذا يجب على المالك أن يبادروا إلى إجراء تغييرات في العشوائية التي كسر البرمجيات الأمنية.)
  • لكل الدليل الفريق يجب أن لا يكون لديك امتيازات الكتابة (حتى أعضاء الفريق لا يمكن تعديل محتويات الدليل) أو مجموعة يجب أن يكون موثوق به.(الأساس المنطقي:إذا كان أعضاء المجموعة يمكن تعديل الدليل ، فإنها يمكن أن كسر البرمجيات الأمنية ، وذلك إما أنها يجب أن تكون قادرة على تغييره ، أو أنها يجب أن تكون موثوق بها ليس إلى تغييره.)
  • لكل دليل ، 'الآخرين' يجب أن يكون كتابة امتياز على الدليل.
  • بشكل افتراضي للمستخدمين الجذر, بن, sys, و pqrusr يمكن الوثوق بها (أين بن sys موجودة).
  • افتراضي مجموعة مع GID=0 (بأشكال مختلفة تعرف باسم الجذر, عجلة أو النظام), بن, sys, و pqrgrp يمكن الوثوق بها.بالإضافة إلى ذلك ، فإن المجموعة التي تملك الدليل الجذر (وهو ما يسمى المشرف على MacOS X) يمكن الوثوق بها.

POSIX وظيفة realpath() يوفر خدمة الخرائط التي سوف الخريطة /الصفحة الرئيسية/مهاجم/pqr إلى /opt/pqr;فإنه لا يفعل الأمن التحقق ، ولكن التي تحتاج إلى أن يتم إلا على حلها المسار.

إذا مع كل هذه الخلفية ، هل هناك أي البرمجيات التي يمر غامضة ذات الدوران لضمان الأمن ؟ هذا مذعور?(إذا كان الأمر كذلك, لماذا هل حقا متأكد؟)

تحرير:

شكرا على التعليقات المختلفة.

@S. لوت:الهجوم (المبينة في السؤال) يعني أن واحدا على الأقل وsetuid الجذر البرنامج يمكن أن يتم استخدام سلسلة تنسيق من (المحرومين) المستخدم اختيار ، على الأقل يمكن أن تحطم البرنامج وبالتالي على الأرجح يمكنك الحصول على root shell.فإنه يتطلب المحلية الوصول قذيفة, لحسن الحظ ، ليس بعيد الهجوم.فإنه يتطلب كمية لا يستهان بها من المعرفة للوصول إلى هناك, ولكن أنا أعتبر أنه من الحكمة أن نفترض أن الخبرة ليست 'هناك'.

لذا أنا تصف ما هو شكل سلسلة الضعف و المعروفة الهجوم مسار ينطوي على تزوير البرنامج حتى على الرغم من أنه يعتقد أنه هو الوصول إلى تأمين الملفات رسالة ، فإنه في الواقع يذهب ويستخدم رسالة الملفات (التي تحتوي على شكل سلاسل) التي هي تحت سيطرة المستخدم من البرنامج.

هل كانت مفيدة؟

المحلول

الخيار 2 يعمل, إذا قمت بكتابة قيمة جديدة $PQRHOME بعد حل لها المسار الحقيقي وتحقق أمنها.بهذه الطريقة قليل جدا من التعليمات البرمجية الخاصة بك يحتاج إلى تغيير بعد ذلك.

بقدر الحفاظ على وsetuid امتيازات ، من شأنه أن يساعد إذا كنت تستطيع القيام ببعض النوع من الفصل امتياز ، بحيث أن أي العمليات التي تنطوي على مدخلات من المستخدم الحقيقي يعمل تحت حقيقية uid.متميز عملية الحقيقي uid العملية ثم الحديث باستخدام socketpair أو شيء من هذا القبيل.

نصائح أخرى

حسنا ، يبدو بجنون العظمة, ولكن إذا كان هو أو لا يعتمد على أي نظام(s) الخاص بك تشغيل التطبيق على الضرر الذي يمكن أن مهاجم القيام به.

حتى إذا سيرباسي وربما عدائية إذا كان الضرر المحتمل عالية جدا ، كنت اذهب للخيار 4 ، ولكن تعديلها على النحو التالي لإزالة عيوبه.

اسمحوا لي أن أقتبس اثنين من الأمور ذات الصلة:

1)

البرامج حاليا التحقق دولار PQRHOME الرئيسية الدلائل تحتها هي "آمنة" (المملوكة من قبل pqrusr, تنتمي إلى pqrgrp, لم يكن لديك العامة الكتابة).

2)

بعد ذلك, برامج الوصول إلى الملفات تحت $PQRHOME عبر كاملة قيمة متغير البيئة.

أنت لا تحتاج إلى الواقع الصعب رمز المسار الكامل, يمكنك بجد رمز فقط المسار النسبي من "البرنامج" التي ذكرتها في 1) إلى المسار المذكور في 2) حيث الملفات.

مسألة التحكم:

أ) يجب أن تكون على يقين أنه لا يوجد أي شيء "المهاجم الوصول إليها" (مثلا ، في فترة من روابط الرمزية) بين للتنفيذ مسار الملفات' مسار

ب) يجب أن تكون متأكدا أن الملف القابل للتنفيذ تحقق طريقها الخاص في طريقة يمكن الاعتماد عليها ، ولكن هذا لا ينبغي أن يكون مشكلة في كل Unix وفاق أعلم (ولكن أنا لا أعرف كل منهم وأنا لا أعرف ويندوز على الإطلاق).


تحريرها بعد 3 تعليق:

إذا كان نظام التشغيل الخاص بك الدعم /proc ، syslink /proc/${pid}/exe هو أفضل وسيلة لحل ب)


تحريرها بعد النوم على ذلك:

هو تركيب "آمنة" ؟ إذا كان الأمر كذلك ، قد خلق (في وقت التثبيت) مجمع النصي.هذا البرنامج النصي يجب أن يكون قابل للتنفيذ ولكن ليس للكتابة (وربما لا للقراءة).كان تعيين $PQRHOME env فار إلى "آمنة" قيمة ومن ثم استدعاء الفعلية الخاصة بك برنامج (ربما في نهاية المطاف تفعل أشياء أخرى مفيدة جدا).بما في UNIX env فأر عملية التشغيل لا أن تغير أي شيء آخر ولكن عملية التشغيل, أنت آمن (طبعا env فأر يمكن يمكن تغييرها من قبل الوالدين قبل تبدأ العملية).أنا لا أعرف إذا كان هذا النهج يعمل في ويندوز ، على الرغم من.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top