نکته: خیلی از مطالب این پست به صورت ساده سازی شده بیان شدن و یا درباره مفاهیم ساده توضیحات زیادی داده شده، برای اینکه دوستان تازه کار تر هم بتونن استفاده کنن.
چند وقت پیش قرار شد یک کارگاه سه ساعته درباره "مقدمه ای بر امنیت سایبری" با همکاری انجمن علمی کامپیوتر دانشگاه شیراز برگزار کنم. موقع آماده کردن اسلاید ها به این فکر افتادم که خب، این همه رودمپ و منابع خفن برای یادگیری و ورود به هک و امنیت وجود داره، من چه چیز جدیدی دارم که بگم؟! و نهایتا به این نتیجه رسیدم که جای یک چیز در وب فارسی درباره هک و امنیت خالیه، یک "نقشه راه فکری". نقشه راه فکری هدف اصلیش اینه که یک ذهنیت به مخاطب بده و خط فکری مخاطب رو برای درک بهتر آماده کنه. توی این پست میخوایم به تعدادی فوت کوزه گری و خط فکری برای شروع بپردازیم و بعد هم منابع برای شروع مطالعه داشته باشیم. (لینک اسلاید های رویدادی که گفتم رو آخر پست گذاشتم، بعضی از مطالب اونجا، اینجا ذکر نشده)
فهرست مطالب:
۱. هک و امنیت چی هست و چی نیست؟
۱.۱. ماهیت کلی هک و امنیت
۱.۲. علم هک و امنیت
۱.۳. کار (مشاغل) امنیت سایبری
۲. بخش های مختلف امنیت سایبری و یادگیری آن ها
۲.۱. موارد مشترک و پیش نیاز ها
۲.۲. امنیت وب
۲.۳. امنیت شبکه
۲.۴. امنیت برنامه ها و اپلیکیشن های موبایلی
۲.۵. امنیت شاخه باینری و مهندسی معکوس
۲.۶. امنیت سازمانی و SOC
۳. نکات و فوت کوزه گری در یادگیری
۴. چه حوزه ای مناسب منه؟
۵. سخن پایانی
قبل از اینکه بخوایم یک نقشه راه داشته باشیم، باید بدونیم هک و امنیت چی هست و چی نیست. نه جدی میگم، این بخش رو رد نکنید! خیلی از ما تصورات خیلی عمیق و خیلی غلطی از هک و امنیت داریم، حتی به عنوان کسانی که سال هاست داخل حوزه IT کار میکنن. پس بد نیست که یکم عمیق تر و جزئی تر، چیستی این موضوع رو مرور کنیم.
خیلی از عزیزانی که به هک و امنیت سایبری علاقه مند و جذب میشن، از طریق فیلم ها و داستان های نسبتا دور از واقعیت با این موضوع آشنا میشن. این باعث میشه که تصورات غلطی شکل بگیره که باید در اولین زمان ممکن اصلاح بشن. چرا؟ چون امروز ما متخصصینی داریم که بعد از سال ها کار تو این حوزه به دلیل همون باور های غلط، یه جاهایی به اصطلاح اشتباه میزنن. بدتر از اون، وقتیه که شما با یک تیم یا شرکت کار میکنید و همکاران شما درگیر این باور های غلط هستن، که باعث دردسر هایی از جمله انتظارات غلط برای شما میشه.
ما اینجا در سه دسته هک و امنیت رو بررسی و تعریف میکنیم:
هک و امنیت از دیدگاه من، قابل تفسیر در یک جمله نیست چراکه ممکنه گمراه کننده باشه، در عوض فکر میکنم تعریفش پیرامون یک جریان در دنیای واقعی فکر بهتری باشه. همه ما می دونیم در دنیای امروز که کامپیوتر ها از ریز تا درشت زندگی ما رو گرفتن، تهدیداتی وجود داره که ما بهشون میگیم تهدیدات سایبری، این تهدیدات رو شما در اخبار زیادی دیدید یا اگر بدشانس بوده باشید، از نزدیک تجربه کردید. یک عده هستن که ما بهشون میگیم بازیگر تهدید، یا threat actor، این عزیزان آدم های بد ماجرا هستن، به هدف های مختلف از پول، اختلال تا جاسوسی یا حتی به عنوان یک تفریح ناسالم، اهداف مختلف رو به طور مخرب و غیرقانونی هک میکنن. توی این بازی یک عده دیگه هستن که صنعت و حوزه امنیت سایبری رو تشکیل میدن. این افراد در حوزه های مختلف تلاش میکنن تا محصولات، سیستم ها، سازمان ها و به طور کلی دنیا رو در برابر تهدیدات گروه اول (آدم بد ها) امن تر کنن و امن نگه دارن. کل این ماجرا و تقابل بین دو گروه میشه ماهیت کلی هک و امنیت، که از اسکریپت کیدی های خردسال تا هکر های حکومتی کارکشته، گسترده هست! این وسط ما یک بخش مشترک بین دو گروه رو داریم که میشه "علم هک و امنیت"، که هر دو گروه ازش استفاده میکنن و هر دو گروه در گسترشش نقش دارن (بله، حتی آدم بد ها)، و بخش "کار هک و امنیت" رو داریم که مخصوص گروه آدم خوب ها هست. در ادامه به هر دو میپردازیم.
واضحه که علم هک و امنیت به دسته ای از علوم گفته میشه که در حوزه ها و بخش های مختلف (مرتبط با دنیای سایبری) به امنیت ماجرا می پردازن، و این رو همه ما می دونیم. اما لازمه قبل از ادامه، کمی جزئی تر نگاه کنیم. شاید در دهه های پیشین علم هک رو میشد فقط به دید نفوذ به سیستم های کامپیوتری نگاه کرد، اما امروزه و با حجم بسیار زیاد تهدیدات سایبری، گاها در پیچیدگی های بسیار بالا، محدوده این علم به شدت گسترش پیدا کرده. بنابراین ما نمی تونیم صرفا هک و امنیت رو به دید نفوذ، و یا حتی فقط نفوذ و دفاع نگاه کنیم! گستردگی این علم فراتر از این حرفاست که در ادامه بهش خواهیم پرداخت.
وسط این گستردگی، خیلی ها امنیت سایبری رو فقط وب و شبکه میبینن در صورتی که اینطور نیست. درسته که گرایش امنیت وب در دنیا و مخصوصا در ایران خیلی خیلی پرطرفدار تر هست، اما ما شاخه هایی از این علم رو داریم (مثل مهندسی معکوس و باینری ها و...) که از نظر اهمیت، اگر مهم تر نباشن، به هیچ وجه کم اهمیت تر نیستن. یکی از مهم ترین مواردی که قراره تو این پست بهش بپردازیم، همین شاخه های مختلف علوم امنیت سایبری هست.
همونطور که گفتیم علم امنیت سایبری بسیار گسترده است و شاخه های زیادی داره، نتیجتا مشاغل این حوزه هم شاخه های مختلفی دارن. ما در اینجا، این عناوین رو در سه دسته قرار میدیم:
۱. تهاجمی (Red Team):
اشتباه نکنید، اینجا منظور ما هک غیرقانونی نیست. یکی از روش های امن سازی در دنیای امنیت سایبری، شبیه سازی حملات سایبری هست. یعنی یک نفر با دید اینکه یک هکر خارج از سازمان هست، میشینه و روی منابع سازمان (سایت و برنامه و اطلاعات و...) کار میکنه و تلاش میکنه نفوذ کنه و آسیب پذیری پیدا کنه. تست نفوذ (Pentest) در واقع در این دسته قرار میگیره. این بخش خودش میتونه شاخه های متفاوتی داشته باشه اما در کل کسی که در این بخش کار میکنه، قراره با نفوذ به منابع سازمان، مشکلاتش رو پیدا کنه و نتیجتا به امن تر شدنش کمک کنه. در این بخش شما ممکنه کارمند یک شرکت باشید تا روی منابع و محصولات اون شرکت کار کنید، ممکنه عضو یک آزمایشگاه یا شرکت امنیت سایبری باشید که این کار رو برای شرکت های مختلف انجام میده، یا ممکنه یک هکر مستقل باشید که روی برنامه های شکار آسیب پذیری (Bug Bounty) شرکت های مختلف کار میکنه.
۲. تدافعی (Blue Team):
در این بخش ما در سمت دیگه ی ماجرا هستیم. بر خلاف پنتستر و رد تیمر ها که "معمولا" دسترسی مستقیم و کامل به منابع سازمان ندارن (چون دارن سناریوی یک نفوذ واقعی رو پیاده سازی میکنن و به اصطلاح Black Box کار میکنن)، اینجا ما معمولا دسترسی زیادی به منابع سازمان داریم، چرا؟ چون کار ما در این بخش اینه که با طراحی و پیاده سازی راهکار های امنیتی، از منابع سازمان در برابر نفوذ مراقبت کنیم. این راهکار ها خیلی خیلی وسیع هستن! از تنظیم پالیسی های امنیتی برای کارکنان سازمان (مثلا استفاده همه از احراز هویت دو مرحله ای) تا مدیریت دسترسی لایه های مختلف افراد و البته، موارد فنی مثل طراحی و پیاده سازی معماری امن شبکه (استفاده موثر از فایروال خودش یک علمه!) و اجرای تنظیم گری های امنیتی روی منابع سازمان (مثلا Harden کردن سیستم عامل، نصب و استفاده از سیستم های مانیتورینگ شبکه و سرور برای پیدا کردن فعالیت مشکوک، خوندن کد های سازمان برای پیدا کردن آسیب پذیری و "خیلی" موارد دیگه).
به طور خلاصه، اگر رد تیمر داره با هدفش (منابع سازمان) سر و کله میزنه تا آسیب پذیری پیدا کنه، بلو تیمر داره تلاشش رو میکنه با انواع و اقسام روش های فنی و غیرفنی، جلوی به وجود اومدن آسیب پذیری رو بگیره، اگر نفوذی صورت گرفت سریع شناساییش کنه و جلوی گسترش خسارت رو بگیره. به همین جهت کار رد تیم ممکنه بتونه یک کار یک نفره باشه، اما با توجه به مقیاس سازمان، کار بلو تیم معمولا کار یک نفره ای نیست. یکی باید کد های محصول رو بخونه، یکی باید معماری شبکه رو طراحی و بررسی کنه، یکی باید دائما حواسش به وضعیت و شرایط منابع سازمان (بر اساس سیستم های مانیتورینگ) باشه و...
به همین جهت هست که بخش تهاجمی و رد تیمر رو شاید بشه تا حد خوبی در یک عنوان پنتست و تست نفوذ محدود کرد (که طبعا منابع مختلف، یک جور تست نمیشن و نیاز به دانش های مختلف دارن، اما نهایتا هدف همه یک چیزه)، اما بلو تیم شدیدا زیرشاخه های مختلف و متفاوتی داره. یک سازمان با توجه به مقیاسش ممکنه چند تا (یا حتی کل) این زیر بخش ها رو به یک نفر بده، یا اینکه برای هر زیر بخش یک نفر (یا حتی یک تیم!) بذاره. گاهی در سازمان های خیلی بزرگ یک تیم فقط مشغول به این هستن که به کارکنان یک سازمان آموزش های امنیتی بدن!
نهایتا در تصویر بالا درباره ساختار یک تیم امنیتی، شما میتونید ببینید که رد تیم و پنتست عملا در یکی دو بخش این تیم هست و باقی بخش هاش رو میشه بلوتیم در نظر گرفت.
۳. تحقیقاتی:
و اما بخش مورد علاقه من! این بخش متاسفانه در ایران خیلی مورد کم لطفی واقع شده. ما در این بخش لزوما درباره منابع یک سازمان کار نمی کنیم. ممکنه روی توسعه ابزار های تست نفوذ کار کنیم یا روی سیستم های بلوتیم، ممکنه تحلیل بدافزار انجام بدیم یا دنبال روش های جدید کشف آسیب پذیری باشیم. ما تو این بخش ممکنه به صورت مستقل کار کنیم و یافته ها رو منتشر کنیم، یا برای یک شرکت امنیتی کار کنیم. بعضا، کشف آسیب پذیری در برنامه ها و سرویس های بنیادین (مثلا پروژه Google Zero) رو با وجود اینکه عملا کار تهاجمی هست، در این بخش قرار میدن چون ما اینجا درباره یک سازمان کار نمیکنیم، بلکه روی چیز هایی کار میکنیم که توسط هزاران سازمان و میلیون ها کاربر مورد استفاده است.
در انتهای این پست به اینکه کدوم یک از این بخش های مناسب شماست بر می گردیم.
رسیدیم به بخش یادگیری. حرف اول و آخر من قبل از شروع اینه که قانع به یک ریسورس و مطلب و دوره نباشید. هیچکس با دیدن یک دوره یا خوندن یک کتاب هکر خوبی نشده. این منابع برای شروع خوبن اما "باید" خودتون علاقه به گشتن و مطالعه بیشتر و تکمیل علمتون داشته باشید، و یادتون باشه یادگیری با مطالعه بخش اول کاره. چیز مهمی که شما رو واقعا تبدیل به یک هکر میکنه، تجربه است. دنبال تجربه باشید...
یادتون نره که اگر در حین مطالعه یک منبع چیزی رو نفهمیدید ناامید نشید. چون قرار نبوده در یک مطلب همه چیزو بفهمید، بلکه قراره بعضی چیز هارو نفهمید و برید دربارش سرچ و تحقیق کنید. ضمنا در مطالعه منابع مختلف قطعا و به دفعات به مطالب ظاهرا تکراری بر می خورید. این عادیه و چیز بدی نیست، اگر بخواید مطالعه عمیق داشته باشید بهتره تمام این موارد رو بخونید چون ممکنه هر منبعی نکته جدیدی وسط مطالب تکراری بگه.
توصیه میکنم سری هم به این نقشه راه مموری لیکز بزنید:
https://memoryleaks.ir/how-to-become-a-hacker/
موضوعی که وجود داره اینه که "معمولا" شما در هر بخشی بخواید کار کنید، نیاز دارید یک سری موارد رو بدونید یا به عبارتی، یک سری مباحث بین عموم حوزه ها مشترک هستن.
۱. زبان انگلیسی. اگر زبانتون خوب نیست (در حد خوندن مطالب انگلیسی) همین الان آب دستتونه بذارید زمین و برید زبانتون رو خوب کنید. جدی میگم، این مهم ترین پیش نیازه.
۲. مهارت سرچ کردن و کار با گوگل شما رو نجات میده و بالا میبره. پیشینیان شما در این حوزه به این حجم از منابع آنلاین دسترسی نداشتن و محدود به کتاب و تجربه بودن، شما قدر داشته تون رو بدونید و روی مهارت سرچ کردنتون کار کنید. البته این حجم بالای منابع آنلاین یک بدی بزرگ داره: منابع و مطالب به درد نخور! شما باید بتونید با موتور های جستجو به نحوی کار کنید که دقیقا چیزی که میخواید رو پیدا کنید.
۳. برنامه نویسی به طور عمومی چیزی نیست که حتما باید بلد باشید، اما بی نهایت میتونه کمکتون کنه تا جایی که خیلی ها بر خلاف نظر من، معتقدن برنامه نویسی لازمه. شما با مهارت برنامه نویسی و اسکریپت نویسی میتونید خیلی از کار های خودتون رو راه بندازید، بعضی از حملات رو پیاده سازی کنید و گاها کار خودتون رو راحت تر کنید. توصیه من اینه که پایتون رو یاد بگیرید، نه تنها به موارد بالا کمک میکنه، بلکه یک تصوری از ذهنیت برنامه نویس ها هم بهتون میده که میتونه "خیلی خیلی" به شکار آسیب پذیری کمک کنه.
۴. از طرفی، باید با مفاهیم پایه هک و امنیت آشنا باشید حتی اگر به کار نیاد و به حوزه تخصصی شما مربوط نشه. چرا؟ چون باید بتونید با همکاران تون ارتباط موثر داشته باشید و درک خوبی از حرف های هم داشته باشید، به علاوه اینکه هنگام یادگیری هم اگر با این مفاهیم آشنا نباشید، موقع مطالعه انگار دارید زبان آدم فضایی ها رو میخونید و تصور دقیقی ندارید. این موارد برای شروع خوب هستن:
https://docs.microsoft.com/en-us/learn/paths/describe-basic-concepts-of-cybersecurity/
https://www.ftc.gov/system/files/attachments/cybersecurity-small-business/cybersecuirty_sb_factsheets_all.pdf
https://www.cybintsolutions.com/20-cyber-security-terms-that-you-should-know/
https://www.allot.com/100-plus-cybersecurity-terms-definitions/
۵. از کامپیوتر سر در بیارید! نیازی نیست لیسانس کامپیوتر داشته باشید اما سر و کله زدن با کامپیوتر رو بلد باشید. شاید ذکر این مورد احمقانه به نظر بیاد ولی وقتی جلوتر رفتید متوجه منظورم میشید :)))
۶. سعی کنید یک آشنایی با سیستم عامل های لینوکسی پیدا کنید. جدا از اینکه کلاس داره (شوخی کردم منو نزنید)، خیلی از ابزار های فقط لینوکسی هستن و خیلی از تارگت ها و سیستم هایی که شما باهاشون سر و کار خواهید داشت هم لینوکسی هستن. در این مورد حقیقتش منبع منسجمی که قبول داشته باشم کمه، توصیه میکنم ماشین مجازی (VM) بیارید بالا و روش یک توزیع لینوکسی مثل اوبونتو نصب کنید و باهاش سر و کله بزنید چون تجربه بهترین آموزگار شماست. مجدد تاکید میکنم با VM شروع کنید چون احتمال اینکه سیستم عامل و داده های خودتون رو خراب کنید زیاده.
حوزه مورد علاقه همه! البته این روز ها بیشتر هک اینستاگرام مورد علاقه همه است :))) ، اما قبل از اینکه شبکه های اجتماعی مدرن بیان و انقدر پرطرفدار بشن، هک وبسایت عشق همه ی علاقه مندان تازه کار بود. همون زمان هم هک یاهو مسنجر خدا بیامرز و فیسبوک پرطرفدار بود، اما هک وبسایت وجهه خفن خوبی داشت. بگذریم! از اسمش مشخصه، ما اینجا با وبسایت ها یا بهتره بگم وب اپلیکیشن ها سر و کار داریم. نکته مهم اینه که تو این بخش من لزوما نمیخوام برم دیفیس کنم (صفحه اصلی سایت رو تغییر بدم به hAcKed bY aLI hACker)، بلکه ممکنه به یک آسیب پذیری کوچیک برسم تا رسیدن به تسخیر (؟!) اکانت (Account Takeover) و غول مرحله آخر که اجرای کد روی سرور (RCE) هست. پس اینو یادتون باشه درسته من دارم با یک وب اپلیکیشن کار میکنم اما ممکنه سطح نفوذم خیلی عمیق تر شه، ممکنه به کل شبکه هدف برسم!
اینکه چرا به جای وبسایت میگم وب اپلیکیشن، چون این روز ها دنیای وب خیلی فراتر از یک وبسایت ساده است. مثلا API های وب (اگر نمیدونید چی هستن، فعلا اینطوری در نظر بگیرید که یک سری ارتباط خام غیرگرافیکی هستن که یک مشت متن و اطلاعات رو رد و بدل میکنن) برای خودشون یک دنیایی هستن که لزوما در تعریف وبسایت نمیگنجن اما وب اپلیکیشن هستن. بذارید یکم عمیق تر بشیم. ما یک چیزی داریم به نام اینترفیس. اینترفیس چیه؟ شما وقتی با یک برنامه اندرویدی کار میکنید، اون محیط برنامه (دکمه ها و لیست ها و متن ها و...) اینترفیس شما با برنامه هست. همه ما میدونیم نهایتا پشت کل اینا، کد و به اصطلاح صفر و یک هست، اما کاربر باید یک "محیط و مسیر ارتباطی" با برنامه داشته باشه تا بتونه باهاش کار کنه. پشت هر لایکی که شما در اینستاگرام ثبت میکنید هزاران خط کد اجرا میشه، اما "راه تعامل" شما با اینستاگرام، این دکمه لایک و برنامه اینستاگرام هست. پس اینترفیس اون، راه تعامل شما با سیستم هست. شما برای کار با یک برنامه ممکنه مجبور شید یک دستور در کامندلاین و تریمنال اجرا کنید، یا اینکه روی یک دکمه کلیک کنید. این محیط اینترفیس شماست.
حالا در مثال اینستاگرام، شما وقتی روی دکمه لایک کلیک می کنید، یک ارتباط روی اینترنت برقرار میشه به API اینستاگرام. راه تعامل شما با برنامه اون دکمه لایک بوده، و راه تعامل برنامه با سرور برای اعلام این لایک، اون API. پس اینجا من در واقع با دو تا برنامه طرفم. برنامه (کلاینت) اندرویدی اینستاگرام، و برنامه تحت وب (وب اپلیکیشن) اینستاگرام که وظیفه تعامل با برنامه روی گوشی شما رو داره (در واقع اینترفیس فقط برای ارتباط بین انسان و برنامه تعریف نمیشه، برنامه های مختلف هم برای ارتباط با هم نیاز به یک اینترفیس دارن که حرف همو بفهمن و با هم ارتباط برقرار کنن). پس شما توی این حوزه وب، ممکنه روی API وب اینستاگرام کار کنید! تمام این ها توضیح این بود که چرا میگیم وب اپلیکیشن و بتونیم درک کنیم نقش برنامه های تحت وب رو.
نتیجتا در حوزه وب من سر و کارم با هر برنامه ای هست که اینترفیس وب داره، حالا میخواد API باشه یا یک وبسایت خوشگل گرافیکی. برنامه های تحت وب (وب اپلیکیشن ها) هم مثل هرچیز دیگه ای در دنیای کامپیوتر، خودشون بر پایه مفاهیم و سیستم های دیگه ای سوار هستن. ما هفت لایه در شبکه داریم (مدل OSI)، لایه آخرش میشه لایه میزبان HTTP که پروتکلی هست که ارتباطات وب روش برقرار میشه و طبعا خود HTTP هم روی لایه های پایینی متکی هست. حالا اگر من بخوام یک هکر خفن در حوزه وب بشم باید چکار کنم؟ آفرین، باید بدونم این "وب" که ما ازش حرف میزنیم چیه و چطور کار میکنه. اینو به خاطر داشته باشید هکر برای نفوذ، از درک و فهمش از نحوه کارکرد سیستم هدف استفاده میکنه، پس من باید بدونم جریان چیه تا بتونم نفوذ کنم.
آسیب پذیری های برنامه های وب وسیع و زیاد هستن، اما ما چند تا آسیب پذیری اساسی داریم (که توی منابعی که خواهم گفت کاملا شرح داده شدن) که مثلا به دلیل عدم بررسی ورودی های کاربر به برنامه، باعث میشن برنامه وب، اطلاعاتی که نباید بده رو به مهاجم بده و یا بدتر از اون، کد های مهاجم (که به عنوان ورودی داده شدن) رو روی سرور اجرا کنه. و البته مثل هر برنامه کامپیوتری دیگه، آسیب پذیری ها و باگ های منطقی رو داریم که برنامه مثلا به دلیل اشکال در منطق بررسی هویت کاربر، بهش اجازه دسترسی به اطلاعات کاربر های دیگه رو میده.
حالا من به عنوان یک هکر حوزه وب باید چه چیز هایی رو بلد باشم؟ من باید پروتکل HTTP رو بشناسم، اینکه وب سرور ها (برنامه هایی که روی سرور به درخواست های وب شما جواب میدن) چی هستن و چطور کار میکنن و چه تفاوت هایی دارن رو بشناسم، با تکنولوژی های وب (کلیت زبان ها و فریمورک های برنامه نویسی وب) آشنا باشم و معماری های متداول برنامه های تحت وب رو بدونم. اینجوری وقتی با یک هدف مواجه میشم میدونم باید دنبال کجا ها برم. یادتونه گفتم اگر برنامه نویسی رو بلد باشید کمکتون میکنه؟ دقیقا اینجا به کمکتون میاد تا با بررسی رفتار یک برنامه تحت وب، بتونید حدس بزنید برنامه نویس پشتش چه کدی رو زده و چه چیزی رو پیاده کرده.
بریم سراغ منابع. اول با مفاهیم پایه وب آشنا بشیم:
https://www.tutorialspoint.com/web_developers_guide/web_basic_concepts.htm
https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP
https://softuni.org/dev-concepts/everything-you-need-to-know-about-http-protocol/
https://developer.mozilla.org/en-US/docs/Learn/Common_questions/What_is_a_web_server
https://en.wikipedia.org/wiki/Web_server
https://www.geeksforgeeks.org/basics-computer-networking/
https://www.geeksforgeeks.org/layers-of-osi-model/
https://en.wikipedia.org/wiki/Web_API
https://web.dev/howbrowserswork/
https://www.geeksforgeeks.org/basic-database-concepts/
https://www.w3schools.com/sql/sql_intro.asp
کتاب HTTP: The Definitive Guide: The Definitive Guide (Definitive Guides) از Brian Totty
مفاهیم WWW و Web و HTTP و Web protocols و Web technologies و Web API و Web browsers و Database
در ادامه میتونیم بریم سراغ امنیت وب:
کتاب The Web Application Hacker's Handbook از Dafydd Stuttard
کتاب Web Application Security از Andrew Hoffman
کتاب Bug Bounty Bootcamp از Vickie Li (مستقیم و اول کار سراغ این کتاب نرید)
کتاب Hacking APIs: Breaking Web Application Programming Interfaces از Corey J. Ball (این کتاب اختصاصا درباره API ها هست و اخیرا منتشر شده اما فوقالعاده است، وقتی به کلیات وب مسلط شدید برید سراغش)
مفاهیم آسیب پذیری های متداول وب، اکسپلویت آسیب پذیری های وب، WAF، آنالیز Root Cause آسیب پذیری های وب
و منابعی که همیشه کنار دستتون داشته باشید و بهش سرک بکشید و بخش های مختلفش رو مطالعه کنید:
https://github.com/qazbnm456/awesome-web-security
OWASP (سرچ کنید)
بحث امنیت وب ارتباط تنگاتنگی با امنیت شبکه داره، گرچه امنیت شبکه خیلی عمیق تر از چیزی هست که شما برای امنیت وب نیاز دارید، اما خوبه که مفاهیم اولیه رو بدونید.
شما الان با کامپیوتر یا گوشیتون به اینترنت وصل هستید و دارید این مطلب رو می خونید. شبکه های کامپیوتری یکی از بزرگ ترین اختراعات و عوامل تغییر دنیای ما در سه دهه اخیر هستن، میلیارد ها سیستم کامپیوتری از سرور های پیشرفته تا دستگاه های IoT به اینترنت وصل هستن، اما جالبه بدونید هنوزم خیلی از قواعد این دنیای عجیب و بزرگ، همون قواعد بیست سی سال پیش هستن. چرا؟ چون گاها خیلی هاشون به قدری خوب طراحی شدن که هنوزم کاملا جوابگوی نیاز های امروز ما هستن، و بعضی هاشون به قدری بد و غیرقابل جایگزینی طراحی شدن (I'm looking at you, BGP) که نمیشه تغییرشون داد چون باید زیرساخت جهانی اینترنت رو کند و دوباره بالا آورد!
امنیت شبکه از اون دست مواردی هست که برای تسلط بهش باید به معنای واقعی کلمه به خود علم شبکه های کامپیوتری مسلط باشید. شبکه لایه لایه هست، در لایه های بالایی مثل لایه ای که HTTP درش قرار داره مفاهیم نسبتا ساده هستن، اما هرچی به لایه های پایینی میریم باید بیشتر عمیق شیم و مطالعه کنیم. وقتی از تسلط به شبکه کامپیوتری حرف میزنیم یعنی باید بدونیم این عکس ها و صفحه های خوشگل و گرافیکی چطور در اوج نبوغ و کثیف بودن به فریم های شبکه تبدیل میشن و مسیر خودشون رو از این سر دنیا به اون سر دنیا پیدا میکنن. قسمت مهم ماجرا به عنوان یک متخصص امنیت شبکه اینه که بسته به کاری که شما میکنید، ممکنه سر و کارتون به بعضی لایه های شبکه نیفته. مثلا اگر من در یک سازمان خیلی بزرگ یا زیرساختی اینترنت نیستم لزوما کاری با سیستم Routing اینترنت و امنیتش ندارم.
نکته جالب ماجرا اینجاست که امنیت وب هم به نوعی بخشی از امنیت شبکه محسوب میشه، اما انقدر بزرگ و بعضا مستقله که معمولا کاری به لایه های پایینیش نداریم، اما امنیت شبکه به طور کلان، تقریبا به همه چیز و عموم حوزه ها وصله! چون سیستم های کامپیوتری و نرم افزاری، عملا دارن با شبکه کار میکنن پس به نوعی بهش مربوطن، اما با مستقل کردن بخش های سطح بالا مثل وب، میشه بیشتر به "خود شبکه" پرداخت.
یکم جزئی تر صحبت کنیم. یک سازمان یا یک مجموعه ای از سازمان ها برای ارتباطات داخلی و خارجی خودشون دارن از شبکه های کامپیوتری و اینترنت استفاده میکنن. من اگر به عنوان یک متخصص امنیت شبکه خیالم از این بابت که متخصص امنیت وب، امنیت وب اپلیکیشن خودش رو تامین میکنه راحت باشه، میتونم سراغ مسائل زیرساختی تری مثل "معماری امن شبکه" و ارتباطات سیستم های کامپیوتری برم. یک شرکت بزرگی مثل گوگل، هزاران سرور داره که باید با هم و با دنیای بیرون در ارتباط باشن، این ارتباط خود به خود شکل نمیگیره و یک شبکه کامپیوتری "طراحی و اجرا" شده که هدفش اینه که در سریع ترین و بهینه ترین حالت ممکن، ارتباط بین سیستم های مختلف رو به صورت امن برقرار کنه.
من به عنوان یک متخصص امنیت شبکه باید بدونم کدوم بخش ها از این شبکه با شبکه های بیرونی (اینترنت) در ارتباط هستن، چطور ارتباط دارن (چه پروتکل و پورت ها و مقصد هایی)، و چه منابعی (مثل وب سرور یا ...) قراره چه تعاملاتی داشته باشن. با دونستن این نیاز ها، من باید سیاست ها و موارد امنیتی رو در نظر بگیرم که این ارتباطات رو در حد لازم نگه دارم و اجازه دسترسی غیر مجاز ندم. پس من نقاط ارتباط با دنیای بیرون رو پیدا میکنم و امنشون میکنم (بستن پورت و فایروال و دسترسی ها و...). اما چیز جدیدی که در این بخش داریم، اینه که خب اومدیم و یکی از این منابع (برنامه، سرور ...) هک شد، بالاخره اتفاق میفته! من چطور میتونم کاری کنم که جلوی "گسترش" این نفوذ رو بگیرم. این خاصیت شبکه است، اگر مهاجم موفق شد به بخشی از شبکه نفوذ کنه، قطعا اقدام بعدیش اینه که نفوذش رو به کل شبکه گسترش بده. من چطور میتونم جلوی این اتفاق رو بگیرم؟ با طراحی نوعی از شبکه با محدودیت هایی بین اجزا و بخش های مختلف شبکه، و البته با مانیتورنگ مداوم ارتباطات داخل شبکه، اگر سروری که همیشه یک بار ترافیک مشخص داشته الان داره چند برابرش اطلاعات رد و بدل میکنه یا ارتباط با جایی داره که قاعدتا نباید، میفهمیم که یک جای کار میلنگه.
در بحث تهاجمی امنیت شبکه هم، همین داستانه اما برعکسش :)))
من با علم به بخش ها و راهکار های امنیتی شبکه، خواصش رو بررسی میکنم، نقاط ارتباطش با دنیای بیرون رو پیدا میکنم (مثلا وب سرور، ایمیل سرور و...) و تلاش میکنم یک راهی به داخل پیدا کنم. بعدش هم که مشخصه، تلاش میکنم کل شبکه رو آلوده کنم (نکنید، کار بدیه).
یک مثال بزنیم و بریم سراغ منابع. باج افزار واناکرای (Wannacry) در سال ۲۰۱۷ به دنیا یک سکته ناقص وارد کرد. وقتی یک سیستم رو آلوده میکرد، داخل شبکه های متصل به سیستم میگشت و با استفاده از یک آسیب پذیری حساس در ویندوز که هنوز در خیلی جاها رفع نشده بود، سیستم های دیگه حاضر در شبکه که آسیب پذیر بودن رو هک میکرد و اونارو هم آلوده میکرد و به همین ترتیب. در واقع تمام worm های کامپیوتری این کارو میکنن اما واناکرای به خاطر نوع و حساسیت آسیب پذیری که استفاده میکرد خیلی موفق بود. به عنوان یک متخصص امنیت شبکه من باید حواسم به آپدیت بودن سرور ها، کنترل و محدود سازی ارتباطات داخل و بین شبکه و رصد فعالیت های داخل شبکه باشه تا جلوی چنین حمله ای رو بگیرم.
و اما منابع. برای مفاهیم اولیه:
کتاب CompTIA Network+ Certification All-in-One Exam Guide از Mike Meyers
https://www.guru99.com/basic-computer-network.html
https://github.com/facyber/awesome-networking
همون کتاب اولی رو بخونید به نظرم کافی و خوبه.
منابع امنیت شبکه:
ببخشید، اینجا کار مشکل میشه :)))
بحث بر سر اینه که همونطور که گفته شد امنیت شبکه، کلمه بیش از حد کلی هست و خودش زیرشاخه های متفاوتی داره و تیم ها و افراد مختلفی باید استاندارد هاش رو رعایت کنن. نتیجتا شما به عنوان بلو تیمر باید Best practice های حوزه و معماری خودتون رو بدونید و اعمال کنید. اگر DevOps هستید این موارد امنیتی رو بدونید که تقریبا همشون در کتاب های عمومی شبکه ذکر شدن. و اگر رد تیمر و مهاجم هستید، بازم باید با همین مفاهیم آشنا باشید، با این تفاوت که اینجا باید با ابزار های تهاجمی این حوزه هم آشنا باشید. نتیجتا من نمیتونم منبع خیلی کلی و همه فن حریفی بدم، اما بخش های مربوطه از کتاب های زیر به نظرم خوب هستن:
کتاب The DevOps Handbook: How to Create World-Class Agility, Reliability, and Security in Technology Organizations از Gene Kim
کتاب CompTIA Security+ Study Guide: Exam SY0-601 از Mike Chapple
کتاب ISC2 CISSP Certified Information Systems Security Professional Official Study Guide از Mike Chapple
توی این یک حوزه من فعالیت عمومی بیشتری داشتم (پست های قبلیم در ویرگول رو میتونید مطالعه کنید). اگر یادتون باشه در بخش وب، اینترفیس رو تعریف کردیم و برنامه اینستاگرام روی اندروید رو مثال زدیم. در بخش امنیت برنامه های موبایلی ما دو دسته کار انجام میدیم.
اول اینکه همونطور که گفتیم، خیلی اوقات برنامه های موبایلی در واقع کلاینت ها و اینترفیس هایی هستن که نهایتا با هسته مرکزی برنامه در سرور ارتباط برقرار میکنن. این کلاینت های موبایلی وظایف زیادی دارن، از احراز هویت کاربر (لاگین اکانت) تا انجام و انتقال عملیات های کاربر به سرور. اتفاقی که میفته اینه: برنامه نویس ناخودآگاه تصور میکنه API وب (که قبلا دربارش حرف زدیم و گفتیم که سرور هسته مرکزی برنامه است و تمام اطلاعات و اتفاقات اونجا ثبت میشه) فقط توسط برنامه/کلاینت موبایلی استفاده میشه، تماما ارتباطش با برنامه هست و خود برنامه حواسش به مواردی مثل احراز هویت هست، و دوستان، این خطرناک ترین اتفاقیه که به دفعات بسیار زیاد (مخصوصا در برنامه های ایرانی) داره میفته تا جایی که ما اینجا یک دسته جدا بهش اختصاص دادیم. چرا خطرناکه؟ چون برنامه نویس وظایف مهمی مثل احراز هویت رو به برنامه (و نه سرور) میسپاره و عملا به عملکرد برنامه اعتماد میکنه، اما برنامه داره روی گوشی کاربر اجرا میشه و هرچیزی روی دستگاه کاربر اجرا شه، قابل تغییره! پس من میتونم نحوه ارتباط برنامه با سرور رو بررسی کنم و نقاط ضعفش رو پیدا کنم. مثلا رمز دو مرحله ای که به شما پیامک میشه رو داخل برنامه داخل گوشی کاربر میسازه و از طریق سرور به کاربر پیامک میکنه! شوخی نمیکنم، این اتفاق افتاده و کم هم نبوده. چه اتفاقی میفته؟ من میتونم برنامه رو تغییر بدم و یک رمز دوم خودم بسازم و به سرور بدم، رمز برای کاربر پیامک میشه و من به پیامک دسترسی ندارم، اما رمز رو خودم ساختم! پس باهاش لاگین میکنم.
یا اینکه مثلا (این اتفاق خیلی خیلی زیاد میفته) یک بخشی از API سرور مسئول دادن اطلاعات کاربر به برنامه موبایلی هست، به این صورت که شماره تلفن کاربر رو میگیره و در جواب بهش، کد ملی و اسم کاربر رو میده. برنامه موبایلی اینجوری تنظیم شده که طبعا فقط شماره موبایل خود کاربر رو به سرور میده، و برنامه نویس با تصور اینکه فقط برنامه با این API کار میکنه و برنامه فقط شماره موبایل خود کاربر رو میده، فکر میکنه مشکلی پیش نمیاد، یادش میره احراز هویت بذاره روی برنامه سرور که ببینه آیا این کسی که داره اطلاعات این شماره رو میخواد، واقعا صاحب شماره است؟ ما این بخش API رو داخل برنامه پیدا میکنیم و خودمون یک شماره دیگه رو به سرور میدیم، و سرور چون به برنامه موبایلی "اعتماد کرده"، اطلاعات یک کاربر دیگه رو به ما میده! این هایی که گفتم سناریو های واقعی هستن که زیاد پیش میان :)))
پس دسته اول کاری که ما حین تست نفوذ برنامه های موبایلی میکنیم، بررسی ارتباط برنامه با سرور هست و با دانش امنیت وب و API، تلاش میکنیم به نوعی با استفاده از ارتباط ناامن برنامه با سرور (که به خاطر اعتماد به عملکرد برنامه و اینکه کسی جز خود برنامه با این API کار نمیکنه هست) به برنامه سرور نفوذ کنیم. در این دسته ما در واقع باید امنیت وب رو (حداقل API) بلد باشیم.
و اما دسته دوم کاری که ما در این بخش انجام میدیم، مواردی هست که مربوط به آسیب پذیری خود برنامه هست و ربطی به ارتباطش با سرور نداره. مثلا برنامه اطلاعات محرمانه ای از کاربر رو داخل خود گوشی (و نه سرور) نگه میداره، و یک آسیب پذیری داره که باعث میشه با باز شدن یک لینک، اون اطلاعات به هکر ارسال شه. یا در یک مثال واقعی دیگه، واتس اپ یک آسیب پذیری داشت که با یک تماس تلفنی واتس اپی به قربانی، دسترسی اجرای کد روی گوشی قربانی میداد. بنابراین هرچیزی که در دسته اول نیست، در این دسته قرار میگیره :)))
ما در هر دو دسته عموما روی برنامه "مهندسی معکوس" انجام میدیم تا کد های برنامه رو بخونیم و عملکردش حین اجرا رو بررسی کنیم، و گاها روند اجرای برنامه رو برای کشف آسیب پذیری دستکاری میکنیم. اما اینجا یک تفاوت بزرگ بین برنامه های اندروید و IOS وجود داره. برنامه های اندرویدی به دلیل مکانیزم کامپایل و اجرا (که وارد جزئیاتشون نمیشیم) توسط ابزار هایی به نام decompiler میتونن تبدیل به کد سطح بالا و قابل فهم جاوا بشن، درباره IOS ماجرا به این راحتی نیست چون برنامه ها مستقیما به زبان ماشین تبدیل میشن. بنابراین ما دو مسیر کاملا متفاوت رو برای مهندسی معکوس این دو داریم (البته در Static Analysis).
برای مفاهیم اولیه اندروید:
زبان برنامه نویسی جاوا رو یاد بگیرید، حداقل بتونید بخونیدش
https://source.android.com/devices/architecture
https://developer.android.com/topic/architecture
https://www.tutorialride.com/android/structure-of-android-application.htm
https://www.geeksforgeeks.org/components-android-application/?ref=lbp
https://developer.android.com/guide/components/fundamentals
آشنایی با مفاهیم و معماری سیستم عامل اندروید، پکیج های اندرویدی، نحوه ساخت برنامه اندرویدی، DALVIK/ART
توصیه میکنم کاملا به اینکه چطور یک برنامه اندرویدی نوشته و اجرا میشه مسلط بشید، مثلا این کتاب:
کتاب Android Programming for Beginners: Build in-depth, full-featured Android 9 Pie apps starting from zero programming experience, 2nd Edition از John Horton
منابع امنیت اندروید:
در کمال تاسف تا به امروز هیچ کتاب خوبی در این زمینه ندیدم (عموما منابع درب و داغونی هستن)، اما منابع اینترنتی نسبتا خوبی وجود داره. با این حال تو این حوزه ناچارید بیش از باقی حوزه ها، خودتون بگردید دنبال منابع کوچیک و دنبال تجربه خودتون برید. توصیه من این هست که این حوزه رو به عنوان حوزه اول خودتون در بحث امنیت انتخاب نکنید و قبلش مثلا وب رو یاد بگیرید تا با دید و مهارت بهتری بتونید وارد این حوزه بشید. با این حال این منابع، سر نخ های خوبی هستن:
https://www.ragingrock.com/AndroidAppRE/
https://mobile-security.gitbook.io/mobile-security-testing-guide/android-testing-guide/0x05a-platform-overview (بخش اندروید این کتاب آنلاین، یکی از کامل ترین هاست. کل بخش اندروید رو مطالعه کنید)
https://github.com/rednaga/training/blob/master/DEFCON23/O%26D%20-%20Android%20Reverse%20Engineering.pdf
https://github.com/ashishb/android-security-awesome
https://owasp.org/www-project-mobile-top-10/
مفاهیم اولیه IOS:
لازمه این نکته رو بگم من هیچوقت روی امنیت IOS کار نکردم و این منابع رو بر اساس مشورت دوستان وارد به موضوع به دست آوردم.
https://www.geeksforgeeks.org/architecture-of-ios-operating-system/
https://developer.apple.com/tutorials/app-dev-training
منابع مربوط به پلتفرم IOS به شدت محدود تر هستن، نتیجتا توصیه میکنم روی نحوه ساخت برنامه IOS عمیق بشید:
کتاب Ios Programming: The Big Nerd Ranch Guide از Christian Keur
کتاب iOS 13 Programming Fundamentals with Swift: Swift, Xcode, and Cocoa Basics از Matt Neuburg
منابع امنیت IOS:
توصیه میکنم بخش باینری هم مطالعه کنید.
کتاب iOS Application Security: The Definitive Guide for Hackers and Developers از David Thiel
https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06a-platform-overview
https://github.com/Cy-clon3/awesome-ios-security
https://owasp.org/www-project-mobile-top-10/
تا حالا شده کابوس شب هاتون، وارد زندگی روزانه تون بشه؟ تبریک میگم! کابوس عموم دانشجو های کامپیوتر یعنی زبان ماشین و اسمبلی، پایه این بخشه! حقیقت ماجرا اینه که این بخش معمولا "نمیتونه" اولین ماجراجویی کسی که میخواد هکر بشه، باشه. چرا؟ چون کار کردن تو این حوزه عمیقا وابسته به دانش های low-level علوم کامپیوتر هست. با این حال خوشبختانه شما نیازی ندارید رشته کامپیوتر خونده باشید، اما باید آماده بشید برای یک ماجراجویی خیلی عمیق و پیچیده. این بخش یکی از علاقه های شخصی من هست. ما تو این شاخه به سر و کله زدن با باینری ها می پردازیم. میدونیم که برنامه ها نهایتا به زبان ماشین و machine instruction code ترجمه و اجرا میشن، و ما تو این بخش دقیق با همین صفر و یک ها و machine instruction code ها سر و کله میزنیم، اما نگران نباشید! اسمبلی اینجا شمارو نجات میده (فکرشو میکردید؟).
در واقع machine instruction code ها که همون زبان ماشین هستن، به راحتی به اسمبلی تبدیل میشن چون اسمبلی عملا یک نوع نمایش این دستورات هست. ما در این بخش ممکنه با لایبری های native یک برنامه اندروید سر و کله بزنیم، یا با درایور ها و بخش های سیستم عامل، و این زیبایی کار هست، چون عملا با low-level ترین شکل نرم افزار مواجه هستیم و طبیعتا این حوزه سختی هست. مشابه با آنالیز برنامه های موبایل، اینجا هم ما دو نوع آنالیز استاتیک و داینامیک داریم، و البته روش هایی برای کشف آسیب پذیری مثل فازینگ.
اینجا هم ما با آسیب پذیری های معروفی مثل ایرادات حافظه و البته آسیب پذیری های منطقی طرفیم، و البته وقتی با زبان های برنامه نویسی مثل C کار می کنید، احتمال اینکه یک جا حین کار با حافظه خراب کنید خیلی زیاده، و همین یک اشتباه بنا به طبیعت زبان های low level، میتونه باعث طبعات خیلی وحشتناکی بشه که البته، پیدا کردنش مثل دنبال سوزن در انباه کاه گشتنه!
آسیب پذیری های این بخش میتونن خیلی حیاتی باشن، چراکه معمولا دسترسی بالایی به شما میدن و خب طبیعیه که اگر یک درایور یا کرنل یا یک سرویس حیاتی سیستم عامل دچار چنین آسیب پذیری بشه، عملا کل سیستم هک شده. مثلا آسیب پذیری که گفتم واناکرای ازش استفاده میکرد رو یادتونه؟ مربوط به همین بخشه. ما تو این بخش برنامه رو disassemble میکنیم (کد ماشین رو به اسمبلی تبدیل میکنیم)، ارتباطات اجزای مختلف برنامه و روند اجرا رو بررسی میکنیم، حافظه اش رو میخونیم و هر ورودی ممکن برنامه رو بیچاره میکنیم تا ببینیم آیا دچار اشکال میشه یا نه :))))
مثلا آسیب پذیری CVE-2021-3156 در برنامه sudo که برای اجرای برنامه ها و دستورات با دسترسی های مختلف استفاده میشه، باعث میشد به خاطر اینکه sudo در شرایط خاصی (وجود یک کاراکتر خاص در یک دستور خاص در یک جای خاص) طول ورودی رو درست حساب نمیکنه، دسترسی root به مهاجم داده شه که، خیلی بده :))) . این آسیب پذیری ۱۰ سال در sudo وجود داشته و بعد از ده سال با فازینگ کشف و رفع شده...
با توجه به اینکه این مبحث موضوعیه که قبل از ورود بهش باید "خیلی" با مفاهیم low level کامپیوتر آشنا باشید و beginner friendly نیست، توضیحش رو کش نمیدم و میریم سراغ منابع و پیش نیاز ها. شما برای کار در این حوزه باید با کامپایلر ها، ماشین کد ها، زبان برنامه نویسی C، اسمبلی، نحوه کار و تعاملات CPU، مدیریت حافظه و مدیریت سیستم عامل بر پراسس ها آشنا باشید (که احتمالا چندین مورد رو جا انداختم).
نکته: خیلی از برنامه ها لزوما مستقیما به ماشین کد نمیشن (مثل برنامه های اندرویدی که تبدیل به نوعی بایت کد جاوا میشن) و این بستگی به تکنولوژی و زبان برنامه نویسی برنامه هدف داره. در این صورت میشه خیلی راحت تر باهاشون کار کرد (مثلا دات نت که براش ابزار dnSpy هست).
منابع زیر رو برای مطالعه توصیه میکنم:
کتاب مقدس C Programming Language از Kernighan Brian W و Ritchie Dennis
کتاب Modern X86 Assembly Language Programming: 32-bit, 64-bit, SSE, and AVX از Daniel Kusswurm
https://en.wikibooks.org/wiki/X86_Assembly
https://cs.lmu.edu/~ray/notes/x86overview/
https://homepage.cs.uri.edu/faculty/wolfe/book/Readings/Reading04.htm
کتاب Understanding the Linux Kernel, Third Edition از Daniel P. Bovet (صرفا برای آشنایی تعاملات سیستم عامل)
منابع برای امنیت شاخه باینری و مهندسی معکوس:
کتاب Practical Binary Analysis: Build Your Own Linux Tools for Binary Instrumentation, Analysis, and Disassembly از Dennis Andriesse
کتاب The IDA Pro Book, 2nd Edition: The Unofficial Guide to the World's Most Popular Disassembler از Chris Eagle
کتاب Learning Linux Binary Analysis از Ryan "elfmaster" O'Neill
https://github.com/secfigo/Awesome-Fuzzing
https://github.com/tylerha97/awesome-reversing
کتاب Practical Malware Analysis: The Hands-On Guide to Dissecting Malicious Software از Michael Sikorski (فقط چون دوستش دارم)
بر خلاف عموم رودمپ ها، فکر میکنم لازمه به بخش کاملا سازمانی و دفاعی ماجرا هم بپردازیم. گرچه این موضوع در ایران به شدت دست کم گرفته میشه، اما برای سازمان ها متوسط و بزرگ یک عنصر حیاتی هست و در غرب به شدت جدی گرفته میشه و دربارش تولید محتوا میشه. گرچه بخشی از عناوین کاری SOC ها یا همون Security Operations Center، بیشتر سمت و سوی IT داره و از امنیت فاصله میگیره اما یک موضوع کاملا جدی با بازار کار تشنه است. بخش هایی مثل تیم های مدیریت رخداد، تیم های سیاست گذاری، تیم های آموزش و تیم های مانیتورینگ در دنیا در حال استاندارد شدن هستن و به همین دلیل هست که در سمت دفاعی ماجرا، ما استاندارد های خیلی کامل و خوبی (بعضا دولتی) رو میبینیم (بر خلاف سمت تهاجمی و رد تیم که آنچنان استاندارد پذیر نیست چون با ذات کار نمیسازه).
در این بخش ما زیرشاخه های زیادی داریم. مثلا اگر یک سازمان دچار نفوذ بشه و آسیب ببینه (درز اطلاعات، از بین رفتن اطلاعات و...)، چه سیاستی وجود داره برای مدیریت شرایط؟ لزوما اینجا بحث فنی نیست بلکه بحث سیاست گذاری هم میتونه باشه. یا حین انجام نفوذ (در صورت شناسایی)، کی میخواد چیکار کنه؟ اگر صرفا یک تیم آموزش ندیده IT بخواد شرایط رو مدیریت کنه، احتمالا ترکیبی از خاموشی و سردرگمی و قطع کابل و گریه خواهد بود :)))
به همین دلیله که برای سازمانی که یک نفوذ هم یک نفوذه، این مباحث اهمیت پیدا میکنه. همونطور که گفتم استاندارد های خوبی وجود داره که حجم زیادی از منابع برای مطالعه براش هست (طبیعتا اینکه کدوم رو مطالعه کنید، بستگی داره به اینکه در چه عنوانی میخواید فعالیت کنید):
کتاب Modern Security Operations Center از Joseph Muniz
کتاب CISO COMPASS: Navigating Cybersecurity Leadership Challenges with Insights from Pioneers از Todd Fitzgerald
کتاب Blue Team Handbook: SOC, SIEM, and Threat Hunting (V1.02): A Condensed Guide for the Security Operations Team and Threat Hunter از Don Murdoch
کتاب CompTIA Security+ Study Guide: Exam SY0-601 از Mike Chapple (دوباره)
استاندارد های امنیتی مثل NIST Cybersecurity Framework و ISO27K
اگر دقت کرده باشید، در منابع بخش بالا (هوف، بالاخره تموم شد) هیچ کورس و دوره ای رو معرفی نکردم. دوره های آموزشی چیزای خوبی هستن و میتونن خیلی به شما کمک کنن، اما من فکر میکنم با وجود اینکه راه آسون تر هستن، لزوما بهترین راه نیستن. قبلا هم درباره اهمیت کسب تجربه در یادگیری این حوزه گفتم. دوره های آموزشی "ممکنه" این فرصت رو از شما بگیرن، و من با این موضوع مشکل دارم. شخصا فکر میکنم اینکه هر فرد با اتکا به منابع و سرنخ های مطالعاتی، خودش برای خودش یک مسیر یادگیری بسازه خیلی بهتره. اما نهایتا اگر فکر میکنید نیاز به دوره دارید، لطفا خیلی خیلی مراقب باشید چه دوره ای از چه کسی رو میبینید. قطعا دوره های انگلیسی در اولویت باشن.
اگر در دوره ای شرکت می کنید، لطفا از اول تا آخرش رو برید. دوره هایی با سرفصل مشخص، معمولا جوری تدوین میشن که بخش قابل توجهی از اولشون فقط مقدمه برای مطالب اصلی هست. اگر وسط کار ول کنید و برید سراغ یک دوره دیگه، انگار هیچ کاری نکردید. و از یک شاخه به شاخه دیگه نپرید! مخصوصا اول کار، فقط سردرگم تر میشید. این به این معنی نیست که اگر چیزی رو در یک منبع مطالعاتی دیدید و بلد نبودید، سراغش نرید، اتفاقا این کار رو بکنید، اما از مسیری که درش هستید خارج نشید.
بازم تاکید میکنم که تجربه بهترین آموزگار شماست و هیچ دوره یا کتابی، برای شما منبع کامل نمیشه. این علم با سرعت نور داره پیشرفت میکنه، حتی اگر پایه هاش چند دهه قدمت داشته باشن. پس بعد از اینکه کلیت کار رو یاد گرفتید، همیشه دنبال پست ها و مقالات کوچیک تر باشید. اخبار امنیت سایبری رو بخونید و دنبال مطالب جدید باشید، اینجوری علایقتون رو پیدا میکنید کم کم.
یک نکته خیلی مهم دیگه اینکه، از ابزار گرایی فرار کنید. استفاده از ابزار خوبه اما اگر ندونید اون ابزار چطور کار میکنه، جریان پشتش چی هست، شما اون ابزار رو یاد می گیرید و نه علم واقعی رو. از ابزار استفاده کنید اما قبلش بدونید چیه و چطور کار میکنه.
اول موارد مشترک بین شاخه ها رو یاد بگیرید، درباره هر شاخه تحقیق کنید و کار های دیگران در اون حوزه رو ببینید. اشکالی نداره اگر شما چند شاخه رو بلد باشید (اتفاقا خیلی هم خوبه، البته بازم میگم از شاخه به شاخه نپرید)! ممکنه شمایی که اینجایید، به قصد یاد گرفتن هک کردن و نفوذ و رد تیم اومده باشید، اما پنج سال دیگه در SOC یک شرکت بزرگ کار کنید، این تجربه شماست که بهتون خواهد گفت در کدوم حوزه احساس بهتری دارید، اجازه بدید این تجربه رخ بده و سفت نباشید، بدید تجربه بزنتتون :))
جدا از این احساس شخصی، هر حوزه شرایط کاری خودش رو داره. کار در بخش مدیریت رخداد یا مانیتورینگ SOC میتونه استرس زا باشه، کار به عنوان متخصص امنیت شبکه و زیرساخت، میتونه بهتون فرصت خلاقیت به خرج دادن در طراحی زیرساخت بده، و نفوذ، میتونه بهتون حس خوب پیروزی و قدرت بعد از کشف هر آسیب پذیری رو بده، به خاطر همینه که میگم تحقیق کنید و تجربه کنید. نگران نباشید این شاخه ها و حوزه ها خیلی میتونن به هم نزدیک باشن و همیشه فرصت اسباب کشی دارید! البته خیلی از دوستان من در این حوزه که ده سال پیش الگوی من در فروم های هک و امنیت اون زمان بودن، امروز حتی در حوزه IT هم کار نمیکنن :)))
بذارید صادقانه و بی پرده بگم. این علمی که اینجا من با طنز ازش صحبت میکنم، به طور جدی یک سلاح هست. دولت های مختلف در جهان دارن تبدیلش میکنن به سلاح و یک صحنه جدید برای جنگ با هم، و شمایی که این علم رو کسب میکنید، سرباز ارزشمندی هستید. اما یادتون نره، این علم شوخی نداره، دنیای ما عمیقا و به طور غیر قابل بازگشت به علوم کامپیوتر گره خوره. یادتونه گفتم تجربه کنید؟ مراقب بعضی تجربه ها باشید. گاهی یک نفوذ غیرقانونی، گاهی یک همکاری با یک نهاد، کل آینده شما رو برای همیشه تحت تاثیر قرار میده، شما که دوست ندارید تا آخر عمر نتونید از ایران خارج شید؟ :)))
من در جایگاهی نیستم که به شما بگم چکار کنید و چکار نکنید، اما میگم با چشم باز انتخاب کنید و عواقب اعمالتون رو بدونید...
آخر اون رویدادی که اول پست گفتم، یک جمله گفتم که برام تداعی گر خیلی خاطرات بود. "من امروز چیز هایی رو گفتم که آرزو میکردم ای کاش زمانی که خودم در حال یادگیری بودم، یکی بهم میگفت." خیلی از شاخه ها و موارد جذاب علم هک و امنیت رو نتونستم بهش بپردازم، مثل رمزنگاری و فارنزیک و جرم نگاری، اما هدفم از این پست این بود که یک دید کلی به شما بدم برای اینکه مسیرتون رو تنظیم کنید و با دید بهتری جلو برید. طبعا کم و کاستی و اشتباه داشت، اما هیچ منبعی کامل نیست، شمایید که منبع کامل رو با کنار هم قرار دادن منابع کوچیک تر میسازید. امیدوارم براتون مفید بوده باشه، موفق باشید ;)
لینک اسلاید های رویداد:
https://www.slideshare.net/MohsenTahmasebi/introduction-to-cybersecurity-252119435