دانش پیش نیاز باگ بانتی برای شروع

دانش پیش نیاز باگ بانتی برای شروع

آیا یادگرفتن دانش پایه (شبکه، کدنویسی، لینوکس) برای شروع بکار در باگ بانتی واقعا مهم و ضروری است؟

من پیام های زیادی از افرادیکه جدیدا سفر آموزش امنیت خود را آغاز کرده اند دریافت می‌کنم. و سوال “پیش نیازهای شروع یادگیری دانش باگ بانتی و امنیت وب و موبایل چه چیزهایی هستند؟ ” یکی از پرتکرار ترین سوالات است. معمولا این سوال را به شکل های مختلف می‌پرسند که در ادامه من چند نمونه از این اشکال مختلف آن را برای شما نوشته‌ام:

  • آیا لازم است قبل از یادگیری امنیت وب و موبایل، کدنویسی یادبگیرم؟
  • بهتراست OSCP را یادبگیرم یا CCNA؟
  • باید لینوکس یادبگیرم یا با استفاده از ویندوز هم میتوانم کار امنیت وب و موبایل را شروع کنم؟
  • آیا یاد گرفتن شبکه قبل از اینکه امنیت وب و موبایل را یادبگیرم، ضروری است؟

پاسخ تمام این سوالات خیلی راحت و سرراست نیست.

من اولین ” نفوذ ” خودم را بخاطر می‌آورم. آن زمان من متوجه شدم که بااستفاده از گزینه های “File-> Save As” در مرورگر وب‌ام یک صفحه وب را می‌توانم دانلود کنم، آن را در یک فایل notepad.exe ویرایش کنم و سپس آن را به صورت یک نسخه ویرایش شده محلی دوباره باز کنم. من این کاررا روی google.com انجام دادم و می توان گفت به صورت قانونی به صفحه خانه Google نفوذ کردم.

گذشته بامزه و خنده داری است ولی قابل درک است. درآن زمان درک من از اینترنت برابر با درک من از یک دیکشینری بود. تعدادی حروف و کلمات در آدرس بار مرورگر وارد میکردم و مرورگر در عوض برای من یک صفحه وب را با اطلاعات داخلش برمی‌گرداند. این اینترنت صداهای عجیب غریبی از خودش تولید می‌کرد و حتی موقع استفاده کردن از آن خط تلفن خانه مان هم از کار می‌افتاد (درمورد مودم های دایل آپ صحبت می‌کنم، این توضیحات من برای شماییست که دراین هزاره به دنیا آمده‌اید).

بعدها متوجه شدم که چرا این “نفوذ” من باعث عوض شدن صفحه خانه اصلی Google را تغییر نداد، به این خاطر که وقتی کسی در کامپسوتر شخصی خودش آدرس “google.com” را وارد می‌کند، مرورگر صفحه نخست گوگل را از سرورهای Google بازگردانی‌ می‌کند، نه از روی کامپیوتر من.

با تامل دراین داستان، من کاملا درک می‌کنم که داشتن دانش پیش نیاز برای رسیدن به این نقطه درواقع بسیار ضروری است.

برای درک این موضوع که کاری که من با صفحه اول گوکل در نوت پد انجام میدادم نفوذ کردن نبود، آگاهی داشتن از این موضوع بود که این سند از یک منبع راه دوری که من قادر به ویرایش آن نیستم برای من برگشت داده می‌شود. با یادگرفتن این مطلب به سطح درکی رسیدم که فکرمی‌کنم اکثر افراد اکنون از اینترنت دارند.

دراین مقاله ما در مورد “نفوذ” صحبت می‌کنیم. ما دراین کار از اینترنت به صورت نرمال استفاده نمی‌کنیم، پس اشکالی ندارد با پرسیدن سوالات زیر به دانش خودمان اضافه کنیم و عمق بیشتری به اطلاعات مان بدهیم:

  • این منبع راه دور دقیقا چیست؟
  • فرایند بازگردانی این منبع چگونه کار می‌کند؟

درک این فرایند دراین سطح نیازمند سطح دیگری از دانش و آگاهی است، موضوعاتی مثل وب اپلیکیشن ها، وب سرورها، HTTP، SSL، TCP/IP و DNS.

اکنون شما به عنوان یک محقق امنیتی تازه کار، چقدر در مورد این موضوعات اطلاعات دارید؟

ملاحظات

