المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : [درس مفصل] الترقيع النهائي لثغرة البيرل Perl



admin
11-02-2013, بتوقيت غرينيتش 01:13 AM
السلام عليكم ورحمة الله وبركاته
لا شك أن الجميع يشتكي من مشكلة الهاك productرز الذي يقوم بدعس (أن صح اللفظ ) المواقع الموجود على السيرفر SERVER كلها بسحب الكونفيق لاخذ بيانات قاعدة بيانات المنتدى forum لتغير الفورم هوم أو التمبليت أو زرع Index الى غير ذلك من أنواع الدعس خخخ
حان الوقت لشرح طريقة طريقة التخلص من هذه المشكلة إن شاء الله الى الأبد.
نقول بسم الله وبالله التوفيق
نرجع المسأله للأصل وكيف يستغل الهاك productرز هذه الثغرة ، عموما الهاك productرز يعتمد على 3 أمور مهمة في تشغيل البيرل أولها تصريح البيرل باعطاء ملف المترجم (/user/bin/perl)تصريح 700 هذه مسألة لها سلبياتها على السيرفر SERVER فكثير من سكريبت scriptات السيبنال لا تشتغل وتعيد خطأ 500 في الأباتشي من جهة ومن جهة اخرى ان الهاك productر بكل سهولة يقدر يتجاوز هذه المرحلة برفع ملف مترجم محلي وتغيير الباث التكملة .... لن اذكرها مخافة استغلالها من طرف اطفال النت هذه المسألة أظن أنه لا خلاف حولها .

ثانيا : الهاك productرز يعتمد على تغيير امتداد تشغيل البيرل لو أن الأباتشي مضبوط أو اعدادات الموقع مضبوطة على RemoveHandler لإمتدادات CGI Scripts أو حذف امتداد البيرل نهائي من ملف الإعداد فهذه يتم تجاوزها بالتبليغ عن امتداد جديد عن طريق Addhandler في htaccess وتشغيل البيرل بكل سهولة .

ثالثا : تفعيل CGI scripts عن طريق عمل Override بتفعيل ExecCGI في htaccess (Options +ExecCGI) ولو كانت في الملف الرئيسي ملغية (Options –ExecCGI) هذه بالإضافة الى تطبيق الأمر الأول والثاني يشتغل البرل بكل بساطة.

هذه الأمور كلها مرتبطة بعضها الببعض ولا يمكن معالجة أمر دون معالجة الأخر ، لدينا هنا الأمر الأول لا يمكن معالجته لحاله الا اذا الغينا البيرل من السيرفر SERVER بصفة نهائية وهذا لا يمكن
الأمر الثاني الغاء FileInfo من AllowOverride لتمنع عمل Override لـتعليمات mod_mim منها addtype و addhandler و setHandler ما فيها أي اي خطر من الغائها ان شاء الله لكن المشكلة لو الغيناها يبقى منعنا العملاء من التحكم في mod_rewrite عن طريق التعليمات RewriteEngine و RewriteOptions و RewriteBase و RewriteCond و RewriteRule وفيها كذلك RedirectMuch دون ان ننسى صفحات الخطأ عن طريق التعليمة ErrorDocument وغيرها من التعليمات المهمة التي يحتاجها العميل وهي الأكثر استخداما في الاستضافات بنسبة 90% لان الغالبية العظمى يعتمدون على mod_rewrite في vbseo وتحويل الصفحات وتغيير الإمتدادات والكثير من الأمور مما يجعل أمر الغائها مضرة .


الأمر الثالث هو الأمر الذي سنسلط عليه الأضواء لشرح طريقةه لانه هو الأمر المتحكم في الامرين السابقين لو قمنا بمنع التحكم في ExecCGI ومنعنا العملاء من التحكم فيها عن طريق Htaccess يبقى حسمنا المسالة وانتيهنا .

