اجرای Nuclei داخل Bitbucket CI/CD Pipeline به منظور اسکن وب اپلیکیشن های لایو

اجرای Nuclei داخل Bitbucket CI/CD Pipeline به منظور اسکن وب اپلیکیشن های لایو

امنیت یک موضوع مهم برای شرکت های بزرگ و کوچک محسوب می شود. همین مسئله موجب تکامل یافتن DevOps به DevSecOps شده که امنیت را نیز در سطح داخلی ادغام می نماید. اجرای امنیت داخل چرخۀ DevOps و اطمینان از تبدیل آن به DevSecOps از اهمیت بسیاری برخوردار است. این رویکرد، موضوع امنیت را در همان فاز ابتدایی مطرح کرده و در همان مراحل اولیه می تواند در کاهش و جلوگیری از چندین پیکربندی اشتباه بسیار موثر باشد.

در این مقاله، نحوۀ استفاده از Nuclei را به عنوان یک ابزار متن باز قدرتمند برای اسکن وب اپلیکیشن ها، داخل پایپلاین Bitbucket CI/CD شما مورد بررسی قرار خواهیم داد.

Bitbucket CI/CD چیست؟

Bitbucket یک سرویس میزبانی ریپازیتوری Git مبتنی بر وب است که در درجۀ اول همانند GitHub و GitLab برای مدیریت سورس کد (SCM) و کنترل ورژن استفاده می شود. این سرویس در زمینۀ همکاری در کدنویسی و ردیابی تغییرات به دولوپرها کمک کرده و مدیریت و نگهداری پایگاه های کد را آسان تر می نماید. Bitbucket از سیستم های کنترل ورژن Mercurial و Git پشتیبانی کرده و قابلیت هایی نظیر درخواست های pull، مرور کد و ادغام و تحویل مداوم (CI/CD) را ارائه می نماید.

پایپ لاین های Bitbucket از فایلی تحت عنوان bitbucket-pipelines.yml برای تعریف پایپ لاین CI/CD استفاده می کنند. این فایل از یک سری جاب ها و مراحل تشکیل شده است که با ترتیبی مشخص اجرا می گردند. هر جاب، تسکی خاص را تعریف می کند، برای مثال: ساخت یک اپلیکیشن، اجرای تست ها یا استقرار کد در یک محیط تولید.

فایل bitbucket-pipelines.yml با فرمت YAML نوشته شده و در مسیر روت ریپازیتوری پروژه قرار دارد. این فایل حاوی اطلاعاتی دربارۀ محیط و ابزارهای موردنیاز برای ایجاد، تست و استقرار پروژه است. همچنین فایل مذکور مراحلی را که می بایست در پایپ لاین به منظور ایجاد، تست و استقرار اپلیکیشن طی شود را نیز تعریف می نماید.

داخل پایپ لاین های Bitbucket، هنگامی که تغییراتی داخل ریپازیتوری اعمال شود، فایل bitbucket-pipelines.yml به طور خودکار شناسایی و اجرا می گردد. این مسئله امکان تست خودکار و استقرار تغییرات کد را فراهم کرده، روند توسعه را آسان تر نموده و این اطمینان را ایجاد می کند که هر گونه مشکل در همان مراحل اولیه شناسایی گردد.

Nuclei یک اسکنر آسیب پذیری سریع و قابل سفارشی سازی

Nuclei یک ابزار متن باز برای جستجوی آسیب پذیری با کمک قالب های از پیش تعریف شده به زبان YAML است. این ابزار امکان جستجوی هر نوع آسیب پذیری از قبیل cross-site scripting (XSS)، SQL injection و اجرای کد از راه دور را فراهم می نماید. Nuclei سریع و کارآمد بوده و ابزاری قدرتمند برای شناسایی آسیب پذیری های احتمالی اپلیکیشن محسوب می گردد.

می توان این ابزار را طوری تنظیم کرد که در یک محیط شبکۀ داخلی برای اپلیکیشن های مستقر شدۀ عمومی و محلی اجرا گردد.

قدرت Nuclei

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

حال به بحث اصلی برمی گردیم و نحوۀ ادغام Nuclei در پایپ لاین CI/CD را مورد بررسی قرار می دهیم.

