النتائج 1 إلى 9 من 9

الموضوع: تأمين الـphp على سيرفرات اللينكس (تجارب وحلول)

  1. #1
    عضو
    تاريخ التسجيل
    Feb 2005
    المشاركات
    24
    الدولة: Oman
    معدل تقييم المستوى
    0

    تأمين الـphp على سيرفرات اللينكس (تجارب وحلول)

    بسم الله الرحمن الرحيم

    سنتكلم اليوم بشكل مبسط عن حماية الـphp ,,,وهذا الدرس يعتبر الدرس الاول من سلسلة دروس حماية السيرفرات

    ماذا تحتاج لكي تبدأ هذا الدرس:_
    1-المام بسيط بأستعمال محررات لينكس سواء nano او pico او غيرها...
    2-ذهن صافي بالاضافه للحذر عند التعديل على الملفات.

    ما اللذي قد تستفيدة من قرائتك لهذا الدرس:_
    1-سوف تتمكن من معرفه اساسيات حماية الـphp
    2-سوف تستطيع زياده حماية بيئه الـphp على سيرفرك
    3-سوف تتمكن من تعطيل شلات الphp (phpshell) بشكل جيد
    4-سوف تتغلب على ثغرات تخطي الـsafe_mod
    5-سوف تتمكن من حل مشاكل تعطل دوال الـphp ومشاكل تعارض الـsafe_mode مع السكربتات المركبه على سيرفرك

    بسم الله,,,

    سنعتمد بدرسنا على نظم الحماية المبنية داخل مترجم الphp نفسه واللتي للأسف ليست مفعله من الاساس

    اولا Safe_Mode
    هي ميكانيكة حماية موجوده داخل مترجم الphp وعند تفعيله يقوم بالتالي او اكثر:-

    1- يقوم مترجم الـphp بمقارنة مالك السكربت مع مالك الملف وذلك عن طريق كل من
    GID او رقم المجموعة (group ID) + والـUID او رقم المستخدم (user ID) وفي حالة تطابقها يسمح للسكربت بالتعامل مع الملف سواء كانت قرأه او كتابه حسب الصلاحيات.
    ولكن ما اللذي نستفيده من كل هذا؟؟؟
    قف لحضة!!!
    قبل ان تسئل هذا السؤال هل كنت تعرف ان نظام لينكس يضع الملفات تحت قيمتين وهما رقم المجموعة ورقم المستخم ,,, بمعنى
    لو كنت بوضع root وقمت بأنشاء ملف ولنقل test.php عند تطبيق الامر ls -l سيكون المخرج كالاتي:-
    كود:
                                                 -rw-r--r--   1 root root     0 Aug 12 23:25 test.php
    root <<<< الاول من اليسار يرمز الى رقم او اسم المستخدم
    root <<<< الثاني يرمز الى رقم المجموعة

    وببساطة لو قمت بتطبيق الامر التالي chgrp 500 test.php
    سيكون المخرج قريبا من الاتي
    كود:
                                                 -rw-r--r--   1 root  500     0 Aug 12 23:25 test.php
    ومن الواضح اناا قمنا بتغيير رقم المجموعة بالامر chgrp ويمكنك ايضا استخدام الامر chown لتغيير مالك المجموعة

    الان بعد هذا كله : ما اللذي سوف نستفيدة ايضا

    مثلما ذكرنا ان في حاله تفعيل الـsafe_mode سيمنع النظام ملفات او سكربتات الـphp من قرائة الملفات اللتي لا تحمل نفس المالك ....
    وبذلك قد نظمن عزل المواقع عن بعضها على اقل تقدير
    مثال:
    لو حاول احد المخترقين استغلال احد الثغرات او الملفات الموجوده داخل الموقع للحصول على ملف passwd((الملف يحتوي معلومات المستخدمين ومسارات ملفاتهم)) الموجود بالمسار etc فأن النظام سوف يمنعه لان مالك السكربت ((الموجود نظريا ضمن ملفات الموقع)) يحمل رقم مستخدم ورقم مجموعه مختلف عن ملف passwd

    لاحظ الاتي:
    لو افترضنا وجود السكربت التالي على احد المواقع
    كود:
    <?php
     readfile('/etc/passwd');
    ?>
    وحاولنا تشغيله فسوف تضهر رساله قريبه من التالي :
    كود:
    Warning: SAFE MODE Restriction in effect. The script whose uid is 500 is not 
    allowed to access /etc/passwd owned by uid 0 in /username/script.php on line 2
    مما يعني منع المستخدم من قرأه الملف

    2- يقوم مترجم الـPHP بمنع الدوال اللتي تقوم بتشغيل برامج النظام وتقوم بتنفيذ الاوامر مثل system() و exec() من العمل مما يعني تعطيل اغلب مميزات ملفات الشل عن العمل والدوال اللتي يقوم المترجم بمنعها هي كالاتي:

    كود:
    escapeshellarg , escapeshellcmd ,exec,passthru,proc_close,proc_open(),proc_get_status,proc_nice,proc_open,,proc_terminate,shell_exec,system
    وطبعا سنرى كيف يمكننا تعطيلها نهائيا عن العمل بطريقه اخرى ....طبعا يجب ان تعلم ان الحماية سلاح ذو حدين فأن قمت بتكثيفها سوف تسبب مشاكل للمواقع المستضيفه لان بعض البرامج لا تعمل الا في حاله عمل هذه الدوال لذلك يجب الاقتصاد بهذا الجانب وسنرى ايضا كيف يمككننا حل كل مشاكل التعارض بالدرس... تابع....

  2. #2
    عضو
    تاريخ التسجيل
    Feb 2005
    المشاركات
    24
    الدولة: Oman
    معدل تقييم المستوى
    0

    مشاركة: تأمين الـphp على سيرفرات اللينكس (تجارب وحلول)

    safe_mode_gid :
    قلنا بالسابق انه في حاله تفعيل safe_mode فأن المترجم سيتأكد من مالك الملف عن طريق كل من UID و GID وعند تفعيل safe_mode_gid سيقوم النظام بالتأكد من UID فقط وسيتجاهل قيمه GID .

    safe_mode_include_dir :
    بهذا الخيار نقوم بتحديد مسار معين وهذا المسار سيكون متجاهلا من قبل مترجم الphp أي انه لن يقوم بعمل مقارنه للUID والGID

    safe_mode_exec_dir :
    بهذا الخيار يمكنك وضع مسار امن يمكن للدوال مثل system() من تشغيل البرامج حيث سيقوم المترجم بتجاهلها داخل مجلد المسار والملفات الموجوده بداخله

    open_basedir:
    هنا بأمكاننا اعطاء المسارات الامنه اللتي نريد السماح لملفات الـphp بالتعامل معها وهذا الخيار ليس مرتبطا بحاله safe_mod
    وعموما في حاله تفعيلنا للخيار يجب السماح لملفات الـphp بالعبور للمسارات الاتية
    كود:
    /usr/lib/php
    /usr/local/lib/php
    /tmp
    بالاضافه الى مجلدات المستخم طبعا :D
    وعموما تكون تحت المسار /home
    لكني افضل استخدام هذا الخيار من الـwhm وانصح الجميع بأستخدامة من هناك لكن قمت بالتوضيح لكي يكون الشرح عام لأغلب الانظمة ولوحات التحكم

    disable_functions:

    هنا نقوم بتحديد الدوال اللتي نريد اغلاقها واللتي تشكل خطرا على النظام وستم ذكرها بالقسم التطبيقي من الشرح

    register_globals:
    عندما تكون قيمة هذا الخيار On فأنه قد يشكل خطرا كبيرا على برامج حيث يقوم بتسجيل كل المدخلات سواء كانت من البيئه او GET او POST او ****IES كـ global variable وينصح بشده وضع الخيار بحاله off ولتفاصيل اكثر يمكنك سؤال مبرمجي الـphp

    :allow_url_fopen
    اغلبنا لاحظ انتشار ثغرات الـfile include واغلب الاخطاء البرمجيه تمكن المخترق من اسدعاء ملف داخلي وتكون الثغره local او محلية اي انه يمكنه اسدعاء ملف passwd لكن قمنا بتقليل خطورتها بتفعيل safe_mode لكن تبقى ثغرات الـremote ويأتي دور الداله هنا حيث تمنع ذلك مما يقلل من خطوره هذه الثغرات الى ابعد حد ولن يتمكن المخترق من سحب الشل من مواقع خارج السيرفر وسنتعلم تفعيلها للمواقع اللتي تحتاجها لتجنب حدوث التضارب مع برامج العملاء .

    اخيرا وليس اخرا expose_php :
    سنقوم بأعطائها قيمه off لكي لا يقوم مترجم الـphp بأرسال معلومات عن نفسه بداخل HTTP header

  3. #3
    عضو
    تاريخ التسجيل
    Feb 2005
    المشاركات
    24
    الدولة: Oman
    معدل تقييم المستوى
    0

    مشاركة: تأمين الـphp على سيرفرات اللينكس (تجارب وحلول)

    بعد ان اخذنا جوله جيده على اساسيات وميكانيكيات الحماية بالـphp سنتجه الى الجانب التطبيقي وكيف يمكننا اعداد الphp لكي تعمل بأمان على سيرفراتنا بدون ادنى جهد.
    واريد ان اذكر هنا انه يجب الحذر الشديد عند التعامل مع ملفات الاعداد مثل php.ini و httpd.conf اوا اي ملف مرتبط بها حيث انها حساسه جدا واي خطأ بأدخال البيانات سوف يسبب خطأ عند اعاده تشغيل الapache لذلك يجب الانتباه .

    سينقسم الشرح الى جانبين
    الاول تركيب الحماية والثاني سوف يكون عن تهيئه بيئه الphp للعملاء على السيرفر فيما يتناسب مع احتياجات برامجهم ,,, فيوجد بعض البرامج اللتي تطلب تفعيل الـregister_globals او الـsafe_mode على سبيل المثال وبالتأكيد لن نريد خساره العميل لعدم توافق بيئه السيرفر مع سكربتات موقعه ومن جانب اخر لا نريد فقدان الحماية على السيرفر اي يجب ان نبقي عى شعرة معاوية بيننا وبين العميل .


    اولا تركيب الحماية :
    ___تنبيه____تنبيه___تنبيه___
    تأكد من عمل نسخه احتياطية لملف php.ini قبل الشروع بالتعديل عليه
    ___تنبيه____تنبيه___تنبيه___

    يلزم لكل ما سبق انا نقوم بتحرير ملف php.ini على حسب احتياجاتك الخاصه (سأقوم هنا بوضع اعدادات سيرفري) وسوف تجده بالمسار التالي
    كود:
    /usr/local/lib
    او بالمسار التالي اذا كنت تملك الـZend_optemizer على سيرفرك
    كود:
    /usr/local/Zend/etc/
    قم بتطبيق الامر التالي
    nano php.ini او pico php.ini على حسب المحرر الموجود على سيرفرك
    الان سنعدل على الخيارات خطوه وخطوه وافضل عمل رستارت للـapache بعد كل تعديل لكي نتمكن من تعديل الخطأ بسرعة في حاله حدوثه

    1-الان قم بالبحث عن safe_mode بواسطة ctrl+w او بالبحث يدويا عنه
    وقم بالتعديل عليه لكي يصبح
    كود:
    safe_mode = On
    2- ابحث عن safe_mode_gid وتأكد من ان قيمته كالاتي
    كود:
    safe_mode_gid = Off
    3- ابحث عن disable_functions
    وهنا سوف نقوم بتعطيل الدوال الخطره + تعطيل الدوال تخطي الـsafe_mode حيث للأسف لم يقم فريق الـphp بفعل اي شيء حيال الثغرات المكتشفه على حسب علمي
    عموما من الافضل ان تعطل الدوال التالية
    دوال ثغره تخطي السيف مود :
    كود:
    copy,error_log,tempnam,curl_init
    دوال php الخطيره:

    كود:
    system,passthru,exec,popen,proc_close,proc_get_status,proc_nice,proc_open,proc_terminate,shell_exec,highlight_file,escape
    shellcmd,pclose,pfsockopen,chgrp,chmod,debugger_off,debugger_on,leak,listen,define_syslog_variables,ftp_exec,posix_uname,posix_getpwuid,get_current_user,getmyuid,getmygid,apache_child_terminate,posix_kill,posix_mkfifo,posix_setpgid,posix_setsid,posix_setuid,pfsockopen,chgrp,chmod,debugger_off,debugger_on,leak,listen,define_syslog_variables,ftp_exec,posix_uname,posix_getpwuid,get_current_user,getmyuid,getmygid,apache_child_terminate,posix_kill,posix_mkfifo,posix_setpgid,posix_setsid,posix_setuid,escapeshellarg,getservbyport,getservbyname,myshellexec,escapeshellarg
    وتأكد من كتابتها على سطر واحد عند تحريرها داخل ملف php.ini والا ستسبب مشكله عند التشغيل (اكرر على سطر واحد)

    4- قم بالبحث عن register_globals وتأكد من ان قيمتها كالاتي
    كود:
    register_globals = Off
    5- قم بالبحث عن allow_url_fopen وتأكد من ان قيمتها كالاتي
    كود:
    allow_url_fopen = Off
    6-قم بالبحث عن expose_php وتأكد ان قيمتها كالاتي
    كود:
    expose_php = off
    والان قم بعمل اعادة تشغيل للـapache سواء عن طريق لوحة تحكم السيرفر او عن طريق الامر التالي
    كود:
    httpd restart
    وسوف يكون المخرج كالتالي
    كود:
    /usr/sbin/httpd restart: httpd restarted
    وفي حالة ظهور اي خطأ سوف تكون المشكله بسبب التعديل بطريقه خاطئه فقم بمراجعة تعديلاتك

  4. #4
    عضو
    تاريخ التسجيل
    Feb 2005
    المشاركات
    24
    الدولة: Oman
    معدل تقييم المستوى
    0

    مشاركة: تأمين الـphp على سيرفرات اللينكس (تجارب وحلول)

    ثانيا تهيئه بيئه الـphp لكي تناسب احتياجات العملاء

    لقد ذكرنا من قبل ان بعض خيارات الـphp قد لا تناسب سكربتات العملاء على السيرفر ولذلك يجب تغييرها وهنا سنتعلم معا كيفيه تغييرها لكل موقع على حده بمعنى,,, لو طلب منك احد العملاء ان تفعل الـregister_globals لموقعة سوف تقوم بتفعيله لملفات موقعه فقط بدون الحاجة لتفعيلة على السيرفر بأكمل ويجدر بي هنا ان اذكر ان هنالك قيمتين لخيارات ملف php.ini واحده تكون local value وهي للموقع فقط والثانية تكون Master value وهي قيمه الخيار للسيرفر بأكمله ويمكنك معرفه كل ذلك بوضع الملف التالي في احد المواقع وطلبه عن طريق المتصفح

    كود:
    <?php
    
    phpinfo();
    
    ?>
    ((سوف نتفق على كلمه "تخصيص" على ان تعني تعديل الخيار او تخصيصه لموقع معين))
    ((نقصد بالخيارات القيم الموجوده بداخل ملف php.ini كالـsafe_mode على سبيل المثال))
    تنقسم الخيارات الموجوده بداخل ملف php.ini الى عده اقسام وهي:

    PHP_INI_USER : ويمكننا تخصيصها من الرجستري في حاله سيرفرات الوندوز.
    PHP_INI_PERDIR : ويمكننا تخصيصها بواسطة ملف .htaccess يوضع بداخل مجلد السكربت او الموقع ويمكننا التعديل عليها ايضا عن طريق ملف httpd.conf
    PHP_INI_SYSTEM : ويمكننا تخصيصها عن طريق ملف httpd.conf فقط
    PHP_INI_ALL : يمكننا تخصيصها عن طريق كل ما سبق

    ((لاحظ ان القيم الاساسيه او الـMaster value نحددها عن طريق ملف php.ini))

    ويمكنك معرفه الخيار والى اي قسم ينتمي عن طريق الوصله التالية https://www.php.net/manual/en/ini.php

    ويتم اعطاء القيم بشكلين مختلفين
    On او Off عن طريق php_flag
    اي سلسه قيم او مسار عن طريق php_value

    بفرض انه بأمكانك تخصيص الخيار عن طريق ملف .htaccess
    يمكنك عمل ملف .htaccess عادي في موقعك واضافه التالي الية
    كود:
    php_flag register_globals on
    وهنا سوف يكون الـlocal value او القيمه المحلية للخيار register_globals بحالة On بالنسبه لملفات موقعك

    وان كان الخيار لا يمكن تخصيصه الا من ملف httpd.conf كالـsafe_mod على سبيل المثال حيث انه يقع ضمن قسم PHP_INI_SYSTEM اللتي لا يمكن تخصيصها الا من ملف httpd.conf
    فقم بالتعديل على ملف httpd.conf بالمسار
    كود:
    /usr/local/apache/conf
    بواسطة المحرر peco او nano وابحث عن عنوان الموقع username.com

    وتأكد ان كل ما تقوم بكتابته يقع ضمن نطاق اعدادات الموقع
    وسوف يكون بالشكل التالي على فرض ان الموقع هو www.oman-web.com واسم المستخدم هو omanweb
    كود:
    <VirtualHost 208.101.28.63>
    ServerAlias www.oman-web.com
    ServerAdmin webmaster@oman-web.com
    DocumentRoot /home/omanweb/public_html/
    BytesLog domlogs/oman-web.com-bytes_log
    ServerName oman-web.com
    
    <IfModule mod_php4.c>
      php_admin_value open_basedir "/home/omanweb:/usr/lib/php:/usr/local/lib/php:/tmp"
      php_admin_flag register_globals on
      php_admin_value disable_functions none
    </IfModule>
    <IfModule mod_php5.c>
      php_admin_value open_basedir "/home/omanweb:/usr/lib/php:/usr/local/lib/php:/tmp"
    </IfModule>
    
    User omanweb
    Group omanweb
    CustomLog /usr/local/apache/domlogs/oman-web.com combined
    ScriptAlias /cgi-bin/ /home/omanweb/public_html/host/cgi-bin/
    </VirtualHost>
    تأكد انك تقوم بالتعديل بين كل من
    كود:
    <VirtualHost 208.101.28.63>
    ..............................
    ..............................
    ....................
    </VirtualHost>
    وسنخصص على حسب اصداره الphp لدينا فأن كانت 4
    نعدل بين
    كود:
    <IfModule mod_php4.c>
    ..................................
    ..............................
    ........................
    </IfModule>
    وان كنا نستخدم الاصداره الخامسة

    كود:
    <IfModule mod_php5.c>
    ...............................
    ...........................
    ........................
    </IfModule>
    -------------------------------
    ويكون التعديل كالتالي
    php_admin_flag لأي قيمه On او Off
    و
    php_admin_value لأي سلسه من القيم او مسار ملفات
    وطبعا من الممكن ان تكون القيمه none كالمثال بالاعلى
    كود:
      php_admin_value disable_functions none
    او
    كود:
    php_admin_value open_basedir "/home/omanweb:/usr/lib/php:/usr/local/lib/php:/tmp"
    وتأكد من كتابتها بنفس الطريقه الموضحة

    بالنهاية ارجوا ان تعلم اخي القاريء ان الدرس جاء خلاصه لتجارب وقرائات عديدة في مده ليسة ببسيطة فالرجاء نشره مع حفظ حقوق الكاتب وارجوا المعذره عن اي تقصير فني او لغوي من تجاهي



    كل الشكر للأخوة في عمان وب للمساهمه بأنجاح الدرس
    بالتوفيق

    كل الحقوق محفوظه لـ فيروس تايب ــ 13/8/2006

  5. #5
    عضو فضي الصورة الرمزية adam black ice
    تاريخ التسجيل
    Mar 2006
    المشاركات
    2,072
    معدل تقييم المستوى
    21

    مشاركة: تأمين الـphp على سيرفرات اللينكس (تجارب وحلول)

    ممتاز ما شاء الله استمر ........

    هل تحب ان انقلها لدروس اللينوكس ام تفضل وجودها هنا ؟.

    Knowledge is belong to human

  6. #6
    المشرف العام الصورة الرمزية Ibrahim.Hamdy
    تاريخ التسجيل
    Oct 2002
    المشاركات
    5,064
    الدولة: United Arab Emirates
    معدل تقييم المستوى
    75

    مشاركة: تأمين الـphp على سيرفرات اللينكس (تجارب وحلول)

    رائع ما شاء الله ,,,,
    أفضل بقائها هنا
    حيث القسم المناسب ...

  7. #7
    عضو
    تاريخ التسجيل
    Feb 2005
    المشاركات
    24
    الدولة: Oman
    معدل تقييم المستوى
    0

    مشاركة: تأمين الـphp على سيرفرات اللينكس (تجارب وحلول)

    اهلا بكم اخواني
    افضل بقائها هنا بسبب ارتباطها بالامن بشكل عام
    شكرا جزيلا

  8. #8
    عضو فضي الصورة الرمزية adam black ice
    تاريخ التسجيل
    Mar 2006
    المشاركات
    2,072
    معدل تقييم المستوى
    21

    مشاركة: تأمين الـphp على سيرفرات اللينكس (تجارب وحلول)

    اهلا بك

    ونرحب بمشاركاتك الاخرى

    Knowledge is belong to human

  9. #9
    عضو فضي الصورة الرمزية hamad
    تاريخ التسجيل
    Jul 2003
    المشاركات
    1,512
    الدولة: Kuwait
    معدل تقييم المستوى
    26

    مشاركة: تأمين الـphp على سيرفرات اللينكس (تجارب وحلول)

    سلام.
    شكرا اخي علي هذا الموضوع.
    و ايضا من اهم البرامج لحمايه ال php هو تركيب mod_security بالاباجي.

    https://www.modsecurity.org

