خانه » تحلیل و مقایسه برخی ابزارهای تحلیل ایستای امنیت کد (SAST) برای زبان های C++/C و ارائه چارچوبی برای رتبه‌بندی آن‌ها

تحلیل و مقایسه برخی ابزارهای تحلیل ایستای امنیت کد (SAST) برای زبان های C++/C و ارائه چارچوبی برای رتبه‌بندی آن‌ها

Analysis and Comparison of Some Static Application Security Testing Tools (SAST)

توسط Vulnerlab
36 بازدید
vulnerlab - والنرلب- مقایسه ابزارهای SAST - ابزار تحلیل ایستا کد - بهترین ابزار SAST - تحلیل امنیت کد C و C++ - بررسی ابزارهای امنیت - سورس کد

تحلیل ایستای امنیتی کد منبع (Static Application Security Testing – SAST) یکی از رویکردهای بنیادی برای تضمین امنیت نرم‌افزار در مراحل اولیه چرخه حیات توسعه محسوب می‌شود. با افزایش اندازه و پیچیدگی سامانه‌های نرم‌افزاری، به‌ویژه در معماری‌های توزیع‌شده و مبتنی بر میکروسرویس‌ها، سطح حمله گسترش یافته و شناسایی آسیب‌پذیری‌ها در سطح کد با دشواری بیشتری همراه شده است.

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

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

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

۱. مقدمه

با رشد مداوم پیچیدگی سامانه‌های نرم‌افزاری و گسترش نقش نرم‌افزار در زیرساخت‌های حیاتی، امنیت کد منبع به یکی از مسائل بنیادین در صنعت نرم‌افزار تبدیل شده است. در دهه اخیر، ماهیت حملات نرم‌افزاری از سوءاستفاده‌های ساده به سمت اکسپلویت‌های پیچیده مبتنی بر نقص‌های منطقی، خطاهای مدیریت حافظه، تطبیق‌های نادرست داده و آسیب‌پذیری‌های زنجیره تأمین تحول یافته است. در چنین شرایطی، شناسایی آسیب‌پذیری‌ها در مراحل ابتدایی توسعه اهمیت دوچندانی یافته، چرا که هزینه رفع یک آسیب‌پذیری امنیتی در مرحله تولید (Production) تا حدود ۳۰ برابر بیشتر از مرحله توسعه برآورد می‌شود.

تحلیل ایستای امنیتی کد (Static Application Security Testing – SAST) به‌عنوان یکی از لایه‌های اولیه امنیت نرم‌افزار، نقشی کلیدی در پیشگیری از نفوذ، کاهش سطح حمله و جلوگیری از وقوع رخدادهای امنیتی ایفا می‌کند. ابزارهای تحلیل ایستا (SAST) بدون نیاز به اجرای برنامه و صرفاً از طریق تحلیل کد منبع، باینری یا بایت‌کد، قادر به شناسایی الگوهای ناامن، جریان‌های داده پرخطر، رفتارهای تعریف‌نشده و نقص‌های منطقی هستند.

سازمان NIST در قالب برنامه‌های SATE و فهرست رسمی «Source Code Security Analyzers»، مجموعه‌ای از ابزارهای معتبر تحلیل ایستا را معرفی کرده است. انتخاب ابزارها از این فهرست، به دلیل ارزیابی علمی، قابلیت آزمون‌پذیری و اعتبار بین‌المللی آن، برای این پژوهش ضروری بوده است.

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

مشارکت‌های پژوهش:

این مقاله دارای سه مشارکت اصلی است:

  1. ارائه چارچوب امتیازدهی چندمعیاره برای ابزارهای تحلیل ایستا (SAST)
  2. تحلیل معماری ابزارهای منتخب NIST برای C++/C
  3. ارائه مقایسه کاربردی برای انتخاب ابزار در سناریوهای صنعتی

۲. مفاهیم پایه و مبانی نظری

   ۲.۱ تحلیل ایستا در برابر تحلیل پویا

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

   ۲.۲ روش‌های تحلیل ایستا

ابزارهای SAST معمولاً از ترکیبی از روش‌های زیر استفاده می‌کنند:

  • تحلیل مبتنی بر الگو (Rule-Based Analysis)
  • تحلیل جریان داده (Data Flow Analysis)
  • تحلیل گراف کنترل (Control Flow Graph)
  • تحلیل آلودگی داده (Taint Analysis)
  • اجرای نمادین (Symbolic Execution)
  • اثبات صوری (Formal Verification)
  • تحلیل ترکیبی (Hybrid Analysis)

هر یک از این روش‌ها سطح متفاوتی از دقت و هزینه محاسباتی را ارائه می‌دهند.

      ۲.۲.۱ محدودیت‌ها:

  • احتمال ایجاد مثبت کاذب
  • نیاز به پیکربندی دقیق برای پروژه‌های بزرگ
  • دشواری تحلیل کدهای بسیار پویا (مانند Reflection)

تحلیل پویا نیز مشکلاتی دارد: نیاز به محیط اجرا، سناریوهای تست، و عدم پوشش تمامی مسیرهای اجرایی.

      ۲.۲.۲ انواع روش‌های تحلیل ایستا

ابزارهای تحلیل ایستا (Static Application Security Testing – SAST) از چند روش تحلیلی استفاده می‌کنند:

  1. Rule-Based Analysis: تحلیل مبتنی بر الگوهای از پیش تعریف‌ شده (Pattern / Signature)
  2. Data-Flow Analysis: تحلیل جریان (مسیر) داده بین ورودی تا خروجی تابع
  3. Control-Flow Graph Analysis: تحلیل ساختار کنترل برنامه
  4. Taint Analysis: ردیابی ورود داده‌های غیرمعتبر تا نقاط حساس
  5. Symbolic Execution: تحلیل مسیرهای اجرایی با استفاده از مقادیر نمادین
  6. Formal Verification: استفاده از مدل‌های ریاضی و اثبات‌پذیر برای یافتن رفتارهای تعریف ‌نشده
  7. Hybrid Analysis: ترکیب چند روش برای افزایش دقت

۳. روش‌شناسی پژوهش (Methodology)

هدف این پژوهش، ارزیابی دقیق و تطبیقی ابزارهای تحلیل ایستای امنیت کد منبع برای زبان‌های C++/C است؛ زبان‌هایی که به‌دلیل مدیریت دستی حافظه و سطح بالای دسترسی به منابع سیستمی، مستعد بروز آسیب‌پذیری‌های پیچیده‌ای نظیر Buffer Overflow، Use-After-Free، Double Free، Memory Corruption و Integer Overflow  می‌باشند. از این‌رو، بهره‌گیری از ابزارهای حرفه‌ای تحلیل ایستای امنیتی (SAST) برای این دو زبان از اهمیت ویژه‌ای برخوردار است.

در این پژوهش، تنها ابزارهایی مورد بررسی قرار گرفته‌اند که در فهرست رسمی NIST معرفی شده‌اند و قابلیت تحلیل کدهای C++/C را دارا هستند، یا بخشی از معماری تحلیلی آن‌ها به‌صورت تخصصی برای شناسایی آسیب‌پذیری‌ها و تحلیل امنیتی این زبان‌ها طراحی شده است.

   ۳.۱ معیار‌های انتخاب ابزار

ابزارهای مورد بررسی در این پژوهش بر اساس مجموعه‌ای از معیارهای فنی، علمی و کاربردی انتخاب شده‌اند. مهم‌ترین معیارهای انتخاب عبارت‌اند از:

  • حضور در فهرست رسمی تحلیلگرهای امنیتی معرفی‌ شده توسط NIST
  • پشتیبانی کامل، یا حداقل برخورداری از سطح قابل قبول پشتیبانی از زبان‌های برنامه‌نویسی C و ++C
  • سابقه استفاده عملی در صنعت نرم‌افزار، زیرساخت‌های حساس، یا پروژه‌های امنیت‌محور
  • توانایی شناسایی آسیب‌پذیری‌های مرتبط با مدیریت حافظه، رفتارهای تعریف‌ نشده (Undefined Behavior) و ضعف‌های امنیتی سطح پایین
  • قابلیت یکپارچه‌سازی و ادغام با ابزارهای کامپایل (Clang/LLVM، GCC)

بر این اساس، در مجموع ۱۱ ابزار معتبر که همگی در فهرست رسمی NIST ثبت شده‌اند، برای تحلیل و ارزیابی انتخاب شده‌اند.

   ۳.۲ معیارهای ارزیابی

به‌منظور ارزیابی دقیق ابزارهای تحلیل ایستای (SAST) امنیتی، مجموعه‌ای از معیارهای تخصصی متناسب با ویژگی‌ها و چالش‌های امنیتی زبان‌های C++/C تعریف شده است. یکی از مهم‌ترین شاخص‌های ارزیابی، میزان پوشش ابزار در شناسایی آسیب‌پذیری‌های رایج این دو زبان بر اساس استاندارد CWE است. مهم‌ترین دسته‌های مورد بررسی عبارت‌اند از:

۱. پوشش آسیب‌پذیری‌های رایج در C++/C :

  • سرریز بافر (Buffer Overflow) مطابق با CWE-119 و CWE-120
  • استفاده مجدد از حافظه پس از آزادسازی (Use-After-Free) مطابق با CWE-416
  • آزادسازی مضاعف حافظه (Double Free) مطابق با CWE-415
  • مقداردهی نامناسب متغیرها و یا استفاده از متغیرهای مقداردهی ‌نشده (Uninitialized Variables)
  • سرریز مثبت و منفی عدد صحیح (Integer Overflow / Underflow)
  • استفاده از اشاره‌گرهای نامعتبر (Invalid Pointers)
  • دسترسی خارج از محدوده (Out-of-Bounds Access)

