واحد 7 / 11

بررسی کد امن و تحلیل استاتیک: یافتن آسیب‌پذیری‌ها با هوش مصنوعی

سود:

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

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

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

مراحل بررسی کد

  1. دامنه و زمینه را ارائه دهید. کدوم زبان، کدوم فریم ورک، این کد از کجا ورودی میگیره، کجا خروجی میده، در کدوم لایه کار میکنه؟ بررسی کد بدون زمینه، نتایج مثبت کاذب ایجاد می کند.
  2. اسکن الگوهای خطرناک کلاس های آسیب پذیری شناخته شده هوش مصنوعی (مانند OWASP Top 10) را جستجو کنید: تزریق، احراز هویت، افشای داده های حساس، کنترل دسترسی.
  3. هر یافته را توجیه کنید. برای هر پرچم: کدام خط، کدام کلاس آسیب پذیری، چگونه می توان از آن سوء استفاده کرد، شواهد چیست. یک یافته غیر موجه جدی گرفته نمی شود.
  4. مثبت کاذب را حذف کنید. آیا ورودی واقعاً پاک می شود، آیا آن مسیر واقعاً قابل دسترسی است - با زمینه بررسی کنید.
  5. رفع مشکل را تأیید کنید. تأیید کنید که وصله توصیه شده توسط هوش مصنوعی در واقع آسیب‌پذیری را می‌بندد، آسیب‌پذیری/اشکال جدیدی را معرفی نمی‌کند و آزمایش را پشت سر گذاشته است.
  6. تایید انسانی توسعه‌دهنده + کارشناس امنیتی یافته‌ها را بررسی و رفع می‌کند. به این ترتیب وارد مخزن کد می شود.

شرایط: SAST (تست امنیتی برنامه استاتیک - تست امنیتی استاتیک که کد منبع را بدون اجرای آن تجزیه و تحلیل می‌کند). DAST (Dynamic - تست پویا که برنامه در حال اجرا را به صورت خارجی آزمایش می کند). OWASP Top 10 لیست استاندارد رایج ترین آسیب پذیری های برنامه های وب است. Injection یک آسیب پذیری است که با تفسیر ورودی کاربر به عنوان یک فرمان/پرس و جو (مثلاً تزریق SQL) ایجاد می شود. کوئری پارامتری روش صحیحی است که با جداسازی ورودی از کد از تزریق جلوگیری می کند.

جدول طبقات آسیب پذیری رایج

کلاس آسیب پذیری

علامت (در کد)

راه حل درست

تله هوش مصنوعی

تزریق SQL

پیوستن ورودی به پرس و جو

پرس و جو پارامتری شده

می تواند بهداشت را نادیده بگیرد

رمز سخت

رمز عبور / کلید در کد

گاوصندوق مخفی (طاق)، env

مثبت کاذب (نمونه/آزمون)

احراز هویت ضعیف

کنترل از دست رفته/نادرست

کنترل قدرتمند و متمرکز

زمینه را از دست می دهد

کنترل دسترسی معیوب

بدون بررسی مجوز

مجوز سمت سرور

جریان پیچیده را درک نمی کند

افشای داده های حساس

ذخیره سازی/ ثبت نام بدون رمز عبور

رمزگذاری، پوشش

نمی تواند انتقادپذیری را بشناسد

سریال سازی ناامن

داده‌های غیرقابل اعتماد را سریال‌زدایی کنید

تجزیه ایمن

الگوی کمیاب را از دست می دهد

سه کیف کوچک

مورد 1 - گرفتن تزریق واقعی. یک توسعه دهنده دارای هوش مصنوعی است که یک تابع دسترسی به داده را بررسی می کند. هوش مصنوعی خطی را مشخص می کند که در آن مقدار userId از کاربر مستقیماً به متن SQL الحاق می شود و می گوید "این تزریق کلاسیک SQL است، آن را به یک پرس و جوی پارامتری تبدیل کنید"؛ تصحیح نمونه را ارائه می دهد. توسعه‌دهنده تأیید می‌کند که ورودی در جای دیگری پاکسازی نشده است، تأیید می‌کند که یک آسیب‌پذیری واقعی است، کوئری پارامتری پیشنهادی را پیاده‌سازی می‌کند و یک آزمایش می‌نویسد. هوش مصنوعی این آسیب‌پذیری را برجسته کرد. تست تایید و تصحیح از طرف توسعه دهنده انجام شد.