اول از همه اجازه دهید تا مواردی که باید قبل از شروع به‌کار بدانید را برایتان بگویم.

  • هیچ وقت همه چیز را نخواهید فهمید.
  • نباید انتظار داشته باشیم تا قبل از شروع به‌کار همه چیز را کامل بلد باشیم، چون دراینصورت هیچ گاه موفق به شروع به کار نخواهیم شد.
  • مواردی که به عنوان “دانش پایه” پیش نیاز به شما پیشنهاد می‌شود ممکن است از فردی به فرد دیگر متفاوت باشد.
  • در چه زمینه ای فعالیت می‌کنید؟ برای فعالیت داشتن در حوزه نفوذ و امنیت سایبری در زمینه وب اپلیکیشن ها، یا یخچال های IoT یا بیناری های کامپایل شده، به محیط های اطلاعاتی متفاوتی باید دسترسی داشته باشید.

از وجود آن آگاه شوید

وقتی درحال نفوذ هستید، مهم ترین چیزی که باید از آن آگاه باشید این است که مطمئن شوید آن شی واقعا وجود دارد. برای مثال، وقتی من بخواهم به یک وب اپلیکیشن نفوذ کنم، باید از وجود وب فریم‌ورک ها آگاه باشم. بدون داشتن آگاهی، من توانایی شمارش فرم ورک استفاده شده را ممکن بود نداشته باشم، که ممکن بود در یافتن سطوح حمله جدید بسیاری به من کمک کند.

این بدان معنا نیست که درمورد همه فریم ورک های موجود دانش عمیقی باید داشته باشیم. فقط کافیست درمورد فریم ورک هایی به صورت مفهومی آشنایی داشته باشیم. بدین‌منظور من فکرمی‌کنم بهتر است در ابتدا یک اطلاعات جامع و کلی از همه چیز داشته باشید و وقتی با یک موضوع خاص مواجه شدید به صورت عمقی به مطالعه آن موضوع بپردازید.

وقتی از نوع فریم ورک بکار برده شده آگاه شدید، آنگاه میتوانید برای بدست آوردن اطلاعات بیشتر از اپلیکیشن و فریم ورک بکار رفته، بیشتر و عمیق تر تحقیق کنید. این رویکرد من را با مفهوم پاراگراف بعدی آشنا کرد، یادگیری بهنگام.

یادگیری بهنگام (JIT:Just-In-Time learning)

یادگیری به‌هنگام یک رویکرد آموزشی است که درآن شما مهارت ها یا مفاهیم جدید را زمانیکه به آن نیاز پیدا می‌کنید یادمی‌گیرید. مثال خوبی که می توانم برای این نوع یادگیری بزنم، مربوط به زمانی است که من بهره برداری از تیک اورهای Route53 DNS را انجام می دادم. میدانستم که انجام چنین کاری ممکن است، ولیکن درآن زمان هیچ دستورالعمل و کتابچه راهنمایی که درآن نحوه بهره برداری از آن ها را توضیح داده شده باشد وجود نداشت، پس باید خودم یادمی‌گرفتم. قبل ازاینکه این مبحث را عمیقا یادبگیرم، درک محدودی از نحوه کار DNS داشتم. مدل ذهنی ای که از DNS داشتم تقریبا معادل مواردی است که درادامه می‌گویم:

  • DNS هاست نیم ها را به IP آدرس ترجمه و تبدیل می‌کند.
  • برای گرفتن IP آدرس، اسم هاست را به سرور DNS می‌فرستید و این سرور آدرس IP را به شما بازمی‌گرداند.

من هیچ گاه نیازی به راه اندازی DNS خاص غیر از رکوردهای A نداشتم،  درک کاملی از انواع مختلف جست و جو های DNS (A, AAAA, CNAME, TXT, MX, PTR, NS و …) یا نحوه ذخیره سازی یا ویرایش رکرودهای DNS نداشتم. چیزی درباره جست و جوی بازگشتی نمیدانستم و نحوه استفاده از کنسول AWS برای افزودن / ویرایش نواحی Route53 را بلد نبودم. ناگهان این مطالب و مفاهیم را باید یادمی‌گرفتم، پس کاملا به‌هنگام یادگرفتم!

این روش یادگیری یک روش بسیار موثر است، چراکه در آن شما زمان تان را برای یادگیری چیزهایی که قرار نیست از آن ها استفاده کنید تلف نمی‌کنید، و دراینصورت، انگیزه شما برای یادگیری چیزهایی که درست بعد از یادگیری قرار است از آن ها استفاده کنید، دوچندان می‌شود.