این معیار نشان می‌دهد هر ابزار تا چه میزان در شناسایی ضعف‌های امنیتی سطح پایین و خطاهای مرتبط با مدیریت حافظه در برنامه‌های نوشته‌ شده با C++/C توانمند می‌باشند.

۲. روش تحلیل ابزار:

در زبان‌های C و ++C، روش تحلیل به‌ کاررفته در ابزارهای تحلیل ایستا، تفاوت‌های زیادی ایجاد می‌کنند. از این‌رو، ابزارهای مورد بررسی در این پژوهش بر اساس رویکردهای تحلیلی زیر ارزیابی شده‌اند:

  • تحلیل جریان داده (Data-Flow Analysis)
  • تحلیل جریان کنترل (Control-Flow Analysis)
  • تحلیل جریان داده‌های غیرقابل اعتماد (Taint Analysis)
  • اجرای نمادین (Symbolic Execution)
  • اعتبارسنجی صوری (Formal Verification – مختص رفتارهای تعریف ‌نشده)

ابزارهایی که از روش‌های عمیق مانند Symbolic Execution یا Formal Verification استفاده می‌کنند معمولاً دقت بیشتری در کشف نقص‌های حافظه دارند.

۳. دقت ابزار و نرخ مثبت/منفی کاذب:

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

  • نتایج آزمون‌های رسمی NIST در چارچوب برنامه SATE
  • مستندات فنی
  • تجربه عملی حاصل از استفاده و پیاده‌سازی ابزارها در پروژه‌های واقعی مبتنی بر C++/C

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

۴. قابلیت ادغام با زنجیره ابزارهای C++/C:

یکی از معیارهای کلیدی در ارزیابی ابزارهای تحلیل ایستای امنیتی برای زبان‌های C++/C، میزان سازگاری و قابلیت یکپارچه‌سازی آن‌ها با زنجیره توسعه و کامپایل این زبان‌ها است. از آنجا که پروژه‌های C++/C معمولاً از ساختارهای پیچیده Build و وابستگی‌های متعدد بهره می‌برند، توانایی ابزار در ادغام با اکوسیستم توسعه نقش مستقیمی در سهولت استقرار و دقت تحلیل دارد.

در این پژوهش، ابزارها بر اساس قابلیت‌های زیر مورد ارزیابی قرار گرفته‌اند:

  • سازگاری با Clang و LLVM
  • قابلیت تحلیل پروژه بر اساس فایل‌ دستورات کامپایل (Compile Commands)
  • امکان یکپارچه‌سازی با سیستم‌های Build نظیر CMake یا Makefile
  • قابلیت اجرا و خودکارسازی در خطوط استقرار و توسعه مستمر (CI/CD)
  • پشتیبانی از قالب‌های استاندارد خروجی (مانند SARIF – (Static Analysis Results Interchange Format

ابزارهایی که مستقیماً AST یا IR را از زنجیره LLVM دریافت می‌کنند معمولاً کارایی بالاتری برای تحلیل C++/C دارند.

۵. کیفیت و عمق گزارش‌دهی:

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

  • توضیح دقیق منشأ آسیب‌پذیری (Root Cause Analysis): توانایی ابزار در تشریح علت اصلی ایجاد نقص امنیتی و شرایطی که منجر به بروز آن شده است.
  • نمایش مسیر اجرای خطا (Execution Path): قابلیت ارائه مسیر منطقی یا جریان اجرایی که به وقوع آسیب‌پذیری منتهی شده است.
  • ارائه راهکار اصلاح و رفع آسیب پذیری (Fix Guidance): توانایی ارائه پیشنهادهای فنی، نمونه اصلاح کد یا توصیه‌های امنیتی برای رفع نقص شناسایی ‌شده.
  • ارزیابی شدت آسیب‌پذیری (Severity Assessment): قابلیت طبقه‌بندی و اولویت‌بندی آسیب‌پذیری‌ها بر اساس میزان ریسک، قابلیت سوءاستفاده و تأثیر بالقوه بر امنیت سامانه.

   ۳.۳ فرآیند امتیازدهی و رتبه‌بندی

به ‌منظور مقایسه نظام‌مند ابزارهای تحلیل ایستای امنیتی، در این پژوهش از یک مدل امتیازدهی پنج‌سطحی استفاده شده است. در این مدل، وزن معیارها براساس اهمیت آن‌ها برای تحلیل زبان C++/C تعیین شده است. امتیاز هر معیار در بازه ۱ تا ۵ اختصاص داده شده است؛ به‌گونه‌ای که امتیاز ۱ بیانگر عملکرد ضعیف و امتیاز ۵ نشان‌دهنده عملکرد بسیار مطلوب در آن معیار است.

 
 

 

 

معیار

وزن

پوشش نقص‌های C++/C

30٪

روش تحلیل

25٪

دقت و نرخ خطا

25٪

ادغام با ابزارهای کامپایل

10٪

کیفیت گزارش

10٪

 
 

 

 

ابزارهایی که از تکنیک‌های پیشرفته‌ای نظیر اجرای نمادین (Symbolic Execution) یا اعتبارسنجی صوری  (Formal Verification) استفاده می‌کنند (مانند TrustInSoft یا  Polyspace Code Prover) به ‌دلیل دقت بالاتر در شناسایی خطاهای مرتبط با حافظه، رفتارهای تعریف ‌نشده و نقص‌های منطقی پیچیده، در بخش دقت تحلیلی امتیاز بالاتری کسب کرده‌اند.

   ۳.۴ معماری کلی ابزارهای SAST برای C++/C

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

 
 

 

 

vulnerlab - والنرلب- مقایسه ابزارهای SAST - ابزار تحلیل ایستا کد - بهترین ابزار SAST - تحلیل امنیت کد C و C++ - بررسی ابزارهای امنیت - سورس کد

۴. تحلیل و بررسی ابزارهای تحلیل ایستای امنیت کد (ویژه C/++C)

در این بخش، ابزارهای منتخب به‌صورت فنی، ساختاریافته و قابل مقایسه مورد بررسی قرار می‌گیرند. تمرکز اصلی تحلیل بر توانمندی ابزارها در شناسایی آسیب‌پذیری‌های سطح پایین در زبان‌های C++/C است؛ به‌ ویژه خطاهای مرتبط با مدیریت حافظه و رفتارهای تعریف ‌نشده  (Undefined Behavior). برای هر ابزار، مجموعه‌ای از شاخص‌های کلیدی مورد ارزیابی قرار گرفته است، از جمله:

  • نوع تحلیل ایستا (Static Analysis Type)
  • معماری تحلیل (Analysis Architecture)
  • میزان پوشش آسیب‌پذیری‌های رایج در ++C / C
  • نقاط قوت فنی و قابلیت‌های متمایز
  • محدودیت‌ها و چالش‌های عملیاتی
  • جایگاه ابزار در رتبه‌بندی نهایی پژوهش

این ساختار امکان مقایسه منسجم و منصفانه میان ابزارها را فراهم کرده و زمینه را برای تحلیل دقیق‌تر عملکرد آن‌ها در سناریوهای واقعی توسعه و امنیت نرم‌افزار فراهم می‌سازد.

   ۴.۱ ابزار TrustInSoft Analyzer (۲۰۲۳):

TrustInSoft Analyzer یک ابزار تجاری پیشرفته برای تحلیل ایستای کدهای C و ++C است که بر پایه اعتبارسنجی صوری  (Formal Verification) و تفسیر انتزاعی (Abstract Interpretation) توسعه یافته است. این ابزار به‌ طور ویژه برای شناسایی رفتارهای تعریف ‌نشده در استانداردهای ++C / C طراحی شده و تمرکز اصلی آن بر تضمین صحت و ایمنی حافظه است، نه صرفاً تشخیص الگوهای آسیب‌پذیری سطح بالا.

      ۴.۱.۱ تحلیل عملکرد:

این ابزار قادر است تمامی مسیرهای اجرایی ممکن را به ‌صورت سیستماتیک بررسی کرده و رفتارهای تعریف‌ نشده را با دقت بالا شناسایی کند. چنین رویکردی موجب کاهش قابل توجه مثبت‌های کاذب (False Positives) شده و دقت تحلیل را در مقایسه با ابزارهای مبتنی بر الگو به‌ طور چشمگیری افزایش می‌دهد.

      ۴.۱.۲ روش تحلیل:

  • تحلیل ایستای صوری (Formal Static Analysis)
  • تفسیر انتزاعی (Abstract Interpretation)
  • اجرای نمادین محدود (Limited Symbolic Execution)
  • مدل‌سازی دقیق مطابق با استانداردهای C++/C

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

      ۴.۱.۳ پوشش آسیب‌پذیری‌های C++/C:

TrustInSoft Analyzer قادر است طیف گسترده‌ای از آسیب‌پذیری‌های مرتبط با زبان‌های C و ++C را شناسایی کند، از جمله:

  • سرریز بافر و دسترسی خارج از محدوده (Buffer Overflow / Out-of-Bounds Access)
  • استفاده مجدد از حافظه پس از آزادسازی (Use-After-Free)
  • آزادسازی مضاعف حافظه  (Double Free)
  • ارجاع به اشاره‌گر تهی  (Null Pointer Dereference)
  • سرریز مثبت و منفی اعداد صحیح  (Integer Overflow / Underflow)
  • دسترسی به حافظه مقداردهی‌نشده  (Uninitialized Memory Access)
  • تقسیم بر صفر (Division by Zero)
  • نقض رفتارهای تعریف ‌نشده در استانداردهای C/C++ (Undefined Behavior Violations)

این ابزار تمرکز بسیار قوی بر دسته‌بندی‌های مرتبط با ایمنی حافظه در چارچوب CWE دارد و همین ویژگی آن را به یکی از دقیق‌ترین ابزارها در حوزه تحلیل ایستای امنیتی برای C++/C تبدیل کرده است.

      ۴.۱.۴ معماری ابزار:

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

 
 

 

 

vulnerlab - والنرلب- مقایسه ابزارهای SAST - ابزار تحلیل ایستا کد - بهترین ابزار SAST - تحلیل امنیت کد C و C++ - بررسی ابزارهای امنیت - سورس کد

      ۴.۱.۵ نقاط قوت TrustInSoft Analyzer:

  • دقت بسیار بالا و نرخ پایین مثبت کاذب (False Positive): به‌دلیل استفاده از روش‌های صوری و مدل‌سازی دقیق رفتار برنامه، نتایج تحلیل از دقت بالایی برخوردار بوده و گزارش‌های غیرواقعی به حداقل می‌رسند.
  • مناسب برای سیستم‌های حیاتی  (Embedded، Automotive، Aerospace): این ابزار به‌طور خاص برای محیط‌هایی طراحی شده است که در آن‌ها صحت عملکرد نرم‌افزار و ایمنی حافظه اهمیت حیاتی دارد.
  • توانایی کشف نقص‌های فراتر از ابزارهای مبتنی بر قواعد Rule-based)): قادر است آسیب‌پذیری‌هایی را شناسایی کند که در رویکردهای الگو-محور یا قاعده‌محور قابل تشخیص نیستند، به‌ویژه در حوزه رفتارهای پیچیده و تعریف‌نشده.
  • پشتیبانی عمیق از استانداردهای ISO C++/C: انطباق کامل با استانداردهای رسمی زبان‌های C و ++C باعث می‌شود تحلیل‌ها مطابق با رفتار واقعی و استاندارد برنامه انجام شوند و نتایج از اعتبار بالایی برخوردار باشند.

      ۴.۱.۶ محدودیت‌ها TrustInSoft Analyzer:

  • هزینه بالای لایسنس: این ابزار به‌عنوان یک راهکار تجاری پیشرفته، دارای هزینه‌های لایسنس نسبتاً بالا است که ممکن است استفاده از آن را در برخی سازمان‌ها یا پروژه‌های کوچک محدود کند.
  • زمان تحلیل نسبتاً طولانی در پروژه‌های بزرگ: به ‌دلیل استفاده از روش‌های صوری و بررسی کامل فضای حالت برنامه، زمان تحلیل در پروژه‌های حجیم می‌تواند قابل توجه باشد.
  • نیاز به تنظیمات اولیه دقیق: برای دستیابی به نتایج بهینه، ابزار نیازمند پیکربندی و تنظیمات اولیه دقیق است که ممکن است فرآیند راه‌اندازی را پیچیده‌تر کند.
  • تمرکز محدود بر C و ++C : این ابزار به ‌طور تخصصی برای تحلیل زبان‌های C و ++C طراحی شده و از سایر زبان‌های برنامه‌نویسی پشتیبانی مستقیم و گسترده‌ای ارائه نمی‌دهد.

      ۴.۱.۷ جمع‌بندی و جایگاه ابزار TrustInSoft Analyzer:

TrustInSoft Analyzer در این پژوهش در رده بالا (Top‑Tier) قرار می‌گیرد و به‌ عنوان یکی از دقیق‌ترین ابزارهای تحلیل ایستای امنیتی برای کدهای C و ++C شناخته می‌شود، به ‌ویژه در پروژه‌هایی که صحت حافظه و انطباق کامل با استانداردهای زبان از اهمیت حیاتی برخوردار است.

   ۴.۲ ابزار Polyspace Code Prover (2023)

Polyspace Code Prover یکی از قدرتمندترین ابزارهای تجاری تحلیل ایستای کدهای C و ++C است که توسط MathWorks توسعه یافته و تمرکز اصلی آن بر اثبات ریاضی عدم وجود خطاهای زمان اجرا در کد است. این ابزار برخلاف بسیاری از ابزارهای تحلیل ایستای (SAST) که بر شناسایی احتمالی آسیب‌پذیری‌ها تکیه دارند، رویکردی مبتنی بر اثبات (Proof-Based Analysis) اتخاذ می‌کند و به‌جای گزارش احتمال وقوع خطا، تلاش می‌کند عدم وقوع خطا را اثبات کند.

      ۴.۲.۱ تحلیل:

این رویکرد موجب افزایش دقت و اطمینان تحلیل در پروژه‌های حیاتی از نظر ایمنی (Safety-Critical) مانند صنایع خودروسازی و هوافضا می‌شود، جایی که صحت عملکرد نرم‌افزار و عدم بروز خطاهای زمان اجرا از اهمیت بسیار بالایی برخوردار است.

      ۴.۲.۲ روش تحلیل:

  • اعتبارسنجی صوری  (Formal Verification)
  • تفسیر انتزاعی (Abstract Interpretation)
  • تحلیل نمادین بازه‌ای (Symbolic Range Analysis)

خروجی تحلیل در قالب یک طبقه‌بندی سه‌سطحی (Green/Red /Orange) ارائه می‌شود که به‌ترتیب نشان‌دهنده عدم وجود (Green)، وجود قطعی خطا (Red) و عدم قطعیت یا نیاز به بررسی بیشتر (Orange) است.

      ۴.۲.۳ پوشش آسیب‌پذیری‌های C++/C:

  • خطاهای زمان اجرا  (Runtime Errors)
  • سرریز بافر (Buffer Overflow)
  • سرریز پشته (Stack Overflow)
  • تقسیم بر صفر (Divide by Zero)
  • خطاهای ارجاع به اشاره‌گر  (Pointer Dereference Errors)
  • سرریز عددی (Numeric Overflow)
  • کد غیرقابل دسترس  (Unreachable Code)
  • کد مرده (Dead Code)

تمرکز اصلی Polyspace Code Prover بر ایمنی اجرای برنامه (Runtime Safety) و صحت محاسبات عددی (Numerical Correctness) است.

      ۴.۲.۴ معماری ابزار:

بر اساس دیاگرام ارائه ‌شده، معماری Polyspace Code Prover شامل پنج بلوک اصلی قابل تبیین است:

در ابتدا، کد C/C++ (C/C++ Code) به‌ عنوان ورودی سیستم وارد زنجیره تحلیل می‌شود. این کد پس از دریافت، توسط لایه پیش‌پردازش و فرانت‌اند Polyspace (Polyspace Frontend) پردازش شده و به نمایش میانی قابل تحلیل تبدیل می‌گردد.

در گام بعد، مدل اجرای انتزاعی (Abstract Execution Model) از برنامه تولید می‌شود که رفتارهای ممکن برنامه را بدون اجرای واقعی شبیه‌سازی می‌کند و مبنای تحلیل‌های بعدی قرار می‌گیرد.

سپس، این مدل وارد موتور اثبات صوری (Formal Proof Engine) می‌شود؛ جایی که با استفاده از روش‌های صوری و تحلیل ریاضی، تلاش می‌شود برای تمام مسیرهای اجرایی، اثبات عدم وقوع خطا یا شناسایی قطعی خطا انجام شود.

در نهایت، نتایج حاصل به بخش طبقه‌بندی خطا (Error Classification) منتقل می‌شود که خروجی تحلیل را در قالب وضعیت‌های مشخص (مانند Green / Orange / Red) دسته‌بندی می‌کند؛ این طبقه‌بندی نشان‌دهنده میزان قطعیت ایمنی یا وجود خطا در کد تحلیل‌شده است.

این ساختار خطی–تحلیلی باعث می‌شود ابزار بتواند از سطح کد منبع تا اثبات صوری خطا، یک زنجیره کامل از تحلیل ایمنی را برای برنامه‌های C++/C ارائه دهد.

مقایسه ابزارهای SAST - فازینگ - والنرلب - vulnerlab

      4.2.5 نقاط قوت Polyspace Code Prover:

  • اثبات رسمی عدم وجود خطا: این ابزار با بهره‌گیری از روش‌های صوری، قادر است در بسیاری از موارد وجود نداشتن خطاهای زمان اجرا را به‌صورت ریاضی اثبات کند.
  • نرخ بسیار پایین مثبت کاذب (False Positive): به‌دلیل رویکرد مبتنی بر اثبات به‌جای تخمین احتمالی، حجم گزارش‌های نادرست در این ابزار به حداقل می‌رسد.
  • مناسب برای پروژه‌های حیاتی از نظر ایمنی  (Safety-Critical): این ابزار به‌طور گسترده در حوزه‌هایی مانند خودروسازی، هوافضا و سیستم‌های صنعتی حساس مورد استفاده قرار می‌گیرد که در آن‌ها صحت عملکرد نرم‌افزار اهمیت حیاتی دارد.
  • یکپارچگی عالی با فرآیندهای صنعتی: قابلیت ادغام مناسب با زنجیره‌های توسعه و فرآیندهای مهندسی نرم‌افزار، به‌ویژه در محیط‌های صنعتی و استاندارد، از دیگر مزایای کلیدی این ابزار محسوب می‌شود.

      ۴.۲.۵ محدودیت‌های Polyspace Code Prover:

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

      ۴.۲.۶ جمع‌بندی و جایگاه ابزار Polyspace Code Prover:

Polyspace Code Prover در این پژوهش در رده بالا (Top‑Tier) قرار دارد و به‌ عنوان یکی از بهترین گزینه‌ها برای پروژه‌هایی شناخته می‌شود که نیازمند اثبات رسمی ایمنی کدهای C و C++ هستند، به‌ویژه در حوزه‌هایی که صحت عملکرد و عدم وجود خطاهای زمان اجرا اهمیت حیاتی دارد.

   ۴.۳ ابزار Polyspace Bug Finder (2023)

Polyspace Bug Finder نسخه سبک‌تر و سریع‌تر ابزار Polyspace است که برای شناسایی سریع خطاهای رایج و آسیب‌پذیری‌های امنیتی در کدهای C و C++ طراحی شده است. در واقع، Polyspace Bug Finder  یک ابزار تحلیل ایستا مبتنی بر موتور قواعد (Rule Engine) و الگوریتم‌های تطبیق الگو (Pattern Matching) محسوب می‌شود که برای انجام تحلیل‌های امنیتی سریع و شناسایی خطاهای متداول در مراحل اولیه توسعه مورد استفاده قرار می‌گیرد.

      ۴.۳.۱ روش تحلیل Polyspace Bug Finder

  • تحلیل مبتنی بر الگو  (Pattern-based Analysis): شناسایی الگوهای شناخته ‌شده از خطاها و آسیب‌پذیری‌های رایج در کدهای C/C++ از طریق مجموعه‌ای از قواعد از پیش تعریف ‌شده.
  • تحلیل جریان داده (Data Flow Analysis): بررسی نحوه انتشار و استفاده از داده‌ها در مسیرهای مختلف برنامه به‌منظور کشف رفتارهای ناامن و شرایط منجر به خطا.
  • تفسیر انتزاعی سبک  (Lightweight Abstract Interpretation): استفاده از نسخه سبک‌تری از تحلیل انتزاعی برای تخمین رفتار متغیرها و مسیرهای اجرایی، با هدف افزایش سرعت تحلیل در مقابل کاهش عمق صوری نسبت به ابزارهای کامل‌تر.

      ۴.۳.۲ پوشش آسیب‌پذیری‌ توسط ابزار Polyspace Bug Finder:

Polyspace Bug Finder قادر است طیف گسترده‌ای از خطاهای رایج و نقض‌های امنیتی در کدهای C و ++C را شناسایی کند، از جمله:

  • سرریز بافر (Buffer Overflow)
  • ارجاع به اشاره‌گر تهی (Null Pointer Dereference)
  • نشت حافظه (Memory Leak)
  • نقض قواعد کدنویسی امن و استانداردهای امنیتی مانند MISRA و CERT C

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

      ۴.۳.۴ معماری ابزار Polyspace Bug Finder:

بر اساس ساختار ارائه ‌شده، معماری Polyspace Bug Finder به گونه‌ای طراحی شده است که در آن تحلیل به‌ صورت تدریجی از سطح کد منبع تا شناسایی خطاهای امنیتی انجام می‌شود:

در ابتدا، کد C/C++ (C/C++ Code) به‌ عنوان ورودی سیستم وارد زنجیره تحلیل می‌شود. سپس این کد توسط فرانت‌اند Polyspace (Polyspace Frontend) پردازش و به نمایش داخلی قابل تحلیل تبدیل می‌گردد.

در مرحله بعد، تفسیر انتزاعی سبک (Lightweight Abstract Interpretation) بر روی مدل اولیه اعمال می‌شود تا وضعیت تقریبی متغیرها و مسیرهای اجرایی برنامه استخراج گردد. این مرحله، زمینه لازم برای تحلیل‌های بعدی را فراهم می‌کند.

سپس، تحلیل جریان داده (Data Flow Analysis) انجام می‌شود که در آن نحوه انتشار داده‌ها در طول برنامه بررسی شده و نقاط بالقوه ایجاد خطا یا رفتار ناامن شناسایی می‌شوند.

در نهایت، موتور تشخیص خطا مبتنی بر الگو (Pattern-Based Bug Detection) با استفاده از قواعد از پیش تعریف ‌شده، الگوهای شناخته‌ شده خطاها و آسیب‌پذیری‌ها را شناسایی کرده و گزارش نهایی را تولید می‌کند.

این معماری چند مرحله‌ای باعث می‌شود ابزار بتواند با حفظ سرعت بالا، طیف گسترده‌ای از خطاهای رایج C++/C را در مراحل اولیه توسعه شناسایی کند.

 
 

 

 

معماری ابزار Polyspace Bug Finder - فازینگ - fuzzing- والنرلب - vulnerlab

      ۴.۳.۵ نقاط قوت ابزار  Polyspace Bug Finder:

  • سرعت بالا در تحلیل: این ابزار به‌دلیل بهره‌گیری از تحلیل سبک و مبتنی بر الگو، قادر است کدهای C++/C را با سرعت بالا بررسی کند و برای استفاده در چرخه‌های توسعه سریع مناسب باشد.
  • مناسب برای استفاده روزمره در CI/CD: قابلیت یکپارچه‌سازی با فرآیندهای یکپارچه‌سازی و استقرار مداوم (CI/CD) باعث شده این ابزار گزینه‌ای کاربردی برای پایش مداوم کیفیت و امنیت کد در پروژه‌های در حال توسعه باشد.
  • تولید گزارش‌های قابل فهم برای توسعه‌دهندگان: خروجی ابزار به‌گونه‌ای طراحی شده است که شامل توضیحات ساده، محل دقیق خطا و نوع مشکل بوده و برای توسعه‌دهندگان قابل درک و قابل اقدام (Actionable) است.

      ۴.۳.۶ محدودیت‌های ابزار  Polyspace Bug Finder:

  • دقت پایین‌تر نسبت به  Polyspace Code Prover: به‌دلیل ماهیت سبک و مبتنی بر الگو، دقت تحلیل در مقایسه با نسخه اثبات‌محور Polyspace Code Prover کمتر است.
  • عدم ارائه اثبات رسمی خطاها: این ابزار قادر به اثبات یا رد قطعی وجود خطا نیست و تنها بر شناسایی احتمالی و الگو-محور تکیه دارد.
  • پوشش محدودتر رفتارهای تعریف ‌نشده  (Undefined Behavior): در مقایسه با ابزارهای مبتنی بر تحلیل صوری، توانایی محدودتری در پوشش کامل سناریوهای پیچیده رفتارهای تعریف‌ نشده در C++/C دارد.

      ۴.۳.۷ جایگاه ابزار Polyspace Bug Finder:

Polyspace Bug Finder در این پژوهش در رده بالا (High Tier) قرار می‌گیرد و به ‌عنوان یکی از ابزارهای کارآمد برای توسعه صنعتی روزمره در پروژه‌های C++/C شناخته می‌شود. این ابزار به‌ویژه در سناریوهایی که نیاز به تحلیل سریع، پایش مداوم کیفیت کد و ادغام در فرآیندهای توسعه دارند، عملکرد مناسبی ارائه می‌دهد.

   ۴.۴ ابزار SonarQube (2024)

SonarQube یکی از شناخته‌شده‌ترین پلتفرم‌های تحلیل ایستای کد است که برای ارزیابی کیفیت و امنیت نرم‌افزار مورد استفاده قرار می‌گیرد. این ابزار از طریق افزونه SonarCFamily امکان تحلیل زبان‌های C++/C را نیز فراهم می‌سازد. SonarQube عمدتاً در محیط‌های DevSecOps و خطوط یکپارچه‌سازی و استقرار مداوم (CI/CD) به‌کار گرفته می‌شود و نقش مهمی در پایش مداوم کیفیت کد و شناسایی آسیب‌پذیری‌ها در چرخه توسعه نرم‌افزار ایفا می‌کند.

      ۴.۴.۱ روش تحلیل ابزار  SonarQube:

روش‌های اصلی تحلیل در SonarQube شامل مجموعه‌ای از رویکردهای ترکیبی برای شناسایی مشکلات کیفیت و امنیت کد است:

  • تطبیق الگوهای ایستا  (Static Pattern Matching): شناسایی ساختارهای شناخته ‌شده معیوب یا ناامن در کد بر اساس الگوهای از پیش تعریف ‌شده.
  • تحلیل جریان داده (Data Flow Analysis) : بررسی نحوه حرکت داده‌ها در برنامه برای کشف مسیرهای منجر به خطا یا رفتارهای ناامن.
  • تحلیل آلودگی داده (Taint Analysis): ردگیری داده‌های ورودی غیرقابل اعتماد و بررسی تأثیر آن‌ها بر بخش‌های حساس سیستم.
  • بررسی‌های امنیتی مبتنی بر قواعد  (Rule-based Security Checks): اعمال مجموعه‌ای گسترده از قوانین امنیتی و استانداردهای کدنویسی برای شناسایی نقض‌های احتمالی.

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

      ۴.۴.۲ پوشش آسیب‌پذیری‌های C++/C در  SonarQube:

SonarQube قادر است طیف متنوعی از آسیب‌پذیری‌ها و ضعف‌های امنیتی در کدهای C++/C را شناسایی کند، از جمله:

  • سرریز بافر (Buffer Overflow)
  • ارجاع به اشاره‌گر تهی  (Null Pointer Dereference)
  • نشت حافظه (Memory Leak)
  • شرایط رقابتی (Race Conditions)
  • اطلاعات حساس هاردکد شده  (Hardcoded Secrets)
  • پیکربندی نادرست امنیتی (Security Misconfiguration)

این ابزار همچنین از مجموعه‌ای از استانداردهای امنیتی (مانند CWE، CERT C و MISRA C) و کیفیت کد برای C++/C  پشتیبانی می‌کند و امکان انطباق با چارچوب‌های صنعتی و سازمانی را فراهم می‌سازد:

      ۴.۴.۳ معماری ابزار SonarQube:

SonarQube به‌ صورت یک پلتفرم تحلیل ایستای چندلایه طراحی شده است که جریان تحلیل را از کد منبع C++/C آغاز کرده و از طریق تحلیل‌گر اختصاصی SonarCFamily آن را به نمایش میانی قابل پردازش تبدیل می‌کند. در این مرحله، ساختار کد با ترکیبی از تحلیل جریان داده، تحلیل آلودگی (taint analysis) و تطبیق الگوهای ایستا بررسی می‌شود تا طیف گسترده‌ای از نقص‌های کیفیت و امنیتی شناسایی گردد. این تحلیل‌ها عمدتاً بر پایه مجموعه‌ای از قوانین از پیش تعریف ‌شده و استانداردهای کدنویسی انجام می‌شوند و هدف آن‌ها کشف خطاهای رایج و آسیب‌پذیری‌های قابل مشاهده در سطح کد است. خروجی تحلیل در نهایت به موتور قوانین (Rule Engine) منتقل شده و نتایج در قالب یک ساختار قابل گزارش‌دهی ارائه می‌شود.

 
 

 

 

vulnerlab - والنرلب- مقایسه ابزارهای SAST - ابزار تحلیل ایستا کد - بهترین ابزار SAST - تحلیل امنیت کد C و C++ - بررسی ابزارهای امنیت - سورس کد

     ۴.۴.۴ نقاط قوت SonarQube:

  • ادغام بسیار مناسب با CI/CD
  • داشبورد مدیریتی قدرتمند
  • پشتیبانی از استانداردهای امنیتی
  • مناسب برای تیم‌های توسعه بزرگ

      ۴.۴.۵ محدودیت‌های SonarQube:

  • دقت کمتر نسبت به ابزارهای مبتنی بر Formal Verification
  • عدم پوشش کامل برخی آسیب‌پذیری‌های پیچیده حافظه
  • وابستگی به قوانین از پیش تعریف ‌شده (Rule-based Dependency)

      ۴.۴.۶ جایگاه ابزار SonarQube:

SonarQube در این پژوهش در رده بالا (High Tier) طبقه‌بندی می‌شود و به‌ عنوان یکی از ابزارهای استاندارد و پرکاربرد برای استفاده در محیط‌های توسعه سازمانی شناخته می‌گردد.

   ۴.۵ ابزار CodeThreat (2023)

CodeThreat یک پلتفرم Application Security Testing (AST) است که قابلیت‌های تحلیل ایستای امنیتی (SAST) را برای زبان‌های برنامه‌نویسی مختلف ارائه می‌دهد. این ابزار عمدتاً برای شناسایی سریع آسیب‌پذیری‌های امنیتی در کد طراحی شده و در دسته ابزارهای سبک و سریع تحلیل امنیتی قرار می‌گیرد. از منظر تحلیلی، CodeThreat بر پایه یک موتور قواعد (Rule Engine) و تطبیق الگو (Pattern Matching) عمل می‌کند و با استفاده از مجموعه‌ای از قوانین امنیتی از پیش تعریف‌ شده، به‌صورت هدفمند به شناسایی الگوهای شناخته‌ شده آسیب‌پذیری در کد منبع می‌پردازد. این رویکرد باعث می‌شود ابزار بتواند با سرعت بالا تحلیل را انجام دهد.

      ۴.۵.۱ روش تحلیل ابزار CodeThreat:

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

  • تحلیل الگوهای ایستای کد  (Static Code Pattern Analysis): شناسایی ساختارهای شناخته‌ شده و الگوهای رایج آسیب‌پذیری در کد بر اساس قواعد از پیش تعریف ‌شده.
  • ردگیری جریان داده  (Data Flow Tracking): بررسی مسیر حرکت داده‌ها در برنامه برای شناسایی نقاطی که داده‌های ناامن می‌توانند منجر به رفتارهای آسیب‌پذیر شوند.
  • موتور قواعد امنیتی  (Security Rule Engine): اعمال مجموعه‌ای از قوانین امنیتی برای کشف تخطی‌ها و الگوهای شناخته‌شده آسیب‌پذیری در سطح کد.

      ۴.۵.۲ پوشش آسیب‌پذیری توسط ابزار CodeThreat:

ابزار CodeThreat در حوزه C++/C، قادر است مجموعه‌ای از آسیب‌پذیری‌ها و الگوهای ناامن رایج را شناسایی کند، از جمله:

  • سرریز بافر (Buffer Overflow)
  • سرریز عدد صحیح (Integer Overflow)
  • استفاده از توابع ناایمن  (Unsafe Function Usage)
  • اعتبارهای هاردکد شده (Hardcoded Credentials)
  • سوء‌استفاده یا استفاده نادرست از حافظه (Memory Misuse)

      ۴.۵.۳ معماری ابزار CodeThreat:

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

در ادامه، ساختار تولید شده وارد مرحله تطبیق الگوهای آسیب‌پذیری (Vulnerability Pattern Matching) می‌شود؛ جایی که مجموعه‌ای از قواعد و الگوهای امنیتی از پیش تعریف ‌شده بر روی کد اعمال می‌گردد تا موارد مشکوک شناسایی شوند. در نهایت، نتایج تحلیل در قالب یک گزارش امنیتی (Security Report) ارائه می‌شود که شامل نوع آسیب‌پذیری، محل وقوع و توضیحات مربوط به آن است.

vulnerlab - والنرلب- مقایسه ابزارهای SAST - ابزار تحلیل ایستا کد - بهترین ابزار SAST - تحلیل امنیت کد C و C++ - بررسی ابزارهای امنیت - سورس کد

      ۴.۵.۶ نقاط قوت  CodeThreat:

  • سرعت تحلیل بالا: به ‌دلیل استفاده از رویکردهای سبک مبتنی بر الگو و قواعد، این ابزار قادر است کد را در زمان کوتاه تحلیل کرده و نتایج اولیه را سریع ارائه دهد.
  • نصب و راه‌اندازی ساده: فرآیند استقرار و استفاده از ابزار پیچیدگی کمی دارد و برای تیم‌هایی که به دنبال شروع سریع تحلیل امنیتی هستند مناسب است.
  • مناسب برای اسکن‌های سریع امنیتی: این ابزار برای انجام اسکن‌های امنیتی سریع (Quick Security Scans) در مراحل اولیه توسعه گزینه‌ای کاربردی محسوب می‌شود.

      ۴.۵.۷ محدودیت‌های CodeThreat:

  • تحلیل عمیق حافظه محدود
  • عدم استفاده از روش‌های تحلیل صوری (Formal Analysis)
  • دقت پایین‌تر در پروژه‌های پیچیده C++/C

      ۴.۵.۸ جایگاه ابزار  CodeThreat:

CodeThreat در این پژوهش در رده میانی (Mid Tier) طبقه‌بندی می‌شود و به ‌عنوان ابزاری مناسب برای تحلیل ایستای سریع و سبک در پروژه‌های C++/C شناخته می‌گردد.

   ۴.۶ ابزار CodeValor (2023)

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

      ۴.۶.۱ روش تحلیل ابزار  CodeValor:

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

  • تطبیق الگوهای ایستا  (Static Pattern Matching): شناسایی ساختارها و الگوهای شناخته‌شده آسیب‌پذیری در کد بر اساس قواعد از پیش تعریف‌شده.
  • تحلیل امنیتی مبتنی بر قواعد (Rule-based Security Analysis): اعمال مجموعه‌ای از قوانین امنیتی برای کشف نقض‌های رایج در کدنویسی و انطباق با استانداردهای امنیتی.
  • بررسی جریان داده  (Data Flow Inspection)تحلیل مسیر حرکت داده‌ها در برنامه برای شناسایی نقاطی که داده‌های ناامن می‌توانند منجر به آسیب‌پذیری شوند.

      ۴.۶.۲ پوشش آسیب‌پذیری‌ها توسط ابزار CodeValor:

ابزار CodeValor در تحلیل کدهای C++/C، قادر است مجموعه‌ای از آسیب‌پذیری‌های رایج زیر را شناسایی کند:

  • سرریز بافر (Buffer Overflow)
  • اعتبارسنجی نادرست ورودی (Improper Input Validation)
  • سوء‌استفاده یا استفاده نادرست از اشاره‌گرها (Pointer Misuse)
  • مسائل مرتبط با ایمنی حافظه (Memory Safety Issues)

      ۴.۶.۳ نقاط قوت ابزار  CodeValor:

  •  تحلیل سریع
  • رابط کاربری ساده
  • مناسب برای بررسی‌های اولیه امنیتی

      ۴.۶.۴ محدودیت‌های ابزار  CodeValor:

  • عدم پشتیبانی از تحلیل عمیق مسیرهای اجرایی
  • محدودیت در کشف نقص‌های پیچیده حافظه
  • نرخ نسبتاً بالای مثبت کاذب (False Positive)

      ۴.۶.۵ جایگاه ابزار  CodeValor:

CodeValor در این پژوهش در رده میانی (Mid Tier) طبقه‌بندی می‌شود و به‌عنوان ابزاری مناسب برای تحلیل پایه امنیت کد در پروژه‌های C++/C شناخته می‌گردد.

   ۴.۷ ابزار Lucent Sky AVM (2023)

Lucent Sky AVM یک پلتفرم SAST تجاری می‌باشد که تمرکز اصلی آن بر کاهش خودکار آسیب‌پذیری‌ها (Automatic Remediation) است. برخلاف ابزارهای سنتی SAST که فقط مشکلات را گزارش می‌کنند، AVM تلاش می‌کند Patch آماده ارائه دهد.

      ۴.۷.۱ روش تحلیل ابزار Lucent Sky AVM:

  • تحلیل ایستای مبتنی بر قواعد (Rule-based Static Analysis)
  • تطبیق الگوهای کد (Code Pattern Matching)
  • موتور خودکار اصلاح آسیب‌پذیری‌ها (Automatic Remediation Engine)
  • تحلیل جریان کنترل و ردیابی آلودگی (Control Flow and Taint Tracking)

      ۴.۷.۲ پوشش آسیب‌پذیری‌ها توسط ابزار Lucent Sky AVM:

پوشش این ابزار در حوزه C++/C نسبت به زبان‌های سطح‌بالاتر مانند Java و C# محدودتر است، با این حال در سطح تحلیل ایستای پایه قادر به شناسایی برخی از آسیب‌پذیری‌های رایج می‌باشد، از جمله:

  • سرریز بافر (Buffer Overflow) در سطح پایه
  • استفاده ناایمن از APIها (Unsafe API Usage)
  • اطلاعات حساس هاردکد شده (Hardcoded Secrets)
  • خطاهای اعتبارسنجی ورودی (Input Validation Errors)

      ۴.۷.۳ نقاط قوت ابزار Lucent Sky AVM:

  • قابلیت تولید Patch
  • گزارش‌گیری و داشبورد حرفه‌ای
  • مناسب برای تیم‌های متمرکز بر سرعت توسعه

      ۴.۷.۴ محدودیت‌های ابزار Lucent Sky AVM:

  • تحلیل محدود در C++/C
  • عدم پشتیبانی از تحلیل عمیق حافظه
  • وابستگی به قوانین از پیش تعریف ‌شده (Rule Dependency)

      ۴.۷.۵ جایگاه ابزار Lucent Sky AVM:

Lucent Sky AVM در این پژوهش در رده میانی (Mid Tier) با تمرکز کمتر بر نیازهای فنی C/C++ طبقه‌بندی می‌شود.

   ۴.۸ ابزار Credential Digger (2023)

Credential Digger توسط SAP توسعه یافته و در دسته ابزارهای Secret Scanning (اسکن مخفی) قرار می‌گیرد، نه یک پلتفرم جامع تحلیل ایستای امنیتی (SAST). وظیفه اصلی این ابزار، جستجو، شناسایی و استخراج اطلاعات حساس و محرمانه از مخازن کد است؛ از جمله کلیدهای API، توکن‌ها، رمزهای عبور و سایر داده‌های اعتباری که به‌ صورت ناخواسته در کد منبع یا فایل‌های پیکربندی قرار گرفته‌اند.

      ۴.۸.۱ روش تحلیل Credential Digger:

  • تطبیق الگو (Pattern Matching)
  • تشخیص مبتنی بر یادگیری ماشین (ML-based Secret Detection)
  • موتور قواعد مبتنی بر عبارات منظم (Regex Rule Engine)

      ۴.۸.۲ پوشش آسیب‌پذیری‌ها توسط Credential Digger:

Credential Digger به ‌طور خاص برای شناسایی خطاهای حافظه یا باگ‌های سطح پایین در کد طراحی نشده است و در دسته ابزارهای تحلیل ایستای امنیتی جامع (SAST) قرار نمی‌گیرد. تمرکز اصلی این ابزار بر کشف و استخراج داده‌های حساس (Secrets) است که به ‌صورت ناخواسته در مخازن کد یا فایل‌های پیکربندی قرار گرفته‌اند.

پوشش این ابزار عمدتاً شامل موارد زیر است:

  • اعتبارنامه‌های هارد‌کد شده  (Hardcoded Credentials)
  • کلیدهای API (API Keys)
  • کلیدهای SSH (SSH Keys)
  • رشته‌ها و داده‌های حساس (Sensitive Strings)

      ۴.۸.۳ نقاط قوت ابزار Credential Digger:

  • سرعت بسیار بالا
  • نرخ پایین منفی کاذب  (False Negative)
  • مناسب برای مرحله Commit یا Pipeline

      ۴.۸.۴ محدودیت‌های ابزار Credential Digger:

  • یک ابزار SAST کامل محسوب نمی‌شود (این ابزار در دسته تحلیل ایستای جامع امنیتی (SAST) قرار نمی‌گیرد و صرفاً به‌عنوان یک ابزار تخصصی برای کشف Secrets طراحی شده است)
  • نبود تحلیل حافظه، اشاره‌گر، جریان کنترل

      ۴.۸.۵ جایگاه ابزار Credential Digger:

Credential Digger در این پژوهش در رده پایین (Low Tier) طبقه‌بندی می‌شود و عملاً خارج از رقابت اصلی ابزارهای تحلیل ایستای امنیت کد C++/C قرار می‌گیرد.

   ۴.۹ ابزار DerScanner (2023)

DerScanner یک ابزار تجاری روسی است که توسط یک رویکرد چندلایه، قابلیت‌های SAST + SCA + Secret Scanning را ترکیب کرده و در یک پلتفرم یکپارچه ارائه می‌دهد. این ابزار برای تحلیل کد در زبان‌های مختلف از جمله C++/C طراحی شده و تلاش می‌کند با ترکیب این سه رویکرد، پوشش نسبتاً جامعی از ریسک‌های امنیتی در چرخه توسعه نرم‌افزار فراهم کند. DerScanner در حوزه  C++/C، دارای پوشش متوسط اما قابل‌قبول است؛ به این معنا که می‌تواند بخش قابل توجهی از آسیب‌پذیری‌های رایج و الگوهای امنیتی شناخته ‌شده را شناسایی کند.

      ۴.۹.۱ روش تحلیل ابزار DerScanner:

  • تحلیل مبتنی بر قواعد (Rule-based Analysis)
  • ردگیری آلودگی داده (Taint Tracking)
  • ردگیری جریان داده (Data Flow Tracking)
  • شناسایی الگوهای کد (Code Pattern Recognition)

      ۴.۹.۲ پوشش آسیب پذیری‌ها توسط ابزار DerScanner ویژه C++/C:

  • سرریز بافر (Buffer Overflow)
  • نشت حافظه (Memory Leak)
  • مشکلات اعتبارسنجی ورودی (Input Validation Issues)
  • توابع خطرناک (Dangerous Functions: strcpy, gets, sprintf)
  • سرریز عدد صحیح (Integer Overflow)

      ۴.۹.۳ نقاط قوت ابزار DerScanner:

  • پشتیبانی مناسب از DevSecOps
  • امکان ترکیب تحلیل‌های SAST و SCA
  • پوشش گسترده آسیب‌پذیری‌های مبتنی بر CWE

      ۴.۹.۴ محدودیت‌های ابزار DerScanner:

  • دقت پایین‌تر در تحلیل مسیرهای اجرایی عمیق
  • نرخ متوسط مثبت کاذب (False Positive)
  • عدم استفاده از روش‌های تحلیل صوری (Formal Methods)

      ۴.۹.۵ جایگاه ابزار DerScanner:

DerScanner در این پژوهش در رده میانی (Mid Tier) طبقه‌بندی می‌شود و به‌ عنوان ابزاری با پوشش نسبتاً مناسب و قابلیت‌های ترکیبی SAST و SCA برای تیم‌های توسعه متوسط شناخته می‌گردد.

   ۴.۱۰ ابزار Corgena SAST (2024)

