في الفترة الماضية كنت اعمل على اعداد قوانين للمود سيكورتي، وبعد الانتهاء منها بدأت بمرحلة الاختبار والتنقيح. وفي اثناء تنفيذ بعض الاختبارات الصعبة لاحظت ان الطلب او الـ Request يتأخر او يعتبر من الطلبات الثقيلة على الـ Apache.
وبعد بعض التجارب طلعت بحلول حلوة. بهذه التدوينة راح اشرح بعض الطرق لتحسين قوانين المود سيكورتي، بحيث لما تجي تكتب قوانين بنفسك تعرف ايش الطرق الي تعطيك قوانين نظيفة وسهلة التنفيذ على المعالج. لن ادخل في امثلة صعبة او معقدة لكن كافية بشكل توضحلك الفكرة.
مثال: لنفرض اننا لدينا القوانين التالية
START
SecRule REQUEST_URI "\phpshell"
SecRule REQUEST_URI "\commander\.php\?&cmd"
SecRule REQUEST_URI "\r00r\.php\?&cmd=chmod"
SecRule REQUEST_URI "\lolshell\.php\?&cmd=chown"
SecRule REQUEST_URI "\phpshell\.php\?&cmd=ls&d"
SecRule REQUEST_URI "\shell\.php\?&cmd=sql"
SecRule REQUEST_URI "\r00r\.php\?&act=chmod"
SecRule REQUEST_URI "\lolshell\.php\?&act=chown"
SecRule REQUEST_URI "\phpshell\.php\?&act=ls&d"
SecRule REQUEST_URI "\shell\.php\?&act=sql"
SecRule REQUEST_URI "\r00r\.php\?&command=chmod"
SecRule REQUEST_URI "\lolshell\.php\?&command=chown"
SecRule REQUEST_URI "\phpshell\.php\?&command=ls&d"
SecRule REQUEST_URI "\shell\.php\?&command=sql"
SecRule REQUEST_URI "\shell11234\.php\?&act"
SecRule REQUEST_URI "\rootshell\.php\?&command"
SecRule ARGS "\shell"
SecRule REQUEST_LINE "/niceshell\.txt"
END
الان لو جمعنا القوانين هذه سوف يكون لدينا 23 قانون. السؤال هنا، كيف نقوم بتحسينها؟ الجواب هو عن طريق دمج ماسبق بداخل قانون واحد، كالتالي.
بعد التحسين
START
SecRule REQUEST_URI|ARGS|REQUEST_LINE "/[A-Za-z0-9]\.(txt|php)\?&(cmd|command|act)=(chmod|chown|ls&d|sql&)"
END
مثل ما تلاحظون، تم دمج 23 قانون بداخل قانون واحد باستخدام الريجيكس.
ولو اردنا اضافة تفاعل خاص مع القانون هذا، والتفاعل يعني الـ Action خاص بالقانون ويتم تنفيذة في حال تطابق الـ REQUEST مع الـ RULE المعني.
بعد اضافة التفاعل الخاص
START
SecRule REQUEST_URI|ARGS|REQUEST_LINE "/[A-Za-z0-9]\.(txt|php)\?&(cmd|command|act)=(chmod|chown|ls&d|sql&)" \
"deny,log,auditlog,msg:'Bad Request',id:'000000',severity:'2'"
END
وبهذا نكون اختصارنا 23 قانون بداخل قانون واحد مع اضافة تفاعل خاص مع القانون السابق. وعند تنفيذ طلب معين سوف يمر على قانون واحد فقط بدل من ان يمر في 23 قانون.
قد تكون كفكرة سهلة جداً، ولكن تنفيذها صعب لمن لا يجيد التعامل مع regular expression في كتابة الاكواد.
ويجب ان تكون حذر جدًا اثناء كتابة القوانين بهذا الشكل، اي خطأ قد يسبب مشاكل كثيرة ومن ضمنها توقف apache عن العمل. ولكن استخدام الاساليب هذه بالشكل السليم ستعطيك نتائج جيدة من حيث الاداء عمومًا.
تحياتي، مصطفى.
📮 المتابعة عبر البريد الالكتروني
عند الاشتراك سيصلك جديد منشوراتي ومقالاتي على ايميلك. لا يتم نشر اي اعلانات ابدًا، فقط المقالات التي انشرها هنا في مدونتي هذه.
التعليقات: 6 On تحسين قوانين المود سكيورتي لتقليل الضغط على الخادم
السلام عليكم ورحمة الله وبركاته
تسلم ايدك يابوصطيف مجهود شخصى رائع ماقصرت حبيب قلبى
يعطيك العافية على الشرح الوافي
تقبل مروري
شكرا يا مصطفي علي المعلومات الجميله في المدونه هنا ويارب الي الاحسن والافضل
شكرا اخي الكريم
معلومات حلوه
ممكن تضع لنا رولز كامل وشكرا
يعطيك العافية اخي مصطفى لدي طلب ان امكنك تحقيقه هل يوجد لديك قواعد جيدة لموقعي ؟ موقعي عبارة عن منتدى vb4 + مدونتين ورد بريس آخر اصدار +سكربت ترايدنت لرفع الصور هل اجد لديك قواعد لوضعها لدي بالمود سكيوريتي انا نصبته لكن لا خلفية لي بتاتا بالقواعد اذا امكن تزودني بها
الله يعافيكم يااخوان.
@محمد
@مهند
اعتذر لكم. لايوجد لدي قوانين غير التي اكتبها “لعملي”. على اي حال, هنالك قوانين مجانية وهي جيدة.
تجدونها على الرابط
http://www.owasp.org/index.php/Category:OWASP_ModSecurity_Core_Rule_Set_Project#tab=Download
مصطفى.