You are on page 1of 232

‫فن الهاكر األخالقي‬

‫المجلد االول‬
‫البداية‬

By

Dr. Mohammed Sobhy Teba


start for everything
[Teacher’s Name]
‫فن الهاكر األخالقي‬ ‫‪1‬‬

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

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪2‬‬

‫إهدإء‬

‫إلى والدى إمى وإبى‬

‫إلى زوجتى الع يززة‬

‫إلى إبنابى جنا ونو يزن‬

‫ل‬ ‫م‬ ‫ل‬


‫وإلى كل من ساعدبى لكى إصل إلى هدإ إ ستوى الدين م بدخزون خهدإ ىف‬

‫ل‬ ‫ه‬ ‫ل‬ ‫ح‬ ‫ط‬‫ص‬ ‫م‬ ‫م‬‫ل‬‫إ‬


‫ا‬ ‫ح‬
‫مساعدبى وخاصة هندس فى مودة‪ ،‬إ مل م عزفان دوما‪.‬‬

‫وإلى كل من جنتى نوما على النجاح‪.‬‬


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

‫**الكتاب تم نشره تحت الترخيص الحر مفتوح المصدر ‪ ،‬و ال يسمح باستخدامه في أي عمل تجارى**‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪3‬‬

‫الفهرس‬
‫المدخل إلى عالم االختراق‪.‬‬ ‫الفصل األول‬

‫معمل االختراق (‪.)PENETRATION LABS‬‬ ‫الفصل الثاني‬

‫البرمجة (‪.)Programing‬‬ ‫الفصل الثالث‬

‫الشبكات (‪.)Network‬‬ ‫الفصل الرابع‬

‫أنظمة التشغيل (‪.)windows‬‬ ‫الفص الخامس‬

‫أنظمة التشغيل (‪.)Linux‬‬ ‫الفصل السادس‬

‫الميتاسبلويت (‪.)Metasploit‬‬ ‫الفصل السابع‬

‫برمجيات البد منها‪.‬‬ ‫الفصل الثامن‬

‫هذا الكتاب يعد الكتاب الثالث بالنسبة لي‪ .‬وهو بعد السلسة السابقة الذي تناول ترجمة ‪ CEHv8‬ويعد االصدار االحدث حيث‬
‫يتناول عملية االختراق األخالقي من زاوية أخرى‪ .‬هنا سوف نتعلم كيف يمكننا ان ننشئ برامجنا ليس كما في اإلصدار السابق‬
‫الذي اعتمد على استخدام البرمجيات الجاهزة فقط‪ .‬في هذه السلسلة سوف نتعلم كل شيء حتى نصبح محترفين في مجال الهاكر‬
‫األخالقي‪.‬‬

‫المصادر التي استعنت بها كالتالي‪:‬‬

‫‪1-‬‬ ‫‪Hacking: The Art of Exploitation, 2nd Edition by Jon Erickson‬‬


‫‪2-‬‬ ‫)جزء من المقدمه فقط( ‪CEHv8‬‬
‫‪3-‬‬ ‫‪SANS Cyber Aces Tutorials‬‬
‫‪4-‬‬ ‫‪Programming.Linux.Hacker.Tools.Uncovered‬‬
‫‪5-‬‬ ‫‪The Linux Programming Interface‬‬
‫‪6-‬‬ ‫‪SANS Security 580 Metasploit Kung-Fu Pentesting‬‬
‫‪7-‬‬ ‫‪SANS Sec 531 - Windows Command-Line Kung Fu In-Depth for Info Sec Pros‬‬
‫للتواصل مع الكاتب يمكن ذلك من خالل الحساب التالى‪:‬‬

‫‪https://www.facebook.com/tibea2004‬‬

‫تم شرح هذا الكورس على اليوتيوب من خالل الرابط التالى‪:‬‬

‫‪https://www.youtube.com/watch?v=GJ3IxecHmN0&list=PLpqTK4Kp9m-‬‬
‫‪7Vw8i2IoUYctnY1Vj1e1YO‬‬

‫لمتابعة الكاتب لما هو جديد على اليوتيوب أيضا من خالل القناة التاليه‬

‫‪https://www.youtube.com/channel/UCHfeWR1O2BF4c0pogUfPHdA‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪4‬‬

‫الفهرس‬
‫المدخل إلى عالم االختراق‬

‫‪ 1.1‬مقدمه‪11 ..............................................................................................................................................................................................‬‬

‫‪" 1.1‬إذاً‪ ،‬إذا كنت تعرف العدو وتعرف نفسك – فال حاجة بك للخوف من نتائج مئة معركة‪ .‬إذا عرفت نفسك ال العدو‪ ،‬فكل نصر تحرزه سيقابله هزيمة تلقاها‪ .‬إذا كنت ال‬
‫تعرف نفسك أو العدو – ستنهزم في كل معركة" كتاب فن الحروب للعبقري والفيلسوف العسكري الصيني سون تزو ‪12 .............................................................‬‬

‫‪ 1.1‬ما هو الهاكرز "‪"what is the hacking‬؟ ‪11 ..............................................................................................................................................‬‬

‫تعريف الهاكر ‪11 .....................................................................................................................................................................................‬‬

‫ما هو الهاكر األخالقي ‪Ethical Hacking‬؟ ‪11 ...............................................................................................................................................‬‬

‫فهم الحاجة إلى قرصنة الخاصة بك ‪11 ............................................................................................................................................................‬‬

‫‪ 1.1‬تاريخ الهاكرز "‪11 ...................................................................................................................................................... "Hacker History‬‬

‫أشهر ‪ 12‬هاكرز في العالم ‪11 ......................................................................................................................................................................‬‬

‫‪ 1.1‬الهاكر ضد الكراكر "‪12 .......................................................................................................................................... "Hacker vs. Cracker‬‬

‫‪ 1.2‬رؤية مبسطه عن امن المعلومات ‪12 .............................................................................................................................................................‬‬

‫‪12 .................................................................................................................................... INFORMATION SECURITY OVERVIEW‬‬

‫‪12 ............................................................................................................................................................................................. IC3‬‬

‫)‪12 ............................................................................................................ Data Breach Investigations Report (Verizon Business‬‬

‫امن المعلومات )‪12 ................................................................................................................................................ (Information Security‬‬

‫السرية‪11 ................................................................................................................................................ (Confidentiality\Secrecy):‬‬

‫التكامل )‪11 ......................................................................................................................................................................... (Integrity‬‬

‫توفر البيانات )‪11 ............................................................................................................................................................ (Availability‬‬

‫األصالة)‪12 ................................................................................................................................................................. (Authenticity‬‬

‫‪12 ............................................................................................................................................................................ Authorization‬‬

‫عدم اإلنكار)‪12 ....................................................................................................................................................... (Non-repudiation‬‬

‫مستوى األمن في أي نظام يمكن تعريفها من قبل قوة من الثالثة عناصر التالية‪12 ....................................................................................................... :‬‬

‫الهدف من وراء الهجوم (‪12 .............................................................................................................................................. )Goal Of Attack‬‬

‫التهديدات األمنية (‪12 ...................................................................................................................................................... )Security Threat‬‬

‫التهديدات الطبيعية (‪12 ................................................................................................................................................ )Natural Threats‬‬

‫التهديدات الفيزيائية (‪12 ............................................................................................................................................. )Physical Threats‬‬

‫التهديدات البشرية (‪12 .................................................................................................................................................. )Human Threat‬‬

‫هذه األنواع الثالثه من التهديد تنقسم هى األخرى إلى أنواع أخرى كاالتى‪12 ............................................................................................................. :‬‬

‫‪( Information Warfare‬حرب المعلومات) ‪11 .............................................................................................................................................‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪5‬‬

‫‪11 ................................................................................................................................................................... :Defensive InfoWar‬‬

‫‪11 ................................................................................................................................................................... :Offensive InfoWar‬‬

‫‪( IPv6 Security Threats‬التهديدات األمنية من استخدام ‪11 .................................................................................................................... )IPv6‬‬

‫التهديدات التي تكمن نتيجة استخدام ‪11 ................................................................................................................................................... IPv6‬‬

‫‪( HACK CONCEPT 1.2‬مفهوم الهاكينج) ‪11 .................................................................................................................................................‬‬

‫بعض المصطلحات‪11 .............................................................................................................................................................................. :‬‬

‫ما هو الفرق بين الهاكر المدمر(‪ )Hacking‬والهاكر األخالقي (‪)Ethical hacking‬؟ ‪11 .............................................................................................‬‬

‫آثار االختراق ‪11 ......................................................................................................................................................................................‬‬

‫دور الهاكر في عمران وتطوير االنترنت ‪11 .....................................................................................................................................................‬‬

‫لمن ال يعلم‪ .‬الهاكرز مقسوم لعدة أصناف‪11 .................................................................................................................................................... :‬‬

‫‪( Black Hats‬المخترق ذو القبعة السوداء) ‪11 .............................................................................................................................................‬‬

‫‪( White Hats‬المخترق ذو القبعة البيضاء) ‪11 ............................................................................................................................................‬‬

‫‪( Gray Hats‬المخترق ذو القبعة الرمادية)‪11 ..............................................................................................................................................‬‬

‫‪( Suicide Hackers‬الهاكر المنتحرون) ‪11 ...............................................................................................................................................‬‬

‫‪11 ............................................................................................................................................................................ Script Kiddies‬‬

‫‪11 .............................................................................................................................................................................. Spy Hackers‬‬

‫‪( Cyber Terrorists‬إرهاب العالم اإللكتروني) ‪11 .......................................................................................................................................‬‬

‫‪11 ........................................................................................................................................................... State Sponsored Hackers‬‬

‫لماذا تريد أن تصبح هاكر؟ ‪11 ......................................................................................................................................................................‬‬

‫من أين وكيف أبدأ؟ ‪12 ...............................................................................................................................................................................‬‬

‫‪12 .................................................................................................................................................................................... Hacktivism‬‬

‫كيف يخترق الهاكر المواقع ‪12 .....................................................................................................................................................................‬‬

‫دوافع االختراق‪12 ................................................................................................................................................................................... :‬‬

‫الدافع السياسي والعسكري‪12 .................................................................................................................................................................. :‬‬

‫الدافع التجاري‪12 ................................................................................................................................................................................ :‬‬

‫الدافع الفردي‪12 ................................................................................................................................................................................. :‬‬

‫ما هو ‪Exploit‬؟ ‪12 .................................................................................................................................................................................‬‬

‫‪( HACK PHASE 1.1‬مراحل القرصنة) ‪12 ....................................................................................................................................................‬‬

‫‪12 ............................................................................................................................................................................. Reconnaissance‬‬

‫‪11 ........................................................................................................................................................................................ Scanning‬‬

‫‪11 ..............................................................................................................................................................................Gaining Access‬‬

‫‪11 ....................................................................................................................................................................... Maintaining Access‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ 6

11 ............................................................................................................................................................................. Clearing Tracks

11 ............................................................................................................................................)‫ (أنواع الهجمات‬TYPE OF ATTACKS 1.1

12 ....................................................................................................................................................... Operating System Attacks-1

12 ......................................................................................................................................................... Application-Level Attacks-1

12 ........................................................................................................................................... :‫امثله على الهجمات على مستوى التطبيقات‬

12 ........................................................................................................................................................ Misconfiguration Attacks-3

12 ..................................................................................................................................................... Shrink Wrap Code Attacks-4

11 ................................................................................................................... )‫ (التحكم في امن المعلومات‬Information Security Control 1.2

11 ........................................................................... (Scope and Limitations of The Ethical Hackers)‫نطاق وحدود القراصنة األخالقيين‬

11 ......................................................................................................................................................................................... Scope

11 ............................................................................................................................................................................... Limitations

11 ................................................................................................................................... :Ethical Hacker Skills ‫مهارات الهاكر األخالقي‬

11 ................................................................................................................................................ )‫ (الدفاع من العمق‬Defense-In-Depth

11 ..................................................................................................................... )‫ (عملية اإلدارة الطارئة‬Incident Management Process

11 ...................................................................................................................... ‫ سياسات أمن المعلومات‬Information Security Policies

11 ................................................................................................................................... :(Security Policies) ‫أهداف السياسات األمنية‬

11 ........................................................................................................... )‫ (تصنيف السياسة األمنية‬Classification of Security Policy

11 ................................................................................... Structure and Contents Of Security Policies‫هيكل ومحتوي السياسات األمنية‬

11 ................................................................................................................... (Structure of Security Policy) ‫هيكل السياسات األمنية‬

11 .................................................................................................................. )Contents of security policy( ‫محتوي السياسات األمنية‬

11 ............................................................................................................................ (Types Of Security Policy) ‫أنواع السياسات األمنية‬

11 .......................................................... (Steps To Create And Implement Security Policies) ‫الخطوات إلنشاء وتطبيق السياسات األمنية‬

11 ...................................................................................................................................................... :‫أمثله على السياسات األمنية كاالتي‬

11 ............................................................................................................ (Research Vulnerability Security)‫بحوث في الثغرات األمنية‬

12 .......................................................................................... Vulnerability Research Website‫أدوات الوصول الى األبحاث عن الضعف‬

.) PENETRATION LABS ( ‫معمل االختراق‬

11 ..............................................................................................................................................................................................‫ مقدمه‬1.1

11 ............................................................................................................ "Choosing the Virtual Environment " ‫ اختيار البيئة االفتراضية‬1.1

11 .............................................................................................................................................. "virtual environment" ‫البيئة االفتراضية‬

12 ......................................................................................................................................................... ‫البيئات المجانية ذات المصدر المفتوح‬

12 ................................................................................................................................................................ VMware Player .1

https://www.facebook.com/tibea2004
‫فن الهاكر األخالقي‬ 7

12 ....................................................................................................................................................................... VirtualBox 2.

11 .................................................................................................................................................................................. Xen .1

11 ........................................................................................................................................................................... Hyper-V 3.

11 ......................................................................................................................................................... vSphere Hypervisor .1

11 ................................................................................................................................................................................ ‫المنصات التجارية‬

11 ................................................................................................................................................. VMware vSphere [ESXi] 1.

11 ........................................................................................................................................................................ XenServer .1

11 ...................................................................................................................................................... VMware Workstation .1

11 .................................................................................................................................... ‫ عمل اول منصة افتراضيه وتثبيت نظام التشغيل كالي‬1.1

11 ....................................................................................................................................................................... ‫ اختيار شبكة االتصاالت‬1.1

11 ........................................................................................................................................................................ The bridged setting

12 ........................................................................................................................................................Network Address Translation

22 ..................................................................................................................................................................... The host-only switch

22 ....................................................................................................................................................................... The custom settings

21 ........................................................................................................................"Choosing range components" ‫ اختيار مكونات المعمل‬1.1

21 .................................................................................................................................................................... The attacker machine

21 ............................................................................................................................................................................................ Router

22 ......................................................................................................................................................................................... Firewall

22 ......................................................................................................... ‫طريقة أخرى إلنشاء معمل خاص بك وهو االستعانة بعمل عن طريق الشبكة‬

(PROGRAMING) ‫البرمجة‬

21 ......................................................................................................................................... ‫"؟‬What Is Programming" ‫ ما هي البرمجة‬1.1

21 ................................................................................................................................................................................ Pseudo-code 1.1

21 ....................................................................................................................................................................... Control Structures 1.1

21 .............................................................................................................................................................. If-Then-Else ‫القاعدة الشرطية‬

21 ...................................................................................................................................... "‫ "الحلقات التكرارية‬While/Until Loops ‫القاعدة‬

21 ............................................................................................................................................................................. For Loops ‫القاعدة‬

21 ............................................................................................................................................................ ‫ مفاهيم البرمجة األساسية األخرى‬1.1

21 ....................................................................................................................................................................... "Variables" ‫المتغيرات‬

22 ......................................................................................................................................... "Arithmetic Operators" ‫المعامالت الحسابية‬

22 ......................................................................................................................................... "Comparison Operators" ‫معامالت المقارنة‬

21 ........................................................................................................................................................................... "‫ "الدوال‬Functions

https://www.facebook.com/tibea2004
‫فن الهاكر األخالقي‬ 8

22 ............................................................................................................................................... c ‫أنواع الدوال وكيفية تعريفها بالنسبة للغة‬

22 ........................................................................................................................................................... Getting Your Hands Dirty 1.1

12 ................................................................................................................................................................... ‫ الصورة التي أصبحت أكبر‬1.2

11 ......................................................................................................................................................................... The x86 Processor

11 ...................................................................................................................................................................... Assembly Language

12 .................................................................................................................................................................................. ASCII Table

11 .......................................................................................................................................................................... ‫ العودة الى األساسيات‬1.2

11 ........................................................................................................................................................................................... Strings

22 ............................................................................................................................................... Signed, Unsigned, Long, and Short

21 ......................................................................................................................................................................... "‫ "المؤشرات‬Pointers

21 ............................................................................................................................................................................... Format Strings

22 ................................................................................................................................................................................... Typecasting

22 ........................................................................................................................................................... Command-Line Arguments

21 ........................................................................................................................................................................... Variable Scoping

122 ................................................................................................................................................. "‫ "الذاكره‬Memory Segmentation 1.1

121 ........................................................................................................................................................... Memory Segments in C

121 ............................................................................................................................................................................ Using the Heap

121 ................................................................................................................................................ :‫ أربعة دوال لتخصيص الذاكرة‬C99 ‫يوفر‬

121 .................................................................................................................................................................... Building on Basics 1.2

121 ..................................................................................................................................................... "File Access" ‫الوصول الى الملفات‬

122 .......................................................................................................................................................................... File Permissions

122 ...................................................................................................................................................................................... User IDs

121 ............................................................................................................................................................... ")‫ "التراكيب (البنيات‬Structs

122 ........................................................................................................................................................................ Function Pointers

122 ............................................................................................................................................................ Pseudo-random Numbers

(NETWORK) ‫الشبكات‬

111 ................................................................................................................................................................................. OSI Model 1.1

111 ............................................................................................................................................................................. TCP/IP Stack 1.1

111 ..................................................................................................................................... RFC as the Main Source of Information

111 ................................................................................................................................... "‫ "الحزم والتغليف‬Packets and Encapsulation

111 ............................................................................................................................................Network Packet Header Structures 1.1

https://www.facebook.com/tibea2004
‫فن الهاكر األخالقي‬ 9

111 ..................................................................................................................................................... "Ethernet Header" ‫رأس االيثرنت‬

112 ...................................................................................................................................................................... "IP Header" IP ‫راس‬

112 ................................................................................................................................................................................ ARP Header

111 ................................................................................................................................................................................. TCP Header

112 ................................................................................................................................................................................ UDP Header

112 .............................................................................................................................................................................. ICMP Header

112 ...................................................................................................................................................................................... Sockets 1.1

111 ........................................................................................................................................ "‫ "دوال المقبس المستخدمة‬Socket Functions

111 ................................................................................................................................................................. Socket Connections

111 ................................................................................................................................................................................. sys/socket.h

111 .................................................................................................................................................................... Socket Addresses

111 ......................................................................................................................................... "‫ "ترتيب بايت شبكي‬Network Byte Order

111 ....................................................................................................................................................... Internet Address Conversion

112 ...............................................................................................................................................getaddrinfo()—Prepare to launch!

111 .................................................................................................................. Using Connection-Oriented Sockets (stream socket)

111 ........................................................................................................................................................... "Server Side" ‫جانب الخادم‬

111 ............................................................................................................................................................ )Client side( ‫جانب العميل‬

111 ......................................................................................................................................................... Client-Server Background 1.1

111 .................................................................................................................................................................. Simple Stream Server

111 .............................................................................................................................................................. A Simple Stream Client

(WINDOWS) ‫أنظمة التشغيل‬

112 ............................................................................................................................................................................................‫ مقدمه‬1.1

112 .................................................................................................................................................... ‫ تاريخ إصدارات مايكروسوفت ويندوز‬1.1

112 ............................................................................................................................................................................. ‫اإلصدارات االولية‬

111 .............................................................................................................................................................................. 1.1‫ و‬1.2 ‫ويندوز‬

111 ....................................................................................................................................................................................... x2 ‫ويندوز‬

112 .............................................................................................................................................................................. NT ‫عائلة ويندوز‬

112 ................................................................................................................................................................................. ‫ويندوز إكس بي‬

112 ................................................................................................................................................................................. 2 ،‫ويندوز فيستا‬

112 .......................................................................................................................................................‫محررات طرق اإلدخال وحزم اللغات‬

112 ......................................................................................................................................................................................... 1 ‫ويندوز‬

https://www.facebook.com/tibea2004
‫فن الهاكر األخالقي‬ 10

112 ...................................................................................................................................................................................... 1.1 ‫ويندوز‬

112 ....................................................................................................................................................................................... 12 ‫ويندوز‬

111 .................................................................................................................................................................................. ‫ويندوز سي إي‬

111 ......................................................................................................."windows Command Line basic" ‫ أساسيات سطر األوامر لويندوز‬1.1

111 ............................................................................................................................................................................ cmd ‫فوائد وعيوب‬

111 ............................................................................................................................................................. command prompt ‫أساسيات‬

111 ................................................................................................................. )‫ (عمليات سطر األوامر‬Basic Command Line Operations

112 .......................................................................................................................................... Network Command Line Operations

112 ............................................................................................................................................................ (File system) ‫ أنظمة الملفات‬1.1

112 .................................................................................................................................................... (Storage location) ‫مناطق التخزين‬

112 ......................................................................................................................................................... Users Folders (Directories)

111 .......................................................................................................................................................)Symbolic link( ‫الروابط الرمزية‬

111 .................................................................................................................................................... Alternate Data Streams (ADS)

112 ....................................................................................................................................................................... ADS ‫ على‬1 ‫تمرين‬

112 ........................................................................................................................................... Mandatory Integrity Controls (MIC)

111 .......................................................................................................................................................... File Permissions – DACLs

111 .............................................................................................................................. )Inheritance of Permissions( ‫توريث االذونات‬

111 ........................................................................................................................................................................ Allow vs Deny

111 .......................................................................................................................................................... Permissions Precedence

111 .................................................................................................................................. (Users And Groups) ‫ المستخدمين والمجموعات‬1.1

111 ....................................................................................................................................................................... User Management

111 ............ (Permissions & User Account Control (UAC)) ‫الصالحيات والتحكم في حساب المستخدم‬ .1

111 ......................................................................................... net user ‫إضافة المستخدمين باستخدام االمر‬ .1

111 ......................................................................................................... ‫( حسابات المستخدمين‬disabled) ‫إزالة او تعليق‬ .1

111 ................................................................................................................... )User Management( ‫إدارة المستخدم‬ .1

111 ......................................................................................................................................................................... Windows Groups

111 ...................................................................................................................................... (ADMINISTRATORS) ‫حساب اإلداريين‬

111 ................................................................................................................................... ‫طرق إنشاء المجمواعت واضافة المستخدمين اليها‬

111 ......................................................................................................................................................................... RUNAS ‫استخدام‬

112 ................................................................................................................................................. User Account Control (UAC)

112 ............................................................................................................................................... Policies And Credential Storage 1.2

112 ..................................................................................................................................................................................... Mimikatz

https://www.facebook.com/tibea2004
‫فن الهاكر األخالقي‬ 11

112 ....................................................................................................... )User Rights & Security Policies( ‫حقوق المستخدم وسياسات األمن‬

112 .................................................................................................................................................... Security Policy – Audit Policy

111 ..................................................................................................................................................... Security Policy – User Rights

111 ............................................................................................................................................. Security Policy – Security Options

111 ..................................................................................................................................................................................... Registry 1.2

111 .................................................................................................................................................................. ‫ الشائعه‬registry ‫أنواع قيم‬

112 ..................................................................................................................................................................... REG.EXE Exercise

122 .............................................................................................................................................. windows networking and sharing 1.1

122 ..................................................................................................................................................................... Networking – SMB

122 ............................................................................................................................................................................. NET VIEW

121 ................................................................................................................................................................................ NET USE

121 ................................................................................................................................... (Services and Processes) ‫ الخدمات والعمليات‬1.2

121 ....................................................................................................................................................................... Windows Services

121 ........................................................................................................................... (Windows Services Startup) ‫بدء تشغيل الخدمات‬

121 ................................................................................................................................................................ SC.EXE & Exercise

121 ...................................................................................................................................................................... Services Snap-in

121 ............................................................................................................................................................. Processes (Applications)

121 ............................................................................................................................................................... Tasklist and Taskkill

121 ....................................................................................................................................................................... WMIC Exercise

121 ................................................................................................................................... (Scheduled Applications) ‫جدولة التطبيقات‬

(LINUX) ‫أنظمة التشغيل‬

122 ................................................................................................................................................................................................. ‫مقدمه‬

122 ................................................................................................................................................... "Kernel" ‫ الكيرنل‬:‫ نواة نظام التشغيل‬2.1

122 ....................................................................................................................................... ‫"؟‬kernel" ‫ما هي المهام التي تقوم بها نواة النظام‬

122 ........................................................................................................................................................ Kernel mode and user mode

121 ......................................................................................................................................................................... "The Shell" ‫ الشل‬2.1

121 ......................................................................................................................................................................... Bourne shell (sh)

121 ................................................................................................................................................................................ C shell (csh)

121 ........................................................................................................................................................................... Korn shell (ksh)

121 ............................................................................................................................................................ Bourne again shell (bash)

122 ................................................................................................................................................................... ‫ أكثر أوامر الشل استخداما‬2.1

https://www.facebook.com/tibea2004
‫فن الهاكر األخالقي‬ 12

122 ...................................................................................................................................................................... Users and Groups 2.1

122 ..........................................................................................................................................................................)Users( ‫المستخدمين‬

122 ........................................................................................................................................................................ )groups( ‫المجموعات‬

122 ..................................................................................................................................................................................... Superuser

122 .............................................................................................................................................................................. ‫األوامر المستخدمه‬

121 ...............................................................................................................................‫ الملفات‬،‫ الروابط‬،‫ المجلدات‬،‫ معيار هيكلية نظام الملفات‬2.1

121 ............................................................................................................(Single Directory Hierarchy, Directories, Links, and Files)

121 ................................................................................................................................................................. )File Type( ‫أنواع الملفات‬

121 ......................................................................................................................................... (Directories and links) ‫المجلدات والروابط‬

121 ............................................................................................................................................................................. Symbolic links

121 ................................................................................................................................................................ (Filenames) ‫أسماء الملفات‬

121 .................................................................................................................................................................... (Pathnames) ‫المسارات‬

121 ......................................................................................................... cwd ‫( ويرمز له بالرمز‬Current working directory) ‫المسار الحالي‬

121 .................................................................................................................. (File ownership and permission) ‫ملكيات واذونات الملفات‬

121 ........................................................................................................................................................................... File I/O Model 2.2

121 ..................................................................................................................................................... (File descriptors) ‫واصفات الملف‬

121 .......................................................................................................................................................................... The stdio library

121 ....................................................................................................................................................................... (Programs) ‫ البرامج‬2.2

121 .................................................................................................................................(Process memory layout) ‫تخطيط الذاكرة للعملية‬

121 ................................................................................................ (Process creation and program execution) ‫إنشاء العملية وتنفيذ البرامج‬

121 ................................................................................................................................................Process ID and parent process ID

121 ...............................................................................................(Process termination and termination status) ‫إنهاء عملية وحالة اإلنهاء‬

121 .......................................................................................................................... Process user and group identifiers (credentials)

122 ............................................................................................................................................ (Privileged processes) ‫العمليات المميزة‬

122 .................................................................................................................................................................... (Capabilities) ‫القدرات‬

122 ........................................................................................................................................................................... The init process

122 ...................................................................................................................................................................... Daemon processes

122 .......................................................................................................................................................................... Environment list

122 ......................................................................................................................................................... (Resource limits) ‫حدود الوارد‬

122 .............................................................................................................................................. )‫ (تعيينات الذاكرة‬Memory Mappings 2.2

121 ..................................................................................................................................................... Static and Shared Libraries 2.12

121 ....................................................................................................................................................... (Static libraries) ‫المكتبات الثابتة‬

https://www.facebook.com/tibea2004
‫فن الهاكر األخالقي‬ 13

121 ................................................................................................................................................. (Shared libraries) ‫المكتبات المشتركة‬

121 .......................................................................................................................................................... ‫ االتصال والتزامن بين العمليات‬2.11

121 ...................................................................................................................... )Interprocess Communication and Synchronization(

122 ..................................................................................................................................................................................... Signals 2.11

112 ................................................................................................................................................. )‫ (الخيط أو سلسلة التعليمات‬Threads 2.11

112 .................................................................................................................................... Process Groups and Shell Job Control 2.11

112 ................................................................................................... Sessions, Controlling Terminals, and Controlling Processes 1!.2

111 ...................................................................................................................................................................... Pseudoterminals 2.12

111 ......................................................................................................................................................................... Date and Time 2.12

111 ...................................................................................................................................................... Client-Server Architecture 2.11

111 .................................................................................................................................................................................. Realtime 2.12

111 ............................................................................................................................................................. The /proc File System 2.12

111 ................................................................................................................................................... Apt package handling utility 2.11

111 ........................................................................................................................................................Managing Linux Services 2.11

111 ................................................................................................................................................................................ SSH Service

111 .............................................................................................................................................................................. HTTP Service

(METASPLOIT) ‫الميتاسبلويت‬

111 ................................................................................................................................................................................................. ‫مقدمه‬

111 ........................................................................................................................................................................... ‫ لماذا الميتاسبلويت؟‬2.1

111 ........................................................................................................................................................................... ‫ تاريخ الميتاسبلويت‬2.1

112 .......................................................................................................................................................... ‫ مصطلحات خاصه بالميتاسبلويت‬2.1

112 ......................................................................................................................................................................................... Exploit

112 ........................................................................................................................................................................................ Payload

112 ..................................................................................................................................................................................... Shellcode

112 ........................................................................................................................................................................................ Module

112 ........................................................................................................................................................................................Listener

112 ............................................................................................................................... )Metasploit Architecture( ‫ مكونات الميتاسبلويت‬2.1

112 ................................................................................................................................... (Metasploit Interfaces) ‫ واجهات الميتاسبلويت‬2.1

111 ................................................................................................................................................................................ MSFconsole

112 ......................................................................................................................................................................................... MSFcli

122 ......................................................................................................................................................................................Armitage

https://www.facebook.com/tibea2004
‫فن الهاكر األخالقي‬ 14

121 .................................................................................................................................................................. HAIL MARY ‫هجوم‬

121 ................................................................................................................. (Type of Metasploit Moudles) ‫ أنواع وحدات الميتاسبلويت‬2.2

121 ......................................................................................................................................................................................... Exploit

‫ مما يتسبب في قيام نظام التشغيل هذا بتشغيل البرمجيات التي هي من اختيار المهاجم (عادة‬،‫قد تم تصميم هذه الوحدات لالستفادة من عيب على جهاز هدف‬
client- ‫ البعض اآلخر‬.‫ في الخدمة الهدف عبر الشبكة‬listening ‫ التي تستغل‬،service-side attacks ‫ هي‬exploits ‫ بعض من‬.)Metasploit payload
121 .................................................... .‫ في الرد‬exploit ‫ وتقديم‬،‫ التي تستمع على شبكة من اجل الطلبات الواردة من العمالء المخترقين‬.side attacks

121 ........................................................................................................................................................................................ Payload

121 ...................................................................................................................................................................................... Encoders

121 .............................................................................................................................................................................................. Post

121 ............................................................................................................................................................................................. NOP

121 .................................................................................................................................................................... Modules Locations 2.2

121 .................................................................................................................................... Metasploit Exploits: Active vs. Passive 2.1

121 ..................................................................................................................... Metasploit Payloads: Single, Stagers, and Stages 2.2

121 ............................................................................................................................................................. Some Metasploit Stagers

121 .............................................................................................................................................................. Some Metasploit Stages

121 .................................................................................................................................................................. Metasploit Utilities 2.12

121 ................................................................................................................................................................................ MSFpayload

121 ................................................................................................................................................................................. MSFencode

121 .................................................................................................................................................................................. Nasm Shell

121 .................................................................................................................................... Metasploit Express and Metasploit Pro2.11

122 .......................................................................................................................................................................... ‫ اعداد الميتاسبلويت‬2.11

122 ........................................................................................................................................................... .‫اعداد الميتاسبلويت على الويندوز‬

122 ............................................................................................................................................... .(Ubuntu) ‫اعداد الميتاسبلويت على اوبنتو‬

122 ...................................................................................................................................................... .)kali( ‫اعداد الميتاسبلويت على كالى‬

122 ................................................................................................................................................................. msfconsole ‫ المزيد عن‬2.11

122 .............................................................................................................. (Using Msfconsole as a Shell) ‫ كالشل‬Msfconsole ‫استخدام‬

121 ......................................................................................................................................... Msfconsole: Running OS Commands

121 ....................................................................................................................................................... Msfconsole: Command Help

122 .............................................................................................................................................. Msfconsole: The Show Command

122 ................................................................................................................................................. Msfconsole: The Use Command

121 ..................................................................................................................................................................... Msfconsole: Search

121 .................................................................................................................................................... Msfconsole: Exploit Rankings

121 ......................................................................................................................................................... Msfconsole: Setting Values

https://www.facebook.com/tibea2004
‫فن الهاكر األخالقي‬ 15

121 ........................................................................................................................................... Setting Global variables with setg

121 ............................................................................................................................. Flexibility in Specifying RHOSTS Targets

121 ................................................................................................................... RHOST and RHOST Variable and IPv6 Support

121 ........................................................................................................................ Variable for Windows SMB Exploit Modules

121 ...................................................................................................................................................................... Saving variables

121 ................................................................................................................................................................... run ‫ واالمر‬exploit ‫االمر‬

121 ................................................................................................................................................... )Managing Sessions( ‫إدارة الجلسه‬

122 ............................................................................................................................................... Msfconsole: The route Command

122 .............................................................................................................................Further Pivoting with route & Proxychains

122 .............................................................................................................................. )‫ (خيارات ملف السجل‬Invoking Logging Options

122 ........................................................................................................................................................... Setting Debugging Levels

121 ................................................................................................................................................................................. connect ‫االمر‬

121 ................................................................................................................................................ Commands from a Resource File

121 ................................................................................................................................................ Msfconsole: IRB - A Ruby Shell

122 .............................................................................................................................................................................. meterpreter 2.11

122 ........................................................................................................................................................................ ‫؟‬Meterpreter ‫ما هو‬

122 .............................................................................................................................................................. Meterpreter Stealthiness

122 ................................................................................................................................................ Meterpreter Core and Extensions

112 .................................................................................................................................................................... Meterpreter as Shell

112 ...................................................................................................................................................... Meterareter Core Commands

111 ........................................................................................................... Meterpreter Stdapi Capabilities: File System Commands

111 ......................................................................... )Meterpreter Stdapi Capabilities: Networking Commands ( ‫أوامر التعامل مع الشبكه‬

111 .................................................................................................................. Meterpreter Stdapi Capabilities: System Commands

111 ....................................................................................................... Meterpreter Stdapi Capabilities: User Interface Commands

111 .................................................................................................... Meterpreter Stdapi Capabilities: Webcam & Mic Commands

111 ............................................................................................................... Meterpreter Priv Extension: Hashdump & Timestomp

111 ............................................................................................................... Meterpreter Priv Extension: The getsystem Command

111 ................................................................................................................ Windows Security Tokens and Meterpreter Incognito

111 ............................................................................................................................................... Meterpreter Token Impersonation

111 ................................................................................................................................ Additional Meterpreter Extensions: Sniffer

111 ............................................................................................................................................................................. Post module 2.11

111 .......................................................................................................................................................... A Sample of Post Modules

https://www.facebook.com/tibea2004
‫فن الهاكر األخالقي‬ 16

111 ........................................................................................................................................................................................ Multi

111 ............................................................................................................................................................................. WINDOWS

112 .............................................................................................................................................................. )database( ‫ قواعد البيانات‬2.12

.‫برمجيات البد منها‬

112 ............................................................................................................................................................................................‫ مقدمه‬1.1

112 .............................................................................................................................................................. Dradis framework ‫ األداة‬1.1

111 ................................................................................................................................................................................. Dradis ‫تشغيل‬

111 ................................................................................................................................................ Server Plugins ‫هناك ثالث أنواع من ال‬

112 ............................................................................................................................................................................... ‫ في كالى‬Dradis

112 ......................................................................................................................................................... )main tools( ‫ األدوات الرئيسيه‬1.1

112 ........................................................................................................................................................................... GNU Debugger

111 ........................................................................................................................................................................................ Ifconfig

111 ......................................................................................................................................................................................... Netstat

111 ............................................................................................................................................................................................. Lsof

111 ..................................................................................................................................................................................... Tcpdump

111 ........................................................................................................................... )Commond Line Options( ‫خيارات سطر األوامر‬

112 ...................................................................................................................................................... Formst of tcpdump Output

112 ............................................................................................................................................................................ ‫ المزيد من األدوات‬1.1

112 ............................................................................................................................................................................................ Time

112 ........................................................................................................................................................................................... Gprof

111 ........................................................................................................................................................................................... Ctags

111 ........................................................................................................................................................................................... Strace

111 .......................................................................................................................................................................................... Ltrace

111 ......................................................................................................................................................................................... Mtrace

112 ................................................................................................................................................................................ Make/gmake

112 ..................................................................................................................................................................... Automake/autoconf

112 .............................................................................................................................................................................................. Ldd

112 ......................................................................................................................................................................................Objdump

112 ......................................................................................................................................................................... Hexdump and od

112 ......................................................................................................................................................................................... Strings

112 ........................................................................................................................................................................................ Readelf

https://www.facebook.com/tibea2004
‫فن الهاكر األخالقي‬ 17

112 .............................................................................................................................................................................................. Size

112 ............................................................................................................................................................................................... Nm

112 ............................................................................................................................................................................................. Strip

112 .............................................................................................................................................................................................. File

111 ............................................................................................................................................................................. Ipcs and ipcrm

111 ............................................................................................................................................................................... Ar and ranlib

111 .............................................................................................................................................................................................. Arp

https://www.facebook.com/tibea2004
‫فن الهاكر األخالقي‬ ‫‪18‬‬

‫الفصل االول‬
‫ال مدخل إلى عالم االختراق‬

‫‪ 1.1‬مقدمه‬
‫االختراق‪/‬القرصنة كفكرة أساسية يرتكز على المعرفة المسبقة باألنترنت والحاسب اآللي وهو يعتمد على مهارة المخترق في التعامل مع لغات‬
‫البرمجة وأنظمة التشغيل )‪ .(Windows – Linux/Unix – Mac‬عندما تأتى كلمة الهاكرز الى اذهاننا فإنها تستحضر صور مبسطة عن‬
‫التخريب اإللكتروني والتجسس‪ .‬معظم الناس المنتسبين للهاكرز يقومون بكسر القوانين لذا نفترض أن كل من يشارك في أنشطة الهاكرز هو‬
‫مجرم‪ .‬صحيح أن هناك ناس يستخدمون تقنيات الهاكرز لكسر القانون‪ ،‬ولكن الهاكرز ليست في الحقيقة حول ذلك‪ .‬في الواقع‪ ،‬الهاكرز هي‬
‫أكثر ارتباطا بالقانون من كسرها‪ .‬جوهر الهاكرز هو إيجاد االستخدامات الغير مقصودة أو المتغاض عنها من القوانين والخصائص في حالة‬
‫معينة ومن ثم تطبيقها بطرق جديدة ومبتكرة لحل مشكلة ما‪ .‬توضح المشكلة الرياضيات التالية جوهر الهاكرز‪:‬‬
‫استخدم كل من األرقام التالية ‪ 1‬و‪ 1‬و‪ 1‬و‪ 2‬مرة واحدة بالضبط مع أي من العمليات الحسابية األساسية األربعة (الجمع والطرح‬
‫والضرب والقسمة) لكي تبلغ ‪ .11‬يجب استخدام كل رقم مرة واحدة فقط‪ ،‬وربما قمت بتحديد امر العمليات؛ على سبيل المثال‪،‬‬
‫‪ 3*(4+6) +1=31‬فهي صالحة‪ ،‬على الرغم من انها غير صحيحة‪ ،‬وذلك الن الناتج ال يساوى ‪.11‬‬
‫القواعد لحل هذه المشكلة واضحة المعالم وبسيطة‪ ،‬ولكن الجواب ال يصل إليه الكثير‪ .‬لحل مثل هذه المشكلة‪ ،‬حلول الهاكرز تتبع قواعد النظام‪،‬‬
‫ولكنها تستخدم تلك القواعد بطرق مختلفة‪ .‬وهذا يعطي الهاكرز قدرات‪ ،‬مما يتيح لهم حل المشاكل بطرق ال يمكن تصورها بالنسبة ألولئك‬
‫الذين يقتصر تفكيرهم على المنهجيات التقليدية‪.‬‬

‫منذ بداية عهد أجهزة الكمبيوتر‪ ،‬فأن الهاكرز كانوا دائما يقومون بحل معظم المشاكل‪ .‬في أواخر ‪ ،1212‬كان هناك مجموعة من الطالب في‬
‫معهد ماساشوستس للتكنولوجيا )‪ MIT (Massachusetts Institute of Technology‬أطلق عليهم أسم ‪ TMRC‬وهي اختصار‬
‫‪ Tech Model Railroad Club‬تم تدريبهم على فهم ما بعد األساسيات وما يجري في الخطوات البينية كان هذا لقب من يكتشف حل‬
‫لمشكلة أو يحذر مشكلة ممكنة الحدوث قبل وقوعها لتالفي الخسائر‪ .‬ثم أصبح أعم ليشمل كل من يحب الرياضيات كنوع من المتعة وكتابة‬
‫البرامج كنوع من الفن (تماما ً مثل كتابة القصائد والطرائف)‪ .‬ثم تم وهبهم نموذج من قطع الغيار‪ ،‬معدات الهاتف القديمة في الغالب‪ .‬قام أعضاء‬
‫هذا النادي باستخدام المعدات للتالعب بنظام معقد والتي سمحت لهم بتشغيل متعدد للسيطرة على أجزاء مختلفة من المسار عن طريق االتصال‬
‫برقم الى المقاطع المناسبة‪ .‬دعوا هذا االستخدام الجديد والمبتكر ألجهزة الهاتف بالقرصنة‪ .‬العديد من الناس يعتبرون هذه المجموعة هم‬
‫القراصنة األصلين‪ .‬ثم انتقلت المجموعة إلى البرمجة على البطاقات ‪ punch cards‬و‪ Ticker tape‬ألجهزة الكمبيوتر القديمة مثل ‪IBM‬‬
‫‪ 704‬و‪ .TX-0‬بينما كان البعض اآلخر يكتفي ببرامج الكتابة التي تحل المشكالت فقط‪ ،‬وكان القراصنة االولون يقومون بكتابة البرامج لحل‬
‫المشاكل بشكل جيد‪ .‬وكانت البرامج الجديدة التي من شأنها تحقق نفس النتيجة كما هو موجود ولكنها تستخدم ‪ punch cards‬أقل فهو أفضل‪،‬‬
‫على الرغم من أنها فعلت الشيء نفسه‪.‬‬
‫أن تكون قادرا على الحد من عدد ‪ punch cards‬الالزمة للبرنامج أظهرت اإلتقان الفني على جهاز الكمبيوتر‪ .‬أثبتت القراصنة االولون انه‬
‫يمكن أن يكون للمشاكل التقنية الحلول الفنية‪ ،‬وبالتالي تحولت البرمجة من مهمة الهندسة الى شكل من اشكال الفن‪.‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪19‬‬

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

‫وجد الهاكرز األصليين روعة وأناقة في العلوم الجافة تقليديا الرياضيات واإللكترونيات‪ .‬رأوا البرمجة كشكل من أشكال التعبير الفني‬
‫والكمبيوتر كأداة ألداء الفن‪ .‬لم يكن القصد من رغبتهم التشريح والفهم إلزالة الغموض عن المساعي الفنية‪ .‬كان مجرد وسيلة لتحقيق مزيد من‬
‫التقدير لهم‪ .‬في نهاية المطاف أطلق عليهم الهاكر األخالقى‪ :‬تقدير المنطق كشكل فني وتعزيز التدفق الحر للمعلومات‪ ،‬والتغلب على الحدود‬
‫التقليدية والقيود لهدف بسيط لفهم أفضل للعالم‪ .‬هذا ليس اتجاها ثقافي جديد‪ .‬كان فيثاغورس في اليونان القديمة ذات أخالقيات مماثلة وثقافة‬
‫فرعية‪ ،‬على الرغم من عدم امتالك أجهزة الكمبيوتر‪ .‬رأوا الجمال في الرياضيات واكتشف العديد من المفاهيم األساسية في الهندسة‪ .‬ومن شأن‬
‫ذلك أن التعطش للمعرفة ومنتجاته مفيدة تستمر على مر التاريخ‪ ،‬من فيثاغورس الدا الفليس إلى آالن تورينج إلى القراصنة من ‪.TMRC‬‬
‫واصلت الهاكرز الحديثة مثل ريتشارد ستالمان وستيف وزنياك إرث الهاكرز‪ ،‬وجلب لنا نظم التشغيل الحديثة‪ ،‬لغات البرمجة‪ ،‬والحواسيب‬
‫الشخصية‪ ،‬والعديد من التقنيات األخرى التي نستخدمها كل يوم‪.‬‬

‫كيف يمكن للمرء أن يميز بين الهاكرز الجيدين الذين يجلبون لنا عجائب التقدم التكنولوجي الهاكرز االشرار الذين يسرقون أرقام بطاقات‬
‫االئتمان لدينا؟ قد صيغت الكلمة كراكر "‪ "cracker‬مدى تمييز الهاكرز االشرار من الجيدين منهم‪ .‬الهاكرز الحقيقين هم الهاكر األخالقى‪،‬‬
‫في حين كان الكراكرز مهتمون فقط بكسر القانون‪ ،‬وجعل الربح السريع‪ .‬واعتبر الكراكرز أقل بكثير من الهاكرز الموهوبين النخبة‪ ،‬كما‬
‫جعلوا ببساطة استخدام أدوات مكتوبة بخط الهاكرز األصليين والكتابات دون فهم لكيف يعمل‪ .‬كان من المفترض أن يكون المصطلح كراكرز‬
‫يشمل كل شخص يقوم بأي عمل ال ضمير لهم مع برنامج قرصنة الحاسوب‪ ،‬تشويه المواقع‪ ،‬واألسوأ من ذلك‪ ،‬وليس فهم ما كانوا يفعلون‪.‬‬
‫ولكن عدد قليل جدا من الناس استخدموا هذا المصطلح اليوم‪.‬‬

‫القوانين الحالية تقيد التشفير وبحوث التشفير لتعتيم الخط الفاصل بين الهاكرز والكراكرز‪ .‬في عام ‪ ،1221‬البروفيسور إدوارد فلتن وفريق‬
‫بحثه من جامعة برينستون قام بنشر ورقة لمناقشة نقاط الضعف في مختلف مخططات العالمة المائية‪ .‬وردت هذه الورقة لتحد المبادرة اآلمنة‬
‫للموسيقى الرقمية ‪ ،SDMI‬مما شجع الجمهور في محاولة لكسر مخططات العالمة المائية هذه‪ .‬قبل تمكن فلتن وفريقه من نشر هذه الورقة‪،‬‬
‫على الرغم من أنهم تعرضوا للتهديد من قبل كل من مؤسسة ‪ SDMI‬وجمعية صناعة التسجيالت األمريكية (‪ .)RIAA‬قانون حقوق الطبع‬
‫والنشر الرقمي (‪ )DCMA‬لسنة ‪ 1221‬جعل انه من غير القانوني مناقشة أو توفير التكنولوجيا التي يمكن استخدامها لتجاوز ضوابط‬
‫المستهلك الصناعة‪ .‬وقد استخدم هذا القانون نفسه ضد ديمتري سكيالروف‪ ،‬وهو مبرمج كمبيوتر روسي وقرصان‪ .‬وكان قد كتب برمجيات‬
‫للتحايل على التشفير في برمجيات أدوبي وقدم نتائج بحثه في مؤتمر الهاكرز في الواليات المتحدة‪ .‬فقام مكتب التحقيقات الفدرالي بالقبض‬
‫عليه‪ ،‬مما أدى إلى معركة قانونية طويلة‪ .‬من هم الهاكرز والذين هم الكراكرز اآلن؟ عندما تبدأ القوانين تتعارض مع حرية التعبير‪ ،‬هل أصبح‬
‫األخيار فجأة الذين يتحدثون عن عقولهم سيئين؟ أعتقد أن روح الهاكرز أصبح يتجاوز القوانين الحكومية‪ ،‬بدال من أن يعرف بها‪.‬‬

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

‫نتائج هذه الحملة في نهاية المطاف مفيد للتطور المشترك لألمن من خالل المنافسة بين الهاكرز المهاجمين والمدافعين‪ .‬تماما كما يتكيف الفهد‬
‫من مطاردة غزال سريعة‪ ،‬فأصبح الفهد أسرع في مطاردة الغزال‪ ،‬والمنافسة بين الهاكرز يوفر لمستخدمي الكمبيوتر أفضل وأقوى األمن‪،‬‬
‫فضال عن تقنيات الهجوم األكثر تعقيدا وتطورا‪ .‬إدخال وتطور أنظمة كشف التسلل (‪ )IDS‬هو مثال ساطع على هذه العملية‪ .‬الهاكرز‬
‫المدافعين قاموا بإنشاء هذا النظام‪ ،‬في حين وضع الهاكرز المهاجمون ما يمكنهم من التهرب من هذا النظام‪.‬‬

‫‪ :Punch cards‬تعنى البطاقات المثقبة أو رقع التثقيب وهي البطائق التي لعبت الدور المركزي في نظام البطاقات المثقبة الذي شكل منعطفا هاما في المعلومات (معالجة المعلومات بشكل آلي) خالل النصف الثاني‬
‫من القرن العشرين‪ .‬كانت هذه البطاقات تستعمل لتخزين المعلومات في شكل يمكن قراءته بطريقة ميكانيكية‪ ،‬ويعتبر إدخال البيانات بواسطة هذه البطائق في أنظمة الحواسيب آنذاك‪.‬‬
‫‪ :Ticker tape‬هو شريط أقرب الى وسيط االتصاالت اإللكتروني الرقمي‪ ،‬ونقل المعلومات على خطوط التلغراف‪ ،‬استخدم بين عام ‪ 1122‬الى ‪ .1222‬وكان يتألف من ‪ paper strip‬تمر من خالل آلة تسمى‬
‫‪ .stock ticker‬وجاء مصطلح "شريط" من الصوت الصادر من الجهاز عند الطبع‪.‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪20‬‬

‫‪" 1.1‬إذاً‪ ،‬إذا كنت تعرف العدو وتعرف نفسك – فال حاجة بك للخوف من نتائج مئة معركة‪ .‬إذا عرفت‬
‫نفسك ال العدو‪ ،‬فكل نصر تحرزه سيقابله هزيمة تلقاها‪ .‬إذا كنت ال تعرف نفسك أو العدو – ستنهزم في‬
‫كل معركة" كتاب فن الحروب للعبقري والفيلسوف العسكري الصيني سون تزو‬
‫لماذا نحتاج إلى فهم تكتيكات العدو؟‬
‫دعونا نمضي قدما مع هذا السؤال والحصول على األسئلة الشائعة للخروج من هذا الطريق واالنتقال الى هناك‪.‬‬

‫هل تم كتابة هذا الكتاب لتعليم فن القرصنة كما هو اليوم مثل تسبب االضرار بطرق أكثر فعالية؟ اإلجابة‪ :‬ال السؤال التالي‪.‬‬
‫لماذا في هذا العالم سوف تحاول تعليم الناس كيفية تسبيب الدمار والفوضى؟ اإلجابة‪ :‬انه ال يمكنك أن تحمي نفسك بشكل صحيح من‬
‫التهديدات التي ال تفهمها‪ .‬والهدف هو تحديد ومنع الدمار والفوضى‪ ،‬ال تسبيب ذلك‪.‬‬
‫ال يزال غير مقتنع؟ لماذا الجيوش في جميع أنحاء العالم تقوم بدراسة التكتيكات واألدوات واالستراتيجيات والتكنولوجيات لدى أعدائهم‪،‬‬
‫وهكذا؟ ألن معرفة المزيد عما هو عدوك‪ ،‬هي أفضل فكرة لديك لوضع آليات الحماية في مكانه المناسب للدفاع عن نفسك‪.‬‬

‫الجيوش في معظم البلدان تقوم بمختلف سيناريوهات تمارين القتال‪ .‬على سبيل المثال‪ ،‬وحدات طيارين انقسمت إلى "األخيار" و "األشرار"‪.‬‬
‫األشرار تستخدم نفس تكتيكات وتقنيات وأساليب قتال العدو روسيا‪ ،‬الواليات المتحدة‪ ،‬ألمانيا‪ ،‬كوريا الشمالية‪ ،‬وهلم جرا‪ .‬الهدف من هذه‬
‫المناورات هو السماح للطيارين لفهم أنماط هجوم العدو وتحديد واالستعداد لبعض األعمال الهجومية‪ ،‬حتى أنها يمكن أن تتفاعل بشكل صحيح‬
‫بالطريقة الدفاعية الصحيحة‪.‬‬
‫قد يبدو هذا وكأنه قفزة كبيره من الطيارين لممارسة زمن الحرب لمشاركة المعلومات الصحيحة حول األمن‪ ،‬ولكن كل ذلك هو ما يحاول‬
‫فريق الحماية والمخاطر القيام به‪ .‬يذكر ان الجيش يحاول حماية األمة وأصولها‪ .‬وتأتي العديد من الحكومات في جميع أنحاء العالم أيضا لفهم‬
‫نفس األصول حيث انهم ينفقون الماليين وربما المليارات من الدوالرات للحماية الجسدية في مواجهة األنواع المختلفة من التهديدات‪ .‬الدبابات‪،‬‬
‫والطائرات‪ ،‬واألسلحة ال تزال بحاجة الى الحماية من النسف‪ ،‬ولكن هذه نفس الدبابات والطائرات‪ ،‬واألسلحة‪ ،‬هي اآلن كل تدار من قبل‬
‫البرمجيات وتعتمد عليها‪ .‬هذه البرامج يمكن اختراقها‪ ،‬أو معطوبة‪ .‬مما يمكن ان تؤدى الى تغيير اإلحداثيات حيث القنابل تسقط‪ .‬القواعد‬
‫العسكرية الفردية ال تزال بحاجة إلى أن تكون محمية من قبل المراقبة والشرطة العسكرية؛ هذا هو األمن المادي‪ .‬األقمار الصناعية وطائرات‬
‫المراقبة تقوم بأداء مراقبة األنشطة المشبوهة التي تجري من بعيد‪ ،‬شرطة األمن تراقب نقاط الدخول والخروج من القاعدة‪ .‬هذه األنواع من‬
‫الضوابط تقتصر في رصد جميع نقاط الدخول إلى قاعدة عسكرية‪ .‬ألن القاعدة هي األخرى تعتمد على التكنولوجيا والبرمجيات كما هو في كل‬
‫منظمة‪ .‬اليوم هناك اآلن العديد من قنوات االتصال الحالية (اإلنترنت‪ ،‬الشبكات الخارجية‪ ،‬الالسلكي‪ ،‬الخطوط المؤجرة‪ ،‬خطوط ‪WAN‬‬
‫المشتركة‪ ،‬وهلم جرا)‪ ،‬وهو نوع مختلف من "شرطة األمن" لتغطية ورصد جميع هذه النقاط الدخول والخروج من القاعدة‪.‬‬
‫فهم كيفية عمل الهجمات هي واحدة من أصعب جوانب األمن الدفاعي‪ .‬عن طريق تعريف نفسك مع كيف يفكر القراصنة وكيف يعملون‪،‬‬
‫يمكنك تصميم أفضل دفاعات مؤسستك ضد التهديدات واالتجاهات الناشئة‪ .‬إذا لم يكن الختبار الدفاعات ضد الهجمات‪ ،‬فإن الشعب الوحيد الذي‬
‫سيتم اختبار الشبكة الخاصة بك هم األشرار‪ .‬عن طريق تعلم األمن الهجومي‪ ،‬سوف تكون قادر على اختبار الدفاعات الخاصة بك وتحديد‬
‫الجوانب التي تعمل بشكل صحيح‪ ،‬حيث توجد أي ثغرات‪.‬‬
‫من الجوانب المثيرة لالهتمام في مجتمع الهاكر هو أنه آخذ في التغير‪ .‬على مدى السنوات القليلة الماضية‪ ،‬تغيرت دوافعهم من مجرد لذة‬
‫المعرفة الى كيفية استغالل نقاط الضعف لمعرفة كيفية جعل اإليرادات من أعمالهم والحصول على دفع لمهاراتهم‪ .‬القراصنة الذين خرجوا إلى‬
‫"أن يكون متعة" من دون أي هدف حقيقي في العقل و‪ ،‬إلى حد كبير‪ ،‬حلت محلها الناس الجادين في الحصول على منافع مالية من أنشطتها‪.‬‬
‫الهجمات ليست فقط من اجل الحصول على أكثر‪ ،‬ولكن أيضا من اجل زيادة التطور‪ .‬وفيما يلي مجرد أمثلة قليلة من هذا النوع من االتجاه‪:‬‬
‫‪ ‬في ديسمبر ‪ ،1222‬قامت مجموعة من القراصنة الروس تدعى )‪ Russian Business Network (BSN‬بسرقة‬
‫عشرات الماليين من الدوالرات من سيتي بنك من خالل استخدام قطعة من البرمجيات الخبيثة تدعى "‪."Black Energy‬‬
‫‪ ‬في أكتوبر ‪ ،1211‬تسللت مجموعه من القراصنة الى منظمة أدوبي وسرقوا ‪ 11‬مليون من أوراق اعتماد الحساب‪ ،‬فضال‬
‫عن أرقام بطاقات االئتمان المشفرة‪.‬‬
‫‪ ‬في يوليو ‪ ،1211‬كان ميناء للشحن "‪ " Harbor Freight‬تم ضربه من قبل البرمجيات الخبيثة التي ساعدت في سرقة‬
‫بيانات بطاقات من أكثر من ‪ 122‬من مخازنها‪ .‬وهي واحدة من حاالت كثيرة من البرمجيات الخبيثة التي تستخدم هذا‬
‫لسرقة كميات كبيرة من بيانات بطاقات االئتمان من الشبكات التجارية على االنترنت‪.‬‬
‫‪ ‬في مايو ‪ ،1211‬أصدر معهد ‪ Ponemon‬تقريرا برعاية سيمانتيك التي أشارت إلى انتهاكات في الواليات المتحدة تكلف‬
‫الشركات حوالي ‪ $111‬لكل تسجيل‪ .‬هذا إلى جانب تقارير تفيد بأن هناك انتهاكات أسفرت عن أكثر من ‪ 11،222‬من‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪21‬‬

‫السجالت تتعرض لالنتهاك ويعني أنه على الرغم من ان المهاجمين يبذلون المال‪ ،‬فإنها تكلف الشركات أكثر وأكثر للتعامل‬
‫مع الحلول الوسط‪.‬‬
‫في ذروة التسوق لعيد الميالد في عام ‪ ،1211‬عانى الجميع من أكبر الخروقات حتى اآلن‪ .‬حيث تأثر ما بين ‪12،222‬‬ ‫‪‬‬
‫و‪ 22،222‬من األفراد الكثير من الخسائر‪ .‬والذي قفز هذا من قبل التقارير اإلخبارية من أجل مساعدة الناس على فهم‬
‫الخرق وكذلك كيف كانت رد فعل الشركة على ذلك‪ .‬ثم تم وجود موقع لتقديم معلومات عن التدابير األمنية الجديدة وكذلك‬
‫كيفية التعامل مع بطاقة االئتمان المسروقة‪.‬‬

‫وهناك تقدير متحفظ من غارتنر حيث ذكر ان متوسط التكلفة عن كل ساعة من توقف شبكات الحاسوب حوالي ‪ .11،222 $‬والشركة التي‬
‫تعاني من األسوأ الى متوسط الوقت الضائع حيث تفقد ‪ 121‬ساعة في السنة يمكن أن تخسر أكثر من ‪ 2‬ماليين دوالر سنويا‪ .‬حتى عندما ال يتم‬
‫ذكر الهجمات بما فيه الكفاية ليتم اإلبالغ عنها على شاشة التلفزيون أو الحديث عنها في دوائر صناعة األمن‪ ،‬فإنها ال تزال تؤثر سلبا على‬
‫خطوط الشركات‪.‬‬
‫باإلضافة إلى ان المهاجمين يحاولون الربح‪ ،‬فهناك دوافع أخرى لبعض المهاجمين وهي سياسية‪ .‬وتم وصف هذا النوع بالنضال البرمجي‪ .‬كلتا‬
‫الطريقتين المشروعة والغير مشروعة يمكن استخدامها لتصوير إيديولوجية سياسية‪ .‬بعض المهاجمين أيضا يقومون بإنشاء وبيع هجمات اليوم‬
‫صفر‪ .‬حيث ان هجوم اليوم صفر "‪ "zero-day attack‬واحده من التي ال يوجد حاليا لها أي إصالح متوفرة‪ .‬كل من يقوم بتشغيل برنامج‬
‫معين يحتوي على هذا يتعرض لالختراق‪ ،‬مع حماية ضئيلة أو معدومة‪ .‬ويعلن عن رمز لهذه األنواع من الهجمات على المواقع الخاصة‬
‫وبيعها لمهاجمين آخرين أو عصابات الجريمة المنظمة‪.‬‬

‫‪ 1.1‬ما هو الهاكرز "‪"what is the hacking‬؟‬


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

‫تعريف الهاكر‬
‫الهاكر هو كلمة لها معنيان‪:‬‬
‫تقليديا‪ ،‬الهاكر هو الشخص الذي يحب العبث مع البرامج أو األنظمة اإللكترونية‪ .‬الهاكر يتمتعون باستكشاف والتعلم كيف تعمل‬
‫أنظمة الكمبيوتر‪.‬‬
‫في اآلونة األخيرة‪ ،‬اتخذت كلمة الهاكرز معنى جديد وهو شخص يقوم بالكسر الضار للنظم لتحقيق مكاسب شخصية‪ .‬من الناحية‬
‫الفنية‪ ،‬هؤالء المجرمين هم الكراكرز (الهاكرز الجنائيين)‪ .‬الكراكرز تقوم بكسر النظم (الكراك) مع نوايا خبيثة‪ .‬يكونون في الخارج‬
‫لتحقيق مكاسب شخصية‪ :‬الشهرة‪ ،‬الربح‪ ،‬وحتى االنتقام‪ .‬يقومون بتعديل أو حذف‪ ،‬وسرقة المعلومات الحساسة‪ ،‬وغالبا ما يجعل‬
‫الناس اآلخرين بائسين‬
‫الهاكرز االخيار (ذات القبعة البيضاء "‪ )"white hat‬ال يندرجون تحت نفس الفئة من الهاكرز االشرار (ذات القبع السوداء "‪.)"black hat‬‬
‫(هذه تأتي من األفالم الغربية حيث يرتدى األخيار قبعات رعاة البقر البيضاء ويرتدى األشرار قبعات رعاة البقر السوداء)‪ .‬وأيا كان األمر‪،‬‬
‫فإن معظم الناس أعطى الهاكر داللة سلبية‪ .‬العديد من القراصنة الخبيث تدعي أنها ال تسبب ضررا ولكن بدال من ذلك يقومون بمساعدة‬
‫اآلخرين‪ .‬نعم‪ ،‬العديد من الهاكرز االشرار هم لصوص إلكترونيات‪.‬‬
‫الهاكرز (أو األشرار) "‪ "hacker‬يقومون بمحاولة اختراق أجهزة الكمبيوتر‪.‬‬
‫الهاكرز األخالقيين (أو األخيار) "‪ "ethical hacker‬يقومون بحماية أجهزة الكمبيوتر ضد الدخول الغير مشروع‪ .‬وأكتسب قوته‬
‫من خالل خبرة أفضل هاكرز في العالم ويستخدمها في تحسين الوضع األمني ألنظمة الشبكات المختلفة‪.‬‬

‫ما هو الهاكر األخالقي ‪Ethical Hacking‬؟‬


‫هو شخص يقوم بعملية فحص واختبار الشبكة الخاصة بك من اجل إيجاد الثغرات ونقاط الضعف والتي من الممكن أن يستخدمها الهاكرز‪.‬‬
‫الشخص الذي يقوم بهذه العملية هو الهاكر الخير ‪ white hacker‬الذي يعمل على الهجوم على أنظمة التشغيل بقصد اكتشاف الثغرات بها‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪22‬‬

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

‫فهم الحاجة إلى قرصنة الخاصة بك‬


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

‫‪ 1.1‬تاريخ الهاكرز "‪"Hacker History‬‬


‫من قرصنة الهاتف لهجمات الويب‪ ،‬كانت القرصنة جزءا من الحوسبة لمدة ‪ 12‬عاما‪.‬‬
‫‪" 1691‬فجر الهاكرز"‪:‬‬
‫ظهر هاكرز الكمبيوتر األولى في معهد ماساتشوستس للتكنولوجيا كما تحدثنا عنهم من قبل‪ .‬والذي أطلق عليهم مصطلح ‪ TMRC‬وهم‬
‫مشاغبون في شركه ‪ MIT‬كان لديهم فضول غير عادي لمعرفه كيف تعمل األجهزة‪ .‬في تلك األيام الكمبيوترات كانت "حاسبات رئيسيه"‬
‫وكانت في غرف مقفلة لدرجه حرارة ثابته ومغلفه بزجاج وتكلف الباليين من الدوالرات لتشغيل كتل المعدن البطيئة التحريك‪ .‬المبرمجون كان‬
‫لديهم دخول محدد للكمبيوترات الديناصوريه‪ .‬األذكياء من المبرمجون اخترعوا ما يسمونه بالهاك (‪ )hack‬وهي برمجه بالطرق المختصرة‬
‫إلكمال الحسابات المهمة بأكبر سرعه‪ .‬في بعض األحيان االختصارات التي يعملونها تكون أفضل من البرنامج األصلي‪.‬‬

‫ولكن ربما أحسن وأفضل هاك (‪ )hack‬عمل في سنه ‪ 1222‬عندما قام اثنان من الموظفين في "مختبر بيل ‪ ."bell lab‬وهما "دينيس ريشي‬
‫وكين تومبسون ‪ "Dennis Ritchie and Ken Thompson‬وأطلقوا نظام التشغيل "يونيكس ‪ "Unix‬وكان أكثر من رائع في ذلك‬
‫الوقت وحتى اآلن‪.‬‬

‫في األعوام ما بين (‪)1696-1691‬‬


‫في بداية السبعينات الجبهة الشبكية كانت مفتوحة على نطاق واسع‪ .‬وكان الهاكينج )‪ (hacking‬عباره عن استكشاف ومعرفه كيف لهذا العالم‬
‫الغريب عليهم يعمل‪ .‬حوالي عام ‪ 1221‬طبيب بيطري فيتنامي أسمه "جون درايبر ‪ John Draper‬أكتشف هديه صفاره مع "كابن كرنش‬
‫‪ "Cap'n Crunch‬وهي صناديق حبوبتيه مثل "(كورن فليكس)" كانت تعطي بطريقه ممتازة رنة بـ ‪ 1222‬ميجاهرتز‪ .‬وبطريقه سهله قام‬
‫بنفخ الصفارة بقرب سماعه الهاتف ليمكنه القيام بمكالمات مجانية‪.‬‬
‫أبي هوفمان "‪ "Abbie Hoffman‬تلي مقدمه في الحفلة الدولية للمراهقين في خط األخبار حيث نشر فيها للعالم كيف يستطيع الحصول على‬
‫مكالمات مجانية‪ .‬الشيء الوحيد المفقود من الهاكينج منذ ذلك الحين نادي للهاكرز‪ .‬كيف سيجتمع أفضل الهاكرز؟ في سنه ‪ 1221‬شخصان من‬
‫مدينه شيكاغو األمريكية وهما "راندي سيس ‪" "Randy Seuss‬وارد كريستيانسين ‪ "Ward Christiansen‬صمموا أول نظام لوحه‬
‫إعالنات (‪ )bulletin board systems BBSs‬للكمبيوتر الشخصي وتجدها منتشرة حتى هذه األيام على األنترنت‪.‬‬

‫العصر الذهبي (‪)1661-1611‬‬


‫في سنه ‪ 1211‬أعلنت شركه ‪ IBM‬موديل جديد لجهاز مستقل محمل بالبرامج وذاكره مع مرافقاته من لوحه مفاتيح والخ‪ .‬وجاهز للتخزين‬
‫وأطلق عليه اسم "الحاسوب الشخصي ‪ "Personal Computer‬الذي تستخدمه اآلن‪ .‬ويمكنك أخذه ألي مكان وعمل به ما تريد‪ .‬لمع فيلم‬
‫‪ war game‬الذي كشف عن طرق الهاكينج‪ .‬وحذرت الجماهير على مستوى قومي أن الهاكرز يستطيعوا اختراق الى أي نظام‪ .‬جمع بعض‬
‫الهاكرز المعلومات من هذا الفيلم‪ .‬وبدى لهم من الفيلم أن االختراق يأتي اليك ببعض البنات وخاصه الجميالت منهم‪.‬‬
‫كانت الحدود تتغير‪ .‬وكان المستوطنون ينضموا الى عالم االنترنت "أرابنت ‪ ARAPNET‬هي صورة االنترنت في هذا الوقت"‪ .‬وشعبيه‬
‫لوحه اإلعالنات ازدادت أيضا في هذا الوقت‪ .‬في مدينه "ميلواكي ‪ "Milwaukee‬األمريكية مجموعه من المخترقين أمست نفسها "‪111‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪23‬‬

‫‪ "111‬وهو رمز منطقتهم‪ .‬اخترقوا عده نظم للمعاهد بدايتها معامل "لوس أالموس ‪ "Los Alamos‬الى مركز سرطان مانهاتن‪ .‬الى أن تم‬
‫القبض عليهم بواسطة الشرطة‪.‬‬
‫حرب المخترق العظيم تحديدا بداية "حرب المخترق العظيم"‪ .‬من األفضل أن نرجع قليال للخلف لعام ‪ .1211‬عندما كان هناك أحد األشخاص‬
‫يطلق على نفسه أسم "ليكس لوثر ‪ "Lex Luthor‬أوجد "فيلق المصير ‪ "Legion of Doom‬وسميت نسبة الى رسوم متحركة تعرض في‬
‫صباح يوم السبت‪ .‬مجموعه "لود ‪ "LOD‬كانت تحظى بشعبيه واسعه‪ .‬وكانت تجذب األفضلية واألذكياء من المخترقين ‪ ...‬الى أن واحد من‬
‫أعضاء عصابه ‪ LOD‬وهو من الصغار الموهوبين طفل يدعى "فيبر أوبتيك ‪ "Phiber Optic‬تشاجر مع فيلق الـ "دومر اريك بلوداكسي‬
‫وطرد من النادي‪ .‬شكل فيبر وأصدقائه مجموعه منافسه للـ ‪ LOD‬وهي تسمى "مود ‪ ."MOD‬في بداية ‪ .1222‬المجموعتان ‪LOD‬‬
‫و‪ MOD‬انشغلت في حرب عبر الشبكة‪ :‬تشغالن خطوط الهاتف‪ ،‬تتجسسان على بعضهما من خالل خطوط الهاتف‪ ،‬يهاجمون الكمبيوترات‬
‫الخاصة للمجموعة المنافسة الخ ‪ .‬حتى قبضت عليهم الشرطة الفيدرالية والتي كانت تعنى لفيبر وأصدقائه نهاية العهد‪.‬‬
‫)‪ (1986-1994‬عندما دخلت الحكومة على الشبكة المتعة انتهت فقط إلظهار أنهم ابدوا الجدية‪ .‬أصدر المجلس التشريعي الكونجرس قانون‬
‫عام ‪ 1212‬سمى "النصب على الكمبيوتر الفيدرالي وسوء االستغالل "‪."Federal Computer Fraud and Abuse Act‬‬
‫عام ‪" 1211‬روبيرت موريس ‪ "Robert Morris‬وهو طالب دراسات عليا في جامعة كورنيل وابن كبير العلماء في قسم وكالة األمن‬
‫القومي‪ ،‬أطلق دودة ‪ worm‬ذاتية التكرار على أربانيت (شبكة اإلنترنت قديما) الختبار تأثيرها على أنظمة ‪ .UNIX‬الدودة خرجت عن نطاق‬
‫السيطرة وانتشرت إلى ‪ 2222‬من شبكات الكمبيوتر‪ ،‬واألنظمة الحكومية والجامعات‪ .‬طرد موريس من جامعة كورنيل‪ ،‬حكم عليه بالسجن‬
‫لمدة ثالث سنوات تحت المراقبة "‪ ،‬وتغريمه ‪ 12،222‬دوالر وكثير من الساعات في العمل في خدمه المجتمع‪.‬‬
‫في نفس السنة أقتحم "كيفين ميتنيك ‪ "Kevin Mitnick‬شبكه شركه المعدات الرقمية )‪ .(Digital Equipment Com‬وقبض عليه عند‬
‫قيامه بهذه العملية وحكم عليه بأربع سنين في السجن بعد ان ووجهت إليه تهمة سرقة ‪ 12،222‬من أرقام بطاقات االئتمان‪ .‬وقد بثت وكاالت‬
‫األنباء العالمية خبر القبض على ميتنيك‪ .‬وشاهدة ماليين الناس وهذا الخبر البسيط غير نظرة الناس للهاكرز‪ .‬فقد كان كثير من الناس يعتبرون‬
‫الهاكرز أبطاال ويعتبرونهم المنقذين من تسلط الحكومة أما بعد هذا الخبر‪ .‬وجد الناس بأن الهاكرز هم لصوص متخفين بثوب العبقرية‬
‫والكمبيوتر وال هم لهم سوى الشهرة والحصول على األموال بأسهل الطرق‪ - .‬وقد بدأت عمليات الهاكرز تقوم بخفية بعد هذا التاريخ‪.‬‬
‫وكان هناك كيفين ثاني وهو "كيفين بولسين ‪ "Kevin Poulsen‬وقبض عليه الثاني بتهمه العبث بالهاتف‪ .‬أما كيفين الثاني هرب لتجنب هذا‬
‫القانون لمده ‪ 12‬شهرا‪.‬‬
‫عمليه "سندفيل ‪ "Sundevil‬أعطت الحكومة هذه االسم للقبض على كل الهاكرز في البالد كلها وكان من المطلوبين "الفيلق ‪ "LOD‬ولكنها‬
‫لم تنجح‪ .‬ولكن في السنة التي تليها بسبب عمليه تخريبيه لـ "رادكس ‪ "Radux‬دخل السجن ونتيجة للتحقيق معه أعلم الشرطة عن مكان‬
‫وأسماء أربعه من أشهر الهاكرز الموجودين في ذلك الحين‪ .‬وقضى "فيبر أوبتيك ‪ "Phiber Optik‬مده سنه في السجن الفيدرالي‪.‬‬
‫ولكن بعض البشر يتعلمون من أخطائهم‪.‬‬
‫‪1661-1664‬‬
‫رؤية كيفين ميتنيك يقاد مقيدا بالسالسل على التلفزيون الوطني تهز عواطف الجمهور مع الخارجين عن القانون‪ .‬كان مستخدمو الشبكة‬
‫مذعورون من المخترقين الستخدامهم برامج مثل ‪ Password Sniffers‬الستكشاف المعلومات الخاصة‪ .‬أو ‪ Spoofing‬لخدع اآلالت‬
‫وجعلها تعطي المخترقون السماح بالدخول من دون كلمه سر‪ .‬لم يعد المخترقون شخصيات رومانسية كما في السابق‪ .‬غريبو األطوار هم فقط‬
‫الذين يريدون التعلم‪ .‬االقتصاد على الشبكة بدأ يكبر ويتوسع على النطاق العالمي‪ .‬ولهذا المطلوب المزيد من الحماية‪ .‬فالتجارة على األنترنت‬
‫في أوجها وبدايتها‪ .‬فجاه أصبح المخترقون هم الناس االشرار (السارقون)‪.‬‬
‫ففي صيف عام ‪ 1221‬عصابه كانت تدار من قبل مخترق روسي‪ .‬اقتحمت كمبيوترات "بنك ‪ "CityBank‬وصنعت تحويل وقاموا بسرقة‬
‫مبلغ أكثر من ‪ 12‬مليون دوالر من حسابات الزبائن‪ .‬ولكن بنك المدينة تالحق نفسه وأنقذ ما يقارب من ‪ 122,222‬دوالر قبل أن يتم تحويلها‬
‫ولكن قبض على المتآمرين بعد أن سببوا الرعب والخوف في نفوس الناس‪.‬‬
‫عام ‪ 1221‬مجموعة من القراصنة تسمى ‪ Cult of the Dead Cow‬قامت بإطالق برنامج حصان طروادة‪ .‬أداة قرصنة قوية‪ .‬بمجرد‬
‫تثبيت الهاكر حصان طروادة على جهاز يعمل بنظام التشغيل ‪ Windows 95‬أو ‪ ،Windows 98‬فان البرنامج يتيح الوصول عن بعد غير‬
‫المصرح به لآللة‪.‬‬
‫االختراق (‪)0111-1666‬‬
‫عند اقتراب السنة من األلفية الثانية‪ .‬الهيستيرية التخيلية لمشكله سنه ‪ 1222‬ألهبت هجمات جاده أقترفها مخترق‪ .‬موثق جيدا في األعالم‪ .‬هذه‬
‫الهجمات جربت مباشره (ربما للمرة األولى) بالكتل المتنامية لمتصفحي الشبكة‪ .‬في األسبوع الثاني من شهر فبراير من سنه ‪ 1222‬بعض من‬
‫أشهر مواقع األنترنت مثل )‪: (CNN,Yahoo‬كانت عرضه للهجمات ‪ DoS‬و شبكاتهم انسدت بسبب طلبات خاطئة أرسلت من عده‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪24‬‬

‫كمبيوترات يتحكم بها مخترق واحد ‪ ..‬هذه المواقع تحطمت وفقدت ما يقرب من مليون من المبيعات على الشبكة‪ .‬وفي شهر مايو ظهر فيروس‬
‫جديد أنتشر بشكل كبير في أنحاء العالم بالشبكة‪ .‬الفيروس ‪ I LOVE YOU‬الذي به ملفات صوت وصور وأنتشر بسرعه كبيره‪.‬‬
‫‪ 0111‬حتى االن‬
‫في عام ‪ 1221‬تم تكوين مجموعة انومينوس‪ .‬يمكنك االطالع على باقي تاريخ الهاكرز من خالل الرابط‬
‫‪http://en.wikipedia.org/wiki/Timeline_of_computer_security_hacker_history.‬‬
‫هذا الجزء من التاريخ للعلم فقط‪.‬‬
‫أشهر ‪ 11‬هاكرز في العالم‬
‫‪ -1‬كيفن ميتنيك ‪Kevin Mitnick‬‬
‫ال يعرفه الكثيرون في عالمنا العربي والشرق االوسط‪ ،‬ولكنه في أوروبا والواليات المتحدة يعتبر من أشهر األسماء خصوصا بالنسبة إلى‬
‫شركات االنترنت وعالم الحاسبات اآللية وأمن الشبكات‪ .‬كيفن ميتنيك هو أشهر قرصان الكتروني ظهر على وجه االرض وأكثر الهاكرز‬
‫خطورة منذ ظهور الحاسبات اآللية إلى درجة أنه أصبح اول قرصان كمبيوتر توضع صوره من ضمن قائمة المطلوبين لدى االف بي أي‬
‫‪ FPI‬االنترنت فما هي قصته؟‬
‫ولد كيفن في عام ‪ .1221‬في بداية حياته لم يكن كيفن يمتلك القدرة المالية لشراء حاسب آلي خاص به لذلك كان يتواجد في معارض راديو شاك‬
‫لي ستعمل الحاسبات المعروضة‪ .‬لقد كان شابا خجوال لوالدين مطلقين وأم تعمل نادلة في أحد المطاعم‪ .‬لذلك كانت مهارته في استخدام الكمبيوتر‬
‫والقرصنة تعتبر وسيلة جيدة بالنسبة إليه الكتساب االصدقاء والتفاخر خصوصا في المرحلة الثانوية حين كان يخترق حاسب المدرسة الرئيسي‬
‫أمام باقي الطالب‪ .‬وعلى الرغم من أن كيفن لم يكن من المتفوقين دراسياً‪ ،‬إال أنه برع في الدخول إلى بداالت مؤسسة الهاتف المحلية‪ ،‬وتمكن‬
‫من الحصول على مكالمات هاتفية مجانية‪ .‬وتطور األمر إلى تمكنه من اقتحام عوالم اآلخرين‪ ،‬واالستماع إلى مكالماتهم‪ .‬وأصبح لديه خالل‬
‫فترة وجيزة‪ ،‬الكثير من المعلومات واألسرار‪ ،‬عن أشخاص كان يختارهم من األغنياء وذوي السلطة‪ ،‬مما خلق في نفسه الشعور بالقوة‬
‫والتفوق‪ .‬وبفضل اهتماماته في هذا المجال تعرف إلى مجموعة من الشباب لهم االهتمام ذاته‪ ،‬والخبرة في اختراق شبكة الهاتف عن طريق‬
‫الكمبيوتر‪ ،‬وشكلوا م جموعة أصبحت اجتماعاتها شبه منتظمة‪ ،‬للتداول في وسائل وطرق جديدة في هذا المجال‪ .‬وحتى ذلك الوقت‪ ،‬كان كل ما‬
‫قامت به المجموعة ال يتعدى المزاح لشباب راغبين في المتعة واالبتعاد عن الملل‪ ،‬وإن كان بإزعاج اآلخرين قليال‪ .‬لكن اإلزعاج ما لبث أن‬
‫تحول إلى أذى‪ ،‬حيث قام أحد أفراد المجموعة بتدمير ملفات إحدى شركات الكمبيوتر في سان فرانسيسكو‪ ،‬ولم تتمكن الشرطة من معرفة‬
‫الفاعل‪ ،‬ألكثر من عام‪.‬‬
‫في أحد أيام العطل من عام ‪ 1211‬دخل كيفن واثنان من أصدقائه خلسة‪ ،‬إلى المركز الرئيسي لشركة الهاتف في مدينة لوس انجلوس‪ ،‬ووصلوا‬
‫إلى الغرفة التي تحتوي على الكمبيوتر الذي يدير عمليات االتصال‪ ،‬وأخذوا كتب التشغيل الخاصة به‪ ،‬وقوائم وسجالت تتضمن مفاتيح السر‬
‫ألقفال األبواب‪ ،‬في تسعة مراكز أساسية تابعة لشركة الهاتف في المدينة‪ .‬وعندما حققت الشرطة المحلية في األمر‪ ،‬لم تتمكن من كشف الفاعل‪.‬‬
‫لكن‪ ،‬وبعد سنة‪ ،‬وشت بهم فتاة من أعضاء المجموعة للشرطة‪ ،‬الذين سارعوا العتقال الشبان الثالثة‪ .‬ومن حسن حظ كيفين الذي كان يبلغ‬
‫عمره آنذاك ‪ 12‬ونصف العام أن ُحكم عليه بقضاء ‪ 1‬أشهر في سجن األحداث بتهمة العبث بالممتلكات الحكومية‪ ،‬وتدمير بيانات عبر شبكة‬
‫كمبيوتر‪ ،‬كما قضت المحكمة بوضعه بعد ذلك سنة تحت المراقبة في لوس أنجلوس‪ .‬من جهته‪ ،‬حاول مركز الخدمة االجتماعية تقديم العون له‪،‬‬
‫لتطوير خبراته في مجال الكمبيوتر‪ ،‬واالستفادة منها بشكل شرعي‪ ،‬لكن النتيجة جاءت سلبية‪ ،‬إذ سعى كيفن إلى تعلم أمور مختصرة‪ ،‬وحيل‬
‫تساعده على ممارسة هوايته باختراق شبكات الكمبيوتر‪ ،‬وهذا ما قاده من قضية الى اخرى‪.‬‬
‫ذهب الفتيان اآلخرين إلى السجن‪ ،‬لكنه ما أصلح ميتنيك الذي لم يرتدع بالرغم من تجريسه بكتابة عبارة "‪ "X HACKER‬على لوحة‬
‫سيارته‪ ،‬وزاد إصراره على نفس السلوك‪ ،‬وراح ينمي مهاراته‪ ،‬ويتعلم الحيل التي تساعده على ممارسة هوايته باختراق شبكات الكمبيوتر‪،‬‬
‫وراح يخرق القانون ويصطدم بالشرطة مرة بعد أخرى‪ .‬فاعتقل ثانية عام ‪ 1211‬من قبل شرطة جامعة شمال كاليفورنيا‪ ،‬بعد ضبطه يحاول‬
‫استخدام كمبيوتر بالجامعة الختراق شبكة ‪ ARPA net‬للوصول من خاللها إلى البنتاجون‪ ،‬وحكمت المحكمة عليه بستة شهور تدريب في‬
‫إصالحية لألحداث في كاليفورنيا‪ .‬ولم تفلح الشهور الست في إصالحه‪ ،‬فلم تمر سنوات قليلة ‪-‬نزل خاللها تحت األرض ‪-‬حتى اعتقل مرة‬
‫أخرى‪ ،‬بتهمة العبث بكمبيوتر حسابات مؤسسة ‪ TWR‬المتخصصة في الصناعات الحربية‪ ،‬والمثير أنه بقي رهن االعتقال لمدة سنة كاملة‬
‫بدون محاكمة‪ ،‬واألكثر إثارة مسألة اختفاء ملفه من مركز الشرطة‪ ،‬بدون أي تفسير! زادت تلك األحداث من شعور كيفين بقدرته الفائقة‪ ،‬فلم‬
‫يعد يستطيع الخالص من هذا الشعور الذي يمأل نفسه بالقوة والعظمة‪ ،‬وحل عام ‪ 1211‬وقد استحوذت عليه فكرة الحصول على نسخة من‬
‫نظام تشغيل "‪ "VMS‬لجهاز الميني كمبيوتر الذي تنتجه شركة ‪ ،Digital‬وذلك من خالل اختراق شبكة "‪ "Easy Net‬الخاصة بها‪.‬‬
‫ظل كيفين يذهب مساء كل يوم إلى مقر عمل صديقه "دي سيكو" الذي يعمل في قسم الدعم الفني في شركة ‪ Calabase‬للكمبيوتر‪ .‬وكانا‬
‫يحاوالن لساعات طويلة اختراق نظم شركة ‪ ،Digital‬حتى إن الشركة لجأت لمكتب التحقيقات الفيدرالي ‪ FBI‬الذي تعاون متخصصوه مع‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪25‬‬

‫خبراء ‪ Digital‬أليام عديدة في تتبع مصدر محاوالت االختراق دون جدوى؛ ألن كيفين احتاط لتضليلهم‪ ،‬واستخدم جهازي كمبيوتر‪ :‬األول‬
‫يحاول عن طريقه اختراق شبكة ‪ Digital‬واالستيالء على نظام التشغيل‪ ،‬والثاني يراقب مركز مؤسسة الهاتف‪ ،‬ويتتبع المحاوالت الرامية‬
‫الكتشافه‪ ،‬ويقوم بصرفها إلى شقة بعيدة عن مقر عمل صديقه‪.‬‬
‫أمضى المسئولون في الكثير من الوقت في مراقبة أجهزة الشركة وتطبيق إجراءات جديدة للحماية‪ ،‬وكلفهم ذلك مئات آالف من الدوالرات دون‬
‫جدوى‪ .‬لكن كما جنت على نفسها أودى مزاح كيفين السمج به‪ ،‬عندما اتصل بمدير صديقه وشريكه "دي سيكو" وأخبره أنه يعاني من مشاكل‬
‫جمة مع مصلحة الضرائب‪ ،‬انهار األخير واعترف لمديره بكل ما كان‪ ،‬وبالطبع سارع لالتصال بـ ‪ ،FBI‬واعتقل كيفين‪.‬‬
‫أحيل كيفين إلى محكمة لوس أنجلوس‪ ،‬بتهمة سرقة برامج تبلغ قيمتها ماليين الدوالرات‪ ،‬وتسببه في خسارة شركة ‪ Digital‬أكثر من ‪122‬‬
‫ألف دوالر‪ ،‬أنفقتها إلبعاده عن أجهزتها‪ ،‬وأعلنت إدانته لتكون تلك هي المرة الخامسة التي يدان فيها كيفين بجرائم تتعلق بالكمبيوتر‪ ،‬لكن‬
‫قضيته هذه المرة أثارت اهتمام الرأي العام في أمريكا‪ ،‬بسبب غرابة الحكم الذي صدر بحقه؛ إذ حكم عليه بالسجن سنة واحدة‪ ،‬وستة شهور‬
‫معالجة من "إدمان اختراق نظم الكمبيوتر عبر الشبكات"! مع عدم مغادرة المدينة‪.‬‬
‫لكن لم يتقيد ميتنيك غير بسنة السجن؛ حيث انتقل بعدها بمدة قصيرة إلى الس فيجاس‪ ،‬وعمل مبرمجا ً بسيطاً‪ ،‬لكنه لم يلبث أن عاد أوائل عام‬
‫‪ 1221‬إلى سان فرانسيسكو بعد وفاة شقيقه إثر تناوله جرعة زائدة من الهيروين‪.‬‬
‫"إذا كان الطباع طباع سوء فال أدب يفيد وال أديب"‪ .‬هكذا يقول الشاعر‪ ،‬ففي ديسمبر من العام ‪ 1221‬تلقى قسم شرطة بكاليفورنيا اتصاالً عبر‬
‫الكمبيوتر‪ ،‬يطلب فيه صاحبه الحصول على نسخ من شهادات رخص القيادة للمتعاونين مع الشرطة‪ .‬واستخدم المتصل شفرة تظهر أنه مخول‬
‫قانونيا ً باالطالع على تلك الوثائق‪ ،‬وطلب إرسالها بالفاكس إلى عنوان في إحدى ضواحي لوس أنجلوس‪.‬‬
‫وبفحص رقم الطالب تبين أنه محل يقدم خدمة الفاكس والتصوير‪ ،‬وتقرر إرسال المطلوب‪ ،‬لكنهم أرسلوا بعض رجال األمن لتقصي األمر‪،‬‬
‫وهناك وجدوه يخرج من المحل حامالً األوراق‪ ،‬وعندما شعر بهم‪ ،‬ركض هاربا ً عبر إحدى الحدائق القريبة مخلفا ً وراءه األوراق‪ .‬وبفحص‬
‫األوراق وجد أنها تحمل بصمات كيفين‪.‬‬
‫ً‬ ‫ً‬ ‫ً‬
‫جعلت هذه الحادثة وما كتبته الصحف من كيفين لصا ذكيا‪ ،‬ومثيرا لإلعجاب‪ ،‬بل إن أحد الصحفيين ‪-‬ويدعى ماركوف‪-‬جعل أخبار كيفين شغله‬
‫الشاغل‪ ،‬وأخذ يتلقط كل كبيرة وصغيرة عنه؛ ما دفع مكتب التحقيقات الفيدرالي إلى تعيينه مستشارها في عمليات مطاردة كيفين‪.‬‬
‫في عطلة عيد الميالد عام ‪ 1221‬اكتشف "شيمومورا" أحد أشهر خبراء أمن الشبكات والذي يعمل مستشاراً لمكتب التحقيقات الفيدرالي‪،‬‬
‫سرقت منه مئات‬ ‫والقوات الجوية‪ ،‬ووكالة األمن القومي األمريكية ‪-‬أن حاسبه المنزلي المتصل بشبكة العمل الواسعة تعرض لالختراق‪ .‬و ُ‬
‫الملفات والبرامج المفيدة جدا ً لكل من يرغب في تعلم أساليب اختراق شبكات الكمبيوتر والهاتف المتحرك‪ .‬أثارت تلك الحادثة حفيظة‬
‫شيمومورا فوجه كل طاقته وخبرته ‪-‬بالتعاون مع مكتب التحقيقات الفيدرالي‪-‬العتقال الشخص الذي تجرأ على اقتحام عقر داره‪ ،‬وتمكن‬
‫شيمومورا بمساعدة المحققين‪ ،‬وبفضل نظام المراقبة الذي دأب على تحسينه يوما ً بعد آخر ‪-‬والذي رصد الجاني في بداية عملية االختراق‪ ،‬إال‬
‫أنه تم تضليله‪-‬من تتبع أثر المخترق‪ .‬وتم رصده وهو يجوب فضاء اإلنترنت يتالعب بشركات الهاتف‪ ،‬ويسرق ملفات من موتوروال وأبل‪،‬‬
‫وشركات أخرى‪ ،‬وينسخ عشرين ألف رقم بطاقة ائتمان من إحدى شبكات الكمبيوتر التجارية‪ .‬ودارت الشبهة في كل هذه الحاالت حول كيفين‬
‫ميتنيك‪ ،‬المختفي عن األنظار منذ عام ‪ 1221‬وكشفت أنه يقوم بعملياته عبر شبكة هواتف متحركة من مدينة رالي شمال كاليفورنيا‪ .‬وفي مساء‬
‫‪ 11‬فبراير قرع المحققون باب الشقة ‪ 121‬في إحدى ضواحي مدينة رالي‪ ،‬واعتقلوا كيفين‪ ،‬ووضع في السجن بدون محاكمة‪ ،‬إلى أن صدر‬
‫عليه حكم في ‪ 12‬يونيو عام ‪ 1222‬بالسجن لمدة اثنين وعشرين شهراً‪ ،‬ورغم أنه كان حينها قد أمضى مدة الحكم وزاد عليها أربعة شهور‪ ،‬لم‬
‫يطلق سراحه‪ ،‬وتعلل المحققون بخطورة كيفين‪ ،‬والقى معاملة قاسية‪ ،‬إضافة إلى حرمانه من حقوق ال يُحرم منها عادة أخطر المجرمين‪ ،‬إلى‬
‫أن أفرج عنه سنة ‪ ، 1221‬وهي الفترة التي أخرج فيها للنور الصحفي "ماركوف" والخبير "شيمومورا" كتابا عن كيفين "كوندور اإلنترنت"‪.‬‬
‫هو أشهر مخترق‪ .‬بعد الخروج من السجن‪ .‬لقد انتهت مدة حبس كيفن في يناير من العام ‪ 1221‬ولكنه منع من استخدام االنترنت لمدة عام‬
‫كامل‪ .‬وفي يناير من عام ‪ 1221‬احتفل باستخدامه لألنترنت ألول مرة منذ فترة طويلة‪ .‬ولكفين االن موقع رســــمي عـــلى االنترنت هو‬
‫‪https://www.mitnicksecurity.com‬‬
‫‪ -0‬كيفين بولسن‬
‫اشتهر هذا الشخص باسم ‪ Dark Dante‬وقام بالسيطرة التامة على كل خطوط تليفون إحدى إذاعات والية لوس أنجلوس‪ ،‬والتي كانت تنظم‬
‫المسابقة عبارة عن فوز المتصل رقم ‪ 121‬بسيارة بورشيه‪ ،‬فظل بولسن باالتصال على كل الخطوط التي سيطر عليها كلها من أجل أن يفوز‬
‫بتلك السيارة‪.‬‬
‫‪ -3‬أدريان المو‬
‫تمكن من التسلل إلى موقع جريدة نيويورك تايمز الشهيرة‪ ،‬وياهو ومايكروسوفت‪ ،‬واستطاع التخفي من مكتب التحقيقات الفيدرالية‪ ،‬الذي ظل‬
‫يبحث عنه لمدة ‪ 2‬أشهر‪ .‬واشتهر هذا الشاب بأنه ليس هناك أي موقع في العالم يقف أمامه‪ ،‬ويبدو أن ولعه بالتسلل لمواقع الجرائد الشهيرة‬
‫جعله يدرس اآلن الصحافة‪.‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪26‬‬

‫‪ -4‬جون سيتشفير‬
‫هو أحدث الهاكرز الذين تم القبض عليهم‪ ،‬وذلك بعد أن قام بالعديد من الجرائم الخاصة بالكومبيوتر مثل االطالع على المعلومات الشخصية‬
‫للعديد من أصحاب الحاسبات الشخصية‪ .‬في النهاية تم معاقبته بالسجن لمدة ‪ 1‬سنوات‪.‬‬
‫‪ -5‬فالديمير ليفن‬
‫روسي يهودي‪ ،‬حاول االستيالء على مبلغ يفوق العشرة ماليين دوالر أميركي سيتي بنك‪ ،‬وبالفعل تسلل ألجهزة الكومبيوتر الخاصة بالبنك في‬
‫روسيا‪ ،‬لكي يقوم بتحويل تلك المبالغ إلى حسابات في بالد مختلفة مثل إسرائيل وأميركا وألمانيا‪ ،‬وهو ما نجح فيه بالفعل‪ .‬ولكنه في عام ‪1221‬‬
‫تم القبض عليه وتم سجنه لثالثة أعوام‪ .‬ولكنه اآلن يدير أعمال خاصة به في ليتوانيا‪.‬‬
‫‪ -9‬فرد كوهين‬
‫هو المخترع األول للفيروس‪ ،‬والذي يتسبب في إتالف أي حاسب شخصي‪ ،‬فأول فيروس اخترعه كان يسمى )‪(Parasitic Application‬‬
‫والذي يستطيع أن يسيطر على أي حاسب شخصي‪ ،‬بإمكانه أن يدمره بالكامل‪ .‬ولكن الغريب في حياة هذا الشخص أنه يمتلك اآلن شركة تعمل‬
‫في مجال حماية المعلومات على الحسابات الشخصية‪.‬‬
‫‪ -9‬مارك أبن‬
‫يعتبر هذا الشخص هو أصغر هاكر أميركي‪ ،‬ألنه عندما كان عمره ‪ 2‬أعوام تمكن من التسلسل إلى الكومبيوترات التي تدخل على اإلنترنت‬
‫عن طريق الهاتف الثابت‪ ،‬وتعلم من خالل هذا العديد من لغات البرمجة‪ .‬تم القبض عليه ليمضي عقوبة الخدمة العامة لمدة ‪ 11‬شهراً‪.‬‬
‫‪ -1‬ناهشون إيفن خشيم‬
‫ً‬
‫هو أول من تم القبض عليه في أستراليا في جريمة خاصة بأجهزة الكومبيوتر‪ ،‬وكان عضوا في فريق من الهاكرز الذين كان هدفهم هو‬
‫التسلسل لكل مواقع وزارات الدفاع لالطالع على المعلومات السرية عن األسلحة النووية‪ .‬وهو ما نجح فيه‪ ،‬ولكن الشرطة األسترالية اكتشف‬
‫هويته الحقيقية‪ ،‬تم القبض عليه‪ ،‬وحكم عليه بالسجن لمدة عام‪.‬‬
‫‪ -6‬روبرت ت‪ .‬موريس‬
‫في عام ‪ 1221‬اخترع هذا الشخص أول دودة خاصة بالكومبيوتر وأطلق عليها اسم)‪ ، (Morris worm‬وكان هدفه إحصاء عدد أجهزة‬
‫الكومبيوتر المتصلة باإلنترنت‪ ،‬ولكن هذه الدودة خرجت عن السيطرة‪ ،‬وتسببت في العديد من األضرار‪ ،‬ووصلت الخسائر الناتجة عنها إلى ما‬
‫يزيد عن نصف مليون دوالر أميركي‪.‬‬
‫‪ -11‬إيريك كورلي‬
‫عرف هذا الشخص باسم مستعار هو "‪ ،"Emmanuel Goldstein‬وكان معروفا ً كهاكر في الثمانينيات والتسعينيات من القرن العشرين‪،‬‬
‫وكان له الفضل في اكتشاف طريقة من أجل فك الشفرات الموجودة على أقراص الـ ‪ DVD‬الخاصة باألفالم‪ ،‬مما تسبب في انتشار النسخ‬
‫المقلدة حول العالم‪ .‬وتمت مقاضاته لذلك‪.‬‬

‫‪ 1.1‬الهاكر ضد الكراكر "‪"Hacker vs. Cracker‬‬


‫ما هو الفرق بين الهاكر والكراكر؟‬
‫قد كتب العديد من المقاالت حول الفرق بين الهاكرز والكراكر‪ ،‬التي تحاول تصحيح المفاهيم الخاطئة العامة حول القرصنة‪ .‬لسنوات عديدة‪،‬‬
‫ووسائل اإلعالم تطلق كلمة الهاكر عندما يعني حقا الكراكرز‪ .‬حتى الجمهور يعتقدون اآلن أن الهاكر هو الشخص الذي يكسر أنظمة الكمبيوتر‬
‫ويسرق البيانات السرية‪ .‬هذا غير صحيح جدا وإهانة لبعض من القراصنة األكثر موهبة‪.‬‬
‫هناك نقاط مختلفة لتحديد الفرق بين الهاكرز والكراكرز‪.‬‬
‫تعريف الهاكر‪ :‬هو شخص مهتم بعمل أي نظام تشغيل للكمبيوتر‪ .‬في معظم األحيان‪ ،‬الهاكرز هم المبرمجين‪ .‬يحاولون الحصول على معرفة‬
‫متقدمة عن أنظمة التشغيل ولغات البرمجة‪ .‬يعرفون الثغرات األمنية المختلفة في األنظمة وأسباب هذه الثغرات‪ .‬يسعون باستمرار للمزيد من‬
‫المعرفة‪ ،‬وتبادل ما قد اكتشف‪ ،‬ال يبدون أبدا نوايا حول سرقة البيانات‪.‬‬
‫تعريف الكراكرز‪ :‬هو الشخص الذي يكسر نظم الناس األخرى‪ ،‬مع النوايا الخبيثة‪ .‬الكراكر يقومون بالوصول الغير مصرح به‪ ،‬وتدمير‬
‫البيانات الهامة‪ ،‬وإيقاف الخدمات المقدمة من قبل الملقم‪ ،‬أو التسبب في مشاكل ألهدافها‪ .‬يمكن بسهولة تحديد الكراكرز بسبب أعمالهم الخبيثة‪.‬‬
‫تماما مثل أي شخص يمكن أن يصبح لصا‪ ،‬أو لص‪ ،‬يمكن ألي شخص أن يصبح هاكر‪ ،‬بغض النظر عن العمر أو الجنس أو الدين‪ .‬المهارات‬
‫التقنية للهاكرز تختلف من واحدة إلى أخرى‪.‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪27‬‬

‫‪ 1.1‬رؤية مبسطه عن امن المعلومات‬


‫‪INFORMATION SECURITY OVERVIEW‬‬
‫هذا المصطلح يشير إلى الطريقة المستخدمة لحماية أي نوع من المعلومات الحساسة او بمعنى أخر وضع حائط أمن حول المعلومات المهمة‬
‫وذلك لحمايتها من قبل االتي‪:‬‬

‫‪ Unauthorized access .1‬الولوج‪/‬الوصول الغير مصرح به‪.‬‬


‫‪ Disclosure .1‬الكشف عن هذه المعلومات‪.‬‬
‫‪ Alteration .1‬التعديل على هذه المعلومات‪.‬‬
‫‪ Destruction .1‬تدمير هذه المعلومات‪.‬‬
‫المعلومات تعتبر من المصادر الهامة لذلك يجب أن تكون أمنه‪ ،‬وذلك الن وقوع هذه المعلومات في األيدي الخطأ قد يسبب تهديدا كبيرا على‬
‫البنية التي تخصها هذه المعلومات‪.‬‬

‫‪IC3‬‬
‫‪ IC3‬هو اختصار ل ‪ Internet Crime complaint center‬وهي شركة تعمل على رصد الهجمات اإللكترونية ثم إعطاء تقرير عن هذا‪.‬‬
‫ويمكنك زيارتها من خالل هذا الرابط ‪.http://www.ic3.gov/default.aspx‬‬

‫)‪Internet Crime Complaint Center (IC3‬‬


‫‪336,665‬‬
‫‪303,809‬‬ ‫‪314,246‬‬
‫‪350,000‬‬ ‫‪275,284‬‬
‫‪300,000‬‬ ‫‪231,493‬‬
‫‪250,000‬‬ ‫‪207,492‬‬ ‫‪206,884‬‬
‫‪200,000‬‬
‫‪150,000‬‬
‫‪100,000‬‬
‫‪50,000‬‬
‫‪0‬‬
‫‪2005‬‬ ‫‪2006‬‬ ‫‪2007‬‬ ‫‪2008‬‬ ‫‪2009‬‬ ‫‪2010‬‬ ‫‪2011‬‬

‫)‪Data Breach Investigations Report (Verizon Business‬‬


‫شركه تعمل على رصد أنواع الهجمات وغيرها ثم تعطى تقرير عن هذا‪ .‬ويمكنك زيارتها من خالل الرابط‬
‫‪http://www.verizonenterprise.com/home/sept-b‬‬

‫امن المعلومات )‪(Information Security‬‬


‫أمن المعلومات‪ :‬مع تطور التكنولوجيا ووسائل تخزين المعلومات وتبادلها بطرق مختلفة أو ما يسمى بنقل البيانات عبر الشبكة من موقع ألخر‬
‫أصبح النظر إلى أمن تلك البيانات والمعلومات شكل مهم للغاية‪ .‬يمكن تعريف أمن المعلومات بأنه العلم الذي يعمل على توفير الحماية‬
‫للمعلومات من المخاط ر التي تهددها أو االعتداء عليها وذلك من خالل توفير األدوات والوسائل الالزم توفيرها لحماية المعلومات من المخاطر‬
‫الداخلية أو الخارجية‪ .‬المعايير واإلجراءات المتخذة لمنع وصول المعلومات إلى أيدي األشخاص الغير مخولين لهم عبر االتصاالت ولضمان‬
‫أصالة وصحة هذه االتصاالت‪.‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪28‬‬

‫إن حماية المعلومات هو أمر قديم ولكن بدأ استخدامه بشكل فعال منذ بدايات تطور التكنولوجيا ويرتكز أمن المعلومات إلى‪: -‬‬
‫‪ ‬أنظمة حماية نظم التشغيل‬
‫‪ ‬أنظمة حماية البرامج والتطبيقات‪.‬‬
‫‪ ‬أنظمة حماية قواعد البيانات‪.‬‬
‫‪ ‬أنظمة حماية الولوج أو الدخول إلى األنظمة‪.‬‬
‫المبادئ األساسية (عناصر امن المعلومات)‪ :‬من أهم المفاهيم‪ ،‬ومنذ أكثر من عشرين عاما‪ ،‬أمن المعلومات قد حددت ب‪ :‬السرية‬
‫)‪ ،(Confidentiality\Secrecy‬التكامل )‪ ،(Integrity‬والتوفر )‪ (Availability‬المعروفة باسم ‪ .CIA‬العديد من المتخصصين في‬
‫مجال أمن المعلومات يؤمنون إيمانا راسخا بأن المساءلة ينبغي أن تضاف كمبدأ أساسي ألمن المعلومات‪.‬‬
‫في عام ‪ ،1221‬اقترح دون باركر نموذجا بديال للثالوث التقليدي (‪ .)CIA‬يتكون نموذج باركر من ستة عناصر من أمن المعلومات‪ .‬العناصر‬
‫هي السرية‪ ،‬الحيازة‪ ،‬السالمة‪ ،‬األصالة‪ ،‬التوفر واألداة‪ .‬إن سداسي باركر هو موضع نقاش بين المتخصصين في مجال األمن‪.‬‬

‫‪confidentiality‬‬ ‫‪Integrity‬‬ ‫‪Availability‬‬ ‫‪Authentication‬‬ ‫‪Authorization‬‬ ‫‪Non-repudiation‬‬

‫كل واحد من هذه المكونات البد من أخذها في االعتبار عند قيام أي منظمة بعملية تأمين بيئتهم‪ .‬كل واحد من هذه المجاالت في حد ذاته لديه‬
‫العديد من المناطق الفرعية التي لديها أيضا إلى النظر فيها عندما يتعلق األمر ببناء بنية آمنة‪.‬‬

‫السرية‪(Confidentiality\Secrecy):‬‬
‫السرية هو المصطلح المستخدم لمنع الكشف عن معلومات ألشخاص غير مصرح لهم باالطالع عليها أو الكشف عنها‪ .‬على سبيل المثال‪،‬‬
‫استعمال بطاقة االئتمان في المعامالت التجارية على الشبكة يتطلب إدخال رقم بطاقة االئتمان على أن تنتقل من المشتري إلى التاجر ومن‬
‫التاجر إلنجاز وتجهيز المعامالت على الشبكة‪ .‬يحاول النظام فرض السرية عن طريق تشفير رقم البطاقة أثناء اإلرسال‪ ،‬وذلك بالحد من‬
‫الوصول إلى أماكن تخزين أو ظهور تسلسل رقم البطاقة (في قواعد البيانات‪ ،‬وسجل الملفات‪ ،‬النسخ االحتياطي‪ ،‬واإليصاالت المطبوعة)‪،‬‬
‫وذلك بتقييد الوصول إلى األماكن التي يتم تخزين الرقم والبيانات بها‪ .‬إذا كان الطرف الغير مصرح له قد حصل على رقم البطاقة بأي شكل‬
‫من األشكال فإن ذلك يعد انتهاكا لمبدأ السرية في حفظ وتخزين البيانات‪.‬‬
‫خرق السرية يتخذ أشكاال عديدة‪ .‬تجسس شخص ما على شاشة الحاسوب لسرقة كلمات سر الدخول‪ ،‬أو رؤية بيانات سرية بدون علم مالكها‪،‬‬
‫يمكن أن يكون خرقا للسرية‪ .‬إذا كان الحاسوب المحمول يحتوي على معلومات حساسة عن موظفي الشركة‪ ،‬فإن سرقته أو بيعه يمكن أن يسفر‬
‫عن انتهاك لمبدأ السرية‪ .‬إعطاء معلومات سرية عبر اتصال هاتفي هو انتهاك لمبدأ السرية إذا كان طالب االتصال غير مخول بأن يحصل‬
‫على المعلومات‪ .‬السرية أمر ضروري (لكنها غير كافية) للحفاظ على خصوصية الناس الذين تحتوي األنظمة معلوماتهم الشخصية‪.‬‬

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

‫توفر البيانات )‪(Availability‬‬


‫يهدف أي نظام للمعلومات لخدمة غرضه‪ ،‬أن تكون المعلومات متوفرة عند الحاجة إليها للمخولين لهم‪ .‬وهذا يعني أن تعمل عناصر النظام‬
‫اآلتية بشكل صحيح ومستمر‪ :‬األنظمة الحاسوبية المستخدمة لتخزين ومعالجة المعلومات‪ ،‬الضوابط األمنية المستخدمة لحمايته النظام‪ ،‬قنوات‬
‫االتصال المستخدمة للوصول‪ ،‬نظم عالية السرية تهدف إلى استمرارية الحماية في جميع األوقات‪ ،‬منع انقطاع الخدمة بسبب انقطاع التيار‬
‫الكهربائي‪ ،‬أو تعطل األجهزة‪ ،‬او نظام الترقيات والتحديث‪ ،‬وضمان منع هجمات الحرمان من الخدمة‪.‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪29‬‬

‫األصالة )‪(Authenticity‬‬
‫في الحوسبة‪ ،‬واألعمال اإللكترونية‪ ،‬وأمن المعلومات‪ ،‬فمن الضروري لضمان أن البيانات والمعامالت‪ ،‬واالتصاالت أو الوثائق (اإللكترونية‬
‫أو المادية) هي حقيقية‪ .‬من المهم أيضا التأكد من صحتها للتحقق من صحة أن كل األطراف المعنية والذين يدعون الى ان يكون هم أنفسهم‪.‬‬
‫بعض أنظمة أمن المعلومات تتضمن ميزات المصادقة مثل "التوقيعات الرقمية ]‪ ،"[digital signature‬والتي تعطي دليال على أن رسالة‬
‫البيانات هي حقيقيه وأرسلت من قبل الشخص الذي يحمل مفتاح التوقيع الصحيح‪.‬‬
‫من المهم أن نالحظ أن األنظمة و‪/‬أو شبكات اليوم تملك تقريبا كل شكل من أشكال التوثيق وعلى هذا النحو وهذا هو عادة أول منطقة امان‪ .‬هذا‬
‫يمكن أن يكون شيء بسيط مثل قيام المستخدمين باختيار كلمة مرور معقدة أو إضافة عوامل إضافية إلى المصادقة مثل ‪،biometric ،token‬‬
‫أو ‪ .certificates‬ال يوجد عامل واحد من التوثيق آمن في شبكات اليوم‪.‬‬

‫‪Authorization‬‬
‫غالبا ما يتم تجاهل مفهوم التفويض "‪ "Authorization‬حيث يفترض انه ليس أحد مكونات بعض النماذج األمنية‪ .‬هذا النهج المتخذ حاليا‪،‬‬
‫ولكن يفضل إدراجه في معظم نماذج االختبار‪ .‬مفهوم ‪ authorization‬أمر ضروري وهو كيف يمكننا تعيين الحقوق وأذونات الوصول إلى‬
‫المورد‪ ،‬ونحن نريد ضمان امنها‪ Authorization .‬يسمح لنا بامتالك أنواع مختلفة من المستخدمين مع مستويات امتياز منفصلة داخل‬
‫النظام‪.‬‬

‫عدم اإلنكار)‪(Non-repudiation‬‬
‫في القانون‪ ،‬عدم االنكار يعني أن المرء لديه نية الوفاء بالتزامه اتجاه العقد‪ .‬كما يعني أن أحدي أطراف المعاملة ال يمكنه إنكار تسلمه لتلك‬
‫المعاملة كما ال يمكن للطرف اآلخر نفي قيامه بإرسال المعاملة‪ .‬من المهم أن نالحظ أن التكنولوجيا مثل أنظمة التشفير يمكن أن تساعد في‬
‫جهود عدم االنكار‪ .‬هذا ي شير إلى القدرة على التأكد من أن طرفي العقد أو االتصاالت ال يستطيعا أن ينكرا صحة التوقيع على الوثيقة أو‬
‫الرسالة المرسلة بينهم من األمثلة على ذلك بروتكول ‪ HTTPS‬و‪.Kerberos‬‬

‫مستوى األمن في أي نظام يمكن تعريفها من قبل قوة من الثالثة عناصر التالية‪:‬‬

‫حيث نالحظ وجود دائرة صفراء والتي من الممكن أن تتحرك في أي زاوية من زاويا المثلث والتي تدل على معنى‪ .‬حيث مكانها الحالي يدل‬
‫انه مع زيادة األمان (‪ )security‬فانه سوف يقل األداء وسهولة االستخدام (‪.)Usability – Functionality‬‬

‫الهدف من وراء الهجوم (‪)Goal Of Attack‬‬


‫حيث نالحظ من هذا أن أي هجوم "‪ "attack‬يتكون من ثالث عناصر‬

‫(الهدف من الهجوم ‪( + )Motive‬الطريقة ‪( + )method‬نقاط الضعف ‪)Vulnerability‬‬


‫العنصر األول هو ‪ motive‬وذلك الن أي هجوم إما ان يكون لهدف أو لدافع معين )‪ (motive , goal or objective‬مثال لهذه األهداف‬
‫تعطيل استمرارية العمل (‪ ،)disrupting business continuity‬سرقة المعلومات‪ ،‬تنفيذ انتقام من مؤسسه معينه أو سرقة شيء ذات‬
‫قيمه من مؤسسه ما‪ .‬هذه األهداف تختلف من شخص إلى أخر على حسب الحالة العقلية للمهاجم الذي حمله على القيام بهذا العمل‪ .‬بمجرد‬
‫امتالك المهاجم للهدف فانه يستخدم العديد من الطرق واألساليب الستغالل نقاط الضعف )‪ (exploit vulnerability‬في نظام المعلومات‬
‫‪ information system‬أو في ‪ security policy‬في عملية الهجوم حتى يصل إلى تحقيق هدفه‪.‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪30‬‬

‫التهديدات األمنية (‪)Security Threat‬‬


‫التهديدات األمنية المحتملة تنقسم هنا إلى ثالثة أقسام كاالتي‪:‬‬

‫التهديدات الطبيعية (‪)Natural Threats‬‬


‫التهديدات الطبيعة تشمل الكوارث الطبيعية مثل الزالزل "‪ "earthquake‬او الفيضانات "‪ "floods‬او األعاصير "‪ "hurricanes‬أو أي‬
‫كارثه طبيعية أخرى التي ال يمكن إيقافها أو التحكم فيها‪.‬‬
‫المعلومات التي يتم تدميرها أو فقدانها نتيجة التهديدات الطبيعية ال يمكن منعها حيث ال يمكن توقع وقت حدوثها واقصى ما يمكن فعله هو‬
‫وضع بعض الخطط األمنية التي تمكنك من عدم فقد هذه المعلومات مثل خطط الطوارئ واسترجاع البيانات عند الفقدان أو التدمير‪.‬‬

‫التهديدات الفيزيائية (‪)Physical Threats‬‬


‫هذا النوع من التهديد ينتج نتيجة تلف أي جزء من األجهزة المستخدمة سواء بواسطة الحريق أو الماء أو السرقة أو التداخالت الفيزيائية‬
‫)‪ (physical impact‬وأيضا مصادر الطاقة التي من الممكن أن تؤدى إلى تلف بعض األجهزة )‪.(hardware damage‬‬

‫التهديدات البشرية (‪)Human Threat‬‬


‫هذا النوع من التهديديات ينتج نتيجة الهجمات سواء من داخل المنظمة )‪ (Insider‬أو من الخارج )‪.(Outsider‬‬
‫‪( Insider Attack‬الهجمات من الداخل)‪ :‬تعتبر األخطر والتي تتم بواسطة الموظفين من داخل المنظومة او من قبل شخص‬ ‫‪‬‬
‫ساخط‪ .‬وتعتبر األخطر الن المهاجم يعرف الكثير مثل الوضع األمني )‪ (security posture‬الخاص بأنظمة المعلومات‪.‬‬
‫‪( Outsider Attack‬الهجمات من الخارج)‪ :‬تتم بواسطة أشخاص آخرين من الخارج الذين يملكون بعض من الخبرة التي تمكنهم‬ ‫‪‬‬
‫من معرفة الوضع األمني لنظام المعلومات‪.‬‬

‫هذه األنواع الثالثه من التهديد تنقسم هى األخرى إلى أنواع أخرى كاالتى‪:‬‬
‫‪:Network Threats .A‬‬
‫الشبكة ‪ :Network‬هي عبارة عن ربط جهازين حاسوب فأكثر (مجموعة من األجهزة) مع بعضهما البعض من خالل قنوات اتصال‬
‫‪ communication channel‬وذلك لتبادل البيانات والموارد ‪ computer resources‬مثل (الطابعات‪ ،‬الملفات ‪ ...‬وغيرها)‪ .‬ومع‬
‫مرور هذه البيانات من خالل قنوات االتصال ‪ communication channel‬فإنه من الممكن دخول شخص ما عنوةً الى هذه القنوات‬
‫وسرقة ما بها من معلومات‪.‬‬
‫لذلك فان المهاجم الهاكر يعرض العديد من التهديدات من خالل الشبكة ومن هذه التهديديات كاالتي‪:‬‬
‫‪( Information gathering .1‬جمع المعلومات)‪.‬‬
‫‪( Sniffing and eavesdropping .1‬التنصت والتجسس)‪.‬‬
‫‪( Spoofing .1‬التنصت)‪.‬‬
‫‪.Session hijacking and man-in-middle attack .1‬‬
‫‪.Sql injection .1‬‬
‫‪.ARP Poisoning .2‬‬
‫‪.Denial of service attack .2‬‬
‫‪.Comprised key attack .1‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪31‬‬

‫‪:Host Threats .B‬‬


‫هذا النوع من التهديد يتم توجيه إلى النظام الحالي الذي يحمل المعلومات القيمة التي يريدها المهاجم مباشرة (عن طريق االتصال المباشر)‪.‬‬
‫حيث يحاول المهاجم من كسر الوضع األمني للنظام الذي يحمل هذه المعلومات ومن هذه التهديدات كاالتي‪:‬‬
‫‪Malware attacks .1‬‬
‫‪Target Footprinting .1‬‬
‫‪Password attacks .1‬‬
‫‪Denial of service attacks .1‬‬
‫‪Arbitrary code execution .1‬‬
‫‪ Unauthorized access .2‬الدخول عنوه أي من غير إن يكون مصرح له بالدخول‪.‬‬
‫‪Privilege escalation .2‬‬
‫‪Back door attacks .1‬‬
‫‪Physical security threats .2‬‬
‫‪Application Threats .C‬‬
‫تطوير أي تطبيق أو إنشائه مع عدم االهتمام باألوضاع األمنية الخاصة به‪ .‬قد يؤدى إلى وجود بعض الثغرات األمنية في هذا التطبيق وقد ينتج‬
‫عن هذه الثغرات ثغرات أخرى في تطبيقات أخرى‪ .‬حيث أن المهاجم يستفيد من هذه الثغرات في تنفيذ هجماته لسرقة المعلومات أو تدميرها‬
‫ومن هذه التهديديات كاالتي‪:‬‬
‫‪Data/Input validation .1‬‬
‫‪Authentication and Authorization attacks .1‬‬
‫‪Configuration management .1‬‬
‫‪Information disclosure .1‬‬
‫‪Session management issues .1‬‬
‫‪Cryptography attacks .2‬‬
‫‪Parameter manipulation .2‬‬
‫‪Improper error handling and exception management .1‬‬
‫‪Auditing and logging issues .2‬‬

‫‪( Information Warfare‬حرب المعلومات)‬


‫المصطلح )‪ (Information Warfare/InfoWar‬يشير إلى استخدام تكنولوجيا المعلومات واالتصاالت ‪ ICT‬في الحصول على بعض‬
‫المزايا التنافسية من الشركات المنافسة أو بمعنى أخر هو سرقة المعلومات من الشركات المنافسة‪.‬‬
‫أو بمعنى أخر هو اصطالح ظهر في بيئة اإلنترنت للتعبير عن اعتداءات تعطيل المواقع وإنكار الخدمة واالستيالء على المعلومات‪ ،‬وكما‬
‫يشير االصطالح فان الهجمات والهجمات المقابلة هي التي تدل على وجود حرب حقيقية‪ ،‬وبما إنها حرب فهي حرب بين جهات تتناقض‬
‫مصالحها وتتعارض مواقفها‪ ،‬لهذا تكون في الغالب هجمات ذات بعد سياسي‪ ،‬أو هجمات منافسين في قطاع األعمال‪ .‬ولذا وصفت حمالت‬
‫الهاكرز اليوغسالفيين على مواقع الناتو أبان ضربات الناتو بانها حرب معلومات ‪ ،‬ووصفت كذلك هجمات المخترقين األمريكان على مواقع‬
‫صينية في اطار حملة أمريكية على الصين تحت ذريعة حقوق األنسان والتي تمت بدعم حكومي أمريكي بانها حرب معلومات ‪ ،‬وأشهر‬
‫حروب المعلومات القائمة حتى األن المعركة المستمرة بين الشباب العرب والمسلم وتحديدا شباب المقاومة اللبنانية والمدعومين من خبراء‬
‫اختراق عرب ومسلمين ‪ ،‬وبين جهات تقنية صهيونية في اطار حرب تستهدف إثبات المقدرات في اختراق المواقع وتعطيلها أو االستيالء‬
‫على بيانات من هذه المواقع ‪ .‬وهذا االصطالح في حقيقته اصطالح إعالمي أكثر منه أكاديمي‪ ،‬ويستخدم مرادفا في غالبية التقارير‬
‫الصطالح الهجمات اإلرهابية اإللكترونية ونجده لدى الكثيرين اصطالح واسع الداللة لشمول كل أنماط مخاطر وتهديدات واعتداءات وجرائم‬
‫البيئة اإللكترونية‪ ،‬ونرى قصر استخدامه على الهجمات والهجمات المضادة في ضوء حروب الرأي والمعتقد لتمييزه عن بقية أنشطة تعطيل‬
‫المواقع التي ال تنطلق من مثل هذه األغراض‪.‬‬

‫‪:Defensive InfoWar‬‬
‫يشير إلى جميع االستراتيجيات والمبادرات التي تستخدم للدفاع ضد هذا النوع من الهجمات )‪.(ICT assets‬‬

‫‪:Offensive InfoWar‬‬
‫يشير إلى ‪ InfoWar‬التي تستخدم للهجوم على المؤسسات )‪ (ICT assets‬في الشركات المنافسة‪.‬‬

‫‪( IPv6 Security Threats‬التهديدات األمنية من استخدام ‪)IPv6‬‬


‫‪ IPv6‬مقارنة ب ‪ IPv4‬فانه يملك تحسينات امنيه افضل منه والتي تصل بك إلى مستوى اعلى من األمان والخصوصية للمعلومات التي تمر‬
‫عبر الشبكة ولكن مع ذلك فانه يحمل بعض التهديديات كاالتي‪:‬‬
‫‪Auto-Configuration threat-1‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪32‬‬

‫‪ IPv6‬يدعم اإلعداد األلى )‪ (Authconfig‬لعناوين الشبكة )‪ ،(IP‬والتي تترك المستخدم عرضه للهجوم عبر بعض الثغرات اذا لم يتم‬
‫اإلعداد الصحيح واألمن من البداية‪.‬‬
‫‪Unavailability Reputation-based Protection-0‬‬
‫بعض الحلول األمنية الحالية تعتمد على استخدام ‪( reputation of IP address‬عناوين ‪ IP‬مشهوره أو معروفه) في تصفية بعض‬
‫المصادر المعروفة لل ‪ .malware‬والتي تحتاج إلى وقت حتى يتم تطويرها لكي تشمل عناوين ‪.IPv6‬‬
‫‪Incompatibility of Logging Systems-3‬‬
‫‪ IPv6‬يستخدم عناوين ذات حجم ‪ 128 bit‬والتي يتم تخزينها على هيئة ‪ 12‬حرف ورقم‪ ،‬ولكن ‪ IPv4‬يستخدم عناوين ذات أحجام ‪32 bit‬‬
‫وتخزن على هيئة ‪ 11‬رمز‪ .‬لذلك فان عمليات التسجيل ‪ logging solutions‬في األنظمة المعتمدة على ‪ IPv4‬من الممكن إنها لن تعمل مع‬
‫الشبكات القائمة على ‪.IPv6‬‬
‫‪Rate Limiting Problem-4‬‬
‫يستخدم مديري األنظمة ‪ Admin‬استراتيجيات الحد )‪ (rate limiting strategy‬إلبطاء أدوات المهاجم أليا )‪(Automated attack tool‬‬
‫لكن هذا سوف يكون صعبا عند استخدامه مع عناوين ذات أحجام ‪.128 bit‬‬

‫التهديدات التي تكمن نتيجة استخدام ‪IPv6‬‬


‫‪Default IPv6 Activation-1‬‬
‫‪ IPv6‬من الممكن أن يفعل أليا بدون علم مديري النظام )‪ ،(ADMIN‬والتي يؤدى إلى عدم فاعلية األوضاع األمنية القائمة على ‪.IPv4‬‬
‫‪Complexity of Network Management Tasks-0‬‬
‫مديري النظام )‪ (admin‬دائما ما يختاروا عناوين ‪ IPv6‬سهلة الحفظ مثل )‪ (::10, ::20, ::FOOD, ::C5C0‬وغيرها والتي من السهل‬
‫توقعها بالنسبة للمهاجم‪.‬‬
‫‪Complexity in Vulnerability Assessment-3‬‬
‫‪ IPv6‬ذات أحجام ‪ 128 bit‬يجعل فحص بنية األنظمة )‪ (infrastructure‬من اجل كشف المتسللين والثغرات عمليه معقده‪.‬‬
‫‪Overloading of Perimeter Security Controls-4‬‬
‫‪ IPv6‬يحمل عنوان ثابت في ‪ header‬ذات حجم ‪ 40 byte‬مع ‪ (extension header) add-on‬قد تكون مقيده والتي نحتاجها في بعض‬
‫العمليات المعقدة بواسطة بعض أدوأت التحكم األمنى )‪ (security control‬للشبكة مثل ‪ firewall ،security gateways ،routers‬و ‪.IDS‬‬
‫‪IPv4 to IPv6 Translation Issues-5‬‬
‫ترجمة الحزم من ‪ IPv4‬إلى ‪ IPv6‬من الممكن أن يؤدى تدمير الحزم أو ينتج عن سوء تنفيذ هذه الترجمة )‪.(poor implementation‬‬
‫‪Security Information and Event Management (SIEM) Problems -9‬‬
‫كل عميل يستخدم ‪ IPv6‬يحمل عناوين عده من ‪ IPv6‬وليس عنوان واحد مما يؤدى إلى التعقيد في ملفات ‪ log‬واألحداث ‪.event‬‬
‫‪Denial-of-service (DOS)-9‬‬
‫زيادة التحميل على امن الشبكة وأجهزة التحكم يؤدى إلى تقليل إتاحة موارد الشبكة‪ ،‬والتي تؤدى إلى الهجمات من النوع ‪.DOS‬‬
‫‪Trespassing-1‬‬
‫الميزات المستقبلية لعناوين ‪ IPv6‬التي يتم استكشافها من الممكن أن تستغل من قبل المهاجمين في اجتياز الشبكة الخاصة بك من اجل الوصول‬
‫إلى موارد الشبكة المقيدة )‪.(restricted resources‬‬

‫‪( HACK CONCEPT 1.1‬مفهوم الهاكينج)‬


‫الخالف حول تعريف الهاكر‪:‬‬
‫ينظر الكثيرون للهاكر على أنه شخص مدمر وسلبي‪ ،‬ويقرن البعض كلمة هاكر مع قرصان الحاسوب‪ .‬وذلك بتأثير من بعض ما ورد في‬
‫اإلعالم‪ ،‬حيث يرجع السبب لقلة فهمهم حقيقة الهاكر‪ ،‬وخلطهم لها بكلمة القرصنة (لتعبير الذي يصف البيع غير المشروع لنسخ من أعمال‬
‫إبداعية)‪ .‬وهي مستخدمة في انتهاك حقوق الملكية الفكرية وحقوق النشر خصوصا بالنسبة لألفالم والمسلسالت التلفزيونية واألغاني وبرامج‬
‫الحاسوب‪ .‬والتي أصبحت الشبكة العنكبوتية إحدى وسائل تسويقها‪.‬‬
‫أصل الخالف أطلقه بعض األكاديميون لعدم فهمم لطبيعة الهاكر وأسلوب عمله بالرغم من أنه أساسا مطور مبدع‪ .‬ولكنهم رأوا دوره السلبي‬
‫والمفسد‪ ،‬متناسين أن اإلنترنت يزدحم بمشاريع تم تطويرها من نشاط جماعي للهاكرز‪ ،‬من أمثلة تلك المشاريع‪ :‬لينكس‪ ،‬ويكيبيديا‪ ،‬ومعظم‬
‫المشاريع ذات المصدر المفتوح‪.‬‬
‫والكراكر ‪ Cracker‬مصطلح أطلق فيما بعد للتمييز بين الهاكر الصالح والهاكر المفسد‪ ،‬وبالرغم من تميز اإلثنين بالذكاء وروح التحدي‬
‫وعدم خوفهم من مواجهة المجهول‪ .‬إال أن الكراكر يقوم دائما بأعمال التخريب واالقتحام ألسباب غير ايجابية وهذا الشخص هو الذي يستحق‬
‫تسميته قرصان الحاسوب‪ .‬بينما الهاكر يبتكر الحلول للمشاكل ويحاول أن يبدع في عمله‪ .‬ولكن سبل اإلعالم تتكلم بصفة عامة عن "الهاكر "‬
‫وتخلط بين المصلح والمفسد‪ ،‬وبمرور الوقت اقترن اسم الهاكر بالشخص المفسد‪.‬‬
‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪33‬‬

‫بعض المصطلحات‪:‬‬
‫‪ :Hack Value‬هو مفهوم بين القراصنة على ان هناك شيئا يستحق القيام به أو مثير لالهتمام‪ .‬أو بمعنى أخر هو قيمة العمل الذي‬ ‫‪‬‬
‫سوف يقوم به‪ .‬ان هناك شيء ما يشعر الهاكر حوله بوجود مشكله او حلول‪.‬‬
‫‪( Exploit‬تعنى باإلنجليزية "استغالل" وتعنى استخدام شيء لمصلحة المرء) وهى عبارة عن قطعة من البرمجيات‪ ،‬قطعة من‬ ‫‪‬‬
‫البيانات‪ ،‬أو سلسلة من األوامر تستفيد من خلل أو ضعف من أجل التسبب ليحدث سلوك غير مقصود أو غير متوقع من برامج‬
‫الكمبيوتر‪ ،‬واألجهزة‪ ،‬أو أي شيء الكتروني عن طريق اخذ ميزات نقاط الضعف التي تحتويها‪ .‬كثيرا ما يتضمن مثل هذا السلوك‬
‫أشياء مثل السيطرة على نظام الكمبيوتر‪ ،‬تصعيد االمتياز‪ ،‬أو هجوم الحرمان من الخدمة‪.‬‬
‫‪ :Vulnerability‬هو مصطلح يعبر عن نقاط الضعف التي تسمح للمهاجم من الحد من امن المعلومات على النظام‪ .‬نقاط الضعف‬ ‫‪‬‬
‫هذه عباره عن تالقى ثالث عناصر‪ :‬عيب في النظام‪ ،‬وصول المهاجم الى خلل‪ ،‬قدرة المهاجم على استخدام هذا الخلل‪ .‬والستغالل‬
‫هذا الضعف‪ ،‬يجب أن يكون لدى المهاجم على األقل أداة واحد أو تقنية يمكنها االتصال بنقاط الضعف هذه‪ .‬في هذا اإلطار‪،‬‬
‫‪ Vulnerability‬يعرف أيضا باسم ‪ .attack surface‬نقاط الضعف هذه قد تكون ناتجه عن ضعف في التصميم ( ‪design‬‬
‫‪ )code‬أو أخطاء (‪ )error/bugs‬أو في الضوابط األمنية او الضوابط الداخلية والتي قد تسبب سولك غير متوقع أو غير مرغوب‬
‫فيه مما يؤدى الى خلل في نظام األمن‪ .‬وهو يعتبر المصدر الذي يهتم به الهاكر لكي يعمل عليه‪.‬‬
‫)‪ :Target of evaluation (TOE‬هو نظام المعلومات أو الشبكات )‪ (IT system‬أو برنامج أو محتوى يستخدم للوصول‬ ‫‪‬‬
‫إلى درجه معينه من األمن‪ .‬وهذا النوع يساعد على فهم وظائف وتقنيات ونقاط الضعف في األنظمة والمنتجات‪.‬‬
‫‪ :Zero-Day attack‬والذى يعنى بالعربية "هجوم اليوم صفر ‪ /‬هجوم دون انتظار" وهو استغالل لنقاط الضعف في برمجيات‬ ‫‪‬‬
‫وثغراتها األمنية خاصة غير المعروفة منها للعامة أو حتى مطوريها في شن هجمات إلكترونية‪ .‬غالبا ما يتم استغالل هذه الثغرات‬
‫وحتى تشاركها ما بين الهاكرز قبل أن تكتشفها الجهات المطورة للبرمجيات المصابة‪ .‬المعرفة بالثغرة األمنية قبل المطورين‪ ،‬تسمح‬
‫لمستغليها بالحصول على فترة زمنية ينشر فيها أدواته الخبيثة لتحدث ضررا كبيرا‪ .‬ألنه متى ما اكتشفت الثغرة األمنية‪ ،‬يسارع‬
‫المطورون لسدها من خالل نشر برامج تصحيحية‪ .‬المصطلح ‪ Zero-day attack‬أتى من كون أن مستغل الثغرة األمنية غير‬
‫المعروفة ال يترك أي يوم يمر لبدء هجومه كونه في سباق مع الزمن‪ .‬وطالما تأخر اكتشاف الثغرة‪ ،‬منح ذلك مزيد من الوقت‬
‫للمهاجمين في توسيع نطاق الهجوم وإضافة ضحايا جدد‪.‬‬
‫‪ :Daisy Chaining‬تعنى أن الهاكر الذي استطاع الوصول إلى قاعدة المعلومات فانه يعمل على تكملة أهدافه عن طريق تغطية‬ ‫‪‬‬
‫أثار ما فعله ويتم ذلك بتدمير ملفات السجل (‪ )destroy log file‬وذلك إلخفاء الهوية الخاصة به‪.‬‬
‫‪ :Threat‬هو الخطر المحتمل الذى يمكنه استغالل نقاط الضعف لإلخالل بالنظام األمني‪ ،‬وبالتالي يسبب ضرر ممكن‪ .‬التهديد إما‬ ‫‪‬‬
‫أن يكون "متعمدا" (على سبيل المثال‪ ،‬الكراكرز الفردي أو منظمة إجرامية) أو "عرضي" (على سبيل المثال‪ ،‬احتمال وجود خلل‬
‫في الكمبيوتر‪ ،‬أو إمكانية وقوع كارثة طبيعية مثل الزالزل‪ ،‬النار‪ ،‬أو اإلعصار) أو ظرف أو حدث‪.‬‬

‫ما هو الفرق بين الهاكر المدمر(‪ )Hacking‬والهاكر األخالقي (‪)Ethical hacking‬؟‬


‫التهكير المدمر ‪hacking‬‬
‫يشير إلى استغالل ثغرات األنظمة )‪(vulnerability‬واألخالل بالضوابط األمنية )‪ (compromising security controls‬للحصول‬
‫على الدخول الغير مصرح به )‪ (unauthorized access‬لموارد النظام‪ .‬هذا يشمل تعديل النظام )‪ (modifying system‬أو بعض‬
‫مميزات البرامج )‪ (application feature‬لتحقيق الهدف‪.‬‬

‫التهكير األخالقي ‪Ethical hacking‬‬


‫يشمل استخدام أدوات التهكير وبعض التقنيات والحيل لتعريف الثغرات وذلك للتأكد من امن النظام‪ .‬وهذا يركز على استخدام تقنيه مشابه‬
‫للتهكير المدمر لكشف الثغرات في النظام األمن‪.‬‬

‫آثار االختراق‬
‫يعتمد أثر أو آثار عملية االختراق على نوعية المخترق وعلى هدفه وراء العملية التي قام بها ويمكن تلخيص أبرز األضرار كاآلتي‪:‬‬

‫يمكنه تخريب حاسوب أو شبكة محلية أو حتى كل حاسبات شركة بإطالق فيروسات أو إعادة تهيئة األقراص الصلبة أو بإتالف‬ ‫‪-‬‬
‫اللوحة األم والمعالج‪.‬‬
‫الحصول على كلمات السر الخاصة بك للولوج إلى البريد اإللكتروني واشتراكاتك في األنترنت وحتى أرقام بطاقة االئتمان الخاص‬ ‫‪-‬‬
‫بك‪.‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪34‬‬

‫الحصول على أرقام بطاقات االئتمان لكثير من األشخاص وتحويل األرصدة من شخص إلى آخر وبذلك تعم الفوضى وتكبد البنوك‬ ‫‪-‬‬
‫خسائر مالية كبيرة‪.‬‬
‫من الممكن ان يسبب اضرار كبيره على العدي من المنظمات كاالتي‪:‬‬ ‫‪-‬‬

‫دور الهاكر في عمران وتطوير االنترنت‬


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

‫لمن ال يعلم‪ .‬الهاكرز مقسوم لعدة أصناف‪:‬‬


‫‪( Black Hats‬المخترق ذو القبعة السوداء)‬
‫هم أفراد لديهم مهارات استثنائية في علم الحوسبة )‪ ،(computer science‬اللجوء إلى أنشطة ضارة أو مدمرة‪ ،‬كما أنهم‬
‫معروفين أيضا باسم الكراكرز )‪ .(crackers‬هؤالء األفراد دائم ما يستخدمون مهاراتهم في األنشطة التدميرية والتي تسبب‬
‫ضرر كبير للشركات والمؤسسات واألفراد‪ .‬هؤالء يستخدمون مهاراتهم في إيجاد الثغرات في الشبكات المختلفة والتي تشمل أيضا المواقع‬
‫الحكومية ومواقع الدفاع والبنوك وهكذا‪ .‬بعضهم يفعل ذلك من اجل أحداث ضرر أو سرقة معلومات أو تدمير بيانات أو كسب المال بطريقه‬
‫سهله عن طريق قرصنه الرقم التعريفى لعمالء البنوك‪.‬‬

‫‪( White Hats‬المخترق ذو القبعة البيضاء)‬


‫هم أفراد يعتنقون مهارات القرصنة (االختراق) ويستخدمون هذه المهارات من اجل األهداف الدفاعية؛ كما أنهم معروفين أيضا‬
‫باسم المحللين األمنين (‪ .)security analysts‬في هذه األيام فان معظم الشركات يملكون محللين امنين من اجل حماية‬
‫أنظمتهم ضد الهجمات المختلفة‪ .‬هؤالء يساعدون الشركات لتامين الشبكات الخاصة بهم‪.‬‬

‫‪( Gray Hats‬المخترق ذو القبعة الرمادية)‬


‫هم أفراد لديهم مهارات الهاكر يستخدمونها في الهجوم والدفاع على حد سواء في أوقات مختلفة‪ .‬وهؤالء يقعون بين ‪Black‬‬
‫‪ Hats‬و‪ .White Hats‬هؤالء يمكنهم أيضا مساعدة الهاكر في إيجاد الثغرات المختلفة في األنظمة والشبكات وفى نفس‬
‫الوقت يقومون بمساعدة المؤسسات في تحسين منتجاتهم )‪ (software and hardware‬عن طريق جعلها أكثر أمانا وهكذا‪.‬‬

‫‪( Suicide Hackers‬الهاكر المنتحرون)‬


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

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪35‬‬

‫‪Script Kiddies‬‬
‫هو هاكر ليس لديه مهارات الهاكر ولكن يتحايل على األنظمة باستخدام بعض االسكريبات واألدوات والتطبيقات التي تم تطويرها‬
‫بواسطة الهاكرز الحقيقين‪ .‬وهؤالء من السهل لهم استخدام التطبيقات واالسكريبات في اكتشاف الثغرات في األنظمة المختلفة‪ .‬هذا‬
‫النوع من الهاكر يركز في األساس على كمية الهجمات أكثر من قوة وفاعلية الهجمة التي يقوم بإنشائها‪.‬‬

‫‪Spy Hackers‬‬
‫هم عباره عن افراد يتم تأجيرهم من قبل المنظمات المختلفة الختراق والحصول على أسرار من المنظمات المنافسة لهم‪.‬‬

‫‪( Cyber Terrorists‬إرهاب العالم اإللكتروني)‬


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

‫‪State Sponsored Hackers‬‬


‫هم عباره عن أفراد يتم تأجيرهم بواسطة الحكومات من اجل االختراق والحصول على معلومات على درجه عالية من السرية‬
‫وتدمير بعض أنظمة المعلومات األخرى للحكومات األخرى‪.‬‬
‫االن ماذا نستنتج؟ من األصناف الثالثة االولى انهم "هاكرز" يملكون الخبرة المعرفية التي تم ّكنهم من االختراق ولكن المبادئ التي يسيرون‬
‫عليها والغايات مختلفة‪.‬‬
‫أما االشخاص الذين يدّعون أنهم هاكرز فيطلق عليهم لقب أطفال الهاكرز ‪ script kiddies‬او ‪ lamer‬وغالبا ً نجد هذا النوع منتشر‬
‫بالمنتديات‪ ،‬يقوم باألعمال التخريبية بشكل "همجي"‪ ،‬يسير على مبدأ مين يخترق أكثر هو القوى! وغالبا ً نجدهم يبحثون عن الشهرة عن طريق‬
‫اختراق األجهزة والمواقع الضعيفة بشكل عشوائي‪.‬‬
‫السؤال الذي يطرح نفسيه هو طالما أن هؤالء األشخاص تمكنوا من االختراق لماذا ال يطلق عليهم مصطلح هاكرز؟‬
‫ببساطة ألنهم ال يملكون أي معرفة علمية! فهم يجيدون استخدام بعض البرامج واألدوات واستغالل الثغرات الجاهزة التي برمجها واكتشفها‬
‫الهاكرز "الحقيقيين" لكنهم ليسوا قادرين على برمجة أدواتهم واكتشاف ثغراتهم الخاصة وليسوا قادرين على تطوير طرق وأساليب جديدة أي‬
‫أنهم عبارة عن "مستخدمين" فقط‪.‬‬
‫دائما ً أقول وأكرر لقب الهاكر ليس بسيط ليتم إطالقه على أي شخص! لكي تصبح مبرمج يكفي أن تتعلم لغة برمجة واحدة وتبدأ البرمجة بها‪،‬‬
‫لتصبح مصمم يكفي أن تجيد استخدام برنامج أو اثنين في التصميم‪ ،‬لتصبح مدير سيرفرات يكفي أن تتعلم كيف تتعامل مع السيرفر ويندوز أو‬
‫لينوكس مثال‪ ،‬أما لتصبح هاكر عليك أن تجيد جميع األمور السابقة بنفس الوقت! قبل أن تصبح هاكر عليك أن تكون مستخدم محترف قادر‬
‫على إيجاد طريقيك وحل المشاكل التي تصادفك فكييف ستتمكن من اختراق نظام إن لم تكن مستخدم محترف له تعلم كيف يعمل هذا النظام وما‬
‫هي أسراره ونقاط ضعفه؟ كيف ستتمكن من اكتشاف ثغرة وبرمجة تستغلها‪ ،‬إذا لم تكن تعلم كيف تبرمج؟ لتكون هاكر عليك أن تكون أذكى من‬
‫المبرمج الذي وقع بالخطأ الذي أدى للثغرة وأكثر معرفة من مدير السيرفر الذي اخترقت نظامه‪ ،‬األغلبية يظنوا أن معرفة استخدام بعض‬
‫االدوات واستغالل الثغرات الجاهزة تجعل من الشخص هاكر! لكن هذا المبدأ ليس صحيح فالهاكر هو من بنى خبرته على علم ومعرفة حقيقية‪.‬‬

‫لماذا تريد أن تصبح هاكر؟‬


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

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪36‬‬

‫من أين وكيف أبدأ؟‬


‫فعليّا ال يوجد خطوات محددة ّ أو تسلسل يجب أن تسير عله لتصبح هاكر لكن يجب أن تعلم أنه من الضروري أن تكون البداية صحيحة فهي‬
‫التي ستحدد ماذا ستصبح الحقاً! الكثيرين من الهاكرز يبدؤون بشكل خاطئ وأغلبهم كان ‪ Lamer‬قبل أن يصبح ‪ Hacker‬فتجدهم يبدؤون‬
‫المزورة ثم االنتقال الختراق االجهزة عن طريق استخدام ‪ Key loggers‬وبرامج جاهزة‬ ‫ّ‬ ‫بتعلم كيفية سرقة االيميالت باستخدام الصفحات‬
‫تستخدم لهذا الغرض مثل ‪ Bifrost‬و‪ Poison Ivy‬وغيرهم من البرامج االخرى بعد ذلك يتط ّور هؤالء األشخاص قليالً ويتعلمون كيف يتم‬
‫استغالل ثغرات المتصفح التي تحتوي على جملة "ضع رابط الباتش هنا" ثم ينتقلون الختراق المواقع عن طريق تعلم استغالل بعض ثغرات‬
‫لغة ‪ php‬مثل ‪ SQL Injection‬وتعلّم استخدام الشيل "‪ "php shell‬وغيرها من االدوات‪ .‬لكن غالبا ً يتوقّف هؤالء االشخاص عند هذا‬
‫الحد العتقادهم أنهم أصبحوا هاكرز وبسبب انشغالهم باختراق المواقع الضعيفة بشكل عشوائي (لغايات ومبادئ مختلفة) والتسابق لتجميع أكبر‬
‫عدد من االجهزة المخترقة والسير على مبدأ من يخترق أكثر هو القوى!! وحسب ما لحظت قد يهتم بعضهم باختراق الشبكات بغرض التجسس‬
‫عليها عن طريق استخدام بعض أدوات ‪ sniffers‬وتطبيق هجمات ‪ .ARP/DNS Spoofing‬وبعضهم يت ّعلم كسر تشفير شبكات الوايرلس‬
‫وآخرين يستخدمون مشروع ميتاسبلويت الختراق األجهزة الغير محدّثة بالشبكة وكل ذلك باستخدام برامج وأدوات جاهزة ال أحد منهم يعرف‬
‫مبدأ عملها وكيف برمجت أساسا ً!!‬
‫على ماذا حصلنا االن؟ ببساطة نحن لم نحصل على هاكر بل على شخص يجيد استخدام أدوات الهاكرز لكنه ال يملك أي معرفة علمية! حسب‬
‫ما لحظت قلّة قليلة يف ّكرون بتطوير أنفسهم أكثر ويتجهون للطريق الصحيح عين طريق تعلّم البرمجة واكتشاف الثغرات‪ ،‬احتراف نظام‬
‫لينوكس‪ ،‬تعلّيم الهندسية العكسية‪ ،‬ادارة الشبكات‪ ،‬الحماية… وبذلك يبدأ هذا الشخص بالسير على الطريق الصحيح ليصبح هاكر ويدرك لحقا ً‬
‫أن ما كان يقوم به سابقا ً عبارة عن "لعب أطفال" لكن بعد أن يكون قد ضيّع شهور وسنين من عمره في االختراق العشوائي بدون جدوى تذكر‪.‬‬
‫تعلّم مبادئ الشبكات واحتراف التعامل مع أنظمة التشغيل وتعلّم البرمجة أمر ضروري ليصبح الشخص هاكر من االساس‪ ،‬بعد ذلك يأتي تعلّم‬
‫استخدام االدوات التي يستخدمها الهاكرز ثم تعلم استخدام أنظمة الحماية لتعرف كيف تتخطاهم عند الحاجة وهذا يتطلّب دراسة موسّعة وتعلّم‬
‫االمور المنخفضة المستوى وأدق التفاصيل عنها مث ًل في الشبكات لتتعلّم كيف تستخدم نظام لحماية الشبكة فأنت بحاجة إلجادة إدارة سيرفر‬
‫لينوكس أو ويندوز مثال ومعرفة كيفية عمل الشبكات أوال‪ ،‬عندما تف ّكر بتعلّم طرق لتخطي أنظمة الحماية أنت بحاجة الحتراف هذا النظام‬
‫ودراسة مبدأ عمله وقوانينه ثم دراسة بروتوكول ‪ TCP/IP‬واألمور المنخفضة المستوى في تحليل الحزم ‪ Packets‬وهكذا في كل امر تريد‬
‫احترافه والتوسع به‪ .‬ستحتاج لتعلم العديد من األمور بنفس الوقت لتحترف شيء واحد‪.‬‬
‫الحظ أنه عندما تبدأ في مجال الهاكر يجب أن تعلم أنه ال يوجد توقّف! الن عالم الحماية واالختراق يتط ّور بسرعة كبيرة ويجب علك تحديث‬
‫معلوماتك‪ ،‬البرامج واالدوات المستخدمة باإلضافة لألساليب التي نستخدمها أو ًل بأول وإال بعد مرور أقل من سنة واحدة لن يكون هناك قيمة‬
‫فعليّة لألمور التي تعلمتها سابقا ً‪.‬‬

‫‪Hacktivism‬‬
‫هو عملية تعزيز أجندة سياسية عن طريق القرصنة‪ ،‬خاصة عن طريق تشويه أو تعطيل بعض المواقع‪ .‬والشخص الذي يقوم بهذه األشياء‬
‫يسمى ‪ .hacktivist‬أو بمعنى أخر (هذا يشير إلى فكرة القرصنة ألسباب)‪.‬‬
‫هؤالء األشخاص يزدهرون في البيئة حيث توجد المعلومات التي يمكن الوصول إليها بسهولة‪ .‬وهذا يهدف إلى إرسال رسالة من خالل أنشطة‬
‫القرصنة واكتساب الرؤية من أجل قضية معينه‪ .‬ومعظم األهداف إما أن تكون الوكاالت الحكومية‪ ،‬والشركات متعددة الجنسيات‪ ،‬أو أي كيان‬
‫آخر ينظر إليها على أنها كيان سيئ )‪ (bad or wrong‬من وجهة نظر هؤالء األشخاص‪ .‬ولكن يبقى الواقع‪ ،‬أن اكتساب الوصول الغير‬
‫مصرح به هو جريمة‪ ،‬مهما كان القصد من ذلك‪.‬‬
‫أو بمعنى أخر هم يقومون بعملية القرصنة لسبب معين قد يكون بدافع االنتقام‪ ،‬أو أسباب سياسية أو اجتماعية أو إيديولوجية‪ ،‬أو للتخريب‪،‬‬
‫واالحتجاج والرغبة في إذالل الضحايا‪.‬‬

‫كيف يخترق الهاكر المواقع‬


‫يتم ذلك مرورا بمرحلتين أساسيتين‪ :‬جمع المعلومات‪ :‬وأهم هذه المعلومات تكون عنوان الهدف على الشبكة (‪ )IP‬ومعرفة نظام التشغيل‬
‫الموجود على هذا الهدف والسكربات (‪ )Script‬ليفحصها إذا كان فيها ثغرات برمجية (أخطاء يقع فيها مبرمج الـسكربت) وهذه األخطاء أو‬
‫الثغرات تسمح للهاكر بأن يفعل عدة أشياء ممنوعة‪ .‬الهجوم وهي مرحلة يتم فيها استغالل الثغرات واالستغالليات غالبا ما تكون على شكل‬
‫روابط‪ .‬فيقوم الهاكر بالدخول للوحة تحكم المدير أو تطبيق األوامر على السيرفر أو رفع ملفات خبيثة‪.‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪37‬‬

‫دوافع االختراق‪:‬‬
‫إن ظاهرة االختراق لم توجد أساسا للتباهي أو للعبث أو لقضاء أوقات الفراغ بل هي ظاهرة موجهة وجدت لسببين رئيسيين‪ .‬ولكن يمكن حصر‬
‫أسباب االختراق في ثالثة تتوزع كالتالي‪:‬‬

‫الدافع السياسي والعسكري‪:‬‬


‫ما نالحظه حاليا من تطور هائل في الجانب السياسي والعسكري أدى بشكل مباشر إلى االعتماد على تقنيات الحاسب اآللي في هذا المجال‬
‫فابتكرت ظاهرة االختراق أو التجسس لمعرفة أسرار العدو خاصة أن المعلومات تنتقل عبر الشبكة العالمية لألنترنت‪.‬‬

‫الدافع التجاري‪:‬‬
‫من المعروف والجلي الصراع بين كبرى الشركات التي تعيش حربا دائمة فيما بينها‪ ،‬وقد أكدت دراسات حديثة أن هذه الشركات تتعرض إلى‬
‫أكثر من ‪ 12‬محاولة اختراق يوميا‪ ،‬ويعود ذلك لمحاوالت الشركات المنافسة معرفة أسرارها والقيام بتخريب حاسباتها‪.‬‬

‫الدافع الفردي‪:‬‬
‫بدأت أولى محاوالت االختراق بين طالب الجامعات في الواليات المتحدة األمريكية كنوع من التباهي بين الطالب بمهاراتهم في مجال الحاسب‬
‫اآللي‪ ،‬كما كانوا يحاولون اختراق مواقع أصدقائهم‪ .‬ويمكن تلخيص الدافع الفردي كأنه نوع من التباهي أو التحدي أو إلثارة اإلعجاب كما يمكن‬
‫أن يكون بدافع التسلية أو حتى لالنتقام‪.‬‬

‫ما هو ‪Exploit‬؟‬
‫وذلك ألن موضوع المآثر "‪ "exploit‬سوف يتم يتناوله في جميع أنحاء الكتاب‪ ،‬ربما هذا هو الوقت المناسب لتغطية ما هو ‪ exploit‬في‬
‫الواقع‪ .‬إذا كانت إجابة هذا السؤال إجابة قصيرة‪ ،‬فإن الجواب الصحيح هو "االستغالل يمكن أن يكون أي شيء" في األساس‪ ،‬يعتبر أي شيء‬
‫والتي يمكن استخدامها لتقديم تنازالت على آلة هو ‪ .exploit‬نتذكر‪ ،‬ونحن أيضا نستخدم تعريف فضفاض‪ .‬ويمكنه أن يشمل ما يلي‪:‬‬
‫‪Gaining access‬‬
‫‪Simplifying gaining access‬‬
‫‪Taking a system offline‬‬
‫‪Desensitizing sensitive information‬‬
‫على سبيل المثال‪ ،‬المرور على قمامة شركة ما للعثور على معلومات حساسة يمكن اعتبارها ‪ .exploit‬إذا ذهب أحد المهاجمين من خالل‬
‫القمامة ووجد مطبوعة الكمبيوتر ذات سرية عالية حول منتج الشركة الجديد‪ ،‬فانه من الناحية التقنية قام باختراق النظام دون ان يلمسه‪ .‬في‬
‫كثير من األحيان‪ ،‬خبراء األمن يضعون غمامات وينظرون من جانب واحد فقط من األمن‪ .‬من المهم أن نتذكر أن السلسلة ال تكون قوية إال‬
‫بقدر قوة أضعف حلقاتها‪ ،‬وسوف يقوم المهاجم بخرق الحلقة األضعف في أمن الشركة‪ .‬ولذلك‪ ،‬فمن األهمية على المتخصصين في مجال‬
‫األمن اخذ خطوة إلى الوراء والنظر بشكل صحيح ومعالجة القضايا األمن كافة التي قد تواجه الشركة‪.‬‬

‫‪( HACK PHASE 1.1‬مراحل القرصنة)‬


‫هذا يشمل االتي‪:‬‬
‫‪ Reconnaissance .1‬عملية جمع المعلومات (االستطالع)‬
‫‪ Scanning .1‬فحص‬
‫‪ Gaining Access .1‬الدخول إلى الهدف‬
‫‪ Maintaining Access .1‬يحافظ على الدخول‬
‫‪ Clearing Tracks .1‬ينظف أي إشارة له‬

‫‪Reconnaissance‬‬
‫يطلق عليها أيضا ‪ preparatory phase‬أي المرحلة التحضيرية والتي فيها يقوم المهاجم بجمع أكبر قدر ممكن من المعلومات عن الهدف‬
‫لتقيمه قبل تنفيذ هجمته‪ .‬أيضا في هذه المرحلة المهاجم يهتم باالستخبارات التنافسية لمعرفة المزيد عن الهدف‪ .‬هذه المرحلة تشمل أيضا‬
‫‪( network scanning‬فحص الشبكة) سواء من الداخل أو الخارج بدون دخول على النظام‪ .‬هذه المرحلة هي المرحلة التي عن طريقها‬
‫يضع المهاجم استراتيجيات الهجوم والتي من الممكن أن تأخذ بعض الوقت حتى يحصل على المعلومات المهمة‪.‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪38‬‬

‫جزء من هذه المرحلة يشمل الهندسة االجتماعية )‪ .(social engineering‬الهندسة االجتماعية أو ما يعرف بفن اختراق العقول هي عباره‬
‫عن مجموعه من التقنيات المستخدمة لجعل الناس يقومون بعمل ما أو يفصحون عن معلومات سريه‪ .‬وتستخدم في عمليات القرصنة في‬
‫المرحة األولى (مرحلة جمع المعلومات) حيث أن الهدف األساسي للهندسة االجتماعية هو طرح أسئلة بسيطة أو تافهة (عن طريق الهاتف أو‬
‫البريد اإللكتروني مع انتحال شخصية ذي سلطة أو ذات عمل يسمح له بطرح هذه األسئلة دون إثارة الشبهات)‪.‬‬
‫بعض تقنيات الفحص األخرى هي ‪( Dumpster diving‬الغوص في سلة المهمالت) وهي عباره عن عمليه النظر في سلة مهمالت بعض‬
‫المنظمات من اجل الوصول إلى بعض المعلومات الحساسة المستبعدة‪.‬‬
‫المهاجم أيضا يمكنه استخدام شبكة المعلومات األنترنت للحصول على بعض المعلومات مثل معلومات االتصال والشركاء في العمل‬
‫والتكنولوجيا المستخدمة وبعض المعلومات الحساسة األخرى ولكن ‪ dumpster diving‬تدعمك بمعلومات أكثر حساسيه مثل اسم المستخدم‬
‫والرقم السري وأرقام بطاقة االئتمان والحالة المالية ورقم االئتمان االجتماعي وغيرها من المعلومات الحساسة‪.‬‬
‫وينقسم ‪( Reconnaissance‬االستطالع) إلى‪:‬‬
‫‪ :Passive Reconnaissance‬التعامل مع الهدف ولكن بطريقه غير مباشره للحصول على معلومات؛ مثل سجالت البحث العامة‬
‫و نشرات األخبار و الهندسة االجتماعية و ‪ dumpster diving‬وغيرها‪.‬‬
‫‪ :Active reconnaissance‬ينطوي على التفاعل المباشر مع الهدف باستخدام أي وسيلة؛ مثل استخدام األدوات للكشف عن‬
‫المنافذ المفتوحة مكان تواجد الموجه‪/‬الراوتر وهكذا‪.‬‬

‫‪Scanning‬‬
‫المسح هو ما يفعله المهاجم قبل تنفيذ الهجوم‪ .‬ويشير المسح إلى فحص الشبكة للحصول على معلومات محددة على أساس المعلومات التي تم‬
‫جمعها من خالل عملية االستطالع )‪ ،(Reconnaissance‬يستخدم القراصنة المسح للحصول على نقطة دخول (الثغرة) للبدء في الهجوم‪،‬‬
‫وتتضمن عملية المسح مسح المنافد‪ ،‬خرائط الشبكة الضعف األمني‪ ،‬وما إلى ذلك‪.‬‬
‫المهاجم دائما ما يستخدم األدوات الجاهزة مثل ‪ network/host scanner‬و‪ war dialers‬إليجاد النظام واكتشاف الثغرات الذي يحتويها‪.‬‬

‫‪Gaining Access‬‬
‫هذه المرحلة تعتبر اهم مرحله ويطلق عليها أيضا ‪ .potential damage‬وهذه المرحلة تشير إلى مرحلة االختراق‪ ،‬المخترق يستغل‬
‫الضعف في النظام‪ ،‬حيث يمكن أن يحدث ذلك على مستوى شبكة محلية )‪ (LAN‬أو األنترنت أو على مستوى نظام التشغيل أو على مستوى‬
‫التطبيقات‪ ،‬ومن األمثلة على ذلك‪.password cracking ،session hijacking ،denial of service ،buffer overflows :‬‬

‫‪Maintaining Access‬‬
‫تشير إلى المرحلة التي يحاول فيها المخترق حفظ ملكية الدخول مجددا إلى النظام‪ ،‬من خالل وصول حصري باستخدام ‪،Backdoors‬‬
‫‪ ،Rootkits‬أو ‪ ،Trojans‬مما يسمح للمخترق بتحميل ورفع الملفات‪ ،‬والتعامل مع البيانات والتطبيقات على النظام المخترق‬

‫‪Clearing Tracks‬‬
‫تشير إلى األنشطة التي يقوم بها المخترق إلخفاء دخوله إلى النظام‪ ،‬بسبب الحاجة للبقاء لفترات طويلة‪ ،‬ومواصلة استخدام الموارد‪ ،‬وتشتمل‬
‫إخفاء بيانات الدخول والتغيير في ملف ‪.Log‬‬

‫‪( TYPE OF ATTACKS 1.1‬أنواع الهجمات)‬


‫هناك العديد من الطرق التي تمكن المهاجم من الدخول إلى النظام‪ .‬ويجب أن يكون الهاكر قادرا على اكتشاف نقاط الضعف والثغرات في‬
‫النظام حتى يتمكن من الدخول‪ .‬ومن هذه الطرق كاالتي‪:‬‬
‫‪ :Operating System attacks-1‬حيث هنا يبحث المهاجم عن ثغرات في نظام التشغيل )‪ (OS vulnerabilities‬ويستخدم‬
‫هذه الثغرات للدخول إلى نظام الشبكة‪.‬‬
‫‪ :Application-level attacks-0‬إن معظم التطبيقات‪/‬البرامج تأتي مع وظائف وميزات ال تعد وال تحصى‪ .‬ولكن مع ندرة من‬
‫الوقت إلجراء اختبار كامل قبل خروج المنتج إلى السوق‪ .‬يؤدى الى ان هذه التطبيقات يكون لديها بعض من نقاط الضعف المختلفة والتي قد‬
‫تصبح مصدرا للهجوم من قبل الهاكر‪.‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪39‬‬

‫‪ :Misconfiguration attacks-3‬معظم مديري األنظمة )‪ (Admin‬ال يملكون المهارات الضرورية من اجل صيانة أو‬
‫إصالح بعض المسائل‪/‬القضايا‪ ،‬والتي من الممكن أن تؤدى إلى أخطاء في عمليات اإلعداد‪ .‬بعض هذه األخطاء من الممكن أن تكون مصدرا‬
‫للمهاجم للدخول إلى الشبك هاو النظام الذي يستهدفه‪.‬‬
‫‪ :Shrink wrap code attacks-4‬تطبيقات أنظمة التشغيل تأتى بالعديد من ملفات االسكريبت المبسطة لكي تسهل العمل على‬
‫مديري األنظمة )‪ ،(Admin‬ولكن مثل هذه االسكريبات تحتوي أيضا على العديد من الثغرات والتي من الممكن أن تؤدى إلى هذ النوع من‬
‫الهجوم‪.‬‬
‫‪Operating System Attacks-1‬‬
‫أنظمة التشغيل‪ ،‬والتي يتم تحميلها اليوم مع الكثير من المميزات‪ ،‬أصبحت تزداد تعقيدا‪ .‬ومع االستفادة من الكثير من هذه المميزات التي‬
‫توفرها هذه األنظمة من قبل المستخدمين‪ ،‬تجعل النظام عرضة لمزيد من الثغرات‪ ،‬وبالتالي عرضه للقرصنة‪ .‬أنظمة التشغيل تعمل على‬
‫تشغيل العديد من الخدمات مثل واجهات المستخدم الرسومية )‪ .(GUI‬وهذه تدعم استخدام المنافذ ‪ ports‬وطريقة الوصول إلى شبكة‬
‫اإلنترنت‪ ،‬لذلك فهذه تتطلب الكثير من التغير والتبديل للتحكم في هذا‪ .‬هنا يبحث المهاجم عن ثغرات في نظام التشغيل (‪)OS vulnerabilities‬‬
‫ويستخدم هذه الثغرات للدخول إلى نظام الشبكة‪ .‬إليقاف المهاجمين من الدخول إلى شبكة االتصال الخاصة بك‪ ،‬فإن مسؤولي الشبكة أو النظام‬
‫البد لهم من مواكبة االكتشافات والطرق الجديدة المختلف والمتبعة من قبل المهاجمين ومراقبة الشبكة بشكل مستمر‪ .‬تطبيق التصحيحات‬
‫واإلصالحات ليست سهلة في الوقت الحاضر ألنها شبكة معقده‪.‬‬
‫معظم مستخدمي أنظمة التشغيل يقومون بتثبيت العديد من التطبيقات والتي تقوم بعضها بفتح بعض المنافذ ‪ ports‬افتراضيا‪ .‬والتي تسهل على‬
‫المهاجمين من اكتشاف العديد من الثغرات‪ .‬تثبيت الباتشات ‪ patches‬وملفت اإلصالح ‪ fix-file‬لم يعد سهال مع تعقيدات الشبكة الموجودة في‬
‫هذه األيام‪ .‬وأيضا معظم الباتشات تعمل على حل المشاكل والثغرات الحالية ولكن ال يمكن اعتباره الحل الدائم‪.‬‬
‫بعض من هذه الهجمات تشمل االتي‪:‬‬
‫‪Buffer overflow vulnerabilities‬‬ ‫‪Bugs in the operating system‬‬
‫‪Unpatched operating system‬‬ ‫‪exploiting specific network protocol implementation‬‬
‫‪Attacking built-in authentication systems breaking file system security‬‬
‫‪Cracking passwords and encryption mechanisms‬‬

‫‪Application-Level Attacks-1‬‬
‫يتم إصدار التطبيقات إلى سوق العمل مع العديد من المميزات والعديد من األكواد المعقدة‪ .‬ومع الطلب المتزايد للتطبيقات لما تحمله من وظائف‬
‫وميزات‪ ،‬أدى إلى إهمال مطوري التطبيقات الوضع األمني للتطبيق‪ ،‬والذي أعطى الفرصة لوجود العديد من الثغرات‪ .‬الهاكر يعمل على‬
‫اكتشاف هذه الثغرات الموجود في التطبيقات باستخدام العديد من األدوات والتقنيات‪.‬‬
‫التطبيقات لما بها من ثغرات تصبح عرض للهجمات من قبل الهاكر نتيجة األسباب األتية‪:‬‬
‫‪ .1‬لمطوري البرامج الجداول الزمنية الضيقة لتسليم المنتجات في الوقت المحدد (‪ )tight schedules to deliver‬والذي يؤدى إلى‬
‫ظهور التطبيقات في سوق العمل بدون االختبارات الكافية عليه‪.‬‬
‫‪ .1‬تطبيقات البرامج تأتى مع العديد من الوظائف والمزايا‪.‬‬
‫‪ .1‬ليس هناك ما يكفي من الوقت ألداء اختبار كامل قبل اإلفراج عن المنتجات )‪.(dearth of time‬‬
‫‪ .1‬األمن في كثير من األحيان تكون مرحلة الحقة‪ ،‬ويتم تسليمها فيما بعد باعتبارها عناصر إضافية )‪.(add-on component‬‬
‫ضعف أو عدم وجود فحص الخطأ )‪ (poor or nonexistent error checking‬في التطبيقات امر يؤدى إلى االتي‪:‬‬
‫‪( Buffer overflow attacks .1‬الهجوم بإغراق ذاكرة التخزين المؤقت)‬
‫‪Active content .1‬‬
‫‪Cross-site scripting .1‬‬
‫‪Denial-of service and SYN attacks .1‬‬
‫‪SQL injection attacks .1‬‬
‫‪Malicious bots .2‬‬
‫بعض الهجمات األخرى التي تكون على مستوى التطبيقات كاالتي‪:‬‬
‫‪Phishing .1‬‬
‫‪Session hijacking .1‬‬
‫‪Man-in-the middle attacks .1‬‬
‫‪Parameter/from tampering .1‬‬
‫‪Directory traversal attacks .1‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪40‬‬

‫امثله على الهجمات على مستوى التطبيقات‪:‬‬


‫‪Session Hijacking-1‬‬

‫‪denial of service-0‬‬

‫‪Misconfiguration Attacks-3‬‬
‫نقاط الضعف في اإلعداد )‪ (misconfiguration‬يؤثر على ملقمات‪/‬سيرفرات الويب‪ ،‬ومنصات التطبيق‪ ،‬وقواعد البيانات‪ ،‬والشبكات‪ ،‬أو‬
‫اإلطارات)‪ (framework‬التي قد تؤدي إلى الدخول‪ /‬الغير المشروع ‪ illegal access‬أو احتمالية امتالك النظام‪ .‬إذا تم إعداد النظام بشكل‬
‫خاطئ‪ ،‬مثل عندما يتم تغيير في تصريحات‪/‬أذونات الملف‪ ،‬فيؤدى إلى جعله غير آمن‪.‬‬

‫‪Shrink Wrap Code Attacks-4‬‬


‫عند تثبيت نظام التشغيل أو التطبيقات فانه يأتي مع العديد من االسكريبات والتي تسهل على ‪ Admin‬التعامل معها‪ .‬ولكن المشكلة هنا "هى‬
‫ضبط " أو تخصيص هذه االسكريبات التي من الممكن أن تؤدى إلى الرموز االفتراضية أو هجوم ‪.shrink-wrap code‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪41‬‬

‫إذا كان المتسلل هو أو هي يريد الدخول على النظام الخاص بك فانت لن تستطيع أن تفعل شيء أمام هذا ولكن الشيء الوحيد الذي يمكنك‬
‫القيام به هو جعل األمر أكثر صعوبة عليه للحصول على نظامك‪.‬‬

‫‪( Information Security Control 1.1‬التحكم في امن المعلومات)‬


‫لماذا الهاكر األخالقي ضروري ومهم؟‬
‫هناك نمو سريع في مجال التكنولوجيا‪ ،‬لذلك هناك نمو في المخاطر المرتبطة بالتكنولوجيا‪ ،‬والقرصنة األخالقية يساعد على التنبؤ بمختلف‬
‫نقاط الضعف المحتملة في وقت مبكر وتصحيحها دون تكبد أي نوع من الهجمات القادمة من الخارج‪.‬‬
‫القرصنة األخالقية )‪ :(ethical hacking‬مثل القرصنة يشمل التفكير اإلبداعي‪ ،‬واختبار مواطن الضعف والتدقيق األمني الذي ال يمكنه‬
‫التأكد من أن الشبكة آمنة‪.‬‬

‫استراتيجية الدفاع من العمق )‪ :(Defense-in-Depth Strategy‬لتحقيق ذلك‪ ،‬تحتاج المنظمات لتنفيذ استراتيجية "الدفاع من العمق"‬
‫عن طريق اختراق شبكاتهم لتقدير مواطن الضعف وعرضهم لهذه‪.‬‬

‫الهجوم المضاد )‪ :(Counter the Attacks‬الهاكر األخالقي هو ضروري ألنه يسمح بمجابهة الهجمات التي يشنها القراصنة الخبيثة‬
‫بطريقة التوقع )‪ (anticipating methods‬والتي يمكن استخدامها القتحام نظام‪.‬‬

‫المخترق األخالقي يحاول أن يجاوب على األسئلة التالية‪:‬‬


‫ماذا يمكن أن يرى الدخيل على نظام الهدف؟‬
‫مراحل االستطالع والمسح )‪(reconnaissance and scanning‬‬
‫ما الذي يمكن أن يقوم به المتسلل بهذه المعلومات؟‬
‫مراحل الوصول والمحافظة على الوصول )‪(Gaining Access and Maintaining Access‬‬
‫هل يوجد دخيل على النظام؟‬
‫مراحل االستطالع وتغطية األثر )‪(reconnaissance and covering tracks‬‬
‫هل جميع أجزاء نظام المعلومات يتم حمياتها وتحديثها وتمكين الباتشات باستمرار؟‬
‫هل مقايس امن المعلومات ممتثله لمعاير الصناعة والقانون؟‬
‫لماذا تقوم المؤسسات بتعين المخترقين األخالقيين؟‬
‫‪ .1‬لمنع القراصنة من الدخول إلى قسم المعلومات‪.‬‬
‫‪ .1‬لمكافحة اإلرهاب ومخالفات األمن القومي‪.‬‬
‫‪ .1‬لبناء نظام يكون قادر على تفادى هجمات القراصنة‪.‬‬
‫‪ .1‬الختبار الوضع األمني للمؤسسات والمنظمات‪.‬‬
‫نطاق وحدود القراصنة األخالقيين )‪(Scope and Limitations of The Ethical Hackers‬‬

‫‪Scope‬‬
‫ما يلي نطاق القرصنة األخالقية‪:‬‬
‫‪ ‬القرصنة األخالقية هو عنصر حاسم لتقييم المخاطر‪ ،‬ومراجعة الحسابات‪ ،‬ومكافحة االحتيال‪ ،‬وأفضل الممارسات‪ ،‬والحكم الجيد‪.‬‬
‫‪ ‬يتم استخدامه لتحديد المخاطر وتسليط الضوء على اإلجراءات العالجية‪ ،‬والحد من تكاليف تكنولوجيا المعلومات واالتصاالت‬
‫)‪ (ICT‬عن طريق إيجاد حل لتلك الثغرات‪.‬‬

‫‪Limitations‬‬
‫ما يلي حدود القرصنة األخالقية‪:‬‬
‫ما لم تعرف الشركات أوال ما الذي يبحثون عنه‪ ،‬ولماذا يتعاقدون مع مورد خارجي الختراق األنظمة في المقام األول؛ وهناك‬ ‫‪‬‬
‫احتماالت بأن لن يكون هناك الكثير لتكسبه من خبرة‪.‬‬
‫لذا القراصنة األخالقيين الوحيدين الذين يمكنهم أن يساعدوا المنظمات لفهم أفضل ألوضاعهم األمنية‪ ،‬ولكن األمر متروك للمنظمة‬ ‫‪‬‬
‫لوضع الضمانات األمنية على الشبكة‪.‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪42‬‬

‫مهارات الهاكر األخالقي ‪:Ethical Hacker Skills‬‬


‫القرصنة األخالقية هي عملية قانونيه يتم تنفيذها بواسطة ‪ pen tester‬إليجاد نقاط الضعف في بيئة تكنولوجيا المعلومات‪ .‬ولكي يتم هذا يجب‬
‫أن يتمتع الهاكر األخالقي ببعض المهارات كاالتي‪:‬‬
‫‪ .1‬خبير في مجال الحوسبة وبارع في مجاالت التقنية‪.‬‬
‫‪ .1‬يملك معلومات قوية في علم البرمجة والشبكات‪.‬‬
‫‪ .1‬معرفته المتعمقة لألشياء المستهدفة‪ ،‬مثل ويندوز ويونكس ولينكس‪.‬‬
‫‪ .1‬لدية معرفة مثالية إلقامة الشبكات واألجهزة ذات الصلة والبرمجيات‪.‬‬
‫‪ .1‬لدية معرفة مثالية في األجهزة والتطبيقات التي قدمت عن طريق بائعي الكمبيوتر وأجهزة الشبكات ذات شعبية‪.‬‬
‫‪ .2‬ليس من الضروري أن يحمل معرفه إضافية متخصصة في الوضع األمني‪.‬‬
‫‪ .2‬ينبغي أن يكون على دراية ببحوث الثغرات‪.‬‬
‫‪ .1‬ينبغي أن يكون لديه السيادة في مختلف تقنيات االختراق أو القرصنة‪.‬‬
‫‪ .2‬ينبغي أن يكون على استعداد التباع سلوك صارم إذا احتاج األمر لهذا‪.‬‬
‫‪( Defense-In-Depth‬الدفاع من العمق)‬
‫يتم اتخاذ العديد من التدابير المضادة للدفاع من العمق )‪ (Defense-in-Depth‬لحماية أصول المعلومات في الشركة‪ .‬وتستند هذه‬
‫االستراتيجية على مبدأ عسكري أنه من الصعب على العدو هزيمة نظام دفاعي معقد ومتعدد الطبقات من اختراق حاجز واحد‪ .‬إذا حدث‬
‫واستطاع الهاكر الوصول إلى النظام‪ ،‬فإن الدفاع من العمق )‪ (Defense-in-Depth‬يقلل التأثير السلبي ويعطي اإلداريين والمهندسين‬
‫الوقت لنشر مضادات جديدة أو محدثة لمنع تكرار هذا االختراق مرة أخرى‪.‬‬

‫الدفاع من العمق )‪ (Defense-in-Depth‬هي استراتيجية األمن التي توضع عدة طبقات واقية في جميع أنحاء نظام المعلومات‪.‬‬ ‫‪‬‬
‫يساعد على منع وقوع هجمات مباشرة ضد نظام المعلومات والبيانات بسبب كسر طبقة واحدة ال يؤدي إال انتقال المهاجم إلى‬ ‫‪‬‬
‫الطبقة التالية‪.‬‬

‫‪( Incident Management Process‬عملية اإلدارة الطارئة)‬


‫هي مجموعة من العمليات المحددة لتحديد وتحليل‪ ،‬وتحديد األولويات‪ ،‬وتسوية الحوادث األمنية الستعادة النظام إلى عمليات الخدمة العادية‬
‫في أقرب وقت ممكن ومنع تكرار نفس الحادث‪.‬‬

‫الغرض من عملية إدارة الحوادث كاالتي‪:‬‬


‫‪( improves service quality ‬تحسين جودة الخدمة)‬
‫‪( Pro-active problem resolution ‬حل المشاكل االستباقية)‬
‫‪( Reduces impact of incidents on business/organization ‬يقلل من تأثير الحوادث على األعمال التجارية‪/‬المنظمات)‬
‫‪( Meets service availability requirements ‬يلتقي متطلبات الخدمة المتوافرة)‬
‫‪( Increases staff efficiency and productivity ‬يزيد من كفاءة الموظفين وإنتاجيتهم)‬
‫‪( Improves user/customer satisfaction ‬يحسن رضا المستخدم ‪ /‬العمالء)‬
‫‪( Assists in handling future incidents ‬يساعد في التعامل مع الحوادث في المستقبل)‬
‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪43‬‬

‫يتم التعامل مع أي حادث وقع في مؤسسة ما وحلها باتباع الخطوات التالية من قبل إدارة الحوادث‬

‫‪ Information Security Policies‬سياسات أمن المعلومات‬


‫سياسة األمن )‪ :(Security Policy‬هو وثيقة أو مجموعة من الوثائق التي تصف الضوابط األمنية التي ينبغي تنفيذها في الشركة على‬
‫مستوى عالي لحماية الشبكة التنظيمية من الهجمات سواء من الداخل أو الخارج‪ .‬تحدد هذه الوثيقة الهيكل األمني الكامل للمنظمة‪ ،‬وتشمل‬
‫الوثيقة أهداف واضحة‪ ،‬واألهداف والقواعد واألنظمة واإلجراءات الرسمية‪ ،‬وهلم جرا‪.‬‬
‫هذه السياسات من الواضح إنها تذكر األصول التي ينبغي حمايتها والشخص الذي يمكنه تسجيل الدخول والوصول إليها‪ ،‬الذين يمكن عرض‬
‫البيانات المحددة‪ ،‬فضال عن الناس الذين يسمح لهم بتغيير البيانات‪ ،‬وما إلى ذلك‪ .‬من دون هذه السياسات‪ ،‬فإنه من المستحيل حماية الشركة‬
‫من الدعاوى القضائية المحتملة‪ ،‬العائدات المفقودة‪ ،‬وهلم جرا‪.‬‬
‫عرف االستخدام المقبول أو المرضي لجميع الوسائط اإللكترونية في المنظمة‪.‬‬
‫على وجه العموم سياسة األمن هي الخطة التي ت ّ‬
‫سياسات األمن هي أساس البنية التحتية األمنية )‪ .(Security infrastructure‬هذه السياسات تعمل على تأمين وحماية موارد المعلومات‬
‫للمؤسسة وتوفير الحماية القانونية للمنظمة‪ .‬هذه السياسات مفيدة في المساعدة في تحقيق الوعي للموظفين العاملين في المؤسسة على العمل‬
‫معا لتأمين اتصاالتهم‪ ،‬وكذلك التقليل من مخاطر ضعف األمن من خالل عامل األخطاء البشرية مثل الكشف عن معلومات حساسة إلى‬
‫مصادر غير مصرح بها أو غير معروفه‪ ،‬االستخدام الغير الئق لإلنترنت‪ ،‬وما إلى ذلك‪ .‬باإلضافة إلى ذلك‪ ،‬توفر هذه السياسات الحماية ضد‬
‫الهجمات اإللكترونية والتهديدات الخبيثة‪ ،‬واالستخبارات األجنبية‪ ،‬وهلم جرا‪ .‬أنها تتناول أساسا األمن المادي‪ ،‬وأمن الشبكات‪ ،‬أذون الدخول‪،‬‬
‫الحماية من الفيروسات‪ ،‬والتعافي من الكوارث‪.‬‬
‫أهداف السياسات األمنية )‪:(Security Policies‬‬
‫‪ ‬الحفاظ على الخطوط العريضة لتنظيم وإدارة أمن الشبكات‪.‬‬
‫‪ ‬حماية موارد الحوسبة للمنظمة‪.‬‬
‫‪ ‬القضاء على المسؤولية القانونية من الموظفين أو أي طرف ثالث‪.‬‬
‫‪ ‬ضمان سالمة العمالء ومنع إهدار موارد الحوسبة الخاصة بالشركة‪.‬‬
‫‪ ‬منع التعديالت الغير المصرح به على البيانات‪.‬‬
‫‪ ‬الحد من المخاطر الناجمة عن االستخدام الغير مشروع لموارد النظام وفقدان البيانات السرية والحساسة والممتلكات المحتملة‪.‬‬
‫‪ ‬التفريق في حقوق الوصول بالنسبة للمستخدم‪.‬‬
‫‪ ‬حماية سرية المعلومات الشخصية من السرقة أو سوء االستخدام‪ ،‬أو الكشف الغير مصرح به‪.‬‬
‫‪( Classification of Security Policy‬تصنيف السياسة األمنية)‬
‫إن استراتيجية أمن المعلومات‪ ،‬أو سياسة أمن المعلومات هي مجموعة من القواعد التي يطبقها األشخاص عند التعامل مع التقنية ومع‬
‫المعلومات داخل المنشأة وتتصل بشؤون الدخول إلى المعلومات والعمل على نظمها وإدارتها‪.‬‬
‫إلدارة أمنية فعالة‪ ،‬فإن السياسات األمنية يتم تصنيفها إلى خمسة مجاالت مختلفة كاالتي‪:‬‬
‫‪( User Policy ‬السياسات األمنية للمستخدم)‬

‫هي تتعلق بالموظفين العاملين على النظام التقني‪ .‬المعني من حيث توفير وسائل التعريف الخاصة بكل منهم‬ ‫‪‬‬
‫وتحقيق التدريب والتأهيل للمتعاملين بوسائل األمن إلى جانب الوعي بمسائل األمن ومخاطر االعتداء على‬
‫المعلومات‪ .‬مثال على ذلك‪.password management policy :‬‬
‫‪IT Policy ‬‬
‫هذا الجزء مصمم لقسم تكنولوجيا المعلومات للحفاظ على الشبكة آمنة ومستقرة‪.‬‬ ‫‪‬‬
‫مثال على ذلك‪modification policy، patch updates، server configuration،backup policies :‬‬ ‫‪‬‬
‫‪General policies ‬‬
‫تحديد المسؤولية لألغراض التجارية العامة‪.‬‬ ‫‪‬‬
‫مثال على ذلك‪crisis management، business continuity plans،high-level program policy :‬‬ ‫‪‬‬
‫‪Partner policy ‬‬
‫السياسة التي يتم تعريفها ضمن مجموعة من الشركاء‪.‬‬ ‫‪‬‬
‫‪Issue-specific policies ‬‬
‫يتم تعريف مجاالت محددة للقلق ووصف وضع المنظمة من أجل اإلدارة على مستوى عالي‪.‬‬ ‫‪‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪44‬‬

‫مثال على ذلك‪personnel security policy ،Physical security policy :‬‬ ‫‪‬‬
‫هيكل ومحتوي السياسات األمنية ‪Structure and Contents Of Security Policies‬‬
‫هيكل السياسات األمنية )‪(Structure of Security Policy‬‬
‫سياسة األمن هو المستند الذي يوفر الوسيلة لتأمين األجزاء المادية للشركة‪ ،‬الخاصة بالموظفين والبيانات من التهديدات أو االختراقات‬
‫األمنية‪ .‬ينبغي تنظيم السياسات األمنية بعناية فائقة وينبغي إعادة النظر بشكل صحيح للتأكد من أنه ال توجد صيغة يمكن لشخص ما االستفادة‬
‫منها‪ .‬وينبغي أن يشمل الهيكل األساسي للسياسات األمنية العناصر التالية‪:‬‬
‫وصف تفصيلي لقضايا السياسات األمنية‪.‬‬ ‫‪‬‬
‫وصف لحالة السياسة األمنية‬ ‫‪‬‬
‫تطبيق السياسة األمنية‪.‬‬ ‫‪‬‬
‫تحديد وظائف المتضررين من السياسة‪.‬‬ ‫‪‬‬
‫عواقب محددة من شأنها أن تحدث إذا كانت السياسة غير متوافقة مع المعايير التنظيمية‪.‬‬ ‫‪‬‬
‫محتوي السياسات األمنية (‪)Contents of security policy‬‬
‫‪ ‬المتطلبات لوضع مستوى عالي من سياسات األمن ‪ :high-level security requirements‬هذا يوضح متطلبات النظام لوضع‬
‫السياسات األمنية التي سيتم تنفيذها‪ .‬وهذا يشمل أربعة متطلبات كاالتي‪:‬‬

‫المتطلبات النضباط األمن ‪ :Discipline security requirements‬هذه المتطلبات تشمل السياسات األمنية المختلفة‬ ‫‪‬‬
‫مثل أمن االتصاالت‪ ،‬وأمن الحاسوب‪ ،‬وأمن العملية‪ ،‬االنبثاق األمن‪ ،‬وأمن الشبكات‪ ،‬وأمن األفراد‪ ،‬وأمن المعلومات‬
‫واألمن المادي‪.‬‬
‫المتطلبات للحفاظ على األمن ‪ :safeguard security requirement‬هذه المتطلبات تحتوي أساسيا على التحكم في‬ ‫‪‬‬
‫الوصول‪ ،‬األرشيف‪ ،‬والتدقيق ‪ ،audit‬المصداقية ‪ ،authenticity‬التوافر‪ ،‬السرية‪ ،‬التشفير‪ ،‬التحديد والتوثيق‪ ،‬النزاهة‬
‫‪ ،integrity‬الواجهات‪ ،‬وضع العالمات‪ ،‬عدم األنكار‪ ، non-repudiation‬إعادة استخدام كائن‪، object reuse‬‬
‫االسترجاع ‪ ،recovery‬والحماية من الفيروسات‪.‬‬
‫المتطلبات إلجراء سياسات األمن ‪ :procedural security requirement‬هذه المتطلبات تحتوي أساسيا على‬ ‫‪‬‬
‫سياسات الدخول‪/‬الوصول‪ ،‬وقواعد المساءلة‪ ،‬وخطط ووثائق استمرارية العمليات )‪(continuity-of-operations‬‬
‫ضمان األمن ‪ :assurance security‬وهذا يشمل عرض شهادات التصديق واالعتماد ووثائق التخطيط المستخدمة في‬ ‫‪‬‬
‫عملية الضمان‪.‬‬
‫‪ ‬الوصف لهذه السياسات ‪ :Policy Description‬يركز على التخصصات األمنية‪ ،‬والضمانات واإلجراءات واستمرارية العمليات‪،‬‬
‫والوثائق‪ .‬حيث يصف كل جزئية من هذا الجزء من السياسة كيفية قيام معمارية النظام في فرض األمن‪.‬‬
‫‪ ‬المفهوم أألمني للعمليات ‪ :security concept of operation‬يعرف أساسا األدوار والمسؤوليات ومهام سياسة األمن‪ .‬ألنها تركز‬
‫على المهمة‪ ،‬واالتصاالت‪ ،‬والتشفير‪ ،‬وقواعد المستخدم والصيانة‪ ،‬وإدارة الوقت الضائع‪ ،‬واستخدام البرمجيات المملوكة للقطاع الخاص‬
‫مقابل برمجيات الدومين العام‪ ،‬وقواعد إدارة البرامج التجريبية‪ ،‬وسياسة الحماية من الفيروسات‪.‬‬

‫‪ ‬تخصيص األمن لتطبيقه على عناصر المعمارية ‪ :allocation of security enforcement to architecture elements‬يوفر‬
‫تخصيص بنية نظام الكمبيوتر إلى كل نظام من البرنامج‪.‬‬
‫أنواع السياسات األمنية )‪(Types Of Security Policy‬‬
‫سياسة األمن هي عباره عن مستند يحتوي على معلومات عن طريقة وتخطط الشركة لحماية أصول المعلومات الخاصة بها من التهديدات‬
‫المعروفة والغير معروفة‪ .‬هذه السياسات تساعد على الحفاظ على سرية‪ ،‬وتوافر‪ ،‬وسالمة المعلومات‪ .‬يوجد أربعة أنواع رئيسية من‬
‫السياسات األمنية هي كما يلي‪:‬‬
‫‪ Promiscuous Policy )1‬سياسه خفيفة‪ :‬تتميز هذه السياسة بعدم وجود أي قيود على الوصول إلى اإلنترنت‪ .‬يمكن للمستخدم‬
‫الوصول إلى أي موقع‪ ،‬وتحميل أي تطبيق‪ ،‬والوصول إلى كمبيوتر أو شبكة من موقع بعيد‪ .‬في حين أن هذا يمكن أن يكون مفيدا‬
‫في األعمال التجارية للشركات حيث كان الناس الذين يسافرون أو العمل في المكاتب الفرعية تحتاج إلى الوصول إلى شبكات‬
‫تنظيمية‪ ،‬العديد من التهديدات مثل البرمجيات الخبيثة )‪ ،(malware‬والفيروسات‪ ،‬وطروادة موجودة على شبكة األنترنت‪ .‬بسبب‬
‫حرية الوصول إلى اإلنترنت‪ ،‬وهذه البرمجيات الخبيثة )‪ (malware‬من الممكن أن تأتي كمرفقات دون علم المستخدم‪ .‬يجب أن‬
‫يكون مسؤولي الشبكة في حالة تأهب للغاية إذا ما تم اختيار هذا النوع من السياسة‪.‬‬
‫‪ Permissive Policy )1‬سياسه متساهلة‪ :‬يتم قبول أغلبية حركة المرور )‪ (internet traffic‬على اإلنترنت‪ ،‬ولكن يتم حظر‬
‫العديد من الخدمات والهجمات الخطيرة المعروفة‪ .‬وألنه يعمل على حظر الهجمات المعروفة فقط‪ ،‬فإنه من المستحيل لمسؤولي‬
‫النظام مواكبة التطور الحالي في الهجمات‪ .‬اإلداريين يحاولون دائما اللحاق بالركب بمعرفة الهجمات واالختراقات الجديدة‪.‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪45‬‬

‫‪ Prudent Policy )1‬سياسه حكيمه‪ :‬تبدأ هذه السياسة بحظر كافة الخدمات‪ .‬مسؤولي النظام )‪ (administrator‬يمكنوا فقط‬
‫الخدمات األمنة والضرورية بشكل فردي‪ .‬وهذا يوفر أقصى قدر من األمان‪ .‬كل شيء مثل أنشطة النظام والشبكة يتم تسجيله‪.‬‬
‫‪ Paranoid Policy )1‬سياسه مرهبه‪ :‬تبدأ هذه السياسة بمنع كل شيء‪ .‬هناك قيود صارمة على استخدام أجهزة الكمبيوتر الخاصة‬
‫بالشركة‪ ،‬سواء كان استخدام النظام أو استخدام الشبكة‪ .‬بسبب هذه القيود على الملقم ‪ server‬بشكل مفرط‪ ،‬فإن المستخدمين غالبا‬
‫ما يحاولون إيجاد السبل حول هذه السياسة‪.‬‬
‫الخطوات إلنشاء وتطبيق السياسات األمنية )‪(Steps To Create And Implement Security Policies‬‬
‫تنفيذ السياسات األمنية يقلل من خطر التعرض لهجوم‪ .‬وبالتالي‪ ،‬يجب أن يكون كل شركة السياسات األمنية الخاصة التي تقوم على أعمالها‪.‬‬
‫وفيما يلي الخطوات التي يجب أن تتبعها كل مؤسسة من أجل وضع وتنفيذ السياسات األمنية‪:‬‬
‫‪ .1‬تنفيذ لعملية تقييم المخاطر لتحديد المخاطر إلى أصول معلومات المنظمة‪.‬‬
‫‪ .1‬التعلم من المبادئ التوجيهية القياسية وغيرها من المنظمات‪.‬‬
‫‪ .1‬في وضع السياسات فإنها تشمل اإلدارة العليا وجميع الموظفين اآلخرين‪.‬‬
‫‪ .1‬تعيين عقوبات واضحة وتنفيذها وأيضا مراجعة وتحديث السياسة األمنية‪.‬‬
‫‪ .1‬جعل النسخة النهائية متاحة لجميع الموظفين في المنظمة‪.‬‬
‫‪ .2‬ضمان كل فرد من الموظفين أن يقوم بقرائه‪ ،‬وفهم السياسة‪.‬‬
‫‪ .2‬تثبيت األدوات التي تحتاجها لتطبيق سياسة‪.‬‬
‫‪ .1‬تدريب موظفيك وتثقيفهم حول السياسة‪.‬‬
‫أمثله على السياسات األمنية كاالتي‪:‬‬
‫وفيما يلي بعض األمثلة على السياسات األمنية التي تم إنشاؤها‪ ،‬وتم قبولها‪ ،‬واستخدامها من قبل المنظمات في جميع أنحاء العالم لتأمين‬
‫أصولها ومواردها الهامة‪.‬‬
‫‪Acceptable-Use Policy ‬‬
‫يحدد االستخدام المقبول لموارد النظام‪.‬‬
‫‪User-Account policy ‬‬
‫يحدد عمليات إنشاء الحساب )‪ .(account‬يحدد السلطة‪ ،‬والحقوق‪ ،‬والمسؤوليات الخاصة بحسابات المستخدمين‪.‬‬
‫‪Remote-Access Policy ‬‬
‫يحدد من له الصالحية في استخدام االتصال عن بعد‪ ،‬ويحدد الضوابط األمنية لهذا االتصال عن بعد‪.‬‬

‫‪Information-Protection Policy ‬‬


‫يحدد مستويات حساسية المعلومات‪ ،‬ومن الذي يتاح له الوصول لهذه المعلومات؟ وكيف يتم تخزينها ونقلها؟ وكيف ينبغي حذفها من وسائط‬
‫التخزين؟‬
‫‪Firewall-Management Policy ‬‬
‫يحدد وصول‪ ،‬وإدارة‪ ،‬ورصد الجدران النارية في المنظمات‪.‬‬
‫‪Special-access Policy ‬‬
‫تحدد هذه السياسة أحكام وشروط منح وصول خاص إلى موارد النظام‪.‬‬
‫‪Network-Connection Policy ‬‬
‫يحدد الذين يمكنهم تثبيت موارد جديدة على الشبكة‪ ،‬والموافقة على تركيب األجهزة الجديدة‪ ،‬وتوثيق تغيرات الشبكة‪ ،‬الخ‪.‬‬
‫‪Email Security Policy ‬‬
‫أنشأت لتحكم االستخدام السليم للبريد اإللكتروني للشركات‪.‬‬
‫‪Password Policy ‬‬
‫يوفر مبادئ توجيهية الستخدام كلمة مرور قوية على موارد المنظمة لحمايتها‪.‬‬
‫بحوث في الثغرات األمنية )‪(Research Vulnerability Security‬‬
‫‪ Research Vulnerability‬هي تقنيات يستخدمها مختبري االختراق الكتشاف الثغرات وضعف التصميم التي يمكن من خاللها الهجوم‬
‫على التطبيقات و أنظمه التشغيل‪ ،‬وتشمل الدراسة الديناميكية للمنتجات والتقنيات و التقييم المستمر إلمكانية االختراق‪ .‬هذه البحوث تساعد كل‬
‫من مسئولي األمن والمهاجمين‪ .‬ويمكن تصنيفها على أساس‪:‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪46‬‬

‫مستوى الخطورة (منخفضة‪ ،‬متوسطة‪ ،‬أو عالية)‬ ‫‪‬‬


‫استغالل النطاق (محلي)‪ ،(local‬عن بعد)‪.)(remotely‬‬ ‫‪‬‬
‫وتستخدم هذه التقنية‪:‬‬
‫‪ ‬لتحديد وتصحيح نقاط ضعف الشبكة‪.‬‬
‫‪ ‬لحماية الشبكة من التعرض للهجوم من قبل الدخالء‪.‬‬
‫‪ ‬للحصول على المعلومات التي تساعد على منع المشاكل األمنية‪.‬‬
‫‪ ‬لجمع المعلومات حول الفيروسات‪.‬‬
‫‪ ‬للعثور على نقاط الضعف في الشبكة وتنبيه مدير الشبكة قبل حصول الهجوم‪.‬‬
‫‪ ‬لمعرفة كيفية التعافي من الهجوم‪.‬‬
‫أدوات الوصول الى األبحاث عن الضعف ‪Vulnerability Research Website‬‬
‫‪CodeRed Center .1‬‬
‫المصدر‪http://www.eccouncil.org :‬‬
‫هو مصدر امنى شامل لمسؤولي النظام )‪ (admin‬والتي يمكنها أن تعطيك تقرير يومي ودقيق وأحدث المعلومات عن أحدث الفيروسات‪،‬‬
‫وأحصنة طروادة‪ ،‬والبرمجيات الخبيثة‪ ،‬والتهديدات‪ ،‬وأدوات األمن والمخاطر ونقاط الضعف‪.‬‬
‫‪TechNet .0‬‬
‫المصدر‪http://blogs.technet.com :‬‬
‫موقع تم إنشائه من قبل فريق سيرفرات مايكروسوفت )‪ .(Microsoft Lync server teams‬يتم قيادتهم من قبل ‪Lync Server‬‬
‫‪ documentation‬الكتاب والمعلقين التقنين يأتون من جميع التخصصات والتي تشمل مهندسي اإلنتاج ومهندسي الحقول ومهندسي الدعم‬
‫ومهندسي التوثيق والعديد من التخصصات األخرى‪.‬‬
‫‪Security Magazine .3‬‬
‫المصدر‪http://www.securitymagazine.com :‬‬
‫هذا الموقع يركز على الحلول الفريدة لقادة المؤسسة األمنية‪ .‬لقد تم تصميمه وكتابته للمديرين التنفيذيين لرجال األعمال الذين يقومون بإدارة‬
‫المخاطر والمؤسسة األمنية‪.‬‬
‫‪SecurityFocus .4‬‬
‫المصدر‪http://www.securityfocus.com :‬‬
‫ً‬
‫هذا الموقع يركز على عدد قليل من المجاالت الرئيسية التي هي من أعظمها أهمية للمجتمع األمني‪ .‬وعند تصفح الموقع سوف ترى بعض‬
‫التصنيفات منها كاالتي‪:‬‬
‫‪ BugTraq‬يحتوى على قائمه بريديه كبيرة الحجم واإلفصاح الكامل لمناقشة تفصيلية واإلعالن عن الثغرات األمنية للكمبيوتر‪ .‬وهو يعتبر‬
‫حجر األساس بالنسبة لمجتمع األنترنت األمني‪.‬‬
‫‪ The SecurityFocus Vulnerability Database‬يوفر للمتخصصين في مجال األمن معلومات محدثه عن نقاط الضعف لجميع‬
‫المنصات والخدمات‪.‬‬
‫‪Help Net Security .5‬‬
‫المصدر‪http://www.net-security.org :‬‬
‫هو موقع إخباري يومي عن األمن والذي يغطي أحدث األخبار عن أجهزة الكمبيوتر وأمن الشبكات منذ تأسيسها عام ‪ .1221‬بجانب تغطية‬
‫لألخبار في جميع أنحاء العالم‪ ،‬فأنه يركز أيضا على جودة المواد الفنية والورقات‪ ،‬ونقاط الضعف‪ ،‬تحذيرات البائعين‪ ،‬والبرمجيات الخبيثة‪،‬‬
‫وتستضيف أكبر مساحة تحميل للبرمجيات األمنة مع برامج ويندوز‪ ،‬لينكس‪ ،‬ونظام التشغيل ‪.Mac OS X‬‬
‫‪HackerStorm .9‬‬
‫المصدر‪http://hackerstorm.co.uk/ :‬‬
‫هو مورد أمني للقراصنة األخالقيين ومختبري االختراق لوضع خطط اختبار االختراق أفضل ونطاقات أفضل‪ ،‬وإجراء بحوث عن الضعف‪.‬‬

‫‪SC Magazine .9‬‬


‫المصدر‪http://www.scmagazine.com :‬‬
‫هو موقع يتم نشره من قبل ‪ Haymarket Media Inc.‬وهو جزء من العالمة التجارية العالمية‪ .‬ويوجد ثالثة إصدارات من هذه المجلة‪.‬‬
‫‪ North America –U.S. and Canada‬إصدار ألمريكا الشمالية مخصص ألمريكا وكندا‬
‫‪ International – U.K and mainland Europe‬إصدار عالمي مخصص إلنجلترا وبعض البلدان األوربية‪.‬‬
‫‪ Asia Pacific online‬إصدار يتم قراءته بواسطة صانعي القرار ألكثر من ‪-12‬دوله موجود في منطقة المحيط الهادي‪.‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪47‬‬

‫المجلة يتم إصدارها شهريا في أول أسبوع في الشهر‪ .‬وهي أكبر مجله ألمن المعلومات في العالم مع أكبر توزيع في العالم‪ .‬بدأت العمل سنة‬
‫‪.1212‬‬
‫‪Computerworld .1‬‬
‫المصدر‪http://www.computerworld.com :‬‬
‫ألكثر من ‪ 12‬سنه أصبح ‪ computer world‬المصدر الرئيسي لألخبار التكنولوجيا والمعلومات على مستوى العالم‪.‬‬
‫‪HackerJournals .6‬‬
‫المصدر‪http://www.hackerjournals.com :‬‬
‫هو مجتمع أمن المعلومات على اإلنترنت‪ .‬إنها تنتشر األخبار المتعلقة على وجه التحديد لتهديدات أمن المعلومات والقضايا من جميع أنحاء‬
‫العالم‪ .‬وهم عباره عن فريق بحثي يعمل على بحث وتجميع األخبار من عشرات اآلالف من المواقع لتجلب لك عناوين األمن األكثر مالءمة‬
‫في مكان واحد‪ .‬باإلضافة إلى األخبار‪ ،‬فأنها تستضيف ‪ blogs‬والمناقشات‪ ،‬وأشرطة الفيديو التعليمية‪ ،‬ولقد أصبح من أفضل مواقع االختراق‬
‫األكثر شهره في العالم‪.‬‬
‫‪WindowsSecurity Blogs .11‬‬
‫المصدر‪http://blogs.windowsecurity.com :‬‬
‫كتب بواسطة المؤلفين المشهورين الذين يقودون خبراء الصناعة‪.‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪48‬‬

‫الفصل الثاني‬
‫معمل االختراق )‪(PENETRATION LABS‬‬

‫‪ 1.1‬مقدمه‬
‫بالنسبة ألولئك الذين يرغبون في تعلم كيفية القيام باختبار االختراق (أو القرصنة) هناك العديد من األدوات المتاحة‪ ،‬ولكن عدد قليل جدا من‬
‫األهداف المتاحة للممارسة بأمان ‪-‬ناهيك قانونا‪ .‬بالنسبة للكثيرين‪ ،‬فان تعلم تكتيكات االختراق من خالل مهاجمة األنظمة على شبكة اإلنترنت‪.‬‬
‫على الرغم من أن هذا قد يوفر ثروة من الفرص واألهداف‪ ،‬ولكن هو أيضا غير قانوني تماما‪ .‬وقد ذهب كثير من الناس إلى السجن أو دفع‬
‫مبالغ ضخمة من المال في الغرامات والتعويض نتيجة لقرصنة مواقع اإلنترنت‪.‬‬
‫الخيار الحقيقي الوحيد المتاح ألولئك الذين يرغبون في تعلم اختبار االختراق من الناحية القانونية هو خلق معمل الختبار االختراق‪ .‬بالنسبة‬
‫للكثيرين‪ ،‬خصوصا األشخاص الجدد إلى الشبكات‪ ،‬يمكن أن يكون هذا مهمة شاقة‪ .‬وعالوة على ذلك‪ ،‬هناك صعوبة إضافية تتمثل في خلق‬
‫سيناريوهات العالم الحقيقي للممارسة ضده‪ ،‬خصوصا بالنسبة ألولئك الذين ال يعرفون كيف يبدو السيناريو في العالم الحقيقي‪ .‬هذه العقبات‬
‫غالبا ما تكون شاقة بما فيه الكفاية لثني الكثير من تعلم كيفية إجراء مشروع ‪.PenTest‬‬
‫هذا الفصل سوف يناقش كيفية إعداد مختبرات اختبار االختراق المختلفة‪ ،‬وتوفير فرصة للتعلم (أو تحسين) المهارات التي تستخدم اختبار‬
‫االختراق المهنية‪ .‬عن طريق إنشاء مختبر ‪ ،PenTest‬فإننا سوف نكون قادرين على تكرار التدريب العملي على معمل اختبار االختراق‪.‬‬
‫قبل التوجه الى انشاء معمل كامل من اختبار االختراق فهناك العديد من األشياء او المبادئ التي يجب ذكرها أوال حتى تكون العملية سهله‬
‫بالنسبة لنا‪ .‬اول هذه المبادئ هو المنصة االفتراضية التي سوف نستخدمها إلنشاء المعمل الخاص بنا‪.‬‬

‫‪ 1.1‬اختيار البيئة االفتراضية "‪"Choosing the Virtual Environment‬‬


‫البيئة االفتراضية "‪"virtual environment‬‬
‫تعد البيئة االفتراضية من التقنيات المميزة التي تم ّكن المستخدم على سبيل المثال من تشغيل أكثر من نظامي تشغيل في ذات الوقت بنفس‬
‫الحاسوب‪ ،‬كما تسمح التقنية باستخدام الحاسوب ذاته من قبل عدد من المستخدمين بنفس الوقت حيث يعمل كل منهم ببرامج وأنظمة تشغيل‬
‫مختلفة عن بعضها البعض‪ .‬هنا‪ ،‬سوف نناقش مختلف منصات البيئة االفتراضية لالختيار فيما بينها‪.‬‬
‫واحدة من األشياء األكثر تحديا التي يتعين علينا القيام بها هو اتخاذ القرار بشأن المنصات االفتراضية التي نريد استخدامها‪ .‬لكن ليس فقط ما‬
‫نريد القيام به يتعلق بالمنصات التي نختارها‪ ،‬بل ايضا مطلوب منا أن نقرر ما إذا كنا نريد بناء منصة افتراضية مخصصة أو تشغيل المنصه‬
‫على النظام الموجود لدينا‪ .‬في هذا الجزء‪ ،‬نحن سوف نذهب إلى التركيز على خلق بيئة افتراضية على النظام الموجودة لدينا‪ .‬ومع ذلك‪ ،‬فإنه ال‬
‫يزال من المهم مناقشة ما ال يقل عن فترة وجيزة عن خيار انشاء منصه افتراضيه مخصصه (‪.)bare metal environment‬‬

‫عندما نذهب لتثبيت بيئة ‪( bare metal environment‬المعروف أيضا باسم ‪ ،)TYPE 1 Hypervisor‬يتم توفير نظام التشغيل من‬
‫قبل المنتج في شكل ‪ .Hypervisor‬ورغم أن هذا وسيلة مفيدة للغاية إلنشاء أبنية قوية ومعقدة‪ ،‬فإنه يتطلب التفاني من األجهزة‪ .‬إذا كنت في‬
‫بيئة معملية ومن ثم تقوم ببناء المختبر‪ ،‬فان اهم شيء يجب عليك هو استكشاف والنظر للقوة والخيارات لديك عند إنشاء اآلالت‪ .‬وتظهر‬
‫الصورة التالية مثال على معمارية ‪:type 1 bare metal architecture‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪49‬‬

‫كما يظهر الشكل‪ ،‬فانها معمارية ‪ ،bare metal architecture‬يتم تثبيت ‪ Hypervisor‬في االله كأنه نظام التشغيل ويتم توفير الموارد‬
‫االفتراضية من قبل ‪ .Hypervisor‬يمكنك تكوين عدد كبير من الخيارات ومنها تخصيص الموارد عند استخدام ‪.bare metal‬‬
‫توفر المعمارية ‪ bare metal architecture‬حال قويا وقويا للغاية عند بناء مختبرات ‪ pen testing‬الخاص بك‪ .‬ومع ذلك‪ ،‬الشيء‬
‫الوحيد الذي يجعل من هذا تحدي هو حقيقة أن نظام التشغيل يتم توفيره من قبل ‪ Hypervisor‬المثبت مسبقا على األجهزة‪ ،‬وهذا يمكن أن‬
‫يسبب تحديات مع بعض إصدارات األجهزة‪ .‬عالوة على ذلك‪ ،‬يفضل تنفيذ هذا النوع من الحل على جهاز سطح المكتب أو الجهاز من نوع‬
‫الخادم‪/‬الملقم‪ .‬في حين أنه يمكن تنفيذه على جهاز الكمبيوتر المحمول‪ ،‬وهو أكثر شيوعا عن المنصات األخرى‪ .‬ولكن‪ ،‬سوف نستخدم هنا‬
‫المعماريه ‪ TYPE 2 Hypervisor‬االفتراضيه والمعروف لدى الجميع مثل تنصيب برنامج ‪ VMware‬على نظام التشغيل األساسي ومن‬
‫ثم انشاء البيئات االفتراضية التي تريدها‪ .‬ويظهر الشكل التالي مثال على هذه المعماريه ‪:TYPE 2 Hypervisor‬‬

‫كما ترى من الصورة‪ ،‬مثال على المعماريه ‪ ،TYPE 2 Hypervisor‬هي ان ‪ Hypervisor‬محمل على نظام التشغيل ونظام التشغيل‬
‫‪ OS‬محمل على أجهزة النظام‪.‬‬
‫من المؤكد ان إنشاء البيئة االفتراضية سوف يحتاج الى اختيار التطبيق المناسب الذي سوف يساعد على انشاء البيئة االفتراضية والتي سوف‬
‫نتكلم عن العديد منها وهنا سوف نقسمهم الى مجموعتين األولى هى‪ :‬التطبيقات المجانية‪ ،‬اما الثانية فتشمل التطبيقات التجارية‪.‬‬

‫البيئات المجانية ذات المصدر المفتوح‬


‫هناك عدد من البيئات االفتراضية الحرة والمفتوحة المصدر‪ .‬سوف نلقي نظرة على بعض من هم أكثر شعبية هنا‪ .‬في هذا القسم‪ ،‬سوف نناقش‬
‫المنتجات التالية‪:‬‬
‫‪ VMware Player‬‬
‫‪ VirtualBox‬‬
‫‪ Xen‬‬
‫‪ Hyper-V‬‬
‫‪ vSphere Hypervisor‬‬

‫‪VMware Player .1‬‬


‫قد أدى فريق ‪ VMware‬الى انتاج العديد من المنتجات المختلفة التي توفرها مجانا‪ .‬في وقت كتابة هذا الكتاب‪ VMware player ،‬ال تزال‬
‫متاحة مجانا‪ ،‬ولكن لألسف فقط للمستخدمين المنزليين‪ .‬كان واحدا من أكبر القصور في الماضي حقيقة أنه ال يمكن استخدام ‪VMware‬‬
‫‪ player‬لبناء وانشاء األجهزة االفتراضية‪ .‬ولكن الحمد هلل‪ ،‬أحدث اإلصدارات تسمح لك بإنشاء اآلالت االفتراضية‪ .‬القيود المفروضة على‬
‫اإلصدار الحالي هي في قسم الشبكات‪ .‬وهو أنه ال يمكنك إنشاء ‪ switches‬إضافية مع أداة ‪ .VMware player‬ألغراضنا هنا لبناء‬
‫مختبرات ‪ pen testing‬افتراضية‪ ،‬فهذا هو الشيء الذي نحتاجه حقا‪ ،‬وإذا لم تقرر استخدامه‪ ،‬فيمكنك فقط استخدام ‪ VMware player‬من‬
‫اجل بنية الشبكة األساسية‪ .‬فهو مجانا‪ ،‬وهذا هو السبب في أننا ذاهبون لتغطية ذلك‪ .‬أول شيء تريد القيام به هو تحميل البرنامج‪ .‬هناك‬
‫إصدارات متاحه لويندوز ولينوكس‪ .‬يمكنك تحميل البرنامج من الرابط التالى‪:‬‬
‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪50‬‬

‫–––‬
‫بمجرد االنتهاء من تحميله‪ ،‬سيكون لديك الحصول على مفتاح الترخيص من خالل التسجيل مع الموقع‪ .‬وبمجرد االنتهاء من الحصول على‬
‫المفتاح‪ ،‬يمكنك إدخاله أثناء التثبيت أو في وقت الحق‪ ،‬وسوف تمكنك من استخدام األداة‪ .‬لإلشارة‪ ،‬إلى استخدام أداة‪ ،‬فان دليل المستخدم هو‬
‫مصدر جيد‪ ،‬وهناك العديد من الدروس على شبكة اإلنترنت لذلك أيضا‪ .‬مرة أخرى‪ ،‬هي محدودة فيما يمكن أن توفره لنا‪ ،‬ولكنه حل قابل‬
‫للتطبيق الستخدامه الختبار اآلالت الذي قمت ببنائها وكذلك األجهزة األخرى دون الحاجة إلى شراء ترخيص آخر للبرنامج‪.‬‬

‫‪VirtualBox .1‬‬
‫‪ Oracle VirtualBox‬هي أداة قوية جدا وذات شعبية كبيره عندما يتعلق األمر الى اختيار منصة افتراضية‪ .‬حقيقة هي قوية جدا ومجانيه‪.‬‬
‫األداة تعمل بشكل جيد على مجموعة متنوعة من المنصات وتقدم سطح المكتب وكذلك قدرات مستوى المؤسسة‪ .‬اإلصدار الحالي في وقت‬
‫كتابة هذا الكتاب هو ‪ .1.1.11‬يمكنك تحميل البرنامج من الرابط التالي‪:‬‬
‫‪https://www.virtualbox.org/wiki/Downloads‬‬
‫هناك إصدارات متاحة لويندوز‪ ،‬ماك‪ ،‬لينوكس‪ ،‬وسوالريس‪ .‬اإلصدار ‪ 1‬من ‪ Oracle VirtualBox‬كان به عدد من المشاكل مع هذه األداة‪،‬‬
‫ولكن من أي وقت مضى منذ اإلصدار ‪ ،1‬لم تكن هناك تقارير عن المشاكل مثل اإلصدار السابق‪.‬‬
‫كما أنها تحظى بشعبية كبيره مع العديد من الخيارات‪ ،‬حيث يمكنك إنشاء جهاز افتراضي باستخدام هذه األداة‪ .‬دليل المستخدم مفيد جدا جدا إذا‬
‫كنت لم تستخدم ‪ Oracle VirtualBox‬من قبل‪ .‬يمكنك تحميل الدليل من الرابط التالي‪:‬‬
‫‪https://www.virtualbox.org/wiki/Documentation‬‬
‫بمجرد االنتهاء من تثبيت البرنامج‪ ،‬سيقوم البرنامج بتشغيل نفسه تلقائيا‪ ،‬وسترى شاشة مشابهة لتلك التي تظهر في الصورة التالية‪:‬‬

‫سنحتاج الى ‪ ISO‬الستخدامها في الجهاز االفتراضي لدينا‪ .‬لهذا‪ ،‬سوف نستخدم أداة ممتازة وهي الساموراى الختبار إطار الويب (‪.)WTF‬‬
‫هذا هو إطار الختبار تطبيق الويب والقائم على بيئة لينكس الحية التي تم تكوينها مسبقا كإطار ‪ pen testing‬لشبكة اإلنترنت‪ .‬و‪ CD‬يحتوي‬
‫على بعض من أفضل المصادر المفتوحة واألدوات المجانية الستخدامها الختبار الهجوم على شبكة اإلنترنت‪ .‬يمكنك تحميل ‪ ISO‬من الرابط‪.‬‬
‫‪http://www.samurai-wtf.org‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪51‬‬

‫لبدء إنشاء الجهاز االفتراضي‪ ،‬ننقر فوق ‪ New‬لبدء العملية‪ .‬في النافذة التي تفتح إلنشاء الجهاز االفتراضي‪ ،‬ندخل االسم ‪ Samurai‬في حقل‬
‫االسم ونختار لينكس كنظام تشغيل‪ .‬ثم‪ ،‬نحدد اإلصدار المطلوب وننقر على التالي‪.‬‬
‫في اإلطار التالي‪ ،‬سوف نقوم بتحديد ذاكرة الوصول العشوائي للجهاز االفتراضي‪ .‬يمكنك ترك اإلعداد االفتراضي الى ‪ MB 112‬أو تغييره‬
‫إلى قيمة أخرى لكي يعمل بشكل أفضل بالنسبة لك‪.‬‬
‫الشيء التالي نريد القيام به هو خلق القرص الصلب للجهاز االفتراضي لدينا‪ ،‬ولكن ألغراض لدينا‪ ،‬نحن ال ننوي استخدام القرص الصلب‪.‬‬
‫لذلك‪ ،‬سوف نقوم بتحديد الخيار ‪ do not add a virtual hard drive‬ثم ننقر على ‪ .create‬سيتم تحذيرك حول إنشاء جهاز افتراضي‬
‫دون القرص الصلب‪ ،‬ولكن هذا على ما يرام ألن هذا هو ما نريد أن نفعله‪ .‬لذلك‪ ،‬قم بقراءة التحذير وانقر على ‪.Continue‬‬
‫تهانينا! إذا كان كل شيء سار على ما يرام‪ ،‬فإنك االن قمت بإنشائها فقط جهاز افتراضي في ‪ .VirtualBox‬إنك االن تملك نافذة الجهاز‬
‫االفتراضي الذي قمت بإنشائه‪.‬‬
‫نحن اآلن على استعداد لبدء الجهاز االفتراضي لدينا! انقر على تحديد ‪ start‬وبدء تشغيل الجهاز االفتراضي‪ .‬هذا هو المكان الذي سوف‬
‫تحصل على رسالة حول ما هي ‪ image‬التي سوف تحتاجها لبدء عملية االقالع‪ ،‬وهذا هو المكان الذي سوف نقوم بوضع مسار ‪ image‬الذي‬
‫نريد استخدامها‪ ،‬ونحن سوف نفعل ذلك اآلن‪ .‬في موجه األوامر‪ ،‬انتقل إلى ‪ ISO‬التي قمت بتنزيلها وتمهيد الجهاز االفتراضي السامورى‬
‫‪ .WTF‬هذه العملية لتوضيح استخدام ‪ ،VirtualBox‬ونحن لن نستمر من هنا‪ .‬انكم مدعوون لتجربة وممارسة ذلك بنفسك‪ .‬شيء واحد وهو‬
‫أنه في بعض األحيان‪ ،‬مع بعض األجهزة‪ ،‬فان برمجيات ‪ VirtualBox‬سوف تواجه صعوبات مع لوحة المفاتيح واإلدخال‪ .‬إذا حدث هذا‪،‬‬
‫فمن المستحسن أن تقوم بتحميل الملحقات التي يمكن العثور عليها في ‪.https://www.virtualbox.org/wiki/Downloads‬‬

‫‪Xen .1‬‬
‫ليس سرا أن سوق ‪ I386‬هيمنت عليه لسنوات من قبل الحلول التي تقدمها ‪ ،VMware‬ولكن مع مرور الوقت‪ ،‬أصبح السوق لديه الكثير من‬
‫الحلول التي تستمر في زيادة حجم ما يلي‪ .‬هذا هو المكان الذي يأتي فيه ‪ .Xen‬والذي قد اكتسب شعبية ويستمر في القيام بذلك كما في جميع‬
‫األنحاء‪ ،‬بينما يستمر المنتج في التحسن‪ .‬هل من المحتمل أن نسأل هذا السؤال إذا كنت جديدا على ‪ :Xen‬ما هو ‪Xen‬؟ هذا سؤال جيد جدا‪،‬‬
‫وشرح ذلك بالتفصيل هو خارج نطاق هذا الكتاب‪ .‬هناك كتب كاملة مكتوبة عن ‪ ،Xen‬لذا فإننا سوف نغطي سوى بعض األساسيات هنا‪.‬‬
‫حصل ‪ Xen‬على بدايته من جامعة كامبريدج في المملكة المتحدة‪ .‬ومنذ ذلك الحين‪ ،‬كانت هناك العديد من الالعبين في لعبة ‪ ،Xen‬وهذا قد‬
‫أضاف ميزات وقدرات إلى األداة‪ ،‬والتي بدورها زادت من شعبيتها‪.‬‬
‫بمجرد خروج المشروع‪ ،‬كما هي الحال في عالم تكنولوجيا المعلومات‪ ،‬بدأ مؤسسوه انشاء شركة خاصة بهم تسمى ‪ ،XenSource‬ومن ثم تم‬
‫أخذ الشركة من قبل ‪ .Citrix‬وسعت ‪ Citrix‬المشروع وقدمته على أنه حل على غرار برنامج ‪ .VMware ESX‬باإلضافة إلى ذلك‪ ،‬قد‬
‫أضافت الشركات األخرى ‪ Xen‬إلى منتجاتها مثل ريد هات ونوفيل‪.‬‬
‫للحصول على أحدث المعلومات أو لتحميل ‪ ،Xen‬يمكنك ذلك من خالل الرجوع إلى الموقع ‪ http://www.citrix.com/‬او من خالل‬
‫‪ .http://xenserver.org/open-source-virtualization-download.html‬للتعلم‪ ،‬دليل خطوة بخطوة إلنشاء ‪ Xen‬على جهاز‬
‫‪ SUSE‬لينكس‪ ،‬يمكنك الرجوع إلى الرابط التالي‪:‬‬
‫‪http://searchservervirtualization.techtarget.com/tip/Xen-and-virtualization-Preparing-SUSE-Linux-‬‬
‫‪Enterprise-Server-10-for-virtualization‬‬
‫الحظ أن هناك تسجيل والذي يطلب توفير عنوان البريد اإللكتروني الخاص بك لقراءة الوثيقة‪ .‬األمر يستحق ذلك ألنها سوف يرسل لك‬
‫وصالت كلما تم نشر أوراق جديدة‪ ،‬إشارة سريعة لتحديث البقاء‪.‬‬
‫اآلن لمعرفة كيف يعمل ال ‪ ،Xen‬علينا أن نتعرف على كل من‪:‬‬
‫‪ ‬معرفة أنواع ال ‪Virtualization‬‬
‫‪ ‬فهم هيكلية ال ‪Xen‬‬
‫نأتي الى معرفة أنواع الـ ‪ Virtualization‬اوال‪:‬‬
‫النوع األول ‪:Full Virtualization‬‬
‫في هذا النوع يقوم البرنامج الخاص بالـ ‪ Virtualization‬بعمل بيئة تخيلية بالكامل متضمنة للعتاد أيضاً‪ .‬ويصبح النظام التشغيلي الضيف‬
‫الذي يعمل في هذه البيئة بمخاطبة والتعامل مع هذا العتاد التخيلي الذي قام البرنامج بعمله له‪ .‬يعتبر برنامج الـ ‪ VMWare‬من أبرز البرامج‬
‫التي تستعمل هذا النوع من الـ ‪.Virtualization‬‬
‫النوع الثاني ‪:Para Virtualization‬‬
‫بدل من عمل بيئة تخيلية بالكامل تقوم البرامج التي تعتمد هذا النوع بتزويد النظام الضيف بما يسمى النوافذ المبرمجة ‪Application‬‬
‫‪ Programming Interface‬ومختصرها ‪ .API‬هذه النوافذ تسمح للنظام الضيف من استعمال العتاد الحقيقي ‪Physical Hardware‬‬
‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪52‬‬

‫عند الحاجة من خالل التخاطب معه‪ .‬هذا النوع من الـ ‪ Virtualization‬يتطلب أن يكون النظام قادر على أن يعرف بانه يعمل في بيئة‬
‫تخيلية لكي يستطيع أن يطلب استعمال النوافذ المبرمجة ‪ .API‬من أبرز البرامج التي تستخدم هذه الطريقة هي الـ ‪ ،Xen‬أي الـ ‪ Xen‬هو‬
‫عبارة عن برنامج ‪.Para-Virtualization‬‬

‫الـ ‪ Para Virtualization‬تقدم أداء أفضل من الـ ‪ Full Virtualization‬وذلك أنها ال تقوم بعمل عتاد تخيلي ‪Virtual Hardware‬‬
‫وإنما تستعمل العتاد الموجود حسب الحاجة بواسطة البوابات البرمجية ‪ API's‬وبهذا ال تحجز شيء هي ليست بحاجة له‪ .‬ومن ميزات الـ‬
‫‪ Para Virtualization‬األخرى على الـ ‪ Full Virtualization‬هي المرونة في اإلضافة والحذف للعتاد عند الحاجة دون الحاجة الى‬
‫عمل إعادة تشغيل للنظام الضيف‪ .‬مثالً تستطيع إضافة مساحات أخرى من الـ ‪ RAM‬للنظام الضيف عند حاجته لذلك دون أن تقوم بوقف عمل‬
‫النظام وإعادة تشغيله مرة أخرى‪ ،‬أي كل هذا يتم في الـ ‪.Run Time‬‬

‫فهم هيكلية ال ‪Xen‬‬


‫تقنية الـ ‪ Xen‬تعتمد على جزئيين أساسيين إثنين‪ ،‬هما‪:‬‬
‫‪ .1‬برنامج مراقبة الحاسوب التخيلي ‪ .Virtual Machine Monitor‬هذا الجزء يمثل الطبقة ما بين األنظمة التخيلية المستضيفة‬
‫وبين العتاد‪ ،‬أي بعبارة أخرى هى حلقة الوصل التي تربط النظام الضيف والعتاد الرئيسي ‪ .Physical Hardware‬وبصورة‬
‫عامة يسمى هذا البرنامج بالـ ‪.Hypervisor‬‬
‫‪ .1‬أدوات ‪ Xen‬أي ‪ .Xen tools‬وهي عبارة عن مجموعة من البرامج التي تستعمل من خالل سطر األوامر التي يحتاجها مدير النظام‬
‫الستخدام وإدارة الـ ‪.Virtual Machines‬‬

‫برنامج الـ ‪ Virtual Machine Monitor‬يجب أن يعمل قبل تشغيل أي نظام تخيلي ‪ .Virtual Machine‬طبعا ً عند العمل مع تقنية الـ‬
‫‪ Xen‬يسمى الـ ‪ Virtual Machine‬بالدومين ‪ .Domain‬أيضا ً هذا البرنامج ‪ Virtual Machine Monitor‬ال يملك مشغالت‬
‫‪ Drivers‬للتخاطب مع العتاد ‪ Hardware‬للجهاز المضيف وال يملك منافذ ‪ Interface‬لكي يتم من خاللهم التواصل والتخاطب مع مدير‬
‫النظام الـ ‪ .Administrator‬هذه األمور تتم من خالل نظام تشغيل يعمل في الدومين رقم صفر ‪ .Domain0‬حيث يمثل الـ ‪Domain0‬‬
‫المتحكم ‪ Controller‬باألنظمة األخرى المستضيفة ‪ Guests‬التخيلية‪ .‬أي بعبارة أخرى هو الذي من خالله نستطيع أن نتحكم بباقي األنظمة‬
‫التخيلية التي تعمل على الجهاز‪ .‬يتم ذلك كله من خالل خدمة اسمها ‪ xend‬والتي تعمل في الـ ‪ ،Domain0‬وهي الخدمة التي تدير جميع‬
‫الدومينات األخرى‪.‬‬

‫‪Hyper-V .1‬‬
‫هذه هي أداة مايكروسوفت االفتراضية الخاصة بهم‪ .‬في حين ال تزال جديدة نسبيا في المشهد االفتراضي‪ ،‬مايكروسوفت لحقت بالركب سريعا‪.‬‬
‫منطقة واحدة تفتقر داخل أداتهم هي التواصل والتكامل مع واجهات سطح المكتب على لينكس ويونيكس‪ .‬بمجرد الحصول على هذه‪ ،‬فأنها‬
‫يستحق النظر اليه بجدية عند اختيارها كالبيئة االفتراضية الخاصة بك للمختبرات ‪ pentesting‬الخاص بك‪ .‬في األصل‪ ،‬تم عرض ‪Hyper-V‬‬
‫فقط كجزء من منتجات خادم مايكروسوفت بداية من نظام التشغيل ‪ Windows Server 2008‬وحاليا مع ويندوز سيرفر عام ‪.1211‬‬
‫اآلن‪ ،‬هناك خيارات لتثبيتها مع ويندوز ‪ .1‬واستند هذا القرار من قبل مايكروسوفت على حقيقة أن األداة كانت ذات شعبية كبيره على البرامج‬
‫الخاصة بها وانهم يريدون التوسعة إلعطاء عمالئها المزيد من الخيارات عندما يتعلق األمر باالفتراضية‪.‬‬
‫هناك نوعان من المتطلبات الرئيسية لعمل ‪ .Hyper-V‬الشرط األول هو أن نظام التشغيل يجب أن يكون ‪ 21‬بت‪ .‬والشرط الثاني الذي غالبا ما‬
‫يتم تجاهله هو قدرات المعالج بالجهاز‪ .‬وتتطلب تدعيم الرقاقة ل )‪ .Second Level Address Translation (SLAT‬لتشغيل ‪Hyper-V‬‬
‫على نظام أساسي بخالف الخادم‪ ،‬ستحتاج أن يكون واحدا مما يلي‪:‬‬
‫‪ Windows 8 Professional‬و‪.Windows 8 Enterprise‬‬
‫بمجرد االنتهاء من اختيار النظام األساسي الخاص بك‪ ،‬يمكنك إما‬
‫إضافتها كسمة إذا كنت تستخدم أحد الملقمات‪ ،‬أو إذا كنت قد اخترت‬
‫واحدة من أنظمة تشغيل ويندوز ‪ ،1‬فيمكنك تحميل ‪ Hyper-V‬من‬
‫خالل الذهاب الى ‪ Program and feature‬في ‪Control panel‬‬
‫ومن ثم النقر فوق ‪ .Turn Windows features on or off‬يؤدى‬
‫هذا الى ظهور قائمة ببرامج الويندوز المدمجة والتي منها نختار‬
‫‪ Hyper-V‬ثم ننقر فوق ‪ OK‬كاالتي‪:‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪53‬‬

‫الرابط التالي ‪ http://www.microsoft.com/en-us/download/details.aspx?id=36188‬يحتوي على بعض التعليمات لتثبيت‬


‫‪ Hyper-V‬على ‪.windows 8‬‬
‫بغض النظر عن المنصة‪ ،‬التركيب والتكوين يتبع نفس التسلسل‪ .‬اآلن لديك ‪ ،Hyper-V‬االن سوف نقوم بإنشاء جهاز افتراضي بحيث يمكنك‬
‫العمل من خالل عملية إنشاء واحدة‪ .‬مع ‪ ،Hyper-V‬يمكننا اقامة الشبكة التي سوف نذهب لالتصال بها‪ .‬يمكننا وضع هذا األمر في البداية أو‬
‫يمكننا إعداده بعد إنشاء الجهاز االفتراضي‪ .‬ألغراضنا‪ ،‬سوف ننشأ الشبكة قبل أن نبدأ عملية إنشاء الجهاز االفتراضي‪ .‬في البنية االساسية‪،‬‬
‫نحتاج شبكتين‪ ،‬واحد الذي يصل إلى العالم الخارجي (على سبيل المثال‪ ،‬اإلنترنت) وشبكة ثانية لالتصال باألجهزة الداخلية‪ .‬للبساطة‪ ،‬نحن‬
‫سوف ندعوهم ب ‪ ExternalNet‬و‪.InternalNet‬‬

‫أول ما عليك القيام به هو تحديد نطاق ‪ DHCP‬وليكن مثال ‪ 192.168.177.0/24‬لخادم ‪ .DHCP‬هذه هي الشبكة التي سيتم استخدامها‬
‫للوصول الخارجي‪ .‬نستخدم الخطوات التالية إلعداد الشبكة هي كما يلي‪:‬‬
‫‪ -1‬نقوم بالنقر فوق ‪ Hyper –V Manger‬لتشغيل ‪ Hyper –V‬والتي تظهر كما في الشكل التالي‪:‬‬

‫‪ -1‬ثم نقوم بالنقر فوق ‪ Virtual Switch Manger‬الموجودة في الجانب األيمن والتي تؤدى الى ظهور الشاشة التالية‪:‬‬

‫والتي نختار منها ‪ New virtual network switch‬الموجودة في الجانب االيسر العلوي ونحدد معا كأنها ‪ .external‬ثم‬ ‫‪-1‬‬
‫نقوم بالنقر فوق ‪.Create Virtual Switch‬‬
‫وبالمثل نقوم بإعداد الشبكة الداخلية‪.‬‬ ‫‪-1‬‬
‫بعد انتهاء من اعداد الشبكة‪ ،‬نذهب الى الشاشة الرئيسية ومنها نختار ‪ New‬ومنها ‪ New Virtual machine‬إلنشاء منصة‬ ‫‪-1‬‬
‫تشغيل افتراضيه‪.‬‬
‫نتتبع ال ‪ Wizard‬مثل البرامج االفتراضية األخرى حتى ننتهي من انشاء المنصة التي تريدها‪.‬‬ ‫‪-2‬‬

‫‪vSphere Hypervisor .1‬‬


‫هذا هو النسخة المجانية من الكيان التجاري‪ ،‬وهو أمر يجب عليك أن تنظر اليه في بيئة المختبر الخاص بك‪ .‬هناك بعض اإلصدارات التي‬
‫ستعمل على جهاز الكمبيوتر المحمول وجعله جزءا من بيئة العمل المحمولة الخاصة بك أيضا‪ ،‬ولكن في رأيي‪ ،‬ليست هذه هي الطريقة‬
‫الستغالل قوة ‪.type 1 virtualization solution‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪54‬‬

‫كما نوقش سابقا‪ ،‬فان ‪ type 1 virtualization solution‬يتم تركيبه على أجهزة النظام الفعلي نفسه‪ .‬ال توجد روتينية المحاكاة أو التفاعل‬
‫مع نظام التشغيل المطلوب‪.‬‬
‫في حين أن اإلعداد سهل جدا القيام به واألكثر يمكنه أن يفعل ذلك بدون مساعدة‪ ،‬موقع ‪ VMware‬لديه موارد ممتازة لتتمكن من استخدامها‬
‫لمساعدتك في التثبيت‪ .‬يمكنك مراجعة هذه الموارد‪ ،‬بما في ذلك ملف فيديو لكيفية تنفيذ اإلعداد‪ ،‬على الموقع التالي‪:‬‬
‫‪http://www.vmware.com/products/vsphere-hypervisor/gettingstarted.html‬‬
‫كما سترون عند زيارة الموقع‪ ،‬قد وفر فريق ‪ VMware‬لك الكثير من المراجع لمساعدتك في عملية التثبيت‪ ،‬والتكوين‪ ،‬ونشر الحلول‬
‫االفتراضية الخاصة بهم‪ .‬شيء واحد آخر يذكر هنا هو متطلبات األجهزة التي يذكرها الموقع؛ وتعتبر معظم هذه توصيات‪ ،‬وأنه من األفضل‬
‫اختبار األجهزة مع هذا المنتج قبل أن تجعل منه حل مفضل لديك‪ .‬مرة أخرى‪ ،‬هذا هو سبب آخر لماذا نحن ال ننصح بهذا الحل على منصة‬
‫متنقلة أو جهاز كمبيوتر المحمول الخاص بك؛ أجهزة الكمبيوتر المحمولة‪ ،‬بالنسبة للجزء األكبر‪ ،‬ال تملك القوة التي في حوزتها عندما يتعلق‬
‫األمر إلى حل ‪.bare metal virtual solution‬‬

‫المنصات التجارية‬
‫كما هو الحال مع المنصات المجانية‪ ،‬هناك عدد من البيئات التجارية التي نريد أن نناقشها هنا‪ .‬نحن سوف ننظر في كال من النوع ‪ 1‬والنوع ‪1‬‬
‫من الحلول االفتراضية‪.‬‬

‫‪VMware vSphere [ESXi] .1‬‬


‫هذا هو استمرار قوي للغاية من القدرات التي تم مناقشتها مع ‪ .vSphere Hypervisor‬حيث اضافت قدرات وميزات تجعل من يريد‬
‫االستثمار فى نشر بيئة افتراضية متطورة ومعقدة‪ .‬وتوفر هذه األداة الكثير من الخيارات اإلضافية التي تتجاوز البديل المجاني‪ .‬هذه الخيارات‬
‫هي كما يلي‪:‬‬
‫‪ -‬تجميع موارد الحوسبة والتخزين عبر ‪.multiple physical hosts‬‬
‫‪ -‬اإلدارة المركزية للمضيفين المتعدد باستخدام ™‪.VMware vCenter Server‬‬
‫‪ -‬تحسين مستويات الخدمة والكفاءة التشغيلية‪.‬‬
‫‪ -‬أداء ‪ live migration‬لألجهزة الظاهرية‪.‬‬
‫‪ -‬االستفادة من ‪ ،automatic load balancing‬واستمرارية األعمال‪ ،‬والنسخ االحتياطي واستعادة القدرات لآلالت االفتراضية‬
‫الخاصة بك‪.‬‬
‫كما ترون‪ ،‬هناك العديد من الخيارات األمثل مع هذه األداة‪ .‬ومع ذلك‪ ،‬إذا كنت تريد بناء مختبر لالختبار معقد ومتطور‪ ،‬فهذه األداة تتجاوز ما‬
‫نحتاج كحل‪ .‬إذا كنت تجد نفسك تعمل مع فريق عالمي كبير‪ ،‬فمن المؤكد أنه الخيار الذي يجب عليك أن تنظر اليه في حدود ميزانيتك‪.‬‬

‫‪XenServer .1‬‬
‫قد طورت مجموعة ‪ Citrix‬منافسا قويا للحلول المقدمة من ‪ ،VMware‬وهذا واضح في طرح ‪ XenServer‬الخاصة بهم‪ .‬وهذا يجعلها‬
‫رائدة في حلول منصة مركز البيانات للسحابة وسطح المكتب؛ وعالوة على ذلك‪ ،‬وفقا الدعاءاتهم‪ ،‬أربعة من أصل خمسة من أكبر استضافة‬
‫السحابة "‪ "hosting clouds‬تستخدم ‪ .XenServer‬بعض األمثلة من الحلول التي يمكن ان يوفرها المنتج كاالتي‪:‬‬
‫‪ o‬نسج الشبكة ذات آمن عالي للغاية ومرونة‪.‬‬
‫‪ o‬إنشاء حقوق التفويض‪.‬‬
‫‪ o‬يدعم ‪ High availability‬و‪.load balancing‬‬
‫كما هو الحال مع المنصة التجارية ‪ ،vSphere‬فهذا ليس شيئا سوف نكون في حاجة اليه بالفعل لبناء مختبراتنا‪ ،‬وإنما هو إمكانية ألولئك الذين‬
‫يريدون استخدام شيء آخر غير ‪ .VMware‬يمكنك معرفة المزيد وأيضا تحميل البرنامج من الرابط التالي‪:‬‬
‫‪http://www.citrix.com/products/xenserver/overview.html‬‬

‫‪VMware Workstation .1‬‬


‫مازال فريق ‪ VMware‬في اللعبة االفتراضية لبعض الوقت‪ ،‬وهذا يظهر عند استخدام منتج ‪ Workstation VMware‬الخاصة بهم‪.‬‬
‫الشيء الذي يفصل بين ‪ Workstation VMware‬من الجماهير بالنسبة لي هو حقيقة أنك يمكنك أن تدمجه مع االخرين‪ ،‬إن لم يكن كلها‪،‬‬
‫األجهزة التي تدمجها في الجهاز المضيف الخاص بك سلسة نسبيا‪ .‬بينما تكلفة استخدام ‪ ،Workstation VMware‬تكلفة رخيصة نسبيا‪،‬‬
‫وأنه يوفر الكثير من القدرة على خلق أبنية متنوعة للغاية ومعقدة‪ .‬هو‪ ،‬إلى حد بعيد‪ ،‬األداة المفضلة لديك‪ ،‬وسوف يكون األداة التي سوف‬
‫نستعين بها في أنشاء معملنا‪ ،‬ومنها على التوالي أيضا‪ .‬كما ذكرت سابقا‪ ،‬تقدم مايكروسوفت في لعبه المنصات االفتراضية‪ ،‬بعد أن كانت على‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪55‬‬

‫الساحة لفترة قصيرة‪ ،‬وتحسين منتجها‪ ،‬فهذا سوف يجعل السباق مثيرة لالهتمام‪ .‬هذا أمر جيد بالنسبة لنا! كمستهلكين‪ ،‬فإننا يمكن أن تستفيد فقط‬
‫من هؤالء البائعين في محاولة التفوق على بعضها البعض‪.‬‬
‫وكما ذكر‪ ،‬فإنه يوصى بشدة أنه عليك أن تنظر في شراء البرنامج‪ .‬يمكنك تحميل أحدث إصدار من ‪ Workstation VMware‬من الرابط‬
‫التالي‪:‬‬
‫‪http://www.vmware.com/products/workstation/workstation-evaluation‬‬
‫بمجرد االنتهاء من تنزيله‪ ،‬يمكنك تثبيت البرنامج‪ .‬إذا كان لديك أي أسئلة‪ ،‬فهناك دليل ‪ VMware Workstation‬مكتوب بشكل جيد‬
‫ومرجعا ممتازا بالنسبة لك‪ .‬يمكنك أيضا تحميل المرجع باستخدام الرابط التالي‪:‬‬
‫‪https://www.vmware.com/support/pubs/ws_pubs.html‬‬
‫هناك منتدى كبير والذي هو أيضا إشارة ممتازة للحصول على معلومات حول األداة‪ .‬الدعم هو سبب آخر لماذا جعل ‪ VMware‬تواصل‬
‫القيادة في لعبة المنصات الرئيسية‪ .‬وبمجرد االنتهاء من تثبيت البرنامج وفتحه‪ ،‬يمكن أن تشاهد عرض شاشة مماثلة لتلك التي تظهر في‬
‫الصورة التالية‪:‬‬

‫في هذا الجزء قمنا باستعراض المنصات االفتراضية ذات الشهرة سواء مفتوحة المصدر او التجارية‪ .‬كثير من الناس تستخدم بيئة كالي‬
‫كمنصة أساسي ومن ثم يقوم بتنصيب ‪ VMware‬على سبيل المثال عليها ثم ينشا منصات ‪ window‬و‪ Linux‬افتراضيه والبعض االخر‬
‫يستخدم بيئة الويندوز كمنصة اساسيه ومن ثم ينشا منصات كالي واصدارات الويندوز األخرى كمنصة افتراضيه‪ .‬هذا على حسب رغبتك‬
‫ولكنى أفضل عدم استخدام المنصة األساسية في التجارب‪.‬‬

‫‪ 1.1‬عمل اول منصة افتراضيه وتثبيت نظام التشغيل كالي‬


‫نتبع الخطوات التالية لتثبيت نظام التشغيل كالي وهذا ينطبق أيضا عند تثبيت المنصات األخرى‪:‬‬

‫‪ -1‬نقوم بتشغيل البرنامج والتي يؤدى الى ظهور الشاشة التالية‪:‬‬

‫‪ -1‬نقوم بالنقر فوق ‪ Create Virtual Machine‬والتي تؤدى الى ظهور شاشة ال ‪ wizard‬الخاصة بعملية االنشاء والتي منها‬
‫نختار ‪ Typical‬ثم نقوم بالنقر فوق ‪.Next‬‬
‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪56‬‬

‫‪ -1‬ثم نختار )‪ Installer disc image file (iso‬ونحدد مكان ‪ iso image‬التي تحتوي على نظام التشغيل الذي تريده ومن خاللها‬
‫سوف يتعرف البرنامج على نظام التشغيل الموجود وإذا لم يتعرف سوف تقوم بتحديده انت من القائمة التي يسردها البرنامج‪.‬‬

‫نحن هنا نقوم بتنصيب كالي ونحن نعلم ان كالي قائم على نظام التشغيل دبيان لذا سوف يتعرف الجهاز على انه نظام التشغيل دبيان‬ ‫‪-1‬‬
‫ثم نقوم بالنقر فوق ‪.Next‬‬
‫ثم بعد ذلك يتطلب منك تحديد اسم للمنصة التي سوف تنشئاها والمكان الذي سوف تضع فيه ملفات المنصة‪.‬‬ ‫‪-1‬‬
‫ثم يطلب منك تحد حجم للقرص الصلب الذي سوف تجعله للمنصة في حالنا هذا سوف نتركه ‪ 12‬جيجا ثم نختار ‪Store virtual‬‬ ‫‪-2‬‬
‫‪ disk as a single file‬ثم ننقر فوق ‪.Next‬‬
‫فيعطك ملخص لإلعداد ويمكن تعديل هذا من خالل النقر فوق ‪ Customize Hardware‬وبعد االنتهاء ننقر فوق ‪.Finish‬‬ ‫‪-2‬‬

‫‪ -1‬االن نذهب الى تنصيب منصة كالي وذلك من خالل النقر فوق ‪ Power on this virtual machine‬لبد تشغيل المنصة‬
‫االفتراضية والتي منها تؤدى الى ظهور الشاشة التالية بعد العمل‪.‬‬

‫‪ -2‬نقوم بالنقر فوق ‪.Install‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪57‬‬

‫‪ -12‬ثم تظهر لنا شاشه أخرى نختار منها اللغة‪ ،‬ثم ننتقل لنختار ‪ ،Country‬ثم ننتقل لنختار لغة المفاتيح " ‪Configuration‬‬
‫‪ ،"Keyboard‬ثم بعد ذلك يبدا بتحميل بعد الملفات‪ ،‬ثم يطلب منك ادخال اسم المضيف ‪ Hostname‬ثم ‪ Domain name‬والتي‬
‫من الممكن تركها فارغه على حسب رغبتك واهدافك ثم بعد ذلك يطلب منك ادخال الرقم السري للمستخدم ‪ root‬والذي يتمتع بأعلى‬
‫صالحيات‪ .‬بعد ذلك يطلب منك تحديد ‪ .Time zone‬حتى تظهر الشاشة التالية‪:‬‬

‫‪ -11‬عند هذه المرحلة نبدأ تحديد نظام الهارد ديسك‪.‬‬


‫‪ -11‬في اختبارنا هذا سوف نختار ‪ Guided – use entire disk‬والتي تعنى استخدام الهارد بالكامل اما إذا كنت سوف تنصبه كمنصة‬
‫اساسيه ال تستخدم هذا الخيار الن سوف يقوم بمسح جميع البيانات على الهارد ديسك‪ .‬بعد ذلك نختار ‪ next‬ثم نختار‬
‫‪ all file in one partition‬ثم ننقر فوق ‪ Enter‬ثم نختار بعد ذلك ‪ Finishing partition‬ثم ننقر فوق ‪.enter‬‬
‫‪ -11‬يعطيك ملخص ما سوف يفعله مع رسالة تحذيريه نختار ‪ yes‬ثم ننقر فوق ‪.Enter‬‬
‫‪ -11‬نكون هنا قد انتهينا وننتظر حتى ينتهي من بناء نظام التشغيل وحتى ظهور الشاشة التالية‪:‬‬

‫‪ -11‬االن هذا يخبرك بانتهاء عملية التنصيب وهنا سوف نختار ‪ Continue‬ثم ننقر فوق ‪.enter‬‬
‫‪ -12‬نكون هنا قد انتهينا من تثبيت منصة التشغيل كالي‪.‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪58‬‬

‫‪ 1.1‬اختيار شبكة االتصاالت‬


‫في هذا القسم‪ ،‬سوف ننظر الى خيارات الشبكات لدينا عندما يتعلق األمر ببناء بيئتنا‪ .‬ومن األهمية أن نستخدم ميزات الشبكات المقدمة من قبل‬
‫األداة ‪ VMware Workstation‬واالستفادة من القدرات التي يوفرها لنا‪ .‬لفعل ذلك قم بفتح برنامج ‪ VMware Workstation‬الخاص‬
‫بك وفتح جهاز افتراضي من اختيارك‪ .‬عند القيام بذلك‪ ،‬سترى ‪ network adapter‬والذي هو كجزء من االعداد‪ .‬ونحن سوف ننظر في‬
‫ذلك الحقا‪ .‬انتقل إلى ‪ | Edit virtual machine settings‬ومن ثم الى ‪ .Network Adapter‬وهذا سوف يحضر لك إطار االعداد‬
‫الخاص بالشبكة كما هو مبين من الشكل التالي‪:‬‬

‫كما ترون في الصورة السابقة‪ ،‬هناك عدد من اإلعدادات التي يمكننا أن نستخدمها ألعداد الشبكة‪ .‬ما نريد القيام به هو أن نفهم أن كل من هذه‬
‫اإلعدادات تمثل ‪ ،switch‬وعند إنشاء محول الشبكة "‪ "network adapter‬مع هذا اإلعداد‪ ،‬فهذا يعادل ربط هذا الجهاز إلى ‪.switch‬‬
‫ونحن سوف نلقي نظرة فاحصة على هذا بمجرد االنتهاء من مناقشة الخيارات المختلفة وما تعنيه‪.‬‬

‫‪The bridged setting‬‬


‫عندما نقوم بإعداد محول الشبكة الستخدام اإلعداد ‪ ،bridged‬فإنه يقوم بتوصيل محول الشبكة إلى الشبكة المادية الفعلية‪ .‬هذا هو نفس ربط‬
‫جهاز منفصل إلى الشبكة‪ VMware .‬قام بتعريف هذه الوجه على انها ‪ .VMnet0‬وهذا يمكن أن يتغير‪ ،‬ولكن بالنسبة للجزء االكبر‪ ،‬فنحن‬
‫لسنا بحاجة للقيام بذلك‪ .‬وهناك أيضا عدد من اإلعدادات األخرى يمكننا استخدامها‪ ،‬لكنها خارجة عن النطاق وغير مطلوبة‪ .‬إال إذا كنت بحاجة‬
‫للوصول إلى البيئة االفتراضية الخاص بك من جهاز خارجي‪ bridged networking ،‬ليست شيئا عاديا سوف نقوم بإعداده‪.‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪59‬‬

‫يوفر اإلعداد ‪ bridged‬مع الجهاز االفتراضي ان يكون لديه مكان خاص على الشبكة؛ وهذا يعني أنها ال تشترك في اتصال الشبكة مع‬
‫المضيف‪.‬‬

‫‪Network Address Translation‬‬


‫بالنسبة للجزء األكبر‪ NAT ،‬هو اإلعداد الذي سوف نستخدمه أكثر من غيرها‪ .‬عندما نختار اإلعداد ‪ ،NAT‬فنحن نشاطر بطاقة الشبكة‬
‫المضيفة مع المضيف وليس لديها عنوان خاص بها ولكن ال تزال لديها القدرة على الوصول إلى اإلنترنت‪ .‬السويتش الذي تم حجزه من اجل‬
‫‪ NAT‬هو ‪ .VMnet8‬والجدير بالذكر أنه عند إنشاء األجهزة االفتراضية‪ ،‬فان اإلعداد االفتراضي للشبكة هو ‪ .NAT‬إعداد ‪ NAT‬هو إعداد‬
‫الشبكة الخاص في الهندسة المعمارية‪ ،‬ويتم توفير خدمة ‪ DHCP‬لتعيين عناوين كما هو مطلوب‪ .‬ويظهر مثال إلعداد ‪ NAT‬في الرسم‬
‫البياني التالي‪:‬‬

‫في االعداد ‪ ،NAT‬النظام المضيف الذي لديه محول الشبكة االفتراضي يكون متصل بالشبكة ‪ .NAT‬وهذا يتيح للمضيف واألجهزة الظاهرية‬
‫على التواصل مع بعضها البعض‪ .‬هذه العملية عند استالم البيانات للشبكة ‪ ،VMnet8‬تحدد الشبكة الخارجية حزم البيانات الواردة المقصود‬
‫لكل جهاز في الشبكة االفتراضية‪ ،‬وبعد ذلك يرسلها الى وجهتها الصحيحة‪.‬‬
‫في االعداد الطبيعي‪ ،‬الجهاز ‪ NAT‬ال يمكن الوصول إليه من الشبكة الخارجية‪ .‬ومع ذلك‪ ،‬فمن الممكن تغيير هذا وانشاء ‪port forwarding‬‬
‫بحيث يمكن لآللة الخارجية بدء اتصاالت وإرسال حركة المرور الى الجهاز المتصل بجهاز ‪ .NAT‬لغرض لدينا‪ ،‬نحن نفضل ترك اإلعدادات‬
‫االفتراضية لل ‪ NAT‬وعدم اعداد ‪ port forwarding‬حيث أننا نفضل أال يكون هناك ربط بين آالت الخارجية إلى الجهاز الداخلي ألن هذه‬
‫هي الطريقة التي سوف تكون فيه غالبية الشبكات التي نحن بصدد اختبارها من موقع خارجي‪ .‬على الرغم من أننا ال نستخدم هذه القدرة‪ ،‬فإنه‬
‫قد يكون شيئا تريد تجربته‪ .‬بناء معامل الفحص واالختبار االفتراضي هو كل شيء عن تجريب وإيجاد ما يصلح لك‪ .‬لذلك‪ ،‬للوصول إلى تكوين‬
‫‪ ،port forwarding‬نقوم بفتح ‪ VMware Workstation‬ومن ثم ننتقل الى ‪ | Edit‬ومن ثم ‪ | Virtual Network Editor‬ومن ثم‬
‫‪ | VMnet8‬ثم ‪ | NAT Settings‬ثم ‪ .add‬سيؤدي هذا إلى فتح نافذة إعدادات ‪ ،port forwarding‬وهناك إعدادات إضافية يمكنك‬
‫تخصيصها هنا‪ ،‬ولكن بالنسبة للجزء االكبر‪ ،‬فان االعداد االفتراضي يعمل بشكل جيد لهدفنا‪ .‬ويظهر الشكل التالي مثال على الخيار ‪port‬‬
‫‪ forwarding‬كاالتي‪:‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪60‬‬

‫شيء واحد مهم يجب ان تعرفه هو حقيقة أنه مع كل السويتشات الى قمت بإضافتها في ‪ ،VMware‬فإن عنوان ‪ IP‬المضيف يكون‬
‫‪ X.X.X.1‬و‪ gateway‬سوف تكون ‪ ،X.X.X.2‬وإذا كنت تستخدم خادم ‪ ،DHCP‬ستبدأ مع عناوين ‪ X.X.X.100‬هذه هي اإلعدادات‬
‫االفتراضية‪ ،‬ولكن كما هو الحال مع معظم األشياء‪ ،‬يمكنك تعديل هذا لتلبية اإلعدادات التي تحتاجها من أجل بيئتك‪.‬‬

‫‪The host-only switch‬‬


‫السويتش الخاص بال ‪ host only‬يتم تكوينه بشكل افتراضي عند تثبيت ‪ VMware Workstation‬وهو ‪ .VMnet1‬اتصال ‪host only‬‬
‫يعني أن الجهاز االفتراضي ال يمكنه الوصول إلى اإلنترنت‪ .‬حيث يقوم السويتش بعزل االتصال بين األجهزة االفتراضية والمضيف مع عدم‬
‫وجود القدرة على االتصال خارج المضيف‪ .‬في الواقع‪ ،‬لدينا شبكة معزولة موجود تماما في حيز المضيف‪ .‬هذا ميزة أخرى عظيمة بالنسبة لنا‬
‫عندما نبني معامل الفحص واختبار االختراق‪ .‬مع شبكة خاصة معزولة‪ ،‬حيث يمكننا إجبار حركة المرور الستخدام الطريق الذي نريده‬
‫لتجاربنا‪.‬‬
‫في تكوين ‪ ،host-only‬يتم توفير اتصال الشبكة بين الجهاز االفتراضي والنظام المضيف عن طريق محول الشبكة االفتراضي والذي يكون‬
‫مرئيا على نظام تشغيل المضيف‪ .‬كما هو الحال مع السويتشات األخرى التي يتحها ‪ ،VMware Workstation‬فان السويتش لديه خادم‬
‫‪ DHCP‬مرتبط به والذي يوفر عناوين ‪ IP‬لآلالت التي ترتبط بالشبكة‪ .‬ويظهر الرسم البياني التالي تكوين الشبكة ‪.host only‬‬

‫زوجان من المحاذير نحتاج إلى ذكرها هنا‪ .‬ذكرنا سابقا أن شبكة ‪ host-only‬هي شبكة اتصال معزولة‪ .‬حسنا‪ ،‬مثل معظم األشياء مع‬
‫االفتراضية‪ ،‬هناك طرق بواسطتها يمكنك تغيير هذا الشبكة المعزولة لكيال تبقى معزولة تماما‪ .‬مرة أخرى‪ ،‬لغرض لدينا‪ ،‬هذا ليس شيئا نحتاج‬
‫اليه‪ ،‬ولكن أردنا فقط تغطية جزء وجيز لبعض أساليب كسر أو على األقل إضعاف العزلة‪ .‬يمكنك إعداد ‪ routing‬أو بروكسي التصال‬
‫الشبكة إلى الشبكة الخارجية‪ ،‬وإذا كنت تستخدم نظام التشغيل ‪ Windows Server 2003‬أو ‪ ،Windows XP‬يمكنك استخدام الخيار‬
‫‪ Internet Connection Sharing‬لالتصال بالشبكة الخارجية‪.‬‬

‫‪The custom settings‬‬


‫حتى اآلن‪ ،‬ناقشنا الثالثة سويتشات التي تم تضمينها عند تثبيت البرنامج ‪ ،VMware Workstation‬وهي ‪ ،NAT ،Bridged‬وقدرات‬
‫التكوين ‪ .host-only‬ومع ذلك‪ ،‬بناء بنية الشبكة كما كنا نخطط له‪ ،‬فان هذه السويتشات الثالث فقط تحد لنا وال تقدم لنا ما نحتاج إليه‪.‬‬
‫لقد حان الوقت لوضع كل شيء معا والبدء في بناء معمارية ‪( layered architecture‬سوف نتحدث عن المعماريات بالتفصل الحقا) لدينا‪.‬‬
‫هيكل هذه المعمارية من وجهة نظر ‪ black box‬هي رفيعة المستوى "‪ ."high-level black box‬مثال على شكل هذه المعمارية من‬
‫خالل الرسم البياني التالي‪:‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪61‬‬

‫كما يظهر من الرسم البياني السابق‪ ،‬قمنا بتحديد السويتشات الذي نريدها‪ ،‬وهذه هي قوة التخصيص‪ .‬يمكننا أن نبني وتكوين هذه السويتشات‬
‫طبقا للمواصفات التي نريدها من خالل تقنيات قمنا بتغطيتها سابقا‪.‬‬
‫يمكنك استخدام قائمه من العناوين الخاصة بك‪ .‬كما تالحظ‪ ،‬انه ليس لدينا ‪ VMnet1‬مدرج في الرسم البياني السابق‪ ،‬ولكن لدينا عنوان ‪IP‬‬
‫مخصص له‪ .‬هذا هو ألننا نريد أن يكون لديك سويتش واحد مخصص لتجاربنا‪ .‬سوف نشرح هذا بالتفصيل الحقا‪.‬‬

‫لقد قطعنا كيفية تخصيص سويتشات الشبكة سابقا‪ .‬سوف نكرر الخطوات هنا للسويتش ‪ .VMnet1‬قم بفتح ‪VMware Workstation‬‬
‫الخاص بك وانتقل إلى ‪ | edit‬ثم ‪ | Virtual Network Editor‬ثم ‪ .VMnet1‬في مربع ‪ ،Subnet IP‬ندخل ‪ .12.1.2.2‬ثم ترك بقية‬
‫اإلعدادات االفتراضية كما هيا‪ .‬يمكنك التحقق مما إذا كانت اإلعدادات الخاصة بك تطابق تلك التي تظهر في الصورة التالية‪:‬‬

‫بمجرد االنتهاء من التحقق من اإلعدادات‪ ،‬انقر على ‪ Apply‬ثم انقر على ‪ .OK‬أداء نفس الخطوات لتكوين بقية الشبكات‪VMnet2 .‬‬
‫و‪ ،VMnet4‬سيكون لديك تحديد خانة استخدام خادم ‪ .DHCP‬يتم تمكين هذا افتراضيا مع ‪ ،VMnet1‬ولكن ليس لبقية المفاتيح‪ .‬وبمجرد‬
‫االنتهاء من تكوين الشبكات والتحقق مما إذا كانت اإلعدادات الخاصة بك تطابق التي تريده‪.‬‬

‫‪ 1.1‬اختيار مكونات المعمل "‪"Choosing range components‬‬


‫في هذا القسم‪ ،‬نريد تحديد المكونات التي سوف نستخدمها في جميع أنحاء المعمارية لدينا‪ .‬النقطة الرئيسية هي أن لدينا تصميم الشبكة‪ ،‬حتى‬
‫اآلن كل ما علينا فعله هو ملء ذلك‪ .‬أول مكون والتي هي من أهم آالت نريد أن نضعها في المعمارية هي االله التي سوف نستخدمها لتنفيذ‬
‫الهجمات‪.‬‬

‫‪The attacker machine‬‬


‫هناك عدد من الخيارات عندما يتعلق األمر باختيار الجهاز الذي سوف نستخدمه في أداء الهجوم‪ .‬وعادة ما يتم ذلك بناء على ما لديك من خبره‬
‫اتجاه األدوات المختلفة التي سوف تستخدمها‪ ،‬واألهم من ذلك‪ ،‬أنظمة التشغيل‪ .‬من الشائع بناء آالت المهاجم متعددة وتخصيصها للعمل في‬
‫بيئات مختلفة‪ .‬يمكنك دائما خلق وبناء الجهاز الخاص بك‪ ،‬ولكن في هذا الكتاب‪ ،‬سوف نستخدم واحدة من التوزيعات األكثر شعبية وهي كالي‬
‫لينكس‪ .‬وشيء آخر إذا كنت ترغب في القيام ببناء آلة ‪ .Backtrack 5R3 distribution machine‬صحيح أن كالي لينكس هو استمرار‬
‫لتوزيعه الباك تراك‪ ،‬ولكن هناك أدوات في ‪ Backtrack 5R3‬التي لم تعد موجودة في كالي‪ ،‬مثل ‪ Gerix WiFi Cracker‬و‪.Nessus‬‬
‫مرة أخرى‪ ،‬هذا إلى حد كبير مسألة تفضيل شخصيه‪ .‬لغرضنا هنا‪ ،‬نحن سوف نذهب إلى التركيز على توزيعه كالي كخيار لدينا‪.‬‬

‫لقد قمنا سابقا بتنصيب توزيعه كالي‪ .‬ولكن من المعروف أيضا ان الموقع الرسمى لتوزيعه كالي يوفر نسخه افتراضيه تعمل على ‪VMware‬‬
‫دون الحاجة الى اعدادها او مواجه أي من مشاكل التنصيب كبيئة افتراضيه‪ .‬ويمكن تحميل هذه ‪ image‬الجاهز للعمل على ‪ VMware‬من‬
‫خالل الرابط التالي‪:‬‬
‫‪http://www.offensive-security.com/kali-linux-vmware-arm-image-download/‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪62‬‬

‫بمجرد أن تقوم بتحميل الجهاز االفتراضي‪ ،‬قم بفك ضغطه في أي موقع من اختيارك ثم فتحه باستخدام ‪.VMware Workstation‬‬
‫وبمجرد االنتهاء من فتحه‪ ،‬فإن أول شيء نريد القيام به هو إضافة محول شبكة أخرى ألن الجهاز االفتراضي لديه محول واحد متصل إلى‬
‫واجهة ‪ ،NAT-VMnet8‬وهذا يوفر لنا االتصال على النقاط الخارجية‪ .‬ومع ذلك‪ ،‬نريد أيضا ان تكون اآللة لدينا متصلة إلى السويتش‬
‫‪ VMnet1‬حتى نتمكن من اختبار مباشرة لألمور قبل أن نضيف الفالتر وطبقات الحماية‪.‬‬

‫االن‪ ،‬لدينا اثنين من بطاقات الشبكة في آلة كالي لينكس‪ :‬واحده متصل إلى السويتش ‪ VMnet8 NAT‬واآلخر متصال بالسويتش ‪VMnet1‬‬
‫‪ .host only‬وهذا يوفر لنا إمكانية الوصول المباشر إلى هاتين الشبكتين دون الحاجة إلى تكوين أية إعدادات إضافية‪ .‬كما ذكرنا‪ ،‬سوف‬
‫نستخدم السويتش ‪ VMnet1‬لالختبار‪ ،‬وبمجرد اكتمال االختبار‪ ،‬فإننا سوف نضع هدفا في الموقع المطلوب في الهندسة المعمارية وثم تنفيذ‬
‫االختبار على هذا‪.‬‬
‫قبل أن تفعل أي شيء آخر‪ ،‬سنقوم بتحديث توزيعه كالي‪ .‬ولكن في بعض األحيان‪ ،‬التحديث قد يحدث به أخطاء‪ ،‬وذلك قبل أداء التحديث‪،‬‬
‫ينصح بشدة أن نأخذ لقطة من الجهاز‪ .‬وذلك من خالل في ‪ ،VMware Workstation‬انتقل إلى ‪ .VM | Take snapshot‬في النافذة‬
‫التي تفتح‪ ،‬أدخل اسما للقطة الخاص بك وانقر على ‪.Take snapshot‬‬

‫‪Router‬‬
‫المستوى األول من الدفاع التي نواجه هو جهاز التوجيه "‪ ."router‬هناك عدد من األجهزة المختلفة التي يمكن أن تواجها‪ ،‬وإذا كان لدينا‬
‫متسع من بيئة معملية غير المحمول‪ ،‬يمكننا استخدام األجهزة المادية الفعلية‪ .‬المصدر أنني متأكد أن الكثير منكم يعرف عنه هو مواقع‬
‫الكترونية مثل موقع ‪ eBay‬التي تساعدك على التقاط المعدات المستعملة بمبلغ معقول‪ .‬موقع آخر أيضا للحصول على أجهزة سيسكو‬
‫المستخدمة هي ‪ .http://www.routermall.com‬ما يعجبني في هذا الموقع هو أنك تحصل على الكابالت وأيضا على البرنامج ‪IOS‬‬
‫عند شراء المعدات منها‪ .‬وكما قلنا من قبل‪ ،‬نحن سوف نركز على معمل االختبار على الكمبيوتر المحمول لدينا‪ ،‬لذلك فان جهاز التوجيه‬
‫المادي ال يتوفر لنا مع تلك القدرة‪ .‬لذا‪ ،‬يجب علينا أن ننظر في الحلول التي تمكننا من وضع اآللة وإما المحاكاة أو أداء مهام جهاز التوجيه‬
‫للهندسة المعمارية لدينا‪.‬‬
‫في حين انه صحيحا أننا يمكن جعل أي آلة كجهاز توجيه (‪ )routing‬باستخدام قدرة ‪ packet forward capability‬للجهاز‪ ،‬ليس هذا‬
‫هو الشيء الوحيد الذي نريد تحقيقه مع جهاز الراوتر لدينا‪ .‬عندما تواجه جهاز في محيط االختبار الخاص بك‪ ،‬فانه من المرجح أن يكون هذا‬
‫الجهاز لديه شكال من أشكال الفلترة على ذلك‪ .‬لذلك‪ ،‬نحن نريد عنصر الراوتر المختار ان يكون لديه القدرة على أداء بعض من أشكال الفلترة‪.‬‬
‫هناك حل واحد لذلك وهو برنامج المحاكاة لراوترات سيسكو "‪ ،Dynamips ،"Cisco router emulation software‬والذي كتبه في‬
‫األصل كريستوف فولييت في عام ‪ 1221‬واستمر في اصداره حتى عام ‪ .1221‬لم يعد يتم االحتفاظ ببرمجيات ‪ Dynamips‬األصلي‪ ،‬ولكن‬
‫ألغراضنا‪ ،‬فان اإلصدارات األخيرة تقدم كافة الوظائف التي سوف تحتاجها‪ .‬وهناك شرط واحد الستخدام أي من برامج محاكاة سيسكو وهذا‬
‫هو أن يكون لديك نسخة من نظام التشغيل سيسكو ‪ IOS‬للوصول إليه وتشغيله‪ .‬وسوف نقدم حال بديال في المقطع التالي ألولئك الذين ليس‬
‫لديهم القدرة على الحصول على نظام التشغيل سيسكو ‪ .IOS‬من هذه النقطة إلى األمام‪ ،‬سوف نعمل مع البرنامج ‪ Dynamips‬ثم الواجهة‬
‫النصية التي هي ‪ .Dynagen‬ألولئك الذين يريدون واجهة كواجهة المستخدم الرسومية وأيضا أحدث نسخة من ‪ ،Dynamips‬يمكنك الذهاب‬
‫إلى ‪ http://www.gns3.com‬والحصول على البرمجيات الالزمة هناك‪ .‬باإلضافة إلى ذلك‪ ،‬يمكنك الحصول على العديد من الموارد‬
‫والوثائق عن البرنامج‪ ،‬وليس فقط أنها توفر ألجهزة سيسكو ولكن أيضا لألجهزة جونيبر‪ .‬وهو إشارة ممتازة على المضي قدما في تطوير‬
‫المختبرات الخاصة بك لمحاكاة مجموعة متنوعة من األجهزة‪ .‬يحتوي البرنامج أيضا على حزمة المثبت ويندوز ويمكنك تشغيل المحاكي‬
‫ضمن بيئة ويندوز‪.‬‬
‫الـ ‪ GNS3‬ببساطة هو ليس برنامج محاكي للشبكات كما يظن األغلبية بل هو عبارة عن واجهة رسومية فقط لمحاكي الشبكات الـ‬
‫‪ Dynamips‬واألخير و هو برنامج مفتوح المصدر يعمل على جميع أنواع األنظمة من بينها ويندوز ولينوكس وماكنتوش ووظيفته عمل‬
‫محاكاة ألجهزة سيسكو‪ ،‬ولكي يعمل الـ ‪ GNS3‬فهو يحتاج الى ‪ 1‬أشياء مهمة‬
‫‪ -‬أوال يحتاج طبعا الى الـ ‪ Dynamips‬والذي يعد بدوره قلب النظام الذي سوف يقوم بمحاكاة أنظمة سيسكو من خالل محاكاة الـ‬
‫‪.IOS‬‬
‫‪ -‬ثانيا يحتاج الى الـ ‪ Dynagen‬وهو صلة الوصل بين قلب النظام ‪ Dynamips‬والمستخدم وتتم عبره نقل األوامر الكتابية من‬
‫المستخدم إلى الجهاز الذي يتم عمل محاكاة له‪.‬‬
‫‪ -‬ثالثا تحتاج الى برنامج ‪ WinPcap‬وهو برنامج يقوم بالتقاط ونقل الـ ‪ Packet‬في الشبكة عبر مجموعة من البروتوكوالت‬
‫‪ -‬رابعا غير مهم لكن أذا في حال أردت أن تقوم بعمل محاكي للجدران النارية الخاصة بسيسكو أو جونيبر فأنت تحتاج الى برنامج‬
‫‪.Qume‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪63‬‬

‫نقوم بتحميل آخر نسخة من البرنامج وال نحتاج إلى أي شيء آخر الن مع البرنامج يأتي معه ‪Dynamips‬و‪.Dynagen‬‬
‫االن هناك طريقتين ليتم انشاء الراوتر باستخدام محاكى الراوتر اما عن طريق نظام الويندوز او على نظام لينكس كاالتي‪:‬‬
‫‪ -‬طريق تصيب الراوتر باستخدام نظام التشغيل لينكس‪.‬‬
‫مناقشة كافية على هذا‪ ،‬دعونا نبدأ ببناء جهاز التوجيه "‪ !"router‬نحن هنا سوف نستخدم نظام التشغيل لينكس التوزيعة أوبونتو حيث ان‬
‫لديها منصة محاكاة جهاز التوجيه مدمجة بها‪ .‬يمكنك الذهاب إلى موقع أوبونتو وتحميل التوزيعة من الرابط التالي‪:‬‬
‫‪http://www.ubuntu.com/download/desktop‬‬
‫أحدث إصدار مستقر في وقت كتابة هذا الكتاب هو ‪ ،11‬وهذا ما سوف نقوم باستخدامه لمنصة جهاز التوجيه لدينا‪ .‬يمكن أن يكون هناك بعض‬
‫التحديات مع إصدار ‪ 21‬بت‪ .‬ولكنه سوف يعمل على كل من اإلصدار ‪ 11‬أو ‪ 21‬بت‪.‬‬
‫بمجرد االنتهاء من تحميل ‪ ،ISO image‬سوف نقوم بإنشاء الجهاز الجديد في ‪ VMware Workstation‬وتحميل ‪ .ISO image‬غطينا‬
‫خطوات انشاء منصة لينكس مع كالي سابقا وهنا سوف نتبع نفس الخطوات‪ VMware Workstation .‬من المرجح أنها سوف تتعترف‬
‫على ‪ ISO image‬وتقدم عملية تثبيت سهله‪ .‬هذا هو الشيء الذي يجب انت تقبله‪ ،‬أو ال‪ ،‬وهذا يتوقف على التفضيل الشخصي‪.‬‬
‫بعد أن قمت بإنشاء االلة وبدء التشغيل من ‪ ،ISO image‬سوف تعمل من خالل متطلبات التركيب وتثبيت البرنامج في القرص الصلب‬
‫للجهاز االفتراضي‪ .‬بالنسبة للجزء األكبر‪ ،‬يمكنك قبول اإلعدادات االفتراضية للتركيب‪ ،‬ولكن ال تتردد في إجراء تغييرات حسب الحاجة‪.‬‬
‫تذكر‪ ،‬هذا هي واحده من مزايا البيئات االفتراضية‪ .‬إذا قمت بأي خطا ما‪ ،‬فيمكنك انشاء واحد اخر‪ ،‬أو كما ناقشنا‪ ،‬إذا اتخذنا لقطة‪ ،‬يمكننا‬
‫استعادة ذلك‪ .‬والشيء العظيم في أوبونتو هو القدرة على إضافة الحزم بمجرد االنتهاء من التثبيت‪.‬‬
‫عند اكتمال تثبيت‪ ،‬الجهاز االفتراضي‪ ،‬افتراضيا‪ ،‬سوف يكون هناك محول شبكة واحد متصل إلى السويتش ‪ ،NAT‬ولكن كما قلنا من قبل ان‬
‫تصميمنا‪ ،‬بحاجة الى اثنين من محول الشبكات على جهاز التوجيه لدينا‪ .‬هذا لتوفير الربط كما هو مبين في الرسم البياني التالي‪:‬‬

‫إلنشاء البنية التي لدينا مع جهاز أوبونتو‪ ،‬فانه يجب لدينا إضافة محول شبكة االتصال وتوصيله إلى السويتش ‪ .VMnet2‬مع في إم وير‪ ،‬ليس‬
‫من الضروري اغالق الجهاز االفتراضي إلضافة محول شبكه جديد‪ .‬لفعل ذلك في البرنامج‪ ،‬نقوم بالنقر فوق ‪ | View‬ثم ‪Console View‬‬
‫إلظهار شاشة االعداد للجهاز االفتراضي‪ .‬ثم نقوم بالنقر على ‪ Edit virtual machine settings‬ثم إضافة محول شبكة االتصال‬
‫وتوصيله إلى ‪ .VMnet2‬ويظهر الصورة التالية مثال على االعداد المطلوب‪:‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪64‬‬

‫اآلن لدينا مجموعة التهيئة آللة راوتر لدينا‪ ،‬نحن بحاجة للحصول على ‪ IOS image‬ونسخه في الجهاز‪ .‬كما ذكرنا‪ ،‬وإذا لم يكن لديك‬
‫الوصول إلى ‪ ،IOS image‬أنك لن تكون قادرا على استخدام أداة ‪ .Dynamips‬أوال يمكنك الحصول على ‪ IOS image‬من خالل الرابط‬
‫التالي‪.http://commonerrors.blogspot.com/search/label/GNS3%20IOS :‬‬
‫البرنامج ‪ Dynamips‬متاح في مستودع البرمجيات الخاص باوبونتو‪ .‬في آلة أوبونتو الخاص بك‪ ،‬افتح نافذة التر منال من خالل النقر على‬
‫أيقونة التر منال الموجودة في شريط القوائم على الجانب األيسر من الشاشة‪ .‬إذا كنت ال ترى رمز التر منال‪ ،‬يمكنك النقر على ‪Ubuntu‬‬
‫‪ Software Center‬ثم البحث عن ذلك‪.‬‬
‫في إطار التر منال‪ ،‬نقوم بإدخال االمر "‪ ."sudo apt-get install dynamips‬وهذا لجلب البرنامج ‪ Dynamips‬وتثبيته‪ .‬بعد أن تكون‬
‫قد قمت بتثبيت ذلك‪ ،‬سوف نقوم بعد ذلك بتثبيت واجهة التطبيق‪ .‬وذلك من خالل اداخل االمر "‪ "sudo apt-get install dynagen‬في‬
‫إطار محطة التر منال‪.‬‬
‫ملف االعداد الذي سوف نستخدمه لتكوين جهاز التوجيه سوف يتم نسخه الى مسار طويل نوعا ما‪ ،‬وسوف نقوم إصالح هذا اآلن‪ .‬سوف‬
‫نستخدم ملف االعداد على سبيل المثال‪ .simple1.net ،‬وذلك بإدخال االمر التالي في التر منال‪:‬‬
‫"‪"cp /usr/share/doc/dynagen/examples/sample_labs/simple1/simple1.net /opt/config.net‬‬
‫ملحوظه "يمكنك االستغناء عن كتابة االمر ‪ sudo‬قبل كل امر وذلك بإدخال االمر ‪"sudo –i‬‬
‫اآلن لدينا ملف التكوين الذي قمنا بنسخه‪ ،‬دعونا نلقي نظرة على ذلك‪ .‬نقوم بإدخال االمر "‪ "more opt/config.net‬في التر منال‪ .‬ويظهر‬
‫مثال لملف التكوين االفتراضي في الصورة التالية‪:‬‬

‫هناك نوعان من المناطق التي سوف نركز عليها في ملف التكوين لدينا‪ .‬في جزء ‪ ،router image‬حيث يكون لدينا هنا تحديد مسار‬
‫‪ router image‬على النظام‪ .‬المنطقة الثانية هي ‪ .router section‬في المثال‪ ،‬نحن نذهب الستخدام اسم ‪ R1‬لجهاز الراوتر‪ ،‬وكما ترون‪،‬‬
‫جهاز الراوتر ‪ R1‬لديه واجهة واحدة ‪ serial interface‬والتي يتم توصيلها إلى واجهة ‪ serial interface‬من ‪ .R2‬هذا هو اعداد لعينة‬
‫الثنين من الراوتر‪ ،‬ولكن من اجل هدفنا‪ ،‬فإننا ال نحتاج الكثير من أجهزة التوجيه‪ .‬ويمكن استكشاف التكوينات المختلفة‪ ،‬ولكن في هذا الكتاب‪،‬‬
‫فإننا سوف نركز على مجرد وجود جهاز توجيه "‪ "router‬واحد ألن هذا هو الجهاز الذي حددناه في التصميم لدينا‪.‬‬
‫نحن نريد اعداد جهاز التوجيه ‪ R1‬لكي يحتوي على اثنين من واجهات الشبكة؛ واحد سيربط إلى السويتش ‪ VMnet8 NAT‬واآلخر سيتصل‬
‫بالسوتيش ‪ .VMnet2‬وبناء على ذلك‪ ،‬لدينا اثنين من بطاقات الشبكة على جهاز أوبونتو الذي تم تكوينه بهذه الطريقة‪ ،‬لذلك هو مجرد مسألة‬
‫دخول إلعداد الواجهات في الملف ‪ .config.net‬لدينا مدخل التكوين الذي سيعترف بالواجهات‪ ،‬وهذا هو ما يعرف باسم ‪،tap interface‬‬
‫وهذا هو خارج النطاق بالنسبة لنا لنناقشه هنا‪ .‬ومع ذلك‪ ،‬إذا كنت ترغب في معرفة المزيد‪ ،‬راجع الرابط التالي‪:‬‬
‫‪http://www.innervoice.in/blogs/2013/12/08/tap-interfaces-linux-bridge/‬‬
‫نقوم بفتح الملف ‪ config.net‬عن طريق إدخال االمر "‪ ."gedit /opt/config.net‬تغيير المسار إلى مسار ملف ‪ IOS image‬الخاص‬
‫بك على النحو المطلوب‪ ،‬ثم في قسم التوجيه ‪ ،R1‬أدخل ما يلي في مكان الواجهة التسلسلية الحالية‪:‬‬
‫‪f0/0 = NIO_linux_eth:eth0‬‬
‫‪f1/0 = NIO_linux_eth:eth1‬‬
‫هذا سوف يقوم بربط واجهات إيثرنت السريعة "‪ "fast Ethernet interfaces‬إلى واجهات آلة أوبونتو‪ .‬مكان آخر قد ترغب في تغييره هو‬
‫تخصيص ذاكرة الوصول العشوائي‪ .‬االفتراضي هو ‪ ،MB 191‬وهذا منخفض قليال‪ ،‬لذلك ننصحك بأن تقوم بزيادته إلى ‪ .112‬مثال على ما‬
‫ملف االعداد في هذه الخطوة يجب أن تبدو كما هو مبين في الصورة التالية‪:‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪65‬‬

‫هو أيضا فكرة جيدة تعليق الجهاز ‪" R2‬بوضع العالمة ‪ #‬قبل اإلعدادات التي يحتويها بحيث تكون كاالتي (]]‪ ")#[[ROUTER R2‬حيث‬
‫اننا لن نستخدمه‪ .‬نحن اآلن على استعداد الختبار التكوين لدينا‪ .‬في نافذة التر منال نقوم بإدخال االمر‪ .dynamips -H 7200 ،‬هذا سوف‬
‫يبدأ خادم ‪ Dynamips‬على المنفذ ‪ .2122‬إذا سارت االمور بشكل جيد‪ ،‬يجب أن تشاهد إخراج مشابه لتلك التي تظهر في الصورة التالية‪:‬‬

‫الخطوة التالية هي أن نبدأ ملف التكوين لدينا والتي سوف تتفاعل مع ‪ IOS‬سيسكو التي قمنا بتحميلها على الجهاز‪ .‬على سبيل المثال ‪IOS‬‬
‫‪ image‬التي نستخدمها في الكتاب هي لجهاز التوجيه ‪ ،7200 series router‬حتى نتمكن من تكوين عدد من الواجهات على ذلك‪ .‬ومع‬
‫ذلك‪ ،‬من اجل الغرض لدينا‪ ،‬فنحن بحاجة فقط الثنين من واجهات إيثرنت سريعة ألداء وظيفة التوجيه واألهم من ذلك‪ ،‬تقديم قدرة الترشيح‬
‫لحركة المرور بين قطاعات الهندسة المعمارية لدينا‪.‬‬
‫في إطار محطة طرفية أخرى‪ ،‬ندخل االمر "‪ ."dynagen /opt/config.net‬هذا سوف يقوم بقراءة ملف التكوين الذي أنشأناه وتحميل‬
‫‪ IOS image‬للوصول‪ .‬نأمل‪ ،‬اننا لن نواجه أي خطأ هنا‪ ،‬ولكن إذا قمت بذلك‪ ،‬فحان الوقت الستكشاف‪ .‬الخطأ األكثر شيوعا هو خطأ مطبعي‬
‫في المسار‪ .‬وإذا كان هناك خطأ في المسار‪ ،‬سترى رسالة تقول الصورة ال يمكن العثور عليه‪ .‬وتظهر الصورة التالية مثال على ما يجب أن‬
‫تراه في حال نجاح العملية‪:‬‬

‫في هذه المرحلة‪ ،‬نحن مستعدون لبدء جهاز التوجيه ‪ .R1‬يمكنك تحقيق ذلك عن طريق ادخال االمر ‪ console R1‬في الترمنال ‪.Dynagen‬‬
‫وهذا سوف يقوم بتسجيل دخولك إلى جهاز التوجيه كما لو كنت متصال عبر كابل وحدة التحكم‪ .‬والذي يؤدى الى ظهور نافذة أخرى مفتوحة‪.‬‬
‫هذا هو الوصول إلى جهاز التوجيه‪ .‬يجب الضغط على مفتاح ‪ Enter‬حتى تصل الى ‪ login prompt‬كما هو موضح في الصورة التالية‬
‫ولكنه في االول سوف يسألك هل تريد استخدام ‪ wizard‬الخاص بعملية االعداد فاكتب ‪ No‬واختار االعداد اليدوي‪:‬‬

‫من هنا‪ ،‬هي مسألة استخدام أوامر التوجيه إلعداد اثنين من الواجهات لجهاز التوجيه لدينا‪ .‬قم بإدخال االمر ‪ en‬في موجه الراوتر للدخول في‬
‫وضع متميز على جهاز التوجيه‪ .‬بمجرد إنك أصبحت في وضع متميز‪ ،‬قم بإدخال االمر ‪ show ip int brief‬إلحضار تكوين واجهة جهاز‬
‫التوجيه‪ .‬سترى أنه ليس هناك أي تكوين للواجهة بعد‪ ،‬لذلك علينا تكوينه‪ .‬ويظهر مثال على إخراج األمر في الصورة التالية‪:‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪66‬‬

‫نريد اآلن اعداد هذه الواجهات (‪ f0/0‬و ‪ )f1/0‬حيث انه لم يتم تعيينهما حاليا‪ .‬نحن نفعل ذلك مع التكوين العمومي من خيار الترمنال‪ .‬للوصول‬
‫إلى ذلك‪ ،‬ندخل االمر ‪ configure t‬الى موجه األوامر للراوتر‪ .‬وهذا سوف يضعك في وضع التكوين‪ .‬ندخل االمر ‪interface f0/0‬‬
‫للوصول إلى قائمة تكوين واجهة الشبكة وندخل عنوان ‪ IP‬بإدخال االمر التالى "‪ ."ip address 192.168.177.10 255.255.255.0‬وهذا سوف‬
‫ينشا اإلعداد لواجهة ‪ f0/0‬التي ستربط لدينا مع السويتش ‪ .VMnet8 NAT‬إلظهار الواجهة في حالة العمل‪ ،‬ندخل االمر ‪.no shutdown‬‬
‫بعد أن نكون قد فعلنا ذلك‪ ،‬فسوف نفعل الشيء نفسه للواجهة المقبلة‪ .‬في إطار الراوتر ندخل االمر‪ interface f1/0 ،‬للوصول إلى قائمة‬
‫التكوين للواجهة ‪ .f1/0‬وبعد ذلك‪ ،‬علينا أن تكوين عنوان ‪ IP‬التي يتصل بها الى السويتش ‪ ،VMnet2‬لذلك قم بإدخال عنوان ‪ IP‬عن طريق‬
‫االمر "‪ ."ip address 10.2.0.1 255.255.255.0‬في إطار تكوين الراوتر‪ ،‬وأيضا لطرح واجهة في حالة العمل عن طريق إدخال االمر‬
‫‪ .no shutdown‬نحن االن قمنا بإعداد‪ .‬للعودة إلى الموجه الرئيسي‪ ،‬ننقر ‪ .Ctrl + Z‬للتحقق من التكوين الخاص بك عن طريق إدخال‬
‫االمر ‪ .show ip int brief‬الخطوة المقبلة‪ ،‬هو التحقق مما إذا كان لدينا اتصال مع السويتش ‪ VMnet8‬عن طريق إدخال االمر التالي‬
‫‪ .ping 192.168.177.1‬ويظهر الصورة التالية مثال على التكوين الذي قمنا بإنشائه‪:‬‬

‫أنت لن تكون قادر على التحقق من السويتش اآلخر حتى تقوم بتوصيل شيء إلى السويتش االفتراضي في الداخل‪ .‬وذلك ألن السويتش‬
‫‪ VMnet2‬ليس محول شبكة في الجهاز المضيف الخاص بك إال إذا كنت قد اخترت هذا الخيار حين انشائه‪ .‬والشيء التالي التي سوف نقوم به‬
‫هو حفظ التكوين لدينا‪ .‬وهذا هو أيضا واحدة من أهم األشياء‪ .‬للقيام بذلك‪ ،‬ندخل االمر ‪ .write memory‬طريقة بديلة‪ ،‬وهو استخدام االمر‬
‫‪.copy run start‬‬
‫لدينا اآلن راوتر سيسكو ‪ 2122‬كامل على آلة أوبونتو‪ ،‬ويمكننا تكوين أي شيء داخل ‪ IOS‬التي نريد‪ ،‬مثل ‪ IPsec‬وغيرها من االمور‪ .‬في‬
‫الوقت الراهن‪ ،‬سنوقف أداة ‪ Dynamips‬ومن ثم االنتقال الى الذين يريدون حال من دون الحاجة للحصول على ‪ image‬سيسكو ‪ .IOS‬في‬
‫موجه ‪ dynagen‬الخاص بك‪ ،‬أدخل االمر ‪ stop R1‬وذلك لغلق الراوتر‪.‬‬
‫اما إذا لم يكن لديك ‪ image‬سيسكو ‪ ،IOS‬فيمكن جعل نظام التشغيل يقوم بعمل الراوتر من فلتره وذلك باستخدام قواعد ‪ iptables‬المتوفر‬
‫في نظام التشغيل لينكس المعادل لجدار الحماية "‪ "firewall‬لفلترة الحزم‪.‬‬
‫‪ -‬طريق تصيب الراوتر باستخدام نظام التشغيل ويندوز‬
‫نقوم بتحميل آخر نسخة من البرنامج وال نحتاج إلى أي شيء آخر الن مع البرنامج يأتي الدايناميبس والداينجين كما سوف نرى في الشرح‬
‫وللتحميل سوف نتوجه الى رابط الموقع التالي‪.http://www.gns3.com :‬‬
‫نختار آخر إصدار ونقوم بتحميله ونبدأ التنصيب وذلك بالنقر على ايقونة البرنامج ‪ .GNS3-1.2.1-all-in-one‬والتي من خاللها نتبع‬
‫‪ Wizard‬الخاص بعملية التنصيب‪ .‬هذا البرنامج أيضا متوفر على أنظمة التشغيل لينكس‪.‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪67‬‬

‫االن بعد االنتهاء من التنصيب فهذا شكل البرنامج كاالتي‪:‬‬

‫نجد انه يوفر لنا واجه رسوميه والتي من خالالها نضع بيانات الراوتر ويمكن أيضا تضمينها مع المنصات االفتراضية‪ .‬ولكن هذا البرنامج‬
‫يتعامل فقط مع المنصات االفتراضية المنشاء من قبل البرنامج ‪ .Oracle VM VirtualBox‬حيث يمكن استخدام المنصف االفتراضية‬
‫الخاصة بالبرنامج لربط األجهزة مع بعض‪.‬‬

‫‪Firewall‬‬
‫اآلن بعد أن قمنا بتكوين واعداد جهاز التوجيه‪ ،‬فان المكون المقبل في الهندسة المعمارية لدينا هو جدار الحماية‪ .‬كما هو الحال مع خيارات‬
‫التوجيه‪ ،‬هناك العديد من الخيارات التي يمكن أن نختارها‪ .‬أوال‪ ،‬دعونا نلقي نظرة على معمارية شبكتنا فيما يتعلق بجدار الحماية‪ .‬ويظهر هذا‬
‫في المخطط التالي‪:‬‬

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

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪68‬‬

‫نية هنا لتوفير جدار الحماية حتى نتمكن من اختبار عدد من التكوينات المختلفة عند الممارسة ضد العديد من نقاط الضعف المختلفة التي‬
‫وجدناها خالل بحثنا‪ .‬يمكنك تحميل ‪ ISO image‬للجدار الحماية ‪ Smoothwall‬من ‪.http://www.smoothwall.org/download/‬‬
‫بمجرد االنتهاء من تحميل ‪ ،ISO image‬نقوم بإنشاء الجهاز االفتراضي‪ .‬نحن نريد هذا الجهاز ليكون ذات ثالث واجهات لتزويدنا باالتصال‬
‫التي نحتاجها لتلبية تصميم شبكتنا‪ .‬ويرد مثال على هذا التكوين في الصورة التالية‪:‬‬

‫هذا الجهاز يتطلب ثالث بطاقات من الشبكة‪ ،‬وسيتم ربط كل من هذه البطاقات إلى واجهات المضيف باستيون‪ ،‬وهي كما يلي‪:‬‬
‫‪VMnet2—eth0—Red‬‬
‫‪VMnet3—eth1—Green‬‬
‫‪VMnet4—eth2—Orange‬‬
‫الشيء اآلخر الذي يتعين علينا القيام به هو تغيير نوع القرص الصلب‪ .‬افتراضيا‪ ،‬يتم إنشاء القرص الصلب من النوع ‪ SCSI‬وهذا يسبب‬
‫مشاكل مع األداة‪ .‬وذلك لتجنب هذا‪ ،‬سوف نقوم بتغيير اإلعداد إلى ‪ .IDE‬ذلك من خالل االنتقال إلى ‪Edit virtual machines settings‬‬
‫ثم ‪ Hard Disk‬ثم ‪ .Remove‬وبمجرد إزالة القرص الثابت‪ ،‬ننتقل إلى ‪ Edit virtual machines settings‬ثم ‪ Hard Disk‬ثم‬
‫‪ Next‬ثم ‪ IDE‬ثم ‪ Next‬ثم ‪ Next‬ثم ‪.Finish‬‬
‫عند تشغيل الجهاز‪ ،‬سوف تبدأ الحزمة بالتثبيت‪ .‬قم بقراءة الشرح للخطوات المختلفة وقبول اإلعدادات االفتراضية لعملية التثبيت‪ .‬قبول التكوين‬
‫االفتراضي ل ‪ .half-open‬فإن هذا اإلعداد يقوم بتثبيت النهج الحذر لألمن‪ ،‬وهذا هو‪ ،‬ال يسمح بشيء دون تحديد ذلك بوضوح في معظم‬
‫الحاالت‪.‬‬

‫في الجزء الخاص بتكوين شبكة االتصال "‪ ،"Network Configuration‬نحن نريد تغيير االعداد لتتناسب مع تصميم السويتش المطلوبة‪،‬‬
‫وهذا هو األخضر والبرتقالي‪ ،‬واألحمر‪ .‬في إطار تكوين الشبكة‪ ،‬نحدد ‪ GREEN +ORANGE + RED‬ثم ننقر فوق ‪.Enter‬‬
‫مالحظه‪ :‬ال يمكنك استخدام الماوس‪ ،‬لذلك سوف تحتاج إلى استخدام مفاتيح األسهم والمفتاح ‪ TAB‬للتنقل بين القائمة‪.‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪69‬‬

‫تحقق من إعدادات االتصال الخاصة بك كما هو موضح في الصورة التالية‪:‬‬

‫الشيء التالي نحن بحاجة إلى اعداد ‪ .card assignments‬عند تحديد هذا‪ ،‬سيتم بحث إمكانات تكوين الشبكة التي أنشأناها‪ .‬وهكذا‪ ،‬في كل‬
‫مرة يتم الكشف عن بطاقة الشبكة‪ ،‬فإنه سيتم تعيين ذلك إلى الواجهة‪ .‬الواجهات سوف تكون األحمر‪ ،‬األخضر‪ ،‬ومن ثم البرتقالي‪ .‬لذلك نحن‬
‫بحاجة إلى تعينهم في هذا النظام لتطابق ‪ ،eth1 ،eth0‬و‪ ،eth2‬على التوالي‪.‬‬
‫بمجرد تعيين كل هذا‪ ،‬يتم تعيين الشيء التالي وهو عناوين ‪ .IP‬سيتم تكوين عناوين ‪ IP‬على سبيل المثال على النحو التالي‪:‬‬
‫‪Red—DHCP‬‬
‫‪Green—10.4.0.10‬‬
‫‪Orange—10.3.0.10‬‬
‫بمجرد تعيين بطاقات شبكة االتصال‪ ،‬بعد ذلك يتم مطالبتك بتعيين اثنين من كلمات السر‪ :‬واحد للوصول البعيد واآلخر للمستخدم الجذري‪.‬‬
‫ننصحك بأن تجعلها سهلة للتذكر ألن هذا هو فقط من أجل بيئة االختبار‪ .‬أنت حر في تعيين أي كلمة تريد‪ .‬بعد تعيين كلمات المرور‪ ،‬سيقوم‬
‫النظام بإعادة التشغيل‪ .‬بمجرد إعادة التشغيل‪ ،‬سيكون لديك لتقوم بتسجيل الدخول والتحقق من أنه تم تعيين الواجهات الثالثة نحو المقصود‪.‬‬
‫األسلوب المفضل للوصول إلى التكوين من الواجهة الخضراء عبر متصفح اإلنترنت‪ .‬نحن ال يمكن اقامة جهاز آخر على السويتش‬
‫‪ ،VMnet4‬أو أسلوب آخر هو استخدام مضيف لدينا‪ .‬لديك هذه القدرة‪ ،‬لربط السويتش إلى المضيف‪ .‬في محطة إم وير‪ ،‬انتقل إلى ‪| Edit‬‬
‫‪ VMnet4 | Virtual Network Editor‬وحدد ‪.Connect a host virtual adapter to this network‬‬
‫الخطوة التالية هي فتح المتصفح من اختيارك وأدخل ‪ .https://10.4.0.10:441‬هذا سوف يفتح واجهة تسجيل الدخول على شبكة اإلنترنت‪.‬‬
‫أدخل اسم المستخدم ‪ root‬مع كلمة السر التي قمت بتكوينها أثناء التثبيت‪ .‬وبمجرد االنتهاء من تسجيل الدخول‪ ،‬سوف تظهر القائمة الرئيسية‬
‫من جدار الحماية‪ .‬انتقل إلى ‪ ،incoming | Networking‬وهذا سوف يظهر القواعد التي تم تكوينها لحركة المرور الواردة‪.‬‬
‫ملحوظه‪ :‬بالنسبة لمحترفي اللينكس يمكنهم استخدام أي من توزيعات اللينكس إلنشاء جدار الحماية المناسب‪.‬‬
‫الهدف مما سبق هو إنشاء معمل يحاكى الواقع ألداء تجاربنا إلتقان الهاكر األخالقي بدون خوف من أي مسائله قانونيه‪.‬‬

‫طريقة أخرى إلنشاء معمل خاص بك وهو االستعانة بعمل عن طريق الشبكة‬
‫يوجد العديد من مواقع الشبكة التي تقدم لك معمل ألداء اختبار االختراق امثله على ذلك‪.‬‬
‫‪https://www.hacking-lab.com‬‬
‫نقوم بالتسجيل في هذا الموقع ومن ثم بعد االنتهاء من عملية التسجيل وتفعيل الحساب نقوم بالنقر فوق ‪ Security events‬الموجود في‬
‫القائمة اليمنى ونختار ‪" register‬ملحوظه بعض ‪ event‬تحتاج الى اتصال مشفر ‪ ."vpn‬بعد ذلك نتبع الخطوات التالية‪:‬‬
‫‪ -1‬ننقر على رابط ‪ Download‬الموجود على الجانب األيسر من صفحة الويب واختيار ‪.Hacking-Lab LiveCD‬‬
‫‪ -1‬نحدد اإلصدار األخير ونقوم بتحميل جميع الملفات الموجودة في ‪ VMware-appliance‬وذلك على حسب المنصة االفتراضية‬
‫التي نستخدمها فاذا كانت المنصة ‪ Virtual Box‬فنقوم بتحميل ‪.virtual-box-appliance‬‬
‫‪ -1‬اآلن‪ ،‬نقوم بتشغيل محطة في إم وير ونحدد ‪ Open‬من قائمة ‪ File‬ونختار ‪ HL_LCD_811_vmware.ovf‬الذي قمنا بتحميله‪.‬‬
‫‪ -1‬فتظهر شاشة أخرى ‪ Import Virtual Machine‬والتي منها نحدد اسم ‪ lab‬ومن ثم ننقر فوق ‪.import‬‬
‫‪ -1‬االنتظار حتى االنتهاء من عملية ‪.importing‬‬
‫‪ -2‬بعد االنتهاء من عملية ‪ importing‬نقوم بالنقر فوق ‪ run‬لبدء عملية التشغيل‪.‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪70‬‬

‫‪ -2‬االن سوف يطلب منك ادخال ‪ username‬وال ‪ password‬الموجودان في ملف ‪ readme‬المرفق مع ‪VMware-appliance‬‬
‫والذي نقوم بإدخالهما‪.‬‬

‫‪ -1‬انقر على أيقونة اللغة "الوضع االفتراضي ‪ "de‬في الزاوية العلوية اليمنى وتغيير تخطيط لوحة المفاتيح إلى ‪.us‬‬
‫‪ -2‬ثم نعمل اتصال مع المعمل وذلك من خالل النقر فوق ايقونة ‪ vpn‬بالزر األيمن للماوس ونختار ‪.Connect Hacking-lab‬‬
‫‪ -12‬فتؤدى الى ظهور شاشة ‪ vpn‬والتي يطلب منك بيانات التسجيل ندخل بها بيانات التسجيل التي قومت بإنشائها عند التسجيل في‬
‫الموقع حيث يطلب منك ‪ username‬والذي ندخل فيه االيميل الخاص بعملية التسجيل والباسورد الذي قمت بإنشائه‪.‬‬

‫‪ -11‬ثم االنتظار حتى يتم االتصال "تحول لون أيقونة ‪ vpn‬الى اللون األخضر"‪.‬‬
‫‪ -11‬االن نقوم بفتح متصفح الويب وندخل الى الموقع الرسمي ونختار ‪ challenge‬الذي تريد ان تقوم به‪.‬‬
‫‪ -11‬يمكنك قبول التحديات الموجودة في الموقع الرسمي او الدخول الى الموقع التالي والقيام بالتحديات الموجودة فيه‪.‬‬
‫‪https://www.hackaserver.com‬‬
‫هذا الموقع يتطلب منك اجتياز االختبار الخاص به وهي مجانا للدخول في التحديات المتاحة به‬
‫هذا المعمل يساعدك كثيرا في التدريب على مختلف تقنيات االختراق القترابه من الواقع الى درجه كبيره‪.‬‬
‫إذا كنت مهتما بمحاولة استخدام العديد من معامل القرصنة على االنترنت‪ ،‬يمكنك ذلك من خالل زيارة الروابط التالية‪:‬‬
‫‪http://try2hack.nl/‬‬
‫‪http://www.hackthissite.org/‬‬
‫‪http://www.dareyourmind.net/‬‬
‫‪http://www.root-me.org/?lang=en‬‬
‫‪http://hax.tor.hu/welcome/‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪71‬‬

‫الفصل الثالث‬
‫البرمجة " ‪" Programming‬‬
‫الهاكر هو مصطلح يشمل أولئك الذين يكتبون ‪ code‬وأولئك الذين ‪ exploit‬ذلك‪ .‬على الرغم من أن هاتين المجموعتين من الهاكر في النهاية‬
‫ذات أهداف مختلفة‪ ،‬فانهم يستخدم نفس األساليب لحل المشاكل‪ .‬في حين ان فهم البرمجة يساعد أولئك الذين يستغلون "‪ ،"exploit‬وفهم‬
‫االستغالل "‪ "exploitation‬يساعد أولئك الذين يقومون بالبرمجة‪ ،‬لكن هناك العديد من الهاكر يقومون باألمرين معا‪ .‬فالهاكر موجود في كال‬
‫التقنيات المستخدمة لكتابة األكواد والتقنيات المستخدمة الختراق البرامج‪ .‬الهاكينج هو حقيقةً مجرد فعل إليجاد حل ذكي وغير متوقع لمشكلة‬
‫ما‪ .‬يترك التقدير الحقيقي ألداء البرمجة للقراصنة‪ :‬هواة كمبيوتر ذات هدف ليس لتحقيق الربح ولكن للضغط على كل جزء ممكن من‬
‫الوظائف‪ ،‬مبرمجي المأثر "‪ "exploit writers‬يقومون بكتابة قطع صغيرة ومدهشة من األكواد التي تنزلق من خالل الشقوق األمنية‬
‫الضيقة‪ .‬هؤالء هم الناس الذين يحصلون على الحماسة من البرمجة ويقدرون حقا جمال قطعة أنيقة من األكواد أو براعة االختراق‪ .‬فهم‬
‫البرمجة هو شرط أساسي لفهم كيف يمكن استغالل البرامج والبرمجة هي نقطة البداية الطبيعية‪.‬‬
‫لغات البرمجة عموما مثل اللغة لدى البشر يتخاطبون بها بينهم وبين بعضهم البعض ونفهم منها متطلباته وحجاتهم للغات البرمجة للتحدث مع‬
‫الحاسب‪ .‬وتنفيذ االوامر التي نطلبها منه مثال استعالم في قواعد البيانات او أنشاء مجلد او ابسط صورها عملية حسابية الهدف منها وباختصار‬
‫شديد تسهيل اعمالنا اليومية والروتينية "المملة" التي يمكنك ان تقوم بها يوميا مرات ومرات‪ .‬فوائدها تسهيل العمل‪ ،‬تسريع العمل‪ ،‬ميكنة‬
‫العمل‪ ،‬اتخاذ قرارات بناء على شروط‪ .‬من هذا المنطلق إذا كان مختبر االختراق على دراية بلغة البرمجة ويعلم كيفية البرمجة فيمكنه بكل‬
‫بساطة حل المشكلة وترقيع الثغرة اغلب مدراء السيرفرات المسؤولين يجيب ان يكونوا على وعي على االقل باألدوات المستخدمة لديهم لكي‬
‫يستطيع ان يتناقش مع المبرمج وتوضيح ماهية الخطر وكيفية عالج الثغرات ان وجدت‪ .‬اما بالنسبة لمختبر االختراقات تخيل إنك ستقوم‬
‫بفحص روابط موقع رابط رابط كم من الوقت ستأخذ؟ هنا يأتي الالعب السحري وهو البرمجة لتسهل لك هذا العمل‪ .‬بالنسبة للمجال العملي‬
‫والفعلي لغات البرمجة كثيرة ومتطلباتها قد تختلف من دولة الى اخر ومن منطقة الى اخرى‪.‬‬

‫‪ 1.1‬ما هي البرمجة "‪"What Is Programming‬؟‬


‫البرمجة هو مفهوم طبيعي جدا وبديهي‪ .‬البرنامج ليس أكثر من سلسلة من البيانات المكتوبة بلغة معينة‪ .‬البرامج في كل مكان‪ ،‬حتى‬
‫‪" technophobes‬رهاب التكنولوجيا وهو الخوف أو كره التكنولوجيا المتقدمة أو األجهزة المعقدة‪ ،‬خاصة الحواسيب" يستخدمون البرامج‬
‫كل يوم‪ .‬اتجاهات القيادة‪ ،‬وصفات الطبخ‪ ،‬لعب كرة القدم‪ ،‬و‪ DNA‬هؤالء جميعا أنواع من البرامج‪ .‬البرنامج النموذجي التجاهات القيادة قد‬
‫تبدو شيئا من هذا القبيل‪:‬‬
‫‪Code View:‬‬
‫‪Start out down Main Street headed east. Continue on Main Street until you see a church on your right. If the‬‬
‫‪street is blocked because of construction, turn right there at 15th Street, turn left on Pine Street, and then turn‬‬
‫‪right on 16th Street. Otherwise, you can just continue and make a right on 16th Street. Continue on 16th‬‬
‫‪Street, and turn left onto Destination Road. Drive straight down Destination Road for 5 miles, and then you‬‬
‫‪will see the house on the right. The address is 743 Destination Road.‬‬
‫أي شخص يعرف اللغة اإلنجليزية يمكن أن يفهم ويتبع توجيهات القيادة‪ ،‬حيث انها مكتوبة باللغة اإلنجليزية‪ .‬حيث ان التعليمات واضحة وسهلة‬
‫الفهم‪ ،‬على األقل للشخص الذي يقرأ اإلنجليزية‪.‬‬
‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪72‬‬

‫ولكن الكمبيوتر ال يفهم أصال اللغة اإلنجليزية‪ .‬حيث انه يفهم لغة واحده أال وهي لغة اآللة‪ .‬إلرشاد جهاز كمبيوتر على فعل شيء‪ ،‬يجب أن‬
‫تكون اإلرشادات مكتوبة بلغته‪ .‬ومع ذلك‪ ،‬لغة اآللة غامضة وصعبة لعمل ذلك‪ ،‬ويختلف من هندسة معمارية الى هندسة معمارية‪ .‬لكتابة‬
‫برنامج بلغة اآللة للمعالج إنتل ‪ ،x86‬سيكون لديك معرفة القيمة المرتبطة بكل التعليمات‪ ،‬كيف تتفاعل كل التعليمات‪ ،‬وعدد ال يحصى من‬
‫التفاصيل ذات المستوى المنخفض‪ .‬البرمجة بمثل هذه شاقة ومرهقة‪ ،‬وأنها بالتأكيد ليست بديهية‪.‬‬
‫ما هو المطلوب من أجل التغلب على تعقيدات لغة اآللة الغير مترجمة‪ Assembler .‬هو أحد أشكال الترجمة للغة اآللة‪ ،‬وهو البرنامج الذي‬
‫يترجم لغة ‪ assembly‬إلى لغة االله المقروءة‪ .‬لغة ‪ assembly‬أقل غموضا من لغة اآللة‪ ،‬ألنه يستخدم أسماء لمختلف التعليمات‬
‫والمتغيرات‪ ،‬بدال من مجرد استخدام األرقام‪ .‬ومع ذلك‪ ،‬لغة ‪ assembly‬ال تزال بعيدة عن البديهية‪ .‬أسماء التعليمات مقصوره على فئة معينه‪،‬‬
‫واللغة محدده على حسب المعمارية‪ .‬حيث ان لغة اآللة لمعالجات إنتل ‪ x86‬تختلف عن لغة اآللة لمعالجات ‪ .SPARC‬إذا فإن أي برنامج‬
‫مكتوب باستخدام لغة ‪ assembly‬لبنية المعالج واحد ال يعمل على هندسة المعالج اآلخر‪ .‬إذا عند كتابة برنامج بلغة ‪ assembly‬إلى ‪،x86‬‬
‫فانه يجب عليك إعادة كتابته ليتم تشغيله على المعمارية ‪ .SPARC‬باإلضافة إلى ذلك‪ ،‬من أجل كتابة برنامج فعال باستخدام لغة ‪،assembly‬‬
‫يجب أن تعرف الكثير من التفاصيل ذات المستوى المنخفض لهندسة المعالج التي تكتب له‪.‬‬
‫هذه المشاكل تم التخفيف منها بشكل آخر من أشكال الترجمة وهي ‪ Compiler .compiler‬يحول لغة رفيعة المستوى إلى لغة اآللة‪ .‬اللغات‬
‫عالية المستوى هي أكثر سهولة بكثير من لغة ‪ assembly‬ويمكن تحويلها إلى العديد من األنواع المختلفة من لغة اآللة لبنيات المعالج‬
‫المختلفة‪ .‬هذا يعني أنه إذا تم كتابة برنامج بلغة عالية المستوى‪ ،‬فان البرنامج يحتاج فقط ليكون مكتوب مرة واحدة‪ .‬نفس القطعة من اكواد‬
‫البرنامج يمكن ترجمتها الى لغة اآللة لمختلف األبنية المحددة‪ ،C++ ،C .‬و ‪ FORTRAN‬كلها أمثلة للغات عالية المستوى‪ .‬البرنامج المكتوب‬
‫بلغة عالية المستوى هو أكثر قابلية للقراءة من ذلك بكثير وباإلنجليزية على عكس لغة ‪ assembly‬أو لغة اآللة‪ ،‬لكنه ال يزال يجب اتباع‬
‫قواعد صارمة للغاية حول كيفية صياغة التعليمات‪ ،‬أم أن ‪ compiler‬ال يكون قادرا على فهم ذلك‪.‬‬

‫‪Pseudo-code 1.1‬‬
‫المبرمجين لديهم حتى اآلن شكل آخر من أشكال لغات البرمجة وهي ‪ Pseudo-code .pseudo-code‬هي ببساطة كتابة باإلنجليزية مرتبه‬
‫مع الهيكل العام مشابهة للغة عالية المستوى‪ .‬ليست مفهومة من قبل ‪ ،assembly ،compiler‬أو أي من أجهزة الكمبيوتر‪ ،‬وإنما هو وسيلة‬
‫مفيدة للمبرمج لترتيب التعليمات‪ .‬لم يتم تعريف ‪ pseudo-code‬بشكل جيد؛ في الواقع‪ ،‬معظم الناس ترسل ‪ pseudo-code‬مختلفة قليال‪ .‬انه‬
‫نوع من الحلقة المفقودة الغامضة بين اللغتين االنكليزية ولغات البرمجة عالية المستوى مثل ‪ pseudo-code .C‬يقدم مقدمة ممتازة لمفاهيم‬
‫البرمجة العالمية المشتركة‪ .‬هذا ما يعرف لدى الكثير بالتعليقات على سطور الكود‪.‬‬

‫‪Control Structures 1.1‬‬


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

‫القاعدة الشرطية ‪If-Then-Else‬‬


‫في حالة التعليمات البرمجية "‪ "codes‬الخاصة باتجاهات القيادة لدينا‪ ،‬يمكن أن يكون الشارع الرئيسي تحت اإلنشاء‪ .‬إذا كان كذلك‪ ،‬فان هناك‬
‫مجموعة خاصة من التعليمات نحتاجها لمعالجة هذا الوضع‪ .‬خالف ذلك‪ ،‬ينبغي اتباع مجموعة من التعليمات األصلية‪ .‬هذه األنواع من الحاالت‬
‫الخاصة يمكن أن تمثل في برنامج مع واحدة من أشهر ‪ :control structures‬وهو هيكل ‪ .if-then-else‬بشكل عام‪ ،‬يبدو شيئا من هذا‬
‫القبيل‪:‬‬
‫‪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‬‬
‫}‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪73‬‬

‫تتكون ‪ if‬في أبسط صورها من شرط واحد ومجموعة من األوامر يتم تنفيذهم عند تحقق هذا الشرط‪ .‬في هذا الكتاب‪ ،‬سيتم استخدام ‪ ،C‬لذلك‬
‫كل التعليمات ستنتهي مع فاصلة منقوطة‪ ،‬وسيتم تجميع مجموعات من التعليمات مع األقواس المعقوفة والمسافة البادئة‪ .‬إذا‪ ،‬فان هيكل‬
‫‪ if-then-else pseudo-code‬التجاهات القيادة السابقة قد تبدو شيئا من هذا القبيل‪:‬‬
‫;‪Drive down Main Street‬‬
‫)‪If (street is blocked‬‬
‫{‬
‫;‪Turn right on 15th Street‬‬
‫;‪Turn left on Pine Street‬‬
‫;‪Turn right on 16th Street‬‬
‫}‬
‫‪Else‬‬
‫{‬
‫;‪Turn right on 16th Street‬‬
‫}‬
‫هذه القاعدة حول مجموعات التعليمات ينطبق على كل من هياكل ‪ control structures‬المذكورة في هذا الكتاب‪ ،‬والقاعدة ذات نفسها يمكن‬
‫وصفها في ‪.pseudo-code‬‬
‫)‪If (there is only one instruction in a set of instructions‬‬
‫;‪The use of curly braces to group the instructions is optional‬‬
‫‪Else‬‬
‫{‬
‫;‪The use of curly braces is necessary‬‬
‫;‪Since there must be a logical way to group these instructions‬‬
‫}‬
‫حتى وصف بناء الجملة نفسها يمكن النظر إليها على أنها برنامج بسيط‪ .‬هناك اختالفات ل ‪ ،if-then-else‬عن مثال صيغة ‪،select/case‬‬
‫ولكن المنطق ال يزال نفسه‪ :‬إذا كان هذا يحدث "حدوث الشرط" فإنك تفعل هذه األشياء‪ ،‬وإال تفعل أشياء أخرى (والتي يمكن أن تتكون من‬
‫أكثر من حاالت ‪.)if-then statements‬‬
‫يمكن أيضا استخدام ‪ else if‬أكثر من واحده عند تحديد أكثر من جمله خشرطيه ثم تنتهي بحالة ‪.else‬‬
‫جملة ‪ if‬المتداخلة‪ :‬يطلق عليها ‪ Nested if‬وهي عبارة عن جملة شرطية تحتوي بداخلها جملة شرطية أخرى أو أكثر‪ ،‬حيث تنفذ الجملة‬
‫األولى عند تحقق الشرط األول‪ ،‬والجملة الثانية ال تنفذ إال عند تحقق الشرط األول والثاني‪.‬‬

‫القاعدة ‪" While/Until Loops‬الحلقات التكرارية"‬


‫مفهوم آخر في البرمجة هو هيكل ‪ ،while control structure‬هو نوع من الحلقات التكرارية‪ .‬المبرمج غالبا ما يرغبون في تنفيذ‬
‫مجموعة من التعليمات أكثر من مرة واحدة‪ .‬البرنامج يمكن إنجاز هذه المهمة من خالل الحلقات "‪ ،"loops‬ولكنه يتطلب مجموعة من‬
‫الشروط التي تقول له متى سوف يوقف هذه الحلقات‪ ،‬خشية أن يستمر الى ما النهاية‪ While loop .‬تقول انه يتم تنفيذ مجموعة من التعليمات‬
‫التالية في حلقة في حين أن الشرط صحيحا‪ .‬برنامج بسيط لفأر جائع يمكن أن ننظر اليه بشيء من هذا القبيل‪:‬‬
‫)‪While (you are hungry‬‬
‫{‬
‫;‪Find some food‬‬
‫;‪Eat the food‬‬
‫}‬
‫ان االثنين من التعليمات التالية ل ‪ while‬سوف تتكرر في حين أن الفأر ال يزال جائعا‪ .‬كمية الطعام الذي يجدها الفأر في كل مرة يمكن أن‬
‫تتراوح من كسرة صغيرة إلى رغيف كامل من الخبز‪ .‬وبالمثل‪ ،‬يتم تنفيذ عدد من المرات لمجموعة من اإلرشادات في جملة ‪ while‬في حين‬
‫أن التغييرات تعتمد على مقدار الطعام الذي يجده الفأر‪.‬‬
‫نسخة آخري من حلقة ‪ while‬وهو حلقة ‪ ،until loop‬على النحو الذي يتوفر في لغة البرمجة بيرل (‪ C‬ال تستخدم هذا النحو)‪ Until .‬هو‬
‫مجرد حلقة ‪ while‬مع عبارة شرطية مقلوبه وتعنى حتى‪ .‬برنامج الفأر نفسه باستخدام حلقة ‪ until‬يكون‪:‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪74‬‬

‫)‪Until (you are not hungry‬‬


‫{‬
‫;‪Find some food‬‬
‫;‪Eat the food‬‬
‫}‬
‫منطقيا‪ ،‬يمكن تحويل أي صيغ ‪ until-like statement‬الى حلقة ‪ .while‬حيث ان اتجاهات القيادة من قبل احتوت على بيان استمر على‬
‫الشارع الرئيسي حتى ترى كنيسة على يمينك‪ .‬يمكن بسهولة تغير هذا في معيار ‪ while loop‬ببساطة عن طريق عكس هذه الحالة‪.‬‬
‫)‪While (there is not a church on the right‬‬
‫;‪Drive down Main Street‬‬

‫القاعدة ‪For Loops‬‬


‫هيكل ‪ looping control structure‬أخر وهو ‪ .for loop‬يستخدم هذا عادة عندما يريد المبرمج حلقة لعدد معين من التكرارات‪ .‬يفضل‬
‫كثير من المبرمجين استخدام ‪ for loop‬في اغلب األحيان‪ ،‬ألنه ببساطة يتم تعريف المتغير المستخدم في الحلقة وتحديد الشرط والعداد في‬
‫سطر واحد فقط‪ ،‬وهو ما يسهل كثيرا ً على المبرمج‪ .‬وهذا هو البناء العام ل ‪.for loop‬‬
‫اتجاه القيادة يقود مباشرة أسفل وجهة الطريق ليمكن تحويل ‪ 1‬كيلومتر إلى حلقة ويبدو شيئا من هذا القبيل‪:‬‬
‫)‪For (5 iterations‬‬
‫;‪Drive straight for 1 mile‬‬
‫في الواقع‪ ،‬حلقة ‪ for loop‬هو مجرد حلقة ل ‪ while loop‬مع عداد‪ .‬يمكن كتابة البيان نفسه على هذا النحو‪:‬‬
‫;‪Set the counter to 0‬‬
‫)‪While (the counter is less than 5‬‬
‫{‬
‫;‪Drive straight for 1 mile‬‬
‫;‪Add 1 to the counter‬‬
‫}‬
‫باستخدام لغة ‪ C-Pseudo code‬فانه يشبه مثل هذا‪.‬‬
‫)‪For (i=0; i<5; i++‬‬
‫;‪Drive straight for 1 mile‬‬
‫في هذه الحالة‪ ،‬يسمى العداد ‪ ،i‬ويتم تقسيم البيان الى ما يصل إلى ثالثة أقسام‪ ،‬مفصولة بفواصل منقوطة‪ .‬القسم األول يعلن العداد ويحدد ذلك‬
‫إلى قيمته األولية‪ ،‬في هذه الحالة ‪ .2‬أما القسم الثاني هو مثل صيغ ‪ while‬تستخدم العداد‪ :‬عندما يتقابل شرط ‪ while‬مع العداد‪ ،‬فانه يحافظ‬
‫على الحلقات‪ .‬يصف القسم الثالث واألخير ما ينبغي اتخاذه من إجراءات على العداد خالل كل تكرار‪ .‬في هذه الحالة‪ ++ ،‬هو وسيلة اختزال‬
‫للقول‪ ،‬بإضافة ‪ 1‬إلى العداد ‪.i‬‬
‫باستخدام كافة هياكل ‪ ،control structures‬يمكن تحويل اتجاهات القيادة ويبدو شيئا من هذا القبيل باستخدام ‪:C-Pseudo code‬‬
‫;‪Begin going East on Main Street‬‬
‫)‪While (there is not a church on the right‬‬
‫;‪Drive down Main Street‬‬
‫)‪If (street is blocked‬‬
‫{‬
‫;‪Turn right on 15th Street‬‬
‫;‪Turn left on Pine Street‬‬
‫;‪Turn right on 16th Street‬‬
‫}‬
‫‪Else‬‬
‫;‪Turn right on 16th Street‬‬
‫;‪Turn left on Destination Road‬‬
‫)‪For (i=0; i<5; i++‬‬
‫;‪Drive straight for 1 mile‬‬
‫;‪Stop at 743 Destination Road‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪75‬‬

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

‫من المفترض أن هذا البرنامج يقوم بطباعة األعداد الصحيحة من ‪ 1‬إلى ‪ ،2‬ولكننا قمنا بإدخال جملة شرطية تقوم بتنفيذ أمر ‪ break‬عندما‬
‫تكون ‪ i‬تساوى ‪ ،1‬وسيتم الخروج من الحلقة التكرارية تماما ً في الحال‪ ،‬فال يتم تنفيذ جملة الطباعة التي ستقوم بطباعة رقم ‪ ،1‬وما بعدها من‬
‫تكرارات‪.‬‬

‫في هذه الحالة عندما تكون ‪ i‬تساوى ‪ ،1‬سيقوم البرنامج بتنفيذ األمر ‪ ،continue‬وسيتم التغاضي عن أي أوامر تأتى بعدها – جملة الطباعة‬
‫التي تقوم بطباعة الرقم ‪- 1‬ولكن ستكمل الحلقة التكرارية عملها بشكل طبيعي بعدها فيتم طباعة رقم ‪ 2‬و‪ 2‬و‪ 1‬و‪.2‬‬

‫‪ 1.1‬مفاهيم البرمجة األساسية األخرى‬


‫في األقسام التالية‪ ،‬سيتم عرض المزيد من مفاهيم البرمجة العالمية‪ .‬وتستخدم هذه المفاهيم في العديد من لغات البرمجة‪ ،‬مع بعض االختالفات‬
‫النحوية‪ .‬كما أن عرض هذه المفاهيم‪ ،‬سوف يتم دمجها في األمثلة ‪ pseudo-code‬باستخدام ‪ C‬مثل‪ .‬في النهاية‪ ،‬ينبغي لل ‪ pseudo-code‬ان‬
‫تبدو مشابهة جدا إلى ‪.C‬‬
‫المتغيرات "‪"Variables‬‬
‫العداد المستخدم في ‪ for loop‬هو في الواقع نوع من المتغيرات "‪ ."variable‬المتغير "‪ "variable‬يمكن ان يعتقد ببساطة بأنه الكائن الذي‬
‫يحمل البيانات التي يمكن أن تتغير ومن هنا جاءت التسمية‪ .‬وهناك أيضا المتغيرات التي ال تتغير‪ ،‬والتي هي باقتدار تسمى الثوابت‬
‫"‪ ."constants‬وبالعودة إلى مثال القيادة‪ ،‬فإن سرعة السيارة تكون متغيرة‪ ،‬في حين أن لون السيارة تكون ثابتة‪ .‬في ‪ ،pseudo code‬فان‬
‫المتغيرات هي المفاهيم المجردة البسيطة‪ ،‬ولكن في ‪( C‬وفي العديد من اللغات األخرى)‪ ،‬يجب تعريف المتغيرات وان يكون لها نوع قبل أن‬
‫يتمكن من استخدامها‪ .‬وذلك ألن في نهاية المطاف سوف يتم ‪ compiled‬لبرنامج ‪ C‬الى برنامج قابل للتنفيذ‪ .‬مثل وصفة الطبخ يسرد كافة‬
‫المكونات المطلوبة قبل إعطاء اإلرشادات تعريف المتغيرات تسمح لك التخاذ االستعدادات قبل الدخول في حوم البرنامج‪ .‬في نهاية المطاف‪،‬‬
‫يتم تخزين كافة المتغيرات في الذاكرة في مكان ما‪ ،‬وتصريحاتهم يسمح للمترجم لتنظيم هذه الذاكرة بشكل أكثر كفاءة‪ .‬في النهاية رغم ذلك‪،‬‬
‫على الرغم من كل التعريفات ونوع المتغير‪ ،‬فان كل شيء يكون على الذاكرة فقط‪.‬‬
‫في ‪ ،C‬يعطى لكل متغير النوع الذي يصف المعلومات التي من المفترض أن تكون مخزنة في هذا المتغير‪ .‬بعض األنواع األكثر شيوعا هي‬
‫‪( int‬القيمة عدد صحيح)‪( float ،‬القيم الفاصلة العائمة عشرية)‪( char ،‬القيمة حرف واحد)‪ .‬يتم تعريف المتغيرات ببساطة عن طريق‬
‫استخدام هذه الكلمات قبل إدراج المتغيرات‪ ،‬كما ترون أدناه‪.‬‬
‫;‪int a, b‬‬
‫;‪float k‬‬
‫;‪char z‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪76‬‬

‫يتم تعريف المتغيرات ‪ a‬و‪ b‬اآلن على أنها أعداد صحيحة‪ k ،‬يمكن أن يقبل القيم العشرية (مثل ‪ ،)1.11‬ومن المتوقع أن يقبل ‪ z‬قيمة حرف‪،‬‬
‫مثل ‪ a‬أو ‪ .w‬المتغيرات يمكن تعيين قيامها عندما يتم اإلعالن عنها أو في أي وقت بعد ذلك‪ ،‬وذلك باستخدام المعامل =‪.‬‬
‫;‪int a = 13, b‬‬
‫;‪float k‬‬
‫;'‪char z = 'A‬‬
‫;‪k = 3.14‬‬
‫;'‪z = 'w‬‬
‫;‪b = a + 5‬‬
‫بعد أن يتم تنفيذ التعليمات التالية‪ ،‬المتغير ‪ a‬سوف يحتوي على القيمة ‪ ،11‬وسيتضمن ‪ k‬العدد ‪ ،1.11‬وسيتضمن ‪ z‬الحرف ‪ ،w‬و‪ b‬سيحتوي‬
‫على القيمة ‪ ،11‬حيث ان ‪ 1 + 11‬يساوي ‪ .11‬المتغيرات هي مجرد طريقة لتذكر القيم‪ .‬ولكن‪ ،‬مع ‪ ،C‬يجب عليك أوال إعالن نوع كل متغير‪.‬‬
‫ملحوظه‪ :‬اللغة ال تحتوي على نوع متغير نصي ‪ ،String‬ولكن يتم استخدام مصفوفة من العناصر "‪ "arrary‬من النوع ‪ ،char‬وسنتناول‬
‫معا ً المصفوفات "‪ "arrary‬والمتغيرات النصية بالتفصيل الحقا‪.‬‬

‫المعامالت الحسابية "‪"Arithmetic Operators‬‬


‫العبارة "‪ "b=a+7‬هو مثال بسيط جدا على المعامالت الحسابية‪ .‬في السي‪ ،‬يتم استخدام الرموز التالية لمختلف العمليات الحسابية‪.‬‬
‫العمليات األربع األولى هي الجمع والطرح والضرب والقسمة والتي تبدو مألوفة بالنسبة لك‪ .‬ولكن األخير "‪ "Modulo reduction‬قد يبدو‬
‫مفهوم جديد‪ ،‬لكنها في الحقيقة هي مجرد أخذ الباقي بعد القسمة‪ .‬إذا كان ‪ a‬هو ‪ ،11‬ثم قمت بقسمة ‪ 11‬على ‪ 1‬فانه يساوي ‪ ،1‬فان ما تبقى هو‬
‫‪ ،1‬وهو ما يعني أن ‪ .% 5 = 3‬أيضا‪ ،‬المتغيرات ‪ a‬و‪ b‬أعداد صحيحة‪ ،‬فان العبارة ‪ b = a / 5‬سوف ينتج عنه القيمة ‪ 1‬ويتم تخزينها في ‪،b‬‬
‫ألنه ال يقبل العدد العشري حيث قلنا انه من النوع ‪ int‬أي يقبل العدد الصحيح فقط‪ .‬يجب استخدام المتغير ‪ float‬لإلبقاء على اإلجابة الصحيحة‬
‫أكثر وهي ‪.1.2‬‬

‫‪Operation‬‬ ‫‪Symbol‬‬ ‫‪Example‬‬


‫‪Addition‬‬ ‫‪+‬‬ ‫‪b = a + 5‬‬
‫‪Subtraction‬‬ ‫‪-‬‬ ‫‪b = a - 5‬‬
‫‪Multiplication‬‬ ‫*‬ ‫‪b = a * 5‬‬
‫‪Division‬‬ ‫‪/‬‬ ‫‪b = a / 5‬‬
‫‪Modulo reduction‬‬ ‫‪%‬‬ ‫‪b = a % 5‬‬
‫للحصول على برنامج يستخدم هذه المفاهيم‪ ،‬فيجب عليه أن يتكلم بلغته‪ .‬يوفر لغة ‪ C‬أيضا العديد من أشكال االختزال لهذه العمليات الحسابية‪.‬‬
‫واحد من هذه استخدمنها في وقت سابق‪ ،‬ويستخدم عادة في ‪.loops‬‬
‫‪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.‬‬
‫هذه العبارات المختزلة "‪ "shorthand expressions‬يمكن دمجها مع العمليات الحسابية األخرى إلنتاج تعبيرات أكثر تعقيدا‪ .‬هل هناك‬
‫فرق بين ‪i++‬و ‪ .++i‬التعبير األول "‪ "i++‬يعني اضافة القيمة الى ‪ i‬بنسبة ‪ 1‬بعد القيام بالعملية الحسابية‪ ،‬في حين ان التعبير الثاني "‪"++i‬‬
‫يعنى اضافة القيمة الى ‪ i‬بنسبة ‪ 1‬قبل قيام العملية الحسابية‪ .‬المثال التالي سوف يوضح ذلك‪.‬‬
‫;‪int a, b‬‬
‫;‪a = 5‬‬
‫;‪b = a++ * 6‬‬
‫في نهاية هذه المجموعة من التعليمات‪ ،‬فان ‪ b‬سوف تحتوي على ‪ 12‬و‪ a‬سوف تحتوي على ‪ ،2‬حيث ان االختزال ‪b = a++ * 6‬؛ يعادل‬
‫العبارات التالية‪:‬‬
‫;‪b = a * 6‬‬
‫;‪a = a + 1‬‬
‫في حين ان‪ ،‬إذا كانت التعليمات هي ‪b = ++a * 6‬؛ فان ترتيب اإلضافة إلى ‪ a‬سوف يكون مختلفا‪ ،‬مما يعادل العبارات التالية‪:‬‬
‫;‪a = a + 1‬‬
‫;‪b = a * 6‬‬
‫حيث ‪ a‬سوف تعادل ‪ 2‬و‪ b‬سوف تعادل ‪.12‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪77‬‬

‫في كثير من األحيان في البرامج‪ ،‬تحتاج إلى تعديل المتغيرات‪ .‬على سبيل المثال‪ ،‬قد تحتاج إلى إضافة قيمة تعسفية "‪"arbitrary value‬‬
‫مثل ‪ 11‬إلى متغير‪ ،‬وتخزين النتيجة في هذا المتغير (على سبيل المثال‪ .)i = i + 12 ،‬هذا يحدث عادة وله أيضا صيغ اختزال كاالتي‪:‬‬
‫‪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‬‬


‫كثيرا ما تستخدم المتغيرات في البيانات مشروطة كما ذكرنا من قبل في هياكل المراقبة "‪ ."control structures‬وتستند هذه البيانات‬
‫المشروطة نوعا ما الى المقارنة‪ .‬في ‪ ،C‬عوامل المقارنة هذه تستخدم في بناء الجملة والذي هو شائع إلى حد ما في العديد من لغات البرمجة‪.‬‬
‫‪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 = 7‬‬
‫تعنى وضع القيمة ‪ 2‬في المتغير ‪ a‬لذلك‪ ،‬في حين أن ‪ a == 7‬تعنى التحقق لمعرفة ما إذا كان المتغير ‪ a‬يساوي ‪( .2‬بعض لغات البرمجة مثل‬
‫باسكال تستخدم التعبير "=‪ ":‬لتعيين متغير للقضاء على هذا االرتباك البصري)‪ .‬أيضا‪ ،‬الحظ أن عالمة التعجب يعني عموما ال‪ .‬هذا الرمز‬
‫يمكن استخدامه لعكس أي تعبير‪.‬‬
‫)‪!(a < b‬‬ ‫)‪is equivalent to (a >= b‬‬
‫يمكن أيضا ربط عوامل المقارنة هذه معا باستخدام االختصار ‪ OR‬و ‪.AND‬‬
‫‪Logic‬‬ ‫‪Symbol‬‬ ‫‪Example‬‬
‫‪OR‬‬ ‫||‬ ‫))‪((a < b) || (a < c‬‬
‫‪AND‬‬ ‫&&‬ ‫))‪((a < b) && !(a < c‬‬
‫يتكون المثال من اثنين من تعابير الشرط يتم ربطهما مع بعض باستخدام ‪ OR‬مع منطق ‪ true‬إذا كان ‪ a‬أقل من ‪ ،b‬أو ‪ a‬أقل من ‪ .c‬وبالمثل‪،‬‬
‫وبالمثل يتكون المثال التالي من اثنين من المقارنات يتم ربطهما مع ‪ AND‬مع المنطق ‪ true‬إذا كان ‪ a‬أقل من ‪ b‬و‪ a‬ليست أقل من ‪ .c‬ينبغي‬
‫تجميع هذه البيانات بين األقواس ويمكن أن تحتوي على العديد من االختالفات المختلفة‪.‬‬
‫بالعودة إلى مثال الفار بحثا عن الطعام‪ ،‬يمكن أن يترجم الجوع إلى متغير ‪ .)true/false( Boolean‬وبطبيعة الحال‪ 1 ،‬يعني ‪ true‬و‪ 2‬يعني‬
‫‪.false‬‬
‫)‪While (hungry == 1‬‬
‫{‬
‫;‪Find some food‬‬
‫;‪Eat the food‬‬
‫}‬
‫هنا اختصار آخر مستخدم من قبل المبرمجين وقراصنة الكمبيوتر في كثير من األحيان‪ C .‬ال يملك في الواقع أي من ‪،Boolean operator’s‬‬
‫لذلك يعتبر أي قيمة غير صفرية حقيقية "‪ ،"true‬ويعتبر البيان ‪ false‬إذا كان يحتوي على ‪ .1‬في الواقع‪ ،‬عوامل المقارنة سوف تعود بالقيمة‬
‫‪ 1‬إذا كانت المقارنة صحيحة والقيمة ‪ 2‬إذا كانت غير صحيحه‪ .‬فحص المتغير ما إذا كان جائعا فانه يساوي ‪ 1‬وسيعود بقيمة ‪ 1‬و‪ 2‬إذا كان‬
‫غير جائع أي يساوي ‪ .2‬يمكن ربط عوامل المقارنة مع بعض‪.‬‬
‫)‪While (hungry‬‬
‫{‬
‫;‪Find some food‬‬
‫;‪Eat the food‬‬
‫}‬
‫برنامج الفأر مع المزيد من المدخالت يوضح كيف يمكن الجمع بين عوامل المقارنة مع المتغيرات‪.‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪78‬‬

‫))‪While ((hungry) && !(cat_present‬‬


‫{‬
‫;‪Find some food‬‬
‫))‪If(!(food_is_on_a_mousetrap‬‬
‫;‪Eat the food‬‬
‫}‬
‫يفترض هذا المثال أيضا المتغيرات التي تصف وجود القط وموقع المواد الغذائية‪ ،‬بقيمة ‪ 1‬للصحيح "‪ "true‬و‪ 2‬للغير صحيح "‪ ."false‬فقط‬
‫تذكر أنه يعتبر أي قيمة غير صفرية ‪ ،true‬وتعتبر القيمة ‪.false 2‬‬

‫‪" Functions‬الدوال"‬
‫أحيانا يكون هناك مجموعة من التعليمات‪ ،‬المبرمج يعرف انه سيتم احتياجها عدة مرات‪ .‬ويمكن تصنيف هذه التعليمات في برنامج ثانوي‬
‫أصغر تسمى الداله "‪ ."function‬في لغات أخرى‪ ،‬الداله "‪ "function‬معروفه أيضا باسم ‪ subroutines‬أو ‪ .procedures‬على سبيل‬
‫المثال‪ ،‬العمل على تحويل سيارة يتكون في الواقع من العديد من اإلرشادات األصغر‪ :‬قم بتشغيل الضوء الوامض المناسب‪ ،‬اإلبطاء‪ ،‬التحقق‬
‫من الحركة القادمة‪ ،‬تحويل عجلة القيادة في االتجاه المناسب‪ ،‬وهلم جرا‪ .‬اتجاهات القيادة من بداية هذا الفصل تتطلب عدد غير قليل من‬
‫المنعطفات‪ .‬ومع ذلك‪ ،‬فإن إدراج كل التعليمات لكل منعطف تكون مملة (وأقل قابلية للقراءة)‪ .‬يمكنك تمرير المتغيرات كوسائط إلى الداله‬
‫"‪ "function‬من أجل تعديل الطريقة التي تعمل بها الداله‪ .‬في هذه الحالة‪ ،‬يتم تمرير دالة اتجاه المنعطف‪.‬‬
‫)‪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‬‬
‫}‬
‫توضح هذه الداله كل اإلرشادات الالزمة لصنع منعطف‪ .‬عندما يحتاج البرنامج الذي يعرف عن دالة التحويل‪ ،‬فإنه يمكن فقط استدعاء هذه‬
‫الدالة‪ .‬عندما يتم استدعاء الدالة‪ ،‬فان اإلرشادات التي وجدت ضمنها يتم تنفيذها مع المعلمات التي يتم تمريرها إليه‪ .‬بعد ذلك‪ ،‬التنفيذ يعود إلى‬
‫ما كان عليه في البرنامج‪ ،‬بعد استدعاء الدالة‪ .‬اليمين أو اليسار يمكن أن تنتقل إلى هذه الداله‪ ،‬والذي تسبب الدالة التحويل في هذا االتجاه‪.‬‬
‫بشكل افتراضي في ‪ ،C‬يمكن لهذه الدوال إرجاع قيمة إلى المستدعى لها‪ .‬بالنسبة ألولئك الذين هم على دراية بالدوال في الرياضيات‪ ،‬فهذا‬
‫يجعل الشعور بالكمال‪ .‬تخيل دالة ما تحسب مضروب رقم وبطبيعة الحال‪ ،‬فإنه يعود بالنتيجة‪.‬‬
‫في ‪ ،C‬ال يتم اإلعالن عن الداله مع الكلمة "‪ ."function‬بدال من ذلك‪ ،‬يتم اإلعالن عنها بواسطة نوع بيانات المتغير‪ .‬هذا الشكل تبدو مشابهة‬
‫جدا لتعريف المتغير‪ .‬إذا كان المقصود من الداله العودة بعدد صحيح "‪ ،"integer‬فأنها تبدو مثل هذا‪:‬‬
‫)‪int factorial(int x‬‬
‫{‬
‫;‪int i‬‬
‫{ )‪for(i=1; i < x; i++‬‬
‫;‪x *= i‬‬
‫;‪return x‬‬
‫}‬
‫}‬
‫هذه الداله تعلن عن عدد صحيح وذلك ألنه يضاعف كل قيمة من ‪ 1‬إلى ‪ x‬وإرجاع النتيجة‪ ،‬وهو عدد صحيح‪Return statement .‬‬
‫الموجودة في النهاية يمرر محتويات المتغير ‪ x‬وتنتهي الداله‪ .‬يمكن لهذه الداله العاملة أن تستخدم مثل متغير العدد الصحيح‪.‬‬
‫;‪int a=5, b‬‬
‫;)‪b = factorial(a‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪79‬‬

‫في نهاية هذا البرنامج القصير‪ ،‬فإن المتغير ‪ b‬سوف يحتوي على ‪ ،112‬حيث سيتم استدعاء الداله ‪ factorial‬مع القيمة ‪ 1‬وسيعود ‪.112‬‬
‫أيضا في لغة ‪ ،C‬ال ‪ compiler‬يجب أن "يعرف" حول الداله قبل أن يتمكن من استخدامها‪ .‬ويمكن القيام بذلك ببساطة عن طريق كتابة الداله‬
‫كاملة قبل استخدامها الحقا في البرنامج أو باستخدام نماذج الداله "‪ ."function prototypes‬نماذج الداله "‪ "function prototypes‬هو‬
‫مجرد وسيلة لتقول لل ‪ compiler‬أن يتوقع داله بهذا االسم‪ ،‬النوع بيانات العودة‪ ،‬وأنواع هذه البيانات‪ .‬الداله الفعلية يمكن أن تكون موجودة‬
‫بالقرب من نهاية البرنامج‪ ،‬ولكن يمكن استخدامها في أي مكان آخر‪ ،‬ألن ‪ compiler‬يعرف بالفعل حول هذا الموضوع‪ .‬مثال على نموذج‬
‫الداله "‪ "function prototypes‬بشيء من هذا القبيل‪:‬‬
‫;)‪int factorial(int‬‬
‫عادة‪ ،‬تقع نماذج الداله "‪ "function prototypes‬بالقرب من بداية البرنامج‪ .‬ليس هناك حاجة لتحديد أسماء المتغيرات في النموذج األولي‪،‬‬
‫ألن هذا هو الحال في الداله الفعلية‪ .‬الشيء الوحيد الذي يهتم به المترجم "‪ "compiler‬هو اسم الداله‪ ،‬نوع بيانات العودة‪ ،‬وأنواع البيانات‪.‬‬
‫إذا لم يكن لدى الداله أي قيمة سوف تعود "أي تعطى القيمة ‪ ،"true‬يجب أن تعلن أنها باطلة‪.‬‬
‫في لغة البرمجة مثل ‪ ،C‬تستخدم الدوال بشكل كبير‪ .‬أكثر فائدة حقيقية تأتى مع ‪ C‬انه يأتي معها مجموعات من الدوال الموجودة والتي تسمى‬
‫‪.libraries‬‬
‫أنواع الدوال وكيفية تعريفها بالنسبة للغة ‪c‬‬
‫الدالة في أبسط صورها ال تأخذ أي معامالت وال تعود بأي نتيجة وهو أول نوع من الدوال سنتناول شرحه‪ ،‬ونقوم بتعريف الدالة في‬ ‫‪-‬‬
‫هذه الحالة كاآلتي‪.‬‬

‫و‪ void‬المكتوبة قبل اسم الدالة هي نوع الرجوع‪ ،‬وهنا الدالة ال تعود بأي قيمة لذا استخدمنا ‪.void‬‬
‫‪ -‬في النوع الثاني من الدوال‪ ،‬تعود الدالة بقيمة ويتم وضع نوع هذه القيمة قبل اسم الدالة‪ ،‬مثال الدالة ‪ .main‬فهي تعود برقم على‬
‫سبيل المثال‪ ،‬وهي قيمة من النوع ‪ ،int‬لذلك تم وضع ‪ int‬قبل اسم الدالة‪.‬‬

‫النوع الثالث تستقبل فيه الدالة معلمات "‪ "argument‬وتعود بقيمة‪ ،‬مثال توضيحي‪.‬‬ ‫‪-‬‬

‫‪Getting Your Hands Dirty 1.1‬‬


‫"‪ "Getting Your Hands Dirty‬مثل انجليزى ويعنى إنك أصبحت على درايه بجميع األجزاء‪ .‬اآلن انت تشعر بانك أكثر دراية ببناء‬
‫الجملة في لغة البرمجة ‪ C‬حيث تم شرح بعض المفاهيم األساسية للبرمجة‪ ،‬البرمجة فعال في ‪ C‬ليست كبيرة عن هذه الخطوة‪ .‬مترجم ‪C " C‬‬
‫‪ "compilers‬موجود لكل نظم التشغيل ولكل معماريات المعالج‪ .‬دعونا نبدأ االن بكتابة هذا البرنامج البسيط‪ .‬برنامج ‪ firstprog.c‬هو قطعة‬
‫بسيطة من التعليمات البرمجية ‪ C‬والتي سوف تطبع الجملة "‪ 12 "!Hello, world‬مرات‪.‬‬
‫>‪#include <stdio.h‬‬
‫)(‪int main‬‬
‫{‬
‫;‪int i‬‬
‫)‪for(i=0; i < 10; i++‬‬ ‫‪// Loop 10 times.‬‬
‫{‬
‫;)"‪puts("Hello, world!\n‬‬ ‫‪// put the string to the output.‬‬
‫}‬
‫;‪return 0‬‬ ‫‪// Tell OS the program exited without errors.‬‬
‫}‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪80‬‬

‫نجد ان التنفيذ الرئيسي للبرنامج ‪ C‬يبدأ مع الوظيفة )( ‪ .main‬أي نص يلي اثنين من الخطوط المائلة إلى األمام (‪ )//‬هو تعليق الذي يتم‬
‫تجاهله من قبل المترجم "‪."compiler‬‬
‫قد يكون السطر األول مربك‪ ،‬ولكنها مجرد صيغه بلغة ‪ C‬والتي تقول للمترجم "‪ "compiler‬بان يشمل ‪ headers‬الخاص بالمكتبة‬
‫‪ standard input/output (I/O) library‬والمسماة ‪ .stdio‬ملف ‪ header‬هذا يضاف إلى البرنامج عندما يتم ترجمته "‪."compiled‬‬
‫وهي تقع في ‪ ،/usr/include/stdio.h‬والذي يحدد عدة ثوابت ودوال من اجل دوال موجودة في ‪ .standard I/O library‬توضيح أكثر‬
‫تستخدم ‪ #include‬الستيراد ملفات لداخل برنامجك‪ ،‬الستخدام دوال منها‪ ،‬وفي هذا المثال تم استيراد الملف ‪ stdio.h‬من ال ‪standard‬‬
‫‪ ،library‬ويختص هذا الملف بدوال اإلدخال واإلخراج مثل ‪ printf‬لطباعة خرج‪ ،‬و‪ scanf‬الستقبال البيانات من المستخدم‪ .‬حيث ان الداله‬
‫)(‪ main‬هنا تستخدم الداله )( ‪ printf‬من المكتبة ‪ ،standard I/O library‬فهناك الحاجة إلى دالة النموذج )( ‪ printf‬قبل أن يمكن أن‬
‫تستخدم‪ .‬يتم تضمين نموذج الداله هذه (جنبا إلى جنب مع العديد من اآلخرين) في ملف رأس ‪ .stdio.h‬هناك الكثير من القوة في السي يأتي‬
‫من ‪ extensibility‬والمكتبات "‪ ."library‬بقية الرموز يجب أن يكون له معنى وتبدو بالنسبة لك مثل ‪ pseudo code‬من قبل‪ .‬كنت قد‬
‫الحظت حتى أن هناك مجموعة من األقواس المعقوفة والتي يمكن إزالتها‪ .‬ينبغي أن تكون واضحا تماما ما سوف يفعل هذا البرنامج‪ ،‬ولكن‬
‫دعونا نقوم بترجمته باستخدام ‪ GCC‬وتشغيله فقط للتأكد‪.‬‬
‫)‪ GNU Compiler Collection (GCC‬هو مترجم ‪ "Compiler C" C‬والتي تترجم لغة ‪ C‬الى لغة اآللة والتي يستطيع ان يفهمها‬
‫المعالج‪ .‬ترجمة ناتج البرنامج هو ملف ثنائي قابل للتنفيذ "‪ ،"executable binary file‬وهو ما يسمى ‪ a.out‬افتراضيا‪ .‬هل تعتقد ان برنامج‬
‫الترجمة يفعل ما كنت تعتقد انه سيكون؟‬
‫من اجل عملنا هنا ولسهولة العمل فسوف نستخدم نظام التشغيل لينكس وليكن كالي لينكس‪.‬‬
‫نفتح ملف نصي ونسميه ‪ firstprog.c‬وذلك بواسطة االمر ‪ vi‬او أي محرر نصي اخر ولكين مثال كاالتي "‪ "#vim firstprog.c‬ثم نقوم‬
‫بطباعة السطور السابقة ويكون كاالتي‪:‬‬

‫وعند ترجمة البرنامج بواسطة ‪ gcc‬كاالتي‪:‬‬

‫‪ 1.1‬الصورة التي أصبحت أكبر‬


‫حسنا‪ ،‬كانت كل هذه االشياء تعليم من الدرجة األساسية‪ ،‬ولكنها أساسية في البرمجة االبتدائية‪ .‬معظم فئات البرمجة التمهيدية تقوم فقط بتعليم‬
‫كيفية قراءة وكتابة ‪ .C‬ال تفهموني خطأ‪ ،‬اجادة اللغة ‪ C‬مفيد جدا وكافي ليجعلك مبرمج الئق‪ ،‬ولكنها ليست سوى قطعة من الصورة األكبر‪.‬‬
‫معظم المبرمجين يتعلمون اللغة من أعلى إلى أسفل ولن يروا ابدا الصورة الكبيرة‪ .‬القراصنة يحصلون على قدرتهم في معرفة كيف ان جميع‬
‫القطع تتفاعل داخل هذه الصورة األكبر‪ .‬لرؤية الصورة األكبر في عالم البرمجة‪ ،‬ببساطة يجب ان تدرك أن كود ‪ C‬من المفترض أن يتم‬
‫ترجمته‪ .‬هذا الكود ال يستطيع أن يفعل أي شيء في الواقع حتى يتم ترجمة ذلك إلى ملف ثنائي قابل التنفيذ "‪."executable binary file‬‬
‫االعتقاد ان كود لغة ‪ "C source" C‬كبرنامج هي فكرة خاطئة والتي يستغلها القراصنة كل يوم‪ .‬تتم كتابة تعليمات ‪ a.out‬الثنائي بلغة اآللة‪،‬‬
‫لغة ابتدائية لوحدة المعالج المركزي والتي يمكن أن يفهمه‪ .‬تم تصميم ‪ complier‬لترجمة اللغة من التعليمات البرمجية ‪ C‬إلى لغة اآللة‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪81‬‬

‫لمجموعة متنوعة من بنيات المعالج‪ .‬في هذه الحالة‪ ،‬فإن المعالج الذي لدينا ذات البنية ‪ .x64‬وهناك أيضا ‪ x86‬و‪ SPARC‬وهي بنيات‬
‫المعالج (المستخدم في محطات الطاقة الشمسية) والمعالج ‪( PowerPC‬المستخدمة في مرحلة ما قبل أجهزة ماكنتوش إنتل)‪ .‬كل معمارية‬
‫تحتوي على لغة آلة مختلفة‪ ،‬لذلك يعمل المترجم باعتباره األرض األوسط والذي تقوم بترجمة لغة السي إلى لغة اآللة لبنية الهدف‪.‬‬
‫طالما يعمل البرنامج المترجم‪ ،‬فإن متوسط قلق المبرمج يكون فقط مع كود المصدر‪ .‬ولكن القراصنة يدركون أن البرنامج المترجم هو في‬
‫الواقع يتم تشغيله في العالم الحقيقي‪ .‬مع فهم أفضل لكيفية عمل وحدة المعالج المركزي‪ ،‬فان القراصنة يمكنهم التالعب بالبرنامج التي يتم تنفيذه‬
‫على ذلك‪ .‬لقد رأينا الشفرة المصدرية للبرنامج األول لدينا‪ ،‬ومن ثم جمعه في ملف ثنائي قابل للتنفيذ لبنية ‪ .x64‬ولكن ماذا يبدو هذا الملف‬
‫الثنائي القابل للتنفيذ؟ تشمل أدوات تطوير ‪ GNU‬برنامج يسمى ‪ ،objdump‬والتي يمكن استخدامه لمعاينة الملف الثنائى المترجم‬
‫"‪ ."compiled binaries‬دعونا نبدأ من خالل النظر في كود الوظيفة )(‪ main‬والتي ترجمت في‪.‬‬

‫البرنامج ‪ objdump‬يقوم بإخراج عدد كبير جدا من الخطوط لدراستها‪ ،‬هنا استخدمنا االمر ‪ grep‬من خالل سطر األوامر‪ ،‬ومعنى ذلك انه‬
‫يقوم باختيار ‪ 20‬سطر فقط بعد التعبير ‪ .main‬يتم تمثيل كل بايت في تدوين ‪ ،hexadecimal‬وهو نظام ترقيم ذات قاعدة ‪ .base-10‬نظام‬
‫الترقيم ‪ base-10‬والذي هو من أكثر النظم التي نحن على دراية به‪ ،‬فلنفرض انه عند الرقم ‪ 12‬تحتاج إلى إضافة رمز ‪.hexadecimal‬‬
‫يستخدم النظام ‪ hexadecimal‬األرقام من ‪ 2‬إلى ‪ 2‬لتمثيل ‪ 2‬إلى ‪ ،2‬ولكنه يستخدم أيضا من ‪ A‬إلى ‪ F‬لتمثيل القيم ‪ 12‬إلى ‪ .11‬وهذا تدوين‬
‫مريح حيث ان البايت "‪ "byte‬يحتوي على ‪ 1‬بت "‪ ،"8bits‬حيث ان كل منها يمكن أن تكون إما ‪ true‬أو ‪ .false‬وهذا يعني ان البايت‬
‫"‪ "byte‬له )‪ 256 (28‬من القيم الممكنة‪ ،‬لذلك يمكن وصف كل بايت "‪ "byte‬مع ‪ 1‬من أرقام ‪.hexadecimal‬‬
‫أرقام ‪ hexadecimal‬التي تبدأ ب ‪ 0x8048374‬في أقصى اليسار هي عناوين الذاكرة‪ .‬حيث يجب وضع قطعه من تعليمات لغة اآللة في مكان‬
‫ما‪ ،‬ويسمى هذا المكان بالذاكرة "‪ ."memory‬الذاكرة هي مجرد مجموعة من البايت "‪ "bytes‬من مساحة التخزين المؤقت الذي يتم‬
‫ترقيمهما بواسطة العناوين‪.‬‬
‫وهي مثل صف من المنازل في شارع محلي‪ ،‬ولكل منها عنوانها الخاص بها‪ ،‬يمكن اعتبار الذاكرة كصف من البايت "‪ ،"row of bytes‬ولكل‬
‫منها عنوان ذاكرة خاص به‪ .‬يمكن الوصول إلى كل بايت من الذاكرة عن طريق عنوانه‪ ،‬وفي هذه الحالة ‪ CPU‬يصل إلى هذا الجزء من‬
‫الذاكرة السترداد تعليمات لغة اآللة التي تشكل البرنامج المترجم‪ .‬أقدم معالجات إنتل ‪ x86‬تستخدم نظام العنونة ‪ 30‬بت‪ ،‬بينما تستخدم األحدث‬
‫منها ‪ x64‬تستخدم نظام العنونة ‪ 94‬بت‪ .‬معالجات ‪ 30‬بت لها )‪ 232 (or 4,294,967,296‬عناوين ممكنة‪ ،‬في حين أن تلك معالجات انتل ‪21‬‬
‫بت لها )‪ 264 (1.84467441 x 1019‬عناوين ممكنة‪ .‬المعالجات ‪ 21‬بت "‪ "amd64‬يمكنها ان تعمل في الوضع ‪ 11‬بت‪ ،‬مما يسمح لهم‬
‫بتشغيل ‪ 32-bit code‬بسرعة‪.‬‬
‫‪ Hexadecimal bytes‬في منتصف اإلدراج أعاله هي تعليمات لغة اآللة للمعالج ‪ .x64‬بالطبع‪ ،‬هذه القيم ‪Hexadecimal‬هي تمثيل فقط‬
‫لبايت وحدة المعالج المركزية التي يمكن أن يفهمه‪ .‬ولكن ‪ .1111111111111111111111111111111111111111111111111‬ليس مفيد‬
‫ألي شيء آخر غير المعالج‪ ،‬يتم عرض اكواد الجهاز في صيغة ‪ hexadecimal bytes‬ويتم وضع كل التعليمات على السطر الخاص به‪،‬‬
‫مثل تقسيم الفقرة إلى الجمل‪.‬‬
‫فلنفكر في هذا األمر‪ hexadecimal bytes ،‬في الحقيقة ليست مفيدة للغاية بنفسها‪ ،‬حتى تأتى لغة ‪ assembly language‬كتوضيح لها‪.‬‬
‫اإلرشادات التي تظهر تكون بلغة ‪ .assembly language‬لغة ‪ assembly language‬هي حقا مجرد مجموعة من فن االستذكار‬
‫للتعليمات المقابلة للغة اآللة‪ .‬التعليمات هل هي أسهل بكثير في تذكرها وفهم معناها في ‪ xc31‬أو ‪ .11111111‬خالفا للغة ‪ C‬واللغات‬
‫األخرى‪ ،‬تعليمات لغة ‪ assembly language‬لها عالقة مباشرة مع تعليمات لغة اآللة المقابلة لها‪ .‬وهذا يعني أن كل بنية معالج لديها‬
‫تعليمات لغة اآللة مختلفة‪ ،‬ولكل منهما أيضا شكال مختلفا من لغة ‪ Assembly .assembly language‬هي مجرد وسيلة للمبرمجين لتمثيل‬
‫تعليمات لغة اآللة التي تعطى إلى المعالج‪ .‬بالضبط كيفية تمثيل تعليمات لغة اآللة هذه مجرد مسألة االتفاقية والتفضيل‪ .‬في حين انه يمكنك‬
‫نظريا إنشاء جملة بلغة ‪ assembly‬إلى معمارية ‪ x86‬الخاصة بك‪ ،‬معظم الناس يفضلون بين واحد من اثنين من الصيغ من األنواع رئيسية‪:‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪82‬‬

‫‪ AT&T syntax‬و‪ Assembly .Intel syntax‬كما هو مبين في اإلخراج السابق هو ‪ ،AT&T syntax‬كل أدوات التفكيك لينكس‬
‫تستخدم ‪ AT&T syntax‬افتراضيا‪ .‬من السهل أن نتعرف على ‪ AT&T syntax‬وذلك من خالل الرموز ‪ %‬و ‪ .$‬يمكن االنتقال الى‬
‫الصيغة ‪ Intel syntax‬من خالل توفير الخيار ‪ -M intel‬الى االمر ‪ ،objdump‬كما هو مبين في اإلخراج أدناه‪.‬‬

‫شخصيا‪ ،‬أعتقد ان صيغة ‪ Intel syntax‬هي أكثر قابلية للقراءة بكثير وأسهل للفهم‪ ،‬ألغراض هذا الكتاب‪ ،‬سأحاول استخدام بناء الجملة هذا‪.‬‬
‫بغض النظر عن تمثيل ‪ ،assembly language‬فهم المعالج لألوامر يكون بسيط للغاية‪ .‬تتكون هذه التعليمات من عملية وأحيانا معلمات‬
‫إضافية والتي تصف وجهة و‪/‬أو مصدر هذه العملية‪ .‬هذه العمليات تتحرك حول الذاكرة‪ ،‬وتقوم بتنفيذ بعض من انواع الرياضيات األساسية‪ ،‬أو‬
‫تتقاطع مع المعالج لحمله على القيام بشيء آخر‪ .‬في النهاية‪ ،‬معالج الكمبيوتر يمكن القيام به حقا‪ .‬ولكن في نفس الطريق قد كتب الماليين من‬
‫الكتب باستخدام أبجدية صغيرة نسبيا من الرسائل‪ ،‬وعدد ال حصر له من البرامج الممكنة التي يمكن إنشاؤها باستخدام مجموعة صغيرة نسبيا‬
‫من تعليمات الجهاز‪.‬‬
‫تحتوي المعالجات أيضا على مجموعة من المتغيرات الخاصة به تسمى المسجل "‪ ."registers‬معظم التعليمات تستخدم هذه ‪registers‬‬
‫لقراءة أو كتابة البيانات‪ ،‬لذلك فهم ‪ registers‬الخاص بالمعالج ال بد منه لفهم التعليمات‪ .‬الصورة األكبر تصبح أكبر ‪....‬‬
‫‪The x86 Processor‬‬
‫‪ CPU 1119‬هو اول معالج بروسيسور ‪ .x86‬والذي قام بتطويره وتصنيعه شركة إنتل‪ ،‬والتي تطورت فيما بعد معالجات أكثر تقدما في‬
‫عائلة واحدة‪ :‬في ‪.12112 ،12112 ،12112 ،12112‬‬
‫المعالج ‪ x86‬لديه العديد من ‪ ،registers‬التي هي مثل المتغيرات الداخلية للمعالج‪ .‬من الممكن ان اتحدث عن هذه ‪ registers‬اآلن‪ ،‬ولكن‬
‫أعتقد أنه من األفضل أن ترى األشياء بنفسك‪ .‬تتضمن أدوات تطوير ‪ GNU‬أيضا مصحح "‪ "debugger‬يسمى ‪ .GDB‬المصحح‬
‫"‪ "debugger‬يستخدم من قبل المبرمجين من اجل خطوة من خالل البرامج المترجمة "‪ ،"compiled program‬ودراسة ذاكرة‬
‫البرنامج‪ ،‬وعرض ‪ registers‬المعالج‪ .‬المبرمج الذي لم يستخدم أبدا المصحح "‪ "debugger‬للنظر في األعمال الداخلية للبرنامج هو مثل‬
‫طبيب القرن السابع عشر الذي لم يستخدم أبدا المجهر‪ .‬على غرار المجهر‪ ،‬المصحح "‪ "debugger‬يسمح للقراصنة لمراقبة العالم المجهري‬
‫من التعليمات البرمجية ولكن المصحح "‪ "debugger‬هو أقوى بكثير مما تسمح به هذه االستعارة‪ .‬وخالفا للمجهر‪ ،‬المصحح "‪"debugger‬‬
‫يمكنه عرض مرحلة التنفيذ من جميع الزوايا‪ ،‬إيقافه‪ ،‬وتغيير أي شيء على طول الطريق‪.‬‬
‫أدناه‪ ،‬يتم استخدام ‪ GDB‬إلظهار حالة ‪ processor registers‬قبل بدء البرنامج‪.‬‬

‫نالحظ ان البرنامج ‪ gdb‬متوفر في اصدارات لينكس وبديال عن ذلك يوجد أيضا طريقة أخرى لترجمة األكواد الى لغة األسمبلي لنرى ما‬
‫يحدث وذلك من خالل الموقع ‪ .http://gcc.godbolt.org‬في هذا المثال تم تعين ‪ break point‬على الداله )(‪ main‬بحيث ان التنفيذ سوف‬
‫يتوقف قبل أن يتم تنفيذ التعليمات البرمجية لدينا‪ GDB .‬يقوم بتنفيذ البرنامج‪ ،‬ثم يتوقف عند نقطة ‪ ،break point‬وهنا يقوم بعرض كل‬
‫مسجالت المعالج "‪ "processor registers‬وحالتهم الحالية‪.‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪83‬‬

‫يتم تخزين البيانات داخل المعالج في المسجالت‪ .‬هنا اول أربعة من المسجالت "‪ )rax, rcx, rdx, and rbx( "registers‬هم‬
‫‪ registers‬لألغراض العامة‪ .‬وهذه تسمى ‪ ،Data ،Counter ،Accumulator‬و‪ ،Base registers‬على التوالي‪ .‬هذه تستخدم في‬
‫مجموعة متنوعة من األغراض‪ ،‬لكنها تعمل بشكل رئيسي كالمتغيرات المؤقتة لل ‪ CPU‬عندما يتم تنفيذ تعليمات الجهاز‪ .‬هذه المسجالت‬
‫خاصه بالمعالج ذات البنيه ‪ x64‬أما بالنسبة للبنيه ‪ x32‬فيتم استبدال الحرف ‪ r‬بالحرف ‪ e‬وتكون (‪.)eax, ecx, edx and ebx‬‬
‫"‪ "rax‬يسمى ‪ Accumulator register‬ويستخدم للعمليات الحسابية واالدخال واإلخراج‪ "rbx" .‬يسمى ‪ base register‬ويستخدم‬
‫كمؤشر للوصول الى الذاكرة‪ "rcx" .‬يسمى ‪ counter register‬ويستخدم كعداد للتكرارات‪ "rdx" .‬يسمى ‪ data register‬ويستخدم‬
‫للعمليات الحسابية "الضرب والقسمة"‬
‫ال ‪ registers‬األربعة الثانية )‪ (rsp, rbp, rsi, and rdi‬هي أيضا ‪ registers‬لألغراض العامة‪ ،‬لكنها تعرف أحيانا باسم المؤشرات‬
‫"‪ "pointers‬والفهارس "‪ ."indexes‬وهذه من اجل ‪،Destination Index ،Source Index ،Base Pointer ،Stack Pointer‬‬
‫على التوالي‪ .‬اول اثنين من ‪ registers‬يطلق عليها مؤشرات "‪ "pointers‬ألنها تخزن عناوين ‪ 64‬بت بالنسبة للمعالجات ‪ 64‬بت وعناوين‬
‫‪ 30‬بت للمعالجات ‪ 30‬بت‪ ،‬والتي تشير أساسا إلى مواقع في الذاكرة‪ .‬هذه ‪ registers‬مهمة إلى حد ما لتنفيذ البرنامج وإدارة الذاكرة‪ .‬سوف‬
‫نناقشها أكثر في وقت الحق‪ Registers .‬االخرين هي أيضا من الناحية الفنية مؤشرات "‪ ،"pointers‬التي تستخدم عادة لإلشارة إلى‬
‫المصدر والوجهة عندما يحتاج البيانات إلى القراءة من أو الكتابة علي‪ .‬هناك تحميل وتخزين التعليمات التي تستخدم هذه ‪ ،registers‬ولكن‬
‫بالنسبة للجزء األكبر‪ ،‬يمكن اعتبار هذه ‪ registers‬سجالت لألغراض العامة على أنها مجرد بسيطة‪.‬‬
‫‪ The RIP register‬هو ‪ ،Instruction Pointer register‬والذى يشير إلى التعليمات التي يقرأها المعالج حاليا‪ .‬مثل الطفل يشير‬
‫بإصبعه على كل كلمة يقرئها‪ ،‬المعالج يقرأ كل التعليمات باستخدام ‪ RIP register‬كما انه إصبعه‪ .‬وبطبيعة الحال‪ ،‬هذا ‪ register‬مهم جدا‬
‫وسوف يستخدم كثيرا أثناء التصحيح‪ .‬حاليا‪ ،‬فإنه يشير إلى عنوان في الذاكرة‪.‬‬
‫‪ EFLAGS register‬يتكون في الواقع من العديد من ‪ bit flags‬والتي تستخدم في المقارنات وانقسامات الذاكرة‪ .‬يتم تقسيم الذاكرة الفعلية‬
‫إلى عدة قطاعات مختلفة‪ ،‬والتي سيتم مناقشتها الحقا‪ ،‬وهذه ‪ register‬تتبع ذلك‪ .‬بالنسبة للجزء األكبر‪ ،‬يمكن تجاهل هذه ‪ register‬ألنها‬
‫نادرا ما نحتاج الوصول إليها مباشرة‪.‬‬

‫‪Assembly Language‬‬
‫بما أننا نستخدم ‪ Intel syntax assembly language‬من أجل هذا الكتاب‪ ،‬يجب أن يتم إعداد أدواتنا الستخدام هذا النحو‪ .‬داخل ‪،GDB‬‬
‫يمكن تعيين بناء الجملة ببساطة الى ‪ Intel syntax‬عن طريق كتابة ‪ .set disassembly intel‬يمكنك تكوين هذا اإلعداد لتشغيل ‪GDB‬‬
‫كل مرة يبدأ العمل فيها عن طريق وضع األمر في ملف ‪ .gdbinit‬في مجلد ‪ home‬الرئيسي الخاص بك‪.‬‬

‫‪reader@hacking:~/booksrc $ echo "set disassembly intel" > ~/.gdbinit‬‬


‫‪reader@hacking:~/booksrc $ cat ~/.gdbinit‬‬
‫‪set disassembly intel‬‬
‫‪reader@hacking:~/booksrc $‬‬
‫اآلن تم اعداد ‪ GDB‬الستخدام صيغة ‪ ،Intel syntax‬يمكنك أيضا اعداد هذا من خالل الموقع الذي تحدثنا عنه سابقا والذي يعطينا امكانيه‬
‫رؤية الترجمة للغة األسمبلي الخاص بالكود الذي لدينا‪ .‬ولك من خالل النقر فوق ‪ Intel syntax‬الموجود في الجانب االيسر في القائمة العلوية‪.‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪84‬‬

‫دعونا نبدأ في فهم ذلك‪ .‬تعليمات لغة ‪ assembly‬في حالة ‪ Intel syntax‬تتبع هذا النمط‪:‬‬
‫>‪Operation <destination>, <source‬‬
‫قيم كل من ‪ destination‬و‪ source‬سوف تكون أما ‪ ،memory address ،register‬أو ‪ .value‬العمليات "‪ "operation‬عادة ما‬
‫تكون مساعده للذاكرة‪ :‬في العملية ‪ "mov operation" mov‬تقوم بتحريك القيمة من المصدر إلى الوجهة‪ sub ،‬تقوم بعملية الطرح‪inc ،‬‬
‫تقوم بالزيادة‪ ،‬وهكذا‪ .‬على سبيل المثال‪ ،‬التعليمات التالية سوف تحرك القيمة من ‪ RSP‬إلى ‪ RBP‬ومن ثم طرح ‪ 1‬من ‪( RSP‬تخزين النتيجة‬
‫في ‪.)RSP‬‬
‫‪8048375:‬‬ ‫‪89 e5‬‬ ‫‪mov rbp,rsp‬‬
‫‪8048377:‬‬ ‫‪83 ec 08‬‬ ‫‪sub rsp,0x8‬‬
‫هناك أيضا العمليات التي تستخدم للسيطرة على تدفق التنفيذ‪ .‬يتم استخدام عملية ‪ cmp‬لمقارنة القيم‪ ،‬وأساسا أي عملية تبدأ بحرف ‪ j‬تستخدم‬
‫لالنتقال إلى جزء مختلف من الكود (اعتمادا على نتيجة المقارنة)‪ .‬في المثال التالي يقارن أوال قيمة ‪ 1‬بايت (‪ )DWORD‬تقع في ‪RBP‬‬
‫ناقص ‪ 1‬مع الرقم ‪ .2‬العملية المقبلة هو اختصار لقفزة إذا كانت أقل من أو يساوي‪ ،‬في اشارة الى نتيجة المقارنة السابقة‪ .‬إذا كانت هذه القيمة‬
‫أقل من أو تساوي ‪ ،2‬فان التنفيذ يقوم بالقفز إلى التعليمات في ‪ .0x8048393‬خالف ذلك‪ ،‬تدفق التعليمات الى الخطوة المقبلة بقفزة غير‬
‫مشروطه‪.‬‬
‫‪804838b:‬‬ ‫‪83 7d fc 09‬‬ ‫‪cmp DWORD PTR [rbp-0x4],0x9‬‬
‫‪804838f:‬‬ ‫‪7e 02‬‬ ‫‪jle‬‬ ‫>‪8048393 <main+0x1f‬‬
‫‪8048391:‬‬ ‫‪eb 13‬‬ ‫>‪jmp 80483a6 <main+0x32‬‬
‫كانت هذه أمثلة من التفكيك السابق‪ ،‬وكنا قد اعددنا المصحح لدينا الستخدام بناء الجملة ‪ ،Intel syntax‬لذلك دعونا نستخدم المصحح مع‬
‫البرنامج الذي قمنا بإنشائه‪ "-g flag" .‬يمكن استخدامه من قبل ‪ GCC compiler‬ليشمل معلومات تصحيح اضافية‪ ،‬والتي سوف تعطي‬
‫الوصول الى ‪ GDB‬إلى كود المصدر‪.‬‬

‫يمكنك أيضا استخدام الخيار "‪ "-m32‬مع البرنامج ‪ gdb‬لعرض المسجالت "‪ "register‬في وضع ‪ 30‬بت‪.‬‬

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

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪85‬‬

‫الحظ أن ‪ RIP‬يحتوي على عنوان الذاكرة التي تشير إلى التعليمات الموجودة في الداله )(‪ .main‬التعليمات قبل هذا والتي تعرف باسم‬
‫‪ function prologue‬ويتم إنشاؤها من قبل المترجم "‪ "compiler‬إلعداد الذاكرة لبقية المتغيرات المحلية الخاصة بالداله )(‪ .main‬وهو‬
‫جزء من المتغيرات ‪ reason variables‬تحتاج الى توضيح في ‪ C‬للمساعدة في بناء هذا القسم من التعليمات البرمجية‪ .‬المصحح يعرف هذا‬
‫الجزء من الكود ويتم إنشائه تلقائيا وهو ذكي بما فيه الكفاية لتخطي أكثر من ذلك‪ .‬نحن سوف نتحدث أكثر عن ‪ function prologue‬الحقا‪.‬‬
‫يوفر المصحح ‪ GDB‬طريقة مباشرة لفحص الذاكرة‪ ،‬وذلك باستخدام االمر ‪ ،"command x" x‬وهو اختصار للفحص "‪."examine‬‬
‫فحص الذاكرة هو مهارة حاسمة ألي هاكر‪ .‬معظم الهاكر يبدو مذهلين وساحرين‪ ،‬ما لم تكن تعرف عن خفة اليد والتضليل‪ .‬للتفرقة بين كل من‬
‫السحر والقرصنة‪ ،‬لو كنت تنظر فقط في المكان الصحيح‪ ،‬فإن الخدعة تكون واضحة‪ .‬هذه واحده من أسباب الساحر الجيد بانه يفعل نفس‬
‫الخدعة مرتين‪ .‬ولكن مع مصحح مثل ‪ ،GDB‬فان كل جزء من تنفيذ أحد البرامج يمكن فحصه‪ ،‬إيقافه‪ ،‬التشغيل خطوه خطوه‪ ،‬التكرار في‬
‫كثير من األحيان حسب الحاجة‪ .‬عند تشغيل البرنامج فهو في الغالب مجرد معالج وشرائح من الذاكرة‪ ،‬فحص الذاكرة هي الطريقة األولى التي‬
‫يجب ان ننظر إليها لنرى ما يحدث في الواقع‪.‬‬
‫أوامر الفحص "‪ "examine command‬في ‪ GDB‬يمكن استخدامها للبحث عن عنوان معين من الذاكرة في مجموعة متنوعة من الطرق‪.‬‬
‫يتوقع هذا األمر معاملين عندما يتم استخدامه‪ :‬الموقع في الذاكرة لفحصه وكيفية عرض تلك الذاكرة‪.‬‬
‫تستخدم الصيغة المعروضة حرف واحد لالختصار‪ ،‬والذي هو اختياريا من قبل عدد العناصر لفحصها‪ .‬بعض الحروف التي تعتبر أكثر شيوعا‬
‫على النحو التالي‪:‬‬
‫‪o  Display in octal.‬‬
‫‪x  Display in hexadecimal.‬‬
‫‪u Display in unsigned, standard base-10 decimal.‬‬
‫‪t  Display in binary‬‬
‫يمكن استخدام هذه مع أمر الفحص لفحص عنوان ذاكرة معينة‪ .‬في المثال التالي‪ ،‬يتم استخدام العنوان الحالي للسجل ‪ .RIP register‬وغالبا‬
‫ما تستخدم األوامر المختصرة مع ‪ ،GDB‬حتى ‪ info register rip‬يمكن اختصاره الى ‪.i r rip‬‬

‫ذاكرة المسجل ‪ RIP register‬تشير إلى إمكانية الفحص باستخدام العنوان المخزن في ‪ .RIP‬المصحح يتيح لك مرجع للمسجالت "‪"register‬‬
‫مباشرة‪ ،‬لذلك ‪ $RIP‬تعادل قيمة ‪ RIP‬الذي تحتويها في تلك اللحظة‪ 199140919 .‬هي قيمة في صيغة ‪ octal‬وهي نفسها ‪0x00fc45c7‬‬
‫بالنظام ‪ ،hex‬وهي نفسها ‪ 19530635‬بنظام ‪ ،base-10 decimal‬والذي بدوره نفسها ‪ 11111111111111111111111111111111‬بالنظام‬
‫الثنائي "‪ ."binary‬كما يمكننا إرفاق األرقام الى أوامر الفحص لفحص وحدات متعددة في عنوان الهدف‪.‬‬

‫الحجم االفتراضي للوحدة الواحدة هي ‪ four-byte unit‬وتسمى ‪ .word‬حجم وحدات العرض الخاصة بأوامر الفحص يمكن أن تتغير‬
‫بإضافة حرف الحجم إلى نهاية شكل الرسالة‪ .‬حروف الحجم الصحيحة هي كما يلي‪:‬‬
‫‪b‬‬ ‫‪ A single byte‬‬
‫‪h‬‬ ‫‪ A halfword, which is two bytes in size‬‬
‫‪w‬‬ ‫‪ A word, which is four bytes in size‬‬
‫‪g‬‬ ‫‪ A giant, which is eight bytes in size‬‬
‫هذا مربك قليال‪ ،‬ألنه في بعض األحيان يشير المصطلح ‪ word‬أيضا للقيمة ‪ .2-byte‬في هذه الحالة فان الكلمة ‪ double word‬أو‬
‫‪ DWORD‬تشير إلى قيمة ‪ .4-byte‬إخراج ‪ GDB‬التالي يبين الذاكرة المعروضة في أحجام مختلفة‪.‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪86‬‬

‫إذا نظرت الى هذا عن كثب‪ ،‬قد تالحظ شيئا غريبا في البيانات أعاله‪ .‬يظهر أوامر الفحص األولى أول ثمانية بايت "‪،"first eight bytes‬‬
‫وبشكل طبيعي‪ ،‬عند استخدام أوامر الفحص مع وحدات أكبر فانه يعرض المزيد من البيانات‪ .‬ومع ذلك‪ ،‬فإن الفحص األول اظهر اول اثنين من‬
‫البايت ليكونا ‪ 0xc7‬و ‪ ،0x45‬ولكن عند استخدام وحدات اكبر ‪ halfword‬على نفس عنوان الذاكرة بالضبط‪ ،‬تظهر القيمة ‪ ،0x45c7‬مع‬
‫بايت عكسي "‪ ."bytes reversed‬ويمكن مالحظة هذا التأثير نفسه من البايت العكسي عندما يظهر كامل الكلمة أربعة بايت كما في‬
‫‪ ،0x00fc45c7‬ولكن عندما يتم عرض البايت األربعة األولى بايت بايت‪ ،‬فهي تكون في الترتيب ‪.0xc7, 0x45, 0xfc, and 0x00‬‬
‫وذلك ألن المعالج يقوم بتخزين قيم المعالج في ‪ ،little-endian byte order‬مما يعني أن البايت األقل أهمية يتم تخزينها أوال‪ .‬على سبيل‬
‫المثال‪ ،‬إذا كان األربعة بايت هي تفسر على أنها قيمة واحدة‪ ،‬يجب استخدام البايت في ترتيب عكسي‪ .‬المصحح ‪ GDB‬ذكي بما فيه الكفاية‬
‫لمعرفة كيف يتم تخزين القيم‪ ،‬وذلك عندما يتم فحص ‪ word‬أو ‪ ،halfword‬ال بد من عكس البايت لعرض القيم الصحيحة في‬
‫‪ .hexadecimal‬إعادة النظر في هذه القيم المعروضة على حد سواء في صورة ‪ hexadecimal‬و‪ unsigned decimals‬قد تساعد في‬
‫إزالة هذا االلتباس‪.‬‬

‫تظهر البايت األربعة األولى في كل من النظام ‪ hexadecimal‬و‪ .unsigned decimals‬ويستخدم برنامج آلة حاسبة سطر األوامر تسمى‬
‫‪ bc‬إلظهار أنه إذا تم تفسير البايت في الترتيب الغير صحيح‪ ،‬فان القيمة تصبح غير صحيحة وهي ‪ .3343050411‬ترتيب البايت من بنية‬
‫معينة هو التفصيل المهم الذي يجب ان تعلمه‪ .‬في حين أن معظم أدوات التصحيح والترجمة سوف تأخذ االهتمام بتفاصيل ترتيب البايت تلقائيا‪،‬‬
‫في نهاية المطاف سوف تقوم بمعالجة الذاكرة مباشرة من قبل نفسك‪.‬‬
‫باإلضافة إلى تحويل ترتيب البايت‪ ،‬فان ‪ GDB‬يمكنه القيام بتحويالت أخرى مع أوامر الفحص‪ .‬لقد رأينا بالفعل أن ‪ GDB‬يمكنه تفكيك‬
‫تعليمات لغة اآللة إلى تعليمات ‪ assembly‬قابله للقراءة البشرية‪ .‬أوامر الفحص تقبل أيضا الحرف ‪ ،i‬والذي هو اختصار ل ‪،instruction‬‬
‫لعرض الذاكرة في صورة تعليمات لغة التجميع "‪."disassembled assembly language instructions‬‬
‫في اإلخراج أعاله‪ ،‬يتم تشغيل البرنامج ‪ a.out‬في ‪ ،GDB‬مع نقطة توقف وضعت في )(‪ .main‬ومنذ ان كانت ‪ rip register‬هي إشارة‬
‫إلى الذاكرة التي تحتوي في الواقع تعليمات لغة اآللة‪ ،‬فهي تفكيك جيد للغاية‪.‬‬
‫في التفكيك السابق بواسطة ‪ objdump‬يؤكد أن وحدات البايت السبعة ‪ RIP‬بلغة اآللة تشير الى تعليمات لغة التجمع المقابلة في الواقع‪.‬‬
‫‪8048384: c7 45 fc 00 00 00 00 mov DWORD PTR [rbp-0x4],0x0‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪87‬‬

‫تعليمات لغة التجمع هذه تقوم بتحريك القيمة ‪ 2‬في الذاكرة الموجود على العنوان المخزنة في السجل ‪ ،RIP‬ناقص ‪ i .1‬يتعم تعريفه على انه‬
‫عدد صحيح "‪ "integer‬ويستخدم ‪ 1‬بايت من الذاكرة‪ .‬في األساس‪ ،‬هذا األمر يقوم بتصفير المتغير ‪ i‬من اجل ‪ .for loop‬إذا تم فحص تلك‬
‫الذاكرة في الوقت الحالي‪ ،‬فإنها لن تحتوي على أي شيء سوى قمامة عشوائية‪ .‬الذاكرة في هذا الموقع يمكن فحص بعدة طرق مختلفة‪.‬‬
‫يظهر ان السجل ‪ RBP register‬يحتوي على العنوان ‪ ،0x7fffffffe3b0‬لغة التجميع ستقوم بكتابة القيمة مع طرح ‪ 1‬من ذلك‪ ،‬وسوف‬
‫تكون ‪ .0x7fffffffe3ac‬أوامر الفحص سوف تكون بفحص عنوان الذاكرة هذا مباشرة أو عن طريق القيام بالحسابات الرياضية‪ .‬يمكن أيضا‬
‫أن تستخدم األمر ‪ print‬للقيام بالرياضيات البسيطة‪ ،‬ولكنه سوف يقوم بتخزين النتيجة في متغير مؤقت في المصحح‪ .‬هذا المتغير يعرف باسم‬
‫‪ $1‬يمكن ان يستخدم الحقا إلعادة الوصول بسرعة الى موقع معين في الذاكرة‪ .‬أي من الطرق المبينة أعاله سوف تنجز المهمة نفسها‪ 1 :‬بايت‬
‫من البيانات المهملة الموجودة في الذاكرة سوف يتم تصفيرها عند تنفيذ التعليمات التالية‪.‬‬
‫دعونا نقوم بتنفيذ التعليمات الحالية باستخدام االمر ‪ ،nexti‬وهو اختصار ‪ .next instruction‬فان المعالج سوف يقرا التعليمات في ‪،RIP‬‬
‫قم بتنفيذ ذلك‪ ،‬ثم تطوير ‪ RIP‬الى التعليمات التالية‪.‬‬

‫كما هو متوقع‪ ،‬األوامر السابقة قامت بتصفير البايت ‪ 1‬التي وجدت في ‪ RBP‬ناقص ‪ ،1‬والتي هي إعداد ذاكرة وضعت من اجل متغير ‪C‬‬
‫وهو ‪ .i‬ثم قام بالتقدم الى ‪ .RIP‬اإلرشادات القليلة المقبلة تجعل الواقع أكثر منطقية‪.‬‬

‫العين المدربة قد تالحظ شيئا في الذاكرة هنا‪ ،‬وال سيما مجموعة من البايتات‪ .‬بعد فحص الذاكرة لفترة طويلة بما فيه الكفاية‪ ،‬هذه األنواع من‬
‫األنماط البصرية أصبحت أكثر وضوحا‪ .‬وتندرج هذه البايتات ضمن نطاق ‪ ASCII .ASCII‬هو المعيار المتفق عليه لتعين جميع األحرف‬
‫على لوحة المفاتيح إلى أرقام ثابتة‪ .‬البايت ‪ ،0x6c ،0x65 ،0x48‬و‪ 0x6f‬كلها تتوافق مع الحروف في األبجدية على طاولة ‪ ASCII‬كما هو‬
‫مبين أدناه‪ .‬تم العثور على هذا الجدول في صفحة ‪ man‬الخاصة ب ‪ ،ASCII‬وهي متاحة على معظم أنظمة لينكس وذلك بكتابة ‪.man ascii‬‬
‫‪ASCII Table‬‬

‫أوامر الفحص الخاصة ب ‪ GDB‬تحتوي أيضا على أحكام "‪ "provisions‬للنظر في هذا النوع من الذاكرة‪ .‬صيغة الحرف ‪ c‬يمكن استخدامها‬
‫للبحث تلقائيا عن البايت في طاولة ‪ ،ASCII‬والحرف ‪ s‬سوف يعرض سلسلة كاملة لبيانات الرمز‪.‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪88‬‬

‫تكشف هذه األوامر سلسلة البيانات "‪ "Hello, world!\n‬والتي يتم تخزينها في عنوان الذاكرة ‪ .0x4005ec‬هذه السلسلة هي صيغه لوظيفة‬
‫)(‪ ،printf‬مما يدل على تحرك عنوان هذه السلسلة إلى العنوان المخزن في )‪ RSP (0x4005ec‬حيث ان لديها ما تفعله مع هذه الوظيفة‪.‬‬
‫عند النظر إلى التفكيك الكامل مرة أخرى‪ ،‬يجب أن تكون قادرا على تقول أي من أجزاء الكود ‪ C‬تم ترجمتها إلى تعليمات لغة االله‪.‬‬

‫‪ 1.1‬العودة الى األساسيات‬


‫أصبحت اآلن فكرة البرمجة أقل تجريدا‪ ،‬هناك عدد قليل من المفاهيم الهامة األخرى لمعرفة اللغة ‪ .C‬لغة التجميع "‪ "Assembly‬ومعالجات‬
‫الكمبيوتر كانت موجودة قبل لغات البرمجة ذات المستوى العالي‪ ،‬وتطور العديد من مفاهيم البرمجة الحديثة عبر الزمن‪ .‬بنفس الطريقة الذي‬
‫يعرف قليال عن الالتينية يمكنه أن يحسن من نفسه كثيرا في فهم اللغة اإلنجليزية‪ ،‬وكذلك معرفة مفاهيم البرمجة على المستوى المنخفض‬
‫يساعد في فهم البرمجة على المستوى األعلى‪ .‬عند االستمرار الى القسم التالي‪ ،‬تذكر أن كود ‪ C‬يجب أن يتم ترجمته الى تعليمات لغة االله قبل‬
‫أن تتمكن من فعل أي شيء‪.‬‬
‫‪Strings‬‬
‫القيمة "‪ "Hello, world!\n‬يتم تمريرها إلى الدالة )(‪ printf‬في البرنامج السابق‪ .‬في ‪ ،C‬المصفوفة "‪ "array‬هي مجرد قائمة من‬
‫العناصر ‪ n‬لنوع محدد من البيانات‪ 20-character array .‬هي مجرد ‪ 12‬حرفا مجاورين يقعون في الذاكرة‪ .‬يشار أيضا إلى المصفوفة‬
‫"‪ "array‬على انها ‪.buffers‬‬

‫يمكنك اإلعالن عن المصفوفه "‪"arrary‬باستخدام الصيغه التاليه‪:‬‬


‫;]‪Type arrayName [arraySize‬‬
‫‪ :String‬تقنيا هى عباره عن نص "‪ "string‬أي سلسله من الحروف بما في ذلك الحرف الخالي "‪ "null character‬الذى تكون نهايته‪.‬‬
‫‪ :Length of string‬هو طول التسلسل النصي حتى الحرف الخالي‪.‬‬
‫‪ :Size of string‬هو عدد وحدات البايت المخصصة للمصفوفة‪ Size .‬ال يساوى ‪ length‬حيث انه يعتمد على حجم الحرف بالبايت‪.‬‬
‫‪-‬‬ ‫‪A single UTF-8 char = 1-4 bytes‬‬
‫‪-‬‬ ‫‪Wide char = 2-4 bytes‬‬
‫‪ :Count‬هو عدد العناصر في المصفوفة‪.‬‬
‫برنامج ‪ char_array.c‬هو مثال على مصفوفة الحروف "‪."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‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪89‬‬

‫;'‪str_a[10] = 'l‬‬
‫;'‪str_a[11] = 'd‬‬
‫;'!' = ]‪str_a[12‬‬
‫;'‪str_a[13] = '\n‬‬
‫;‪str_a[14] = 0‬‬
‫;)‪printf(str_a‬‬
‫}‬
‫‪ The GCC compiler‬يمكنه أيضا إعطاء المفتاح "‪ "-o‬لتحديد ملف اإلخراج للترجمة اليه بدال من االفتراضي‪ .‬يتم استخدام هذا المفتاح‬
‫لترجمة البرنامج الى ملف ثنائي قابل للتنفيذ "‪ "executable binary file‬يسمى ‪.char_array‬‬

‫في البرنامج السابق‪ ،‬تم تعريف ‪ 20-element character array‬الى ‪ ،str_a‬ثم يكتب كل عنصر من عناصر المصفوفة اليها‪ ،‬واحدا تلو‬
‫اآلخر‪ .‬الحظ أن العدد الذي يبدأ ب ‪ ،2‬يكون مقابل ‪ .1‬الحظ أيضا أن الحرف األخير هو ‪( .2‬وهذا ما يسمى أيضا بالبايت الفارغ "‪.)"null byte‬‬
‫هنا تم تعريف مصفوفة الحروف "‪ ،"character array‬بحيث يتم تخصيص ‪ 12‬بايت لذلك‪ ،‬ولكن في الواقع ‪ 11‬من هذه البايت تستخدم‬
‫فقط‪ .‬يتم استخدام البايت األخير "‪ "null byte‬الموجود في النهاية يستخدم گ ‪ delimiter character‬وفيه يخبر أي داله تتعامل مع‬
‫السلسلة "‪ "string‬بوقف العمليات هناك‪ .‬ما تبقى من البايت اإلضافية هي مجرد قمامة وسيتم تجاهلها‪ .‬إذا تم إدخال بايت فارغ في العنصر‬
‫الخامس من مصفوفة الحروف‪ ،‬فان األحرف ‪ hello‬سيتم طباعتها فقط بواسطة الدالة )( ‪.printf‬‬
‫منذ وضع كل حرف في مصفوفة الحروف وفى بعض االحيان يتم استخدام السالسل "‪ "string‬إلى حد ما‪ ،‬تم إنشاء مجموعة من الدوال‬
‫القياسية للتالعب بالسلسلة‪ .‬على سبيل المثال‪ ،‬الداله )(‪ strcpy‬والذي يقوم بنسخ السلسلة من المصدر إلى الوجهة‪ ،‬التكرار عبر سلسلة‬
‫المصدر ونسخ كل بايت إلى الوجهة (الوقف بعد نسخ بايت اإلنهاء "‪ .)"null byte‬ترتيب المعلمات للداله مشابه لتركيب األسمبلي في صيغة‬
‫إنتل‪ :‬الوجهة أوال ومن ثم المصدر‪ .‬يمكن إعادة كتابة البرنامج ‪ char_array.c‬باستخدام )(‪ strcpy‬إلنجاز نفس الشيء باستخدام مكتبة‬
‫السلسلة‪ .‬ويتضمن اإلصدار التالي من برنامج ‪ char_array2‬كما هو مبين أدناه ‪ string.h‬ألنه يستخدم وظيفة السلسلة‪.‬‬
‫>‪#include <stdio.h‬‬
‫>‪#include <string.h‬‬
‫{ )(‪int main‬‬
‫;]‪char str_a[20‬‬
‫;)"‪strcpy(str_a, "Hello, world!\n‬‬
‫;)‪printf(str_a‬‬
‫}‬
‫دعونا نلقي نظرة على هذا البرنامج مع ‪ .GDB‬كما هو مبين في اإلخراج أدناه‪ ،‬يتم فتح البرنامج المترجم مع ‪ GDB‬ويتم تعيين نقاط التوقف‬
‫من قبل‪ ،‬في‪ ،‬وبعد )(‪ .strcpy‬المصحح يقوم بوقف البرنامج في كل نقطة توقف‪ ،‬وهذا يعطينا فرصة لفحص المسجالت "‪"registers‬‬
‫والذاكرة‪ .‬كود الداله )(‪ strcpy‬يأتي من المكتبة المشتركة‪ ،‬لذلك ال يمكن في الواقع تعيين نقطة توقف في هذه الداله حتى يتم تنفيذ البرنامج‪.‬‬

‫عندما يتم تشغيل البرنامج‪ ،‬يتم حل مشكلة نقطة التوقف عند )(‪ strcpy‬حيث انه قبل التشغيل لم يتم تعريفها‪ .‬في كل نقطة توقف‪ ،‬نحن ذاهبون‬
‫للنظر في ‪ RIP‬والتعليمات التي يشير إليها‪ .‬الحظ أن موقع الذاكرة ل ‪ RIP‬في نقطة التوقف الوسطى مختلفة‪.‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪90‬‬

‫العنوان في ‪ RIP‬في نقطة التوقف الوسطى مختلفة ألن التعليمات البرمجية للدالة )(‪ strcpy‬يأتي من مكتبة محملة‪ .‬في الواقع‪ ،‬يظهر‬
‫المصحح ‪ RIP‬في نقطة التوقف الوسطى الداله )(‪ ،strcpy‬في حين أن ‪ RIP‬لنقاط التوقف األخرى تظهر الداله )(‪ .main‬أود أن أشير إلى‬
‫أن ‪ RIP‬قادر على السفر من التعليمات البرمجية الخاصة ب )(‪ main‬إلى األكواد الخاصة ب )(‪ strcpy‬والعودة مرة أخرى‪ .‬في كل مرة يتم‬
‫استدعاء الدالة‪ ،‬يتم االحتفاظ بسجل في ‪ data structure‬تسمى المكدس "‪ ."stack‬حيث ان المكدس يتيح ‪ RIP‬العودة من خالل سالسل‬
‫طويلة من استدعاء الدالة‪ .‬في ‪ ،GDB‬يمكن استخدام األمر ‪ bt‬لتتبع المكدس‪.‬‬

‫قبل الخروج من هذا الجزء فانظر الى التالى والذى يبين اهم الدوال المستخدمه في السالسل النصيه "‪."string‬‬
‫‪-‬‬ ‫‪strcpy(s1, s2);  Copies string s2 into string s1.‬‬
‫‪-‬‬ ‫‪strcat(s1, s2);  Concatenates string s2 onto the end of string s1.‬‬
‫‪-‬‬ ‫;)‪strlen(s1‬‬ ‫‪ Returns the length of string s1.‬‬
‫‪-‬‬ ‫‪strcmp(s1, s2); Returns 0 if s1 and s2 are the same; less than 0 if s1<s2; greater than 0 if s1>s2.‬‬
‫‪-‬‬ ‫‪strchr(s1, ch);  Returns a pointer to the first occurrence of character ch in string s1.‬‬
‫‪-‬‬ ‫‪strstr(s1, s2);  Returns a pointer to the first occurrence of string s2 in string s1.‬‬

‫‪Signed, Unsigned, Long, and Short‬‬


‫افتراضيا‪ ،‬القيم العددية في ‪ C‬تكون ‪ ،signed‬ويعني أنها يمكن أن تكون إما سالبه أو موجبه‪ .‬في المقابل‪ ،‬ال تسمح القيم ‪ unsigned‬باألرقام‬
‫السالبة‪ .‬إنها الذاكرة فقط في النهاية‪ ،‬يجب أن يتم تخزين جميع القيم العددية في نظام ثنائي "‪ ،"binary‬والقيم ‪ unsigned‬تكون أكثر حساسيه‬
‫في النظام الثنائي‪ 32-bit unsigned integer .‬يمكن أن تحتوي على قيم من ‪ (all binary 0s) 1‬إلى ‪. (all binary 1s) 1،121،222،121‬‬
‫‪ 32-bit unsigned integer‬ال يزال فقط ‪ 11‬بت‪ ،‬مما يعني أنه يمكن أن يكون في واحدة من ‪ 232‬من التوليفات الممكنة‪ .‬وهذا يسمح ل‬
‫‪ 32-bit signed integers‬ان تتراوح بين ‪ –2,147,483,648‬إلى ‪ .1،112،111،212‬أساسا‪ ،‬واحدة من هذه البتات هو علم "‪"flag‬‬
‫لتعليم القيمة سواء موجبه أو سالبه‪ .‬القيم ‪ signed‬الموجبة تبدو نفس قيم ‪ ،unsigned‬ولكن يتم تخزين األرقام السالبة بشكل مختلف باستخدام‬
‫طريقة تسمى المتمم الثنائي "‪ ."two's complement‬المتمم الثنائي يمثل األرقام السالبة في شكل مناسب للنظام الثنائي‪ ،‬عندما يتم إضافة‬
‫القيمة سالبة في المتمم الثنائي إلى رقم موجب من نفس الحجم‪ ،‬ستكون النتيجة ‪ .2‬ويتم ذلك عن طريق كتابة العدد اإليجابي أوال بالنظام الثنائي‪،‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪91‬‬

‫ثم عكس جميع البتات‪ ،‬وأخيرا اضافة ‪ .1‬يبدو غريبا‪ ،‬لكنه يعمل ويسمح لألرقام السالبة التي يمكن ان تضاف في تركيبة مع األرقام الموجبة‬
‫باستخدام ‪.simple binary adders‬‬
‫هذا يمكن استكشافها بسرعة وعلى نطاق أصغر باستخدام األداة ‪ ،pcalc‬وهو برنامج بسيط آللة حاسبة التي يمكنها عرض النتائج في النظام‬
‫‪ ،hexadecimal ،decimal‬واألشكال الثنائية "‪ ."binary formats‬للتبسيط‪ ،‬تستخدم األرقام ‪ 1‬بت في هذا المثال‪.‬‬

‫أوال‪ ،‬القيمة الثنائية ‪ 11111111‬يظهر أنها تكون ‪ 21‬موجب‪ .‬ثم يتم قلب "‪ "float‬جميع البتات‪ ،‬ويضاف ‪ 1‬الى الناتج في المتمم ثنائي لينتج‬
‫‪ 21‬سالب‪ .11111111 ،‬عندما يتم إضافة هذه القيم االثنين معا‪ ،‬فان النتيجة من أصل ‪ 1‬بت هي ‪ .2‬البرنامج ‪ pcalc‬يعطى القيمة ‪ 112‬ألنه‬
‫ليس على علم بأنه يتعامل فقط مع قيم ‪ 1‬بت‪ .‬هذا المثال قد يلقي بعض الضوء على كيفية سحر عمل المتمم الثنائي "‪."two's complement‬‬
‫في لغة ‪ ،C‬المتغيرات يمكن أعلنها على أنها ‪ unsigned‬وذلك ببساطة عن طريق وضع الكلمة ‪ unsigned‬قبل اإلعالن عن نوع المتغير‪.‬‬
‫مثال اإلعالن عن متغير من النوع العدد صحيح ويكون ‪ unsigned‬ويكون كاالتي ‪ .unsigned int‬باإلضافة إلى ذلك‪ ،‬حجم المتغيرات‬
‫العددية يمكن تمديدها أو تقصيرها بإضافة الكلمات ‪ short‬أو ‪ .long‬األحجام الفعلية سوف تختلف اعتمادا على بنية مترجم التعليمات‬
‫البرمجية‪ .‬لغة ‪ C‬توفر ماكرو يسمى )(‪ sizeof‬والذي يمكنه تحديد الحجم ألنواع بيانات معينة‪ .‬هذه تعمل مثل الدالة "‪ "function‬التي تأخذ‬
‫نوع البيانات كما ادخل وإرجاع حجم متغير معلن مع نوع البيانات لبنية الهدف‪ .‬البرنامج ‪ datatype_sizes.c‬يستكشف أحجام أنواع البيانات‬
‫المختلفة‪ ،‬وذلك باستخدام الدالة )(‪.sizeof‬‬
‫>‪#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‬بطريقة مختلفة قليال‪ .‬ويستخدم شيء يسمى محدد الشكل "‪"format specifier‬‬
‫لعرض القيمة التي تم إرجاعها من استدعاء الدالة )(‪ .sizeof‬وسيتم شرح محدد الشكل "‪ "format specifier‬في وقت الحق‪ ،‬حتى اآلن‪،‬‬
‫دعونا نركز فقط على إخراج البرنامج‪.‬‬
‫‪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 $‬‬
‫كما ذكر سابقا‪ ،‬كل األعداد الصحيحة سواء ‪ signed‬او ‪ unsigned‬تكون ذات احجام أربعة بايت في البنية ‪ .x86‬و‪ float‬هو أيضا أربعة‬
‫بايت‪ ،‬في حين أن اإلشارة يحتاج فقط بايت واحد‪ .‬ويمكن أيضا استخدام الكلمات ‪ long‬و‪ short‬مع المتغيرات ‪ float‬لتوسيع وتقصير‬
‫أحجامها‪.‬‬
‫‪" Pointers‬المؤشرات"‬
‫المسجل ‪ RIP‬هو مؤشر الى التعليمات الحالية أثناء تنفيذ أحد البرامج التي تحتوي على عنوان الذاكرة‪ .‬يتم استخدام فكرة المؤشرات في لغة‬
‫‪ ،C‬أيضا‪ .‬في حين انه ال يمكن في الواقع نقل الذاكرة الفعلية "‪ ،"physical memory‬فيجب أن يتم نسخ المعلومات الواردة فيه‪ .‬يمكن أن‬
‫يكون مكلفا جدا حسابيا لنسخ أجزاء كبيرة من الذاكرة ليتم استخدامها من قبل الدوال المختلفة أو في أماكن مختلفة‪ .‬وهذا هو أيضا مكلفة من‬
‫وجهة نظر الذاكرة‪ ،‬في حين ان مساحة نسخة الوجهة الجديدة يجب حفظها أو تخصيصها قبل أن تتمكن من نسخ المصدر‪ .‬المؤشرات هي حل‬
‫لهذه المشكلة‪ .‬بدال من نسخ كتلة كبيرة من الذاكرة‪ ،‬فانه أبسط من ذلك بكثير تمرير العنوان من بداية تلك الكتلة من الذاكرة‪.‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪92‬‬

‫المؤشرات في ‪ C‬يمكن تعريفه واستخدامه مثل أي نوع متغير آخر‪ .‬إذا المؤشرات هي متغيرات تحتوي بداخلها على عنوان متغير آخر‪ ،‬ونوع‬
‫المؤشرات يكون مثل نوع المتغير الذي يحمل المؤشر عنوانه (أو بمعنى آخر مثل نوع المتغير الذي يشير إليه)‪ .‬الذاكرة ذات البنية ‪x86‬‬
‫تستخدم معالج ‪ 11‬بت‪ ،‬المؤشرات هي أيضا ‪ 11‬بت في الحجم (‪ 1‬بايت)‪ .‬يتم تعريف المؤشرات وذك من خالل كتابة عالمة النجمة (*) إلى‬
‫اسم المتغير‪ .‬بدال من تعريف المتغير من هذا النوع‪ ،‬يتم تعريف المؤشر على أنه شيء يشير إلى بيانات من هذا النوع‪ .‬برنامج ‪ pointer.c‬هو‬
‫مثال على مؤشر يتم استخدامه مع نوع البيانات ‪ ،char‬وهو ذات حجم ‪ 1‬بايت فقط‪.‬‬
‫>‪#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‬‬ ‫‪// And yet 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.‬‬
‫}‬
‫كما تشير التعليقات في التعليمات البرمجية‪ ،‬فانه يتم تعيين المؤشر األول في بداية مصفوفة الحروف‪ .‬عندما تتم اإلشارة إلى مصفوفة الحرف‬
‫مثل هذا‪ ،‬فهو في الواقع مؤشر لنفسه‪ .‬هذه هي الطريقة التي يتم تمرير هذا المخزن المؤقت كمؤشر إلى الدالة )( ‪ printf‬و)( ‪ .strcpy‬يتم‬
‫تعيين المؤشر الثاني إلى عنوان المؤشر األول زائد اثنين‪ ،‬ومن ثم تطبع بعض األشياء (كما هو موضح في اإلخراج أدناه)‪.‬‬
‫‪reader@hacking:~/booksrc $ gcc -g -o pointer pointer.c‬‬
‫‪reader@hacking:~/booksrc $ ./pointer‬‬
‫!‪Hello, world‬‬
‫!‪llo, world‬‬
‫!‪Hey you guys‬‬
‫دعونا نلقي نظرة على هذا مع ‪ .GDB‬حيث يتم إعادة ترجمة البرنامج‪ ،‬ويتم تعيين نقطة التوقف على الخط العاشر من شفرة المصدر‪ .‬هذا‬
‫سوف يوقف البرنامج بعد "‪ "Hello, world!\n‬والذى تم نسخ السلسلة في ‪ str_abuffer‬ويتم تعيين المؤشر إلى بداية ذلك‪.‬‬

‫عندما يتم فحص المؤشر كسلسة "‪ ،"string‬فمن الواضح أن سلسلة معينة هي هناك‪ ،‬وتقع في عنوان الذاكرة ‪ .0x7fffffffe380‬تذكر أن‬
‫السلسلة نفسها ليست مخزنة في متغير المؤشر ولكن المخزن فقط في متغير المؤشر هو عنوان الذاكرة ‪.0x7fffffffe380‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪93‬‬

‫من أجل االطالع على البيانات الفعلية المخزنة في متغير المؤشر‪ ،‬يجب استخدام عنوان المشغل "‪ ."address-of operator‬عنوان المشغل‬
‫"‪ "address-of operator‬هو مشغل أحادي "‪ ،"unary operator‬وهو ما يعني ببساطة أنها تعمل على معلمات واحدة‪ .‬هذا المشغل هو‬
‫مجرد العالمة (&) المرفقة مسبقا إلى اسم المتغير‪ .‬عندما يتم استخدامها‪ ،‬فانه يتم إرجاع عنوان هذا المتغير‪ ،‬بدال من المتغير نفسه‪ .‬هذا‬
‫المشغل موجود سواء في ‪ GDB‬وفي لغة البرمجة ‪.C‬‬

‫عندما يتم استخدام عنوان المشغل "‪ ،"address-of operator‬يظهر متغير المؤشر إلى أن يكون موجودا في العنوان ‪0x7fffffffe3a8‬‬
‫في الذاكرة‪ ،‬وأنه يحتوي على العنوان ‪.0x7fffffffe380‬‬

‫غالبا ما يستخدم عنوان المشغل بالتزامن مع المؤشرات‪ ،‬المؤشرات تحتوي على عناوين الذاكرة‪ .‬يوضح البرنامج ‪ addressof.c‬عنوان‬
‫المشغل المستخدم لوضع عنوان متغير عدد صحيح إلى المؤشر‪ .‬كما هو مبين أدناه‪.‬‬
‫>‪#include <stdio.h‬‬
‫{ )(‪int main‬‬
‫;‪int int_var = 5‬‬
‫;‪int *int_ptr‬‬
‫‪int_ptr = &int_var; // put the address of int_var into int_ptr‬‬
‫}‬
‫البرنامج نفسه ال يخرج شيئا في الواقع‪ ،‬ولكن ربما يمكنك تخمين ما يحدث‪ ،‬وحتى قبل التصحيح مع ‪.GDB‬‬

‫كما جرت العادة‪ ،‬يتم تعيين نقطة توقف ويتم تنفيذ البرنامج في المصحح‪ .‬عند هذه النقطة نفذت غالبية البرنامج‪ .‬يعرض األمر ‪ print‬االول‬
‫قيمة ‪ ،int_var‬ويظهر الثاني عنوانه باستخدام عنوان المشغل‪ .‬تظهر أوامر ‪ print‬التالية ان المتغير ‪ int_ptr‬يحتوي على عنوان‬
‫‪ ،int_var‬والثاني يظهر أيضا عنوان ‪.int_ptr‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪94‬‬

‫مشغل أحادي إضافي يسمى المشغل ‪ dereference‬موجود لالستخدام مع المؤشرات‪ .‬هذا المشغل يقوم بإرجاع البيانات الموجودة في العنوان‬
‫الذي يشير اليها المؤشر‪ ،‬بدال من العنوان نفسه‪ .‬فإنه يأخذ شكل النجمة "*" أمام اسم المتغير‪ ،‬على غرار إعالن المؤشر‪ .‬مرة أخرى‪ ،‬المشغل‬
‫‪ dereference‬موجود سواء في ‪ GDB‬و‪ .C‬المستخدمة في ‪ ،GDB‬فإنه يمكن استرداد قيمة عدد صحيح في ‪.int_ptr‬‬

‫‪Format Strings‬‬
‫الدالة )( ‪ printf‬يمكن استخدامها لطباعة أكثر من السالسل الثابتة فقط‪ .‬يمكن لهذه المهمة أيضا استخدام سالسل التنسيق "‪"format string‬‬
‫لطباعة المتغيرات العديده في تنسيقات مختلفة‪ .‬سالسل التنسيق "‪ "format string‬هي مجرد سلسلة أحرف مع أحرف خاصة التي تخبر‬
‫الدالة إلدخال المتغيرات المطبوعة في شكل محدد في مكان االحرف الخاصة "‪ ."escape sequences‬الطريقة التي تم استخدام الدالة‬
‫)( ‪ printf‬في البرامج السابقة‪ "Hello, world!\n" ،‬وهى من الناحية التقنية شكل لسلسلة "‪"format string‬؛ ومع ذلك‪ ،‬فإنه يخلو من‬
‫األحرف الخاصة‪ .‬هذه األحرف الخاصة "‪ "escape sequences‬تسمى أيضا ‪ .format parameters‬كل واحد من ‪format parameters‬‬
‫يبدأ مع عالمة النسبة المئوية (‪ )٪‬ويستخدم حرف واحد لالختصار يشبه الى حد بعيد الحروف المستخدمة من قبل أوامر الفحص في ‪.GDB‬‬
‫وتكون صيغته كاالتي‪:‬‬
‫‪%[flags][width][.precision][{length-modifier}] conversion-specifier‬‬
‫‪Parameter‬‬ ‫‪Output Type‬‬
‫‪%d or %i signed decimal integer‬‬
‫‪%u‬‬ ‫‪unsigned decimal integer‬‬
‫‪%x‬‬ ‫‪unsigned hexadecimal integer‬‬
‫‪%o‬‬ ‫‪unsigned octal‬‬
‫‪%f‬‬ ‫‪decimal float‬‬
‫‪%e‬‬ ‫‪scientific notation‬‬
‫‪%a‬‬ ‫‪hexadecimal floating point‬‬
‫‪%c‬‬ ‫‪char‬‬
‫‪%s‬‬ ‫‪string‬‬
‫‪%p‬‬ ‫‪pointer address‬‬
‫‪%n‬‬
‫‪Nothing printed, but corresponds to a pointer. The number of characters written so far is stored‬‬
‫‪in the pointed location‬‬

‫‪format parameters‬‬ ‫كل من ‪ format parameters‬السابقة تحصل على البيانات الخاصة بها كقيم‪ ،‬ال مؤشرات إلى القيم‪ .‬وهناك أيضا بعض‬
‫تتوقع مؤشرات‪ ،‬مثل ما يلي‪.‬‬
‫الرمز الخاص ‪ %s‬ينسق إلعطاء عنوان الذاكرة‪ .‬فإنه يطبع البيانات في عنوان الذاكرة هذا حتى الوصول الى البايت الفارغة "‪."null byte‬‬
‫الرمز الخاص ‪ %n‬هو فريد من نوعه من حيث أنه في الواقع يكتب البيانات‪ .‬ويتوقع أيضا أن يعطى عنوان الذاكرة‪ ،‬وأنه يكتب عدد البايتات‬
‫التي هي مكتوبة حتى اآلن إلى عنوان الذاكرة‪.‬‬
‫في الوقت الراهن‪ ،‬سيكون تركيزنا فقط على معلمات التنسيق المستخدمة لعرض البيانات‪ .‬يقوم البرنامج ‪ fmt_strings.c‬بعرض بعض‬
‫األمثلة من المعلمات بشكل مختلف‪.‬‬
‫>‪#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‬‬
‫}‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪95‬‬

‫اول استخدام للدالة )( ‪ printf‬القيام بطباعة المتغيرات ‪ A‬و‪ ،B‬وذلك باستخدام ‪ format parameters‬المختلفة‪ .‬وبما أن هناك ثالثة‬
‫معايير تنسيق "‪ "format parameters‬في كل سطر‪ ،‬فان المتغيرات ‪ A‬و‪ B‬تحتاج إلى أن يتم توفيرها ثالث مرات‪ .‬التنسيق ‪ %d‬تسمح‬
‫بالقيم السالبة‪ ،‬بينما ‪ %u‬ال‪ ،‬ألنه يتوقع القيم ‪.unsigned‬‬
‫عند طباعة المتغير ‪ A‬باستخدام ‪ ،%u format parameter‬فإنها تبدو كقيمة عالية جدا‪ .‬وذلك ألن المتغير ‪ A‬هو رقم سالب مخزن في‬
‫متمم ثنائي‪ ،‬و‪ format parameter‬تحاول طباعته كما لو كانت قيمة ‪ .unsigned‬المتمم الثنائي يقوم بقلب جميع االجزاء وإضافة واحد‬
‫كما تحدثنا سابقا‪.‬‬
‫السطر الثالث في هذا المثال‪ ،[field width on B] ،‬يظهر استخدام خيار عرض الحقل "‪ "field-width‬في ‪.format parameter‬‬
‫هذا هو مجرد ‪ integer‬الذي يعين الحد األدنى لعرض الحقل لتلك ‪ .format parameter‬ومع ذلك‪ ،‬ليس هذا هو الحد األقصى للحقل‪ ،‬فإذا‬
‫كان عرض القيمة التي سيتم إنتاجها أكبر من عرض الحقل‪ ،‬سيتم تجاوز عرض الحقل‪ .‬يحدث هذا عند استخدام ‪ ،1‬إخراج البيانات يحتاج ‪1‬‬
‫بايت‪ .‬عندها يتم استخدام ‪ 12‬في عرض الحقل‪ ،‬فانه ينتج ‪ 1‬بايت مساحة فارغة قبل بيانات الناتج‪ .‬باإلضافة إلى ذلك‪ ،‬إذا بدأت قيمة عرض‬
‫الحقل مع ‪ ،2‬فهذا يعني انه يجب حشو الحقل مع األصفار‪ .‬عندما يتم استخدام ‪ ،11‬على سبيل المثال‪ ،‬فان الناتج هو ‪.22211112‬‬
‫السطر الرابع‪ ،[string] ،‬تظهر ببساطة استخدام ‪ .%s format parameter‬تذكر أن متغير السلسلة هو في الواقع مؤشر يحتوي على‬
‫عنوان السلسلة‪ ،‬والتي يعمل بها‪ ،‬في حين ان ‪ %s format parameter‬تتوقع البيانات الخاصة به لتمريرها حسب المرجع‪.‬‬
‫السطر األخير يظهر فقط عنوان المتغير ‪ ،A‬باستخدام مشغل العنوان األحادي "‪ "unary address operator‬الى المشغل ‪.dereference‬‬
‫يتم عرض هذه القيمة إلى ثمانية أرقام ‪ ،hexadecimal‬مبطنه من األصفار‪.‬‬
‫كما تظهر هذه األمثلة‪ ،‬يجب عليك استخدام ‪ %d‬للنظام ‪ %u ،decimal‬للنظام ‪ ،unsigned‬و ‪ %x‬للنظام ‪ .hexadecimal‬عرض‬
‫الحقل لدنيا يمكن تعيينه عن طريق وضع عدد مباشرة بعد العالمة ‪ ،%‬إذا كان عرض الحقل يبدأ مع ‪ ،1‬فان سيكون مبطن مع األصفار‪ .‬يمكن‬
‫استخدام المعلمة ‪ %s parameter‬لطباعة السالسل "‪ ."string‬حتى االن جيدة جدا‪.‬‬
‫تستخدم سالسل التنسيق "‪ "Format strings‬من قبل جميع أفراد العائلة من ‪ ،standard I/O functions‬بما في ذلك )(‪ ،scanf‬والذي‬
‫يعمل أساسا مثل )(‪ printf‬ولكنها تستخدم لإلدخال بدال من االنتاج‪ .‬الفرق الرئيسي واحد هو أن وظيفة )(‪ scanf‬تتوقع كل من معلماتها‬
‫"‪ "argument‬في أن تكون مؤشرات‪ ،‬لذلك يجب أن يكون في الواقع المعلمات هي عناوين المتغيرات أنفسهم‪ .‬ويمكن القيام بذلك باستخدام‬
‫متغيرات المؤشر أو باستخدام مشغل العنوان األحادي السترداد عنوان المتغيرات العادية‪ .‬برنامج ‪ input.c‬يساعدك على تفسير ذلك‪.‬‬
‫>‪#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‬‬
‫}‬
‫في ‪ ،input.c‬يتم استخدام الدالة )( ‪ scanf‬لتعيين المتغير ‪ .count‬كما يوضح اإلخراج أدناه‪.‬‬
‫‪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‬‬
‫‪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‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪96‬‬

‫!‪11 - Hello, world‬‬


‫‪reader@hacking:~/booksrc $‬‬
‫تستخدم سالسل التنسيق في كثير من األحيان‪ ،‬لذلك المعرفة بهم مهمه للغاية‪ .‬وباإلضافة إلى ذلك‪ ،‬فإن القدرة على انتاج قيم المتغيرات تسمح‬
‫لتصحيح األخطاء في البرنامج‪ ،‬من دون استخدام مصحح أخطاء‪ .‬وجود شكل من أشكال ردود الفعل الفورية يكون ذات أهمية إلى عملية تعلم‬
‫الهاكر‪ ،‬وشيء بسيط مثل طباعة قيمة متغير يمكن أن تسمح للكثير من ‪.exploitation‬‬

‫‪Typecasting‬‬
‫‪ Typecasting‬هي مجرد وسيلة للتغيير المؤقت لنوع بيانات المتغير‪ ،‬على الرغم من تعريف المتغير في األصل‪ .‬عندما يتم ‪Typecasting‬‬
‫لمتغير إلى نوع مختلف‪ ،‬فان المترجم في األساس يقوم بعالج هذا المتغير كما لو كان ذات نوع من البيانات جديد‪ ،‬ولكن فقط لتلك العملية‪ .‬بناء‬
‫الجملة من أجل ‪ Typecasting‬كما يلي‪:‬‬
‫‪(typecast_data_type) variable‬‬
‫هذا يمكن استخدامه عند التعامل مع متغيرات األعداد الصحيحة "‪ "integer‬ومتغيرات "‪ "floating-point‬كما هو موضع في المثال‬
‫‪.typecasting.c‬‬
‫>‪#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‬‬
‫}‬
‫نتائج ترجمة وتنفيذ ‪ typecasting.c‬هي على النحو التالي‪.‬‬
‫‪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 $‬‬
‫كما نوقش في وقت سابق‪ ،‬فانه تم تقسيم العدد الصحيح ‪ 11‬بنسبة ‪ 1‬والتي سوف ينتج إجابة غير صحيحة من ‪ ،1‬حتى إذا تم تخزين هذه القيمة‬
‫إلى متغير ‪ .floating-point‬ومع ذلك‪ ،‬إذا تم ‪ typecast‬متغيرات العدد الصحيح "‪ "integer‬هذه إلى ‪ ،floating‬فإنها سوف تعامل على‬
‫هذا النحو‪ .‬وهذا يسمح للحساب الصحيح الى ‪.1.2‬‬
‫هذا مثال توضيحي‪ ،‬ولكن يظهر استخدامه بوضوح عندما يتم استخدامه مع متغيرات المؤشر‪ .‬على الرغم من أن المؤشر هي مجرد عنوان في‬
‫الذاكرة‪ ،‬المترجم البرمجي ‪ C‬ال يزال يتطلب نوع البيانات لكل مؤشر‪ .‬وأحد أسباب ذلك هو محاولة للحد من أخطاء البرمجة‪ .‬مؤشر العدد‬
‫الصحيح يجب أن يشير فقط إلى بيانات العدد الصحيح‪ ،‬في حين أن مؤشر ‪ char‬يشير فقط إلى بيانات ‪ .character‬وهناك سبب آخر هو‬
‫مؤشر الحساب‪ .‬حيث ان العدد الصحيح يكون ذات الحجم أربعة بايت‪ ،‬في حين أن ‪ character‬يستغرق سوى بايت واحد‪ .‬سيقوم البرنامج‬
‫‪ pointer_types.c‬بتثبت وشرح هذه المفاهيم أبعد من ذلك‪ .‬يستخدم هذا الكود ‪ %p‬لتنسيق عناوين ذاكرة اإلنتاج "تستخدم إلظهار عنوان‬
‫المتغير في الذاكرة"‪ .‬ويهدف هذا االختصار لعرض المؤشرات وأساسا ما يعادل ‪.0x%08x‬‬
‫>‪#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‬‬
‫}‬
‫}‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ 97

‫" واألخرى تحتوي على بيانات‬integer data" ‫في هذه الكود تم تعريف اثنين من المصفوفة في الذاكرة واحد تحتوي على بيانات صحيحة‬
،‫ واحدة مع نوع بيانات العدد صحيح وواحد مع نوع بيانات األحرف‬،‫ وتم تعريف أيضا اثنين من المؤشرات‬."character data" ‫األحرف‬
‫ اثنين من الحلقات المنفصلة خالل المصفوفات باستخدام المؤشر الحسابي‬.‫وتم تعينهما ليشيرا إلى نقطة بداية مصفوفة البيانات المناظرة‬
‫ عندما يتم طبع قيم االعداد الصحيحة واالحرف مع‬،‫ في الحلقات‬.‫" لضبط المؤشر لإلشارة الى القيمة القادمة‬pointer arithmetic"
* ‫ ويتم ذلك باستخدام‬.‫ متغيرات المؤشر‬dereference ‫ المقابلة‬printf () ‫ الحظ أن معلمات‬،)%d and %c( format parameters
.‫المشغل األحادي‬
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 $
‫ المترجم يقوم بزيادة عناوين المؤشر‬،‫ في حلقات كل منها‬char_pointer‫ و‬int_pointer ‫ إلى‬1 ‫على الرغم من أنه يتم إضافة نفس القيمة‬
1 ‫ المقبل فمن الطبيعي أن يكون أكثر من‬char ‫ فان المؤشر المشار الى‬،‫ فقط‬1 ‫ ذات حجم بايت‬char ‫ في حين ان‬.‫من خالل كميات مختلفة‬
.‫ بايت‬1 ‫ إذا مؤشر العدد صحيح المقبل يجب أن يكون أكثر من‬،‫ بايت‬1 ‫ ولكن العدد صحيح هو‬.‫بايت‬

Command-Line Arguments
"command-line arguments" ‫" تتلقى العديد من المدخالت من خالل‬nongraphical program" ‫البرامج التي ليس لها شاشه رسوميه‬
‫ هذا يميل‬.‫ فان وسائط سطر األوامر ال تتطلب تفاعل المستخدم بعد بدأ تنفيذ البرنامج‬،scanf () ‫ وعلى خالف اإلدخال مع الدالة‬.‫سطر األوامر‬
.‫إلى أن يكون أكثر كفاءة وهي طريقة المدخل المفيدة‬
:‫ من خالل اثنان من المعلمات التي يتم إضافتها إلى الدالة‬main () ‫ وسائط سطر األوامر يمكن الوصول إليها من خالل الدالة‬،C ‫في‬
‫" سوف تحتوي على عدد‬integer array" ‫ مصفوفة االعداد‬."array of strings" ‫ إلى مصفوفة السالسل‬pointer‫ و‬integer
‫ ينبغي أن يبين‬commandline.c ‫ البرنامج‬.‫" سوف تحتوي على االثنين من المعلمات‬array of strings" ‫ اما مصفوفة السالسل‬،‫صحيح‬
.‫هذه األمور‬
#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]);
}
}
:‫ناتج هذا البرنامج كاالتي‬
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 vector ‫ وباقي مصفوفة المعلمات (تسمى‬،‫" هو دائما اسم البرنامج الذي سوف ينفذ‬zeroth argument" ‫المعلم الصفري‬
.‫وتحتوي على المعلمات المتبقية كسالسل‬

https://www.facebook.com/tibea2004
‫فن الهاكر األخالقي‬ ‫‪98‬‬

‫في بعض األحيان البرنامج يريد استخدام وسيطة سطر األوامر كعدد بدال من السلسلة‪ .‬بغض النظر عن هذا‪ ،‬يتم تمرير المعلم كسلسلة‪ .‬ومع‬
‫ذلك‪ ،‬هناك دوال التحويل القياسية‪ .‬خالفا لل ‪ ،typecasting‬يمكن لهذه الدوال تحويل مصفوفات األحرف التي تحتوي على أرقام الى أعداد‬
‫صحيحة فعلية‪ .‬الدوال األكثر شيوعا من هذه هو )( ‪ ،atoi‬وهو اختصار ل ‪ ASCII‬إلى عدد صحيح‪ .‬تقبل هذه الدالة مؤشر السلسلة كوسيط‬
‫وترجع قيمة عددية تمثلها‪ .‬المثال التالي ‪ convert.c‬سوف يوضح ذلك‪.‬‬
‫>‪#include <stdio.h‬‬
‫{ )‪void usage(char *program_name‬‬
‫;)‪printf("Usage: %s <message> <# of times to repeat>\n", program_name‬‬
‫;)‪exit(1‬‬
‫}‬

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


‫;‪int i, count‬‬
‫{ )‪if(argc < 3‬‬ ‫‪// If fewer than 3 arguments are used,‬‬
‫;)]‪usage(argv[0‬‬ ‫‪// display usage message and exit.‬‬
‫}‬
‫;)]‪count = atoi(argv[2‬‬ ‫‪// Convert the 2nd arg into an integer.‬‬
‫;)‪printf("Repeating %d times..\n", count‬‬
‫{ )‪for(i=0; i < count; i++‬‬
‫;)]‪printf("%3d - %s\n", i, argv[1‬‬ ‫‪// Print the 1st arg.‬‬
‫}‬
‫}‬
‫ملحوظه في ‪ ،C‬هناك مؤشر الباطل هو مؤشر ‪ ،typeless‬والتي حددتها الكلمة ‪ .void‬التجريب مع المؤشرات الباطلة بسرعة يكشف أشياء‬
‫قليلة عن مؤشرات ‪ .typeless‬أوال‪ ،‬هذه المؤشرات ال يمكنه ‪ de-referenced‬إال إذا كان لديه نوع‪ .‬من أجل استرداد القيمة المخزنة في‬
‫عنوان ذاكرة مؤشر‪ ،‬يجب على المترجم أوال معرفة ما هو نوع البيانات التي عليه‪ .‬ثانيا‪ ،‬يجب أيضا ‪ typecast‬المؤشرات الباطلة قبل قيام‬
‫مؤشر الحساب‪ .‬هذه هي إلى حد ما القيود البديهية‪ ،‬مما يعني أن الغرض الرئيسي من المؤشر الباطل هو مجرد اجراء عنوان الذاكرة‪ .‬سوف‬
‫يتضح ذلك من المثال ‪.convert.c‬‬
‫ناتج تنفيذ وترجمة هذا الملف كاالتي‪:‬‬
‫‪reader@hacking:~/booksrc $ gcc convert.c‬‬
‫‪reader@hacking:~/booksrc $ ./a.out‬‬
‫>‪Usage: ./a.out <message> <# of times to repeat‬‬
‫‪reader@hacking:~/booksrc $ ./a.out 'Hello, world!' 3‬‬
‫‪Repeating 3 times..‬‬
‫!‪0 - Hello, world‬‬
‫!‪1 - Hello, world‬‬
‫!‪2 - Hello, world‬‬
‫‪reader@hacking:~/booksrc $‬‬
‫في التعليمات البرمجية السابق‪ ،‬جمل ‪ if‬الشرطية هنا للتأكد أنه يتم استخدام الثالث معلمات قبل أن يتم الوصول الى هذه السالسل‪ .‬إذا حاول‬
‫البرنامج الوصول إلى ذاكرة غير موجود أو أن البرنامج ال يكون لدي إذن لقراءة‪ ،‬سيقوم البرنامج باإليقاف‪ .‬في ‪ C‬من المهم أن تتحقق لهذه‬
‫األنواع من الظروف والتعامل معها من منطق البرنامج‪.‬‬
‫‪Variable Scoping‬‬
‫آخر مفهوم مثير لالهتمام بشأن الذاكرة في ‪ C‬هو تحديد نطاق المتغير "‪ "variable scoping‬أو السياق على وجه الخصوص‪ ،‬وسياقات‬
‫المتغيرات في الدوال‪ .‬كل داله لديها مجموعة من المتغيرات المحلية‪ ،‬والتي هي مستقلة عن كل شيء آخر‪ .‬في الواقع‪ ،‬االستدعاءات المتعددة‬
‫لنفس الدالة يكون جميع السياقات الخاصة بهم‪ .‬يمكنك استخدام الدالة )(‪ printf‬مع اشكال السالسل الستكشاف هذه بسرعة‪ ،‬تحقق من‬
‫‪.scope.c‬‬
‫>‪#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‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ 99

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);
}
:‫ناتج ترجمة وتنفيذ هذا البرنامج كاالتي‬

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 $
‫ حتى بعد استدعاء الدالة‬،1 ‫ هي‬i ‫ قيمة المتغير‬،main () ‫ الحظ أنه في الدالة‬.‫ إلى قيمة مختلفة ومطبوعة‬i ‫ يتم تعيين المتغير‬،‫في كل داله‬
،2 ‫ هي‬i ‫ حيث‬func2 () ‫ حتى بعد استدعاء الداله‬،1 ‫ يبقى‬i ‫ المتغير‬func1 () ‫ داخل الداله‬،‫ وبالمثل‬.1 ‫ هو‬i ‫ حيث ان قيمة المتغير‬func1()
.‫ أفضل طريقة للتفكير في ذلك هو أن كل استدعاء دالة لديها نسختها الخاصة من المتغير األول‬.‫وهكذا دواليك‬
‫ المتغيرات العالمية يتم تعريفها في بداية‬.‫ وهو ما يعني أنها سوف تستمر عبر جميع الدوال‬،‫المتغيرات أيضا يمكن أن يكون لها نطاق عالمي‬
‫ هذا‬.11 ‫ على مستوى عالمي وتعيين إلى‬j ‫ حيث تم اإلعالن عن المتغير‬،‫ كما هو مبين أدناه‬scope2.c ‫ في كود المثال‬.‫ خارج أية دوال‬،‫الكود‬
.‫ وسوف تستمر التغييرات عليه بين الوظائف‬،‫المتغير يمكن قراءتها من وكتابتها إلى أي داله‬
#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
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);
}
:‫ هي كما يلي‬scope2.c ‫نتائج الترجمة وتنفيذ‬
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

https://www.facebook.com/tibea2004
‫فن الهاكر األخالقي‬ ‫‪100‬‬

‫‪[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 $‬‬
‫ناتج اإلخراج‪ ،‬المتغير العالمي ‪ j‬تم كتابته في الداله )( ‪ ،func2‬واستمر في التغير في جميع الدوال ما عدا )( ‪ ،func3‬والتي لديه متغير‬
‫خاص بها يدعى ‪ .j‬في هذه الحالة‪ ،‬المترجم يفضل استخدام المتغير المحلي‪ .‬مع كل هذه المتغيرات باستخدام نفس األسماء‪ ،‬يمكن أن يكون‬
‫مربكا بعض الشيء‪ ،‬ولكن تذكر أنه في نهاية المطاف‪ ،‬كل شيء هو الذاكرة فقط‪ .‬يتم تخزين المتغير ‪ j‬العالمي فقط في الذاكرة‪ ،‬وكل داله قادرة‬
‫على الوصول إلى تلك الذاكرة‪ .‬يتم تخزين المتغيرات المحلية لكل داله في كل من األماكن الخاصة بها في الذاكرة‪ ،‬بغض النظر عن األسماء‬
‫المتطابقة‪ .‬طباعة عناوين الذاكرة لهذه المتغيرات تعطي صورة أوضح لما يجري‪.‬‬

‫‪" Memory Segmentation 1.1‬الذاكره"‬


‫تنقسم ذاكرة البرنامج المترجم الى خمسة قطاعات‪ .stack ،heap ،BSS ،date ،text :‬ويمثل كل جزء تم تعينه جزء خاص من الذاكرة‬
‫جانب لغرض معين‪.‬‬
‫الجزء النصي "‪ "text segment‬يسمى أحيانا مقطع التعليمات البرمجية "‪ ."code segment‬هذا هو المكان الذي توجد فيه التعليمات التي‬
‫تم ترجمتها الى لغة اآللة‪ .‬تنفيذ التعليمات في هذا القطاع هو غير خطي "‪ ،"nonlinear‬وذلك بفضل هياكل السيطرة "‪ "control‬والدوال‬
‫"‪ "function‬رفيعة المستوى المذكورة آنفا‪ ،‬والتي تترجم الى ‪ ،jump ،branch‬و‪ call‬للتعليمات في لغة التجميع‪ .‬أثناء تنفيذ البرنامج‪ ،‬يتم‬
‫تعيين ‪ RIP‬إلى التعليمة األولى في قطاع النص‪ .‬المعالج يتبع حلقة التنفيذ ليفعل ما يلي‪:‬‬
‫‪ -‬يقرأ التعليمات التي يشير اليها ‪.RIP‬‬
‫‪ -‬يضيف طول البايت من التعليمات في ‪.RIP‬‬
‫‪ -‬ينفذ التعليمات التي كان يقرأها في الخطوة ‪.1‬‬
‫‪ -‬يعود إلى الخطوة ‪.1‬‬
‫في بعض األحيان تكون التعليمات هو القفز "‪ "jump‬أو استدعاء "‪ "call‬تعليمات‪ ،‬والذي يغير ‪ RIP‬إلى عنوان مختلف من الذاكرة‪ .‬المعالج‬
‫ال يهمه التغيير‪ ،‬ألنه يتوقع التنفيذ لتكون غير خطية على أي حال‪ .‬إذا تم تغيير ‪ RIP‬في الخطوة ‪ ،1‬فان المعالج سوف يذهب لتوه إلى الخطوة‬
‫(‪ )1‬وقراءة التعليمات التي عثر عليها في العنوان التي تغير اليها ‪.RIP‬‬
‫يتم تعطيل إذن الكتابة في الجزء النصي "‪ ،"text segment‬كما انه ال يتم استخدامه لتخزين المتغيرات‪ ،‬الكود فقط‪ .‬وهذا ما يمنع الناس من‬
‫التعديل في الواقع على كود البرنامج؛ فإن أي محاولة للكتابة فى هذا الجزء من الذاكرة تسبب ان البرنامج ينبه المستخدم بأن شيئا ما سىء‬
‫حدث‪ ،‬وسيتم قفل البرنامج‪ .‬ميزة أخرى لهذه الشريحة بجانب القراءة فقط هو أنه يمكن أن تكون مشتركة بين نسخ مختلفة من البرنامج‪ ،‬مما‬
‫يسمح بالتشغيل المتعدد من البرنامج في نفس الوقت دون أي مشاكل‪ .‬كما تجدر اإلشارة إلى أن هذا المقطع من الذاكرة لديه حجم ثابت‪ ،‬لم يتغير‬
‫شيء منذ أي وقت مضى في ذلك‪.‬‬
‫تستخدم شرائح البيانات "‪ "data segment‬و‪ BSS segment‬لتخزين المتغيرات العالمية والثابتة للبرنامج‪ .‬يتم تعبئة شريحة البيانات‬
‫"‪ "data segment‬مع المتغيرات العالمية والثابتة التي تمت تهيئتها‪ ،‬في حين تم تعبئة الجزء ‪ BSS‬مع نظرائهم الغير مهيأه‪ .‬ورغم أن هذه‬
‫القطاعات هي للكتابة‪ ،‬لديهم أيضا حجم ثابت‪ .‬تذكر أن المتغيرات العالمية ال تزال قائمة‪ ،‬على الرغم من سياق الداله (مثل أي متغير في األمثلة‬
‫السابقة)‪ .‬كل من المتغيرات العالمية والثابتة قادرة على االستمرار ألنها مخزنة في شرائح الذاكرة الخاصة بهم‪.‬‬

‫الجزء ‪ heap segment‬هو جزء من الذاكرة التي يمكن للمبرمج التحكم فيها مباشرة‪ .‬الكتل من الذاكرة في هذا القطاع يمكن تخصيصها‬
‫واستخدامها ألي شيء قد يحتاجه المبرمج‪ .‬نقطة واحدة ملحوظة حول القطاع ‪ heap segment‬هو أنه ليس ذات حجم ثابت‪ ،‬لذلك يمكن أن‬
‫تنمو أكبر أو أصغر حسب الحاجة‪ .‬الذاكرة داخل ‪ heap segment‬تدار بواسطة خوارزميات ‪ allocator‬و‪ ،deallocator‬الذي حجز‬
‫على التوالي منطقة من الذاكرة في القطاع ‪ heap‬لالستخدام وإزالة التحفظات للسماح لذلك الجزء من الذاكرة إلعادة استخدامه للحجز في وقت‬
‫الحق‪ Heap segment .‬تنمو وتتقلص تبعا لمدى الذاكرة المحجوزة لالستخدام‪ .‬وهذا يعني ان المبرمج الذي يستخدم ‪heap allocator‬‬
‫يمكنه تخصيص وتحرير الذاكرة في ثواني‪ .‬نمو ‪ Heap segment‬يتحرك في اتجاه نزولي اتجاه عناوين الذاكرة العليا‪.‬‬

‫قطاع المكدس "‪ "stack segment‬أيضا ذات حجم متغير ويستخدم كمنصة الصفر المؤقتة لتخزين متغيرات الدوال المحلية والسياق أثناء‬
‫استدعاء الداله‪ .‬هذا يبدو ما يفعله االمر ‪ backtrace‬في ‪ .GDB‬عند استدعاء البرنامج لدالة‪ ،‬فان الداله لها مجموعتها الخاصة من المتغيرات‪،‬‬
‫واكواد الداله سوف يتم تخزينها في مواقع مختلفة في الذاكرة في القطاع النصي‪ .‬في حين ان السياق و‪ RIP‬يجب ان تتغير عندما يتم استدعاء‬
‫الداله‪ ،‬يتم استخدام المكدس لتذكر كل من المتغيرات التي مرت‪ ،‬موقع ‪ RIP‬يجب أن يعود بعد االنتهاء من الداله‪ ،‬جميع المتغيرات المحلية‬
‫المستخدمة من قبل تلك الداله‪ .‬يتم تخزين كل هذه المعلومات معا في بنية المكدس فيما يسمى ‪ Stack .stack frame‬يحتوي على العديد من‬
‫إطارات المكدس "‪."stack frame‬‬
‫من وجهة نظر مصطلحات علوم الكمبيوتر العامة‪ stack ،‬هو بنية بيانات مجردة التي يتم استخدامها بشكل متكرر‪ .‬تملك أوامر ‪first-in‬‬
‫و‪ ،(FILO) last-out‬مما يعني أن العنصر األول الذي يتم وضعه في ‪ stack‬هو العنصر األخير للخروج منه‪ .‬فكر في هذا كأنك تضح‬
‫حبات الخرز على قطعة من السلسلة التي لديها عقدة واحدة في النهاية‪ ،‬ال يمكنك الحصول على الحبة األولى قبل إزالة كل الحبات األخرى‪.‬‬
‫عندما يتم وضع عنصر في المكدس‪ ،‬فإنها تسمى ‪ ،pushing‬وعند إزالة عنصر من المكدس‪ ،‬فإنها تسمى ‪.popping‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪101‬‬

‫كما يوحي االسم‪ stack segment ،‬من الذاكرة هو‪ ،‬في الواقع‪ ،‬بنية بيانات المكدس‪ ،‬والتي تحتوي على إطارات المكدس‪ .‬يستخدم المسجل‬
‫‪ RSP‬لتتبع عنوان نهاية المكدس‪ ،‬والتي تتغير باستمرار كلما تم الدفع "‪ "pushing‬بالعناصر او إخراجها "‪ "popping‬من ذلك‪ .‬ألن هذا‬
‫هو السلوك الديناميكي‪ ،‬وهذا يعطى المنطق أن المكدس هو أيضا ليس ذات حجم ثابت‪ .‬على عكس النمو الديناميكي لل ‪ ،heap‬فان تغييرات‬
‫المكدس في الحجم‪ ،‬تنمو صعودا في قائمة بصرية من الذاكرة‪ ،‬نحو عناوين الذاكرة األقل‪.‬‬
‫قد تبدو طبيعة ‪ FILO‬من المكدس غريبا‪ ،‬ولكن منذ استخدام المكدس لتخزين السياق‪ ،‬فإنها مفيدة للغاية‪ .‬عندما يتم استدعاء الداله‪ ،‬يتم الدفع‬
‫بالعديد من األشياء إلى المكدس معا في إطار مكدس‪ .‬المسجل ‪ RBP‬أحيانا يسمى )‪ frame pointer (FP‬أو ‪local base (LB) pointer‬‬
‫ويستخدم كمؤشر لمتغيرات الداله في إطار المكدس الحالي‪ .‬كل إطار مكدس يحتوي على معلمات الداله‪ ،‬المتغيرات المحلية الخاصة بها‪،‬‬
‫واثنين من المؤشرات والتي هي ضرورية لوضع األمور إلى الوراء بالطريقة التي تم بها‪ :‬مؤشر حفظ اإلطار " ‪saved frame pointer‬‬
‫)‪ "(SFP‬وعنوان الرجوع "‪ ."return address‬يتم استخدام ‪ SFP‬الستعادة ‪ RBP‬إلى قيمتها السابقة‪ ،‬ويستخدم عنوان المرسل " ‪return‬‬
‫‪ "address‬الستعادة ‪ RIP‬إلى التعليمات التالية التي وجدت بعد استدعاء الدالة‪ .‬هذا يعيد السياق الوظيفي لإلطار المكدس السابق‪.‬‬
‫البرنامج ‪ stack_example.c‬التالي لديه دالتين‪.main () and test_function () :‬‬
‫{ )‪void test_function(int a, int b, int c, int d‬‬
‫;‪int flag‬‬
‫;]‪char buffer[10‬‬
‫;‪flag = 31337‬‬
‫;'‪buffer[0] = 'A‬‬
‫}‬
‫{ )(‪int main‬‬
‫;)‪test_function(1, 2, 3, 4‬‬
‫}‬
‫البرنامج يقوم أوال باإلعالن عن الداله ‪ test_function‬والذي لديه أربع معلمات‪ ،‬والتي أعلن عن أنها أعداد صحيحة "‪ :"integer‬وهما ‪،b ،a‬‬
‫‪ .d ،c‬وتشمل المتغيرات المحلية الخاصة بالدالة داله لقيمه واحده تسمى ‪ flag‬ومصفوفه لعشر أحرف تسمى ‪ .buffer‬الذاكرة لهذه المتغيرات‬
‫هي في قطعة المكدس "‪ ،"stack segment‬في حين أن تعليمات الجهاز لكود الدالة يتم تخزينها في قطعة النص "‪ ."text segment‬بعد‬
‫ترجمة البرنامج‪ ،‬يمكن فحص أعماله الداخلية مع ‪ .GDB‬اإلخراج التالي يبين تعليمات الجهاز مفككين الى الداله )( ‪ main‬والدالة‬
‫)( ‪ .test_function‬الداله )( ‪ main‬تبدأ عند ‪ 0x00000000004004c9‬والدالة )( ‪ test_function‬تبدأ في ‪.0x00000000004004ac‬‬
‫مجموعة اإلرشادات القليلة األولى من كل داله (كما هو موضح أدناه) تقوم بإعداد إطار المكدس‪ .‬تسمى هذه التعليمات بشكل جماعي‬
‫‪ procedure prologue‬أو ‪ .function prologue‬أنها تحفظ مؤشر اإلطار في المكدس‪ ،‬وتقوم بحفظ ذاكرة المكدس للحصول على‬
‫المتغيرات المحلية للدالة‪ .‬في بعض األحيان ‪ function prologue‬تتعامل مع بعض محاذاة المكدس "‪ "stack alignment‬كذلك‪.‬‬
‫تعليمات ‪ prologue‬بالضبط سوف تختلف اختالفا كبيرا تبعا لخيارات المترجم والمترجم‪ ،‬ولكن بشكل عام هذه التعليمات تقوم ببناء إطار‬
‫المكدس‪.‬‬

‫عند تشغيل البرنامج‪ ،‬يتم استدعاء الدالة )( ‪ ،main‬والتي تستدعى ببساطه الداله )( ‪ .test_function‬عندما يتم استدعاء الداله‬
‫)( ‪ test_function‬بواسطة الداله )( ‪ ،main‬فانه يتم دفع القيم المختلفة إلى المكدس إلنشاء بداية إطار المكدس على النحو التالي‪ .‬عندما يتم‬
‫استدعاء الداله )( ‪ ،test_function‬يتم دفع معلمات الداله إلى المكدس في ترتيب عكسي (نظرا ألنه ‪ .)FILO‬معلمات الداله هي ‪،1 ،1 ،1‬‬
‫و‪ ،1‬وبالتالي فإن يتم دفع التعليمات والتي تقوم بدفع القيم ‪ 1 ،1 ،1 ،1‬إلى المكدس‪ .‬هذه القيم تتوافق مع المتغيرات ‪ ،b ،c ،d‬و ‪.a‬‬
‫بعد ذلك‪ ،‬عند تنفيذ التعليمات من قبل األسمبلي‪ ،‬يتم دفع "‪ "return address‬إلى المكدس ثم يقفز تدفق التنفيذ لبدء)( ‪ test_function‬في‬
‫‪ .0x00000000004004ac‬قيمة ‪ return address‬يكون موقع التعليمات التالية ل ‪ RIP‬الحالي على وجه التحديد‪ ،‬القيمة المخزنة أثناء‬
‫الخطوة ‪ 1‬من حلقة التنفيذ التي سبق ذكرها‪ .‬في هذه الحالة‪ ،‬فإن ‪ return address‬يشير إلى مغادرة التعليمات في )( ‪ main‬عند‬
‫‪.0x00000000004004e6‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪102‬‬

‫استدعاء التعليمات يقوم بكال من تخزين عنوان ‪ return address‬في بنية المكدس وقفز ‪ RIP‬إلى بداية )( ‪ ،test_function‬لذلك‬
‫)( ‪ test_function‬تقوم باالنتهاء من بناء إطار المكدس‪ .‬في هذه الخطوة‪ ،‬يتم دفع القيمة الحالية لل ‪ RBP‬إلى المكدس‪ .‬وتسمى هذه القيمة‬
‫المحفوظة (‪ )SFP‬ويستخدم الحقا الستعادة ‪ RBP‬إلى حالته األصلية‪ .‬ثم يتم نسخ القيمة الحالية لل‪ RSP‬إلى ‪ RBP‬لضبط مؤشر إطار جديد‪.‬‬
‫ويستخدم مؤشر اإلطار هذا كمرجع للمتغيرات المحلية الخاصة بالدالة (‪ flag‬و‪ .)buffer‬يتم حفظ الذاكرة لهذه المتغيرات من خالل الطرح‬
‫من ‪ .RSP‬في النهاية‪ ،‬إطار المكدس يبدو شيئا من هذا القبيل‪:‬‬

‫بعد انتهاء التنفيذ‪ ،‬فان إطار المكدس يخرج بالكامل من المكدس‪ ،‬ويتم تعيين ‪ RIP‬إلى ‪ return address‬لذلك البرنامج ومن ثم يمكن أن‬
‫يستمر في التنفيذ‪ .‬إذا تم استدعاء دالة أخرى داخل الداله‪ ،‬سيتم دفع إطار مكدس آخر إلى المكدس‪ ،‬وهلم جرا‪ .‬كما تنتهي كل دالة‪ ،‬فان إطار‬
‫المكدس يخرج من المكدس لذا فان عملية التنفيذ ترجع الى الدالة السابقة‪ .‬هذا السلوك هو السبب يقوم بتنظيم هذا القطاع من الذاكرة في بنية‬
‫البيانات ‪.FILO‬‬
‫يتم ترتيب مختلف شرائح الذاكرة في النظام كما جرى عرضها‪ ،‬من ذاكرة العناوين األقل إلى عناوين الذاكرة العليا‪ .‬وبما أن معظم الناس على‬
‫دراية برؤية القوائم المرقمة التي تعول أسفل‪ ،‬وتظهر عناوين الذاكرة الصغيرة في األعلى‪ .‬بعض النصوص يحتوي على هذا العكس‪ ،‬والتي‬
‫يمكن أن يكون مربكا للغاية‪ .‬لذلك لهذا الكتاب‪ ،‬تظهر عناوين الذاكرة األصغر دائما في القمة‪ .‬أيضا معظم مصححات الذاكرة تعرض في هذا‬
‫النمط‪ ،‬مع عناوين ذاكرة أصغر في األعلى واألعلى منها في األسفل‪.‬‬
‫في حين ان ‪ stack‬و‪ heap‬على حد سواء ديناميكية‪ ،‬فكالهما ينمو في اتجاهات مختلفة تجاه بعضهما البعض‪ .‬هذا يقلل من إهدار المساحة‪،‬‬
‫مما يتيح للمكدس ان يكون أكبر إذا كانت ‪ heap‬صغيره والعكس بالعكس‪.‬‬

‫‪Memory Segments in C‬‬


‫في ‪ ،C‬كما هو الحال في اللغات األخرى‪ ،‬فإن التعليمات البرمجية المترجمة تذهب الى القطاع ‪ ،text‬في حين قيم المتغيرات في القطاعات‬
‫المتبقية‪ .‬بالضبط كل قطاع في شريحة الذاكرة يتم تخزين المتغير فيها اعتمادا على كيفية تعريف المتغير‪ .‬تعتبر المتغيرات التي يتم تعريفها‬
‫خارج أية داله متغيرات عالميه "‪ ."global variable‬كما يمكن إرفاق كلمة ‪ static‬او ‪ const‬ألي تعريف متغير لجعل المتغير ثابت‪ .‬إذا‬
‫تم تهيئة المتغيرات الثابتة أو العالمية مع البيانات‪ ،‬فانه يتم تخزينها في مقطع ذاكرة ‪data‬؛ خالف ذلك‪ ،‬يتم وضع هذه المتغيرات في مقطع‬
‫الذاكرة ‪ .BSS‬ال بد أوال من تخصيص الذاكرة في قطاع ‪ heap‬في الذاكرة باستخدام دالة تخصيص الذاكرة تسمى )(‪ .malloc‬عادة‪ ،‬يتم‬
‫استخدام المؤشرات كمرجع للذاكرة في القطاع ‪ .Heap‬وأخيرا‪ ،‬يتم تخزين متغيرات الداله المتبقية في مقطع الذاكرة ‪ stack .stack‬يمكنه أن‬
‫يحتوي على العديد من إطارات المكدس المختلفة‪ ،‬المكدس يمكن المتغيرات الحفاظ على التفرد ضمن سياقات الداله المختلفة‪ .‬سيقوم البرنامج‬
‫‪ memory_segments.c‬شرح هذه المفاهيم في ‪.C‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪103‬‬

‫>‪#include <stdio.h‬‬
‫>‪#include <stdlib.h‬‬
‫;‪int global_var‬‬
‫;‪int global_initialized_var = 5‬‬
‫{ )(‪void function‬‬ ‫‪// This is just a demo function.‬‬
‫;‪int stack_var‬‬ ‫‪// Notice this variable has the same name as the one in main().‬‬
‫;)‪printf("the function's stack_var is at address 0x%08x\n", &stack_var‬‬
‫}‬
‫{ )(‪int main‬‬
‫;‪int stack_var‬‬ ‫)(‪// Same name as the variable in function‬‬
‫;‪static int static_initialized_var = 5‬‬
‫;‪static int static_var‬‬
‫;‪int *heap_var_ptr‬‬
‫;)‪heap_var_ptr = (int *) malloc(4‬‬
‫‪// These variables are in the data segment.‬‬
‫;)‪printf("global_initialized_var is at address 0x%08x\n", &global_initialized_var‬‬
‫;)‪printf("static_initialized_var is at address 0x%08x\n\n", &static_initialized_var‬‬
‫‪// These variables are in the bss segment.‬‬
‫;)‪printf("static_var is at address 0x%08x\n", &static_var‬‬
‫;)‪printf("global_var is at address 0x%08x\n\n", &global_var‬‬
‫‪// This variable is in the heap segment.‬‬
‫;)‪printf("heap_var is at address 0x%08x\n\n", heap_var_ptr‬‬
‫‪// These variables are in the stack segment.‬‬
‫;)‪printf("stack_var is at address 0x%08x\n", &stack_var‬‬
‫;)(‪function‬‬
‫}‬
‫معظم هذه األكواد شارح نفسه إلى حد ما بسبب أسماء المتغيرات الوصفية‪ .‬يتم اإلعالن عن المتغيرات العالمية والثابتة كما هو موضح سابقا‪،‬‬
‫واالعالن أيضا عن تهيئة نظرائهم‪ .‬إعالن متغير المكدس على حد سواء في الداله )( ‪ main‬والدالة )( ‪ function‬لتسليط الضوء على تأثير‬
‫سياقات الداله‪ .‬يتم تعريف متغير ‪ heap‬في الواقع بمثابة مؤشر لعدد صحيح‪ ،‬والتي سوف تشير إلى الذاكرة المخصصة على شريحة ذاكرة‬
‫المكدس‪ .‬يتم استدعاء الدالة )( ‪ malloc‬لتخصيص أربعة بايت على ‪ .heap‬الذاكرة المخصصة حديثا يمكن أن يكون أي نوع من البيانات‪،‬‬
‫وظيفة )( ‪ malloc‬هو إرجاع مؤشر ‪ ،void‬الذي نحتاجه لفعل ‪ typecast‬في مؤشر العدد الصحيح‪.‬‬

‫أول اثنين من متغيرات التهيئة لديها أدنى عناوين الذاكرة‪ ،‬ألنها تقع في مقطع الذاكرة ‪ .data‬االثنين المقبلين من المتغيرات‪static_var ،‬‬
‫و‪ ،global_var‬يتم تخزينها في مقطع الذاكرة ‪ ،BSS‬ألنها ليست مهيائه‪ .‬عناوين الذاكرة هذه أكبر قليال من عناوين المتغيرات السابقة‪ ،‬يقع‬
‫هذا الجزء ‪ BSS‬أدنا المقطع ‪ .data‬ونظرا ألن كال من شرائح الذاكرة هذه لديها حجم ثابت بعد الترجمة‪ ،‬فهناك مساحة مهدرة قليال‪،‬‬
‫والعناوين ليست بعيدة جدا عن بعضها البعض‪.‬‬
‫يتم تخزين متغير ‪ Heap‬في المساحة المخصصة على شريحة ‪ ،heap‬التي تقع على بعد أقل من جزء ‪ .BSS‬تذكر هذا الجزء من الذاكرة‬
‫ليس ثابت‪ ،‬ويمكن تخصيص مساحة أكبر‪ .‬وأخيرا‪ ،‬اخر اثنين من المتغيرات ‪ stack_vars‬لهم عناوين ذاكرة كبيرة جدا‪ ،‬ألنها تقع في قطعة‬
‫المكدس‪ .‬المكدس ليس ذو حجم ثابت هو االخر‪ .‬ومع ذلك‪ ،‬تبدأ هذه الذاكرة في النمو من أسفل وتنمو إلى الوراء نحو القطاع ‪ .heap‬وهذا‬
‫يسمح لكال شرائح الذاكرة ليكون حيويا دون إهدار مساحة في الذاكرة‪ .‬يتم تخزين ‪ stack_var‬أوال في سياق الداله )( ‪ main‬في قطعة‬
‫مكدس ضمن إطار المكدس‪ .‬و‪ stack_var‬الثانية في الداله )( ‪ function‬لديها سياق فريد من نوعها‪ ،‬بحيث يتم تخزين المتغير ضمن إطار‬
‫مكدس مختلف في قطعة ‪ .stack‬عندما يتم استدعاء الدالة )( ‪ function‬بالقرب من نهاية البرنامج‪ ،‬يتم إنشاء إطار مكدس جديد لتخزين‬
‫‪ stack_var‬من أجل سياق الداله )( ‪.function‬‬
‫ملحوظه‪ :‬من المثال السابق نالحظ وجود )* ‪ (int‬وهذا نوع من ‪ typecasting‬مع المؤشرات "‪ "pointer‬لمعالجة الذاكره بشكل مباشر‪.‬‬
‫;‪int *heap_var_ptr‬‬
‫;)‪heap_var_ptr = (int *) malloc(4‬‬
‫ويمكن اختصار هذا السطر كاالتى‪:‬‬
‫;)‪int *heap_var_ptr = (int *) malloc(4‬‬
‫حيث ان الذاكره في مثالنا نستخدم ‪ hexadecimal‬والتي تحتوي على حروف‪.‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪104‬‬

‫‪Using the Heap‬‬


‫استخدام شرائح الذاكرة األخرى هي مجرد مسألة كيف تقوم بتعريف المتغيرات‪ .‬ومع ذلك‪ ،‬استخدام ‪ heap‬يتطلب المزيد من الجهد‪ .‬كما هو‬
‫موضح سابقا‪ ،‬يتم تخصيص الذاكرة على ‪ heap‬باستخدام الداله )( ‪ .malloc‬تقبل هذه الداله الحجم حيث انه المعلم الوحيد له وتخدم أكبر‬
‫مساحة ممكنه في قطاع ‪ ،heap‬عنوان البداية لهذه الذاكرة يكون كمؤشر الفراغ "‪ "void pointer‬فقط‪ .‬إذا كانت الداله )( ‪ malloc‬ال‬
‫يمكنها تخصيص الذاكرة لسبب ما‪ ،‬فان سوف يعود ببساطة بمؤشر ‪ NULL‬مع قيمة ‪ .2‬دالة تصفير الذاكره المقابلة هي )( ‪ .free‬تقبل هذه‬
‫الداله المؤشر كمعلمها الوحيد وتحرر مساحة الذاكرة على ‪ heap‬بحيث يمكن استخدامها مرة أخرى في وقت الحق‪.‬‬

‫يوفر ‪ C99‬أربعة دوال لتخصيص الذاكرة‪:‬‬


‫)‪ :malloc(size_t size‬يخصص الحجم بالبايت وإرجاع المؤشر إلى عنوان الذاكرة‪ .‬الذاكرة ال تكون مصفرة‪ /‬مهيئه‪.‬‬
‫)‪ :aligned_alloc(size_t alignment, size_t size‬يخصص الحجم بالبايت لكائن "‪ "object‬لمحاذاته بواسطة ‪ alignment‬خاص‪.‬‬
‫)‪ :realloc(void *p, size_t size‬تغير حجم الذاكرة المشار اليها من قبل المؤشر ‪ p‬ليكون حجم بالبايت اخر‪ .‬المحتويات سوف تصل إلى‬
‫تلك النقطة دون تغيير‪ .‬الباقي سوف يتم التخلص منه‪ ،‬في هذه الحالة إذا تم إعادة استخدام هذا الجزء بدون التهيئة‪/‬التصفير فان القيم القديمة قد‬
‫تكون موجودة في نفس المكان‪.‬‬
‫)‪ :calloc(size_t nmemb, size_t size‬يخصص الذاكرة لمجموعة من عناصر ‪ nmemb‬من حجم بايت لكل وإعادة المؤشر إلى‬
‫الذاكرة المخصصة‪ .‬مالحظة يتم تعيين تلك الذاكرة إلى ‪.2‬‬

‫‪Building on Basics 1.1‬‬


‫بمجرد فهم المفاهيم األساسية لبرمجة ‪ ،C‬فالباقي هو سهل جدا‪ .‬الجزء األكبر من قوة ‪ C‬يأتي من استخدام الدوال األخرى‪ .‬في الواقع‪ ،‬إذا‬
‫أزيلت الدوال من أي من البرامج السابقة‪ ،‬كل ذلك ستبقى هي البيانات األساسية جدا‪.‬‬

‫الوصول الى الملفات "‪"File Access‬‬


‫هناك طريقتان للوصول إلى الملفات في ‪ file descriptors :C‬و‪ .filestreams‬بالنسبة الى ‪ file descriptors‬فإنها تستخدم مجموعة من‬
‫دوال ‪ I/O‬ذات المستوى المنخفض "‪ "low-level I/O functions‬او بمعنى اخر دوال ‪ ،system call‬أما ‪ filestreams‬فهي تستخدم شكل‬
‫ذات مستوى أعلى مخزنة في ‪ I/O‬والذي هو مبني على دوال ذات مستوى أقل‪ .‬البعض ينظر الى دوال ‪ filestreams‬بانه أسهل في‬
‫البرمجة‪ .‬ومع ذلك‪ file descriptors ،‬هي أكثر مباشرة‪ .‬في هذا الكتاب‪ ،‬سوف يكون التركيز على دوال المستوى المنخفض ‪ I/O‬والتي‬
‫تستخدم ‪.file descriptors‬‬
‫في متاجر الكتب عل سبيل المثال تجد في نهاية‪/‬خلف الكتاب رقم يسمى البار كود والذي يمثل عدد‪ .‬هذا الرقم هو فريد من نوعه بين الكتب‬
‫األخرى في محل بيع الكتب‪ ،‬يمكن للبائع فحص هذا العدد واستخدامه كمرجع من المعلومات حول الكتاب في قاعدة بيانات المتجر‪ .‬وبالمثل‪،‬‬
‫‪ file descriptors‬هو الرقم الذي يستخدم لإلشارة الى الملفات المفتوحة‪ .‬أكثر أربع دوال شيوعا تستخدم مع ‪ file descriptors‬هي )(‪،open‬‬
‫)(‪ ،read() ،close‬و ()‪ .write‬جميع هذه الدوال ترجع القيمة ‪ -1‬إذا كان هناك خطأ‪ .‬الداله )(‪ open‬تقوم بفتح الملف للقراءة و‪/‬أو الكتابة‬
‫وإرجاع ‪ File descriptors .file descriptors‬العائد هو مجرد قيمة عددية‪ ،‬وإنما هو فريد من نوعه بين الملفات المفتوحة‪ .‬يتم تمرير‬
‫‪ file descriptors‬كمعلم إلى الدوال األخرى مثل مؤشر إلى ملف مفتوح‪ .‬الداله )(‪ ،close‬فيه ‪ file descriptors‬معلم وحيد‪ .‬معلمات‬
‫الدوال )(‪ read‬و )(‪ write‬لل ‪ ،file descriptors‬هو مؤشر للبيانات سواء للقراءة أو الكتابة‪ ،‬وعدد من وحدات البايت للقراءة والكتابة من‬
‫ذلك الموقع‪ .‬معلمات الداله )(‪open‬هو مؤشر إلى اسم الملف لفتحه وسلسلة من األعالم"‪ "flags‬المعرفة مسبقا والتي تحدد وضع الوصول‪.‬‬
‫وسيتم شرح هذه العالمات واستخداماتها في العمق في وقت الحق‪ ،‬ولكن اآلن دعونا نلقي نظرة بسيطة على البرنامج ‪ simplenote.c‬والذي‬
‫يستخدم ‪ .file descriptors‬يقبل هذا البرنامج مذكرة من خالل سطر األوامر ثم يضيف إلى نهاية الملف ‪ ./tmp/notes‬يستخدم هذا‬
‫البرنامج العديد من الدوال‪ ،‬بما في ذلك ‪ error-checked heap memory allocation function‬المألوفة‪ .‬ويستخدم دوال أخرى‬
‫لعرض رسالة استخدام ومعالجة األخطاء القاتلة‪ .‬يتم تعريف الدالة )(‪ usage‬ببساطة قبل )(‪ ،main‬لذلك ال يحتاج إلى دالة النموذج‬
‫"‪."function prototype‬‬
‫‪/*simplenote.c*/‬‬
‫>‪#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‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ 105

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] data file @ %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");
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;
}
‫ وهناك أيضا عدد‬.‫ معظم هذا الرموز يجب أن تكون قابله للقراءة‬،open() ‫" الغريبة المظهر المستخدمة مع الداله‬flags"‫إلى جانب األعالم‬
‫ انها تستخدم في تركيبة مع الداله‬.‫ تقبل السالسل النصية وإرجاع طولها‬strlen() ‫ الدالة‬.‫قليل من الدوال القياسية التي لم تستخدم من قبل‬
‫ لطباعة‬fatal() ‫ وتستخدم في‬print error ‫ هي اختصار ل‬perror() ‫ الداله‬.‫ ألنه يحتاج إلى معرفة كم عدد البايتات في الكتابة‬،write()
.‫رسالة خطأ إضافية (إن وجد) قبل أن تخرج‬
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] data file @ 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"

https://www.facebook.com/tibea2004
‫فن الهاكر األخالقي‬ ‫‪106‬‬

‫'‪[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 $‬‬
‫الخرج الناتج من تنفيذ هذا البرنامج جميل وواضح بذاته‪ ،‬ولكن هناك بعض األشياء عن شفرة المصدر التي تحتاج إلى مزيد من التوضيح‪.‬‬
‫الملفات ‪ fcntl.h‬و‪ sys/stat.h‬تتم تضمينهما‪ ،‬حيث ان تلك الملفات تحدد األعالم المستخدمة مع الداله )(‪ .open‬تم العثور على أول مجموعة‬
‫من األعالم في ‪ fcntl.h‬وتستخدم لضبط وضع الوصول‪ .‬يجب استخدام وضع وصول واحد على األقل من األعالم الثالثة التالية‪:‬‬
‫‪- O_RDONLY‬‬
‫تقوم بفتح الملف وذلك للقراءة فقط‪.‬‬
‫‪- O_WRONLY‬‬
‫تقوم بفتح الملف وذلك للكتابة فقط‪.‬‬
‫‪- O_RDWR‬‬
‫تقوم بفتح الملف وذلك للكتابة والقراءة‪.‬‬
‫هذه االعالم يمكن جمعها مع عدة أعالم اختيارية أخرى باستخدام ‪ bitwise OR logic‬والتي يرمز لها بالرمز "|"‪ .‬هناك عدد قليل األكثر‬
‫شيوعا ومفيد من هذه العالمات كما يلي‪:‬‬
‫‪- O_APPEND‬‬
‫تقوم بكاتبة البيانات في نهاية الملف‪.‬‬
‫‪- O_TRUNC‬‬
‫إذا كان الملف موجود بالفعل‪ ،‬فانه تقوم باقتطاع الملف إلى الطول ‪.2‬‬
‫‪- O_CREAT‬‬
‫إنشاء الملف إذا كان غير موجود‪.‬‬
‫المشغل أحادي المعامل "‪"Bitwise operations‬‬
‫تقوم بجمع البت "‪ "bits‬أي المقارنة بين البتات بدال من البيتات باستخدام البوابات المنطقية مثل ‪ OR‬و ‪ .AND‬عندما يدخل اثنين من البت‬
‫مع بوابة ‪ ،OR‬فان النتيجة هي ‪ 1‬إذا إما كان البت األول أو البت الثاني هو ‪ .1‬إذا دخل اثنين من البت مع البوابة ‪ ،AND‬فان النتيجة هي ‪1‬‬
‫فقط إذا كان كل البت األول والثاني هم ‪ .1‬يمكن للقيم ‪ 11‬بت الكاملة استخدام المشغل المختصة بالبت لتنفيذ عمليات المنطق على كل بت مقابل‪.‬‬

‫كود البرنامج ‪ bitwise.c‬سوف يقوم بشرح هذا‪.‬‬


‫>‪#include <stdio.h‬‬
‫{ )(‪int main‬‬
‫;‪int i, bit_a, bit_b‬‬
‫;)"‪printf("bitwise OR operator |\n‬‬
‫{ )‪for(i=0; i < 4; i++‬‬
‫;‪bit_a = (i & 2) / 2‬‬ ‫‪// Get the second bit.‬‬
‫;)‪bit_b = (i & 1‬‬ ‫‪// Get the first bit.‬‬
‫;)‪printf("%d | %d = %d\n", bit_a, bit_b, bit_a | bit_b‬‬
‫}‬
‫;)"‪printf("\nbitwise AND operator &\n‬‬
‫{ )‪for(i=0; i < 4; i++‬‬
‫;‪bit_a = (i & 2) / 2‬‬ ‫‪// Get the second bit.‬‬
‫;)‪bit_b = (i & 1‬‬ ‫‪// Get the first bit.‬‬
‫;)‪printf("%d & %d = %d\n", bit_a, bit_b, bit_a & bit_b‬‬
‫}‬
‫}‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪107‬‬

‫نتائج تجميع وتنفيذ ‪ bitwise.c‬هي على النحو التالي‪.‬‬


‫‪reader@hacking:~/booksrc $ gcc bitwise.c‬‬
‫‪reader@hacking:~/booksrc $ ./a.out‬‬
‫| ‪bitwise OR operator‬‬
‫‪0|0=0‬‬
‫‪0|1=1‬‬
‫‪1|0=1‬‬
‫‪1|1=1‬‬

‫& ‪bitwise AND operator‬‬


‫‪0&0=0‬‬
‫‪0&1=0‬‬
‫‪1&0=0‬‬
‫‪1&1=1‬‬
‫‪reader@hacking:~/booksrc $‬‬

‫‪File Permissions‬‬
‫إذا تم استخدام المعلم ‪ O_CREAT‬في وضع الوصول للدالة )(‪ ،open‬فهناك الحاجة إلى معلمات إضافية لتحديد أذونات الملف من الملف‬
‫الذي تم إنشاؤه حديثا‪ .‬وتستخدم معلمات األعالم هذه ‪ bit flags‬المحددة في ‪ ،sys/stat.h‬والتي يمكن دمجها مع بعضها باستخدام ‪bitwise‬‬
‫‪.OR logic‬‬
‫‪- S_IRUSR‬‬
‫إعطاء إذن القراءة للملف بالنسبة للمستخدم (المالك)‪.‬‬
‫‪- S_IWUSR‬‬
‫إعطاء إذن الكتابة للملف بالنسبة للمستخدم (المالك)‪.‬‬
‫‪- S_IXUSR‬‬
‫إعطاء إذن التشغيل للملف بالنسبة للمستخدم (المالك)‪.‬‬
‫‪- S_IRGRP‬‬
‫إعطاء إذن القراءة للملف بالنسبة للمجموعة‪.‬‬
‫‪- S_IWGRP‬‬
‫إعطاء إذن الكتابة للملف بالنسبة للمجموعة‪.‬‬
‫‪- S_IXGRP‬‬
‫إعطاء إذن التشغيل للملف بالنسبة للمجموعة‪.‬‬
‫‪- S_IROTH‬‬
‫إعطاء إذن القراءة للملف بالنسبة ألي شخص اخر‪.‬‬
‫‪- S_IWOTH‬‬
‫إعطاء إذن الكتابة للملف بالنسبة ألي شخص اخر‪.‬‬
‫‪- S_IXOTH‬‬
‫إعطاء إذن التشغيل للملف بالنسبة ألي شخص اخر‪.‬‬

‫‪User IDs‬‬
‫كل مستخدم على نظام لينكس لديه رقم هوية المستخدم وهو فريد من نوعه‪ .‬ويمكن عرض هوية المستخدم هذه باستخدام األمر ‪.id‬‬
‫‪reader@hacking:~/booksrc $ id reader‬‬
‫)‪uid=999(reader) gid=999(reader‬‬
‫‪groups=999(reader),4(adm),20(dialout),24(cdrom),25(floppy),29(audio),30(dip),4‬‬
‫‪4(video),46(plugdev),104(scanner),112(netdev),113(lpadmin),115(powerdev),117(a‬‬
‫)‪dmin‬‬
‫المستخدم الجذري يكون مع هوية المستخدم ‪ 2‬مثل حساب المسؤول‪ ،‬الذي لديه حق الوصول الكامل إلى النظام‪ .‬يمكن استخدام األمر ‪su‬‬
‫للتبديل إلى مستخدم آخر‪ ،‬وإذا تم تشغيل هذا األمر كجذر وذلك باستخدام االمر ‪ ،sudo‬فإنه يمكن أن يتم بدون كلمة مرور‪.‬‬
‫‪reader@hacking:~/booksrc $ sudo su jose‬‬
‫معرفات الهوية هذه يمكن استرجاعها باستخدام الدوال )(‪ getuid‬و)(‪ ،geteuid‬على التوالي‪.‬‬
‫ملحوظه‪ :‬يتم ادراج الدوال في لغة السي‪ ،‬عندما يتم احاطة الملف ب <و> مع ‪ ،#include‬وهنا يبحث المترجم عن هذا الملف في المجلد‬
‫االفتراضي والتي يشمل المسارات‪ ،‬مثل ‪ ./usr/include/‬لكن إذا احيط اسم الملف عن طريق ‪ quotes‬مثل "‪ "hack.h‬فان المترجم يبحث‬
‫في المجلد الحالي الذي يحتوي على ملف التنفيذ‪ .‬ولذلك‪ hacking.h ،‬على سبيل المثال هو في نفس مسار البرنامج‪ ،‬ويمكن تضمينه مع هذا‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪108‬‬

‫"‪#include "hacking.h‬‬
‫أيضا‪ ،‬يتم استخدام الداله )(‪ lseek‬لترجيع ‪ read position‬في الملف‪ .‬استدعاء الدالة )‪lseek(fd, length * -1, SEEK_CUR‬؛ يخبر‬
‫البرنامج بتحريك موضع القراءة الى األمام من الموضع الحالي في الملف بطول ‪ length * -1‬بايت‪ .‬ألن هذا تبين أن يكون رقما سالبا‪ ،‬يتم‬
‫نقل الوضع إلى الوراء بواسطة بايت من الطول‪.‬‬

‫‪" Structs‬التراكيب (البنيات)"‬


‫أحيانا هناك متغيرات متعددة التي يجب تجميعها معا وتعامل كالواحدة‪ .‬في السي‪ Structs ،‬هي متغيرات التي يمكن أن تحتوي على كثير من‬
‫المتغيرات األخرى‪ .‬وغالبا ما تستخدم ‪ Structs‬بواسطة دوال النظام المختلفة والمكتبات‪ ،‬لذلك فهم كيفية استخدام ‪ Structs‬هو شرط أساسي‬
‫الستخدام هذه الدوال‪.‬‬
‫هناك مثال بسيط يكفي في الوقت الراهن‪ .‬عند التعامل مع العديد من دوال الوقت‪ ،‬هذه الدوال تستخدم ‪ time struct‬تسمى ‪ ،tm‬والتي يتم‬
‫تعريفها في ‪ ./usr/include/time.h‬تعريف ‪ Structs‬كما يلي‪.‬‬
‫{ ‪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 */‬‬
‫;}‬
‫بعد ان يتم تعريف هذه ‪ ،struct‬تصبح ‪ struct tm‬نوع متغير صالح لالستعمال‪ ،‬والتي يمكن استخدامها إلعالن المتغيرات والمؤشرات مع‬
‫نوع البيانات من ‪ .struct tm‬البرنامج ‪ time_example.c‬يدل على ذلك‪ .‬عندما يتم تضمين ‪ ،time.h‬يتم تعريف ‪ ،struct tm‬والذي‬
‫يستخدم الحقا إلعالن متغيرات ‪ current_time‬و‪.time_ptr‬‬
‫>‪#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‬‬
‫}‬
‫دالة الوقت )(‪ time‬تقوم بإرجاع عدد الثواني منذ ‪ 1‬يناير‪ .1222 ،‬يتم االحتفاظ بالوقت على أنظمة يونكس بالنسبة لهذه النقطة بدال من الوقت‬
‫المناسب‪ ،‬والذي يعرف أيضا باسم ‪ .epoch‬وتتوقع الداله )(‪ localtime_r‬اثنين من المؤشرات كوسائط‪ :‬واحدة لعدد الثواني منذ ‪epoch‬‬
‫واآلخر إلى البنية ‪ .tm‬وقد تم بالفعل تعيين ‪ time_ptr‬كمؤشر إلى عنوان ‪ ،current_time‬وهو ‪ tm struct‬فارغة‪ .‬يتم استخدام عنوان‬
‫المشغل لتوفير مؤشر إلى ‪ seconds_since_epoch‬لمعلم أخر )(‪ ،localtime_r‬والذي يمأل عناصر ‪ .tm struct‬عناصر ‪struct‬‬
‫يمكن الوصول إليها من خالل ثالث طرق مختلفة؛ األولين هي الطرق المناسبة للوصول الى عناصر ‪ ،struct‬والثالث هو حل ‪hacked‬‬
‫‪ .solution‬إذا تم استخدام متغير ‪ ،struct‬فان عناصرها يمكن الوصول إليها عن طريق إضافة أسماء العناصر "إلى نهاية اسم المتغير مع‬
‫نقطه‪ .‬ولذلك‪ ،‬فإن ‪ current_time.tm_hour‬سوف تصل فقط الى العنصر ‪ tm_hour‬من ‪ tm struct‬والذي يسمى ‪.current_time‬‬
‫غالبا ما يتم استخدم مؤشرات ‪ ،struct‬ألنه أكثر فاعلية لتمرير مؤشر أربعة بايت من بنية ‪ struct‬بالكامل‪ .‬مؤشرات ‪ struct‬شائعة بحيث‬
‫ان ‪ C‬لديه أسلوب مضمن للوصول إلى عناصر ‪ struct‬من مؤشر ‪ struct‬دون الحاجة إلى ‪ dereference‬المؤشر‪ .‬عند استخدام مؤشر‬
‫‪ struct‬مثل ‪ ،time_ptr‬عناصر ‪ struct‬يمكن الوصول إليها على نحو مماثل باسم عنصر ‪ ،struct‬ولكن باستخدام سلسلة من األحرف‬
‫التي تبدو مثل السهم‪ .‬ولذلك‪ time_ptr-> tm_min ،‬سيتم الوصول إلى عنصر ‪ tm_min‬من ‪ tm struct‬أشاره إلى ‪ .time_ptr‬يمكن‬
‫الوصول إلى الثواني عن طريق أي من هذه الطرق الصحيحة‪ ،‬وذلك باستخدام عنصر ‪ tm_sec‬أو ‪ ،tm struct‬ولكن يتم استخدام الطريقة‬
‫الثالثة‪ .‬يمكنك معرفة كيف يعمل هذا األسلوب الثالث؟‬
‫‪reader@hacking:~/booksrc $ gcc time_example.c‬‬
‫‪reader@hacking:~/booksrc $ ./a.out‬‬
‫‪time() - seconds since epoch: 1189311588‬‬
‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪109‬‬

‫‪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 $‬‬
‫ان البرنامج يعمل كما هو متوقع‪ ،‬ولكن كيف هي الثواني التي يتم الوصول إليه في ‪tm struct‬؟ تذكر أنه في نهاية المطاف‪ ،‬كل شيء في‬
‫الذاكرة فقط‪ .‬يحث انه تم تعريف ‪ tm_sec‬في بداية ‪ ،tm struct‬وجد أن قيمته عدد صحيح أيضا في البداية‪.‬‬
‫في السطر )‪ ،second = *((int *) time_ptr‬المتغير ‪ time_ptr‬هو ‪ typecast‬لمؤشر ‪ tm struct‬الى عدد صحيح‪ .‬ثم يتم ألغاء اإلشارة‬
‫الى قيمة هذا ‪ ،typecast pointer‬إرجاع البيانات الى عنوان المؤشر‪ .‬العنونة إلى ‪ tm struct‬يشير أيضا إلى العنصر األول من هذه‬
‫البنية‪ ،‬وهذا سوف يقوم باسترداد قيمة عدد صحيح ل ‪ tm_sec‬في ‪.struct‬‬

‫‪Function Pointers‬‬
‫المؤشر يحتوي على عنوان الذاكرة ويتم إعطاء نوع البيانات التي تصف حيث يشير‪ .‬عادة‪ ،‬يتم استخدام مؤشرات للمتغيرات‪ .‬ومع ذلك‪ ،‬فإنه‬
‫يمكن أستخدامها أيضا مع الدوال‪ .‬يوضح البرنامج ‪ funcptr_example.c‬استخدام المؤشرات مع الدالة‪.‬‬
‫>‪#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‬‬
‫}‬
‫ناتج البرنامج السابق يكون كاالتى‪:‬‬
‫‪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 $‬‬

‫‪Pseudo-random Numbers‬‬
‫أجهزة الكمبيوتر هي آالت قطعية‪ ،‬فإنه من المستحيل بالنسبة لهم إنتاج أرقام عشوائية حقا‪ .‬ولكن العديد من التطبيقات تتطلب نوعا من‬
‫العشوائية‪ Pseudo-random number generator functions .‬تلبى هذه الحاجة عن طريق توليد تيار من األرقام التي هي شبه‬
‫عشوائية‪ .‬ويمكن لهذه الدوال ان تنتج تسلسل عشوائي على ما يبدو من األرقام بداية من ‪seed number‬؛ ومع ذلك‪ ،‬يمكن إنشاء التسلسل‬
‫الدقيق نفسه مرة أخرى مع نفس ‪ .seed number‬آالت ال يمكنها ان تنتج العشوائية‪ ،‬ولكن إذا كانت قيمة ‪ seed number‬من داله‬
‫‪ pseudo-random generation‬غير معروفه‪ ،‬فإن تسلسل سوف يبدو عشوائي‪ .‬المولد يجب أن يكون ‪ seeded‬بقيمة باستخدام داله‬
‫)(‪ ،srand‬ومنذ ذلك الحين فصاعدا‪ ،‬فإن الداله )(‪ rand‬سوف تقوم بإرجاع عدد شبه عشوائي من ‪ 2‬إلى ‪ .RAND_MAX‬ويتم تعريف‬
‫هذه الدوال و‪ RAND_MAX‬في ‪ .stdlib.h‬في حين أن أرقام )(‪ rand‬سوف تقوم بإرجاع قيمه تبدو عشوائية‪ ،‬فهي تعتمد على قيمة‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪110‬‬

‫‪ seed‬المقدمة من الداله )(‪ .srand‬للحفاظ على شبه العشوائية بين البرامج الالحقة‪ ،‬ال بد من المولد استخدام قيم ‪ seed‬مختلفة بشكل عشوائي‬
‫في كل مرة‪ .‬يوضح البرنامج ‪ rand_example.c‬هذه التقنية‪.‬‬
‫>‪#include <stdio.h‬‬
‫>‪#include <stdlib.h‬‬
‫>‪#include <time.h‬‬

‫{ )(‪int main‬‬
‫;‪int i‬‬
‫;)‪printf("RAND_MAX is %u\n", RAND_MAX‬‬
‫;))‪srand(time(0‬‬
‫;)"‪printf("random values from 0 to RAND_MAX\n‬‬
‫)‪for(i=0; i < 8; i++‬‬
‫;))(‪printf("%d\n", rand‬‬
‫;)"‪printf("random values from 1 to 20\n‬‬
‫)‪for(i=0; i < 8; i++‬‬
‫;)‪printf("%d\n", (rand()%20)+1‬‬
‫}‬
‫الحظ كيف يستخدم المشغل معامل للحصول على القيم العشوائية من ‪ .12-1‬إخراج البرنامج يعرض فقط أرقام عشوائية‪ .‬ويمكن أيضا استخدام‬
‫‪ Pseudo-randomness‬لبرامج أكثر تعقيدا‪.‬‬
‫سر القرصنة هو فهم الحقائق المعروفة مثل هذه واستخدامها لتحقيق نتائج على ما يبدو سحرية‪.‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪111‬‬

‫الفصل الرابع‬

‫الشبكات " ‪" Networking‬‬

‫التواصل "‪ "Communication‬واللغة "‪ "language‬تعزز بشكل كبير قدرات الجنس البشري‪ .‬باستخدام لغة "‪ "language‬مشتركة‪ ،‬فان‬
‫البشر قادرون على نقل المعرفة وتنسيق اإلجراءات‪ ،‬وتبادل الخبرات‪ .‬وبالمثل‪ ،‬يمكن أن تصبح البرامج أقوى بكثير عندما يكون لديها القدرة‬
‫على التواصل مع البرامج األخرى عبر الشبكة‪ .‬األداة المساعدة الحقيقية لمتصفح اإلنترنت ليست في البرنامج نفسه‪ ،‬ولكن في قدرته على‬
‫التواصل مع مزودات الويب‪.‬‬
‫الشبكات "‪ "networking‬هي السائدة بحيث تكون في بعض األحيان أمرا مفروغا منه‪ .‬العديد من التطبيقات مثل البريد اإللكتروني‪،‬‬
‫اإلنترنت‪ ،‬والرسائل الفورية تعتمد على الشبكات‪ .‬كل من هذه التطبيقات تعتمد على بروتوكول شبكة اتصال معينة‪ ،‬ولك بروتوكول يستخدم‬
‫أساليب نقل الشبكة العامة نفسها‪.‬‬
‫كثير من الناس ال يدركون أن هناك نقاط الضعف في بروتوكوالت الشبكات أنفسهم‪ .‬في هذا الفصل سوف نتعلم كيفية تواصل "‪"network‬‬
‫التطبيقات الخاصة بك باستخدام ‪ socket‬وكيفية التعامل مع نقاط ضعف الشبكة المشتركة‪.‬‬

‫‪OSI Model 1.1‬‬


‫عندما يتحدث اثنين من جهازي الكمبيوتر لبعضهما البعض‪ ،‬فإنهم يحتاجون أن يتكلمون بنفس اللغة‪ .‬يتم وصف هيكل هذه اللغة في الطبقات من‬
‫نموذج ‪ .OSI‬يقدم نموذج ‪ OSI‬المعايير التي تسمح لألجهزة‪ ،‬مثل أجهزة الراوتر والجدران النارية‪ ،‬التركيز على جانب معين واحد من‬
‫االتصاالت التي ينطبق عليها وتجاهل اآلخرين‪ .‬يتم تقسيم نموذج ‪ OSI‬إلى طبقات لالتصال‪ .‬بهذه الطريقة‪ ،‬فان جهاز الراوتر وجدار الحماية‬
‫يمكن أن تركز على تمرير البيانات في الطبقات السفلى‪ ،‬وتجاهل الطبقات العليا عند تغليف البيانات المستخدمة عن طريق تشغيل التطبيقات‪.‬‬
‫يتم تقسيم ‪ OSI Model‬الى سبع طبقات هي كما يلي‪:‬‬
‫‪ -‬الطبقة المادية "‪ :"physical layer‬هذه الطبقة تتعامل مع االتصال الفعلي‪/‬المادي "‪ "physically‬بين نقطتين‪ .‬هذا هو أدنى‬
‫طبقة‪ ،‬ودورها الرئيسي هو التواصل من خالل اإلشارات الكهربائية "‪ ."bit streams‬هذه الطبقة أيضا مسؤولة عن تفعيل وصيانة‬
‫وتعطيل ‪ bit-stream communications‬هذه‪ .‬وظيفة هذه الطبقة تقوم بتحول الداتا إلى اشارات كهربائية لتمريرها في السلك‪.‬‬
‫‪ -‬طبقة البيانات "‪ :"Data-link layer‬تتعامل هذه الطبقة مع نقل البيانات في الواقع بين نقطتين‪ .‬وعلى نقيض الطبقة‬
‫المادية‪/‬الفيزيائية‪ ،‬والتي تهتم بإرسال البتات‪ ،‬هذه الطبقة توفر وظائف رفيعة المستوى‪ ،‬مثل تصحيح الخطأ "‪"error correction‬‬
‫والتحكم في التدفق "‪ ."flow control‬توفر هذه الطبقة أيضا إجراءات لتفعيل وصيانة وتعطيل وصالت ربط البيانات‪.‬‬
‫‪ -‬طبقة الشبكة "‪ :"Network layer‬هذه الطبقة تعمل بوصفها وسطا‪ .‬دورها األساسي هو تمرير المعلومات بين الطبقات السفلية‬
‫والطبقات العليا‪ .‬ويقدم العنونة "‪ "addressing‬والتوجيه "‪."routing‬‬
‫‪ -‬طبقة النقل "‪ :"Transport layer‬توفر هذه الطبقة نقل البيانات بين األنظمة‪ .‬من خالل توفير البيانات واالتصاالت الموثوق بها‪،‬‬
‫هذه الطبقة تسمح للطبقات العليا بان ال تقلق أبدا حول الموثوقية أو فعالية تكاليف نقل البيانات‪.‬‬
‫‪ -‬طبقة الجلسة "‪ :"Session layer‬عمل هذه الطبقة هي المسؤولة عن إنشاء وصيانة الروابط بين تطبيقات الشبكة‪.‬‬
‫‪ -‬طبقة العرض "‪ :"Presentation layer‬هذه الطبقة هي المسؤولة عن تقديم البيانات إلى التطبيقات في بناء الجملة أو بلغة‬
‫يفهمونها‪ .‬وهذا يسمح ألشياء مثل التشفير وضغط البيانات‪.‬‬
‫‪ -‬طبقة التطبيق "‪ :"Application layer‬تختص هذه الطبقة مع تتبع متطلبات التطبيق‪.‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪112‬‬

‫عندما ترسل البيانات من خالل طبقات البروتوكول هذه‪ ،‬فانه يتم إرسالها في شكل قطع صغيرة تسمى حزم "‪ ."packets‬كل حزمه "‪"packet‬‬
‫تحتوي على تنفيذات "‪ "implementations‬لطبقات البروتكول هذه‪ .‬بدءا من طبقة التطبيقات "‪ ،"application layer‬الحزمة تلتف الى‬
‫طبقة العرض "‪ "presentation layer‬حول تلك البيانات‪ ،‬والتي تلتف الى طبقة الجلسة "‪ ،"session layer‬والتي تلتف الى طبقة النقل‬
‫"‪ ،"transport layer‬وهكذا دواليك‪ .‬وتسمى هذه العملية بالتغليف "‪ ."encapsulation‬تحتوي كل التفافة الى الطبقة على رأس‬
‫"‪ "header‬وجسم "‪ ."body‬الرأس "‪ "header‬يحتوي على معلومات البروتوكول الالزمة لتلك الطبقة‪ ،‬في حين أن الجسم "‪"body‬‬
‫يحتوي على البيانات لتلك الطبقة‪ .‬الجسم لطبقة واحدة يحتوي على الحزمة الكاملة مغلفة من الطبقات السابقة‪ ،‬مثل جلد البصل‪.‬‬
‫على سبيل المثال‪ ،‬عندما تتصفح الويب‪ ،‬فان كابل اإليثرنت وبطاقة الشبكة يشكلون الطبقة المادية "‪ ،"physical layer‬مع الحرص على‬
‫نقل ‪ bits‬من نهاية الكابل إلى أخر‪ .‬المرحلة التالية هي طبقة وصلة البيانات "‪ ."Data-link layer‬في مثال متصفح الويب‪ ،‬اإليثرنت‬
‫تشكل هذه الطبقة‪ ،‬والذي توفر االتصاالت على مستوى منخفض بين منافذ اإليثرنت على الشبكة المحلية‪ .‬هذا البروتوكول يسمح لالتصال بين‬
‫منافذ اإليثرنت‪ ،‬ولكن هذه المنافذ ليس لديها بعد عناوين ‪ .IP‬ال وجود لمفهوم عناوين ‪ IP‬حتى الطبقة التالية‪ ،‬طبقة الشبكة "‪."network layer‬‬
‫باإلضافة إلى العنونة "‪ ،"addressing‬هذه الطبقة مسؤولة عن نقل البيانات من عنوان واحد إلى آخر‪ .‬هذه الطبقات الثالث السفلى معا قادرة‬
‫على إرسال حزم البيانات من عنوان ‪ IP‬واحد إلى آخر‪ .‬الطبقة التالية هي طبقة النقل "‪ ،"transport layer‬والتي هي مخصصه لحركة‬
‫المرور على الشبكة هو ‪ .TCP‬أنه يوفر اتصال ثنائي االتجاه "‪ "bidirectional socket connection‬سلس‪ .‬المصطلح ‪ TCP/IP‬يصف‬
‫استخدام ‪ TCP‬على طبقة النقل و ‪IP‬على طبقة الشبكة‪ .‬هناك برامج عنونه أخرى في هذه الطبقة‪ .‬ومع ذلك‪ ،‬فان حركة المرور على الشبكة‬
‫الخاصة بك ربما تستخدم ‪ IP‬اإلصدار ‪. )IPv4( 1‬عناوين ‪ IPv4‬تتبع الشكل المألوف من ‪ IP‬كاالتي "‪ ."XX.XX.XX.XX‬اإلصدار ‪2‬‬
‫)‪ (IPv6‬موجود أيضا على هذه الطبقة‪ ،‬مع نظام عنونة مختلف تماما‪ IPv4 .‬هو األكثر شيوعا حتى االن‪.‬‬
‫تستخدم حركة المرور على الشبكة نفسها ‪( HTTP‬بروتوكول ‪ )Hypertext Transfer Protocol‬للتواصل‪ ،‬والتي هي في الطبقة العليا‬
‫من نموذج ‪ .OSI‬عند تصفح الويب‪ ،‬المتصفح على شبكة الويب الخاص بك يتواصل عبر اإلنترنت مع خادم الويب الموجود على شبكة‬
‫اتصال خاصة مختلفة‪ .‬وعندما يحدث ذلك‪ ،‬يتم تغليف حزم البيانات وصوال الى الطبقة المادية حيث يتم تمريرها إلى جهاز الراوتر‪ .‬في حين‬
‫ان جهاز الراوتر في الواقع ال يهتم بما تحتويه هذه الحزمة‪ ،‬فإنه يحتاج فقط لتنفيذ بروتوكوالت تصل إلى طبقة الشبكة‪ .‬جهاز الراوتر يرسل‬
‫الحزم إلى اإلنترنت‪ ،‬حيث تصل إلى جهاز الراوتر الشبكة األخرى‪ .‬هذا الراوتر يقوم بتغليف هذه الحزمة مع رؤوس بروتوكول الطبقات‬
‫المنخفضة "‪ "lower layer‬الالزمة للحزمة للوصول إلى وجهتها النهائية‪ .‬ويظهر هذه العملية في الرسم التوضيحي التالي‪.‬‬

‫كل هذه الحزم المغلفة "‪ "packet encapsulation‬تشكل لغة معقدة تستضاف على شبكة اإلنترنت (وغيرها من أنواع الشبكات) تستخدم في‬
‫التواصل مع بعضها البعض‪ .‬يتم برمجة هذه البروتوكوالت في أجهزة الراوتر‪ ،‬جدران الحماية‪ ،‬ونظام تشغيل الكمبيوتر الخاص بك حتى‬
‫يتمكنوا من التواصل‪ .‬تحتاج البرامج التي تستخدم الشبكات‪ ،‬مثل متصفحات الويب والبريد اإللكتروني‪ ،‬على التفاعل مع نظام التشغيل الذي‬
‫يتعامل مع شبكة االتصاالت‪ .‬في حين ان نظام التشغيل يعتني بتفاصيل تغليف الشبكة‪ ،‬كتابة برامج الشبكة هو مجرد مسألة باستخدام واجهة‬
‫شبكة من نظام التشغيل‪.‬‬

‫‪TCP/IP Stack 1.1‬‬


‫جميع ادوات الشبكة في هذا الكتاب تستخدم فقط المكدس ‪ ،TCP/IP‬ألن هذا هو البروتوكول الرئيسي المستخدم في الشبكات المحلية‬
‫والواسعة‪ ،‬بما في ذلك اإلنترنت‪ .‬وعالوة على ذلك‪ ،‬يعتبر اإلصدار الرابع من بروتوكول ‪ )IPv4( IP‬هو فقط البروتوكول الرئيسي المستخدم‬
‫هنا وذلك الن بروتوكول ‪ IP‬االصدار ‪ )IPv6( 2‬ما زال يتم تنفيذه تدريجيا في بعض البلدان‪ ،‬فإنه ال يزال لديه طريق طويل ليقطعه ليصبح‬
‫استخدامه على نطاق واسع‪.‬‬
‫‪ TCP/IP‬هو مجموعة من بروتوكوالت الشبكة الموجهة نحو االستخدام المشترك‪ .‬البروتوكوالت األساسية في هذا الجناح هي كالتالي‪:‬‬
‫‪ -‬بروتوكول اإلنترنت (‪ :)IP‬هي المسؤولة عن نقل البيانات‪ ،‬والتي تسمى ‪ ،datagrams‬من عقدة إلى أخرى‪ ،‬مع كل مضيف التي‬
‫تم تحديده بشكل فريد من عنوان ‪ .IP‬وهكذا‪ IP ،‬هو المسؤول عن العنونة عبر الشبكة بأكملها باستخدام عناوين ‪ ،IP‬ألنه يتم‬
‫استخدام عناوين ‪ IP‬فقط في رؤوس ‪ IP .headers of IP datagrams‬هو غير جدير بالثقة‪ ،‬وهو بروتوكول‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪113‬‬

‫‪ .connectionless‬وهذا يعني أنه يتم إرسال كل كتل البيانات عبر الشبكة بشكل مستقل عن اآلخرين‪ ،‬وبالتالي ليس هناك ما يضمن‬
‫أي من ‪ datagrams‬تصل إلى وجهتهم أو وصوله في التسلسل األصلي‪ .‬يتم وصف عناوين ‪ IPv4‬في ‪.(RFC) 79l‬‬
‫‪ -‬البروتوكول )‪ Internet control message protocol (ICMP‬هو المسؤولة عن توفير خدمات الدعم ذات المستوى‬
‫المنخفض "‪ "low level‬المختلفة لل ‪ ،IP‬مثل إرسال رسائل حول مشاكل مع توجيه ‪ .IP datagrams‬وتم تعريف ‪ ICMP‬في‬
‫‪ ،RFC 792‬مع المعلومات اإلضافية المقدمة في ‪ RFC 950‬و ‪.RFC 1256‬‬
‫‪ -‬البروتوكول )‪ address resolution protocol (ARP‬هو المسؤول عن تعين "‪ "mapping‬عنوان ‪ IP‬من عقدة إلى عنوانه‬
‫جهازه (‪ .)MAC‬وتم وصف ‪ ARP‬في ‪ .RFC 791‬وهناك أيضا )‪ ،reverse address resolution protocol (RARP‬الذي‬
‫يترجم عنوان ‪ MAC‬إلى عنوان ‪ .IP‬ويوصف ‪ RARP‬في ‪.RFC 903‬‬
‫‪ -‬البروتوكول )‪ The transmission control protocol (TCP‬هو اتصال بروتوكول موثوق به‪ .‬هذا البروتوكول يتيح تسليم‬
‫مضمون لحزم البيانات ويدعم الربط االفتراضي "‪ "virtual connection‬باستخدام نظام ‪ acknowledgments‬وإعادة‬
‫اإلرسال عند الضرورة‪ .‬تم وصف ‪ TCP‬في ‪ ،RFC 793‬مع التعديالت الواردة في ‪ RFC 1072‬و‪.RFC 1146‬‬
‫‪ -‬البروتوكول )‪ The user datagram protocol (UDP‬يوفر خدمة اتصال ‪ datagram communications‬بسيطة ال يمكن‬
‫االعتماد عليها‪ ،‬إلى تطبيقات محددة على عقدة محددة‪ .‬ويوصف ‪ UDP‬في ‪.RFC 768‬‬
‫البروتوكوالت التي تم وصفها يمكن اعتبارها البروتوكوالت األساسية‪ ،‬ألنها تشكل األساس لتشغيل شبكة ‪.TCP/IP‬‬
‫بروتوكوالت تهيأت االتصال "‪( "Connection-oriented protocols‬على سبيل المثال‪ )TCP ،‬تسمى عادة بروتوكوالت التدفق "‬
‫‪ ."stream protocols‬اما البروتوكوالت بدون اتصال"‪( "connectionless protocols‬على سبيل المثال‪،ICMP ،UDP ،IP ،‬‬
‫‪ ،ARP‬و‪ )RARP‬تسمى بروتوكوالت مخطط البيانات "‪."datagram protocols‬‬
‫بروتوكوالت ‪ stack‬األخرى تستخدم بروتوكول شبكة االتصال الخاصة بها‪ .‬على سبيل المثال‪ IPX/SPX ،‬المقدمه من شركة ‪ Novel‬هي‬
‫مجموعة من البروتوكوالت التي تتكون من‪ ،SAP ،NCP ،SPX ،IPX ، NLSP‬وغيرها‪.‬‬
‫البروتوكوالت الفردية ليست بالضرورة ان تكون تنتمي إلى كومة من بروتوكول "‪ "protocol stack‬واحد‪ .‬عمليا جميع طبقات التطبيقات‬
‫"‪ "application‬و‪ channel‬للبروتكول تنتمي إلى المكدس ‪ TCP/IP‬من خالل االتفاقية‪ ،‬ألنها يمكن أن تعمل مع أكوام البروتوكول‬
‫األخرى‪.‬‬
‫يستند مكدس ‪ TCP/IP‬على نظام تفاعل البروتوكول متعدد الطبقات ‪. TCP/IP‬نموذج ‪ TCP/IP‬ينقسم الى أربع طبقات‪ :‬طبقة التطبيقات‪،‬‬
‫طبقة النقل‪ ،‬طبقة اإلنترنت‪ ،‬وطبقة واجهة الشبكة‪.‬‬
‫اقترحت المنظمة الدولية للمعايير )‪ (ISO‬الخاصة بنموذج عالمي خاص بالبروتوكول لها‪ ،‬وتسمى ‪ .OSI Model‬هذا النموذج‪ ،‬ومع ذلك‪ ،‬لم‬
‫يتم استخدامه ويخدم فقط كمعيار لتصنيف ومقارنة مداخن البروتوكول‪ .‬يبين الشكل التالي التعيين التقريبي للطبقات في المكدس ‪ ،TCP/IP‬مع‬
‫بعض من بروتوكوالتها‪ ،‬مع نموذج ‪.OSI‬‬

‫‪RFC as the Main Source of Information‬‬


‫يتم نشر معايير البروتوكوالت في ‪ TCP/IP‬واألعمال الداخلية المتعلقة باإلنترنت في سلسلة من الوثائق المرقمة بشكل فريد‪ ،‬أو ‪.RFC‬‬
‫‪ RFC‬ال يتم تحديثها أبدا‪ .‬إذا كانت هناك تغيرات مطلوبة‪ ،‬فانه يتم نشرها في مراجع ‪ RFC‬جديدة وتنقسم إلى الفئات التالية‪:‬‬
‫‪ -‬الوثائق األساسية )‪ (Standard (STD) documents‬والتي تنشر بروتوكوالت اإلنترنت التي خضعت للفحص واالختبار من‬
‫قبل فريق عمل هندسة اإلنترنت وتم قبولها رسميا باسم ‪.standards‬‬
‫‪ -‬وثائق المعلومات )‪ (For Your Information (FYI) documents‬وهي مواد تمهيدية وإعالمية موجهة للجمهور العام‪.‬‬
‫‪ -‬وثائق )‪ Best Current Practice (BCP‬تصف اإلجراءات والتوصيات المقبولة المتعلقة باستخدام تكنلوجيا اإلنترنت‪.‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪114‬‬

‫كل واحد من هذه السلسلة المدرجة لديها ترقيم وثيقة خاصة بها‪ .‬في كثير من األحيان‪ ،‬يمكن تضمين الوثيقة نفسها في سلسلة مختلفة تحت أرقام‬
‫مختلفة‪ .‬على سبيل المثال‪ ،RFC 3066 ،‬وهو معروف ب "‪ ،"Tags for the Identification of Languages‬معروفه أيضا ب ‪ .BCP 47‬يمكنك‬
‫الحصول على ‪ RFC‬من مصادر مختلفة‪ ،‬يمكنك ان تبدأ من خالل ‪ http://www.faqs.org/rfcs‬أو ‪.http://www.rfc-editor.org‬‬
‫هذين الموردين هما لتبادل وثائق ‪ .RFC‬كال الموقعين تقدم منشأة سهل االستخدام للبحث في المحتويات بالمفردات‪ ،‬وهو مفيد إذا كنت ال‬
‫تعرف عدد ‪ RFC‬التي تحتاج إليها‪ .‬يمكنك أيضا تحميل ‪ RFC index‬كامل منهم‪.‬‬

‫‪" Packets and Encapsulation‬الحزم والتغليف"‬


‫يتم إرسال البيانات عبر الشبكة على هيئة حزم "‪ ،"packet‬والتي يتم تحديد حد الحجم األقصى من قبل طبقة البيانات "‪."data-link layer‬‬
‫وتتكون كل حزمه "‪ "packet‬من الرأس "‪ "header‬والجسم‪ ،‬أو ببساطة البيانات‪ .‬الرأس "‪ "header‬يحتوي على بيانات الخدمة المختلفة‪،‬‬
‫على سبيل المثال‪ ،‬مصدر الحزمة والوجهة‪ .‬الجسم هي البيانات التي يجب إرسالها‪.‬‬
‫تتم تسمية كتل البيانات التي يتم نقلها بشكل مختلف اعتمادا على طبقة معينة في ‪ TCP/IP‬وبروتوكول النقل المستخدم سواء ‪ datagram‬أو‬
‫‪( stream‬انظر الشكل التالي)‪.‬‬

‫في هذا الكتاب‪ ،‬فأننا في الغالب سوف نستخدم المصطلح العالمي الحزمة "‪."packet‬‬
‫يتم بناء الحزمة من أعلى طبقة وتسير الى أسفل مكدس البروتوكول‪ .‬وتضيف كل طبقة الرأس "‪ "header‬الخاصة بها إلى الحزمة‪ .‬وهكذا‪،‬‬
‫الحزمة‪ ،‬تتكون من الجسد‪/‬الحمولة والرأس‪ ،‬من الطبقة السابقة لتصبح الحمولة في الحزمة في الطبقة التالية‪ .‬وتسمى هذه العملية بالتغليف‬
‫"‪ ."encapsulation‬بعد اكتمال الحزمة‪ ،‬يتم إرسالها من قبل الطبقة المادية إلى العقدة الوجهة "‪ ،"destination node‬حيث يتم تفكيك‬
‫البيانات المغلفة في ترتيب عكسي‪ .‬انظر في المثال السابق‪.‬‬
‫إذا اراد المستخدم استعراض وليكن‪ ،‬على سبيل المثال‪ ،‬صفحة ‪ http://www.example.com‬على شبكة اإلنترنت فان هذا العنوان يدخل‬
‫في نافذة عنوان المتصفح وتضغط مفتاح <‪ .>ENTER‬البروتوكول (‪ HTTPvl.l ،HTTP‬تم تعريفه في ‪ )RFC 2068‬وهو المسؤول‬
‫عن التفاعل وتبادل المعلومات بين الخادم ومستعرض الويب‪ ،‬وفقا لمواصفات هذا البروتوكول فان مستعرض الويب يشكل الطلب التالي‪:‬‬
‫‪GET / HTTP/l. l \ r \n‬‬
‫‪Host: www.example.com\r\n\r\n‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪115‬‬

‫(عادة يحمل المتصفح المزيد من البيانات في الطلب‪ ،‬ولكن إلبقاء االمور بسيطة تظهر فقط البيانات األساسية)‪.‬‬
‫ثم بعد ذلك يتم تمرير هذه الكتلة من البيانات إلى طبقة النقل "‪ ."transport layer‬وفقا ل ‪ HTTP ،RFC 2068‬يتطلب نقل بيانات موثوق‬
‫بها؛ وبالتالي‪ ،‬يتم إضافة رأس ‪ TCP‬إلى كتلة البيانات في طبقة النقل "‪ ."transport layer‬يحدد في رأس ‪ "TCP Header" TCP‬رقم‬
‫منفذ الوجهة (عادة‪ ،‬المنفذ ‪ ،)12‬ورقم منفذ المصدر‪ ،‬وغيرها من المعلومات‪ .‬الهيكل التفصيلي لرأس ‪ TCP‬والرؤوس األخرى سوف نشرحه‬
‫في الجزء التالي‪ .‬طبقة النقل "‪ "transport layer‬تمرر الحزمة إلى طبقة اإلنترنت "‪ ،"Internet layer‬وهو ما يضيف المعلومات‬
‫الخاص به‪ ،IP header ،‬إليها‪ .‬يحتوي الرأس على عناوين ‪ IP‬المصدر والوجهة‪ ،‬وكذلك غيرها من المعلومات‪ .‬إذا كان اسم الدومين للملقم‬
‫(‪ )www.example.com‬فانه ال يمكن تحليله إلى عنوان ‪ IP‬المقابل باستخدام موارد الكمبيوتر المحلي‪ ،‬ولكن يتم ذلك عن طريق تقديم طلب‬
‫إلى ملقم ‪ .DNS‬من طبقة اإلنترنت "‪ ،"Internet layer‬يتم إرسال الحزمة إلى طبقة الوصول إلى الشبكة "‪."Network Interface Layer‬‬
‫نوع الرأس التي تضاف هنا في هذه الطبقة يعتمد على نوع الشبكة‪ .‬يتم إضافة رأس إيثرنت "‪ "Ethernet header‬لشبكة إيثرنت المحلية (كما‬
‫هو الحال في المثال)‪ ،‬يتم إضافة رأس ‪ FDDI header‬لشبكة األلياف الضوئية "‪ ،"fiber distributed data interface network‬يتم‬
‫إضافة رأس ‪ PPP‬لمودم ذات اتصال من نقطة إلى نقطة‪ ،‬وهكذا‪.‬‬
‫يحتوي رأس إيثرنت "‪ "Ethernet header‬على العنوان المادي للمصدر والوجهة‪ ،‬أو عناوين ‪ .MAC‬يتم تحديد عنوان ‪ MAC‬الوجهة من‬
‫خالل البحث في ذاكرة التخزين المؤقت ‪ ARP‬من الكمبيوتر المحلي‪ .‬إذا لم يتم العثور على عنوان ‪ MAC‬في ذاكرة التخزين المؤقت ‪ARP‬‬
‫المحلي‪ ،‬يتم تشكيل طلب ‪ ARP‬للبحث عن عنوان الوجهة ‪ MAC‬من عنوان ‪ IP‬الوجهة‪.‬‬
‫عندما يتم تجميع الحزم بالكامل‪ ،‬فانه يتم إرسالها الى الشبكة‪ .‬ألن في طريق الحزمة قد يتم تمريرها بين الشبكات المختلفة‪ ،‬فانه قد يتغير رأس‬
‫طبقة البيانات "‪ "data link layer‬من قبل أجهزة الراوتر التي يعبر من خاللها‪ .‬وعالوة على ذلك‪ ،‬قد تكون الحزمة مجزأة إلى حزم أصغر‬
‫حيث ان القيود تجعل نقل الحزمة بالكامل مستحيلة‪.‬‬
‫عند وصول الحزمة الى الملقم‪ ،‬يتم تكرار التسلسل السابق من العمليات التي تقوم بها مكدس ‪ TCP/IP‬لملقم ولكن بترتيب عكسي‪ .‬أوال‪ ،‬يتم‬
‫فحص رأس طبقة وصلة البيانات‪ ،‬وإذا كان عنوان الجهاز هو الصحيح‪ ،‬يتم إزالة رأس طبقة وصلة البيانات‪ .‬يتم إرسال باقي الحزمة إلى طبقة‬
‫االنترنت‪ .‬طبقة اإلنترنت تقوم بالتحقق من عنوان ‪ ،checksum ،IP‬وغيرها من البيانات‪ .‬وإذا كان كل الفحوصات ناجحة‪ ،‬فإنه يزيل رأس‬
‫‪ IP‬ويمرر بقية الحزمة إلى طبقة النقل‪ .‬طبقة النقل يتحقق من منفذ الوجهة‪ ،checksum ،‬وحقول رأس ‪ TCP‬األخرى؛ إذا كان كل‬
‫الفحوصات ناجحة‪ ،‬تتم إزالة رأس ‪ TCP‬ويتم تمرير الجزء المتبقي من الحزمة إلى طبقة التطبيقات إلى ملقم الويب‪ .‬يفحص ملقم الويب طلب‬
‫‪ HTTP‬ويعد جوابا ‪ .HTTP‬الجواب سيكون إما الصفحة المطلوبة أو رسالة خطأ إذا كانت الصفحة ال يمكن العثور عليه‪ .‬الجواب يذهب‬
‫خالل مكدس ‪ TCP/IP‬من الخادم بالتزامن مع الطلب ليمر من خالل مكدس ‪ TCP/IP‬العميل‪.‬‬

‫‪Network Packet Header Structures 1.1‬‬


‫لتكون قادر على العمل مع حقول الراس لحزمة الشبكة‪ ،‬يجب أن يقوم البرنامج بتحديد الهياكل الالزمة "‪ ."structure definitions‬لينكس‬
‫يقوم بتخزين الهيكل التعريفى "‪ "structure definitions‬لكل حزم الشبكة الرئيسية في ملفات الرأس "‪ "header file‬الفردية‪ ،‬والتي يمكن‬
‫إدراجها في البرنامج عند الضرورة‪ .‬ما هو أكثر من ذلك‪ ،‬إنه يتم تخزين مجموعة منفصلة من هذه الملفات في اثنين من المسارات المختلفة‪.‬‬
‫المسار األول هو ‪ /usr/include/linux‬ويستخدم في نظام لينكس فقط‪ .‬المسار اآلخر هو ‪ /usr/include/netinet‬ويستخدم عمليا في‬
‫جميع توزيعات ‪ .UNIX‬يتم تخزين بعض من ملفات الرأس ألنظمة يونكس أيضا في ‪./usr/include/net‬‬
‫فيما يلي بعض من األمثلة لملفات الراس من المجلد لينكس‪:‬‬
‫>‪#include <linux /ip.h‬‬
‫>‪#include <linux/tcp.h‬‬
‫>‪#include <linux/udp.h‬‬
‫>‪#include <linux/icmp.h‬‬
‫>‪#include <linux/if_ether.h‬‬
‫نالحظ هنا ان أسماء رؤوس الملفات "‪ "file header‬تصف وظيفتها‪ .‬على سبيل المثال‪ ،‬يحتوي ملف ‪ udp.h‬تعريفا لهيكل ‪،UDP header‬‬
‫و‪ if_ether.h‬يحتوي على تعاريف هياكل ‪ ،Ethernet header‬والملفات ‪ icmp.h‬تحتوي على تعاريف هياكل ‪.ICMP header‬‬
‫هناك وسيلة أفضل من إضافة ملفات الرأس القياسية في البرنامج‪ ،‬والتي تمارس من قبل الكثير من المبرمجين‪ :‬وهي ان ال تشمل هياكل ملفات‬
‫الرأس القياسية ولكن بدال من ذلك نقوم بتحديد الهياكل لكل حزمة لشبكة االتصال الخاصة بك في البرنامج‪ .‬ويمكن القيام بذلك ببساطة عن‬
‫طريق نسخ الهياكل الالزمة من ملفات الرأس القياسية وتعديل أسماء الحقول في هياكل الناتج إذا رغبت في ذلك‪ .‬ويمكن أيضا أن يتم تخزين‬
‫الهياكل المخصصة في ملف الرأس المخصص‪ ،‬والتي يتم بعد ذلك تضمينها في البرنامج‪ .‬يوفر هذا األسلوب قابلية كاملة‪ ،‬ألنه يلغي االعتماد‬
‫على ملفات رأس النظام‪ .‬كما أن لديها عيب صغير‪ :‬هي انها مملة جدا‪ ،‬وخاصة إذا كان لديك تحديد عدد ال بأس به من الهياكل في البرنامج‪.‬‬
‫األقسام الفرعية التالية تعطي وصفا مختصرا ألهم تنسيقات حزم شبكة االتصال األساسية‪ .‬أيضا‪ ،‬يتم إعطاء تعريفات لهيكل رأس حزم الشبكة‪،‬‬
‫والتي يمكنك استخدامها في البرامج الخاصة بك كأنها هياكل مخصصة خاصة بك‪ .‬ال يتم إعطاء أوصاف للحقول؛ يمكنك معرفة تلك الموجودة‬
‫في ‪ .RFC‬وتقدم سوى بعض المعلومات المحددة الالزمة للبرمجة‪.‬‬
‫تستند هياكل الرأس على الهياكل في ملفات الرأس في المسار ‪ /usr/include/linux‬ولكنها ليست نسخهم بالضبط‪.‬‬

‫رأس االيثرنت "‪"Ethernet Header‬‬


‫يبين الشكل التالي شكل حزمة إيثرنت‪ ،‬والتي تعرض تعريف هيكل رأس اإليثرنت‪.‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪116‬‬

‫وفيما يلي بعض من الثوابت والتعاريف المأخوذة من ملف الرأس ‪ ،/linux/if_ether.h‬والتي يمكنك استخدامها في البرامج الخاصة بك‪:‬‬

‫راس ‪"IP Header" IP‬‬


‫يبين الشكل التالي شكل حزمة ‪ ،IP‬ويعرض تعريف هيكل رأس ‪.IP‬‬

‫األعالم "‪ "flags‬الفردية في رأس ‪ ،IP‬تقع في الحقل ‪ frag_off‬من الهيكل‪ ،‬ويمكن الوصول إليها مع مساعدة من ‪ bit operation‬في هذا‬
‫الحقل وتعريفات الماكرو التالية‪:‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪117‬‬

‫وفيما يلي بعض الثوابت والتعاريف المأخوذة من ملف الرأس‪ ،‬والتي يمكنك استخدامها في البرامج الخاصة بك‪:‬‬

‫‪ARP Header‬‬
‫يبين الشكل التالي شكل حزمة ‪ ،ARP‬ويعرض تعريف هيكل رأس ‪.ARP‬‬

‫وفيما يلي بعض الثوابت والتعاريف المأخوذة من ملف الرأس ‪ ،/linux/if_arp.h‬والتي يمكنك استخدامها في البرامج الخاصة بك‪:‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪118‬‬

‫شكل حزمة ‪ RARP‬وهيكل رأس ‪ RARP‬متطابق تقريبا لحزمة ‪ ARP‬تلك‪ ،‬والفرق الوحيد هو قيمة الحقل ‪.Operation Code‬‬
‫الحظ النقاط المهمة التالية‪ .‬في تعاريف هياكل رأس ‪ ARP‬في ملفات الرأس‪ ،‬اخر أربع حقول موجودة بين ‪ #if 0‬و ‪ #endif‬هي تعليمات‬
‫المعالج‪ .‬وهذا هو‪ ،‬يحظر الوصول إلى هذه الحقول‪ .‬وهذا هو الحال بالنسبة ل ‪ ./linux/if_arp.h‬ولذلك‪ ،‬باستخدام هذه الحقول في البرنامج‬
‫سيولد خطأ بالنسبة للمترجم‪ .‬الطريقة الوحيدة الستخدام هذه الحقول هي تحديد هيكل رأس ‪ ARP‬خاص بك‪ .‬أسهل طريقة للقيام بذلك هو‬
‫ببساطة نسخ شفرة المصدر من قائمة ‪.ARP‬‬

‫‪TCP Header‬‬
‫يبين الشكل التالي شكل حزمة ‪ ،TCP‬ويعرض تعريف هيكل رأس ‪.TCP‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪119‬‬

‫‪UDP Header‬‬
‫يبين الشكل التالي شكل حزمة ‪ ،UDP‬ويعرض تعريف هيكل رأس ‪.UDP‬‬

‫‪ICMP Header‬‬
‫يبين الشكل التالي شكل حزمة ‪ ،ICMP‬ويعرض تعريف هيكل رأس ‪.ICMP‬‬

‫وفيما يلي بعض الثوابت والتعاريف المأخوذة من ملف الرأس ‪ ،/linux/icmp.h‬والتي يمكنك استخدامها في البرامج الخاصة بك‪:‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪120‬‬

‫يعرض الجدول التالي قائمه باألنواع الرئيسية من رسائل ‪.ICMP‬‬


‫‪Type‬‬ ‫‪Code‬‬ ‫‪Message‬‬
‫‪0‬‬ ‫‪0‬‬ ‫‪Echo reply‬‬
‫‪3‬‬ ‫‪Destination unreachable, because:‬‬
‫‪0‬‬ ‫‪Net is unreachable.‬‬
‫‪1‬‬ ‫‪Host is unreachable.‬‬
‫‪2‬‬ ‫‪Protocol is unreachable.‬‬
‫‪3‬‬ ‫‪Port is unreachable.‬‬
‫‪4‬‬ ‫‪Fragmentation is needed and DF = 1. Sent by an IP router when a packet must be‬‬
‫‪fragmented but fragmentation is not allowed.‬‬
‫‪5‬‬ ‫‪Source route failed.‬‬
‫‪4‬‬ ‫‪0‬‬ ‫‪Source quench. Informs a sending host that its IP datagrams are being dropped because of‬‬
‫‪congestion at the router to make it lower its transmission rate.‬‬
‫‪5‬‬ ‫‪Redirect. Informs a sending host of a better route to a destination IP address to:‬‬
‫‪0‬‬ ‫‪The given network‬‬
‫‪1‬‬ ‫‪The given host‬‬
‫‪2‬‬ ‫)‪The given network with the given Type of Service (TOS‬‬
‫‪3‬‬ ‫‪The given host with the given TOS‬‬
‫‪8‬‬ ‫‪0‬‬ ‫‪Echo request‬‬
‫‪9‬‬ ‫‪0‬‬ ‫‪Router advertisement‬‬
‫‪10‬‬ ‫‪0‬‬ ‫‪Router solicitation‬‬
‫‪11‬‬ ‫‪Time exceeded during the following:‬‬
‫‪0‬‬ ‫‪Transmission‬‬
‫‪1‬‬ ‫‪Assembly‬‬
‫‪12‬‬ ‫‪Parameter problem:‬‬
‫‪0‬‬ ‫‪IP header error‬‬
‫‪1‬‬ ‫‪A necessary option is missing‬‬
‫‪13‬‬ ‫‪0‬‬ ‫‪Timestamp request‬‬
‫‪14‬‬ ‫‪0‬‬ ‫‪Timestamp reply‬‬
‫‪17‬‬ ‫‪0‬‬ ‫‪Address mask request‬‬
‫‪18‬‬ ‫‪0‬‬ ‫‪Address mask reply‬‬

‫‪Sockets 1.1‬‬
‫‪ Socket‬هذا المصطلح بالعربية يعني المقبس‪ ،‬يقوم بالربط بين شيئين بشكل عام‪ .‬السوكيت "‪ "socket‬هي وسيلة معيارية ألداء اتصاالت‬
‫الشبكة بين التطبيقات من خالل نظام التشغيل‪ .‬يمكن اعتبار ‪ socket‬باعتباره نقطة النهاية لالتصال‪ ،‬مثل ‪ socket‬في لوحة مشغل السويتش‪.‬‬
‫ولكن هذه ‪ socket‬هي مجرد برنامج يعتني بكل التفاصيل الدقيقة من طراز ‪ OSI‬كما هو موضح أعاله‪ .‬بالنسبة للمبرمجين‪ socket ،‬يمكن‬
‫استخدامها إلرسال أو استقبال البيانات عبر الشبكة‪ .‬تبث هذه البيانات في طبقة الجلسة ‪ ،)1( session layer‬حيث ان كل ما هو فوق الطبقات‬
‫السفلى "‪( "lower layer‬تمت معالجته بواسطة نظام التشغيل)‪ ،‬والتي تأخذ الرعاية من الراوتر‪ .‬في األصل هناك عدة أنواع من ‪socket‬‬
‫ومنها ‪ ،X.25 Sockets ،unix socket ،internet socket‬وأنواع أخرى‪ .‬ما يهمنا هنا هو ‪ Internet socket‬وهو االخر له أنواع‬
‫مختلفة والتي تحدد هيكل طبقة النقل "‪ .)1("transport layer‬األنواع األكثر شيوعا هي ‪ stream sockets‬و‪.datagram sockets‬‬
‫يوفر ‪ stream sockets‬اتصال موثوق في اتجاهين يشبه الى حد ما عند قيامك بمهاتفة شخص ما على الهاتف‪ .‬جانب واحد يبدأ االتصال إلى‬
‫األخر‪ ،‬وبعد تأسيس االتصال‪ ،‬يمكن للجانبين التواصل مع بعضهما البعض‪ .‬وباإلضافة إلى ذلك‪ ،‬هناك تأكيد فوري أن ما قلته فعال وصل إلى‬
‫وجهته‪ Stream sockets .‬يستخدم بروتوكول اتصال يسمى )‪ ، Transmission Control Protocol (TCP‬والتي وجدت في طبقة‬
‫النقل (‪ )1‬من نموذج ‪ .OSI‬على شبكات الكمبيوتر‪ ،‬عادة ما تنتقل البيانات في قطع تسمى الحزم‪ .‬تم تصميم ‪ TCP‬بحيث يقوم بنقل حزم‬
‫البيانات دون أخطاء وبالتسلسل‪ ،‬مثل الكلمات التي تصل الى الطرف اآلخر في الترتيب عندما تتحدث على الهاتف‪ .‬مزودات الويب‪ ،‬خدمة‬
‫البريد‪ ،‬وتطبيقاتها العميل جميعها تقوم باستخدام ‪ TCP‬و‪ Stream sockets‬لالتصال‪.‬‬
‫آخر نوع شائع من ‪ socket‬هو ‪ .datagram sockets‬التواصل مع ‪ datagram sockets‬يشبه كثيرا ارسال رسالة بريدية من إجراء‬
‫مكالمة هاتفية‪ .‬حيث ان االتصال في اتجاه واحد فقط وال يمكن االعتماد عليه‪ .‬إذا كان البريد عباره عن عدة رسائل‪ ،‬ال يمكنك أن تتأكد من أن‬
‫يصلوا بنفس الطلب الى النظام‪ ،‬أو حتى أن يصلوا إلى وجهتهم على اإلطالق‪ .‬الخدمة البريدية موثوقة جدا‪ Datagram sockets .‬تستخدم‬
‫بروتوكول قياسي آخر يسمى ‪ UDP‬بدال من ‪ TCP‬على طبقة النقل (‪ UDP .)1‬هو بروتوكول ‪ ،User Datagram Protocol‬مما يعني‬
‫أنه يمكن استخدامه إلنشاء بروتوكوالت مخصصة‪ .‬هذا البروتوكول هو أساسي جدا وخفيف الوزن‪ ،‬مع عدد قليل من الضمانات المبنية فيه‪.‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪121‬‬

‫انها ليس اتصال حقيقي‪ ،‬ولكنها مجرد طريقة أساسية إلرسال البيانات من نقطة واحدة إلى أخرى‪ .‬مع ‪ ،datagram sockets‬هناك مقدار‬
‫حمل قليل جدا في البروتوكول‪ ،‬ولكن البروتوكول ال يفعل الكثير‪ .‬إذا احتاج البرنامج التأكد من أن الحزمة تم استقبالها في الجانب اآلخر‪،‬‬
‫فيجب ترميز الجانب اآلخر لحزمة ‪ acknowledgment‬وارجاعها الى المرسل‪ .‬في بعض الحاالت فقدان الحزم مقبول‪.‬‬
‫تستخدم ‪ datagram sockets‬و‪ UDP‬عادة في األلعاب الشبكية وتدفق وسائل االعالم‪ ،‬حيث يمكن للمطورين خياط اتصاالتهم بالضبط‬
‫حسب الحاجة من دون الحمل المدمج في ‪.TCP‬‬

‫‪" Socket Functions‬دوال المقبس المستخدمة"‬


‫في ‪ Socket ،C‬يملك الكثير من الملفات التي تستخدم ‪ file descriptors‬لتعريف أنفسها‪ Socket .‬تتصرف مثل الكثير من الملفات التي‬
‫يمكنك فعال استخدام )(‪ read‬و )(‪ write‬معها الستقبال وإرسال البيانات باستخدام واصفات الملف "‪ "file descriptors‬ل ‪ .socket‬ومع‬
‫ذلك‪ ،‬هناك عدة دوال مصممة خصيصا للتعامل مع ‪ .socket‬هذه الدوال لديها نماذجها التي حددت في ‪./usr/include/sys/sockets.h‬‬
‫)‪socket(int domain, int type, int protocol‬‬
‫تستخدم هذه الداله إلنشاء ‪ socket‬جديده‪ ،‬ثم يعود بواصف الملف "‪ "file descriptors‬ل ‪ socket‬أو ‪ -1‬في حالة الخطأ‪ .‬هذه الداله ليست فقط‬
‫مجرد ‪ stock‬ولكنها أيضا تمكن الوصول إلى بروتوكوالت معينة في طبقة ‪ .TCP/IP stack layer‬اعتمادا على طبقة معينة‪ ،‬يتم إعطاء‬
‫‪ socket‬أسماء مختلفة‪.‬‬
‫)‪connect(int fd, struct sockaddr *remote_host, socklen_t addr_length‬‬
‫يستخدم لربط ‪( socket‬يتم وصفه بواسطة ‪ )file descriptor fd‬بالمضيف عن بعد "‪ ."remote host‬يعود بالقيمة ‪ 1‬في حالة النجاح‬
‫والقيمة ‪ 1‬في حالة الخطأ‪.‬‬
‫)‪bind(int fd, struct sockaddr *local_addr, socklen_t addr_length‬‬
‫يستخدم لربط ‪( socket‬يتم وصفه بواسطة ‪ )file descriptor fd‬بالعنوان المحلى‪ .‬لذلك يمكنه االستماع لكل االتصاالت القادمة‪ .‬يعود‬
‫بالقيمة ‪ 1‬في حالة النجاح والقيمة ‪ 1‬في حالة الخطأ‪ .‬هذه الدالة تحتاج لتعبئة ‪ struct‬خاص بها يحتوي على معلومات االتصال الذي تريد‬
‫انشاؤه (العنوان ‪-‬البورت ‪-‬ونوع االتصال)‪.‬‬
‫)‪listen(int fd, int backlog_queue_size‬‬
‫يستخدم لالستماع لالتصاالت الواردة وقوائم االنتظار لطلبات االتصال حتى ‪ .backlog_queue_size‬يقوم بإرجاع ‪ 2‬في حاله النجاح و‪-1‬‬
‫في الخطأ‪.‬‬
‫)‪accept(int fd, sockaddr *remote_host, socklen_t *addr_length‬‬
‫هذا يقبل االتصال الوارد على ‪ .bound socket‬يتم كتابة عنوان المضيف البعيد في هيكل ‪ REMOTE_HOST‬ويكتب الحجم الفعلي‬
‫لبنية العنوان في ‪ .*addr_length‬هذه الدالة تقوم بإرجاع واصف ملف ‪ socket‬الجديد للتعرف على اتصال ‪ socket‬أو ‪ -1‬في الخطأ‪.‬‬
‫)‪send(int fd, void *buffer, size_t n, int flags‬‬
‫يقوم بإرسال ‪ n bytes‬من ‪ *buffer‬الى ‪.socket fd‬‬
‫)‪recv(int fd, void *buffer, size_t n, int flags‬‬
‫يقوم باستقبال ‪ n bytes‬الى ‪ *buffer‬من ‪.socket fd‬‬

‫‪Socket Connections‬‬
‫أوال‪ ،‬تطبيق الخادم يقوم بإنشاء ‪ ،socket‬مثل ‪ file descriptor‬وهو مورد مخصص لعملية الخادم وتلك العملية وحدها‪ .‬الخادم ينشأ ذلك‬
‫باستخدام ‪ ،system call socket‬وال يمكن أن تكون مشتركة مع العمليات األخرى‪.‬‬
‫بعد ذلك‪ ،‬عملية الخادم يعطي ‪ socket‬اسما‪ Local Socket .‬لها اسم ملف في نظام ملفات لينكس‪ ،‬وغالبا ما يمكن العثور عليها في ‪/tmp‬‬
‫أو ‪ ،Internet Socket ./usr/tmp‬سوف يكون اسم الملف معرف الخدمة (رقم المنفذ‪/‬نقطة الوصول) ذات الصلة بشبكة معينة التي يمكن‬
‫للعمالء االتصال‪ .‬هذا المعرف يسمح للينكس توجيه االتصاالت الواردة من رقم منفذ خاص الى عملية الخادم الصحيحة‪ .‬على سبيل المثال‪،‬‬
‫خادم الويب عادة ما يخلق ‪ socket‬على المنفذ ‪ ،12‬المعرف محفوظ لهذا الغرض‪ .‬متصفحات الويب معرفه الستخدام المنفذ ‪ 12‬التصاالت‬
‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪122‬‬

‫‪ HTTP‬لمواقع الويب الذي يريد المستخدم أن يقرأها‪ .‬يتم ‪ named socket‬باستخدام )(‪ .bind‬ثم تنتظر عملية الخادم اتصال العميل مع‬
‫‪ .named socket‬النظام يقوم باستدعاء الداله‪ ،listen () ،‬والتي تقوم بإنشاء قائمة انتظار لالتصاالت الواردة‪ .‬يمكن للخادم ان يقبلهم‬
‫باستخدام الداله )( ‪.accept‬‬
‫عندما يستدعى الخادم الداله )( ‪ ،accept‬يتم إنشاء ‪ socket‬جديد الذي يختلف عن ‪ .named socket‬ويستخدم هذا ‪ socket‬الجديد فقط‬
‫للتواصل مع هذا العميل‪ .‬تبقى ‪ named socket‬للمزيد من اتصاالت العمالء اآلخرين‪ .‬إذا تم اعداد الخادم بشكل مناسب‪ ،‬فإنه يمكن االستفادة‬
‫من وصالت متعددة‪ .‬خادم الويب سوف يستفاد من القيام بذلك بحيث يمكن أن تخدم صفحات العديد من العمالء في وقت واحد‪ .‬في الخادم‬
‫بسيط‪ ،‬فان العمالء يكونوا في طابور انتظار االستماع حتى يكون الخادم على استعداد مرة أخرى‪.‬‬
‫جانب العميل من النظام القائم على ‪ socket‬هو أكثر وضوحا‪ .‬العميل ينشا ‪ unnamed socket‬بدعوة الداله )(‪ .socket‬ومن ثم استدعاء‬
‫الداله ‪ connect‬لتأسيس اتصال مع الملقم باستخدام ‪ named socket‬الخاص بالملقم كعنوان‪ .‬مرة اخرى‪ socket ،‬يمكن أن تستخدم مثل‬
‫‪.low-level file descriptors‬‬

‫‪sys/socket.h‬‬
‫;)‪int socket(int domain, int type, int protocol‬‬
‫عندما يتم إنشاء ‪ socket‬مع الداله )(‪ ،socket‬يجب تحديد المعامالت او الحجج ‪ ،type ،domain‬و‪ .protocol‬ولكن ما هي هذه الحجج؟‬
‫كما قلنا من قبل هناك أنواع عديده من ‪ ،socket‬وهذه تسمح لك لتقول ما نوع ‪ socket‬الذي تريده (‪ IPv4‬أو ‪ stream ،IPv6‬أو‬
‫‪ ،datagram‬و‪ TCP‬أو ‪( .)UDP‬ال‪ domain‬من الممكن ان يكون ‪ PF_INET6‬او ‪ ،PF_INET‬و‪ type‬قد يكون‬
‫‪ SOCK_STREAM‬أو ‪ ،SOCK_DGRAM‬و‪ protocol‬يمكن تعيين إلى ‪ 2‬الختيار البروتوكول المناسب المقابل لنوع معين‪ .‬أو يمكنك‬
‫استدعاء )(‪ getprotobyname‬للبحث عن البروتوكول الذى تريده‪ 'tcp' ،‬أو '‪ .)'udp‬المعامل ‪ domain‬يشير إلى ‪protocol family‬‬
‫المعرف فى ‪ .socket‬في حين ‪ Socket‬يمكن استخدامه في االتصال باستخدام مجموعة متنوعة من البروتوكوالت‪ ،‬من بروتوكول اإلنترنت‬
‫القياسي المستخدمة عند تصفح الويب لبروتوكوالت ‪ amateur radio protocols‬مثل ‪ .AX.25‬تم تعريف ‪ protocol family‬هذه في‬
‫‪ ،bits/socket.h‬والتي يتم تضمينها تلقائيا مع ‪.sys/socket.h‬‬
‫يمكن الوصول الى الملف ‪ sys/socket.h‬من خالل االمر ‪ find‬حيث ان مكانه يختلف في بعض التوزيعات كاالتي‪:‬‬

‫وعند النظر في هذا الملف مع أي محرر نصي وليكن ‪ cat‬لرؤية ‪ protocol family‬كاالتي‪:‬‬
‫‪#cat /usr/include/x86_64-linux-gnu/bits/socket.h | more‬‬

‫على سبيل المثال هذا الشيء ‪ PF_INET‬هو قريب من ‪ AF_INET‬التي يمكنك استخدامها عند تهيئة الحقل ‪ thesin_family‬في‬
‫‪ sockaddr_in‬في البنية الخاصة بك (سنتحدث عنه الحقا)‪ .‬في الواقع‪ ،‬أنهم فعال لهما نفس القيمة‪ ،‬والعديد من المبرمجين عند استدعاء‬
‫)(‪ socket‬يقوم بتمرير الحجه ‪ AF_INET‬بدال من ‪ .PF_INET‬لكن الشيء الصحيح هو استخدام ‪ AF_INET‬في بنية ‪sockaddr_in‬‬
‫الخاص بك و‪ PF_INET‬في استدعاء )(‪.socket‬‬
‫اردت توضيح ذلك الن عن سرد الملعومات من خالل صفحات ‪ man‬باستخدام االمر ‪ man socket‬نجد انه يخبرك باستخدام الحجج _‪AF‬‬
‫بدال من _‪.PF‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪123‬‬

‫ننتقل االن الى الحجة الثانيه ‪ .type‬وكما ذكرنا من قبل‪ ،‬هناك عدة أنواع من ‪ ،internet socket‬على الرغم من ان ‪stream sockets‬‬
‫و‪ datagram sockets‬هما األكثر شيوعا‪ .‬يتم تعرف أنواع ‪ socket‬أيضا في ‪ * /( ./bit/socket.h‬التعليق * ‪ /‬في التعليمات البرمجية‬
‫أعاله ليست سوى نمط آخر من التعليق)‪.‬‬

‫المعامل او الحجة االخير لدى الدالة )(‪ socket‬هى ‪ protocol‬والذي يجب أن يكون دائما ‪ .2‬حيث انه التحديد الذي يسمح ببروتوكوالت‬
‫متعددة داخل ‪ protocol family‬الواحد‪ ،‬بحيث يتم استخدام هذا المعامل الختيار بروتوكول واحد من ‪ .protocol family‬في الممارسة‬
‫العملية‪ ،‬ومع ذلك‪ ،‬فإن معظم ‪ protocol family‬لديهم سوى بروتوكول واحد‪ ،‬ويعني أن هذا عادة يتم تعيينها ل ‪2‬؛ البروتوكول األول‬
‫والوحيد في تعداد ‪ .protocol family‬هذا هو كل شيء سنفعله مع الداله )(‪ socket‬في هذا الكتاب‪ ،‬لذلك فإن هذا المعامل سيكون دائما ‪2‬‬
‫في األمثلة لدينا‪.‬‬
‫مثال على ذلك‪:‬‬
‫;‪int newsocket‬‬
‫;)‪newsocket = socket(PF_INET, SOCK_STREAM, 0‬‬
‫هذا المثال يقوم بإنشاء ‪ standard TCP socket‬لنقل البيانات إلى مضيف بعيد باستخدام ‪ .connection oriented stream‬إنشاء‬
‫‪ socket‬ليس النهاية حيث انه ال يعرف أين سيربط ‪ .socket‬والتي تأتي في وقت الحق‪.‬‬

‫‪Socket Addresses‬‬
‫بعد إنشاء ‪ socket‬يجب أن يتم ضم عنوان الشبكة‪/‬المنفذ له‪ .‬الطريقة التي يستخدمها ‪ Linux socket system‬فى استخدام عناوين ‪IP‬‬
‫ومنافذ ‪ TCP‬أو ‪ UDP‬هي واحدة من أكثر األجزاء المربكة لبرمجة الشبكة‪ .‬حيث يستخدم هيكل خاص في السي "‪ "C Structure‬للداللة‬
‫على معلومات العنوان‪ .‬وهو ‪.sockaddr‬‬
‫الهيكل ‪ sockaddr structure‬يحتوي على اثنين من العناصر‪:‬‬
‫‪ :"sa_family" .1‬وهو ‪ address family‬ويتم تعريفه كمتغير من النوع ‪.short‬‬
‫‪ :"sa_data" .1‬وهو عنوان الجهاز وتم تعريفه على انه متغير ‪ 11‬بايت‪.‬‬
‫يعرف هذا الهيكل أيضا في ‪ ،bits/socket.h‬كما هو مبين في الصورة التالية‪.‬‬

‫‪ -1‬تم تعريف الماكرو ‪ SOCKADDR_COMMON‬ليشير الى الملف ‪ ،bits/sockaddr.h‬والذي يترجم أساسا إلى‬
‫‪ .unsigned short int‬تحدد هذه القيمة ‪ address family‬للعنوان‪ ،‬وباقي الهيكل يتم حفظه من اجل بيانات العنوان‪ .‬في حين‬
‫ان ‪ socket‬يمكنه االتصال باستخدام مجموعة متنوعة من ‪ ،protocol families‬ولكل منها طريقته في تعريف عناوين نقطة‬
‫النهاية‪ ،‬يجب أيضا أن يكون تعريف العنوان متغير "‪ ،"variable‬وهذا يتوقف على ‪ .protocol families‬يتم تعريف‬
‫‪ address families‬الممكنة أيضا في ‪ .bits/socket.h‬وعادة ما يترجم مباشرة إلى ‪ protocol families‬المقابلة‪.‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪124‬‬

‫‪ -1‬تم تصميم العنصر ‪ sa_data‬للسماح لهيكل ‪ sockaddr‬لإلشارة الى العديد من األنواع المختلفة من عناوين الشبكة‪ .‬وبسبب هذا‪،‬‬
‫عنصر العنوان ‪ 11‬بايت من الصعب استخدامه مباشرة‪ .‬بدال من ذلك‪ ،‬يوفر لينكس بنية عنوان ‪ IP‬خاصه‪ ،sockaddr_in ،‬والذي‬
‫يستخدم العناصر التالية‪:‬‬
‫‪ :(SOCKADDR_COMMON( "sin_family" ‬وهو ‪.address families‬‬
‫‪ :"sin_port" ‬وهو عنوان المنفذ ذات نوع المتغير ‪.short‬‬
‫‪ :"sin_addr" ‬وهو العنوان (‪.)defined as a long type [4-byte] IP address‬‬
‫‪ :"sin_data" ‬وهو ‪ 1‬بايت من الحشو‪.‬‬
‫تم تعريف هذه البنية في ‪/usr/include/netinet/in.h‬‬

‫الجزء ‪ SOCKADDR_COMMON‬الموجود في الجزء العلوي من الهيكل هو ببساطه ‪ unsigned short int‬المذكورة‬ ‫‪-‬‬
‫أعاله‪ ،‬والذي يستخدم لتعريف ‪ .address family‬في حين ان ‪ socket endpoint address‬يتكون من عنوان اإلنترنت ورقم‬
‫المنفذ‪ ،‬وهذه هي القيم المقبلة في الهيكل‪ .‬رقم المنفذ هو ‪ ،16-bit short‬في حين أن الهيكل ‪ in_addr‬يستخدم من اجل عنوان‬
‫اإلنترنت التي تحتوي على عدد ‪ 11‬بت‪ .‬ما تبقى من الهيكل هو فقط ‪ 1‬بايت من الحشو لملء ما تبقى من هيكل ‪ .sockaddr‬ال يتم‬
‫استخدام هذا الفضاء لشيء‪ ،‬ولكن يجب أن يتم حفظ ذلك الهياكل لذلك يمكن ‪ typecast‬بالتبادل‪ .‬في نهاية المطاف‪ ،‬فإن هياكل‬
‫‪ socket address structures‬تبدو مثل هذا‪:‬‬

‫في حين ان العنوان يمكن أن يحتوي على أنواع مختلفة من المعلومات‪ ،‬وهذا يتوقف على ‪ ،address families‬فهناك العديد من الهياكل‬
‫األخرى التي تحتوي على العنوان‪ ،‬في مقطع بيانات العنوان "‪ ،"address data section‬هناك عناصر شائعه من الهيكل ‪ sockaddr‬بجانب‬
‫معلومات محددة ل ‪ .address family‬هذه الهياكل هي أيضا نفس الحجم‪ ،‬بحيث يمكن ‪ typecast‬من وإلى بعضها البعض‪ .‬وهذا يعني أن‬
‫دالة )( ‪ socket‬سوف تقبل ببساطة مؤشر إلى هيكل ‪ ،sockaddr‬والتي هي في الواقع نقطة إلى بنية عنوان ‪IPv4‬و‪ ،IPv6‬أو‪. X.25‬‬
‫وهذا يسمح لدوال ‪ socket‬العمل مع مجموعة متنوعة من البروتوكوالت‪.‬‬
‫في هذا الكتاب نحن بصدد التعامل مع بروتوكول اإلنترنت ‪ IP‬اإلصدار ‪ ،1‬الذي هو ‪ PF_INET‬من ‪ ،protocol family‬وذلك باستخدام‬
‫عنوان ‪ ."AF_INET" Address family‬يتم تعريف بنية عنوان السوكيت المواز ل ‪ AF_INET‬في الملف ‪.netinet/in.h‬‬
‫واحدة من المشاكل الكبيرة في اإلشارة الى العناوين والمنافذ في لينكس هو ‪.byte order‬‬

‫‪" Network Byte Order‬ترتيب بايت شبكي"‬


‫واحدة من المشاكل الكبيرة عند اإلشارة الى العناوين والمنافذ في لينكس هو ‪ .byte order‬وذلك بسبب اختالف ترتيب البايت من قبل األنظمة‬
‫في الطلبات المختلفة (‪ ،)high bit versus low bit first‬حيث ان اآللة يمكنها قراءة البيانات الخاصة به على ما يرام – ولكن المشكلة‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪125‬‬

‫تحدث عند يقوم كمبيوتر واحد بتخزين البيانات ويحاول كمبيوتر اخر قراءتها وكان حل هذه المشكلة هو استخدام صيغه ثابته‪ .‬لينكس تستخدم‬
‫مجموعه من الدوال لضمان قيم العناوين والمنافذ في شكل ثابت‪.‬‬
‫رقم المنفذ وعنوان ‪ IP‬المستخدم في هيكل ‪ AF_INETsocket address‬يتوقع منهم ان يتبعوا ترتيب بايت الشبكة‪ ،‬والتي هي ‪.big-endian‬‬
‫وهذا هو على عكس معالجات ‪ X86‬التي تستخدم ‪ little-endian‬في ترتيب البايت‪ ،‬لذلك يجب أن يتم تحويل هذه القيم‪ .‬هناك عدة دوال‬
‫وجدت خصيصا لهذه التحويالت‪ ،‬التي تم تعريفها في ‪ netinet/in.h‬و ‪.arpa/inet.h‬‬
‫‪ :Big endian machine -‬تعمل على تخزين البيانات ذات الحجم الكبير أوال لذلك عند النظر الى بايت متعدد‪ ،‬فان اول بايت‬
‫"‪ "lowest address‬هو األكبر‪.‬‬
‫‪ :little endian machine -‬تعمل على تخزين البيانات ذات الحجم االصغر أوال لذلك عند النظر الى بايت متعدد‪ ،‬فان اول بايت‬
‫هو االصغر‪.‬‬

‫فيما يلي ملخص لدوال التحويل هذه‪:‬‬

‫‪-‬‬ ‫‪htonl‬‬
‫‪(Long value) Host-to-Network Long‬‬
‫‪Converts a 32-bit integer from the host's byte order to network byte order‬‬
‫‪- htons‬‬
‫‪(Short value) Host-to-Network Short‬‬
‫‪Converts a 16-bit integer from the host's byte order to network byte order‬‬
‫‪- ntohl‬‬
‫‪(Long value) Network-to-Host Long‬‬
‫‪Converts a 32-bit integer from network byte order to the host's byte order‬‬
‫‪- ntohs‬‬
‫‪(Short value) Network-to-Host Short‬‬
‫‪Converts a 16-bit integer from network byte order to the host's byte order‬‬
‫من أجل التوافق مع جميع األبنية‪ ،‬ال يزال ينبغي استخدم دوال التحويل حتى إذا كان المضيف يستخدم معالج ‪.big-endian byte ordering‬‬

‫‪Internet Address Conversion‬‬


‫عندما ترى هذا ‪ ،11.112.112.121‬فإنك تعترف ان هذا عنوان اإلنترنت (‪ IP‬اإلصدار ‪ .)1‬هذه الرموز المنقطة مع االعداد هي وسيلة‬
‫شائعة لتحديد عناوين اإلنترنت‪ ،‬وهناك دوال لتحويل هذه الرموز من وإلى عدد صحيح ‪-11‬بت في ‪ .network byte order‬وتعرف هذه‬
‫الدوال في ‪ ،arpa/inet.h‬واثنين من دوال التحويل المفيدة للغاية هم‪:‬‬
‫)‪inet_aton(char *ascii_addr, struct in_addr *network_addr‬‬
‫‪ASCII to Network‬‬
‫هذه الداله تقوم بتحويل سلسلة ‪ ASCII‬التي تحتوي على عنوان ‪ IP‬في شكل االعداد مع النقط إلى بنية ‪ ،in_addr‬والتي‪ ،‬كما تذكرون‪،‬‬
‫يحتوي فقط على عدد صحيح ‪ 11‬بت التي تمثل عنوان ‪ IP‬في ‪ .network byte order‬هذه تعادل أيضا الداله )(‪.inet_addr‬‬
‫)‪inet_ntoa(struct in_addr *network_addr‬‬
‫‪Network to ASCII‬‬
‫هذه دالة تقوم بالتحويل في الطريق االخر‪ .‬حيث يتم تمرير المؤشر إلى بنية ‪ in_addr‬التي تحتوي على عنوان ‪ ،IP‬ومن ثم ترجع الدالة‬
‫المؤشر إلى سلسلة ‪ ASCII‬التي تحتوي على عنوان ‪ IP‬في شكل ‪ .dotted-number‬تقام هذه السلسلة في المخزن المؤقت الذاكرة‬
‫المخصصة بشكل ثابت لهذه الداله‪ ،‬لذلك يمكن الوصول إليها حتى بعد استدعاء )(‪ inet_ntoa‬التالية‪ ،‬عندما سيتم إعادة الكتابة فوق السلسلة‪.‬‬
‫إذا كان تمثيل عنوان ‪ IP‬في هيئة اسم المضيف‪ ،‬فيجب استخدام الدالة )( ‪ gethostbyname‬السترداد عنوان ‪ IP‬المرتبطة باسم المضيف‪.‬‬
‫;‪struct sockaddr_in myconnection‬‬
‫;))‪memset(&myconnection, 0, sizeof(myconnection‬‬
‫;‪myconnection.sin_family = AF_INET‬‬
‫;)‪myconnection.sin_port = htons(8000‬‬
‫;)”‪myconnection.sin_addr.s_addr = inet_addr(“192.168.1.1‬‬
‫يمكنك أيضا استخدام السطر التالي بدال من ‪.inet_addr‬‬
‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪126‬‬

‫;))‪inet_aton("192.168.1.1", &( myconnection.sin_addr‬‬


‫بعد إنشاء ‪ sockaddr_in‬باستخدام المتغير ‪ ،myconnection‬انها فكرة جيدة للتأكد من أن جميع العناصر ‪ ،zeroed out‬لذلك تم‬
‫استدعاء الداله )(‪ .memset‬بعد ذلك‪ ،‬يتم تحديد العناصر الفردية‪.‬‬
‫كال من ‪ inet_addr‬و )(‪ inet_aton‬يعمال فقط مع ‪ IPv4‬فقط‪ .‬لذلك يمكنك استخدام الداله )(‪ inet_pton‬مثل )(‪ inet_aton‬ولكنها‬
‫تستخدم مع ‪ IPv4‬و ‪.IPv6‬‬
‫‪struct sockaddr_in sa; // IPv4‬‬
‫‪struct sockaddr_in6 sa6; // IPv6‬‬
‫‪inet_pton(AF_INET, "192.0.2.1", &(sa.sin_addr)); // IPv4‬‬
‫‪inet_pton(AF_INET6, "2001:db8:63b3:1::3490", &(sa6.sin6_addr)); // IPv6‬‬
‫عند التحويل الى العكس نستخدم )(‪.inet_ntop‬‬
‫‪// IPv4:‬‬
‫‪char ip4[INET_ADDRSTRLEN]; // space to hold the IPv4 string‬‬
‫‪struct sockaddr_in sa; // pretend this is loaded with something‬‬
‫;)‪inet_ntop(AF_INET, &(sa.sin_addr), ip4, INET_ADDRSTRLEN‬‬
‫;)‪printf("The IPv4 address is: %s\n", ip4‬‬
‫‪// IPv6:‬‬
‫‪char ip6[INET6_ADDRSTRLEN]; // space to hold the IPv6 string‬‬
‫‪struct sockaddr_in6 sa6; // pretend this is loaded with something‬‬
‫;)‪inet_ntop(AF_INET6, &(sa6.sin6_addr), ip6, INET6_ADDRSTRLEN‬‬
‫;)‪printf("The address is: %s\n", ip6‬‬
‫وأخيراً‪ ،‬هذه الداالت تعمل فقط مع عناوين ‪ IP‬الرقمية – ولن تفعل أي بحث لخادم األسماء ‪ DNS‬على مضيف‪ ،‬مثل‬
‫'‪ .'www.example.com‬يمكنك استخدام )(‪ getaddrinfo‬للقيام بذلك‪ ،‬كما سترى الحقاً‪ .‬هذه الداله مثل الداله )(‪ gethostbyname‬في‬
‫االستخدام ولكن قد تم إهمالها بإدخال الدالة ‪ .getaddrinfo‬ويحث مجتمع المبرمجين على استخدام الدالة ‪ getaddrinfo‬بدالً من‬
‫‪ .gethostbyname‬وأيضا )(‪ getnameinfo‬تعادل )(‪ gethostbyaddr‬ولكنها احدث وافضل وتستخدم هي أيضا مع ‪.IPv6‬‬
‫اآلن بعد ان اصبحت تعرف كيفية تحديد عنوان ‪/IP‬المنافذ‪ ،‬ويمكنك أن تطابق ‪ socket‬إلى عنوان ‪ IP‬والبدء في نقل البيانات‪ .‬تستخدم واجهة‬
‫‪ socket‬دوال مختلفة اعتمادا على ما إذا كان ‪ socket‬هو ‪ connection-oriented‬أو ‪ .connectionless‬تصف المقاطع التالية كيفية‬
‫استخدام هاتين الطريقتين‪ .‬ولكن قبل هذا سوف نصف كيفية استخدام الداله )(‪ getaddrinfo‬والتي سوف تسهل علينا الكثير عند انشاء ‪.socket‬‬

‫!‪getaddrinfo()—Prepare to launch‬‬
‫هذا هو العمود الفقري الحقيقي مع الكثير من الخيارات‪ ،‬ولكن االستخدام بسيط جدا ً في الواقع‪ .‬يساعد في بناء الهياكل (‪ )struct‬التي سوف‬
‫تحتاجها فى وقت الحق‪ .‬انها مثل الدالة )(‪ gethostbyname‬التي كنت تستخدمها من قبل للقيام باستعالم ‪ .DNS‬ثم تقوم بتحميل المعلومات‬
‫إلى الهيكل ‪ sockaddr_in‬يدويا‪ ،‬واستخدام ذلك في االستدعاءات الخاصة بك‪.‬‬
‫هذا لم يعد ضروريا‪( ،‬وال مرغوبا‪ ،‬إذا كنت تريد كتابة التعليمات البرمجية التي تعمل مع كال من ‪ IPv4‬و‪ .)IPv6‬في هذه األزمنة الحديثة‪،‬‬
‫أصبح لديك اآلن الداله )(‪ getaddrinfo‬التي تقوم بجميع أنواع األشياء المفيده بالنسبة لك‪ ،‬بما في ذلك عمليات البحث عن اسم في خدمة‬
‫‪ ،DNS‬ومأل الهياكل "‪ "struct‬التي تحتاجها‪.‬‬

‫يمكنك إعطاء ثالثه من المعلمات او حجج الدخالها الى هذه الداله‪ ،‬والتي بعدها تعطيك مؤشر إلى قائمة من الراوبط‪ ،res ،‬كمؤشر الى النتائج‪.‬‬
‫المعلم ‪ node‬يشير الى اسم المضيف لالتصال‪ ،‬أو عنوان ‪ .IP‬المعلم التالي هي ‪ ،service‬والذي فيه يمكن ادراج رقم المنفذ‪ ،‬مثل '‪ ،'12‬أو‬
‫اسم خدمة معينة (توجد في الملف ‪ /etc/services‬على الجهاز ‪ )Unix‬مثل '‪ 'http‬أو '‪ 'ftp‬أو '‪ 'telnet‬أو '‪ 'smtp‬أو أيا كان‪ .‬وأخيراً‪،‬‬
‫المعلم ‪ hints‬تضع فيه ما يشير إلى الهيكل ‪ addrinfo‬والذي سبق تعبئته بالمعلومات ذات الصلة‪.‬‬
‫الهيكل ‪ addrinfo‬الذى يتم تعريفه من خالل ملف الراس ‪ ،netdb.h‬والمستخدم مع الداله )(‪ getaddrinfo‬كاالتى‪:‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ 127

‫ علما بأن هذا المثال في الواقع ال يفعل أي‬.1122 ‫ والمنفذ‬IP ‫انظر الى المثال التالى لخادم يريد االستماع الى المضيف الخاص بك على عنوان‬
:‫من االستماع أو اعداد الشبكة؛ ولكنه مجرد مثال يوضح طريقة إعداد الهياكل التى سوف تستخدم في وقت الحق‬
int status;
struct addrinfo hints;
struct addrinfo *servinfo; // will point to the results
memset(&hints, 0, sizeof hints); // make sure the struct is empty
hints.ai_family = AF_UNSPEC; // don't care IPv4 or IPv6
hints.ai_socktype = SOCK_STREAM; // TCP stream sockets
hints.ai_flags = AI_PASSIVE; // fill in my IP for me
if ((status = getaddrinfo(NULL, "3490", &hints, &servinfo)) != 0) {
fprintf(stderr, "getaddrinfo error: %s\n", gai_strerror(status));
exit(1);
}
// servinfo now points to a linked list of 1 or more struct addrinfos
// ... do everything until you don't need servinfo anymore ....
freeaddrinfo(servinfo); // free the linked-list
.IPv6 ‫ أو‬IPv4 ‫ وبالتالي فانه يقول انه ال يهمه إذا كان استخدام‬،AF_UNSPEC ‫ إلى‬ai_family ‫من المثال السابق نالحظ أنه تم تعيين‬
AI_PASSIVE ‫ سوف تشاهد‬،‫ أيضا‬.‫ إذا كنت تريد واحدة أو أخرى على وجه التحديد‬AF_INET6 ‫ أو‬AF_INET ‫يمكنك تعيينه إلى‬
‫ إذا كان هناك خطأ (يتم إرجاع‬.socket ‫ أن يقوم بتعيين عنوان المضيف المحلي إلى هياكل‬getaddrinfo() ‫هناك؛ والتي تقول ل‬
‫ إذا كان كل شيء يعمل بشكل‬.‫ كما ترون‬،gai_strerror() ‫ نحن يمكن طباعته باستخدام الداله‬،)‫ قيمه غير الصفر‬getaddrinfo()
!‫ من النوع التي يمكن أن نستخدمها في وقت الحق‬sockaddr ‫ كل منها يحتوي على بنية‬،servinfo ‫ فانه يتم ملء هيكل‬،‫صحيح‬
.freeaddrinfo() ‫ وبعد االنتهاء يمكنك تفريغها مع‬getaddrinfo() ‫ في نهاية المطاف بعد مل القائمة المرتبطة مع‬،ً‫أخيرا‬
:‫ وتكون صيغتها كاالتى‬،memset() ‫ الداله‬-
void * memset ( void *ptr, int value, size_t num);
.‫ هو مؤشر نحو قسم الذاكرة الذي نريد مأله‬:*ptr ‫حيث ان‬
.‫ هي القمية التي نريد وضعها في الذاكرة‬:value
.value ‫ هو عدد البيتات التي ستحمل القيمة‬:num
.‫ هنا لتصفير بينية الهيكل لنتاكد انه ال يوجد اى بيانات في هذه البينيه‬memset ‫نستخدم‬
.‫ للمضيف من خالل سطر األوامر‬IP ‫ التالى والذي يقوم بعرض عناوين‬showip.c ‫انظر الى البرنامج‬
/*
** showip.c -- show IP addresses for a host given on the command line
*/
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <arpa/inet.h>
#include <netinet/in.h>
int main(int argc, char *argv[]) {
struct addrinfo hints, *res, *p;
int status;
char ipstr[INET6_ADDRSTRLEN];
if (argc != 2) {
fprintf(stderr,"usage: showip hostname\n");
return 1;
}
memset(&hints, 0, sizeof hints);
hints.ai_family = AF_UNSPEC; // AF_INET or AF_INET6 to force version
hints.ai_socktype = SOCK_STREAM;
if ((status = getaddrinfo(argv[1], NULL, &hints, &res)) != 0) {
fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(status));
return 2;
}
https://www.facebook.com/tibea2004
‫فن الهاكر األخالقي‬ ‫‪128‬‬

‫;)]‪printf("IP addresses for %s:\n\n", argv[1‬‬


‫{ )‪for(p = res;p != NULL; p = p->ai_next‬‬
‫;‪void *addr‬‬
‫;‪char *ipver‬‬
‫‪// get the pointer to the address itself,‬‬
‫‪// different fields in IPv4 and IPv6:‬‬
‫‪if (p->ai_family == AF_INET) { // IPv4‬‬
‫;‪struct sockaddr_in *ipv4 = (struct sockaddr_in *)p->ai_addr‬‬
‫;)‪addr = &(ipv4->sin_addr‬‬
‫;"‪ipver = "IPv4‬‬
‫‪} else { // IPv6‬‬
‫;‪struct sockaddr_in6 *ipv6 = (struct sockaddr_in6 *)p->ai_addr‬‬
‫;)‪addr = &(ipv6->sin6_addr‬‬
‫;"‪ipver = "IPv6‬‬
‫}‬
‫‪// convert the IP to a string and print it:‬‬
‫;)‪inet_ntop(p->ai_family, addr, ipstr, sizeof ipstr‬‬
‫;)‪printf(" %s: %s\n", ipver, ipstr‬‬
‫}‬
‫‪freeaddrinfo(res); // free the linked list‬‬
‫;‪return 0‬‬
‫}‬
‫كما ترون‪ ،‬التعليمات البرمجية هذه تقوم باستدعاء الداله )(‪ getaddrinfo‬مع ما الحجج التي قمت بتمريرها في سطر األوامر‪ ،‬والتي يمأل بها‬
‫قائمة ‪ linked list‬المشار إليها بواسطة ‪ ،res‬ومن ثم نحن يمكننا استخالص اى عنصر عبر القائمة وطباعة األشياء أو القيام به مهما كان‪.‬‬
‫عند تشغيل البرنامج يكون النتاج على سبيل المثال كاالتى‪:‬‬

‫)‪Using Connection-Oriented Sockets (stream socket‬‬


‫في ‪( connection-oriented socket‬التي تستخدم مقبس من النوع ‪ )SOCK_STREAM‬والتي يستخدم البروتوكول ‪ TCP‬لتأسيس‬
‫جلسة عمل (اتصال) بين اثنين من النهايات ذات عنوان ‪ .IP‬البروتوكول ‪ TCP‬يضمن تسليم البيانات (باستثناء فشل الشبكة) بين نقاط النهاية‬
‫االثنين‪ .‬هناك قدرا كبيرا من النفقات العامة تشارك في إقامة االتصال‪ ،‬ولكن بمجرد تأسيسها فان نقل البيانات بين األجهزة يكون موثوق‪.‬‬
‫إلنشاء ‪ ،connection-oriented socket‬يجب استخدام سلسلة منفصلة من الدوال لبرامج الخادم وبرامج العميل‪ .‬يبين الشكل التالي تسلسل‬
‫المهام لكل نوع من البرنامج‪.‬‬

‫جانب الخادم "‪"Server Side‬‬


‫بالنسبة لجانب الخادم نجد انه يستخدم العديد من الدوال حتى يقبل االتصاالت الوارده ويتفاعل معها كاالتى‪:‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪129‬‬

‫‪ -1‬الداله )(‪ socket‬وتستخدم للحصول على ‪socket file descriptor‬‬


‫تكلمنا عن كثيرا فيما سبق‪ ،‬ولكن الصيغه العامه للداله )(‪ socket‬كاالتى والتي يمكنك معرفتها من خالل االمر ‪.man socket‬‬

‫هذه الحجج قد تكلمنا عنها سابقا والتي يمكنك ملئها يدوا كاالتى‪:‬‬
‫;)‪s = socket(AF_INET, SOCK_STREAM, 0‬‬
‫ومن هذه الحجج يخبرنا بان ‪ socket‬مخصص لعانوين ‪ IPv4‬ومن النوع ‪ Connection-Oriented‬كما تحدثنا سابقا‪.‬‬
‫على أي حال‪ ،‬يمكنك استخدام القيم من نتائج استدعاء الداله )(‪ getaddrinfo‬التي تناولنا شرحها سابقا‪ ،‬وإطعامهم إلى )(‪ socket‬مباشرة‬
‫مثل هذا‪:‬‬
‫;‪int s‬‬
‫;‪struct addrinfo hints, *res‬‬
‫‪// do the lookup‬‬
‫]‪// [pretend we already filled out the "hints" struct‬‬
‫;)‪getaddrinfo("www.example.com", "http", &hints, &res‬‬
‫‪// [again, you should do error-checking on getaddrinfo(), and walk‬‬
‫‪// the "res" linked list looking for valid entries instead of just‬‬
‫)‪// assuming the first one is good (like many of these examples do.‬‬
‫;)‪s = socket(res->ai_family, res->ai_socktype, res->ai_protocol‬‬
‫ناتج الداله )(‪ socket‬يقوم بإرجاع قيمة ‪ socket descriptor‬والتي يمكنكم ببساطه استخدامها في وقت الحق من استدعاءات النظام‪ ،‬أو‪-1‬‬
‫في حالة الخطأ‪ .‬يتم تعيين المتغير ‪ errno‬إلى قيمة الخطأ (انظر الى صفحات ‪ man‬الخاصه ب ‪ errno‬لمزيد من التفاصيل)‪ .‬بعد ااالنتهاء من‬
‫انشاء ‪ socket‬ننتقل الى المرحلة التاليه مع الداله ‪.bind‬‬
‫‪ -0‬الداله )(‪bind‬‬
‫بمجرد االنتهاء من انشاء ‪ ،socket‬قد يكون لديك مقترح من توصيل ‪ socket‬الى المنفذ الموجود على الجهاز المحلي الخاص بك‪( .‬يتم ذلك‬
‫عادة إذا كنت تريد استعمال الداله )(‪ listen‬لالستماع إلى االتصاالت الواردة على منفذ معين وهذا ما نريده هنا — ألعاب الشبكة متعددة‬
‫الالعبين تقوم بمثل هذا عندما تقول لها إنك تريد االتصال "‪.)"connect to 192.168.5.10 port 3490‬‬
‫يتم استخدام رقم المنفذ بالنواة لتطابق الحزمة الواردة إلى بعض ‪ socket descriptor‬للعملية‪ .‬إذا كنت تريد الذهاب إلى القيام باالتصال فقط‬
‫)(‪( connect‬ألن كنت عميل‪ ،‬ليس ملقم)‪ ،‬فهذا ربما يكون غير ضروري‪ .‬الشكل التالى يوضع الصيغه العامه للداله )(‪ bind‬كاالتى‪:‬‬

‫يشير المعلم‪/‬الحجه ‪ socketfd‬الى قيمة ‪ socket descriptor‬الناتجه من الداله )(‪ .socket‬أما المعلم ‪ addr‬هو مؤشر الى الهيكل‬
‫‪ struct sockaddr‬الذي يحتوي على معلومات اتصال الشبكة المحلية (‪ ،port ،address‬و‪ .)IP address‬وأخيرا المعلم ‪addrlen‬‬
‫يشير الى طول هيكل ‪ .sockaddr‬في حين ان الخادم عادة ما يقبل االتصاالت على عنوان ‪ IP‬الخاص به‪ ،‬وهذا هو عنوان ‪ IP‬للجهاز‬
‫المحلي‪ ،‬جنبا إلى جنب مع منفذ ‪ TCP‬المخصصة للتطبيق‪ .‬إذا كنت ال تعرف عنوان ‪ IP‬للنظام المحلي‪ ،‬يمكنك استخدام قيمة‬
‫‪ INADDR_ANY‬للسماح للمقبس لربط أي عنوان المحلي على النظام وفى حالة االعتماد على الهيكل ‪ addrinfo‬كما في مثالنا التالى‬
‫يمكنك استخدام ‪ AI_PASSIVE‬مع ‪ ،ai_flags‬اما إذا كنت ترغب في ربط عنوان ‪ IP‬محلي معين‪ ،‬فقم باسقاط ‪ AI_PASSIVE‬ووضع‬
‫عنوان ‪ IP‬الناتج من ‪ .getaddrinfo‬مثال على ذلك كاالتى‪:‬‬
‫;‪struct addrinfo hints, *res‬‬
‫;‪int sockfd‬‬
‫‪// first, load up address structs with getaddrinfo():‬‬
‫;)‪memset(&hints, 0, sizeof hints‬‬
‫‪hints.ai_family = AF_UNSPEC; // use IPv4 or IPv6, whichever‬‬
‫;‪hints.ai_socktype = SOCK_STREAM‬‬
‫;‪hints.ai_flags = AI_PASSIVE‬‬ ‫‪// fill in my IP for me‬‬
‫;)‪getaddrinfo(NULL, "3490", &hints, &res‬‬
‫‪// make a socket:‬‬
‫;)‪sockfd = socket(res->ai_family, res->ai_socktype, res->ai_protocol‬‬
‫‪// bind it to the port we passed in to getaddrinfo():‬‬
‫;)‪bind(sockfd, res->ai_addr, res->ai_addrlen‬‬
‫او يمكنك استخدام الطريق القديمه كاالتى‪:‬‬
‫;‪int sockfd‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪130‬‬

‫;‪struct sockaddr_in my_addr‬‬


‫;)‪sockfd = socket(PF_INET, SOCK_STREAM, 0‬‬
‫;‪my_addr.sin_family = AF_INET‬‬
‫‪my_addr.sin_port = htons(MYPORT); // short, network byte order‬‬
‫;("‪my_addr.sin_addr.s_addr = inet_addr)"11.10.111.59‬‬
‫‪//or use (my_addr.sin_addr.s_addr = INADDR_ANY) for local address in IPv4 or in6addr_any‬‬
‫‪//for IPv6‬‬
‫;)‪memset(my_addr.sin_zero, '\0', sizeof my_addr.sin_zero‬‬
‫;)‪bind(sockfd, (struct sockaddr *)&my_addr, sizeof my_addr‬‬
‫الداله )(‪ bind‬تقوم بإرجاع القيمة ‪ -1‬في حالة الفشل‪ ،‬أو ‪ 2‬في حالة النجاح‪.‬‬
‫بعد ربط ‪ socket‬إلى العنوان والمنفذ‪ ،‬يجب أن يكون برنامج الخادم على استعداد لقبول االتصاالت من العمالء عن بعد‪ .‬هذا العملية تحتاج‬
‫الى خطوتين‪.‬‬
‫‪ -3‬الداله )(‪listen‬‬
‫يجب أوال استخدام الداله )(‪ listen‬لبدء االستماع لمحاوالت اتصال العميل‪ ،‬ثم الداله )(‪ accept‬لقبول محاولة االتصال من عميل‪ .‬شكل الدالة‬
‫)( ‪ listen‬هو‪:‬‬

‫كما هو متوقع‪ ،‬يشير الحجة ‪ socketfd‬إلى ‪ socket descriptor‬الذي تم إنشاؤه باستخدام الداله )(‪ .socket‬يشير المعلم ‪ backlog‬الى‬
‫عدد االتصاالت العالقة التي يمكن ان يقبلها النظام في قائمة االنتظار لتتم معالجتها‪ .‬إذا تم تعيين هذه القيمة إلى ‪ ،1‬فان اثنين من العمالء‬
‫المنفصلين يحاولون االتصال بالمنفذ فانه يتم قبولهما‪ .‬واحدة تتم معالجتها على الفور‪ ،‬وسيتم وضع االخر في االنتظار‪ ،‬واالنتظار حتى االنتهاء‬
‫من األول‪ .‬إذا حاول مضيف ثالث االتصال‪ ،‬فان النظام يرفض ذلك‪.‬‬
‫‪ -4‬الداله )(‪accept‬‬
‫بعد الدالة )(‪ ،listen‬يجب استدعاء الداله )(‪ accept‬لقبول االتصاالت الواردة‪ .‬الدالة )(‪ accept‬هي دالة الحظر‪ .‬تنفيذ البرنامج سوف يتوقف‬
‫مع الداله )(‪ accept‬حتى يتم إجراء االتصال من جهاز العميل‪ .‬شكل الداله )(‪ accept‬هو‪:‬‬

‫كالعادة يشير المعلم ‪ socketfd‬الى ‪ socket‬الذى تم انشائه بالدالة )(‪ .socket‬اما المعلم ‪ addr‬فهو مؤشر الى البنية ‪،sockaddr‬‬
‫و‪ addrlen‬هو مؤشر الى طول البينه ‪ .sockaddr_storage‬يتم تخزين معلومات ‪ remote address‬من العميل في هذا الهيكل‪ ،‬حتى‬
‫تتمكن من الوصول إليه إذا لزم األمر‪.‬‬
‫عند قبول االتصال‪ ،‬فان الداله )(‪ accept‬تقوم بإنتاج ملف ‪ socket‬جديد‪ .‬ثم يتم استخدام ملف ‪ socket‬الجديد هذا فى التواصل مع العميل‬
‫البعيد‪ .‬ال يزال ‪ socket‬األصلي الذي تم إنشاؤها بواسطة الدالة )(‪ socket‬تستخدم لالستماع لالتصاالت عميل إضافية‪.‬‬
‫قبل الدخول الى المرحله التاليه فيما يلي تجميعه للدوال السابقه في خطوة واحده كاالتى‪:‬‬
‫>‪#include <string.h‬‬
‫>‪#include <sys/types.h‬‬
‫>‪#include <sys/socket.h‬‬
‫>‪#include <netinet/in.h‬‬
‫‪#define MYPORT "3490" // the port users will be connecting to‬‬
‫‪#define BACKLOG 10‬‬ ‫‪// how many pending connections queue will hold‬‬
‫)‪int main(void‬‬
‫{‬
‫;‪struct sockaddr_storage their_addr‬‬
‫;‪socklen_t addr_size‬‬
‫;‪struct addrinfo hints, *res‬‬
‫;‪int sockfd, new_fd‬‬
‫!! ‪// !! don't forget your error checking for these calls‬‬
‫‪// first, load up address structs with getaddrinfo():‬‬
‫;)‪memset(&hints, 0, sizeof hints‬‬
‫‪hints.ai_family = AF_UNSPEC; // use IPv4 or IPv6, whichever‬‬
‫;‪hints.ai_socktype = SOCK_STREAM‬‬
‫‪hints.ai_flags = AI_PASSIVE; // fill in my IP for me‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪131‬‬

‫;)‪getaddrinfo(NULL, MYPORT, &hints, &res‬‬


‫‪// make a socket, bind it, and listen on it:‬‬
‫;)‪sockfd = socket(res->ai_family, res->ai_socktype, res->ai_protocol‬‬
‫;)‪bind(sockfd, res->ai_addr, res->ai_addrlen‬‬
‫;)‪listen(sockfd, BACKLOG‬‬
‫‪// now accept an incoming connection:‬‬
‫;‪addr_size = sizeof their_addr‬‬
‫;)‪new_fd = accept(sockfd, (struct sockaddr *)&their_addr, &addr_size‬‬
‫!‪// ready to communicate on socket descriptor new_fd‬‬
‫‪.‬‬
‫‪.‬‬
‫‪ -5‬الدالتين )(‪ recv‬و)(‪send‬‬
‫بمجرد قبول االتصال‪ ،‬يمكن للخادم إرسال أو استقبال البيانات من العميل باستخدام ملف ‪ socket‬الجديد‪ ،‬والدوال )(‪ send‬أو )(‪:recv‬‬

‫المعلم ‪ socketfd‬يشير الى ‪ socket‬الجديد الذى تم انشائه بواسطة الداله )(‪.accept‬المعلم ‪ buf‬هو مؤشر الى إما المخزن المؤقت الذى‬
‫يحتوى على البيانات إلرسالها أو وجود مخزن مؤقت فارغة لتلقي البيانات‪ .‬المعلم ‪ len‬يشير إلى حجم المخزن المؤقت‪ ،‬والمعلم ‪ flags‬إذا‬
‫كانت ضرورية (مثل إذا كنت تريد تعليم البيانات كضرورية في حزمة ‪ .)TCP‬لالتصال ‪ TCP‬العادي‪ ،‬يجب تعيين المعلمة ‪ flags‬إلى ‪.2‬‬
‫الداله )(‪ send‬ال تمنع تنفيذ البرنامج‪ .‬يتم إرسال البيانات لنقل ‪ TCP‬األساسي على النظام‪ ،‬حتى انتهاء الداله‪ .‬الداله )(‪ send‬تقوم بإرجاع‬
‫قيمة عددية تشير إلى كيف يتم إرسال العديد من بايت من البيانات إلى المخزن المؤقت للنقل‪ .‬من المهم التحقق للتأكد من أن هذه القيمة تطابق‬
‫حجم المخزن المؤقت للتأكد من أن كافة البيانات قد تم إرسالها‪.‬‬
‫اما الدله )(‪ recv‬لها وظيفة الحظر‪ .‬حيث سوف توقف تنفيذ البرنامج حتى تتلقى الدالة )( ‪ recv‬البيانات من العميل عن بعد‪ ،‬أو العميل عن بعد‬
‫يقوم بقطع االتصال‪ .‬إذا تم قطع اتصال العميل‪ ،‬فإن الداله )(‪ recv‬تعود مع القيمة ‪ .2‬إذا كان العميل يرسل حزم البيانات‪ ،‬فان الداله )(‪recv‬‬
‫تضع البيانات في المخزن المؤقت المحدد‪ ،‬وتقوم بإرجاع عدد البايتات الواردة‪.‬‬
‫مثال على ذلك كاالتى‪:‬‬
‫;"!‪char *msg = "Beej was here‬‬
‫;‪int len, bytes_sent‬‬
‫‪.‬‬
‫‪.‬‬
‫‪.‬‬
‫;)‪len = strlen(msg‬‬
‫;)‪bytes_sent = send(sockfd, msg, len, 0‬‬
‫‪.‬‬
‫عند تصميم تطبيق العميل والخادم‪ ،‬فأنه من المهم مزامنة مهام المرسلة والمستقبلة‪ .‬إذا كان كل من الخادم والعميل ينتظرون على الداله‬
‫)(‪ ،recv‬فانه سوف يصبح طريق مسدود‪ ،‬ولن يحدث أي اتصال‪.‬‬
‫‪ -9‬الداله )(‪close‬‬
‫تستخدم لغلق االتصال وتكون الصيغه العامه الخاصة بها كاالتى‪:‬‬
‫;)‪close(sockfd‬‬
‫يمكن أيضا استخدام الداله )(‪.shutdown‬‬

‫جانب العميل (‪)Client side‬‬


‫والذى فيه لن تحتاج الى الداله )(‪ listen‬والداله )(‪ bind‬وما سوف نحتاجه هنا باالضافه الى الدوال األخرى التي ذكرناها سابقا الداله‬
‫)(‪ connect‬والتي تكون ذات الصيغه العامه االتيه‪:‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪132‬‬

‫‪ sockfd‬هو ‪ ،socket file descriptor‬والناتج من استدعاء الداله )(‪ ،socket‬و ‪ addr‬هو بنية ‪ sockaddr‬والتي تحتوي على عنوان‬
‫‪ IP‬ومنفذ الوجهة‪ ،‬و‪ addrlen‬هو طول هيكل عنوان الملقم في وحدات البايت‪ .‬كل هذه المعلومات يمكن استخالصها من نتائج استدعاء الداله‬
‫‪ .getaddrinfo‬دعونا نقوم ببرنامج إلجراء اتصال ‪ socket‬إلى '‪ ،'www.example.com‬على المنفذ ‪:1122‬‬
‫;‪struct addrinfo hints, *res‬‬
‫;‪int sockfd‬‬
‫‪// first, load up address structs with getaddrinfo():‬‬
‫;)‪memset(&hints, 0, sizeof hints‬‬
‫;‪hints.ai_family = AF_UNSPEC‬‬
‫;‪hints.ai_socktype = SOCK_STREAM‬‬
‫;)‪getaddrinfo("www.example.com", "3490", &hints, &res‬‬
‫‪// make a socket:‬‬
‫;)‪sockfd = socket(res->ai_family, res->ai_socktype, res->ai_protocol‬‬
‫!‪// connect‬‬
‫;)‪connect(sockfd, res->ai_addr, res->ai_addrlen‬‬

‫‪Client-Server Background 1.1‬‬


‫عالم العميل‪-‬الملقم (‪ .)Client-Server world‬هو كل شيء تقريبا على الشبكة يتعامل مع عمليات العميل للتحدث إلى عمليات الخادم‬
‫والعكس بالعكس‪ ،‬على سبيل المثال ‪ .telnet‬عند االتصال بمضيف بعيد على المنفذ ‪ 11‬مع ‪( telnet‬العميل)‪ ،‬البرنامج على المضيف (يسمى‬
‫‪ )telnetd service‬يعود للحياة‪ .‬أنه يتعامل مع اتصال ‪ telnet‬الوارد‪ ،‬ومن ثم يبدا العمل مع موجه تسجيل الدخول‪ ،‬إلخ‪.‬‬

‫بعض األمثلة الجيدة التي توضح العالقه بين الخادم والعميل ‪ ،ftp/ftpd ،telnet/telnetd‬أو ‪ .Firefox/Apache‬في كل مرة يمكنك‬
‫استخدام بروتوكول نقل الملفات ‪ ،ftp‬فهناك برنامج ‪ ftpd‬بعيد‪ ،‬الذي يقدم لك االتصال‪.‬‬
‫في كثير من األحيان‪ ،‬سيكون هناك فقط ملقم واحد على الجهاز‪ ،‬وذلك الملقم سيقوم بالتعامل مع العديد من العمالء باستخدام )(‪ .fork‬الروتين‬
‫األساسي‪ :‬هو ان الخدام سوف ينتظر االتصال ")(‪ ،"listen‬ثم يوافق عليه ")(‪ ،"accept‬ثم ينشاء عمليه للتعامل معه ")(‪ ."fork‬وهذا ما‬
‫سوف يفعله برنامج الخادم الذي سوف ننشئه في المقطع التالي‪.‬‬

‫‪Simple Stream Server‬‬


‫كل ما يقوم به هذا البرنامج (‪ )simple server program‬هو ارسال النص "‪ "Hello, World!\n‬من خالل االتصال‪ .‬كل ما عليك‬
‫القيام به الختبار هذا الخادم في نافذة أخرى‪ ،‬باستخدام البرنامج ‪:Telnet‬‬
‫‪telnet localhost 3490‬‬
‫*‪/‬‬
‫‪** server.c -- a stream socket server demo‬‬
‫‪*/‬‬
‫>‪#include <stdio.h‬‬
‫>‪#include <stdlib.h‬‬
‫>‪#include <unistd.h‬‬
‫>‪#include <errno.h‬‬
‫>‪#include <string.h‬‬
‫>‪#include <sys/types.h‬‬
‫>‪#include <sys/socket.h‬‬
‫>‪#include <netinet/in.h‬‬
‫>‪#include <netdb.h‬‬
‫>‪#include <arpa/inet.h‬‬
‫>‪#include <sys/wait.h‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ 133

#include <signal.h>
#define PORT "3490" // the port users will be connecting to
#define BACKLOG 10 // how many pending connections queue will hold
void sigchld_handler(int s)
{
while(waitpid(-1, NULL, WNOHANG) > 0);
}
// get sockaddr, IPv4 or IPv6:
void *get_in_addr(struct sockaddr *sa)
{
if (sa->sa_family == AF_INET) {
return &(((struct sockaddr_in*)sa)->sin_addr);
}
return &(((struct sockaddr_in6*)sa)->sin6_addr);
}
int main(void)
{
int sockfd, new_fd; // listen on sock_fd, new connection on new_fd
struct addrinfo hints, *servinfo, *p;
struct sockaddr_storage their_addr; // connector's address information
socklen_t sin_size;
struct sigaction sa;
int yes=1;
char s[INET6_ADDRSTRLEN];
int rv;
memset(&hints, 0, sizeof hints);
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
hints.ai_flags = AI_PASSIVE; // use my IP
if ((rv = getaddrinfo(NULL, PORT, &hints, &servinfo)) != 0) {
fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(rv));
return 1;
}
// loop through all the results and bind to the first we can
for(p = servinfo; p != NULL; p = p->ai_next) {
if ((sockfd = socket(p->ai_family, p->ai_socktype, p->ai_protocol)) == -1) {
perror("server: socket");
continue;
}
if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int)) == -1) {
perror("setsockopt");
exit(1);
}
if (bind(sockfd, p->ai_addr, p->ai_addrlen) == -1) {
close(sockfd);
perror("server: bind");
continue;
}

break;
}
if (p == NULL) {
fprintf(stderr, "server: failed to bind\n");
return 2;

https://www.facebook.com/tibea2004
‫فن الهاكر األخالقي‬ 134

}
freeaddrinfo(servinfo); // all done with this structure
if (listen(sockfd, BACKLOG) == -1) {
perror("listen");
exit(1);
}
sa.sa_handler = sigchld_handler; // reap all dead processes
sigemptyset(&sa.sa_mask);
sa.sa_flags = SA_RESTART;
if (sigaction(SIGCHLD, &sa, NULL) == -1) {
perror("sigaction");
exit(1);
}
printf("server: waiting for connections...\n");
while(1) { // main accept() loop
sin_size = sizeof their_addr;
new_fd = accept(sockfd, (struct sockaddr *)&their_addr, &sin_size);
if (new_fd == -1) {
perror("accept");
continue;
}
inet_ntop(their_addr.ss_family,
get_in_addr((struct sockaddr *)&their_addr),
s, sizeof s);
printf("server: got connection from %s\n", s);
if (!fork()) { // this is the child process
close(sockfd); // child doesn't need the listener
if (send(new_fd, "Hello, world!", 13, 0) == -1)
perror("send");
close(new_fd);
exit(0);
}
close(new_fd); // parent doesn't need this
}
return 0;
}
:‫عند اختبار البرنامج كان الناتج كاالتى‬

A Simple Stream Client


‫ والذي يقوم باالتصال بالملقم الذي تحدده من خالل سطر األوامر على المنفذ‬telnet ‫هنا مثال النشاء برنامج العميل وهو شبيه للبرنامج‬
.1122
/*
** client.c -- a stream socket client demo
*/

#include <stdio.h>

https://www.facebook.com/tibea2004
‫فن الهاكر األخالقي‬ 135

#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include <netdb.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>

#include <arpa/inet.h>

#define PORT "3490" // the port client will be connecting to

#define MAXDATASIZE 100 // max number of bytes we can get at once

// get sockaddr, IPv4 or IPv6:


void *get_in_addr(struct sockaddr *sa)
{
if (sa->sa_family == AF_INET) {
return &(((struct sockaddr_in*)sa)->sin_addr);
}

return &(((struct sockaddr_in6*)sa)->sin6_addr);


}

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


{
int sockfd, numbytes;
char buf[MAXDATASIZE];
struct addrinfo hints, *servinfo, *p;
int rv;
char s[INET6_ADDRSTRLEN];

if (argc != 2) {
fprintf(stderr,"usage: client hostname\n");
exit(1);
}

memset(&hints, 0, sizeof hints);


hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;

if ((rv = getaddrinfo(argv[1], PORT, &hints, &servinfo)) != 0) {


fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(rv));
return 1;
}

// loop through all the results and connect to the first we can
for(p = servinfo; p != NULL; p = p->ai_next) {
if ((sockfd = socket(p->ai_family, p->ai_socktype,
p->ai_protocol)) == -1) {
perror("client: socket");
continue;
}

https://www.facebook.com/tibea2004
‫فن الهاكر األخالقي‬ ‫‪136‬‬

‫{ )‪if (connect(sockfd, p->ai_addr, p->ai_addrlen) == -1‬‬


‫;)‪close(sockfd‬‬
‫;)"‪perror("client: connect‬‬
‫;‪continue‬‬
‫}‬

‫;‪break‬‬
‫}‬

‫{ )‪if (p == NULL‬‬
‫;)"‪fprintf(stderr, "client: failed to connect\n‬‬
‫;‪return 2‬‬
‫}‬

‫‪inet_ntop(p->ai_family, get_in_addr((struct sockaddr *)p->ai_addr),‬‬


‫;)‪s, sizeof s‬‬
‫;)‪printf("client: connecting to %s\n", s‬‬

‫‪freeaddrinfo(servinfo); // all done with this structure‬‬

‫{ )‪if ((numbytes = recv(sockfd, buf, MAXDATASIZE-1, 0)) == -1‬‬


‫;)"‪perror("recv‬‬
‫;)‪exit(1‬‬
‫}‬
‫;'‪buf[numbytes] = '\0‬‬
‫;)‪printf("client: received '%s'\n",buf‬‬
‫;)‪close(sockfd‬‬
‫;‪return 0‬‬
‫}‬

‫في االمثله السابق تم استخدام الدالة )( ‪ setsockopt‬ببساطة لتعيين خيارات اضافيه لل ‪ .socket‬هذه الدالة تقوم باستدعاء الخيار‬
‫‪ SO_REUSEADDR‬إلى الوضع ‪ ،true‬والتي سوف تسمح لل ‪ socket‬بإعادة استخدام العنوان المعطى للربط "‪ ."bind‬بدون هذا‬
‫الخيار‪ ،‬فانه عندما يحاول البرنامج الربط إلى منفذ معين‪ ،‬فسوف تفشل إذا كان هذا المنفذ قيد االستخدام بالفعل‪ .‬إذا لم يتم إغالق ‪socket‬‬
‫بطريقه صحيحه‪ ،‬فانه قد يبدو انه يكون قيد االستخدام‪ ،‬لذلك هذا الخيار يتيح ربط ‪ socket‬إلى المنفذ (واالستيالء على السيطرة عليه)‪ ،‬حتى لو‬
‫كان يبدو أنه قيد االستعمال‪.‬‬
‫المعلم األولى لهذه الداله هي ‪( socket‬المشار إليه من قبل واصف الملف)‪ ،‬والثاني يحدد مستوى الخيار‪ ،‬والثالث يحدد الخيار نفسه‪ .‬في حين‬
‫ان ‪ SO_REUSEADDR‬هو خيار ‪ ،socket-level option‬فانه يتم تعيين المستوى الى ‪ .SOL_SOCKET‬هناك العديد من‬
‫الخيارات المختلفة الخاصة بال ‪ socket‬يتم تعريفها في الملف ‪ .usr/include/asm/socket.h/‬المعاملين األخيرين هما مؤشرين إلى‬
‫البيانات التي يجب تعيين الخيار وطول تلك البيانات‪ .‬المؤشر إلى البيانات وطول تلك البيانات نوعان من المعامل التي غالبا ما تستخدم مع‬
‫دوال ‪ .socket‬وهذا يسمح للدوال التعامل مع جميع أنواع البيانات‪ ،‬من بايت واحدة لهياكل البيانات الكبيرة‪ .‬الخيارات‬
‫‪ SO_REUSEADDR‬تستخدم عدد صحيح ‪ 11‬بت لقيمته‪ ،‬وذلك لتعيين هذا الخيار إلى ‪ ،true‬يجب أن تكون نهائية حجتين مؤشر إلى‬
‫قيمة عدد صحيح من ‪ 1‬وحجم عدد صحيح (والذي هو ‪ 1‬بايت)‪.‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪137‬‬

‫الفصل الخامس‬
‫أنظمة التشغيل ( ‪) WINDOWS‬‬

‫‪ 1.1‬مقدمه‬
‫مايكروسوفت ويندوز )‪: (Microsoft Windows‬هو نظام تشغيل رسومي‪ ،‬من إنتاج شركة مايكروسوفت‪ .‬بدأ نظام التشغيل كواجهة‬
‫رسومية لميكروسوفت دوس عام ‪ ،1211‬في خطوة لالستجابة لالهتمام المتزايد في واجهات المستخدم الرسومية‪ .‬جاء مايكروسوفت ويندوز‬
‫ليسيطر على سوق الحاسبات الشخصية في العالم حيث بلغت حصته ما يزيد عن ‪ %22‬من السوق متفوقا على نظام التشغيل ماك الذي صدر‬
‫في ‪. 1211‬أحدث إصدار من ويندوز هو ويندوز ‪ 12‬ولكنه قيد التجربة‪ ،‬وأحدث نظام للهواتف هو ويندوز فون ‪ ،1‬وأحدث إصدار للخوادم هو‬
‫ويندوز سيرفر ‪.R2 1211‬‬

‫‪ 1.1‬تاريخ إصدارات مايكروسوفت ويندوز‬


‫تصف عبارة ويندوز كل أجيال منتجات أنظمة التشغيل التي أنتجتها مايكروسوفت‪ ،‬ما عدا النظام األول مايكروسوفت دوس بالطبع‪ ،‬هذه‬
‫المنتجات مصنفة عامة في التالي‪:‬‬

‫اإلصدارات االولية‬
‫يعود تاريخ نسخ ويندوز إلى سبتمبر ‪ ،1211‬عندما صمم تشيس بيشوب أول نموذج ِلجهاز إلكتروني وبَدء مشروع "مدير الواجهة" وتم‬
‫اإلعالن عنه في نوفمبر ‪ 1211‬بعد أبل ليزا ولكن قبل ماكنتوش تحت اسم "ويندوز"‪ ،‬ولكن ويندوز ‪ 1.2‬لم يصدر حتى نوفمبر ‪ .1211‬وكان‬
‫ويندوز ‪ 1.2‬يفتقد للتميز في األداء الوظيفي‪ ،‬وقد حقق شعبية قليلة مقارنة بنظام تشغيل أبل‪ .‬لم يكن ويندوز ‪ 1.2‬نظام تشغيل مكتمل نسبيا إنما‬
‫كان امتداد لمايكروسوفت دوس‪ .‬قشرة ويندوز ‪ 1.2‬كانت معروفة باسم ام اس دوس التنفيذية‪ .‬كان النظام مزودا ببرامج أخرى مثل‪ :‬الحاسبة‪،‬‬
‫التقويم‪ ،Clipboard ،Cardfile ،‬الساعة‪ ،‬لوحة التحكم‪ ،‬المفكرة‪ ،‬الرسام‪ ،‬الطرفية (‪ )terminal‬والكاتب‪ .‬ويندوز ‪ 1.2‬لم يكن فيه خاصية‬
‫تداخل النوافذ وبدال عن ذلك كانت النوافذ متجاورة فقط‪ .‬مربعات الحوار تستطيع الظهور فوق النوافذ األخرى‪.‬‬
‫أُطلقت مايكروسوفت ويندوز اإلصدار ‪ 1.2‬في ديسمبر ‪ ،1212‬وفيه العديد من التحسينات لواجهة المستخدم وإدارة الذاكرة‪ .‬وكانت شعبيته‬
‫أكثر قليال من سابقه النسخة ويندوز ‪ .1.2‬غير ويندوز ‪ 1.21‬نظام التشغيل من تجانب النوافذ وعدم قدرتها على الظهور فوق بعضها إلى القُدرة‬
‫على الظهور فوق بعضها األخر‪ .‬وكنتيجة لذلك قامت أبل برفع دعوة قضائية على مايكروسوفت بحجة االعتداء على حقوق الملكية‪ .‬قدم أيضا ً‬
‫ويندوز ‪ 1.2‬اختصارات لوحة المفاتيح أكثر تطورا ً والقدرة على استخدام الذاكرة الموسعة‪.‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪138‬‬

‫أُطلق ويندوز ‪ 1.1‬في إصدارين مختلفين‪ :‬ويندوز‪ 112/‬كان يعمل على وضع ‪ 1212‬االفتراضي للمهام المتعددة لبرامج الدوس والذاكرة‬
‫المقسمة إلى صفحات )‪ (Paged memory‬لمحاكاة الذاكرة الموسعة باستخدام الذاكرة الموسعة المتاحة‪ .‬ويندوز‪( 112/‬والذي بالرغم من‬
‫اسمه سيعمل على ‪ )1212‬ال يزال يُدار في الوضع الحقيقي‪ ،‬ولكن يمكن االستفادة من منطقة الذاكرة العليا‪ .‬باإلضافة إلى الحزم الكاملة‬
‫لويندوز‪ ،‬كان هناك إصدارات من ‪ Runtime‬شحنت مع برامج ويندوز األولية من قبل أطراف ثالثة وجعلت من الممكن تشغيل برامج‬
‫ويندوز تحت مايكروسوفت دوس دون الحاجة إلى الحزمة الكاملة من ويندوز‪.‬‬

‫يعتقد الكثير ان اإلصدارات األولية من ويندوز كانت واجهة مستخدم رسومية بسيطة‪ِ ،‬ألن معظمهم كان يستخدمون مايكروسوفت دوس‬
‫واعتادوا عليه كنظام لخدمات الملفات‪ .‬مع ذلك‪ ،‬حتى اإلصدارات األولية من ويندوز ‪-12‬بت التي من المفترض انها تقدم العديد من وظائف‬
‫نظام التشغيل النموذجية‪ :‬خصوصا امتالكهم صيغة الملفات القابلة لالستخراج الخاصة بهم وتزويد برامج األجهزة الخاصة بهم (مؤقت‪،‬‬
‫جرافيك‪ ،‬طابعة‪ ،‬فارة‪ ،‬لوحة مفاتيح وصوت) للتطبيقات‪ .‬وعلى عكس مايكروسوفت دوس ويندوز َم ّكن المستخدمين من تشغيل برامج رسومية‬
‫متعددة معا ً من خالل تعدد مهام تعاوني‪ .‬قدم ويندوز خصوصا ‪ ،segment-based‬ونظام برمجيات الذاكرة االفتراضية الذي أتاح تشغيل‬
‫التطبيقات أكثر من الذاكرة المتاحة‪ :‬حيث تُبدّل أجزاء الكود والموارد وتُخرج بعيدا ً عندما تزدحم الذاكرة‪ ،‬وتُنقل أجزاء البيانات للذاكرة عندما‬
‫تُفقد السيطرة على التطبيق‪.‬‬

‫ويندوز ‪ 1.1‬و‪1.1‬‬
‫أُطلق ويندوز ‪ 1.2‬في ‪ ،1222‬وقد تطور التصميم كثيرا بسبب الذاكرة االفتراضية واألجهزة االفتراضية القابلة للتحميل )‪ ،(VxDs‬وقد مكنهم‬
‫ذلك من مشاركة األجهزة بين المهام المتعددة‪ .‬أيضا‪ ،‬تطبيقات الويندوز يمكن ان يعمل اآلن في الوضع المحمي (‪ ،)protected mode‬وذلك‬
‫أعطاهم القدرة على الوصول للعديد من الميجابايت من الذاكرة وازالة إجبارية المشاركة في مخطط الذاكرة االفتراضية‪ .‬ولكنهم ما زلوا‬
‫يعملون في نفس المساحة‪ ،‬حيث أن الذاكرة ال ُمجزئة تُق ِدّم درجة من الحماية‪ ،‬وتعدد المهام التعاوني قدم ويندوز ‪ 1.2‬أيضا ً العديد من التحسينات‬
‫في واجهة المستخدم‪ .‬قامت مايكروسوفت بإعادة كتابة المهام الحرجة من لغة سي إلى األ ِسّمبلي‪ .‬وكان ويندوز ‪ 1.2‬أول إصدار من‬
‫مايكروسوفت ويندوز يحقق ارباح ناجحة‪ ،‬حيث باع ‪ 1‬مليون نسخة في أول ستةَ أشهر‪.‬‬

‫قامت مايكروسوفت أيضا بتحسين الشكل في ويندوز ‪ ،1.1‬وأصبح متاحا ً في ‪ 1‬مارس ‪ .1221‬وفي أغسطس ‪ ،1221‬أُطلق إصدار خاص‬
‫متوافق مع شبكات الند للند )‪ (peer-to-peer networking‬أُطلق هذا اإلصدار تحت رقم ‪ .1.11‬وتم بيعه بالتوازي مع اإلصدار األساسي‬
‫من ويندوز لمجموعات العمل‪ .‬انتهى دعم ويندوز ‪ 1.1‬في ‪ 11‬ديسمبر ‪.1221‬‬

‫ويندوز ‪x1‬‬
‫أُطلق ويندوز ‪ 21‬في ‪ 11‬أغسطس ‪ ،1221‬مع واجهة مستخدم كائنية التوجه‪ ،‬ودعم أسماء الملفات الطويلة حتى ‪ 111‬حرف‪ ،‬والقدرة على‬
‫مم ويندوز ‪ 21‬ليكون بديالً لكن ليس فقط لويندوز‬
‫ص َ‬‫التعرف وتهيئة أجهزة العتاد المثبتة تلقائيا ً )‪ (plug and play‬ومع تعدد مهام جديد‪ُ .‬‬
‫‪ 1.1‬ولكن أيضا ً لمجموعات العمل ويندوز ومايكروسوفت دوس‪ .‬وكان يستطيع تشغيل تطبيقات ‪-11‬بت‪ ،‬وفيه مميزات وتحسينات عديدة وذلك‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪139‬‬

‫هو الذي دع َّم استقراره عن اإلصدار ‪ .1.1‬كانت التغيرات التي في ويندوز ‪ 21‬تغيرات ثورية‪ ،‬بدال من التطور كتلك الموجودة في ويندوز ‪21‬‬
‫وويندوز ‪ .ME‬كان هناك العديد من خدمات ‪ OEM‬لويندوز ‪ ،21‬كالً منها كان تقريبا مسا ٍو لحزمة خدمية‪.‬‬
‫سمي ويندوز ‪ 21‬اإلصدار الثاني‬ ‫النظام التالي هو مايكروسوفت ويندوز ‪ 21‬الذي أُطلق في ‪ 11‬يونيو ‪ .1221‬تبع هذا اإلصدار إصدار اخر ُ‬
‫في مايو ‪ .1222‬كان إصدار المستخدمين الذي بعد ويندوز ‪ 21‬هو ويندوز ‪ ME‬الذي أُطلق في سبتمبر ‪ ،1222‬وكانت نواة ويندوز ‪ ME‬هي‬
‫نواة ويندوز ‪ 21‬ولكنه تبنى بعض الجوانب من ويندوز ‪ 1222‬و ُحذف أيضا خيار اإلقالع في وضع دوس‪ .‬قدم ويندوز ‪ ME‬عدداً من التقنيات‬
‫الجديدة لمايكروسوفت وخصوصا ً تقنية التعرف التلقائي على العتاد‪ .‬وأضاف أيضا ً ِميزة جديدة تُدعى استعادة النظام‪ ،‬والتي تسمح للمستخدم‬
‫باستعادة إعدادات الكمبيوتر لتاريخ سابق‪ .‬ولكن ويندوز ‪ ME‬تعارض أيضا مع ويندوز ‪( 1222‬بسبب اسمه) وأيضا ً تعرض ويندوز ‪ME‬‬
‫لنقد شديد بسبب البطيء وتجمد النظام ومشاكل خاصة بالعتاد و ِقيل عنه أيضا ً أنه واحد من أسوأ أنظمة التشغيل التي أطلقتها مايكروسوفت‪.‬‬

‫عائلة ويندوز ‪NT‬‬


‫أطلقت مايكروسوفت ويندوز إن تي في يوليو ‪ ،1221‬معتمدا على نواة جديدة‪ .‬وكانت عائلة ويندوز إن تي من أنظمة التشغيل عصرية وتم‬
‫التسويق لها على أعلى مستويات األعمال‪ ،‬حتى تصبح أنظمة تشغيل احترافية‪ .‬كان أول إصدار هو ويندوز إن تي ‪ 1.1‬في ‪ ،1221‬وتم ترقيمه‬
‫‪ 1.1‬ليطابق إصدار ويندوز المستخدمين‪ ،‬وبعدها تبعه ويندوز إن تي ‪ 1.1‬في ‪ 1221‬وويندوز ‪ 1.11‬في ‪ 1221‬وويندوز إن تي ‪ 1.2‬في‬
‫‪ 1222‬ومن ثم ويندوز ‪ 1222‬في سنة ‪ .1222‬كان ويندوز إن تي أول إصدار من ويندوز يستفيد من تعدد المهام الوقائي‪ .‬وكان ويندوز إن تي‬
‫‪ 1.2‬أول نظام يقدم واجهة مستخدم ويندوز ‪ 21‬وأول نظام يدعم بيئة ويندوز ‪ 21‬لتطبيقات ‪-11‬بت‪.‬‬
‫أُطلقت مايكروسوفت ويندوز ‪ 1222‬كجزء من خط إن تي ‪ NT‬في فبراير ‪ .1222‬تسرب في ‪ 1221‬جزء من الشفرة المصدرية (كود)‬
‫لويندوز ‪ 1222‬إلى اإلنترنت‪ .‬وكان ويندوز ‪ 1222‬اخر نظام معتمد إن تي ‪ NT‬يصدر بدون أن يحتوي على برنامج تفعيل منتج مايكروسوفت‬
‫)‪.(Microsoft Product Activation‬‬

‫بعد ويندوز ‪ ،1222‬قٌ ِسّمت عائلة ويندوز إن تي إلى خطين‪ :‬األول‪ :‬خط العمالء ويتضمن ويندوز اكس بي وخلفائه‪ ،‬وكان الخط مكونا ً من‬
‫أنظمة تشغيله ُمنتجة ليتم تثبيتها على أجهزة الكمبيوتر العادية مثل مكاتب العمل والمنازل والكمبيوترات المحمولة واألجهزة الكفية وأجهزة‬
‫الوسائط‪ .‬وكان في الخط الثاني‪ :‬ويندوز سيرفر ويتضمن الخط ويندوز سيرفر ‪ 1221‬وخلفائه متضمنا ً أنظمة تشغيل أُن ِتجت للخوادم‪ .‬والحقا ً تم‬
‫إضافة خط ثالث جديد لألنظمة ال ُمدمجة وأُضيف مع بداية ويندوز إمبدد‪.‬‬

‫ويندوز إكس بي‬


‫تحركت مايكروسوفت لدمج أنظمة التشغيل خاصتها مع ويندوز إكس بي الذي أُطلق في ‪ 11‬أكتوبر ‪ .1221‬بُني ويندوز إكس بي على نواة‬
‫ويندوز إن تي‪ .‬ولكن ُمعاد تجهيزه ليكون كنظام تشغيل للمنازل‪ .‬هذا اإلصدار ُمدح كثيرا في مجالت الكمبيوتر‪ .‬تم بيع ويندوز إكس بي في‬
‫إصدارين‪ :‬إصدار المنازل واإلصدار االحترافي )‪ (Professional‬كانت نسخة المنازل تفتقد إلى العديد من المميزات المتفوقة من األمن‬
‫والشبكات على خالف اإلصدار االحترافي‪ .‬باإلضافة إلى أن أول إصدار من ميديا سنتر أُطلق في ‪ ،1221‬مع دعم الدي في دي والتلفاز‬
‫متضمنا ً أيضا ً تسجيل البرامج والتحكم عن بعد‪ .‬تم إصدار نسخة لألجهزة اللوحية‪ .‬انتهى خط دعم ويندوز اكس بي الرئيسي في ‪ 14‬أبريل‬
‫‪ .0116‬والدعم الممتد انتهى في ‪ 1‬أبريل ‪.0114‬‬

‫بعد ويندوز ‪ ،1222‬اختلفت مواعيد إصدار نسخ الخوادم‪ ،‬وأُطلق في أبريل ‪ 1221‬ويندوز سيرفر ‪ 1221‬كبديل لخط إصدارات ويندوز ‪1222‬‬
‫للخوادم مع عدد من المميزات والتركيز على االمان‪ ،‬وعقب هذه النسخ أُطلق في ‪ 1221‬ويندوز سيرفر ‪ 1221‬ار ‪.1‬‬

‫ويندوز فيستا‪1 ،‬‬


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

‫أُطلق في ‪ 11‬يوليو ‪ 1222‬ويندوز ‪ 2‬وويندوز سيرفر ‪ 1221‬ار ‪ 1‬إلى الشركات المصنعة بينما أُطلقا للعامة بعد ثالثة أشهر في ‪ 11‬أكتوبر‬
‫‪ .1222‬على عكس خلفائه قدم ويندوز فيستا عدد كبير من المميزات لكن ويندوز ‪ 2‬كان أكثر تركيزا ً على ترقية األنظمة إلى الخط الجديد‪ ،‬مع‬
‫هدف التوافق مع التطبيقات والعتاد التي كانت متوافقة مع ويندوز فيستا‪.‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪140‬‬

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

‫محررات طرق اإلدخال وحزم اللغات‬


‫وفرت أيضا ً مايكروسوفت ِحزم لغات لمستخدمي ويندوز إكس بي وما بعده‪ ،‬هذه الحزم غيرت واجهة استخدام الويندوز (كمثال‪ :‬القوائم‬
‫ومربعات الحوار) إلى لغات أُخرى‪ .‬كل حزمة لغة لها متطلباتها الخاصة‪ ،‬من حيث اإلصدار ولغة الويندوز الذي ستعمل عليه‪ .‬كمثال‪ :‬حزمة‬
‫اللغة العربية لويندوز ‪ 2‬تعمل فقط على إصدار االعمال واإلصدار الغير محدود (‪ )ultimate‬بينما حزمة اللغة الكتالونية ليس لها شروط على‬
‫اإلصدار لكن تعمل فقط على نسخة باللغة الفرنسية أو اإلسبانية‪.‬‬
‫حتى ويندوز ‪ 2‬وويندوز سيرفر ‪ 1221‬ار‪ ،1‬كانت مايكروسوفت تُطلق مع كل نسخة من مايكروسوفت اوفيس محرر طرق ادخال للويندوز‬
‫س ِهل إدخال النصوص في هذه‬ ‫الذي يساعد المستخدمين الصينين واليابانيين والكوريين ليستطيعوا الكتابة بلغتهم‪ .‬جميع ِحزم محررات اإلدخال ت ُ ّ‬
‫اللغات والخطوط الضرورية المرفقة معه‪ .‬ولكن ويندوز سيرفر ‪ 1211‬وما بعده ويندوز ‪ 1‬كسروا هذه القاعدة و َجاؤُوا مع حزم محررات‬
‫ُمدمجة‪ .‬كنتيجة لذلك أُطلق مايكروسوفت أوفيس بدون نسخ محررات طرق اإلدخال‪ .‬ولمساعدة مستخدمي ويندوز ‪ 2‬أو ما قبله الستخدام‬
‫مايكروسوفت أوفيس ‪ ،1211‬أطلقت مايكروسوفت ‪ 1212‬كتحميل مستقل‪ .‬بالرغم من انه يمكن ألي شخص تحميل هذه الحزمة إال أن اتفاقية‬
‫الترخيص خاصتها تسمح فقط لمن لديهم نسخة من اوفيس ‪ 1211‬الستخدامها فقط‪.‬‬

‫ويندوز ‪1‬‬
‫صمم ويندوز ‪ 1‬ليستخدم في الحواسيب العادية واللوحية معا‪ .‬أُطلق‬‫أُطلق ويندوز ‪ 1‬خليف ويندوز ‪ 2‬في األسواق في تاريخ ‪ 12‬أكتوبر ‪ُ .1211‬‬
‫الجهاز اللوحي مايكروسوفت سيرفيس بجانب ويندوز ‪ 1‬كمنافس لاليباد ولوحات االندرويد‪ .‬ويتوفر الجهاز اللوحي مايكروسوفت سيرفيس في‬
‫إصدارين‪ :‬سيرفيس مع ويندوز ار تي وسيرفيس مع ويندوز ‪ 1‬برو مستهدفا المصممين والمستخدمين االخرين على أساس أعمالهم‪ .‬لكن‬
‫مايكروسوفت سيرفيس ار تي يعمل بإصدار محدود من ويندوز‪ ،‬ولن تعمل عليه العديد من تطبيقات ويندوز التقليدية‪ ،‬ويمكن للمستخدمين‬
‫تحميل التطبيقات الجديدة من متجر تطبيقات الويندوز‪ .‬مع ذلك‪ ،‬أُطلق سيرفيس برو في ‪ 2‬فبراير ‪ 1211‬وفيه سطح مكتب كامل وقادر على‬
‫تشغيل تطبيقات الويندوز العادية‪ .‬أُطلق ويندوز ‪ 1‬للشركات المصنعة في ‪ 1‬أغسطس ‪ ،1211‬وهو متوفر في إصدارين ويندوز ‪ 1‬وويندوز ‪1‬‬
‫برو‪.‬‬

‫ألول مرة منذ ويندوز ‪ 21‬أزالت مايكروسوفت زر ‪ start‬من شريط المهام‪ .‬وتم استبداله بشاشة بدء جديدة يمكن فتحها بالضغط على أسفل‬
‫يسار الشاشة أو بسحب الفارة إلى يمين الشاشة واختيار ‪ start‬من الخيارات أو بضغط زر ‪ start‬من لوحة المفاتيح‪ .‬مع ذلك يوجد العديد من‬
‫البرامج الخارجية التي يُمكن استخدامها إلعادة قائمة ‪ start‬القديمة‪ .‬وأفادت األنباء في فبراير ‪ ،1211‬أن تحديثا ً لنظام التشغيل ‪Windows‬‬
‫‪ ،8‬يُطلق عليه اسم ويندوز األزرق‪ ،‬قد أكمل المرحلة األولى المهمة‪ ،‬مشيرا ً إلى تطوير ما يقرب من نصفه‪.‬‬

‫ويندوز ‪1.1‬‬
‫ويندوز ‪ 1.1‬وهو ترقية مجانية لنظام التشغيل ويندوز ‪ ،1‬نشرت يوم ‪ 12‬أكتوبر ‪ 1211‬كإصدار ترقية لويندوز ‪ ،1‬وفي ‪ 11‬أكتوبر ‪1211‬‬
‫كترقية لنظام التشغيل ويندوز إكس بي ‪ ،‬ويندوز فيستا ‪ ،‬ويندوز ‪ ، 2‬بما في ذلك تحديث إنترنت إكسبلورر إلى اإلصدار ‪ .11‬هذا التحديث‬
‫سوف يعيد زر ‪ start‬على سطح المكتب‪ ،‬مع بعض التنقيحات على واجهة المستخدم‪ .‬منذ ‪ 12‬يونيو ‪ ،1211‬تتوفر نسخة معاينة من ويندوز‬
‫‪ 1.1‬على متجر ويندوز‪ .‬اإلصدار ‪ RTM‬متاح منذ ‪ 2‬سبتمبر ‪ 1211‬على شبكات ‪ MSDN‬و‪ .TechNet‬التحديث من نظام التشغيل ويندوز‬
‫‪ 1‬سيكون مجانا‪ ،‬بينما يجب عليك دفع حقوق التحديث إذا كنت تمتلك إصدارا أقدم (ويندوز ‪ ،2‬ويندوز فيستا أو ويندوز إكس بي)‪ .‬ال توصي‬
‫مايكروسوفت بالترقية من نظامي التشغيل ويندوز إكس بي وفيستا وبدال من ذلك توصي بإعادة تثبيت كاملة بعد إعادة تهيئة القرص الصلب‪.‬‬
‫من الممكن اقتناؤه على شكل علبة من المتجر أو تحميل ملفات التثبيت‪ .‬نالحظ خاصية جديدة وهي أنه حتى في حالة التحديث‪ ،‬فإن اإلصدارات‬
‫الكاملة سيتم تثبيتها على جهاز الكمبيوتر بويندوز ‪ 1.1‬مباشرة دون حاجتك المتالك إصدار سابق من ويندوز‪.‬‬

‫ويندوز ‪11‬‬
‫قريبا في عام ‪ 1211‬ستصدر مايكروسوفت اصدار ويندوز ‪ 12‬في حال تقدم ويندوز ‪ 1‬و‪ 1.1‬ببطيء وأطلقت نسخة تجريبية في ‪ 1‬أكتوبر‬
‫‪ 1211‬وتم انشائها على يد شركة ‪ SEGAM‬و‪ SAMSUNG‬وسيتم اطالقه على جهاز الالبتوب‪.‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪141‬‬

‫ويندوز سي إي‬
‫ويندوز سي إي (معروف رسميا بويندوز إمبدد كومباكت) وهو إصدار من ويندوز ليعمل على أجهزة الكمبيوتر المضمنة‪ ،‬مثل نُظم المالحة‬
‫الفضائية وبعض أجهزة الجوال‪ .‬وهذه النسخة معتمدة على نواة خاصة بها تسمى نواة ويندوز سي إي‪ .‬وتُرخص مايكروسوفت ويندوز سي إي‬
‫للشركات المصنعة األصلية وصانعي األجهزة‪ .‬ويمكن لمصنعي األجهزة االصلية وصانعوا األجهزة إنشاء وتعديل الواجهات الخاصة بهم‬
‫وتجاربهم‪ ،‬بينما يوفر ويندوز سي إي أساسا ً تقنية لفعل ذلك‪.‬‬
‫استخدم ويندوز سي إي في جهاز دريم كاست مع نظام سيجا المملوك لهم‪ .‬وكان ويندوز سي إي هو األساس الذي جاء منه ويندوز موبايل‪.‬‬
‫وخليفته ويندوز فون ‪ 2‬الذي كان معتمدا ً على مكونات من ويندوز سي إي ‪ 2.2‬ار‪ 1‬وويندوز سي إي ‪ .2.2‬يعتمد ويندوز فون ‪ 1‬على نفس‬
‫نواة ‪ NT‬مثل ويندوز ‪ .1‬ويندوز إمبدد كومباكت لم يتعارض مع ويندوز اكس بي إمبدد أو ويندوز إن تي ‪ 1.2‬امبدد‪.‬‬

‫‪ 1.1‬أساسيات سطر األوامر لويندوز "‪"windows Command Line basic‬‬


‫القراصنة في كثير من األحيان ال يملكون السيطرة الكاملة على واجهة المستخدم الرسومية )‪ (GUI‬في النظام الهدف‪ .‬بدال من ذلك‪ ،‬فإنهم عادة‬
‫يلجئون الى استخدام "‪( "command shell‬أي ‪ ،Command Line Access‬واجهة سطر األوامر أو ‪ )CLI‬والتي يمكن أن تمكنهم من‬
‫السيطرة على واجهة المستخدم الرسومية إذا اختاروا‪ .‬وبالمثل‪ ،‬بالنسبة للمدافعين او المهتمين بالنظام البرمجي او األمني فانهم هم االخرين‬
‫يعتمدون على سطر األوامر في أعمالهم على سبيل المثال الدفاع عن النظام الخاص بهم‪ .‬المدافعون بحاجة الى أَتْ َمتَ ( َجعَلَهُ أوتُوماتِ ِ‬
‫يكيا)‬
‫دفاعاتهم باستخدام البرامج النصية (‪ )script‬التي يتم تشغيلها في سطر األوامر أو جعل سلسلة من التغييرات على النظام بسرعة والتي تكون‬
‫بطيئة جدا في حال إذا أجريت هذه التغييرات من خالل واجهة المستخدم الرسومية )‪ .(GUI‬ولذلك‪ ،‬يجب أن تكون على دراية من استخدام‬
‫سطر األوامر‪ .‬لذلك دعونا نبدأ مع مقدمة أساسية لتبحر في سطر األوامر على ويندوز‪.‬‬
‫‪ GUI  Graphical User Interface‬‬
‫‪ CLI  Command Line Interface‬‬
‫في نظام التشغيل ويندوز‪ ،‬من المعروف أن مترجم سطر األوامر الرئيسي معروف باسم ‪ Command Prompt‬او ‪ .cmd‬هناك أيضا‬
‫مترجمي سطر اوامر آخري‪ ،‬معروفه أيضا باسم ‪ ،command shells‬متاح لويندوز ولكنها ال تستخدم على نطاق واسع‪ .‬على سبيل المثال‪،‬‬
‫‪ ،Windows PowerShell‬والذي يوفر وسيلة للمستخدمين ألداء المهام اإلدارية األكثر تقدما ضمن بيئة نصيه‪ ،‬والذي تم إدخاله ألول مرة‬
‫في ويندوز سيرفر‪ 2008‬ار‪ (windows server 2008 R2) 1‬وويندوز ‪ ،2‬ولكنها كانت متاحه لكثير من إصدارات ويندوز السابقة‪.‬‬
‫يتضمن ‪ Windows 8‬اإلصدار ‪ 1‬من ‪ PowerShell‬ويندوز ‪ 1.1‬يتضمن اإلصدار ‪ 1‬من ‪.PowerShell‬‬
‫يتم تشغيل ‪ CMD‬او ‪ Command Prompt‬كاالتي‪:‬‬
‫‪ -‬عن طريق النقر على عالمة ويندوز الموجود في شريط األدوات السفلى في الجانب االيسر بزر الماوس األيمن (ويندوز ‪ )1.1‬او‬
‫بالذهاب بالماوس الى اقصى اليسار في األسفل ثم النقر بزر الماوس األيمن (ويندوز ‪ .)1‬فتظهر قائمه نختار منها ‪command‬‬
‫‪.prompt‬‬
‫‪ -‬الطريقة االسهل والتي تعمل مع جميع نظم ويندوز‪ ،‬من خالل فتح قائمة ‪ run‬ومن ثم كتابة ‪ cmd‬ثم النقر فوق ‪.Enter‬‬

‫‪ Command prompt‬او ‪ cmd‬يوجد في المسار "‪"C:\Windows\System32‬‬


‫يوفر موقع الويب ‪ http://dosprompt.info‬معلومات موجزة عن استخدام ‪ Command prompt‬ويطلع القراء مع األوامر اإلدارية‬
‫الرئيسية‪.‬‬
‫‪ ‬ملحوظه‪ :‬عند تشغيل ‪ cmd‬من خالل ‪ run‬يفضل كتابة ‪ cmd.exe‬بدال من ‪ cmd‬فقط‪ .‬وذلك حتى ال تقع ضحية الباكدور الذي‬
‫يسمى ‪ .cmd.com‬وهذا ألنه‪ ،‬مع ‪ ،Windows shell‬دليل العمل الحالي الخاص بك (يسمى '‪ ،)'.‬وهو في المسار الخاص بك‪ .‬إنه‬
‫إذا لم يكن هناك الحقة يتم توفيرها من قبل المستخدم‪ ،‬فان الويندوز يقوم بتشغيل ملفات "‪ ".com‬أوال قبل ملفات "‪ ".exe‬أفتراضيا‪.‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪142‬‬

‫فوائد وعيوب ‪cmd‬‬


‫الفوائد‪ :‬كما ذكرنا سابقا ‪ cmd‬له منافع كثيره ومنها انه يمكنك فتح اي برنامج او ملف وتخزين كثير من الملفات وكذلك معرفه الحواسب‬
‫المتصلة وتصليح النظام ……‪ .‬الخ‪.‬‬
‫العيوب‪:‬‬
‫في اآلونة األخيرة جاءت مجموعه من المخترقين تمكنوا من صنع فايروسات بواسطة ‪ cmd‬وهي مختلفة وخطيره جدا جدا‪ ،‬مثال تقوم بمسح‬
‫الملفاتك او تغيير كلمات المرور او سرقة اموالك (إذا كان لديك بطاقة ائتمانيه) وتكمن خطورة هذه الفايروسات بانها ال يمكن اكتشاف معظمها‬
‫ألنها ليست مثل الفايروس العادي او المشهور وذلك ألنها ليست فايروسات بل هي مجرد اوامر تقوم مثال بمسح ملفات القرص الصلب او‬
‫سرقه الباس وارسالها الى ايميل القرصان او السيطرة على الحاسوب إذا كان متصل بشبكه معينه او انترنت يمكن السيطرة عليه‪.‬‬

‫أساسيات ‪command prompt‬‬


‫عندما تعمل مع موجه األوامر )‪ ،(Command Prompt‬هناك بضعة أشياء يجب ان تكون على علم بها‪:‬‬
‫العديد من األوامر لديها خيارات إضافية متوفرة‪ ،‬والمعروفة باسم ‪ .switch‬يتم إضافتها إلى األمر عن طريق إدخال الرمز "‪ "/‬ثم الحرف‪،‬‬
‫الرقم أو الكلمة‪ .‬ويمكن لهذه تغيير كيفية عمل األداة أو التعامل مع المعلومات‪ .‬ومن أشهر هذه ‪ switch‬هي ‪ ،help‬والتي سوف توفر لك‬
‫معلومات عن ‪ switch‬األخرى المتاحة‪.‬‬
‫?‪"command" /‬‬
‫سيؤدي هذا عادة إلى عرض المعلومات حول األمر وال ‪ switch‬المتوفرة‪ .‬إذا كان ال يعمل‪ ،‬حاول استخدام "?‪ "-‬بعد األمر‪.‬‬
‫"‪"command" > "filename.txt‬‬
‫هذا سوف يرسل نتائج األمر إلى ملف نصي بدال من الشاشة‪ .‬يمكنك تضمين ‪ switch‬كذلك‪ .‬هذا مفيد جدا إذا كنت تبحث في المعلومات‬
‫المساعدة لألمر‪ .‬ننظر إلى هذا المثال‪:‬‬
‫‪xcopy /? >c:\xcopy.txt‬‬
‫هذا سوف يكتب مضمون األمر ‪ help‬الى ملف يسمى ‪ xcopy.txt‬الموجود في المجدل \‪.C:‬‬
‫‪ ‬ملحوظه‪ :‬هذا الرمز ">" يقوم بتوجيه الناتج الى الملف الجديد ولكن إذا كان الملف بيه بيانات فانه يقوم بمسحها‪ .‬لحل هذه المشكله‬
‫يمكن استخدام الرمز ">>" يقوم بتوجيه الناتج مع االضافه الى البيانات المكتوبه ساسبقا إذا كان يوجد بيانات‪.‬‬
‫‪ ‬الرمز "<" هو عكس السابق بحيث يستخدم في ادراج محتويات الملف كمعطيات الى االمر (‪.)standard input from a file‬‬
‫اما الرمز ‪ 1‬مع السابق فتستخدم في حاالت الخطأ (>‪.)2‬‬
‫‪ ‬أخيرا الرمز "|" ويعنى ‪ pipe‬ويعنى انه يأخذ ناتج االمر الذي قبله كمدخالت الى االمر الذي بعده‪.‬‬
‫‪Stopping a Command‬‬
‫إذا كنت تبدأ أمر يبدو كأنه حلقات‪ ،‬وتبين أكثر مما كنت تتوقع‪ ،‬فيمكنك إيقاف االمر من خالل النقر فوق ‪.CTRL+C‬‬

‫‪( Basic Command Line Operations‬عمليات سطر األوامر)‬


‫هنا نبدأ مع األمر "‪ "dir‬والذي يستخدم لسرد الملفات والدالئل في المجلد‪ .‬افتراضيا‪ ،‬فإنه يبحث عن الملفات والمجلدات التي ال‬ ‫‪-‬‬
‫تكون مخفيه أي ال تحمل ‪ .hidden attribute‬إنه يعرض اخر وقت تم فيه الكتابة‪ ،‬حجم الملف أو محتوياته إذا كان البند هو‬
‫مجلد‪ ،‬واسم‪.‬‬

‫لعرض محتويات مجلد او دليل معين استخدام هذه األوامر‪:‬‬


‫‪‬‬ ‫‪dir‬‬ ‫سرد محتويات الدليل الحالي‬
‫‪‬‬ ‫\ ‪dir‬‬ ‫سرد محتويات المسار الجذري لمحرك األقراص الحالي‬
‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪143‬‬

‫‪‬‬ ‫‪dir subdir1‬‬ ‫سرد محتويات الدليل الفرعي‬


‫‪‬‬ ‫‪dir d: or‬‬ ‫\‪dir d:‬‬ ‫سرد محتويات المسار الجذري لمحرك أقراص آخر‬
‫‪‬‬ ‫‪dir *.exe‬‬ ‫سرد قائمه بالملفات ذات االمتداد ‪exe‬‬
‫‪‬‬ ‫‪dir ..‬‬ ‫سرد محتويات ‪parent directory‬‬
‫‪‬‬ ‫‪dir /ah‬‬ ‫لعرض العناصر المخفية‬
‫‪‬‬ ‫‪dir /r‬‬ ‫عرض بيانات اضافيه (مغطاة في وقت الحق في هذه الوحدة)‬
‫هذه الخيارات يمكن الجمع بينها لعرض محتويات الدالئل كما تريد‪:‬‬
‫‪dir ..\otherdir‬‬
‫‪dir subdir1\subdir2‬‬
‫‪dir d:\myfldr\otherdir‬‬
‫‪dir ..\otherdir‬‬

‫‪ -‬نبدأ االن مع االمر الثاني وهو "‪ "cd‬والذي يستخدم في التنقل بين المجلدات واالقراص‪.‬‬
‫لتغيير محركات األقراص‪ ،‬نكتب حرف محرك األقراص متبوعا بنقطتين‪ .‬على سبيل المثال‪ ،‬للتغيير إلى محرك األقراص ‪( D‬يتم ذلك من‬
‫خالل كتابة ‪.)d:‬‬
‫يستخدم االمر "‪ "cd‬واألمر "‪ "chdir‬لتغيير الدليل الحالي‪ ،‬وهو اختصار ل "‪ ."change directory‬كتابة األمر بدون أي خيارات سوف‬
‫يعرض دليل العمل الحالي )‪ ،(current working directory‬ولكن غالبا ما يتم استخدام األمر لتغيير الدالئل‪ .‬هذه األوامر يمكن‬
‫استخدامها لتغيير إلى دالئل معينة‪:‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ 144

- The root of the current drive: cd \


- A subdirectory in the current working directory: cd myfolder
- Move to the parent directory (from C:\dir1\subdir to C:\dir1): cd ..
- Move to the directory whose name contains spaces: cd "My documents"
- Move to the directory without typing the full name: cd my*
.cd\ ‫وللرجوع الى الخلف من مسار العمل الحالي يستخدم االمر‬

:‫ بعض األوامر األخرى‬-


‫" أو‬rd" ‫ يمكنك استخدام األمر‬،‫ إلزالة مجلد‬،‫ وبالمثل‬."mkdir" ‫" أو‬md" ‫ يمكنك ذلك من خالل استخدام األمر‬،‫دليل جديد‬/‫إلنشاء مجلد‬
.‫" يتم استخدامهما النهما أسهل في الكتابة‬rd"‫" و‬md" ‫ عادة‬."rmdir"
:‫ األمثلة على ذلك‬."cd" ‫ يمكن نقل الملفات باستخدام المسار المماثل للمستخدم مع االمر‬."move" ‫يمكن نقل الملفات عن طريق األمر‬
- Move a file to a subdirectory: move myfile.txt mysubdir
- Move a file to the parent directory: move myfile.txt ..
- Move a file to a sibling directory: move myfile.txt ..\otherdir
- Move a file to the root of the current drive: move myfile.txt \
- Move a file to a directory on another drive: move myfile.txt z:\dir\subdir
.(del myfile.txt) ‫ مثال على ذلك‬،‫" لحذف الملف‬del" ‫يمكنك استخدام االمر‬
:‫" لنسخ الملفات‬copy" ‫يستخدم األمر‬
- Create a backup copy: copy myfile.txt myfilebackup.txt
- Copy the file to another drive and directory copy myfile.txt z:\myfile\
‫" إلعادة تسمية الملف‬ren" ‫يستخدم االمر‬
attrib ‫ االمر‬-
،Archive(a) ،Read-Only(r) :‫ يمكن تعليم الملف كاالتي‬.‫( على الملفات‬attributes) ‫" لتعيين السمات‬attrib" ‫يتم استخدام االمر‬
‫) يمكن‬+( ‫ عالمة الجمع‬.‫ لذلك يمكن تعيين أكثر من سمة واحده على الملف‬،‫ ليست حصرية‬Attributes .Hidden(h) ‫ أو‬،System(s)
‫ لتعيين سمات على كافة الملفات في‬attrib ‫ كما يمكن استخدام األمر‬.‫) يمكن استخدامها إلزالة السمة‬-( ‫استخدامها إلضافة سمة والناقص‬
.(attrib +h /S mydir) ‫ على سبيل المثال‬."/S" ‫شجرة المجلد وذلك من خالل تحديد المجلد واستخدام الخيار‬
‫" يمكن استخدامهما معا‬/D" ‫" و‬/S" ‫ الخيار‬."/D" ‫ يمكنك ذلك من خالل استخدام الخيار‬،‫ إلى المجلدات أيضا‬Attributes ‫لتطبيق تغييرات‬
.‫لتعديل سمات على الملفات والمجلدات‬
- Make a file hidden: attrib a.txt +h
- Make a file unhidden: attrib a.txt -h

https://www.facebook.com/tibea2004
‫فن الهاكر األخالقي‬ ‫‪145‬‬

‫‪ -‬االمر ‪tasklist‬‬
‫يعرض االمر "‪ "tasklist‬العمليات التي يتم تشغيلها حاليا على المستوى المحلي أو النظام البعيد‪ .‬لتحديد النظام البعيد نستخدم الخيارات األتية‪:‬‬
‫)‪ ،/U (user) ،/S (system‬و)‪ ./P (password‬يمكن أيضا فلترة قائمة العمليات باستخدام الخيار ‪ /fi‬وباستخدام خيارات الفلتر هذه‪:‬‬

‫يمكنك أيضا استخدام االمر ‪ taskkill‬إلغالق او قتل أي عملية‪ .‬تستخدم نفس الخيارات والفالتر المستخدمة مع ‪ .tasklist‬من أشهر‬
‫الخيارات المستخدمة معه‪:‬‬
‫‪-‬‬ ‫‪(/PID (process ID)) Specifies the PID of the process to be terminated‬‬
‫‪-‬‬ ‫‪(/IM (imagename)) Specifies the image name of the process to be terminated.‬‬
‫للحصول على قائمه بجميع التعريفات )‪ (driver‬الموجودة في النظام فان أسرع وسيله هو استخدام االمر ‪.driverquery‬‬
‫لمعرفة معلومات عن النظام الحالي استخدم االمر ‪.systeminfo‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪146‬‬

‫‪Network Command Line Operations‬‬


‫يتم استخدام األمر "‪ "ipconfig‬عادة لعرض تكوين شبكة االتصال للنظام المحلي‪ .‬لمزيد من التفاصيل‪ ،‬بما في ذلك عنوان ‪،MAC‬‬ ‫‪-‬‬
‫يتم ذلك عند تشغيل األمر مع الخيار ‪ ./all‬الخيار ‪ /renew‬و ‪ /release‬يمكن استخدامها لتجديد أو إطالق سراح عناوين ‪ IP‬التي‬
‫تم الحصول عليها من قبل خادم ‪.DHCP‬‬
‫األمر "‪ "netstat‬هو أمر مفيد جدا لمسؤولي النظام ومعالج الحادث بأنه يتم استخدامه للحصول على معلومات بشأن االتصاالت‬ ‫‪-‬‬
‫المفتوحة حاليا أو المنافذ المفتوحة‪ .‬ويمكن أيضا أن يستخدم لتحديد ‪ process ID‬للعملية التي فتحت اتصال أو منفذ‪ .‬وهذا مفيد‬
‫لتحديد العمليات التي تقوم بالتواصل مع النظم األخرى‪.‬‬
‫‪Command‬‬ ‫‪Displays‬‬
‫‪netstat‬‬ ‫االتصاالت النشطة فقط‪ ،‬مع اسم الدومين بالكامل‬
‫‪netstat -a‬‬ ‫االتصاالت النشطة ومنافذ االستماع )‪ (listening port‬مع اسم الدومين الكامل‬
‫‪netstat -ao‬‬ ‫االتصاالت النشطة ومنافذ االستماع )‪ (listening port‬مع اسم الدومين الكامل و‪ PID‬للتطبيق الذي يستخدمه‬
‫‪netstat -an‬‬ ‫االتصاالت النشطة ومنافذ االستماع )‪ (listening port‬ولكن في شكل رقمي (ال أسماء النطاقات)‬
‫االتصاالت النشطة ومنافذ االستماع )‪ (listening port‬ولكن في شكل رقمي (ال أسماء النطاقات) مع ‪ PID‬للتطبيق‬
‫‪netstat -ano‬‬
‫الذي يستخدمه (هذا أشهر خيار مستخدم مع ‪.)netstat‬‬
‫‪netstat -r‬‬ ‫‪Routing table‬‬
‫‪ -‬يستخدم األمر "‪ "ping‬للتحقق من االتصال والتحقق من وجود اتصال بين نظامين‪ .‬يرسل األمر حزمة ‪ Echo‬عبر البروتوكول‬
‫‪ .)Internet Control Message Protocol( ICMP‬ويستجيب النظام المتلقي مع الحزمة ‪ .ICMP Echo-Reply‬إذا كان‬
‫هناك أي مشاكل في الشبكة في أي من االتجاهين بين العقدتين‪ ،‬فان النظام الذي قام بتنفيذ ‪ ping‬لن يتلقى حزم ‪.Echo-Reply‬‬
‫باإلضافة إلى ذلك‪ ،‬يرسل الوقت المنقض الذي يستغرق بين إرسال الحزمة ‪ Echo-Request‬واستالم الحزمة ‪Echo-Reply‬‬
‫وذلك لتحديد زمن الوصول في الرابط بين المضيفين‪.‬‬
‫تتطلب وظيفة األمر ‪ ping‬السماح للحزم ‪ Echo-Request‬و‪ Echo-Reply‬بالعبور عبر الشبكات وأن النظام البعيد ال يقوم‬
‫بحظر طلبات ‪.ping‬‬
‫‪ -‬االمر "‪ "tracert‬هو اختصار ل (‪ )Trace Route‬وهو مفيد في عرض المسار وقياس زمن الوصول الحزم التي تتحرك عبر‬
‫الشبكة‪ .‬األمر مفيد جدا الستكشاف األخطاء وإصالحها ألنها يمكن أن يكشف عن االرتباطات البطيئة أو المقفلة‪ .‬أنها تتطلب أن‬
‫األنظمة المتوسطة ترسل حزم ‪ ICMP Time Exceeded‬والمضيف الخاص بك قادرا على تلقي مثل هذه الحزم‪ .‬للحصول على‬
‫شرح لكيفية عمل ‪ TRACERT‬راجع الرابط التالي من ويكيبيديا‪.https://en.wikipedia.org/wiki/Traceroute :‬‬

‫‪ 1.1‬أنظمة الملفات )‪(File system‬‬


‫في الويندوز‪ ،‬المجلد الجذري (‪ )root folder‬هو "\‪ "C:‬بشكل افتراضي على معظم أجهزة ويندوز‪ .‬محركات األقراص ‪ logical‬المختلفة‪،‬‬
‫سواء كانوا أقراص فردية ‪ physical‬أو ‪ partitions‬داخل قرص واحد‪ ،‬تمثل في الويندوز بحرف متبوعا بنقطتين‪ .‬على سبيل المثال‪ ،‬في‬
‫إعداد ويندوز االفتراضي‪ ،‬القرص الصلب الذي يستضيف نظام التشغيل هو "‪ "C:‬محرك األقراص المرنة )‪ (floppy drive‬هي ("‪"A:‬‬
‫أو "‪ "B:‬إذا كان هناك اثنين من محركات األقراص المرنة)‪ ،‬ومحركات األقراص اإلضافية (‪)floppy/hard disk/CD-ROM/etc.‬‬
‫هي "‪ ،"F:" ،"E:" ،"D:‬وهلم جرا‪ .‬باإلضافة إلى ذلك‪ ،‬موارد الشبكة عن بعد يتم تعيينها )‪ (mapping‬في بعض األحيان إلى أحرف‬
‫محركات األقراص )‪ .(drive letter‬أي من ‪ 12‬حرفا من حروف اللغة اإلنجليزية يمكن تعيينها إلى األجهزة وموارد الشبكة‪.‬‬

‫مناطق التخزين )‪(Storage location‬‬


‫أصدرت مايكروسوفت ‪ whitepaper‬عن بنية الدليل )‪ (directory structure‬لويندوز فيستا‪ .‬على الرغم من أن ويندوز ‪ 2‬أدخل بعض‬
‫المفاهيم الجديدة مثل "‪ ،"Libraries‬ولكن لم تتغير بنية الدليل مع إصدارات ويندوز ‪ 2‬و‪ 1‬و‪ .1.1‬المهاجم يكون ملما جيدا ببنية الدليل‬
‫ومعرفة اين يتم االحتفاظ بالملفات المثيرة لالهتمام مثل ‪،)registry database( NTUSER.DAT ،user's browser cache‬‬
‫وقاعدة بيانات ‪ SAM‬التي تحتوي على كلمات السر‪ .‬على سبيل المثال‪ ،‬يتم تخزين التطبيقات في المسار )‪.(C:\Program Files‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ 147

.(C:\ProgramData) ‫ ملفات اعدادات التطبيقات تخزن في‬.(C:\Users) ‫في حين ان بيانات المستخدم يتم تخزينها في المسار‬

Users Folders (Directories)


‫ وموقع نفس المجلد في‬،‫ ويبين الجدول التالي المجلدات‬.‫ عن اإلصدارات القديمة لويندوز‬Users ‫ قد تغيرت بنية المجلد‬،‫في ويندوز فيستا‬
‫ أسهل في الوصول اليها‬،‫ أسماء المجلدات الجديدة والمواقع تعني ان المجلدات تصبح أقل تداخل‬.‫ واإلصدارات السابقة‬XP ‫ويندوز‬
.‫( واألسماء جديدة أفضل في وصف محتويات المجلدات‬navigation)
.‫ مقارنة بالشكل الجديد‬XP ‫ من الوثيقة تصف بنية المجلد الجديد ويحتوي على خرائط كاملة من اسماء المجلدات في‬2 ‫ إلى‬1 ‫الصفحات‬
http://www.microsoft.com/en-us/download/details.aspx?DisplayLang=en&id=22322
‫ تم نقل عدد من‬.XP ‫" المستخدمة في‬Application Data" ‫" مجلد مستخدم في ويندوز فيستا ويختلف عن المجلد‬AppData" ‫المجلد‬
."AppData" ‫ لكي تصبح ضمن المجلد‬XP ‫المجلدات في‬
Windows Vista folder Windows XP folder Description Windows XP folder location
name name
Contacts Not applicable Default location for Not applicable
contacts
Desktop Desktop Contains desktop items, Documents and
including files and shortcuts Settings\%username%\Desktop
Documents My Documents Default location for Documents and
documents Settings\%username%\My
Documents
Downloads Not applicable Default location to save all Not applicable
downloaded content
Favorites Not applicable Internet Explorer Favorites Documents and
Settings\%username%\Favorites
Links Not applicable Contains Windows Explorer Not applicable
Favorites
Music My Music Default location for user’s Documents and
music files Settings\%username%\My Music
Pictures My Pictures Default location for picture Documents and
files Settings\%username%\My
Pictures
Saved Games Not applicable Default location for saved Not applicable
games
Searches Not applicable Default location for saved Not applicable
searches
Videos My Videos Default location for video Documents and
files Settings\%username%\My Videos

https://www.facebook.com/tibea2004
‫فن الهاكر األخالقي‬ ‫‪148‬‬

‫‪AppData‬‬ ‫‪Not applicable‬‬ ‫‪Default location for‬‬ ‫‪Not applicable‬‬


‫‪application data and‬‬
‫)‪binaries (hidden folder‬‬

‫‪Windows Vista profile location Users\%username%\...‬‬ ‫‪Windows XP profile location Documents and‬‬
‫‪Settings\%username%\...‬‬
‫‪…\AppData\Roaming‬‬ ‫‪Application Data‬‬
‫‪…\AppData\Local‬‬ ‫‪Local Settings‬‬
‫‪…\AppData\Local‬‬ ‫‪Local Settings\Application Data‬‬

‫الروابط الرمزية (‪)Symbolic link‬‬


‫قدم ويندوز فيستا ‪ Symbolic Links‬لعالم ويندوز‪ Symbolic Links .‬جعل الملف أو الدليل )‪ (directory‬الموجود في مكان ما يظهر‬
‫في مكان آخر‪ .‬الملف القائم على ‪ Symbolic Links‬متشابه في بضعة أوضاع مع ‪ .Shortcuts‬وظيفة ‪ Symbolic Links‬مثل‬
‫الموجودة في عالم اللينكس وقامت باستبدال ‪ Junctions‬المقدم مع نظام التشغيل ‪ Symbolic Links .Windows 2000‬غالبا ما يكون‬
‫مثيرة لالهتمام بالنسبة للمهاجمين ألنها يمكن أن تستخدم للوصول الى الدالئل خارج شجرة الدليل الحالية )‪.(current working directory‬‬
‫على سبيل المثال‪ ،‬تطبيق ما قد يكون عليه بعض القيود التي ال تسمح للمستخدمين بالوصول إلى أي ملف في الدليل ‪.c:\inetpub\wwwroot‬‬
‫ومع ذلك‪ ،‬سوء وضع ‪ Symbolic Links‬من قبل ‪ ،administrator‬أو واحدة تم إنشاؤه من قبل مهاجم‪ ،‬يمكن استخدامها لتجاوز هذا‬
‫التقييد‪ Symbolic link .‬التي وضعت بطريقه سيئة يمكن أن تؤدي إلى العديد من المشاكل‪.‬‬
‫يمكنك إنشاء ‪ Symbolic link‬من خالل استخدام االمر ‪ mklink‬ويجب تشغيل ‪ cmd.exe‬في الوضع ‪ administrator‬مثال على ذلك‬
‫كاالتي‪:‬‬
‫‪- C:\> mkdir \testing‬‬
‫‪- C:\testing> cd \testing‬‬
‫‪- C:\testing> mklink /D SANSROCKS C:\testing‬‬
‫*‪- C:\testing> dir /s SANSROCKS*.‬‬
‫بعد االنتهاء قم بمسح ما قمت به كاالتي‪:‬‬
‫‪- C:\testing> rmdir SANSROCKS‬‬
‫‪- C:\testing> cd ..‬‬
‫‪- C:\> rmdir testing‬‬

‫الحظ أننا أنشأنا الرابط ‪ SANSROCKS‬في الدليل ‪ C:\testing‬وليس في جذر نظام الملفات (أي في \‪ .)C:‬إذا قمنا بسرد قائمة للمجلدات‬
‫عكسي )‪ (recursive directory listing‬فانه سوف يدخل الى الدليل ‪ SANSROCKS‬والتي بدوره سوف يوجهك الى الدليل‬
‫‪ .testing‬ضمن هذا الدليل نرى ‪( SANSROCKS‬مرة أخرى) وستحاول ادخالنا اليه (مرة أخرى)‪ .‬هذه النتائج سوف تصبح في حلقة ال‬
‫نهائية‪.‬‬

‫)‪Alternate Data Streams (ADS‬‬


‫يدعم نظام الملفات ‪ NTFS‬أيضا جداول البيانات البديلة )‪ (Alternate Data Streams‬أو "‪ ."ADS‬أدخلت ‪ ADS‬أصال إلى نظام‬
‫ملفات ويندوز من أجل تقديم الدعم ألجهزة أبل‪ .‬نظام ملفات أبل ‪ HFS‬يقوم بتخزين معلومات حول الملف مثل اسم البرنامج الذي أنشأ الملف‬
‫في الملف "‪ ."resource fork‬هذه المعلومات ال يتم استخدامها عادة من قبل نظام التشغيل ويندوز ويتم تجاهلها من قبل معظم تطبيقات‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪149‬‬

‫ويندوز‪ .‬ومع ذلك‪ ،‬إنترنت إكسبلورر يضيف التيار )‪ Zone.Identifier (stream‬على كل ملف تم تنزيله من االنترنت‪ .‬في حين انه تم‬
‫تخزين هذه المعلومات وإمكانية الوصول إليها‪ ،‬ولكن يتم تجاهلها من قبل العمليات العادية‪ Alternate Data Streams .‬يمكن استخدامها‬
‫من قبل المهاجمين إلخفاء الملفات الخبيثة من ان ترى‪.‬‬
‫‪ ADS‬يمنحك القدرة على حقن‪/‬إضافة بيانات الملف إلى الملفات الموجودة دون التأثير على وظائفها‪ ،‬حجمها‪ ،‬أو عرضها في أدوات ويندوز‬
‫مثل ويندوز إكسبلورر أو حتى "‪ "dir‬في سطر األوامر‪.‬‬
‫إذا هذه الثغرة تمكنك من اخفاء اي ملف بداخل اي ملف اخر بدون تغير حجمه‪.‬‬

‫تمرين ‪ 1‬على ‪ADS‬‬


‫في هذا التمرين سوف نستخدم األوامر والوظائف أدناه‪.‬‬
‫‪ -‬االمر ‪ ،type‬يستخدم إلخراج محتوى الملف على الشاشه‪ .‬كما أنه يدعم ‪.ADS‬‬
‫‪ -‬االمر ‪ ،echo‬يستخدم إلدخال نص‪.‬‬
‫‪ -‬العالمة > (أكبر من)‪ ،‬تستخدم "إلعادة توجيه" يستخدم إلعادة توجيه اإلخراج إلى ملف أو ‪ stream‬التي عادة ما يتم عرضه‬
‫باستخدام "‪ )colon( ":‬حيث يستخدم لتحديد ‪.stream‬‬
‫بدء تشغيل البرنامج في جلسة جديدة‪ .‬بمجرد كتابة "‪ "start‬سيتم فتح موجه أوامر جديد‪.‬‬
‫اتبع الخطوات التالية‪:‬‬
‫‪ -‬احصل على ملف وليكن ملف صورة تريد ان تخبئ ملف نصي بداخله باستخدام ‪.ADS‬‬
‫‪ -‬افتح موجه األوامر ‪.cmd.exe‬‬
‫‪ -‬قم بإنشاء ملف نصي جديد مع المحتوي ‪.echo I need to hide this > hideme.txt‬‬
‫‪ -‬تحقق من الملف‪ ،‬سوف ترى ‪.type hideme.txt‬‬
‫‪ -‬قم بكاتبة االمر "‪ "dir‬لرؤية قائمة دليل‪.‬‬

‫قم بإنشاء ‪ ADS‬كاالتي‪:‬‬ ‫‪-‬‬


‫‪type hideme.txt > go.png:myads.txt‬‬
‫قم بسرد قائمة دليل مرة أخرى (باستخدام ‪ .)dir‬سوف تالحظ أن أحجام الملفات نفسها‪.‬‬ ‫‪-‬‬
‫قم بحذف الملف النص األصلي )‪:(hideme.txt‬‬ ‫‪-‬‬
‫‪del hideme.txt‬‬
‫قم بعرض محتويات الصورة (سوف تقوم بفتح الصورة بدون أي تغير فيها)‪:‬‬ ‫‪-‬‬
‫‪start go.png‬‬
‫قم بعرض محتويات ‪:ADS‬‬ ‫‪-‬‬
‫‪notepad go.png:myads.txt‬‬
‫للبحث عن ‪ ADS‬يتم ذلك من خالل استخدام األمر ‪:dir‬‬ ‫‪-‬‬
‫‪dir /r‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪150‬‬

‫من الممكن ضم أيضا ملفات ‪ exe‬ويتم تشغيل ملفات ‪ exe‬المخفاة في ملف ‪ ADS‬باستخدام االمر ‪ start‬بدال من ‪ notepad‬مثال على ذلك‬
‫كاالتي‪:‬‬
‫‪- type Z1.exe > Z2.exe:Z1.exe‬‬
‫‪- start c:\Z2.exe:Z1.exe‬‬
‫مثال اخر كاالتي‪:‬‬
‫‪- C:\> echo "Main File" > C:\main.txt‬‬
‫‪- C:\> echo "This is the stream" > C:\main.txt:strm.txt‬‬
‫‪- C:\> dir /s windows > C:\main.txt:dir.txt‬‬
‫‪- C:\> notepad C:\main.txt‬‬
‫‪- C:\> notepad C:\main.txt:strm.txt‬‬
‫‪- C:\> notepad C:\main.txt:dir.txt‬‬
‫‪- C:\> del C:\main.txt‬‬

‫)‪Mandatory Integrity Controls (MIC‬‬


‫يستخدم الويندوز ‪ MIC‬لمنع المستخدمين والعمليات التي لها مستوى واحد من الثقة من تعديل ملفات على مستوى آخر من الثقة‪ .‬على سبيل‬
‫المثال‪ ،‬الويندوز يمنع ‪ Internet Explorer‬من تعديل ملفات نظام التشغيل في الدليل ‪ .C:\WINDOWS\system32‬يتم تعيين‬
‫المستخدمين في "‪ "Integrity Level‬الى ‪ Medium ،High‬أو ‪ .Low‬كائنات نظام التشغيل مثل الملفات يتم تعينها هي األخرى في‬
‫"‪ "Integrity Level‬من ‪ Medium ،High‬أو ‪ .Low‬يمكن للمستخدمين تعديل الملفات فقط التي تتساوى او اقل في ‪ MIC‬الخاص بهم‪.‬‬
‫لذلك المستخدم الذي لديه "‪ Medium "Integrity Level‬يمكنه تعديل الملفات ذات ‪ Medium or Low Integrity‬فقط‪ .‬افتراضيا‪،‬‬
‫يكون لدى المستخدمين ‪ ،Medium Integrity level‬ولكن نظام التشغيل سوف يقوم بإسقاط المستخدم الى ‪Low Integrity level‬‬
‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪151‬‬

‫عندما يقوم المستخدم بأشياء مثل تصفح اإلنترنت أو قراءة البريد اإللكتروني‪ .‬نظام التشغيل وبعض التطبيقات مثل ‪Internet Explorer‬‬
‫أيضا تقوم بإنشاء دليل ذات المستوى "‪ "Low‬لجعل الملفات متاحة للمستخدم عندما يتم تخفيض مستوى ‪ Integrity Level‬الخاص به‪.‬‬

‫‪File Permissions – DACLs‬‬


‫يستخدم الويندوز "قوائم التحكم بالوصول المستقل" (}‪ )Discretionary Access Control Lists {DACLS‬للتحكم في الوصول إلى‬
‫الملف و‪.system objects‬‬
‫كل دليل أو ملف يحتوي على قائمة من األذونات )‪ (permission‬المرتبطة به‪ .‬تفاصيل األذونات تلك تبين من يمكنهم الوصول إلى الملفات‬
‫وما يمكن القيام به مع هذه الملفات‪ .‬بعض المستخدمين سوف يكون لهم صالحيات القراءة فقط في حين أن آخرين لديهم القدرة على القراءة‬
‫والكتابة أو تنفيذ الملفات‪ .‬باقي األعضاء قد يتم تعين لهم "‪ "full control‬على الملفات‪ ،‬بما في ذلك القدرة على تغيير صالحيات المستخدمين‬
‫اآلخرين إلى الملف‪ .‬الملفات والدليل لديها ايضا "‪ ."owner‬ال "‪ "owner‬دائما يمكنه تعديل صالحيات الكائن ومن يستطيع الوصول اليه‪.‬‬
‫باإلضافة إلى ‪ Standard Permission‬هناك أيضا ‪ Advanced Permissions‬التي تسمح باإلعدادات القوية على أمن الكائنات‬
‫وتشمل االتي‪:‬‬
‫‪- Full Control‬‬
‫‪- Traverse Folder/Execute File‬‬
‫‪- List Folder/Read Data‬‬
‫‪- Read Attributes‬‬
‫‪- Read Extended Attributes‬‬
‫‪- Create Files/Write Data‬‬
‫‪- Create Folders/Append Data‬‬
‫‪- Write Attributes‬‬
‫‪- Write Extended Attributes‬‬
‫‪- Delete‬‬
‫‪- Read Permissions‬‬
‫‪- Change Permissions‬‬
‫‪- Take Ownership‬‬
‫‪The "Standard Read Permission" allows these Advanced Permissions:‬‬
‫‪- List Folder/Read Data‬‬
‫‪- Read Attributes‬‬
‫‪- Read Extended Attributes‬‬
‫‪- Read Permissions‬‬
‫المرجع‪:‬‬
‫‪http://www.windowsecurity.com/articles-tutorials/authentication_and_encryption/Understanding-Windows-‬‬
‫‪NTFS-Permissions.html‬‬

‫توريث االذونات (‪)Inheritance of Permissions‬‬


‫األذونات الموروثة هي أذونات تم تطبيقها على ‪ parent directory‬ثم ورثت من هذا ‪ .Parent‬على سبيل المثال‪ ،‬إذا كان المجلد ‪B‬‬
‫(‪ )child‬تحت المجلد ‪ ،)Parent( A‬فان ‪ B‬يرث االذونات التي طبقت على ‪.A‬‬
‫‪( Explicit permissions‬األذونات الصريحة) يتم تطبيقها إلى كائن معين (ملف أو ملف) لم يورث اليه صالحيات‪.‬‬
‫المزج بين ‪ inherited permissions‬و‪ explicit permission‬يسمح ل ‪ administrators‬من تحديد أذونات واسعة وتعديلها على‬
‫مستوى ‪ .granular level‬على سبيل المثال‪ ،‬يمكن أن يكون لديك مجلد مع األذونات التي تسمح لجميع الموظفين لعرض‪/‬قراءة جميع‬
‫الملفات (التي ورثها عن الكائنات)‪ ،‬ولكن في ‪( Explicit permissions‬األذونات الصريحة) على جدول الرواتب يسمح فقط بمشاهدته من‬
‫قبل الناس الموجودة في المحاسبة‪.‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪152‬‬

‫‪Allow vs Deny‬‬
‫الضوابط )‪ (Permission‬يمكن أن تكون معقدة للغاية و‪ deny permission‬يمكن أن تجعل األمر أكثر سهولة بالنسبة الى ‪Admin‬‬
‫وتحديد األذونات‪.‬‬
‫قد يسمح مجلد معين لجميع الموظفين وأعضاء هيئة التدريس‪ ،‬المساعدين واالستشاريين‪ ،‬الخ (جميع المستخدمين الذي لهم صالحيات) القراءة‬
‫والكتابة إلى دليل معين‪ ،‬لكنها قد ال ترغب في السماح للطالب بالكتابة إلى الدليل بحيث يصبح لديهم ‪ .deny write permission‬هذا أبسط‬
‫من إضافة كل مجموعه ليس فيها الطالب وتوفير الوصول للكتابة إلى كل منهم‪.‬‬

‫‪Permissions Precedence‬‬
‫‪ Deny permissions‬يعطى األسبقية األعلى‪.‬‬
‫‪CompanyFileShare – Full-Access for Administrators group, Read for all Users‬‬
‫‪|--HumanResourcesFolder – Write for users in HR Group, Deny Read/Write for users in the "Non-HR" group‬‬
‫|‬ ‫‪|--PayrollSpreadsheet.xlsx – Read Access by Executives‬‬
‫|‬ ‫‪|--EmployeeInfo.xlsx‬‬
‫|‬ ‫‪+-ResumesFolder‬‬
‫‪|--AccountingFolder – Write access for users in Account Group‬‬
‫‪|--EngineeringFolder – Write access for users in Engineering Group‬‬
‫‪+-MarketingFolder – Write access for users in Marketing Group‬‬
‫على سبيل المثال‪ ،‬يمكن أن تستخدم بنية دليل للسماح للمستخدمين لتبادل الملفات‪ .‬وسوف يعطى للمسؤولين الوصول الكامل على مستوى عال‪،‬‬
‫وأنه سيتم توريث على كل كائن أسفل شجرة الدليل‪ .‬سوف يكون هناك أيضا أذونات أخرى سوف تتم إضافتها‪ ،‬وبالتالي فإن الدليل‬
‫‪ AccountingFolder‬يمكن قراءته من قبل جميع المستخدمين ولكن يسمح بالكتابة فيه من قبل المستخدمين في مجموعة المحاسبة‪.‬‬

‫الكائن (الدالئل والملفات) في المجلد ‪ HumanResources‬لديها ‪ deny read/write‬ألي من المستخدمين في المجموعة "‪."non-HR‬‬
‫ومع ذلك‪ ،‬فإن ‪ explicit‬تسمح بالقراءة على ‪ PayrollSpreadsheet.xlsx‬حيث يسمح ل ‪ Executives‬بقراءة الملفات‪ ،‬حيث ان‬
‫‪ explicit permission‬لديها أسبقية أعلى من ‪ deny permission‬التي ورثت من المجلد ‪.)HumanResourcesFolder( parent‬‬
‫هذا الملف يجب الوصول إليه مباشرة حيث انه ال يسمح ل ‪ Executives‬بقراءة الدليل الذي يحتوي على الملف‪.‬‬
‫ملخص هذا‪:‬‬
‫‪ Deny -‬له اسبقيه اعلى من ‪.Allow‬‬
‫‪ Explicit -‬له اسبقيه اعلى من ‪.Inheritance‬‬
‫‪ Explicit -‬له اسبقيه اعلى من ‪.Deny‬‬

‫‪ 1.1‬المستخدمين والمجموعات )‪(Users And Groups‬‬

‫‪User Management‬‬
‫تحت بيئة ويندوز‪ ،‬حسابات المستخدمين عادة ما تدار من ‪ ،Control Panel‬حيث يمكن إنشائه أو تعديله أو حذفه‪ .‬ويمكن أيضا أن يتم منح‬
‫)‪ (granted‬أو إلغاء )‪ (revoked‬بعض االمتيازات لحسابات المستخدمين‪ .‬وباإلضافة إلى أداة واجهة المستخدم الرسومية‬
‫"‪ ،"LUSRMGR.MSC‬يمكنك أيضا إدارة المستخدمين من سطر األوامر باستخدام األمر ‪.net‬‬

‫‪ .1‬الصالحيات والتحكم في حساب المستخدم ))‪(Permissions & User Account Control (UAC‬‬
‫قبل أن تتمكن من تعديل أي حسابات على النظام الخاص بك‪ ،‬تحتاج إلى استخدام موجه األوامر في الوضع ‪ .administrative‬وسوف‬
‫نناقش التحكم في حساب المستخدم (‪ )UAC‬في وقته‪ ،‬لكن اآلن اتبع الخطوات المذكورة أعاله للحصول على الموجه ‪ Admin‬حتى نتمكن‬
‫من إنشاء وتعديل الحسابات‪.‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪153‬‬

‫‪ .1‬إضافة المستخدمين باستخدام االمر ‪net user‬‬


‫يمكن استخدام هذا األمر في إضافة المستخدم من دون تحديد كلمة مرور‪ .‬يمكن أيضا تشغيل األمر مع كلمة المرور المحددة أو مطالبة‬
‫المستخدم إلدخال كلمة المرور‪ .‬يوفر الخيار األخير إضافية أمنية حيث ال يتم تخزين كلمة المرور في ‪ command history‬أو عرضه على‬
‫الشاشة‪.‬‬
‫للمزيد من المعلومات عن هذا االمر يمكنك زيارة الرابط التالي‪:‬‬
‫‪http://support.microsoft.com/en-us/kb/251394‬‬
‫للحصول على معلومات عن هذا االمر يمكنك استخدام االتي‪:‬‬

‫صيغة االمر للحصول على معلومات مختصره‬

‫صيغة االمر للحصول على معلومات مفصله‬

‫الضافة مستخدم جديد كاالتى‪:‬‬ ‫‪-‬‬


‫‪net user mohammed /add‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪154‬‬

‫الضافة مستخدم جديد مع الرقم السري كاالتى‪:‬‬ ‫‪-‬‬


‫‪net user Jana MyP@55w0rd /add‬‬
‫الضافة مستخدم جديد ومن ثم الطلب من هذا المستخدم إضافة كلمة المرور كاالتى‪:‬‬ ‫‪-‬‬
‫‪net user noreen * /add‬‬

‫‪ .1‬إزالة او تعليق )‪ (disabled‬حسابات المستخدمين‬


‫يمكن حذف حساب المستخدم مع الخيار "‪ ."/delete‬وبالمثل‪ ،‬يمكن تمكين أو تعطيل حساب المستخدم باستخدام الخيار "‪ "/active‬ومن ثم‬
‫تحديد ‪( yes‬لتنشيط الحساب) أو ‪( no‬لتعليق الحساب)‪.‬‬
‫‪- net user mohammed /delete‬‬
‫‪- net user jana /active:no‬‬
‫‪- net user noreen /active:yes‬‬

‫‪ .1‬إدارة المستخدم (‪)User Management‬‬


‫االمر "‪ "net accounts‬يقوم بتحديث قاعدة بيانات حسابات المستخدم ويعدل كلمة المرور وتوفير متطلبات تسجيل الدخول لكافة الحسابات‪.‬‬
‫عند استخدامها بدون اى خيارات‪ ،‬فإنه يعرض اإلعدادات الحالية لكلمة المرور‪ ،‬وقيود تسجيل الدخول‪ ،‬ومعلومات الدومين‪.‬‬

‫بعض الخيارات الشائعة لهذا األمر هي‪:‬‬


‫‪-‬‬ ‫}‪/FORCELOGOFF:{minutes | NO‬‬
‫‪ Minute‬هو عدد الدقائق قبل اجبار المستخدم على تسجيل الخروج‪ .‬القيم االفتراضيه ‪ NO‬وهي تمنع تسجيل الخروج القسري‪.‬‬
‫‪- /MINPWLEN:length‬‬
‫الحد األدنى لطول كلمة المرور حيث تتراوح بين ‪ 2‬و‪ 11‬حرفا‪ .‬اإلعداد االفتراضي هو ‪ 2‬أحرف‪.‬‬
‫}‪- /MAXPWAGE:{days | UNLIMITED‬‬
‫تستخدم لتعين الحد األقصى من عدد األيام التي تكون فيها كلمة مرور صالحة‪ ،‬حيث النطاق الصالح هو من ‪ 1‬إلى ‪ .222‬القيمة االفتراضية‬
‫هي ‪ UNLIMITED‬وتعنى انه ال يوجد فترة زمنيه النتهاء صالحيه كلمة المرور‪ .‬أيضا القيمه المستخدمه هنا يجب ان ال تكون اقل من‬
‫قيمة ‪.MINPWAGW‬‬
‫‪- /MINPWAGE:days‬‬
‫تستخدم لتعيين الحد األدنى من عدد األيام التي يجب أن تمر بعد تعيين كلمة المرور قبل ان يتمكن المستخدم من تغير كلمة المرور‪ ،‬حيث‬
‫النطاق الصالح هو من ‪ 2‬إلى ‪ .222‬قيمة ‪ 2‬يعني عدم وجود الحد األدنى من الوقت‪ .‬أيضا‪ ،‬فإن القيمة المستخدمة هنا ال يمكن أن تكون أكثر من‬
‫‪.MAXPWAFE‬‬
‫‪- UNIQUEPW:number‬‬
‫يستخدم لكي يتطلب من المستخدم عند تعيين كلمة المرور ان تكون مختلفه عن ‪ X‬السابقه حيث ‪ X‬هو ‪ number‬المحدد هنا‪ .‬أعلى قيمة هي‬
‫‪.11‬‬

‫‪Windows Groups‬‬
‫بمجرد ان يتم إنشاء المستخدم‪ ،‬يتم وضعه في "المجموعات )‪ ."(Groups‬يتم تعيين ‪ NTFS‬وأذونات ‪ OS‬الى المجموعات‪.‬‬
‫هذه المجموعات تجعل اإلدارة أسهل كمجموعة يمكن إعطاءها إذن خاص ومن ثم يمكن إضافة وإزالة المستخدمين من المجموعة حسب‬
‫الحاجة دون الحاجة إلى إجراء التغييرات لكل مستخدم على حدة‪ .‬ويندوز لديها العديد من المجموعات االفتراضيه المبنيه بها بما في ذلك ما‬
‫يلي‪:‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪155‬‬

‫‪ - ADMINISTRATORS‬يمكن لمستخدمين هذه المجموعه تنفيذ أي إجراء يريدونه على الكمبيوتر بما في ذلك تعديل الكيرنل‪.‬‬ ‫‪-‬‬
‫‪ - NETWORK CONFIGURATION OPERATORS‬المستخدمين هنا لديهم أذونات إضافية تمكنهم من تعديل‬ ‫‪-‬‬
‫إعدادات الشبكة على جهاز الكمبيوتر مثل عنوان ‪ DNS ،IP‬و‪.gateway‬‬
‫‪ – USERS‬هذه هي المجموعة الوحيدة التي يحتاجها الناس ألداء ‪ ٪22‬من األنشطة على جهاز الكمبيوتر الخاص بك‪ .‬حتى الناس‬ ‫‪-‬‬
‫الذين تتمثل مهمتهم اإلدارة وينبغي أن تكون أجهزة الكمبيوتر الخاصة بهم فقط في مجموعة ‪ USERS‬ويجب أن تستخدم حساب‬
‫منفصل في مجموعة ‪ ADMINISTRATORS‬فقط عند تنفيذ المهام اإلدارية‪ .‬ويمكن القيام بذلك باستخدام ‪.RUNAS‬‬

‫حساب اإلداريين )‪(ADMINISTRATORS‬‬


‫البرمجيات الخبيثة التي تنفذ تحت إطار االمتياز اإلداري يمكنها ان تؤدى الى تغييرات غير قابلة لاللغاء لنظام التشغيل‪ .‬يمكن أن تضيف نفسها‬
‫إلى مفاتيح ‪ registry‬بحيث انها ستبدأ تلقائيا‪ .‬ويمكنها تعديل برامج مكافحة الفيروسات بحيث يجعله لم يعد قادرعلى الكشف عن البرامج‬
‫الضارة أو تعطيل برامج مكافحة الفيروسات تماما‪ .‬ويمكنا تعديل كيرنل نظام التشغيل‪ ،‬وتركيب ‪ rootkit‬إلخفاء جميع أنواع النشاط الخبيثة‪.‬‬
‫يجب على المستخدمين عدم استخدام االمتيازات اإلدارية أثناء استخدام الكمبيوتر العادي بهم‪ .‬يجب فقط استخادم االمتيازات اإلدارية لفترة‬
‫وجيزة عند الضرورة القصوى وعند تنفيذ المهام اإلدارية مثل تثبيت برنامج جديد أو إنشاء مستخدمين جديد‪.‬‬
‫لماذا يجب عدم استخدام االمتيازات اإلدارية لألنشطة اليومية قم بقراءة هذا المقال‪:‬‬
‫‪http://blogs.msdn.com/b/aaron_margosis/archive/2004/06/17/157962.aspx‬‬

‫طرق إنشاء المجمواعت واضافة المستخدمين اليها‬


‫يستخدم األمر ‪ net localgroup‬لعرض وتعديل المجموعات وعضوية المجموعة‪ .‬وفيما يلي قائمة من أوامر‪ net localgroup‬األكثر‬
‫استخداما من قبل المسؤولين‪.‬‬
‫‪- C:\> net localgroup administrators‬‬
‫عرض قائمة العضاء المجموعه ‪.ADMINISTRATORS‬‬
‫‪- C:\> net localgroup developers /add‬‬
‫انشاء مجموعه جديده تسمى ‪.DEVELOPERS‬‬
‫‪- C:\> net localgroup administrators tim /add‬‬
‫هذا يقوم بإضافة المستخدم ‪ TIM‬الى المجموعه ‪.ADMINISTRATOR‬‬
‫‪- C:\> net localgroup administrators tim /del‬‬
‫هذا يقوم بازالة المستخدم ‪ TIM‬الى المجموعه ‪.ADMINISTRATOR‬‬
‫‪- C:\> net localgroup developers /del‬‬
‫حذف المجموعه ‪.DEVELOPERS‬‬
‫‪- C:\> net group "domain admins" tim /add /domain‬‬
‫يستخدم بناء الجملة هذا أيضا مع األمر ‪ net group‬لتعديل مجموعة على الدومين‪ .‬ببساطة قم باستبدال "‪ "localgroup‬مع "‪"group‬‬
‫وإضافة "‪ ."/domain‬على سبيل المثال‪ ،‬هذا سيضيف ‪ TIM‬إلى مجموعة ‪( .Domain Admins‬على افتراض ان المستخدم الحالي لديه‬
‫األذونات للقيام بذلك)‪.‬‬

‫استخدام ‪RUNAS‬‬
‫مبدأ اقل الصالحيات المطلوبه )‪ (least privilege‬هو المبدأ المستخدم منذ فترة طويلة والتي ينبغي استخدامه فى الكثير من قراراتنا بشأن‬
‫وصول المستخدم‪ Windows Explorer .‬و "‪ "RUNAS.EXE‬من سطر األوامر كالهما يسمح لك بتحديد حساب مستخدم مختلف‬
‫الستخدامه عند تنفيذ البرنامج‪ .‬تصفح اإلنترنت وقراءة البريد اإللكتروني هما أكثر األنشطة خطورة على أجهزة الكمبيوتر اليوم‪ .‬باستخدام‬
‫أذونات إدارية للقيام بأي شيء من تلك األشياء هي لعبة خطيرة جدا‪ .‬استخدام ‪ Domain Administrators ،RUNAS‬و ‪other‬‬
‫‪ administrators‬يمكنه تنفيذ المهام اإلدارية مع مجموعة واحدة من وثائق التفويض مع استمرارية كونك مستخدم عادي دون أي امتيازات‬
‫خاصة‪.‬‬
‫المرجع‪https://en.wikipedia.org/wiki/Principle_of_least_privilege :‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪156‬‬

‫يمكن تشغيل العناصر الموجودة في ‪ control panel‬عبر هذه الطريقة أيضا‪.‬‬


‫‪- Start "Date and Time Properties":‬‬
‫‪C:\> runas /user:john_admin timedate.cpl‬‬
‫‪- Start "Add or Remove Programs":‬‬
‫‪C:\> runas /user:john_admin appwiz.cpl‬‬
‫‪- Start "System Properties":‬‬
‫‪C:\> runas /user:john_admin sysdm.cpl‬‬
‫‪- If you need to run a number of higher privileged commands you can spawn a new administrative‬‬
‫‪command prompt:‬‬
‫‪C:\> runas /user:john_admin cmd.exe‬‬
‫‪- You can change the color of this command prompt to something that stands out by running this‬‬
‫‪command in your prompt.‬‬
‫‪C:\> color fc‬‬

‫)‪User Account Control (UAC‬‬


‫لألسف‪ ،‬بسبب السياسة‪ ،‬وعدم فهم خطورة التهديد‪ ،‬أو ربما الكسل من جانب مسؤولي النظام فان المستخدمين غالبا ما ينتهي بهم المطاف ان‬
‫يكونوا في مجموعة المسؤولين‪ .‬هذا الوضع سيء للغاية‪ .‬لمواجهة هذا التهديد‪ ،‬فان ويندوز فيستا عرض تكنولوجيا جديدة تسمى التحكم في‬
‫حساب المستخدم )‪ .(UAC‬عندما يتم تمكين ‪ ،UAC‬يتم تجريد األذونات من قبل المسؤولين في الجهاز عندما يتم إنشاء رموز وصولهم‬
‫)‪ .(access tocken‬عندما تتطلب العملية الوصول اإلداري‪ ،‬فإنه سيتم مطالبة المستخدم بأوراق االعتماد قبل منح الطلب‪.‬‬
‫لقراءة المزيد عن ‪ UAC‬يمكنك ذلك من خالل الرابط التالى‪:‬‬
‫‪http://www.windowsecurity.com/articles-tutorials/authentication_and_encryption/Understanding-User-‬‬
‫‪Account-Control-Vista.html‬‬
‫‪https://technet.microsoft.com/en-us/library/cc709691%28WS.10%29.aspx‬‬

‫‪Policies And Credential Storage 1.1‬‬


‫نظام التشغيل ويندوز يوفر تقنية تسمى )‪ Security Accounts Manager (SAM‬وذلك إلدارة بيانات اعتماد المستخدم )‪.(user credentials‬‬
‫يتم حفظ حسابات المستخدمين من أسماء وكلمات المرور في صورة ‪ Hash‬إلى الملف ‪ .SAM‬قاعدة بيانات ‪ SAM‬توجد في المسار في‬
‫\‪ .c:\windows\system32\config‬ايضا بيانات ‪ SAM‬توجد في ‪ registry‬تحت ‪.HKEY_LOCALMACHINE\SAM‬‬
‫كما قلنا من قبل انه يتم تخزين حسابات المستخدمين وكلمات المرور في صورة ‪ .hash‬ولذلك يقدم نظام التشغيل ويندوز تقنية الهاش المسماه‬
‫‪ LM password hash‬والتي أصبحت غير امنه االن نظرا للقدرة الحاسوبية الحديثة اليوم‪ .‬حيث أنه يأخذ كلمة المرور ويحولها إلى حالة‬
‫‪ upper case‬ثم يقسم كلمة المرور الى اثنين من القطع كل منها تتكون من ‪ 2‬رموز‪ .‬وهذا يعني أنه يتم تقسيم كلمة مرور من ‪ 11‬رمز بشكل‬
‫فعال إلى مقطع من ‪ 2‬رموز ومقطع اخر من ‪ 1‬رموز‪ ،‬ونتيجة الضعف الملحوظ فى ‪ .password hash‬فان الويندوز يقوم بتخزين كلمة‬
‫المرور في صيغتين‪( NTLM ،‬والذي يسمى ‪ )NT hash‬و‪( LANMAN‬والذي يسمى ‪ .)LM hash‬حيث تستخدم صيغة كلمة المرور‬
‫شكل من ‪.salt‬‬
‫‪ LM hash‬نظرا الى ضعفه االمنى فانه لم يعد مستخدما بداية من اصدار فيستا وما بعده من إصدارات ويندوز واصبح االعتماد على‬
‫‪.NTLM‬‬
‫‪ Hash‬ال يمكن عكسه الى نصه االصلى الواضح‪ ،‬ولكن يمكن تخمين كلمة السر‪ ،‬ثم ‪ hash‬ذلك‪ ،‬ومعرفة ما اذا كان هناك تطابق في ‪hash‬‬
‫االثنين‪ .‬يمكن استخدام قائمة من كلمات السر األكثر شيوعا‪ dictionary words ،‬لتخمين كلمة السر لدينا‪ .‬نحن يمكن أيضا محاكة جميع‬
‫كلمات السر المحتملة‪ ،‬بدءا من ‪ a‬الى ‪ aa ،z‬إلى ‪ ،az‬وما إلى ذلك‪ .‬وهذا يسمى ‪ .brute force attack‬وفقا لويكيبيديا‬
‫)‪ (https://en.wikipedia.org/wiki/Brute-force_attack):‬في علم التشفير‪ ،‬هجوم ‪ ،brute force‬أو بحث المفتاح الشامل‬
‫)‪ ،(exhaustive key search‬هو استراتيجية التي يمكن‪ ،‬من الناحية النظرية‪ ،‬استخدامها ضد أي من البيانات المشفرة‪ .‬مثل هذا الهجوم‬
‫يمكن أن تستخدم عندما ال يكون من الممكن االستفادة من نقاط الضعف األخرى في نظام التشفير (إن وجدت) التي من شأنها أن‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪157‬‬

‫جعل هذه المهمة أسهل‪ .‬وهو ينطوي على فحص منهجي لجميع المفاتيح الممكنة حتى يتم العثور على المفتاح الصحيح‪ .‬في أسوأ الحاالت‪ ،‬قد‬
‫ينطوي على عبور مجال البحث بأكمله‪ .‬هناك عدد قليل من الطرق الشائعة الستخراج كلمات السر وهي‪،Metasploit's hashdump :‬‬
‫‪ ،fgdump‬و‪ .pwdump‬وتستخدم األدوات المذكورة أعاله الستخراج هاش كلمات المرور‪ .‬الملف ‪ SAM‬يكون مشفر ومحمى بواسطة‬
‫‪ SYSKEY‬لذلك الحصول على هذا المتاح يفك تشفير الملف ‪ SAM‬والذي يحتوي على كلمات المرور المشفره في هئية ‪ .HASH‬إذا‬
‫‪ SYSKEY‬ال يفك تشفير كلمات السر أنفسهم‪ ،‬ولكنه يفك تشفير الملف الذي يحتوي على ‪.HASH‬‬
‫بمجرد الحصول على هاش كلمة المرور‪ ،‬فيمكنك كسر كلمة السر مع عدد من األدواتال مختلفة‪ .‬وتشمل أدوات كسر كلمة السر األكثر شيوعا‬
‫‪ ،HashCat ،John the Ripper‬و‪.Cain and Abel‬‬

‫‪Mimikatz‬‬
‫‪ Mimikatz‬هو أداة يمكنها استخراج كلمات السر من ذاكرة ‪ RAM‬لمعظم المستخدمين القائمين بتسجيل الدخول‪ .‬هذه االداه لها فائدة كبيرة‬
‫في اختبار االختراق‪ ،‬لكنها أيضا مفيد جدا للمهاجمين‪ .‬وقد تم االفراج عن هذه االداه في بداية عام ‪ 1211‬ومنذ ذلك الحين تم دمجها في إطار‬
‫‪.Metasploit‬‬
‫مؤخرا‪ ،‬أطلقت مايكروسوفت ‪ PATCH‬من شأنها االزاله السريعه الكبر قدر من وثائق التفويض من الذاكرة ‪ RAM‬عند خروج المستخدم‪،‬‬
‫والحد من الفرصة التي يمكن استخدامها بواسطة ‪ Mimikatz .Mimikatz‬مكتوبة بواسطة بنيامين ديلبي (‪ )gentilkiwi‬وهى متاحه من‬
‫خالل الرابط‪.http://blog.gentilkiwi.com/mimikatz :‬‬

‫حقوق المستخدم وسياسات األمن (‪)User Rights & Security Policies‬‬


‫باإلضافة إلى اذونات الملف والدليل )‪ ،(File and Directory permissions‬حسابات المستخدمين والمجموعات لها هي األخرى أذونات‬
‫محددة في نظام التشغيل‪ .‬يتم تكوين هذه األذونات داخل "‪ "Security Policies‬ويتم اعدادها باستخدام "‪ "Local Security Policy‬في‬
‫االداه ‪ .MMC console snap-in‬في الشبكات الكبيرة تدار هذه السياسات مركزيا من الدومين من قبل ")‪"Group Policy (GPO‬‬
‫وتنفذ تلقائيا على جميع أجهزة الكمبيوتر على تلك الشبكة‪ .‬يتم تقسيم السياسات األمنية )‪ (Security Policy‬إلى ثالثة أجزاء رئيسية هى‪:‬‬
‫‪Audit Policy -‬‬
‫‪User Rights -‬‬
‫‪Security Options -‬‬

‫‪Security Policy – Audit Policy‬‬


‫يتم استخدام النهج ‪ Audit Policy‬للسيطرة على من يحصل على التسجيل في ‪ .Event Viewer‬بشكل افتراضي‪ ،‬نظام التشغيل ويندوز ال‬
‫يسجل عندما يقوم المستخدم بإدخال كلمة المرور بشكل غير صحيح‪ .‬المهاجمين يحبون حقيقة أنهم ال يسجلون عندما يحاولون تخمين كلمات‬
‫المرور وتفشل محاولتهم! لكنهم أحبوه أكثر عندما ال يسجل أنهم خمنوا كلمات السر بنجاح‪ .‬في إطار ‪ Audit Policy‬سوف نقول للويندوز ما‬
‫هى اإلخفاقات والنجاحات التي نريد تسجيلها في السجل ‪ .event log‬بمجرد تشغيل ‪ event log‬في سياسة ‪ ،Audit Policy‬يمكنك‬
‫السيطرة على تسجيل األحداث للمجموعات أو المستخدمين عن طريق تغيير ‪ ACL‬في ‪ Audit tab‬في الكائن‪.‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪158‬‬

‫‪Security Policy – User Rights‬‬


‫"أذونات المستخدم )‪ "(User permission‬تشمل القدرة على "تغيير وقت النظام" و "النسخ االحتياطي للملفات والدالئل"‪ .‬العديد من هذه‬
‫األذونات مهمة جدا في السيطرة‪ .‬على سبيل المثال‪" ،‬برامج التصحيح )‪ "(Debug programs‬يسمح للمستخدم بحقن ‪ DLL‬في ذاكرة‬
‫البرنامج قيد التشغيل وإيقاف تنفيذ البرنامج‪ .‬وغالبا ما تستخدم هاتين الخطوتين من قبل المهاجمين للقيام ب "‪ ."DELL Injection‬المهاجم‬
‫يستخدم حقن ‪ DLL‬إلخفاء االكواد الخبيثة داخل برامج أخرى وتغيير الطريقة التي تتصرف بها‪ .‬افتراضيا‪ ،‬يتم منح هذا اإلذن‬
‫لجميع أعضاء مجموعة ‪ .Administrators‬إذا قمت بالسيطرة على أعضاء مجموعة ‪ Administrators‬بشكل صحيح‪ ،‬فانه ال أحد‬
‫سوف يكون لديه أذونات "‪ "Debug‬خالل العمل اليومي لجهاز الكمبيوتر‪ .‬ومع ذلك‪ ،‬إذا تم منح امتيازات إدارية للمستخدم العادي‪ ،‬فان إزالة‬
‫أذونات "‪ "Debug programs‬من مجموعة المسؤولين هى فكرة جيدة‪.‬‬

‫‪Security Policy – Security Options‬‬


‫الجزء الثالث من سياسة األمن المعروفة باسم "‪ ."Security Options‬هذا هو المكان الذي يوضع فيه على سبيل المثال الحد األدنى‬
‫المطلوب لطول كلمة السر‪ ،‬وتيرة تغيير كلمات السر‪ ،‬والقدرة على إعادة تسمية حساب المسؤول‪.‬‬

‫‪Registry 1.1‬‬
‫يستخدم ‪ Windows registry‬لتخزين بيانات تكوين التطبيقات ونظام التشغيل‪ .‬يتم تقسيمه إلى أقسام تحتوي على فئات مختلفة من البيانات‪.‬‬
‫‪ Registry keys‬تهم مهاجمي الكمبيوتر ألنها قد تحتوي على معلومات حساسة مثل أسماء المستخدمين وكلمات السر‪ ،‬وأنها يمكن أن‬
‫تستخدم لتغيير الطريقة التي تتصرف بها التطبيقات ونظام التشغيل‪ .‬ومن الشائع جدا للمهاجمين خلق ‪ Registry keys‬بحيث تبدأ البرمجيات‬
‫الخبيثة تلقائيا عند تشغيل الكمبيوتر‪.‬‬
‫يتم تقسيم ‪ Registry‬إلى اقسام تسمى "‪ "Hives‬والتي تحتوي على فئات مختلفة من البيانات‪ .‬يوجد اثنين من ‪ Hives‬وهي التي يهتم بها‬
‫القراصنه والمدافعين وهما ‪ HKLM‬و‪ HKLM .HKCU‬أو ‪ HKEY_LOCAL_MACHINE‬تحتوي على إعدادات نظام التشغيل‬
‫التي تؤثر على كل شىء على الكمبيوتر‪ HKCU .‬أو ‪ HKEY_CURRENT_USER‬هو اختصار لدليل فرعي في ‪HKEY_USERS‬‬
‫للمستخدم الذي تم تسجيل دخوله إلى الجهاز‪ .‬حاول التعرف على ‪ registry‬مع وبعض مكونات ‪ key‬الرئيسية‪.‬‬

‫أنواع قيم ‪ registry‬الشائعه‬


‫أنواع بيانات ‪:registry‬‬
‫‪-‬‬ ‫‪REG_BINARY - Binary data.‬‬
‫‪-‬‬ ‫‪REG_DWORD - 32-bit integer representing 4.2 million possibilities.‬‬
‫‪-‬‬ ‫‪REG_QWORD - 64-bit number representing 18 quintillion (18 * 10^18) possibilities.‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ 159

- REG_DWORD_LITTLE_ENDIAN - 32-bit number in little-endian format; equivalent to


REG_DWORD. The little-endian format is where a multibyte value is stored from the lowest byte
(the "little end") to the highest byte. For example, the value 0x12345678 is stored as (0x78 0x56
0x34 0x12) in little-endian format.
- REG_QWORD_LITTLE_ENDIAN - A 64-bit number in little-endian format; equivalent to
REG_QWORD.
- REG_DWORD_BIG_ENDIAN - 32-bit number in big-endian format (big end is stored first).
- REG_EXPAND_SZ - Null-terminated (last character is ASCII 00) string that contains unexpanded
references to environment variables (for example, "%PATH%"). It will be a Unicode or ANSI string,
depending on whether you use the Unicode or ANSI functions.
- REG_LINK - Unicode symbolic link.
- REG_MULTI_SZ - Array of null-terminated strings that are terminated by two null characters.
Where a "null" is a byte with a value of 00. REG_NONE - No defined value type.
- REG_RESOURCE_LIST - Device-driver resource list.
- REG_SZ - Null-terminated string. It will be a Unicode or ANSI string, depending on whether you
use the Unicode or ANSI functions.
Reference: http://msdn.microsoft.com/en-us/library/windows/desktop/bb773476(v=vs.85).aspx

REG.EXE Exercise
‫ وليس في‬،VM ‫ يرجى فقط القيام بذلك في‬.‫ فهذا يمكنه ان يلحق ضررا بالغا في النظام الخاص بك‬registry ‫ إذا قمت باى خطا في‬،‫كن حذرا‬
.‫نظام التشغيل المضيف الخاص بك‬
."reg /?" ‫ عرض المساعدة على األمر‬.registry ‫سنبدأ من خالل النظر في صفحة المساعدة العامة وصفحة المساعدة على‬

."REG QUERY" ‫لعرض المساعدة عن األمر‬


C:\> reg query /?
:)‫ (للمستخدم الحالي‬HKCU ‫انظر على المفاتيح في‬
C:\> reg query hkcu

https://www.facebook.com/tibea2004
‫فن الهاكر األخالقي‬ ‫‪160‬‬

‫للنظر على العناصر الموجودة في ‪:Curent User’s Software Key‬‬


‫‪C:\> reg query hkcu\software‬‬
‫باستخدام العملية التاليه‪ ،‬يمكنك من خالل خطوة واحده عرض كل شيء (سوف تحتاج الى أذونات الدخول) في ‪ registry‬الخاص بك‪.‬‬
‫لالستعالم عن القيم في مفتاح ‪ registry‬األكثر شيوعا المعدلة من قبل البرمجيات الخبيثة ستكتب‪:‬‬
‫‪C:\> reg query "HKLM\Software\Microsoft\Windows\CurrentVersion\Run" /s‬‬

‫‪windows networking and sharing 1.1‬‬


‫‪Networking – SMB‬‬
‫نظام التشغيل ويندوز يمكن أن يدعم مجموعة متنوعة من الشبكات بروتوكوالت لتبادل الموارد‪ ،‬ولكن ‪ SMB‬هي التي تستخدم على نطاق‬
‫واسع حتى اآلن‪ .‬يستخدم ‪ SMB‬أو ‪ Server Message Block‬لمشاركة الملفات والطابعة وموارد الشبكات األخرى بين مضيفين ويندوز‪.‬‬
‫يمكنك الوصول إلى الموارد على النظام البعيد عن طريق تعيين محرك األقراص من خالل مستكشف ويندوز‪ ،‬عن طريق تعيين محرك‬
‫األقراص في سطر األوامر‪.‬‬

‫‪NET VIEW‬‬
‫يمكنك استخدام االمر )‪ (net view‬لتنفيذ معظم وظائف التصفح المتاحة عبر "الشبكة" أو "جهاز الكمبيوتر"‪ .‬تشغيل األمر بدون اى خيارات‬
‫سوف يسرد قائمة بأجهزة الكمبيوتر في ‪ domain‬الحالي أو ‪ .workgroup‬لرؤية الموارد المتاحة على النظام‪ ،‬اكتب "‪ "net view‬تليها‬
‫اثنين من الخطوط المائلة العكسية واسم النظام‪:‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪161‬‬

‫‪NET USE‬‬
‫يتم استخدام االمر "‪ "net use‬لالتصال أو الفصل من الموارد البعيدة‪ .‬ويمكن أيضا أن يستخدم في سرد قائمة االتصاالت المفتوحة لهذه‬
‫الموارد البعيدة‪.‬‬
‫عند االتصال إلى نظام بعيد‪ ،‬الخطين المائلين (\\) يجب أن يستخدما قبل اسم الملقم‪ .‬يجب أيضا أن يسبق اسم الدليل المشارك شرطة مائله‪.‬‬
‫على سبيل المثال )‪.(\\servername\sharename‬‬
‫‪ -‬حرف محرك أقراص يمكن أن تكون محددة باستخدام "‪ "mount‬للمورد البعيد‪ .‬الكمبيوتر الخاص بك سوف يصادق على إنك‬
‫المستخدم الحالي‪.‬‬
‫‪C:\> net use z: \\srvr\pub‬‬
‫‪ -‬باإلضافة إلى ذلك‪ ،‬أوراق االعتماد البديلة يمكن استخدامها للوصول إلى الموارد‪ ،‬في األمر نفسه‪:‬‬
‫‪C:\> net use z: \\srvr\pub P@55wd /user:john‬‬
‫‪ -‬أو عن طريق كلمة مرور أكثر أمنا يدفع باستخدام العالمة النجمية (*) بدال من كلمة المرور‪:‬‬
‫‪C:\> net use z: \\srvr\pub * /user:john‬‬
‫‪ -‬على غرار األمر ‪ ،net user‬يمكن إدخال كلمة المرور كجزء من األمر‪.‬‬
‫‪ -‬يمكننا حذف التعيين ‪ mapping‬في أي من هاتين الطريقتين‪ ،‬من خالل حرف محرك األقراص‪:‬‬
‫‪C:\> net use z: /delete‬‬
‫‪ -‬من خالل االسم المشارك‪.‬‬
‫‪C:\> net use \\servername\sharename /delete‬‬
‫‪ -‬يمكننا أيضا حذف جميع التعيينات‪:‬‬
‫‪C:\> net use * /delete‬‬

‫‪ 1.1‬الخدمات والعمليات )‪(Services and Processes‬‬


‫‪Windows Services‬‬
‫عادة ما يتم اعداد البرامج المثبتة على النظام لكي يعمل باحدى الطريقتين‪ :‬يمكن تنفيذه كعملية مستخدم )‪ ،(interactive user porcess‬أو‬
‫أنه يمكن أن يعمل في الخلفية كخدمة )‪ .(service‬يتم تشغيل الخدمات في الخلفية ويمكن تهيئتها للبدء تلقائيا بعد تمهيد النظام‪ .‬الخدمات يمكن‬
‫أن تدار بعدة طرق‪ .‬معظم المستخدمين يقومون بإدارة الخدمات باستخدام ‪ "SERVICES.MSC" MMC snap-in‬والتى يتم تشغيلها‬
‫من خالل كتابة ‪ services.msc‬في ‪ .RUN‬ويمكن أيضا أن تبدأ‪ ،‬توقف أو االستعالم عن الخدمات باستخدام األمر ‪ net‬من سطر األوامر‪.‬‬
‫‪ -‬عرض جميع الخدمات‪net start :‬‬
‫‪ -‬بدء تشغيل خدمة ‪net start “print spooler” :print spooler‬‬
‫‪ -‬إيقاف خدمة ‪net stop “print spooler” :print spooler‬‬
‫لكن الواجهة األقوى إلدارة الخدمات ويندوز هو اداه سطر األوامر "‪ "SC.EXE‬القائمة على ‪.Services Controller utility‬‬

‫بدء تشغيل الخدمات )‪(Windows Services Startup‬‬


‫خدمات ‪ Windows‬يمكن تعيينها لمختلف وسائط البدء‪ ،‬بما في ذلك منع الخدمة من بدء التشغيل على اإلطالق‪ .‬خيارات بدء التشغيل هي‪:‬‬
‫‪ - Automatic -‬يبدأ بعد التمهيد‪.‬‬
‫‪ - Manual -‬يبدأ عند الضرورة فقط عندما يستدعى أو استدعاء الخدمة بواسطة خدمة أو تطبيق أخر‪.‬‬
‫‪ - Disabled -‬لن يتم تشغيل‪ ،‬حتى لو حاولت خدمة أخرى بدء تشغيلها‪.‬‬
‫‪ - Automatic (Delayed) -‬يبدأ بعد اكتمال التمهيد لمنع الحمل الزائد أثناء التمهيد‪ .‬تمت إضافة هذا الخيار مع ويندوز فيستا‪.‬‬

‫‪SC.EXE & Exercise‬‬


‫يمكن استخدام األمر ‪ SC‬لخلق‪ ،‬ووقف‪ ،‬وبدء االستعالم أو تعديل أو حذف خدمات ويندوز‪ .‬من اجل المساعدة عن األمر "?‪."sc /‬‬
‫عند استخدام األمر ‪ ،SC‬يجب عليك استخدام اسم الخدمة‪ ،‬والذي يختلف عن االسم المعروض‪ .‬اسم الخدمة هو عادة مختصر‪،lower case ،‬‬
‫ال يحتوي على مسافات‪ .‬ويمكن االطالع على اسم الخدمة عبر "‪ "sc query‬أو ‪.Services snap-in‬‬
‫‪ -‬لالستعالم عن خدمه معينه يمكنك ذلك من خالل االمر التالى‪."sc query service_name" :‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪162‬‬

‫لسرد قائمة بالخدمات التي تعمل‪/‬ال تعمل‪/‬جميع الخدمات استخدم الصيغ االتيه (مالحظة‪ :‬المسافه مهمه)‪:‬‬ ‫‪-‬‬
‫‪C:\> sc query‬‬
‫‪C:\> sc query state= inactive‬‬
‫‪C:\> sc query state= all‬‬
‫لسرد االعداد الخاص بخدمة وليكن مثال ‪ Print Spooler‬كاالتى‪:‬‬ ‫‪-‬‬
‫‪C:\> sc qc spooler‬‬
‫لبدء او إيقاف الخدمه نستخدم االتى‪:‬‬ ‫‪-‬‬
‫‪C:\> sc start spooler‬‬
‫‪C:\> sc stop spooler‬‬
‫‪ -‬للتحكم في مسار الخدمه سواء بالبدء او اإليقاف عند تمهيد‪/‬بداية النظام من خالل االمر ‪ sc‬وذلك مخالل التعالم مع الخيار ‪.start‬‬
‫‪C:\> sc config spooler start= disabled‬‬
‫من المثال السابق نجد ان يقوم بإيقاف الخدمه ‪ SPOOLER‬عند بدء تشغيل النظام‪.‬‬
‫الخيار ‪ start‬مع االمر ‪ sc‬يدعم العديد من الخيارات كاالتى‪:‬‬
‫‪ device driver :boot -‬يتم تحميله من قبل ‪.boat loader‬‬
‫‪ device driver :system -‬يبدأ أثناء تهيئة الكيرنل‪.‬‬
‫‪ :auto -‬الخدمة تبدأ تلقائيا في كل مرة يتم إعادة تشغيل الكمبيوتر ويعمل حتى لو لم يكن هناك أحد لم يسجل الدخول إلى الكمبيوتر‪.‬‬
‫‪ :demand -‬الخدمة التي يجب أن تبدأ يدويا‪ .‬هذه هي القيمة االفتراضية إذا لم يتم تعين "=‪."start‬‬
‫‪ :disabled -‬الخدمة التي ال يمكن أن تبدأ أبدا‪ .‬لبدء هذه الخدمة‪ ،‬يجب تغيير نوع =‪ start‬إلى قيمة أخرى‪.‬‬
‫ملحوظه‪ :‬البد من المسافه الموجوده بعد العالمه )=( ولكن ليس قبلها‪.‬‬
‫للمزيد من المعلومات عن االمر ‪ sc‬ميكنك زيارة الرابط التالى‪:‬‬
‫‪http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/sc.mspx?mfr=true‬‬

‫‪Services Snap-in‬‬
‫‪ Services Snap-in‬يمكن تشغيلها اما من خالل المسار )‪ (contral panel  Administrative Tools  services‬او كتابة‬
‫‪ services.msc‬في ‪ Services Snap-in .RUN‬هي أداة ذات واجهة المستخدم الرسومية للتعامل مع خدمات ويندوز‪ .‬هذه األداة تسمح‬
‫بالتعامل مع الخدمات إما وقفها‪ ،‬بدأها‪ ،‬إعادة تشغيل (إيقاف ثم بدا بعد ذلك)‪ ،‬أو إيقافها مؤقتا‪ .‬ويمكن القيام بذلك باستخدام عناصر التحكم‬
‫‪ ،VCR‬عن طريق النقر بزر الماوس األيمن على الخدمة‪ ،‬أو بعد النقر المزدوج على الخدمة وباستخدام أزرار التحكم‪.‬‬
‫عندما يتم فتح خدمة فان اسم الخدمة الفعلى يصبح مرئيا‪ .‬هذا االسم مهم بالنسبه لسطر األوامر مع الخدمة‪.‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪163‬‬

‫)‪Processes (Applications‬‬
‫على عكس ‪ services‬التطبيقات عادة ما تتفاعل مع المستخدم‪ ،‬ولكنها ال تحتاج ان تعمل بشكل مرىء على الشاشة أو تظهر فى شريط البداية‪.‬‬
‫يوفر ‪ Windows‬ل لمستخدم عدة طرق إلدارة التطبيقات قيد التشغيل‪ .‬من واجهة المستخدم الرسومية‪ ،‬يمكن للمستخدمين استخدام ‪TASK‬‬
‫‪ MANAGER‬لرصد وبدء واغالق التطبيقات‪ .‬في خالل سطر األوامر‪ ،‬يمكن استخدام االتى‪:‬‬
‫‪tasklist.exe -‬‬
‫‪taskkill.exe -‬‬
‫‪wmic.exe -‬‬
‫من خالل سطر األوامر‪ ،‬لديك العديد من الخيارات للتحكم في قوائم العمليات التي تعمل‪ Taskkill.exe .‬يمكنه اغالق‪/‬قتل اى تطبيق من‬
‫خالل )‪ process ID number (PID‬الخاص بالعمليه أو اسم الملف التنفيذ‪ .‬ويمكن أيضا استخدام "‪ "WMIC‬إلدارة المهام من سطر‬
‫األوامر‪ .‬ميزة واحدة كبيرة الستخدام إصدار سطر أوامر من األدوات هي أنها يمكن كتابتها وتشغيلها بسرعة‪ .‬ليس من المألوف عن االكواد‬
‫الخبيثة إطالق عدة نسخ من العمليات الخبيثة‪ .‬تلك العمليات ترصد العمليات األخرى للتأكد من أنها ال تزال قيد التشغيل‪.‬‬
‫إذا كانت أي من العمليات الخبيثة الحظت توقف عملية أخرى‪ ،‬فانها تقوم بإعادة إطالق العملية‪ .‬لذلك لقتل جميع النسخ من االكواد الخبيثة‪،‬‬
‫يجب عليك قتلهم جميعا في نفس الوقت‪ .‬وهذا من المستحيل القيام به باستخدام واجهة المستخدم الرسومية ‪.TASK MANAGER‬‬

‫‪Tasklist and Taskkill‬‬


‫األمر ‪( tasklist‬بدون أية خيارات إضافية) يقوم بسرد قائمة بالعمليات التي يتم تشغيلها على النظام‪ .‬األمر ‪ tasklist‬يمكن استخدامه للبحث‬
‫عن ‪ proceses‬محددة‪ ،‬باالسم )"‪ (C:\> tasklist /fi "imagename eq calc.exe‬او ‪.(C:\> tasklist /fi "pid eq 3088") PID‬‬
‫االمر ‪ taskkill‬يمكنه ان يقتل‪/‬يغلق العمليات على أساس (‪ ،)PID‬االسم‪ ،‬ومعايير أخرى‪.‬‬
‫‪C:\> taskkill /PID 605‬‬
‫"‪C:\> tasklist /fi "pid eq 3088‬‬
‫‪http://blog.commandlinekungfu.com/2010/01/episode-78-advanced-process-whack-mole.html‬‬

‫‪WMIC Exercise‬‬
‫عندما يتعلق األمر بإدارة العمليات من خالل سطر األوامر‪ ،‬فان ‪ tasklist‬ليس الوحيد‪ .‬العمليات‪ ،‬مثل معظم الجوانب فى نظام التشغيل‬
‫ويندوز‪ ،‬يمكن أيضا السيطره عليها من خالل سطر األوامر مع األمر ‪ .WMIC‬في هذا القسم‪ ،‬سوف نركز على استخدام ‪ WMIC‬إلدارة‬
‫العمليات‪ ،‬ولكن ‪ WMIC‬هى أداة قوية جدا ويمكن أن تفعل الكثير والكثير‪.‬‬
‫مقدمة عن ‪ WMIC‬من خالل الرابط‪http://www.net-security.org/dl/articles/WMIC.pdf :‬‬
‫‪ -‬النشاء عملية جديده‬
‫‪C:\> wmic process call create cal.exe‬‬
‫‪ -‬عرض العمليات باستخدام ‪ wmic‬بعدة طرق كاالتى‪:‬‬
‫‪C:\> wmic process list brief‬‬
‫‪C:\> wmic process where (name = “calc.exe”) list brief‬‬
‫‪C:\> wmic process where (name = “calc.exe”) list full‬‬
‫‪C:\> wmic process where (name = “calc.exe”) get commandline‬‬
‫‪ -‬الغالق او بالمعنى االصح قتل اى عملية باستخدام ‪ wmic‬كاالتى‪:‬‬
‫‪C:\> wmic process where (name = “calc.exe”) delete‬‬
‫يمكنك استخدام األمر ‪ WMIC‬لتشغيل األوامر على األنظمة البعيدة‪ .‬فهو يتطلب األذونات الصحيحة واوراق االعتماد المناسبة‪ .‬الخيار‬
‫‪ /node‬يمكن استخدامه لالتصال بنظام بعيد‪.‬‬
‫‪ -‬يمكنك تحديد المضيف البعيد باالسم‪:‬‬
‫‪C:\> wmic /node:servername process call create calc.exe‬‬
‫‪ -‬يمكنك تحديد المضيف البعيد من خالل ‪:IP‬‬
‫‪C:\> wmic /node:4.5.6.7 process call create calc.exe‬‬
‫‪ -‬يمكنك تحديد المضيف البعيد من خالل قائمه من عناوين ‪ IP‬او قائمه من األسماء في ملف نصي‪:‬‬
‫‪C:\> wmic /node:@list.txt process call create calc.exe‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪164‬‬

‫‪ -‬هذه األوامر يمكنها المصادقة على النظام البعيد كان مستخدم يسجل الدخول على النظام‪ .‬يمكنك تحديد مستخدم معين وكلمة مرور مع‬
‫الخيار ‪ /user‬و ‪ /password‬على التوالي‪:‬‬
‫‪C:\> wmic /node:someserver /user:curly /password:”myP@55w0rD” process call create calc.exe‬‬
‫‪ -‬يمكن للمستخدم أن يكون ‪ dmomain user‬من خالل تحديد ‪ domain‬كجزء من اسم المستخدم‪:‬‬
‫‪C:\> wmic /node:someserver /user:mydomain\curly /password:”myP@55w0rD” process call create‬‬
‫‪calc.exe‬‬

‫جدولة التطبيقات )‪(Scheduled Applications‬‬


‫يمكن تشغيل التطبيقات بشكل تفاعلي من قبل المستخدم‪ ،‬ولكنها يمكن أيضا جدولتها لكي تستمر في العمل على فترات محددة‪ .‬ويمكن أن تظهر‬
‫المهام المجدولة من قبل التاريخ والوقت أو األحداث التي تحدث في نظام التشغيل‪ .‬على سبيل المثال‪ ،‬يمكنك جدولة برنامج مكافحة الفيروسات‬
‫لفحص جهاز الكمبيوتر الخاص بك كل ليلة في الساعة ‪ 2:22‬مساء‪ .‬أو‪ ،‬يمكن اإلعداد لمهمة مجدولة لترسل لك رسالة بالبريد االلكتروني كل‬
‫مرة يقوم ‪ EventLog‬بتسجيل حدث ان شخص ما قام بتسجيل الدخول الى النظام‪ .‬يمكن جدولة المهام من خالل واجهة المستخدم الرسومية‬
‫باستخدام "‪ "Task Scheduler‬الذي يقع في "‪ "Contral Panel‬ثم "‪ "Administrative Tools‬ثم "‪ ."Task Scheduler‬يمكنك‬
‫أيضا إدارة المهام من خالل" ‪ ،" SCHTASKS‬وقبل ويندوز ‪ ،1‬كان اسمه " ‪." AT‬‬

‫‪SCHTASKS Command‬‬
‫هذه االداه تمكن المسؤول من إنشاء‪ ،‬حذف‪ ،‬استعالم‪ ،‬تغيير‪ ،‬تشغيل‪ ،‬اوإنهاء المهام المجدولة على كمبيوتر محلي أو بعيد‪ .‬تشغيل‬
‫‪ Schtasks.exe‬بدون اى وسائط يعرض حالة ووقت التشغيل لكل مهمة مسجله‪.‬‬

‫إنشاء مهمة تسمح لنا بتحديد المستخدم‪/‬كلمة المرور إلنشاء المهمة‪ ،‬وكذلك أوراق اعتماد المهمة التي يجب أن تعمل تحته‪ .‬الخيارات تسمح لنا‬
‫أيضا لجدولة أكثر من األمر ‪ .AT‬انظر في صفحة المساعدة للحصول على تفاصيل إضافية على الجدولة‪.‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪165‬‬

‫نظام التشغيل ويندوز هو في كثير من األحيان المعبر بالنسبه للمهاجمين اليوم‪ .‬وقد استجابت مايكروسوفت بإضافة عدد كبير من ميزات األمان‬
‫لنظام التشغيل‪ ،‬ونحن لمسنا لفترة وجيزة فقط عدد قليل منها هنا‪ .‬فيما ليست سوى عدد قليل من المراجع اإلضافية لالستكشاف‪:‬‬
‫‪- http://www.windowsecurity.com/‬‬
‫‪- http://www.microsoft.com/security/default.aspx‬‬
‫‪- http://cyber-defense.sans.org/blog/‬‬
‫‪- http://www.darknet.org.uk/category/windows-hacking/‬‬
‫ملحوظه األداة ‪ wmic‬أداة قوية جدا ويمكن االستعاضة بها في كثير من جوانب كثير ويمكنها أيضا استبدال الكثير من األوامر‪ .‬لمزيد من‬
‫المعلومات من خالل الرابط التالى‪:‬‬
‫‪https://msdn.microsoft.com/en-us/library/aa394531%28v=vs.85%29.aspx‬‬

‫–‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪166‬‬

‫الفصل السادس‬
‫أنظمة التشغيل ( ‪) LINUX‬‬

‫مقدمه‬
‫في هذا الفصل سوف نسرد بعض المفاهيم المتعلقة بالبرمجة على نظام التشغيل لينكس‪ .‬وهذا مهم بالنسبة للذين يتعاملون مع أنظمة التشغيل‬
‫األخرى او لديهم معرفه محدودة بأنظمة التشغيل لينكس او يونكس‪.‬‬

‫‪ 1.1‬نواة نظام التشغيل‪ :‬الكيرنل "‪"Kernel‬‬


‫قبل ان نبدأ‪ ،‬ما معنى المصطلح نظام التشغيل؟‬
‫نظام التشغيل (باإلنجليزية‪ Operating System :‬وتختصر إلى ‪ )OS‬هو مجموعة من البرمجيات المسؤولة عن إدارة الموارد (عتاد‬
‫الحاسوب) وبرمجيات الحاسوب‪ ،‬ويمثل وسيط بين المستخدم وعتاد الحاسوب‪ ،‬ويمكن القول انه جسر لتشغيل برامج المستخدم‪ .‬يقوم نظام‬
‫التشغيل بالمهام األساسية مثل إدارة وتخصيص مصادر الحاسوب (الذاكرة‪ ،‬القرص الصلب‪ ،‬الوصول لألجهزة الملحقة‪ .‬إلخ)‪ ،‬ترتيب أولوية‬
‫التعامل مع األوامر‪ ،‬التحكم في أجهزة اإلدخال واإلخراج مثل لوحة المفاتيح‪ ،‬تسهيل التعامل مع الشبكات‪ ،‬وإدارة الملفات‪.‬‬
‫الكيرنل‪ ،‬عند النظر الى معنى المصطلح كيرنل "‪ "kernel‬او النواه فنجد انه يقابل هذا المعنى‪ .‬على الرغم من أنه من الممكن تشغيل البرامج‬
‫على الكمبيوتر من دون نواة‪ ،‬ولكن وجود النواة يبسط إلى حد كبير كتابة واستخدام البرامج األخرى‪ ،‬ويزيد من القوة والمرونة المتاحة‬
‫للمبرمجين‪ .‬الكيرنل يفعل هذا عن طريق توفير طبقة البرمجيات "‪ "software layer‬وذلك إلدارة الموارد المحدودة للكمبيوتر‪.‬‬

‫معلومة‪ :‬نواة لينكس توجد في المسار ‪ ،/boot/vmlinuz‬أو شيئا من هذا القبيل‪ .‬اشتقاق هذا االسم تاريخي‪ .‬حيث انه في إصدارات يونكس‬
‫القديمة‪ ،‬كانت النواة تسمى "‪ ."unix‬في وقت الحق في اإلصدارات االحدث‪ ،‬التي استخدمت الذاكرة االفتراضية‪ ،‬سميت النواة ‪.vmunix‬‬
‫على لينكس‪ ،‬اسم الملف يعكس عن اسم النظام‪ ،‬مع استبدال الحرف ‪ x‬بالحرف ‪ z‬فيصبح ‪ vmlinuz‬وهذا للداللة على أن النواة مضغوطة‪.‬‬

‫ما هي المهام التي تقوم بها نواة النظام "‪"kernel‬؟‬


‫من بين أمور أخرى‪ ،‬فان الكيرنل تؤدى المهام التالية‪:‬‬

‫‪( Process scheduling‬جدولة المهام)‪ :‬الكمبيوتر لديه واحد أو أكثر من وحدات المعالج المركزية (‪ ، )CPU‬والتي تقوم بتنفد‬ ‫‪-‬‬
‫التعليمات البرمجية للتطبيق‪ .‬أنظمة التشغيل لينكس تتميز ب ‪ Multitasking .preemptive multitasking‬من معناها تعني‬
‫العمليات متعددة (مثل تشغيل البرامج) بحيث يمكن أن تتواجد في وقت واحد في الذاكرة وكل قد يتلقى استخدام وحدة المعالج‬
‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪167‬‬

‫المركزية )‪ .(CPU‬أما ‪ Preemptive‬فتعنى القواعد المنظمة لتلك العمليات من استخدام وحدة المعالج المركزية (‪ )CPU‬أو المدة‬
‫التي يحددها مجدول المهام الخاص بالكيرنل (بدال من العمليات نفسها)‪.‬‬
‫‪( Memory management‬إدارة الذاكرة)‪ :‬في حين ان ذاكرات الكمبيوتر أصبحت هائلة اكثر مما قبل‪ ،‬فان حجم البرنامج أيضا‬ ‫‪-‬‬
‫نمت في المقابل‪ ،‬لذلك فان الذاكرة (‪ )RAM‬يبقى المورد المحدود والذى يجب على الكيرنل ان يتقاسمه بين العمليات بطريقة منصفة‬
‫وفعالة‪ .‬مثل معظم أنظمة التشغيل‪ ،‬اللينكس يوظف تقنية إدارة الذاكرة (‪ ،)virtual memory management‬وهي تقنية تمنح‬
‫اثنين من المزايا الرئيسية‪:‬‬
‫‪ ‬يتم عزل العمليات عن بعضها البعض ومن الكيرنل‪ ،‬بحيث العملية الواحدة ال يمكنها قراءة أو تعديل ذاكرة‬
‫العملية األخرى أو الكيرنل‪.‬‬
‫‪ ‬هناك أجزاء من العمليات تحتاج إلى أن تبقى في الذاكرة‪ ،‬وبالتالي تخفيض متطلبات الذاكرة لكل عملية يسمح‬
‫بمزيد من العمليات بان تعقد في الذاكرة (‪ )RAM‬في وقت واحد‪ .‬وهذا يؤدي إلى استخدام وحدة المعالجة‬
‫المركزي )‪ (CPU‬بشكل أفضل‪.‬‬
‫‪( Provision of a file system‬توفير نظام الملفات)‪ :‬يوفر الكيرنل نظام الملفات على القرص‪ ،‬والتي تسمح للملفات انا يتم‬ ‫‪-‬‬
‫إنشاؤها‪ ،‬استرجاع أو تحديثها أو حذفها‪ ،‬وهلم جرا‪.‬‬
‫‪( Creation and termination of processes‬إنشاء وإنهاء العمليات)‪ :‬الكيرنل يمكنه تحميل برنامج جديد الى الذاكرة‪،‬‬ ‫‪-‬‬
‫وتزويده بالموارد (على سبيل المثال‪ ،‬وحدة المعالج المركزي "‪ "CPU‬والذاكرة "‪ ،"RAM‬والوصول إلى الملفات) التي يحتاجها‬
‫من أجل ان يعمل‪ .‬ويطلق على هذا المصطلح ‪ .process‬وبمجرد االنتهاء من تنفيذ ‪ ،process‬فان الكيرنل يضمن أن الموارد التي‬
‫يستخدمها تم تحريرها إلعادة استخدامها الحقا من قبل برامج أخرى‪.‬‬
‫‪( Access to devices‬الوصول إلى األجهزة)‪ :‬األجهزة مثل (‪ mouse‬والشاشات ولوحات المفاتيح والقرص و‪،tape drives‬‬ ‫‪-‬‬
‫وهلم جرا) يتم توصيلها على الكمبيوتر‪ ،‬لكى تسمح باالتصال بين الكمبيوتر والعالم الخارجي‪ ،‬السماح بالمدخالت والمخرجات‪ ،‬أو‬
‫كليهما‪ .‬توفر الكيرنل يوفر برامج مع واجهة توحد وتبسط الوصول إلى األجهزة‪ ،‬وفي الوقت نفسه التحكم في وصول عمليات متعددة‬
‫إلى كل جهاز‪.‬‬
‫‪( Networking‬الشبكات)‪ :‬الكيرنل ينقل ويستقبل رسائل الشبكة (‪ )packet‬نيابة عن عمليات المستخدم‪ .‬وتشمل هذه المهمة توجيه‬ ‫‪-‬‬
‫حزم الشبكة إلى النظام المستهدف‪.‬‬
‫)‪ :Provision of a system call application-programming interface (API‬العمليات يمكنها أن تطلب من‬ ‫‪-‬‬
‫الكيرنل أداء المهام المختلفة وذلك باستخدام نقاط الدخول الى الكيرنل المعروفة باسم ‪ .system calls‬وهذا هو الموضوع الرئيسي‬
‫لهذا الكتاب‪ .‬وسوف نناقش الحقا تفاصيل الخطوات التي تحدث عندما ينفذ العملية ‪.system calls‬‬

‫باإلضافة إلى الميزات المذكورة أعاله‪ ،‬أنظمة التشغيل ذات الخاصية ‪ multiuser‬مثل لينكس توفر للمستخدمين بشكل عام مع ‪virtual‬‬
‫‪ .private computer‬وهذا يعنى‪ ،‬انه يمكن لكل مستخدم تسجيل الدخول إلى النظام والعمل بشكل مستقل إلى حد كبير عن المستخدمين‬
‫اآلخرين‪ .‬على سبيل المثال‪ ،‬كل مستخدم لديه مساحة تخزين خاصة به (‪ .)home directory‬باإلضافة إلى ذلك‪ ،‬يمكن للمستخدمين تشغيل‬
‫البرامج‪ ،‬كل منها يحصل على حصة من وحدة المعالج المركزي (‪ )CPU‬وتعمل في ‪ virtual address space‬الخاصة بها‪ ،‬ويمكن لهذه‬
‫البرامج الوصول بشكل مستقل الى األجهزة ونقل المعلومات عبر الشبكة‪ .‬الكيرنل حل الصراعات المحتملة في الحصول على موارد األجهزة‪،‬‬
‫بحيث يكون المستخدمين والعمليات عادة غير مدركين لهذه الصراعات‪.‬‬

‫‪Kernel mode and user mode‬‬


‫يسمح بنيات المعالج الحديثة عادة لوحدة المعالج المركزي )‪ (CPU‬بالعمل في اثنين على األقل من الوسائط المختلفة‪( User mode :‬وضع‬
‫المستخدم) و‪( Kernel mode‬وضع النواه‪/‬الكيرنل) (والتي في بعض األحيان تشار إلى ‪ .)supervisor mode‬تعليمات األجهزة تسمح‬
‫بالتحول من وضع إلى آخر‪ .‬في المقابل‪ ،‬المناطق في الذاكرة االفتراضية "‪ "virtual memory‬يمكن تمييزها باعتبارها جزءا من فضاء‬
‫المستخدم "‪ "user space‬أو فضاء الكيرنل "‪ ."kernel space‬عند التشغيل في وضع المستخدم "‪ ،"User mode‬يمكن لوحدة المعالج‬
‫المركزي )‪ (CPU‬الوصول إلى الذاكرة الوحيدة التي تم وضع عالمة على أنها جزء من فضاء المستخدم "‪"user space‬؛ ولكن محاولة‬
‫الوصول الى الذاكرة التي هي جزء من فضاء الكيرنل "‪ "kernel space‬تكون نتيجة استثناء األجهزة‪ .‬عند التشغيل في وضع النواه‪/‬الكيرنل‬
‫"‪ ،"Kernel mode‬يمكن لوحدة المعالج المركزي )‪ (CPU‬الوصول إلى كل من الذاكرة التي تم وضع عالمة على أنها جزء من فضاء‬
‫المستخدم "‪ "user space‬وأيضا التي تم وضع عالمة على أنها جزء من فضاء الكيرنل "‪."kernel space‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪168‬‬

‫بعض العمليات يمكن القيام بها فقط عندما يكون وحدة المعالج المركزي )‪ (CPU‬في وضع النواه‪/‬الكيرنل "‪ ."Kernel mode‬وتشمل‬
‫األمثلة على ذلك تنفيذ تعليمات البرنامج ‪ halt‬والذي يقوم بوقف النظام‪ ،‬الوصول إلى أجهزة إدارة الذاكرة ( ‪memory-management‬‬
‫‪ ،)hardware‬وإنشاء ‪ .device I/O operations‬من خالل االستفادة من تصميم األجهزة هذا تم وضع نظام التشغيل في فضاء الكيرنل‬
‫"‪ ،"kernel space‬بحيث يمكن أن منفذي نظام التشغيل يضمن أن عمليات المستخدم ليست قادرة على الوصول إلى التعليمات وهياكل‬
‫البيانات من الكيرنل‪ ،‬أو تنفيذ عمليات من شأنها أن تؤثر سلبا على نظام التشغيل‪.‬‬

‫‪ 1.1‬الشل "‪"The Shell‬‬


‫الشل هو برنامج مصمم لقراءة األوامر التي يتم كتابتها من قبل المستخدم ومن ثم تنفيذ البرامج المقابلة لتلك األوامر‪ .‬وهو مثل البرنامج‬
‫ويعرف أحيانا باسم مترجم األوامر )‪.(command interpreter‬‬
‫يستخدم المصطلح ‪ login shell‬لإلشارة إلى إنشاء ‪( process‬عمليه) تقوم بتشغيل الشل عند أول تسجيل دخول للمستخدم‪.‬‬
‫في بعض أنظمة التشغيل مترجم األوامر هو جزء ال يتجزأ من الكيرنل‪ ،‬ولكن في أنظمة ‪ ،UNIX‬الشل هي عملية المستخدم‪ .‬حيث يخرج‬
‫العديد من الشل‪ ،‬مع مختلف المستخدمين (أو مستخدم واحد على نفس الكمبيوتر وفي نفس الوقت يمكن استخدام عدد من الشل المختلفة)‪ .‬فيما‬
‫يلي سوف نسرد عدد من اهم أنواع الشل حتى وقت كتابة هذا الكتاب‪.‬‬

‫)‪Bourne shell (sh‬‬


‫هو من أقدم الشل المستخدمة على نطاق واسع‪ ،‬والذي قام بكتابتها ستيف بورن‪ .‬هذا هو الشل االفتراضي لإلصدار السابع من يونكس‪.‬‬
‫‪ Bourne shell‬يحتوي على العديد من الميزات المألوفة في جميع الشل‪filename generation ،pipelines ،I/O redirection :‬‬
‫(‪ ،background command execution ،command substitution ،environment variables ،variables ، )globbing‬و‬
‫‪ .functions‬جميع إصدارات اليونكس الالحقة تحتوي على ‪ Bourne shell‬باإلضافة إلى مجموعه من الشل األخرى‪.‬‬

‫)‪C shell (csh‬‬


‫لقد قام بيل جوي بتصميم هذه الشل في جامعة كاليفورنيا في بيركلي‪ .‬هذا االسم مستمد نتيجة التشابه في ‪ flow-control constructs‬على‬
‫هذه الشل لتلك الموجودة في لغة البرمجة ‪ .C‬قدمت ‪ csh‬العديد من الميزات التفاعلية المفيدة التي لم تكن متوفرة في بورن شل‪ ،‬بما في ذلك‬
‫‪ ،command-line editing ،command history‬التحكم في الوظائف (‪ ،)job control‬واألسماء المستعارة (‪ .)aliases‬كانت هذه‬
‫الشل غير متوافقة مع البورن شل‪ ،‬وعلى الرغم من أنها الشل االفتراضية في ‪ BSD‬هي ‪ ،csh‬ولكن كانت معظم االسكريبات المكتوبة عادة‬
‫مخصصه للبورن شل‪ ،‬وذلك لتكون محمولة عبر كافة تطبيقات ‪.UNIX‬‬

‫)‪Korn shell (ksh‬‬


‫كتب هذه الشل خلفا لبورن شل من قبل ديفيد كورن في مختبرات بيل ‪ .AT&T‬مع الحفاظ على التوافق مع بورن شل‪ ،‬وأدرجت أيضا ميزات‬
‫تفاعلية مماثلة لتلك التي قدمتها السي شل‪.‬‬

‫)‪Bourne again shell (bash‬‬


‫هذه الشل خاصة بمشروع جنو "‪ "GUN project’s‬حيث قاموا بإعادة صناعة البورن شل‪ .‬وادرجت هي األخرى ميزات تفاعلية مماثلة‬
‫لتلك المتوفرة في ‪ C‬وكورن شل‪ .‬المؤلفين الرئيسين لل ‪ bash‬هم براين فوكس وشيت رامي‪ .‬ال ‪ bash‬هو على االرجح الشل األكثر استخداما‬
‫على لينكس‪.‬‬

‫لقد تم تصميم الشل ليس فقط من اجل االستخدام التفاعلي‪ ،‬ولكن أيضا من اجل تفسير اسكريبات الشل والتي هي ملفات نصية تتضمن أوامر‬
‫الشل‪ .‬لهذا الغرض‪ ،‬كل من الشل لديه التجهيزات المرتبطة عادة مع لغات البرمجة‪ :‬مثل المتغيرات (‪ ،)variable‬الحلقة (‪ ،)loop‬البيانات‬
‫الشرطية (‪ ،)conditional statements‬اوامر اإلدخال‪/‬اإلخراج (‪ ،)I/O commands‬والدوال (‪.)function‬‬
‫كل من الشل تؤدي مهام مماثلة‪ ،‬وإن كانت بدرجات متفاوتة في الصيغة‪ .‬أكثر من األمثلة في هذا الكتاب تتطلب استخدام ‪.bash shell‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪169‬‬

‫‪ 1.1‬أكثر أوامر الشل استخداما‬


‫‪ -‬أوامر المساعده‬
‫لكي تفهم مهمة أحد األوامر واستخداماته المتعددة وخياراته يمكنك االستعانة بأوامر المساعدة لكي تتمكن باإلحاطة بوظيفة االمر‪ .‬هناك عدد‬
‫من مصادر المعلومات والتي توفرها توزيعات جنو‪/‬لينكس‪:‬‬
‫االمر ‪ man‬هو – إلى حٍ د بعيد – الخيار األفضل للمساعدة‪ .‬يسمح لنا بالعودة إلى دليل جنو‪/‬لينكس المجمع في أقسام عديدة تتعلق باألوامر‬
‫اإلدارية‪ ،‬وهيئات الملفات‪ ،‬وأوامر المستخدمين‪ ،‬استدعاءات لغة سي‪ ،‬وغيرها‪.‬‬
‫عادة ما يستخدم الخيار ‪ –k‬او االمر ‪ apropos‬للبحث عن كلمة ما في ملفات ‪.man‬‬
‫االمر ‪ – info‬هو نظام مساعدة شائع آخر‪ .‬ط ِور هذا البرنامج في جنو لتوثيق كثير من أدواته‪ .‬هو باألساس اداه نصيه يمكن البحث فيها عن‬
‫أجزاء وصفحات باستخدام نظام تنقل بسيط يعتمد على لوحة المفاتيح وهو نفس وظيفة ‪ man‬ولكن أكثر تفصيال‪.‬‬
‫الخيار )‪ (--help‬ويستخدم مع اى امر وهو مثل ‪ man‬ولكنه مختصرا‪.‬‬
‫‪ -‬االمر ‪ :pwd‬يستخدم لمعرفة المسار االفتراضي الحالي )‪.(current working directory‬‬
‫‪ -‬االمر ‪ :cd‬يستخدم للتنقل بين المجلدات وبعضها ويكتب االمر ‪ cd‬ثم المسار الذي تريد االنتقال اليه‪.‬‬
‫‪ -‬االمر ‪ :ls‬يستخدم لعرض محتويات المجلدات من ملفات او مجلدات أخرى او أي نوع اخر في المسار الذي يحدده المستخدم او في‬
‫المسار الحالي‪ ،‬وتعتبر هذه األداة من اهم األدوات التي تستخدم مع الشل‪.‬‬
‫‪ -‬االمر ‪ :cp‬يستخدم لنسخ ملف او مجلد الى مكان أخر مع االحتفاظ بالملف األصلي‪.‬‬
‫‪ -‬االمر ‪ :mv‬يستخدم لنقل الملف من مجلد الى اخر غير مكانه األصلي او من اسم الى اسم اخر (أي يعيد تسميته)‪.‬‬
‫‪ -‬االمر ‪ :rm‬يستخدم لحذف الملفات ومع الخيار "‪ "-r‬يستخدم لحذف المجلدات أيضا‪.‬‬
‫‪ -‬االمر ‪ :mkdir‬يستخدم النشاء مجلد جديد‪.‬‬
‫‪ -‬االمر ‪ :rmdir‬يستخدم لحذف مجلد فارغ‪.‬‬
‫‪ -‬االمر ‪ :file‬يستخدم لمعرفة نوع الملف‪.‬‬
‫‪ -‬االمر ‪ :cat‬يستخدم هذا االمر لعرض محتوى ملف على الشاشة‪.‬‬
‫‪ -‬االمر ‪ less‬و‪ :more‬يستخدم هذان االمرين لعرض محتوى ملف على الشاشة ولكن االمر ‪ more‬أكثر تحديثا وتقدما عن االمر‬
‫‪ .less‬حيث كانت مشكلة االمر ‪ cat‬انه عندما يعمل فانه ال يتوقف ولذلك استخدما هذين االمرين حيث عند امتالء الشاشة يتوقف‬
‫حتى يريد المستخدم االستكمال‪.‬‬
‫‪ -‬االمر ‪ head‬و‪ :tail‬يستخدمان لعرض أجزاء من ملف نصي حسبما يريد المستخدم‪ .‬حيث االمر ‪ tail‬يستخدم لعرض اخر ‪12‬‬
‫سطور من الملف النصي ويمكن تحديد السطر المراد قراءته عن طريق الخيار "‪ ."-n‬اما االمر ‪ head‬يستخدم لعرض اول ‪12‬‬
‫سطور من الملف النصي‪.‬‬
‫‪ -‬االمر ‪ :grep‬يستخدم للبحث داخل الملفات ويعد من اهم األوامر المستخدمه‪.‬‬

‫‪Users and Groups 1.1‬‬


‫كل مستخدم على النظام يكون بشكل فريد‪ ،‬ويمكن للمستخدمين ان ينتمون إلى المجموعات‪.‬‬

‫المستخدمين (‪)Users‬‬
‫المستخدم هو شخص معرف في النظام بتعريف فريد مكون من اسم المستخدم (‪ )username‬والذي يستخدمه في تسجيل الدخول‪ ،‬ورقم‬
‫‪ UID‬بحث ال يتشابه أي اثنين من المستخدمين‪ .‬لكل مستخدم يتم تعريفه في سطر في الملف ‪.passwd‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪170‬‬

‫الملف ‪ /etc/passwd‬يحتوي على قائمه بجميع أسماء المستخدمين التي تتعامل مع النظام‪ .‬يستخدم نظام التشغيل لينكس هذا الملف لكي يعرف‬
‫‪ UID‬المقابلة السم المستخدم حيث ان النظام ال يتعامل مع األسماء مباشرة ولكنه يتعامل مع ‪ .UID‬هذا الملف يحتوي على المعلومات التالية‪:‬‬

‫ملحوظه‪ :‬حيث نجد ان ‪ x‬يعبر عن الرقم السري المستخدم حيث كان في القدم يكتب بطريقه يمكن قراتها ولكن االن يوضع في الملف‬
‫‪ /etc/shadow‬على هيئه مشفره وذلك من اجل الدواعي األمنية‪ .‬نجد في الملف أيضا أسماء الخدمات ولكن ليست كمستخدم حقيقي حيث‬
‫كانت في األول تستخدم المستخدم الجذري (‪ )root user‬مما سبب مشاكل كثيره في نظام الحماية‪ ،‬لذلك صنع لكل خدمه (‪ )service‬مستخدم‬
‫خاص به وهو مستخدم غير حقيقي ويسمى ‪.system account‬‬

‫المجموعات (‪)groups‬‬
‫لألغراض اإلدارية على وجه الخصوص‪ ،‬للسيطرة على الوصول إلى الملفات والموارد األخرى‪ ،‬فمن المفيد أن تقوم بتنظيم المستخدمين في‬
‫مجموعات‪ .‬على سبيل المثال‪ ،‬مجموعه من الناس يعملون في فريق على مشروع واحد‪ ،‬وبالتالي التقاسم المشترك لمجموعه من الملفات‪ ،‬مما‬
‫جعل أعضاء المجموعة ذاتها يصلون اليه فقط‪ .‬في تطبيقات ‪ UNIX‬في اإلصدارات االقدم‪ ،‬يمكن للمستخدم أن يكون عضوا في مجموعة‬
‫واحدة فقط‪ BSD .‬يسمح للمستخدم أن ينتمي إلى مجموعات متعددة في وقت واحد‪ ،‬وهي الفكرة التي تم تناولها من قبل تطبيقات ‪UNIX‬‬
‫األخرى‪ .‬يتم تعريف كل مجموعة عن طريق سطر واحد في الملف ‪ ،/etc/group ،group‬والذي يتضمن المعلومات التالية‪:‬‬

‫‪1-‬‬ ‫‪The group name‬‬ ‫أسماء الجروب المسجلين على نظام التشغيل‬
‫‪2-‬‬ ‫‪The group password‬‬ ‫الباسورد المخصص للجروب‬
‫‪3-‬‬ ‫‪GID (group ID) number‬‬ ‫الرقم التعريفي بالجروب‬
‫‪4-‬‬ ‫‪The list of user account‬‬ ‫قائمه بأسماء المستخدمين المنتمين لهذه المجموعة‬

‫‪Superuser‬‬
‫مستخدم واحد‪ ،‬ومعروف باسم ‪ Superuser‬او باسم المستخدم الجذري (‪ ،)root user‬لديه امتيازات خاصة داخل النظام‪ .‬هذا الحساب لديه‬
‫هوية المستخدم ‪( 2‬يعنى ان ‪ ،)UID=0‬وعادة يكون اسمه عند تسجيل الدخول ‪ .root‬على أنظمة ‪ UNIX‬التقليدية‪ Superuser ،‬يتجاوز‬
‫جميع فحوصات اإلذن في النظام‪ .‬وهكذا‪ ،‬على سبيل المثال‪ ،‬يمكن ل ‪ Superuser‬الوصول إلى أي ملف في النظام‪ ،‬بغض النظر عن‬
‫األذونات "‪ "permission‬على هذا الملف‪ ،‬ويمكنه إرسال ‪ signals‬إلى أي عملية مستخدم في النظام‪ .‬مسؤولي النظام يستخدمون حساب‬
‫المستخدم ‪ Superuser‬ألداء المهام اإلدارية المختلفة على النظام‪.‬‬

‫األوامر المستخدمه‬
‫االمر ‪ :useradd‬يعتبر هذا التطبيق من أسهل الطرق إلنشاء مستخدمين جدد وعمل مجلد خاص بهم‪ ،‬ويستخدم مجموعه من القيم‬ ‫‪.1‬‬
‫واالعدادات لكي يقوم بعمله‪.(useradd [username]) .‬‬
‫االمر ‪ :passwd‬لتغير او انشاء كلمة المرور لمستخدم ما‪.(passwd [username]) .‬‬ ‫‪.1‬‬
‫االمر ‪ :userdel‬لحذف مستخدم من النظام‪.‬‬ ‫‪.1‬‬
‫االمر ‪ :usermod‬لتعديل بيانات المستخدم‪.‬‬ ‫‪.1‬‬
‫االمر ‪ :groupadd‬يستخدم إلنشاء مجموعه جديده‪.‬‬ ‫‪.1‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪171‬‬

‫االمر ‪ :groupmod‬يستخدم للتعديل في مجموعه معينه‪.‬‬ ‫‪.2‬‬


‫االمر ‪ :groupdel‬يستخدم لحذف جروب معين‪.‬‬ ‫‪.2‬‬
‫االمر ‪ :gpasswd‬يستخدم إلضافة المستخدمين او ازالتها الى المجموعات‪.‬‬ ‫‪.1‬‬
‫االمر ‪ su‬و‪ :sudo‬االمر ‪ su‬يستخدم للتنقل بين المستخدمين اما االمر ‪ sudo‬فهو يقابل في الويندوز ‪ runas‬بحيث يقوم بتشغيل اى‬ ‫‪.6‬‬
‫تطبيق بصالحيات المستخدم الجذرى‪.‬‬

‫‪ 1.1‬معيار هيكلية نظام الملفات‪ ،‬المجلدات‪ ،‬الروابط‪ ،‬الملفات‬


‫)‪(Single Directory Hierarchy, Directories, Links, and Files‬‬
‫الكيرنل يحتفظ ببنية هرميه واحده للمجلدات )‪ (hierarchical directory structure‬تشبه الشجرة وذلك لتنظيم جميع الملفات في النظام‪.‬‬
‫(وهذا يتناقض مع أنظمة التشغيل مثل مايكروسوفت ويندوز‪ ،‬حيث ان كل جهاز ‪ disk‬لديه تسلسل هرمي للمجلدات خاص به)‪ .‬عند قاعدة‬
‫التسلسل الهرمي او عند قاعدة الشجرة هذا يوجد المجلد الجذري )‪ ،(root directory‬واسمه ‪ .)slash( /‬جميع الملفات والدالئل‬
‫)‪ (directory‬هم أطفال او فروع بالنسبة للدليل‪/‬المجلد الجذري‪ .‬يبين الشكل ‪ 1-1‬مثال على بنية الهيكل الهرمي هذا‪.‬‬

‫‪Figure 1-1‬‬

‫أنواع الملفات (‪)File Type‬‬


‫ضمن نظام الملفات‪ ،‬يتميز كل ملف بالنوع )‪ ،(type‬حيث يشير النوع الى ما هو عليه الملفات‪ .‬على سبيل المثال واحد من أنواع هذه الملفات‬
‫يدل على ملفات البيانات العادية‪ ،‬والتي عادة ما تسمى الملفات العادية )‪ (regular or plain‬وذلك لتمييزها عن أنواع الملفات األخرى‪.‬‬
‫تشمل أنواع الملفات األخرى‪ ،directories ،sockets ،pipes ،devices :‬و‪.symbolic links‬‬
‫يتم استخدام المصطلح ‪ file‬للداللة على الملف من أي نوع‪ ،‬وليس فقط الملف العادي‪.‬‬

‫المجلدات والروابط )‪(Directories and links‬‬


‫المجلد‪/‬الدليل هو ملف خاص يأخذ محتواه شكل جدول األسماء إلى جانب اإلشارة إلى الملفات المقابلة لمحتواه‪ .‬هذا التجميع من اسم الملف‬
‫باإلضافة الى اإلشارة اليه يسمى رابط )‪ ،(link‬وربما تحتوي الملفات على روابط متعددة‪ ،‬وبالتالي أسماء متعددة‪ ،‬في نفس أو في مجلدات‬
‫مختلفة‪.‬‬
‫المجلدات قد تحتوي على روابط )‪ (links‬الى حد سواء الملفات والدالئل‪/‬المجلدات األخرى‪ .‬الروابط بين الدالئل تنشا التسلسل الهرمي الذي‬
‫هو موضح في الشكل ‪.1-1‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪172‬‬

‫يحتوي كل مجلد على اثنين على األقل من اإلدخاالت‪ :‬النقطة "‪ ،)dot( ".‬والذي هو رابط إلى المجلد نفسه‪ ،‬ونقطتين "‪ ،)dot-dot( "..‬والذي‬
‫هو رابط إلى المجلد االب‪ ،‬والذي هو فوقه في التسلسل الهرمي‪ .‬كل مجلد‪ ،‬باستثناء المجلد الجذري‪ ،‬له أب‪ .‬المجلد الجذري‪ ،‬االدخال ‪dot-dot‬‬
‫هو وصلة إلى الدليل الجذري نفسه (وبالتالي ‪ /..‬يعادل ‪.)/‬‬

‫‪Symbolic links‬‬
‫مثل الرابط العادي "‪ symbolic link ،"Normal link‬يوفر اسم بديل للملف‪ .‬ولكن في حين أن الرابط العادي "‪ "Normal link‬هو‬
‫عباره عن اسم الملف زائد المؤشر )‪ (filename-plus-pointer‬الى الملف في قائمة المجلد‪ symbolic link ،‬هو ملف صنع خصيصا‬
‫ليحتوي على اسم ملف آخر‪( .‬بعبارة أخرى‪ symbolic link ،‬لديه اسم الملف زائد المؤشر في قائمة المجلد‪ ،‬ويشار الى الملف من قبل‬
‫المؤشر الذي يحتوي على سلسلة ألسماء ملف آخر)‪ .‬وغالبا ما يسمى هذا الملف األخير الهدف )‪ (target‬من ‪ ،symbolic link‬وأنه من‬
‫الشائع أن نقول إن ‪ symbolic link‬هو "‪ "points‬أو "‪ "refers‬إلى الملف الهدف‪ .‬عندما يتم تحديد المسار في ‪ ،system call‬فان معظم‬
‫الحاالت‪ ،‬الكيرنل يقوم تلقائيا بمراجعة (أو تتبع المرادف) لكل ‪ symbolic link‬في المسار‪ ،‬واالستعاضة عنه مع اسم الملف الذي تؤشر إليه‪.‬‬
‫هذه العملية قد تحدث بشكل متكرر إذا كان الهدف من ‪ symbolic link‬هو في حد ذاته ‪( .symbolic link‬الكيرنل تفرض قيودا على عدد‬
‫من المراجعات للتعامل مع إمكانية التعامل مع ‪ .)symbolic link‬إذا كان ‪ symbolic link‬يشير إلى ملف غير موجود‪ ،‬فيقال إنها تكون‬
‫‪.dangling link‬‬
‫غالبا ما يستخدم المصطلح ‪ hard link‬و‪ soft link‬كمصطلحات بديلة عن الروابط ‪ normal‬و‪ .symbolic‬أسباب وجود اثنين من‬
‫األنواع المختلفة من الروابط سوف يتم شرحه الحقا‪ .‬يستخدم االمر ‪ ln‬النشاء كال من ‪ symbolic link‬و‪.hard link‬‬

‫أسماء الملفات )‪(Filenames‬‬


‫في معظم أنظمة ملفات لينكس‪ ،‬أسماء الملفات يمكن ان يصل الى ‪ 111‬رمزا‪ .‬قد تحتوي أسماء الملفات على أية من الرموز باستثناء (‪)/‬‬
‫"‪ "slashes‬و(‪ ."null characters" )\0‬ومع ذلك‪ ،‬فإنه من المستحسن استخدام الحروف واألرقام فقط‪ ،‬و"‪"_" ،)period( ".‬‬
‫(‪ ،)underscore‬و"‪.)hyphen( "-‬‬
‫يجب علينا ان تتجنب استخدام الرموز في أسماء الملفات التي ليست هي ضمن مجموعة الرموز المصرح الستخدامها عند تعيين اسم الملف‬
‫ألن تلك الرموز قد يكون لها معاني خاصة داخل الشل‪ ،‬ضمن التعابير العادية‪ ،‬أو في سياقات أخرى‪ .‬إذا ظهر اسم الملف يحتوي على رموز‬
‫ذات معاني خاصة في مثل هذه السياقات‪ ،‬فيجب أن ‪ .escaped‬وهذا عباره عن كتابة الخط المائل "‪ (\) "back slashes‬قبل الرمز وهذا‬
‫لإلشارة إلى أنها ال ينبغي أن تفسر تلك المعاني الخاصة‪ .‬في السياقات حيث ال توجد آلية ‪ escaped‬متاحه‪ ،‬فان اسم الملف يكون غير قابلة‬
‫لالستخدام‪ .‬يجب علينا أيضا تجنب أسماء الملفات التي تبدأ مع ‪ ،)-( hyphen‬ألن مثل هذه أسماء قد تحدث خطئا مع الخيارات المحددة مع‬
‫أوامر الشل‪.‬‬

‫المسارات )‪(Pathnames‬‬
‫اسم المسار هو سلسلة تتكون من خط مائل في البداية (‪ )/‬ثم تليها سلسلة من أسماء الملفات المفصولة بهذا الخط المائل‪ .‬الجميع ولكن االخير‬
‫خاصة من هذه األسماء هو الذي يحدد المجلد (أو ‪ .)symbolic link‬المكون األخير من اسم المسار قد يحدد نوع أي من الملفات‪ ،‬بما في ذلك‬
‫المجلد‪ .‬ويشار إلى سلسلة من أسماء الملفات المفصولة بالخط المائل وفى اخرها خط مائل بانها مسار المجلد )‪ ،(/etc/‬في حين أن السلسلة التي‬
‫تنتهي باسم يشار اليها أحيانا إلى الملف أو ‪.(/etc/passwd) base‬‬
‫تتم قراءة اسم مسار من اليسار إلى اليمين‪ .‬الرمز "‪ "..‬يمكن استخدامه في أي مكان في اسم المسار لإلشارة إلى االب للموقع المحدد حتى اآلن‬
‫في المسار‪.‬‬

‫المسار يصف موقع الملف او المجلد ضمن التسلسل الهرمي للمجلد‪ ،‬وهو إما يكون مطلق )‪ (absolute‬أو نسبي )‪:(relative‬‬

‫‪ -‬المسار المطلق )‪(absolute pathname‬‬


‫الطريقة التقليدية للتنقل بين الملفات حيث يبدا المسار ب (‪ )/‬ويدل على المسار الجذري ثم مسار المجلد المسار الكامل للمجلد )‪ .(FQN‬أمثلة‬
‫على ذلك هى ‪ /home/mtk/.bashrc‬و ‪./usr/include‬‬
‫‪ -‬المسار النسبي )‪(relative pathname‬‬
‫هنا يتم االنتقال الى المسار المراد الذهاب اليه من دون ان تبدأ ب )‪ (/‬ويحدد المسار الحالي بكتابة المسار المراد التنقل اليه ويكون داخل المسار‬
‫الحالي أي بكتابه اسم المجلد المراد االنتقال اليه دون كتابه االسم بالكامل‪ .‬انظر الجدول التالي لبعض األمثلة على ذلك‪:‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪173‬‬

‫المسار الحالي )‪ (Current working directory‬ويرمز له بالرمز ‪cwd‬‬


‫كل عملية لديها ‪( cwd‬وأحيانا يشار إليها باسم ‪ process’s working directory‬أو المجلد الحالي)‪ .‬هذا هو "الموقع الحالي" لعملية‬
‫ضمن التسلسل الهرمي‪.‬‬
‫كل العمليات التي تتم على جنو‪/‬لينكس من برامج واوامر تستخدم مسار افتراض للمجلد عندما تعمل وذلك لتسهيل عمله حيث كما قلنا من قبل‬
‫ان اسم أي ملف يكون عباره عن بداية الشجرة وهي ‪ /‬ثم المجلدات التي تحتويه ثم اسم الملف )‪ (FQN‬مما يسبب صعوبة في االستخدام‪ .‬لذلك‬
‫لعمل أي امر فانه يستخدم المسار االفتراضي الحالي ‪ cwd‬والذي يستخدم في تكملة ‪ FQN‬ألي ملف‪ .‬يمكنك معرف المسار الحالي وذلك‬
‫باستخدام االمر ‪ ،PWD‬ويمكنك أيضا تغير المسار الحالي باستخدام االمر ‪ cd‬ثم المسار المراد الذهاب اليه (‪.)cd /etc/‬‬
‫‪FQN = Fully Qualified Name‬‬

‫ملكيات واذونات الملفات )‪(File ownership and permission‬‬


‫كل ملف يرتبط به هوية المستخدم )‪ (User ID‬وهوية المجموعة )‪ (Group ID‬التي ينتمي اليها المستخدم وهذا يحدد صاحب الملف‬
‫والمجموعة التي ينتمي إليها‪ .‬يتم استخدام ملكية ملف لتحديد حقوق الوصول المتاحة للمستخدمين الى الملف‪.‬‬
‫لغرض الوصول إلى الملف‪ ،‬فان النظام يقسم المستخدمين إلى ثالث فئات‪ :‬صاحب الملف )‪( (owner‬وأحيانا يطلق مستخدم الملف)‪،‬‬
‫المستخدمين )‪ (users‬الذين هم أعضاء في المجموعة المطابقة لهوية مجموعة الملف (‪ ،)group ID‬والباقي من المستخدمين (‪.)other‬‬
‫يتم تعيين ثالثة بت من اإلذن )‪ (Three permission bits‬لكل من هذه الفئات (مما يصنع مجموعه تسعة بت)‪ :‬إذن ‪ read‬يسمح‬
‫لمحتويات الملف أن يقرأ‪ .‬إذن ‪ write‬يسمح بتعديل محتويات الملف؛ وإذن ‪ execute‬يسمح بتنفيذ الملف‪ ،‬والذي هو إما برنامج أو برنامج‬
‫نصي لتتم معالجته من قبل بعض المترجمات (عادة‪ ،‬ولكن ليس دائما‪ ،‬واحدة من الشل)‪.‬‬
‫كما يمكن تعيين هذه األذونات على المجلدات ايضا‪ ،‬على الرغم من ان معانيها مختلفة قليال‪ :‬إذن ‪ read‬يسمح لمحتويات المجلد أن يتم سردها‪.‬‬
‫إذن ‪ write‬يسمح لمحتويات المجلد أن تتغير (أي‪ ،‬يمكن إضافة أسماء الملفات‪ ،‬وإزالتها‪ ،‬وغيرها من االشياء)؛ اذن ‪( execute‬التي تسمى‬
‫أحيانا البحث) إذن يسمح بالوصول إلى الملفات داخل المجلد (أي انه يمكنك فتح المجلد)‪.‬‬

‫يمكنك رؤية وصف الملف بالكامل مع استخدم االمر ‪ ls‬ثم مع الخيار ‪ al‬فيصبح كاالتي )‪.(ls –al filename‬‬

‫يمكن التالعب بهذه الصالحيات سواء للملفات او المجلدات من خالل استخدام االمر ‪.chmod‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪174‬‬

‫‪File I/O Model 1.1‬‬


‫واحدة من السمات المميزة لنموذج ‪ I/O Model‬على أنظمة ‪ UNIX‬هو مفهوم العالمية )‪ .(universality of I/O‬وهذا يعنى ان نفس‬
‫‪ system call‬مثل )(‪ ،close() ،write() ،read() ،open‬وهكذا تستخدم ألداء ‪ I/O‬على جميع أنواع الملفات بما في ذلك ‪.devices‬‬
‫(الكيرنل يترجم طلبات ‪ I/O‬الخاصة بالتطبيق الى نظام الملفات المقابل أو عمليات ‪ device-driver‬المناسبة التي تؤدي ‪ I/O‬على الملف‬
‫الهدف أو‪ .)device‬وهكذا‪ ،‬فإن البرنامج الذي يقوم بتوظيف هذه ‪ system call‬فانه سوف يعمل على أي نوع من الملفات‪.‬‬
‫في األساس الكيرنل يوفر نوع واحدة من الملف‪ ،sequential stream of bytes :‬والتي‪ ،‬هي في حالة ملفات القرص‪ ،‬واألقراص‪،‬‬
‫وأجهزة ‪ ،tape‬يمكن الوصول إليها بشكل عشوائي باستخدام )(‪.lseek‬‬
‫العديد من التطبيقات والمكتبات تفسر حرف السطر الجديد (‪ ،ASCII code 10 decimal‬وأحيانا المعروف أيضا باسم ‪،)linefeed‬‬
‫وإنهاء سطر واحد من النص والبدء بأخرى‪ .‬أنظمة يونيكس ليس لها تفسير لنهاية الملف‪ .‬ولكن يتم الكشف عن نهاية الملف عن طريق القراءة‬
‫مع عدم إرجاع أية بيانات‪.‬‬

‫‪(File‬‬ ‫واصفات الملف )‪descriptors‬‬


‫من أجل قراءة المعلومات من أو كتابة المعلومات إلى الملف‪ ،‬يجب فتح الملف‪ ،‬لينكس ويونكس تتبع الملفات التي فتحت عن طريق تعيين عدد‬
‫صحيح لها‪ .‬ويطلق على هذا العدد الصحيح ‪.file descriptor‬‬
‫‪ I/O system calls‬التي تشير إلى الملفات المفتوحة تستخدم ‪( ،file descriptor‬عادة ما يكون صغير) عدد صحيح غير سالب‪ .‬وعادة ما‬
‫يتم الحصول على ‪ file descriptor‬عن طريق استدعاء الدالة )(‪.open‬‬
‫عادة‪ ،‬العملية ترث ثالثة اصناف من واصف الملف المفتوح )‪ (open file descriptor‬عندما يتم تشغيلها من قبل الشل‪ :‬الواصف ‪ 2‬وهو‬
‫‪ ،standard input‬الملف الذي تأخذ العملية منه مدخالتها‪ .‬الواصف ‪ 1‬هو ‪ ،standard output‬الملف الذي تكتب فيه العملية انتاجها‪.‬‬
‫الواصف ‪ 1‬وهو ‪ ،standard error‬الملف الذي تكتب فيه عملية رسائل الخطأ وإخطار الظروف االستثنائية أو الغير طبيعية‪ .‬في الشل أو‬
‫البرنامج‪ ،‬ترتبط هذه الواصفات الثالثة عادة إلى ‪ .terminal‬في المكتبة ‪ ،stdio‬هذه الواصفات تتوافق مع المعاير ‪،stdout ،stdin‬‬
‫و‪.stderr‬‬

‫‪The stdio library‬‬


‫ألداء ‪ ،file I/O‬فان لغة السي توظيف دوال ‪ I/O‬الواردة في مكتبة السي القياسية والتي تشير الى المكتبة )‪ .(stdio library‬وتشمل هذه‬
‫المجموعة من الدوال‪ ،fputs() ،fgets() ،printf() ،scanf() ،fclose() ،fopen() ،‬وهلم جرا‪.‬‬

‫‪ 1.1‬البرامج )‪(Programs‬‬
‫ببساطة‪ ،‬العملية "‪ "process‬هي عملية تنفيذ البرنامج‪ .‬عند تنفيذ البرنامج‪ ،‬فان الكيرنل يقوم بتحميل اكواد البرنامج الى الذاكرة االفتراضية‬
‫)‪ ،(virtual memory‬وتخصص مساحة لمتغيرات البرنامج‪ ،‬ويضع هياكل بيانات دفاتر الكيرنل جاهز لتسجيل المعلومات المختلفة (مثل‬
‫‪ ،process ID‬حالة اإلنهاء )‪ ،(termination status‬هوية المستخدم )‪ ،(user ID‬وهوية المجموعة )‪ )(group ID‬حول العملية‪.‬‬
‫من وجهة نظر الكيرنل‪ ،‬العمليات هي الكيانات التي بينها يجب على الكيرنل تقاسم الموارد المختلفة للكمبيوتر‪ .‬وبالنسبة للموارد التي هى‬
‫محدودة‪ ،‬مثل الذاكرة‪ ،‬فان الكيرنل يخصص في البداية بعض من الكمية من الموارد لهذه العملية‪ ،‬ويضبط هذا التخصيص على مدى عمر هذه‬
‫العملية لالستجابة لمطالب العملية وطلب النظام لهذه الموارد‪ .‬عندما تنتهي هذه العملية‪ ،‬يتم تحرير كافة هذه الموارد إلعادة استخدامها من قبل‬
‫عمليات أخرى‪ .‬الموارد األخرى‪ ،‬مثل وحدة المعالج المركزي (‪ )CPU‬والنطاق الترددي للشبكة (‪ ،)Network bandwidth‬قابلة للتجديد‪،‬‬
‫ولكن يجب أن تكون مشتركة بصورة عادلة بين جميع العمليات‪.‬‬

‫تخطيط الذاكرة للعملية )‪(Process memory layout‬‬


‫تنقسم الذاكرة منطقيا إلى األجزاء التالية‪ ،‬والمعروفة باسم ‪:segment‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪175‬‬

‫‪ :Text‬هذا الجزء من الذاكرة يخزن به تعليمات البرنامج‪.‬‬ ‫‪-‬‬


‫‪ :Data‬هذا الجزء من الذاكرة يخزن به المتغيرات الثابتة المستخدمة من قبل البرنامج‪.‬‬ ‫‪-‬‬
‫‪ :Heap‬هذا الجزء من الذاكرة يمكن تخصيصه كذاكرة إضافية بشكل حيوي‪.‬‬ ‫‪-‬‬
‫‪ :Stack‬هذا الجزء من الذاكرة الذى ينمو وينكمش كلما تم استدعاء داله والعودة بقيمه ويستخدم لتخزين المتغيرات المحلية‬ ‫‪-‬‬
‫ومعلومات الرابط عند استدعاء دالة‪.‬‬

‫إنشاء العملية وتنفيذ البرامج )‪(Process creation and program execution‬‬


‫يمكن لعملية ما إنشاء عملية جديدة باستخدام ‪ .fork() system call‬العملية التي تستدعى الدالة )(‪ fork‬يشار اليها بانها العملية االب‬
‫)‪ ، (parent process‬ويشار الى العملية الجديدة باسم العملية الطفل )‪ .(child process‬الكيرنل ينشأ ‪ child process‬من خالل جعل‬
‫نسخة مكررة من ‪ Child process .parent process‬يرث نسخة من بيانات ‪ ،heap ،stack ،parent‬والتي قد يتم تعديلها بشكل‬
‫مستقل عن النسخة األصلية‪( .‬نص البرنامج‪ ،‬الذي تم وضعه في الذاكرة مع العالمة للقراءة فقط‪ ،‬يتم مشاركتها من قبل العمليتين)‪.‬‬
‫‪ Child process‬قد يذهب إما لتنفيذ مجموعة مختلفة من المهام في نفس الكود كما في ‪ ،Parent‬أو‪ ،‬في كثير من األحيان‪ ،‬استخدام‬
‫‪ execve() system call‬لتحميل وتنفيذ برنامج جديد تماما‪ execve() system call .‬يدمر النص‪ ،‬والبيانات‪ ،‬والقطاعات ‪،stack‬‬
‫و‪ ،heap‬واالستعاضة عنهم مع شرائح جديدة استنادا إلى كود البرنامج الجديد‪.‬‬

‫‪Process ID and parent process ID‬‬


‫كل عملية لديها معرف العملية )‪ (process ID‬فريد وتختصر الى (‪ )PID‬وهو عدد صحيح‪ .‬يحتوي كل عملية أيضا على معرف العملية‬
‫األصل (‪ )PPID‬والذي يحدد العملية التي طلبت من الكيرنل انشاء هذه العملية‪.‬‬

‫إنهاء عملية وحالة اإلنهاء )‪(Process termination and termination status‬‬


‫أي عملية يمكن إنهائها بواحده من هذين الطريقين‪ :‬أوال عن طريق ارسال طلب اإلنهاء باستخدام ‪( _exit() system call‬أو أي داله ذات‬
‫صله ب )(‪ ،)exit‬أو عن طريق التعرض للقتل )‪ (kill‬بواسطة ارسال نوع معين من اإلشارة )‪ .(signal‬في كلتا الحالتين‪ ،‬فإن العملية تنتج‬
‫وضعا اإلنهاء )‪ ،(termination status‬وهي عباره عن قيمة من عدد صحيح غير سلبي صغير متاح للفحص من قبل ‪parent process‬‬
‫باستخدام ‪ .wait() system call‬في حالة استدعاء الدالة )(‪ ،_exit‬فان العملية هي التي تحدد وضع اإلنهاء الخاص بها‪ .‬أما إذا تم قتل‬
‫العملية من خالل اإلشارة )‪ ،(signal‬يتم تعيين حالة اإلنهاء وفقا لنوع اإلشارات التي تسببت في وفاة هذه العملية‪ .‬في بعض األحيان‪ ،‬سنقوم‬
‫بالرجوع إلى الحجة )‪ (argument‬التي يتم تمريرها إلى )(‪ _exit‬كحالة الخروج من هذه العملية‪ ،‬تمييزا لها عن حالة إنهاء الخدمة‪ ،‬والتي‬
‫هي إما القيمة التي تم تمريرها إلى )(‪ _exit‬أو مؤشرا الى اإلشارة )‪ (signal‬التي تم استخدامها لقتل هذه العملية ‪.‬‬
‫وضع اإلنهاء ‪ (termination status of 0) 1‬يشير إلى أن العملية نجحت‪ ،‬والوضع الغير صفري يشير إلى وقع بعض الخطأ‪ .‬معظم‬
‫الشل تبين وضع االنهاء عند انهاء اخر برنامج تنفيذي عبر متغير الشل باسم )?‪.($‬‬

‫)‪Process user and group identifiers (credentials‬‬


‫كل عملية لديها عدد من المعرفات المرتبطة بها معرفات المستخدم (‪ )UIDs‬ومعرفات المجموعة (‪ .)GIDS‬وتشمل هذه‪:‬‬
‫‪Real user ID and real group ID -‬‬
‫هذه تحديد المستخدمين والمجموعات التي تنتمي إليها هذه العملية‪ .‬العملية الجديدة ترث هذه المعرفات من ‪( Login shell .parent‬شل‬
‫تسجيل الدخول) يحصل على المعرفات الخاص به للمستخدم الحقيقي والمجموعة الحقيقية من الحقول المقابلة في الملف ‪.passwd‬‬
‫‪Effective user ID and effective group ID -‬‬
‫يستخدم هذين المعرفين (باالشتراك مع ‪ supplementary group IDs‬التي سوف تناقش تاليا) في تحديد أذونات العملية عند الوصول إلى‬
‫الموارد المحمية مثل الملفات وكائنات االتصال‪ .‬عادة‪ ،‬معرفات العملية الفعالة )‪ (process’s effective IDs‬لديها نفس قيم المعرفات‬
‫الحقيقية المقابلة‪ .‬تغيير المعرفات الفعالة هى آلية تسمح للعملية باستخدام امتيازات مستخدم أو مجموعة أخرى‪.‬‬
‫‪supplementary group IDs -‬‬
‫هذه المعرفات تحدد مجموعات إضافية تنتمي إليها هذه العملية‪ .‬العملية الجديدة ترث ‪ supplementary group IDs‬لها من ‪.parent‬‬
‫‪( Login shell‬شل تسجيل الدخول) يحصل على ‪ supplementary group IDs‬من الملف ‪./etc/group‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪176‬‬

‫العمليات المميزة )‪(Privileged processes‬‬


‫على أنظمة يونكس‪ ،‬العملية المتميزة هي واحدة التي يكون لديها معرف المستخدم ‪ ID‬هو ‪ .)Superuser( 1‬هذه العملية تتجاوز القيود التي‬
‫تطبق عادة من قبل الكيرنل‪( .‬بمعنى اخر هي العملية التي يكون لديها جميع الصالحيات والوصول الى جميع الملفات والموارد الموجودة حتى‬
‫المحمية منها)‪ .‬على النقيض من ذلك‪ ،‬يتم تطبيق ‪( unprivileged‬غير متميز) أو ‪ nonprivileged‬إلى العمليات التي يديرها المستخدمين‬
‫اآلخرين‪ .‬مثل هذه العمليات لديها هوية المستخدم )‪ (user ID‬ال يساوى صفر ابدا ويجب أن تلتزم بقواعد اإلذن التي تطبقها الكيرنل‪.‬‬
‫العملية قد تكون متميزة ألنه تم إنشاؤه من قبل عمليات متميزة اخرى‪ ،‬على سبيل المثال‪ ،‬شل تسجيل الدخول )‪ (Login shell‬بدأت مع‬
‫المستخدم الجذري (‪ .)Superuser‬هناك طريقة أخرى فيه قد تصبح العملية متميزة وهو عن طريق آلية ‪،set-user-ID mechanism‬‬
‫والتي تسمح للعملية باستخدام معرف المستخدم الفعال الذي هو نفس معرف المستخدم من ملف البرنامج المنفذ‪.‬‬

‫القدرات )‪(Capabilities‬‬
‫منذ إصدار الكيرنل ‪ ،0.0‬اللينكس قام بتقسم االمتيازات الممنوحة تقليديا إلى ‪ Superuser‬إلى مجموعة من الوحدات مستقلة تسمى‬
‫‪ .capabilities‬ترتبط كل عملية متميزة مع ‪ capabilities‬معينة‪ ،‬والعملية يمكن أن تؤدي عملها فقط إذا كانت لديها ‪capabilities‬‬
‫المقابلة‪ .‬عملية ‪ Superuser‬التقليدية (ذات هوية المستخدم ‪ )1‬تناظر العملية التي بها كل ‪ Superuser‬الممكنة‪.‬‬
‫منح مجموعة فرعية من ‪ capabilities‬الى العملية تتيح لها أداء بعض العمليات المسموح بها عادة إلى ‪ ،Superuser‬في حين منعه من‬
‫أداء اآلخرين‪.‬‬
‫يتم وصف هذه ‪ capabilities‬بالتفصيل الحقا‪ .‬في هذا الكتاب‪ ،‬عندما نشير إلى عملية معينة يمكن القيام بها من خالل عملية متميزة‪ ،‬سنقوم‬
‫عادة بتحديد ‪ capability‬محددة بين قوسين‪ .‬تبدأ أسماء ‪ capability‬مع ‪ ،_CAP‬كما هو الحال في ‪.CAP_KILL‬‬

‫‪The init process‬‬


‫عند تشغيل النظام‪ ،‬فان الكيرنل تنشا عملية خاصة تسمى ‪" ،init‬وهي االب لجميع العمليات"‪ ،‬وهي مشتقة من ملف البرنامج ‪ ./sbin/init‬يتم‬
‫إنشاء جميع العمليات على النظام (باستخدام )(‪ )fork‬إما عن طريق ‪ init‬أو عن طريق واحد من نسله‪ .‬عملية ‪ init‬دائما لديها المعرف ‪1‬‬
‫)‪ (process ID 1‬ويعمل بامتيازات المستخدم ‪ .Superuser‬ال يمكنك قتل او انهاء العملية ‪( init‬وليس حتى من قبل المستخدم‬
‫‪ ،)Superuser‬حيث انها تنتهي فقط عندما يتم إيقاف تشغيل النظام‪ .‬المهمة الرئيسية ل ‪ init‬هى خلق ورصد مجموعة من العمليات المطلوبة‬
‫من قبل نظام التشغيل‪( .‬لمزيد من التفاصيل‪ ،‬راجع صفحات )‪ man (8‬وذلك باستخدام االمر "‪ "man 8 init‬في الترمنال)‪.‬‬

‫‪Daemon processes‬‬
‫العملية ‪ daemon‬هي عملية ذات غرض خاص يتم إنشاؤها والتعامل معها من قبل النظام بنفس الطريقة التي يتعامل معها مع العمليات‬
‫األخرى‪ ،‬ولكن يتميز بالخصائص التالية‪:‬‬
‫‪ -‬يستمر في العمل لفترة طويلة‪ .‬حيث يبدا عمله غالبا مع بداية عمل نظام التشغيل ويبقى في الوجود حتى يتم إيقاف تشغيل النظام‪.‬‬
‫‪ -‬يعمل في الخلفية‪ ،‬وليس لديه ترمنال للسيطرة عليه والتي من خاللها يمكن قراءة المدخالت أو كتابة المخرجات‪.‬‬
‫تشمل األمثلة على عمليات ‪ daemon‬االتي‪ syslogd :‬والذي يسجل الرسائل في سجل النظام ‪ ،httpd ،log‬الذي يخدم كصفحات الويب‬
‫عبر البروتوكول (‪ .)HTTP‬ونالحظ انها جميعا تنتهي بالحرف ‪ d‬والمعبرة عن العملية ‪.daemon‬‬

‫‪Environment list‬‬
‫كل عملية لديها قائمة بالمتغيرات البيئية )‪ ،(environment variable list‬والذي هو عبارة عن مجموعة من متغيرات البيئة‬
‫)‪ (environment variable‬والتي يتم االحتفاظ بها داخل ذاكرة ‪ user-space‬من العملية‪ .‬كل عنصر من هذه القائمة يتكون من اسم‬
‫وقيمة مرتبطة به‪ .‬عند إنشاء عملية جديدة عبر )(‪ ،fork‬فإنه يرث نسخة من متغيرات الخاصة ب ‪ .parent‬وبالتالي‪ ،‬يوفر آلية لتوصيل‬
‫المعلومات من ‪ parent process‬الى ‪ .child process‬عندما يستبدل العملية برنامج كان يعمل باستخدام )(‪ ،execve‬فان البرنامج الجديد‬
‫يرث المتغيرات التي يستخدمها البرنامج القديم أو يتلقى متغيرات ‪ environment‬جديد كجزء من ‪.execve() system call‬‬
‫يتم إنشاء المتغيرات البيئة مع األمر ‪ export‬في معظم أنواع الشل (أو األمر ‪ setenv‬في ‪ ،)csh‬كما في المثال التالي‪:‬‬
‫'‪$export MYVAR='Hello world‬‬
‫يمكن لبرامج السي الوصول إلى المتغيرات البيئة هذه باستخدام متغير خارجي (‪ ،)char **environ‬والعديد من دوال المكتبة تسمح بعملية‬
‫استرداد وتعديل قيم المتغيرات البيئة‪.‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪177‬‬

‫تستخدم المتغيرات البيئة )‪ (environment variable‬لمجموعة متنوعة من األغراض‪ .‬على سبيل المثال‪ ،‬تحديد الشل المستخدم‪ ،‬استخدام‬
‫مجموعة من المتغيرات التي يمكن الوصول إليها من قبل البرامج النصية والبرامج المنفذة من قبل الشل‪ .‬وتشمل بعض من هذه المتغيرات‬
‫‪ ،HOME‬الذي يحدد اسم مسار مجلد الخاص بالمستخدم الذي قام بتسجيل الدخول‪ ،‬والمتغير ‪ ،PATH‬الذي يحدد قائمة المجلدات التي يجب‬
‫على الشل أن يبحث فيها عندما يبحث عن البرامج الموافقة لألوامر المدخلة من قبل المستخدم‪.‬‬

‫حدود الوارد )‪(Resource limits‬‬


‫كل عملية تستهلك الموارد‪ ،‬مثل فتح الملفات والذاكرة‪ ،‬والوقت و‪ .CPU time‬باستخدام ‪ ،setrlimit() system call‬يمكن للعملية وضع‬
‫الحدود العليا على استهالكها من الموارد المختلفة‪ .‬كل حد من الموارد هذا له قيمتين مرتبطة بها‪ ،soft limit :‬مما يحد من كمية الموارد التي‬
‫قد تستهلكها هذه العملية؛ وحد ‪ ،hard limit‬وهو سقف القيمة التي يمكن تعديل ‪ soft limit‬اليها‪ .‬العملية الغير مميزه )‪ (unprivileged‬قد‬
‫تتغير ‪ soft limit‬لمورد معين إلى أي قيمة في نطاق من الصفر إلى ‪ hard limit‬المقابل‪ ،‬ولكنها يمكن أن تخفض فقط ‪.hard limit‬‬
‫عند يتم إنشاء عملية جديدة بواسطة )(‪ ،fork‬فإنه يرث نسخة من إعدادات حد الموارد الخاصة بال ‪. parent‬‬
‫حدود الموارد من الشل يمكن تعديلها باستخدام األمر ‪.ulimit‬‬

‫‪( Memory Mappings 1.1‬تعيينات الذاكرة)‬


‫‪ The mmap() system call‬ينشأ تعيين ذاكرة جديد )‪ (memory mapping‬عند استدعاء العملية ‪.virtual address space‬‬
‫هذه التعينات ‪ mapping‬تندرج نحو فئتين‪:‬‬
‫‪file mapping -‬‬
‫هذا يقوم بتعيين مناطق الملف إلى الذاكرة الظاهرية التي تم استدعاءها )‪ .(calling process’s virtual memory‬بمجرد التعيين‪ ،‬فان‬
‫محتويات الملف يمكن الوصول إليها من قبل العمليات في منطقة الذاكرة المقابلة‪ .‬يتم تحميل صفحات ‪ mapping‬تلقائيا من الملف على النحو‬
‫المطلوب‪.‬‬

‫‪anonymous mapping -‬‬


‫على النقيض من ذلك‪ anonymous mapping ،‬والتي ليس لديها مخطط الملف المقابل‪ .‬بدال من ذلك‪ ،‬يتم تهيئة صفحات التعيين إلى ‪.2‬‬

‫الذاكرة في ‪ process’s mapping‬الواحدة يمكن ان تتشارك مع ‪ mapping‬في العمليات األخرى‪ .‬يمكن أن يحدث هذا إما بسبب ان تعينن‬
‫العمليتين )‪ (process’s mapping‬يكون للمنطقة نفسها من الملف أو بسبب ان العملية تكون ‪ child process‬والتي ترث التعيين‬
‫)‪ (mapping‬الخاص بال ‪.parent‬‬
‫عندما يتشارك اثنين من العمليات أو أكثر نفس الصفحات‪ ،‬فان كل عملية قد ترى التغييرات التي أجراها العمليات األخرى إلى محتويات‬
‫الصفحة‪ ،‬اعتمادا على ما إذا تم إنشاء ‪ mapping‬على أنها خاصة أو مشتركة‪ .‬عندما تكون ‪ mapping‬خاصه "‪ ،"private‬فان التعديالت‬
‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪178‬‬

‫على محتويات ‪ mapping‬تكون ليست واضحة إلى العمليات األخرى وال يتم إدراجها من خالل الملف األساسي‪ .‬عندما تكون ‪mapping‬‬
‫مشتركه "‪ ،"shared‬فان التعديالت على محتويات ‪ mapping‬تكون واضحة إلى عمليات األخرى التي تتقاسم نفس ‪ mapping‬ويتم‬
‫إدراجها من خالل الملف األساسي‪.‬‬
‫تعيينات الذاكرة )‪ (memory mapping‬تخدم مجموعة متنوعة من األغراض‪ ،‬بما في ذلك تهيئة ‪ process’s text segment‬من الجزء‬
‫المقابلة له من ‪ segment‬ملف التنفيذ‪ ،‬تخصيص جزء جديد (مليئة بالصفر) من الذاكرة‪ ،‬الملف ‪،)memory-mapped I/O( I/O‬‬
‫االتصال بين العمليات (عن طريق ‪.)shared mapping‬‬

‫‪Static and Shared Libraries 1.11‬‬


‫‪ Object library‬هو الملف الذي يحتوي على كود ‪ object‬المترجم (‪ )compiled object code‬من اجل توفير مجموعة من الدوال‬
‫التي يمكن استدعاؤها من قبل برامج التطبيقات‪ .‬وضع هذه االكواد من اجل مجموعه من الدوال في ملف مكتبه واحد يسهل من مهام إنشاء‬
‫البرنامج والصيانة‪ .‬توفر أنظمة يونيكس الحديثة نوعين من المكتبات ‪ :Object library‬مكتبات ثابتة )‪ (static library‬ومكتبات‬
‫المشتركة )‪.(shared library‬‬

‫المكتبات الثابتة )‪(Static libraries‬‬


‫‪( Static libraries‬أحيانا تعرف أيضا باسم ‪ )archives‬هو النوع الوحيد من المكتبة على أنظمة ‪ UNIX‬القديمة‪Static libraries .‬‬
‫هي في األساس منظمة في حزم من الوحدات النمطية المترجمة‪ .‬الستخدام الدوال من ‪ ،Static libraries‬فإننا نقوم بتحديد تلك المكتبة في‬
‫أمر االرتباط المستخدم في بناء البرنامج‪ .‬حيث ان هذا الرابط يأخذ نسخه من االكواد المطلوبة من المكتبة ونسخها في ملف البرنامج الناتج عن‬
‫ذلك‪ .‬ونحن نقول ان هذا البرنامج مرتبط بشكل ثابت‪.‬‬
‫حقيقة أن البرامج المرتبطة مع المكتبات الثابتة لديها نسخته من االكواد المطلوبة من المكتبة يخلق عددا من العيوب‪ .‬واحد من هذه العيوب هو‬
‫ازدواجية الكود في مختلف الملفات التنفيذية مما يستهلك مساحة زائده من مساحة القرص‪ .‬أيضا فقد مساحة من الذاكرة عندما يتم تنفيذ برامج‬
‫تستخدم دوال المكتبة نفسها في نفس الوقت‪ .‬حيث ان كل برنامج يتطلب نسخة خاصة به من الدوال لإلقامة في الذاكرة‪ .‬باإلضافة إلى ذلك‪ ،‬إذا‬
‫كانت دوال المكتبة تتطلب التعديل‪ ،‬فانه بعد اعادة تجميع تلك الدالة وإضافتها إلى المكتبة الثابتة‪ ،‬فان جميع التطبيقات تحتاج إلى استخدام الدالة‬
‫المحدثة فيجب عليها اعادة الربط مع المكتبة‪.‬‬

‫المكتبات المشتركة )‪(Shared libraries‬‬


‫تم تصميم المكتبات المشتركة )‪ (Shared libraries‬لمعالجة المشاكل الناتجة مع المكتبات الثابتة )‪.(Static libraries‬‬
‫إذا تم ربط برنامج مع ‪ ،Shared libraries‬فبدال من نسخ وحدات الكود من المكتبة إلى ملف البرنامج‪ ،‬فان الرابط يكتب فقط ‪ record‬في‬
‫ملف البرنامج يشير إلى أنه في وقت تشغيل البرنامج فانه يحتاج إلى استخدام تلك ‪ .Shared libraries‬عندما يتم تحميل ملف البرنامج في‬
‫الذاكرة وقت التشغيل‪ ،‬فان البرنامج يستدعى الرابط ‪ dynamic linker‬حتى يضمن أن ‪ Shared libraries‬الذي يطلبه موجود وتم‬
‫تحميله في الذاكرة‪ ،‬ومن ثم يؤدي ‪ run-time linking‬حيث يقوم بترجمة الدوال الموجودة في البرنامج بالتعريف المقابل له في ‪shared‬‬
‫‪ .libraries‬في وقت التشغيل‪ ،‬نسخة واحدة فقط من كود ‪ Shared libraries‬هي التي تقيم في الذاكرة‪ .‬ويمكن لجميع البرامج قيد التشغيل‬
‫استخدام هذه النسخة‪.‬‬
‫حقيقة أن ‪ Shared libraries‬تحتوي على نسخة مترجمة وحيده من الدوال يوفر مساحة القرص‪ .‬كما انه يسهل إلى حد كبير من فرص‬
‫العمل لضمان أن برامج يستخدم أحدث نسخة من الدالة‪ .‬ببساطة إعادة بناء ‪ Shared libraries‬مع تعريف دالة جديده فان البرامج الموجودة‬
‫تلقائيا تستخدم هذا التعريف الجديد عندما يتم تنفيذه مرة مقبله‪.‬‬

‫‪ 1.11‬االتصال والتزامن بين العمليات‬


‫(‪)Interprocess Communication and Synchronization‬‬
‫نظام التشغيل لينكس يتكون من العديد من العمليات‪ ،‬وكثير منها تعمل بشكل مستقل عن بعضها البعض‪ .‬بعض العمليات‪ ،‬مع ذلك‪ ،‬تتعاون‬
‫لتحقيق أغراضها‪ ،‬وهذه العمليات تحتاج طرق للتواصل مع بعضهم البعض ومزامنة أعمالهم‪.‬‬
‫طريقة واحدة للتواصل بين العمليات هي من خالل قراءة وكتابة المعلومات في ملفات القرص‪ .‬مع ذلك‪ ،‬مع العديد من التطبيقات‪ ،‬يكون هذا‬
‫بطيء جدا وغير مرن‪.‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪179‬‬

‫اللينكس‪ ،‬مثل جميع تطبيقات يونكس الحديثة‪ ،‬يوفر مجموعة غنية من آليات التواصل بين العمليات )‪،Interprocess communication (IPC‬‬
‫بما في ذلك ما يلي‪:‬‬
‫‪ ،Signals ‬والتي تستخدم لإلشارة إلى أن هذا الحدث قد وقع‪.‬‬
‫‪( Pipes ‬مألوفة لمستخدمي الشل باعتبارها العالمة |) و‪ ،FIFOs‬والتي يمكن أن تستخدم لنقل البيانات بين العمليات؛‬
‫‪ ،Sockets ‬والتي يمكن استخدامها لنقل البيانات من عملية واحدة إلى أخرى‪ ،‬سواء على الكمبيوتر المضيف نفسه أو على مضيفين‬
‫مختلفين متصل بواسطة الشبكة؛‬
‫‪ ،File locking ‬والذي يسمح للعملية بقفل مناطق من الملف من أجل منع العمليات األخرى من قراءة أو تحديث محتويات الملف‪.‬‬
‫‪ ،Message queues ‬والتي تستخدم لتبادل الرسائل (حزم البيانات) بين العمليات؛‬
‫‪ ،Semaphores ‬والتي تستخدم لمزامنة اإلجراءات بين العمليات؛ والذاكرة المشتركة )‪.(shared memory‬‬
‫‪ ،Shared memory ‬والذي يسمح الثنين أو أكثر من العمليات تقاسم قطعة من الذاكرة‪ .‬عندما تغير عملية واحدة محتويات الذاكرة‬
‫المشتركة‪ ،‬فان كل من العمليات األخرى يمكنها رؤية التغييرات على الفور‪.‬‬
‫نتيجة التشكيلة الواسعة من آليات ‪ IPC‬على أنظمة ‪ ،UNIX‬فيصبح في بعض األحيان تداخل في الوظائف‪ ،‬وهو جزء منه بسبب تطورها في‬
‫ظل المتغيرات المختلفة لنظام ‪ UNIX‬ومتطلبات المعايير المختلفة‪ .‬على سبيل المثال‪ FIFOs ،‬و‪ socket‬يؤدون أساسا نفس الوظيفة وهو‬
‫السماح للعمليات بتبادل البيانات على نفس النظام‪ .‬كالهما موجودين في أنظمة يونكس الحديثة حيث ان ‪ FIFOs‬جاءت من ‪ ،System V‬في‬
‫حين ان ‪ Socket‬جاءت من ‪.BSD‬‬

‫‪Signals 1.11‬‬
‫على الرغم من أنها مدرجة كأسلوب من أساليب ‪ IPC‬في القسم السابق‪ ،‬فان ‪ Signals‬تستخدم على نطاق واسع من السياقات األخرى‪ ،‬وهذا‬
‫يستحق ان يناقش‪.‬‬
‫غالبا ما يشار الى ‪ Signals‬بأنها "مقاطعات البرمجيات )‪ ."(software interrupts‬وصول ‪ Signals‬يقوم بإعالم العملية أن بعض‬
‫األحداث أو الحاالت االستثنائية قد حدثت‪ .‬هناك أنواع مختلفة من ‪ ،Signals‬كل منها يحدد حدثا مختلفا أو شرط‪ .‬يتم تعريف كل نوع من‬
‫‪ Signals‬مع عدد صحيح مختلف‪ ،‬يتم تحديده ايضا مع أسماء رمزية تتبع هذا النموذج ‪.SIGxxxx‬‬
‫ترسل ‪ Signals‬إلى العملية من قبل الكيرنل‪ ،‬بواسطة عملية أخرى (مع األذونات المناسبة)‪ ،‬أو عن طريق العملية نفسها‪ .‬على سبيل المثال‪،‬‬
‫الكيرنل يرسل ‪ Signals‬إلى العملية عند واحد مما يلي من االسباب‪:‬‬
‫‪ -‬المستخدم يقوم بكتابة رمز ‪( interrupt‬المتمثل عادة في المفاتيح ‪ )Ctrl+C‬على لوحة المفاتيح‪.‬‬
‫‪ -‬واحد من ‪ process’s children‬تم إنهائه؛‬
‫‪ -‬جهاز التوقيت (‪ )timer‬التي وضعتها العملية قد انتهت‪.‬‬
‫‪ -‬حاولت عملية الوصول إلى عنوان ذاكرة غير صالحة‪.‬‬
‫داخل الشل‪ ،‬يمكن استخدام األمر ‪ kill‬إلرسال ‪ Signals‬إلى العملية‪ .‬يمكن استخدام ‪ kill() system call‬ضمن البرامج ألداء نفس الوظيفة‪.‬‬
‫عندما تتلقى العملية أي من ‪ ،Signals‬فإنه يأخذ أحد اإلجراءات التالية‪ ،‬استنادا إلى ‪:Signals‬‬
‫‪ -‬يتجاهل اإلشارة )‪،(ignore signal‬‬
‫‪ -‬تقتل من قبل اإلشارة )‪.(killed by signal‬‬
‫‪ -‬التعلق ‪ suspended‬حتى وقت الحق وتستأنف بواسطة استالم ‪ signal‬خاصة‪.‬‬

‫بالنسبة لمعظم أنواع ‪ ،signal‬بدال من قبول عمل بال ‪ signal‬االفتراضي‪ ،‬يمكن للبرنامج اختيار تجاهل ‪ ،signal‬أو إنشاء معالج اإلشارة‬
‫)‪ Signal handler .(signal handler‬هو دالة معرفة من قبل المبرمج يتم استدعاءها تلقائيا عندما يتم ارسال ‪ signal‬إلى العملية‪ .‬تؤدي‬
‫هذه الدالة بعض اإلجراءات المناسبة للحالة التي أنشأت ‪.signal‬‬
‫في الفترة الفاصلة بين الوقت الذي انشات فيه والوقت الذي يتم تسليمها‪ ،‬يقال على ‪ signal‬انها في حالة ‪ pending‬لعملية‪ .‬عادة‪ ،‬يتم تسليم‬
‫‪ pending signal‬في أقرب وقت حين انه من المقرر أن العملية تم جدولتها لكي تعمل تاليا‪ ،‬أو على الفور إذا كانت العملية قيد التشغيل‬
‫بالفعل‪ .‬ومع ذلك‪ ،‬من الممكن أيضا منع ‪ signal‬عن طريق إضافته ‪ signal mask‬إلى العملية‪ .‬عندما يتم إنشاء ‪ signal‬ومن ثم تم منعها‬
‫فإنها تظل ‪ ،pending‬حتى يتم الغاء منعها في وقت الحق (أي إزالتها من ‪.)signal mask‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪180‬‬

‫‪( Threads 1.11‬الخيط أو سلسلة التعليمات)‬


‫في تطبيقات يونكس الحديثة‪ ،‬يمكن أن يكون لكل عملية العديد من ‪ Thread .threads of execution‬هى عبارة عن مجموعة من‬
‫التعليمات التي تشكل مسارا ً لتنفيذ العملية وبما أنه مجرد مسار فإنه ال يحتاج لموارد خاصة به حيث أنه يستخدم موارد العملية ذاتها‪ .‬تجعل‬
‫خيوط البرنامج الحاسوبي يبدو وكأنه يقوم بأكثر من مهمة بشكل متزامن‪ ،‬لكن إذا كانت وحدة المعالج المركزي بأكثر من نواة فانه يقوم بعمل‬
‫تزامن حقيقي‪ .‬بمعنى اخر يمكن تشبيه ‪ thread‬على انه مجموعة من العمليات تشترك في نفس الذاكرة‪ ،‬فضال عن مجموعة من الصفات‬
‫األخرى‪ .‬كل ‪ thread‬يقوم بتنفيذ التعليمات البرمجية للبرنامج نفسه ويشارك في ناحية البيانات نفسها‪ ،‬و‪ .heap‬ومع ذلك‪ ،‬كل ‪ thread‬له‬
‫‪ stack‬خاصة به تحتوي على المتغيرات المحلية ومعلومات ربط الدالة )‪.(function call linkage information‬‬
‫يمكن لل ‪ thread‬التواصل مع بعضهم البعض عبر المتغيرات العالمية التي تتشارك‪ Threading API .‬يوفر متغيرات الحالة‬
‫)‪ (condition variable‬وكائنات المزامنة )‪ ،(mutexes‬التي تمكن ‪ thread‬العملية من التواصل ومزامنة أعمالهم‪ ،‬وعلى وجه‬
‫الخصوص‪ ،‬استخدامهم للمتغيرات المشتركة‪ .‬يمكن أيضا ل ‪ thread‬التواصل مع بعضهم البعض باستخدام آليات ‪ IPC‬والتزامن التي سوف‬
‫توضح الحقا‪.‬‬
‫متواز على نفس المعالج وهذا ما يدعى بالتنفيذ المتعدد الخيوط )‪ (multithreading‬ويحدث عن‬ ‫ٍ‬ ‫يمكن تنفيذ خيوط تعليمات متعددة بشكل‬
‫طريق تعدد المهام ‪ computer multitasking‬أو ما يدعى بتجزئة الوقت ‪ time slicing‬حيث يقوم المعالج المركزي بالتبديل بين‬
‫سالسل التعليمات المختلفة‪( .‬ضمن هذا المفهوم التنفيذ ليس متزامنا بالنسبة لمعالج واحد لكننا نعتبره تزامنا مزيفا ألن التبديل يتم بسرعة كبيرة‬
‫تعطينا انطباع بوهم التزامن)‪ ،‬بالمقابل يمكننا انجاز تزامن حقيقي عن طريق االستعانة بحاسوب متعدد المعالجات أو معالجات متعددة األنوية‪.‬‬
‫في الوقت الراهن‪ ،‬العديد من أنظمة التشغيل تدعم تجزئة الزمن وتعدد المهام‪ ،‬أو التنفيذ متعدد المعالجات ‪multiprocessor threading‬‬
‫عن طريق منسق عمليات ‪ .scheduler‬تمكن كيرنل أنظمة التشغيل المبرمجين من التعامل مع عدة سالسل من التعليمات )‪(thread‬عن‬
‫طريق واجهة استدعاءات النظام ‪.system call‬‬

‫‪Process Groups and Shell Job Control 1.11‬‬


‫كل برنامج يتم تنفيذه من قبل الشل يبدا عملية جديدة‪ .‬على سبيل المثال‪ ،‬في المثال التالي يقوم فيه الشل بإنشاء ثالث عمليات (وهي عرض‬
‫قائمة من الملفات في مجلد العمل الحالي مرتبة حسب حجم الملف)‪:‬‬
‫‪$ls -l | sort -k5n | less‬‬
‫جميع الشل الرئيسية‪ ،‬باستثناء بورن ‪ ،sh‬توفر ميزة تفاعلية تسمى ‪ ،job control‬والتي تسمح للمستخدم بالتنفيذ في وقت واحد والتالعب بعد‬
‫من األوامر أو خطوط ‪ pipe‬كما في المثال السابق وهذه الشل يطلق عليها ‪ .job-control shells‬في ‪ ،job-control shells‬جميع‬
‫العمليات في خط ‪ pipe‬توضع في ‪ process group‬جديد أو ‪ .job‬كل عملية في ‪ process group‬لها نفس المعرف ‪process group‬‬
‫‪ ،(PGID) identifier‬والذي هو نفس ‪ PID‬الخاص بعمليه واحده في هذه المجموعة والتي يطلق عليها ‪.process group leader‬‬
‫الكيرنل يسمح بمختلف اإلجراءات‪ ،‬وال سيما إيصال ‪ ،signal‬التي يتعين القيام بها على جميع العمليات أعضاء المجموعة‪Job-control .‬‬
‫‪ shells‬تستخدم هذه الميزة للسماح للمستخدم بإيقاف أو استئناف جميع العمليات في خط ‪ ،pipe‬كما هو موضح في المقطع التالي‪.‬‬

‫‪Sessions, Controlling Terminals, and Controlling Processes 1!.1‬‬


‫‪ Session‬هي عبارة عن مجموعة من ‪ .)job( process group‬جميع العمليات في ‪ Session‬لها نفس )‪.session identifier (SID‬‬
‫‪ Session leader‬هى العملية التي قامت بإنشاء ‪ ،Session‬ويصبح ‪ PID‬لها هو ‪.session ID‬‬
‫تستخدم ‪ Session‬أساسا من قبل ‪ .job-control shells‬كل من ‪ process groups‬التي تم أنشأتها بواسطة ‪job-control shells‬‬
‫تنتمي إلى نفس ‪ Session‬الخاص بالشل‪ ،‬حيث انه هو ‪.Session leader‬‬
‫‪ Sessions‬عادة ما يكون مرتبط به ‪ .controlling terminal‬يتم تأسيس ‪ controlling terminal‬عندما يفتح أول ‪session leader‬‬
‫جهاز الترمنال )‪ .(terminal device‬الترمنال من الممكن ان يكون ‪ controlling terminal‬على ‪ Sessions‬واحدة على األكثر‪.‬‬

‫في أي ‪ ،Session‬هناك )‪ foreground process group (foreground job‬واحدة‪ ،‬والتي قد تقرا المدخالت من الترمنال وإرسال‬
‫اإلخراج إليها ايضا‪ .‬إذا قام المستخدم بكتابة حرف المقاطعة (‪ )Ctrl +C‬او حرف التعليق "‪ (Ctrl+Z) "suspend‬الى ‪controlling‬‬
‫‪ ،terminal‬فان الترمنال ترسل هذه اإلشارة التي تقوم بقتل أو تعلق (‪ .foreground job )stop‬وعلى نقيض ذلك فان ‪ session‬يمكنها‬
‫ان تملك أي عدد من )‪ ،background process groups (background jobs‬والتي يتم إنشاؤها من قبل األوامر مع العالمة )&(‪.‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪181‬‬

‫‪ Job-control shells‬توفر األوامر إلدراج جميع ‪ ،job‬وإرسال ‪ signal‬إلى ‪ ،job‬ونقل ‪ job‬بين ‪ foreground‬و‪. background‬‬

‫‪Pseudoterminals 1.11‬‬
‫‪ Pseudoterminal‬او ‪ pseudotty‬او ‪ PTY‬هى زوج من األجهزة الوهمية "‪ "virtual devices‬المتصلة‪ ،‬احداهم معروف باسم‬
‫‪ master‬واألخر ‪ .slave‬يوفر هذا الزوج قناة ‪ IPC‬للسماح للبيانات ان يتم نقلها في كال االتجاهين بين ‪ devices‬االثنين‪.‬‬
‫النقطة الرئيسية في ‪ PTY‬هي أن ‪ slave device‬يوفر واجهة تتصرف مثل ‪ ،terminal‬مما يجعل من الممكن ربط‬
‫‪ terminal-oriented program‬مع ‪ slave device‬ومن ثم استخدام برنامج آخر متصال ب ‪ master device‬لقيادة‬
‫‪ .terminal-oriented program‬الناتج المكتوب من قبل ‪( driver program‬البرنامج المتصل ب ‪ )master device‬يخضع‬
‫للمعالجة كمدخالت يقوم بها ‪( terminal driver‬المتصل ب ‪ ،)master device‬ثم يتم تمريره كمدخل الى ‪terminal-oriented‬‬
‫‪ program‬المتصلة ب ‪ .slave device‬أي شيء يكتبه ‪ terminal-oriented program‬الى ‪ slave device‬يتم تمرير كمدخل إلى‬
‫‪ .driver program‬بعبارة أخرى‪ driver program ،‬يؤدى الوظيفة التي تؤدى عادة من قبل المستخدم في ‪ terminal‬التقليدية‪.‬‬

‫تستخدم ‪ PTY‬في مجموعة متنوعة من التطبيقات‪ ،‬وعلى األخص في تنفيذ ‪ terminal windows‬المقدمة تحت بيئة ‪X windows login‬‬
‫وفى التطبيقات التي تقديم خدمات تسجيل دخول الشبكة‪ ،‬مثل ‪ Telnet‬و‪.SSH‬‬

‫‪Date and Time 1.11‬‬


‫هناك نوعين من ‪ time‬مهم بالنسبة للعملية‪:‬‬
‫‪Real time -‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪182‬‬

‫يقاس إما من خالل بعض النقاط القياسية (‪ )calendar time‬أو من بعض النقاط الثابتة‪ ،‬عادة هو البداية‪ ،‬في حياة أي عملية (‪ elapsed‬أو‬
‫‪ .)wall clock time‬على أنظمة ‪ ،UNIX‬يتم قياس ‪ calendar time‬بالثواني منذ منتصف الليل صباح يوم ‪ 1‬يناير ‪ ،1222‬التوقيت‬
‫العالمي المنسق (‪ ،)UTC‬ومنسق على نقطة قاعدة زمنية الذي حددها خط طولي مارا بغرينتش‪ ،‬انكلترا‪ .‬هذا التاريخ‪ ،‬هو قريب من والدة‬
‫نظام يونيكس‪ ،‬ويشار إليه باسم ‪.Epoch‬‬
‫‪Process time -‬‬
‫يسمى أيضا ‪ ،CPU time‬وهو إجمالي الوقت المنقض من وحدة المعالج المركزي والذي استخدمه العملية منذ البداية‪ CPU time .‬ينقسم‬
‫إلى ‪ ،system CPU time‬وهو الوقت المنقض في تنفيذ التعليمات البرمجية في ‪ ،kernel mode‬و‪ ،user CPU time‬وهو الوقت‬
‫المنقض في تنفيذ التعليمات البرمجية في ‪( user mode‬أي تنفيذ التعليمات البرمجية للبرنامج العادي)‪.‬‬

‫االمر ‪ time‬يظهر لك الوقت الحقيقي "‪."real time‬‬

‫‪Client-Server Architecture 1.11‬‬


‫‪ Client-server application‬هو احد التطبيقات التي تنقسم الى اثنين من العمليات‪:‬‬
‫‪ ،Client -‬والذي يطلب من الخادم تنفيذ بعض الخدمات عن طريق إرسال رسالة الطلب؛‬
‫‪ ،Server -‬الذي يدرس طلب العميل‪ ،‬ويؤدي اإلجراءات المناسبة‪ ،‬ومن ثم يرسل رسالة استجابة إلى العميل‪.‬‬
‫في بعض األحيان‪ ،‬العميل والخادم قد يتشارك في حوار موسع من الطلبات والردود‪.‬‬

‫عادة‪ ،‬يتفاعل تطبيق العميل )‪ (client application‬مع المستخدم‪ ،‬في حين ان تطبيق الخادم )‪ (server application‬يوفر الوصول إلى‬
‫بعض الموارد المشتركة‪ .‬عموما‪ ،‬هناك حاالت متعددة فيها تتواصل عمليات العميل مع واحد أو أكثر من عمليات الخادم‪.‬‬
‫‪ Client‬و ‪ server‬يمكن ان يكونوا على نفس جهاز كمبيوتر المضيف او ان يكونا في مضيفين مختلفين متصلين من خالل الشبكة‪.‬‬

‫‪Realtime 1.11‬‬
‫‪ Realtime applications‬هي تلك التي تحتاج إلى االستجابة في الوقت المناسب من اإلدخال‪ .‬في كثير من األحيان‪ ،‬هذه المدخالت تأتي‬
‫من جهاز استشعار خارجي أو جهاز إدخال متخصص‪ ،‬واإلخراج يأخذ شكل السيطرة على بعض األجهزة الخارجية‪ .‬وتشمل األمثلة على‬
‫التطبيقات التي تتطلب استجابة سريعة ‪ ،automated assembly lines‬أجهزة الصراف اآللي ‪ ،ATM‬وأنظمة المالحة الجوية‪.‬‬
‫يتطلب توفير االستجابة القصيرة‪ ،‬دعم من نظام التشغيل األساسي‪ .‬معظم أنظمة التشغيل ال توفر أصال مثل هذا الدعم ألن متطلبات االستجابة‬
‫السريعة يمكن أن تتعارض مع متطلبات أنظمة التشغيل متعددة المستخدمين‪ .‬تطبيقات ‪ UNIX‬التقليدية ليست ‪،Realtime applications‬‬
‫على الرغم من ان ‪ realtime variants‬قد تم وضعها‪ .‬لينكس قامت بإنشاء ‪ ،realtime variants‬ونواة لينكس األخيرة تتجه نحو الدعم‬
‫الكامل ل ‪.Realtime applications‬‬

‫‪The /proc File System 1.11‬‬


‫نظام التشغيل لينكس يوفر لنا نظام الملف ‪ ،/proc file system‬والذي يتكون من مجموعة من المجلدات والملفات التي وضعت تحت مسار‬
‫المجلد ‪./proc‬‬
‫‪ /proc file system‬هو نظام ملفات افتراضي والذي يوفر واجهة إلى هياكل بيانات الكيرنل في شكل يشبه الملفات والمجلدات‪ .‬وهذا يوفر‬
‫آلية سهلة لعرض وتغيير سمات النظام المختلفة‪ .‬وباإلضافة إلى ذلك‪ ،‬هناك مجموعة من المجلدات مع أسماء ذات الصيغة ‪ ،/proc/PID‬حيث‬
‫ان ‪ PID‬هو معرف العملية‪ ،‬ويسمح لنا بعرض المعلومات حول كل عملية قيد التشغيل على النظام‪.‬‬
‫محتويات ‪ /proc‬تكون عادة في شكل نص قابل للقراءة‪ ،‬ويمكن تحليل بواسطة ‪ .shell scripts‬ويمكن للبرنامج ببساطة فتح والقراءة من أو‬
‫الكتابة إلى‪ ،‬الملف المطلوب‪ .‬في معظم الحاالت‪ ،‬يجب أن تكون العملية متميزة حتى يمكنها تعديل محتويات الملفات في المجلد ‪./proc‬‬

‫‪Apt package handling utility 1.11‬‬


‫األداة ‪ apt‬في التعامل مع الحزم‪ ،‬المعروفة اختصارا باسم "‪ "apt-get‬وهي أداة سطر أوامر قوية للغاية لتثبيت وإزالة حزم البرمجيات‪.‬‬
‫‪ apt-get‬يحتفظ بمعلومات عن كل التطبيقات جنبا إلى جنب مع الملفات التي يحتاجها في عملية التثبيت "‪Dependency ."dependency‬‬
‫هي حزم من البرمجيات اإلضافية المطلوبة للحصول على الوظائف المناسبة من البرامج األخرى‪ .‬على سبيل المثال‪ ،Metasploit ،‬فانه‬
‫يعتمد على لغة برمجة معينة تسمى روبي‪ .‬بدون تثبيت روبي‪ ،‬فان ‪ Metasploit‬ال يمكن تثبيته او تشغيله‪ .‬وبالتالي‪ ،‬روبي هو ملف يعتمد‬
‫عليه ‪ .Metasploit‬عندما لم تعد حزم البرامج مفيدة فان ‪ apt-get‬يقوم بتنبيه المستخدم عن التحديث القادم وتوجيهه إلى إزالة الحزم القديمة‪.‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪183‬‬

‫‪Installing Applications or Packages -‬‬


‫تثبيت البرامج اإلضافية هي الوظيفة األساسية ل ‪ apt-get‬وهو بسيط ومباشر‪ .‬صيغة الجملة أدناه سوف توفر مثاال لكيفية تثبيت التطبيقات‬
‫األخرى باستخدام ‪:apt-get‬‬
‫}‪#apt-get install {package_name‬‬ ‫)‪ex: (apt-get install gimp‬‬
‫‪Update -‬‬
‫من وقت آلخر ان المصادر‪ ،‬أو المستودعات "‪ ،"repositories‬تحتاج إلى أن يتم التحقق من وجود تحديثات لمختلف التطبيقات والحزم‬
‫المثبتة على كالي لينكس‪ .‬فمن المستحسن أن يتم فحص التحديثات قبل تثبيت أي حزم جديدة‪ ،‬وضروري قبل إجراء عملية ترقية نظام التشغيل‬
‫أو التطبيقات البرمجية أو الحزم‪ .‬صيغة بناء الجملة من أجل التحديثات كالتالي‪:‬‬
‫‪#apt-get update‬‬
‫‪Upgrade -‬‬
‫ال يوجد نظام مثالي‪ ،‬في الواقع كل نظام تشغيل رئيسي هو في حالة دائمة من التحسن‪ ،‬والتعزيز‪ ،‬وإدارة التصحيح لتقديم مزايا جديدة أو‬
‫تصحيح الخلل‪ .‬فإن وظيفة الترقية تقوم بهدم وتثبيت جميع اإلصدارات الجديدة لحزم البرامج المثبتة مسبقا‪ .‬جمال جميع أنظمة التشغيل القائمة‬
‫على لينكس هو انهم مفتوحة المصدر‪ ،‬وهذا يعني أن أي شخص في العالم يمكنه تقدم اكواد جديد لتوزيعه نظام التشغيل للمساعدة في تحسين‬
‫وظائف النظام إذا كانت هناك خلل أو الحاجة الى التحسن‪ .‬وهذا يسمح أيضا بتصحيح االخطاء أسرع بالمقارنة مع شركات عمالقة مثل‬
‫مايكروسوفت‪ .‬وكما ذكر في وقت سابق‪ ،‬أنه أمر حيوي إلجراء تحديث "‪ "update‬قبل تشغيل الترقية "‪ ."upgrade‬صيغة بناء الجملة من‬
‫أجل الترقية كالتالي‪:‬‬
‫‪#apt-get upgrade‬‬
‫‪Distribution Upgrade -‬‬
‫الوظيفة ‪ distribution upgrade‬تعمل بطريقة مماثلة جدا لوظيفة ‪ ،upgrade‬ومع ذلك‪ ،‬تسعى هذه الوظيفة أيضا إلى مصادر الحزم‬
‫الخاصة وكذلك التبعيات والحزم الجديدة التي عينت ليتم تضمينها مع األحدث‪ .‬على سبيل المثال‪ ،‬عند استدعاء وظيفة ترقية التوزيع‪ ،‬سيتم رفع‬
‫نسخة كاملة من كالي من اإلصدار ‪ 1.2‬إلى اإلصدار ‪ ،n.1‬أو ‪ ،n.1‬وهلم جرا‪ .‬استخدم بناء الجملة التالية‪:‬‬
‫‪#apt-get dist-upgrade‬‬
‫‪Remove -‬‬
‫يمكن استخدام ‪ apt-get‬لتقليل حزم النظام‪ ،‬أو عند التخلص من برنامج محدد‪ .‬ويوصى به أيضا لكل الحزم التي ال تكون قيد االستعمال‪ ،‬تلك‬
‫التي ال تخدم غرضا‪ ،‬أو ليست ضرورية لنظام التشغيل الخاص بك وذلك إللغاء تثبيتها‪ .‬صيغة بناء الجملة التالي يمكن استخدامها إلزالة تطبيق‬
‫أو حزمة‪:‬‬
‫}‪#apt-get remove {package_name‬‬ ‫‪ex: apt-get remove leafpad‬‬
‫‪Autoremove -‬‬
‫مع مرور الوقت يتم اس تبدال حزم التطبيقات في نظام التشغيل مع اإلصدارات الجديدة والمحسنة‪ .‬فإن وظيفة ‪ autoremove‬يقوم بإزالة‬
‫الحزم القديمة التي لم تعد هناك حاجة لها‪ .‬من المستحسن أن يتم تشغيل ‪ auto remove‬بعد ترقية الحزم أو التوزيعة‪ .‬نستخدم بناء الجملة‬
‫التالي لتشغيل ‪:auto remove‬‬
‫‪#apt-get autoremove‬‬
‫‪Clean -‬‬
‫يتم تحميل الحزم إلى النظام من مصدرها‪ ،‬غير معبأة‪ ،‬ومن ثم يتم تثبيتها‪ .‬هذه الحزم سوف تكون موجودة على النظام حتى إشعار آخر‪ .‬هذه‬
‫الحزم لم تعد ضرورية بعد تثبيت التطبيق‪ .‬مع مرور الوقت‪ ،‬يمكن لهذه الحزم ان تلتهم مساحة القرص وتحتاج إلى تنظيفها بعيدا‪ .‬صيغة‬
‫الجملة التالية يمكن استخدامها لبدء وظيفة التنظيف‪:‬‬
‫‪#apt-get clean‬‬
‫‪Autoclean -‬‬
‫وظيفة ‪ Autocleaning‬تقوم بتنظيف النظام بطريقة مماثلة لوظيفة ‪clean‬؛ ومع ذلك‪ ،‬ينبغي تشغيله بعد ‪ upgrade‬و ‪distribution‬‬
‫‪ upgrades‬للنظام‪ ،‬حيث أن وظيفة ‪ autoclean‬سيزيل الحزم القديمة التي تم استبدالها بأخرى جديدة‪.‬‬
‫‪#apt-get autoclean‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪184‬‬

‫‪Managing Linux Services 1.11‬‬


‫‪SSH Service‬‬
‫يتم استخدام ‪ Secure Shell (SSH)3 service‬اإلصدار الثالث األكثر شيوعا للوصول إلى جهاز الكمبيوتر عن بعد‪ ،‬وذلك باستخدام‪،‬‬
‫بروتوكول آمن مشفر‪ .‬كما سنرى الحقا‪ ،‬بروتوكول ‪ SSH‬لديه بعض الوظائف الرائعة والمفيدة‪ ،‬بجانب توفير وصول إلى التر منال‪ .‬خدمة‬
‫‪ SSH‬قائمه على اتصاالت من النوع ‪ TCP‬ويستمع افتراضيا الى المنفذ ‪ .11‬لبدء تشغيل خدمة ‪ SSH‬في كالي‪ ،‬اكتب األمر التالي في طرفية‬
‫كالي‪.‬‬
‫‪#service ssh start‬‬
‫إذا‪ ،‬كنت مثل العديد من المستخدمين‪ ،‬وكنت ترغب في الحصول على خدمة ‪ SSH‬تبدأ تلقائيا في وقت التمهيد‪ ،‬فإنك تحتاج الى تمكينه وذلك‬
‫باستخدام االسكريبت ‪ update‑rc.d‬على النحو التالي‪ .‬ويمكن استخدام االسكريبت ‪ update‑rc.d‬في تمكين وتعطيل معظم الخدمات داخل‬
‫كالي لينكس‪.‬‬
‫‪#update‑rc.d ssh enable‬‬

‫‪HTTP Service‬‬
‫خدمة ‪ HTTP‬يمكن أن تأتي في متناول اليدين خالل اختبار االختراق‪ ،‬إما الستضافة موقع‪ ،‬أو توفير منصة لتحميل الملفات إلى جهاز‬
‫الضحية‪ .‬خدمة ‪ HTTP‬هي ذات اتصال ‪ TCP‬ويستمع افتراضيا الى المنفذ ‪ .12‬لبدء تشغيل خدمة ‪ HTTP‬في كالي‪ ،‬اكتب األمر التالي في‬
‫الطرفية‪.‬‬
‫‪#service apache2 start‬‬
‫كما فعلنا مع ‪ ،ssh‬لبدء خدمة ‪ HTTP‬في وقت التمهيد‪ ،‬فإننا نحتاج إلى تمكينه من خالل االسكريبت ‪.update‑rc.d‬‬
‫‪#update‑rc.d apache2 enable‬‬
‫ملحوظه‪ :‬تعمل معظم الخدمات في لينكس بنفس الطريقة التي تم استخدامها إلدارة ‪ SSH‬و‪ .HTTP‬للحصول على مزيد من السيطرة على‬
‫هذه الخدمات‪ ،‬يمكنك استخدام أدوات مثل ‪ rcconf‬أو ‪ ،sysvrc-conf‬هاذين مصممين للمساعدة على تبسيط وإدارة استمرار العمل لهذه‬
‫الخدمات‪.‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪185‬‬

‫الفصل السابع‬
‫الميتاسبلويت‬

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

‫‪ 1.1‬لماذا الميتاسبلويت؟‬
‫‪ Metasploit‬ليست مجرد أداة‪ .‬انها إطار كامل يوفر البنية التحتية الالزمة لتنفيذ الروتين‪ ،‬والمهام المعقدة بطريقة اليه )‪ .(automate‬هذا‬
‫يسمح لك بالتركي ز على الجوانب الفريدة أو المتخصصة من اختبار االختراق وعلى تحديد العيوب ضمن برنامج أمن المعلومات الخاصة بك‪.‬‬
‫‪ Metasploit‬يسمح لك بسهولة بناء ناقالت الهجوم )‪ (attack vectors‬من خالل العديد من المآثر "‪ "exploit‬والحموالت "‪،"payload‬‬
‫الترميز "‪ ،"encoding‬وأكثر من ذلك من أجل خلق وتنفيذ هجمات أكثر تقدما‪ .‬هدفنا هو الحصول على سهولة التعامل مع اإلطار‪ ،‬حتى‬
‫تظهر لك كيفية القيام ببعض الهجمات المتقدمة‪ ،‬وضمان أن تتمكن من تطبيق هذه التقنيات بشكل مسؤول‪.‬‬
‫من كل األدوات التي نوقشت وسوف تناقش‪ Metasploit ،‬هو المفضل‪ .‬في نواح كثيرة‪ ،‬هو األداة المثالية للقراصنة‪ .‬حيث يتميز بالقوة‬
‫والمرونة‪ ،‬مجاني‪ ،‬ويحمل معه أدوات رائعة‪ .‬من دون أدنى شك تعتبر أروع أداة هجومية مشمولة في هذا الكتاب‪ ،‬وحتى في بعض الحاالت‬
‫ألنها تتيح لك االختراق مثل هيو جاكمان في فيلم ‪ !Swordfish‬على محمل الجد‪ ،‬أنها جيدة‪.‬‬

‫‪ 1.1‬تاريخ الميتاسبلويت‬
‫‪ Metasploit‬قد وضعت وبرمجت بواسطة اتش دي مورى (‪ .)HD Moore‬عندما أدرك اتش دي أنه كان يقضي معظم وقته في التأكد‬
‫من صحة وتطوير ‪ exploit code‬للعامة‪ ،‬بدأ في إنشاء إطار مرن وسهل إلنشاء وتطوير وصيانة ‪ .exploit‬أصدر أول اصدار له من‬
‫‪ Metasploit‬استنادا على لغة بيرل في أكتوبر ‪ 1221‬مع مجموعه من ‪.11 exploits‬‬
‫مع مساعدة من سبونم (‪ ،)Spoonm‬قام اتش دي بإعادة كتابة المشروع‪ ،‬ومن ثم أصدر االصدر الثانى من ‪ ،Metasploit 2.0‬في أبريل‬
‫‪ .1221‬وتضمن هذا اإلصدار ‪ 19 exploits‬وأكثر من ‪ .27 payloads‬بعد فترة وجيزة من هذا اإلصدار‪ ،‬انضم مات ميلر (‪ )Skape‬الى‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪186‬‬

‫فريق تطوير ‪ ،Metasploit‬وحينها حصل المشروع على شعبية كبيره‪ ،‬تلق إطار ‪ Metasploit‬دعم كثيف من مجتمع أمن المعلومات‬
‫وسرعان ما أصبح أداة ضرورية الختبار االختراق و‪.exploiation‬‬
‫بعد إعادة الصياغة الكاملة للمشروع بلغة البرمجة روبي‪ ،‬حينها قام فريق ‪ Metasploit‬باصدار ‪ Metasploit 3.0‬في عام ‪ .1222‬التنقل‬
‫في صياغة اإلطار من لغة بيرل الى لغة روبى استغرق ‪ 11‬شهرا‪ .‬وأسفر عن أكثر من ‪ 112،222‬من خطوط الكود الجديده‪ .‬مع االفراج عن‬
‫االصدار ‪ ،1.2‬راى ‪ Metasploit‬االعتماد واسع النطاق عليه في المجتمع األمنى وزيادة كبيرة في مساهمات المستخدمين‪.‬‬
‫في خريف عام ‪ ،1222‬تم االستحواذ عليه عن طريق ‪ ،Rapid7‬الشركة الرائدة في مجال ‪ ،vulnerability-scanning‬والذي سمح التش‬
‫دي بناء فريق للتركيز فقط على تطوير إطار ‪ .Metasploit‬منذ عملية االستحواذ‪ ،‬وقعت التحديثات بسرعة أكبر من أي شخص يمكن أن‬
‫يتصور‪ .‬أمضى اتش دي مورى قدرا كبيرا من الوقت يوضح للناس بأن ‪ Metasploit‬سوف يظل مجانا‪ .‬على الرغم منذ ذلك الحين تم‬
‫االفراج عن العديد من المنتجات التجارية الكبيرة بما في ذلك ‪ Metasploit Express‬و‪ ،Metasploit Pro‬وكان اتش دي مورى وفيا في‬
‫كلمته وبقي مشروع ‪ Metasploit‬األصلي حر ومجانا‪ .‬في الواقع‪ ،‬كان شراء ‪ Metasploit‬بواسطة ‪ Rapid 7‬دفعة قوية للمشروع‬
‫‪ Metasploit Express .Metasploit‬هى نسخة أخف وزنا من إطار ‪ Metasploit‬مع واجهة المستخدم الرسومية باإلضافة الى‬
‫وظائف إضافية‪ ،‬بما في ذلك ‪ ،reporting‬من بين غيرها من الخصائص المفيدة‪ Metasploit Pro .‬هى نسخة موسعة من ‪Metasploit‬‬
‫‪ Express‬والتي تنتهج التعاون واختراق مجموعة االختبار وميزات مثل ‪one-click virtual private network (VPN) tunnel‬‬
‫وأكثر من ذلك بكثير‪.‬‬

‫‪ 1.1‬مصطلحات خاصه بالميتاسبلويت‬


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

‫‪Exploit‬‬
‫‪ Exploit‬هى الوسيلة التي عن طريقها المهاجم‪ ،‬أو مختبر االختراق‪ ،‬يستفيد من وجود خلل في النظام‪ ،‬التطبيق‪ ،‬أو الخدمة‪ .‬يستخدم المهاجم‬
‫‪ exploit‬لمهاجمة النظام بالطريقة التي ينتج عنها النتائج المرجوة خاصة التي ال يقصدها المطور أبدا‪ .‬ومن أشهر هذه ال ‪ exploit‬هي‬
‫‪ ،buffer overflow‬نقاط الضعف في تطبيق ويب (مثل ‪ ،)SQL Injection‬وأخطاء التكوين )‪.(configuration errors‬‬

‫‪Payload‬‬
‫‪ Payload‬هى التعليمات البرمجية )‪ (code‬التي نريده من النظام تنفيذها وهذا يتم اختياره وارساله بواسطة اإلطار‪ .‬على سبيل المثال‪،‬‬
‫‪ reverse shell‬هي ‪ payload‬التي تنشا اتصال من الجهاز المستهدف إلى المهاجم من خالل موجه أوامر الويندوز‪ ،‬في حين أن ‪blind‬‬
‫‪ shell‬هي ‪ payload‬التي تربط موجه األوامر إلى منفذ االستماع )‪ (listening port‬على الجهاز المستهدف‪ ،‬والتي يمكن للمهاجم االرتباط‬
‫بها‪ .‬ويمكن لل ‪ payload‬أيضا أن تكون شيء بسيط مثل عدد قليل من األوامر يتم تنفيذه على نظام التشغيل الهدف‪.‬‬

‫‪Shellcode‬‬
‫‪ Shellcode‬هو عبارة عن مجموعة من التعليمات البرمجيه تستخدم كال ‪ payload‬عندما يحدث استغالل‪/‬اختراق )‪.(exploitation‬‬
‫‪ Shellcode‬تمت كتابته بواسطة لغة التجميع )‪ .(assembly language‬في معظم الحاالت‪ ،‬يتم توفير ‪ command shell‬أو‬
‫‪ Meterpreter shell‬بعد أن يتم إجراء سلسلة من اإلرشادات من قبل الجهاز الهدف‪ ،‬ومن هنا جاءت التسمية‪.‬‬

‫‪Module‬‬
‫‪ Module‬في سياق المتياسبلويت هى قطعة من البرمجيات التي يمكن استخدامها من قبل إطار الميتاسبلويت‪ .‬في بعض األحيان‪ ،‬قد تتطلب‬
‫استخدام ‪ ،exploit module‬وهو أحد مكونات البرنامج التي تقوم بالهجوم‪ .‬في أحيان أخرى‪ ،‬قد تكون هناك الحاجة الى ‪auxiliary‬‬
‫‪ module‬لتنفيذ إجراء مثل الفحص )‪ (Scanning‬أو ‪ .enumeration‬هذه الوحدات هي الجوهر التى يجعل اإلطار قوي جدا‪.‬‬

‫‪Listener‬‬
‫‪ Listener‬هو عنصر ضمن ‪ Metasploit‬الذي ينتظر اتصال وارد من نوع ما‪ .‬على سبيل المثال‪ ،‬بعد أن يتم اختراق الجهاز المستهدف‪،‬‬
‫فانه قد يتصل بآلة الهجوم عبر اإلنترنت‪ Listener .‬يعالج هذا الصدد‪ ،‬حيث ينتظر على الجهاز المهاجم ليتم االتصال من قبل النظام‬
‫المخترق‪.‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪187‬‬

‫‪ 1.1‬مكونات الميتاسبلويت (‪)Metasploit Architecture‬‬


‫إطار الميتاسبلويت لديه ‪ modular architecture‬و‪ ،encoders ،payload ،exploit‬وهلم جرا وتعتبر وحدات منفصلة‪:‬‬

‫دعونا نبحث في هذا المخطط عن كثب‪.‬‬


‫الميتاسبلويت يستخدم العديد من المكتبات (‪ )libraries‬المختلفة التي تضع العديد من الوظائف لحسن سير العمل في اإلطار‪ .‬هذه المكتبات‬
‫هي مجموعة من المهام المحددة مسبقا‪ ،‬العمليات‪ ،‬والدوال التي يمكن استخدامها من قبل الوحدات المختلفة من اإلطار‪ .‬الجزء األكثر أهمية فى‬
‫اإلطار هو المكتبه )‪ .Ruby Extension (Rex‬بعض المكونات التي قدمتها ‪ Rex‬تشمل االتى‪:‬‬
‫‪wrapper socket subsystem -‬‬
‫‪implementations of protocol clients and servers -‬‬
‫‪logging subsystem -‬‬
‫‪exploitation utility classes -‬‬
‫‪SSL, SMB, HTTP, XOR, Base64, Unicode -‬‬
‫‪ -‬العديد من ‪ classes‬المفيده األخرى‪.‬‬
‫تم تصميم ‪ Rex‬نفسه لكيال يكون لديه أي من المتطلبات "‪."dependendies‬‬
‫ثم‪ ،‬لدينا المكتبة ‪ MSF Core library‬وهي امتداد من ‪ Core .Rex‬هو المسؤول عن تنفيذ كافة الواجهات المطلوبة التي تسمح بالتفاعل‬
‫مع ‪ ،sessions ،exploit modules‬و‪ .plugins‬تم توسيع مكتبة ‪ core‬عن طريق المكتبة ‪ ،freamework base‬التى تم تصميمها‬
‫لتوفير روتين مجمع أبسط للتعامل مع ‪ ،core‬فضال عن توفير ‪ utility classes‬للتعامل مع الجوانب المختلفة من اإلطار‪ ،‬مثل‬
‫‪ serializing a module state‬إلخراج مختلف األشكال‪ .‬أخيرا‪ ،‬المكتبه ‪ base library‬والتي توفر إطار واجهة المستخدم ‪User‬‬
‫)‪ Interface (UI‬التي توفر الدعم لألنواع المختلفة من واجهات المستخدم إلى اإلطار نفسه‪ ،‬مثل ‪ Command console‬وواجهة الويب‪.‬‬

‫‪ 1.1‬واجهات الميتاسبلويت )‪(Metasploit Interfaces‬‬


‫الميتاسبلويت يوفر أكثر من واجهة واحده إلى وظائفه األساسية‪ ،‬بما في ذلك وحدة التحكم )‪ ،(console‬سطر األوامر )‪،(command line‬‬
‫الواجهات الرسومية‪ .‬باإلضافة إلى هذه الواجهات‪ ،‬هناك ‪ utilities‬توفر الوصول المباشر إلى الوظائف التي عادة ما تكون داخلية في إطار‬
‫الميتاسبلويت‪.‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪188‬‬

‫هناك أربع واجهات مختلفه للمستخدم متوفرة مع إطار الميتاسبلويت‪ ،‬وهي‪ ،msfgui ،msfcli ،msfconsole :‬و‪ .msfweb‬ومما يشجع‬
‫بشدة التحقق من كل هذه الواجهات المختلفة‪ ،‬ولكن سوف نعمل أساسا على واجهة ‪ .msfconsole‬وذلك ألن ‪ msfconsole‬يوفر أفضل دعم‬
‫لإلطار‪ ،‬واالستفادة من جميع الوظائف‪ ،‬ويمكنك أيضا التعامل مع أوامر لينكس بداخلها‪.‬‬

‫‪MSFconsole‬‬
‫‪ Msfconsole‬هو إلى حد بعيد الجزء األكثر شعبية من اطار الميتاسبلويت‪ ،‬لسبب وجيه‪ .‬أنها واحدة من أكثر الوجهات مرونة‪ ،‬غنى بالعديد‬
‫من الميزات‪ ،‬ومدعوما باالدوات داخل اإلطار‪ .‬يوفر ‪ Msfconsole‬واجهة واحدة للكل ولكل خيار‪ ،‬واعداد متاح في اإلطار‪ .‬انها مثل محطة‬
‫واحدة لجميع أحالم االختراق الخاصة بك‪ .‬يمكنك استخدام ‪ msfconsole‬لفعل كل شيء‪ ،‬بما في ذلك شن الهجوم‪ ،‬وتحميل وحدات‬
‫‪ ،auxiliary‬وأداء ‪ ،enumeration‬وانشاء ‪ ،Listeners‬أو تشغيل الهجوم الشامل )‪ (mass exploitation‬ضد الشبكة بالكامل‪.‬‬
‫على الرغم من أن إطار الميتاسبلويت يتغير باستمرار‪ ،‬فهناك مجموعة فرعية من األوامر تظل ثابتة نسبيا‪ .‬عن طريق اتقان أساسيات‬
‫‪ ،msfconsole‬سوف تكون قادرة على مواكبة أي تغييرات‪ .‬لتوضيح أهمية تعلم ‪ ،msfconsole‬سيتم استخدامه تقريبا في كل فصل من‬
‫فصول الكتاب‪.‬‬
‫أسهل طريقة للوصول إلى ‪ msfconsole‬هو من خالل فتح الترمنال وإدخال السطر التالي‪:‬‬
‫‪#msfconsole‬‬
‫بدء ‪ msfconsole‬يستغرق ما بين ‪ 12‬ثانية و‪ 12‬ثانية‪ ،‬لذلك ال داعي للذعر إذا لم يحدث شيء لبضع لحظات‪ .‬في نهاية المطاف‪ ،‬سوف تبدأ‬
‫‪ Metasploit‬من خالل تقديم لكم مع الفتة ترحيب وعالمة المحث ]>‪ .[msf‬وهناك العديد من الفتات ‪ Metasploit‬المختلفة التي يتم‬
‫عرضها عشوائيا‪ ،‬لذلك فمن الطبيعي أن الشاشة تبدو مختلفة في كل مره‪ .‬الشيء المهم هو أن تحصل على عالمة المحث ]>‪.[msf‬‬

‫من فضلك الحظ‪ ،‬عند تحميل ‪ Metasploit‬ألول مره‪ ،‬فإنه يظهر لك عدد ‪ ،encoders ،payloads ،Exploits‬و‪ nops‬المتاحة‪ .‬كما‬
‫يمكن أن تظهر لك كم يوما مر منذ آخر تحديث‪ .‬بسبب النمو السريع للميتاسبلويت‪ ،‬ونشاط المجتمع والتمويل المادي‪ .‬فمن األهمية أن تحافظ‬
‫على الميتاسبلويت محدث الى تاريخ اليوم‪ .‬ويتم إنجاز هذا بسهولة عن طريق إدخال األمر التالي في الترمنال‪.‬‬
‫‪#msfupdate‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪189‬‬

‫اآلن بعد ان تم تحديث الميتاسبلويت‪ ،‬دعونا نبدأ استكشاف روائع هذه األداة‪ .‬للوصول إلى الملفات المساعدة ل ‪ ،msfconsole‬أدخل االمر‬
‫‪ help‬تليها األمر الذي كنت مهتما به‪ .‬في المثال التالي‪ ،‬نحن نبحث عن مساعدة لألمر ‪ ،connect‬الذي يتيح لنا التواصل مع المضيف‪.‬‬
‫الوثائق الناتجه يسرد لنا قوائم االستخدام‪ ،‬وصفا لألداة‪ ،‬ومختلف خيارات ‪.flags‬‬

‫سوف نقوم باستكشاف ‪ MSFConsole‬بمزيد من التعمق في الفصول االحقه‪.‬‬

‫‪MSFcli‬‬
‫‪ Msfcli‬و‪ msfconsole‬ياخذان نهج مختلف جدا فى الوصول إلى إطار الميتاسبلويت‪ .‬حيث يوفر ‪ msfconsole‬طريقة تفاعلية للوصول‬
‫إلى كافة الميزات بطريقة سهلة االستخدام‪ msfcli ،‬يضع األولوية على ‪ scripting‬وتفسيرها مع األدوات القائمة على وحدة التحكم األخرى‪.‬‬
‫بدال من توفير مترجم فريدة لإلطار‪ msfcli ،‬يعمل مباشرة من سطر األوامر‪ ،‬والذي يسمح لك إلعادة توجيه اإلخراج من األدوات األخرى‬
‫الى ‪ msfcli‬وتوجيه إخراج ‪ msfcli‬مباشر الى أدوات سطر األوامر األخرى‪ Msfcli .‬تدعم أيضا إطالق وحدات ‪ exploits‬و‪،auxiliary‬‬
‫ويمكن أن تكون مريحة عند اختبار وحدات أو تطوير ‪ exploit‬جديدة‪ .‬إنها وسيلة رائعة الداء اختراق فريد عندما تعرف بالضبط ‪exploit‬‬
‫والخيارات التي تحتاج إليها‪ .‬هذا مهم جدا من اجل إمكانية استخدام الميتاسبلويت في ‪ shell scripts‬الخاص ب ‪ ،cmd.exe ،bash‬او‬
‫‪ .powershell‬أقل استخداما من ‪ ،msfconsole‬لكنها تقدم بعض المساعدات األساسية (بما في ذلك استخدام وقائمة الوحدات) وذلك مع‬
‫االمر )‪ ،(msfcli –h‬كما هو موضح هنا‪:‬‬

‫كيفية االستخدام‬
‫دعونا نلقي نظرة على كيف يمكن استخدام ‪ .msfcli‬ال تقلق بشأن التفاصيل؛ تهدف هذه األمثلة لتعطيك شعورا كيف يمكن العمل مع هذه‬
‫الواجهة‪.‬‬
‫عندما تتعلم ألول مرة عن الميتاسبلويت أو كلما واجهتك مشكلة‪ ،‬يمكنك ان ترى الخيارات المتاحة في ‪ module‬بإلحاق الحرف ‪( O‬وهي‬
‫اختصار ‪ )Options‬إلى نهاية السلسلة في النقطة التى كنت عالقة بها على سبيل المثال‪ ،‬في القائمة التالية‪ ،‬استخدمنا ‪ O‬لعرض الخيارات‬
‫المتاحة من أجل الوحدة ‪:ms08_067_netapi‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪190‬‬

‫يمكنك أن ترى أن الوحدة تتطلب ثالثة خيارات‪ ،RPORT ،RHOST :‬و‪ .SMPIPE‬اآلن‪ ،‬وبإضافة ‪ ،P‬يمكننا التحقق من ‪payload‬‬
‫المتاحة‪:‬‬

‫بعد تعيين كافة الخيارات الالزمة من اجل ‪ exploit‬واختيار ‪ ،payload‬يمكننا تشغيل ‪ exploit‬عن طريق تمرير الحرف ‪ E‬إلى نهاية‬
‫السلسلة الوسيطة ‪ ،msfcli‬كما هو موضح هنا‪:‬‬

‫‪Armitage‬‬
‫المكون أرميتاج من الميتاسبلويت هى واجهة المستخدم الرسومية التفاعلية تم إنشاؤها من قبل رافائيل ميودجى )‪ .(Raphael Mudge‬هذه‬
‫الواجهة هي مثيرة لإلعجاب للغاية‪ ،‬وغنية بالميزات‪ ،‬ومتاحة مجانا‪ .‬نحن لن نغطي األرميتاج في العمق‪ ،‬لكنها بالتأكيد جديره باالستكشاف‪.‬‬
‫هدفنا هو تعليم الخصوصيات والعموميات من الميتاسبلويت‪ ،‬واجهة المستخدم الرسومية رائع بمجرد فهم كيفية عمل اإلطار في الواقع‪.‬‬
‫إلطالق أرميتاج‪ ،‬نقوم بتشغيل األوامر ‪ .armitage‬أثناء بدء التشغيل‪ ،‬اختر ‪ ،start MSF‬والتي سوف تسمح لألرميتاج باالتصال بإطار‬
‫الميتاسبوليت الخاص بك‪ .‬وهي تقابل ‪ MSFGUI‬في الويندوز والذي تم صنعها من قبل نفس مطور ارميتاج‪.‬‬

‫بعد تشغيل األرميتاج‪ ،‬فقم ببساطة بالنقر على القائمة إلجراء هجوم معين أو وصول إلى الوظائف ‪ Metasploit‬األخرى‪ .‬على سبيل المثال‪،‬‬
‫يبين الشكل ‪.browser (client-side) exploits‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪191‬‬

‫هجوم ‪HAIL MARY‬‬


‫طالما حدد االرميتاج هدفا محتمال واحد على األقل‪ ،‬فإنك على استعداد إلطالق العنان لسيل من ‪ .exploit‬إلنجاز هذا‪ ،‬ببساطة انقر على زر‬
‫"‪ ،"Attacks‬ثم من القائمة التي تليها نختار "‪ "Hail Mary‬كما هو مبين في الشكل التالي‪:‬‬

‫بالنقر على الخيار ‪ Hail Mary‬فانه يجعل األرميتاج يقوم بارسال طوفان من ‪ exploit‬ضد الهدف‪ .‬ستبدأ أداة التشغيل وإصدار األوامر‬
‫تلقائيا‪ .‬قد تستغرق هذه العملية عدة دقائق لإلتمام‪ .‬يمكنك مشاهدة تقدم للبرنامج في النصف السفلي من النافذة‪ .‬ان االرميتاج سوف يقدم لك ايضا‬
‫شريط التقدم (‪ )progress bar‬لتمكنك من معرفة مدى طول العملية وتقدمها‪ .‬لنكن واضحين‪ ،‬في هذه المرحلة فان االرميتاج يقوم بارسال‬
‫كل ‪ exploit‬ذات الصلة بالهدف‪ ،‬انتبه جيدا لواجهة المستخدم الرسومية التي تمثل الهدف الخاص بك في شاشة األرميتاج؛ إذا كان الهدف‬
‫أصبح محدد بضوء احمر على شكل برق‪ ،‬فهذا يعنى ان األرميتاج نجح في اختراق الهدف‪.‬‬
‫أرميتاج يتصل بالميتاسبلويت عبر واجهة ‪ ،xmlrpc‬وإرسال البيانات من وإلى ذلك عبر منفذ ‪ TCP 55553‬افتراضيا‪ .‬كما أنه يتفاعل مع‬
‫قاعدة بيانات الميتاسبلويت الخلفية باستخدام نفس اتصال ‪.xmlrpc‬‬
‫فى األرميتاج‪ ،‬المستخدم في الجزء العلوي من اليسار من واجهة المستخدم الرسومية يمكنه الوصول لجميع وحدات الميتاسبلويت‪ ،‬بما في ذلك‬
‫‪ payload ،exploit ،auxiliary‬و‪ .post modules‬عالوة على ذلك‪ ،‬فى الجانب األيمن العلوي من الشاشة‪ ،‬يمكن للمهاجم الحصول‬
‫على واجهة رسوميه لبيئة الهدف‪ .‬الجزء السفلي من الشاشة يوفر الوصول المباشر إلى ‪.msfconsole‬‬

‫‪ 1.1‬أنواع وحدات الميتاسبلويت )‪(Type of Metasploit Moudles‬‬


‫دعونا نركز على وحدات الميتاسبلويت‪ ،‬ألن هذه هي البنات األساسية التي يمكننا استخدامها الختراق وتقييم النظم‪ .‬ميتاسبلويت لديها عدة مئات‬
‫من الوحدات‪ .‬أكثر األنواع المفيدة من الوحدات هي في خمس فئات‪:‬‬

‫‪Exploit‬‬
‫قد تم تصميم هذه الوحدات لالستفادة من عيب على جهاز هدف‪ ،‬مما يتسبب في قيام نظام التشغيل هذا بتشغيل البرمجيات التي هي من اختيار‬
‫المهاجم (عادة ‪ .)Metasploit payload‬بعض من ‪ exploits‬هي ‪ ،service-side attacks‬التي تستغل ‪ listening‬في الخدمة الهدف‬
‫عبر الشبكة‪ .‬البعض اآلخر ‪ .client-side attacks‬التي تستمع على شبكة من اجل الطلبات الواردة من العمالء المخترقين‪ ،‬وتقديم ‪exploit‬‬
‫في الرد‪.‬‬

‫‪Payload‬‬
‫هذه الوحدات هى التعليمات البرمجية )‪ (code‬التي يستخدمها ‪ Exploit‬لتشغيلها على النظام الهدف‪ .‬بعض ‪ payload‬فرديه )‪،(single‬‬
‫حيث تملك اكواد التحميل )‪ ،(loading code‬واكواد االتصال )‪ ،(communication code‬واكواد مميزه اخرى في حزمة ‪module‬‬
‫واحدة‪ .‬يتم تقسيم اآلخرين إلى ‪ stagers‬و‪ .stages‬وظيفة ‪ stagers‬هى تحميل ‪ stage‬في ذاكرة النظام الهدف‪ ،‬وتسهيل التواصل مع‬
‫‪ Stage .stage‬هو الشيء الذى يريده المهاجم ليقوم به فعال على الجهاز المستهدف‪ ،‬مثل الحصول على ‪ ،remote shell‬والسيطرة على‬
‫واجهة المستخدم الرسومية للنظام عن بعد‪ ،‬الخ‪ .‬تتكون ‪ payloads‬الكاملة إما من ‪ single‬أو ‪ stager‬باإلضافة إلى ‪.stage‬‬

‫‪Encoders‬‬
‫تقدم هذه الوحدات مجموعة متنوعة من اآلليات المختلفة لتغيير ‪ ،payloads‬و‪ exploits‬لجعلها يصعب اكتشافها من قبل ‪IPS ،IDS‬‬
‫وأدوات مكافحة الفيروسات‪.‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪192‬‬

‫‪Post‬‬
‫تستخدم هذه الوحدات بعد االختراق الناجح‪ ،‬عادة عندما يتم عمل ‪ Meterpreter payload‬على الهدف‪ .‬أنها توفر مختلف تقنيات األتمتة‬
‫بعد االختراق )‪ ،(post-exploitation automation‬بما في ذلك ‪ ،keystroke logging‬تصعيد االمتيازات‪ ،‬وإدارة األجهزة‬
‫المستهدفة‪ ،‬وأكثر من ذلك‪.‬‬

‫‪NOP‬‬
‫هذه الوحدات تقوم بانشاء ‪ ،NOP sleds‬مجموعه من تعليمات لغة اآللة وهي اختصار ل "‪ ،"no operation‬التي تسبب لمعالج الجهاز‬
‫الهدف بعدم فعل أي شيء ل ‪ .clock cycle‬مجموعات من هذه التعليمات تساعد على تحسين احتماالت أن المهاجم سيؤدي االختراق بنجاح‬
‫في تنفيذ التعليمات البرمجية على النظام الهدف‪.‬‬

‫‪Modules Locations 1.1‬‬


‫‪Primary Module Tree‬‬
‫‪Located under /usr/share/metasploit-framework/modules/‬‬
‫‪User-Specified Module Tree‬‬
‫‪Located under ~/.msf4/modules/‬‬
‫‪This location is ideal for private module sets‬‬
‫‪Loading Additional Trees at Runtime‬‬
‫)‪Pass the -m option when running msfconsole (msfconsole -m‬‬
‫‪Use the loadpath command within msfconsole‬‬

‫‪Metasploit Exploits: Active vs. Passive 1.1‬‬


‫‪ Active Exoloit‬عادة تهاجم ‪ listening service‬عبر الشبكة‪ ،‬ويشار عليها أحيانا باسم "‪ ."server-side exploits‬مآثر الخدمات‬
‫مثل خوادم الملفات (‪ SMB‬أو غيرها من البروتوكوالت) أو خوادم الشبكة التي تندرج تحت هذه الفئة‪ .‬افتراضيا‪ ،‬هذه ‪ exploit‬تعمل في‬
‫المقدمة "‪( "foreground‬على ‪ ،)terminal session‬وتعمل حتى تصبح كاملة (مع االستغالل الناجح تمنح جلسة على الهدف) أو تفشل‪.‬‬
‫للتغلب على الوضع االفتراضي وجعل ‪ active Exoloit‬يعمل في الخلفية )‪ ،(background‬يمكنك ذلك من خالل استدعاء ‪ exploit‬مع‬
‫"‪ "exploit -j‬في ‪ ،msfconsole‬مع الخيار ‪ -j‬يجعلها تعمل مثل ‪ job‬في الخلفية‪.‬‬

‫مآثر الميتاسبلويت األخرى هي سلبية )‪ ،(passive‬وذلك ألنها تجعل الميتاسبلويت ينتظر االتصال قبل إرسال ‪ back exploit‬إلى الهدف‪.‬‬
‫وغالبا ما تستخدم هذه ‪ passive exploit‬من اجل ‪ ،client-side exploitation‬واستغالل المتصفحات وبرامج العميل اآلخر‪ .‬افتراضيا‪،‬‬
‫‪ passive exploit‬تعمل تلقائيا في الخلفية‪ ،‬وتحرير ‪ terminal session‬لتفعل أشياء أخرى‪ .‬الميتاسبلويت يقوم بتنشيط ‪ listener‬في‬
‫الخلفية‪ ،‬وعندما يحدث اتصال‪ ،‬فإنه يطبع المعلومات حول االتصال على الشاشة‪ .‬بعد تأسيس االستغالل الناجح والجلسة (مثل ‪remote‬‬
‫‪ )shell‬مع الهدف‪ ،‬يمكن لمختبر االختراق استخدام امر ‪ "sessions -l" msfconsole‬لعرض قائمة الجلسات و "‪ "sessions -i‬للتفاعل‬
‫وذلك للوصول إلى الهدف‪.‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪193‬‬

‫‪Metasploit Payloads: Single, Stagers, and Stages 1.1‬‬


‫بعض ‪ payload‬هي "‪ "singles‬في حين يتم تقسيم اآلخرين الى ‪ stagers‬و‪ Single payloads .stages‬تحتوى على جميع االكواد‬
‫الخاصه بعملها في حزمة واحدة‪ ،‬والتي يتم ارسالها الى الهدف‪ ،‬هذه ‪ payload‬تحتوي على كل ما تحتاجه للتواصل مع المهاجم واتخاذ بعض‬
‫اإلجراءات على الجهاز الهدف‪ .‬عادة‪ ،‬هذه ‪ payload‬تكون صغيرة وبسيطة‪ ،‬من دون الكثير من الميزات المتقدمة‪ .‬وتشمل على سبيل المثال‬
‫‪( adduser‬الذي يضيف المستخدم إلى مجموعة اإلدارة المحلية للجهاز ويندوز)‪( exec ،‬التي تدير أمر معين على الجهاز المستهدف)‪،‬‬
‫‪( shell_bind_tcp‬الذي ينشا ‪ shell listening‬على منفذ ‪ TCP‬معين)‪ ،‬و‪( shell_reverse_tcp‬الذي يجعل اتصال الشل العكسي إلى‬
‫المهاجم لوصول الشل الواردة إلى المربع الهدف)‪ Single payloads .‬مفيدة عندما يقوم مختبر االختراق بارسال ‪ payload‬إلى الهدف‪،‬‬
‫ولكن بعد ذلك ال يمكن الوصول مباشرة إلى الهدف عبر الشبكة لتحميل المزيد من االكواد في النظام المستهدف في وقت الحق‪Single .‬‬
‫‪ payloads‬تجعل كل شيء بذاته وتوصيلها في حزمة واحدة‪ ،‬وليس االعتماد على ‪ back-and-forth staged load‬عبر الشبكة‪.‬‬
‫ال ‪ Payloads‬األخرى يتم فصلها الى ‪ stagers‬و‪ .stages‬بمجرد ان يتم تسليمها إلى الهدف عن طريق ‪ ،exploit‬فان وظيفة ‪ stager‬هى‬
‫انشاء قناة اتصال بين المهاجم والهدف وتحميل ‪ stage‬في ذاكرة الهدف بحيث يمكن تنفيذها‪ ،stage .‬بدوره‪ ،‬تنفذ بعض المالمح عندما يريد‬
‫مختبر االختراق ممارسة السيطرة على الهدف‪ Stager .‬هو محمل اتصال الشبكة‪ .‬اما ‪ stage‬هو اإلجراء الذي تريد أن تأخذه على الهدف‪.‬‬
‫تتكون ‪ payload‬الكاملة من ‪ stager‬و‪ Stagers .stage‬صغيرة نوعا ما‪ ،‬وتركز على االتصال‪ ،‬في حين ان ‪ stages‬تميل إلى أن تكون‬
‫أكبر وأكثر تعقيدا‪.‬‬

‫تشمل ‪ stagers‬على سبيل المثال ‪( bind_tcp‬الذي يستمع على منفذ ‪ TCP‬على الجهاز المستهدف( و‪( reverse_tcp‬وهو ما يجعل‬
‫اتصال من الهدف إلى المهاجم)‪ .‬وتشمل ‪ stages‬على سبيل المثال ‪ Virtual Network Computing( VNC‬وذلك للتحكم في واجهة‬
‫المستخدم الرسومية عن بعد) و‪ Stages .Meterpreter‬و‪ stagers‬مفيدة عندما يريد المهاجم هجوم أكثر تعقيدا وسيطرة كاملة على الجهاز‬
‫الهدف ويمكن أن يكون لها ديناميكية‪ ،‬والتفاعل مع الهدف عبر الشبكة لتحميل ‪.stage‬‬

‫للمساعدة في توضيح الفرق بين ‪ single‬و‪ ،stages/stagers‬فلننظر الى ‪ payload‬التي يمكن استخدامها في‬
‫الوصول الى الشل ‪ cmd.exe‬فى الجهاز الهدف عن طريق االستماع الى منفذ ‪ Single payload .tcp‬التي‬
‫يمكنها فعل هذا هو ‪ .windows/shell_bind_tcp‬ولكن‪ ،‬الميتاسبلويت لديها أيضا ‪shell stage‬‬
‫و‪ ،bind_tcp stager‬والتي يمكن استخدامها معا كاالتى ‪( windows/shell/bind_tcp‬الحظ الفرق في‬
‫الصيغه بينه وبين ما ذكر مع ‪ .)single payload‬كال من ‪single " windows/shell_bind_tcp‬‬
‫‪ "payload‬و‪ "stage/stager payload" windows/shell/bind_tcp‬تقوم بانشاء ‪listening shell‬‬
‫على منفذ ‪ .tcp‬وهكذا‪ .‬ما هو الفرق‪ ،‬ولماذا التمييز مهم‪.‬‬
‫بالنسبة للمبتدئين‪ single ،‬يحتوي على جميع االكواد الخاص به‪ ،‬وهي قطعة واحدة من التعليمات البرمجية يتم تسليمها إلى الهدف كانها طلقة‬
‫واحدة‪ .‬اما ‪ stage/stager‬يتم تحميلها في جزأين‪ ،‬والتي تتطلب من المهاجم الحفاظ على االتصال المباشر إلى الهدف طوال تسليم‬
‫‪.payload‬‬
‫ولكن‪ ،‬الفارق األكثر أهمية ينطوي على حقيقة أنه‪ ،‬مع استخدام ‪ ،stage/stager‬يمكننا اختيار من بين العديد من ‪ stagers‬المختلفة‬
‫الستخدامها مع أي واحد من ‪ stage‬المفضلة لدينا‪ .‬فصل اكواد االتصاالت عن اكواد التنفيذ يعطي مرونة كبيرة بالنسبة لنا‪ .‬بدال من استخدام‬
‫‪ bind_tcp stager‬مع الشل الخاص بنا‪ ،‬يمكننا استخدام ‪ windows/shell/reverse_tcp‬من اجل اتصال الشل العكسى أو‬
‫‪ windows/shell/bind_ipv6_tcp‬من اجل ‪ tcp‬الخاص بإصدار ‪ .IPv6‬يمكننا استخدام أي واحد من العديد من ‪ ،stagers‬جميعهم‬
‫للوصول الى الشل لدينا‪ ،‬وهذا يعطينا الكثير من التركيبات والميزات أكثر مما تقدمه ‪.single payload‬‬

‫‪Some Metasploit Stagers‬‬


‫لتوضيح حقيقة المرونة التي تقدمها ‪ ،stage/stager‬وذلك من خالل أخذ عينات من ‪ stagers‬والتي تقدمها الميتاسبلويت‪ .‬كل واحدة منها‬
‫يمكن استخدامها مع معظم ‪ .stage‬هذه الترسانة تشمل االتى‪:‬‬
‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪194‬‬

‫"‪ :"bind_tcp‬هذا ‪ stager‬يقوم باإلصغاء إلى منفذ ‪ TCP‬المقدم من المهاجم على جهاز الضحيه‪ ،‬مما يتيح للميتاسبلويت إجراء‬ ‫‪-‬‬
‫اتصال وارد )‪ (inbound connection‬على هذا المنفذ للتواصل مع ‪.stage‬‬
‫"‪ :"bind_ipv6_tcp‬هذا ‪ stager‬مشابه الى ‪ bind_tcp‬ولكنه يستخدم ‪ IPv6‬بدال من ‪ IPv4‬في اتصال الشبكه‪.‬‬ ‫‪-‬‬
‫"‪ :"bind_nonx_tcp‬هذا ‪ stager‬ال يستخدم )‪ NX (non-executable‬و)‪DEP (windows data execution prevention‬‬ ‫‪-‬‬
‫وهما تقنيات التهرب‪/‬المرواغه التي توفرها ‪ stagers‬األخرى افتراضيا‪ .‬والنتيجة هي ‪ payload‬صغيرة (‪ NX dodging‬يجعل‬
‫‪ payload‬أكبر استنادا إلى الطريقة التي يجب فيها تخصيص الذاكرة)‪.‬‬
‫"‪ :"reverse_tcp‬هذا ‪ stager‬ينشا اتصال )‪ (outbound tcp connection‬من الجهاز الهدف‪ .‬يذهب الى المهاجم الذي يقوم‬ ‫‪-‬‬
‫بتشغيل الميتاسبلويت‪ .‬ثم يقوم بدوره بانشاء اتصال )‪ (inbound connection‬داخل ‪.inbound connection‬‬
‫"‪ :"reverse_http‬هذا ‪ stager‬يقوم بتشغيل االنترنت اكسبلورر على جهاز الضحيه ومن ثم يستخدمه من اجل اتصل‬ ‫‪-‬‬
‫‪ .outbound connection‬بهذه الطريقه )‪ IE (Internet Explorer‬يسمح باالتصال عبر الشبكه من خالل جدار الحمايه‬
‫الشخصى‪ ،‬جدار حماية الشبكه‪ ،‬و‪/‬او او البروكسى‪.‬‬
‫"‪ :"reverse_ipv6_tcp‬هذا ‪ stager‬مشابه ل ‪ reverse_tcp‬ولكنه يستخدم ‪.ipv6‬‬ ‫‪-‬‬
‫"‪ :"reverse_nonx_tcp‬هذا ‪ stager‬يصنع اتصال عكسى‪ ،‬ولكن ال يحاول استخدام ‪ NX‬او ‪.DEP‬‬ ‫‪-‬‬
‫"‪ :"reverse_tcp_allports‬هذا ‪ stager‬يحاول تجربة جميع المنافذ ‪ TCP‬الصادرة (من ‪ 1‬إلى ‪(955391‬في محاولة االتصال‬ ‫‪-‬‬
‫العكسى إلى المهاجم لتمرير األوامر إلى ‪.stage‬‬
‫"‪ :"x64/bind_tcp and x64/reverse_tcp‬هذه ‪ stagers‬يحتوي على كود مخصص النظمة التشغيل ويندوز ولينكس ذات‬ ‫‪-‬‬
‫الهيكليه ‪ 64bit‬لتنفيذ اتصال ‪ TCP Listener‬او ‪.reverse TCP‬‬

‫‪Some Metasploit Stages‬‬


‫‪ Stagers‬تعطينا مرونه في االتصاالت‪ ،‬ولكنها في حد ذاتها‪ ،‬عديمة الفائدة‪ Stagers .‬هى مجرد اداه للقيام بعملية االتصاالت وتستخدم مع‬
‫‪ ،stage‬حيث هو الذى يقدم بالعمل الحقيقي‪ .‬ميتاسبلويت يقدم عدد ال بأس به من ‪ stage‬المفيدة جدا‪ ،‬بما في ذلك‪:‬‬
‫‪ :"shell" -‬عندما يكون الهدف هو نظام التشغيل ويندوز‪ ،‬فان هذه ‪ stage‬يعطك قدرة الوصول الى ‪ cmd.exe‬في الجهاز الهدف‪.‬‬
‫اما إذا كان نظام الهدف نظام التشغيل لينكس فانه يعطيك الوصول الى ‪ bash‬في الجهاز الهدف‪.‬‬
‫‪ :"x64/shell" -‬هذا يعطيك التحكم والوصول الى ‪ cmd.exe‬في نظام التشغيل ويندوز ذات البنية ‪.64 bit‬‬
‫‪ :"meterpreter" -‬تعطي هذه البيئة ذات القوة العظمى للمهاجم درجات عديدة من السيطرة على الهدف‪ ،‬وتقدم عددا كبيرا من‬
‫القدرات وميزات ‪ .automation‬ونحن سوف ننفق بعض من الوقت في تناول هذه ‪ stage‬بالتفصيل في وقت الحق‪.‬‬
‫‪ :"x64/meterpreter" -‬هذه ‪ stage‬هي اإلصدار المتوافق مع ‪-21‬بت من ‪ .Meterpreter‬على الرغم من إصدار ‪ 11‬بت من‬
‫‪ Meterpreter‬سوف يعمل على إصدارات ‪ 21‬بت من الويندوز‪ ،‬ولكنه ال يمكن أن يتفاعل مع العمليات ‪-21‬بت‪ .‬ويمكن أن‬
‫يتفاعل فقط مع العمليات ‪ 11‬بت على نظام التشغيل ‪-21‬بت‪.‬‬
‫‪ :"patchupmeterpreter" -‬هذه ‪ stage‬تنفذ ‪ .Meterpreter‬ولكن يتم حقنها في الذاكره باستخدام تقنية قديمة من حقن ‪،DLL‬‬
‫تسمى "‪ ."patch-up‬مع هذا األسلوب الميتاسبلويت يقوم بتحميل ‪ DLL‬في الذاكرة عن طريق ترقيع ‪windows API call‬‬
‫المرتبطة بحقن التعليمات البرمجية‪.‬‬
‫‪ :"x64/vncinject" -‬هذه ‪ stage‬تعطى المهاجم التحكم عن بعد لواجه المستخدم الرسوميه )‪ (GUI‬في الهدف‪.‬‬
‫‪ :"dllinject" -‬هذه ‪ stage‬تقوم بحقن اى ‪ DLL‬الذي يختارها المهاجم في عملية االختراق‪.‬‬
‫افتراضيا‪ ،‬كل من هذه ‪( stage‬باستثناء "‪ )"patch-up‬تعتمد على تقنية حقن ‪ DLL‬العكسيه بدال من تقنية ‪ patchup‬القديمة‪ .‬حيث بدال من‬
‫ترقيع ‪ windows API call‬لتحميل االكواد في الذاكرة‪ ،‬فان هذه التقنية العكسيه تتضمن الدوال الخاصة بها لنسخ االكواد في الذاكرة‪.‬‬
‫ولذلك‪ ،‬فإن امر الويندوز "‪ "tasklist /m‬لن يظهر ‪ DLL‬المحمله في الذاكره في عمليات الهدف‪.‬‬

‫‪Metasploit Utilities 1.11‬‬


‫بعد أن غطينا الثالث واجهات الرئيسية للميتاسبلويت‪ ،‬حان الوقت لتغطية عدد قليل من ‪ .utilities‬أدوات الميتاسبلويت هي واجهات مباشرة‬
‫إلى ميزات معينة من اإلطار يمكن أن تكون مفيدة في حاالت محددة‪ ،‬وخاصة في تطوير ‪ .exploit‬نحن سوف نغطي بعض األدوات هنا‪.‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪195‬‬

‫‪MSFpayload‬‬
‫المكون ‪ msfpayload‬من الميتاسبلويت يسمح لك بتوليد ‪ ،exexutables ،shellcode‬وأكثر من ذلك بكثير لالستخدام في ‪ exploit‬خارج‬
‫اإلطار‪.‬‬
‫يمكن توليد ‪ shellcode‬في العديد من األشكال بما في ذلك السى‪ ،‬روبي‪ ،‬جافا سكريبت‪ ،‬وحتى ‪ Visual Basic‬للتطبيقات‪ .‬وسيكون كل من‬
‫تنسيق اإلخراج مفيدا في حاالت مختلفة‪ .‬على سبيل المثال‪ ،‬إذا كنت تعمل مع القائم على بيثون‪ ،‬فان الخرج على النمط سى قد يكون أفضل‪ .‬إذا‬
‫كنت تعمل على اختراق المتصفح‪ ،‬فان تنسيق اإلخراج جافا سكريبت قد يكون أفضل‪ .‬بعد امتالك اإلخراج المطلوب‪ ،‬يمكنك بسهولة إدراج‬
‫‪ payload‬مباشرة إلى ملف ‪ HTML‬الختراقها‪.‬‬
‫لمعرفة أي من الخيارات التي تتخذها األداة‪ ،‬أدخل االمر ‪ msfpayload -h‬في سطر األوامر‪ ،‬كما هو موضح هنا‪:‬‬

‫كما هو الحال مع ‪ ،msfcli‬إذا كنت تجد نفسك عالقا مع متطلبات الخيارات لوحدة ‪ ،payload‬قم بإلحاق ‪ O‬على سطر األوامر للحصول على‬
‫قائمة من المتغيرات المطلوبة واالختيارية‪ ،‬مثل ذلك‪:‬‬

‫‪MSFencode‬‬
‫‪ Shellcode‬الناتج عن ‪ msfpayload‬يعمل بشكل كامل‪ ،‬ولكنه يحتوي على عدة أحرف فارغة )‪ (null characters‬والتى عند تفسيرها‬
‫من قبل العديد من البرامج‪ ،‬فانه يكون داللة على نهاية سلسلة‪ ،‬وهذا سوف يسبب إنهاء الكود قبل االنتهاء الفعلى‪ .‬بعبارة أخرى‪ ،‬يمكن لهذه‬
‫‪ x00s‬و‪ xffs‬كسر ‪ payload‬الخاص بك!‬
‫وباإلضافة إلى ذلك‪ Shellcode ،‬تعبر الشبكة في نص واضح والتي من المرجح أن يتم انتقاؤها من قبل أنظمة كشف التسلل (‪ )IDS‬وبرامج‬
‫مكافحة الفيروسات‪ .‬لمعالجة هذه المشكلة فان مطوري الميتاسبلويت قاموا بتقديم ‪ ،msfencode‬والتي تساعدك على تجنب الحروف السيئة‬
‫والتهرب من الفيروسات و‪ IDS‬عن طريق ترميز ‪ payload‬األصلية بطريقة ال تتضمن اى من األحرف "السيئة"‪ .‬أدخل ‪msfencode -h‬‬
‫لترى قائمة من خيارات ‪.msfencode‬‬
‫الميتاسبلويت يحتوي على عدد من تقنيات التشفير المختلفة لحاالت محددة‪ .‬بعضها سوف يكون مفيدا عندما تستخدم األحرف ‪alphanumeric‬‬
‫(االحرف االبجديه‪+‬الرقميه) فقط كجزء من ‪ ،payload‬كما هو الحال مع العديد من ‪ file format exploit‬أو التطبيقات األخرى التي تقبل‬
‫األحرف القابلة للطباعة فقط كمدخل‪ ،‬والبعض اآلخر كبير ويستخد لألغراض العامة والتي تعمل جيدا في كل حالة‪.‬‬
‫عندما تكون في شك‪ ،‬من اختيارك ‪ encoder‬المناسب فاذهب مع ‪ ،x86/shikata_ga_nai encoder‬حيث انه الترميز الوحيد برتبة‬
‫ممتاز‪ ،‬وهو مقياس لمدى موثوقية واستقرار الوحدة‪ .‬في سياق التشفير‪ ،‬فان الترتيب الممتاز يعني أنه واحد من أكثر الترميز تنوعا ويمكن أن‬
‫تستوعب قدرا أكبر من الضبط الدقيق من ‪ encoder‬األخرى‪ .‬لرؤية قائمة بالترميز المتاح‪ ،‬استخدم االمر ‪ msfencode -l‬كما هو مبين‪.‬‬

‫‪Nasm Shell‬‬
‫األداة ‪ nasm_shell.rb‬يمكن أن تكون في متناول اليد عندما تحاول فهم اكواد لغة االسيمبلى‪ ،‬وخاصة‪ ،‬خالل تطوير ‪ ،exploit‬تحتاج إلى‬
‫تحديد ‪( opcodes‬تعليمات االسيمبلى) من اجل أوامر االسيمبلى‪.‬‬
‫على سبيل المثال‪ ،‬عند تشغيل األداة‪ ،‬وتطلب ‪ opcodes‬من اجل األوامر ‪ ،jmp esp‬حيث ان ‪ nasm_shell‬يخبرنا ب ‪.FFE4‬‬

‫‪Metasploit Express and Metasploit Pro 1.11‬‬


‫‪ Metasploit Express‬و ‪ Metasploit Pro‬هي واجهات ويب تجارية من إطار الميتاسبلويت‪ .‬هذه االدوات توفر اليات األتمتة كبيره‬
‫وجعل األمور أسهل للمستخدمين الجدد‪ ،‬في حين ال تزال توفر الوصول الكامل إلى اإلطار‪ .‬كما تقدم كل من المنتجات األدوات التي ال تتوفر‬
‫في اإلصدار المجانى من اإلطار (‪ ،)community editions‬مثل ‪ automated password brute forcing‬و‪automated‬‬
‫‪ .website attacks‬وباإلضافة إلى ذلك‪ ،‬يمكنك إعداد تقارير لطيفة الى ‪.Metasploit pro‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪196‬‬

‫هل هذه األدوات لها قيمتها الشرائية؟ أنت فقط يمكن أن تجعل هذا الخيار‪ .‬االصدارات التجارية من المتاسبلويت مهمه بالنسبه لمختبرى‬
‫االختراق المحترفين ويمكن أن يخفف العديد من الجوانب األكثر الروتينية للعمل‪ ،‬ولكن إذا كان توفير الوقت من أتمتة هذه المنتجات التجارية‬
‫هي مفيدة بالنسبة لك‪ ،‬فهذا قد يبرر سعر الشراء‪ .‬تذكر‪ ،‬ولكن‪ ،‬كما يمكنك أتمتة العمل الخاص بك‪ ،‬فأن البشر هم األفضل في تحديد ناقالت‬
‫هجوم أفضل من ‪.automated tools‬‬

‫‪ 1.11‬اعداد الميتاسبلويت‬
‫اعداد الميتاسبلويت على الويندوز‪.‬‬
‫تركيب إطار الميتاسبلويت على الويندوز بسيط وال يتطلب اى جهد تقريبا‪ The framework installer .‬يمكن تحميله من الموقع الرسمي‬
‫)‪ .(http://www.rapid7.com/products/metasploit/download.jsp‬في هذه الوصفة‪ ،‬سوف نتعلم كيفية اعداد الميتاسبلويت على‬
‫نظام التشغيل ويندوز‪.‬‬
‫بمجرد االنتهاء من تنزيل ‪ ،installer‬ببساطة قم بتشغيله والجلوس‪ .‬فإنه سيتم تلقائيا تثبيت جميع العناصر ذات الصلة وإعداد قاعدة بيانات‬
‫لك‪ .‬وبمجرد اكتمال التثبيت‪ ،‬يمكنك الوصول إلى اإلطار من خالل مختلف االختصارات التي تم إنشاؤها بواسطة ‪....installer‬‬
‫ملحوظه‪ :‬أثناء تثبيت الميتاسبلويت على نظام التشغيل ويندوز‪ ،‬يجب تعطيل الحماية من الفيروسات‪ ،‬حيث أنه قد يكشف عن بعض ملفات‬
‫التثبيت كانها فيروسات أو تهديدات محتملة ويمكنه منع عملية التثبيت‪ .‬بمجرد اكتمال التثبيت‪ ،‬تأكد من أن تضع دليل تثبيت اإلطار في‬
‫القائمه البيضاء ‪ white-listed‬لبرنامج مكافحة الفيروسات‪ ،‬كما أنه سيتم الكشف عن ‪ exploit‬و‪ payload‬كانها ملفات خبيثة‪.‬‬

‫سوف تجد أن ‪ installer‬ينشا الكثير من االختصارات بالنسبة لك‪ .‬معظمها هي ‪ click-and-go‬في بيئة الويندوز‪ .‬بعض الخيارات األخرى‬
‫التي سوف تجدها هي ‪ ،Metasploit update ،cmd console ،Metasploit web‬وهلم جرا‪.‬‬

‫اعداد الميتاسبلويت على اوبنتو )‪.(Ubuntu‬‬


‫إطار الميتاسبلويت لديه الدعم الكامل ألنظمة التشغيل لينوكس أوبونتو‪ .‬في هذا الجزء‪ ،‬سوف نغطي عملية التثبيت‪ ،‬والذي يختلف قليال عن‬
‫الويندوز‪ .‬يمكن تحميل النسخه المخصصه للينكس من الموقع )‪.(http://www.rapid7.com/products/metasploit/download.jsp‬‬

‫عملية اإلعداد للتثبيت الكامل هي كما يلي‪:‬‬


‫‪ -‬سوف نحتاج إلى تنفيذ األمر التالي لتثبيت اإلطار على آلة أوبونتو لدينا‪:‬‬

‫سوف تؤدى الى ظهور شاشه كما في الويندوز التمام عملية التثبيت بطريقه سهلة واليه وهنا نفعل كما فعلنا في الويندوز‪ .‬مع ترك‬ ‫‪-‬‬
‫االعدادات االفتراضيه كما هي‪.‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪197‬‬

‫اعداد الميتاسبلويت على كالى (‪.)kali‬‬


‫في نظام التشغيل كالى يكون إطار الميتاسبلويت مدمج معه وموجد في قائمة االداوت الخاصة به‪ .‬لتشغيل الميتاسبلويت في كالى فإنك سوف‬
‫تحتاج الى تفعيل الخدمات التاليه حتى يعمل الميتاسبلويت‪:‬‬
‫‪- #service postgresql start‬‬
‫‪- #service metasploit start‬‬
‫ومن اجل تشغيل هذه الخدمات بطريقة دائمة مع بداية تشغيل النظام في كل مره قم بكتابة األوامر التاليه‪:‬‬
‫‪- #update-rc.d postgresql enable‬‬
‫‪- #update-rc.d metasploit enable‬‬

‫‪ 1.11‬المزيد عن ‪msfconsole‬‬
‫اآلن‪ ،‬لكي تصبح أكثر دراية بالميتاسبلويت‪ .‬فنحن سوف نذهب في جولة عميقة من ‪ .msfconsole‬حيث سنعرض عدة عناصر من هذه‬
‫الواجهة األكثر قيمة‪ .‬يمكنك ببساطة التجربة مع مختلف األوامر التي سوف نناقشها مع هذه الجولة‪.‬‬

‫استخدام ‪ Msfconsole‬كالشل )‪(Using Msfconsole as a Shell‬‬


‫دعونا نبدأ جولتنا من خالل النظر في الطريقه التي يمكن أن تتفاعل مع ‪ msfconsole‬كما الشل‪ .‬اآلن‪ ،‬انها ليست شل كامله‪ ،‬ولكنها تقدم‬
‫العديد من القدرات مثل الشل التي يمكنها حقا تحسين العمل الخاص بك في الميتاسبلويت‪ ،‬والتي توفر الكثير من الوقت وجعله أسهل كثيرا في‬
‫االستخدام‪.‬‬
‫مثل أي شل‪ msfconsole ،‬يدعم اإلكمال التلقائي (‪ .)tab-auto-complete‬عند الوصول إلى مختلف المكونات داخل ‪ ،msfconsole‬يمكنك‬
‫البدء عادة بكتابة األمر الخاص بك‪ ،payload ،exploit ،‬أو ‪ ،encoder‬ومن ثم النقر على المفتاح ‪ tab‬لعرض االحتماالت‪ .‬إذا كان هناك‬
‫عنصر فريد‪ ،‬فانه سوف يقوم بتكملة كتابته بالكامل‪ .‬إذا لم يكن هناك عنصر فريد من نوعه‪ ،‬فان النقر المزدوج على ‪ ،)tab-tab( tab‬سوف‬
‫يظهر لك كل االحتماالت الممكنة لمكان وجودك في الواجهة‪.‬‬
‫لرؤية هذا الفعل‪ ،‬قم بطباعة التالى في سطر األوامر ‪:msfconsole‬‬
‫‪msf > us‬‬
‫ثم‪ ،‬النقر على المفتاح ‪ .TAB‬سترى انه قام باكمال الكلمة الى "‪ "use‬تلقائيا‪.‬‬
‫‪msf > use‬‬
‫ثم قم بكتابة الكلمه "‪ "exp‬وبعدها قم بالنقر على المفتاح ‪ ،TAB‬نجد انه قام باكمالها تلقائيا الى ‪.exploit‬‬
‫لمسح ما هو موجود على الشاشه يمكنك ذلك من خالل كتابة االمر ‪ clear‬او بمجرد النقر على ‪.CTRL+L‬‬
‫لألسف‪ ،‬موجه ‪ msfconsole‬ليس شل كامل‪ ،‬لذلك فانه ال يدعم الموجهات الى الملفات )>( او ‪ pipe‬إلى البرامج أخرى (|)‪.‬‬
‫الموجه ">‪ "msf‬هو سياق محدد‪ ،‬هذاالموجه يحدث له تغير عند اختيار ‪ ،exploit‬مما يتيح لك إشارة مفيد لل ‪ exploit‬الذي اخترته أثناء‬
‫عملك من خالل الواجهة‪ .‬دعونا نحاول ذلك بكتابة‪:‬‬

‫الحظ أن الموجه يقول اآلن أنك قد اخترت ‪ .psexec exploit‬وهي الميزة التي تعمل مثل األمر ‪ SysInternals psexec‬لجعل جهاز‬
‫ويندوز عن بعد يقوم بتشغيل األمر عبر جلسة ‪ SMB‬بأوراق اعتماد على مستوى ‪.admin‬‬
‫للخروج من سياق معين من ‪ exploit‬من داخل الميتاسبلويت‪ .‬يمكنك ببساطة كتابة األمر "‪:"back‬‬

‫يوضح االمر "‪ "banner‬الفتة ‪ ASCII‬الرسوميه للميتاسبلويت المختارة عشوائيا‪ ،‬تليها بعض المعلومات المفيدة جدا حول إصدار‬
‫الميتاسبلويت وعدد الوحدات‪.‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪198‬‬

‫افتراضيا‪ ،‬يعرض ‪ msfconsole‬الكتابة باأللوان فى واجهة مستخدم‪ .‬ومع ذلك‪ ،‬يوجد بعض الخلل مع التمرير في اإلصدارات المختلفة من‬
‫‪ msfconsole‬مع األلوان في الواجهة‪ .‬لتحويل اللون الى ‪ off‬لتجنب مثل هذه األخطاء‪ ،‬يمكن كتابة هذا‪:‬‬

‫‪Msfconsole: Running OS Commands‬‬


‫واحدة من أكثر الفوائد فى ‪ msfconsole‬هى قدرته على إطالق األوامر في الشل االساسيه لنظام التشغيل‪ .‬ببساطة عن طريق كتابة األمر في‬
‫موجه ‪ ،msfconsole‬فان المياتسبلويت سوف يقوم بتنفيذ هذا األمر في الشل الكامن وراء الجهاز المحلي مع امتيازات مستخدم الميتاسبلويت‬
‫الحالي‪.‬‬
‫بعض من أوامر خشل نظام التشغيل األكثر فائدة من داخل ‪ msfconsole‬هي‪:‬‬
‫‪ :ping <IPaddr> -‬مختبر االختراق غالبا ما يرغب في تنفيذ األمر ‪ ping‬على الهدف قبل مهاجمته‪ .‬حيث ان هذا االمر يمكنه أن‬
‫يظهر أن الهدف يمكن الوصول إليه عبر الشبكة‪ .‬المفاتيح ‪ CTRL-C‬يستخدم لوقف ‪ ،ping‬أو مجرد تنفيذ األمر ‪ ping‬على الهدف‬
‫مع تحديد عدد المرات ‪ N‬عن طريق تشغيل ">‪."ping –c <N> <IPaddr‬‬
‫‪ :ifconfig -‬هذا األمر مفيد في التحقق من عنوان ‪ IP‬المخصص لآللة التي يعمل عليها الميتاسبلويت‪ ،‬للتأكد من انه يتم توجيه‬
‫‪ reverse shell‬و‪ inbound traffic‬الواردة إلى النظام المناسب‪.‬‬
‫‪ :Service iptables stop -‬في بعض أنظمة لينكس‪ ،‬هذا االمر يقوم بتعطيل جدار الحماية ‪ ،iptables‬مما يتيح لحركة المرور‬
‫الواردة ان تكون على أي منفذ‪ ،‬مفيدة ل ‪ reverse shell‬و‪.inbound traffic‬‬
‫‪ cd -‬و‪ :ls‬هذه األوامر مفيدة في التنقل والنظر في نظام الملفات المحلي لآللة التي يعمل عليها الميتاسبلويت‪ .‬عند تحميل أو تنزيل ملف‬
‫أو التحقق من معلومات أخرى‪ ،‬هذه األوامر هي مفيدة للغاية‪.‬‬
‫‪ :nmap -‬هذا االمر يقوم بفحص المنافذ وهو مفيد في التحقق من أن منفذ معين أو مجموعة من المنافذ مفتوحة على الهدف‪ ،‬عن‬
‫طريق تشغيل ">‪ "nmap –St –p <port> <TargetIPaddr‬على جهاز المثبت عليه ‪.NMAP‬‬

‫‪Msfconsole: Command Help‬‬


‫يقدم ‪ msfconsole‬الوظيفة ‪ ،help‬للحصول على قائمة كاملة من األوامر المعتمدة‪ ،‬ببساطة قم بتشغيل األمر "‪ "help‬أو ما يعادلها‪" ،‬؟"‪.‬‬
‫بعض األوامر الفردية لديها أيضا المزيد من المساعده األكثر تفصيال‪ ،‬والتي يمكن الوصول إليها عن طريق تشغيل االمر "‪ "help‬متبوعة‬
‫باسم األمر‪ .‬على سبيل المثال‪ ،‬لمعرفة المزيد من المعلومات حول االمر "‪ ،"jobs‬يمكن تشغيل‪:‬‬
‫‪Msf> help jobs‬‬
‫بدال من ذلك‪ ،‬يمكن تشغيل االمر "‪ "jobs -h‬لرؤية نفس المعلومات‪.‬‬
‫في حين أن االداه "‪ "help‬يقدم معلومات حول األوامر‪ ،‬فان االداه "‪ "info‬توفر معلومات مفصلة عن ‪ ،modules‬بما في ذلك ‪،exploits‬‬
‫‪ ،encoders ،payloads‬و‪ .nops‬عن طريق تشغيل "‪ "info‬متبوعة باسم ‪ ،module‬عندها يمكنك رؤية مختلف الخيارات المرتبطة مع‬
‫‪ module‬والمالحظات التفصيلية المرتبطة باستخدامه‪.‬‬
‫المعلومات حول ‪ module‬تظهر أيضا المعلومات عن صاحبه‪ ،‬وقيود الترخيص له (إن وجدت)‪ ،‬ومراجع للثغرات‪ .‬مراجع الثغرات هذه‬
‫غالبا ما تأتي في شكل ‪ URL‬حيث يمكنك البحث عن المزيد من المعلومات حول هذا الخلل‪ ،‬وأحيانا‪ ،‬طرق معالجتة‪ ،‬عناصر مفيدة جدا‬
‫لمختبر االختراق‪ .‬تتضمن المعلومات عن بعض ‪ module‬أيضا أنواع الهدف (‪ exploit‬التي تعمل فقط على إصدارات معينة من نظام‬
‫التشغيل الهدف)‪ ،‬والقيود المفروضة على ‪ payload( payload‬التي لها يكون حجم معين من ‪ ،)exploit‬وغيرها من المعلومات‪.‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪199‬‬

‫على سبيل المثال‪ ،‬نقوم برؤية المعلومات المرتبطة مع الوحدة ‪ .Metasploit psexec‬الحظ الشرح لكيفية قيام هذه الوحدة بتقبل أوراق‬
‫اعتماد المستخدم والسبب الذي يجعل ‪ payload‬يعمل على جهاز ويندوز المستهدف‪ .‬سوف نرى كيفية القيام بذلك مع ‪ psexec‬كاالتى‪:‬‬

‫‪Msfconsole: The Show Command‬‬


‫األمر ‪ show‬داخل ‪ msfconsole‬يقوم بعرض كل من ‪ modules‬المتاحة للمستخدم‪ ،‬افتراضيا‪ ،‬يعرض كل ‪ module‬المتاحة‪ ،‬بما في ذلك‬
‫جميع ‪ ،exploits ،payloads ،encoders ،nops‬و‪.post-exploit module‬‬
‫أو يمكنك مجرد إلقاء نظرة على أنواع معينه من ‪ ،modules‬ببساطة عن طريق تحديد نوع ‪ module‬بعد االمر ‪ ،show‬كما في‪:‬‬
‫‪msf > show auxiliary‬‬
‫‪msf > show exploits‬‬
‫‪msf > show payloads‬‬
‫‪msf > show post‬‬
‫‪msf > show encoders‬‬
‫إنه من المفيد أن نالحظ أنه بمجرد اختيار ‪ exploit‬على وجه الخصوص‪ ،‬فإن االمر "‪ "show payload‬سوف يتصرف بطريقة محددة‪.‬‬
‫وهذا‪ ،‬انه سوف يظهر لك كل من ‪ payloads‬التي تتوافق مع ‪ exploit‬التي اخترتها‪ .‬إذا لم تكن قد اخترت ‪ exploit‬حتى االن‪ .‬فان االمر‬
‫"‪ "show payloads‬سوف يعرض جميع ‪ payload‬المتاحة في الميتاسبلويت‪.‬‬
‫أخيرا‪ ،‬وفي أي وقت‪ ،‬يمكنك تشغيل "‪ "show options‬لمعرفة أي من الخيارات المتاحة لديك عند هذه النقطة في جلسة ‪ ،msfconsole‬و‬
‫"‪ "show advanced‬لسرد بعض الخيارات المتقدمة اإلضافية‪ .‬هذه األوامر مفيدة للتحقق من أنك قد قمت بالتعيين بشكل صحيح لكل‬
‫المتغيرات الضرورية لكل من ‪ exploit‬و‪( payload‬أو أي ‪ module‬أخرى قيد التشغيل)‪ .‬هي أيضا مفيد جدا في استكشاف الميتاسبلويت‬
‫للعثور على الميزات الجديدة والقدرات‪ .‬على سبيل المثال‪ ،‬عن طريق تشغيل "‪ "show options‬و "‪ "show advanced‬قبل اختيار أي‬
‫من ‪ .module‬يمكننا أن نرى بعض خيارات التسجيل وإعدادات التكوين األخرى الخاصه ب ‪ msfconsole‬نفسها‪.‬‬

‫‪Msfconsole: The Use Command‬‬


‫أحد األوامر األكثر أهمية في ‪ msfconsole‬وهو االمر "‪ ،"use‬الذي يتيح لك تحديد ‪ modules‬التى تريد استخدامها‪ .‬عن طريق إدخال‬
‫االمر ">‪ "use <module_name‬في الموجه >‪ ،msf‬حيث مكان ‪ module_name‬يمكنك تحديد المسار الكامل الى ‪،exploit‬‬
‫‪ ،auxiliary ،nop ،payload‬او ‪ .encoder module‬على سبيل المثال‪ ،‬لكي تختار ‪ module‬التي سوف تنفذ الوظيفه ‪psexec‬‬
‫(تستخدم في تنفيذ األوامر على الجهاز الهدف)‪ ،‬سوف تكتب كاالتى‪:‬‬
‫‪msf> use exploit/windows/smb/psexec‬‬
‫عند تحديد ‪ module‬الستخدامها‪ ،‬فان سياق ‪ msfconsole‬سوف يتغير بالكامل‪ .‬حيث ان الموجه >‪ msf‬سوف يتغير الى ‪ module‬التي‬
‫قمت باختيارها‪ .‬أية متغيرات قمت بتعيينها عند هذه النقط من خالل االمر ‪ set‬فانها سوف تتطبق على هذا ‪ mdoules‬فقط‪.‬‬
‫ولكن‪ ،‬األهم من ذلك‪ ،‬انه تبعا لنوع ‪ module‬التي اخترتها‪ ،‬سوف تتعرض الى خيارات وأوامر إضافية‪ .‬أوامر وخيارات ‪ module‬المحدده‬
‫سوف تتيح لنا حق التكوين والسيطره على الميتاسبلويت‪ ،‬لذلك دعنا ننظر اليها بمزيد من التفاصيل‪.‬‬

‫بمجرد تغير سياق ‪ msfconsole‬الى ‪ module‬المحدد الذي قمت باختياره باستخدام االمر "‪ ،"use‬فهناك أوامر وخيارات اضافيه أخرى‬
‫متاحه خاصة بهذا ‪ ،module‬اعتمادا على نوع ‪ modules‬الذي قمت باختياره‪.‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪200‬‬

‫مع‪ .exploit module ،‬نجد ان األوامر الجديده المتاحه الخاصة بها هي االمر "‪ "exploit‬والتي تستخدم الطالق ‪ ،exploit‬االمر‬
‫"‪ "check‬تستخدم لتحديد اى من أنظمة الهدف يحمل ضعفا مقابل هذه ‪ module‬لتسليم ‪ exploit‬لها‪ .‬باإلضافة الى ذلك‪ ،‬الخيارات االضافيه‬
‫األخرى التي أصبحت متاحه مع االمر "‪ ."show‬تنفيذ االمر "‪ "show payloads‬سوف يسرد لك جميع ‪ payload‬التي هي مالئمه لل‬
‫‪ exploit‬التي قمت باختيارها‪ .‬تنفيذ االمر "‪ "show options‬يحدد المتغيرات التي يمكن اعدادها من اجل هذا ‪ exploit‬لكي يعمل جيدا‪.‬‬
‫االمر "‪ "show targets‬يحدد نوع أنظمة التشغيل الهدف التي تحمل ضعفا ضد هذا ‪ exploit‬والذي يمكن ان يعمل عليه (بعض ‪ exploit‬ال‬
‫تحتاج الى تحديد نوع الهدف)‪ .‬االمر "‪ "show advanced‬يعرض الخيارات األخرى األكثر تقدما‪ ،‬في حين ان االمر "‪"show evasion‬‬
‫يحدد المتغيرات التى يمكن استخدامها لجع هذا ‪ exploit‬اقل عرضه للكشف بواسطة أنظمة ‪ IDS‬و‪.IPS‬‬

‫مع ‪ ،payload module‬عند اختيارها نجد معها االمر "‪ ،"generate‬والتى تجعلنا نقوم بتحويل ‪ payload‬الى اكواد تعرض على الشاشه‪،‬‬
‫مع الخيارات ‪ .raw machinecode ،C ،Perl ،Ruby‬هناك أيضا بعض المتغيرات االضافيه التي يمكنك اعداداها مع ‪ payload‬المختاره‪.‬‬

‫مع ‪ ،auxiliary module‬يمكنك الحصول على االمر "‪ "run‬والذي يشبه في عمله االمر "‪ ."exploit‬االمر "‪ "show‬هنا أيضا يحصل‬
‫على بعض الخيارات المتاحه والتي تشمل "‪ ،"show actions‬والتي تحدد القدارات المختلفه ل ‪ .auxiliary module‬باالضافة الى ذلك‬
‫هناك أيضا بعض المتغيرات الخاصه بهذه ‪.module‬‬
‫>‪msf > use <module_name‬‬

‫‪Exploits‬‬ ‫‪Payloads‬‬ ‫‪auxiliary‬‬


‫‪Add'l command‬‬ ‫‪Add'l command‬‬ ‫‪Add'l command‬‬
‫‪- exploit‬‬ ‫‪- generate‬‬ ‫‪- run‬‬
‫‪- check‬‬ ‫‪- exploit=run‬‬

‫‪Add'l options‬‬
‫‪Add'l options‬‬ ‫‪Add'l options‬‬
‫‪- show options‬‬
‫‪- show payloads‬‬ ‫‪- Payload specific‬‬
‫‪variables‬‬ ‫‪- auxiliary specific‬‬
‫‪- show options‬‬ ‫‪variable‬‬
‫‪- show targets‬‬ ‫‪- show actions‬‬
‫‪- show advanced‬‬
‫‪- show evasion‬‬

‫في ‪( post-exploitation module‬تختصر في الميتاسبلويت الى ‪ ،)POST‬نجد ان األوامر الخاصة بها هي االمر "‪ "run‬والذي يقوم‬
‫بتفعيل ‪ ،post module‬مما يجعله يأخذ تأثير على الجلسة المحددة المفتوحه مع الجهاز الهدف‪ .‬األمر "‪ "reload‬يجعل الميتاسبلويت يعيد‬
‫قراءة ‪ post module‬من نظام الملفات‪ ،‬مما يجعله سهال عند تعديل ملفات ‪ module‬هذه واستخدامها دون إعادة تشغيل الميتاسبلويت‪ .‬االمر‬
‫"‪ "rerun‬يؤدي الى إعادة تحميل ‪ module‬من نظام الملفات ومن ثم تشغيل ‪( module‬أي‪ .)rerun = reload + run ،‬االمرين‬
‫‪ exploit‬و‪ rexploit‬هما أسماء مستعاره لالمرين ‪ run‬و‪ rerun‬على التوالي‪.‬‬
‫عند اختيار ‪ ،post module‬فهناك أيضا متغيرات جديده متاحه‪ ،‬تسمى "‪ ."SESSION‬يتم تعيين هذا المتغير إلى ‪ Meterpreter‬الحالي‬
‫(أو في بعض الحاالت ‪ )shell‬وهو رقم الجلسة المفتوحه مع الهدف‪ .‬سنناقش تلك الجلسات وإدارتها قريبا‪.‬‬

‫التالى‪ ،‬نحن نحصل على ‪ ،nop module‬والتي تقدم األوامر "‪ "generate‬إلنشاء ‪ NOP sled‬تعرض على الشاشة‪ ،‬ومرة أخرى مع‬
‫بعض متغيرات ‪ NOP‬المحددة‪.‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪201‬‬

‫وأخيرا‪ ،‬لدينا ‪ ،encoders‬والتي ال تكشف عن أي أوامر إضافية عندما نختارها مع االمر "‪ ،"use‬ولكن لديها بعض متغيرات التشفير‬
‫الخاصة بها‪.‬‬
‫>‪msf > use <module_name‬‬

‫‪Post‬‬ ‫‪NOP‬‬ ‫‪Encoder‬‬


‫‪Add'l command‬‬ ‫‪Add'l command‬‬ ‫‪Add'l command‬‬
‫‪- run‬‬ ‫‪- generate‬‬ ‫‪- none‬‬
‫‪- reload‬‬
‫‪- rerun‬‬
‫‪- exploit = run‬‬
‫‪- rexploit = rerun‬‬

‫‪Add'l options‬‬ ‫‪Add'l options‬‬ ‫‪Add'l options‬‬


‫‪- post-specific vars‬‬ ‫‪- NOP=specific‬‬ ‫‪- Encoder-Specific‬‬
‫)‪(especially SESSION‬‬ ‫‪variables‬‬ ‫‪variables‬‬

‫‪Msfconsole: Search‬‬
‫للعثور على ‪ module‬معين‪ ،‬يمكن ذلك من خالل استخدام االمر "‪ "search‬في ‪ ،msfconsole‬والتي تتبع بناء الجملة التالي‪:‬‬
‫]‪msf> search [<keyword:string>…] [string‬‬
‫لتضييق عملية البحث‪ ،‬قم بتوفير مجموعات من >‪ ،<keyword:string‬والتي يتم تضمينهما معا باستخدام ‪ .AND‬السلسلة النهائية‪ ،‬والذي‬
‫هى اختياريه‪ ،‬يمكن أن تقع في أي مكان في وصف ‪ .module‬اإلصدارات القديمه من الميتاسبلويت (قبل النسخه ‪ )1.2‬استخدمت صيغ‬
‫مختلفة قليال‪ ،‬والتي تضمنت الخيار ‪ -t‬لتحديد ‪ module‬الذي من المقرر البحث عنه‪ ،‬والخيار ‪ -r‬لتحديد ترتيب الموثوقية‪.‬‬
‫مع الميتاسبلويت اإلصدار ‪ 4.1‬والذي يليله تدعم الكلمات االساسيه التاليه من اجل االمر ‪:search‬‬
‫‪ :name -‬هي سلسلة تطابق كل أو جزء من اسم ‪.module‬‬
‫‪ :path -‬موقعه داخل الميتاسبلويت حيث يجب البحث عن ‪.module‬‬
‫‪ :platform -‬نوع نظام التشغيل المرتبط مع ‪ module‬معين‪.‬‬
‫‪ :type -‬نوع ‪ module‬التي نسعى للبحث عنها (حتى كتابة هذه السطور ‪ ،auxiliary ،exploit‬و‪ Post‬فقط)‪ Payload module .‬ال‬
‫يتم تضمينه في األمر ‪ search‬في الوقت الراهن‪ ،‬والتي من المرجح أن تتغير في اإلصدارات المستقبلية من الميتاسبلويت‪.‬‬
‫‪ :app -‬هذا الخيار يتيح لنا تحديد ما إذا كنا مهتمون ب ‪ client-side exploit‬او ‪.server-side exploit‬‬
‫‪ :author -‬عمليات البحث عن ‪ module‬تكون على أساس كاتب ‪..module‬‬
‫‪ :cve -‬مع هذه الكلمة الرئيسية‪ ،‬يمكننا البحث عن ‪ exploit‬القائمه على نقاط الضعف المشتركة وسالسل التعرض (بما في ذلك سنة‬
‫اإلصدار) المعينه من قبل ميتري في ‪.https://cve.mitre.org‬‬
‫‪ :bid -‬البحث يمكن أن يجرى على أساس رقم ‪.Bugtraq ID‬‬
‫‪ :osvdb -‬يمكن إجراء عمليات البحث على أساس رقم ‪ ID‬الخاص بقواعد بيانات الثغرات مفتوحة المصدر‪.‬‬
‫حتى كتابة هذه السطور ‪ .‬الميتاسبلويت اإلصدار ‪ 1.2‬ال يدعم الكلمة "‪ ،"rank‬على الرغم من أن ذلك قد يتغير في المستقبل‪.‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪202‬‬

‫‪Msfconsole: Exploit Rankings‬‬


‫الميتاسبلويت يحتوي على تصنيف عام للموثوقية واألمان لكل ‪ ،exploit‬والتي تعرض من إخراج االمر ‪.search‬‬
‫كل ‪ exploit‬في الميتاسبلويت تم تعيينه إلى واحدة من الفئات التالية‪،Low ،Average ،Normal ،Good .Great ،Excellent :‬‬
‫و‪ .Manual‬مالحظة هذا التصنيف كثيرا ما يرتبط باى من ‪ exploit‬يمكنها التعرف تلقائيا على نوع النظام المستهدف (عادة نوع نظام‬
‫التشغيل وحزمة اللغة)‪.‬‬
‫أيضا‪ ،‬يرجى مالحظة ان تصنيفات الموثوقية )‪ (reliability rating‬ليست دائما دقيقة‪ .‬يجب التحقق منها في المختبر قبل استخدامها ضد‬
‫األهداف‪ .‬حتى "‪ "Excellent‬يمكنها أن يتسبب في تحطم الخدمة أو النظام لدى الهدف‪.‬‬

‫‪Msfconsole: Setting Values‬‬


‫يستخدم األمر ‪ set‬لتكوين ال ‪ module‬المختلفة داخل ‪ .msfconsole‬نحن نستخدم األمر ‪ set‬لتحديد المتغير والقيمة كما يلي‪:‬‬
‫>‪msf> set <variable> <value‬‬
‫القيم التى قمت بتعيينها تعتمد على ‪ module‬التي تستخدمه‪ .‬بعض القيم األكثر شيوعا التي وضعتها الميتاسبلويت تشمل‪:‬‬
‫‪ :PAYLOAD -‬يستخدم هذا المتغير لتحديد ‪ .payload‬مثل ‪.windows/meterpreter/bind_tcp‬‬
‫‪ :RHOST -‬هذا المتغير يشير عادة الى المضيف البعيد الذى سوف تهاجمه‪.‬‬
‫‪ :RPORT -‬هذا يدل على منفذ ‪ TCP‬البعيد الذى يجب تركيز الهجوم عليه‪.‬‬
‫‪ :LPORT -‬هذا هو منفذ ‪ TCP‬المحلي المرتبط ب ‪ .payload‬إذا كانت ‪ payload‬هي ‪ listening shell‬على الهدف‪ ،‬فان هذه‬
‫القيمة تشير الى المنفذ على الجهاز المستهدف حيث سيستمع لالتصال من الميتاسبلويت‪ .‬إذا كانت ‪ payload‬تشمل ‪reverse‬‬
‫‪ ،connection‬فان هذه القيمة تشير إلى المكان حيث يجب على الميتاسبلويت االستماع لالتصال الواردة من ‪ payload‬الى‬
‫الميتاسبلويت‪.‬‬
‫‪ :TARGET -‬يحدد هذا الرقم أي نوع ينتمى اليه آلة الهدف الذي يتم اختراقها‪ ،‬وعادة ما تشير إلى نسخة نظام التشغيل‪ ،‬وحزمة‬
‫الخدمة‪ ،‬وحزمة اللغة ربما‪ .‬انها مطلوبه في ‪ exploit‬التى ال يمكنها تلقائيا تحديد نوع الهدف‪ .‬لرؤية تعينات األرقام المقابله لنوع‬
‫الهدف لوضعه مع ‪ ،set‬فيجب عليك تشغيل االمر "‪."show targets‬‬
‫‪ :SRVHOST -‬يستخدم هذا المتغير لتحديد عنوان ‪ IP‬للجهاز المحلي الذى يعمل عليه الميتاسبلويت حيث يجب على الميتاسبلوت‬
‫االستماع لطلبات العميل الواردة‪.‬‬
‫‪ :SRVPORT -‬هذا البند يشير إلى منفذ ‪ TCP‬حيث يجب على الميتاسبلويت من عليه االستماع‪.‬‬
‫إذا لم توفر المتغير والقيمة‪ ،‬فان االمر ‪( set‬يعمل وحده) سوف يسرد جميع المتغيرات التي قمت بتحديدها حتى اآلن‪.‬‬
‫‪Msf> set‬‬
‫تذكر‪ ،‬لمعرفة المتغيرات التي تحتاج لوضعها من اجل ‪ module‬التي اخترتها‪ ،‬فضال عن قيمهم الحالية‪ ،‬يمكنك تشغيل "‪."show options‬‬
‫لمعرفة قيم المتغيرات التي قمت بتعيينها لمتغير معين‪ ،‬فقط قم بكتابة االمر "‪ "set‬متبوعا باسم المتغير‪.‬‬
‫إللغاء تعيين متغير‪ ،‬عليك فقط استخدام األمر "‪ ،"unset‬متبوعا باسم المتغير‪ .‬إللغاء تعيين المتغيرات كلها‪ .‬ببساطة اكتب "‪."unset all‬‬
‫تجدر اإلشارة إلى أنه يمكنك تعيين أي متغير‪ ،‬سواء كان ذات مغزى أم ال‪ ،‬إلى أي قيمة تريدها‪ .‬لذلك‪ ،‬إذا أخطأت اسم المتغير وإعطائه قيمة‪،‬‬
‫فان المتياسبلويت سوف ال يزال يقبل ذلك‪ .‬ومع ذلك‪ ،‬فإن المتغير الذي تريد تعينه لن يكون له قيمة‪ ،‬لذلك مما يؤدى الى ‪ module‬الخاص بك‬
‫لن يعمل‪ .‬وهكذا‪ ،‬عليك أن تكون حذرا لتجنب األخطاء المطبعية في المتغيرات‪.‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪203‬‬

‫يتم التعامل مع أسماء المتغيرات بطريقة تراعي ‪ case sensitive‬في بعض إصدارات الميتاسبلويت (وخاصة القديمة)‪ .‬اإلصدارات األخيرة‬
‫ال تنظر الى قضية ‪ .case sensitive‬بالرغم من ذلك‪ ،‬من أجل التوافق مع اإلصدارات القديمة من الميتاسبلويت‪ ،‬فيجب ان تعالج دائما أسماء‬
‫المتغيرات بطريقة ‪ case sensitive‬لحالة األحرف‪ .‬تقريبا‪ ،‬جميع المتغيرات في ‪ msfconsole‬تكون ‪.uppercase‬‬

‫‪Setting Global variables with setg‬‬


‫قبل تحديد ‪( module‬عبر استخدام االمر >‪ ،)use <module_name‬فان جميع المتغيرات التي تنشئ مع االمر "‪ "set‬تنشىء كانها عامة‪.‬‬
‫وسوف تطبق على كل ما تفعله في جلسة ‪ msfconsole‬من تلك النقطة‪ .‬حيث‪ ،‬بمجرد تحديد ‪ module‬مع االمر "‪ ،"use‬فان السياق‬
‫الخاص بك يتغير وبالتالي فإن أية متغيرات قمت بتأسيسها مع االمر "‪ "set‬من تلك النقطة تنطبق فقط على تلك ‪ .module‬إذا قمت بتغيير تلك‬
‫‪( module‬عن طريق تشغيل "‪ "use‬مرة أخرى للذهاب الى ‪ module‬أخر أو االمر "‪ ،)"back‬فإنك سوف تفقد قيم هذه المتغيرات‪.‬‬
‫للحفاظ على المتغيرات المحددة عامة تعمل مع الجميع (بحيث تطبق خارج أو عبر ‪ module‬المختلفة)‪ ،‬يمكنك تحديد عن طريق االمر‬
‫"‪ ،"setg‬كما يلي‪:‬‬
‫‪Msf> setg RHOST 10.11.12.13‬‬
‫يمكن تعريف أي متغير عبر ‪ set‬أو ‪ .setg‬االمر ‪ set‬يقوم بتعين المتغيرات بالنسبة لبيئة ‪ module‬الحالية‪ ،‬في حين يحدد األمر ‪setg‬‬
‫المتغيرات للبيئة العامه للكل‪ .‬وتجدر اإلشارة إلى أن المتغيرات التي يتم تعيينها مع االمر ‪ set‬و‪ setg‬ال يتم حفظها افتراضيا‪ ،‬وتختفي عندما‬
‫يخرج المستخدم من ‪.msfconsole‬‬

‫‪Flexibility in Specifying RHOSTS Targets‬‬


‫عند استخدام الميتاسبلويت الختراق الهدف‪ ،‬فنحن عادة نقوم بتكوين ‪ RHOST‬واحد الى الهدف الذي نريد اختراقه‪ .‬ومع ذلك‪ ،‬فإن بعض‬
‫‪( module‬ال سيما ‪ auxiliary module‬المستخدمة في الفحص) تسمح لنا بتحديد مجموعات من األهداف من خالل المتغير ‪RHOSTS‬‬
‫(الحظ أنه تم إضافة الحرف ‪ S‬الى ‪ .)RHOST‬الحظ ذلك هو انه ليس كل ‪ module‬تدعم ‪ .RHOSTS‬حيث ان بعضهم يعمل فقط مع‬
‫‪( RHSOT‬هدف واحد)‪ ،‬في حين ان االخرين يعملون مع ‪( RHSOTS‬اهداف متعدده)‪.‬‬
‫المتغير ‪ RHOSTS‬يمكن تعيينه بواسطة مجموعة متنوعة من الطرق المختلفة والمرنة والتى تسمح بوضع مجموعة من األجهزة المستهدفة‪.‬‬
‫أيضا يمكننا استخدام التدوين ‪ ،CIDR‬كما يلي‪:‬‬
‫‪msf> set RHOSTS 10.10.10.0/24‬‬
‫بدال من ذلك‪ ،‬يمكننا أن نستخدم تدوين نطاق الشبكة‪ ،‬مثل التالى‪:‬‬
‫‪msf> set RHOSTS 10.10.10.0-10.10.10.255‬‬
‫ويمكن ببساطة تحديد اسم الهدف (على سبيل المثال‪ )www.target.tgt ،‬تليها التدوين ‪ )/24( CIDR‬لتشير إلى أننا نريد كل شيء على‬
‫الشبكة ‪ /24‬حيث يوجد ‪ ،www.targcl.tgt‬وذلك باستخدام بناء الجملة التالي‪:‬‬
‫‪msf> set RHOSTS www.target.tgt/24‬‬
‫وأخيرا‪ ،‬يمكننا استخدام تدوين الملف‪ ،‬حيث لدينا اسم لهدف واحد‪ ،‬عنوان‪ ،IP‬أو مجموعة في كل سطر في الملف‪:‬‬
‫‪msf> set RHOSTS file:/tmp/targets.txt‬‬

‫‪RHOST and RHOST Variable and IPv6 Support‬‬


‫‪ RHOST‬ومتغيرات ‪ RHOSTS‬يمكن استخدامها أيضا مع عناوين ‪ ،IPv6‬مما يدل على ان الميتاسبلويت يسمح بفحص واختراق االجهزه‬
‫التي تستخدم البروتوكول ‪ .Ipv6‬العناوين ‪ IPv6‬هي ذات طول ‪ ،)16 bytes( 128 bits‬مع مجموعات من أربعة أرقام ‪ hex‬مفصولة‬
‫بنقطتين‪ .‬النقتطين المتتاليتين (‪ )::‬تشير الى ان كل أجزاء العنوان عباره عن أصفار‪.‬‬
‫الجزء الذي يمثل واجهة االسترجاع المحلية (‪ )local loopback‬ادئما يعبر عنه ب (‪.)::1‬‬
‫‪::1 = 0000:0000:0000:0000:0000:0000:0000:0001‬‬
‫عندما نقوم بتشغيل ‪ module‬الفحص عن المنافذ‪ ،‬فان المليتاسبلويت يقوم باعالمنا عن طريق وضع عنوان ‪ IPv6‬متبوعا بنقتطين ثم المنفذ‬
‫المفتوح كاالتى‪:‬‬
‫]*[‬ ‫‪TCP OPEN fe80:0000:0000:0000:xxxx:xxxx:xxxx:xxxx:22‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪204‬‬

‫جميع مكتبات ‪ socket‬التي تستخدمها ‪ module‬في الميتاسبلويت لالتصال تدعم ‪ .IPv6‬وبالتالي فإن مطوري ‪metasploit module‬‬
‫يمكنهم االستفادة من هذه ‪ IPv6‬المدمجه تلقائيا في جميع أعمال التنمية‪ ،‬عادة ال وجود للتفكير حول تدعيم ‪ .IPv6‬كما يتم تضمينه تلقائيا عند‬
‫يبني واحد باستخدام إطار الميتاسبلويت‪ .‬ويمكن لجميع ‪ auxiliary module‬استخدام اإلصدار ‪.IPv6‬‬

‫عالوة على ذلك‪ ،‬من اجل ‪ .payload‬فان الميتاسبلويت يشمل القدره على اتصال ‪ IPv6‬في شكل ‪ ،stagers‬بما في ذلك ‪bind_ipv6_tcp‬‬
‫و‪ .reverse_ipv6_tcp‬هذه ‪ stagers‬تعمل مع أكثر ‪ stages‬شعبية‪ ،‬بما في ذلك ‪ ،vnc ،shell‬و‪.Meterpreter‬‬

‫‪Variable for Windows SMB Exploit Modules‬‬


‫نقطة أخرى مثيرة لالهتمام حول المتغيرات يمكننا أن نعين قيمتها في ‪ msfconsole‬وهي ‪ .Metasploit SMB exploit module‬هذه‬
‫‪ modules‬جميعها تركز على مهاجمة الخدمه )‪ ،Server Message Block protocol (SMB‬والتي تستخدم من قبل أجهزة الويندوز‬
‫للمصادقة إلى الدومين ومنها الى خادم الملفات (خوادم وعمالء ‪ SAMBA‬تستخدم أيضا ‪.)SMB‬‬
‫هذه ‪ modules‬متاحة في الدليل ‪ ،exploit/windows/smb‬وتشمل بعض من هجمات ‪ SMB‬التي ال تحتاج إلى مصادقة مع الهدف (مثل‬
‫‪ exploit/windows/smb/ms08_067 exploit‬والتي سوف نشرحها بمزيد من التفصيل الحقا) وغيرها التي تطلب اعتماد ‪ admin‬أو‬
‫أوراق اعتماد مستخدم أخر (مثل ‪ ،exploit/windows/smb/psexec exploit‬والتي تجعل الجهاز الهدف يقوم بتشغيل ‪ payload‬التي‬
‫من اختيار المهاجم اختيار مع امتيازات النظام المحلي‪ ،‬وتعمل بطريقة مماثلة لبرنامج ‪)SysInternal’s psexec program‬‬
‫لالستفادة من ‪ SMB exploit‬التي تطلب اعتماد‪ ،‬فان الميتاسبلويت يتيح لنا تعيين المتغيرات ‪ SMBUser‬و‪ ،SMBPass‬كما هو مبين‪:‬‬
‫‪Msf > use exploit/windows/smb/psexec‬‬
‫‪Msf > set SMBUser Administrator‬‬
‫‪Msf > set SMBPass ThisIsThePassword‬‬
‫‪Msf > exploit‬‬
‫الشريحة التاليه‪ ،‬لتقديم أوراق اعتماد‪ .‬ولكن‪ ،‬هناك خيار قوي متاح لهذه المتغيرات في كل ‪ SMB exploit‬التى تطلب وثائق التفويض في‬
‫الميتاسبلويت (انظر السطور التالية)‪.‬‬
‫عند المصادقة لجلسات ‪ SMB‬باستخدام ‪ ،NTLMv1 ،LANMAN Challenge-Response‬او ‪ ،NTLMv2‬فان الويندوز في الواقع ال‬
‫يتحقق ما إذا كان المستخدم لديه كلمة المرور‪ .‬بدال من ذلك‪ ،‬فان هذه البروتوكوالت تتطلب سوى أن يكون المستخدم لديه ‪ hash‬كلمة المرور‪.‬‬
‫‪ Challenge/response‬باكامله يمكن أن يكتمل مع العلم بال ‪ hash‬فقط‪ .‬هذه الميزة هي قدرات المصادقة عبر كلمات المرور ألجهزة‬
‫ويندوز‪ ،‬وبمجرد المصادقة لخادم مرة واحده‪ ،‬فال يلزم إعادة كتابة بيانات االعتماد الخاصة بك للمصادقة إلى ملقم آخر‪.‬‬
‫ونظرا لهذه القدرة‪ ،‬فان العديد من أدوات الهجوم تدعم الهجمات "‪ ،"pass-the-hash‬مما يسمح للمهاجمين بمصادقة جلسات ‪SMB‬‬
‫باستخدام ‪ hash‬كلمة السر فقط‪ ،‬دون أن يعرف ما هي كلمة المرور‪ .‬البعض يشير الى هذا بأنه "‪ "password equivalency‬والتي تعنى‬
‫معادلة كلمة المرور وذلك ألن‪ ،‬المصادقة مع أهداف ويندوز عن طريق ‪ SMB‬باستخدام ‪ ،NTLMv I ،LANMAN C/R‬أو ‪،NTLMv2‬‬
‫فان ‪ hash‬يعادل وظيفيا كلمة المرور نفسها‪.‬‬
‫ما الذي يملكه الميتاسبلويت لفعل هذا؟ الخبر السار لمختبر االختراق هو أن يتم تمكين قدرات ‪ pass-the-hash‬لجميع ‪ SMB exploit‬التي‬
‫تتطلب أوراق االعتماد‪ ،‬ببساطة عن طريق تحديد متغير ‪ SMBPass‬بقيمة ‪ .LANMAN:NT hash‬الميتاسبلويت سوف يتعرف تلقائيا‬
‫إنك قد قدمت ‪ hash‬وليس كلمة السر‪ ،‬وسوف يصادق الهدف باستخدام هذ ‪ .hash‬من وجهة نظر مختبر االختراق‪ ،‬هذا مريح بشكل ال‬
‫يصدق‪ .‬سنستخدم هذه الميزة في عملية الحقة‪.‬‬

‫‪Saving variables‬‬
‫بمجرد تحديد المتغيرات (بواسطة اما ‪ set‬او ‪ ،)setg‬فيمكنك تشغيل االمر "‪ "save‬لحفظ قيم المتغيرات هذه إلى ملف تكوين الميتاسبلويت‪.‬‬
‫يتم تخزين هذا الملف في الدليل الرئيسي للمستخدم ميتاسبلويت في )‪ (.msf4‬في ملف يسمى )‪.(~/.msf4/config‬‬
‫في المرة القادمة التي تقوم فيها بتشغيل الميتاسبوليت فان قيم المتغيرات هذه التي تم حفظمها بواسطة االمر ‪ save‬سوف تعود مرة أخرى‪.‬‬
‫كن حذرا مع ‪ .save‬إذا قمت بحفظ قيم ‪ RHSOT‬معينه‪ ،‬ولم تقم بإعادة فحصها بعناية في المرة القادمة التي تستخدم الميتاسبلويت‪ ،‬قد‬
‫تجد نفسك تهاجم جهاز من هدف سابق بطريق الخطأ‪.‬‬
‫من المفيد أن تعيين بعض المتغيرات التي سوف تستخدمها في كثير من األحيان مع نفس القيمة وتخزين نتائجها مع األمر ‪ .save‬بعض‬
‫المتغيرات األكثر شيوعا مع ‪ save‬والتى من شأنها أن تبقي قيمتها لتشمل جلسات ‪:msfconsole‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪205‬‬

‫‪ :LHOST‬انت دائما لديك ‪ reverse shell‬عائد اليك إلى نفس المضيف الذى يقوم بتشغيل الميتاسبلويت‪ .‬وبالتالي‪ ،‬تعيين هذه القيمة الى‬
‫عنوان ‪ IP‬الذي تعمل عليه ‪ msfconsole‬هو مفيد‪.‬‬
‫‪ :LPORT‬غالبا ما يتم تعيين هذا المنفذ المحلي المستخدم من قبل ‪ payload‬إلى القيمة ‪ ،111 ،12‬أو ‪ .1212‬وذلك الن من المرجح أن يتم‬
‫السماح لهذه المنافذ من خالل جدار حماية‪ .‬يجب عليك التأكد من أن هذه المنافذ ليست قيد االستخدام عن طريق األمر "‪ "netstat -na‬في‬
‫موجه األوامر‪.‬‬
‫‪ :PAYLOAD‬كثير من مستخدمي الميتاسبلويت يعتمدون على ‪ payload‬معينة كاالفتراضية الخاصة بهم‪ ،‬مثل ‪ Meterpreter‬مع‬
‫اتصال ‪ ،reverse TCP‬أو ‪ (cmd.exe) shell‬مع اتصال ‪.listening TCP‬‬
‫‪ :SRVHOST‬من اجل ‪ passive exploit‬التي تنطوي على ان الميتاسبلويت يستمع لتقديم ‪ ،exploit back‬وهذه القيمة هي عنوان ‪IP‬‬
‫للجهاز الى يعمل عليه ‪ .msfconsole‬وعلى نحو مماثل‪ SRVPORT ،‬هو أيضا المنفذ على هذا الجهاز‪ ،‬وعادة ‪ ،111 ،12‬أو ‪.1212‬‬

‫االمر ‪ exploit‬واالمر ‪run‬‬


‫عندما تكون في سياق ‪ msfconsole ،)use <module_name>( exploit module‬يحتوي على واحد من أكثر األوامر رائعة فى لغة‬
‫وحدة التحكم وهو‪ .exploit :‬هذا األمر يجعل ‪ msfconsole‬بوضع ‪ modules‬التي اخترتها في حزمه "‪ "package‬ومن ثم إطالقها على‬
‫الهدف‪.‬‬
‫االمر "‪ "run‬مشابه لالمر ‪ .exploit‬وقد صمم هذا االمر ليتم استخدامه مع ‪( auxiliary module‬مثل ‪ ،)port scanner‬حيث ال تنطبق‬
‫الكلمة "‪ "exploit‬هنا‪.‬‬
‫إذا قامت ‪ exploit‬بانشاء جلسة مع الجهاز الهدف (إما ‪ shell‬أو ‪ ،)Meierpreter‬فان مستخدم الميتاسبلويت يستخدم االمر ‪ exploit‬مع‬
‫الخيار ‪ –z‬لجعل الميتاسبلويت يضع هذه الجلسه في الخلف "‪ "background‬تلقائيا بعد انشاء الجلسه‪ .‬بمثل هذه الطرييقه سوف تحصل على‬
‫المشغل >‪ msf‬بعد تأسيس الجلسه‪ ،‬مما يتيح لك إدارة أو التفاعل مع الجلسة باستخدام االمر ‪.session‬‬
‫الخيار ‪ -j‬يخبر ‪ msfconsole‬بتشغيل ‪ modules‬معينة كال ‪ .job‬مما يعطى المستخدم المشغل >‪ msf‬فورا‪ .‬وهذا مفيد لل ‪ exploit‬التي‬
‫تأخذ وقتا طويال لكي تعمل‪ .‬أو خاصة للوحدات ‪ auxiliary module‬التي تأخذ بعض الوقت‪ ،‬مثل فحص المنافذ والوحدات األخرى‪ .‬الخيار‬
‫"‪ "exploit -j‬يعمل مثل السمة & (‪ )backgrounding feature‬الموجوده في معظم اللينكس واليونكس وذلك لسحب ‪ job‬في الخلفية‬
‫بمجرد وضع ‪ job‬في الخلفيه يمكن التعامل معه وادارته من خالل االمر "‪."jobs‬‬
‫في كثير من األحيان‪ ،‬يتم استخدام األمر "‪ "exploit‬مع الخيارات ‪ -j‬و ‪ -z‬معا‪.‬‬
‫بعض ‪ exploit‬تدعم أيضا االمر "‪ ،"check‬والذي يجعل الميتاسبلويت يرى ما إذا كان الجهاز الهدف مسستسلم للثغره المختاره من دون‬
‫اختراق الجهاز‪ .‬يمكن أن يكون هذا األمر مفيدا في التحقق من وجود ثغرة قبل اختراق الهف‪.‬‬

‫إدارة الجلسه (‪)Managing Sessions‬‬


‫عندما يخترق الميتاسبلويت االله الهدف‪ ،‬فانه عادة يقوم بتنصيب جلسة تفاعلية (‪ )Interactive session‬مع هذا الهدف‪ .‬قد تكون الجلسه‬
‫‪ command shell‬مثل (‪ cmd.exe‬او ‪ ،)bourne shell‬او ‪ meterpreter‬او ‪ .VNC‬بعض الجلسات تنشاء بواسطة الميتاسبلويت‬
‫على منفذ االستماع على الجهاز المستهدف‪ ،‬في حين أن البعض اآلخر ذات اتصال عكسى )‪ (reverse shell connection‬قادم من الهدف‬
‫إلى آلة اختبار االختراق التي يعمل عليها الميتاسبلويت‪ .‬يتم ترقيم هذه الجلسات‪ ،‬الوميتاسبلويت يمكن أن يكون لديه العديد من االقام لجلسات‬
‫انشئت مع أهداف عديدة‪.‬‬
‫للحصول على قائمة بجميع الجلسات المفتوحة داخل ‪ .msfconsole‬وذلك من خالل تشغيل االمر "‪."sessions -l‬‬
‫فإن إخراج هذا األمر يظهر لك كل جلسة لديك‪ ،‬بما في ذلك مؤشر الى نوع كل جلسة (‪ .)shell or meterpreter‬بدال من ذلك‪ ،‬يمكن‬
‫تشغيل االمر "‪ "show sessions‬للحصول على نفس النتيجه‪.‬‬
‫للتفاعل مع جلسة معينة (بحيث يمكنك إدخال األوامر الى الهدف)‪ ،‬يمكنك ذلك من خالل تشغيل االتى‪:‬‬
‫>‪Msf> sessions -i <SessionNumber‬‬
‫عندما تكون بداخل جلسة‪ ،‬وترغب في الرجوع الى الموجه >‪( msf‬بمعنى حفظ الجلسه نشطة ولكن ارجاعها الى الخلف)‪ ،‬يمكنك فعل ذلك‬
‫ببساطة عن طريق النقرعلى ‪ .CTRL-Z‬وستكون الجلسه في قائمة الجلسات‪ ،‬في انتظارك الى العودة إليها في وقت الحق‪ .‬أو إذا كنت في‬
‫موجه ‪ ،Meterpreter‬يمكنك الرجوع والخروج من الجلسه الحاليه باستخدام االمر "‪."background‬‬

‫في بعض األحيان‪ ،‬عندما تستخدم الميتاسبلويت‪ ،‬وتقوم باختراق الجهاز الهدف باستخدام شل عادية )‪ (cmd.exe‬وثم تحتاج إلى الوصول إلى‬
‫بعض المزايا التي توفرها ‪( meterpreter payload‬اى تريد التحويل من ‪ shell‬الى ‪.)meterperter‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪206‬‬

‫يمكنك ذلك من خالل استخدام االمر "‪ "sessions –u‬في الموجه >‪ msf‬وليس ‪.cmd.exe‬‬
‫>‪Msf> sessions –u <SessionNumber‬‬
‫ثم يمكنك التفاعل مع هذه الشل باستخدام "‪."sessions –i‬‬
‫في بعض األحيان قد يرغب مستخدم ‪ meterpreter‬الذهاب الى ‪( )cmd.exe( shell‬يريد التحول من ‪ meterpreter‬الى ‪ )shell‬يمكنك‬
‫ذلك من خالل كتابة االمر "‪ "shell‬في موجه ‪ meterpreter‬وليس >‪.msf‬‬
‫‪Meterpreter> shell‬‬

‫‪Msfconsole: The route Command‬‬


‫يتضمن ‪ msfconsole‬االمر ‪ ،route‬والذي يجعل الميتاسبلويت يقوم بتسليم حزمه "‪ "packet‬من خالل جلسة ‪ meterpreter‬قائمة مع‬
‫هدف واحد‪ ،‬بحيث يمكن نقل الحزمه من هدف الى هدف اخر‪ .‬على سبيل المثال‪ ،‬فلنفترض ان المهاجم قام باختراق الة واحده "تسمى‬
‫‪ ،"target1‬وله جلسة ‪ Meterpreter‬معه‪ .‬المهاجم يمكنه استخدام االمر ‪ route‬مع الصيغة التاليه‪ ،‬ليخبر الميتاسبلويت بتوجيه كل حركة‬
‫المرور (‪ )socket traffic‬المنشئه من ‪ msfconsole‬الى الهدف (‪ )target2‬من خالل جلسة ‪ meterpreter‬في الهدف (‪.)target1‬‬
‫>‪Msf> route add <target2_subnet> <netmask> <sid‬‬
‫اآلن‪ ،‬سيتم ارسال اى ‪ exploit‬الى ‪ target’s subnet‬المحمله من ‪ msfconsole‬من على جهاز المهاجم‪ ،‬عبر جلسة ‪،meterpreter‬‬
‫ومن ثم ينتقل من ‪ target1‬الى ‪ .target2‬جميع الحزم لهذه ‪ exploit‬سوف تملك عنوان المصدر "‪ "source address‬الخاص ب‬
‫‪ target1‬وعنوان الجهه "‪ "destination address‬الخاص ب ‪ .target2‬فى الواقع‪ ،‬األمر ‪ route‬يسمح للمهاجم بالتحوير والتضليل من‬
‫خالل استغالل جهاز مخترق واستخدامه لمهاجمة جهاز اخر‪.‬‬
‫‪ Subnet mask‬في األمر ‪ route‬ببساطة تحدد مدى الدقة عنوان ‪ .target2_subnet IP address‬على سبيل المثال‪ ،‬لتوجيه حركة‬
‫المرور الى عنوان ‪ target2 IP‬معين (وليس ‪ ،)subnet‬فان ‪ Netmask‬يكون ‪ ،111.111.111.111‬مشيرا إلى أن كل من ‪ bits‬في‬
‫‪ target2_subnet‬تطبق الى المضيف الى ينبغي ان ترس حركة المرور اليه‪.‬‬

‫‪Further Pivoting with route & Proxychains‬‬


‫الن يكون من الرائع‪ ،‬إذا أمكننا تحويل حركة المرور الى تطبيق قائم على اتصال ‪ TCP‬من خالل جلسة ‪ meterpreter‬مع الجهاز الهدف‬
‫الى اى هدف اخر؟ بمعنى اخر‪ ،‬بدال من مجرد ارسال حركة مرور ‪ msfconsole‬من خالل جلسة ‪ Meterpreter‬التي أنشأتها بواسطة‬
‫‪ msfconsole‬نفسها‪ ،‬ماذا لو أمكن ارسال حركة مرور للتطبيقات أخرى قائمه على ‪ TCP‬من خالل الجلسه او بمعنى اخرى استخدام جلسة‬
‫‪ meterpreter‬كبروكسى لتطبيقات اخرى‪ .‬يمكننا أن ننجز هذه التقنية باستخدام ميزة ‪ route‬من ‪ msfconsole‬بالتزامن مع ‪SOCK4‬‬
‫‪ auxiliary module‬المدرجة في الميتاسبلويت وأداة ‪ proxychains‬المتاحة كتنزيل منفصل‪ ،‬وخلق محور فعال جدا‪.‬‬
‫لفهم كيفية عمل هذه التقنية‪ ،‬تذكر أوال انه يمكننا استخدام األمر ‪ msfconsole route‬لحمل أي حركة مرور ‪ TCP‬المولدة من‬
‫‪ msfconsole‬خالل جلسة ‪ .Meterpreter‬أيضا‪ ،‬الحظ ان الميتاسبلويت لديه الوحدة ‪ auxiliary module‬التي تنفذ ملقم البروكسى‬
‫‪ .SOCK4 proxy server‬تشغيل هذه ‪ module‬يجعل ‪ msfconsole‬يستمع كبروكسى ‪)SOCKS compatible proxy( SOCKS‬‬
‫على المنفذ الذي من اختيارنا (افتراضيا ‪ ،)TCP 1080‬ومن ثم اتصال كبروكسى الى نظام اخر‪ .‬يمكننا ان نستخدم فيما بعد اى برنامج عميل‬
‫متوافق مع ‪ SOCKS‬لالتصال من خالل البروكسى ‪ SOCKS‬الذي يعمل في ‪ .msfconsole‬يمكننا بعد ذلك استخدام أداة‬
‫‪ ،proxychains‬التي تتيح لنا تشغيل أي برنامج يولد حركة مرور ‪ ،TCP‬ومن ثم تغليف هذه ‪ traffic‬في البروتوكول ‪.SOCKS‬‬
‫لتنفيذ ‪ pivot‬لدينا‪ ،‬فإننا سوف نقوم أوال باختراق ‪ target1‬باستخدام بعض من ‪ ،exploit‬باستخدام ‪ Meterpreter‬في ‪ payload‬لدينا‪.‬‬
‫في الخطوه الثانيه‪ ،‬سنستخدم األمر ‪ route msfconsole‬لتوجيه أي من حركة المرور الناتجة من ‪ msfconsole‬الى ‪ target2‬من خالل‬
‫جلسة ‪ .Meterpreter‬في الخطوة ‪ ،3‬سوف نقوم باعداد ‪ msfconsole‬لتشغيل الوحده ‪ ،SOCKS4 auxiliary module‬مما يجعل‬
‫‪ msfconsole‬يستمع للمنفذ ‪TCP 1080‬من اجل حركة مرور ‪ .SOCKS‬أي حركة مرور تصل الى ‪ SOCKS proxy‬ليتم توجيهها الى‬
‫‪ target2‬سوف تعبر اوال من خالل جلسة ‪ .meterpreter‬وأخيرا‪ ،‬في الخطوة ‪ ،4‬نقوم باستدعاء أي أمر نريد‪ ،‬مثل ‪،Nessus Daemon‬‬
‫‪ ،ncat ،browser‬وأى شيء آخر يستخدم ‪.TCP‬‬
‫‪ Proxychains‬سوف يقوم بتحوير حركة المرور التي تم إنشاؤها بواسطة التطبيق لدينا في البروتوكول ‪ ،SOCKS‬وإرساله إلى وحدة‬
‫الميتاسبوليت ‪ ، SOCKS‬والتي سوف تقوم بإعادة تغليفه وإرساله الى وجهته‪ ،‬والذي يتم عبر جلسة ‪ .meterpreter‬في النهاية‪ .‬يتم توجيه‬
‫كل حركة المرور لدينا من التطبيق الذي يعمل على آلة المهاجم من ‪ target1‬الى ‪.target2‬‬
‫>‪- msf> use <exploit1‬‬
‫>‪- msf> set RHOST <target1‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪207‬‬

‫‪- msf> set PAYLOAD windows/meterpreter/bind_tcp‬‬


‫‪- msf> exploit‬‬
‫)‪- meterpreter> (CTRL+Z‬‬
‫>)‪- msf> route add <traget2_subnet> <netmask> <sid (session id for meterpreter session of target1‬‬
‫‪- msf> use auxiliary/server/socks4a‬‬
‫‪- msf> run‬‬
‫‪[*] Starting the socks4a proxy server‬‬
‫>‪- msf‬‬
‫‪$ proxychains nessusd –D‬‬
‫‪Or‬‬
‫‪$ proxychains firefox‬‬
‫‪Or‬‬
‫‪$ proxychains ncat target2 445‬‬
‫ملحوظه‪ :‬يجب اعداد الملف ‪ /etc/proxychains.conf‬مع االعدادت )‪ (socks4 127.0.0.1 1080‬لجعل ‪ proxychains‬يوجه جميع‬
‫حركة المرور من اى أداة الى ‪ msf SOCK4 module‬والذي يستمع على المنفذ ‪ 1111‬افتراضيا‪.‬‬

‫‪( Invoking Logging Options‬خيارات ملف السجل)‬


‫يوفر ‪ msfconsole‬بعض ميزات ‪ logging‬المتميزه وهي مفيدة جدا في تسجيل األعمال لتحليلها الحقا وإعداد التقارير‪ .‬للقيام بذلك تقوم‬
‫أوال‪ ،‬قم باعداد الميتاسبلويت الضافة ‪ timestamp‬على الشاشة لكافة اإلخراجات المرتبطة بتقديم ‪ exploit‬الى األهداف‪ ،‬وذلك من خالل‬
‫تعيين متغير ‪ TimestampOutput‬إلى قيمة "‪:"true‬‬
‫‪- msf> set TimestampOutput true‬‬
‫الميتاسبلويت يدعم أيضا تسجيل جميع المعلومات المكتوبة في جميع الجلسات التفاعلية (‪ command shell‬أو ‪ )meterpreter‬على أنظمة‬
‫الهدف المخترقه‪.‬‬
‫‪- msf> set SessionLogging true‬‬
‫مع اعداد قيمة المتغير "‪ "SessionLogging‬الى ‪ ،true‬فان الميتاسبلويت يقوم بإنشاء ملف لكل جلسة‪ ،‬والتي تبين جميع األوامر المكتوبة‬
‫في الجلسه واالنتاج المرتبط به‪ .‬يتم تخزين هذه الملفات (واحده لكل جلسة) في الدليل ‪ home‬الرئيسى‪ ،‬في "‪."~/.msf4/logs‬‬
‫الميتاسبلويت يدعم أيضا تسجيل جميع ما كتبت في ‪ .msfconsole‬والناتج من كل أمر‪ ،‬من خالل تشغيل‪:‬‬
‫‪- msf> set ConsoleLogging true‬‬
‫يتم تخزين معلومات ‪ msfconsole‬في ملف واحد يسمى "‪."~/.msf4/logs/console.log‬‬

‫بعد اختبار االختراق‪ ،‬فان الملفات ‪ metasploit log file‬سوف تحتوي على األرجح بعض المعلومات الحساسة عن الهدف‪ .‬ولذلك‪ ،‬يجب‬
‫عليك أن تنظر الى حذف أو أرشفة الملفات بشكل آمن‪.‬‬

‫‪Setting Debugging Levels‬‬


‫باإلضافة إلى ‪ .logging‬فان الميتاسبلويت يقدم معلومات التصحيح (‪ )debugging‬مفصلة جدا الستكشاف األخطاء وإصالحها‪ ،‬يتم التحكم‬
‫فيها عن طريق المتغير ‪ .LogLevel‬يمكنك تعيين هذا المتغير الى أي قيمة بين (‪ 1‬و‪ )3‬فإذا قمت بتعيينه أعلى من ‪ ،1‬فانه يتصرف كما لو أنه‬
‫تم تعيينه الى الوضع ‪.1‬‬
‫القيمة الصفر تولد رسائل ‪ log‬قليلة جدا‪ ،‬فقط مع الحد األدنى من التفاصيل‪ .‬القيمه ‪( 1‬المعروفة باسم "‪ )"extra‬يقدم معلومات أساسية جدا‬
‫حول األخطاء ورسائل التحذير‪ ،‬بوصفها لمحة خاطفة عما قد حصل من خطأ‪ .‬القيمه ‪ 0‬هو الوضع ‪ ،verbose‬الذي ينقل كمية ال بأس بها من‬
‫التفاصيل حول لماذا حدث هذا السلوك‪ ،‬مع المعلومات المقدمة حول األخطاء والتحذيرات واسبابهم‪ .‬الوضع ‪ 3‬المعروفة باسم "‪،"insanity‬‬
‫والتى توفر كمية هائلة من التفاصيل‪ ،‬بما في ذلك االنتقال بين الحاالت‪ ،‬التكرار من خالل الحلقات‪ ،‬استدعاء الدوال في غضون كود‪ ،‬فضال‬
‫عن أرقام األسطر في مختلف وحدات روبي حيث يظهر االجراءات المعطاه‪ .‬الحظ ان هناك بعض اإلجراءات تكون ‪،timestamped‬‬
‫وتشمل اآلخرين على أرقام أسطر التعليمات البرمجية ضمن وحدات روبي المحددة‪.‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪208‬‬

‫العديد من المستخدمين تقوم بتفعيل ‪ debug logging‬ومن ثم تفاجا بأنها ال ترى رسائل ‪ log‬معروضة في أي مكان على شاشة‬
‫‪ .msfconsole‬من المهم أن نتذكر أن ‪ debug logging‬يتم كتابته فقط إلى ملف ‪ ،log‬وال يتم عرضه على الشاشة‪ .‬وهكذا‪ ،‬لكي نرى‬
‫‪ ،debug logging‬يجب أن ننظر في محتويات الملف )‪.(~/.msf4/logs/framework.log‬‬

‫إذا كنت ترغب في معلومات التصحيح في الوقت الحقيقي كما تقوم بتشغيل ‪ .msfconsole‬ببساطة قم بتشغيل االمر التالى‪:‬‬
‫‪$tail -f ~/.msf4/logs/framework.log‬‬

‫االمر ‪connect‬‬
‫يشمل الميتاسبلويت أيضا على األمر ‪ ،connect‬والذي يجعل الميتاسبلويت يقوم باتصال من النوع ‪ TCP‬مع الهدف ذا العنوان ‪ IP‬والمنفذ‬
‫‪ .port‬بمجرد ان يتم االتصال‪ ،‬فان أي شيء سوف يكتب الى الترمنال يوف يتم ارساله الى منفذ الهدف‪.‬‬
‫لالتصال‪ ،‬يمكنك ببساطة تشغيل االمر‪:‬‬
‫>‪- msf> connect <IPaddr> <Dest_port‬‬
‫هذا االمر يقوم بعمل شبية بعمل ‪ ،netcat‬لذلك فإن بعض الخيارات هي مشابهة جدا لما هو مستخدم مع ‪.netcat‬‬
‫‪ -‬افتراضيا‪ ،‬منفذ المصدر لالتصال هو منفذ ‪( TCP‬أعلى من ‪ .)1211‬بدال من ذلك‪ ،‬يمكنك تحديد منفذ المصدر الستخدامه في‬
‫االتصال الخاص بك عن طريق ">‪."-P <source_port‬‬
‫‪ -‬الخيار ‪ -S‬يدعك تحدد عنوان ‪ IP‬المصدر‪ ،‬ولكن هذا يجب أن يكون العنوان المتوفر على الجهاز المحلي‪ .‬هذا الخيار ال يمكن أن‬
‫يستخدم من أجل ‪ ،spoofing‬ولكن بدال من ذلك‪ ،‬فإنه يتيح للمستخدم اختيار عنوان ‪ IP‬و‪/‬أو الواجهة التي يعمل عليها الميتاسبلويت‬
‫لتوجيه اتصال ‪.TCP‬‬
‫‪ -‬الخيار ‪ -i‬يتيح لك تحديد ملف إلرساله عبر االتصال‪.‬‬
‫‪ -‬مع الخيار ‪ -s‬الميتاسبلويت سوف يؤدي اتصال ‪ SSL‬الى النظام الهدف‪ .‬وهذا مفيد خصوصا في االتصال ب ‪ HTTPS‬الهدف‬
‫والدخول عن طريق طلبات ‪ HTTP‬المعدله مثل (‪ ،TRACE ،GET‬او ‪.)POST‬‬
‫‪ -‬الخيار ‪ -w‬يتيح لك تحديد عدد معين من الثواني لالنتظار قبل انتهاء المهلة (‪.)timeout‬‬
‫‪ -‬الخيار ‪ -z‬ال يرسل أية بيانات (وال حتى يقبل ‪ .)response‬انه يحاول فقط االتصال وثم يعود مرة أخرى الى الموجه >‪.msf‬‬

‫‪Commands from a Resource File‬‬


‫بدال من كتابة كل أمر يدويا في ‪ .msfconsole‬يمكننا تحقيق بعض اآلليه عن طريق إدخال األوامر في ملف يطلق عليه ‪،resousrce file‬‬
‫المحدد عادة باالمتداد "‪ .".rc‬ثم‪ ،‬يمكننا تشغيل جميع األوامر ضمن الملف عبر ‪ msfconsole‬فى أي وقت‪.‬‬
‫لنفترض اننا قمنا بوضع العديد من األوامر داخل ملف يسمى"‪ ."attack.rc‬يمكننا تشغيل األوامر الموجوده في هذا مع تشغيل ‪msfconsole‬‬
‫وذلك باستخدام الخيار ‪ -r‬كما يلي‪:‬‬
‫‪#msfconsole -r attack.rc‬‬
‫أو‪ ،‬لنفترض أننا بالفعل داخل ‪ .msfconsole‬يمكننا تشغيل األوامر من الملف عن طريق‪:‬‬
‫‪msf> resource attack.rc‬‬

‫‪Msfconsole: IRB - A Ruby Shell‬‬


‫االمر "‪ ،"irb‬بتنفيذ هذا االمر تقوم بالدخول على سكربت بلغة الروبي وتستطيع تنفيذ اوامر الروبي مباشرة من ‪ ،msfconsole‬وهذه الميزة‬
‫مفيدة جدا ً حيث تساعدك على فهم ‪ Framework‬ومكونات المياسبلويت بعمق‪.‬‬
‫باإلضافة إلى ذلك‪ ،‬يمكن للمستخدم إنشاء البرامج النصية روبي في الوقت الحقيقي‪ ،‬وتشغيلها فى الميتاسبوليت‪ ،‬واستخدام المكتبات وقدراتها‬
‫لمهاجمة األجهزة المستهدفة‪ .‬للخروج من ‪ ،irb shell‬يمكنك ببساطة تشغيل األمر "‪."exit‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪209‬‬

‫‪meterpreter 1.11‬‬
‫ما هو ‪Meterpreter‬؟‬
‫‪ Meterpreter‬هو اختصار ل ‪ ،Interpreter + Metasploit‬هو عباره عن بيئة شل "‪ "shell-style environment‬و ‪APIs‬‬
‫مرتبطة بها من اجل التفاعل والسيطرة على األجهزة المستهدفة المخترقه‪ ،‬مصممة لتكون سهله ومفيدة للمهاجمين‪ .‬وهو مكون ‪payload‬‬
‫للميتاسبلويت‪ ،‬يمكن القول إنه من اقوى المراحل المتاحة في ترسانة الميتاسبلويت‪ .‬ك ‪ ،stage‬فأنها تعمل مع العديد من ‪ stagers‬المختلفه‪ ،‬بما‬
‫في ذلك ‪ PassiveX ،reverse_tcp ،bind_tcp‬وغيرها‪.‬‬
‫يتم تنفيذ ‪ meterpreter‬نفسها كانها مكتبه "‪ "library‬يتم حقنها في العملية الضعيفة على مربع الهدف خالل عملية االختراق‪ .‬بمجرد‬
‫التحميل‪ ،‬فان ميزات ‪ meterpreter‬يمكن تمديدها مع مكتبات إضافية محملة في الوقت الحقيقى بعد االختراق‪ ،‬وإعطاء أوامر وقدرات‬
‫جديدة الى ‪.meterpreter‬‬
‫يتضمن ‪ meterpreter‬العشرات من األوامر التي تسمح لمستخدمينه بالتفاعل مع النظام المخترق‪ ،‬سحب المعلومات والتفاعل مع العمليات‪،‬‬
‫والملفات‪ ،‬واجهة المستخدم الرسومية‪ .‬وأكثر من ذلك بكثير‪.‬‬
‫كما يوفر ‪ meterpreter‬بيئة كبيرة الستخدام وتطوير االسكريبت ألتمتة اإلجراءات المختلفة على الجهاز المستهدف‪ ،‬مثل سحب المعلومات‬
‫حول أدوات األمن المثبته وتفعيل ‪ keystroke logger‬و‪.sniffing‬‬
‫حاليا‪ ،‬الميتاسبلويت يشمل على تطبيقات ‪ meterpreter‬لويندوز ‪ ،32-bit‬ويندوز ‪ ،64-bit‬لينكس ‪ 32-bit‬فقط‪ ،‬جافا‪ ،‬و‪ .PHP‬وهناك‬
‫عمل مستمر من اجل انشاء ‪ meterpreter‬مخصص لنظام التشغيل ‪ .Mac OS X‬ولكن لم يتم إصداره بعد‪.‬‬

‫‪Meterpreter Stealthiness‬‬
‫تم تصميم ‪ Meterpreter‬لكي يعمل كالشبح على جهاز الضحيه‪ ،‬افتراضيا ال يكتب اى شيء على القرص الصلب‪ ،‬وبدال من ذلك‪ ،‬فإنه‬
‫يعيش فقط في الذاكرة‪ ،‬كالمكتبة التي يتم تحميلها عند تشغيل العمليه‪ .‬هذا يساعد في تقليل الكشف عن اثاره "‪ "forensics artifacts‬على‬
‫نظام الملفات للجهاز الهدف‪ .‬باإلضافة إلى ذلك‪ ،‬كافة االتصاالت بين المهاجم والجهاز الهدف (الضحيه) تكون مشفرة باستخدام ‪ .TLS‬جلسة‬
‫‪ TLS‬يتم اعدادها تلقائيا‪ ،‬وال تتطلب أي تكوين‪.‬‬
‫وعالوة على ذلك‪ ،‬بسبب ان ‪ Meterpreter‬يتكون من المكتبة الرئيسية باإلضافة إلى مكتبات دعم إضافية‪ ،‬فليس هناك عملية منفصلة تظهر‬
‫في قائمة عملية الجهاز المستهدف‪ Meterpreter .‬يعيش داخل العملية المخترقه‪ ،‬أو بعض العمليات األخرى التى يهاجر اليها المهاجم‪.‬‬
‫األمر ‪ tasklist‬فى نظام التشغيل ويندوز مع الخيار ‪ -m‬يوفر لمسؤولي النظام القدرة على سرد قائمة ب ‪ DLLs‬المحملة نتيجة العمليات التي‬
‫تعمل االن‪ .‬في عملية التشغيل‪ .‬مع نظام الفلترة في ‪ tasklist‬يمكن التركيز على عملية معينة‪ ،‬يمكننا رؤية جميع ‪ DLLs‬المحمله نتيجة عملية‬
‫معينه‪ .‬فى اإلصدارات التي كانت قبل اإلصدار ‪ 1.1‬من الميتاسبلويت فان ‪ meterpreter‬يظهر في اإلخراج ‪.metsrv.dll‬‬
‫في االصدار ‪ .Metasploit 3.3‬تم تغيير األسلوب المستخدم فى تحميل ‪ DLL‬في الذاكرة‪ .‬سابقا‪ ،‬تم تحميل ‪ DLL‬في الذاكرة بطريقة‬
‫تسجيل ‪ DLL‬في الويندوز‪ ،‬مما يسمح لل ‪ admin‬رؤيته عبر قائمة المهام من خالل ‪ tasklist‬أو أداة أخرى تسرد قائمة ‪ DLL‬المسجلة‪.‬‬
‫اآلن‪ meterpreter ،‬يستخدم تقنية تسمى "‪ ."reflective DLL injection‬حيث يتم نسخ ‪ Meterpreter DLL‬داخل مساحة العملية‬
‫في الذاكرة الضعيفة باستخدام كود المهاجم نفسه‪ ،‬دون استدعاء أي من دوال الويندوز لتسجيل ‪ .DLL‬والنتيجة هي انه يصبح شبحا أكثر فال‬
‫يمكن أن ينظر اليه عن طريق ‪.Windows tasklist command‬‬

‫‪Meterpreter Core and Extensions‬‬


‫يتألف ‪ Meterpreter‬من عدة عناصر‪ ،‬جميعها مكتوبة كالمكتبة التي يتم تحميلها في عملية قيد التشغيل على الجهاز المستهدف باستخدام‬
‫تقنية ‪ ،reflective DLL injection‬والتي تنسخ اكواد ‪ Meterpreter‬في ذاكرة العمليه الهدف‪.‬‬
‫وأول هذه العناصر هو ‪ ،Meterpreter core‬الكود األساسي مكتوب بلغة السى والذي يعتمد عليه باقى ‪ Core .Meterpreter‬يوفر‬
‫ميزات االتصاالت لذلك ‪ Meterpreter‬يمكنه الحصول على األوامر عبر شبكة من ‪ .msfconsole‬يشمل أيضا على ‪ API calls‬وذلك‬
‫إلدارة ‪ ،channel‬إلدارة التواصل بين ‪ Meterpreter‬والعمليات األخرى التي يتم تشغيلها (يتم تشغيلها عبر ‪ meterpreter‬من خالل‬
‫االمر ">‪ .)"execute -f <ProgrameName‬ال ‪ Core‬يتعامل أيضا مع هجرة العملية "‪ ،"process migration‬مما يسمح لل‬
‫‪ Meterpreter‬التنقل بين العمليات على النظام المخترق‪ .‬وأخيرا‪ ،‬ال ‪ Core‬يتحكم أيضا في تحميل المكونات األخرى في ‪،Meterpreter‬‬
‫والتى توسع من قدراته‪ .‬هذه المكونات األخرى‪ ،‬غالبا ما يشار إليها باسم "‪ "extensions‬هي نفسها ‪ ،DLLs‬وتشمل ‪،Priv ،Stdapi‬‬
‫‪ ،Incognito‬الخ‪.‬‬
‫بعد تحميل ‪ Meterpreter core‬على الهدف‪ ،‬فإنه بدوره يستخدم لتحميل ‪ Stdapi extension‬تلقائيا (دون تدخل المستخدم)‪.‬‬
‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪210‬‬

‫‪ Stdapi‬يتم تنفيذه كبيئة مثل اليونكس للتفاعل مع نظام الملفات‪ ،‬والعمليات‪ ،‬والشبكة‪ ،windows registry ،‬والمكونات األخرى للنظام‪.‬‬
‫معظم عمل مختبرى االختراق هو القيام بالسيطرة على الهدف عن طريق ‪ Meterpreter‬والتي يتم تأسيسها على أساس ‪.Stdapi‬‬
‫بعد ذلك‪ ،‬إذا حدث اختراق لعملية تشغيل مع امتيازات المسؤول أو ‪ .SYSTEM‬فانه يتم تحميل ‪ Priv extension‬تلقائيا‪ .‬يوفر هذا المكون‬
‫القدرة على تفريغ ‪ Hash‬كلمة المرور من الجهاز الهدف (‪ ،)cracking or pass-the hash attack‬تصعيد االمتيازات (عن طريق‬
‫االمر ‪ getsystem‬و‪.NTFS timestamps via timestomp‬‬
‫‪ Extension‬آخر‪ ،‬متاح كخيار ليتم تحميله في ‪ Meterpreter‬عبر "استخدام األمر ‪ ،"use‬هو ‪ .Incongito‬هذه ‪ module‬تسمح‬
‫للمهاجم لجمع واستخدام ‪.Windows security tockens‬‬

‫‪Meterpreter as Shell‬‬
‫ال ‪ Meterpreter‬عند تحميله على النظام الهدف‪ ،‬يوفر بيئة شل مريحة‪ .‬موجه ‪ Meterpreter‬من السهل تحديده‪ ،‬ألنه يكون كاالتى‪:‬‬
‫> ‪meterpreter‬‬
‫كما في الشل‪ ،‬فإنه يوفر بعض القدرات المفيدة‪ ،‬بما في ذلك ‪( history‬التي يتم الوصول إليها باستخدام مفاتيح األسهم صعودا وهبوطا)‪،‬‬
‫واالكمال االلى بواسطة ‪ tab‬ألسماء األوامر الفريدة من نوعها‪ ،‬والقدرة على مسح الشاشة مع ‪.CTRL-L‬‬
‫يتضمن ‪ Meterpreter‬أيضا ميزة ‪( help‬تتم باستخدام االمر "‪ "help‬أو "؟") الذي يعرض ببساطة كل األوامر المتاحة‪ .‬الحظ أن أوامر‬
‫يتم فصلها وفقا الى ‪ extension‬الذي يوفر األمر بعينه‪ ،‬بما في ذلك ‪ ،Stdapi ،Core‬و‪ .Priv‬يتم تقسيم أوامر ‪ Stdapi‬إلى ‪،File system‬‬
‫‪ ،System ،Networking‬و‪ .User interface sections‬عندما يتم تحميل ‪ extension‬جديدة (مثل ‪ Incognito‬أو ‪ ،)sniffer‬يتم‬
‫إنشاء أقسام جديدة في قائمة المساعدة مع األوامر الجديدة لكل ‪.module‬‬

‫بعض من األوامر الفردية لديها معلومات االستخدام‪ ،‬والتي يمكن الوصول إليها ببساطة عن طريق تشغيل األمر في حد ذاته مع عدم وجود اى‬
‫من المعلمات‪ .‬أمثلة على تلك األوامر "‪( "cat‬لعرض محتويات الملف)‪( run ،‬الستدعاء ‪ ،)meterpreter script‬و‪( migrate‬لترحيل‬
‫‪ Meterpreter‬إلى عملية أخرى)‪.‬‬
‫األوامر أخرى (التي ال تحتاج إلى اى من المعلمات على اإلطالق) ال توفر معلومات االستخدام عند استدعاء األمر بدون أي معلمات‪ .‬بدال من‬
‫ذلك‪ ،‬يتم تنفيذ هذه األوامر ببساطة عن طريق ‪ .Meterpreter‬من المهم أن نالحظ ان أوامر ‪ Meterpreter‬هي مدمجه‪ .‬وهذا يعني أنها ال‬
‫تعمل منفصلة على الجهاز الهدف‪ ،‬وال تنشىء علميات جديده‪ .‬الكل يعمل من داخل ‪ Meterpreter‬نفسه‪.‬‬

‫‪Meterareter Core Commands‬‬


‫تظهر هذه الشريحة األوامر التي يدعمها عنصر ‪ Core‬من ‪ ،Meterpreter‬دعونا نلقي نظرة على بعض من تلك االوامرالمفيدة بالنسبة لنا‬
‫ولمختبر االختراق‬
‫األمر "‪( "load‬مثل االمر ‪ )use‬يتيح لنا تحميل ‪ extension‬إضافية في ‪ .Meterpreter‬مثل ‪ ،Incognito ،Priv‬أو ‪ ،sniffer‬كل‬
‫منها يوفر أوامر إضافية بالنسبة لنا الستخدامها‪.‬‬
‫االمر "‪ "migrate‬يسمح لنا بتحريك ‪ Meterpreter‬إلى عملية مختلفة على الجهاز الهدف‪ .‬وهذا مفيد خصوصا إذا كنا نريد االنتقال إلى‬
‫عملية أكثر استقرارا من عملية التى قمنا باالختراق من خاللها‪ .‬على سبيل المثال‪ ،‬ربما يستغل المهاجم المتصفح مع ‪ exploit‬تجعل المتصفح‬
‫ال يستجيب‪ .‬يمكن للمستخدم إيقاف المتصفح الذي ال يستجيب‪ ،‬لذلك نحن نرجح في ترحيله الى عملية أخرى قبل ان يذهب المتصفح بعيدا‪.‬‬
‫وهناك سبب آخر هو القفز الى العملية التي لها القدرة على التفاعل مع واجهة المستخدم الرسومية‪ ،‬لذلك يمكننا تشغيل ‪keystroke logger‬‬
‫أو مهاجمة ‪ .GUI‬عند الترحيل‪ ،‬فأنك تفقد كافة ‪ extesnions‬باستثناء ‪ Core‬و‪ .Stdapi‬الحظ أنه يمكنك فقط ترحيل العمليات الى العمليات‬
‫التي تملك نفس الصالحيات او اقل‪.‬‬
‫األمر "‪ "run‬يسمح لنا باستدعاء واحد أو أكثر من ‪ ،meterpreter scripts‬أدوات مفيدة جدا ألتمتة قدرات ‪ ،Meterpreter‬التي‬
‫سنناقشها بالمزيد من التفاصيل في وقت الحق‪ .‬وبالمثل‪ ،‬االمر "‪ "bgrun‬يقوم بتشغيل ‪ ،meterpreter scripts‬ولكن يضعهما في الخلفيه‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪211‬‬

‫لذلك يمكنك الحفاظ على الوصول الى ‪ .Metrepreter command shell‬األمر "‪ "bglist‬يستخدم لسرد قائمة بجميع ‪meterpreter‬‬
‫‪ scripts‬التي تعمل في الخلفيه‪ ،‬االمر "‪ "bgkill‬يستخدم لغلق‪/‬قتل ‪.meterpreter scripts‬‬
‫االمر "‪ "background‬يمكن استخدامه لوضع جلسة ‪ Metrepreter‬الحالية في خلفية ‪ .msfconsole‬أو‪ ،‬يمكنك فعل هذا ببساطة عن‬
‫طريق النقر فوق ‪ CTRL-Z‬تليها ‪ .Y‬مع هذا النهج‪ ،‬سوف نحصل على الموجه ‪ )msf>( msfconsole‬مرة أخرى‪ ،‬ويمكن بعد ذلك‬
‫التفاعل مع الميتاسبلويت‪ .‬للعودة الى جلسة ‪ meterpreter‬التي تعمل في الخلفية مرة أخرى‪ ،‬نحن نقوم أوال بتنفيذ االمر "‪"session -l‬‬
‫لسرد قائمة بالجلسات الموجوده‪ ،‬ثم نتبعه باالمر ">‪ "session -i <SessionNumber‬للتفاعل مع الجسلة مرة أخرى‪.‬‬
‫هناك أيضا العديد من األوامر المرتبطة بالتفاعل مع ‪ Channels .channel‬هي الطرق التي يتواصل فيها ‪ meterpreter‬مع العمليات‬
‫االخرى على النظام‪ .‬إذا تم استخدام ‪ meterpreter‬لتشغيل عملية أخرى (مثل ‪ ،)cmd.exe‬فان المستخدم يمكنه تحديد ‪ channel‬التي‬
‫يمكن انشائه مع هذه العملية األخرى للتفاعل مع ‪ Standard Input and Output‬للبرنامج‪.‬‬
‫‪ -‬االمر ‪ :channel‬يستخدم لرؤية القنوات النشطه الحاليه‪.‬‬
‫‪ -‬االمر ‪ :interact‬يستخدم للتفاعل مع ‪ channel‬معينه‪.‬‬
‫‪ -‬االمر ‪ :Read/write‬يستخدم الرسال البيانات من او الى القنوات‪.‬‬
‫‪ -‬االمر ‪ :close‬يستخدم الغالق القناة "‪."channel‬‬

‫‪Meterpreter Stdapi Capabilities: File System Commands‬‬


‫ترتبط بعض من العناصر األساسية ل ‪ Meterpreter’s Stdapi‬مع قدرته على التنقل‪ ،‬قراءة‪ ،‬والتالعب بنظام ملفات الهدف‪ .‬األوامر‬
‫المألوفة مثل ‪ ،pwd ،ls ،cat‬و‪ cd‬مدعمه‪ ،‬وتاخذ تاثيرها على الجهاز الذي يعمل عليه ‪ .meterpreter DLLs‬باإلضافة إلى ذلك‪،‬‬
‫‪ Meterpreter‬يدعم التفاعل مع بنية نظام الملفات المحلي للجهاز الذي يعمل عليه ‪( msfconsole‬جهاز المهاجم) عن طريق األوامر مثل‬
‫‪ )local print working directory( lpwd‬و‪ .)local change directory( lcd‬بهذه الطريقة‪ ،‬يمكن للمهاجم التنقل في كال أنظمة‬
‫الملفات المحلية والبعيدة‪ ،‬نقل الملفات بينهما بمرونة‪ ،‬مثل بروتوكول نقل الملفات ولكن أكثر مالءمة‪.‬‬
‫يستخدم األوامر ‪ uplodae‬و‪ download‬لنقل الملفات أو الدالئل بين آلة المهاجم والنظام الهدف‪ .‬عادة‪ ،‬يتم استخدام هذه الميزة لنقل الملفات‬
‫الفردية‪ ،‬وهي أيضا تدعم نقل الدليل باكمله‪ .‬عندما يتحرك الدليل‪ ،‬سيتم إنشاء دليل بنفس االسم على الجهاز الهدف‪ ،‬وسيتم نسخ جميع الملفات‬
‫في الدليل الى الجهاز الهدف‪ .‬النسخ لن ينشىء مجلدات فرعيه‪ ،‬ومنهالن يحمل الملفات من هذه المجلدات الفرعيه‪.‬‬
‫األمر ‪ edit‬يتيح للمهاجم تحرير الملف من الجهاز المستهدف‪ .‬يتم نسخ الملف بشفافية آللة المهاجم مؤقتا‪ ،‬وفتحها في المحرر‪ .‬بمجرد االنتاء‬
‫من تحرير الملف‪ .‬الميتاسبلويت يقوم باعادته الى الهدف‪.‬‬

‫أوامر التعامل مع الشبكه (‪)Meterpreter Stdapi Capabilities: Networking Commands‬‬


‫االمر ‪ ،ipconfig‬الذي يعرض تفاصيل كروت الشبكة المتوفرة بالنظام‪ ،‬بما في ذلك اسم الواجهه‪ ،‬عنوان ‪ ،MAC‬عنوان ‪ ،IP‬و‪netmask‬‬
‫لكل واجه‪.‬‬
‫االمر ‪ ،route‬يعرض ‪ routing table‬للنظام‪ ،‬ويمكن استخدامه في إضافة أو حذف ‪ .route‬من المهم تجنب الخلط بين األمر‬
‫‪ msfconsole route‬واالمر ‪.meterpreter route‬‬
‫االمر ‪ ،portfwd‬والتي تقوم بتنفذ ‪ ،TCP relays‬مع تطور مثير لالهتمام ومفيد جدا‪ :‬حيث يتم ترحيل البيانات خالل جلسة ‪Meterpreter‬‬
‫من منفذ االستماع على آلة المهاجم‪ ،‬خالل ‪ Meterpreter‬الذي يعمل على النظام الهدف‪ ،‬موجهة إلى منفذ ‪ TCP‬على الجهاز المستهدف‬
‫األخر‪ .‬لتوضيح ميزة ‪ port forwarding‬من ‪ ،Meterpreter‬انظر في هذا المثال‪ .‬لنفترض ان المهاجم قام باختراق الة تسمى‬
‫‪ ،target1‬وقام بتحميل ‪ meterpreter‬على هذا النظام‪ .‬فى جلسة ‪ meterpreter‬المهاجم يكتب االمر التالى‪:‬‬
‫‪meterpreter> portfwd add -l 1111 -p 2222 -r target2‬‬
‫هذا األمر جعل آلة المهاجم تستمع على منفذ ‪ .1111 TCP‬أي اتصال يأتي على هذا المنفذ سوف يتم ارسالة عبر جلسة ‪ meterpreter‬بين‬
‫الة المهاجم و‪ .target1‬ثم‪ ،‬يتم ارسال االتصال من ‪ traget1‬الى منفذ ‪ 1111 TCP‬في ‪ .target2‬بهذه الطريقه‪ ،‬يمكن للمهاجم إجراء‬
‫اتصال ‪ TCP‬على جهاز المهاجم‪.‬‬

‫‪Meterpreter Stdapi Capabilities: System Commands‬‬


‫يشمل ‪ Stdapi Meterpreter extension‬أيضا العديد من األوامر للتفاعل مع نظام تشغيل الهدف‪.‬‬
‫األمر ‪ ،sysinfo‬هو مفيدة بشكل خاص‪ ،‬حيث أنه يظهر اسم المضيف (‪ ،)hostname‬اصدار نظام التشغيل (بما في ذلك ‪،)service pack‬‬
‫‪( CPU architecture‬مثل ‪ x86‬أو ‪ ،)x64‬وإصدار اللغة من نظام التشغيل (مثل ‪ en_US‬للواليات المتحده)‪.‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪212‬‬

‫األمر ‪ ،clearev‬مسح سجالت األحداث (‪ )event log‬من الجهاز‪ .‬أنه يزيل كل سجالت األحداث الرئيسية الثالثة‪،system ،application :‬‬
‫‪ .security‬حاليا‪ ،‬ال توجد وسيلة الختيار واحد فقط من السجالت‪ .‬بواسطة تحديد ">‪ ،"clearev <logname‬يمكن ان تخبر ‪meterpreter‬‬
‫بإزالة ملف سجل معين باإلضافة الى السجالت الثالثه الرئيسيه‪ .‬مسح تلك السجالت الرئيسية الثالثة سوف يتسبب في جعل الويندوز ينشا‬
‫‪ event‬يقول انه تم مسح السجالت‪ ،‬تاركا وراءه الحدث هذا في السجالت‪ .‬حتى كتابة هذه السطور ‪ Meterpreter‬ال يقدم قدرات تحرير‬
‫السجل‪ .‬حذف السجل هو اقتراح كل شيء أو ال شيء‪.‬‬
‫األوامر ‪ reboot‬و‪ ،shutdown‬هي باألحرى تفسر نفسها‪ .‬أنها ال توفر أي خيارات (مثل تأخير الوقت قبل اغالق)‪ ،‬ولكن اتخاذ اإلجراء‬
‫الذي يوحي االسم عليه‪.‬‬
‫األمر ‪ ،reg‬يسمح للمستخدم التفاعل مع ‪ registery‬على الجهاز المستهدف‪ ،‬قراءة المفاتيح والقيم‪ ،‬أنشائهم‪ ،‬تعديلهم‪ ،‬أو حذفهم‪.‬‬

‫يشمل ‪ Stdapi extension‬أيضا على العديد من األوامر التى تتفاعل مع العمليات الجارية‪.‬‬
‫االمر ‪ ،getpid‬يستخدم لتحديد ‪ PID‬الخاص بالعمليه التي يعمل بداخلها ‪.meterpreter‬‬
‫االمر ‪ ،getuid‬يستخدم اسم المستخدم الحالي وصالحياته‪.‬‬
‫االمر ‪ ،ps‬يستخدم لعرض العمليات الجاريه على النظام الهدف‪.‬‬
‫االمر ‪ ،execute‬يتيح لك تشغيل العملية التى من اختيارك على الجهاز‪ .‬وعادة ما يتم استدعاء ذلك مع الخيار "‪ "-f‬لتشغيل العملية من الملف‬
‫القابل للتنفيذ‪ .‬إذا قمت بتحديد الخيار "‪ ،"-c‬يتم انشاء قناة "‪ "channelized‬ليوضع به اإلدخال القياسي (‪ )Input‬والمخارج القياسيه (‪،)Output‬‬
‫مع عرض رقم القناة على الناتج (‪ )Output‬عند إنشاء القناة‪ .‬ثم يمكنك التفاعل مع تلك القناة باستخدام األمر ">‪ "interact <N‬مع تحديد‬
‫رقم القناة‪.‬‬
‫األمر "‪ ،"shell‬كما ناقشنا في وقت سابق‪ ،‬يقوم بتشغيل الشل على نظام تشغيل الهدف‪ ،‬انشاء القنوات لإلدخال والمخرجات تلقائيا‪ ،‬والتفاعل‬
‫تلقائيا مع القناة‪.‬‬
‫االمر ‪ ،kill‬النهاء عملية معينه‪.‬‬
‫االمر ‪ ،steal_token‬يتيح للمستخدم تحديد ‪ PlD‬معين‪ .‬حيث يقوم الميتاسبلويت بسرقة رموز وصول المستخدم (‪)user access tocken‬‬
‫لعملية التمثيل على آلة ويندوز‪ .‬وتستخدم هذه الرموز من قبل ويندوز للتحكم فى الدخول‪ ،‬ويمكن أن تأتي في متناول اليدين النتحال شخصية‬
‫‪ admin‬أو مستخدمين آخرين على الجهاز‪ .‬ونحن سوف نغطي سرقة ‪ tocken‬في مزيد من التفاصيل في وقت الحق‪.‬‬
‫وأخيرا االمر ‪ ،rev2self‬والتي غالبا ما تستخدم باالشتراك مع سرقة رموز امن الويندوز (‪ .)windows security token‬االمر ‪rev2self‬‬
‫يجعل جلسة ‪ Meterpreter‬تتجاهل أي ‪ security token‬تستخدم النتحال صفة المستخدمين اآلخرين‪ ،‬تعود ‪ Meterpreter‬المتيازاتها‬
‫المستخدم األصلي الستغالل العملية‪.‬‬

‫‪Meterpreter Stdapi Capabilities: User Interface Commands‬‬


‫يتضمن ‪ Meterpreter‬العديد من األوامر للتفاعل مع واجهة المستخدم (سطح المكتب‪ ،‬واجهة المستخدم الرسومية‪ ،‬ولوحة المفاتيح) من‬
‫الجهاز الهدف‪.‬‬
‫األمر ‪ ،enumdesktops‬يعرض جلسات سطح المكتب المتوفرة على الكمبيوتر الهدف‪ .‬عادة‪ ،‬على جهاز العميل‪ ،‬هناك سطح المكتب‬
‫(‪ )desktop‬رئيسي للمستخدم (سطح المكتب االفتراضي)‪ ،‬باإلضافة إلى سطح المكتب المرتبط ب ‪( winlogon‬حيث يمكن للمستخدم ادخال‬
‫اسم المستخدم وكلمة المرور)‪ .‬ولكن بالنسبه ألجهزة ‪ ،terminal server machine‬فانها تملك العديد من أسطح المكتب النشطة‪ ،‬والتي قد‬
‫يريد المهاجم جردها باستخدام األمر ‪.enumdesktops‬‬
‫االمر ‪ ،setdesktop‬يتيح لمستخدم ‪ Meterpreter‬اختيار سطح المكتب للتفاعل معه‪ ،‬من خالل تحديد ‪workstation\\desktop name‬‬
‫والتي تم تحديدها من قبل االمر ‪.enumdesktops‬‬
‫االمر ‪ ،screenshot‬يجعل ‪ Meterpreter‬ينشا صورة ‪ jpg‬عشوائيا وتكون عباره عن لقطة لسطح مكتب المستخدم الحالي‪ ،‬ثم تشغيل‬
‫المتصفح في ‪ msfconsole‬لعرض الشاشه‪.‬‬
‫االمر ‪ ،keyscan_start‬وهو ‪ ،keystrock logger‬ولتشغيل هذا االمر يجب عمل ‪ migration‬الى العملية التي يمكنها الوصول الى ‪،GUI‬‬
‫مثل ‪ explorer.exe‬أو ‪ Keystrock .winlogon.exe‬يتم تخزينها في ‪ ،buffer‬مع مفاتيح خاصة‪ .‬يمكنك التخلص من ‪Keystrock‬‬
‫من ‪ buffer‬مع األمر ‪ .keyscan_dump‬اليقاف ‪ keystrock logger‬يتم ذلك من خالل االمر ‪.keyscan_stop‬‬
‫األمر ‪ ،idletime‬يعرض كمية الوقت لمستخدم لمس الماوس اخر مرة أو لوحة المفاتيح‪ ،‬مؤشر مفيد عما إذا كان شخص ما يجلس على وحدة‬
‫التحكم الكمبيوتر‪.‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪213‬‬

‫األمر ‪ ،uictl‬وهو اختصار ل "‪ ."User Interface Control‬يسمح هذا األمر للمستخدم ‪ Meterpreter‬من تعطيل لوحة المفاتيح و‪/‬أو‬
‫الماوس للهدف‪ .‬تعطيل لوحة المفاتيح والماوس هو إجراء آخر يمكن أن يسبب مشاكل في اختبار االختراق‪.‬‬

‫‪Meterpreter Stdapi Capabilities: Webcam & Mic Commands‬‬


‫يتضمن ‪ Meterpreter‬العديد من األوامر للتفاعل مع كاميرا ويب وميكروفون اآللة المخترقه‪ .‬أوال‪ ،‬يمكن للمهاجمين استخدام االمر‬
‫"‪ "webcam_list‬لرؤية ما إذا كان هناك كاميرا متوافقه على الجهاز المستهدف‪ .‬سيتم منح كل واحد عددا‪ .‬المهاجم أيضا يمكنه استخدام‬
‫االمر ‪ webcam_snap‬لرقم الكاميرا المناسبه الخذ إطار للقطة فردى في هئية صورة ‪ .JPEG‬يمكن للمهاجم تحديد نوعية ‪ JPEG‬التي‬
‫تتراوح بين ‪( 1‬جودة منخفضة) الى ‪( 122‬أفضل جودة)‪ .‬االفتراضي هو ‪.12‬‬
‫أيضا ‪ Meterpreter‬يمكنه تفعيل الميكروفون على جهاز هدف مع األمر ‪ .record_mic‬المهاجم يمكنه ببساطة تحديد عدد الثواني لتسجيل‬
‫الصوت مع الخيار ‪( -d N‬حيث ‪ N‬هو عدد الثواني)‪ .‬سيتم تفعيل الميكروفون لمدة محدده‪ ،‬وستتم كتابة كل الصوت الى ملف ‪ wav‬في جهاز‬
‫المهاجم في الدليل ‪ .msf4‬افتراضيا‪ .‬يمكن للمهاجم تحديد موقع اخر مختلف لهذا الملف‪.‬‬

‫‪Meterpreter Priv Extension: Hashdump & Timestomp‬‬


‫‪ The priv extension of the Meterpreter‬يتضمن األوامر ‪ hashdump‬و‪ .timestomp‬األمر ‪ hashdump‬يستخدم لجلب‬
‫هاش كلمة المرور من قاعدة البيانات ‪ SAM‬من ذاكرة جهاز التشغيل الذي يعمل عليه ‪ ،Meterpreter‬ال يلزم الوصول إلى نظام الملفات‪،‬‬
‫مما يترك القليل من المعلومات في نظام الملفات عن حقيقة أن الهاش تم اختراقه‪ .‬وبمجرد جلب ‪ ،hash‬فانه يمكن كسر كلمة المرور باستخدام‬
‫أدوات (مثل ‪ )John the Ripper‬أو هجوم ‪ pass-the-hash‬لمصادقة جهاز ويندوز عبر ‪ SMB‬من خالل توفير ‪ Hash‬بدال من كلمة‬
‫مرور‪.‬‬
‫االمر ‪ timestomp‬يقوم بتغير الطوابع الزمنية على الملفات في ‪ .NTFS partition‬أي ما يسمى ‪،Modified( MACE times‬‬
‫‪ ،Created ،Accessed‬و‪ )Entery time alter‬الى الملف يمكنه تغير اى قيمة يريدها المهاجم‪ .‬بدال من ذلك‪ timestomp ،‬يمكن‬
‫استخدامه لتعيين كافة ‪ MACE time‬لملف معين بنفس القيم لدي بعض الملفات األخرى من اختيار المهاجم‪.‬‬

‫‪Meterpreter Priv Extension: The getsystem Command‬‬


‫االمر ‪ ،getsystem‬يوفر العديد من التقنيات لتصعيد االمتيازات المحليه الى مستوى الوصول ‪ system-level‬على آلة الويندوز‪ .‬تذكر‪،‬‬
‫‪ Priv extension‬واالمر ‪ getsystem‬يتم تحميله تلقائيا فقط في حال اختراق عملية ذات صالحيات ‪ admin‬او ‪ system‬بالفعل‪ .‬لذلك‪،‬‬
‫لالستفادة من قدرة ‪ getsystem‬لكسب مستوى الوصول ‪ system-level‬عندما ال تملك صالحيات ‪ ،admin‬فإنك سوف تحتاج إلى تحميله‬
‫يدويا عن طريق تشغيل‪:‬‬
‫‪Meterpreter > use priv‬‬
‫بمجرد تحميل ‪ ،priv extension‬فان ‪ getsystem‬يدعم العديد من الطرق المختلفه لتصعيد ‪ meterpreter process‬الى مستوى‬
‫الوصول ‪ .system-level‬المستخدم يمكنه اختيار التقنية التي يريد استخدامها من خالل تحديد "‪ "-t‬يعقبه عدد صحيح يحدد بالضبط التقنية‬
‫التي يريد تطبيقها‪ .‬مع "‪ "-t 0‬فهذا يعنى تطبيق جميع التقنيات حتى ينجح واحد‪ .‬إذا لم يتم تحديد ‪ ،-t‬فان ‪ getsystem‬يتصرف كما لو ان تم‬
‫تعين ‪ -t‬الى )‪ .(-t 0‬وتشمل التقنيات المتاحة ‪( abusing impersonation tokens‬والتي تحاول تكرار رموز التحكم في الوصول لخدمات‬
‫‪ ،SYSTEM-level‬من خالل ‪ exploiting weak permissions ofservices ،)MS09-012‬و‪ abusing BIOS support‬لتطبيقات‬
‫‪ 16-bit‬لخداع الكيرنل لتشغيل الكود بامتيازا ‪ .)MS10-15( system‬من المرجح إضافة المزيد من تقنيات تصعيد االمتياز في المستقبل‪.‬‬

‫‪Windows Security Tokens and Meterpreter Incognito‬‬


‫‪ Extension‬اخر مفيد من ‪ Meterpreter‬وهو ‪ ،Incognito‬والذي يستخدم في تجميع الكثير من رموز امان ويندوز ( ‪Windows‬‬
‫‪ )Security Token‬والتالعب بها‪ .‬على آلة ويندوز‪ ،‬كل عملية تعمل لديها واحد أو أكثر من الرموز األمنية (‪)Security Token‬‬
‫المرتبطة معها‪ .‬وتستخدم هذه الرموز األمنية التي كتبها كيرنل الويندوز للتحكم في الوصول الى الموارد المحلية‪ ،‬والوصول إلى الموارد على‬
‫أجهزة ويندوز عن بعد‪ .‬عندما تحاول عملية الوصول إلى ‪ ،object‬مثل ملف أو دليل أو مفتاح تسجيل‪ .‬الكيرنل يتحقق لمعرفة ما إذا كان لديه‬
‫رمز األمان المناسب‪ .‬وبالتالي فان ‪ Token‬يعمل مثل الكعكة القليله لتقديم العملية للكيرنل عندما يريد الوصول إلى الموارد‪.‬‬
‫تبدأ كل عملية تشغيل مع ‪ .primary security token‬عادة ما يرتبط واحد مع المستخدم الذي قام باستدعاء العملية‪ ،‬أو مع ‪ token‬على‬
‫مستوى ‪ .SYSTEM‬يمكن للعمليات الحصول على رموز إضافية عن طريق التمثيل (‪( )impersonation‬التي تستخدم عادة لعمليات‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪214‬‬

‫تسجيل الدخول الغير تفاعلية‪ ،‬مثل الوصول إلى ملقم الملفات) و‪( delegation‬التي تستخدم عادة لعمليات تسجيل الدخول التفاعلية‪ ،‬في وحدة‬
‫التحكم‪ ،‬من خالل سطح المكتب عن بعد‪/‬خدمات الترمنال‪ ،‬أو أداة ‪ third-party‬مثل ‪.)Citrix‬‬
‫المهاجم يمكنه استخدام ‪ incognito‬لسرد قائمة بجميع الرموز األمنية )‪ (security tokens‬المتاحة على الجهاز‪ ،‬بما في ذلك رموز النظام‬
‫المحلي (‪ ،)local system token‬الرموز االدارية المحلية (‪ ،)local admin token‬فضال عن الرموز األمنية المرتبطة المستخدمين‬
‫الذين يقومون حاليا بالوصول الى الجهاز‪ ،‬مثل المستخدمين (المشاركين على الجهاز باستخدام ‪ .)SMB‬أو المستخدمين الذين قاموا بتسجيل‬
‫الدخول عن طريق خدمات الترمنال‪ .‬ولتحقيق ذلك‪ ،‬علينا أوال تحميل ‪ .incognito extension‬ثم‪ ،‬تشغيل ‪ list_tokens‬مع الخيار ‪–u‬‬
‫لسردهم على حسب اسم المستخدم الفريد (‪ -g‬يسردهم على حسب اسم المجموعة)‪.‬‬

‫‪Meterpreter Token Impersonation‬‬


‫المهاجم يمكنه انتزاع تلك الرموز األمنية واستخدامها لعملية ‪ .Impersonation‬في ‪ Meterpreter‬مع ‪ incognito‬المحمله‪ ،‬يمكننا‬
‫تحقيق ذلك عن طريق استخدام االمر "‪ ،"impersonate_token‬يليه اسم الدومين حيث يتم تعريف المستخدم (والتي يتم تضمينها في‬
‫إخراج األمر ‪ ،)list_token‬ثم اثنين من الخطوط المائلة العكسية‪ ،‬ثم اسم المستخدم الذي نريد انتحاله‪ .‬إذا كان اسم الدومين يشمل مسافات‪،‬‬
‫فاننا نضع اسم الدومين بالكامل مع اسم المستخدم داخل ("")‪.‬‬
‫‪Meterpreter > impersonate_token DOMAIN\\user‬‬
‫بدال من ذلك‪ ،‬بدال من استخدام ميزة سرقة الرموز من ‪ ،incognito extension‬فقد تم تنفيذ قدرات سرقة الرموز في ‪ stdapi‬نفسها‪ .‬يمكنك‬
‫ذلك عن طريق تشغيل االمر ‪ ،ps‬وذلك لعرض جميع العمليات الجاريه (بما في ذلك أسماء الحسابات التي تعمل تحتها)‪ .‬ثم‪ ،‬استخدام االمر‬
‫‪ steal_token‬متبوعا ‪ PID‬سوف يجلب الرموزالمرتبط بهذه العمليه‪ ،‬والسماح لل ‪ Meterpreter‬بانتحال صفة المستخدم للوصول إلى‬
‫الموارد المحلية والبعيدة‪.‬‬
‫هناك طريقة أخرى الستخدام الرموز األمنية النتحال صفة مستخدم آخر للوصول إلى األجهزة البعيدة‪ .‬لنفترض ان المهاجم قام باختراق الهدف‬
‫‪ target1‬وقام بتحميل ‪ .Meterpreter‬إذا كان ‪ USER2‬هو مسؤول الدومين‪ ،‬قام بتسجيل الدخول من جهاز ‪ Target2‬إلى ‪.Target1‬‬
‫هنا المهاجم يمكنه انتزاع رموز ‪ USER2‬من ‪ target1‬حيث ان هذه الرموز (‪ )token‬يتم تخزينها مؤقتا على الجهاز حتى بعد قيام‬
‫المستخدم بتسجيل الخروج‪ ،‬لمدة تصل إلى ساعة واحدة (وفي بعض الحاالت أطول)‪ .‬وحتى بعد قيام المستخدم بتسجيل الخروج‪.‬‬
‫ثم‪ ،‬يمكن للمهاجم استخدام ‪ impersonate_token‬أو ‪ steal_token‬لتطبيق رموز ‪ USER2‬لعملية ‪ meterpreter‬الحاليه‪ .‬يمكن‬
‫للمهاجم الوصول الى ‪ Target4‬وأي نظام آخر يكون ‪ USER2‬لدية امتيازات ‪ admin‬عليه‪.‬‬

‫‪Additional Meterpreter Extensions: Sniffer‬‬


‫‪ Extension‬اضافيه مهمه جدالمختبرى االختراق‪ .‬هذه ‪ extension‬يتم تحميلها يدويا باستخدام االمر ‪.load‬‬
‫‪Meterpreter > load sniffer‬‬
‫هذه ‪ ،extension‬كما يوحي اسمها‪ ،‬يوفر القدرة على التقاط الحزم‪ .‬االمر "‪ "sniffer_interfaces‬يظهر واجهات الشبكة المتوفرة من اجل‬
‫التقاط الحزم‪ .‬حينذاك المستخدم يمكنه تحديد "]‪ "sniffer_start <N> [M‬حيث ‪ N‬هو رقم الواجهة‪ ،‬و‪ M‬هو الخيار لتحديد عدد التقاط‬
‫الحزم في المخزن مؤقت (االفتراضي هو ‪ 12،222‬الحزم)‪ .‬يوضح االمر "‪ "sniffer_stats‬عدد الحزم الملتقطه حتى اآلن عند تشغيل‬
‫‪ .sniffer‬بعد إيقاف ‪ sniffer‬مع االمر "‪ ،"sniffer_stop‬يمكن للمستخدم سحب الحزم الى ملف ‪ pcap‬مع األمر ‪.sniffer_dump‬‬

‫‪Post module 1.11‬‬


‫حتى االن‪ ،‬قمنا بتغطية مجموعة متنوعة من مختلف أنواع ‪ ،payloads ،auxiliary ،exploit :module‬و‪ .nops‬ثم قمنا بالتركيز على‬
‫‪ .meterpreter payload‬ولكن هناك نوع اخر من ‪ module‬قمنا بذكره ولكن لم ننظر اليه بعمق‪ .post modules :‬هذه الميزات‬
‫تستخدم ‪ ،post exploitation‬بعد قيام المهاجم باختراق الهدف‪ .‬وهي مصممة ألتمتة بعض اإلجراءات على الهدف المخترق‪ ،‬مثل نهب‬
‫"‪ "plundering‬ألنواع مختلفة من المعلومات المفيدة لالختبار االختراق‪ Post modules .‬تقوم باتخاذ إجراءات من خالل االستفادة من‬
‫جلسة تفاعلية (عادة جلسة ‪ ،Meterpreter‬وفى بعض االحيان جلسة ‪ shell‬لبعض وحدات ‪ )psot‬التي أنشئت مع هذا الهدف‪ ،‬وتتصرف‬
‫بطريقة مشابهة جدا ل ‪ Post modules .meterpreter script‬تم تصميمه ألتمتة اإلجراءات ما بعد ‪ post-exploitation‬على الهدف‪.‬‬
‫يمكن االطالع على قائمة ‪ Post modules‬المتاحه من خالل ‪ msf console‬عن طريق تشغيل‪:‬‬
‫‪msf> show post‬‬
‫أو‪ ،‬يمكنك ان ترى هذه القائمه في موجه ‪ meterpreter‬مع جلسة أنشأت في جهاز الهدف المخترق بالفعل عن طريق تشغيل‪.‬‬
‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪215‬‬

‫>‪Meterpreter > run post<tab><tab‬‬


‫‪ Post module‬يمكن تشغيلها من خالل مجموعة متنوعة من الطرق‪ .‬على وجه الخصوص‪ ،‬يمكن لمختبر االختراق استدعاء واحده على‬
‫نفس منوال ‪ Meterpreler script‬باستخدام األمر ‪ run‬فى موجه ‪:meterpreter‬‬
‫‪Meterpreter > run post/multi/gather/env‬‬
‫بدال من ذلك (أكثر مرونة)‪ ،‬يمكننا استدعاء وحدة ‪ post module‬في موجه ‪ ،msfeonsole‬مما يجعل اتخاذ إجراء بشأن جلسة مؤسسه‬
‫بالفعل وجلسه في الخلفيه‪ ،‬على النحو التالي‪:‬‬
‫‪msf> use post/multi/gather/env‬‬
‫‪msf> set SESSION 3‬‬
‫‪msf> run‬‬

‫‪A Sample of Post Modules‬‬


‫يتم تقسيم ‪ post module‬إلى فئات مختلفة‪ ،‬ويتم تنظيمها (مثل الوحدات األخرى) بطريقة هرمية‪ .‬بعض ‪ post module‬تكون "‪،"multi‬‬
‫حيث يمكنها ان تعمل على جلسة عمل ‪ Meterpreter‬مؤسسه على أنواع مختلفة من األهداف‪ ،‬بما فيها الويندوز‪ ،‬والمواقع على أساس‬
‫‪ ،PHP‬وأنظمة لينكس‪ .‬ال ‪ module‬األخرى تركز على أجهزة ويندوز (تقع في ‪ ،)post/windows/‬وتنقسم الى المزيد الى ‪،capture‬‬
‫‪ ،manage ،gather ،escalate‬و‪ .other‬يجري استنباط األصناف الجديدة من ‪ Module‬واألفراج عنها على أساس منتظم‪ .‬هناك أيضا‬
‫‪ post module‬إضافة مخصصه للينكس‪ Mac OS X ،‬و‪.Solaris‬‬
‫عند تحديد ‪ post module‬والدخول في الكامل للفئة إما في موجه ‪ msfconsole‬أو ‪ ،meterpreter‬فان ‪ tab‬يعمل على اإلكمال التلقائي‪.‬‬

‫‪Multi‬‬
‫في فئة ‪ ،post/multi‬لدينا العديد من الوحدات لجمع المعلومات من الهدف‪ ،‬بما في ذلك‪ ،"post/multi/gather/env" ،‬والتي تقوم بطبع‬
‫قيم متغيرات بيئة النظام‪ ،‬و "‪ ،"filezilla_client_cred‬والذي يجلب بيانات االعتماد المخزنة من قبل ‪ filezilla FTP client‬المثبته على‬
‫الجهاز المخترق‪ .‬وبالمثل‪ ،‬فإن ‪ firefox_creds‬و‪( pidgin_cred‬نعم‪ ،‬هناك ‪ s‬فى نهاية البند ‪ firefox‬وليس في نهاية البند ‪)pidgin‬‬
‫تعمل على نهب بيانات االعتماد المخزنة محليا في متصفح الفايرفوكس وبرنامج ‪( pidgin‬برنامج للدردشة)‪ ،‬على التوالي‪.‬‬
‫هناك أيضا ‪ ssh_creds‬والتي من اسمها تعملعلى نهب بيانات االعتماد الخاصه ب ‪.SSH‬‬

‫‪WINDOWS‬‬
‫العديد من ‪ post module‬مرتبطة بالتقاط (‪ )capturing‬وتصعيد (‪ )escalating‬االمتيازات على جهاز الويندوز المخترق‪ .‬على وجه‬
‫الخصوص‪ ،‬هناك الوحدة ‪ ،keylog_recorder‬مع وظائف مماثلة تقريبا لتلك ‪.keylogerrecorder meterpreter script‬‬
‫تم تصميم الوحدة "‪ ،"/post/windows/escalate/bypassuac‬كما يوحي من اسمها‪ ،‬لتجاوز )‪User Account Control (UAC‬‬
‫في الويندوز‪ ،‬حيث ان هذه الميزة تحذر المستخدم مع مربع حوار عندما يتم اتخاذ اإلجراءات المختلفة على مستوى ‪ admin‬على النظام‪ .‬هذه‬
‫‪ module‬تتجاوز ‪ UAC‬عن طريق حقن ‪ Microsoft-trusted publisher certificate‬بداخل عملية ‪ .meterpreter‬ثم بعد ذلك‬
‫تطلق ‪ shell‬جديدة تجعل اتصال عكسي إلى الميتاسبلويت (‪ )new reverse shell connection‬حيث اإلجراءات الجديده في الشل‬
‫الجديدة سوف ال تسبب أي تحذيرات ‪ UAC‬ليتم عرضها أو تسجيلها‪.‬‬
‫الوحدات ‪ screen_unlock modules‬تقوم بحقن كود في عملية ‪ LSASS‬قيد التشغيل ألنه يسبب فتح الشاشة المحمية بكلمة مرور‪ .‬في‬
‫حين انها يمكن أن تكون مفيده إذا كان المهاجم لديه وحدة التحكم أو حتى الوصول الى واجهة المستخدم الرسومية‪ ،‬هناك فرصة يمكن أن تؤدى‬
‫الى تحطم ‪ ،LSASS‬مما يسبب في إعادة تشغيل الجهاز‪ .‬وهكذا‪ ،‬ينبغي أن تأخذ الرعايه عند استخدام هذه الوحدة أو حتى تجنبها على أنظمة‬
‫اإلنتاج الحساسه‪.‬‬
‫ويشمل ترسانة ‪ post modules‬أيضا على عدة إجراءات لتصعيد االمتياز المحلي‪ ،‬والتي لم يتم تضمينها في األمر ‪ getsystem‬الخاص بال‬
‫‪ .meterpreter‬هذه الوحدات موجودة تحت الفئة "‪ ،"post/windows/escalate‬ولها أسماء تبدءا برقم تصحيح مايكروسوفت‪ .‬حاليا‬
‫‪ ،ms10-092 ،ms10-073‬وآخرين‪ .‬عن طريق تشغيل ‪ post modules‬هذه في جلسة ‪ Meterpreter‬معينة‪ ،‬إذا لم يكن نظام التشغيل‬
‫مصحح‪ ،‬فانه يتم منح ‪ meterpreter‬امتيازات النظام المحلي بنجاح‪.‬‬

‫هناك بعض وحدات ‪ post module‬اإلضافية مخصصه لجمع المعلومات من جهاز ويندوز المخترق والتي تندرج تحت الفئة ‪،Gather‬‬
‫بما في ذلك‪:‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪216‬‬

‫‪ :Checkvm -‬هذه الوحدة تحدد ما إذا كان الجهاز الهدف هو ‪ VM‬أو نظام حقيقي‪.‬‬
‫‪ :Enum_applications -‬هذه الوحدة تحدد تطبيقات ‪( third-party‬زائد ‪ )service pack‬المثبته على الجهاز المخترق‪.‬‬
‫‪ :Enum_logged_on_users -‬هذه الوحدات تظهر المستخدمين المسجلين حاليا على الجهاز المستهدف على أساس رقم ‪SID‬‬
‫الخاصة بهم‪ .‬لكنه يظهر أيضا مسار ملفهم الشخصي (مثل>‪ ،)%systemdrive%\users\<username‬مما يساعد على تحديد‬
‫اسم حساب المستخدم‪.‬‬
‫‪ :Hashdump -‬هذه الوحدة تعمل هلى سحب ‪ hash‬من ‪ registery‬على نظام الملفات‪ ،‬وذلك باستخدام نفس األسلوب المطبق من‬
‫قبل ‪( meterpreter hashdump script‬لكنه ليس مثل االمر ‪ hashdump‬الذى يقوم بسحب ‪ hash‬من الذاكره‪.‬‬
‫‪ :Resolve_sid -‬هذه الوحدة تأخذ رقم ‪ SID‬كمدخل وتحدد اسم المستخدم المقترن ب ‪ .SID‬إذا كان هذا حساب دومين‪ ،‬فان هذا‬
‫االمر سوف يظهر أيضا اسم الدومين الذي قام بتعريف الحساب‪.‬‬
‫‪ :Delete_user -‬هذه الوحدة‪ ،‬تندرج تحت الفئة "‪ "manage‬على عكس وحدات "‪ "gather‬المذكورة أعاله‪ ،‬وهذه تقوم بازالة‬
‫حساب المستخدم المهاجم الذى انشاء على الجهاز‪.‬‬
‫‪ :Enable_rdp -‬هذه الوحدة تقوم بتفعيل الخدمة ‪ remote desktop service‬على الجهاز المستهدف ويندوز‪ ،‬مما يسمح‬
‫باالدارة عن طريق واجهة المستخدم الرسومية‪.‬‬
‫وكما نرى‪ .‬هناك العديد من وحدات ‪ post module‬اآلخرى قوية‪ ،‬ويجري قدرا كبيرا من التطوير على إنشاء ‪ post module‬جديدة‪ .‬العديد‬
‫من الميزات من ‪ meterpreter scripts‬تم إعادة تنفيذها وادراجها كما ‪ ،post module‬نظرا لزيادة المرونة والتكامل لوحدات ‪post‬‬
‫‪ module‬مع واجهة ‪ msfeonsole‬عبر ‪ ،Post module .meterpreter script‬هي مثل الوحدات االخرى‪ ،‬يمكن البحث عنها‬
‫باستخدام االمر ‪ ،info‬ويمكن تطبيقها عبر الجلسات الموجودة بالفعل دون التفاعل المباشر مع تلك الجلسه‪ ،‬على عكس ‪meterpreter‬‬
‫‪ ،scripts‬وهو ميزه بالنسبه لوحدات ‪.post module‬‬

‫‪ 1.11‬قواعد البيانات (‪)database‬‬


‫عند إجراء اختبار االختراق‪ ،‬بل هو في كثير من األحيان تحديا لتتبع كل ما قمت به على الشبكة المستهدفة‪ .‬هذا هو المكان حيث وجود قاعدة‬
‫بيانات يمكن أن توفر الكثير من العناء والوقت‪ .‬لقد تمبناءالميتاسبلويت لتقديم الدعم لنظام قاعدة البيانات ‪.PsotgreSQL‬‬
‫النظام يسمح بالوصول السريع والسهل لفحص المعلومات‪ ،‬يعطينا القدرة على استيراد وتصدير نتائج الفحص من مختلف األدوات‪ .‬يمكننا‬
‫أيضا استخدام هذه المعلومات لتكوين خيارات ‪ Module‬بسرعة‪ .‬األهم من ذلك‪ ،‬فإنه يحفظ نتائجنا نظيفة ومنظمة‪.‬‬

‫االن نكون قد انتهينا من أساسيات الميتاسبلويت ولها تكملة اخرى موزعه على باقى األبواب األخرى على حسب المضمون‪.‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪217‬‬

‫الفصل الثامن‬
‫برمجيات البد منها‬

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

‫‪ 1.1‬األداة ‪Dradis framework‬‬


‫هناك العديد من البرامج والطرق التي قد يستخدمها مختبر االختراق في عملية اختبار اإلختراق لكتابة النتائج‪ .‬من هذه النتائج الخدمات‬
‫الموجودة في الهدف‪ ،‬نتائج فحص ‪ ،nmap‬مالحظاته وغيرها‪ .‬من الطرق التي يمكن استخدامها لكتابة هذه النتائج هي الطريقة التقليدية‬
‫بإستخدام الورقة والقلم‪ ،‬او يمكن استخدام ‪ notepad‬وغيره‪ .‬لكن ماذا لو كنت في فريق وتحتاج لجمع المعلومات كفريق واحد او حتى لو كان‬
‫عندك فريق متخصص في جمع المعلومات عن الهدف وفريق اخر متخصص في اختبار الثغرات ومشاركة هذه المعلومات بين اعضاء الفريق‬
‫البد منه‪ ،‬هل من المعقول مثال ان تكون الطريقة باستخدام الورقة والقلم او حتى ‪notepad‬؟!!‬
‫من أفضل البرامج في هذا المجال هو ‪ .Dradis‬فهو عبارة عن مشروع مفتوح المصدر لمشاركة النتائج وكتابة التقارير بين اعضاء الفريق‬
‫اثناء عملية اإلختراق‪ .‬المشروع مكتوب بلغة ‪ ruby‬وهو يتكون من خادم ‪ server‬وعميل ‪ .client‬استخدام العميل يكون بالواجهة الرسومية‬
‫عن طريق موقع يقوم بعمليه الخادم‪.‬‬
‫مميزات المشروع‬
‫‪ -‬السهولة في كتابة التقارير‪ .‬ويمكنك تخصيص قالب )‪ (Template‬خاص بالتقارير‪.‬‬
‫‪ -‬يمكنك وضع مرفقات مثل اخذ صور‪ ،‬او ارفاق ملفات خاصة باإلختبار‪ .‬هذه الميزة من اهم المميزات‪.‬‬
‫‪ -‬هناك اضافات متوفرة مثل‪ ،‬امكانية رفع نتائج الفحص من ‪ nmap‬للمشروع ويقوم بتحليها‪ ،‬امكانية التصدير بعدد من الصيغ‪،‬‬
‫وغيرها‪.‬‬
‫‪ -‬اخذ نسخة احتياطية بشكل دوري لقاعدة البيانات‪.‬‬
‫‪ -‬الربط مع أنظمة وأدوات عدة من خالل ‪.Server Plugins‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪218‬‬

‫يعمل بفاعليه من خالل جمع المعلومات من عدد من األدوات التي يدعمها ويتعامل معها كاالتى‪،Nessus ،Burp Suite :‬‬ ‫‪-‬‬
‫‪،w3af ،VulnDB ،SureCheck ،Retina ،Qualys ،OSVDB ،OpenVAS ،Nmap ،Nikto ،NeXpose‬‬
‫‪.Zed Attack Proxy ،Web Exploitation Framework ،MediaWiki‬‬

‫تشغيل ‪Dradis‬‬
‫قم بتحميل االصدار األخيرة من الموقع "‪ "http://dradisframework.org‬على حسب نظام تشغيلك‪ ،‬مثل نظام لينكس‪ .‬نقوم بفك الضغط‬
‫عن المجلد من خالل كتابة األمر التالي‪:‬‬

‫ثم نذهب الى المجلد الذي قمنا بفك ضغطه‪ .‬ثم بعد ذلك نقوم بكتابة االمر التالى "‪ "./dradis-webapp && ./dradis-worker‬كاالتى‪:‬‬

‫ملحوظه‪ :‬قبل التثبيت تاكد من وجود التطبيق ‪ Redis‬وفى وضع العمل ويمكنك تثبيته من خالل االمر "‪."sudo apt-get install redis-server‬‬
‫ومن ثم بعد اكتمال عملية التثبيت نقوم بكتابة االمر ‪ redis-server‬كلى يعمل‪.‬‬
‫ثم نقوم بعد ذلك بفتح متصف الويب وكتابة العنوان التالى‪http://127.0.0.1:3000 :‬‬

‫هناك ثالث أنواع من ال ‪Server Plugins‬‬


‫‪: Import‬‬
‫وهي أن يقوم النظام بالربط مع نظام خارجي والحصول على معلومات منه‪ ،‬مثل الحصول على معلومات من ‪ WikiMedia wiki‬أو من‬
‫خالل ‪.Vulnerability database‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪219‬‬

‫‪: Export‬‬
‫وهي أن يقوم النظام بتصدير المخزن الى هيئات مختلفة‪ ،‬مثل تصدير المخزن الى ملف ‪ Word‬من خالل ‪ ،WordExport‬أو توليد ملفات‬
‫‪ pdf‬للمخزن‪ ،‬وأيضا ً عمل تصدير للمشروع بالكامل وذلك من أجل اإلحتفاظ به كنسخة إحتياطية وإستعماله في حالة حصل مشكلة للمشروع‬
‫الحالي‪.‬‬
‫‪: Upload‬‬
‫وهي أن يقوم النظام برفع الملفات وفرز محتوياتهم ووضعهم في المستودع‪ ،‬حيث يمكن رفع ملفات صادرة من ‪Nikto ،Nessus ،Nmap‬‬
‫أو ‪ .Burp‬أو أن تقوم برفع مشروع بالكامل‪.‬‬

‫‪ Dradis‬في كالى‬
‫نجد ان هذه االداه مدمجه تلقائيا في نظام التشغيل كالى والتي نجدها في المسار "‪."usr/lib/dradis‬‬

‫االن لكي تعمل نقوم بكتابة االمر "‪ ."./start.sh‬ثم نفتح المتصفح ونضع فيه الرابط الذي أعطاه لك كى يعمل "‪."127.0.0.1:3004‬‬

‫ويكون شكله كاالتى‪:‬‬

‫ملحوظه‪ :‬نجده هنا مختلف عن السابق وذلك الختالف اإلصدار حيث ان المدمج مع كالى ذات اصدار أقدم من الذي قمنا بتنصيبه على‬
‫ابونتو‪ .‬أيضا يمكننك تنصيبه على الويندوز‪.‬‬

‫‪ 1.1‬األدوات الرئيسيه (‪)main tools‬‬


‫‪GNU Debugger‬‬
‫)‪ GNU Debugger (GDB‬هو المصحح االساسى المشهور واالكتر استخداما من بين حزم ‪ Gnu‬البرمجية باالضافة الى انه يعمل على‬
‫العديد من المنصات (لينكس وأنظمة يونكس األخرى) و يدعم عدة لغات برمجية‪ .‬أيضا هناك واجهات رسومية لل ‪ ،GDB‬على سبيل المثال‪،‬‬
‫‪ ،Data Display Debugger‬وأنا لن اتطرق لهم ألنهم ليسوا من أدوات لينكس القياسية وليست ذات شعبية في العالم الوينكس‪.‬‬
‫هناك ثالثة أنواع من الكائنات‪ ،‬تسمى ‪( targets‬األهداف)‪ ،‬يمكن تصحيحها باستخدام ‪ :GDB‬الملفات القابلة للتنفيذ (‪،)executable file‬‬
‫و‪ ،(core files) memory dumps‬والعمليات (‪ .)process‬يحتوي الملف ‪ )memory dumps( core‬على صورة لعمليات‪/‬محتوى‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪220‬‬

‫الذاكرة‪ ،‬التي تنتج عادة نتيجة اإلنهاء الغير طبيعي للعملية‪ .‬هناك طرق مختلفة لتحميل كل من هذه األهداف في ‪ GDB‬لتصحيح األخطاء‪.‬‬
‫أوال‪ ،‬أي هدف يمكن تحميله من سطر األوامر عند بدء ‪ .GDB‬وفيما يلي الطرق الرئيسية للقيام بذلك‪:‬‬
‫‪- Loading an executable file into GDB:‬‬
‫‪#gdb program_name‬‬
‫‪#gdb - exec program_name‬‬
‫‪#gdb -e program_ name‬‬
‫‪- Loading a memory dump file into GDB:‬‬
‫‪#gdb -core core_ name‬‬
‫‪#gdb -c core_name‬‬
‫‪#gdb program_name core_name‬‬
‫في السطر األخير‪ ،‬يجب أن يكون المعلم األول هو اسم البرنامج الذي ولد الملف ‪ Core‬المحدد في المعلم الثاني‪.‬‬
‫‪- Loading a process file into GOB:‬‬
‫‪#gdb -c process_id‬‬
‫‪#gdb process_name process-pid‬‬
‫‪- Loading an executable file:‬‬
‫‪(gdb) file program_name‬‬
‫‪(gdb) exec-file program_name‬‬
‫‪- Loading a dump file:‬‬
‫‪(gdb) core-file core_ name‬‬
‫‪- Loading a process:‬‬
‫‪(gdb) attach process_pid‬‬
‫يمكن تفريغ العملية من ‪ GDB‬باستخدام األمر ‪ .detach‬وتستمر العملية التي تم فصلها عن ‪ GDB‬فى العمل في النظام‪ ،‬ويمكن تركيب عملية‬
‫أخرى‪.‬‬
‫عند بدء ‪ ،GDB‬فإنه نواتج معلومات حقوق النشر ضخمة نوعا ما‪ ،‬والتي يمكن قمعها من خالل ادراج ‪ GDB‬مع الخيار "‪."-q‬‬
‫لجعل عملية التصحيح أكثر مالءمة وكفاءة‪ ،‬يجب تجميع‪/‬ترجمة "‪ "compiler‬البرامج الخاصة بك لكي يحتوي معلومات التصحيح‪ .‬ويمكن‬
‫أن يتم ذلك عن طريق تجميعهم باستخدام ‪ )GNU C and C++ comiler( GCC‬مع الخيار "‪ ."-g‬معلومات التصحيح سوف تسمح لك‬
‫بعرض أسماء المتغيرات والدوال‪ ،‬وأرقام األسطر‪ ،‬والمعرفات األخرى في ‪ GDB‬تماما كما يظهر في الكود المصدري للبرنامج‪ .‬إذا لم يكن‬
‫معلومات التصحيح متاحه‪ ،‬فان ‪ GDB‬سوف يعمل مع البرنامج على مستوى لغة االسيمبلى‪.‬‬
‫عند تصحيح برنامج‪ ،‬يجب عليك تعيين نقطة توقف (‪ )breakpoint‬فيه‪ .‬هناك ثالثة أنواع من نقاط التوقف‪:‬‬
‫‪ :Regular breackpoints -‬مع هذا النوع من نقطة التوقف‪ ،‬البرنامج سوف يتوقف عندما ياتى دور التنفيذ إلى هذا العنوان أو‬
‫الداله المعينة‪ .‬يتم تعيين نقاط التوقف باستخدام األمر ‪ break‬أو اختصاره "‪ ."b‬على سبيل المثال‪ ،‬يحدد األمر التالي نقطة توقف في‬
‫الداله )(‪:main‬‬
‫‪(gdb) break main‬‬
‫كما يمكن تعيين نقطة توقف في أي عنوان‪ .‬في هذه الحالة‪ ،‬يجب أن يسبق العنوان عالمة النجمة (*)‪ .‬قد تحتاجها فى تعيين نقطة‬
‫توقف إلى عناوين معينة في تلك األجزاء من البرنامج‪ ،‬التي ال يوجد فيها أي من معلومات التصحيح أو الكود المصدرى‪ .‬على سبيل‬
‫المثال‪ ،‬يحدد األمر التالي نقطة توقف على العنوان ‪:0x801b7000‬‬
‫‪(gdb) b *0x801b7000‬‬
‫‪ :Watchpoints -‬هنا البرنامج يتوقف البرنامج عند قراءة متغير معين أو تغييره‪ .‬وهناك أنواع مختلفة من ‪ ،watchpoints‬يتم‬
‫تعيين كل منها باستخدام أمر مختلف‪ .‬األمر ‪( watch‬واختصاره ‪ )wa‬يضع ‪ watchpoint‬التي من شأنها أن توقف البرنامج عندما‬
‫يتغير قيمة متغير محدد‪:‬‬
‫‪(gdb) wa variable‬‬
‫األمر ‪( rwatch‬واختصاره ‪ )rw‬يضع ‪ watchpoint‬التي من شأنها أن توقف البرنامج عند قراءة قيمة متغير محدد‪:‬‬
‫‪(gdb) rw variable‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪221‬‬

‫األمر ‪( awatch‬واختصارها ‪ )aw‬يضع ‪ watchpoint‬التي من شأنها أن توقف البرنامج عند قراءة قيمة المتغير المحدد أو كتابتة‪:‬‬
‫‪(gdb) aw variable‬‬
‫‪ :Catchpoints -‬يتوقف البرنامج عند وقوع حدث معين‪ ،‬على سبيل المثال‪ ،‬عندما يتم تلقي إشارة‪ .‬ومن المقرر عقد ‪catchpoint‬‬
‫باستخدام األمر ‪ catch‬على النحو التالي‪:‬‬
‫‪(gdb) catch event‬‬
‫البرنامج سوف يتوقف عندما يحدث حدث معين‪ .‬وفيما يلي بعض األحداث التي يمكن تعيين ‪ catchpoint‬لها‪:‬‬
‫‪throw - A C++ exception takes place.‬‬
‫‪catch - A C++ exception is intercepted.‬‬
‫‪exec - The exec ( ) function is called.‬‬
‫‪fork - The fork () function is called.‬‬
‫‪vfork - The vfork () function is called.‬‬
‫يمكن الحصول على معلومات حول أحداث ‪ catchpoint‬من خالل تنفيذ األمر ‪ .help catch‬لألسف‪ ،‬ال يتم اعتماد العديد من‬
‫األحداث في ‪.GDB‬‬
‫يمكن الحصول على معلومات حول كافة نقاط التوقف من خال تنفيذ االمر ‪( info breakpoints‬واختصاره ‪ .)i b‬يمكن تعطيل نقطة التوقف‬
‫باستخدام األمر ‪:disable‬‬
‫‪(gdb) disable b point_number‬‬
‫نقطة التوقف المعطلة نتيجة استخدام االمر ‪ disable‬يمكن تفعيلها مرة أخرى باستخدام االمر ‪.enable‬‬
‫‪(gdb) enable b point_number‬‬
‫عدد نقاط التوقف‪ ،‬فضال عن وضعها (‪ enabled‬أو ‪ ،)disabled‬يمكن معرفتها باستخدام االمر ‪ info breakpoints‬أيضا‪.‬‬
‫يمكن حذف نقطة توقف باستخدام األمر ‪ delete‬واختصاره "‪:"d‬‬
‫‪(gdb) delete b point_number‬‬
‫تنفيذ األمر ‪ d‬بدون اى ملعمات سوف يقوم بحذف كافة نقاط التوقف‪.‬‬
‫عندما يتم االنتهاء من جميع االستعدادات لتصحيح البرنامج‪ ،‬بما في ذلك تحديد نقاط التوقف‪ ،‬فإنه يمكن إطالقها باستخدام األمر ‪run‬‬
‫(اختصاره ‪ .)r‬سيقوم البرنامج بالتنفيذ حتى يصل إلى نقطة التوقف‪ .‬يمكن استئناف تنفيذ البرنامج الذي توقف باستخدام األمر ‪continue‬‬
‫(اختصاره ‪ .)c‬يمكنك تتبع تنفيذ البرنامج من خالل التنقل خالل خطوطها من كود المصدر باستخدام أحد أوامر البحث التعق‪ .‬االمر ‪step N‬‬
‫واختصاره (‪ )s N‬ينفذ عدد ‪ N‬من سطور الكود التاليه مع تتبع استدعاء الداله (‪ ،)function call‬واالمر ‪ next N‬واختصاره (‪ )n N‬ينفذ‬
‫عدد ‪ N‬من سطور الكود التاليه مع عدم تتبع استدعاء الداله (‪ .)function call‬إذا لم يتم تحديد ‪ ،N‬يتم تنفيذ سطر واحد من التعليمات‬
‫البرمجية‪ .‬االمران )‪ stepi N (si N‬و)‪ nexti N (ni N‬يستخدما أيضا في تتبع تنفيذ البرنامج‪ ،‬لكنهما يعمال ليس مع خطوط كود المصدر‬
‫ولكن مع تعليمات الجهاز‪ .‬االمر )‪ finish (fin‬يقوم بتنفيذ البرنامج حتى يتم الخروج من الداله الحالية‪.‬‬
‫يتم استخدام االمر )‪ print (p‬إلخراج قيمة تعبير محدد بشكل واضح "أله حاسبه" (على سبيل المثال‪ ،)p 2+3 ،‬قيمة المتغير (على سبيل‬
‫المثال‪ ،)p my_var ،‬محتويات ‪( register‬على سبيل المثال‪ ،)p $eax ،‬أو محتويات خلية الذاكرة (على سبيل المثال‪.)p *0x801835 ،‬‬
‫يستخدم األوامر ‪ x‬لعرض محتويات خاليا الذاكرة‪ .‬شكل األمر كما يلي‬
‫‪x/Nfu address‬‬
‫بالنظر الى عناصر هذا األمر‪:‬‬
‫‪ :Address -‬عنوان الذاكره‪ ،‬التي يمكن من خاللها البدء في عرض الذاكرة (ال ضرورة لوضع النجمة قبل العنوان)‪.‬‬
‫‪ :N -‬عدد وحدات الذاكرة (‪ )u‬ليتم عرضها‪ .‬القيمة االفتراضية هي ‪.1‬‬
‫‪ :f -‬تنسيق اإلخراج‪ .‬يمكن أن يكون أحد الخيارات التالية‪ ،s :‬سلسلة منتهية فارغة؛ ‪ ،i‬تعليمات الجهاز‪ .‬أو ‪ ،x‬الشكل العشري‬
‫"‪( "hexadecimal format‬التنسيق االفتراضي)‪.‬‬
‫‪ - :u -‬وحدة الذاكرة‪ .‬يمكن أن تكون واحدة من التالية‪ ،b :‬بايت; ‪ 1 ،h‬بايت; ‪ 1 ،w‬بايت (أي ‪ ،word‬وهي وحدة الذاكرة‬
‫االفتراضية)؛ ‪ 1 ،g‬بايت (أي‪ ،‬الكلمة مزدوجة)‪.‬‬
‫على سبيل المثال‪ ،‬األمر التالي سوف ينتج ‪ 12‬كلمة عشريه تبدأ من العنوان ‪:0x40057936‬‬
‫‪(gdb) x/20xw 0x40057936‬‬
‫عندما يتم استخدام القيم ‪ Nfu‬االفتراضي‪ ،‬فان الشرطة المائله بعد األمر غير مطلوبة‪.‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪222‬‬

‫يتم استخدام األمر ‪ set‬لتعديل محتويات ‪ registers‬أو خاليا الذاكرة‪ .‬على سبيل المثال‪ ،‬األمر التالي يكتب ‪ 1‬إلى ‪.ebx register‬‬
‫‪Set $ebx = 1‬‬
‫االمر ‪ )i r( info registers‬يستخدم لعرض محتويات كافة ‪ .registers‬لعرض محتويات ‪ registers‬معينة فقط‪ ،‬فأنها يجب أن تكون‬
‫محددة مباشرة بعد األمر‪ .‬على سبيل المثال‪ ،‬األمر التالي يعرض محتويات ‪:ebp and eip registers‬‬
‫‪(gdb) i r ebp eip‬‬
‫االمر ‪ info share‬يعرض معلومات حول المكتبات المشتركة (‪ )shared libraries‬التي تم تحميلها حاليا‪.‬‬
‫األوامر ‪ ،info args ،info freame‬و‪ info local‬تعرض معلومات حول ‪ stack frame‬الحاليه‪،function’s argument ،‬‬
‫والمتغيرات المحلية (‪ ،)local variable‬على التوالي‪ .‬االمر ‪ )bt( backtrace‬يعرض ‪ stack frame‬لكل روتين النشط‪ .‬االمر ‪)q( exit‬‬
‫يستخدم للخروج من المصحح‪ .‬من اجل معلومات مفصلة عن أمر يمكن الحصول عليها عن طريق تنفيذ االمر ‪ )h( help‬متبوعا باسم األمر‪،‬‬
‫الذي يجري البحث عن معلومات عنه‪.‬‬

‫‪Ifconfig‬‬
‫يتم استخدام األداة ‪ ifconfig‬العداد واجهات الشبكة عن طريق تغيير الملعمات مثل عنوان بروتوكول اإلنترنت (‪،netmask ،)IP‬‬
‫و)‪ .Media access control (MAC‬بالنسبه للمبرمجين‪ ،‬فان الفائدة الرئيسية لهذه األداة هي المعلومات التي يقدمها عندما يتم تشغيله مع‬
‫الخيار "‪ ."-a‬وفيما يلي مثال على هذا اإلخراج‪:‬‬

‫المعلومات حول واجهة اإليثرنت ‪ eth0‬هو اإلخراج األول‪ ،‬تليها المعلومات حول واجهة ‪ .lo loopback‬تنفيذ ‪ ifconfig‬بدون أية معلمات‬
‫ال تظهر الواجهات التي تم تعطيلها مع الخيار ‪.disable‬‬
‫بعض من أهم قطع المعلومات الناتجه من االمر ‪ ifconfig -a‬هي كالتالى‪ :‬عنوان ‪ IP‬الخاص بالواجهة (‪ ،)int addr‬عنوان البث‬
‫"‪ ،)Bcast( "broadcast‬وعنوان ‪ ،)Mask( netmask‬وعنوان ‪ ،)HWaddr( MAC‬ووحدة الحد األقصى من اإلرسال‬
‫"‪ (MTU) "maximum transmission unit‬بالبايت "‪ ."bytes‬وأيضا من المعلومات ذات الفائدة هي الوحدات عدد التلقى بنجاح‬
‫"‪ ،)RX packets( "number of successfully recivied‬المرسله "‪ ،)TX packets( "transmitted‬األخطاء (‪ ،)errors‬المسقطه‬
‫(‪ ،)dropped‬والحزم المكررة (‪ .)overruns‬العنوان ‪ collisions‬يظهر عدد من االصطدامات (‪ )collisions‬في الشبكة‪ ،‬ويظهر العنوان‬
‫‪ txqueuelen‬طول قائمة االنتظار الخاصه باالرسال للجهاز‪ .‬ويظهر العنوان ‪ Interrupt‬عدد تقاطع األجهزة المستخدمة من قبل الجهاز‪.‬‬
‫إلخراج البيانات فقط لواجهة معينة‪ ،‬يتم تنفيذ األمر مع تحديد اسم الواجهة‪:‬‬
‫‪# ifeonfig eth1‬‬
‫يتم تعيين وحدة الحد األقصى من اإلرسال )‪ (MTU‬من الحزم للواجهة باستخدام ‪.mtu N‬‬
‫‪# ifeonfig eth1 mtu 1000‬‬
‫األداة المساعدة ‪ ifconfig‬ال تسمح لك لتحديد ‪ MTU‬أكبر من القيمة القصوى المسموح بها‪ ،‬والتي هي ‪ 1،122‬بايت لإليثرنت‪.‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪223‬‬

‫الخيار "‪( "-arp‬مع عالمة ناقص) يقوم بتعطيل البروتوكول (‪ )ARP‬للواجهة المحددة‪ ،‬والخيار "‪( "arp‬بدون عالمة ناقص) تمكنه‪:‬‬

‫الخيار ‪( promisc‬بدون عالمة سالب) تمكن الوضع ‪ promiscuous‬للواجهة‪ ،‬الذي سوف تقبل جميع الحزم المرسلة إلى الشبكة‪ .‬وعادة ما‬
‫يستخدم هذا الوضع عن طريق ‪ .sniffer‬والخيار ‪( -promisc‬مع عالمة ناقص) يستخدم لتعطيل الوضع ‪.promiscuous‬‬

‫يمكن تعيين عنوان ‪ IP‬إلى الواجهة باستخدام الخيار ‪ .inet‬ويتم تعيين ‪ mask‬باستخدام الخيار ‪:netrnask‬‬
‫‪# ifconfig eth0 inet 200.168.10.15 netmask 255. 255. 255 .192‬‬
‫يمكن تعطيل واجهة الشبكه باستخدام الخيار ‪ down‬وتمكين الوجهة باستخدام الخيار ‪:up‬‬
‫‪# ifconfig eth0 down‬‬
‫‪# ifconfig eth0 up‬‬
‫يستخدم الخيار ‪ hw class address‬لتغيير عنوان الجهاز (عنوان ‪ )MAC‬لواجهة الشبكه إذا كان ‪ driver‬الجهاز يدعم هذه القدرة‪ .‬يجب‬
‫تحديد اسم فئة الجهاز وسلسلة عنوان ‪ MAC‬بعد الكلمة ‪ .hw‬حاليا‪ARCnet ،ax25 (AMPR AX.25) ،ether (Ethernet) ،‬‬
‫و)‪ netrom (AMPR NET / ROM‬تدعم هذه الخاصيه‪ .‬قبل تغيير عنوان الجهاز‪ ،‬فيجب تعطيل الواجهة أوال‪ .‬وفيما يلي مثال على‬
‫تغيير عنوان ‪ MAC‬لواجهة ‪:eth0‬‬
‫‪# ifconfig eth0 down‬‬
‫‪# ifconfig eth0 hw ether 13:13:13:13:13:13‬‬
‫‪# ifconfig eth0 up‬‬
‫استخدام األداة المساعدة ‪ ،ifconfig‬يمكن واجهة الشبكه من تعيين العديد من عناوين ‪ IP‬المستعاره (‪ ،)alias IP‬والتي‪ ،‬مع ذلك‪ ،‬يجب أن‬
‫تتعلق قطعة الشبكة بنفس العنوان األساسي‪ .‬فيما يلي مثال على تعيين ثالثة عناوين ‪ IP‬إلى واجهة واحدة‪ ،‬واسمه ‪:eth0‬‬
‫‪# ifconfig eth0:0 192.168.10.200‬‬
‫‪# ifconfig eth0:1 192.168.10.201‬‬
‫‪# ifconfig eth0:2 192.168.10.202‬‬
‫اآلن واجهة الشبكه يمكن الوصول إليها باستخدام أي من عناوين ‪ IP‬األربعة‪ .‬هذه القدرة كثيرا ما تستخدم من قبل المسؤولين إلنشاء عقد ويب‬
‫استنادا الى عناوين ‪ .virtual IP‬يمكن حذف العنوان المستعار باستخدام الخيار ‪ down‬على النحو التالي‪:‬‬
‫‪# ifconfig eth0:1 down‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪224‬‬

‫‪Netstat‬‬
‫األداة ‪ netstat‬تعمل على إخراج معلومات مختلفة عن عمليات الشبكة‪ .‬إذا تم استدعائها بدون أية معلمات‪ ،‬فإنه النواتج هى معلومات حول‬
‫االتصاالت الثابتة (‪ )established connection‬ومعلومات تكميلية حول قوائم االنتظار الداخلية والملفات المستخدمة للتفاعل مع العملية‪.‬‬
‫افتراضيا‪ ،‬ال يتم تضمين منافذ االستماع (‪ )Listening port‬في اإلخراج‪ .‬لرؤية منافذ االستماع (‪ )Listening port‬ومنافذ غير االستماع‬
‫(‪ )nonlistening port‬يكون من خالل استخدام المعلمة "‪:"-a‬‬

‫عند تعطيل دعم نظام أسماء النطاقات )‪ ،(DNS‬فان ‪ netstat‬يحاول دون جدوى ترجمة العناوين الرقميه الى أسماء االستضافه المقابل‬
‫وإخراج المعلومات إلى الشاشة مع تأخير كبيرة‪ .‬اضاف الخيار ‪ n‬العلم يمنع ‪ netstat‬من محاولة ترجمة أسماء المضيف‪ ،‬وبالتالي تسريع‬
‫اإلخراج‪:‬‬
‫‪# netstat -an‬‬
‫في هذه الحالة‪ ،‬يتم عرض كافة العناوين في شكله الرقمي‪.‬‬
‫كما ترون‪ ،‬يتم تقسيم ناتج المعلومات من قبل األداة ‪ netstat‬إلى قسمين‪ .‬الجزء األول‪ ،‬واسمه "‪ ،"active internet connection‬وهو‬
‫يسرد كافة االتصاالت التي تم تأسيسها ومنافذ االستماع‪ .‬ويظهر العمود ‪ Proto‬بروتوكول النقل (‪ TCP‬او ‪ )UDP‬التي يستخدمها االتصال‬
‫أو الخدمة‪ .‬العمودين ‪ Recv-Q‬و‪ Send-Q‬يظهرا عدد البايتات في مقبس "‪ "socket‬قراءة وكتابة ‪ ،buffer‬على التوالي‪ .‬وتبين األعمدة‬
‫‪ Local Address‬و‪ Foreign Address‬العناوين المحلية والبعيدة‪ .‬عادة ما يتم ترميز العناوين المحلية والمنافذ كعالمة نجمية‪ .‬إذا تم‬
‫تحديد الخيار ‪ ،-n‬يظهر العنوان المحلي ك ‪ .0.0.0.0‬والعناوين تظهر في الصيغه ‪،computer_name (ip_ address): services‬‬
‫حيث ‪ services‬هو رقم المنفذ أو اسم الخدمة‪( .‬ارقام المنافذ المقابه السماء الخدمات لالطالع عليها من خالل الملف ‪ .)/etc/services‬ويبين‬
‫العمود ‪ state‬حالة االتصال‪ .‬الحالة األكثر شيوعا هى ‪( ESTABLISHED‬االتصاالت النشطة)‪( LISTEN ،‬المنافذ أو الخدمات التي‬
‫تستمع لطلبات االتصال‪ ،‬ال تظهر اال عند استخدام الخيار ‪ ،)-a‬و‪( TIME_WAIT‬اتصاالت أغلقت)‪ .‬حالة االتصال تظهر فقط مع ‪،TCP‬‬
‫وذلك الن ‪ UDP‬ال يتحقق من حالة االتصال‪.‬‬
‫أما الجزء الثاني من اإلخراج هو‪ ،"active UNIX domain sockets" ،‬ويظهر قوائم االنتظار الداخلية والملفات المستخدمة في التفاعل‬
‫مع العملية‪ .‬يستخدم الخيار ‪ -t‬لتركيز االنتاج فقط على منافذ ‪ ،TCP‬وكذلك الخيار ‪ -u‬لتركيز الناتج على منافذ ‪ UDP‬فقط‪.‬‬
‫يستخدم الخيار ‪ -i‬لعرض معلومات عن واجهات شبكة االتصال‪:‬‬

‫في كثير من النواحي‪ ،‬هذه المعلومات هي نفس المعلومات التي تنتجها عند تنفيذ األمر ‪ .ifconfig -a‬األعمدة التي تبدءا ب ‪)recived( RX‬‬
‫تبين عدد الحزم المستقبله بنجاح (‪ ،)OK‬الخطأ (‪ ،)ERR‬الحزم المسقطه (‪ ،)DRP‬والحزم المكرره (‪ .)OVR‬وتبين األعمدة التي تبدءا ب‬
‫‪ )transmitted( TX‬مثل السابقه ولكن المرسله‪ .‬األداة ‪ netstat‬يمكن استخدامها لمراقبة واجهات الشبكة في الوقت الحقيقي‪ .‬تشغيله مع‬
‫الخيار ‪ -c‬يعرض اإلحصاءات على فترات بالثانية‪:‬‬
‫‪# netstat -i -c‬‬
‫هذا الوضع يمكن استخدامه لتتبع مصادر أخطاء الشبكة‪.‬‬
‫تشغيل ‪ netstat‬مع الخيار ‪ -s‬يعرض إحصاءات العمل لبروتوكوالت الشبكة المختلفة‪:‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪225‬‬

‫اما الخيار ‪ -r‬الخراج جدول ‪ .routing‬الخيار ‪ -p‬يستخدم الستخراج المعلومات حول العمليات المرتبطة بمنافذ معينة‪:‬‬

‫بمقارنة اإلخراج التي ينتجها الخيار ‪ ،-a‬وناتج الخيار ‪ -p‬حيث يضيف عمود آخر إلى اإلخراج‪ ،‬واسمه ‪ ،PID/Program name‬والتي‬
‫تظهر ‪ PID‬واسم الخدمة‪.‬‬

‫‪Lsof‬‬
‫األداة ‪ lsof‬يتم تضمينها مع معظم توزيعات لينكس الحديثة‪ .‬اسم ‪ lsof‬هو اختصار ل "‪ "list open files‬والتي تعنى قائمة الملفات المفتوحه‪،‬‬
‫وفقا لذلك‪ ،‬عند تشغيلها بدون معلمات‪ ،‬فانه يسرد كافة الملفات المفتوحة‪ ،‬والمجلدات‪ ،‬والمكتبات‪ ،UNIX streams ،‬والمنافذ المفتوحه‬
‫والعمليات التي فتحتهم‪ .‬ولكن عند تشغيله مع المعلمة ‪ ،-i‬فهو يسرد فقط المنافذ المفتوحة والعمليات التي فتحتهم‪ .‬وفيما يلي مثال على هذا‬
‫اإلخراج‪:‬‬

‫االداه يمكنها اخراج المعلومات لخدمات معينه فقط‪.‬‬

‫‪Tcpdump‬‬
‫األداة المساعدة ‪ tcpdump‬هو محلل لحزم شبكة االتصال (‪ )network packet analyzer‬التي وضعها مختبر لورانس بيركلي الوطني‪.‬‬
‫الصفحة الرسمية لهذه األداة هي ‪.http://www.tcpdump.org‬‬

‫خيارات سطر األوامر (‪)Commond Line Options‬‬


‫إذا تم تشغيل ‪ tcpdump‬بدون أية معلمات‪ ،‬فإنه يعترض كل حزم الشبكة ويعرض معلومات الرأس "‪ "header‬الخاصة بهم‪ .‬يتم استخدام‬
‫المعلم ‪ -i‬لتحديد واجهة الشبكة التي سوف يتم الحصول على البيانات منها وأيضا ‪ –D‬لعرض جميع الوجهات المتاحه‪:‬‬
‫‪# tcpdump -i eth2‬‬
‫الظهار فقط الحزم المستلمة أو المرسلة من قبل مضيف محدد‪ ،‬يجب تحديد اسم المضيف أو عنوان ‪ IP‬للمضيف بعد الكلمة ‪:host‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪226‬‬

‫‪# tcpdump host namesrv‬‬


‫تبادل الحزم‪ ،‬على سبيل المثال‪ ،‬بين المضيفين ‪ narneservl‬و‪ narneserv2‬يمكن عرضها باستخدام فلتر التالي‪:‬‬
‫‪# tcpdump host namesrv1 and host namesrv2‬‬
‫كما يمكن عرضه باستخدام النسخ المختصره منه‪:‬‬
‫‪# tcpdump host namesrv1 and namesrv2‬‬
‫لعرض الحزم الصادرة فقط من عقدة معينة يمكن أن تتم بواسطة تشغيل األداة مع الكلمات ‪:src host‬‬
‫‪# tcpdump src host namesrv‬‬
‫لعرض الحزم الوارده فقط من عقدة معينة يمكن أن تتم بواسطة تشغيل األداة مع الكلمات ‪:dst host‬‬
‫‪# tcpdump dst host namesrv‬‬
‫يتم استخدام الكلمات الرئيسية ‪ src port‬و‪ dst port‬لتتبع منفذ المصدر (‪ )source port‬ومنفذ الصادر (‪ ،)destination port‬على‬
‫التوالي‪:‬‬
‫‪# tcpdump dst port 513‬‬
‫لتتبع واحد فقط من البروتوكوالت الثالثة ‪ ،UDP ،TCP‬أو ‪ ICMP‬من خالل ان يتم تحديد اسمها ببساطة في سطر األوامر‪ .‬الفالتر من أي‬
‫درجة من التعقيد يمكن بناؤها باستخدام العوامل المنطقية "‪ ،)||( "or" ،)&&( "and‬و "‪ .)!( "not‬وفيما يلي مثال على فلترة الحزم‬
‫‪ ICMP‬الوحيدة القادمة من الشبكة الخارجية‪:‬‬
‫‪#tcpdump icmp and not src net localnet‬‬
‫البت "‪ "bits‬المحدد أو البايت "‪ "bytes‬في رؤوس البروتوكول يمكن اختيارها باستخدام الشكل التالي ]‪ .proto [expr:size‬هنا يحدد‬
‫‪ proto‬بواحدة من البروتوكوالت التالية‪ ،ICMP ،UDP ،TCP ،RARP ،ARP ،IP ،TR ،FDDI ،ether :‬أو ‪ .IP6‬يحدد الحقل‬
‫‪ expr‬اإلزاحة بالبايت "‪ "offset in bytes‬من بداية رأس الحزمة‪ ،‬والحقل ‪ size‬هو حقل مساعد لتحديد عدد البايتات لدراسة (إذا تم حذفها‪،‬‬
‫يتم اختبار بايت ‪ 1‬فقط)‪ .‬على سبيل المثال‪ ،‬فإن الفلتره التالية الختيار شرائح ‪ TCP‬فقط مع المعلم ‪:SYN‬‬
‫'‪# tcpdump ' tcp[ 13 ]==2‬‬
‫فيما يتعلق بهذا الفلتر‪ ،‬البايت ‪ 11‬من رأس ‪ TCP‬يحتوي على ‪ 1‬بت من ‪ ،flag‬منها ‪ SYN‬هو الثاني في النظام‪ .‬ألنه يجب أن يتم تعيين هذا‬
‫‪ bit‬الى ‪ ،1‬فإن محتويات ‪ flag byte‬في الشكل ‪ binary‬يكون ‪( 22222212‬أو ‪ 1‬في ‪ .)hexdecimal‬يمكن استخدام المعلم ‪ -c‬لتحديد‬
‫عدد الحزم الحصول عليها‪ .‬على سبيل المثال‪ ،‬سيتم استالم ‪ 12‬بايت فقط عن طريق تنفيذ األمر التالي‪:‬‬
‫‪#tcpdump - c 10‬‬
‫المعلم ‪ -a‬يرشد األداة لمحاولة تحويل عناوين ‪ IP‬إلى أسماء (على حساب سرعة التنفيذ) وعكسها الخيار ‪:–n‬‬
‫‪# tcpdump -a‬‬
‫‪ ،)very verbos( -vv ،)verbos( -v‬و‪ )very, very verbos( -vvv‬خيارات تنتج تمديدا تدريجيا في النواتج‪.‬‬
‫يمكنك باستخدام المفتاح ">‪ "ether <MAC_address‬لتحديد عنوان ‪ .MAC‬والمفتاح ">‪ "net <network_name‬يستخدم في‬
‫االستماع (التقاط حزم) من شبكة بعينها‪.‬‬

‫‪Formst of tcpdump Output‬‬


‫كل سطر من قائمة ‪ tcpdump‬يبدأ مع ‪ hh:mm:ss.frac‬وهو ختم الوقت من الوقت الحالي‪ ،‬حيث ‪ frac‬هي أجزاء من الثانية‪ .‬يمكن اتباع‬
‫الطابع الزمني "‪ "time stamp‬من قبل واجهة الشبكه (على سبيل المثال‪ ،eth1 ،eth0 ،‬أو ‪ )lo‬وتستخدم الستقبال أو إرسال الحزم‪ .‬يشار‬
‫الى اتجاه النقل باستخدام < أو >‪ .‬على سبيل المثال‪ eth0< ،‬يعني أن واجهة ‪ eth0‬تتلقى الحزم‪ .‬وفقا لذلك‪ eth0> ،‬يعني أن واجهة ‪eth0‬‬
‫ترسل الحزم على الشبكة‪ .‬تعتمد المعلومات التالية على نوع الحزمة‪ ،ATP ،NBP ،UDP ،TCP ،ARP/RARP :‬وهلم جرا‪ .‬وفيما يلي‬
‫صيغ لبعض أنواع الحزم الرئيسية‪.‬‬

‫‪TCP Packets‬‬
‫‪Src .port > dst .port: flags data-seqno ack window urgent options‬‬
‫هنا‪ src.port ،‬و‪ dst.port‬هما عنوان ‪ IP‬المصدر والوجهة والمنافذ‪ .‬يحدد الحقل ‪ Flags‬مجموعة ‪ flags‬الخاصه برأس ‪ .TCP‬ويمكن‬
‫أن يكون مزيجا من )‪ ،P (PUSH) ،F (FIN) ،S (SYN‬و)‪ Period .R (RST‬في هذا الحقل يعني أنه ال توجد مجموعة ‪.flags‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪227‬‬

‫الحقل ‪ date-seqno‬يصف بيانات الحزمة في الصيغه )‪ Fisrt .first: last (nbytes‬و ‪ last‬هنا هما أرقام التسلسل " ‪sequence‬‬
‫‪ "number‬للحزمه ألول واخر بايت‪ ،‬وعلى التوالي‪ nbytes ،‬هو عدد البايت من البيانات في الحزمة‪ .‬إذا كان ‪ nbytes‬هو ‪ ،2‬فان‬
‫المعلمات ‪ fisrt‬هي نفسها ‪.last‬‬
‫المعلم ‪ ACK‬يحدد الرقم التالي في تسلسل (‪.)ISN + 1‬‬
‫المعلم ‪ Window‬يحدد حجم اإلطار "‪."windows size‬‬
‫المعلم ‪ Urgent‬يعني أن الحزمة تحتوي على بيانات عاجلة (‪.)URG flag‬‬
‫الملعم ‪ Options‬يحدد المعلومات اإلضافية‪ ،‬على سبيل المثال‪( <mss 1024> ،‬الحد األقصى لحجم ‪.)segment‬‬

‫‪UDP Packets‬‬
‫‪Src.port > dst.port: udp nbytes‬‬
‫العالمه ‪ udp‬تحدد ان هذه الحزمه هي حزمة ‪.UDP‬‬
‫الحقل ‪ nbytes‬يحدد عدد البايت في حزمة ‪.UDP‬‬

‫‪ICMP Packets‬‬
‫‪Src > dst: icmp: type‬‬
‫العالمه ‪ icmp‬تحد ان هذه الحزمه هي حزمة ‪.ICMP‬‬
‫الحقل ‪ Type‬يحدد نوع رسالة ‪ ،ICMP message‬على سبيل المثال ‪ echo request‬او ‪.echo reply‬‬

‫‪ 1.1‬المزيد من األدوات‬
‫األدوات التي يتم وصفها في هذا الجزء ال يتم استخدامها غالبا من قبل المبرمجين‪ ،‬ولكن في بعض الحاالت ال غنى عنها‪ .‬لذلك‪ ،‬يجب أن تكون‬
‫على علم بوجودها ولديك معرفة عامة على األقل بطريقة تشغيلها‪ .‬جميع األدوات التي سوف يتم وصفها في الجزء هي‪ ،‬موجودة في أي‬
‫توزيعة لينكس‪ .‬ويوجد العديد منها أيضا في حزمة ‪ ،binutils GNU‬الذي هى جزء أساسي من أي نظام لينكس‪ .‬الصفحة الرئيسية لمطورين‬
‫حزمة ‪ binutils‬توجد على هذا العنوان‪ .http://www.sourceware.org/binutils :‬يعطي هذا الجزء معلومات عامه عن كل اداة‪.‬‬
‫للحصول على معلومات مفصلة‪ ،‬فيمكنك التشاور مع األداة ‪.man‬‬

‫‪Time‬‬
‫األداة ‪ time‬تقوم بتشغيل البرنامج المحدد‪ .‬عند انتهاء البرنامج‪ ،‬األداة تقوم بطباعة إحصاءات التوقيت على مدى تابرنامج‪ ،‬على سبيل المثال‪:‬‬

‫المصطلح ‪ ،real‬يعنى الوقت الحقيقي المنقضي بين بدء البرنامج وإنهاء البرنامج‪ ،‬والمصطلحين ‪ user‬و‪ ،sys‬على التوالي‪ ،‬وقت وحدة‬
‫المعالجة المركزية ‪ CPU‬للمستخدم والنظام بالدقيقة (‪ )m‬والثانية (‪ )s‬والتي اتخذت من قبل تنفيذ البرنامج‪ .‬يمكنك تتبع وقت تنفيذ برنامج‬
‫يستخدم معلمات سطر أوامر متعددة‪ ،‬والقنوات‪ ،‬أو كليهما عن طريق تشغيل األداة بهذه الطريقة‪:‬‬

‫‪Gprof‬‬
‫األداة ‪ gprof‬هى ‪ .profiler‬يستخدم ‪ Profiler‬لتحديد استداعاء الدوال المفرط من قبل البرنامج والوظائف التي تستهلك أكثر من نصيبها‬
‫العادل من الموارد هذا هو‪ ،‬لتحديد عنق الزجاجه في البرامج‪ .‬األداة سهلة االستخدام‪ .‬أوال‪ ،‬يتم ترجمة وربط البرنامج مع الخيار ‪( profile‬عن‬
‫طريق تحديد الخيار ‪ -pg‬مع االداه ‪ .)gcc‬عند تنفيذ هذا البرنامج‪ ،‬يتم إنشاء معلومات ‪ ،profile‬والتي يتم تخزينها في ملف ‪.gmon.out‬‬
‫يجب أن يكون برنامج خالى من األخطاء "‪ ،"bugs‬وذلك ألن لن يتم إنشاء أية ‪ profile‬إذا كان البرنامج يتم إنهائه بشكل غير طبيعي‪.‬‬
‫وأخيرا‪ ،‬يتم تشغيل ‪ gproof‬مع اسم الملف القابل للتنفيذ النشاء ‪ profile‬المحدد في معالمه‪.‬‬
‫األداة ‪ gprof‬تقوم بتحليل الملف ‪ gmon.out‬وتنتج معلومات وقت التنفيذ لكل دالة‪ .‬بشكل عام‪ ،‬هذه المعلومات ناتج عن اثنين من الجداول‪:‬‬
‫‪ flat profile‬و‪ ،call graph‬مع تصريحات مقتضبة لشرح محتوياتها‪ .‬يبين الجدول ‪ flat profile‬وقت التنفيذ وعدد االستعداءات "‪"call‬‬
‫لكل دالة‪ .‬هذه المعلومات يجعل من السهل تحديد الدوال مع أطول أوقات التنفيذ‪ .‬الجدول ‪ call graph‬يساعد في تحديد المناطق‪ ،‬والتي قد‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪228‬‬

‫تحاول ازالة ‪ calls‬إلى دوال ‪ .time-hungery‬لكل دالة‪ ،‬يبين الجدول معلومات حول االستدعاء واستدعاء الداله والعدد المقابل من‬
‫االستدعاءات "‪ ."calls‬كما أنه يحتوي على معلومات حول الوقت الذي يقضيه لتنفيذ الدوال الفرعية في كل دالة‪.‬‬
‫تنفيذ االداه ‪ gprof‬مع خيار ‪ -A‬يخرج الكود المصدري للبرنامج مع النسب المئوية لوقت التنفيذ‪ .‬وفيما يلي مثال على تسلسل األوامر لتحديد‬
‫مالمح البرنامج‪:‬‬

‫‪Ctags‬‬
‫في بعض األحيان‪ ،‬يمكن أن يتكون البرنامج من العديد من الوحدات (‪ )module‬محفوظة في ملفات مصدريه مختلفة‪ .‬تحديد موقع‪ ،‬على سبيل‬
‫المثال‪ ،‬تعريف دالة معينة يصبح مثل البحث عن إبرة في كومة قش‪ .‬جعل هذه المهمة يمكن التحكم فيها هو الغرض من األداة ‪ .ctags‬األداة‬
‫تعالج الملفات المصدريه وتولد ملف معلومات يسمى ‪ .tags‬يتم تنظيم محتويات الملف ‪ tags‬في ثالثة أعمدة‪ :‬العمود األول يسرد أسماء‬
‫الدوال‪ ،‬العمود الثاني يسرد الملفات المصدريه المقابلة‪ ،‬والعمود الثالث يعطي قالب للبحث عن الدله في نظام الملفات باستخدام مثل أدوات مثل‬
‫‪ .find‬وفيما يلي مثال على محتويات الملف‪:‬‬

‫وهذا هو مثال على تنفيذ األداة ‪:ctags‬‬

‫‪Strace‬‬
‫األداة ‪ strace‬تتبع جميع استدعاءات النظام (‪ )system call‬واإلشارات (‪ )signals‬لبرنامج محدد‪ .‬يتم تشغيل األداة على النحو التالي‪:‬‬
‫‪# strace ./your_prog‬‬
‫كل سطر من اإلخراج يعرض معلومات عن استدعاء النظام (‪ )system call‬واحده‪ :‬اسم استدعاء النظام والمعلمات الخاصة به‪ ،‬تليها قيمة‬
‫‪ return‬بعد العالمة "يساوى" (=)‪ .‬وفيما يلي مثال على انتاج هذه االداه‪:‬‬

‫هنا (]‪ )[/* 27 vars*/‬يدل على قائمة من ‪ 12‬من المتغيرات البيئية‪ ،‬والتي لم يظهره ‪ strace‬حتى ال يحدث فوضى في اإلخراج‪ .‬تشغيل‬
‫‪ strace‬مع الخيار ‪ -f‬يتتبع كل العمليات (‪.)child process‬‬

‫‪Ltrace‬‬
‫هذه االداه مشابه ل ‪ ،strace‬ولكن تتبع استدعاءات المكتبه (‪.)dynamic libraries‬‬

‫‪Mtrace‬‬
‫يتم استخدام األداة ‪ mtrace‬لتتبع استخدام الذاكرة الديناميكية باستخدام البرنامج‪ .‬يحتفظ بمعلومات عن عمليات تخصيص وتفريغ الذاكرة‪.‬‬
‫وهذا هو‪ ،‬فإنه يتتبع تسرب الذاكرة "‪ ."memory leaks‬تسرب الذاكرة "‪ "memory leaks‬يقلل تتدريجيا موارد النظام المتوفرة حتى‬
‫إرهاقه‪ .‬بغية تحديد جميع مناطق تسرب الذاكرة المحتملة في البرنامج‪ ،‬سيكون لديك أداء التسلسل التالي من الخطوات التالية‪ :‬أوال‪ ،‬قم بتضمين‬
‫الملف ‪ mcheck.h‬في البرنامج ووضع استدعاء الداله )( ‪ mtrace‬في بداية البرنامج‪ .‬ثم‪ ،‬تحديد اسم الملف‪ ،‬الذي سوف يتم فيه تخزين نتائج‬
‫فحص الذاكرة‪ ،‬من خالل تصدير االسم إلى متغير البيئي‪ ،‬كما في المثال التالي‪:‬‬
‫‪# export MALLOC_TRACE=mem.log‬‬
‫تشغيل البرنامج اآلن سوفيقوم بتسجيل كافة تخصيص الذاكرة وعميات التحرير في الملف ‪ .mem.log‬وأخيرا‪ ،‬يتم استدعاء االداه ‪mtrace‬‬
‫على النحو التالي‪:‬‬
‫‪# mtrace you-prog $MALLOC_TRACE‬‬
‫يتم فحص المعلومات المنتجة لتسجيل المواضع‪ ،‬التي تم فيها تخصيص الذاكره ولكن ليس التفريغ‪ .‬باتباع اإلجراءات المنصوص عليها فان‬
‫البرنامج سوف يقوم باالنتهاء بشكل طبيعى‪.‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪229‬‬

‫‪Make/gmake‬‬
‫تغيير أي ملف في مشروع ذات ملفات متعدد يستتبع حتما باعادة تجميع بقية الملفات‪ .‬األداة ‪( make‬تسمى ‪ gmake‬في بعض التوزيعات)‬
‫يهدف الى اخذ حمل‪/‬كدح هذه المهمة‪ .‬الستخدام األداة ‪ ،make‬يجب إعداد ملف نصي‪ ،‬يسمى ‪ ،makefile‬التي يوضع فيه العالقات بين‬
‫الملفات في البرنامج وقواعد البناء بها‪ .‬وتسجل القواعد في شكل التالي‪:‬‬

‫يتم تنفيذ الهدف "‪ "target‬األول في ‪ makefile‬بشكل افتراضي عند تشغيل ‪ make‬بدون وسائط‪ .‬وعادة تستدعى كل ذلك‪ ،‬وهو ما يعادل‬
‫األمر ‪ .make all‬وفيما يلي مثال على ‪:makefile‬‬

‫األمر ‪ clean‬يحذف كل الملفات والبرامج التي تم انشائها بحيث يمكن أن تنشأ من جديد مع االمر ‪ .make‬لبناء المشروع‪ ،‬كل ما عليك القيام‬
‫به هو إدخال االمر ‪ mkae‬في سطر األوامر‪.‬‬

‫‪Automake/autoconf‬‬
‫هناك طريقة أسهل في إعداد ‪ ،makefiles‬وذلك باستخدام االدوات ‪ automake‬و‪ .autoconf‬نقوم أوال‪ ،‬بإعداد الملف ‪makefile.am‬‬
‫على سبيل المثال‪ ،‬مثل هذا‪:‬‬

‫يحدد الخيار األخير ملفات الوثائق (األخبار‪ ،readme ،‬والمؤلفين) التي ال ليتم تضمينها في المشروع‪.‬‬
‫الخطوه المقبله‪ ،‬هو إنشاء الملف ‪ .configure.in‬ويمكن القيام بذلك باستخدام األداة ‪ .autoscan‬هذه األداة تقوم بفحص شجرة الملفات‬
‫المصدريه‪ ،‬الذي تم تحديد جذرها في سطر األوامر أو هي فى نفس المجلد الحالي‪ ،‬ومن ثم انشاء الملف ‪ .configure.scan‬يتم تفقد هذا‬
‫الملف‪ ،‬تصحيحه عند الضرورة‪ ،‬ومن ثم إعادة تسمية الى ‪ .configure.in‬الخطوة األخيرة تشغيل االدوات التالية في الترتيب كما هو‬
‫موضح هنا‪:‬‬
‫‪# aclocal‬‬
‫‪# autoconf‬‬
‫‪# automake -a -c‬‬
‫وستكون النتيجة انشاء كال من ‪ makefile.in script‬و‪ configure script‬وملفات ‪ documentation‬في الدليل الحالي‪ .‬اآلن‪ ،‬لبناء‬
‫المشروع‪ ،‬كل ما عليك القيام به هو إدخال األوامر التالية في سطر األوامر‪:‬‬
‫‪# ./configure‬‬
‫‪# make‬‬

‫‪Ldd‬‬
‫األداة ‪ ldd‬تعرض كل المكتبات "‪ "shared libraries‬المطلوبة من قبل كل برنامج‪ .‬وفيما يلي مثال على بدء تشغيله‪:‬‬
‫‪# ldd ./your_prog‬‬

‫‪Objdump‬‬
‫تعرض األداة ‪ objdump‬المعلومات حول واحد أو أكثر من ملفات ‪object‬؛ المعلومات الخاصة التي يتم عرضها تحدد من قبل الخيارات‪.‬‬
‫على سبيل المثال‪ ،‬الخيار ‪ -D‬يقوم بطباعة التفكيك "‪ "disassembly‬من البرنامج المحدد‪ .‬الخيار ‪ -x‬يطبع كافة رؤوس البرنامج‪ ،‬بما في‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪230‬‬

‫ذلك الملف وقسم ‪ .header‬الخيار ‪ -s‬يظهر محتويات كافة األقسام‪ .‬والخيار ‪ -R‬يسرد قوائم بتحرك البيانات‪ .‬وفيما يلي مثال على بدء تشغيل‬
‫األداة المساعدة‪.)objdump -D ./yourprogram( :‬‬

‫‪Hexdump and od‬‬


‫االداه ‪ hexdump‬يستخدم لعرض محتويات ملف محدد في صورة ‪ ،)-b( octal ،)-x( hexadecimal ،)-d( decimal‬و‪.)-c( ASCII‬‬
‫يظهر السطر التالى مثال على تشغيل االداه‪:‬‬
‫‪# hexdump -c ./your_rog‬‬
‫االداه ‪ od‬هي مشابه لالداه ‪.hexdump‬‬

‫‪Strings‬‬
‫تعرض األداة ‪ strings‬السالسل المقابه ألحرف ‪ ASCII‬القابله للطباعة في ملف أطول من أربعة أحرف (اإلعداد االفتراضي)‪ .‬وفيما يلي‬
‫مثال على تشغيل األداة المساعدة‪.)strings ./yourprogram( :‬‬

‫‪Readelf‬‬
‫تعرض األداة ‪ readelf‬المعلومات حول الملف )‪ ،executable and linkable format (ELF‬مثل الملف ومقطع الرأس وغيرها من‬
‫الهياكل‪( .‬سوف تناقش الحقا)‪.‬‬

‫‪Size‬‬
‫تعرض األداة ‪ size‬حجم القسم في كل من الملفات المحددة‪ .‬افتراضيا‪ ،‬يتم سرد حجم األقسام االتيه فقط‪data ،).text( command :‬‬
‫(‪ ،).data‬والبيانات غير المهيأ )‪ (.bss‬والحجم اإلجمالي لهذه األقسام يتم سردها في الشكل ‪ decimal‬و‪ .hexadecimal‬لسرد أحجام جميع‬
‫األقسام في الملف‪ ،‬يستخدم الخيار ‪ .-A‬وفيما يلي مثال على تشغيل األداة‪:‬‬
‫‪# size ./your_program‬‬

‫‪Nm‬‬
‫األداة ‪ ،nm‬تستخدم لسرد جدول الرموز (‪ )symbols table‬من البرنامج الهدف‪ .‬وتستخدم الجداول رمزا لتصحيح التطبيقات‪ .‬باستخدام‬
‫‪ ،nm‬يمكننا التعرف على الدوال المحلية والمكتبة وأيضا المتغيرات العالمية المستخدمة‪ .‬تعرض األداة ‪ nm‬اسم كل رمز ومعلومات عن‬
‫نوعه‪ .‬فيما يلي الرموز المستخدمه معه‪:‬‬
‫‪- t|T – The symbol is present in the .text code section‬‬
‫‪- b|B – The symbol is in UN-initialized .data section‬‬
‫‪- D|d – The symbol is in Initialized .data section.‬‬
‫‪The Capital or Small letter, determines whether the symbol is local or global.‬‬

‫‪Strip‬‬
‫عندما يتم تصحيح برنامج‪ ،‬يمكن حذف جدول الرموز منه‪ .‬ويتم إنجاز هذا باستخدام األداة ‪:strip‬‬
‫‪# strip ./your_prog‬‬

‫‪File‬‬
‫األداة ‪ file‬تنفذ سلسلة من االختبارات على كل من الملفات المحددة في محاولة لتصنيفها‪ .‬مع الملفات النصية‪ ،‬تحاول األداة المساعدة لتحديد‬
‫لغة البرمجة من خالل اول ‪ .512 bytes‬مع الملفات القابلة للتنفيذ‪ ،‬تعرض األداة المعلومات حول المنصة‪ ،‬اإلصدار‪ ،‬وهيكل مكتبات الملف‪.‬‬
‫وفيما يلي مثالين من تشغيل األداة ‪:file‬‬

‫‪https://www.facebook.com/tibea2004‬‬
‫فن الهاكر األخالقي‬ ‫‪231‬‬

‫عند تنفيذ األداة ‪ ،file‬يجب أن تخبره بالمسار الذي سوف يصل من خالله الى الملف لالختبار‪ .‬يمكن تحديد مسار إما صراحة أو ضمنيا‬
‫باستخدام االمر ‪ which‬واسم الملف سوف يكون بين عالمتي‪-‬النطقية (')‪ .‬وفيما يلي مثال على تحديد مسار الملف ضمنيا‪:‬‬

‫‪Ipcs and ipcrm‬‬


‫االداتان ‪ ipcs‬و‪ ipcrm‬تأتي في متناول اليدين إذا كانت هناك اتصاالت بين العمليات في البرنامج‪ .‬تنفيذ األداة المساعدة ‪ ipcs‬مع الخيار ‪-m‬‬
‫يعرض معلومات عن القطاعات المشتركة‪:‬‬
‫‪# ipcs -m‬‬
‫يظهر الخيار ‪ -s‬المعلومات حول مصفوفات ‪( semaphore arrays‬هو متغير أو نوع بيانات مجرد الذي يوفر تجريد بسيط لكن مفيد‬
‫للتحكم في الدخول إلى مورد مشترك بواسطة عمليات متعددة)‪ .‬يتم استخدام األداة المساعدة ‪ ipcrm‬إلزالة شريحة الذاكرة المشتركة أو‬
‫‪ .semaphore arrays‬على سبيل المثال‪ ،‬يزيل األمر التالي الجزء الذي مع المعرف ‪:1111222‬‬
‫‪# ipcrm shm 2345097‬‬
‫لكي تعمل االداتين ‪ ipcs‬و‪ ،ipcrm‬يجب تمكين الخيارات التالية في الكيرنل‪:‬‬
‫‪SYSVMSG - System V message support‬‬
‫‪SYSVSEM - System V semaphore support‬‬
‫‪SYSVSHM - System V shared memory support‬‬

‫‪Ar and ranlib‬‬


‫‪ Ar‬وهو اختصار الى ‪ ،archiver‬والتي تأتي في حزمة ‪ ،binutils‬ويمكن استخدامها إلنشاء مكتبات ثابته "‪ ."static libraries‬وفيما‬
‫يلي مثال على تشغيل األداة‪:‬‬
‫‪# ar cr libmy.a filel.o file2.o‬‬
‫وتحدد العالمه ‪ cr‬األرشيف الذي ينبغي إنشاءه‪ .‬وتستخدم أعالم أخرى الستخراج أو تعديل األرشيف (قم بتشغيل ‪ man ar‬لمزيد من‬
‫التفاصيل)‪ .‬وترتبط المكتبة الثابتة بالبرنامج باستخدام ‪ gcc‬أو ‪ g++‬مع المعلم ‪ ،-L‬الذي يحدد المجلد‪ ،‬للبحث عن المكتبة‪ .‬والمعلم"‪ "-L.‬يحدد‬
‫المكتبة التي تقع في الدليل الحالي‪ .‬ثم يتم سرد كافة المكتبات الالزمة باستخدام ‪ ،-l‬يليه اسم المكتبة بدون ‪ lib prefix‬و"‪ .".a‬وهذا هو‪ ،‬في‬
‫حالة معينة‪ ،‬األمر سيبدو كما يلي‪:‬‬
‫‪#gcc -o yourprog.c -L. -lmy -o yourprog‬‬
‫على الرغم من أن هذا األسلوب للحصول على المكتبات الثابتة يعمل في معظم الحاالت‪ ،‬فإنه ال يعمل على بعض األنظمة ألن جدول الرموز‬
‫"‪( "symbol table‬أي قائمة من ‪ library's functions‬والمتغيرات) يضاف إلى أرشيف الذي تم إنشاؤه من قبل األداة ‪ ar‬لربط العمليه‪.‬‬
‫لتحقيق النجاح يتم ذلك باستخدام األداة ‪ ranlib‬من حزمة ‪:binutils‬‬
‫‪# ranlib libmy .a‬‬
‫اآلن المكتبة يمكن ربطها بالبرنامج‪ ،‬وذلك باستخدام ‪ gcc‬كما هو مبين في المثال السابق‪ .‬فمن المستحسن أن تقوم بمعالجة األرشيف دائما‬
‫باستخدام األداة المساعدة ‪ ranlib‬عند إنشاء مكتبة ثابتة‪.‬‬

‫‪Arp‬‬
‫تستخدم األداة المساعدة ‪ arp‬لعرض والتالعب ب ‪ .system ARP cache‬الخيار ‪ -a‬يعرض محتويات ‪ ARP cache‬في بيئة ‪،BSD‬‬
‫والخيار ‪ -e‬يفعل هذا في أسلوب لينكس‪ .‬يستخدم الخيار ‪ -d‬لمسح دخول مضيف محدد‪:‬‬
‫‪#arp -d IP_address‬‬
‫الدخول‪ ،‬مع ذلك‪ ،‬ال يتم حذفه من ‪ ; cache‬حقل عنوان األجهزه )‪ (HWaddress‬يتم ازالته ببساطة‪.‬‬
‫يمكن إضافة إدخال المضيف إلى عنوان الجهاز إلى ‪ ARP cache‬باستخدام الخيار ‪ -s‬على النحو التالي‪:‬‬
‫‪# arp -s IP_address MAC_address‬‬

‫لقد تم بحمد هللا الحزء األول من المجموعه المخصصه الحتراف الهاكر االخالقى‪.‬‬

‫‪https://www.facebook.com/tibea2004‬‬

You might also like