Corgena یک ابزار مدرن تحلیل ایستای امنیتی (SAST) است که با تمرکز بر محیط‌های DevSecOps و انجام تحلیل‌های سریع طراحی شده است. این ابزار تلاش می‌کند فرآیند شناسایی آسیب‌پذیری‌های امنیتی را در چرخه توسعه نرم‌افزار به ‌صورت مستمر و قابل ادغام در  pipelineهای توسعه ارائه دهد. Corgena در حوزه C++/C، دارای پوشش متوسط است؛ به این معنا که قادر به شناسایی بخشی از آسیب‌پذیری‌های رایج و الگوهای امنیتی شناخته ‌شده می‌باشد.

      ۴.۱۰.۱ روش تحلیل ابزار Corgena:

  • تحلیل مبتنی بر الگو (Pattern-based Analysis)
  • جریان داده سبک (Lightweight Data Flow)
  • تحلیل ایستای مبتنی بر ابر (Cloud-based SAST)

      ۴.۱۰.۲ پوشش آسیب پذیری ابزار Corgena ویژه C++/C:

  • سرریز بافر (Buffer Overflow – در سطح پایه)
  • آسیب‌پذیری‌های رشته قالب (Format String Vulnerabilities)
  • فراخوانی APIهای ناامن (Dangerous API Calls)
  • اطلاعات حساس هاردکد شده (Hardcoded Secrets)

      ۴.۱۰.۳ نقاط قوت ابزار Corgena:

  • مقیاس‌پذیری بالا به‌واسطه معماری مبتنی بر ابر (Cloud-based Scalability)
  • فرآیند نصب و راه‌اندازی ساده
  • یکپارچگی مناسب با پلتفرم‌های مدیریت کد مانند GitHub و GitLab

      ۴.۱۰.۴ محدودیت‌های ابزار Corgena:

  • عدم ارائه تحلیل دقیق در سطح مدیریت حافظه (Memory Analysis)
  • عمق محدود در تحلیل جریان داده (Data Flow Analysis)
  • نامناسب برای پروژه‌های پیچیده C++/C

      ۴.۱۰.۵ جایگاه ابزار Corgena:

Corgena در این پژوهش در مرز Mid Tier / Low Tier  طبقه‌بندی می‌شود. این ابزار با وجود تمرکز مناسب بر DevSecOps، تحلیل سریع و معماری ابری، در حوزه C++/C از نظر عمق تحلیل و پوشش آسیب‌پذیری‌های سطح پایین محدودیت‌هایی دارد و بیشتر برای شناسایی سریع مشکلات رایج و الگوهای ساده امنیتی مناسب است تا تحلیل‌های عمیق و تخصصی.

   ۴.۱۱ ابزار FuzzBuzz SAST (2024)

FuzzBuzz در اصل یک پلتفرم فازینگ (Fuzzing) است که در نسخه‌های جدید خود قابلیت‌های تحلیل ایستای امنیتی (SAST) را نیز به مجموعه ابزارهایش افزوده است. هدف اصلی این ابزار، ترکیب تحلیل ایستا و فازینگ هدفمند (Targeted Fuzzing) ب رای افزایش اثربخشی در کشف آسیب‌پذیری‌های نرم‌افزاری است.

      ۴.۱۱.۱ روش تحلیل ابزار FuzzBuzz:

  • تحلیل ایستای مبتنی بر قواعد و ردیابی آلودگی (Rule-based + Taint Analysis)
  • فازینگ هدایت ‌شده (Guided Fuzzing)
  • کشف ترکیبی آسیب‌پذیری‌ها (Hybrid Detection)

      ۴.۱۱.۲ پوشش آسیب پذیری ابزار FuzzBuzz ویژه C++/C:

این ابزار در حالت ترکیبی (Hybrid Mode)، می‌تواند مجموعه‌ای از آسیب‌پذیری‌ها را شناسایی کند:

  • سرریز بافر (Buffer Overflow)
  • سرریز عدد صحیح (Integer Overflow)
  • استفاده پس از آزادسازی (Use-After-Free – با کمک فازینگ)
  • خرابی حافظه (Memory Corruption)

      ۴.۱۱.۳ نقاط قوت ابزار FuzzBuzz:

  • ترکیب تحلیل ایستای امنیتی (SAST) و فازینگ برای افزایش عمق کشف آسیب‌پذیری‌ها
  • توانایی شناسایی برخی نقص‌های عمیق که در ابزارهای صرفاً ایستا یا صرفاً فازینگ ممکن است از دست بروند
  • مناسب برای پروژه‌های C++/C با سطح ریسک بالا

      ۴.۱۱.۴ محدودیت‌های ابزار FuzzBuzz:

  • وابستگی نسبی به اجرای فازینگ
  • دقت بخش تحلیل ایستای امنیتی (SAST) کمتر از ابزارهای مبتنی بر تحلیل صوری (Formal Methods)است
  • نیاز به محیط اجرایی تست برای بهره‌برداری کامل از قابلیت‌های شناسایی آسیب‌پذیری

      ۴.۱۱.۵ جایگاه ابزار FuzzBuzz:

FuzzBuzz در این پژوهش در رده بالا (High Tier (Hybrid)) قرار می‌گیرد، به ‌ویژه در پروژه‌هایی که فازینگ هدفمند و تحلیل مبتنی بر اجرا نقش کلیدی دارند. ترکیب SAST و فازینگ باعث می‌شود این ابزار در کشف آسیب‌پذیری‌های عمیق و وابسته به رفتار اجرایی عملکرد قابل توجهی داشته باشد.

با این حال، از منظر SAST خالص، این ابزار در رده میانی (Mid Tier) طبقه‌بندی می‌شود؛ زیرا عمق و دقت تحلیل ایستای آن در مقایسه با ابزارهای تخصصی و صوری محدودتر است.

۵. جدول مقایسه جامع ابزارهای SAST ویژه C++/C

در ادامه، یک جدول مقایسه جامع ابزارهای SAST ویژه C++/C ارائه شده است:

   ۵.۱ جدول مقایسه ابزارها (خلاصه تحلیلی)

دسته‌بندی ابزار

نام ابزار

تکنولوژی اصلی تحلیل

دقت (Accuracy)

کاربرد اصلی

نوع لایسنس

ابزارهای صوری (Formal)

TrustInSoft

Formal Verification / Interpreted

بسیار بالا (Zero FP)

سیستم‌های حیاتی (Safety)

تجاری

 

Polyspace

Abstract Interpretation

بسیار بالا

استاندارد خودرو و هوافضا

تجاری

 

Frama-C

Value Analysis / WP

بالا

تحقیق و توسعه امنیتی

متن‌باز (Open Source)

ابزارهای سازمانی (Enterprise)

Coverity

Inter-procedural Analysis

بالا

پروژه‌های بزرگ صنعتی

تجاری

 

Fortify SCA

Data Flow / Control Flow

بالا

انطباق با استانداردهای امنیتی

تجاری

 

Klocwork

Control Flow / Symbolics

بالا

کدهای زیرساختی و پیچیده

تجاری

ابزارهای مدرن/DevSecOps

CodeQL

Semantic Querying

بالا

امنیت زنجیره تأمین و CI/CD

رایگان (متن‌باز) / تجاری

 

SonarQube

Pattern Matching / Rules

متوسط

کیفیت کد و CI/CD

رایگان / تجاری

 

Snyk

AI-driven / Rule-based

متوسط

امنیت در لحظه توسعه

تجاری

ابزارهای سبک و سریع

Cppcheck

Rule-based

متوسط

بررسی‌های سریع روزمره

متن‌باز (Open Source)

 

Clang Static Analyzer

Path-Sensitive Analysis

خوب

توسعه‌دهندگان اکوسیستم LLVM

متن‌باز (Open Source)

 

Infer

Separation Logic

بالا

تحلیل باگ‌های حافظه (Concurrency)

متن‌باز (Open Source)

۶. رتبه‌بندی نهایی ابزارهای SAST برای C++/C

رتبه نهایی

ابزار

رده ابزار

امتیاز کلی (کیفی)

مناسب‌ترین سناریو استفاده

جمع‌بندی تحلیلی

1

TrustInSoft Analyzer

Formal / Safety‑Critical

بسیار عالی

سیستم‌های حیاتی، ایمنی و امنیت بالا

بالاترین دقت و کمترین False Positive

2

Polyspace

Formal Verification

بسیار عالی

خودرو، هوافضا، پزشکی

انطباق کامل با استانداردهای صنعتی

3

Coverity

Enterprise SAST

عالی

پروژه‌های بسیار بزرگ سازمانی

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

4

Fortify SCA

Enterprise / Security‑Driven

عالی

امنیت سازمانی و Compliance

تمرکز قوی بر CWE و امنیت

5

CodeQL

Query‑Based / DevSecOps

بسیار خوب

CI/CD، تحلیل امنیت مدرن

انعطاف‌پذیر و مناسب اتوماسیون

6

Klocwork

Industrial SAST

بسیار خوب

سیستم‌های تعبیه‌شده

تحلیل عمیق با هزینه پیکربندی

7

Frama‑C

Formal / Research

خوب

تحقیق، تحلیل دقیق دستی

قدرتمند ولی نیازمند تخصص

8

Infer

Lightweight Formal

خوب

کشف باگ‌های حافظه

سریع ولی دامنه محدودتر

9

SonarQube (C/C++)

Rule‑Based / CI

متوسط

کنترل کیفیت مستمر

مناسب کیفیت، نه تحلیل عمیق

10

Clang Static Analyzer

Compiler‑Based

متوسط

توسعه روزمره C/C++

یکپارچه، ولی پوشش محدود

11

Cppcheck

Lightweight Rule‑Based

متوسط

بررسی‌های سریع

سریع و ساده، دقت محدود

12

Snyk (C/C++)

AI / Rule‑Based

متوسط

DevSecOps سبک

تمرکز بیشتر روی اکوسیستم

۷. بحث (Discussion)

تحلیل انجام‌ شده بر روی ابزارهای تحلیل ایستای امنیت کد منبع نشان می‌دهد که یک شکاف معنادار بین ابزارهای عمومی SAST و ابزارهای تخصصی C++/C وجود دارد. این شکاف عمدتاً ناشی از ماهیت زبان‌های C++/C است که به دلیل مدیریت دستی حافظه، اشاره‌گرها و رفتارهای تعریف‌نشده، نیازمند روش‌های تحلیلی عمیق‌تر از Rule-based Analysis هستند.

