Professional Documents
Culture Documents
1
عن الكاتب
محمد بن سعود الدهٌمً
مطور ومبرمج مواقع وأنظمة ,وكذلك مهتم فً أمن المعلومات .له عدة
مشارٌع ومواقع من ضمنها موقع تجارب . www.tagarub.com
2
فهزس انًحتىياث
7
................................
............. ................................................................................................ المقدمـــــة
7.. ................................................................................................
................................ أهداف الكتاب :
7................................................................................................
.............................. ٌهدف الكتاب إلى :
7.. ................................................................................................
................................ منهجٌة الكتاب :
8
............................
................................................................................................ األدوات المستخدمة :
8
...........................
................................................................................................ الدوافع وراء الكتاب :
ٕٔ.. ................................................................................................
................................ مفاهٌم البد منها :
ٕٔ
....................
................................................................ أمن المعلومات][IA] [InformationAssurance
ٕٔ
...................
................................................................ سرٌة المعلومات ][IS] [Information Security
ٕٔ
................................
............ ................................................................ شروط تصمٌم نظام برمجً آمن
ٖٔ
................................
......... ................................................................ عناصر األمان فً نظام المعلومات
ٗٔ
................................
............... ................................................................ الثغرات ]:[Vulnerability
ٔٗ................................................................................................
............................... الخطر ]: [Risk
ٔٙ
....................
................................................................................................ أنواع الهجوم ][Attacks
ٔ7
............................
................................................................................................ الجرائم اإللكترونٌة
ٕٓ
................................
.............. ................................................................ ً
وحدوثا أكثر عشرٌن ثغرة انتشارً ا
ٕٔ
............................. عدم التحقق من صحة المعلومات المدخلة بشكل صحٌح ][Improper Input Validation
ٕ٘
................................
......... الحلول المتوافرة لمشكلة (عدم التحقق من صحة المعلومات المدخلة بشكل صحٌح )
ٖٔ
...................
................................ الطلبات المزٌفة عبر الموقع ][Cross-Site Request Forgery] [CSRF
ٖ8
................................
............. ................................ الحلول المتوفرة لمشكلة (الطلبات المزٌفة عبر الموقع)
ٖٗ
......................
................................................................ الحقن االستعالمٌة ][SQL Injection] [SQLI
ٗ8
........................
................................................................ الحلول المتوافرة لمشكلة (الحقن االستعالمٌة)
ٖ٘................................................................
.............................. اإلخالل بالشروط ][Race Condition
٘7
.........................
................................................................ الحلول المتوفرة لمشكلة (اإلخالل بالشروط)
ٓٙ
...................
................................ رسائل الخطأ المسربة للبٌانات ][Error Message Information Leak
ٗٙ
................................
......... ................................ الحلول المتوافرة لمشكلة (رسائل الخطأ المسربة للبٌانات)
ٙ9
................................
......... ................................ حقنة أوامر نظم التشغٌل ][OS Command Injection
ٖ7
................
................................................................ الحلول المتوافرة لمشكلة (حقنة أوامر نظم التشغٌل)
7ٙ
.................... نقل البٌانات الحساسة بشكل واضح ][Cleartext Transmission of Sensitive Information
79
................................
... ................................ الحلول المتوافرة لمشكلة (نقل البٌانات الحساسة بشكل واضح)
ٔ8
................................
... التحكم الخارجً بالملفات أو الروابط []External Control of File Name or Path
3
8ٖ. ................................
................................ الحلول المتوافرة لمشكلة (التحكم الخارجً بالملفات أو الروابط)
8ٙ
................................
.......... ................................ البرمجة عبر الموقع ]"[Cross-Site Scripting "XSS
ٕ9
.....................
................................................................ الحلول المتوافرة لمشكلة (البرمجة عبر الموقع)
97
................................
.... ................................................................ استدعاء الملفات ][file Inclusion
ٖٓٔ
.......................
................................................................ الحلول المتوافرة لمشكلة (استدعاء الملفات)
ٔٓٙ
................................
.... التحكم الخارجً بحالة المعلومات][External Control of Critical State Data
ٔٓ9.. ................................
................................ الحلول المتوافرة لمشكلة (التحكم الخارجً بحالة المعلومات)
ٖٔٔ
................................
... ................................ مسار البحث غٌر الموثوق ][Untrusted Search Path
٘ٔٔ
................................
........... ................................ الحلول المتوافرة لمشكلة (مسار البحث غٌر الموثوق)
ٔٔ7
.... إغالق أو التخلص من المصادر بطرٌقة غٌر صحٌحة ][Improper Resource Shutdown or Release
ٕٓٔ
................................
......... الحلول المتوافرة لمشكلة (إغالق أو التخلص من المصادر بطرٌقة غٌر صحٌحة)
ٕ٘ٔ
.................
................................................................ الحسابات الخاطئة ][Incorrect Calculation
ٕٔ8
.....................
................................................................ الحلول المتوافرة لمشكلة (الحسابات الخاطئة)
ٕٖٔ
...................
................................................................ حقن النصوص البرمجٌة ][Code Injection
ٖٔٙ
................................
............. ................................ الحلول المتوافرة لمشكلة (حقن النصوص البرمجٌة)
ٖٔ8
................................
........... ................................ اإلنشاء الغٌر صحٌح ][Improper Initialization
ٔٗٔ
..................
................................................................ الحلول المتوافرة لمشكلة (اإلنشاء الغٌر صحٌح)
ٖٗٔ
.......................... التحكم بالوصول بطرٌقة غٌر صحٌحة ][Improper Access Control Authorization
ٔٗ7
............................
................................ الحلول المتوافرة لمشكلة (التحكم بالوصول بطرٌقة غٌر صحٌحة)
ٔٗ9
......... استخدام طرٌقة تشفٌر خطرة أو مدمرة []Use of a Broken or Risky Cryptographic Algorithm
ٔ٘ٔ
..........................
................................ الحلول المتوافرة لمشكلة (استخدام طرٌقة تشفٌر خطرة أو مدمرة)
٘٘ٔ
................................
........... ................................ كلمة المرور المدمجة ][Hard-Coded Password
ٔ٘8
.................
................................................................ الحلول المتوافرة لمشكلة (كلمة المرور المدمجة)
إسناد الصالحٌات غٌر اآلمنة للمصادر الحساسة [Insecure Permission Assignment for Critical
ٕٔٙ
..........................
................................................................................................ ]: Resource
٘ٔٙ
................
................................ الحلول المتوافرة لمشكلة (إسناد الصالحٌات غٌر اآلمنة للمصادر الحساسة)
ٔٙ9
..................
................................................................ الثغرات البرمجٌة التً اهتمتها بها منظمة ][OWASP
ٓٔ7
...........................
................................................................ فٌض الذاكرة ]: [Buffer Overflows
ٔ7ٕ................................................................
.............................. اختراق حساب معٌن و إدارة الجلسات
ٕٔ7
................................
...... ................................ ][Broken Account and Session Management
ٔ7٘.. ................................................................
................................ اإلعدادات الخاصة بالموقع والخادم
ٔ7٘................................
.............................. ]: [Web and Application Server Misconfiguration
4
ٔ79
................................
............ ................................................................................................ التشفٌر
ٔ79
..................
................................................................ التشفٌر المتناظر (: )Symmetric Algorithms
ٔ79
................................
............. ................................ التشفٌر غٌر المتناظر ()Asymmetric Algorithms
ٖٔ8
................................
... ................................ الطرٌقة المبتكرة فً حفظ الحقوق و منع ثغرة الحقن االستعالمٌة :
ٗٔ8
................
................................................................................................ فوائد استخدام هذه التقنٌة :
ٗٔ8
..................
................................................................................................ طرٌقة عمل هذه التقنٌة :
ٔ87
................................
............ ................................................................................................ الخاتمة
5
6
المقدمـــــة
أهذاف انكتاب :
ٌهدف الكتاب إلى :
إبراز أهم المشاكل التً تتعرض لها المواقع اإللكترونٌة ,و عرض وتحلٌلل كلل مشلكلة
برمجٌة بشكل مستقل عن المشاكل األخرى ,وإبراز األخطاء البرمجٌة التً قلد ٌرتكبهلا
كثٌلللر ملللن المبلللرمجٌن,باإلضلللافة إللللى علللرض طلللرق االسلللتغالل الممكنلللة لكلللل ثغلللرة ,
وعللرض وتحلٌللل الحلللول المناسللبة لكللل ثغللرة ,و وضللع بعللض النصللائح لكللً ٌسللتفٌد
ضا تقلٌل وقت المبرمج العربً فً إٌجاد الحلول المناسبة لكلل المبرمج العربً منها .وأٌ ً
مشكلة برمجٌة قد ٌعانً منها,وكذلك إثراء المحتوى العربلً بملا ٌتعللق بالبرمجلة بشلكل
آمللن ,أخٌللرً ا زٌللادة ثقافللة المبللرمج العربللً و جعل ل علللى معرفللة بالمشللاكل التللً قللد
ٌتعرض لها.
ٔ
)php( Hypertext Preprocessorهً لغة نصٌة صممت لبرمجة تطبٌقات االنترنت وهً مفتوحة المصدر ,تستطٌع االستزادة عن طرٌق الرابط :
http://en.wikipedia.org/wiki/PHP
ٕ تستطٌع الذهاب لمنظمة ( [SANS] )Computer Security Training, Network Research & Resourcesعن طرٌق الرابط :
www. SANS.org
ٖ تستطٌع الذهاب لمنظمة ( [OWASP])The Open Web Application Security Projectعن طرٌق الرابط :
www.owasp.org
7
كٌفٌة استغاللها من قبل المهاجم أو المخترق ,وفً الوقلت نفسل إٌجلاد الحللول المناسلبة
والمقترحة للمبرمج العربً لسد هذه الثغرات .
ٗ
PHP Expert Editorهو عبارة عن برنامج ٌحتوي على واجهة رسومٌة تسهل على المبرمج التعامل مع لغة )ٌ, (phpحتوي على أربع أجزاء من
ضمنها محرر للنصوص البرمجٌة ,تستطٌع االستزادة عن طرٌق الرابط http://www.ankord.com/phpxedit.html :
٘ هو عبارة عن حزمة تحتوي على (, Apacheو,PHPو, MySQLو ) phpMyAdminتستطٌع االستزادة عن طرٌق الرابط :
http://www.appservnetwork.com/modules.php?name=Content&pa=showpage&pid=7
ٙ
هو عبارة عن متصفح إنترنت ,وٌستخدم لتصفح المواقع ,و كذلك تمت مبرمج من قبل شركة (, )microsoftلالستزادة عن طرٌق
الرابط http://www.microsoft.com/windows/internet-explorer/default.aspx
7
هو برنامج ٌقوم بفصح المواقع ,واكتشاف الثغرات البرمجة ,وكذلك إعطاء تقرٌر عنها ,لالستزادة عن طرٌق الرابط
http://www.acunetix.com
8
طبق لا ً لصحصللائٌات التللً أجرتهللا م سسللة ] ,[Acunetix8فقللد أظهللرت الدراسللة التللً
أجرٌت فً عام ٕٓٓٙم على أكثر من ٓٓٓٓٔ موقلع إلكترونلً منهلا ٕٖٓٓ موقلع
غٌللر تجللاري أن ٓ %7مللن المواقللع اإللكترونٌللة تتعللرض لمشللاكل أمنٌللة خطللرة تهللدد
استقرار المواقع اإللكترونٌة .
بمتوسللط ٔ %9مللن هللذه المواقللع تعللانً مللن نقللاط ضللعف إمللا أن تكللون ثغللرة حقنللة
االسلتعالم أو مللا ٌعلرف بللـ ] ,[SQL Injectionأو أنهللا تعلانً مللن ثغلرة البرمجللة عبللر
الموقع ]. [Cross-site scripting
ٓ٘ %من ثغرات هذه المواقلع كانلت تشلكلها ثغلرة حقنلة االسلتعالم ,و ٕٗ %كلان ملن
نصٌب البرمجة عبر الموقع ,عزٌزي القارئ هذه النسب مرتفع جلداً وتسلبب أضلرارً ا
وخٌمة للمستخدم النهائً ,أو مدٌر الم سسة ,أو الدائرة الحكومٌة انظر الشكل ٔ .
شكل 0.1
لقد قمت بتجربلة األداة ] [Acunetixعللى ملا ٌقلارب سلبعة مواقلع إلكترونٌلة ,واتضلح
لً أن ستة من هذه المواقلع تعلانً ملن مشلاكل أمنٌلة خطٌلرة ,بلل إن أحلد هلذه المواقلع
وهلو ملن المواقلع المعروفلة بل أكثلر ملن ٗ ٔ7ثغلرة وكانلت ملن نلوع “ البرمجلة عبلر
الموقع” وبال شك أن المواقع األخرى بها ثغرات أمنٌة منوعة ,ففٌها ملا هلو خطلر جلداً
ومتوسط الخطورة ,و ثالثها ,و هو أقلها خطورة ,أو أن ال ٌشكل خطراً نهائٌا ً .
واتضح لً من خالل التجربة أن هنلاك مشلاكل تتعللق بالخلادم ] , [serverفملع األسلف
الشللدٌد ف ل ن كثٌللراً مللن هللذه المواقللع ال تهللتم بالتحللدٌثات الخاصللة بلغللات البرمجللة مثللل
] ,[phpأو قد ال ٌكون لدى صاحب الخادم المعرفة التامة بـالمنافذ ] [portsالتً ٌجب
8
الرابط الخاص بم سسة ] [acunetixهو [http://www.acunetix.com] :
9
إغالقها أو فتحها ,فلذلك ٌجب علٌك أخً المبرمج الحرص الشدٌد عنلد اختٌلار الشلركة
أو المنظمللة التللً سلتمنحك المسللاحة الخاصللة بللك لتضللع موقعللك علٌهللا ,فهنللاك مشللاكل
وثغرات تحدث على مستوى الخادم وهً فً الغالب لٌ للمبرمج سٌطرة علٌها ,وإنملا
التحكم فً هذه الثغرات ٌتم من خالل المدٌر و المس ولٌن عن الخادم ! .
10
11
مفاهٌم البد منها
قبل البدء فً سرد التفاصٌل المتعلقة بالكتاب أجد أن من المالئم توضٌح بعض المفاهٌم
والمصطلحات المهمة التً سترد فً موضوعات الكتاب:
12
السلللالمة والتكاملللل ]:[ Integrityوتعنلللً قلللدرة النظلللام عللللى حماٌلللة نفسللل و فلللرض
خصوصٌة على بٌانات و معلومات المستفٌدٌن بحٌث ال ٌستفٌد منها إال من لل صلالحٌة
لذلك.
القابلٌة للفحص والمراجعة ] :[ Auditabilityهً خاصٌة تمكن من فحلص ومراجعلة
النظلام وٌكلون ذللك علن طرٌلق تقلارٌر تلفللت االنتبلاه إللى سللوك غٌلر مشلروع ملن قبللل
المستخدمٌن .
وٌمكن اختصار مسمٌات المتطلبات بـ ] [CIAكما فً متطلبات سرٌة المعلومات ! .
13
.9تخزٌن المعلومات السرٌة بطرٌقة سرٌة:وٌكلون هلذا باسلتخدام التشلفٌر][Encryption
أو البعثرة]. [Hashing
عززدم اإلنكززار ]ٌ: [Non-repudiationمكللن تطبٌللق هللذا باسللتخدام التوقٌعللات ٓٔ.
الرقمٌة.
انثغزاث ]:[Vulnerability
الثغرة هو ضعف أو خلل بالنظام ٌلتمكن ملن خاللل المهلاجم أو المختلرق ][Attacker
من استغالل النظام بطرٌقلة غٌلر مشلروعة وقلد تسلبب أضلراراً بالغلة .وتنشلأ الثغلرات
نتٌجة أحد األسباب التالٌة:
14
وٌسللتخدم هللذا المصللطلح لوصللف المخللاطر ] [Risksالتللً ٌللتم تفعٌلهللا بوجللود كللل مللن
ضلا مصلطلحً ا عناصر التهدٌد ونقاط الضعف فً المنظومة األمنٌة كما أضاف العلماء أٌ ً
آخر وهو الـتأثٌر الذي ٌحدث الخطر][Impact
كلمللا زادت التهدٌللدات زادت المخللاطر ,وكلمللا زادت نقللاط الضللعف أو الثغللرات فسللوف
ٌزداد الخطر بالـتأكٌد ,ولذلك سوف ٌزداد الخطر بحجم التأثٌر الخاص بالخطر كل .
سوف نأخذ مثاالً مبسطا ً لهذه المعادلة من أرض الواقع ,لدٌك سٌارة لكن اإلنلذار معطلل
وموجودة فً منطقة تعج باللصوص ,كٌف تحسب الخطر هنا؟
الخطلللر = التهدٌلللد (علللدد اللصلللوص) ( Xنقلللاط ضلللعف السلللٌارة) اإلنلللذار المعطلللل X
(خسارتك لهذه السٌارة)
ًإذا الخطر كبٌر ج ًدا ولكن هل ٌمكنك التحكم فً التهدٌلد؟ بلالطبع ال ولكلن ٌمكنلك اللتحكم
فً نقاط الضعف ك صال اإلنذار!
15
أَىاع انهجىو ][Attacks
هجوم التصنت على الرسائل ][Interception Attacks ٔ.
وفكرة عمل هذا الهجوم أن المهاجم ٌراقب االتصال بٌن المرسل والمستقبل للحصول
على المعلومات السرٌة.
هجوم اإلٌقاف ][Interruption Attacks ٕ.
ٌعتمد هذا النوع على قطع قناة االتصال إلٌقاف الرسالة أو البٌانات من الوصول
ضا رفض الخدمة ][Denial of service للمستقبل وهو ما ٌسمى أٌ ً
هجوم تعدٌل الرسالة [Modification Attacks]: ٖ.
هنا ٌتدخل المهاجم بٌن المرسل والمستقبل (ٌعتبر وسٌط بٌن المرسل والمستقبل)
وعندما تصل إلٌ الرسالة ٌقوم بتغٌر محتوى الرسالة ومن ثم إرسالها إلى المستقبل ,
والمستقبل طبعا ال ٌعلم بتعدٌل الرسالة من قبل.
الهجوم المزور أو المفبرك[Fabrication Attacks] . ٗ.
وهنا ٌرسل المهاجم رسالة بوصف جهة ٌعرفها المستقبل وٌطلب من معلومات أو
كلمات سرٌة .والشكل التالً ٌوضح أنواع الهجوم
:Script Kiddies هم من ٌقومون بعملٌات اختراق ولكن لٌسوا على دراٌة عالٌة
باالختراق وأمن المعلومات.
16
أخالقً والعمل األخالقً ! .
Crackers
كلمة Crackerتشٌر إلى الشخص الذي ٌستخدم تقنٌات الـ Hackingفً أمور غٌر
ضا إلى األشخاص الذٌن لدٌهم القدرة على كسر دفاعٌة وإنما ألذى اآلخرٌن .وتشٌر أٌ ً
حماٌة البرامج أو التطبٌقات بشكل غٌر قانونً أو الذٌن لدٌهم مقدرة عالٌة ج ًدا فً
ضا عمل الهندسة العكسٌة Reverse البرمجة والبرمجٌات وٌستطٌعون أٌ ً
Engineeringسواء للبرمجٌات أو لألنظمة.
انجزائى اإلنكتزوَيت
قد ال َتجد كلمة , Cybercrimeأو الجرٌمة اإللكترونٌة فً معجم اللغة اإلنجلٌزٌَّة إالَّ
أن مصطلَح شائع ٌصف األعمال اإلجرامٌَّة المتعلِّقة بالعالم االفتراضً أو اإلنترنت -
كما ٌطلق علٌ -Cyber Spaceوطب ًقا لتعرٌف المجل األوروبً ف نَّ الجرٌمة
اإللكترونٌَّة هً :كل فعل إجرامً ضِ د شبكات الحاسوب أو است ِْخدام شبكات الحاسوب
استِخدا ًما ٌَ َت َرتب علٌه َتهدٌد لِعناصر أمن المعلومات الثالثة (توافر المعلومة ,و سرٌة
المعلومة ,وسالمتها).
: Cyber Laws هً قوانٌن وتشرٌعات تسعى بها الدول للحد من الجرائم اإللكترونٌة.
17
18
19
انتشارا وحدو ًثا التً اهتمت بها
ً أكثر عشرٌن ثغرة
منظمة ][SANS
اهتمت عدد من المنظمات الرسمٌة والجمعٌات بدراسة الثغرات البرمجٌة التً ت ثر
على األنظمة (التطبٌقات) ,وتجعلها عرضة لالختراق ,ومن ثم حدوث خسائر أمنٌة
واقتصادٌة هائلة.ومن أبرز تلك المنظمات منظمة ] [SANSالتً تحرص بصفة دورٌة
ً
حدوثا وانتشارً ا ,وفٌما ٌلً عشرون على إصدار تقارٌر عن أكثر الثغرات األمنٌة
ثغرة التً اهتمت بها ]. [SNAS
الثغرة باللغة اإلنجلٌزٌة الثغرة باللغة العربٌة
Improper Input Validation عدم التحقق من صحة المعلومات المدخلة بشكل صحٌح
Cross-Site Request Forgery CSRF الطلبات المزٌفة عبر الموقع
]SQL Injection [SQLI الحقن االستعالمٌة
Race Condition اإلخالل بالشروط
Error Message Information Leak رسا ل الخطأ المسربة للبٌانات
OS Command Injection حقنة أوامر نظم التشغٌل
Cleartext Transmission of Sensitive نقل البٌانات الحساسة بشكل واضح
Information
External Control of File Name or Path التحكم الخارجً بالملفات أو الروابط
]Cross-Site Scripting [XSS البرمجة عبر الموقع
file Inclusion استدعاء الملفات
External Control of Critical State Data التحكم الخارجً بحالة المعلومات
Untrusted Search Path مسار البحث غٌر الموثوق
Improper Resource Shutdown or إغالق أو التخلص من المصادر بطرٌقة غٌر صحٌحة
Release
Incorrect Calculation الحسابات الخاط ة
Code Injection حقن النصوص البرمجٌة
Improper Initialization اإلنشاء الغٌر صحٌح
Improper Access Control Authorization التحكم بالوصول بطرٌقة غٌر صحٌحة
Use of a Broken or Risky استخدام طرٌقة تشفٌر خطرة أو مدمرة
Cryptographic Algorithm
Hard-Coded Password كلمة المرور المدمجة
Insecure Permission Assignment for إسناد الصالحٌات غٌر اآلمنة للمصادر الحساسة
Critical Resource
.
20
عدم التحقق من صحة المعلومات المدخلة بشكل صحٌح
إن تعامللل النظللام(التطبٌللق) ,أو الموقللع اإللكترونللً مللع المللدخالت المكتوبللة مللن قبللل
المستخدمٌن قد ٌ دي إلى مشاكل ملا للم ٌكلن هنلاك حلذر وحٌطلة ,وٌلزداد األملر تعقٌلداً
عندما ال ٌتعامل النظام مع االستثناءات ] [expectationsفهلذا ٌوللد مشلاكل عدٌلدة ,
9
موقع منظمة الـ ] , http://cwe.mitre.org/top25/#CWE-20 [SANSوضعت منظمة الـ] [SANSأرقامًا لكل ثغرة ,فرقم هذه
الثغرة ][20
21
على سبٌل المثلال رقلم الموظلف ] [identifier employeeهلو رقلم صلحٌح ولكلن قلد
ٌحتللوي علللى أحللرف ! ولللذلك تكللون عملٌللة توقللع المللدخالت عملٌللة صللعبة علللى معظللم
المبرمجٌن وقد ٌحتاج إلى خبراء فً مجال اختبار النظم ]. [testing
على أي مستوى تحدث هذه الثغرة ؟ ما هزً اللغزات التزً تتزأثر بهزا؟ ومزا هزو مسزتوى
خطورتها ؟
تحدث هذه الثغرة على مستوى تصمٌم ,و هٌكلٌة ,و برمجة النظام .
اللغات التً تتأثر بها جمٌع اللغات البرمجٌة بال استثناء وباألخص األنظمة التلً تتعاملل
مع المدخالت من الخارج وكذلك قامت منظمة ] [Sansبتصلنٌف هلذه الثغلرة بأنهلا ذات
خطللورة عالٌللة ] . [Highعزٌللزي القللارئ ,سللوف أبللدأ بشللر األمثلللة بشللكل واف
وبطرٌقة سلسة لكً تتماشى مع جمٌع مستوٌات المبرمجٌن .
?<
class pay
{
{)(function pay
;global $HTTP_POST_VARS
;echo $chargeUser=$price*$qty
}
;}
;)($start_new=new pay
>?
22
فللً المثللال السللابق ٌوجللد خطللأ برمجللً وهللو عللدم التأكللد مللن البٌانللات المسللتقبلة مللن
المستخدم لهذا النظلام ! فملن الممكلن أن ٌقلوم المسلتخدم بوضلع كمٌلة المنلتج علد ًدا سلال ًبا
وبالتلالً سللوف ٌكللون النللاتج مللن العملٌللة الحاسللبة قٌمللة سللالبة وبشللكل تلقللائً سللوف ٌللتم
خصم قٌمة المنتجات من حساب العمٌل ] [chargeUserمع أن المفروض عكل ذللك
!
لتقرٌب الفكرة ! لو فرضنا أن قٌمة البضاعة] [qtyالتً ٌرٌد الزائر شرائها ]([-50علدد
سللالب) ف نل بللال شللك أن النللاتج مللن عملٌللة الضللرب افترا ً
ضلا أنهللا ] [-1000ومللن هنللا
ف ملن حسلاب الواجلب سلداده أصبح حساب الزائر ] [-1000وهلذا ٌعنلً أن الزائلر حُل ِذ َ
لصاحب المنظمة ] [-1000بدالً ملن إضلافة ] [1000إللى المدٌونٌلة التلً ٌجلب سلدادها
إلى صاحب المنظمة(الموقع) ! .
عزٌزي القارئ ,سوف أطر مثاالً آخر لعل الصورة تكون أوضح لجمٌلع المبلرمجٌن!
انظر إلى النص البرمجً رقم .1.2
?<
class ex_2
{
{)(function ex_2
;global $HTTP_GET_VARS
;]'$birthday = $HTTP_GET_VARS['birthday
; ;]'$homepage =$HTTP_GET_VARS['homepage
}
فً النص 1.2عند استقبال المتغٌلرات ملن الخلارج دون أي تأكلد قلد ٌل دي إللى أخطلاء
برمجٌللة سللواء منطقٌللة كمللا شللاهدنا فللً المثللال األول أو أخطللاء مللن الممكللن اسللتغاللها
للتالعب باألشخاص وتحوٌلهم إلى مواقع تضر بهم ,فكما تشاهد فً المثال السابق قمنلا
باسلللتقبال المتغٌلللر ]]' [HTTP_GET_VARS['homepageوملللن ثلللم طباعتللل عللللى
الشاشة ! ولذلك قد ٌقود هذا الخطأ إلى تضللٌل المسلتخدم وتحوٌلل إللى مواقلع ال ٌرغلب
بها أو ٌ دي إلى تحوٌل إلى مواقع تقوم بسلرقة المعلوملات الخاصلة بل ! ,عللى سلبٌل
المثال لو قمنا بطلب الصفحة ] [birthday.phpوالتً تحتوي عللى اللنص البرمجلً 1.2و
قمنللا بتغٌللر قٌمللة المتغٌللر ] [homepageبقٌمللة أخللرى مللثالً ] [hack.comسللٌكون
الرابط بالشكل التالً :
][http://localhost/p2/homepage.php?homepage=http://www.hack.com
وبالتالً تستطٌع اآلن أن تقوم بتضلٌل الضحٌة عند طرٌق إرسال هذا الرابط إلٌ ومن
ثم سوف ٌقوم بالضغط على الرابط حٌث أن بداٌة الرابط ستجعل الزائر ٌثق بالموقع
] [http://localhost/p2/homepage.phpولكن تم التالعب بالمتغٌر
] [homepageو وضع موقع آخر غٌر الموقع المراد وبالتالً سٌقوم الضحٌة
بالضغط علٌ وال ٌعلم وبعدها ٌقوم المهاجم بتحوٌل الزائر إلى موقع ][hack.com
والتً هً عبارة عن صفحة مزٌفة للموقع األساسً وعندها ٌستطٌع سرقة كلمة
المرور أو اسم المستخدم الخاص بالعضو .
24
الحلول المتوافرة لمشكلة (عدم التحقق من صحة المعلومات المدخلة بشكل صحٌح
)02
ٓٔ
http://cwe.mitre.org/data/definitions/20.html
25
الحل األول :
الحلل األول نسللتخدم فٌل طرٌقللة تصلفٌة المعلومللات المسلتقبلة مللن قبلل العمٌللل باسللتخدام
األصللناف ] [classesوداولهللا المكتوبللة مللن قبللل منظمللة ] [OWASPحٌللث المشللروع
ٌعلرف بللـ ] . [OWASP ESAPI Validation APIولكللن لألسللف للم تنتهللً منظمللة
] [OWASPملن إعلداد اللدوال الخاصلة بلغلة ][phpحٌلث إن هلذا المشلروع الضلخم و
سٌمكن المبرمج من السٌطرة على المدخالت فً مرحلتً التصمٌم والبرمجة .
;global $HTTP_POST_VARS
;]'$id =$HTTP_POST_VARS['id
{ )if(is_numeric($id)!=1
{
فً النص البرمجً 2.2قمنا باستقبال المتغٌر ] [usernameوالتأكد من أن حرو ًفا عربٌ فقط وال
ٌحتوي على أرقام أو حلروف انجلٌزٌلة وهلذا ملا ٌعلرف التعبٌلر القٌاسلً ][regular expression
وهً عملٌلة مطابقلة نملط معلٌن لحاللة معٌنلة ملثالً فلً السلطر األول قمنلا باسلتخدام الداللة ][match
والتللً سللتقوم مطابقللة الللنمط ]_ [a-zA-Z0-9مللع المتغٌللر ] [usernameف ل ذا تطابقللا ف ل ن المللدخل
ٌحتوي على أرقام أو حروف إنجلٌزٌ عندها ستظهر الرسالة (ٌجب أن ٌكون اسم المستخدم عربًٌا)
.
27
نستخدم الحل الثالث لكون جزءًا من الحلل الرابلع اللذي سلوف ٌتأكلد ملن الملدخالت ملن
جهة العمٌل ! .
عزٌللزي المبللرمج ,إن الللنص البرمجللً رقللم ٌ 1.5مثللل ك لالً مللن :جافللا سللكربت بللاللون
األحمر واألزرق الـ ] , [HTMLو عندما ٌقوم العمٌل أو المهاجم ب دخال الرقم الجلامعً
الذي ٌحتوي على أرقام باإلضافة إلى رموز أو أحرف فسوف تظهر ل رسلالة (الرجلاء
إدخال رقمك الجلامعً بشلكل صلحٌح) ولكلن عنلدما ٌقلوم بوضلع أرقلام فقلط ف نل سلوف
ٌحول مباشرة إلى صفحة المعالجة الموجودة فً الخادم وهً الموجودة فً الحلل الثاللث
,والتً سوف تقوم بعملٌة التأكد من المدخالت مره أخرى ! لماذا ؟
بكل بساطة ألن عندما ٌقوم المهاجم بتعطٌل جافا سكربت عنلدها سلوف ٌسلتطٌع تخطلً
التأكد من المدخالت ,ولكلن ملع وجلود التأكلد الملزدوج "العمٌلل ,الخلادم " فأنل حتلى للو
استطاع أن ٌعطل جافا سكربت فلن ٌستطٌع أن ٌعطل عملٌة التأكد التً تلتم عللى الخلادم
.
و بال شك أن ]) [if(id_s>0تقوم بعملٌة التأكد من نلوع الملدخل فل ذا كلان رقمًلا قاملت بنقلل
العمٌل إلى ] [is_int.phpو إذا كان العك سوف تظهر رسالة خطأ .
28
انتب ال تعتمد عزٌزي القارئ بشكل كاملل عللى القائملة السلوداء والبٌضلاء فملن الممكلن
أن ٌقوم المهلاجم ب دخلال رملوز خبٌثلة ٌكلون لهلا مثٌلل فلً القائملة السلوداء وتعملل مثلل
عملها ولكن بترمٌز آخر ,شاهد النص البرمجً . 2.4
;global $HTTP_GET_VARS
;]'$phone =$HTTP_GET_VARS['phone
))if(preg_match("/</", $phone
{
;)"echo("not ok
}
{else
;)"echo("ok
}
;global $HTTP_GET_VARS
;]'$phone =$HTTP_GET_VARS['phone
;)echo $phone_int=intval($phone
29
كمللا شللاهدت عزٌللزي القللارئ ,أننللا اسللتخدامنا الدالللة ] [intvalالتللً تقللوم بتحوٌللل القللٌم
المستقبلة إلى أرقام فقط ,فلذلك عندما ٌقوم المهلاجم ب دخلال رملوز خبٌثلة ف ننلا نسلتطٌع
أن نتغلللللللللللللللللللللب علٌهللللللللللللللللللللا ! ,فمللللللللللللللللللللثالً لللللللللللللللللللللو قللللللللللللللللللللام ب دخللللللللللللللللللللال
] [123<script>alert('test');</script>4444سللللتقوم باسللللتخالص الللللرقم ][123
وحللذف جمٌللع الللذي ٌللأتً بعلد هللذا الللرقم ,وكللذلك لللو قللام بوضللع نللص برمجللً خبٌللث
مكتوب بلغة جافا سكربت مثل ]> [<script>alert('test');</scriptسترجع لنا ][0
.
;)"أهال وسهال"$hi=iconv('windows-1256','utf-8',
30
00[Cross-Site Request Forgery] [CSRF] الطلبات المزٌفة عبر الموقع
ٔٔ
352 : رقم الثغرة, http://cwe.mitre.org/top25/#CWE-352
31
إن قٌللام المهللاجم بتصللرفات خطللرة ولكللن بشللكل غٌللر مباشللر أمللر ٌسللتدعً النظللر فٌ ل
ً
حقٌبلة والتحقق من ,عزٌزي القارئ لو أردت أن تسافر فقلام أحلد األشلخاص ب عطائلك
ل لتأخذها معك على متن الطائرة ثم توجهت إلى صالة اإلقالع ,وعندما قلام الموظلف
المسل ول بأخللذ تللذكرة اإلقللالع لركللوب الطللائرة و تفتللٌه هللذه الحقٌبللة وجللد بهللا أدوات
ممنوعة االستخدام على متن الطائرة ! ماذا سوف تكلون ردة فعللك ! هلل هلو اإلنكلار ؟
بال شك سوف تقر وتسجل باسمك هذه الجرٌمة على الرغم من أنك لم تفعل شٌ ًئا ! .
الطلبات المزٌفة عبر الموقع هً عملٌة زرع أوامر برمجٌة فً صفحة العمٌل][Client
ثم إرسالها إلى الخادم ]. [server
ٌقوم المهاجم بزرع أوامر برمجٌة بداخل صفحات العمٌل ومن ثم ٌنفلذ أو ٌطللب العمٌلل
هللذه الصللفحة و حٌنئللذ و بشللكل تلقللائً تنفللذ األوامللر المزروعللة مللن قبللل المهللاجم باسللم
"العمٌل" ولٌ المهاجم ,وهذا تعرف آخر للطلبات المزٌفة عبر الموقع ,فالمهاجم ٌقلوم
بتنفٌذ األوامر التً ٌرٌدها عن طرٌق استغالل متصفح "العمٌل " .
على أي مستوى تحدث هذه الثغرة ؟ ما هً اللغات التً تتأثر بها ؟ ومزا هزو مسزتوى
خطورتها ؟
تحدث هذه الثغرة على مستوى تصمٌم ,و هٌكلٌة ,و برمجة النظام .
أما اللغات التلً تتلأثر بهلا فهلً جمٌلع اللغلات البرمجٌلة بلال اسلتثناء وبلاألخص األنظملة
التلً تتعامللل ملع الخللادم ] [Serverوكلذلك قامللت منظملة ] [Sansبتصللنٌف هلذه الثغللرة
على أنها ذات خطورة عالٌة ]. [High
32
عزٌزي القارئ ,فً المثال التالً نصوص برمجٌة سلٌمة وكلذلك نصلوص برمجٌلة تلم
التالعب بها وإدخال لغة جافا سكربت ] [javascriptعلٌها .
> ”<form action="profile.php" method="POST" name="s" id=”s
><blockquote
></blockquote
></form
كملا تشلاهد فلً اللنص رقلم 3.1و هلو ] [HTMLبسلٌط جل ًدا ٌحتلوي عللى ثالثلة حقللول
البرٌلٔللد اإللكترونلللً ,وعنلللد النقلللر عللللى زر النص و
البرمجً وهلللً االسلللم األول ,و االسلللم األخٌلللر ,
"تحدٌث" سوف ٌتم نقل التحكم إلى الصفحة التً لها النص البرمجً رقم .3.2
33
?<
;)(session_start
>?
?<
class profile
{
{)(function profile
;global $HTTP_POST_VARS
;]'$firstname = $HTTP_POST_VARS['firstname
;]'$lastname =$HTTP_POST_VARS['lastname
;]'$email =$HTTP_POST_VARS['email
{)]'if (!$_SESSION['username
لم ٌتم تسجٌل العمٌل وبالتالً سوف ٌتم تحوٌل إلى صفحة تسجٌل الدخول //
}
{else
;)$this->update_has_info_in_db($firstname,$lastname,$email
}
}
{)function update_has_info_in_db($firstname,$lastname,$email
;)"تم التحدٌث"(echo
} عند النظر للمرة األولى إلى النص البرمجً رقم 3.2للن ٌتوقلع المبلرمج أن هلذا اللنص
البرمجً قد ٌسبب ل مشاكل عدة ,و بما أن طرٌقة البرمجة تعتمد على جلسلات العملالء ;}
;)(profileالعمٌللل قللد سللجل
$start_new=new ] [session clientوأن لكللل عمٌللل جلسللة خاصللة بل ,و إذا لللم ٌكللن
الدخول فسوف ٌنتقل بشكل تلقائً إللى صلفحة التسلجٌل وللن ٌلتم تحلدٌث المعلوملات أي>?
شخص ما لم تسجل ل جلسة خاصة باسم .
النص البرمجً 3.2
34
األملر ] )]'ٌ [ if (!$_SESSION['usernameتأكلد ملن أن العمٌلل ُمسلجل لل جلسلة
خاصللة به لً أم ال ا ! وعنللدما ال ٌتحقللق الشللرط كمللا قلنللا سللابقا ً ٌللتم تحوٌل ل إلللى صللفحة
التسجٌل .
ٌستطٌع المهاجم وضع نص برمجلً باسلتخدام أحلد أوسلمة ] [tagsلغلة ] [HTMLوملن
ثللم ٌقللوم العمٌللل بطلللب أو تنفٌللذ هللذه الصللفحة التللً دمللج بهللا الللنص البرمجللً الخبٌللث
ً
حقٌقلة وبالتالً ٌتم تنفٌلذ هلذا اللنص البرمجلً عللى أسلا أن العمٌلل قلام بتنفٌلذه ,ولكلن
األمر أن المهاجم قام بدمج النص البرمجً فً صفحة العمٌل وتم تنفٌلذ اللنص البرمجلً
الخبٌث بواسطة العمٌل وهو ال ٌدري ! ,أنظر إلى النص البرمجً رقم : 3.3
><SCRIPT
{ )( function SendAttack
;"document.s.email.value= "aldeheme@ksu.edu.sa
;)(document.s.submit
}
></SCRIPT
> <BODY
><blockquote
></blockquote
35
></form
تشاهد فً النص رقم 2.3أن المهاجم قام بدمج النص البرمجً جافا سلكربت باسلتخدام
وسللامٌن ] [tagsوهمللا ] [bodyو ] , [SCRIPTو لتوضللٌح الفكللرة ف نلل عنللدما ٌقللوم
العمٌلل بلدخول هللذه الصلفحة سللوف ٌلتم تنفٌللذ الحلدث ] [onloadوالللذي ٌسلتدعً الدالللة
] [SendAttackو التللً تقللوم بتغٌٌللر البرٌللد اإللكترونللً الخللاص بالعمٌللل عللن طرٌللق
تغٌٌر قٌمة الحقل ] [emailالذي أسند ل برٌد المهلاجم [aldeheme@ksu.edu.sa] :
بللللدالً مللللن البرٌللللد الللللذي سللللوف ٌللللتم وضللللع مللللن قبللللل العمٌللللل ,وبعللللد تنفٌللللذ الدالللللة
])([form.submitسوف تنقل التحكم وبالبٌانات إلى الصفحة النص البرمجً رقلم 3.2
.
ما هً ردة فعل الصفحة المستقبلة للبٌانات (النص البرمجً رقم . ) 3.2بكل تأكٌلد إذا
[if كلللللللان العمٌلللللللل قلللللللد تلللللللم تسلللللللجٌل مسلللللللبقا ً فلللللللً الموقلللللللع فللللللل ن األملللللللر
])]' (!$_SESSION['usernameفلللً اللللنص البرمجلللً رقلللم ٔ للللن ٌتحقلللق وبشلللكل
مباشلللر سلللوف ٌلللذهب إللللى ])[$this->update_has_info_in_db($firstname,$lastname,$email
وٌقوم بتحدٌث بٌانات العمٌل و وضع البرٌد اإللكترونً للمهاجم بدالً من البرٌلد الحقٌقلً
للعمٌل وهذا ما ٌعرف بالطلبات المزٌفة عبر الموقع .
عزٌزي القارئ ,كما شاهدت ف ن المهاجم قام بتزٌٌف طلب وتغٌٌلر المعلوملات "البرٌلد
اإللكترونً " الخاص بالعمٌل وإرسال هلذه المعلوملات إللى الخلادم علن طرٌلق اسلتخدام
متصفح العمٌل .
36
لنشاهد سوٌا ً تنفٌذ هذه الثغرة بالرسم و نواتجها .
هللذا هللو الللنص البرمجللً وسللوف ٌللتم تنفٌللذ األوامللر بالتسلسللل الرقمللً ٔ ٗ , ٖ , ٕ ,
انظر الشكل . 3.1
شكل 3.1
سوف تنفلذ الصلفحة ]( [htmlاللنص البرمجلً رقلم ) 3.3كملا فلً الشلكل , 3.1وبعلد
الضغط على ] [submitسوف ٌكون الناتج بالشكل التالً ,انظر شكل . 3.1
الشكل 3.1
37
الحلول المتوفرة لمشكلة (الطلبات المزٌفة عبر الموقع)00
ٕٔ
http://cwe.mitre.org/data/definitions/352.html
38
4.1التللً تمثللل بللاللون األحمللر ) وهللذا النللوع ٌسللمى البرمجللة عبللر الموقللع القابلللة
للتخزٌن
], [Stored Cross Site Scriptingأي أن البرمجة عبر الموقلع تنفلذ ملره واحلد عللى
مستوى المتصفح وبعدها ٌتنهً مفعولها ولكن البرمجة عبر الموقع القابلة للتخزٌن ف نهلا
ستدمج مع الـ , htmlحٌث الزائر فً كل مره ٌطلب الصفحة سٌتم تنفٌذ جافا سلكربت
.
></form
39
فً النص البرمجً رقم 4.2نجد نموذج ]ٌ [htmlحتوي على حقل كلمة الملرور وهلو
] , [passالجدٌد هنا أننً قملت باسلتخدام متغٌلر ] [htmlحٌلث سنسلند لهلذا المتغٌلر رقلم
الجلسللة الخاصللة بللالزائر ] [session idعللن طرٌللق لغللة ] , [phpانظللر إلللى الللنص
البرمجً رقم . 4.3
;)($form->prepare
;))($form->assign("session_id",session_id
;)(echo $form=$form->getOutputContent
الصللفحة المسللتقبلة سللوف تتأكللد مللن رقللم الجلسللة الخاصللة بللالزائر ,وهللل هللً نفسللها
المسجلة عندها ؟ ,انظر إلى النص رقم . 4.5
;global $HTTP_POST_VARS
;]'$your_session = $HTTP_POST_VARS['your_session
{))(if($your_session==session_id
}
40
عندما ٌقوم المستخدم بالدخول إلى الموقع ف ن معلومات النموذج تخزن فً الكعك و هً
مشللفرة ! فعنللدما ٌقللوم العمٌللل بطلللب الصللفحة المزٌفللة ٌتأكللد الخللادم مللن المعلومللات فللً
الكعك ,ف ذا كانت معلومات النموذج المرسلة تتطابق مع الموجودة فً الكعك ف نل ٌعلد
هذا الطلب صحٌحً ا و ماعدا ذلك ٌتم رفض .
ولكن لو استخدام ] [POSTف نها سترسل بشكل مخفً ,بال شك أن إمكانٌة تعدٌل كلمة
Localhost/login.php?password=1234567
المرور سوا ًء باستخدام ] [GETأو ] [POSTأمر سهل ولكن االختالف فً أن ][POST
النص البرمجً 4.6
صعبت األمر قلٌالً .
41
42
04[SQL Injection] [SQLI] الحقن االستعالمٌة
ٖٔ
89 : رقم الثغرة, http://cwe.mitre.org/top25/#CWE-352
43
إن التطبٌقللات (األنظمللة ,المواقللع ) التللً تتعامللل مللع مللدخالت المسللتخدمٌن ,ومللن ثللم
تقوم بدمجها بشلكل مباشلر ملع األملر االسلتعالمً ], [SQLوبعلد ذللك سلوف ٌلتم إرسلال
هللذا األمللر إلللى خللادم قاعللدة البٌانللات ] ,[database serverوبللذلك ٌللتم إرجللاع ,أو
إضللافة ,أو حللذف ,أو تعللدٌل فللً قاعللدة البٌانللات ] [databaseالتللً تكللون دائمللا ً
معرضللة لالسللتغالل والهجللوم علٌهللا مللن قبللل المختللرقٌن أو المهللاجمٌن وهللذا مللا ٌعللرف
بـالحقنة االستعالمٌة .
بعبارة أخرى إن الحقن االستعالمٌة هً :
استعالم ضار من الممكن أن ٌدمج مع االستعالم الصحٌح الذي ٌقلوم بجللب المعلوملات
من قاعدة البٌانات ,على سبٌل المثال :عندما ٌقوم المبرمج بعملٌلة اسلتعالم معٌنلة ملثالً
لجلب اسم العمٌل ] [xف ن سوف ٌرسل هذا األمر إلى قاعدة البٌانات وبالتالً ترجع لنلا
اسللم العمٌللل فقللطٌ ,للأتً هنللا دور ] [SQL Injectionالللذي مللن الممكللن إضللافتها إلللى
االستعالم السابق بحٌث أن ٌجلب لنا اسم العمٌل باإلضافة إلى معلوملات أخلرى ,حٌلث
مللن المفللروض أن تكللون غٌللر ظللاهرة فللً االسللتعالم] ,[xالمسللألة أشللب بحقللن أوامللر
] [SQLالسلٌمة والصحٌحة والتلً هلً فلً أصللها مكتوبلة فلً اللنص البرمجلً ملن قبلل
المبللرمج بللأوامر خبٌثللة تمكللن المهللاجم مللن الحصللول علللى معلومللات حساسللة فللً غاٌللة
األهمٌة.
عزٌللزي القللارئ ,إن عللدم التأكللد مللن مللدخالت المسللتخدمٌن قللد ٌسللبب مشللاكل كبٌللرة
ومنها إدخال أوامر خبٌثة قد تتالعب باألمر االستعالمً .
ما هً مصادر الحقنة االستعالمٌة ؟
ٔ -عدم التأكد التام من مدخالت المسلتخدم علن طرٌلق نملوذج] [formمعلٌن مثلل "نملوذج
الدخول " .
ٕ -عللدم اسللتخدام بعللض الللدوال المهم لة والتللً تمكللن المبللرمج مللن ال لتخلص مللن الزوائللد
المضافة إلى االستعالم الصحٌح .
ٖ -عدم التأكد من المتغٌرات المرسلة سواء كانت مخفٌة بطرٌقة ] [POSTأو عبلر اللرابط
]. [URL
44
شاهد األمثلة التالٌة التً تشر طرٌقة استغالل الحقنة االستعالمٌة :
سللوف نسللتعرض أوالً الملللف الخللاص بتسللجٌل الللدخول الللذي ٌمكللن الزائللر مللن وضللع
وكتاب كلمة المرور الخاصة ب ,ومن ثم االنتقال إلى صفح الترحٌب التلً تعلرض لل
معلومات وكل ما ٌتعلق ب بعد الضغط على زر ] [Submitأنظلر إللى اللنص البرمجلً
رقم . 5.1
>"<form method="POST" action="../check.php
></form
class check
{
{)(function check
;global $HTTP_POST_VARS
;)($c->con
;]'$password=$HTTP_POST_VARS['password
;)$q=mysql_query($sql
{))while($row=mysql_fetch_array($q
;)">echo("<br
45
;)]'echo("your pass is : ".$row['pass
فللً الللنص البرمجللً رقللم ,5.2نقللوم باالتصللال بقاعللدة البٌانللات باسللتخدام الداللة [$c-
])(>conبعدها نقوم بدمج كلمة السر المرسلة من الصفحة األولى بشكل مباشر ملع أملر
االستعالم ] [SQLو دون التأكد من مدخالت المستخدم.
قبل أن أتطرق للخطأ البرمجً سوف أعرض للك حقلول وأعملدة قاعلدة البٌانلات الملراد
االستعالم منها:
نعود مرة أخرى للنص البرمجً 5.2حٌث ب خطأ فاد قد ٌقع فٌ الكثٌرون ,فالمهاجم
اآلن ٌستطٌع إضافة أوامر خبٌثلة] [SQLIفٌجللب جمٌلع المعلوملات الموجلودة فلً قاعلدة
البٌانات عن طرٌق إضافة][.or 4>3إلى كلم السر و تكون بهذا الشكل
] [123.or 4>3فهلذه اإلضلافة البسلٌطة] [or 4>3صلحٌحة دائملا ً ولجمٌلع األسلطر
] , [rowsو سوف ٌجلب جمٌع المعلومات و ٌكلون شلكل االسلتعالم بعلد إضلافة األملر
الخبٌث بالشكل التالً :
46
الشكل 5.1
وبعد تنفٌذ هذا األمر وجدنا فعالً أن قام بعملٌ طباع جمٌع األسلطر فلً قاعلدة البٌانلات
أنظر شكل ! 5.2
الشكل 5.2
47
الحلول المتوافرة لمشكلة (الحقن االستعالمٌة)03
ٗٔ
http://cwe.mitre.org/data/definitions/89.html
48
الحل األول:
من الجٌلد أن تقلوم باسلتخدام المتغٌلر ]]' , [$HTTP_GET_VARS['idأو ]]", [$_GET["id
أو ما ٌتبع من متغٌرات مثل ]]' [[$HTTP_POST_VARS['idفً استقبال المتغٌرات المرسلة
بدالً من استقبالها مباشرة كـ( )$idألسباب أمنٌة .
حٌث إن عدم استقبال المتغٌر بشكل مباشلر ٌمكنلك ملن معرفلة الحقنلة االسلتعالمٌة علن
طرٌللق تخصللٌص البٌانللات المسللتقبلة ,وتحدٌللد نوعٌتهللا ,والتغلللب علٌهللا ,ومللن الممكللن
التالعللب بهللذه المتغٌللرات ,و نتٌجللة لللذلك تفشللل هللذه المتغٌللرات فللً عملٌ لة التصللدي
للهجمات الخبٌثة .
فً اإلصدارات األخٌرة من لغة] [PHPأصبحت بشكل افتراضً ال تقبلل أن تتعاملل ملع
اسللتقبال المتغٌللرات بشلكل مباشللر ألنل ٌسللبب مشللاكل أمنٌلة خطٌللرة ,فمللن الممكللن حقللن
] [SQLبكل سهولة ,ولذلك قامت ب غالق المتغٌر] , [Register Globalsوجعل حالت
مغلق ] [OFFفً إعدادات لغة] , [PHPلكً تمنع المبرمج من استقبال المتغٌرات بشكل
مباشر ,لذلك البد من تغٌٌر حالة هذا المتغٌر من إعدادات اللغلة فلً مللف ], [PHP.ini
بجعل مغل ًقا ]. [OFF
لنللر المثللال التللالً سللوٌا ً ومللن خللالل المثللال سللوف تتضللح الصللورة ,انظللر إلللى الللنص
البرمجً رقم .6.1
></aللذهاب إلى الصفحة الرئٌسٌة اضغط هنا>"<a href="../check.php?id=1
فلً اللنص البرمجلً رقلم ٌ [html] 6.1قلوم بعلرض اللرابط التلابع للصلفحة الرئٌسلٌة ,
ض لا عنللد الضللغط علٌلل نقللوم ب رسللال ] [idإلللى الصللفحة ]( [check.phpالللنص وأٌ ً
البرمجللً رقللم )6.2لجلللب المعلومللات مللن قاعللدة البٌانللات للسللطر الللذي ٌحتللوي علللى
الـ] [idرقم ]. [1
49
أما نص الصفحة ] [check.phpفهو :
;]'$id=$HTTP_GET_VARS['id
;"'echo $sql="SELECT * FROM page where id='$id
;)">echo("<br
;)$q=mysql_query($sql
{))while($row=mysql_fetch_array($q
;)]'echo(" title Is : ".$row['title
}
النص البرمجً 6.2
بكل تأكٌد ملع اسلتخدام ];]' [$HTTP_GET_VARS['idسلٌكون أكثلر أمانلا ً حٌلث أننلا
خصصنا البٌانات المستقبلة بالطرٌقة التالٌة :
فلو أضفنا رمز ]‘[ ,سٌقوم ب ضلافة ]\[ إللى االسلتعالم ,و ٌكلون عنلدها قلد تخللص ملن
اإلضللافة الخبٌثللة ,وسللٌعمل االسللتعالم بشللكل سلللٌم ,انظللر إلللى الشللكل 6.1الللذي ٌمثللل
المخرجات بعد تنفٌذ النص رقم . 6.2
الشكل 6.1
50
ولكلن ٌبقلى دور ] [magic_quotes_gpcمحلدو ًدا ,فقلد ٌلتم إضلافة رملوز مثلل ][- -
(التعلٌقات) التً تقوم بالتالعب باالستعالم ( ولذلك ال ت دي عملها بالشكل المطلوب أو
قد ٌعطلها كلٌا ً) .
51
الشكل 6.2
الحل الثالث:
إذاً كما شاهدنا ,من إحدى الطرق المستخدمة تخصلٌص البٌانلات المسلتقبلة ,وللذلك للو
أردنا اسلتقبال معلوملات خاصلة باللـكعك ,وبعلد ذللك تلم إرسلال مللف ملن أي نلوع غٌلر
الكعللك ,فلللن ٌللتم اسللتقبال ,وكللذلك لللو أردنللا اسللتقبال نصللوص] [stringوتللم إرسللال
معلومات خاصة بالـكعك فلن ٌتم استقبالها وسوف ٌتم تجاهلها .
; ]'$id=$HTTP_GET_VARS['id
;)echo $new_id= mysql_real_escape_string($id
;)">echo("<br
;"'echo $sql="SELECT * FROM page where id='$new_id
;)$q=mysql_query($sql
{))while($row=mysql_fetch_array($q
;)]'echo(" title Is : ".$row['title
}
النص البرمجً 6.4
52
0 [Race Condition] اإلخالل بالشروط
ٔ٘
http://drupal.org/node/43511 , ٖٕٙ : رقم الثغرة, http://cwe.mitre.org/top25/#CWE-362
53
عزٌللزي القللارئ ,تخٌللل أنللك تقللود سللٌارتك علللى طرٌللق سللرٌع ذي اتجللاه واحللد وكانللت
هناك سٌارة أخرى تحاول أن تعبر الطرٌق نفسل ملاذا تتوقلع أن ٌحصلل ؟ ,بكلل تأكٌلد
سوف تتصادم السٌارتان معا ً بسبب أن كلتٌهما تحاول الحصول على المصلدر(الطرٌلق)
نفس ,وبسبب ذلك حصل ما ال تحمد عقباه .
األمر نفس ٌحصل مع تطبٌقات اإلنترنت ,فٌقوم المهاجم بمحاولة العبث وإربلاك الموقلع
و أٌض لا ً تخرٌللب المعلومللات و تعطٌللل الخدمللة عللن العمللل عللن طرٌللق اإلخللالل بللبعض
الشروط واستخدام المصادر المشتركة .
اإلخالل بالشروط قد ٌ دي إلى تخرٌب كاملل النظلام أو جلزء معلٌن سلواء كلان أمنٌلا ً أو
حالة متغٌر معٌن ,وسوف ٌتم شرح مع األمثلة الح ًقا .
على أي مستوى تحدث هذه الثغرة ؟ ,مزا هزً اللغزات التزً تتزأثر بهزا ؟ ,ومزا هزو مسزتوى
خطورتها ؟:
تحدث هذه الثغرة على مستوى تصمٌم ,و هٌكلٌة ,وبرمجة النظام .
لقلد قلد قاملت منظملة ] [SANSبتصلنٌف هلذه الثغلرة عللى أنهلا ذات خطلورة متوسلطة
].[Medium
لنشاهد سوٌا ً هذا المثال لكً تتضح فكلرة "اإلخلالل بالشلروط" وهلً تحوٌلل قٌملة معٌنلة
من الحساب الجاري إلى حساب آخر.
54
<?
class Transfer
function Transfer(){
global $HTTP_POST_VARS;
if($transfer_amount<0){
else{
if($newbalance<0){
echo("Insufficient Funds");
else{
$this->SendNewBalanceToDatabase($newbalance);
function SendNewBalanceToDatabase($newbalance){
function GetBalanceFromDatabase(){
};
$start_new=new Transfer();
?>
لنفرض أنك قمت بفلتح هلذه الصلفحة ملرتٌن ,وقملت بتنفٌلذ وطللب الصلفحة فلً الوقلت
نفسلللل تقرٌبللللا ً ,مللللا هللللً النللللواتج الممكللللن حصللللولها ؟ علمللللا ً بللللأن الثغللللرة تبللللدأ مللللن
] [GetBalanceFromDatabaseوحتى ]. [SendNewBalanceToDatabase
للنعطِ اسلمًا للصلفحة األوللى ٔ وللصلفحة الثانٌلة ٕ ,سلوف ٌبلدأ تنفٌلذ ٔ ,وكلان
المبللللل المطللللوب تحوٌلللل إللللى حسلللاب مختللللف ٓٓٔ لاير ] ,[$transfer_amountوالمبللللل
المتلللللوافر فلللللً الحسلللللاب الجلللللاري ٕٓٓ لاير ] ,[$balanceوبعلللللد عملٌلللللة الخصلللللم
] ,[$newbalanceبقللً اآلن نقللل قٌمللة الحسللاب الجللاري إلللى قاعللدة البٌانللات وعملٌللة النقللل
تلأخرت وللم تكتمللل بعلد ! ,وفللً هلذه الفتلرة بللدأ ٕ بالتنفٌلذ ,وكللان المبللل المطلللوب
تحوٌللل ٔ لاير ,وتللم خصللم هلللذه القٌمللة مللن الحسللاب الجلللاري وإرسللالها إلللى قاعلللدة
البٌانات ,وأصبح الرصلٌد , ٔ99وبعلد أن اكتملل تنفٌلذ ٔ قلام بخصلم ٓٓٔ لاير ملن
ٕٓٓ لاير ,و تللم تعللدٌل البٌانللات ,أصللبح الرصللٌد ٓٓٔ لاير وهللذا غٌللر صللحٌح ,ألن
الصحٌح أن ٌكون الرصٌد النهائً 99رٌاالً بدالً من ٓٓٔ لاير أو ٔ99رٌاالً .
بسبب أن كلتا الصفحتٌن تسلتخدمان المصلدر نفسل "قاعلدة البٌانلات" حصلل تصلادم فلً
هذه البٌانات ! كٌف ؟
أثنللاء تللأخر ٔ فللً نقللل القٌمللة الجدٌللدة للحسللاب الجللاري بللدأ تنفٌللذ ٕ وأكمللل تنفٌللذه
وكانت قٌمة الحساب الجلاري الجدٌلد ,ٔ99ولكلن قٌملة الحسلاب الجلاري المخلزن للدى
ٔ ٕٓٓ لاير ولللٌ ٔ99رٌللاالً ولللذلك سللوف ٌبنللً جمٌللع العملٌللات علللى المعلومللات
التً ٌملكها وهً أن الحساب الجاري هو ٕٓٓ لاير ولٌ القٌمة الجدٌلدة للحسلاب وهلو
ٔ99رٌاالً .
56
) انحهىل انًتىفزة نًشكهت (اإلخالل بانشزوط
ٔٙ
http://cwe.mitre.org/data/definitions/362.html
57
الحل األول :
قللم بعملٌللة تللزامن المعلومللات ] , [Data synchronizationالتللً ٌقصللد بهللا جعللل
المعلوملات تتعلاون مللع بعضلها الللبعض وتتماسلك وٌحصللل بٌنهلا تكاملل مللن أخلذها مللن
المصللدر وحتللى تخزٌنهللا فللً جهللاز التخللزٌن والعك ل صللحٌح ,وٌللتم ذلللك باسللتخدام
األقفال ] , [locksالتً تقوم بحجز المصدر الملراد اسلتخدام لشلخص واحلد فلً لحظلة
معٌنللة مللن الللزمن وهللذا مللا ٌسللمى ] , [exclusiveأو قللد ٌكللون المصللدر مشللتر ًكا فٌللتم
تعدٌل من أكثر من شخص فً الوقت نفس ] [sharedشاهد النص البرمجلً رقلم 8.1
لكً تتضح الفكرة .
;)ftruncate($fp, 0
;)flock($fp, LOCK_UN
{ } else
}
باستخدام الدالة ] , [flockالتً تستقبل متغٌرٌن األول هو الملف المراد التعامل معل ][$fp
واآلخر هو الحالة التً سوف ٌسند إلٌها هذا المللف ! وهنلاك علدة حلاالت منهلا (حصلر
الملف بعمٌل واحد فً وقت معٌن ) LOCK_EXوعند االنتهاء ملن عملٌلة الحصلر نقلوم
بفك الحصر بتغٌٌر المتغٌر فً الدالة بجعل ]. [LOCK_UN
59
0 [Error Message Information Leak] رسا ل الخطأ المسربة للبٌانات
ٔ7
ٕٙٗ : رقم الثغرة, http://cwe.mitre.org/top25/#CWE-209
60
عزٌلزي القللارئ ,إن إخبلار المسللتخدم باألخطللاء التلً ترسللل ملن قبللل الخللادم ][server
إلللى المتصللفح فللً كثٌللر مللن األحٌللان قللد تكشللف أسللرار وخصللائص الخللادم أو تكشللف
كلمات المرور .
قد تفٌد رسائل الخطأ فً اكتشاف ثغرات أخرى ,حٌث ملن المعللوم أن طرٌقلة اكتشلاف
ثغرة الحقنة االستعالمٌة عن طرٌق األخطاء التً ٌنشئها الخادم .
ضا تكشف رسائل الخطأ مسارات الملفات فً الخادم و عنلدها تسلتطٌع قلراءة الملفلات أٌ ً
الحساسة .
على أي مستوى تحدث هذه الثغرة ؟ ما هً اللغات التً تتأثر بها ؟ ومزا هزو مسزتوى
خطورتها ؟
تحدث هذه الثغرة على مستوى تصمٌم ,و هٌكلٌة ,و برمجة النظام ,وإعدادات النظلام "
الخادم " .
اللغللات التللً تتللأثر بهللا هللً جمٌللع اللغللات البرمجٌللة بللال اسللتثناء وبللاألخص لغللة ][PHP
وكذلك قامت منظمة ] [Sansبتصنٌف هذه الثغرة بأنها ذات خطورة عالٌة ]. [High
61
لنشاهد المثال التالً لتوضٌح الفكرة أكثر .
></form
class file_check
{
{)(function file_check
;global $HTTP_POST_VARS
;]'$username = $HTTP_POST_VARS['username
;)echo file($username
}
;} عنلللدما ٌقلللوم المهلللاجم ب دخلللال اسلللم مسلللتخدم ] [$usernameغٌلللر موجلللود تقلللوم الداللللة
]) [file($usernameبتسرٌب بٌانات أماكن وجود الملفات على الخادم ,وبلال شلك ظهلور
;)($start_new=new file_check
هذا الخطأ ما هو إال بسبب أن اسم المستخدم الذي ٌمثل اسم الملف المراد قراءت لم ٌكن
>?
موجوداً .
النص البرمجً 9.2
الشكل 9.1
62
ٌمثللل الشللكل 9.1القٌمللة المدخلللة وهللً اسللم الملللف المللراد قراءتل وبعللد الضللغط علللى
دخول كان الناتج ,انظر إلى الشكل رقم . 9.2
الشكل 9.2
كما تالحظ فً الشكل رقم 9.2أن قام ب ظهار رسالة على أسا أن الملف غٌر موجلود
باإلضللللللللللافة إلللللللللللى معلومللللللللللات أمللللللللللاكن وجللللللللللود الملفللللللللللات علللللللللللى الخللللللللللادم
] , [c:\AppServ\www\p2\users.phpهذه الثغرة ال تمثل خطرً ا كبٌرً ا على الموقع ولكن قد
تظهر بعض الملفات المهمة مثالً قلد تمثلل أسلماء األعضلاء بشلكل مجللدات فعنلد ظهلور
رسالة الخطأ قد ٌعرض مع اسم المستخدم لهذا المجلد على سبٌل المثال ,المسار التلالً
:
] [c:\AppServ\www\aldeheme\users.phpهنللللا قللللام بعللللرض لنللللا اسللللم المجلللللد الخللللاص
بالمسللتخدم ] [aldehemeوعنللدها قمنللا ب ل عالم المختللرق أن ل ٌوجللد لللدٌنا عضللو اسللم
].[aldeheme
63
) انحهىل انًتىافزة نًشكهت (رسائم انخطأ انًسزبت نهبياَاث
ٔ8
http://cwe.mitre.org/data/definitions/209.html
64
]' , [http://aldeheme.com/?info.php?id=11سللوف ٌسللجل هللذا الطلللب فللً
ملف السجالت] [logsعلى أن الشخص صاحب ] [188.248.152.82] [ipقام بطلب
هذه الصفحة محاوالً اختراق الموقع ,عند معرفتك رقم ] [ipللمهاجم تستطٌع منع ملن
دخول الموقع ,وقد ٌعد هذا الحل غٌر جلذري ألنل ملن الممكلن أن ٌقلوم المهلاجم بتغٌلر
رقللم ] [ipالخللاص ب ل ,ومللن ثللم ٌسللتطٌع الللدخول بكللل ٌسللر ! ,انظللر إلللى الشللكل رقللم
. 10.1
الشكل 10.1
{)function try_($x
{ )if (!$x
}
}
{ try
}
}
كمللا شللاهدت عزٌللزي المبللرمج فب مكانللك اسللتخدام ] [tryلكللً تضللع رسللالة الخطللأ التللً
ترٌد أن تظهر وهً ( ال تدخل صفرً ا) .
تنبٌ ] [E_NOTICEوتظهر هذه الرسالة عند اسلتخدام متغٌلر بلدون تعرٌلف مسلبق لل ,
أو تحلللذٌر ] [E_WARNINGوتظهلللر هلللذه الرسلللالة عنلللد القسلللمة عللللى صلللفر أو عنلللد
اسلللتدعاء داللللة ولكلللن ملللع زٌلللادة أو حلللف بعلللض متغٌرهلللا ,أو خطلللأ قبلللل التنفٌلللذ
] ,[E_ERRORبالنسبة للخطأ اإلمالئً لن ٌكتمل تنفٌلذ الصلفحة ,وسلوف تظهلر رسلالة
خطأ ,أما األخطاء التحذٌرٌة ,فسوف ٌكتمل التنفٌذ ولكن مع إظهار رسالة التحذٌر .
فللً الللنص البرمجللً رقللم , 10.2قمنللا بتحدٌللد إعللدادات لغللة ] , [phpبحٌللث أنل لللو
حصل خطأ سواء قمنا باستخدام متغٌر لم ٌتم إنشا ه أو قمنلا بكتابلة متغٌلر بشلكل خلاط
,على سبٌل المثال لم نضع ];[ فً نهاٌة األمر البرمجً ,عندها سوف ٌتم إظهار جمٌلع
موضحة الخطأ الذي حصل ! كذلك فً النص البرمجلً رقلم ٔ 0.2جعلنلا ً هذه الرسائل
الدالة ] [error_reportingتظهر لنا جمٌع األخطاء ,ولكن نسلتطٌع أن نحصلرها بأخطلاء
معٌنة بالطرٌقة التالٌة ,انظر إلى النص البرمجً رقم : 10.3
66
;)error_reporting(all
;global $HTTP_GET_VARS
;]'$id = $HTTP_GET_VARS['id
{)""==if($id==0 || $id
;)" >echo("<script>window.location='html/index.htm';</script
}
{else
;)"شكرً ا"(echo
}
ً
بسلٌطا ٌتحقلق ملن عزٌزي المبرمج فً النص البرمجً رقلم 10.4أنشلأنا ن ً
صلا برمجًٌلا
النص البرمجً 10.4
القٌمة المدخلة ] [$idال تساوي صفر ,أو أنها لٌست فارغلة ] , ! [nullوعنلدما ٌتحقلق
أحللد الشللرطٌن السللابقٌن ٌقللوم بتحوٌللل الزائللر إلللى الصللفحة ] [index.htmالتللً قمنللا
ب نشائها ,انظر إلى النص رقم , 10.5وطرٌقة التحوٌل تمت بلغة الجافا السكربت .
];)" >[echo("<script>window.location='html/index.htm';</script
67
الشكل 10.2
68
0 [OS Command Injection] حقنة أوامر نظم التشغٌل
ٔ9
78 : رقم الثغرة, http://cwe.mitre.org/top25/#CWE-78
69
عزٌللزي القللارئ ,عنللد وضللع برنللامج لٌقللوم بعمللل معللٌن وٌعتمللد بشللكل أساسللً علللى
مدخالت العمٌل ! ف ن من الممكن أن ٌقلوم العمٌلل ب دخلال رملوز لتنفلذ أواملره الخاصلة
بدالً من األوامر الخاصة بنا .
حقٌقة تعرٌف حقنة أوامر نظم التشغٌل ٌختلف من شخص إلى آخر ,فالبعض عرفها ً
بأنها :أي نوع من أنواع المهاجمة التً تتضمن إدخال أوامر وتنفٌذها على نظام
التشغٌل والتً تسمى مسار البحث الغٌر موثوق ] [untrusted search pathوسوف
ٌتم شرحها الح ًقا ,وهناك من عرفها بأنها هً القدرة على حقن أوامر داخل المتغٌرات
التً تستخدم مع البرامج المسٌطرة ] [application-controlled programوكما
هو معروف ف ن البرامج المسٌطرة مثل ] [nslookupو ]. [nslookup
ف ن من الممكن أن ٌقوم المهاجم بتنفٌذ أوامر خطرة بشكل مباشر على النظلام ملع أنل ال
ٌملك أي صالحٌة علٌها ,ولحقن هذه األوامر بطرٌقتٌن :
ٔ -الحقن عن طرٌق دمج أمر خبٌث مع متغٌرات برنامج معٌن ,على سبٌل المثال برنامج
] [nslookupالذي ٌكتب بالشكل ( )]nslookup [HOSTNAMEحٌث إن
HOSTNAMEعبارة عن اسم المضٌفٕٓ الذي ٌُرسل إلى برنامج معٌن بصفت
متغٌرً ا ,وهذه البرامج قد تسمح للمهاجم بأن ٌقوم بتحدٌد هذا المتغٌر ,من هذه النقطة
أعطت إمكانٌة للمهاجم بأن ٌتالعب بهذا المتغٌر وٌقوم ب ضافة أوامر خبٌثة وتنفٌذها
على نظام التشغٌل ,وٌزٌد األمر خطورة أن إذا لم ٌمتلك البرنامج إمكانٌة فصل
األوامر التً تأتً مع اسم المضٌف ,ب مكان المهاجم أن ٌرسل اسم المضٌف متبوعا ً
باألمر المراد تنفٌذه وبٌنهما فاصلة منقوطة ];[ !
ٕ -حقللن أوامللر أو القٌللام بتشللغٌل بللرامج علللى مسللتوى الخللادم ,وهللذا ٌحللدث عنللدما ٌعطللً
النظام اإلشارة الخضراء للمهاجم ,بحٌث أن النظام ٌقبل أي مدخالت ملن العمٌلل سلواء
كان زائرً ا أو مهاج ًما ,وتكون هذه المدخالت على شكل متغٌلرات للبعض اللدوال ! عللى
ٕٓ االسم الوحٌدالممٌز وكذلك غٌر المكرر فً العالم لشبكة معٌنة مثل ] [IPأو ][DNS
.
70
سبٌل المثال من الممكن استخدام الدالة المعروفلة ( ))]exec([COMMANDالتلً تقلوم
بتنفٌذ أوامر خاصة بنظام التشغٌل ,وكذلك أعطى الصالحٌة للمهاجم بلأن ٌقلوم ب ضلافة
أوامر أو تشغٌل برامج لٌ ل صالحٌة فٌها .
علززى أي مسززتوى تحززدث هززذه الثغززرة ؟ ,مززا هززً اللغززات التززً تتززأثر بهززا ؟ ,ومززا هززو
مستوى خطورتها ؟ :
أمللا اللغللات التللً تتللأثر بهللا فهللً جمٌللع اللغللات البرمجٌللة وكللذلك قامللت منظمللة ][Sans
بتصنٌف هذه الثغرة بأنها ذات خطورة عالٌة ]. [High
لنشاهد سوٌا ً هذا المثال لتتضح الفكرة .
;global $HTTP_GET_VARS
;]'$_var = $HTTP_GET_VARS['var
تقوم الدالة ] [execبتنفٌذ أوامر نظم التشغٌل ,وكذلك وتشغٌل برامج أو ملفات خارجٌلة
,كذلك لهذه الدالة فوائد منها إمكانٌة التعامل مع ملفات ] [SWFأو ] ,[PDFولكلن بملا
أن األوامر تستقبل من الخارج "العمٌل" فمن الممكن أن توضع أواملر لكشلف المجللدات
وملفات الموقع بكل سهولة .ومن ثم ٌتم االختراق ,شاهد النص البرمجً رقم . 11.2
;global $HTTP_GET_VARS
;]'$id_dep = $HTTP_GET_VARS['id_dep
;)"echo exec("$id_dep
71
فللً الللنص البرمجللً رقللم , 11.2قمنللا مباشللرة باسللتقبال ] [id_depوجعلنللاه كمتغٌللر
لدالللة ] , [execو بهللذه الطرٌقللة جعلنللا الخللادم عرضللة للخطللر ,حٌللث أنل بتنفٌللذ األمللر
] ٌ [copy ٕٔC:\\AppServ\\www\\p2\\2.txt d:\\ssسلتطٌع المهلاجم نسلي أي
ملف ٌرٌده إلى جهازه ومن ثم قراءت مثلما ٌرٌد ,فلو فرضلنا أن المهلاجم وضلع األملر
التالً كما فً الشكل . 11.1
الشكل 11.1
الشكل 11.2
ٕٔ
http://www.computerhope.com/copyhlp.htm
72
الحلول المتوافرة لمشكلة (حقنة أوامر نظم التشغٌل)00
ٕٕ
http://cwe.mitre.org/data/definitions/78.html
73
الحل األول :
عزٌزي القارئ ,عندما تقوم باستخدام معلومات معٌنة التً تمثل أمرً ا معٌ ًنلا أجعلل قلدر
المستطاع فً نطاق الموقع ولٌ للحدود الخارجٌة أي تأثٌر علٌ ,فعلى سبٌل المثلال ال
تقللم بنقللل أمللر معللٌن باسللتخدام الحقللول المخفٌللة ولكللن قللم باسللتخدام الجلسللة لتخللزٌن هللذه
المعلومات التً سوف تستخدم لتنفٌذ أمر معٌن ,انظر إلى النص البرمجً رقم . 12.1
;"$_SESSION['Command']="mkdir admin
'(echo
></form
;)'
وعند الضغط على زر تحدٌث سوف ترسل المعلومات إلى النص البرمجً رقم . 12.2
;]'$Command=$_SESSION['Command .
;)exec($Command
74
قم بتعطٌل الدوال المس ولة عن تنفٌذ أواملر نظلم التشلغٌل ,مثلل داللة ] , [execأو داللة
] , [systemبالنسللبة للتعطٌللل ف ن ل سللوف ٌللتم عللن طرٌللق مللدٌر الخللادم ,حٌللث أن ل ل ل
الصالحٌة للتعدٌل على الدوال فً لغة ] [phpالتً قد تسبب مشاكل أمنٌة .
75
نقل البٌانات الحساسة بشكل واضح
04[Cleartext Transmission of Sensitive
Information]
ٕٖ
. ٖٔ9 : رقم الثغرة, http://cwe.mitre.org/top25/#CWE-319 , http://www.oxid.it/cain.html
76
عزٌزي القارئ ,من الطبٌعلً أن ٌلتم نقلل البٌانلات عبلر شلبكة اإلنترنلت باسلتخدام علدة
شبكات مختلفة وأجهزة مختلفة ,وهذا ما ٌعرض هذه المعلومة للخطلر وأن ٌلتم اكتشلافها
من قبل المهاجم .
عنللللللدما ٌسللللللٌطر المهللللللاجم علللللللى إحللللللدى الشللللللبكات فب مكانلللللل التجسلللللل وأخللللللذ
المعلومات] [sniffingالتً تنتقل فٌها ,هذه الثغرة فً الحقٌقة تتعلق بأمان الشلبكة وفلً
الوقت نفس ٌجب على المبرمج حماٌلة المعلوملة قلدر المسلتطاع ,سلوف تشلاهد طلرق
حماٌة المعلومات عندما تقرأ الحلول المقترحة لهذه الثغرة .
علززى أي مسززتوى تحززدث هززذه الثغززرة ؟ ,مززا هززً اللغززات التززً تتززأثر بهززا ؟ ,ومززا هززو
مستوى خطورتها ؟ :
تحدث هذه الثغرة على مستوى تصمٌم ,و هٌكلٌة النظام .
اللغللات التللً تتللأثر بهللا فهللً جمٌللع اللغللات البرمجٌللة بللال اسللتثناء وكللذلك قامللت منظمللة
] [SANSبتصنٌف هذه الثغرة بأنها ما بٌن متوسطة الخطلورة وعالٌلة الخطلورة [very
]. high
,ومللن ثللم سللوف أقللوم بالتجسل علللى شللبكتً المنزلٌللة باسللتخدام أحللد بللرامج التجسل
سرقة المعلومات التً تنتقل عبر الشبكة ,انظر إلى الشكل .13.1
الشكل 13.1
كمللا تشللاهد فللً الشللكل , 13.1قمللت بالتجسل علللى شللبكتً الخاصللة عللن طرٌللق أحللد
بللرامج التجس ل التللً ال أحللب أن أذكرهللا خو ًفللا مللن االسللتخدام الخللاط ,فعنللدما قمللت
بالتجسل ظهللر لللً اسللم المسلتخدم وكلمللة المللرور باإلضللافة إللى طرٌقلة اإلرسللال التللً
كانت ]. [HTTP
77
78
الحلول المتوافرة لمشكلة (نقل البٌانات الحساسة بشكل واضح)03
ٕٗ
http://cwe.mitre.org/data/definitions/319.html
79
شكل 14.1
80
التحكم الخارجً بالملفات أو الروابط
0 [External Control of File Name or Path]
ٕ٘
. 7ٗ : رقم الثغرة, http://cwe.mitre.org/top25/#CWE-73
81
عزٌزي القارئ ,على الرغم من أن تبادل المعلومات بلٌن الملفلات أملر طبٌعلً و شلائع
إال أن إعطاء التحكم بهذه الملفات للعمٌل أمر خطٌر جداً .
عندما ٌكون اسم الملف الملراد قراءتل متغٌلر لداللة معٌنلة ,ف نل ب مكلان المهلاجم وضلع
رموز خبٌثة أو ملفات خبٌثة تضر بالخادم ملن حٌلث تعطٌلل أو حلذف الملفلات أو قلراءة
ملفات غٌر مصر للمهاجم بقراءتها .
علزى أي مسزتوى تحزدث هزذه الثغزرة ؟ ,مزا هززً اللغزات التزً تتزأثر بهزا ؟ ,ومزا هززو
مستوى خطورتها ؟ :
تحدث هذه الثغرة على مستوى تصمٌم ,و هٌكلٌة ,و برمجة النظام ,و النظلام " الخلادم
".
اللغات التً تتأثر بها هً جمٌع اللغات البرمجٌة بال استثناء ,أملا بالنسلبة لألنظملة التلً
تتلأثر بهلا فهلً ] , [Mac OS], [Windows], [UNIXوقلد قاملت منظملة ][SANS
بتصنٌف هذه الثغرة بأنها ذات خطورة عادٌة وقد تصل إلى الخطورة العالٌة.
?<
class rfile
{
{)(function rfile
;global $HTTP_GET_VARS
;]'$file_up = $HTTP_GET_VARS['file
}
;}
;)($start_new=new rfile
82
>?
الشكل 15.1
عنللد طلللب الللرابط "الشللكل " 15.1بشللكل مباشللر سللوف ٌقللوم بحللذف الملللف ][db.txt
وٌكون الناتج بعد التنفٌذ ,انظر إلى الشكل . 15.2
الشكل 15.2
ٕٙ
http://cwe.mitre.org/data/definitions/73.html
83
الحل األول :
عملٌة التأكد من المدخالت البد أن تكون على مستوى العمٌل وكلذلك الخلادم ,فالبلد للك
أخً المبرمج ملن القٌلام بالتأكلد ملن الملدخالت ملرتٌن "الملرة األوللى فلً جهلاز العمٌلل
واألخللرى فللً الخللادم " ألن ل قللد ٌقللوم العمٌللل بتعطٌللل جافللا سللكربت ,أو أحللد اللغللات
المستخدمة للعمل فً جهلة العمٌلل ] [client-sideلمشلاهدة األمثللة ,أنظلر إللى حللول
مشكلة (عدم التحقق من صحة المعلومات المدخلة بشكل صحٌح).
;)'echo realpath('psd/1.gif
84
فللً الللنص البرمجللً رقللم 16.1قمللت ب دخللال الصللورة ] [psd/1.gifألننللً أرٌللد أن
أعرف مسارها الحقٌقً وهل هذا الملف تمت إضافت محلٌا ً (من قبل الخادم الخلاص بنلا
) أو من الخارج .فكلان النلاتج أنل تملت إضلافت محلٌلا ً وكلان عنوانهلا الحقٌقلً كملا فلً
الشلكل , 16.1وكللذلك هلذه الدالللة تفٌلد فللً إزالللة الرملز ] [../الللذي تسلتطٌع مللن خاللل
التنقل فً مجلدات الخادم مثل (. )./../../etc
الشكل 16.1
85
0 [Cross-Site Scripting "XSS"] البرمجة عبر الموقع
ٕ7
, 79 : رقم الثغرة, http://cwe.mitre.org/data/definitions/79.html , http://cwe.mitre.org/top25/#CWE-79
, http://www.acunetix.com/websitesecurity/cross-site-scripting.htm
, http://www.arabwebtalk.com/showthread.php?t=76026
http://www.webopedia.com/TERM/X/XSS.html
86
إن الصفحات الثابتة التلً ال تتغٌلر باسلتمرار وال ٌكلون للزائلر أي دور فٌهلا هلً مجلرد
تصمٌم ثابت غٌر فعال ,أما الصفحات الفعالة فهلً التلً تتغٌلر باسلتمرار والقلادر عللى
تغٌٌرهللا أي طللرف ٌملللك صللالحٌة التعللدٌل علٌهللا .هللذه الخاصللٌة أعطللت الزائللر( أو
الشخص المسجل الذي ٌملك صالحٌات معٌنة تعدٌل هذه الصفحات ,مثالً إضافة تعلٌلق
ضا إمكانٌة إضافة ما ٌرٌد فً هذه الصفحات من خلالل ,أو إضافة موضوع جدٌد) ,وأٌ ً
إضللافة صللور ,أو فٌللدٌو ,أو مقللال نصللً ,ولكللن قللد ٌتعللدى األمللر إلللى إضللافة أوامللر
برمجٌللة خبٌثللة تقللوم بعملٌللة التللدمٌر و االسللتٌالء علللى المعلومللات الحساسللة فللً الموقللع
واستغاللها الختراق الموقع .
87
[PHP- PERL- اللغات البرمجٌة كثٌرة و لكن أكثرهلا التلً تعتملد عللى اإلنترنلت ملثالً لغلة
]ASP-JSP
نستعرض سوٌا ً ن ً
صا برمج ًٌا ٌحتوى على خطأ برمجً ,انظر إللى اللنص البرمجلً رقلم
:17.1
>"<form method="POST" action="../insert.php
></form
هلذا الللنص البرمجللً ٌسلتطٌع الزائللر مللن خاللل إضللافة موضللوع لصلفحة معٌنلة,سللوف
ٌقللوم الزائللر بكتابللة موضللوع وبعللدها الضللغط علللى زر ] [Submitالللذي سللوف ٌأخللذ
محتوى هذا الموضوع الذي كتب وٌنقل إلى صفحة ].[insert.php
صفحة ] [index.phpسوف تقوم بعملٌة إضافة هذا الموضوع إلى قاعدة البٌانات وهذا
أمر معتاد وال جدال فٌ ,و لكن الخطأ هو أن هلذه الصلفحة قاملت بعملٌلة اإلضلافة فلً
قاعدة البٌانات دون أي تأكد من مدخالت المستخدم .
بعدما تمت عملٌة إضافة الموضوع إلى قاعدة البٌانات والتلً حلدثت دون أي تحقلق ملن
مدخالت المهاجم ,ف ن هذا ٌعطلً فرصلة للمهلاجم كلً ٌضلٌف نصو ً
صلا برمجٌلة خبٌثلة
بالطرٌقة التالٌة ,
><script
أنظر للنص رقم ٕ :
"var redirecturl="www.ksu.edu.sa
window.location=redirecturl
موقلع آخلر
></script دور هذا النص البرمجً أن سوف ٌقوم بعملٌة تحوٌل صفحة الموقع إلى أي
ملدمجا ً
17.2ملع اللنص البرمجلً األصللً للصلفحة البرمجلً
البرمجً وسوف ٌكلون شلكل هلذا اللنص النص
><body
88
><head
نالحظ فً النص البرمجً السابق أننا عندما استرجعنا المواضٌع من قاعدة البٌانات ملن
صا برمج ًٌا مكتو ًبا بلغة جافا سكربت ,اللذي ٌقلوم بعملٌلة تحوٌلل
ضمن هذه المواضٌع ن ً
الصفحة إلى صفحة أخرى .
أو من الممكن تحوٌل الصفحة الصلحٌحة إللى صلفحة أخلرى باسلتخدام نلص ], [html
انظر إلى النص البرمجً رقم . 17.3
<>"meta HTTP-EQUIV="REFRESH" content="0; url=http://www.ksu.edu.sa
?<
;)"include("config.php
class index
{
{)(function index
;)($c->con
;)$q=mysql_query($sql
{))while($row=mysql_fetch_array($q
;)]'echo($row['det
89
}
كما شاهدنا ف ن "البرمجة عبر الموقع" من المشاكل التً ٌعانً منها كثٌلر ملن المواقلع
,وكذلك هناك عدة طرق لكشف هذه الثغرات وهً:
ٔ -الكشف الداخلً .
ٕ -الكشف الخارجً .
ما هو الكشف الخارجً ؟
هنللاك بعللض األدوات المسللتخدمة التللً تعللرف بمسللح نقللاط ضللعف المواقللع (Web
), Vulnerability Scannerفهللً تقللوم بعملٌ لة مسللح لجمٌللع الللروابط التللً قللد تسللبب
"البرمجللة عبللر الموقللع" ومللن خاللل ٌسللتطٌع المهللاجم إضللافة أوامللر خبٌثللة وهللذه غالبلا ً
تستخدم لمسح الروابط للـتأكد ملن خللو الصلفحة ملن الحقلن االسلتعالمٌة ,وكلذلك للتأكلد
من خلو الموقع من ثغرة "البرمجة عبر الموقع" .
أما الكشف الداخلً :
فهو القٌام بعملٌ التجربة ,فنقوم بعملٌة اختٌار أي صفح ٌوجلد بهلا منفلذ للزائلر لكتابلة
صا برمجٌلة خبٌثلة مهملا كانلت ما ٌرٌده و إضافت لقاعدة البٌانات ,ونضٌف إلٌها نصو ً
هذه النصوص ,ثم نرى ما هً رده فعل الموقع وهل ٌرفض هذه النصلوص البرمجٌلة
أو ٌقبلها أم ماذا !!
لن تتوقف "البرمجة عبر الموقع" عللى إضلافات غٌلر مرغوبلة فلً محتلوى الموقلع بلل
األمر ٌتعدى إلى سرقة الكعك ] [cookiesالخاص بأي زائر حتلى للو كلان الملدٌر العلام
]. [admin
باسلللتخدام الداللللة وهلللذا العلمٌلللة تسلللتخدم فٌهلللا لغلللة جافلللا سلللكربت لسلللحب الكعلللك
].[document.cookie
90
فللً النهاٌللة نسللتعرض سللوٌا ً بعللض الوسللوم ] [tagsالتللً تسللتخدم إلضللافة النصللوص
البرمجٌة الخبٌثة التً ممكن أن تدمج مع لغة ]. [html
-الوسم (<ٌ )>scriptستخدم إلضافة نصوص لغة ][java scriptأو لغات أخرى ٔ
-الوسللم (<ٌ )>objectسللتخدم إلدخللال عناصللر ] [ActiveXإلللى صللفحات الموقللع ,هللذا ٕ
الوسم فقط ٌعمل على متصفح ].[Internet Explorer
-الوسم (<ٌ )>ifreamستخدم إلضافة صفحات داخلٌة داخل الصفحة األساسٌة. ٖ
-الوسلللللم (<ٌ )>embedسلللللتخدم إلضلللللافة فٌلللللدٌو أو فلللللاله وٌللللل دي عملللللل التلللللاق ٗ
نفس ] [objectولكن ٌعمل على أي متصفح .
91
الحلول المتوافرة لمشكلة (البرمجة عبر الموقع )0
عزٌزي القارئ ,فً هذا البحث المتواضلع قملت بلالتركٌز كملا ذكلرت سلابقا ً عللى علدة
ثغرات ومن هذه الثغرات الحقن االستعالمٌة و إٌجاد الحلول المناسلبة لهلا بلغلة ][php
,فلذلك قمت بوضع حلول برمجٌة مفصلة ج ًدا لحل مشكلة الحقن االستعالمٌة .
ٕ8
, http://www.php.net/htmlspecialchars , http://www.php.net/manual/en/function.htmlentities.php
http://www.php.net/mysql_real_escape_string
92
الحل األول:
كما هو معلوم فأن "البرمجة عبر الموقع" ] [xssفً أغلب األحٌان تتم عن طرٌق جهلة
العمٌللل ] , [client-sideوذلللك ب ضللافة النصللوص البرمجٌللة الخللاص بللـ ] ,[htmlأو
نصوص أي لغة تعد من اللغات التً تعمل فً جهة العمٌل .
استخدم دالة ] [htmlspecialcharsإلزاللة النصلوص الخبٌثلة ,وغٌلر المرغلوب بهلا ,
مثل نصوص جافا سكربت أو ] [htmlالتً تقوم بتحوٌل الزائر إلى صفحة أخرى .
تقللوم هللذه الدالللة بتحوٌللل جمٌللع وسللوم] [htmlإلللى رمللوز ,وهللذه الرمللوز ال ت ل ثر فللً
محتوى الموقع ,والمقصود هنا أن للو أضلاف المهلاجم رملز بداٌلة الوسلم )<((أصلغر
من) سوف تقوم هذه الداللة بتحوٌلل هلذا الرملز إللى ]; , [<وبهلذه الطرٌقلة ف نل مهملا
حاول المهاجم أن ٌقلوم ب ضلافة وسلوم أو (نصلوص) ] , [htmlأو غٌرهلا فللن تعلرض
من خالل المتصفح بالشكل المطللوب ,وسلوف ٌعلرض لل ]; ,[<وهلذه لٌسلت للدٌها
إمكانٌللة التللأثٌر علللى المتصللفح .وعملٌللة تحوٌلل الرمللوز ٌسللتخدم فٌهللا جللدول [ASCII
] , Tableانظر إلى النص البرمجً رقم . 18.1
>"<form action="check.php
)htmlspecialchars( 18.1
ستخدام لنرى سوٌا ً نص صفحة ()check.php
النصمع ا
البرمجً
?<
class check
{
{)(function check
;global $HTTP_POST_VARS
;]'$username=$HTTP_POST_VARS['username
لنرى سوٌا ً النص البرمجً الخاص بالمتصفح ] [htmlبعد إدخال نص خبٌث إلٌها كملا
فً الشكل التالً :الشكل . 18.1
الشكل 18.1
الشكل 18.2
نالحظ فً الشكل 18.2أن قام بتحوٌل الرمز]<[إلى ]; , [<وكذلك قام بتحوٌلل جمٌلع
(") إلى]; ,["وقام بتحوٌل الرمز الذي ٌدل على نهاٌة الوسم ];. [>
94
كل األوسمة . مشكلة هذه الدالة أنها تقوم بعملٌة تحوٌل بعض األوسمة ولٌ
الحل الثانً:
استخدم دالة ] [Htmlentitالمشابهة للدالة التً تم شرحها فً الحل األول ,ولكن هلذه
الدالة تقوم بعملٌة تحوٌل أي وسم ٌختص بلغة] [htmlدون استثناء ,وهً (أكثر فعالٌلة)
من الدالة]. [htmlspecialchars
وتستخدم هذه الدالة بالطرٌقة التالٌة ,انظر النص البرمجً رقم : 18.3
?<
class check
{
{)(function check
;global $HTTP_POST_VARS
;]'$username=$HTTP_POST_VARS['username
;)echo($username
}
;}
;)($start_new=new check
>?
95
الحل الثالث :
الطرٌقة السابقة (الحل الثانً) فعالة جداً ,ولكن قد ٌحتاج المستخدم إللى إدخلال بعلض
الروابط أو بعض األوسلمة التلً قلد ال تشلكل خطلراً مباشلراً أو ال تشلكل خطلراً نهائٌلا ً ,
مثلل ]> , [<b> , <h1للذلك توجلد الداللة ] [strip_tagsالتلً تسلتقبل متغٌلرٌن :األول
هللو الللنص المللراد فحص ل وتنقٌت ل وحللذف جمٌللع أوسللمة ] ,[strip_tagsوالثللانً هللو
األوسمة المسمو بها مثل]>. [<b
class check
{
{)(function check
;global $HTTP_POST_VARS
;]'$username=$HTTP_POST_VARS['username
;)echo($username
}
;}
;)($start_new=new check
?
96
0 [file Inclusion] استدعاء الملفات
ٕ9
, http://www.scanit.be/uploads/php-file-upload.pdf
http://www.freeos.com/guides/lsst/ch01sec06.html
97
كثٌلراً ملا نسلمع بلاختراق المواقلع علن طرٌلق رفللع ملفلات خبٌثلة إللى الخلادم ,علادة ٌللتم
االختللراق بسللرقة المعلومللات الحساسللة ,وهللذا النللوع مللن االختللراق قللد ال ٌتعللدى إطللار
ومدى الموقع المراد إلحاق الضرر ب نفس ,ملاذا للو كلان الهلدف ملن االختلراق التلأثٌر
وإضعاف الخادم ؟
أوالً :ما هً الصدفة ] [SHELL؟
الشكل 19.2
إن ]ٌ [Linux Kernelقللوم بللالتحكم وتحدٌللد مصللادر الحاسللب اآللللً مللن الطابعللات ,و
الذاكرة ,والمعالج .
وكلللذلك ٌتعاملللل ملللع الملفلللات وإدارتهلللا,إذاً هلللو المحلللرك األساسلللً فلللً نظلللام تشلللغٌل
لنك ].[Linux
تخٌل معً لو أن شخصا ً استطاع أن ٌصل إللى هلذه النقطلة ,بالتأكٌلد سلوف ٌكلون ملدٌر
الخادم بأكمل ,فالصدفة الذي ٌعمل وسٌطا ً بٌن اللب ] [Kernelوبٌن مكونات الحاسب
اآللللً ٌقللوم بتنفٌ لذ جمٌللع األوامللر التللً ٌتلقاهللا مللن المسللتخدم بشللكل نصللً مثللل دو
] [DOSفً نظام التشغٌل ]. [WINDOWS
إذاً من خالل ] [shellتستطٌع إرسال أوامر دقٌقة وحساسة إلى اللب ,مثلل عملل نسلي
احتٌاطٌة ٌومٌة للخادم ,أو القٌام بتجزئة الخادم ,أو التحكم بمصادر الخادم .
98
فلً الحقٌقلة هللذا األملر رائللع جلداً لمسللتخدمً الخلوادم ,ولكللن قلد ٌسللبب بعلض األحٌللان
أضراراً ٌتحملها الخادم و قد تحدث بسبب خطأ برمجلً بسلٌط ,وقلد ٌتحملل هلذا الخطلأ
كللال الطللرفٌن (المبللرمج و مللدٌر الخللادم ) ,حٌللث أن الللبعض مللن مللدٌري الخللوادم ال
ٌنفذون فحصا ً دائما ً على بعض الدوال التً قد تسلبب مشلاكل ,وقلد ٌكلون فٌهلا خللل ملن
أصحاب ] [bugاللغة ,أو قد ال ٌكون بها خلل ولكن زٌادة فً أمان الخادم .
></form
الللنص البرمجللً رقللم [html] 19.1بسللٌط جللداً وهللو نمللوذج السللتعراض الملفللات
واختٌار أحد هذه الملفات لرفعها إلى الخادم ,بال شلك سلوف ترسلل إللى الصلفحة اللنص
البرمجً رقم ٕ لمعالجتها ورفعها .
99
اآلن ٌأتً دور النص البرمجً : 19.2
?<
class upload
{
{)(function upload
{))]"if(isset($_FILES["file_upload
;]"$img_path="c:/".$_FILES["file_upload"]["name
}
{else
}
فً النص البرمجً رقم 19.2قمنا بالبرمجة بطرٌقة صحٌحة ,ولكن لم نقلم بالتأكلد ملن
19.2مشاكل كثٌلرة ,وٌقلوم المهلاجم برفلع
ٌسبب وهذا قد
البرمجً نوع الملف المراد رفع إلى الخادم ,النص
>? داخل الخادم ,والبعض منها ٌقوم بمهاجمة الخادم و التحكم ب بشكل كامل .
قد ٌخطر على البلال أنل ملاذا للو قمنلا بعملٌلة تفحلص لجمٌلع الملفلات الملراد رفعهلا إللى
الخللادم ,ولكللن قللد ٌقللوم المهللاجم بتغٌٌللر االسللم الملحللق (امتللداد الملللف) ][extension
بحٌث أننا لن نستطٌع أن نعرف هل هذا ] [shellأم صورة ؟
?<
;]"$img_path="c:/".$_FILES["file_upload"]["name
100
;)"copy($_FILES["file_upload"]["tmp_name"],$img_path) or die("cant upload this file
وعلى هذا األسا لو قمنا بتعدٌل النص البرمجً السابق إلى الشكل التالً فسوف ٌكون
خالٌا ً من المشاكل البرمجٌة ولكن بنسبة محدودة ,انظر إلى النص البرمجً رقم ٖ :
ولكن ٌبقى فً األمر بعض التخوف ,حٌث أن من الممكن التالعب بالنص البرمجً ملن
خالل لغة بٌرل ] [perlالتً من الممكلن اسلتغاللها للتحاٌلل والتالعلب بلالنص البرمجلً
عن طرٌق إخفاء محتوى الملف ,فٌجعل الموقع ٌظن أن هذا المللف صلورة عللى اللرغم
من أن ملف خبٌث ]. [shell
لنشاهد سوٌا ً النص البرمجً ] [perlونرى االستجابة من الخادم لهذا األمر :
#!C:/Perll/bin
;use LWP
;use HTTP::Request::Common
[ >= Content
"image/gif"],
101
],
فللً الللنص البرمجللً رقللم 19.4قمنللا باسللتخدام لغللة ] [perlللتالعللب وتخطللً األمللر
الشللرطً فللً الللنص البرمجللً 19.3مللن خللالل قٌامنللا برفللع ملللف]( [c99.phpملللف
الصدفة) ,حٌث إن امتداده ] ,[phpوجعلنا محتوى هذا الملف صورة ملن نلوع ][Gif
.
لنرى سوٌا ً االستجابة من الخادم :
الشكل 19.2
كمللا تشللاهد لقللد قمنللا برفللع الملللف وتخطللً األمللر الشللرطً وبللذلك ٌكللون الموقللع تحللت
سٌطرتنا ونستطٌع أن نتحكم ب بشكل كامل .
أٌضا ً دالة ] [copyغالبا ً تستخدم فً نسي الملفات وهذا األمر قد ٌسبب مشاكل ,فب مكلان
المهاجم نسي محتوٌات أي ملف ] [phpإلى ملف آخلر ملن نلوع ] [textوملن ثلم قلراءة
النصوص البرمجٌة الخاصة بهذا الملف.
102
)42الحلول المتوافرة لمشكلة (استدعاء الملفات
ٖٓ
. http://corpocrat.com/2007/11/28/implementing-secure-file-upload-in-php
103
عزٌللزي المبللرمج ,لحللل مشللكلة رفللع الملفللات ٌجللب أن تملللك القللدرة علللى معرفللة نللوع
الملفات التً سوف ترفع على الخادم وامتداداتها ,وأال تسمح برفلع الملفلات التلً تنتهلً
بـ ) . (.phpفكٌف تقوم بذلك ؟
الحلول :
سوف أضلع بلٌن ٌلدٌك عزٌلزي القلارئ اللنص البرمجلً رقلم 20.1وملن خاللل سلوف
نقوم بالشر ,فانظر النص رقم .20.1
))]'1.if (!getimagesize($_FILES['imagefile']['tmp_name
{
;)(exit
}
{
))]'3.if(preg_match("/$file\$/i", $_FILES['imagefile']['name
{
;exit
}
{else
رفعل//
لرادبالرفع
المل قم
فللً السللطر األول مللن الللنص البرمجللً رقللم , 20.1قمنللا باسللتقبال الملللف
الداللللة
} والتأكلللد ملللن أنللل صلللورة وللللٌ مللللف فٌلللدٌو ,أو أي نلللوع آخلللر علللن طرٌلللق
التلً
} ] , [getimagesizeأما الحل اآلخر فهو وضع قائمة سوداء تحتوي على جمٌلع الملفلات
[$blacklist = array(".php", النصللطر ٕ
البرمجً 20.1 ٌمنلللع رفعهلللا عللللى الخلللادم كملللا فلللً السل
104
];)" ".phtml", ".php3", ".php4", ".js", ".shtml", ".pl" ,".pyحٌلث أن هلذه
الملفات تنتهً بامتدادات خطرة وتسبب مشاكل أمنٌة للخادم .
وكذلك قمنا فً السطر ٖ ,بالتأكلد ملن أن المللف الملراد رفعل غٌلر موجلود فلً القائملة
السوداء ]))]'. [if(preg_match("/$file\$/i", $_FILES['imagefile']['name
105
التحكم الخارجً بحالة المعلومات
40[External Control of Critical State Data]
ٖٔ
. /http://www.damasgate.com/vb/t39002 , ٕٙٗ : رقم الثغرة, http://cwe.mitre.org/top25/#CWE-642
106
إن تخزٌن المعلومات الحساسة المتعلقة بصلالحٌات الموقلع وحاللة المعلوملات للدى كلل
مستخدم ,وأٌضا ً استخدام المتغٌرات المخزنة فً الملفات ,أو قواعد البٌانات ,أو كعك
فً تحدٌد المصادر والموارد من أخطر المشاكل البرمجٌة ,فللو فرضلنا أن صلالحٌات
الموقللع تعتمللد علللى الكعللك وٌوجللد بهللا المعلومللة التالٌللة , [authenticated=true] :
وفائدتها تحدد هل هذا العمٌل مصر لل بلدخول صلفحة معٌنلة أم ال ٌ ,سلتطٌع المهلاجم
إنشاء كعك وتغٌٌر هذه المعلومة السابقة وبالتالً ٌمكن دخول الصلفحات الحساسلة وهلو
غٌر مصر ل بذلك .
على أي مستوى تحدث هذه الثغرة ؟ ما هً اللغات التً تتأثر بها ؟ ومزا هزو مسزتوى
خطورتها ؟
تحدث هذه الثغرة على مستوى تصمٌم و هٌكلٌة و برمجة النظام .
اللغات التً تتأثر بهلا هلً جمٌلع اللغلات البرمجٌلة بلال اسلتثناء وبلاألخص األنظملة التلً
تتعامل مع الخادم ] ,[Serverوكلذلك قاملت منظملة ] [Sansبتصلنٌف هلذه الثغلرة بأنهلا
ذات خطورة عالٌة ]. [High
?<
class Cookies
{
{)(function Cookies
;$expire=time()+60*60*24*30
}
فللً الللنص البرمجللً رقللم 21.1نشللاهد أننللا أنشللأنا كعكلا ً ٌحتللوي علللى ;}متغٌللر واحللد هللو
;)($start_new=new Cookies
] [adminوقٌمة ]. [no
>? لنشاهد اآلن النص البرمجً رقم . 21.2
النص البرمجً 21.1
{)(function login
{)"if($_COOKIE["admin"]=="yes
;)"echo("admin
107 }
{else
فً النص البرمجً رقم 21.2لن تالحظ عزٌزي القارئ أن هناك خطأ برمجٌا ً ومشلكلة
ال تظهللر إال بعللدما ٌقللوم المهللاجم بتغٌٌلر القللٌم الموجللودة فللً الكعللك لكللً ٌللدخل الموقللع
بصللفت مللدٌراً عام لاً ,وبللال شللك ف لأن عملٌللة التغٌٌللر تللتم بأحللد بللرامج تغٌٌللر الكعللك أو
باسللتخدام إحللدى إضللافات ] [add-onsمتصللفح ] [firefoxفٌقللوم ب دخللال قٌمللة ][yes
بدالً من ] [noوٌصبح هو المدٌر العام ] [adminانظر إلى الشكل ٔ .
الشكل 21.1
وبعد ما قمنا بتنفٌذ النص البرمجً رقم , 21.2كان الناتج كما فً الشكل . 21.2
108
الشكل 21.2
ٕٖ
. http://cwe.mitre.org/data/definitions/642.html
109
الحل األول :
عزٌزي المبرمج ,ال تقم بتخزٌن المعلومات الخاصلة بالعمٌلل فلً جهلازه دون تشلفٌر !
أو ٌجب أن تكون لدٌك القدرة على معرفلة أن المعلوملات التلً فلً جهلاز العمٌلل للم ٌلتم
التالعللب بهللا ,باسللتخدام (رمللز التوثٌللق للرسللالة ) [message authentication
]) , codeٖٖ (MACحٌلث أن رملز رسلالة التوثٌلق هلً خوارزمٌلة تسلتخدم للتأكلد ملن
ضلا ملنتكامل المعلومات المرسلة عند وصولها إللى المسلتقبل ] [Data integrityوأٌ ً
أن المعلومات المرسلة تم فتحها بواسطة المستقبل المصلر لل بفتحهلا وقلراءة محتواهلا
].[authenticity
فكرة رمز التوثٌق للرسالة هو أن عنلدما ٌقلوم المرسلل (خاللد) ب رسلال رسلالة ٌجلب أن
ٌتلوافر المفتللا الخللاص باإلضلافة إلللى أنل ٌقلوم ببعثللرة الرسللالة باسلتخدام دالللة البعثللرة
(االختللزال) ] [hashوبعللدها ٌقللوم ب رسللال قمتللٌن األولللى (الرسللالة الخللام) أمللا الثانٌللة
(الناتج من ] , ) [hashوعند وصلها إلى المستقبل ٌقوم ب دخلال الرسلالة الخلام ][hash
ٖٖ
. http://en.wikipedia.org/wiki/Message_authentication_code
110
ضلا ال ٌسلتطٌعوٌتأكد من ناتج ] [hashإذا كان هو نف المرفق ملع الرسلالة أم ال ! وأٌ ً
أحد فك هذه الرسالة إال بوجود المفتا الخاص المتعلارف علٌل بلٌن المرسلل والمسلتقبل
,ولكن هذه الطرٌقة ضعٌفة ألن رمز توثٌق الرسالة ٌتم إنشا ه من قبلل المرسلل وللذلك
ف ن المستقبل ال ٌسلتطٌع أن ٌثبلت أن ملن أرسلل الرسلالة هلو خاللد عنلدما ٌقلوم باإلنكلار
وأن لم ٌرسل شٌئا ً.
;global $HTTP_POST_VARS
;]'$username =$HTTP_POST_VARS['username
{)""==]'if($_SESSION['username
{)if($this->checkuser($username,$pass)==true
;$_SESSION['username']=$username
}
{else
}
}
111 {else
112
43[Untrusted Search Path] مسار البحث غٌر الموثوق
ٖٗ
. ٕٗٙ : رقم الثغرة, http://cwe.mitre.org/top25/#CWE-426
113
تعتمللد هللذه الثغللرة علللى ثغللرة (حقللن أوامللر نظللم التشللغٌل ) ,حٌللث أنهللا تقللوم بالتالعللب
وتغٌٌللر المسللار الصللحٌح لتنفٌللذ الملفللات وجعلل ٌ شللر علللى بللرامج خبٌثللة ,أو قللد ٌقللوم
بالتالعب فً مساره لتنفٌذ أوامر عكسٌة على خادم الموقع .
علززى أي مسززتوى تحززدث هززذه الثغززرة؟ و مززا هززً اللغززات التززً تتززأثر بهززا ؟ ومززا هززو
مستوى خطورتها ؟
تحدث هذه الثغرة على مستوى تصمٌم وهٌكلٌة وبرمجة النظام .
اللغللات التللً تتللأثر بهللا هللً جمٌللع اللغللات البرمجٌللة بللال اسللتثناء وكللذلك قامللت منظمللة
] [Sansبتصنٌف هذه الثغرة بأنها ذات خطورة عالٌة ]. [High
لمشاهدة األمثلة على هذه الثغرة قم بالرجوع إلى ثغرة (حقنة أوامر نظم التشغٌل ) .
114
)4 الحلول المتوافرة لمشكلة (مسار البحث غٌر الموثوق
ٖ٘
http://www.php.net/manual/en/function.exec.php#86965 , http://cwe.mitre.org/data/definitions/426.html
115
الحل األول :
عزٌزي المبلرمج قلم بتحدٌلد مسلار البحلث للدٌك وضلع فلً مللف أو تخزٌنل فلً قاعلدة
البٌانات لكً تتأكد من المسار الذي قام المهاجم بطلب ملن ضلمن هلذه مسلار البحلث وال
ٌ شر على برنامج خبٌث ,انظر إلى النص البرمجً رقم . 23.1
;global $HTTP_GET_VARS
;]'$ip=$HTTP_GET_VARS['ip
{)"if($ip=="10.0.0.138
;)print_r($output
}
116
إغالق أو التخلص من المصادر بطرٌقة غٌر صحٌحة
4 [Improper Resource Shutdown or Release]
ٖٙ
. ٗٓٗ : رقم الثغرة, http://cwe.mitre.org/top25/#CWE-404
117
لكل نظام وقت ٌنتهً فٌ و ٌصبح من الجٌلل القلدٌم ,فللذلك عنلدما ترٌلد أن تلتخلص ملن
هذا النظام ٌجب أن تتأكد ملن أنلك مسلحت جمٌلع آثلاره وإال فملن الممكلن أن ٌسلتغل فلً
قللراءة الملفللات ,أو كعللك ,أو البحللث عللن المعلومللات الحساسللة وأٌض لا ً إعللادة اسللتخدام
موارد النظام .
فلللذلك ٌجللب علٌللك أخللً المبللرمج أن تقللوم بعمٌلللة إلغللاء ومسللح جمٌللع المصللادر التللً
استخدمتها فً النظام ,سوف أعرض لك مثالً ٌوضح هذه الثغرة الح ًقا .
علززى أي مسززتوى تحززدث هززذه الثغززرة ؟ ومززا هززً اللغززات التززً تتززأثر بهززا ؟ ومززا هززو
مستوى خطورتها ؟
تحدث هذه الثغرة على مستوى تصمٌم و هٌكلٌة و برمجة النظام .
اللغللات التللً تتللأثر بهللا هللً جمٌللع اللغللات البرمجٌللة بللال اسللتثناء وكللذلك قامللت منظمللة
] [Sansبتصنٌف هذه الثغرة ما بٌن قلٌلة ومتوسطة الخطورة .
;)"fwrite($handle, "admin=yes
//
//
118
الموقع ,وتم كتابة السلطر ( )admin=yesفلً المللف ], [admin.phpوبملا أن المللف
لم ٌلتم إغالقل ألنل موجلود فلً اللذاكرة الم قتلة للموقلع وبالتلالً للو دخلل مسلتخدم عللى
صفحة ] [login.phpالنص البرمجً رقلم , 24.2فسلوف تعطلى لل صلالحٌة الملدٌر
العام ] [admin=yesوهو ال ٌستحقها ,انظر إلى النص البرمجً رقم .24.2
;))"$contents = fread($handle, filesize("C:\\AppServ\\www\\p2\\p.txt
119
الحلول المتوافرة لمشكلة (إغالق أو التخلص من المصادر بطرٌقة غٌر
صحٌحة )4
;)($arr = array
;)($arr[] = rand
}
ٖ7
http://php.net/manual/en/function.memory-get- , http://cwe.mitre.org/data/definitions/404.html
", memory_get_usage(),المرحلة الثانٌة" echo ;""\n
. http://php.net/manual/en/function.unset.php , usage.php
;$foo = 1
120 ;$bar = 2
فً المرحلة الثانٌة قمنا بعمل ] , [for loopحٌث أن فً كل دورة ] [loopنقلوم بتعبئلة
المصللفوفة ] [$arrبللرقم عشللوائً وكللان النللاتج ] [72291640باٌللت ,نالح لظ أن المسللاحة
المستخدمة زادت !
أما فً المرحللة الثالثلة فكلان النلاتج ] [72291784باٌلت ,ألننلا قمنلا بعملٌلة أقلل تكلفلة ملن
غٌرها وهً عملٌة اإلسناد ]. [$foo = 1
نللأتً إلللى المرحلللة األخٌللرة "الرابعللة" كللان النللاتج ] [72291476باٌللت ,مللاذا تالحللظ ؟ إن
المساحة المسلتخدمة أصلبحت أقلل ,حٌلث إن العملٌلات فلً المرحللة الرابعلة ال تسلتخدم
الللذاكرة بشللكل كبٌللر إال فللً عملٌللة تغٌٌللر الم شللر ! حٌللث إننللا فللً ]; [$foo = $arrجعلنللا
] ٌ [$fooشر على المكان نفس الذي ت شر علٌ المصفوفة ]. [$arr
عزٌزي المبرمج بعدما شاهدت آلٌة عمل الذاكرة مع العملٌات ,نعرض لك اآلن اللدوال
التً تقوم بعملٌة مسح المتغٌر من الذاكرة عند االنتهاء منل ,انظلر إللى اللنص البرمجلً
رقم . 25.2
121
echo memory_get_usage();
$arr = array();
$arr[] = rand();
echo("<br>");
echo memory_get_usage();
unset($arr);
echo("<br>");
echo memory_get_usage();
122
بعلللد تنفٌلللذ اللللنص رقلللم 25.2كلللان النلللاتج فلللً المرحللللة األوللللى ] , [92888والثانٌلللة
] [72290192والثالثة ] , [92968فكما تشاهد عزٌزي المبرمج أن بعدما قمنا بمسح المتغٌر
] [$arrملللن اللللذاكرة باسلللتخدام الداللللة ]) [unset($arrفللل ن المسلللاحة المسلللتخدمة فلللً
الذاكرة أصبحت أقل بكثٌر.
{)(function unseeting
;"$x="aldeheme
;"$y="ksu.edu.sa
;)unset($x
;)unset($y
}
123
,وتتم هذه الطرٌقة بربط الدوال الحساسة بالصالحٌات لكً تحلدد العملل والمجلال اللذي
تعمل ب هذه الدالة ,كذلك تأكد من أن الوصول إلى المصادر مناسلبة ألنظملة الم سسلة
أو العمل لدٌك ,انظلر اللنص رقلم 25.4لكلً تتضلح فكلرة عملل مسلح اللذاكرة الم قتلة
لموقع ما ,وبال شك أن عندما ٌقوم المستخدم بطلبها فسوف ٌجلب الصلفحة بأكملهلا ملن
الخادم بشكل مباشر ولٌ من ذاكرة المستخدم أو ذاكرة محركات البحث .
قم بوضع النص رقلم 25.4فلً أول الصلفحة الملراد تعطٌلل عملل اللذاكرة الم قتلة لهلا
(قبلللل طباعلللة أي مللللف , )htmlوكلللذلك قلللم بوضلللع الوسلللم (اللللنص رقلللم ) 25.5فلللً
الصفحات المراد جلبها ولكن قد ال ٌعمل النص البرمجلً 25.5بشلكل صلحٌح حٌلث أن
المتصفح قد ال ٌقرأ الوسلم ] [METAعنلد جللب الصلفحة وبالتلالً سلٌقوم بجللب الصلفحة
التً فلً اللذاكرة الم قتلة وكلذلك لٌسلت جمٌلع المتصلفحات تلدعم الوسلم ] [METAفللذلك
البرمجً رقم . 25.4
"<META http-equiv="expires ٌجب علٌك أن تستخدم النص
>"content="0
بالنسللبة لمحركللات البحللث خاصللة ] [google.comلكللً نمنع ل مللن وضللع صللورة أو
نسخة للموقع فً الذاكرة الم قتة الخاصة ب نستخدم الوسم وبالتالً تخبر محرك البحلث
أن ال ٌقوم بتخزٌن فً الذاكرة الم قتة الخاصة ب .
124
4 [Incorrect Calculation] الحسابات الخاط ة
ٖ8
http://lifehacker.com/software/google/ask- , ٙ8ٕ : رقم الثغرة, http://cwe.mitre.org/top25/#CWE-682
http://articles.sitepoint.com/article/caching- , lifehacker-keep-google-from-caching-my-site-165522.php
php-performance
125
عزٌزي القارئ ,استخدام الحسابات والعملٌلات الرٌاضلٌة فلً الحاسلب اآلللً قلد ٌسلبب
بعلض المشلاكل عنللدما تتعللق هلذه الحسللابات باتخلاذ القلرارات أو حجللز مصلدر معللٌن ,
فمللن الممكللن أن ٌقللوم البرنللامج أو الموقللع بالقسللمة علللى العللدد صللفر ] [zeroوبالتللالً
ٌحصل انهٌار فً النظام .
إن إعطللاء الفرصللة للمهللاجم ب دخللال القللٌم مللن الممكللن أن ٌسللبب أخطللاء منطقٌللة فللً
عملٌات الشراء ,و البٌع ,والمزادات ( راجع ثغرة عدم التحقق ملن صلحة المعلوملات
المدخلة بشكل صحٌح ) .
علززى أي مسززتوى تحززدث هززذه الثغززرة ؟و مززا هززً اللغززات التززً تتززأثر بهززا ؟ ومززا هززو
مستوى خطورتها ؟
تحدث هذه الثغرة على مستوى تصمٌم و هٌكلٌة و برمجة النظام .
اللغللات التللً تتللأثر بهللا هللً جمٌللع اللغللات البرمجٌللة بللال اسللتثناء وكللذلك قامللت منظمللة
] [Sansبتصنٌف هذه الثغرة بأنها عالٌة الخطورة .
شاهد المثال التالً :
;global $HTTP_GET_VARS
;]'$num_id = $HTTP_GET_VARS['num_id
;$who_is=$num_id/$num_id
{)if($who_is==0
}
{else
126
صللفر وبالتللالً سللوف ٌكللون نللاتج القسللمة صللفراً ,وعنللدها سللوف ٌصللبح مللدٌرً ا عا ًمللا
للموقع ,انظر الشكل 26.1بعد التنفٌذ .
الشكل 26.1
مع أن أظهر لنا رسالة تنبٌ وللٌ خطلأ (والمقصلود أن اللنص البرمجلً سلوف ٌسلتمر
فً التنفٌذ ألن لغة ] [phpلم تعده خطأ ً برمجٌا ًولكن خطأ ً منطقٌا ً)وبالتلالً الزائلر أصلبح
مدٌراً عامًا ألن المتغٌر ] [$who_isأصبحت قٌمت صفرً ا .
127
الحلول المتوافرة لمشكلة (الحسابات الخاط ة )4
ٖ9
, http://cwe.mitre.org/data/definitions/682.html
, http://www.php.net/manual/en/language.types.integer.php#language.types.integer.casting
. http://php.net/manual/en/function.intval.php
128
;global $HTTP_GET_VARS
;global $HTTP_GET_VARS
;]'$number_page =(int)$HTTP_GET_VARS['number_page
{)if($number_page<2147483647
}
أقلل
{elseفً النص البرمجً رقم 27.2قمنا بعملٌة التأكد من أن الرقم الصحٌح بعد التحوٌلل
;)"خطأ"(echo
من ] [2147483647الذي ٌمثل أكبر عدد ٌمكن تمثٌل بصفت عدداً صحٌحا ً .
}
الحل الثانً :
النص البرمجً 27.2
قم بالتأكد من األرقام المدخلة أنها صحٌحة وأنها ضمن نطلاق معلٌن ! انظلر اللنص رقلم
.27.3
;global $HTTP_GET_VARS
;]'$number_page =(int)$HTTP_GET_VARS['number_page
{)if($number_page>0 || $number_page<10
}
{else
129
;)"خطأ"(echo
كما تشاهد فً النص البرمجً رقم 27.3قمنا بحصر المدخالت ما بٌن الرقم واحلد إللى
الرقم عشرة فقط وما عدا ذلك ٌرفض .
130
global $HTTP_GET_VARS;
$number_page =(int)$HTTP_GET_VARS['number_page'];
if($number_page>0){
131
32[Code Injection] حقن النصوص البرمجٌة
ٗٓ
. http://php.net/manual/en/function.exec.php , 9ٗ : رقم الثغرة, http://cwe.mitre.org/top25/#CWE-94
132
قد ٌقوم المهاجم بحقن النصوص البرمجٌة الخبٌثة عن طرٌق المسارات المسلمو بهلا ,
حٌث إن مشاكل الحقن سواء ( حقن النصوص البرمجٌة أو الحقنة االستعالمٌة ) تخضع
للمشكلة نفسها و لها الحلول نفسها .
علززى أي مسززتوى تحززدث هززذه الثغززرة ؟و مززا هززً اللغززات التززً تتززأثر بهززا ؟ ومززا هززو
مستوى خطورتها ؟
تحدث هذه الثغرة على مستوى تصمٌم ,وهٌكلٌة ,وبرمجة النظام .
اللغللات التللً تتللأثر بهللا هللً جمٌللع اللغللات البرمجٌللة بللال اسللتثناء وكللذلك قامللت منظمللة
] [Sansبتصنٌف هذه الثغرة بأنها عالٌة الخطورة .
133
شاهد المثال التالً :
?<
class code
{
{)(function code
;"$MessageFile = "messages.php
;global $HTTP_GET_VARS
;]'$name =$HTTP_GET_VARS['name
;]'$message = $HTTP_GET_VARS['message
;)fclose($handle
}
;}
;)($start_new=new code
فٌل>?
فً النص البرمجً رقم رقم 28.1قمنا بفلتح مللف هلو [messages.php] :والكتابلة
المتغٌلر ] [messageوكتابلة محتلواه بشلكل ,ولكن الخطأ البرمجً هو أننا قمنلا باسلتقبال
النص البرمجً 28.1
مباشر فلً المللف,وبالتلالً فل ن أي شلخص ٌقلوم بعلرض المللف فسلوف ٌلتم علرض ملا
وضع ب من قبل المهاجم ,لنفرض أن قام بوضع النص البرمجً الخبٌث
]>?;)' [<?php system('/bin/ls -الذي ٌقوم بعلرض جمٌلع ملفلات الخلادم إذا كلان
نظام التشغٌل لنك وبالتالً ٌستطٌع أي شلخص مهملا كلان تصلفح جمٌلع ملفلات الخلادم
بالدخول على هذا الملف ! .
[<?phpعندما قمنا بتنفٌذ النص البرمجً , 28.1وكانت قٌملة المتغٌلر ] [$messageهلً
]>? ; )' , exec('del index.phpكللان النللاتج بعللدما قمنللا بفللتح الملللف ] [messages.phpكمللا فللً
الشكل .28.1
134
الشكل 28.1
وبللال شللك بعلللد تنفٌللذ ملللف ] [messages.phpاللللذي ٌحتللوي علللى أملللر حللذف الصلللفحة
الرئٌسٌة] [index.phpف ن سٌقوم بحذفها !
135
)30الحلول المتوافرة لمشكلة (حقن النصوص البرمجٌة
ٗٔ
http://roshanbh.com.np/2008/01/uploading-larger- , http://cwe.mitre.org/data/definitions/94.html
. files-in-php.html
136
الحل األول :
عزٌزي المبرمج ,إن عملٌة الحقن بصفة عامة سلواء كانلت البرمجلة عبلر الموقلع ,أو
حقن النصوص البرمجٌة كلها تملك الحللول نفسلها ,فللذلك تسلتطٌع الرجلوع إللى حللول
ثغرة البرمجة عبر الموقع (صفحة . ) 89
137
30[Improper Initialization] اإلنشاء الغٌر صحٌح
ٕٗ
. ٙٙ٘ : رقم الثغرة, http://cwe.mitre.org/top25/#CWE-665
138
عزٌزي القارئ ,عندما ترٌد أن تذهب إلى مناسبة مهمة بالنسبة لك ,ف نلك تقلوم بعملٌلة
تجهٌللز جمٌللع األمللور واللللوازم الضللرورٌة ,مللا ٌحللدث فللً اإلنشللاء غٌللر الصللحٌح أنللك
تظن بأنك قمت باإلنشاء الصحٌح والتجهٌزات الصحٌحة لجمٌلع المعلوملات والمتغٌلرات
ولكن تفاجأ عندما ٌفشل النظام فً تكلوٌن وتجهٌلز جمٌلع المعلوملات والمتغٌلرات ,ألنل
ٌ دي إلى كوارث وتعدٌل على الصالحٌات ,انظر إلى النص البرمجً رقم .29.1
علززى أي مسززتوى تحززدث هززذه الثغززرة ؟ و مززا هززً اللغززات التززً تتززأثر بهززا ؟ ومززا هززو
مستوى خطورتها ؟
تحدث هذه الثغرة على مستوى برمجة النظام ,أو عملٌة (دالة معٌنة ) .
اللغللات التللً تتللأثر بهللا هللً جمٌللع اللغللات البرمجٌللة بللال اسللتثناء وكللذلك قامللت منظمللة
] [Sansبتصنٌف هذه الثغرة بأنها متوسطة الخطورة .
{)(function users
;global $HTTP_GET_VARS
;]'$name_user =$HTTP_GET_VARS['name
;)$q=mysql_query($sql
;)$row=mysql_fetch_array($q
;]'$id=$row['id
{)"" ==if($id
;)($this->make_him_admin
}
}
)(function make_him_admin
{
تخٌلل عزٌللزي القللارئ ,للو أن النظللام حصللل بل عطللل ولللم ٌلتمكن مللن جلللب معلومللات
}
المستخدم فماذا سوف ٌحصل ؟
النص البرمجً 29.1
139
تخٌل لو أن النظام قبل تنفٌلذ األملر ];) [$row=mysql_fetch_array($qفلً اللنص
البرمجً رقم , 29.1توقف عن العمل ملع قاعلدة البٌانلات ,وللم ٌجللب لنلا شلٌئا ً فسلوف
تكلللللون قٌملللللة المتغٌلللللر ] [$idصلللللفراً [zero],وبالتلللللالً سلللللوف تنفلللللذ الداللللللة
] [make_him_adminوعندها ٌكون هو المدٌر العام للموقع !
140
الحلول المتوافرة لمشكلة (اإلنشاء الغٌر صحٌح)34
ٖٗ
. http://cwe.mitre.org/data/definitions/665.html
141
الحل األول:
قم باستخدام اللغات التً تقلل من مشكلة اإلنشاء غٌلر الصلحٌح مثلل لغلة جافلا ], [java
عنللدما تقللوم باسللتخدام متغٌللر دون إنشللائ مسللب ًقا سللوف ٌظهللر لللك خطللأ أثنللاء الترجمللة
], [compileولكن عندما تستخدم بعض اللغات مثل لغة ] [Phpالتً تقوم ب عطاء قلٌم
أولٌة للمتغٌرات (فارغلة) التلً قملت باسلتخدامها دون إنشلائها بطرٌقلة صلحٌحة فسلوف
ٌسبب لك مشاكل عدة .
الحل الثانً:
عزٌزي المبرمج ,قم ب نشاء جمٌع المتغٌلرات فلً بداٌلة اللنص البرمجلً بشلكل واضلح
وصرٌح ,انظر النص رقم . 30.1
{)(function page
;"$x="null
;$y=0
//
//
}
142
التحكم بالوصول بطرٌقة غٌر صحٌحة
: 33[Improper Access Control (Authorization)]
ٗٗ
ٕ8٘: رقم الثغرة, http://cwe.mitre.org/top25/#CWE-285
143
هللً عملٌللة السللما للعمٌللل أو المهللاجم الوصللول السللهل إلللى ملللف معللٌن أو دالللة معٌنللة
بشللكل غٌللر مباشللر,حقٌقل ًلة ٌصللعب علٌللك أٌهللا المبللرمج توقللع جمٌللع أفعللال المهللاجم فقللد
ٌللتمكن مللن الوصللول إلللى هللذه الملفللات بطرٌقللة أنللت ال تعلمهللا وعنللد الوصللول إلللى هللذه
الملفللات ٌقللوم بالللدخول بصللالحٌات لٌسللت تخص ل ,بعبللارة أخللرى هللً عملٌللة الللتحكم
بالوصللول إلللى ملللف معٌن لة أو دالللة معللٌن بطرٌقللة غٌللر صللحٌحة ,انظللر إلللى الللنص
البرمجً رقم ٔ لكً تتضح الفكرة .
علززى أي مسززتوى تحززدث هززذه الثغززرة ؟ و مززا هززً اللغززات التززً تتززأثر بهززا ؟ ومززا هززو
مستوى خطورتها ؟
تحدث هذه الثغرة على مستوى تصمٌم ,وهٌكلٌة ,وبرمجة النظام ,أو عملٌة (دالة) .
اللغللات التللً تتللأثر بهللا هللً جمٌللع اللغللات البرمجٌللة بللال اسللتثناء وكللذلك قامللت منظمللة
] [Sansبتصنٌف هذه الثغرة بأنها عالٌة الخطورة .
النص البرمجً رقم 31.1هو عبارة علن نظلام رسلائل خاصلة بلٌن أعضلاء المنتلدى أو
الموقع ,فالعضو المسجل ٌستطٌع أن ٌرى الرسائل الخاصة ب فقط .
;)$this->read_massage($id
}
{)(function index
;global $HTTP_GET_VARS
;]'$username =$HTTP_GET_VARS['username
;]'$pass =$HTTP_GET_VARS['pass
{ )if($this->AuthenticateUser($username,$pass)==flase
//exit
144 }
;]'$id =$HTTP_GET_VARS['id
عزٌلزي المبللرمج ,إن الللنص البرمجلً رقللم ٌ 31.1بللدو أنل ال ٌمتلللك أي مشللاكل ! ألن
عملٌلللللللة التأكلللللللد ملللللللن الصلللللللالحٌة صلللللللحٌحة مئلللللللة بالمئلللللللة كملللللللا فلللللللً السلللللللطر
] [AuthenticateUser($username,$pass)==flaseفهذا األمر سوف ٌتأكلد ملن
صالحٌة الزائر ف ذا كان ال ٌمتلك حسابًا مخز ًنا فً قاعدة البٌانات فسوف ٌخرج مباشرة
من الصفحة ,ولكن األمر ٌتعلق بمن ل صالحٌة الدخول وٌعد عضواً مخزنا ً فلً قاعلدة
البٌانللات فب مكان ل قللراءة أي رسللالة مللن رسللائل األعضللاء عللن طرٌللق اللعللب بللالمتغٌر
] [$idو كتابة رقم تخمٌن ٌمثل رقم الرسالة كما فً الشكل . 31.1
الشكل 31.1
145
كمللا تشللاهد فللً الشللكل , 31.1ف ل ن أي عضللو ٌسللتطٌع قللراءة الرسللائل الخاصللة بللٌن
األعضاء بمجرد تغٌٌر رقم الرسالة ,فالمقصود هنا أن مع تحقٌق الصلالحٌة الصلحٌحة
للعضو إال أن استخدم هذه الصالحٌة للوصول إلى منطقة معٌنلة (رسلائل األعضلاء ) ال
ٌحق ل الوصول إلٌها .
146
الحلول المتوافرة لمشكلة (التحكم بالوصول بطرٌقة غٌر
)3 صحٌحة
ٗ٘
, http://php.net/manual/fr/function.header.php , http://cwe.mitre.org/data/definitions/285.html
. http://bytes.com/topic/php/answers/9951-how-clear-cache
147
الحلول :
عزٌزي المبرمج ,لحل مثلل هلذه المشلاكل ٌجلب علٌلك أن تسلتخدم أملر ] ,[ifحٌلث أنل
مللللن الممكللللن أن نللللتخلص مللللن هللللذا الثغللللرة عللللن طرٌللللق ربللللط المتغٌللللر ] [$toبللللـ
] , [$usernameوبهللذا الطرٌقللة تأكللدنا أن الشللخص المصللر لل قللام بقللراءة الرسللالة
الموجل لل ولللٌ لعضللو آخللر ,انظللر إلللى الللنص البرمجللً 32.1بعللد إضللافة المتغٌللر
] [$toإلٌ .
{)function read_massage($id
;)$to=$this->info_massage($id
{)if($to==$username
}
}
{)function info_massage($id
//
}
148
استخدام طرٌقة تشفٌر خطرة أو مدمرة
3 [Use of a Broken or Risky Cryptographic
Algorithm]
ٗٙ
.ٖٕ7: رقم الثغرة, http://cwe.mitre.org/top25/#CWE-327
149
عزٌللزي القللارئ ,عنللدما تقللوم بنقللل معلومللات حساسللة ,ف نللك بللال شللك سللوف تسللتخدم
التشللفٌر لتشللفٌر هللذه المعلومللات لكللً ال ٌطلللع علٌهللا أحللد ,ولكللن الخطللأ هللو اسللتخدام
طرٌقللة تشللفٌر مللن اختراعللك الخللاص وعللدم السللٌر وإتبللاع الطللرق الموحللدة المعروفللة
عالمٌلا ً لعملٌللة التشللفٌر ,فهللذا قللد ٌسللبب كشللف وكسللر التشللفٌر الخللاص بللك بكللل سللهولة
,وأٌض لا ً ال تللن َ أن اسللتخدام الطللرق القدٌمللة الموحللدة عالمٌ لا ً لٌسللت طرٌقللة فعالللة فللً
التشللفٌر ,ألنل مللن السللهولة كسللرها بمللا أنهللا قدٌمللة وباسللتخدام الهندسللة العكسللٌة أصللبح
األمر سهالً ج ًدا للغاٌة ,حٌث إن الهندسة العكسٌة هً عملٌة تحلٌل المعلوملات المشلفرة
وعن طرٌقها ٌقوم المهاجم باستخراج وكشف الخوارزمٌة المستخدمة .
علززى أي مسززتوى تحززدث هززذه الثغززرة ؟ و مززا هززً اللغززات التززً تتززأثر بهززا ؟ ومززا هززو
مستوى خطورتها ؟
فً النص البرمجلً رقلم ,33.1قملت بتشلفٌر كلملة السلر ] [123وذللك بضلربها بالعلدد
نفس ] [123ولكن هذه الطرٌقلة سلٌئة جل ًدا وضلعٌفة بلل إن المهلاجم ٌسلتطٌع كشلفها فلً
زمللن قصللٌر ج ل ًدا ,حٌللث إن طرٌقللة فللك العللدد المشللفر النللاتج مللن (التشللفٌر) ][ 15129
بالقسمة على العدد ] [123وٌكون الناتج بعد فك الشفرة ] [123كما فً اللنص البرمجلً
رقم .33.2
;$de_pass=$cy_pass/123
150
الحلول المتوافرة لمشكلة (استخدام طرٌقة تشفٌر خطرة أو
)3 مدمرة
ٗ7
, http://php.net/manual/en/book.mcrypt.php , http://cwe.mitre.org/data/definitions/327.html
. http://www.topbits.com/xor-encryption.html
151
الحل األول :
أوالً ال تقم باستخدام خوارزمٌة خاصة بك ف ن مع استخدام الهندسة العكسٌة والتلً تقلوم
بدراسة المخرجات ومن ثم معرفة وكشف الخوارزمٌة التً قمت باستخدامها ,فلذلك قلم
باسللتخدام خوارزمٌللة تشللفٌر موحللدة ومعروفللة عالمٌ لا ً انظللر الللنص رقللم ٔ لكللً تتضللح
الفكرة,وهً طرٌقة موحدة ومعروفة عالمًٌا لتشفٌر فً لغة ].[php
فً مثالنا التالً سوف نقوم بشلر دوال ] , [Mcryptانظلر إللى اللنص البرمجلً رقلم
ٔ.$td = mcrypt_module_open(MCRYPT_DES, '', MCRYPT_MODE_ECB, '/usr/lib/mcrypt-
34.1
;)'modes
;)3.$ks = mcrypt_enc_get_key_size($td
;)7.mcrypt_generic_deinit($td
ٗ8
هناك أنواع ألنماط التشفٌر من ضمنها , CBCأو , OFBأو , CTRوتستطٌع الحصول على معلومات أكثر من خالل الرابط
(. )http://mcrypt.hellug.gr/lib/mcrypt.3.html
152
الللنمط ( , )ECBفنقللوم بكتابللة ( )MCRYPT_MODE_ECBوالللذي سللوف ٌقللوم بعملٌللة
] [XORمع كل كتلة ] [blockباستخدام موجة التهٌئة ][initialization vector
(.)IV
حرف fالمفتاك vناتج التشفٌر
1 1 0
1 0 1
1 0 1
1 0 1
0 0 0
1 1 0
0 0 0
1 1 0
بالطرٌقللة التالٌللة ٌ,كللون النللاتج أملللللللا عملٌلللللللة ] [XORفتلللللللتم
واحد بت عندما ٌكون أحد العمودٌن (البتان) واحد بت و ما عدا ذلك ٌكون الناتج صلفراً
,فلو كان الحرف المراد تشلفٌره ] , [fوالحلرف اآلخلر المقابلل لل واللذي سلوف نتعاملل
مع فً عملٌة ] [XORهو ] , [vوهلذا الحلرف ٌنشلأ بشلكل عشلوائً علن طرٌلق موجلة
التهٌئة ] [IVوفً كل مرة نقوم بعملٌة التشفٌر ف ن سلوف ٌنلتج أحلرف عشلوائٌة لكلً ال
ٌكون هناك تشاب بٌن الكتل فٌما بٌنها انظر الشكل 34.1لكً تتضح عملٌة التشفٌر ,أما
النص المراد IV
التالً فٌمثل طرٌقة عمل ]: [XOR الجدول
النص المشفر
تشفٌر
8kcolB
Bytes XOR DES kcolB
P1
kcolB C1
kcolB
XOR DES
P2
. C2
.
.
kcolB XOR شكل 34.1 DES
.
kcolB
kcolBاسللللللللتخدمنا
السللللللللطر الثللللللللانً (ٕ) مللللللللن الللللللللنص البرمجللللللللً رقللللللللم ,34.1
Pn فللللللللًCn
kcolB
العشللوائٌة التللً
] [mcrypt_create_ivإلنشللاء موجللة التهٌئللة معتمللدٌن علللى القٌمللة Pn
XOR DES
Pn
] ,[MCRYPT_RANDفللً السللطر ٖ قمنللا ب نشللاء طللولتشفٌر CEB
سللوف تنشللأ مللن قبللل النظللام
المفتللا الخللاص للمرسللل ,وفللً السللطر ٗ قمنللا ب نشللاء المفتللا بعللد إدخال ل فللً دالللة
االختزال (البعثرة) ] , [md5حٌث كان المفتا ] , [very secret keyفلً السلطر ٘
153
قمنا باالستعداد للتشفٌر باستخدام الدالة ] , [mcrypt_generic_initأما فلً السلطر ٙ
فبدأت عملٌة التشفٌر ,وبالنسبة للسطر األخٌر 7قمنا ب غالق التشفٌر .
154
2[Hard-Coded Password] كلمة المرور المدمجة
٘ٓ
. ٕ٘9 : رقم الثغرة, http://cwe.mitre.org/top25/#CWE-259
155
إن عملٌة دمج كلمة المرور فً جلزء ملن النظلام "الموقلع " أو فلً جمٌلع أجلزاء النظلام
عملٌللة تقللود إلللى مخللاطر أمنٌللة عدٌللدة ,ولكللن فللً الوقللت نفس ل تسللهل عملٌللة إصللال
وصٌانة النظام .
عزٌزي القارئ ,إن عملٌة دمج كلمة المرور تتم بطرٌقتٌن :
كلمة المرور تكون مدمجة فً النص البرمجً نفس الذي ٌتأكد من الصالحٌات .
قٌللام النظللام بالتواصللل مللع طللرف خللارجً ,حٌللث إن كلمللة المللرور تكللون مدمجللة مللع
الوحدة الداخلٌة إلكمال عملٌة التواصل .
فً النوع األول تكون كلمة المرور موجودة بشكل افتراضلً فلً النظلام ,وعنلدما ٌقلوم
أي شخص بشراء هذا النظلام تلأتً معل كلملة الملرور نفسلها وعملٌلة تغٌٌرهلا قلد تكلون
صعبة ألنها تحتاج إلى قراءة النص البرمجً والتعدٌل فٌ ,فلذلك قد ٌلجأ المشلتري إللى
تغٌٌر النظام كامالً .
بال شك أنل ٌعطلً إمكانٌلة للمهلاجم بلأن ٌقلوم باللدخول ألي نسلخة ملن نسلي هلذا النظلام
ألنها تحتوي على كلمة المرور نفس .
علززى أي مسززتوى تحززدث هززذه الثغززرة ؟ و مززا هززً اللغززات التززً تتززأثر بهززا ؟ ومززا هززو
مستوى خطورتها ؟
تحدث هذه الثغرة على مستوى تصمٌم ,وهٌكلٌة ,وبرمجة النظام .
اللغللات التللً تتللأثر بهللا هللً جمٌللع اللغللات البرمجٌللة بللال اسللتثناء وكللذلك قامللت منظمللة
] [Sansبتصنٌف هذه الثغرة بأنها ما بٌن متوسطة إلى عالٌة الخطورة .
{)"if($pass=="xyz
}
{else
}
فللً الللنص البرمجللً رقللم 35.1لللو اُسللتخدم هللذا الللنص البرمجللً فللً عللدة أجللزاء مللن
النظام ف ن سٌمكن المهاجم من سهولة االختراق ,حٌث إن معرفت لكلمة الملرور لجلزء
واحد تضمن ل معرفة باقً أجزء النظام بكل سهولة !
157
) 0الحلول المتوافرة لمشكلة (كلمة المرور المدمجة
٘ٔ
, http://cwe.mitre.org/data/definitions/259.html
. http://www.webcheatsheet.com/php/md5_encrypt_passwords.php
158
الحل األول :
أوالً عزٌزي المبرمج ,بدالً من كتابة اسم المستخدم وكملة السر داخلل اللنص البرمجلً
قللم بعمللل مللا ٌسللمى بملللف اإلنشللاء ,وهللذا الملللف ٌعمللل فللً المللرة األولللى عنللدما تقللوم
بتنصللٌب الموقللع أو النظللام ,ومللن خالللل ٌسللتطٌع المسللتخدم وضللع كلمللة سللر واسللم
ْن ب ,وبالتالً تخزن هذه المعلومات فلً قاعلدة البٌانلات ,ومللف اإلنشلاء مستخدم َخا َّ
صٌ ِ
ٌجلللب أن ٌحلللذف نهائٌلللا ً بعلللد التنصلللٌب ,انظلللر الشلللكل 36.1وهلللو مللللف اإلنشلللاء
] [install.phpالخاص ببرنامج المنتدٌات ]. [vBulletin
الشكل 36.1
159
الشكل 36.2
فللً الشللكل 36.2الخطللوة التللً تقللوم بهللا بوضللع اسللم المسللتخدم للمللدٌر العللام ,والللرقم
السري ,والبرٌد اإللكترونً ,ومن هنا تخلصنا من مشكلة وضع كلمة مرور مدمجلة فلً
داخل النص البرمجً وجعلنا إنشاءها فلً مرحللة تهٌئلة النظلام للعملل ] , [installوبلال
شك أن بعد إتمام العملٌلة سلوف نقلوم بحلذف مللف ] [install.phpلكلً ال ٌسلتطٌع أي
شخص التالعب ب وإعادة تهٌئة النظام من جدٌد ومن ثم اختراق .
;"$pass="aldeheme
;)$pass=md5($pass
;)$q=mysql_query($sql
160
ٌسللتطٌع اسللتخدامها بشللكل مباشللر ,وال بللد لل أن ٌقللوم بكسللر التشللفٌر ,فل ن كانللت كلمللة
المرور ضعٌفة التخمٌن ف ن بال شك سوف ٌستطٌع أن ٌتعرف على كلمة المرور خلالل
دقائق ولكن لو كانت كلمة المرور قوٌة فقد ٌكون الوقت الالزم لتخمٌنها آالف السنٌن !
عنللدما تقللوم بتخللزٌن كلمللة مللرور مشللفرة ف ن ل عنللد اسللترجاعها تقللارن كلمللة المللرور
المشرفة مع الكلمة المدخلة بعد تشفٌرها ,انظر إلى النص البرمجً رقم . 36.2
;global $HTTP_POST_VARS
;]'$user_pass =$HTTP_POST_VARS['pass
;)$pass=md5($user_pass
;)$q=mysql_query($sql
فً النص البرمجً رقم 36.2قمنا بتشفٌر كلمة المرور المدخلة ] , [$user_passوملن ثلم
قمنا بمقارنة قٌمة التشفٌر مع التشفٌر المخلزن فلً قاعلدة البٌانلات * [$sql="SELECT
];"'. FROM admin where pass='$pass
161
إسناد الصالحٌات غٌر اآلمنة للمصادر الحساسة
0[Insecure Permission Assignment for Critical
: Resource]
ٕ٘
. 7ٖٕ : رقم الثغرة, http://cwe.mitre.org/top25/#CWE-732
162
تحدث هذه المشكلة عندما تعطى الصالحٌات لمصدر معٌن ولكن بطرٌقلة غٌلر آمنلة ,أو
لمللدى ونطللاق أوسللع ,فمللن الممكللن أن تسللتغل هللذه الصللالحٌات لكشللف المعلومللات
ضللا تحللدث هللذه المشللكلة دائ ًمللا عنللدما ٌتعلللق األمللر بالمصللادر والملفللات
الحساسللة ,وأٌ ً
المرتبطة ب عدادات النظام .
علززى أي مسززتوى تحززدث هززذه الثغززرة ؟ و مززا هززً اللغززات التززً تتززأثر بهززا ؟ ومززا هززو
مستوى خطورتها ؟
تحدث هذه الثغرة على مستوى تصمٌم ,وهٌكلٌة ,وبرمجة النظام .
اللغللات التللً تتللأثر بهللا هللً جمٌللع اللغللات البرمجٌللة بللال اسللتثناء وكللذلك قامللت منظمللة
] [Sansبتصنٌف هذه الثغرة بأنها ما بٌن متوسطة إلى عالٌة الخطورة .
لنشاهد النص البرمجً رقم 37.1لكً تتضح الفكرة .
> "<form action="init.php" method="post
المستخدم اسم>"<p align="center"><input type="text" name="T1" size="20
></p
>"<p align="center
></br
> </pالمرور كلمة >"<input type="text" name="T1" size="20
>"<p align="center
></br
" <input type="checkbox" name="C1" value="yesالصفحات جمٌع ٌشاهد
>checked></p
>" name="B1"></brإضافة"=<p align="center"><input type="submit" value
></form
163
الشكل 37.1
فكما تشاهد عزٌزي المبرمج ,أن عندما قمنا ب نشاء مستخدم علادي "للٌ الملدٌر العلام
للموقع"] [adminولكلن تلم إعطلا ه وبشلكل افتراضلً إمكانٌلة مشلاهدة جمٌلع صلفحات
الموقع التً من المفروض أنها ال تعطى ل !
164
الحلول المتوافرة لمشكلة (إسناد الصالحٌات غٌر اآلمنة للمصادر الحساسة) 4
ٖ٘
. http://cwe.mitre.org/data/definitions/732.html
165
الحل األول :
عزٌزي المبرمج ,عندما تقوم ببرمجة ملف اإلعدادات الخلاص بتهٌئلة النظلام أو إنشلائ
,ففللً مرحلللة التنصللٌب األول للنظللام قللم بوضللع وكتابللة الص لالحٌات الحساسللة بشللكل
افتراضً ,واجعلها غٌلر قابللة للتعلدٌل إال بشلكل ٌلدوي فقلط اللذي ٌتطللب ملن مسلتخدم
النظام الدخول إلى الملفات الخاصة بالنصوص البرمجٌلة والتعلدٌل علٌهلا ! انظلر اللنص
رقم 38.1لكً تتضح الفكرة .
>"<p align="center
></br
></form
فً النص البرمجً رقم ٌ 38.1وجد حقالن "اسلم المسلتخدم" و "كلملة الملرور" ,وعنلد
الضللغط علللى "إضللافة " سللوف ترسللل المعلومللات إلللى صللفحة ] [ini.phpانظللر إلللى
النص البرمجً رقم . 38.2
;global $HTTP_POST_VARS
;]'$user_pass =$HTTP_POST_VARS['pass
;]'$user_name =$HTTP_POST_VARS['username
فللً الللنص البرمجللً رقللم 38.2قمنللا ب نشللاء المللدٌر العللام للموقللع ,وكللذلك قمنللا ب سللناد
;"$see_all_page="yes
صالحٌة مشاهدة جمٌلع الصلفحات بشلكل افتراضلً إلٌل ]",[$see_all_page="yes
$sql="insert into admin (user,pass,see_all_page) values
وبهذه الطرٌقة لن ٌستطٌع من قام بتهٌئة أو إنشاء النظام من العبث بهذه الصلالحٌة التلً
;")'('$user_pass','$user_name','$see_all_page
38.2للاآلن تللم إس لناد هللذه الصللالحٌة إلللى
البرمجًلع ,ف
النص للموقل
ٌجللب أن تعطللى بالضللرورة للمللدٌر العللام
المصادر "الصفحات" بشكل صحٌح .
166
الحل الثانً :
عندما تتعامل مع ملف إعدادات النظام وتعلم أنل ملن الممكلن أن ٌلتم تعدٌلل ملن قبلل أي
شخص فبشكل مباشر قم ب عادة تهٌئة النظام مرة أخرى .
167
168
الثغرات البرمجٌة التً اهتمتها بها منظمة ][OWASP
عزٌززي المبزرمج ,اهتمزت منظمزة (OWSP) The One World Sight Project
بدراسة المشاكل البرمجٌة وقامت بإنشاء قا مة تحتوي على أهم عشر مشاكل برمجٌة
زارا التززً قامززت بتصززنٌفها
,فززً مشززروعً قمززت بشززرك أكثززر مززن عشززرٌن ثغززرة انتشز ً
منظمة ] , [SANSومزن هزذه العشزرٌن ٌوجزد مشزاكل مشزتركة بزٌن التصزنٌف الخزاص
بالمنظمتٌن ] [OWSPو ]. [SANS
فزززً الجززززء التزززالً سزززوف أقزززوم بشزززرك بعزززت المشزززاكل البرمجٌزززة التزززً اهتمزززت بهزززا
] [OWSPوهً تخص لغة ]. [php
169
فٌت الذاكرة ]: [Buffer Overflows 3
مشكلة فٌض الذاكرة ال توجد أثناء عمل لغة ] [phpوبما أنهلا ال تتعاملل ملع الم شلرات
] , [pointersف نها ال تعانً من هذه المشكلة ,ولكن قد تحدث فلً اللدوال نفسلها وللٌ
ٗ٘
شرط فً قناة االتصال ٌمكن من خالل وضع عدد أكبر من المدخالت فً منطقة مخصصة الحتجاز البٌانات بما ٌفوق قدرتها االستٌعابٌة
لذلك من خالل استبدال المعلومات الموجودة بالكتابة علٌهاٌ .ستخدم المهاجمون ذلك الشرط إلسقاط النظام أو إدخال شفرات خاصة تم
إعدادها بمهارة عالٌة تسمح لهم بالسٌطرة على النظام والتحكم ب .
170
أثناء تنفٌذ ],[runtimeعلى سبٌل المثال كانت دالة ] [Wordwrapتعانً من مشكلة فٌض
الذاكرة ومن خاللها ٌستطٌع المهاجم تنفٌذ نصوص خبٌثة أو تعطٌل الخدملة علن الموقلع
] , [Denial of serviceوبالمناسبة استمرت المشكلة ملن إصلدار ] [4.1.2إللى ملا قبلل ][4.3.0
وكان الحل هو ترقٌة ] [phpإلى أحد اإلصدارات التً أتت بعده ]. [4.3.0
عزٌزي المبرمج تستطٌع معرفلة كلل ملا ٌسلتحدث فلً لغلة ] [phpملن خلالل االشلتراك
فلللً القائملللة البرٌدٌلللة ] [php-announceملللن خلللالل اللللرابط [http://www.php.net/mailing-
]. lists.php
171
اختراق حساب معٌن و إدارة الجلسات
][Broken Account and Session Management
عزٌللزي المبللرمج ,ال تحتللاج إلللى أدوات خاصللة إلدارة الجلسللات ] [sessionsبشللكل
احترافللً ,ولكللن تحتللاج إلللى بعللض الطللرق لتخللزٌن المعلومللات بشللكل مخفللً ٌصللعب
الوصول إلٌ مثل تخزٌن معلومات الجلسة الحالٌة فً ملف معٌن ] , [fileأو فلً قاعلدة
البٌانات ,أو فً الكعك ,مع أن العلم أن الوضع االفتراضً للجلسات مع الخادم أن ٌقلوم
بفتح ملف ] [fileوتخزٌن جمٌع المعلومات ب ,ولكلن ملن بلاب أن المهلاجم قلد ٌسلتطٌع
الوصول إلى هذا الملف ف ن من األفضل أن نقوم بتغٌٌلر مسلار هلذا المللف بمللف آخلر,
شاهد النص البرمجً . 40.1
<?php .
)function open($save_path, $session_name
172 {
;global $sess_save_path
173
function write($id, $sess_data)
global $sess_save_path;
$sess_file = "$sess_save_path/sess_$id";
fclose($fp);
return $return;
} else { return(false);
function destroy($id)
global $sess_save_path;
$sess_file = "$sess_save_path/sess_$id";
return(@unlink($sess_file));
function gc($maxlifetime)
global $sess_save_path;
@الدوالunlink($filename);
وبعد إعداد جمٌع,وبالتالً هنا لن ٌستطٌع المهاجم معرفة مكان تخزٌن الجلسات
الالزمللللللللللة مللللللللللن قللللللللللراءة وكتابللللللللللة وتللللللللللدمٌر للجلسللللللللللات نسللللللللللتخدم الدالل}لللللللللة
نظللام} [ التللً تقللوم بللدورها فللً تللولً مهمللة تغٌٌللرsession_set_save_handler]
echo($_SESSION['username']="aldeheme");
?>
174
40.1 ًتابع النص البرمج
وأخٌرً ا نبدأ الجلسة ونقوم باستخدام المتغٌرات المخزنة سلاب ًقا فلً الجلسلات السلابقة مثلل
]]', [$_SESSION['usernameو بعللد الللذهاب إلللى المجلللد الخللاص بتخللزٌن ملفللات
الجلسات وجدنا الجلسة ومخزن فٌها , usernameكما فً الشكل . 40.1
الشكل 40.1
175
176
عزٌللزي المبللرمج ٌ ,جللب أن تكللون لللدٌك المعرفللة المسللتمرة عللن الثغللرات الجدٌللدة ,أو
المشاكل البرمجٌة فً لغة ] , [phpأو اللغات األخرى ,تسلتطٌع معرفلة ملا ٌسلتجد ملن
المشاكل البرمجٌة عن طرٌق التسلجٌل فلً القائملة البرٌدٌلة ] [php-announce mailingعللى
الرابط (. )http://www.php.net/mailing-lists.php
كذلك قم بتعدٌل قٌم بعض المتغٌرات فً ملف اإلعدادات الخاصة بلغة ] [phpالمسلمى
بلـ ] ,[php.iniعللى سلبٌل المثلال قلم بكتابلة السلطر التلالً [AddType application/x-
] httpd-php-source .phpوهللو ٌللدل علللى أن جمٌللع الملفللات التللً تكللون امتللداداتها
] [phpسوف ٌتم تنفٌذ النص البرمجً المكتوب داخلها بدالً من أن ٌلتم تحمٌلهلا بصلفتها
ملفات واالطالع على جمٌع محتوٌات النص البرمجً .
فً الحقٌق إن اإلعدادات الخاصة بالخادم تعتمد بشكل كبٌر عللى الشلخص المسلتأجر أو
المالك للخادم ! فٌجب أن ٌكلون عنلده الخبلرة الكافٌلة إلدارة الخلادم بشلكل احترافلً دون
تعرٌض المواقع المرفوعة علٌ للخطر.
177
178
التشفٌر
المجال هنا غٌر متا لمناقشة تارٌي التشلفٌر و كٌفٌلة تطلوره ,فأحببلت أن أدخلل بشلكل
مباشر إلى أنواع التشفٌر المستخدم فً نقل البٌانات الرقمٌة .
الشكل 1
179
ما ٌمٌزه عن التشفٌر المتناظر أن ٌمتلك عنصراً إضافٌا ً هلو المفتلا الخلاص ملع وجلود
المفتا العام .أما المفتا الخاص ف ن ٌعد معرفا ً للشخص وهو ٌختللف ملن شلخص إللى
آخر.
إذاً هنا لو استطاع المهاجم معرفة المفتا العام فلن ٌستفٌد شٌئا ً ألن الرسالة المشفرة للن
ٌعللاد فللك تشللفٌرها إال بمعرف لة المفتللا الخللاص ,ف ل ذا كللان هنللاك اتفللاق بللٌن المرسللل
والمستقبل على أن المفتا العام هو األسا الذي تبنى علٌ عملٌة التشلفٌر وأن المفتلا
الخاص هو المكملل للمفتلا العلام( المفتلا العلام باإلضلافة إللى المفتلا الخلاص = رقلم
األسا ) ,ف ن عند فك تشفٌر (الرسالة المشفرة) بهذه الطرٌقة البد من الحصلول عللى
ثالث معلومات أساسٌة هً ] [x,y,zفلو فرضنا أن رقلم األسلا للتشلفٌر هلو] [xفلال بلد
من معرفة ]([yالمفتا العام) و]( [zالمفتا الخاص ) لفك تشفٌر الرسالة .
الشكل ٕ
ٌتم إصدار رقم األسا عن طرٌق البرنلامج المتخصلص أو إحلدى الهٌئلات المسلتقلة و
المتخصصلة فلً إصلدار هلذه األرقلام وهلو ملا ٌعلرف بهٌئلة الشلهادات [Certificate
] Authorityبحٌث ٌكون لكل مستخدم رقم أسا وٌتم تقسٌم هذا الرقم إللى مجملوعتٌن
]( [y,zالمفتا العام و المفتا الخاص) .
180
المفتا العام ]: [y
الللرقم الللذي ٌللتم تداول ل و نشللره بللٌن بقٌللة المسللتخدمٌن لتشللفٌر أي معلومللة أو رسللالة
إلكترونٌلة و ٌعلد رقملك العلام أسلا عملٌلة التشلفٌر ,و ال ٌسلتطٌع أحلد فلك رملوز تلللك
المعلومة غٌرك أو أي شخص ٌملك المفتا العام ,والمفتا العام ٌكون معرفا ً مسب ًقا بٌن
المرسل والمستقبل.
المفتا الخاص ]: [z
هو النصف اآلخر المكمل للمفتا العام للوصلول إللى اللرقم األسلا وإعلادة المعلوملات
المشفرة إلى وضعها الطبٌعلً قبلل التشلفٌر ,و هلذا المفتلا هلو اللذي ٌمٌلز كلل شلخص
عن غٌلره ملن المسلتخدمٌن وٌكلون هوٌلة إلكترونٌلة تمكلن صلاحبها ملن فلك أي معلوملة
مشفرة مرسل إلٌ .
181
182
عزٌزززي القززار ,هززانحن نقززدم للمبززرمج العربززً بعززت المقترحززات والفرضززٌات التززً
نسزأل أن تعززود علزى جمٌززع المبزرمجٌن بكززل فا زدة ,والهززدف مزن وراء هززذه الطززرق
المبتكرة التً تمت برمجتها من قبلً هزو تحفٌزز المبزرمج العربزً علزى االبتكزار وعزدم
االعتماد بنسبة م ة بالم ة على المطروك من قبل اآلخرٌن ,أحزب أن أذكزر القزار أن
جمٌزع الحلزول السزابقة مزن ابتكزاري الخزاص وأنهزا جمٌعهزا تنزدرج تحزت هزذا البزاب !
ولكن وضعتها كحلول مقترحة قد تناسب البعت وقد ال تناسبه ! ,وكزذلك قمزت بزإفراد
باب لطرك الفكرة المبتكرة فً حفظ حقوق كاتب أو ناشر وفً المجال نفسه وهزو منزع
ثغرة الحقن االستعالمٌة.
فلن ٌعرت لك محتوى الصفحة ألن الرابط معزرف علزى جهزاز واحزد فقزط وخزالل مزدة
زمنٌة معٌنة .
183
فىائذ استخذاو هذِ انتقُيت :
.0حفظ حقزوق كاتزب أو ناشزر ,فلزن ٌسزتطٌع أحزد أن ٌنقزل الزرابط وٌوزعزه علزى أطزراف
متعددٌن ,حٌث إن الوصزول إلزى المعلومزة ٌتطلزب منزك أن تتصزل بالصزفحة الر ٌسزٌة
للموقع] [indexومن ثم الوصول إلى المعلومة .
.0عدم نشزر المعلومزات الحساسزة علزى محركزات البحزث ,حٌزث إنهزا لزن تسزتطٌع تمٌٌزز
الرابط األصلً للمعلومات الحساسة ألن رابطها دا ًما متغٌر .
.4إخفززاء المتغٌززرات المرسززلة مززن صززفحة إلززى أخززرى ,حٌززث إن المتغٌززرات تمثززل بأرقززام
عشوا ٌة تتغٌر فً كل مرة ٌدخل فٌها الزا ر إلى الموقع .
.3حتى لو كان الموقع ٌوجد بزه ثغزرة الحقنزة االسزتعالمٌة فلزن ٌسزتطٌع المهزاجم تنفٌزذها
ألن جمٌززع القززٌم المرسززلة عززن طرٌززق ] [URLالبززد أن تقززارن مززع القززٌم المخزنززة فززً
الجلسة ].[session
.0نعطزززً المتغٌزززرات المعروضزززة فزززً الموقزززع قٌ ًمزززا عشزززوا ٌة مثزززل ]ٌ [id_postسزززتبدل
بـ] [945448486وقٌمته ] [1الذي ٌمثل على سبٌل المثال (رقم المقال ) .
.0نستخدم نظام الجلسات ] [sessionلحفظ جمٌع المتغٌرات العشوا ٌة وقٌمها .
.4عندما ٌقوم الزا ر بالضغط على رابط معزٌن ولزٌكن مقزاالً ,نقزوم بأخزذ محتزوى المتغٌزر
العشوا ً ونقارنه مع قٌمة المتغٌر العشوا ً المسجل فً الجلسة الحالٌة للزا ر .
.3إذا كانززت القٌمززة المرسززلة مززع المتغٌززر العشززوا ً تطززابق مززا هززو مسززجل فززً الجلسززة ,
عنززدها سززوف نقززوم بعززرت المقززال المززراد ومززا عززدا ذلززك سززوف ٌحززول إلززى الصززفحة
الر ٌسٌة .
;)(1.$_SESSION['do']=array
{ )]2.if(!$_SESSION['do'][$position
;)3.$_SESSION['do'][$position]=rand(1,10000)+($position
;)]'4.$_SESSION['do'][$position]=array($_SESSION['do'][$position],$row['id
;)]5.$last->assign("do",$_SESSION['do'][$position][0
;)]'6.$last->assign("link",$row['id
184
;7.$position++
الللنص البرمجللً رقللم ٔ المسلل ول عللن إنشللاء القللٌم المتغٌللرة مللع قٌمهللا وإدخالهللا فللً
مصفوفة ],[arrayنالحظ فً السطر األول أننا أنشأنا مصفوفة ,وتخلزن هلذا المصلفوفة
فً الجلسة الحالٌة ,وكذلك نالحظ فً السلطر الثلانً أننلا وضلعنا هلذا الشلرط لكلً تنفلذ
عملٌلللللللللللة إنشلللللللللللاء المتغٌلللللللللللرات ملللللللللللرة واحلللللللللللدة عنلللللللللللد دخلللللللللللول الصلللللللللللفحة
]] , [$_SESSION['do'][$positionمللع العلللم أن المتغٌللر ] [$positionتللم إنشللا ه
فللً أول الللنص البرمجللً وهللو ٌبللدأ مللن الصللفر ,أمللا السللطر الثالللث فقمنللا فٌ ل بتعبئللة
المصفوفة بأول قٌم عشوائٌة ,حٌث إن الدالة ]) [rand(1,10000سوف تعطٌنا قٌملة عشلوائٌة
ضللللا أضللللفنا علٌهللللا ] [$positionبحٌللللث إنلللل مللللع إضللللافة بللللٌن ٔ و ٓٓٓٓٔ ,وأٌ ً
] [$positionلللن ٌكللون هنللاك تكللرر فللً العللدد العشللوائً ]) ,[rand(1,10000)+($positionأمللا
فللً السللطر الرابللع فقمنللا ب نشللاء أول خانللة فللً المصللفوفة وهللً مصللفوفة أخللرى داخللل
الخانللة األولللى ,وهللذه المصللفوفة تحتللوي علللى خللانتٌن (األولللى هللً الللرقم العشللوائً ,
والثانٌلللللللللللللة هلللللللللللللً رقلللللللللللللم ] [idالمخلللللللللللللزن فلللللللللللللً قاعلللللللللللللدة البٌانلللللللللللللات )
])]', [array($_SESSION['do'][$position],$row['idوفً السطر الخام والساد قمنا ب سلناد القلٌم
إلى المتغٌرات الموجودة فً ملف ] , [htmlأما فً السطر السابع فقمنلا بزٌلادة المتغٌلر
برقم واحد ,وبعدها فً السلطر الثلامن قمنلا ب سلناد هلذا القٌملة إللى المتغٌلر الموجلود فلً
] [htmlالذي ٌمثل رقم خانة معٌنة فً المصفوفة .
من السطر التاسع حتى النهاٌة ما هو إال تكرار للسابق ,ولكن هنا اعتملدنا عللى القٌملة
المخزنة فً المصفوفة أول ما دخل الزائر للموقع بدالً ملن إنشلائها ملرة أخلرى عنلد كلل
مرة ٌقوم الزائر فٌها بالضغط على زر التحدٌث .
185
لتوضٌح الخطوات (ٔ إلى ) 8انظر إلى النص رقم ٕ :
http://localhost/mybl/showcom.php?8700=1&index=1
النص البرمجً ٕ
اللون األحمر فً النص البرمجلً ٕ ٌ ,مثلل القٌملة العشلوائٌة وهلً ٓٓ , 87وتلم إسلناد
رقم واحد ] [1لها الذي ٌمثل العمود ] [idفً قاعدة البٌانلات ,أملا الللون األسلود فٌمثلل
رقم الخانة فً المصفوفة .عزٌزي القارئ ,عنلد طللب اللرابط (اللنص رقلم ٕ ) سلوف
ٌتم التأكد من الرابط بالطرٌقة التالً ,انظر إلى النص رقم ٖ .
فللللللللللللً الللللللللللللنص البرمجللللللللللللً ٖ قمنللللللللللللا باسللللللللللللتقبال المتغٌللللللللللللر العشللللللللللللوائً
]] [$_SESSION['do'][$index][0ف ذا كانت القٌمة التلً ٌحملهلا ] [idتسلاوي القٌملة
المخزنة فً المصفوفة ]] , [$_SESSION['do'][$index][1عندها نعلم أن القٌمة
]if ($HTTP_GET_VARS[$_SESSION['do'][$index][0]]==$_SESSION['do'][$index][1
{)
;)"echo("OK
}
النص البرمجً ٖ
المرسللة صللحٌحة ولٌسلت نصوصلا ً خبٌثل ًلة أو طلبًلا غٌللر صللحٌح ,انظلر الشللكل ٔ لكللً
تتضح لدٌك كٌفٌة التأكد من أن الرابط صحٌح .
الشكل ٔ
186
الخاتمة
عزٌزي القار ,أتمنى من عز وجل أن أكون قد وفقت فً طرٌقة طرحً للمشاكل
ً
حقٌقة إن مجال أمن المعلومات ٌتمٌز باتساع األفق األمنٌة والحلول المناسبة لها ,
وتعدد مجاالته ,من خالل تجربتً الشخصٌة وجدت أنه عالم فٌه العلوم الكثٌرة و
المعارف البرمجٌة التً ٌستمتع المبرمج العربً بقراءتها .
ً
حقٌقة من أي اإلنسان معرت للخطأ لكونه إنسانا ً وكما قٌل جل من ال ٌخطئ ,أتمنى
شخص له وجهة نظر فٌما طرحت وقدمت أن ٌخبرنً بها لعل أن ٌنفع بها
المسلمٌن أجمع ,والحمد هلل رب العالمٌن والصالة والسالم على أشرف األنبٌاء
والمرسلٌن .
187