مهم للجميع : Kernel Hardening using Grsecurity & RBAC System

رووح القلوب

عضو جديد
20 مارس 2009
246
1
0


السلام عليكم ورحمة الله وبركاته


fingerprint.jpg



قبل فترة طويلة من الزمن الكثير من الأخوة الأصدقاء المقربين كانوا يستغربون كيف كنت أقوم بإعطاءهم المستخدم root الى خادم عرب نيكس ولم يعرف أحدهم من عمل أي شيء على الخادم (ملاحظة، الموقع حالياً ليس على نفس الخادم السابق، تم نقله لأسباب كثيرة ربما أذكرها لاحقاً) !!! وأيضاً البعض كان يحاول معرفة ما هو النظام الذي يعمل عليه موقع عرب نيكس من خلال عمليات الـ fingerprinting للنظام ولم يعرفوا أيضاً صح يا صبري؟ :) والسبب بإننا سنقوم بعملية التلاعب بالـ TCP Stack أيضاً وبالتالي برامج مثل Xprobe2 أو nmap أو غيرها لن تستطيع معرفة ما هو النظام وما هي نواته !!!
السبب هو الطريقة التي كنت أستعملها على النظام وقتها والتي سأقوم بشرحها بالأسفل بالتفصيل الممل إن شاء الله … هذه الطريقة ستقوم بعملية حماية نظامك حتى من المستخدم root نفسه وبالتالي من يحصل على root على نظامك لن يعرف أن يعمل اي شيء سوى الدهشة والإستغراب والمسائلة لنفسه “ما الذي يحدث؟” :) طبعاً العلم لم يتوقف هنا وربما هناك طرق لإختراق مثل هذه الحماية “المعقدة” جداً جداً جداً ولكني أؤكد لكم بإنها بدون شك ستكون سداً منيعاً أمام هؤلاء أصحاب c99 والذي لن يعرف أحدهم أن يعمل شيء سوى تغيير أندكس !!! يعني حتى لو حصل على root لن يكون قادراً على تدمير الخادم لك، وكما قلت أقصى شي سيقوم به هو “أسلوب الأطفال” تغيير الأندكس !!!
وقبل أن أبدأ بالشرح، ولأنني أؤمن بإنه كلما أعطيت أكثر ونشرت مواضيع أكثر، كلما زادت معرفتك … فمن ظن بإن العلم عنده فقط؟ فهو جاهل … ومن ظن بإنه وصل الى كل شيء؟ فهو جاهل أيضاً … العلم إن نشرته فأنت فعلياً قمت بزكاته … وكما يقول علي بن أبي طالب (رضي الله عنه): زكاة العلم نشره … ولأنني أتمنى أن تكف عمليات التخريب التي أسمع بها هنا وهناك لهذه الجهة أو تلك ولأسباب شخصية بين أفراد يظلم على ضوئها المئات وربما الآلاف من الناس بدون ذنب … فمنهم من يخترق فقط لكي يقول أنا وأنا ونسي حتى أن يقول “أعوذ بالله من كلمة أنا” ومنهم من يخترق لغرض الضرر بالطرف الآخر ويؤذيه سواءاً بشكل مادي، معنوي أو حتى نفسي … ولهذا الموضوع هذا سيكون كما أمرنا رسولنا الكريم، محمد (صلى الله عليه وسلم): “المسلم أخو المسلم، لا يظلمه ولا يسلمه، من كان في حاجة أخيه، فإن الله في حاجته، ومن فرج عن مسلم كربة، فرج الله عنه بها كربة من كرب يوم القيامة، ومن ستر مسلما، ستره الله يوم القيامة”. الرسالة أظنها وصلت ولا حاجة لي لكتابة المزيد فالـ لبيب من الإشارة يفهموا …
لندخل الى الموضوع الآن …
سنقوم بتركيب patch الـ grsecurity وبناء النواة، وتنصيبها … وبعد ذلك سنقوم بتفعيل الـ RBAC System على النظام …

أول شيء لنقوم بعملية الترقيع مع البناء … أدخل المجلد التالي:
PHP:
 cd /usr/local/src
الآن لنقوم بتحميل النواة والترقيع الخاص بالـ grsecurity من خلال الأوامر التالية:
PHP:
wget -c http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.27.10.tar.bz2
wget -c http://www.grsecurity.com/grsecurity-2.1.12-2.6.27.10-200812271347.patch.gz

الآن لنفك ضغطهم:
PHP:
tar xjvf linux-2.6.27.10.tar.bz2
gunzip grsecurity-2.1.12-2.6.27.10-200812271347.patch.gz
الآن لنقوم بعملية الترقيع:
PHP:
patch -p0 < grsecurity-2.1.12-2.6.27.10-200812271347.patch
الآن قم بعمل التالي:
PHP:
mv linux-2.6.27.10 linux-2.6.27.10-grsec
ln -s linux-2.6.27.10-grsec/ linux
cd linux
والآن قم بنسخ ملف الـ config الخاص بالنواة التي تعمل عندك حالياً، لكي نستعملها في عملية بناء النواة بدل من عملها من الصفر:
PHP:
cp /boot/config-`uname -r` .
الآن لندخل الى مرحلة بناء النواة:
PHP:
 make menuconfig
