السلام عليكم ورحمة الله وبركاته
قبل فترة طويلة من الزمن الكثير من الأخوة الأصدقاء المقربين كانوا يستغربون كيف كنت أقوم بإعطاءهم المستخدم root الى خادم عرب نيكس ولم يعرف أحدهم من عمل أي شيء على الخادم (ملاحظة، الموقع حالياً ليس على نفس الخادم السابق، تم نقله لأسباب كثيرة ربما أذكرها لاحقاً) !!! وأيضاً البعض كان يحاول معرفة ما هو النظام الذي يعمل عليه موقع عرب نيكس من خلال عمليات الـ fingerprinting للنظام ولم يعرفوا أيضاً صح يا صبري؟ والسبب بإننا سنقوم بعملية التلاعب بالـ TCP Stack أيضاً وبالتالي برامج مثل Xprobe2 أو nmap أو غيرها لن تستطيع معرفة ما هو النظام وما هي نواته !!!
السبب هو الطريقة التي كنت أستعملها على النظام وقتها والتي سأقوم بشرحها بالأسفل بالتفصيل الممل إن شاء الله … هذه الطريقة ستقوم بعملية حماية نظامك حتى من المستخدم root نفسه وبالتالي من يحصل على root على نظامك لن يعرف أن يعمل اي شيء سوى الدهشة والإستغراب والمسائلة لنفسه “ما الذي يحدث؟” طبعاً العلم لم يتوقف هنا وربما هناك طرق لإختراق مثل هذه الحماية “المعقدة” جداً جداً جداً ولكني أؤكد لكم بإنها بدون شك ستكون سداً منيعاً أمام هؤلاء أصحاب c99 والذي لن يعرف أحدهم أن يعمل شيء سوى تغيير أندكس !!! يعني حتى لو حصل على root لن يكون قادراً على تدمير الخادم لك، وكما قلت أقصى شي سيقوم به هو “أسلوب الأطفال” تغيير الأندكس !!!
وقبل أن أبدأ بالشرح، ولأنني أؤمن بإنه كلما أعطيت أكثر ونشرت مواضيع أكثر، كلما زادت معرفتك … فمن ظن بإن العلم عنده فقط؟ فهو جاهل … ومن ظن بإنه وصل الى كل شيء؟ فهو جاهل أيضاً … العلم إن نشرته فأنت فعلياً قمت بزكاته … وكما يقول علي بن أبي طالب (رضي الله عنه): زكاة العلم نشره … ولأنني أتمنى أن تكف عمليات التخريب التي أسمع بها هنا وهناك لهذه الجهة أو تلك ولأسباب شخصية بين أفراد يظلم على ضوئها المئات وربما الآلاف من الناس بدون ذنب … فمنهم من يخترق فقط لكي يقول أنا وأنا ونسي حتى أن يقول “أعوذ بالله من كلمة أنا” ومنهم من يخترق لغرض الضرر بالطرف الآخر ويؤذيه سواءاً بشكل مادي، معنوي أو حتى نفسي … ولهذا الموضوع هذا سيكون كما أمرنا رسولنا الكريم، محمد (صلى الله عليه وسلم): “المسلم أخو المسلم، لا يظلمه ولا يسلمه، من كان في حاجة أخيه، فإن الله في حاجته، ومن فرج عن مسلم كربة، فرج الله عنه بها كربة من كرب يوم القيامة، ومن ستر مسلما، ستره الله يوم القيامة”. الرسالة أظنها وصلت ولا حاجة لي لكتابة المزيد فالـ لبيب من الإشارة يفهموا …
لندخل الى الموضوع الآن …
سنقوم بتركيب patch الـ grsecurity وبناء النواة، وتنصيبها … وبعد ذلك سنقوم بتفعيل الـ RBAC System على النظام …
أول شيء لنقوم بعملية الترقيع مع البناء … أدخل المجلد التالي:
PHP:
cd /usr/local/src
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
PHP:
cp /boot/config-`uname -r` .
PHP:
make menuconfig
الآن أدخل الى قائمة GrSecurity لكي نقوم ببعض التعديلات والتفعيلات … وأرجوا أن تقوموا بإتباع الصور التالية في الإعداد:
ملاحظة مهمة: هناك خيارات كثيرة جداً ومتعددة جداً … لا أستطيع شرح وتوضيح جميعها، ويوجد كتاب رائع في هذا المجال ممكن يفيدكم لمن يود المزيد من المعرفة: أضغط هنا
الآن قم بحفظ الإعدادات والخروج لنذهب لعملية بناء وتثبيت النواة الجديدة … والتي يمكن عملها بالخطوات التالية:
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
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
نفذ التالي:
PHP:
grub
savedefault --default=0 --once
quit
PHP:
uname -r
PHP:
2.6.27.10-grsec
الى هنا أنتهينا من تثبيت النواة والباتش 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
بعد يوم أو يومين أنتهيت وتقول كل شيء تمام؟ الآن لنوقف مرحلة التعليم من خلال الأمر:
PHP:
gradm -F -L /etc/grsec/learned_tasks.log -O /etc/grsec/acl
PHP:
gradm -E
الآن نحتاج لعمل كلمة سرية للمستخدم الذي قادر على تشغيل نظام الحماية هذا أو إيقافه من خلال تنفيذ الأمر:
PHP:
gradm -P
الآن ماذا لو أردت إيقاف نظام الـ RBAC ماذا أفعل؟
الجواب: نفذ الأمر
PHP:
gradm -D
طيب الآن أنا محتاج لإجراء عمل administrative ماذا أفعل؟
الجواب: قم بالدخول الى admin role الخاص بالنظام من خلال تنفيذ الأمر:
PHP:
gradm -a admin
الجواب: قم بالخروج من خلال تنفيذ الأمر:
PHP:
gradm -u admin
الجواب: أستعمل برنامج chpax الذي طوروه جماعة الـ PaX …
طيب سؤال، بما إنه النظام يقوم بحفظ كلمة السر الخاصة بالـ admin role في الملف
PHP:
/etc/grsec/pw
الجواب: عندما يتم تفعيل الـ RBAC فإنه حتى الـ admin role لا يستطيع قراءة محتوى هذا الملف، ولا حتى محتوى المجلد الذي هو فيه … وأيضاً لو قمت بالتلاعب بالـ policy من أجل السماح بعملية قراءة هذا المجلد؟ فإن الـ RBAC System لن يعمل ولن يسمح لك بذلك ولهذا لا تقلق …
الموضوع إهداء خاص لأخوي العزيز صبري (KING SABRI) وأعذرني تأخرت عليك شهور :$ وإهداء لكل أعضاء وزوار الدعم العربي التطويري ولكل الأخوة أصحاب المواقع العربية المفيدة لنا كعرب … وإن شاء الله سترون مفاجئات أخرى بإذن الله في أقرب فرصة ممكنة …
مصادر مفيدة جداً: