Professional Documents
Culture Documents
المجلد االول
البداية
By
عن أبي هريرة -رضي هللا عنه-أن رسول هللا -صلى هللا عليه وسلم-ق ال :إذا مات ابن آدم انقطع
عمله إال من ثالث :صدقة جارية ،أو علم ينتفع به ،أو ولد صالح يدعو له .رواه مسلم.
https://www.facebook.com/tibea2004
فن الهاكر األخالقي 2
إهدإء
**الكتاب تم نشره تحت الترخيص الحر مفتوح المصدر ،و ال يسمح باستخدامه في أي عمل تجارى**
https://www.facebook.com/tibea2004
فن الهاكر األخالقي 3
الفهرس
المدخل إلى عالم االختراق. الفصل األول
هذا الكتاب يعد الكتاب الثالث بالنسبة لي .وهو بعد السلسة السابقة الذي تناول ترجمة CEHv8ويعد االصدار االحدث حيث
يتناول عملية االختراق األخالقي من زاوية أخرى .هنا سوف نتعلم كيف يمكننا ان ننشئ برامجنا ليس كما في اإلصدار السابق
الذي اعتمد على استخدام البرمجيات الجاهزة فقط .في هذه السلسلة سوف نتعلم كل شيء حتى نصبح محترفين في مجال الهاكر
األخالقي.
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 .............................................................
مستوى األمن في أي نظام يمكن تعريفها من قبل قوة من الثالثة عناصر التالية12 ....................................................................................................... :
هذه األنواع الثالثه من التهديد تنقسم هى األخرى إلى أنواع أخرى كاالتى12 ............................................................................................................. :
https://www.facebook.com/tibea2004
فن الهاكر األخالقي 5
ما هو الفرق بين الهاكر المدمر( )Hackingوالهاكر األخالقي ()Ethical hacking؟ 11 .............................................................................................
https://www.facebook.com/tibea2004
فن الهاكر األخالقي 6
11 ........................................................................... (Scope and Limitations of The Ethical Hackers)نطاق وحدود القراصنة األخالقيين
11 ......................................................................................................................................................................................... Scope
11 ............................................................................................................................................................................... Limitations
11 .......................................................... (Steps To Create And Implement Security Policies) الخطوات إلنشاء وتطبيق السياسات األمنية
11 .............................................................................................................................................................................................. مقدمه1.1
https://www.facebook.com/tibea2004
فن الهاكر األخالقي 7
12 ....................................................................................................................................................................... VirtualBox 2.
11 .................................................................................................................................................................................. Xen .1
11 ........................................................................................................................................................................... Hyper-V 3.
11 ........................................................................................................................................................................ XenServer .1
21 ............................................................................................................................................................................................ Router
22 ......................................................................................................................................................................................... Firewall
22 ......................................................................................................... طريقة أخرى إلنشاء معمل خاص بك وهو االستعانة بعمل عن طريق الشبكة
(PROGRAMING) البرمجة
https://www.facebook.com/tibea2004
فن الهاكر األخالقي 8
11 ........................................................................................................................................................................................... Strings
22 ................................................................................................................................................................................... Typecasting
(NETWORK) الشبكات
https://www.facebook.com/tibea2004
فن الهاكر األخالقي 9
https://www.facebook.com/tibea2004
فن الهاكر األخالقي 10
111 ............ (Permissions & User Account Control (UAC)) الصالحيات والتحكم في حساب المستخدم .1
https://www.facebook.com/tibea2004
فن الهاكر األخالقي 11
112 ....................................................................................................... )User Rights & Security Policies( حقوق المستخدم وسياسات األمن
122 ....................................................................................................................................... "؟kernel" ما هي المهام التي تقوم بها نواة النظام
https://www.facebook.com/tibea2004
فن الهاكر األخالقي 12
121 ................................................................................................ (Process creation and program execution) إنشاء العملية وتنفيذ البرامج
121 ...............................................................................................(Process termination and termination status) إنهاء عملية وحالة اإلنهاء
https://www.facebook.com/tibea2004
فن الهاكر األخالقي 13
(METASPLOIT) الميتاسبلويت
112 ........................................................................................................................................................................................Listener
122 ......................................................................................................................................................................................Armitage
https://www.facebook.com/tibea2004
فن الهاكر األخالقي 14
مما يتسبب في قيام نظام التشغيل هذا بتشغيل البرمجيات التي هي من اختيار المهاجم (عادة،قد تم تصميم هذه الوحدات لالستفادة من عيب على جهاز هدف
client- البعض اآلخر. في الخدمة الهدف عبر الشبكةlistening التي تستغل،service-side attacks هيexploits بعض من.)Metasploit payload
121 .................................................... . في الردexploit وتقديم، التي تستمع على شبكة من اجل الطلبات الواردة من العمالء المخترقين.side attacks
https://www.facebook.com/tibea2004
فن الهاكر األخالقي 15
111 ......................................................................... )Meterpreter Stdapi Capabilities: Networking Commands ( أوامر التعامل مع الشبكه
https://www.facebook.com/tibea2004
فن الهاكر األخالقي 16
112 ......................................................................................................................................................................................Objdump
https://www.facebook.com/tibea2004
فن الهاكر األخالقي 17
112 ............................................................................................................................................................................................... Nm
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واحده من التي ال يوجد حاليا لها أي إصالح متوفرة .كل من يقوم بتشغيل برنامج
معين يحتوي على هذا يتعرض لالختراق ،مع حماية ضئيلة أو معدومة .ويعلن عن رمز لهذه األنواع من الهجمات على المواقع الخاصة
وبيعها لمهاجمين آخرين أو عصابات الجريمة المنظمة.
تعريف الهاكر
الهاكر هو كلمة لها معنيان:
تقليديا ،الهاكر هو الشخص الذي يحب العبث مع البرامج أو األنظمة اإللكترونية .الهاكر يتمتعون باستكشاف والتعلم كيف تعمل
أنظمة الكمبيوتر.
في اآلونة األخيرة ،اتخذت كلمة الهاكرز معنى جديد وهو شخص يقوم بالكسر الضار للنظم لتحقيق مكاسب شخصية .من الناحية
الفنية ،هؤالء المجرمين هم الكراكرز (الهاكرز الجنائيين) .الكراكرز تقوم بكسر النظم (الكراك) مع نوايا خبيثة .يكونون في الخارج
لتحقيق مكاسب شخصية :الشهرة ،الربح ،وحتى االنتقام .يقومون بتعديل أو حذف ،وسرقة المعلومات الحساسة ،وغالبا ما يجعل
الناس اآلخرين بائسين
الهاكرز االخيار (ذات القبعة البيضاء " )"white hatال يندرجون تحت نفس الفئة من الهاكرز االشرار (ذات القبع السوداء ".)"black hat
(هذه تأتي من األفالم الغربية حيث يرتدى األخيار قبعات رعاة البقر البيضاء ويرتدى األشرار قبعات رعاة البقر السوداء) .وأيا كان األمر،
فإن معظم الناس أعطى الهاكر داللة سلبية .العديد من القراصنة الخبيث تدعي أنها ال تسبب ضررا ولكن بدال من ذلك يقومون بمساعدة
اآلخرين .نعم ،العديد من الهاكرز االشرار هم لصوص إلكترونيات.
الهاكرز (أو األشرار) " "hackerيقومون بمحاولة اختراق أجهزة الكمبيوتر.
الهاكرز األخالقيين (أو األخيار) " "ethical hackerيقومون بحماية أجهزة الكمبيوتر ضد الدخول الغير مشروع .وأكتسب قوته
من خالل خبرة أفضل هاكرز في العالم ويستخدمها في تحسين الوضع األمني ألنظمة الشبكات المختلفة.
https://www.facebook.com/tibea2004
فن الهاكر األخالقي 22
بدون الحاق أي ضرر .وهذا من الطبيعي يؤدى إلى زيادة معدالت األمن لدى النظام الخاص بك .أو بمعنى أخر هو أنسان له مهارات تعطيه
إمكانية الفهم والبحث عن نقاط الضعف في أنظمة التشغيل المختلفة ،وهذا الشخص يعتبر نفسه هاكرز حيث يستخدم نفس معرفته ونفس أدواته
ولكن بدون أن يحدث أي ضرر.
ولكن ربما أحسن وأفضل هاك ( )hackعمل في سنه 1222عندما قام اثنان من الموظفين في "مختبر بيل ."bell labوهما "دينيس ريشي
وكين تومبسون "Dennis Ritchie and Ken Thompsonوأطلقوا نظام التشغيل "يونيكس "Unixوكان أكثر من رائع في ذلك
الوقت وحتى اآلن.
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الخاصة باألفالم ،مما تسبب في انتشار النسخ
المقلدة حول العالم .وتمت مقاضاته لذلك.
https://www.facebook.com/tibea2004
فن الهاكر األخالقي 27
IC3
IC3هو اختصار ل Internet Crime complaint centerوهي شركة تعمل على رصد الهجمات اإللكترونية ثم إعطاء تقرير عن هذا.
ويمكنك زيارتها من خالل هذا الرابط .http://www.ic3.gov/default.aspx
https://www.facebook.com/tibea2004
فن الهاكر األخالقي 28
إن حماية المعلومات هو أمر قديم ولكن بدأ استخدامه بشكل فعال منذ بدايات تطور التكنولوجيا ويرتكز أمن المعلومات إلى: -
أنظمة حماية نظم التشغيل
أنظمة حماية البرامج والتطبيقات.
أنظمة حماية قواعد البيانات.
أنظمة حماية الولوج أو الدخول إلى األنظمة.
المبادئ األساسية (عناصر امن المعلومات) :من أهم المفاهيم ،ومنذ أكثر من عشرين عاما ،أمن المعلومات قد حددت ب :السرية
) ،(Confidentiality\Secrecyالتكامل ) ،(Integrityوالتوفر ) (Availabilityالمعروفة باسم .CIAالعديد من المتخصصين في
مجال أمن المعلومات يؤمنون إيمانا راسخا بأن المساءلة ينبغي أن تضاف كمبدأ أساسي ألمن المعلومات.
في عام ،1221اقترح دون باركر نموذجا بديال للثالوث التقليدي ( .)CIAيتكون نموذج باركر من ستة عناصر من أمن المعلومات .العناصر
هي السرية ،الحيازة ،السالمة ،األصالة ،التوفر واألداة .إن سداسي باركر هو موضع نقاش بين المتخصصين في مجال األمن.
كل واحد من هذه المكونات البد من أخذها في االعتبار عند قيام أي منظمة بعملية تأمين بيئتهم .كل واحد من هذه المجاالت في حد ذاته لديه
العديد من المناطق الفرعية التي لديها أيضا إلى النظر فيها عندما يتعلق األمر ببناء بنية آمنة.
السرية(Confidentiality\Secrecy):
السرية هو المصطلح المستخدم لمنع الكشف عن معلومات ألشخاص غير مصرح لهم باالطالع عليها أو الكشف عنها .على سبيل المثال،
استعمال بطاقة االئتمان في المعامالت التجارية على الشبكة يتطلب إدخال رقم بطاقة االئتمان على أن تنتقل من المشتري إلى التاجر ومن
التاجر إلنجاز وتجهيز المعامالت على الشبكة .يحاول النظام فرض السرية عن طريق تشفير رقم البطاقة أثناء اإلرسال ،وذلك بالحد من
الوصول إلى أماكن تخزين أو ظهور تسلسل رقم البطاقة (في قواعد البيانات ،وسجل الملفات ،النسخ االحتياطي ،واإليصاالت المطبوعة)،
وذلك بتقييد الوصول إلى األماكن التي يتم تخزين الرقم والبيانات بها .إذا كان الطرف الغير مصرح له قد حصل على رقم البطاقة بأي شكل
من األشكال فإن ذلك يعد انتهاكا لمبدأ السرية في حفظ وتخزين البيانات.
خرق السرية يتخذ أشكاال عديدة .تجسس شخص ما على شاشة الحاسوب لسرقة كلمات سر الدخول ،أو رؤية بيانات سرية بدون علم مالكها،
يمكن أن يكون خرقا للسرية .إذا كان الحاسوب المحمول يحتوي على معلومات حساسة عن موظفي الشركة ،فإن سرقته أو بيعه يمكن أن يسفر
عن انتهاك لمبدأ السرية .إعطاء معلومات سرية عبر اتصال هاتفي هو انتهاك لمبدأ السرية إذا كان طالب االتصال غير مخول بأن يحصل
على المعلومات .السرية أمر ضروري (لكنها غير كافية) للحفاظ على خصوصية الناس الذين تحتوي األنظمة معلوماتهم الشخصية.
التكامل )(Integrity
في مجال أمن المعلومات ،التكامل (السالمة) يعني الحفاظ على البيانات من التغيير أو التعديل عليها من قبل األشخاص الغير مخول لهم
الوصول اليها .عندما يقوم شخص ،بقصد أو بغير قصد ،بحذف أو انتهاك سالمة ملفات البيانات الهامة أو اإلضرار بها ،وهو غير مخول
بذلك ،يعد هذ ا انتهاكا لسالمة البيانات .وعندما يصيب فيروس حاسوبا ،ويقوم بتعديل بياناته أو يتلفها يعد هذا انتهاكا لسالمة البيانات ،وكذلك
عندما يكون الموظف (غير المخول) قادرا على تعديل راتبه في قاعدة البيانات والمرتبات ،وعندما يقوم مستخدم (غير مصرح له) بتخريب
موقع على شبكة اإلنترنت ،وهلم جرا .وتعني سالمة البيانات كذلك ،أن تكون التغيرات في البيانات مطردة ،فعندما يقوم عميل البنك بسحب أو
إيداع ،ينبغي أن ينعكس ذلك على رصيده في البنك.
إن اإلخالل بسالمة البيانات ليس بالضرورة نتيجة عمل تخريبي ،فمثالً ،االنقطاع في النظام قد ينشئ عنه تغيرات غير مقصودة أو ال تحفظ
تغيرات قد تمت فعالً.
https://www.facebook.com/tibea2004
فن الهاكر األخالقي 29
األصالة )(Authenticity
في الحوسبة ،واألعمال اإللكترونية ،وأمن المعلومات ،فمن الضروري لضمان أن البيانات والمعامالت ،واالتصاالت أو الوثائق (اإللكترونية
أو المادية) هي حقيقية .من المهم أيضا التأكد من صحتها للتحقق من صحة أن كل األطراف المعنية والذين يدعون الى ان يكون هم أنفسهم.
بعض أنظمة أمن المعلومات تتضمن ميزات المصادقة مثل "التوقيعات الرقمية ] ،"[digital signatureوالتي تعطي دليال على أن رسالة
البيانات هي حقيقيه وأرسلت من قبل الشخص الذي يحمل مفتاح التوقيع الصحيح.
من المهم أن نالحظ أن األنظمة و/أو شبكات اليوم تملك تقريبا كل شكل من أشكال التوثيق وعلى هذا النحو وهذا هو عادة أول منطقة امان .هذا
يمكن أن يكون شيء بسيط مثل قيام المستخدمين باختيار كلمة مرور معقدة أو إضافة عوامل إضافية إلى المصادقة مثل ،biometric ،token
أو .certificatesال يوجد عامل واحد من التوثيق آمن في شبكات اليوم.
Authorization
غالبا ما يتم تجاهل مفهوم التفويض " "Authorizationحيث يفترض انه ليس أحد مكونات بعض النماذج األمنية .هذا النهج المتخذ حاليا،
ولكن يفضل إدراجه في معظم نماذج االختبار .مفهوم authorizationأمر ضروري وهو كيف يمكننا تعيين الحقوق وأذونات الوصول إلى
المورد ،ونحن نريد ضمان امنها Authorization .يسمح لنا بامتالك أنواع مختلفة من المستخدمين مع مستويات امتياز منفصلة داخل
النظام.
عدم اإلنكار)(Non-repudiation
في القانون ،عدم االنكار يعني أن المرء لديه نية الوفاء بالتزامه اتجاه العقد .كما يعني أن أحدي أطراف المعاملة ال يمكنه إنكار تسلمه لتلك
المعاملة كما ال يمكن للطرف اآلخر نفي قيامه بإرسال المعاملة .من المهم أن نالحظ أن التكنولوجيا مثل أنظمة التشفير يمكن أن تساعد في
جهود عدم االنكار .هذا ي شير إلى القدرة على التأكد من أن طرفي العقد أو االتصاالت ال يستطيعا أن ينكرا صحة التوقيع على الوثيقة أو
الرسالة المرسلة بينهم من األمثلة على ذلك بروتكول HTTPSو.Kerberos
مستوى األمن في أي نظام يمكن تعريفها من قبل قوة من الثالثة عناصر التالية:
حيث نالحظ وجود دائرة صفراء والتي من الممكن أن تتحرك في أي زاوية من زاويا المثلث والتي تدل على معنى .حيث مكانها الحالي يدل
انه مع زيادة األمان ( )securityفانه سوف يقل األداء وسهولة االستخدام (.)Usability – Functionality
https://www.facebook.com/tibea2004
فن الهاكر األخالقي 30
هذه األنواع الثالثه من التهديد تنقسم هى األخرى إلى أنواع أخرى كاالتى:
: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
:Defensive InfoWar
يشير إلى جميع االستراتيجيات والمبادرات التي تستخدم للدفاع ضد هذا النوع من الهجمات ).(ICT assets
:Offensive InfoWar
يشير إلى InfoWarالتي تستخدم للهجوم على المؤسسات ) (ICT assetsفي الشركات المنافسة.
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
بعض المصطلحات:
: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هو الخطر المحتمل الذى يمكنه استغالل نقاط الضعف لإلخالل بالنظام األمني ،وبالتالي يسبب ضرر ممكن .التهديد إما
أن يكون "متعمدا" (على سبيل المثال ،الكراكرز الفردي أو منظمة إجرامية) أو "عرضي" (على سبيل المثال ،احتمال وجود خلل
في الكمبيوتر ،أو إمكانية وقوع كارثة طبيعية مثل الزالزل ،النار ،أو اإلعصار) أو ظرف أو حدث.
آثار االختراق
يعتمد أثر أو آثار عملية االختراق على نوعية المخترق وعلى هدفه وراء العملية التي قام بها ويمكن تلخيص أبرز األضرار كاآلتي:
يمكنه تخريب حاسوب أو شبكة محلية أو حتى كل حاسبات شركة بإطالق فيروسات أو إعادة تهيئة األقراص الصلبة أو بإتالف -
اللوحة األم والمعالج.
الحصول على كلمات السر الخاصة بك للولوج إلى البريد اإللكتروني واشتراكاتك في األنترنت وحتى أرقام بطاقة االئتمان الخاص -
بك.
https://www.facebook.com/tibea2004
فن الهاكر األخالقي 34
الحصول على أرقام بطاقات االئتمان لكثير من األشخاص وتحويل األرصدة من شخص إلى آخر وبذلك تعم الفوضى وتكبد البنوك -
خسائر مالية كبيرة.
من الممكن ان يسبب اضرار كبيره على العدي من المنظمات كاالتي: -
https://www.facebook.com/tibea2004
فن الهاكر األخالقي 35
Script Kiddies
هو هاكر ليس لديه مهارات الهاكر ولكن يتحايل على األنظمة باستخدام بعض االسكريبات واألدوات والتطبيقات التي تم تطويرها
بواسطة الهاكرز الحقيقين .وهؤالء من السهل لهم استخدام التطبيقات واالسكريبات في اكتشاف الثغرات في األنظمة المختلفة .هذا
النوع من الهاكر يركز في األساس على كمية الهجمات أكثر من قوة وفاعلية الهجمة التي يقوم بإنشائها.
Spy Hackers
هم عباره عن افراد يتم تأجيرهم من قبل المنظمات المختلفة الختراق والحصول على أسرار من المنظمات المنافسة لهم.
https://www.facebook.com/tibea2004
فن الهاكر األخالقي 36
Hacktivism
هو عملية تعزيز أجندة سياسية عن طريق القرصنة ،خاصة عن طريق تشويه أو تعطيل بعض المواقع .والشخص الذي يقوم بهذه األشياء
يسمى .hacktivistأو بمعنى أخر (هذا يشير إلى فكرة القرصنة ألسباب).
هؤالء األشخاص يزدهرون في البيئة حيث توجد المعلومات التي يمكن الوصول إليها بسهولة .وهذا يهدف إلى إرسال رسالة من خالل أنشطة
القرصنة واكتساب الرؤية من أجل قضية معينه .ومعظم األهداف إما أن تكون الوكاالت الحكومية ،والشركات متعددة الجنسيات ،أو أي كيان
آخر ينظر إليها على أنها كيان سيئ ) (bad or wrongمن وجهة نظر هؤالء األشخاص .ولكن يبقى الواقع ،أن اكتساب الوصول الغير
مصرح به هو جريمة ،مهما كان القصد من ذلك.
أو بمعنى أخر هم يقومون بعملية القرصنة لسبب معين قد يكون بدافع االنتقام ،أو أسباب سياسية أو اجتماعية أو إيديولوجية ،أو للتخريب،
واالحتجاج والرغبة في إذالل الضحايا.
https://www.facebook.com/tibea2004
فن الهاكر األخالقي 37
دوافع االختراق:
إن ظاهرة االختراق لم توجد أساسا للتباهي أو للعبث أو لقضاء أوقات الفراغ بل هي ظاهرة موجهة وجدت لسببين رئيسيين .ولكن يمكن حصر
أسباب االختراق في ثالثة تتوزع كالتالي:
الدافع التجاري:
من المعروف والجلي الصراع بين كبرى الشركات التي تعيش حربا دائمة فيما بينها ،وقد أكدت دراسات حديثة أن هذه الشركات تتعرض إلى
أكثر من 12محاولة اختراق يوميا ،ويعود ذلك لمحاوالت الشركات المنافسة معرفة أسرارها والقيام بتخريب حاسباتها.
الدافع الفردي:
بدأت أولى محاوالت االختراق بين طالب الجامعات في الواليات المتحدة األمريكية كنوع من التباهي بين الطالب بمهاراتهم في مجال الحاسب
اآللي ،كما كانوا يحاولون اختراق مواقع أصدقائهم .ويمكن تلخيص الدافع الفردي كأنه نوع من التباهي أو التحدي أو إلثارة اإلعجاب كما يمكن
أن يكون بدافع التسلية أو حتى لالنتقام.
ما هو Exploit؟
وذلك ألن موضوع المآثر " "exploitسوف يتم يتناوله في جميع أنحاء الكتاب ،ربما هذا هو الوقت المناسب لتغطية ما هو exploitفي
الواقع .إذا كانت إجابة هذا السؤال إجابة قصيرة ،فإن الجواب الصحيح هو "االستغالل يمكن أن يكون أي شيء" في األساس ،يعتبر أي شيء
والتي يمكن استخدامها لتقديم تنازالت على آلة هو .exploitنتذكر ،ونحن أيضا نستخدم تعريف فضفاض .ويمكنه أن يشمل ما يلي:
Gaining access
Simplifying gaining access
Taking a system offline
Desensitizing sensitive information
على سبيل المثال ،المرور على قمامة شركة ما للعثور على معلومات حساسة يمكن اعتبارها .exploitإذا ذهب أحد المهاجمين من خالل
القمامة ووجد مطبوعة الكمبيوتر ذات سرية عالية حول منتج الشركة الجديد ،فانه من الناحية التقنية قام باختراق النظام دون ان يلمسه .في
كثير من األحيان ،خبراء األمن يضعون غمامات وينظرون من جانب واحد فقط من األمن .من المهم أن نتذكر أن السلسلة ال تكون قوية إال
بقدر قوة أضعف حلقاتها ،وسوف يقوم المهاجم بخرق الحلقة األضعف في أمن الشركة .ولذلك ،فمن األهمية على المتخصصين في مجال
األمن اخذ خطوة إلى الوراء والنظر بشكل صحيح ومعالجة القضايا األمن كافة التي قد تواجه الشركة.
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
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
denial of service-0
Misconfiguration Attacks-3
نقاط الضعف في اإلعداد ) (misconfigurationيؤثر على ملقمات/سيرفرات الويب ،ومنصات التطبيق ،وقواعد البيانات ،والشبكات ،أو
اإلطارات) (frameworkالتي قد تؤدي إلى الدخول /الغير المشروع illegal accessأو احتمالية امتالك النظام .إذا تم إعداد النظام بشكل
خاطئ ،مثل عندما يتم تغيير في تصريحات/أذونات الملف ،فيؤدى إلى جعله غير آمن.
https://www.facebook.com/tibea2004
فن الهاكر األخالقي 41
إذا كان المتسلل هو أو هي يريد الدخول على النظام الخاص بك فانت لن تستطيع أن تفعل شيء أمام هذا ولكن الشيء الوحيد الذي يمكنك
القيام به هو جعل األمر أكثر صعوبة عليه للحصول على نظامك.
استراتيجية الدفاع من العمق ) :(Defense-in-Depth Strategyلتحقيق ذلك ،تحتاج المنظمات لتنفيذ استراتيجية "الدفاع من العمق"
عن طريق اختراق شبكاتهم لتقدير مواطن الضعف وعرضهم لهذه.
الهجوم المضاد ) :(Counter the Attacksالهاكر األخالقي هو ضروري ألنه يسمح بمجابهة الهجمات التي يشنها القراصنة الخبيثة
بطريقة التوقع ) (anticipating methodsوالتي يمكن استخدامها القتحام نظام.
Scope
ما يلي نطاق القرصنة األخالقية:
القرصنة األخالقية هو عنصر حاسم لتقييم المخاطر ،ومراجعة الحسابات ،ومكافحة االحتيال ،وأفضل الممارسات ،والحكم الجيد.
يتم استخدامه لتحديد المخاطر وتسليط الضوء على اإلجراءات العالجية ،والحد من تكاليف تكنولوجيا المعلومات واالتصاالت
) (ICTعن طريق إيجاد حل لتلك الثغرات.
Limitations
ما يلي حدود القرصنة األخالقية:
ما لم تعرف الشركات أوال ما الذي يبحثون عنه ،ولماذا يتعاقدون مع مورد خارجي الختراق األنظمة في المقام األول؛ وهناك
احتماالت بأن لن يكون هناك الكثير لتكسبه من خبرة.
لذا القراصنة األخالقيين الوحيدين الذين يمكنهم أن يساعدوا المنظمات لفهم أفضل ألوضاعهم األمنية ،ولكن األمر متروك للمنظمة
لوضع الضمانات األمنية على الشبكة.
https://www.facebook.com/tibea2004
فن الهاكر األخالقي 42
الدفاع من العمق ) (Defense-in-Depthهي استراتيجية األمن التي توضع عدة طبقات واقية في جميع أنحاء نظام المعلومات.
يساعد على منع وقوع هجمات مباشرة ضد نظام المعلومات والبيانات بسبب كسر طبقة واحدة ال يؤدي إال انتقال المهاجم إلى
الطبقة التالية.
يتم التعامل مع أي حادث وقع في مؤسسة ما وحلها باتباع الخطوات التالية من قبل إدارة الحوادث
هي تتعلق بالموظفين العاملين على النظام التقني .المعني من حيث توفير وسائل التعريف الخاصة بكل منهم
وتحقيق التدريب والتأهيل للمتعاملين بوسائل األمن إلى جانب الوعي بمسائل األمن ومخاطر االعتداء على
المعلومات .مثال على ذلك.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
يحدد من له الصالحية في استخدام االتصال عن بعد ،ويحدد الضوابط األمنية لهذا االتصال عن بعد.
https://www.facebook.com/tibea2004
فن الهاكر األخالقي 46
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فإننا سوف نكون قادرين على تكرار التدريب العملي على معمل اختبار االختراق.
قبل التوجه الى انشاء معمل كامل من اختبار االختراق فهناك العديد من األشياء او المبادئ التي يجب ذكرها أوال حتى تكون العملية سهله
بالنسبة لنا .اول هذه المبادئ هو المنصة االفتراضية التي سوف نستخدمها إلنشاء المعمل الخاص بنا.
عندما نذهب لتثبيت بيئة ( 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محمل على أجهزة النظام.
من المؤكد ان إنشاء البيئة االفتراضية سوف يحتاج الى اختيار التطبيق المناسب الذي سوف يساعد على انشاء البيئة االفتراضية والتي سوف
نتكلم عن العديد منها وهنا سوف نقسمهم الى مجموعتين األولى هى :التطبيقات المجانية ،اما الثانية فتشمل التطبيقات التجارية.
–––
بمجرد االنتهاء من تحميله ،سيكون لديك الحصول على مفتاح الترخيص من خالل التسجيل مع الموقع .وبمجرد االنتهاء من الحصول على
المفتاح ،يمكنك إدخاله أثناء التثبيت أو في وقت الحق ،وسوف تمكنك من استخدام األداة .لإلشارة ،إلى استخدام أداة ،فان دليل المستخدم هو
مصدر جيد ،وهناك العديد من الدروس على شبكة اإلنترنت لذلك أيضا .مرة أخرى ،هي محدودة فيما يمكن أن توفره لنا ،ولكنه حل قابل
للتطبيق الستخدامه الختبار اآلالت الذي قمت ببنائها وكذلك األجهزة األخرى دون الحاجة إلى شراء ترخيص آخر للبرنامج.
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
برنامج الـ 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
أول ما عليك القيام به هو تحديد نطاق 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
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
من الحلول االفتراضية.
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
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نقوم بالنقر فوق 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لبد تشغيل المنصة
االفتراضية والتي منها تؤدى الى ظهور الشاشة التالية بعد العمل.
https://www.facebook.com/tibea2004
فن الهاكر األخالقي 57
-12ثم تظهر لنا شاشه أخرى نختار منها اللغة ،ثم ننتقل لنختار ،Countryثم ننتقل لنختار لغة المفاتيح " Configuration
،"Keyboardثم بعد ذلك يبدا بتحميل بعد الملفات ،ثم يطلب منك ادخال اسم المضيف Hostnameثم Domain nameوالتي
من الممكن تركها فارغه على حسب رغبتك واهدافك ثم بعد ذلك يطلب منك ادخال الرقم السري للمستخدم rootوالذي يتمتع بأعلى
صالحيات .بعد ذلك يطلب منك تحديد .Time zoneحتى تظهر الشاشة التالية:
-11االن هذا يخبرك بانتهاء عملية التنصيب وهنا سوف نختار Continueثم ننقر فوق .enter
-12نكون هنا قد انتهينا من تثبيت منصة التشغيل كالي.
https://www.facebook.com/tibea2004
فن الهاكر األخالقي 58
كما ترون في الصورة السابقة ،هناك عدد من اإلعدادات التي يمكننا أن نستخدمها ألعداد الشبكة .ما نريد القيام به هو أن نفهم أن كل من هذه
اإلعدادات تمثل ،switchوعند إنشاء محول الشبكة " "network adapterمع هذا اإلعداد ،فهذا يعادل ربط هذا الجهاز إلى .switch
ونحن سوف نلقي نظرة فاحصة على هذا بمجرد االنتهاء من مناقشة الخيارات المختلفة وما تعنيه.
https://www.facebook.com/tibea2004
فن الهاكر األخالقي 59
يوفر اإلعداد bridgedمع الجهاز االفتراضي ان يكون لديه مكان خاص على الشبكة؛ وهذا يعني أنها ال تشترك في اتصال الشبكة مع
المضيف.
في االعداد ،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هذه هي اإلعدادات
االفتراضية ،ولكن كما هو الحال مع معظم األشياء ،يمكنك تعديل هذا لتلبية اإلعدادات التي تحتاجها من أجل بيئتك.
زوجان من المحاذير نحتاج إلى ذكرها هنا .ذكرنا سابقا أن شبكة host-onlyهي شبكة اتصال معزولة .حسنا ،مثل معظم األشياء مع
االفتراضية ،هناك طرق بواسطتها يمكنك تغيير هذا الشبكة المعزولة لكيال تبقى معزولة تماما .مرة أخرى ،لغرض لدينا ،هذا ليس شيئا نحتاج
اليه ،ولكن أردنا فقط تغطية جزء وجيز لبعض أساليب كسر أو على األقل إضعاف العزلة .يمكنك إعداد routingأو بروكسي التصال
الشبكة إلى الشبكة الخارجية ،وإذا كنت تستخدم نظام التشغيل Windows Server 2003أو ،Windows XPيمكنك استخدام الخيار
Internet Connection Sharingلالتصال بالشبكة الخارجية.
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ولكن ليس لبقية المفاتيح .وبمجرد
االنتهاء من تكوين الشبكات والتحقق مما إذا كانت اإلعدادات الخاصة بك تطابق التي تريده.
لقد قمنا سابقا بتنصيب توزيعه كالي .ولكن من المعروف أيضا ان الموقع الرسمى لتوزيعه كالي يوفر نسخه افتراضيه تعمل على 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يقومون بكتابة قطع صغيرة ومدهشة من األكواد التي تنزلق من خالل الشقوق األمنية
الضيقة .هؤالء هم الناس الذين يحصلون على الحماسة من البرمجة ويقدرون حقا جمال قطعة أنيقة من األكواد أو براعة االختراق .فهم
البرمجة هو شرط أساسي لفهم كيف يمكن استغالل البرامج والبرمجة هي نقطة البداية الطبيعية.
لغات البرمجة عموما مثل اللغة لدى البشر يتخاطبون بها بينهم وبين بعضهم البعض ونفهم منها متطلباته وحجاتهم للغات البرمجة للتحدث مع
الحاسب .وتنفيذ االوامر التي نطلبها منه مثال استعالم في قواعد البيانات او أنشاء مجلد او ابسط صورها عملية حسابية الهدف منها وباختصار
شديد تسهيل اعمالنا اليومية والروتينية "المملة" التي يمكنك ان تقوم بها يوميا مرات ومرات .فوائدها تسهيل العمل ،تسريع العمل ،ميكنة
العمل ،اتخاذ قرارات بناء على شروط .من هذا المنطلق إذا كان مختبر االختراق على دراية بلغة البرمجة ويعلم كيفية البرمجة فيمكنه بكل
بساطة حل المشكلة وترقيع الثغرة اغلب مدراء السيرفرات المسؤولين يجيب ان يكونوا على وعي على االقل باألدوات المستخدمة لديهم لكي
يستطيع ان يتناقش مع المبرمج وتوضيح ماهية الخطر وكيفية عالج الثغرات ان وجدت .اما بالنسبة لمختبر االختراقات تخيل إنك ستقوم
بفحص روابط موقع رابط رابط كم من الوقت ستأخذ؟ هنا يأتي الالعب السحري وهو البرمجة لتسهل لك هذا العمل .بالنسبة للمجال العملي
والفعلي لغات البرمجة كثيرة ومتطلباتها قد تختلف من دولة الى اخر ومن منطقة الى اخرى.
ولكن الكمبيوتر ال يفهم أصال اللغة اإلنجليزية .حيث انه يفهم لغة واحده أال وهي لغة اآللة .إلرشاد جهاز كمبيوتر على فعل شيء ،يجب أن
تكون اإلرشادات مكتوبة بلغته .ومع ذلك ،لغة اآللة غامضة وصعبة لعمل ذلك ،ويختلف من هندسة معمارية الى هندسة معمارية .لكتابة
برنامج بلغة اآللة للمعالج إنتل ،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يقدم مقدمة ممتازة لمفاهيم
البرمجة العالمية المشتركة .هذا ما يعرف لدى الكثير بالتعليقات على سطور الكود.
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وهي عبارة عن جملة شرطية تحتوي بداخلها جملة شرطية أخرى أو أكثر ،حيث تنفذ الجملة
األولى عند تحقق الشرط األول ،والجملة الثانية ال تنفذ إال عند تحقق الشرط األول والثاني.
https://www.facebook.com/tibea2004
فن الهاكر األخالقي 74
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
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والمتغيرات النصية بالتفصيل الحقا.
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.
https://www.facebook.com/tibea2004
فن الهاكر األخالقي 78
" 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وتعود بقيمة ،مثال توضيحي. -
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ثم نقوم
بطباعة السطور السابقة ويكون كاالتي:
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الرئيسي الخاص بك.
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تم ترجمتها إلى تعليمات لغة االله.
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.
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
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
}
https://www.facebook.com/tibea2004
فن الهاكر األخالقي 99
https://www.facebook.com/tibea2004
فن الهاكر األخالقي 100
الجزء 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صغيره والعكس بالعكس.
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
https://www.facebook.com/tibea2004
فن الهاكر األخالقي 105
https://www.facebook.com/tibea2004
فن الهاكر األخالقي 106
https://www.facebook.com/tibea2004
فن الهاكر األخالقي 107
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بايت .ألن هذا تبين أن يكون رقما سالبا ،يتم
نقل الوضع إلى الوراء بواسطة بايت من الطول.
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
الفصل الرابع
التواصل " "Communicationواللغة " "languageتعزز بشكل كبير قدرات الجنس البشري .باستخدام لغة " "languageمشتركة ،فان
البشر قادرون على نقل المعرفة وتنسيق اإلجراءات ،وتبادل الخبرات .وبالمثل ،يمكن أن تصبح البرامج أقوى بكثير عندما يكون لديها القدرة
على التواصل مع البرامج األخرى عبر الشبكة .األداة المساعدة الحقيقية لمتصفح اإلنترنت ليست في البرنامج نفسه ،ولكن في قدرته على
التواصل مع مزودات الويب.
الشبكات " "networkingهي السائدة بحيث تكون في بعض األحيان أمرا مفروغا منه .العديد من التطبيقات مثل البريد اإللكتروني،
اإلنترنت ،والرسائل الفورية تعتمد على الشبكات .كل من هذه التطبيقات تعتمد على بروتوكول شبكة اتصال معينة ،ولك بروتوكول يستخدم
أساليب نقل الشبكة العامة نفسها.
كثير من الناس ال يدركون أن هناك نقاط الضعف في بروتوكوالت الشبكات أنفسهم .في هذا الفصل سوف نتعلم كيفية تواصل ""network
التطبيقات الخاصة بك باستخدام socketوكيفية التعامل مع نقاط ضعف الشبكة المشتركة.
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تشكل لغة معقدة تستضاف على شبكة اإلنترنت (وغيرها من أنواع الشبكات) تستخدم في
التواصل مع بعضها البعض .يتم برمجة هذه البروتوكوالت في أجهزة الراوتر ،جدران الحماية ،ونظام تشغيل الكمبيوتر الخاص بك حتى
يتمكنوا من التواصل .تحتاج البرامج التي تستخدم الشبكات ،مثل متصفحات الويب والبريد اإللكتروني ،على التفاعل مع نظام التشغيل الذي
يتعامل مع شبكة االتصاالت .في حين ان نظام التشغيل يعتني بتفاصيل تغليف الشبكة ،كتابة برامج الشبكة هو مجرد مسألة باستخدام واجهة
شبكة من نظام التشغيل.
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
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كامل منهم.
في هذا الكتاب ،فأننا في الغالب سوف نستخدم المصطلح العالمي الحزمة "."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العميل.
https://www.facebook.com/tibea2004
فن الهاكر األخالقي 116
وفيما يلي بعض من الثوابت والتعاريف المأخوذة من ملف الرأس ،/linux/if_ether.hوالتي يمكنك استخدامها في البرامج الخاصة بك:
األعالم " "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
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 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
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
!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
https://www.facebook.com/tibea2004
فن الهاكر األخالقي 129
هذه الحجج قد تكلمنا عنها سابقا والتي يمكنك ملئها يدوا كاالتى:
;)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
كما هو متوقع ،يشير الحجة 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
المعلم 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
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
بعض األمثلة الجيدة التي توضح العالقه بين الخادم والعميل ،ftp/ftpd ،telnet/telnetdأو .Firefox/Apacheفي كل مرة يمكنك
استخدام بروتوكول نقل الملفات ،ftpفهناك برنامج ftpdبعيد ،الذي يقدم لك االتصال.
في كثير من األحيان ،سيكون هناك فقط ملقم واحد على الجهاز ،وذلك الملقم سيقوم بالتعامل مع العديد من العمالء باستخدام )( .forkالروتين
األساسي :هو ان الخدام سوف ينتظر االتصال ")( ،"listenثم يوافق عليه ")( ،"acceptثم ينشاء عمليه للتعامل معه ")( ."forkوهذا ما
سوف يفعله برنامج الخادم الذي سوف ننشئه في المقطع التالي.
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;
}
:عند اختبار البرنامج كان الناتج كاالتى
#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>
if (argc != 2) {
fprintf(stderr,"usage: client hostname\n");
exit(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
;break
}
{ )if (p == NULL
;)"fprintf(stderr, "client: failed to connect\n
;return 2
}
في االمثله السابق تم استخدام الدالة )( 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
اإلصدارات االولية
يعود تاريخ نسخ ويندوز إلى سبتمبر ،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
لنقد شديد بسبب البطيء وتجمد النظام ومشاكل خاصة بالعتاد و ِقيل عنه أيضا ً أنه واحد من أسوأ أنظمة التشغيل التي أطلقتها مايكروسوفت.
بعد ويندوز ،1222قٌ ِسّمت عائلة ويندوز إن تي إلى خطين :األول :خط العمالء ويتضمن ويندوز اكس بي وخلفائه ،وكان الخط مكونا ً من
أنظمة تشغيله ُمنتجة ليتم تثبيتها على أجهزة الكمبيوتر العادية مثل مكاتب العمل والمنازل والكمبيوترات المحمولة واألجهزة الكفية وأجهزة
الوسائط .وكان في الخط الثاني :ويندوز سيرفر ويتضمن الخط ويندوز سيرفر 1221وخلفائه متضمنا ً أنظمة تشغيل أُن ِتجت للخوادم .والحقا ً تم
إضافة خط ثالث جديد لألنظمة ال ُمدمجة وأُضيف مع بداية ويندوز إمبدد.
بعد ويندوز ،1222اختلفت مواعيد إصدار نسخ الخوادم ،وأُطلق في أبريل 1221ويندوز سيرفر 1221كبديل لخط إصدارات ويندوز 1222
للخوادم مع عدد من المميزات والتركيز على االمان ،وعقب هذه النسخ أُطلق في 1221ويندوز سيرفر 1221ار .1
أُطلق في 11يوليو 1222ويندوز 2وويندوز سيرفر 1221ار 1إلى الشركات المصنعة بينما أُطلقا للعامة بعد ثالثة أشهر في 11أكتوبر
.1222على عكس خلفائه قدم ويندوز فيستا عدد كبير من المميزات لكن ويندوز 2كان أكثر تركيزا ً على ترقية األنظمة إلى الخط الجديد ،مع
هدف التوافق مع التطبيقات والعتاد التي كانت متوافقة مع ويندوز فيستا.
https://www.facebook.com/tibea2004
فن الهاكر األخالقي 140
عم ويندوز 2خاصية اللمس المتعدد مع قشرة ويندوز ُمعاد تصميمها مع شريط مهام جديد ونظام شبكات منزلي يُدعى مجموعة المشاركةدَ َ
المنزلية وتحسينات في األداء.
ويندوز 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امبدد.
https://www.facebook.com/tibea2004
فن الهاكر األخالقي 142
-نبدأ االن مع االمر الثاني وهو " "cdوالذي يستخدم في التنقل بين المجلدات واالقراص.
لتغيير محركات األقراص ،نكتب حرف محرك األقراص متبوعا بنقطتين .على سبيل المثال ،للتغيير إلى محرك األقراص ( Dيتم ذلك من
خالل كتابة .)d:
يستخدم االمر " "cdواألمر " "chdirلتغيير الدليل الحالي ،وهو اختصار ل " ."change directoryكتابة األمر بدون أي خيارات سوف
يعرض دليل العمل الحالي ) ،(current working directoryولكن غالبا ما يتم استخدام األمر لتغيير الدالئل .هذه األوامر يمكن
استخدامها لتغيير إلى دالئل معينة:
https://www.facebook.com/tibea2004
فن الهاكر األخالقي 144
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
https://www.facebook.com/tibea2004
فن الهاكر األخالقي 147
.(C:\ProgramData) ملفات اعدادات التطبيقات تخزن في.(C:\Users) في حين ان بيانات المستخدم يتم تخزينها في المسار
https://www.facebook.com/tibea2004
فن الهاكر األخالقي 148
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
الحظ أننا أنشأنا الرابط SANSROCKSفي الدليل C:\testingوليس في جذر نظام الملفات (أي في \ .)C:إذا قمنا بسرد قائمة للمجلدات
عكسي ) (recursive directory listingفانه سوف يدخل الى الدليل SANSROCKSوالتي بدوره سوف يوجهك الى الدليل
.testingضمن هذا الدليل نرى ( SANSROCKSمرة أخرى) وستحاول ادخالنا اليه (مرة أخرى) .هذه النتائج سوف تصبح في حلقة ال
نهائية.
https://www.facebook.com/tibea2004
فن الهاكر األخالقي 149
ويندوز .ومع ذلك ،إنترنت إكسبلورر يضيف التيار ) Zone.Identifier (streamعلى كل ملف تم تنزيله من االنترنت .في حين انه تم
تخزين هذه المعلومات وإمكانية الوصول إليها ،ولكن يتم تجاهلها من قبل العمليات العادية Alternate Data Streams .يمكن استخدامها
من قبل المهاجمين إلخفاء الملفات الخبيثة من ان ترى.
ADSيمنحك القدرة على حقن/إضافة بيانات الملف إلى الملفات الموجودة دون التأثير على وظائفها ،حجمها ،أو عرضها في أدوات ويندوز
مثل ويندوز إكسبلورر أو حتى " "dirفي سطر األوامر.
إذا هذه الثغرة تمكنك من اخفاء اي ملف بداخل اي ملف اخر بدون تغير حجمه.
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
عندما يقوم المستخدم بأشياء مثل تصفح اإلنترنت أو قراءة البريد اإللكتروني .نظام التشغيل وبعض التطبيقات مثل Internet Explorer
أيضا تقوم بإنشاء دليل ذات المستوى " "Lowلجعل الملفات متاحة للمستخدم عندما يتم تخفيض مستوى Integrity Levelالخاص به.
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
User Management
تحت بيئة ويندوز ،حسابات المستخدمين عادة ما تدار من ،Control Panelحيث يمكن إنشائه أو تعديله أو حذفه .ويمكن أيضا أن يتم منح
) (grantedأو إلغاء ) (revokedبعض االمتيازات لحسابات المستخدمين .وباإلضافة إلى أداة واجهة المستخدم الرسومية
" ،"LUSRMGR.MSCيمكنك أيضا إدارة المستخدمين من سطر األوامر باستخدام األمر .net
.1الصالحيات والتحكم في حساب المستخدم ))(Permissions & User Account Control (UAC
قبل أن تتمكن من تعديل أي حسابات على النظام الخاص بك ،تحتاج إلى استخدام موجه األوامر في الوضع .administrativeوسوف
نناقش التحكم في حساب المستخدم ( )UACفي وقته ،لكن اآلن اتبع الخطوات المذكورة أعاله للحصول على الموجه Adminحتى نتمكن
من إنشاء وتعديل الحسابات.
https://www.facebook.com/tibea2004
فن الهاكر األخالقي 153
https://www.facebook.com/tibea2004
فن الهاكر األخالقي 154
Windows Groups
بمجرد ان يتم إنشاء المستخدم ،يتم وضعه في "المجموعات ) ."(Groupsيتم تعيين NTFSوأذونات OSالى المجموعات.
هذه المجموعات تجعل اإلدارة أسهل كمجموعة يمكن إعطاءها إذن خاص ومن ثم يمكن إضافة وإزالة المستخدمين من المجموعة حسب
الحاجة دون الحاجة إلى إجراء التغييرات لكل مستخدم على حدة .ويندوز لديها العديد من المجموعات االفتراضيه المبنيه بها بما في ذلك ما
يلي:
https://www.facebook.com/tibea2004
فن الهاكر األخالقي 155
- ADMINISTRATORSيمكن لمستخدمين هذه المجموعه تنفيذ أي إجراء يريدونه على الكمبيوتر بما في ذلك تعديل الكيرنل. -
- NETWORK CONFIGURATION OPERATORSالمستخدمين هنا لديهم أذونات إضافية تمكنهم من تعديل -
إعدادات الشبكة على جهاز الكمبيوتر مثل عنوان DNS ،IPو.gateway
– USERSهذه هي المجموعة الوحيدة التي يحتاجها الناس ألداء ٪22من األنشطة على جهاز الكمبيوتر الخاص بك .حتى الناس -
الذين تتمثل مهمتهم اإلدارة وينبغي أن تكون أجهزة الكمبيوتر الخاصة بهم فقط في مجموعة USERSويجب أن تستخدم حساب
منفصل في مجموعة ADMINISTRATORSفقط عند تنفيذ المهام اإلدارية .ويمكن القيام بذلك باستخدام .RUNAS
استخدام 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
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 :
https://www.facebook.com/tibea2004
فن الهاكر األخالقي 158
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الرئيسية.
https://www.facebook.com/tibea2004
فن الهاكر األخالقي 159
REG.EXE Exercise
وليس في،VM يرجى فقط القيام بذلك في. فهذا يمكنه ان يلحق ضررا بالغا في النظام الخاص بكregistry إذا قمت باى خطا في،كن حذرا
.نظام التشغيل المضيف الخاص بك
."reg /?" عرض المساعدة على األمر.registry سنبدأ من خالل النظر في صفحة المساعدة العامة وصفحة المساعدة على
https://www.facebook.com/tibea2004
فن الهاكر األخالقي 160
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
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
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
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
مقدمه
في هذا الفصل سوف نسرد بعض المفاهيم المتعلقة بالبرمجة على نظام التشغيل لينكس .وهذا مهم بالنسبة للذين يتعاملون مع أنظمة التشغيل
األخرى او لديهم معرفه محدودة بأنظمة التشغيل لينكس او يونكس.
معلومة :نواة لينكس توجد في المسار ،/boot/vmlinuzأو شيئا من هذا القبيل .اشتقاق هذا االسم تاريخي .حيث انه في إصدارات يونكس
القديمة ،كانت النواة تسمى " ."unixفي وقت الحق في اإلصدارات االحدث ،التي استخدمت الذاكرة االفتراضية ،سميت النواة .vmunix
على لينكس ،اسم الملف يعكس عن اسم النظام ،مع استبدال الحرف xبالحرف zفيصبح vmlinuzوهذا للداللة على أن النواة مضغوطة.
( 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الخاصة بها ،ويمكن لهذه
البرامج الوصول بشكل مستقل الى األجهزة ونقل المعلومات عبر الشبكة .الكيرنل حل الصراعات المحتملة في الحصول على موارد األجهزة،
بحيث يكون المستخدمين والعمليات عادة غير مدركين لهذه الصراعات.
https://www.facebook.com/tibea2004
فن الهاكر األخالقي 168
بعض العمليات يمكن القيام بها فقط عندما يكون وحدة المعالج المركزي ) (CPUفي وضع النواه/الكيرنل " ."Kernel modeوتشمل
األمثلة على ذلك تنفيذ تعليمات البرنامج haltوالذي يقوم بوقف النظام ،الوصول إلى أجهزة إدارة الذاكرة ( memory-management
،)hardwareوإنشاء .device I/O operationsمن خالل االستفادة من تصميم األجهزة هذا تم وضع نظام التشغيل في فضاء الكيرنل
" ،"kernel spaceبحيث يمكن أن منفذي نظام التشغيل يضمن أن عمليات المستخدم ليست قادرة على الوصول إلى التعليمات وهياكل
البيانات من الكيرنل ،أو تنفيذ عمليات من شأنها أن تؤثر سلبا على نظام التشغيل.
لقد تم تصميم الشل ليس فقط من اجل االستخدام التفاعلي ،ولكن أيضا من اجل تفسير اسكريبات الشل والتي هي ملفات نصية تتضمن أوامر
الشل .لهذا الغرض ،كل من الشل لديه التجهيزات المرتبطة عادة مع لغات البرمجة :مثل المتغيرات ( ،)variableالحلقة ( ،)loopالبيانات
الشرطية ( ،)conditional statementsاوامر اإلدخال/اإلخراج ( ،)I/O commandsوالدوال (.)function
كل من الشل تؤدي مهام مماثلة ،وإن كانت بدرجات متفاوتة في الصيغة .أكثر من األمثلة في هذا الكتاب تتطلب استخدام .bash shell
https://www.facebook.com/tibea2004
فن الهاكر األخالقي 169
المستخدمين ()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
Figure 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
المسارات )(Pathnames
اسم المسار هو سلسلة تتكون من خط مائل في البداية ( )/ثم تليها سلسلة من أسماء الملفات المفصولة بهذا الخط المائل .الجميع ولكن االخير
خاصة من هذه األسماء هو الذي يحدد المجلد (أو .)symbolic linkالمكون األخير من اسم المسار قد يحدد نوع أي من الملفات ،بما في ذلك
المجلد .ويشار إلى سلسلة من أسماء الملفات المفصولة بالخط المائل وفى اخرها خط مائل بانها مسار المجلد ) ،(/etc/في حين أن السلسلة التي
تنتهي باسم يشار اليها أحيانا إلى الملف أو .(/etc/passwd) base
تتم قراءة اسم مسار من اليسار إلى اليمين .الرمز " "..يمكن استخدامه في أي مكان في اسم المسار لإلشارة إلى االب للموقع المحدد حتى اآلن
في المسار.
المسار يصف موقع الملف او المجلد ضمن التسلسل الهرمي للمجلد ،وهو إما يكون مطلق ) (absoluteأو نسبي ):(relative
https://www.facebook.com/tibea2004
فن الهاكر األخالقي 173
يمكنك رؤية وصف الملف بالكامل مع استخدم االمر lsثم مع الخيار alفيصبح كاالتي ).(ls –al filename
يمكن التالعب بهذه الصالحيات سواء للملفات او المجلدات من خالل استخدام االمر .chmod
https://www.facebook.com/tibea2004
فن الهاكر األخالقي 174
1.1البرامج )(Programs
ببساطة ،العملية " "processهي عملية تنفيذ البرنامج .عند تنفيذ البرنامج ،فان الكيرنل يقوم بتحميل اكواد البرنامج الى الذاكرة االفتراضية
) ،(virtual memoryوتخصص مساحة لمتغيرات البرنامج ،ويضع هياكل بيانات دفاتر الكيرنل جاهز لتسجيل المعلومات المختلفة (مثل
،process IDحالة اإلنهاء ) ،(termination statusهوية المستخدم ) ،(user IDوهوية المجموعة ) )(group IDحول العملية.
من وجهة نظر الكيرنل ،العمليات هي الكيانات التي بينها يجب على الكيرنل تقاسم الموارد المختلفة للكمبيوتر .وبالنسبة للموارد التي هى
محدودة ،مثل الذاكرة ،فان الكيرنل يخصص في البداية بعض من الكمية من الموارد لهذه العملية ،ويضبط هذا التخصيص على مدى عمر هذه
العملية لالستجابة لمطالب العملية وطلب النظام لهذه الموارد .عندما تنتهي هذه العملية ،يتم تحرير كافة هذه الموارد إلعادة استخدامها من قبل
عمليات أخرى .الموارد األخرى ،مثل وحدة المعالج المركزي ( )CPUوالنطاق الترددي للشبكة ( ،)Network bandwidthقابلة للتجديد،
ولكن يجب أن تكون مشتركة بصورة عادلة بين جميع العمليات.
https://www.facebook.com/tibea2004
فن الهاكر األخالقي 175
https://www.facebook.com/tibea2004
فن الهاكر األخالقي 176
القدرات )(Capabilities
منذ إصدار الكيرنل ،0.0اللينكس قام بتقسم االمتيازات الممنوحة تقليديا إلى Superuserإلى مجموعة من الوحدات مستقلة تسمى
.capabilitiesترتبط كل عملية متميزة مع capabilitiesمعينة ،والعملية يمكن أن تؤدي عملها فقط إذا كانت لديها capabilities
المقابلة .عملية Superuserالتقليدية (ذات هوية المستخدم )1تناظر العملية التي بها كل Superuserالممكنة.
منح مجموعة فرعية من capabilitiesالى العملية تتيح لها أداء بعض العمليات المسموح بها عادة إلى ،Superuserفي حين منعه من
أداء اآلخرين.
يتم وصف هذه capabilitiesبالتفصيل الحقا .في هذا الكتاب ،عندما نشير إلى عملية معينة يمكن القيام بها من خالل عملية متميزة ،سنقوم
عادة بتحديد capabilityمحددة بين قوسين .تبدأ أسماء capabilityمع ،_CAPكما هو الحال في .CAP_KILL
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الذي يحدد قائمة المجلدات التي يجب
على الشل أن يبحث فيها عندما يبحث عن البرامج الموافقة لألوامر المدخلة من قبل المستخدم.
الذاكرة في 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
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
في أي ،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
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أي تنفيذ التعليمات البرمجية للبرنامج العادي).
عادة ،يتفاعل تطبيق العميل ) (client applicationمع المستخدم ،في حين ان تطبيق الخادم ) (server applicationيوفر الوصول إلى
بعض الموارد المشتركة .عموما ،هناك حاالت متعددة فيها تتواصل عمليات العميل مع واحد أو أكثر من عمليات الخادم.
Clientو serverيمكن ان يكونوا على نفس جهاز كمبيوتر المضيف او ان يكونا في مضيفين مختلفين متصلين من خالل الشبكة.
Realtime 1.11
Realtime applicationsهي تلك التي تحتاج إلى االستجابة في الوقت المناسب من اإلدخال .في كثير من األحيان ،هذه المدخالت تأتي
من جهاز استشعار خارجي أو جهاز إدخال متخصص ،واإلخراج يأخذ شكل السيطرة على بعض األجهزة الخارجية .وتشمل األمثلة على
التطبيقات التي تتطلب استجابة سريعة ،automated assembly linesأجهزة الصراف اآللي ،ATMوأنظمة المالحة الجوية.
يتطلب توفير االستجابة القصيرة ،دعم من نظام التشغيل األساسي .معظم أنظمة التشغيل ال توفر أصال مثل هذا الدعم ألن متطلبات االستجابة
السريعة يمكن أن تتعارض مع متطلبات أنظمة التشغيل متعددة المستخدمين .تطبيقات UNIXالتقليدية ليست ،Realtime applications
على الرغم من ان realtime variantsقد تم وضعها .لينكس قامت بإنشاء ،realtime variantsونواة لينكس األخيرة تتجه نحو الدعم
الكامل ل .Realtime applications
https://www.facebook.com/tibea2004
فن الهاكر األخالقي 183
https://www.facebook.com/tibea2004
فن الهاكر األخالقي 184
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
وأكثر من ذلك بكثير.
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
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
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ضد الهدف .ستبدأ أداة التشغيل وإصدار األوامر
تلقائيا .قد تستغرق هذه العملية عدة دقائق لإلتمام .يمكنك مشاهدة تقدم للبرنامج في النصف السفلي من النافذة .ان االرميتاج سوف يقدم لك ايضا
شريط التقدم ( )progress barلتمكنك من معرفة مدى طول العملية وتقدمها .لنكن واضحين ،في هذه المرحلة فان االرميتاج يقوم بارسال
كل exploitذات الصلة بالهدف ،انتبه جيدا لواجهة المستخدم الرسومية التي تمثل الهدف الخاص بك في شاشة األرميتاج؛ إذا كان الهدف
أصبح محدد بضوء احمر على شكل برق ،فهذا يعنى ان األرميتاج نجح في اختراق الهدف.
أرميتاج يتصل بالميتاسبلويت عبر واجهة ،xmlrpcوإرسال البيانات من وإلى ذلك عبر منفذ TCP 55553افتراضيا .كما أنه يتفاعل مع
قاعدة بيانات الميتاسبلويت الخلفية باستخدام نفس اتصال .xmlrpc
فى األرميتاج ،المستخدم في الجزء العلوي من اليسار من واجهة المستخدم الرسومية يمكنه الوصول لجميع وحدات الميتاسبلويت ،بما في ذلك
payload ،exploit ،auxiliaryو .post modulesعالوة على ذلك ،فى الجانب األيمن العلوي من الشاشة ،يمكن للمهاجم الحصول
على واجهة رسوميه لبيئة الهدف .الجزء السفلي من الشاشة يوفر الوصول المباشر إلى .msfconsole
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مجموعات من هذه التعليمات تساعد على تحسين احتماالت أن المهاجم سيؤدي االختراق بنجاح
في تنفيذ التعليمات البرمجية على النظام الهدف.
مآثر الميتاسبلويت األخرى هي سلبية ) ،(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
تشمل 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
" :"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
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
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وهلم جرا.
سوف تؤدى الى ظهور شاشه كما في الويندوز التمام عملية التثبيت بطريقه سهلة واليه وهنا نفعل كما فعلنا في الويندوز .مع ترك -
االعدادات االفتراضيه كما هي.
https://www.facebook.com/tibea2004
فن الهاكر األخالقي 197
1.11المزيد عن msfconsole
اآلن ،لكي تصبح أكثر دراية بالميتاسبلويت .فنحن سوف نذهب في جولة عميقة من .msfconsoleحيث سنعرض عدة عناصر من هذه
الواجهة األكثر قيمة .يمكنك ببساطة التجربة مع مختلف األوامر التي سوف نناقشها مع هذه الجولة.
الحظ أن الموجه يقول اآلن أنك قد اخترت .psexec exploitوهي الميزة التي تعمل مثل األمر SysInternals psexecلجعل جهاز
ويندوز عن بعد يقوم بتشغيل األمر عبر جلسة SMBبأوراق اعتماد على مستوى .admin
للخروج من سياق معين من exploitمن داخل الميتاسبلويت .يمكنك ببساطة كتابة األمر ":"back
يوضح االمر " "bannerالفتة ASCIIالرسوميه للميتاسبلويت المختارة عشوائيا ،تليها بعض المعلومات المفيدة جدا حول إصدار
الميتاسبلويت وعدد الوحدات.
https://www.facebook.com/tibea2004
فن الهاكر األخالقي 198
افتراضيا ،يعرض msfconsoleالكتابة باأللوان فى واجهة مستخدم .ومع ذلك ،يوجد بعض الخلل مع التمرير في اإلصدارات المختلفة من
msfconsoleمع األلوان في الواجهة .لتحويل اللون الى offلتجنب مثل هذه األخطاء ،يمكن كتابة هذا:
https://www.facebook.com/tibea2004
فن الهاكر األخالقي 199
على سبيل المثال ،نقوم برؤية المعلومات المرتبطة مع الوحدة .Metasploit psexecالحظ الشرح لكيفية قيام هذه الوحدة بتقبل أوراق
اعتماد المستخدم والسبب الذي يجعل payloadيعمل على جهاز ويندوز المستهدف .سوف نرى كيفية القيام بذلك مع psexecكاالتى:
بمجرد تغير سياق 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
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
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
https://www.facebook.com/tibea2004
فن الهاكر األخالقي 203
يتم التعامل مع أسماء المتغيرات بطريقة تراعي case sensitiveفي بعض إصدارات الميتاسبلويت (وخاصة القديمة) .اإلصدارات األخيرة
ال تنظر الى قضية .case sensitiveبالرغم من ذلك ،من أجل التوافق مع اإلصدارات القديمة من الميتاسبلويت ،فيجب ان تعالج دائما أسماء
المتغيرات بطريقة case sensitiveلحالة األحرف .تقريبا ،جميع المتغيرات في msfconsoleتكون .uppercase
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
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
في بعض األحيان ،عندما تستخدم الميتاسبلويت ،وتقوم باختراق الجهاز الهدف باستخدام شل عادية ) (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
https://www.facebook.com/tibea2004
فن الهاكر األخالقي 207
بعد اختبار االختراق ،فان الملفات metasploit log fileسوف تحتوي على األرجح بعض المعلومات الحساسة عن الهدف .ولذلك ،يجب
عليك أن تنظر الى حذف أو أرشفة الملفات بشكل آمن.
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
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
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نفسه.
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
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المتيازاتها
المستخدم األصلي الستغالل العملية.
https://www.facebook.com/tibea2004
فن الهاكر األخالقي 213
األمر ،uictlوهو اختصار ل " ."User Interface Controlيسمح هذا األمر للمستخدم Meterpreterمن تعطيل لوحة المفاتيح و/أو
الماوس للهدف .تعطيل لوحة المفاتيح والماوس هو إجراء آخر يمكن أن يسبب مشاكل في اختبار االختراق.
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يسردهم على حسب اسم المجموعة).
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
االن نكون قد انتهينا من أساسيات الميتاسبلويت ولها تكملة اخرى موزعه على باقى األبواب األخرى على حسب المضمون.
https://www.facebook.com/tibea2004
فن الهاكر األخالقي 217
الفصل الثامن
برمجيات البد منها
1.1مقدمه
تماما مثل القَفَّال ،ينبغي على الهاكر االخالقى او المبرمج ان يكون له األدوات المتخصصة .القَفَّال (حداد أقفال) يمكن أن يستخدم فقط ِمب َْرد
ومطرقة لكل يقوم بعمله ،ولكن مع المخرطة الجيدة ،ومجموعة من قطع القطع المناسبة ،وعدد قليل من األدوات المهنية األخرى تسمح له
للقيام بعمله أسرع بكثير وأكثر كفاءة ،ومع نوعية أفضل .وهو نفس الشيء لتطوير برمجيات القراصنة :األدوات المتخصصة من اجل الوظيفة
المناسبة .قبل أن تتمكن من البدء في مغامرات القراصنة ،لديك جمع األدوات المناسبة وتعلم كيفية استخدامها .ويهدف هذا الفصل لمساعدتك
في هذه المهمة من خالل توفير المعلومات عن األدوات الرئيسيه ،تلك المدرجة في أي توزيعة لينكس .هذه األدوات عادة ما تكون كافية لحل
سلسلة كاملة من مشاكل البرمجة الرئيسية.
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 :
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
ملحوظه :نجده هنا مختلف عن السابق وذلك الختالف اإلصدار حيث ان المدمج مع كالى ذات اصدار أقدم من الذي قمنا بتنصيبه على
ابونتو .أيضا يمكننك تنصيبه على الويندوز.
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
https://www.facebook.com/tibea2004
فن الهاكر األخالقي 226
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وفيما يلي مثال على محتويات الملف:
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( :
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واسم الملف سوف يكون بين عالمتي-النطقية (') .وفيما يلي مثال على تحديد مسار الملف ضمنيا:
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