الآن من خلال القائمة بإختيار ملف الـ config هذا الذي نسخناه قبل قليل …
الآن أدخل الى قائمة GrSecurity لكي نقوم ببعض التعديلات والتفعيلات … وأرجوا أن تقوموا بإتباع الصور التالية في الإعداد:

grsec1.jpeg
grsec2.jpeg

grsec3.jpeg

grsec4.jpeg

grsec5.jpeg

grsec6.jpeg

grsec7.jpeg

grsec8.jpeg

grsec9.jpeg

grsec10.jpeg

grsec11.jpeg

grsec12.jpeg

grsec13.jpeg

grsec14.jpeg

grsec15.jpeg

ملاحظة مهمة: هناك خيارات كثيرة جداً ومتعددة جداً … لا أستطيع شرح وتوضيح جميعها، ويوجد كتاب رائع في هذا المجال ممكن يفيدكم لمن يود المزيد من المعرفة: أضغط هنا
الآن قم بحفظ الإعدادات والخروج لنذهب لعملية بناء وتثبيت النواة الجديدة … والتي يمكن عملها بالخطوات التالية:
PHP:
make bzImage
make modules
make modules_install
make install

الآن قبل ان تقوم بإعادة تشغيل الجهاز للعمل على النواة الجديدة grsec لنقوم ببعض الأمور … أولاً قم بتحرير ملف grub:
PHP:
vim /boot/grub/grub.conf
أذهب الى السطور الجديدة التي تخص النواة الجديدة والتي ستكون كهذه:
PHP:
title CentOS (2.6.27.10-grsec)
root (hd1,0)
kernel /vmlinuz-2.6.27.10-grsec ro root=LABEL=/
initrd /initrd-2.6.27.10-grsec.img
وضع بآخر السطر الثالث (الذي يبدأ بكلمة kernel) التالي:
PHP:
 panic=4
لكي يصبح هكذا:
PHP:
title CentOS (2.6.27.10-grsec)
root (hd1,0)
kernel /vmlinuz-2.6.27.10-grsec ro root=LABEL=/ panic=4
initrd /initrd-2.6.27.10-grsec.img
هذه لكي نظمن في حالة حصل خلل في النواة الجديدة (Kernel Panic) سيعيد تشغيل النظام لك بعد 4 ثواني (على إعتبار إنك تطبق هذه العمليات على خادم عن بعد وليس لديك إتصال مباشر على BIOS الخادم) … الآن لندخل الى طرفية grub لكي نقوم بتثبيت عملية إعادة الإقلاع من هذه النواة لمرة واحدة خوفاً من حدوث مشكلة ما ولكي يقوم بعملية الإقلاع من النواة الأخرى في المرة القادمة …
نفذ التالي:
PHP:
grub
savedefault --default=0 --once
quit
هكذا ثبتنا لبرنامج الإقلاع grub بإنه يقوم بعملية الإقلاع من النواة الجديدة والتي هي default=0 مرة واحدة فقط … الآن أعد تشغيل النظام وأنتظر الى أن يعود للعمل وقم بالدخول على النظام وتأكد ما هي النواة التي تعمل الآن من خلال الأمر:
PHP:
 uname -r
إذا كان الجواب هو:
PHP:
2.6.27.10-grsec
هذا يعني بإنه الأمور تمت بنجاح والنواة الجديدة تعمل بشكل سليم … إن ظهرت لك النواة القديمة، هذا يعني بإن هناك خلل ما في النواة وعليك حلها … أو ربما إعادة عملية بناء النواة وتثبيتها من جديد … الآن كل شيء تمام؟ قم بتحرير ملف grub.conf وأحذف منه panic=4 …
الى هنا أنتهينا من تثبيت النواة والباتش Grsecurity الجديدة … مبروك الخطوة الأولى :)
الآن وبعد أن قمنا بتركيب النواة الجديدة، لنقوم بالإستفادة من نظام الـ RBAC والذي هو إختصار لـ Role Based Access Control الموجود مع Grsecurity وذلك لكي تتم عملية إحتواء الهجمات والمخاطر التي ممكن أن توجه على الخادم …
الأمر بسيط إن شاء الله، لنقم بتحميل برنامج gradmn بالبداية:
PHP:
 wget -c http://www.grsecurity.com/gradm-2.1.12-200812271437.tar.gz
بعد ذلك لنفك الضغط عنه وندخل المجلد الناتج:
PHP:
 tar xvfz gradm-2.1.12-200812271437.tar.gz
