اخر المواضيع

دليلك فى البرمجة

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

  1. التركيز على لغة برمجة واحدة والبعد عن التشتيت والحشو المعلوماتى: لغات البرمجة التي يمكن صناعة تطبيقات ويب بها كثيرة منها PHP وASP وJava وRuby وPython وPerl، كلها لغات برمجة صنعت كي تؤدى مهام وأغراض كثيرة متشابهة، تستطيع بشكل عام أن تختار الأنسب لك منها وتبدأ بتعلمه، فكرة أنك يجب أن تتعلم مليار لغة برمجة لكي تصبح مبرمجاً محترفاً هي فكرة خاطئة للغاية إذ أن ذلك الحشو سيعطلك عن ممارسة أي لغة منهم، تعلم المفاهيم والأساسيات العامة للبرمجة وستجد نفسك بمجرد إلقاء نظرة على أي كود في العالم ستستطيع معرفة أي لغة برمجية كُتب بها وماذا ينتج ما عدا أكواد لغة Assembly للأمانة.هذا انفوجراف سيبين لك مدى قوة كل لغة منهم على حدة ويساعدك على الاختيار ما بينهم:
    http://goo.gl/1yQggG
  2. تعلم وإتقان تقنيات الويب المختلفة مثل HTML & HTML5 و CSS & CSS و JavaScript وAjax وJquery وXML وjson: وهي بديهية وضرورية، ستساعدك كثيراً في فهم العديد من الأشياء في المجال.
  3. إذا لم تكن مهتماً بمجال الحماية والأمان ولا مجال إختبار إختراق تطبيقات الويب، وتريد الاحتراف في مجال برمجة الهواتف الذكية فيجب أن تسأل نفسك أولاً، أي المنصات تريد البرمجة لها؟ وعند الإجابة على هذا السؤال تبحث عن اللغة التي يجب أن تتقنها لهذه المنصة، بمعنى أنك:
    1. إذا أردت البرمجة لنظام تشغيل Android، إذاً يجب عليك إجادة لغة البرمجة Java.
    2. إذا أردت البرمجة لمنتجات شركة Apple، ففي هذه الحالة يجب إتقان لغة البرمجة Objective C.
    3. إذا أردت البرمجة لنظام التشغيل Windows Phone، سيجب عليك إتقان لغة البرمجة C#.Net أو VB.Net أو أي منصة صنعتها شركة مايسكروفت للبرمجة لنظام تشغيلها.هذا رابط يحتوي على دورات تدريبية لكل ما سبق ذكره: http://goo.gl/IBxsfK
  4. لا تنتظر المعلومة على طبق من ذهب من أي أحد، بما فيهم أنا: لن يساعدك أحد غيرك، تعلم مهارة التعلم الذاتي والمثابرة وأتقن مهارات البحث على جميع محركات البحث وأشهرها Google، ستجد الإرشادات هنا: http://goo.gl/oX5d9x وهنا: http://goo.gl/XD5lNp .
  5. معرفة ما الفرق بين المواقع وتطبيقات الويب: المواقع تعتبر ثابتة Static أي أنها صفحات غير تفاعلية تعرض فقط بيانات مثل جرائد الأخبار الموجودة على الإنترنت، لكن إذا سمحت لك هذه المواقع (الجرائد في مثالنا هذا) بالتفاعل معها عن طريق التعليقات والإعجاب ففي هذه الحالة يطلق عليها تطبيقات ويب Dynamic Web Applications.
  6. الإيمان بمبدأ الاختراق الأخلاقي Ethical Hacking وإعلاء القيم الإنسانية الحسنة عن تلك الشريرة الدفينة في النفس البشرية دون إنتظار أي مقابل: ستمر عليك فترات تتسائل فيها عن استفادتك الشخصية من تبليغ الثغرات والأخطاء التي تكتشفها لأصحاب المواقع، والعديد من التساؤلات المماثلة التي ستجول في بالك يوماً ما، فضع نصب عينك أن ما تفعله ذا قيمة إنسانية أكبر بدلاً من السرقة أو التخريب.
  7. القيام بتنمية المهارات البرمجية: هذا سيساعدك في البداية لمعرفة ما هي اللغة التي تمت كتابة موقع ما بها حتى تستطيع البحث والاستكشاف عن نقاط الضعف والإبلاغ عنها.
  8. دراسة الشبكات بشكل أساسي دون تعمق: هناك العديد من المصطلحات التي ستمر بها ويجب عليها معرفة معناها على الأقل مثل IP و Router و Access Control Level وغيرها من المصطلحات المرتبطة.
  9. يجب عليك معرفة ما هو المخدم المحلي Local Web Server، ما هو خادم الويب Web Server، ما هو الشيء المسئول عن التصفح وإحضار الصفحات والخدمات عند دخولي على الويب، وفهم مخدمات الإنترنت وأنظمتها جيداً.
  10. هناك العديد من المصطلحات التي ستقابلك ويجب أن تبحث عنها وتجتهد في معرفتها وفهم كيفية عملها على سبيل المثال لا الحصر:
    1. Web Server وأنواعها المختلفة مثل Apache و IIS و GWS و Nginx و Appserv و XAMPP؟! تستطيع  معرفة هذا من هنا: http://goo.gl/9jjv0e
    2. Request بالتفصيل وطرقه وأنواعه؟! تستطيع  معرفة هذا من هنا: http://goo.gl/XIW4rh
    3. Http Headers بأنواعها؟! تستطيع  معرفة هذا من هنا:: http://goo.gl/iaiG2W
    4. Response وأنواعه وأكواد الحالة الخاصه به وتفاصيله!؟ تستطيع  معرفة هذا من هنا: http://goo.gl/LMt5PE
    5. Mysql وMssql وPostgresql وPhpmyadmin ؟!
    6. http و https و ssl و certificate و interception و Proxy و Protocols و Framework و Authenticate و Authorize و Privileges و Escalation،إذا لم تعرف فابحث واقرأ وترجم! إذ ستقابل مصطلحات معقدة في طريقك، لا تدعها متحججاً بأنك ستقرأ عنها فيما بعد، قف واقرأ عن ما وقف في طريقك، ثم أكمل، صدقني ستشعر بالمتعة والحماس فعلاً.
  11. والآن سنتحدث عن الخطوات العملية:
    1. مواصفات الجهاز:
      لن أتحدث عن هذه الجزأئية ولن أذكر مواصفات جهاز بعينه، فقط بشكل عام كلما كان الجهاز ذو معالج CPU قوي وذاكرة RAM قوية أعطاك أداء أفضل وأحسن.
    2. نظام التشغيل:
      هذه المعلومة على مسئوليتي الشخصية، أي نظام تشغيل سيمكنك من أداء أي شيء، سواء أكان Windows أو Linux أو Mac، في أي مجال سواء أكان برمجة أو تصميم أو إختبار إختراق. كل ما في الأمر أن هناك أنظمة (أفضل) في أن تؤدي مهام بعينها. قد تتسائل، لم المصممين دوماً يستخدمون Mac؟ لم المخترقين Hackers دوماً يستخدمون  Linux؟ ولم يوجد هناك مبرمجين يستخدمون Windows؟
      لا أجبرك على إرهاق نفسك وتعلم نظام تشغيل جديد، إذ أن ذلك يتوقف على كمية الشغف التي تمتلكها حيث يوجد من شغفه يدفعه للبدء في تعلم Linux ويوجد من شغفه لا يكفي حتى لإكمال ذلك المقال الذي سيراه طويلاً، فقط أقول لك أنه بالرغم من أن جميع أنظمة التشغيل تستطيع أداء جميع الأعمال إلا أن الأمر يتخلص في توفير الوقت الذي تستغرقه في تهيئة الأدوات كي تتناسب مع متغيرات بيئة العمل في نظام تشغيل ما. إذ أن هناك أنظمة مصممة خصيصاً كي تحد تلك الأدوات متاحة وجاهزة للاستخدام.
      على سبيل المثال، هناك أداة تدعى SQLMap وهي أداة قوية للغاية تستخدم في اكتشاف واستغلال ثغرات SQL Injections، سألني أحدهم يوماً عن كيفية استخدامها على نظام تشغيل Windows، في هذه الحالة الأمر مرهق بعض الشيء، حيث أن الأداة مكتوبة بلغة بايثون Python بالتالي ستحتاج لتنزيل Python على نظام تشغيل Windows! وبعد تنصيبه ستحتاج لبعض التعديلات في Environment Variables، وهذا مجهود شاق، يمكن توفيره ببساطة بتحميل أي توزيعة Linux مصممة خصيصاً لهذا الغرض! إذ أن معظم توزيعات لينكس إن لم يكن كلها تحتوي “إفتراضياً” على بايثون بل ومتناغم جداً مع النظام حيث لن تحتاج للقيام بأي خطوات إضافية لبدء عمله.
      لذا، أنا أنصح أي أحد سيبدأ في هذا المجال باختيار أي توزيعة من التوزيعات المبنية على لينكس المخصصة في هذا المجال، على سبيل المثال لا الحصر Backtrack او Kali Linux او Black Arch او Backbox او Pentoo او Cyborg Hawk Linux.
      مع ذلك، فإنني أعيد تذكيرك بأنه إذا كنت على نظام Windows لن تواجه أي مشاكل باستثناء المشقة والتعب، أما بالنسبة للتوافقية فكل الأدوات ستعمل على جميع الأنظمة، إلا في حالة أن كانت هناك أدوات تمت كتابتها خصيصاً لتعمل على أنظمة دون غيرها.
    3. الأدوات:
      الأدوات الخاصة بك هي مصدر قوتك، وبالرغم من كل تلك الأدوات قد تجد أنك تريد مهام مختلفة لن يفهمها غيرك، ففي هذه الحالة ستكتبها بنفسك وهذا يتم من خلال لغات برمجة عديدة مثل Perl وRuby وأفضلهم Python.
      لنعود إلى الأدوات، يجب أن تستخدم جوجل للبحث عن الأدوات التي ستفيدك في مجالك وتفهم كيفية عملها وماذا ستقدم لك، وكل ما أستطيع مساعدتك به هو تعريفك بأسماءها على أن تبحث عنها وتتعلمها، على سبيل المثال:
      Wireshark – Ettercap – Metasploit – Mantra Browser – Fiddler – Burp Suite – Owasp Zap – Vega Web proxy – DOMinator – Netsparker – SQLMap – IBM Security AppScan – Webinspect – OWASP Xenotix XSS Framework – Zenmap (the gui version of Nmap) – Havij – SwfScan – Acunetix – Web Application Fuzzers.
      وهنا أيضاً ستجد أدوات مفيدة جداً: http://goo.gl/Bs8afv
  12. حضور الفعاليات والمسابقات: يجب أن تكون واعياً للفعاليات المهمة في مجالك التي تدور حولك، وتحاول حضور المؤتمرات والمسابقات المهمة جداً على مستوى العالم، سواء أكان ذلك عن طريق الإنترنت أو الحضور الفعلي، على سبيل المثال: Defcon – Pown2own – Blackhat – NullCon – Hackthons – OWASP Meetings – AppSec وأي فعالية لها علاقة بمجال الحماية.
  13. تابع الأشخاص المتميزين في المجال: حاول أن تسألهم وتستفيد منهم، لكن انتبه إلى أنهم لم يولدوا بكل هذه المعرفة بل عمل كل واحد بجهد حتى وصل إليها وأكيد أنها اقتطعت من حاجات أخرى مهمة مثل دراسته أو صحته أو ما إلى ذلك فراعِ أنك لا تطلب منه شيئاً بسيطاً.
  14. الدراسة الأكاديمية:
    لن أستطيع التوفية بهذا الجزء حقه من الاهتمام إذ أنني لم أدرس هذا المجال بشكل أكاديمي، لكن يمكنك الاستعانة بالدارسين في ذلك المجال، وهذه بعض النصائح البسيطة:

    1. يمكنك دراسة أي من مجالات الأمن السيبراني أو أمن المعلومات في معهد تكنولوجيا المعلومات ITI أو من خلال منحة وزارة الإتصالات MCIT، إبحث عنها وتعرف على شروط القبول وتفاصيلها.
    2. أما بالنسبة للشهادات فهناك العديد من الشهادات التي تستطيع نيلها في هذا المجال أبرزها OSCP (Offensive Security Certified Professional) وتعتبر أفضل شهادة، وهناك أيضاً CEH “Certified Ethical Hacking” وأحدث إصدار لها تقريباً حتى الآن 8، لاحظ أن هناك منح في هاتين الشهادتين، فتابع أخبارهما كي تستفيد.
  15. بناء معمل اختبار وهمي: للقيام ببعض التجارب من خلال تطبيقات متخصصة، منها على سبيل المثال: Virtual PC – VMWare – VirtualBox، بعد تنصيبها حمل مخدم الإنترنت Web Server الخاص بك على حسب نظام تشغيلك المفضل، أرشح لك DVWA اختصاراً لـ Damn Vulnerable Web Applications وهي تطبيقات ويب ذات ثغرات كثيرة جداً بشكل مقصود مصممة للتدرب عليها، حمل الكثير منها على الويب سيرفر خاصتك وانطلق، لكن خذ الحذر واعزل مختبرك الأمني الوهمي ذاك عن أي شبكات خارجية، إذ أنه قد يتسبب في اختراق جهازك الوهمي والحقيقي!
  16. أنواع المخترقين Hackers: سأذكر لك تلخيصاً بسيطاً عن أنواع المخترقين ويمكنك الإستزادة من هنا http://goo.gl/P5PEII:
    1. Whitehat ذوي القبعة البيضاء: وهذا نوع من المخترقين يحاول كسر قيود الحماية والأمان للإبلاغ عنها وإصلاحها وليس لأسباب خبيثة، وهذا كي يختبر قوة النظام الأمنية ويقوم بعمل إختبار الإختراق وتقييم نقاط الضعف بشكل متفق ومتعاقد عليه من قبل.
    2. Blackhat ذوي القبعة السوداء: وهذا هو النقيض من ذوي القبعة البيضاء، إذ أنه يخترق للسرقة والتخريب وإحداث الفوضى.
    3. Greyhat ذوي القبعة الرمادية: وهذا يعتبر الأوسط بين الإثنين الذي ذكرناهما سابقاً، بمعنى أنه يخترق النظام أو التطبيق كي يدرك صاحب التطبيق أو الجهة المسؤولة عنه أن هناك ثغرات ومشاكل، بل ويعرض عليهم بعد ذلك أن يساعد في سدها بشكل مجاني.
    4. Bluehat ذوي القبعة الزرقاء: هو الشخص خارج الشركة أو المؤسسة أو المنشأة الذي يتم استخدامه من قبلها لاختبار الأنظمة والتطبيقات خاصتها قبل الإطلاق بشكل عام كي يتم إصلاحها.
    5. Elite hacker المخترق الراقي: وهو وصف حالة مجتمعية، بمعنى أن هذا المخترق من آخر المخترقين الموهوبين.
    6. Script Kiddie أطفال الهاكر: وهو شخص لا يدرك أي شيء عن الإختراق سوى أنه عثر على سكربت أو تطبيق أو شفرة وقرأ دليل استخدامها وبالتالي استخدمها ولكنه في الأغلب لا يعرف أي تفاصيل، وغالباً يطلق هذا التعريف على مستخدمي الأدوات الأوتوماتيكية.
    7. Neophyte المبتديء: وفي تعبير آخر Noob أو Newbie وهو الشخص الجديد أو الشخص الذي لا يعرف شيئاً عن الإختراق أو التكنولوجيا المستخدمة، يطلق عليه أيضاً The 0 Knowledge guy أي الشخص الذي معلوماته صفر.
    8. Hackivist هاكر ذو سمات وطبيعة مجتمعية: يخترق من أجل نشر أهداف كثيرة مختلفة منها السياسية والدينية والفكرية، وله نوعان، نوع شرير والنوع الآخر يخدم حرية المعلومات.
  17. معرفة الثغرات، ما هي أنواعها، كيفية اكتشافها واستغلالها:
    قسمت OWASP اختصاراً ل Open Web Application Security Project وهى منظمة غير هادفة للربح، الثغرات الخاصه بتطبيقات الويب لـ 10 انواع رئيسية، ويترتب هذا التقسيم طبقاً لعوامل كثيرة منها الخطورة والانتشار والأثر، وهي:

    1. Injection
    2. Broken Authentication and Session Management
    3. Cross-Site Scripting (XSS)
    4. Insecure Direct Object References
    5. Security Misconfiguration
    6. Sensitive Data Exposure
    7. Missing Function Level Access Control
    8. Cross-Site Request Forgery (CSRF)
    9. Using Components with Known Vulnerabilities
    10. Unvalidated Redirects and Forwards
      هذه الأنواع هي أنواع رئيسية، يتفرع منها أنواع فرعية كثيرة وقد قمت بشرح بعض منها وأرفقت روابط الشرح في جزء المصادر، كل نوع من الأنواع الرئيسية أو الفرعية قامت OWASP بشرح طرق اكتشافه واستغلاله بالأمثلة، ويمكنك القراءة عنهم هنا: http://goo.gl/b2cn9a
      * ملحوظة بسيطة، هناك أنواع وطرق مكتشفة حديثة لن تجدها في هذه التصنيفات، وهي غالباً تكون من إبداع باحثين ومحللين أمنيين، يمكنك معرفتها عن طريق المدونات الشخصية خاصتهم والتي ستجد روابطها مرفقة في جزء المصادر أيضاً.
  18. كتابة التقارير الأمنية: التقرير الأمني هو همزة الوصل بينك وبين الشركة أو المؤسسة التي يحتوي تطبيقها أو موقعها أو خدمتها على خلل أمني ما، كلما كان التقرير أوضح ساعدت الفريق المسئول عن الحماية والأمان أو فريق المطورين على فهم المشكلة أكثر، حاول أن تكون واضحاً ومحدداً بقدر الإمكان، وإذا دعمت التقرير بفيديو مفصل فسيكون إضافة عظيمة له تساهم في قبول التقرير، بل من الممكن زيادة المكافأة بناءً على جودة التقرير ووضوحه.
  19. كيف أكسب من اكتشاف الثغرات أو أستفيد من برامج المكافأة على الثغرات: هناك مواقع كثيرة جداً تؤمن بمبدأ المكافأة على الثغرات الأمنية وهذا ظهر في شكل “برامج المكافآت الأمنية” أو Bug Bounty Programs، ومن أشهر المواقع التي كانت ولا زالت تقدم هذه المكافآت هي Facebook وMicrosoft وYahoo وGoogle، طبعاً مع إختلاف تفاصيل برنامج كل شركة، فهناك شركات لا تكافيء إلا على جزء معين من تطبيقاتها أو مواقعها، وهناك شركات تضع سعر محدد للثغرات مثل جوجل، وهناك شركات تضع حداً أدنى للمكافآت بلا حد أقصى مثل فيسبوك.
    كي تحوز على المكافآت يجب أن تقرأ أولاً قوانين كل شركة وكل برنامج، إذ أن هناك أنواع من الثغرات لا تقبلها الشركات، وهناك أنواع تقدر بآلاف الدولارات، فاقرأ القوانين بحرص وابدأ اصطياد الثغرات وراسلهم حسب الشروط التي نصوها لطرق التواصل، ويجب عليك إحترام القوانين وإلا ستعرض نفسك لمسائلات قانونية كثيرة بمخالفة القوانين والشروط.
    ماذا أفعل كي أكسب؟
    هناك نوعان من برامج المكافآت:

    1. نوع على موقع الشركة نفسه، حيث تستضيف الشركة البرنامج وتخصص له فريق كامل تحت إدارتها، مثل جوجل وفيسبوك.
    2. ونوع على منصات مخصصة، حيث تقوم الشركات بفتح برامج لها على منصات كثيرة مثل: HackerOne و BugCrowd وCrowdCurity، وكل ما تحتاج فعله هو الدخول على أي موقع من هذه المواقع وتسجيل حساب لك واستكشاف البرامج الموجودة لترسل التقارير لها.* ملحوظة مهمة وجب التنويه لها، لا يمكنك البحث عن الثغرات في أي مواقع غير معلنة عن برنامج مكافآت، إذ لا تمتلك الحق في ذلك، وتعتبر جريمة قانونية قد تحاسب عليها وتصل إلى الحبس أحياناً، وأعرف شخصياً حالات حدث معها ذلك، لذا ضع ذلك في الحسبان.
  20. فروق ما بين مصطلحات بالكاد تكون متشابهة على الكثير من الأشخاص، نشرح بعضاً منها:
    1. Bug Hunting:
      اقتناص الثغرات الأمنية في المواقع وتطبيقات الويب مع عدم العلم بالتكنولوجيا التي يعمل بها الخادم أو حتى التطبيق نفسه، عادة ما يكون أغلبها على جهة العميل Client Side والقليل منها يكون على جهة السيرفر Server Side.
    2. Functional Testing:
      بإختصار هي عملية فحص الموقع أو التطبيق أو النظام ضد المشاكل الوظيفية، مثل إصلاح خطأ ما عند معالجة نص طويل جداً، أو زر لا يعمل، أو خلل في وظيفة ما.
    3. Security Testing:
      يكاد يكون قريباً جداً من معنى Functional Testing لكن يختلف في أنك لا تفحص ما إذا كانت الوظيفة تعمل جيداً أم لا، بل متعلق أكثر بجانب الحماية، هل هذه الوظيفة أو الخاصية قد تعرضني في المستقبل للاختراق أو تسريب البيانات أو خلافه؟
    4. Penetration Testing:
      عمل إختبار إختراق لنظام أو تطبيق ويب أو خدمة بشكل كامل من أ إلى ي، وهذا يشمل طبقات مثل Server Layer  وNetwork Infrastructure Layer وServices Layer واWeb Application Layer ومراحل كثيرة جداً مثل Reconnaissance و Scanning و Gaining Access و Maintaining Access و Covering Tracks بعدهم قد تسمع عن مصطلحات كتير Vulnerability Assessments و Remediation و Reporting وله أنواع متعددة أبرزها White-box وBlack-box.