ناخذ الأمر وشرح طريقةه بمنطقية اكثر ما دام نحن عطلنا عمل Override لتعليمات Options عن طريق htaccess وأننا ضبطنا الخيار الرئيسي في httpd.conf لالغاء ExecCGI هذا يعني أننا الغينا CGI scripts نهائيا كيف ذلك :
نعلم أنه في أخر نسخة الأباتشي تم تصحيح خلل فني Bug الذي كان يسمح بعمل تجاوز لكل تعليمات Options عن طريق htaccess والأن اصبح بالإمكان تخصيص التعليمات التي يسمح للعميل بتجاوزها عن طريق htaccess هذا يتيح لنا الغاء التحكم في ExecCGI وحده دون الغاء كافة تعليمات Options لانها في بعض الأحيان تكون ضرورية ولا يمكن الاستغناء عنها كمثال منع استعارض ملفات المجلدات التي لا تحتوي على ملف index أو أي ملف من ملفات المسمات ب DirectoryIndex بواسطة (Options -Indexes) وغيرها من الأمثلة كثيرة .
واليكم طريقة الغاء البيرل في هذا الجزء :
ملا حظة : التطبيق على apache 2.2.x فقط لذلك يفضل الترقية upgrade إلى اخر اصدار من الجيل 2.2 وهو apache2.2.9



أولا قم بتسجيل الدخول الى الشيل ثم قم بفتح ملف httpd.conf عن طريق الامر :
nano /etc/httpd/conf/httpd.conf

ابحث عن :
<Directory &quot;/&quot;>
ضع فوقه التالي : رمز PHP:

<code style="white-space:nowrap"> <code>
<Directory "/home">
Options -ExecCGI
AllowOverride AuthConfig Indexes Limit FileInfo Options=IncludesNOEXEC,Indexes,Includes,MultiViews ,SymLinksIfOwnerMatch,FollowSymLinks
</Directory>
</code> </code>

احفظ الملف
تم قم باعادة تشغيل الأباتشي بالأمر
رمز PHP:

<code style="white-space:nowrap"> <code> service httpd restart
</code> </code>

ماذا تعني هذه السطور :
بالنسبة للسطر الأول :
رمز PHP:

<code style="white-space:nowrap"> <code> Options -ExecCGI -FollowSymLinks
</code> </code>

هذا يعني أن كل التعليمات المتبقية مفعلة وهي IncludesNOEXEC Indexes MultiViews SymLinksIfOwnerMatch وهذا السطر يعادل :
رمز PHP:

<code style="white-space:nowrap"> <code> Options -ExecCGI IncludesNOEXEC Indexes Includes MultiViews SymLinksIfOwnerMatch
</code> </code>

لاحظ هنا نقدر نكتفي بالغاء –ExecCGI فقط عن طريق
رمز PHP:

<code style="white-space:nowrap"> <code> Options –ExecCGI
</code> </code>

يبقى أننا فعلنا كل التعليمات ماعدا ExecCGI لكن هناك تعليمة خطيرة لا نريد تفعيلها التحكم فيها وهي FollowSymLinks فاضطررنا اننا نفعل كل التعليمات باسثناء FollowSymLinks و الغينا –ExecCGI كما يمكن كتابة السطر كالتالي :

رمز PHP:

<code style="white-space:nowrap"> <code> Options IncludesNOEXEC Indexes Includes MultiViews SymLinksIfOwnerMatch
</code> </code>

كل هذه الأكواد معناها واحد ولو قمنا مثلا بتفعيل تعليمة مثلا
Options IncludesNOEXEC Indexes
يبقى التعليمات المتبقية اللي هي MultiViews SymLinksIfOwnerMatch ملغية لذا وجب علينا أن نفعلها كلها باستثناء التعليمات التي نراها الخطيرة
وبالنسبة للسطر الثاني : رمز PHP:

<code style="white-space:nowrap"> <code> AllowOverride AuthConfig Indexes Limit FileInfo Options=IncludesNOEXEC,Indexes,Includes,MultiViews ,SymLinksIfOwnerMatch
</code> </code>