بعد ذلك نفذ التالي:
PHP:
cd gradm2
make
make install
جميل جميل الأمور تسير بشكل ممتاز “على الأقل عندي :)” … الآن أرجوا أن تركزوا على الجمل التي سأقولها هنا:
الآن برنامج gradm هو للتحكم بالـ RBAC الموجود، ولكن بالبداية يجب أن نقوم بعملية تعليم الـ RBAC ما هي إحتياجاتنا وما هي الأمور التي يجب أن يقوم بعملية حماية لها … هي تشبه الى حد كبير أنظمة الذكاء الإصطناعي والأنظمة الخبيرة التي تتعلم من ذاتها من خلال العمليات التي تعمل بداخل النظام … ولهذا نحتاج بالبداية قبل أن نقوم بتفعيل النظام بتعليمه أي ندخل مرحلة تعليمه Learning Phase … في هذه المرحلة يا أخوان “لا” تقوم بأي عملية تنفيذية تستوجب إستعمال مدير النظام … اي لا تقوم بأي عملية هي عبارة عن Administrative task … الرجاء أكرر “لا” تقوم بأي عملية Administrative خلال مرحلة التعليم هذه … لأن النظام سيتعلمها وسيتعرف عليها بإنها عملية عادية (عمل يومي أو أجراء روتيني مثلاً) وبالتالي لن يقوم بعملية حمايتها … لن نثق بالمستخدم root بعد اليوم :)
يعني أمثلة على ذلك في مرحلة التعليم:
- لا تقوم بإنشاء حساب مستخدم
- لا تقوم بعملية mount أو umount لبارتشنات
- لا تقوم بعملية إيقاف أو تشغيل خدمة ما
- لا تقوم بعملية التعديل على الجدار الناري
- لا تقوم بعملية إدخال أو إخراج لموديول للنواة
- لا تقوم “أكرر” بأي عمل تنفيذي يستوجب تدخل مدير النظام
- المستخدم root لم يعد محل ثقة فأنتبه
ملاحظة: حتى عملية إستعمال الأمر w و top وغيرها من الأدوات إن لم يتعلم عليها النظام؟ فلن يسمح لك بإستعمالها !!!
الآن لدخول مرحلة التعليم نفذ الأمر التالي:
PHP:
 gradm -F -L /etc/grsec/learned_tasks.log
الآن أترك النظام يعمل ليوم أو يومين حسب طبيعة عملك على النظام هذا لكي يقوم نظام الـ RBAC بالتعلم ودراسة النظام بشكل صحيح وأيضاً لكي تكون عندك فرصة كبيرة لتشغيل جميع ما تحتاجهم بشكل إعتيادي قبل أن تنهي مرحلة الدراسة للنظام …
بعد يوم أو يومين أنتهيت وتقول كل شيء تمام؟ الآن لنوقف مرحلة التعليم من خلال الأمر:
PHP:
 gradm -F -L /etc/grsec/learned_tasks.log -O /etc/grsec/acl
الآن هكذا الـ Policy العامة التي سيسير عليها النظام أصبحت معروفة له وتستطيع تفعيلها له من خلال الأمر:
PHP:
 gradm -E
الآن أصبح نظام الـ RBAC يعمل وشغال على الـ Policy التي حددتها له …
الآن نحتاج لعمل كلمة سرية للمستخدم الذي قادر على تشغيل نظام الحماية هذا أو إيقافه من خلال تنفيذ الأمر:
PHP:
 gradm -P
نصيحة لله ضع كلمة سرية معقدة وطويلة عليه …
الآن ماذا لو أردت إيقاف نظام الـ RBAC ماذا أفعل؟
الجواب: نفذ الأمر
PHP:
 gradm -D
سيطلب منك إدخال كلمة السر التي عملتها بالأعلى …
طيب الآن أنا محتاج لإجراء عمل administrative ماذا أفعل؟
الجواب: قم بالدخول الى admin role الخاص بالنظام من خلال تنفيذ الأمر:
PHP:
 gradm -a admin
طيب الآن أنتهيت من ما أريد القيام به، كيف أخرج من admin role؟
الجواب: قم بالخروج من خلال تنفيذ الأمر:
PHP:
 gradm -u admin
طيب الآن قمت بتنفيذ مرحلة التعليم ولكن هناك برنامج binary أريد أسمح بإستعماله، ماذا أفعل؟
الجواب: أستعمل برنامج chpax الذي طوروه جماعة الـ PaX …
طيب سؤال، بما إنه النظام يقوم بحفظ كلمة السر الخاصة بالـ admin role في الملف
PHP:
/etc/grsec/pw
إذن يستطيع root من قراءة محتواه ومن ثم أخذه ومحاولة فك تشفيره؟
الجواب: عندما يتم تفعيل الـ RBAC فإنه حتى الـ admin role لا يستطيع قراءة محتوى هذا الملف، ولا حتى محتوى المجلد الذي هو فيه … وأيضاً لو قمت بالتلاعب بالـ policy من أجل السماح بعملية قراءة هذا المجلد؟ فإن الـ RBAC System لن يعمل ولن يسمح لك بذلك ولهذا لا تقلق …
الموضوع إهداء خاص لأخوي العزيز صبري (KING SABRI) وأعذرني تأخرت عليك شهور :$ وإهداء لكل أعضاء وزوار الدعم العربي التطويري ولكل الأخوة أصحاب المواقع العربية المفيدة لنا كعرب … وإن شاء الله سترون مفاجئات أخرى بإذن الله في أقرب فرصة ممكنة …
مصادر مفيدة جداً:
http://best-sec.net/vb/showthread.php?t=4972goto=newpost