مورد 2 - راز ثابت مثبت کاذب. هوش مصنوعی کلمه عبور = "test1234" را در یک فایل می بیند و می گوید "critical: hardcoded password". توسعه‌دهنده زمینه را بررسی می‌کند: این یک فایل تست واحد است، یک داده آزمایش ساختگی است که در تولید منتشر نشده و به یک سیستم واقعی منتقل نشده است. یافته مثبت کاذب است. توسعه دهنده این را مستند می کند اما اقدامی نمی کند زیرا یک راز واقعی نیست. درس: علامت "راز سخت" هوش مصنوعی باید توسط زمینه حذف شود. هر رشته ای راز نیست.

مورد 3 - رفع آسیب پذیری جدید. هوش مصنوعی اصلاحی برای آسیب‌پذیری XSS (اسکریپت بین سایتی) پیشنهاد می‌کند. اما کدی که او پیشنهاد می‌کند، ورودی را در مکان اشتباه پاک می‌کند و از کدگذاری خروجی در ناحیه دیگر صرف‌نظر می‌کند. در نتیجه شکاف به طور کامل بسته نمی شود. کارشناس امنیتی رفع مشکل را بررسی می‌کند، متوجه کدگذاری گمشده می‌شود و آن را در لایه درست رفع می‌کند. درس: وصله ای که هوش مصنوعی توصیه می کند به طور خودکار ایمن نیست. هر اصلاحی بررسی و آزمایش می شود.

اعلان ضعیف / اعلان قوی

اعلان ضعیف:

آیا در این کد خللی وجود دارد، آن را برطرف کنید: [code]

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

اعلان قدرتمند:

نقش شما: دستیار که چشم دوم توسعه دهنده در بررسی کد امن است. تصمیم گیری. رفع مستقیم اعمال شده را در نظر بگیرید. کد: [زبان/چارچوب را مشخص کنید]. زمینه: این تابع [منبع ورودی: به عنوان مثال. [درخواست HTTP خارجی] را دریافت می کند، در [مقصد خروجی] می نویسد. وظیفه شما: (1) آسیب‌پذیری‌های احتمالی را با کلاس OWASP علامت‌گذاری کنید، شماره خط + چرا خطرناک است + نحوه بهره‌برداری + شواهد را برای هر کدام، (2) حداقل 1 سناریوی مثبت کاذب برای هر یافته بنویسید (مثلاً اگر ورودی در لایه دیگری پاک‌سازی شود)، (3) راه حلی پیشنهاد کنید اما با علامت «[بازبینی + نوشتن آزمایش]»؛ همچنین ارزیابی کنید که آیا این اصلاح آسیب‌پذیری/اشکال‌های جدیدی را معرفی می‌کند یا خیر. افزودن یک آسیب‌پذیری جعلی.[code]

اعلان قوی زمینه را می دهد، کلاس OWASP و شواهد را می خواهد، مثبت کاذب و خطرات اصلاح را زیر سوال می برد، بازبینی انسانی را وادار می کند.

الگوهای درخواستی قابل کپی

الگوی اسکن آسیب پذیری کد [زبان/چارچوب] را برای OWASP Top 10 بررسی کنید. برای هر یافته احتمالی: شماره خط، کلاس آسیب پذیری، چرایی مخاطره آمیز بودن، بهره برداری نمونه، قدرت شواهد (محتمل/محتمل/ضعیف). زمینه: ورودی [منبع]، خروجی [هدف]. افزودن یافته های ساختگی؛ اگر مطمئن نیستید، «[باید تأیید شود]» را تایپ کنید. کد: [چسباندن]

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

اصلاح الگوی ارزیابی پیشنهاد یک اصلاح برای آسیب پذیری زیر. سپس اصلاح خود را نقد کنید: (1) آیا واقعاً آسیب‌پذیری را می‌بندد، (2) آیا آسیب‌پذیری/اشکال جدیدی را معرفی می‌کند، (3) چه آزمایشی را باید بنویسم (مورد مثبت و منفی)، (4) تأثیر عملکرد/عملکرد. اصلاح را بررسی و آزمایش خواهم کرد. آسیب پذیری + کد: [paste]

الگوی آموزش الگوی ایمن برای کلاس آسیب پذیری [به عنوان مثال. تزریق SQL] به طور نسبی الگوی تایپ ایمن و الگوهای اشتباه رایج را در این زبان/چارچوب نشان می‌دهد. قانون کلی + مثال کد بزنید. اما من می خواهم قبل از پیاده سازی آن در کد من، زمینه را بپرسید. زبان/چارچوب: [نوشتن]

اشتباهات رایج

  • بررسی بدون زمینه بدون زبان، چارچوب، و زمینه ورودی/خروجی، هوش مصنوعی هم یافته‌های واقعی و هم یافته‌های جعلی را اشتباه می‌گیرد. حتما زمینه را بیان کنید.
  • اشتباه گرفتن هر نشانه با ضعف واقعی هوش مصنوعی نتایج مثبت کاذب تولید می کند (داده های تست، ورودی در لایه دیگری پاک می شود). هر یافته را با زمینه الک کنید.
  • اعمال کورکورانه تصحیح هوش مصنوعی. پچ پیشنهادی ممکن است آسیب‌پذیری‌ها/اشکال‌های جدیدی را معرفی کند. بررسی و نوشتن تست ها
  • اعتماد به منفی کاذب حتی اگر هوش مصنوعی می‌گوید «بدون آسیب‌پذیری»، خودتان مسیرهای حیاتی را بررسی کنید. اسکن استاتیک هر آسیب پذیری را شناسایی نمی کند.
  • دادن کد/راز به ابزار خارجی. کد خصوصی و اسرار واقعی (کلید، رمز عبور) دارایی معنوی و آسیب پذیری هستند. ناشناس کنید یا از ابزارهای مجزای شرکتی استفاده کنید.
نکته: هنگام داشتن کد بررسی هوش مصنوعی، کارآمدترین فیلتر این است که برای هر یافته، «قوی شواهد» (محتمل/محتمل/ضعیف) را بخواهید. بیشتر یافته هایی که با علامت "ضعیف" مشخص شده اند، مثبت کاذب هستند. شما انرژی خود را به افراد «مطمئن» اختصاص می دهید.
احتیاط: اصلاحات امنیتی پیشنهادی هوش مصنوعی نباید بدون آزمایش وارد انبار شود. یک "اصلاح" نادرست می تواند آسیب پذیری را باز بگذارد و منجر به یک خطای عملکردی در تولید شود. هر پچ از گیت بررسی و تست عبور می کند.

به طور خلاصه

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

وظیفه کاربردی

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

چک لیست

  • [ ] قبل از بررسی کد، زبان، چارچوب و زمینه ورودی/خروجی را ارائه دادم.
  • [ ] من شماره خط، کلاس آسیب پذیری، مسیر بهره برداری و شواهد را برای هر یافته درخواست کردم.
  • [ ] من هر یافته را برای موارد مثبت کاذب با زمینه بررسی کردم.
  • [ ] من کورکورانه تصحیح هوش مصنوعی را اعمال نکردم. بررسی کردم و تست نوشتم.
  • [ ] با وجود خروجی "بدون آسیب پذیری"، من خودم مسیرهای بحرانی را بررسی کردم.
  • [ ] من کد/اسرار را ناشناس کردم یا از ابزارهای جدا شده شرکتی استفاده کردم.
  • [ ] من کشف و رفع آن را از طریق برنامه‌نویس + تأیید امنیتی انجام داده‌ام.