هذا السطر يعادل منطقيا رمز PHP:

<code style="white-space:nowrap"> <code> AllowOverride All
Option –FlowSymLinks –ExecCGI
</code> </code>

لكن AllowOverride All
يسمح بتجاوز
Option –FlowSymLinks –ExecCGI

عن طريق htacess
فبالتالي السطر يمنحنا التحكم اكثر ومن الغاء وتفعيل تعليمات Options و التحكم بها عبر htaccess

أمل أن يكون هذا الجزء واضح ولا اشكال فيه

الطريقة الثانية لالغاء البيرل : وهي منع exec في بارتشن الهوم
نظرا لعدم وجود سكربتات سيبنال سواء sh أو python او perl والغات برمجة أخرى التي ليس لها محركات نظامها نفس نظام php التي لا تشتغل الا اذا تم تركيب install محركات في apache كموديول في هذه الحالة يمكن ان نستفيذ بجعل بارتشن الهوم Noexec ومنع exec يمنع تنفيذ أي سكريبت script من الأنواع التي سبق ذكرها وبالتالي نحن لم نعد بحاجة إلى حماية الأباتشي شرط ما يكون mod_perl مركب .

واليكم الطريقة :
اولا لا بد أن يكون الهوم بارتشن لحاله فلا يمكن تطبيقها والهوم جزء من بارتشن /
لذلك أنصح بتقسيم السيرفر SERVER تقسيمة السي بنال وهي : رمز PHP:

<code style="white-space:nowrap"> <code> /=10GB
/usr=10GB
/var=على حسب حجم قواعد البيانات ولو تخصص له هارد ديسك لحاله كان افضل
/tmp =1GB
/home =ماتبقى من المساحة
/boot=0.5GB
/swap=من 2 جيغا إلى ضعف حجم الرام
</code> </code>

هذه هي التقسيمة السليمة للسيرفر SERVERات السي بنال

نقوم بفتح ملف fstab عن طريق الأمر :
Nano /etc/fstab

ننزل عند السطر :
رمز PHP:

<code style="white-space:nowrap"> <code> LABEL=/home /home ext3 defaults,usrquota 1 2
</code> </code>

تم نقوم باضافة noexec ليصبح بهذا الشكل :

رمز PHP:

<code style="white-space:nowrap"> <code> LABEL=/home /home ext3 defaults,usrquota,noexec 1 2
</code> </code>

بعدها نقوم باعادة فصل واعادة تركيب install /home لياخذ الخصائص الجديدة بالأمر :
رمز PHP:

<code style="white-space:nowrap"> <code> mount –o remount /home
</code> </code>

تذكر أنها عند عمل تحديث update للاباشي يجب ازالة noexec من البارتشن وتنفيذ هذا الأمر :
رمز PHP:

<code style="white-space:nowrap"> <code> mount -o remount,exec /home
</code> </code>

بعد الإنتهاء من التحديث update رجع البارتشن noexec
رمز PHP:

<code style="white-space:nowrap"> <code> mount -o remount /home
</code> </code>

وهكذا قمنا بمنع البيرل من التنفيذ داخل بارتشن الهوم
كما يمكن كذلك حماية tmp و ذاكرة المشاركة /dev/shm بنفس الطريقة منع تنفيذ الملفات الخبيثة منها

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

أخوكم سامي
السلام عليكم




https://fbcdn-sphotos-d-a.akamaihd.net/hphotos-ak-ash4/482113_236967293114455_1193518507_n.png (http://www.dzbatna.com)
©المشاركات المنشورة تعبر عن وجهة نظر صاحبها فقط، ولا تُعبّر بأي شكل من الأشكال عن وجهة نظر إدارة المنتدى (http://www.dzbatna.com)©

استعمل مربع البحث في الاسفل لمزيد من المواضيع


سريع للبحث عن مواضيع في المنتدى