ادغام Nuclei در پایپ لاین Bitbucket CI/CD

ادغام قابلیت های اسکن Nuclei داخل پایپ لاین CI/CDتان نسبتاً آسان است. ما یک ریپازیتوری خصوصی در Bitbucket ایجاد کرده و آن را به عنوان میزبانی کنندۀ کد برای یک اپلیکیشن نظیر https://harshbothra.tech در نظر می گیریم.

مراحل زیر را برای تنظیم یک پایپ لاین CI/CD در Bitbucket دنبال کرده و یک جریان کاری برای راه اندازی اسکن Nuclei بر روی https://harshbothra.tech به ازای هر تغییر در کد اجرا نمایید.

  1. به وب اپلیکیشن Bitbucket در آدرس https://bitbucket.org/ مراجعه کرده و وارد حساب کاربری خود شوید.
  2. بر روی دکمۀ «Create» کلیک کرده و گزینۀ «Repository» را انتخاب نمایید.

  1. حال بر روی بخش «Pipelines» کلیک کرده و سپس گزینۀ « Create your first pipeline» را انتخاب نمایید.

Bitbucket CI/CD Pipeline

  1. گزینۀ «Starter Pipeline» را انتخاب نمایید.

  1. حال، کد زیر را در فایل bitbucket-pipelines.yml اضافه کنید:

توضیحات کد: این کد ابتدا Nuclei را با استفاده از زبان برنامه نویسی go نصب کرده و سپس اسکن Nuclei را بر روی https://harshbothra.tech اجرا می نماید. علاوه بر این، با استفاده از فلگ -o در ابزار Nuclei، فایلی به نام scan_output.txt ایجاد می گردد که در انتها نتیجۀ اسکن را نمایش خواهد داد.

  1. در کد فوق، پارامتر -u را به URL اپلیکیشن خود تغییر دهید. امکان استفاده از چندین URL نیز در این بخش میسر است. می توانید از دستورات مخصوص Nuclei نیز استفاده کنید، چرا که نحوۀ کار آن نیز مشابه با حالتی است که Nuclei را در خط فرمان اجرا می کنید. برای مشاهدۀ راهنمای مفصل تر در خصوص Nuclei به این آدرس مراجعه نمایید: https://github.com/projectdiscovery/nuclei
  2. حال، کد خود را ذخیره کنید تا شروع اجرای پایپ لاین را مشاهده نمایید. به سادگی بر روی Pipeline ها کلیک کرده و پایپ لاین در حال اجرای خود را به منظور مشاهدۀ نتیجه انتخاب نمایید.

آموزش اجرای Nuclei در Bitbucket CI/CD Pipeline

به این ترتیب با استفاده از یک پایپ لاین Bitbucket CI/CD، می توانید Nuclei را در هر code push بر روی وب اپلیکیشن خود اجرا نمایید.

اکنون بیایید یه گام جلوتر رفته و ببینیم چگونه می توان با استفاده از Bitbucket CI/CD pipeline، ابزار Nuclei را برای تست رگراسیون استفاده نمود.

اجرای تست رگرسیون با قالب های سفارشی Nuclei

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

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

روند نوشتن قالب برای Nuclei، ساده و کاربرپسند است. Nuclei راهنمای جامعی در وب سایت خود فراهم نموده که کاربران را در روند ایجاد قالب همراهی می نماید. برای دسترسی به این قالب به این آدرس مراجعه نمایید: https://nuclei.projectdiscovery.io/templating-guide/

بیایید نگاه عمیق تری به این مسئله بندازیم که چگونه می توان با بهره گیری از قالب های سفارشی در CI/CD pipeline، تست رگرسیون انجام داد. با وارد کردن اسکن قالب سفارشی در جریان کاری خود، می توانید به سادگی آسیب پذیری های شناخته شده را جستجو کرده و اطمینان حاصل کنید که پس از ایجاد هر گونه تغییر در کد، این آسیب پذیری ها نیز به درستی برطرف شده اند.

برای پیاده سازی این قابلیت، به سادگی دستورالعمل های زیر را جایگزین کد موجود در فایل جریان کاری خود نمایید:

همچنین می توانید به جای فلگ -t از فلگ -tu استفاده کنید که قالب ها را از URLای دریافت می نماید که در صورت استفاده از CI/CD pipeline، روند کار را ساده تر می نماید.

استفاده از نتایج اسکن Nuclei برای گزارش دهی خودکار مشکلات به ردیاب مشکل Jira

پس از این که Nuclei اسکن خود را به پایان رساند، گزارش دهی مشکلات شناسایی شده و اطلاع رسانی آن به افراد مرتبط از اهمیت بالایی برخوردار است. در این راستا، استفاده از ابزاری نظیر ردیاب مشکلات Jira به همراه Bitbucket، برای ایجاد و ردیابی مشکلات می تواند بسیار مفید واقع شود.

در ابتدای کار، لازم است یک فایل پیکربندی گزارش ایجاد نماییم تا Nuclei را برای گزارش دهی خودکار مشکلات آماده نماییم:

در فایل report.yaml فوق، مقادیر url، account-id، email token و  project-name را به مقادیر موردنظر خود تغییر دهید. در ادامه، این فایل (report.yaml) را به یک رشتۀ base64 تبدیل خواهیم کرد تا بتوانیم آن را به عنوان متغیری تنظیم کنیم که به سادگی در CI/CD pipeline قابل فراخوانی باشد.

مرحله یک: تبدیل فایل report.yaml به base64

دستور لازم برای اجرا:

 cat report.yaml | base64

در ادامه، ما با استفاده از رشتۀ base64 فوق، یک متغیر ریپازیتوری Bitbucket راه اندازی خواهیم کرد. برای مشاهدۀ مستندات مربوط به راه اندازی یک متغیر ریپازیتوری به این آدرس مراجعه نمایید: https://support.atlassian.com/bitbucket-cloud/docs/variables-and-secrets/

مرحله دو: راه اندازی متغیر ریپازیتوری Bitbucket

  1. به مسیر Repository > Repository settings مراجعه کرده و زیر بخش pipelines، گزینۀ «Repository variables» را انتخاب نمایید.

  1. نام و مقدار متغیر خود را اضافه کرده و با کلیک بر روی گزینۀ «Add» یک متغیر را با موفقیت راه اندازی نمایید.

حال ما تمامی مراحل پیش نیاز را انجام داده ایم. در مرحلۀ بعد می خواهیم دوباره فایل پیکربندی CI/CD خود را به منظور انجام گزارش دهی خودکار مشکلات ایجاد نماییم.

در فایل جریان کاری فوق، کد موجود با را کد زیر جایگزین نمایید:

توضیح کد: در کد فوق، اسکریپت مربوطه، متغیر CI/CD را خوانده و فایل report.yaml را دوباره ایجاد خواهد کرد تا در ادامه با استفاده از پارامتر -rc (report config) به ابزار Nuclei داده شود. بقیۀ اسکریپت مشابه با همان چیزی است که قبلاً نیز از آن استفاده کرده ایم، با این تفاوت که اکنون اندکی قدرتمندتر شده و ایجاد مورد بر روی Jira را به صورت خودکار انجام می دهد.

حال تغییرات جدید را اعمال کرده و به این ترتیب خواهید دید که یک روند جریان کاری جدید آغاز شده و در انتها، مشکلات موجود را گزارش خواهد نمود. مشکلات گزارش شده در تب Issues پروژۀ شما قابل مشاهده خواهد بود.

نتیجه گیری:

Nuclei یک منبع ارزشمند برای هر کسی است که می خواهد از امنیت و پایداری وب اپلیکیشن خود اطمینان حاصل نماید. Nuclei نه تنها ابزاری قدرتمند برای شناسایی آسیب پذیری ها محسوب می شود، بلکه به صورت متن باز بوده و ادغام آن با Bitbucket CI/CD pipeline کار ساده ای است. نکتۀ حائز اهمیت این است که به محض شناسایی موارد جدید با استفاده از Nuclei، می بایست به اشخاص مربوطه اطلاع دهید تا نسبت به رفع این موارد اقدام نمایند. این امر در محافظت از وب اپلیکیشن ها و اطلاعات حساس آن ها بسیار موثر خواهد بود. شکار آسیب پذیری خوبی را برایتان آرزومندیم 🙂

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

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