المواضيع المتشابهه

  1. تأمين الشبكة اللاسلكية باستخدام WEP
    بواسطة علي2060 في المنتدى الأرشيف
    مشاركات: 58
    آخر مشاركة: 28-02-2014, 04:29
  2. ماهو الكورس المناسب لادارة سيرفرات اللينكس
    بواسطة ma33moudnet في المنتدى الأرشيف
    مشاركات: 2
    آخر مشاركة: 26-03-2013, 21:50
  3. مشاركات: 0
    آخر مشاركة: 19-03-2010, 22:43
  4. أريد تعليم الـPHP
    بواسطة GALAGEEL في المنتدى البرمجه والتصميمات الفنيه ( الجرافيكس )
    مشاركات: 1
    آخر مشاركة: 29-05-2006, 18:01
  5. تأمين الشبكة اللاسلكية
    بواسطة Mohammad Fawzy في المنتدى الأرشيف
    مشاركات: 7
    آخر مشاركة: 05-06-2005, 16:42

الكلمات الدلالية لهذا الموضوع

المفضلات

ضوابط المشاركة

  • لا تستطيع إضافة مواضيع جديدة
  • لا تستطيع الرد على المواضيع
  • لا تستطيع إرفاق ملفات
  • لا تستطيع تعديل مشاركاتك
  •