إعـــــــلان

تقليص
لا يوجد إعلان حتى الآن.

استجذار كل الخدمات في يونيكس للدواعي الامنية

تقليص
X
 
  • تصفية - فلترة
  • الوقت
  • عرض
إلغاء تحديد الكل
مشاركات جديدة

  • [نقاش] استجذار كل الخدمات في يونيكس للدواعي الامنية

    استجذار كل الخدمات في يونيكس للدواعي الامنية

    Author : Mark Nielsen

    استجذار خدمات النظام يعزز الأمن، و يقلل من الأضرار التي قد يسببها أحد ما إن اخترق النظام.

    مقدمة:


    ما المقصود بالاستجذار ؟



    إنه تبديل بيئة برنامج ما ، أي استبدال مجلد الجذر ROOT أي "\"، بالنسبة إلى برنامج ما أو جلسة عمل ما. أي أنّ أي شيء خارج المجلد الذي تستجذر به، غير موجود أبعد من البرنامج أو منفذ الأوامر المقصود.

    ما الفائدة من هذا ؟



    إذا ما اخترق أحد ما حاسوبك، فلن يقدر أن يرى كل الملفات في نظامك. مما يقلل الأوامر التي يمكنه تنفيذها، و يحرمه المقدرة على استكشاف ملفات غير محصنة. لكن ما يؤرقني، أن هذا لن يمنعه من أن يطّلع على وصلات الشبكة و الأغراض الأخرى. لذا عليك بأمور أخرى، لن نتوسع فيها في هذا المقال :

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

    تذكر أنّ منهجي هذا قد لا يكون محكما 100 %، إنها محاولتي الأولى، و إن كانت تعمل جيدا بعض الشيء، فلابد أنها ستتم بيسر. إنها بداية الدرب لوثيقة "كيف يعمل" أود تأليفها عن الستجذار.


    كيف سنستجذر كل شيء؟
    حسنا، سنصنع مجلدا نسميه "/chroot"، و نجعل فيه كل الخدمات كما يأتي:

    Syslogd ستُستجذر مع كل خدمة.
    Apache في /chroot/httpd.
    Ssh في /chroot/sshd.
    PostgreSQL في /chroot/postmaster.
    Sendmail ستُستجذر, لكن لن تعمل في حساب غير الجذر، للأسف.
    ntpd ستُستجذر في /chroot/ntpd.
    named ستُستجذر في /chroot/named.
    كل خدمة يجب أن تعزل تماما.


    مخطوطتي ببرل للاستجذار.
    نزّل Config_Chroot.pl.txt ثم سمّه Config_Chroot.pl. هذه المخطوطة - مكتوبة بـبرل - تسرد الخدمات المثبتة، و تريك ملفات الإعداد ، و تعدُّ خدمة ما، و تبدأها و توقفها، و هذا ما ينبغي عمله عموما.

    اصنع مجلد الاستجذار :


    mkdir -p /chroot/Config/Backup
    نزّل Config_Chroot.pl.txt في /chroot/Config_Chroot.pl
    عدّل المتغير في المخطوطة إن لم تكن تستعمل /chroot مجلدا شخصيا.
    نزّل ملفاتي للإعداد.
    و الآن، أشير أنني جربتها فقط على RedHat 7.2 و RedHat 6.2. إذن عدّل المخطوطة بما يناسب توزيعتك.

    توصلت أن أكتب مقالا كبيرا طويلا عن الاستجذار ، لولا أنّ مخطوطتي قلصته. إذ لاحظت بعد استجذار كثير من الخدمات أنّ لها ملفات و إعدادات متشابهة . الطريقى المثلى لمعرفة ملفات خدمة ما التي ينبغي نسخها عند الاستجذار، هي مطالعة صفحة العون، و تنفيذ الأمر"ldd /usr/bin/file" للبرامج التي تحتاج ملفات المكتبات. كما يمكنك أن تستجذر خدمة ما و تشغلها يدويا لترى الأخطاء التي قد تحدث، أو تطالع ملفات الدخول.

    عموما، لتثبيت خدمة ما عليك بـ:



    cd /chroot
    ./Config_Chroot.pl config SERVICE
    ./Config_Chroot.pl install SERVICE
    ./Config_Chroot.pl start SERVICE






    استجذار Ntpd :


    Ntpd خدمة زمنيو، فحسب، تحفظ تزامن حاسوبك و الحواسيب الأخرى مع الزمن الفعلي،و هي سهلة الاستجذار.



    cd /chroot
    # حرر السطر الموالي، إن لم تستعمل ملفاتي للإعداد.
    #./Config_Chroot.pl config ntpd
    ./Config_Chroot.pl install ntpd
    ./Config_Chroot.pl start ntpd






    استجذار DNS or named :


    مستجذر سلفا، زر
    http://www.linuxdoc.org/HOWTO/Chroot-BIND8-HOWTO.html
    أو
    http://www.linuxdoc.org/HOWTO/Chroot-BIND-HOWTO.html

    و إلا استعمل مخطوطتي .



    cd /chroot
    # حرر السطر الموالي، إن لم تستعمل ملفاتي للإعداد.
    #./Config_Chroot.pl config named
    ./Config_Chroot.pl install named
    ./Config_Chroot.pl start named





    استجذار Syslog مع الخدمات و انشغالاتي .


    أود استجذارsyslogd . لكن المعضلة أنه يستخدم /dev/log تلقائيا، الذي لا يتمكن من البلوغ إليه من الخدمات المستجذرة. لذا لا أستطيع أن أدخل بيسر . أما الحلول الممكنة فهي:

    استجذار مع كل خدمةن أنا جربت هذا، و يعمل جيدا، و أصبحت قادرا على الدخول إلى الأغراض، بيد أنني أضجر منه إذا ما عملت بخدمة جذرية.
    .تبين إن أمكنك الاتصال بمصلحة الدخول إلى موقع مقفل.
    اجعل الملفات تدخل عبر ملف ما و ليس عبرsyslogd . هذه ربما أفضل حل آمن، مع أن المخترق، يقدر أن يعبث بالدخولات.
    أعدّ syslog الرئيسي ليرى عدة مواضع ، للحصول على كل الخدمات. لهذا استخدم الخيار"-a "مع syslogd.
    الحل لدي أن تتأكد أن syslogd مستجذر جيدا مع كل خدمة.

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

    أما إن فضلت ألا تفصل بين syslogd لكل خدمة، أضف الأوامر التالية إلى syslogd الرئيسي عندما يبدأ:


    syslogd -a /chroot/SERVICE/dev/log




    فإن كان لديك ssh و dns فسيبدوا هكذا :



    syslogd -a /chroot/ssh/dev/log -a /chroot/named/dev/log -a /dev/log



    آخر ملاحطة على syslogdن أنني رغبت أن أجعله يعمل في حساب غير الجذر، فحاولت أمرين بسيطين، لكنهما لم ينفعا، فاكتفيت. فإذا ما عمل في غير حساب الجذر مع كل خدمة فسيلبي حاجتي الأمنية.


    استجذار Apache
    ما أسهل هذا، فما إن ثبته حتى استطعت إنفاذ مخطوط برل. الآن استطال مخطوطي بما أضفته إليه من مكتبات برل و postgreSQL في قسم الاستجذار. يجدر بالإشارة، أنك إن اتصلت بقاعدة بيانات، عليك أن تتأكن أن خدمة قواعد البيانات تعمل على أداة الحلقة المفرغة، و أن تجعل 127.0.0.1 هو المضيف في مخطوط برل لوحدة DBI.

    و إليك هذا المثال، حيث أتصل بقاعدة بيانات عبر وصلة دائمة بـ Apache.



    $dbh ||= DBI->connect('dbi:Pg:dbname=DATABASE',"","", {PrintError=>0});

    if ($dbh ) {$dbh->{PrintError} = 1;}
    else
    {$dbh ||= DBI->connect('dbi:Pg:dbname=DATABASE;host=127.0.0.1' ," ","",
    {PrintError=>1});}

    المصدر : http://httpd.apache.org/dist/httpd

    صرّف Compile أباش ثم ثبِّته في المجلد/usr/local/apache . ثم اعمل بمخطوط برل :

    cd /chroot
    # Uncomment the next line if you don't use my config file.
    # ./Config_Chroot.pl config httpd
    ./Config_Chroot.pl install httpd
    ./Config_Chroot.pl start httpd

    عدلت ملفي httpd.conf لأحصل على .

    ExtendedStatus On

    <Location /server-status>
    SetHandler server-status
    Order deny,allow
    Deny from all
    Allow from 127.0.0.1
    </Location>

    <Location /server-info>
    SetHandler server-info
    Order deny,allow
    Deny from all
    Allow from 127.0.0.1
    </Location>




    ثم تصفح http://127.0.0.1/server-status أو /http://127.0.0.1/server-info و تفحصها.




    استجذار Ssh :


    أولا لابد أن تبدل ssh من المنفذ 22 إلى المنفذ 2222، ثم لما تبدأ ssh فسينصت إلى المنفذ 2222 من غير حساب الجذر. للاتصال بـ ssh اول مرة ينبعي وجود حساببات محصنة بكلمات سر، للسماح للآخرين بالدخول فقط لا غير. بعد الدخول لديهم برنامج ssh آخر يعمل على المنفذ 127.0.0.1:2322 ليتصلوا بالنظام الفعلي-- برنامج ssh الثاني يجب أن ينصت إلى جهاز الحلقة المفرغة loopbackفقط. الآن هذا ما عليك عمله، نحن لن نعمل ذلك، كل ما سنفعله أن تستجذر ssh في هذا المثال. و تركنا للقارئ تمارين يجربها بأن يضع sshd في حساب غير الجذر و يثبت sshd ثانيا ينصت إلى الحلقة المفرغة، ليجعل الآخرين يتصلون بالجهاز الفعلي .

    مرة أخرى، سنستجذر ssh فقط، و نذكرك بنتائج ذلك إذ لن يمكنك رؤية نظامك كاملا ( إن فعلت هذا فحسب ). و هذا مثالي لجعل الدخولات بعيدا عن الموقع. كذلك كان علينا أن نستعمل OpenSSH لكنني استعملت ssh التجاري للتيسيير ( و هذا ليس عذرا).

    المصدر : http://www.ssh.com/products/ssh/download.cfm

    ثبّت ssh في /usr/local/ssh_chroot. ثم استعمل مخطوطة برل.



    cd /chroot
    # Uncomment the next line if you don't use my config file.
    # ./Config_Chroot.pl config sshd
    ./Config_Chroot.pl install sshd
    ./Config_Chroot.pl start sshd



    اعتقد أنّ الجيد في استجذار ssh أنك إن رغبت في استبدال خادم نقل الملفات ftp، فستحدّ من مجال دخول الجمهور إلى منطقتك. البرنامجان rsync و SCP يعملان معا لتمكين الناس من تنزيل النلفات (upload) . و أنا لا أحبذ أن أجعل خادما لنقل الملفات يمكن للناس دخوله. خوادم ftp المستجذرة كثيرة أيضا، لكنها ما زالت ترسل كلمات السر واضحة، و هذا ما لا أحبذه.




    استجذار PostgreSQL :


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

    المصدر: ftp://ftp.us.postgresql.org/source/...ql-7.1.3.tar.gz

    صرّف apache ثم ثبتّه في /usr/local/postgres. ثم استعمل مخطوطة برل.



    cd /chroot
    # Uncomment the next line if you don't use my config file.
    # ./Config_Chroot.pl config postgres
    ./Config_Chroot.pl install postgres
    ./Config_Chroot.pl start postgres






    استجذار Sendmail :


    اذهب رأسا و نفّذ مخطوطتي .



    cd /chroot
    # Uncomment the next line if you don't use my config file.
    # ./Config_Chroot.pl config sendmail
    ./Config_Chroot.pl install sendmail
    ./Config_Chroot.pl start sendmail



    أما من مشكل؟ بلى، إنه يعمل في حساب الجذر، و كذلك نشأت بعض الملفات في /etc/rc.d/init.d/sendmailعند انطلاقه . مخطوطتي لم تحتسب ذلك. أرجو منك أن تنسخ التعديلات إلى /chroot/sendmail/etc كلما عدلت /etc/mail كما عليك أن تجعل /var/spool/mail يشير إلى /chroot/sendmail/var/spool/mail حتى يستطيع برنامج sendmail و مستعمليه رؤية الملفات نفسها.

    الإرسال لا شية فيه، لكن الاستقبال به مشكلة، اذ استطعت أن أثبّت sendmail مع apache دون مشكلة. بعض مخطوطاتي ترسل البريد، و احتاج أن تنسخ ملفات sendmail إلى منطقة استجذار apache.


    أمور أخرى للاستجذار
    فلسفتي هي أنّ:

    أيّ شيء يجب أن يستجذر بما فيها sendmail و ssh و apache و postgresql و syslog و كل الخدمات على الحاسوب.
    أيّ شيء يجب أن يعمل في غير حساب الجذر ( عليك أن تنقل المنافذ المحصنة إلى منافذ غير محصنة). هذا ما يشمل sendmail و syslogd كذلك.
    الدخولات يجب أن ترسل بعيدا عن الموقع.
    كل خدمة لابد لها من جزء من القرص، حتى نحد من مساحة القرص التي قد يستعملها الهاكر، إن رغب أن يكتب ملفات ما. يمكنك أن تستعمل الحلقة المفرغة لتركيب الملفات على نظام الملفات لبعض الخدمات إن كنت تعمل خارج أجزاء القرص.
    الجذر يجب أن يمتكل كل الملفات التي لم تعدّل.
    و الآن حين وصلنا إلى syslogd و sendmail مازلت أعتقد أنهما يجب أن يعملا في غير حساب الجذر. أما sendmail فقد استعصى علي إعماله في غير حساب الجذر، هذا يعوقني، و لا بد أن هناك مشكلا ما، لكنني مصر على أن ذلك ممكن. و إذا كانت أذونات الملفات تحاط بعناية فإنني أعجب أن لا يعمل sendmail في حساب الجذر. لابد من سبب لهذا لا أعلمه بيد أنني أشك أن هذا العائق لا يمكن تجاوزه.

    أما syslogd فلم أجربه بعد، و أود أن أرى الدخولات تعمل في غير حساب الجذر. لكنني لا أعلم لماذا يستعصي. على الأقل قدرت أن استجذره مع كل خدمة على حدى.

    الخدمات كلها يجب أن تعمل في غير حساب الجذر، حتى NFS، كلها.


    اقتراحات
    استعمل دخولين لssh و شغّل ديمونين ( اثنين) لـ sshd.
    لا تجعل sendmail و لا أي برنامج بريد آخر يعمل في غير حساب الجذر.
    تخلص من كل المكتبات غير الضرورية من /lib. لقد نسختها كلها لأيسر على نفسي، لكنك لن تحتاج معظمها.
    ادخل بـ syslogd لتجد إن أمكن ربط syslogd إلى منفذ الشبكة، و اجعل كل الخدمات تتصل بمنفذ الشبكةعبر الحلقة المفرغة. تحقق إن أمكننا إعمال syslogd في غير حساب الجذر.

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

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

    سوف أحضر " كيف يعمل " howto عن الاستجذار، و أدعو من قد يساعدني لتحويل مقالي إلى lyx لأقدر أن أجعله howto للينكس .


    مراجع
    إذا ما عدلت مقالي هذا فستجده في http://www.gnujobs.com/Articles/23/chroot.html

    مصطلحات
    منفذ الأوامر shell
    جلسة session
    اخترق break in
    منفذ port
    حساب غير الجذر non-root account
    ملفات الدخول logs files
    كيف يعمل HowTo
    مخطوطة script
    برل Perl
    صفحة العون man page
    مكتبة librery
    بعيدا عن الموقع- موقع مقفل offsite
    الدخولات logs
    منفذ شبكي network port
يعمل...
X