نتایج نشان می‌دهد ابزارهایی که از Formal Verification و Abstract Interpretation استفاده می‌کنند (نظیر TrustInSoft Analyzer و Polyspace Code Prover) به‌طور قابل توجهی در کشف نقص‌های بحرانی حافظه موفق‌تر هستند. این ابزارها قادرند مسیرهای اجرایی پیچیده را تحلیل کرده و حتی عدم وقوع خطا را اثبات کنند، قابلیتی که در ابزارهای متداول SAST مشاهده نمی‌شود. همچنین بین ابزارهای مبتنی بر تحلیل صوری و ابزارهای Rule-based یک trade-off اساسی بین دقت و هزینه محاسباتی وجود دارد. ابزارهای Formal دقت بالاتری دارند اما پیچیدگی و هزینه بیشتری نیز تحمیل می‌کنند.

در مقابل، ابزارهایی مانند SonarQube و Polyspace Bug Finder با وجود پوشش کمتر در تحلیل عمیق حافظه، به دلیل سرعت بالا، سهولت استفاده و ادغام مناسب با CI/CD نقش مهمی در فرآیندهای توسعه صنعتی ایفا می‌کنند. این موضوع نشان می‌دهد که انتخاب ابزار SAST نباید صرفاً بر اساس دقت، بلکه باید بر اساس سناریوی استفاده و سطح ریسک پروژه انجام شود.

۸. نتایج عملی (Practical Implications)

بر اساس یافته‌های این پژوهش، می‌توان راهبردهای زیر را برای استفاده عملی از ابزارهای SAST در پروژه‌های C++/C پیشنهاد کرد:

   ۸.۱ پروژه‌های ایمنی‌محور و بسیار قابل‌اعتماد (Safety‑Critical و High‑Assurance)

استفاده از ابزارهای Top‑Tier مانند TrustInSoft Analyzer و Polyspace Code Prover برای سامانه‌های حیاتی نظیر سیستم‌های تعبیه ‌شده، صنایع خودروسازی، هوافضا و تجهیزات پزشکی توصیه می‌شود. اگرچه این ابزارها هزینه و زمان تحلیل بالاتری دارند، اما کاهش ریسک خطاهای فاجعه‌بار را تضمین می‌کنند.

   ۸.۲ پروژه‌های صنعتی و تجاری بزرگ

در پروژه‌هایی با تیم‌های توسعه بزرگ و چرخه توسعه سریع، ترکیب ابزارها پیشنهاد می‌شود:

  • SonarQube (تحلیل مستمر در CI/CD)
  • Polyspace Bug Finder (کشف سریع خطاهای رایج)
  • اجرای دوره‌ای تحلیل عمیق با ابزارهای صوری

لازم به ذکر است که این رویکرد، تعادل مناسبی بین دقت، هزینه و بهره‌وری ایجاد می‌کند.

   ۸.۳ پروژه‌های متن‌باز و تیم‌های کوچک

برای پروژه‌هایی با محدودیت منابع ابزارهای Mid‑Tier مانند DerScanner یا CodeThreat و ترکیب SAST سبک با Code Review دستی می‌تواند پوشش امنیتی قابل قبولی فراهم کند، هرچند برای کشف نقص‌های پیچیده حافظه کافی نیست.

۹. محدودیت‌های پژوهش

این پژوهش با وجود جامع بودن، دارای محدودیت‌هایی است که می‌بایست مورد توجه قرار گیرند:

  1. ارزیابی ابزارها عمدتاً بر اساس مستندات فنی، مطالعات موردی و سناریوهای آزمایشی انجام شده و تحلیل تجربی در مقیاس صنعتی محدود بوده است.
  2. برخی ابزارهای تجاری دسترسی محدود یا هزینه بالایی دارند که امکان تست عملی کامل را کاهش می‌دهد.
  3. تمرکز پژوهش بر C++/C بوده و نتایج لزوماً به سایر زبان‌ها قابل تعمیم نیست.

۱۰. پیشنهادهایی برای پژوهش‌های آینده

بر اساس نتایج این مقاله، مسیرهای زیر برای پژوهش‌های آتی پیشنهاد می‌شود:

  • ترکیب اثبات صوری (Formal Verification) و یادگیری ماشین (Machine Learning) در SAST
  • ارزیابی تجربی ابزارها روی مخازن واقعی بزرگ C++/C
  • توسعه معیارهای استاندارد بنچمارک برای SASTهای C++/C
  • بررسی هم‌افزایی SAST و فازینگ در کشف نقص‌های حافظه

۱۱. نتیجه‌گیری

این مقاله به بررسی جامع ابزارهای تحلیل ایستای امنیت کد منبع با تمرکز بر زبان‌های C++/C بر اساس فهرست NIST پرداخت. نتایج نشان داد که ابزارهای مبتنی بر روش‌های رسمی تحلیل ایستا، علی‌رغم هزینه و پیچیدگی بالاتر، بالاترین سطح دقت و اطمینان امنیتی را ارائه می‌دهند. در مقابل، ابزارهای Rule-based و Data Flow‑محور، اگرچه در کشف نقص‌های پیچیده محدودیت دارند، اما به دلیل سهولت استفاده و یکپارچگی با فرآیند توسعه نقش کلیدی در امنیت نرم‌افزار ایفا می‌کنند. در نهایت، هیچ ابزار واحدی پاسخگوی تمام نیازهای امنیتی نیست و راهبرد ترکیبی ابزارها بر اساس سطح ریسک، نوع پروژه و منابع در دسترس، مؤثرترین راهکار برای افزایش امنیت نرم‌افزارهای C++/C محسوب می‌شود.

۱۲. منابع

 
 

 

 

				
					1.	Cuoq, P., Kirchner, F., Kosmatov, N., Prevosto, V., Signoles, J., & Yakobowski, B. (2014). Frama-C: A software analysis perspective. Formal Aspects of Computing, 27(3), 573–609. https://doi.org/10.1007/s00165-014-0326-7TrustInSoft. (2023). TrustInSoft Analyzer technical whitepaper. 
2.	Chy, M., Lee, J., & Rahman, M. (2023). Evaluation of modern SAST platforms for industrial CI/CD pipelines. In IEEE International Conference on Cyber Warfare and Security (ICCWS). https://doi.org/10.1109/ICCWS57822.2023.00015CodeThreat. (2023). CodeThreat SAST platform documentation. 
3.	Yilmaz, T., & Erdem, O. (2024). Security scanning automation tools for DevSecOps pipelines. International Journal of Secure Software Engineering, 11(2), 44–61. https://doi.org/10.4018/IJSSE.2024040103CodeValor. (2023). CodeValor static analysis technical overview. 
4.	Gurfinkel, A., Kahsai, T., & Navas, J. (2015). The architecture of the CodeSonar static analysis platform. In NASA Formal Methods (pp. 3–17). Springer. https://doi.org/10.1007/978-3-319-17524-9_1GrammaTech. (2024). CodeSonar product overview 8.x. 
5.	Leung, H., Wang, P., & Yusuf, A. (2025). Next generation static analysis tools for zero trust DevSecOps pipelines. SecureDevOps Conference 2025.Corgena Security. (2025). Corgena SAST documentation v1.2. 
6.	Bertolusso, L., Autili, M., & Inverardi, P. (2021). Credential Digger: A tool for detecting exposed credentials in source code. In IEEE International Conference on Software Maintenance and Evolution (ICSME). https://doi.org/10.1109/ICSME52107.2021.00046SAP Security Research. (2023). Credential Digger GitHub documentation. 
7.	Kovalenko, V., Smirnov, D., & Alexeev, P. (2024). Static code vulnerability detection platforms for enterprise security. Journal of Cyber Defense Systems, 8(1), 55–71. https://doi.org/10.55612/jcds.2024.8105DerScanner. (2025). DerScanner technical whitepaper. 
8.	Vulinović, D., & Kregar, S. (2020). Flawnter: Static code analysis tool for detecting vulnerabilities in C/C++. In MIPRO Conference Proceedings, 1289–1294. https://doi.org/10.23919/MIPRO48935.2020.9245404 
9.	Nguyen, K., Zhang, T., & Wang, Y. (2019). Automated repair of web application vulnerabilities using industrial tools. In ACM Symposium on Applied Computing. https://doi.org/10.1145/3297280.3297520Lucent Sky. (2023). AVM platform whitepaper. 
10.	Delmas, D., Luis, M., & Souyris, J. (2018). Use of Polyspace Bug Finder in safety critical systems. In SAE AeroTech Conference. https://doi.org/10.4271/2018-01-1937MathWorks. (2023). Polyspace Bug Finder user’s guide. 
11.	Cousot, P., & Cousot, R. (1977). Abstract interpretation: A unified lattice model for static analysis. In POPL '77. https://doi.org/10.1145/512950.512973MathWorks. (2023). Polyspace Code Prover verification documentation.Könighofer, R., et al. (2020). Evaluation of formal methods in industrial software verification. IEEE Transactions on Software Engineering. https://doi.org/10.1109/TSE.2020.2964561 

				
			

همچنین ممکن است دوست داشته باشید

پیام بگذارید

wpChatIcon
wpChatIcon