اکنون اکثر موسسات آموزشی سعی دارند تا بااستفاده از روش یادگیری به‌هنگام (JIT) میزان یادگیری دانشجویان خود را بالا ببرند. آنها این کار را با برگزاری آزمون ها، تعیین ارزیابی ها و تکالیفی که دانش دانشجو را بلافاصله پس از یادگیری مطلب جدید، انجام می‌دهند. و این روش کاملا جواب می‌دهد! شما بیشتر مشتاق یادگیری مطلبی هستید که بالافاصله بعد از آن قرار است آزمون بدهید یا هیچ آزمونی بعد آن نداشته باشید؟

درخت دانش

بهترین تمثیل برای دانش، یک درخت است. دانش پایه مطلق را می توان به عنوان ریشه های درخت درنظر گرفت. بدون ریشه ها (دانش بنیادین) عملا وجود بقیه قسمت های درخت مفهومی ندارد.

پس از ریشه ها، تنه و شاخه های اصلی درخت قرار دارند که این اجزا هم مهم هستند اما باز هم برای زنده ماندن به ریشه نیاز دارند. سپس شاخه های کوچکتر و درآخر برگ ها قرار می‌گیرند، که نشانگر اطلاعات کوچک و کمتر بنیادی هستند، که حیات آن ها نیز به دانش بنیادی (ریشه ها) وابستهاست.

نکته این قسمت اینجاست، که شما بدون داشتن ریشه درکی از برگ ها نخواهید داشت. دانش پایه هم دقیقا  زیربنای سایر دانشی است که روی آن قرار است ساخته شود.

یادگیری مبتنی بر فرایند درمقابل درک عمیق

اینکه بتوانید بدون داشتن دانش یا درک عمیق از دانش پایه یک آسیب پذیری پیدا کنید، اصلا یک امر غیرممکن نیست. صد در صد اسم بهتری برای آن وجود دارد، اما من آن را دانش مبتنی بر فرایند می‌نامم. در ادامه چند مثال برای دانش مبتنی بر فرایند آورده‌ام:

  • کشف XSS ازطریق باز کردن هر وب اپلیکیشن و قرار دادن <script>alert(1)</script> داخل همه فیلدهای متنی تا زمانیکه جعبه اخطار روشن شود.
  • کشف باگ با اجرا کردن اسکنرهای اتوماتیکی که به صورت تصادفی در Github.

دانش مبتنی بر فرایند زمانی اتفاق می افتد که شما مشکلی را حل می‌کنید بدون اینکه بدانید چگونه و با چه مراحلی آن مشکل را حل کردید. این دانش به اندازه ای که به شما اجازه کشف تعداد اندکی باگ را بدهد کافیست، اما در نهایت بازدارنده پیشرفت شما خواهد بود.

در برنامه های باگ بانتی شما در برابر هزاران محقق کلاه سفید به رقابت می‌پردازید. اکثر این محققان امنیتی از حداقل میزان این دانش مبتنی بر فرآیند یا خیلی بهتر از چیزی که شما میدانید، برخوردار هستند. اگر شما درسطح بسیار پایینی از این دانش فرایند محور هستید، در حالت بسیار خوش‌بینانه شما با همه ی افراد شرکت کننده در برنامه در حال رقابت هستید.

نقطه مقابل این مساله هم درست است. یعنی افرادیکه درک عمیق و دانش پایه ای بسیار قوی دارند تعدادشان انگشت شمار است. این درک عمیق به آن‌ها اجازه می‌دهد تا موارد بسیار خطرناک را شناسایی کنند،و فرصت به هم وصل کردن آسیب‌پذیری ها، حملات جدید و … را داشته باشند. که در نهایت منجربه کشف باگ های بیشتر که اغلب شدت خطر بسیار بالایی دارند می‌شود.

داشتن دانش پایه ای قوی یک اصل است که به شما اجازه می دهد تا ازطریق آن نبوغ و خلاقیت تان را بیشتر نشان دهید. باتوجه به اینکه ماهیت اصلی نفوذ، کشف راه هایی برای استفاده کردن چیزها در راهی که برای آن ساخته نشده است، اینجاست که خلاقیت حرف اول را می‌زند.

نتیجه گیری

شما برای گشت و گذار داخل یک وب اپلیکیشن و یافتن یک باگ معمولی نیازی به دانش پایه ندارید، ولیکن یادگرفتن این دانش پایه بایستی به یک قسمت جدانشدنی از سفر نفوذ شما تبدیل شود. هرچقدر زودتر دانش پایه ای تان را قوی تر کنید، همانقدر قدرتمندتر وارد حیطه خلاقیت برتر و موفقیت می‌شوید.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *