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


حاشیه نویسی

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

معرفی

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

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

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

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

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

قوانین و دستورالعمل ها به نوبه خود استاندارد کدگذاری را تشکیل می دهند. این استاندارد تعریف می کند که چگونه یک برنامه نویس باید کد برنامه را بنویسد. استانداردهای کدنویسی در سازمان های توسعه نرم افزار استفاده می شود.

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

فرآیند تحلیل

فرآیند تجزیه و تحلیل استاتیک از دو مرحله اصلی تشکیل شده است: ایجاد یک درخت کد (همچنین به نام) و تجزیه و تحلیل آن درخت.

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

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

lexer وظیفه شکستن داده های ورودی به توکن های فردی و همچنین تعیین نوع این نشانه ها و ارسال متوالی آنها به تجزیه کننده را بر عهده دارد. یک lexer کد منبع را خط به خط می خواند و سپس خطوط به دست آمده را به کلمات رزرو شده، شناسه ها و ثابت هایی به نام نشانه ها می شکند. پس از دریافت نشانه، lexer نوع آن را تعیین می کند.

بیایید یک الگوریتم مثال برای تعیین نوع واژگان در نظر بگیریم.

اگر اولین کاراکتر یک نشانه یک رقم باشد، نشانه یک عدد در نظر گرفته می شود و اگر آن کاراکتر یک علامت منفی باشد، یک عدد منفی است. اگر یک نشانه یک عدد باشد، می تواند یک عدد صحیح یا یک کسری باشد. اگر عددی حاوی حرف E باشد که نماد نمایی یا یک نقطه اعشاری را تعریف می کند، عدد یک کسری در نظر گرفته می شود و در غیر این صورت یک عدد صحیح در نظر گرفته می شود. توجه داشته باشید که این ممکن است باعث یک خطای لغوی شود - اگر کد منبع در حال تجزیه حاوی نشانه "4xyz" باشد، lexer آن را عدد صحیح 4 در نظر می گیرد. این یک خطای نحوی ایجاد می کند که تجزیه کننده قادر به تشخیص آن خواهد بود. با این حال، چنین خطاهایی می تواند توسط یک lexer نیز شناسایی شود.

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

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

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

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

Int Func())(بازگشت 0;)

lexer این رشته را پردازش می کند و آن را به نشانه هایی مانند جدول 1 می شکند:

جدول 1 - نشانه های رشته "int Func())(return 0);".

رشته به عنوان 8 نشانه معتبر شناخته می شود و این نشانه ها به تجزیه کننده ارسال می شود.

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

تجزیه کننده زمانی متوجه این موضوع می شود که یک درخت کد از توکن های ارائه شده توسط lexer ایجاد کرده و آن درخت را تجزیه کند. اگر واژگان و درخت ساخته شده از آنها صحیح در نظر گرفته شود، از این درخت در تحلیل استاتیک استفاده می شود. در غیر این صورت تجزیه کننده پیام خطا ایجاد می کند.

با این حال، روند ساخت یک درخت کد به نمایش ساده واژگان در قالب یک درخت خلاصه نمی شود. بیایید نگاهی دقیق تر به این روند بیندازیم.

درخت کد

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

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

هنگام طراحی رئوس درخت، اولین گام معمولاً تعیین سطح مدولار بودن است. به عبارت دیگر، مشخص می شود که آیا تمام ساختارهای زبان با راس هایی از یک نوع، که از نظر معنی متمایز می شوند، نمایش داده می شوند یا خیر. به عنوان مثال، نمایش عملیات حسابی باینری را در نظر بگیرید. یکی از گزینه ها استفاده از رئوس یکسان برای تمام عملیات های دودویی است که یکی از ویژگی های آن نوع عملیات است، به عنوان مثال "+". گزینه دیگر استفاده از انواع مختلف رئوس برای عملیات های مختلف است. در یک زبان شی گرا، اینها می توانند کلاس هایی مانند AddBinary، SubstractBinary، MultipleBinary و غیره باشند که از کلاس پایه انتزاعی Binary به ارث می برند.

به عنوان مثال، اجازه دهید به دو عبارت نگاه کنیم: 1 + 2 * 3 + 4 * 5 و 1 + 2 * (3 + 4) * 5 (شکل 1 را ببینید).

همانطور که از شکل مشخص است، با پیمایش درخت از چپ به راست می توان شکل اصلی عبارت را بازیابی کرد.

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

روشهای تحلیل استاتیکی

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

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

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

تجزیه و تحلیل جریان داده را می توان به عنوان فرآیند جمع آوری اطلاعات در مورد استفاده، تعریف و وابستگی داده ها در برنامه مورد تجزیه و تحلیل توصیف کرد. تجزیه و تحلیل جریان داده از یک نمودار جریان فرمان تولید شده از درخت کد استفاده می کند. این نمودار تمام مسیرهای ممکن برای اجرای یک برنامه مشخص را نشان می دهد: راس ها قطعات کد "خط مستقیم" را بدون هیچ گونه انتقالی نشان می دهند، و یال ها انتقال احتمالی کنترل بین این قطعات را نشان می دهند. از آنجایی که تجزیه و تحلیل بدون اجرای برنامه در حال آزمایش انجام می شود، تعیین دقیق نتیجه اجرای آن غیرممکن است. به عبارت دیگر، نمی توان دقیقاً متوجه شد که کدام مسیر کنترل منتقل می شود. بنابراین، الگوریتم‌های تحلیل جریان داده رفتار ممکن را تقریب می‌کنند، برای مثال، با در نظر گرفتن هر دو شاخه از یک عبارت if-then-else، یا با اجرای بدنه یک حلقه while با دقت خاصی. همیشه یک محدودیت دقت وجود دارد زیرا معادلات جریان داده برای مجموعه خاصی از متغیرها نوشته می‌شوند و تعداد این متغیرها باید محدود باشد زیرا ما فقط برنامه‌هایی را با مجموعه‌ای محدود از عبارات در نظر می‌گیریم. بنابراین، همیشه یک حد بالایی برای تعداد مجهولات وجود دارد که دقت را محدود می کند. از نقطه نظر نمودار جریان فرمان، تحلیل استاتیک تمام مسیرهای اجرای برنامه ممکن را معتبر می داند. به دلیل این فرض، تجزیه و تحلیل جریان داده ها تنها می تواند راه حل های تقریبی برای مجموعه محدودی از مسائل ایجاد کند.

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

نتیجه

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

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

کتابشناسی - فهرست کتب

  • فلسفه دیرک گیسن و اجرای عملی ابزارهای تحلیلگر استاتیک. -داده های الکترونیکی -درک گیسن، پلیس. 1998.
  • اصول کامپایلر جیمز آلن فارل. -داده های الکترونیکی -جیمز آلن فارل، پلیس 1995. -حالت دسترسی: http://www.cs.man.ac.uk/~pjj/farrell/compmain.html
  • اصطلاحات اجرای درخت نحو انتزاعی جوئل جونز. - مجموعه مقالات دهمین کنفرانس زبان های الگوی برنامه ها 2003، پلیس 2003.
  • Ciera Nicole Christopher Evaluing Static Analysis Frameworks .- Ciera Nicole, cop. 2006.
  • لئون مونن یک معماری عمومی برای تجزیه و تحلیل جریان داده برای پشتیبانی از مهندسی معکوس. - مجموعه مقالات دومین کارگاه بین المللی تئوری و عمل مشخصات جبری، پلیس. 1997.

حاشیه نویسی

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

معرفی

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

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

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

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

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

طبقه بندی آسیب پذیری های امنیتی بسته به خطاهای نرم افزاری:

  1. سرریز بافر. این آسیب پذیری به دلیل عدم کنترل آرایه های خارج از محدوده در حافظه در حین اجرای برنامه رخ می دهد. هنگامی که بسته ای از داده های بسیار بزرگ از بافر با اندازه محدود سرریز می شود، محتویات مکان های حافظه اضافی بازنویسی می شود و باعث از کار افتادن و خروج برنامه می شود. بر اساس محل بافر در حافظه فرآیند، سرریزهای بافر در پشته (سرریز بافر پشته)، هیپ (سرریز بافر پشته) و ناحیه داده ایستا (سرریز بافر bss) متمایز می شوند.
  2. آسیب پذیری ها (آسیب پذیری ورودی آلوده). آسیب‌پذیری‌ها ممکن است در مواردی ایجاد شوند که ورودی کاربر بدون کنترل کافی به مفسر برخی از زبان‌های خارجی (معمولاً یک پوسته یونیکس یا زبان SQL) ارسال می‌شود. در این حالت، کاربر می تواند داده های ورودی را به گونه ای مشخص کند که مفسر راه اندازی شده دستوری کاملاً متفاوت با آنچه نویسندگان برنامه آسیب پذیر در نظر گرفته بودند را اجرا کند.
  3. آسیب پذیری رشته را قالب بندی کنید. این نوع آسیب‌پذیری امنیتی زیرمجموعه آسیب‌پذیری است. به دلیل کنترل ناکافی پارامترها هنگام استفاده از فرمت توابع ورودی/خروجی printf، fprintf، scanf و غیره کتابخانه استاندارد C رخ می دهد. این توابع به عنوان یکی از پارامترهای خود یک رشته کاراکتری را می گیرند که فرمت ورودی یا خروجی آرگومان های تابع بعدی را مشخص می کند. اگر کاربر بتواند نوع قالب بندی را مشخص کند، این آسیب پذیری می تواند ناشی از استفاده ناموفق از توابع قالب بندی رشته باشد.
  4. آسیب پذیری های ناشی از خطاهای همگام سازی (شرایط مسابقه). مشکلات مرتبط با چندوظیفه ای منجر به موقعیت هایی می شود که به آنها می گویند: برنامه ای که برای اجرا در یک محیط چندوظیفه ای طراحی نشده است ممکن است بر این باور باشد که مثلاً فایل هایی که در کار خود استفاده می کند توسط برنامه دیگری قابل تغییر نیستند. در نتیجه، مهاجمی که محتویات این فایل های کاری را به موقع جایگزین می کند، می تواند برنامه را مجبور به انجام اقدامات خاصی کند.

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

بررسی تحلیلگرهای موجود

ابزارهای زیر برای شناسایی آسیب پذیری های امنیتی در برنامه ها استفاده می شود:

  • دیباگرهای پویا ابزارهایی که به شما امکان می دهند یک برنامه را در حین اجرای آن اشکال زدایی کنید.
  • آنالایزرهای استاتیک (اشکال زدایی استاتیک). ابزارهایی که از اطلاعات جمع آوری شده در طول تجزیه و تحلیل استاتیک یک برنامه استفاده می کنند.

آنالایزرهای استاتیک به مکان هایی در برنامه اشاره می کنند که ممکن است یک خطا در آن ها وجود داشته باشد. این کدهای مشکوک ممکن است حاوی خطا باشند یا کاملاً بی ضرر باشند.

این مقاله مروری بر چندین تحلیلگر استاتیک موجود ارائه می دهد. بیایید نگاهی دقیق تر به هر یک از آنها بیندازیم.

1.BON

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

2.CQual

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

3. MOPS

(Model checking Programs for Security) - ابزاری برای جستجوی آسیب پذیری های امنیتی در برنامه های C. هدف آن: تنظیم پویا، اطمینان از انطباق برنامه C با مدل استاتیک. MOPS از یک مدل حسابرسی نرم افزاری استفاده می کند که برای کمک به تعیین اینکه آیا یک برنامه با مجموعه ای از قوانین تعریف شده برای ایجاد برنامه های ایمن مطابقت دارد یا خیر، طراحی شده است.

4. ITS4، RATS، PScan، Flawfinder

تحلیلگرهای استاتیک زیر برای جستجوی خطاهای سرریز بافر و خطاهای رشته ای استفاده می شود:

  1. . ابزار ساده ای که به صورت ایستا کد منبع C/C++ را برای شناسایی آسیب پذیری های امنیتی احتمالی اسکن می کند. این فراخوانی به توابع بالقوه خطرناک، مانند strcpy/memcpy را علامت گذاری می کند، و تجزیه و تحلیل معنایی سطحی را انجام می دهد، تلاش می کند تا میزان خطرناک بودن چنین کدی را ارزیابی کند، و همچنین توصیه هایی در مورد چگونگی بهبود آن ارائه می دهد.
  2. . ابزار RATS (ابزار حسابرسی خشن برای امنیت) کدهای نوشته شده در C/C++ را پردازش می کند و همچنین می تواند اسکریپت ها را در Perl، PHP و Python پردازش کند. RATS کد منبع را اسکن می کند و به دنبال فراخوانی عملکرد بالقوه خطرناک است. هدف این ابزار یافتن قطعی خطا نیست، بلکه نتیجه گیری منطقی است که بر اساس آن یک متخصص می تواند به صورت دستی کد را بررسی کند. RATS از ترکیبی از بررسی‌های امنیتی از بررسی‌های معنایی در ITS4 تا تحلیل معنایی عمیق برای جستجوی نقص‌های سرریز بافر به‌دست‌آمده از MOPS استفاده می‌کند.
  3. . کد منبع C را برای استفاده نادرست از توابع مانند printf اسکن می کند و آسیب پذیری ها را در رشته های قالب شناسایی می کند.
  4. . مانند RATS، یک اسکنر کد منبع ثابت برای برنامه های نوشته شده در C/C++ است. معمولاً توابع مورد سوء استفاده را جستجو می کند، امتیازهای ریسک را به آنها اختصاص می دهد (بر اساس اطلاعاتی مانند پارامترهای تأیید شده)، و فهرستی از آسیب پذیری های احتمالی را جمع آوری می کند و آنها را بر اساس ریسک رتبه بندی می کند.

همه این ابزارها مشابه هستند و فقط از تجزیه واژگانی و پایه استفاده می کنند. بنابراین نتایج تولید شده توسط این برنامه ها می تواند تا 100% حاوی پیام های نادرست باشد.

5. دسته

ابزاری برای تجزیه و تحلیل و تجسم برنامه های C، که یک نمودار وابستگی ایجاد می کند که به حسابرس کمک می کند تا ساختار مدولار برنامه را درک کند.

6. سازمان ملل متحد

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

7. FlexeLint (PC-Lint)

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

در پایان کار، پیام هایی از چند نوع اصلی صادر می شود:

  • اشاره گر تهی ممکن است.
  • مشکلات مربوط به تخصیص حافظه (مثلاً بعد از malloc() free() وجود ندارد).
  • جریان کنترل مشکل ساز (به عنوان مثال، کد غیر قابل دسترس)؛
  • سرریز احتمالی بافر، سرریز حسابی؛
  • هشدارهایی در مورد سبک کد بد و بالقوه خطرناک.

8. Viva64

ابزاری که به متخصصان کمک می کند قطعات بالقوه خطرناک را در کد منبع برنامه های C/C++ مرتبط با انتقال از سیستم های 32 بیتی به سیستم های 64 بیتی ردیابی کنند. Viva64 در محیط Microsoft Visual Studio 2005/2008 تعبیه شده است که کار راحت با این ابزار را تسهیل می کند. آنالایزر به شما کمک می کند تا کدهای صحیح و بهینه را برای سیستم های 64 بیتی بنویسید.

9. تست C++ Parasoft

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

10. پوشش

این ابزار برای شناسایی و تصحیح عیوب ایمنی و کیفیت در برنامه های کاربردی حیاتی استفاده می شود. فن‌آوری Coverity موانعی را برای نوشتن و پیاده‌سازی نرم‌افزارهای پیچیده با تشخیص خودکار و رفع خطاهای مهم نرم‌افزار و نقص‌های امنیتی در طول فرآیند توسعه برطرف می‌کند. ابزار Coverity قادر است ده ها میلیون خط کد را با حداقل خطای مثبت پردازش کند و پوشش ردیابی 100٪ را ارائه دهد.

11. KlocWork K7

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

12. Frama-C

مجموعه ای باز و یکپارچه از ابزارها برای تجزیه و تحلیل کد منبع در زبان C. این مجموعه شامل ACSL (زبان مشخصات ANSI/ISO C) است - یک زبان ویژه که به شما امکان می دهد مشخصات توابع C را با جزئیات توصیف کنید، به عنوان مثال، محدوده مقادیر ورودی معتبر یک تابع و محدوده خروجی عادی را مشخص کنید. ارزش های.

این جعبه ابزار به شما کمک می کند تا کارهای زیر را انجام دهید:

  • انجام بررسی رسمی کد؛
  • به دنبال خطاهای بالقوه اجرا باشید.
  • انجام ممیزی یا بررسی کد؛
  • انجام مهندسی معکوس کد برای بهبود درک ساختار.
  • ایجاد اسناد رسمی

13. CodeSurfer

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

  • تحلیل اشاره گر؛
  • تجزیه و تحلیل جریان داده های مختلف (استفاده و تعریف متغیرها، وابستگی داده ها، ساخت گراف فراخوانی)؛
  • زبان اسکریپت.

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

14. FxCop

ابزاری برای بررسی خودکار مجموعه‌های NET برای مطابقت با دستورالعمل‌های طراحی فریم‌ورک مایکروسافت دات‌نت فراهم می‌کند. کد کامپایل شده با استفاده از مکانیسم های بازتاب، تجزیه MSIL و تجزیه و تحلیل گراف فراخوانی بررسی می شود. در نتیجه، FxCop قادر است بیش از 200 نقص (یا خطا) را در مناطق زیر شناسایی کند:

  • معماری کتابخانه;
  • بومی سازی؛
  • قوانین نامگذاری؛
  • کارایی؛
  • ایمنی.

FxCop توانایی ایجاد قوانین خود را با استفاده از یک SDK خاص فراهم می کند. FxCop می تواند در یک رابط کاربری گرافیکی یا در خط فرمان اجرا شود.

15. JavaChecker

این یک تحلیلگر برنامه جاوا استاتیک بر اساس فناوری TermWare است.

این ابزار به شما اجازه می دهد تا عیوب کد مانند:

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

مجموعه چک ها را می توان با استفاده از نظرات کنترل کنترل کرد.

JavaChecker را می توان از یک اسکریپت ANT فراخوانی کرد.

16. سیمیان

یک تحلیلگر شباهت که به دنبال سینتکس مکرر در چندین فایل به طور همزمان می گردد. این برنامه سینتکس زبان های برنامه نویسی مختلف از جمله C#، T-SQL، JavaScript و Visual BasicR را درک می کند و همچنین می تواند قطعات تکرار شده را در فایل های متنی جستجو کند. چندین گزینه سفارشی سازی به شما امکان می دهد قوانین جستجوی کد تکراری خود را به خوبی تنظیم کنید. به عنوان مثال، پارامتر آستانه تعیین می کند که چند خط کد تکراری تکراری در نظر گرفته می شوند.

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

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

نتیجه

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

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

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

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

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

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

مشکلات حل شده توسط برنامه های تحلیل کد استاتیک را می توان به 3 دسته تقسیم کرد:

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

سایر مزایای تجزیه و تحلیل کد استاتیک:

  1. پوشش کامل کد آنالایزرهای استاتیک حتی قطعات کدهایی را که کنترل را به ندرت دریافت می کنند، بررسی می کنند. چنین بخش های کد، به عنوان یک قاعده، نمی توانند با روش های دیگر آزمایش شوند. این به شما این امکان را می‌دهد که نقص‌ها را در کنترل‌کننده‌های رویداد نادر، کنترل‌کننده‌های خطا یا سیستم گزارش‌گیری پیدا کنید.
  2. تجزیه و تحلیل استاتیک مستقل از کامپایلر مورد استفاده و محیطی است که برنامه کامپایل شده در آن اجرا خواهد شد. این به شما امکان می دهد خطاهای پنهانی را پیدا کنید که ممکن است تنها پس از چند سال ظاهر شوند. به عنوان مثال، اینها خطاهای رفتاری تعریف نشده هستند. چنین خطاهایی ممکن است هنگام تغییر نسخه کامپایلر یا هنگام استفاده از سوییچ های دیگر برای بهینه سازی کد ظاهر شوند. مثال جالب دیگری از خطاهای پنهان در مقاله "بازنویسی حافظه - چرا؟" آورده شده است.
  3. شما به راحتی و به سرعت می توانید اشتباهات تایپی و عواقب استفاده از Copy-Paste را تشخیص دهید. به عنوان یک قاعده، یافتن این خطاها از راه های دیگر، اتلاف وقت و تلاش بی اثر است. حیف است بعد از یک ساعت اشکال زدایی متوجه شوید که خطا در عبارتی مانند "strcmp(A, A)" است. هنگام بحث در مورد خطاهای معمولی، معمولاً به چنین اشتباهاتی اشاره نمی شود. اما در عمل زمان قابل توجهی برای شناسایی آنها صرف می شود.

معایب تجزیه و تحلیل کد استاتیک

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

خطاهای شناسایی شده توسط آنالایزرهای استاتیک بسیار متنوع هستند. به عنوان مثال، در اینجا لیستی از عیب یابی است که در ابزار PVS-Studio پیاده سازی شده است. برخی از آنالیزورها در یک ناحیه خاص یا نوع نقص تخصص دارند. برخی دیگر از استانداردهای کدگذاری خاصی پشتیبانی می کنند، به عنوان مثال MISRA-C:1998، MISRA-C:2004، قوانین Sutter-Alexandrescu، قوانین Meyers-Klaus و غیره.

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

معرفی

قابلیت های استاندارد محصولات نرم افزاری و سیستم های کنترل مختلف برای اکثر مشتریان ناکافی است. سیستم های مدیریت وب سایت (به عنوان مثال، وردپرس، جوملا یا Bitrix)، برنامه های حسابداری، سیستم های مدیریت مشتری (CRM)، سازمانی و تولید (به عنوان مثال، 1C و SAP) فرصت های زیادی را برای گسترش عملکرد و انطباق با نیازهای مشتریان خاص فراهم می کنند. چنین قابلیت هایی با استفاده از ماژول های شخص ثالث سفارشی یا سفارشی سازی ماژول های موجود پیاده سازی می شوند. این ماژول ها کد برنامه ای هستند که در یکی از زبان های برنامه نویسی داخلی نوشته شده اند که با سیستم در تعامل بوده و عملکرد مورد نیاز مشتریان را پیاده سازی می کند.

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

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

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

برای حل مشکل ممیزی کد منبع و ایجاد محافظت در برابر سوء استفاده از آسیب پذیری ها در کدهای تعبیه شده و برنامه های کاربردی وب، تحلیلگرهای کد منبع وجود دارد.

طبقه بندی تحلیلگرهای کد منبع

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

  • گروه اول شامل تحلیلگرهای کد برنامه های کاربردی وب و ابزارهایی برای جلوگیری از سوء استفاده از آسیب پذیری های وب سایت است.
  • گروه دوم تحلیلگرهای کد تعبیه شده است که به شما امکان می دهد مناطق مشکل را در کد منبع ماژول های طراحی شده برای گسترش عملکرد سیستم های شرکتی و تولیدی شناسایی کنید. چنین ماژول هایی شامل برنامه هایی برای خط تولید 1C، ​​توسعه سیستم های CRM، سیستم های مدیریت سازمانی و سیستم های SAP هستند.
  • آخرین گروه برای تجزیه و تحلیل کد منبع در زبان های برنامه نویسی مختلف طراحی شده است که به برنامه های کاربردی تجاری و برنامه های کاربردی وب مرتبط نیستند. چنین تحلیلگرهایی برای مشتریان و توسعه دهندگان نرم افزار در نظر گرفته شده است. این گروه از تحلیلگرها همچنین برای استفاده از متدولوژی توسعه نرم افزار ایمن استفاده می شوند. تحلیلگرهای کد استاتیک مشکلات و آسیب پذیری های احتمالی را در کدهای منبع پیدا کرده و توصیه هایی برای حذف آنها ارائه می دهند.

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

آنالایزرها ممکن است دارای مکانیزم های تحلیل مختلفی باشند، اما رایج ترین و جهانی ترین آن، تجزیه و تحلیل استاتیک کد منبع است - SAST (Static Application Security Test)، همچنین روش های تجزیه و تحلیل پویا - DAST (تست امنیت برنامه پویا) وجود دارد که در حین اجرای آن، کد را بررسی می کند. و گزینه های هیبریدی مختلف که انواع مختلفی از آنالیزها را ترکیب می کنند. تجزیه و تحلیل پویا یک روش تأیید مستقل است که می تواند قابلیت های تجزیه و تحلیل استاتیک را گسترش دهد یا در مواردی که دسترسی به کدهای منبع در دسترس نیست به طور مستقل مورد استفاده قرار گیرد. این بررسی فقط تحلیلگرهای استاتیک را پوشش می دهد.

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

اصول عملیاتی تحلیلگرهای کد منبع

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

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

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

شکل 1. الگوریتم تحلیلگر کد منبع

هنگام ارزیابی کدهای منبع، تحلیلگرها از پایگاه داده های مختلفی که حاوی توضیحاتی از آسیب پذیری ها و خطاهای برنامه نویسی هستند استفاده می کنند:

  • پایگاه داده اختصاصی آسیب‌پذیری‌ها و خطاهای برنامه‌نویسی - هر توسعه‌دهنده تحلیل‌گر کد منبع دارای بخش‌های تجزیه و تحلیل و تحقیقات خاص خود است که پایگاه‌های داده تخصصی را برای تجزیه و تحلیل کدهای منبع برنامه آماده می‌کند. کیفیت پایگاه داده خود یکی از معیارهای کلیدی است که بر کیفیت کلی محصول تأثیر می گذارد. علاوه بر این، پایگاه داده خود شما باید پویا و دائماً به روز شود - بردارهای جدید حملات و سوء استفاده از آسیب پذیری ها و همچنین تغییرات در زبان های برنامه نویسی و روش های توسعه نیاز به توسعه دهندگان تحلیلگر دارد که به طور مداوم پایگاه داده را به روز کنند تا اسکن با کیفیت بالا حفظ شود. محصولات با پایگاه داده ایستا و غیر به روز اغلب در آزمایش های مقایسه ای ضرر می کنند.
  • پایگاه های داده ایالتی خطاهای برنامه نویسی - تعدادی پایگاه داده ایالتی از آسیب پذیری ها وجود دارد که جمع آوری و پشتیبانی از آنها توسط تنظیم کننده ها در کشورهای مختلف انجام می شود. به عنوان مثال، در ایالات متحده آمریکا از پایگاه داده CWE - Common Weakness Enumeration استفاده می شود که توسط سازمان MITER نگهداری می شود، که در میان سایر موارد، توسط وزارت دفاع ایالات متحده پشتیبانی می شود. روسیه هنوز پایگاه داده مشابهی ندارد، اما در آینده FSTEC روسیه قصد دارد پایگاه داده آسیب پذیری و تهدید خود را با پایگاه داده ای در مورد خطاهای برنامه نویسی تکمیل کند. تجزیه‌کننده‌های آسیب‌پذیری، پشتیبانی از پایگاه داده CWE را با ادغام آن در پایگاه داده آسیب‌پذیری خود یا استفاده از آن به عنوان مکانیزم تأیید جداگانه اجرا می‌کنند.
  • الزامات استاندارد و توصیه هایی برای برنامه نویسی ایمن - تعدادی از استانداردهای دولتی و صنعتی وجود دارد که الزامات توسعه برنامه ایمن را توصیف می کند، همچنین تعدادی توصیه و "بهترین شیوه" از کارشناسان جهانی در زمینه توسعه نرم افزار و امنیت. این اسناد برخلاف CWE مستقیماً خطاهای برنامه نویسی را توصیف نمی کنند، اما حاوی لیستی از روش هایی هستند که می توانند برای استفاده در یک تحلیلگر کد منبع استاتیک تبدیل شوند.

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

بازار جهانی

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

در Gartner Magic Quadrant 2015، پیشتازان بازار تست امنیتی HP، Veracode و IBM هستند. در عین حال، Veracode تنها شرکت پیشرو است که تحلیلگر به عنوان محصول نرم افزاری ندارد و عملکرد آن تنها به عنوان یک سرویس در ابر Veracode ارائه می شود. بقیه شرکت‌های پیشرو یا منحصراً محصولاتی را ارائه می‌دهند که روی رایانه‌های کاربر بررسی می‌کنند، یا امکان انتخاب بین یک محصول و یک سرویس ابری را دارند. HP و IBM در پنج سال گذشته همچنان رهبران بازار جهانی باقی مانده اند؛ مروری بر محصولات آنها در زیر ارائه شده است. نزدیکترین محصول به موقعیت پیشرو، محصول Checkmarx است که فقط در این دسته از محصولات تخصص دارد، بنابراین در بررسی نیز گنجانده شده است.

شکل 2. ربع جادویی برای تحلیلگرانگارتنر در مورد بازیگران بازار تحلیل امنیت اپلیکیشن در آگوست 2015

طبق گزارش تحلیلگران ReportsnReports، در ایالات متحده، اندازه بازار تحلیلگر کد منبع در سال 2014 به 2.5 میلیارد دلار رسید؛ تا سال 2019، افزایش دو برابری به 5 میلیارد دلار با رشد سالانه 14.9 درصد پیش بینی می شود. بیش از 50 درصد از سازمان هایی که برای این گزارش مورد بررسی قرار گرفتند، قصد دارند بودجه ای را برای تجزیه و تحلیل کد منبع برای توسعه سفارشی اختصاص دهند و افزایش دهند و تنها 3 درصد در مورد استفاده از این محصولات منفی صحبت کردند.

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

بازار روسیه

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

برجسته ترین بازیگران در بازار جدید Positive Technologies، InfoWatch و Solar Security هستند. Positive Technologies مدت‌هاست که در یافتن و تحلیل آسیب‌پذیری‌ها تخصص داشته‌اند. نمونه کارها آنها شامل محصول MaxPatrol است که یکی از رهبران بازار داخلی در نظارت بر امنیت خارجی است، بنابراین تعجب آور نیست که این شرکت تصمیم گرفت در تجزیه و تحلیل داخلی شرکت کند و تحلیلگر کد منبع خود را توسعه دهد. InfoWatch به عنوان یک توسعه دهنده سیستم های DLP توسعه یافت و در نهایت به گروهی از شرکت ها تبدیل شد که در جستجوی جایگاه های جدید بازار بودند. در سال 2012، Appercut بخشی از InfoWatch شد و یک ابزار تجزیه و تحلیل کد منبع را به مجموعه InfoWatch اضافه کرد. سرمایه گذاری و تجربه InfoWatch به ما این امکان را داد که به سرعت محصول را به سطح بالایی توسعه دهیم. Solar Security به طور رسمی محصول Solar inCode خود را در پایان اکتبر 2015 معرفی کرد، اما در حال حاضر در زمان انتشار آنها چهار استقرار رسمی در روسیه داشتند.

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

یکی دیگر از بازیگران برجسته در بازار روسیه، Digital Security است که یک شرکت مشاوره در زمینه امنیت اطلاعات است. او با داشتن تجربه گسترده در ممیزی و پیاده‌سازی سیستم‌های ERP، جایگاه خالی پیدا کرد و شروع به توسعه محصولی برای تجزیه و تحلیل امنیت سیستم‌های ERP کرد که در میان سایر عملکردها، مکانیسم‌هایی برای تجزیه و تحلیل کدهای منبع برای برنامه‌های تعبیه‌شده داشت.

مروری کوتاه بر تحلیلگرها

اولین ابزار تجزیه و تحلیل کد منبع در بررسی ما محصولی از Fortify است که از سال 2010 متعلق به شرکت Hewlett-Packard است. خط HP Fortify شامل محصولات مختلفی برای تجزیه و تحلیل کدهای برنامه است: یک سرویس SaaS Fortify On-Demand وجود دارد که شامل آپلود کد منبع در ابر HP است و یک برنامه کامل HP Fortify Static Code Analyzer که در زیرساخت مشتری نصب شده است.

HP Fortify Static Code Analyzer از طیف گسترده‌ای از زبان‌ها و پلتفرم‌های برنامه‌نویسی، از جمله برنامه‌های کاربردی وب نوشته شده در PHP، Python، Java/JSP، ASP.Net و JavaScript و کدهای جاسازی شده در ABAP (SAP)، Action Script و VBScript پشتیبانی می‌کند.

شکل 3. رابط HP Fortify Static Code Analyzer

در میان ویژگی‌های محصول، شایان ذکر است که در HP Fortify Static Code Analyzer پشتیبانی از یکپارچه‌سازی با سیستم‌های مدیریت توسعه مختلف و ردیابی خطا وجود دارد. اگر توسعه‌دهنده کد دسترسی مشتری را به گزارش مستقیم باگ به Bugzilla، HP Quality Center یا Microsoft TFS فراهم کند، آنالیزور می‌تواند بدون نیاز به مداخله دستی، گزارش‌های اشکال را به طور خودکار در آن سیستم‌ها ایجاد کند.

عملکرد محصول بر اساس پایگاه های دانش خود HP Fortify است که با تطبیق پایگاه داده CWE شکل گرفته است. این محصول تجزیه و تحلیل را برای برآوردن الزامات توصیه های DISA STIG، FISMA، PCI DSS و OWASP پیاده سازی می کند.

از معایب HP Fortify Static Code Analyzer، باید به عدم بومی سازی محصول برای بازار روسیه اشاره کرد - رابط کاربری و گزارش ها به زبان انگلیسی هستند، کمبود مواد و مستندات برای محصول به زبان روسی، تجزیه و تحلیل موارد تعبیه شده کد 1C و سایر محصولات داخلی در سطح سازمانی پشتیبانی نمی شود.

مزایای آنالیز کد استاتیک HP Fortify:

  • نام تجاری معروف، راه حل با کیفیت بالا؛
  • فهرست بزرگی از زبان های برنامه نویسی تحلیل شده و محیط های توسعه پشتیبانی شده؛
  • در دسترس بودن ادغام با سیستم های مدیریت توسعه و سایر محصولات HP Fortify.
  • پشتیبانی از استانداردهای بین المللی، توصیه ها و "بهترین شیوه ها".

Checkmarx CxSAST ابزاری از شرکت آمریکایی-اسرائیلی Checkmarx است که متخصص در توسعه تحلیلگرهای کد منبع است. این محصول در درجه اول برای تجزیه و تحلیل نرم افزارهای معمولی در نظر گرفته شده است، اما به دلیل پشتیبانی از زبان های برنامه نویسی PHP، Python، JavaScript، Perl و Ruby، برای آنالیز برنامه های تحت وب بسیار عالی است. Checkmarx CxSAST یک آنالایزر جهانی است که هیچ ویژگی مشخصی ندارد و بنابراین برای استفاده در هر مرحله از چرخه عمر محصول نرم افزار - از توسعه تا کاربرد مناسب است.

شکل 4. واسط Checkmarx CxSAST

Checkmarx CxSAST پشتیبانی از پایگاه داده خطای کد CWE را اجرا می کند، از بررسی انطباق با توصیه های OWASP و SANS 25، PCI DSS، HIPAA، MISRA، FISMA و استانداردهای BSIMM پشتیبانی می کند. تمام مشکلات شناسایی شده توسط Checkmarx CxSAST بر اساس سطح ریسک - از جزئی تا بحرانی - تقسیم می شوند. از جمله ویژگی های محصول وجود توابعی برای تجسم کد با ساخت بلوک دیاگرام مسیرهای اجرا و توصیه هایی برای اصلاح مشکلات مربوط به اتصال به نمودار گرافیکی است.

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

مزایای Checkmarx CxSAST:

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

محصول دیگری از یک فروشنده معروف، تحلیلگر کد منبع IBM Security AppScan است. خط AppScan شامل بسیاری از محصولات مرتبط با توسعه نرم‌افزار ایمن است، اما محصولات باقی‌مانده برای استفاده از کد نرم‌افزار با مشتریان مناسب نیستند، زیرا عملکردهای غیرضروری زیادی دارند. منبع امنیتی IBM AppScan، مانند Checkmarx CxSAST، در درجه اول برای سازمان های توسعه در نظر گرفته شده است، در حالی که حتی از زبان های توسعه وب کمتری پشتیبانی می کند - فقط PHP، Perl و جاوا اسکریپت. زبان های برنامه نویسی برای کدهای تعبیه شده در برنامه های تجاری پشتیبانی نمی شوند.

شکل 5. رابط منبع امنیت IBM AppScan

IBM Security AppScan Source به شدت با پلتفرم توسعه IBM Rational ادغام می شود، بنابراین این محصول اغلب در مرحله توسعه و آزمایش محصولات نرم افزاری مورد استفاده قرار می گیرد و برای انجام پذیرش یا تأیید یک برنامه سفارشی مناسب نیست.

یکی از ویژگی‌های خاص IBM Security AppScan Source این است که از تجزیه و تحلیل برنامه برای IBM Worklight پشتیبانی می‌کند، پلتفرمی برای برنامه‌های تجاری موبایل. لیست استانداردها و الزامات پشتیبانی شده اندک است - PCI DSS و توصیه های DISA و OWASP، پایگاه داده آسیب پذیری مشکلات یافت شده با CWE را مقایسه می کند.

هیچ مزیت خاصی از این راه حل برای مشتریان توسعه شناسایی نشده است.

AppChecker از شرکت داخلی NPO Eshelon CJSC راه حلی است که اخیراً در بازار ظاهر شده است. اولین نسخه این محصول تنها یک سال پیش منتشر شد، اما باید تجربه شرکت Echelon را در تجزیه و تحلیل کد برنامه در نظر گرفت. "NPO Eshelon" یک آزمایشگاه تست FSTEC، FSB و وزارت دفاع فدراسیون روسیه است و دارای تجربه گسترده در زمینه تجزیه و تحلیل استاتیک و پویا کدهای منبع برنامه است.

شکل 6. رابط AppChecker "Echelon".

AppChecker برای تجزیه و تحلیل انواع نرم افزارها و برنامه های کاربردی وب نوشته شده در PHP، جاوا و C/C++ طراحی شده است. به طور کامل از طبقه بندی آسیب پذیری CWE پشتیبانی می کند و توصیه های OWASP، CERT و NISP را در نظر می گیرد. این محصول را می توان برای انجام ممیزی برای مطابقت با الزامات PCI DSS و استاندارد بانک روسیه IBBS-2.6-2014 مورد استفاده قرار داد.

کاستی های محصول به دلیل مراحل اولیه توسعه راه حل است - پشتیبانی کافی از زبان های محبوب توسعه وب و توانایی تجزیه و تحلیل کدهای تعبیه شده وجود ندارد.

مزایای:

  • توانایی انجام ممیزی بر اساس الزامات داخلی و PCI DSS؛
  • با در نظر گرفتن تأثیر ویژگی های زبان برنامه نویسی به دلیل پیکربندی انعطاف پذیر پروژه های تجزیه و تحلیل شده؛
  • کم هزینه.

PT Application Inspector محصولی از توسعه‌دهنده روسی Positive Technologies است که با رویکرد خود برای حل مشکل تجزیه و تحلیل کد منبع متمایز است. هدف اصلی PT Application Inspector، یافتن آسیب‌پذیری‌ها در کد است، نه شناسایی خطاهای نرم‌افزار رایج.

برخلاف همه محصولات دیگر در این بررسی، PT Application Inspector نه تنها توانایی تولید گزارش و نشان دادن آسیب‌پذیری‌ها را دارد، بلکه توانایی ایجاد خودکار اکسپلویت برای دسته‌ها و انواع آسیب‌پذیری‌ها را نیز دارد - ماژول‌های اجرایی کوچکی که از آسیب‌پذیری‌های یافت شده سوءاستفاده می‌کنند. با استفاده از اکسپلویت های ایجاد شده، می توانید به طور عملی خطر آسیب پذیری های یافت شده را بررسی کنید و همچنین با بررسی عملکرد اکسپلویت پس از بسته شدن اعلام شده آسیب پذیری، توسعه دهنده را کنترل کنید.

شکل 7. رابط بازرس برنامه PT

PT Application Inspector از هر دو زبان توسعه برنامه های کاربردی وب (PHP، جاوا اسکریپت) و کدهای جاسازی شده برای برنامه های تجاری - SAP ABAP، SAP Java، Oracle EBS Java، Oracle EBS PL/SQL پشتیبانی می کند. PT Application Inspector همچنین از تجسم مسیرهای اجرای برنامه پشتیبانی می کند.

PT Application Inspector یک راه حل یک مرحله ای برای توسعه دهندگان و مشتریانی است که برنامه های کاربردی وب سفارشی و پلاگین های کاربردی تجاری را اجرا می کنند. پایگاه داده آسیب پذیری ها و خطاها در کد برنامه شامل پیشرفت های خود Positive Technologies، پایگاه داده CWE و WASC (پایگاه داده آسیب پذیری کنسرسیوم وب، آنالوگ CWE برای برنامه های کاربردی وب) است.

استفاده از PT Application Inspector به شما امکان می دهد الزامات استانداردهای PCI DSS، STO BR IBBS، و همچنین هفدهمین سفارش FSTEC و الزامات عدم وجود قابلیت های اعلام نشده (مرتبط با صدور گواهینامه کد) را برآورده کنید.

مزایای:

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

InfoWatch Appercut توسط شرکت روسی InfoWatch توسعه یافته است. تفاوت اصلی این محصول با سایر محصولات موجود در این مجموعه، تخصص آن در ارائه خدمات به مشتریان اپلیکیشن های تجاری است.

InfoWatch Appercut تقریباً از تمام زبان های برنامه نویسی که برنامه های وب در آنها ایجاد می شوند (جاوا اسکریپت، پایتون، PHP، روبی) و ماژول های داخلی برای پیشنهادات تجاری - 1C، ABAP، X++ (ERP Microsoft Axapta)، جاوا، Lotus Script پشتیبانی می کند. InfoWatch Appercut توانایی تطبیق با ویژگی های یک برنامه خاص و منحصر به فرد بودن فرآیندهای تجاری هر شرکت را دارد.

شکل 8. رابط Appercut InfoWatch

InfoWatch Appercut از بسیاری از الزامات برای برنامه نویسی موثر و ایمن پشتیبانی می کند، از جمله الزامات عمومی PCI DSS و HIPPA، توصیه ها و "بهترین شیوه ها" CERT و OWAST، و همچنین توصیه هایی از تولید کنندگان پلت فرم فرآیندهای تجاری - 1C، SAP، Oracle، Microsoft.

مزایای:

  • محصول داخلی، محلی، دارای گواهی FSTEC روسیه؛
  • تنها محصولی که از تمام پلتفرم های تجاری محبوب در روسیه، از جمله 1C، SAP، Oracle EBS، IBM Collaboration Solutions (Lotus) و Microsoft Axapta پشتیبانی می کند.
  • یک اسکنر سریع که بررسی ها را در چند ثانیه انجام می دهد و فقط می تواند کدهای تغییر یافته و قطعات کد را بررسی کند.

Digital Security ERPScan محصولی تخصصی برای تجزیه و تحلیل و نظارت بر امنیت سیستم های تجاری ساخته شده بر روی محصولات SAP است که اولین نسخه آن در سال 2010 منتشر شد. علاوه بر ماژول برای تجزیه و تحلیل تنظیمات، آسیب پذیری ها و کنترل دسترسی (SOD)، ERPScan شامل یک ماژول برای ارزیابی امنیت کد منبع است که عملکردهای جستجوی نشانک ها، تماس های مهم، آسیب پذیری ها و خطاهای برنامه نویسی در کد را در ABAP پیاده سازی می کند. و زبان های برنامه نویسی جاوا در عین حال، این محصول ویژگی‌های پلتفرم SAP را در نظر می‌گیرد، آسیب‌پذیری‌های شناسایی شده در کد را با تنظیمات پیکربندی و حقوق دسترسی مرتبط می‌کند و تجزیه و تحلیل را بهتر از محصولات غیر تخصصی که با زبان‌های برنامه‌نویسی مشابه کار می‌کنند، انجام می‌دهد.

شکل 9. رابط ERPScan امنیت دیجیتال

ویژگی های اضافی ERPScan شامل توانایی تولید خودکار وصله ها برای آسیب پذیری های شناسایی شده و همچنین تولید امضا برای حملات احتمالی و آپلود این امضاها در سیستم های تشخیص نفوذ و پیشگیری (با مشارکت CISCO) است. علاوه بر این، سیستم دارای مکانیسم‌هایی برای ارزیابی عملکرد کدهای تعبیه‌شده است که برای برنامه‌های تجاری بسیار مهم است، زیرا عملکرد آهسته ماژول‌های اضافی می‌تواند به طور جدی بر فرآیندهای تجاری در سازمان تأثیر بگذارد. این سیستم همچنین از تجزیه و تحلیل مطابق با توصیه های خاص برای تجزیه و تحلیل کد برنامه های تجاری، مانند EAS-SEC و BIZEC، و همچنین توصیه های عمومی PCI DSS و OWASP پشتیبانی می کند.

مزایای:

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

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

Solar inCode به شما امکان می دهد کد منبع نوشته شده در زبان های برنامه نویسی Java، Scala، Java for Android، PHP و Objective C را تجزیه و تحلیل کنید. بر خلاف اکثر رقبا، لیست زبان های برنامه نویسی پشتیبانی شده شامل ابزارهای توسعه برای پلتفرم های موبایل اندروید و iOS است. .

شکل 10. رابط

در مواردی که کد منبع در دسترس نیست، Solar inCode امکان تجزیه و تحلیل برنامه های آماده را فراهم می کند، این قابلیت از برنامه های کاربردی وب و برنامه های تلفن همراه پشتیبانی می کند. به طور خاص، برای برنامه های تلفن همراه، فقط باید پیوند برنامه را از Google Play یا Apple Store در اسکنر کپی کنید، برنامه به طور خودکار دانلود، دیکامپایل و بررسی می شود.

استفاده از Solar inCode به شما امکان می دهد با الزامات استانداردهای PCI DSS، STO BR IBBS، و همچنین هفدهمین سفارش FSTEC و الزامات عدم وجود قابلیت های اعلام نشده (مرتبط با صدور گواهینامه کد) مطابقت داشته باشید.

مزایای:

  • پشتیبانی از تجزیه و تحلیل برنامه های کاربردی برای دستگاه های تلفن همراه دارای Android و iOS.
  • از تجزیه و تحلیل برنامه های کاربردی وب و برنامه های تلفن همراه بدون استفاده از کد منبع برنامه ها پشتیبانی می کند.
  • نتایج تجزیه و تحلیل را در قالب توصیه های خاص برای از بین بردن آسیب پذیری ها ارائه می دهد.
  • توصیه های دقیق برای راه اندازی ابزارهای امنیتی ایجاد می کند: SIEM، WAF، FW، NGFW.
  • با پشتیبانی از کار با مخازن کد منبع به راحتی در فرآیند توسعه نرم افزار امن ادغام می شود.

نتیجه گیری

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

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

در این بررسی، پیشرو واضح در بین محصولات خارجی از نظر پشتیبانی از زبان برنامه نویسی و کیفیت اسکن، راه حل HP Fortify Static Code Analyzer است. Checkmarx CxSAST نیز محصول خوبی است، اما فقط می تواند برنامه های معمولی و برنامه های کاربردی وب را تجزیه و تحلیل کند؛ این محصول از افزونه ها برای برنامه های تجاری پشتیبانی نمی کند. راه حل IBM Security AppScan Source در مقایسه با رقبای خود کسل کننده به نظر می رسد و در عملکرد و کیفیت بررسی ها تفاوتی ندارد. با این حال، این محصول برای کاربران تجاری در نظر گرفته نشده است و هدف آن استفاده در شرکت های توسعه است، جایی که می تواند موثرتر از رقبای خود باشد.

در میان محصولات روسی، تشخیص یک رهبر واضح دشوار است؛ بازار با سه محصول اصلی - InfoWatch Appercut، PT Application Inspector و Solar inCode نشان داده شده است. در عین حال، این محصولات از نظر فناوری به طور قابل توجهی متفاوت هستند و برای مخاطبان هدف مختلف در نظر گرفته شده اند - اولین مورد از پلتفرم های کاربردی تجاری بیشتری پشتیبانی می کند و به دلیل جستجوی آسیب پذیری ها منحصراً با استفاده از روش های تجزیه و تحلیل استاتیک سریعتر است. دومی ترکیبی از تجزیه و تحلیل استاتیک و پویا و همچنین ترکیبی از آنها است که در کنار بهبود کیفیت اسکن، منجر به افزایش زمان بررسی کد منبع می شود. هدف سوم حل مشکلات کاربران تجاری و متخصصان امنیت اطلاعات است و همچنین به شما امکان می دهد برنامه ها را بدون دسترسی به کد منبع آزمایش کنید.

AppChecker "Echelon" هنوز به اندازه رقبای خود عمل نمی کند و دارای مجموعه ای از عملکردهای کوچک است، اما با توجه به مراحل اولیه توسعه محصول، کاملاً ممکن است که در آینده نزدیک مقام های برتر را در رتبه بندی منبع کسب کند. تحلیلگرهای کد

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

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

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

کامپایلرهای مدرن

ممکن است خنده دار به نظر برسد، اما یکی از موثرترین آنالیزورها
کد
خود کامپایلرها هستند. البته، آنها به طور کامل برای
دیگری، اما به عنوان یک امتیاز، هر یک از آنها یک تأیید کننده خوب ارائه می دهد
کدهای منبع، قادر به تشخیص تعداد زیادی خطا. چرا او نمی کند
ذخیره می کند؟ در ابتدا، تنظیمات برای چنین تأیید کد به اندازه کافی تنظیم شده است
loyal: در نتیجه برای اینکه برنامه نویس گیج نشود کامپایلر شروع می شود
فقط در صورت جدی ترین اشتباهات قسم بخورید. اما بیهوده - اگر قرار دهید
سطح هشدارها بالاتر است، حفر مکان های مشکوک کاملاً امکان پذیر است
در کد چیزی شبیه این به نظر می رسد. بیایید بگوییم که یک نقص در کد وجود دارد
بررسی طول یک رشته قبل از کپی کردن آن در بافر. اسکنر عملکرد را پیدا می کند،
کپی کردن یک رشته (یا قطعه ای از آن) در یک بافر با اندازه ثابت بدون
بررسی اولیه طول آن او مسیر انتقال را ردیابی می کند
آرگومان ها: از داده های ورودی تا تابع آسیب پذیر و به نظر می رسد: آیا امکان پذیر است
طول رشته ای را انتخاب کنید که باعث سرریز شدن در آسیب پذیر شود
عمل می کند و با چک های قبل از آن قطع نمی شود. در این صورت
هیچ بررسی وجود ندارد، ما تقریباً 100٪ سرریز بافر را پیدا می کنیم. مشکل اصلی این است
برای آزمایش کامپایلر استفاده می شود - کاری کنید که کد شخص دیگری را "بلع" کند.
اگر تا به حال سعی کرده اید برنامه ای را از منبع کامپایل کنید، پس می دانید
ارضای همه وابستگی ها، به خصوص در پروژه های بزرگ چقدر دشوار است. ولی
نتیجه ارزش آن را دارد! علاوه بر این، علاوه بر کامپایلر، IDE های قدرتمند نیز دارای داخلی هستند
برخی وسایل دیگر برای تجزیه و تحلیل کد. به عنوان مثال، در مورد بعدی
بخش کد در ویژوال استودیو هشداری در مورد استفاده در آن صادر می کند
حلقه تابع _alloca، که می تواند به سرعت پشته را سرریز کند:

char *b;
انجام دادن (
b = (char*)_alloca(9)
) while (1)

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

RATS - ابزار حسابرسی خشن برای امنیت

وب سایت: www.securesoftware.com
مجوز: GNU GPL
پلتفرم: یونیکس، ویندوز
زبان ها: C++، PHP، Python، Ruby

خطا به خطا - اختلاف. برخی از اشتباهاتی که برنامه نویسان مرتکب می شوند عبارتند از
غیر انتقادی است و فقط بی ثباتی برنامه را تهدید می کند. دیگران، برعکس،
به شما امکان می دهد کد پوسته را تزریق کنید و دستورات دلخواه را از راه دور اجرا کنید
سرور به خصوص در کدها دستوراتی خطرناک هستند که به شما اجازه می دهند بافر را اجرا کنید
سرریز و سایر انواع مشابه حملات. این دستورات در مورد C/C++ بسیار زیاد است
اینها توابعی برای کار با رشته ها هستند (xstrcpy()، strcat()، gets()، sprintf()،
printf()، snprintf()، syslog())، دستورات سیستم (access()، chown()، chgrp()،
chmod()، tmpfile()، tmpnam()، tempnam()، mktemp())، و همچنین دستورات سیستم
فراخوانی (exec()، system()، popen()). تمام کدها را به صورت دستی بررسی کنید (مخصوصا
اگر از چندین هزار خط تشکیل شده باشد) بسیار خسته کننده است. به این معنی که امکان پذیر است
نادیده گرفتن انتقال پارامترهای بدون علامت به برخی از عملکردها آسان است.
ابزارهای حسابرسی ویژه می توانند این کار را تا حد زیادی تسهیل کنند، از جمله
ابزار معروف موش ها (ابزار حسابرسی خشن برای امنیت) از جانب
شرکت معروف Fortify او نه تنها پردازش کد را با موفقیت انجام می دهد،
نوشته شده در C/C++، اما همچنین می تواند اسکریپت ها را در Perl، PHP و Python پردازش کند.
پایگاه داده ابزار شامل یک انتخاب چشمگیر با شرح مفصلی از مشکل است
مکان های موجود در کد او با کمک یک آنالایزر، خاکشیر را که به او خورده است پردازش می کند
سعی خواهد کرد اشکالات را شناسایی کند، پس از آن اطلاعاتی در مورد نقص های یافت شده ارائه می دهد.
موش ها
از طریق خط فرمان، هر دو تحت سیستم های ویندوز و * nix کار می کند.

یاسکا

وب سایت: www.yasca.org
مجوز: متن باز
پلتفرم: یونیکس، ویندوز
زبان ها: C++، جاوا، دات نت، ASP، Perl، PHP، Python و دیگران.

یاسکادرست مثل RATS نیازی به نصب ندارد و ندارد
فقط یک رابط کنسول، بلکه یک رابط کاربری گرافیکی ساده. توسعه دهندگان توصیه می کنند
برنامه را از طریق کنسول اجرا کنید - آنها می گویند، به این ترتیب امکانات بیشتری وجود دارد. خنده داره چی
موتور یاسکا با PHP 5.2.5 نوشته شده است و مفسر (در ساده‌ترین نسخه آن)
گزینه) در یکی از زیر پوشه های آرشیو با برنامه قرار دارد. کل برنامه منطقی است
شامل یک جلو، مجموعه ای از پلاگین های اسکن، یک تولید کننده گزارش و
خود موتور که باعث می شود همه دنده ها با هم بچرخند. پلاگین ها
در فهرست پلاگین ها ریخته می شود - موارد اضافی نیز باید در آنجا نصب شوند
افزونه ها نکته مهم! سه پلاگین استاندارد گنجانده شده است
یاسکا
، وابستگی های ناخوشایندی دارند. JLint که جاوا را اسکن می کند
فایل های .class، به jlint.exe در دایرکتوری resource/utility نیاز دارد. دومین
افزونه - antiC که برای تجزیه و تحلیل منابع جاوا و C/C++ استفاده می شود، به antic.exe نیاز دارد
در همان دایرکتوری و برای اینکه PMD، که کد جاوا را پردازش می کند، کار کند، شما نیاز دارید
بر روی سیستم Java JRE 1.4 یا بالاتر نصب شده است. بررسی کنید نصب صحیح است
می توانید با تایپ دستور "yasca ./resources/test/". اسکن به چه صورت است؟
پس از پردازش انواع تغذیه شده به برنامه، یاسکانتیجه را به عنوان می دهد
گزارش مخصوص. به عنوان مثال، یکی از پلاگین های استاندارد GREP به شما این امکان را می دهد
با استفاده از الگوهای شرح داده شده در فایل های grep، ساختارهای آسیب پذیر را نشان می دهد و
به راحتی طیفی از آسیب پذیری ها را شناسایی کنید. مجموعه ای از این الگوها قبلاً در آن گنجانده شده است
برنامه: برای جستجوی رمزگذاری ضعیف، مجوز با استفاده از "گذرواژه برابر با ورود"
امکان تزریق SQL و موارد دیگر. چه زمانی می خواهید در گزارش ببینید
برای اطلاعات دقیق تر، برای نصب افزونه های اضافی تنبل نباشید. چی
نکته قابل ذکر این است که با کمک آنها می توانید کد را اسکن کنید
.NET (VB.NET، C#، ASP.NET)، PHP، ColdFusion، COBOL، HTML، JavaScript، CSS،
ویژوال بیسیک، ASP، پایتون، پرل.

Cppcheck

سایت اینترنتی:
مجوز: متن باز
پلتفرم: یونیکس، ویندوز
زبان: C++

توسعه دهندگان Cppcheckتصمیم گرفتیم وقت خود را با چیزهای بی اهمیت تلف نکنیم، و بنابراین
آنها فقط دسته بندی دقیق اشکالات و فقط در کد C++ را می گیرند.
انتظار نداشته باشید که برنامه اخطارهای کامپایلر را تکرار کند - بدون این کار انجام خواهد شد
درخواست کننده بنابراین، برای تنظیم کامپایلر روی حداکثر سطح تنبلی نکنید
هشدارها، و از Cppcheck برای بررسی نشت و نقض حافظه استفاده کنید
عملیات تخصیص-تخصیص، سرریزهای مختلف بافر، استفاده
ویژگی های قدیمی و خیلی بیشتر. جزئیات مهم: توسعه دهندگان Cppcheck
ما سعی کردیم تعداد موارد مثبت کاذب را به حداقل برسانیم. بنابراین، اگر
برنامه خطایی را ثبت می کند، به احتمال زیاد می توانید بگویید: "او واقعاً
بله!" می توانید آنالیز را از روی کنسول یا با استفاده از یک Nice اجرا کنید
رابط رابط کاربری گرافیکی نوشته شده در Qt و در حال اجرا بر روی هر پلت فرم.

درجه

سایت اینترنتی:
www.justanotherhacker.com/projects/graudit.html
مجوز: متن باز
پلتفرم: یونیکس، ویندوز
زبان ها: C++، PHP، Python، Perl

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

gradit /path/to/scan

پاداش تلاش های شما گزارش رنگارنگی در مورد سوء استفاده های احتمالی خواهد بود
مکان های موجود در کد باید بگویم که علاوه بر خود فیلمنامه (و این فقط 100 خط است
کد در Bash)، مقدار از پایگاه داده امضایی می آید که در آن
regexps و نام توابع بالقوه آسیب پذیر در زبان های مختلف. پیش فرض
پایه‌های پایتون، پرل، PHP، C++ گنجانده شده است - می‌توانید فایل‌ها را از پوشه امضاها بگیرید
و از آن در پیشرفت های خود استفاده کنید.

SWAAT

وب سایت: www.owasp.org
مجوز: متن باز
پلتفرم: یونیکس، ویندوز
زبان ها: جاوا، JSP، ASP.Net، PHP

اگر graudit از فایل های متنی برای تنظیم امضای آسیب پذیری استفاده می کند،
سپس در SWAAT- یک رویکرد پیشرفته تر با استفاده از فایل های XML. مثل این
یک امضای معمولی به نظر می رسد:

vuln match - عبارت منظم برای جستجو.
type - نوع آسیب پذیری را نشان می دهد:
شدت - نشان دهنده سطح خطر (بالا، متوسط ​​یا پایین) است.
alt - کد جایگزین برای حل مشکل

SWAATپایگاه داده امضا را می خواند و از آن برای یافتن موارد مشکل ساز استفاده می کند
بخش های کد در کدهای منبع در جاوا، JSP، ASP .Net و PHP. پایه به طور مداوم است
در حال رشد است و علاوه بر لیست عملکردهای "خطرناک"، شامل خطاهای معمولی نیز می شود
با استفاده از قالب بندی رشته و نوشتن پرس و جوهای SQL. قابل ذکر است که
که این برنامه با سی شارپ نوشته شده است، اما در niks خوب کار می کند، با تشکر
به پروژه مونو - اجرای باز پلت فرم .Net.

اسکنر اشکال PHP

سایت اینترنتی:
raz0r.name/releases/php-bug-scanner
مجوز: نرم افزار رایگان
پلتفرم: ویندوز
زبان: PHP

اگر نیاز به انجام تجزیه و تحلیل استاتیک یک برنامه PHP دارید، توصیه می کنم
تلاش كردن اسکنر اشکال PHP، که توسط نویسنده ما - raz0r نوشته شده است. کار
این برنامه بر اساس اسکن توابع و متغیرهای مختلف در اسکریپت های PHP است.
که می تواند در حملات وب استفاده شود. شرح چنین
موقعیت ها در قالب به اصطلاح از پیش تعیین شده رسمی شده است و برنامه در حال حاضر است
7 پیش تنظیم ویژه شامل، گروه بندی شده بر اساس دسته بندی:

  • اجرای کد؛
  • اجرای دستور؛
  • پیمایش دایرکتوری؛
  • جهانی ها بازنویسی می کنند.
  • عبارتند از؛
  • تزریق SQL؛
  • متفرقه

این خنده دار است که برنامه در آن نوشته شده است
PHP/WinBinder و کامپایل شده است
bamcompile، بنابراین درست مانند یک برنامه معمولی ویندوز به نظر می رسد. از طریق
رابط مناسب، pentester می تواند تجزیه و تحلیل کد را برای حضور فعال یا غیرفعال کند
آسیب پذیری های خاص

پیکسی

سایت اینترنتی:
pixybox.seclab.tuwien.ac.at
مجوز: نرم افزار رایگان
پلتفرم: یونیکس، ویندوز
زبان: PHP

این ابزار بر اساس اسکن کد منبع و ساخت نمودار است
جریان های داده این نمودار مسیر داده هایی را که به دست می آیند ردیابی می کند
از خارج از برنامه - از کاربر، از پایگاه داده، از برخی خارجی
افزونه و غیره به این ترتیب فهرستی از نقاط آسیب پذیر (یا ورودی ها) به
برنامه های کاربردی. Pixy با استفاده از الگوهایی که آسیب‌پذیری‌ها را توصیف می‌کنند، این آسیب‌پذیری‌ها را بررسی می‌کند
امتیاز می دهد و به شما امکان می دهد آسیب پذیری های XSS و SQL را شناسایی کنید. علاوه بر این، خود نمودارها که
ساخته شده در طول تجزیه و تحلیل، می تواند در پوشه نمودارها مشاهده شود (به عنوان مثال،
xss_file.php_1_dep.dot) - این برای درک دلیل بسیار مفید است
این یا آن بخش از کد آسیب پذیر Pixy در نظر گرفته می شود. به طور کلی، خود توسعه است
بسیار آموزشی است و نشان می دهد که چگونه ابزارهای پیشرفته کار می کنند
تجزیه و تحلیل کد استاتیک در صفحه

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

اونس 6

وب سایت: www.ouncelabs.com/products
مجوز: Shareware
پلتفرم: ویندوز

متأسفانه، راه‌حل‌های رایگان موجود هنوز هم از راه‌حل‌های تجاری پایین‌تر هستند
آنالوگ ها کافی است کیفیت و جزییات گزارش را مطالعه کنید که همین است
اونس 6
- و بفهمید چرا این برنامه بر اساس یک خاص است
موتور تجزیه و تحلیل Ounce Core، که کد را برای مطابقت با قوانین بررسی می کند
و خط مشی هایی که توسط تیمی از نفوذگران حرفه ای تدوین شده است،
که تجربه شرکت های امنیتی معروف، جامعه هکرها و همچنین
استانداردهای ایمنی این برنامه انواع آسیب پذیری ها را در کد شناسایی می کند: from
سرریز بافر قبل از تزریق SQL. در صورت تمایل، اونس می تواند به راحتی با آن ادغام شود
IDE های محبوب برای اجرای بررسی خودکار کد در حین ساخت
هر بیلد جدید برنامه در حال توسعه است. راستی،
شرکت توسعه، اونس لبز، تابستان امسال توسط خود IBM خریداری شد. بنابراین
که محصول به احتمال زیاد به عنوان بخشی از یکی از آنها به توسعه خود ادامه خواهد داد
برنامه های کاربردی تجاری آی بی ام

Klocwork Insight

وب سایت: www.klocwork.com
مجوز: Shareware
پلتفرم: ویندوز
زبان ها: C++، Java، C#

برای مدت طولانی، این، دوباره، محصول تجاری یک استاتیک را اجرا کرد
اسکن کد فقط برای C، C+ و جاوا. اما، به محض اینکه ویژوال استودیو منتشر شد
در سال 2008 و .NET Framework 3.5، توسعه دهندگان پشتیبانی از C# را اعلام کردند. من راندم
برنامه روی دو پروژه کمکی خود که با عجله نوشت
در شارپ و این برنامه 7 آسیب پذیری حیاتی را شناسایی کرد. خوب است که آنها
فقط برای استفاده داخلی نوشته شده :). Klocwork Insight
در ابتدا برای کار در ارتباط با محیط های یکپارچه پیکربندی شد
توسعه. ادغام با همان ویژوال استودیو یا اکلیپس بسیار خوب است
موفق - شما به طور جدی شروع به فکر می کنید که چنین عملکردی باید وجود داشته باشد
به طور پیش فرض در آنها پیاده سازی شده است :). اگر مشکلات منطق را در نظر نگیرید
مشکلات عملکرد و عملکرد برنامه، سپس Klocwork Insight
برای یافتن سرریزهای بافر و فیلتر از دست رفته کار بسیار خوبی انجام می دهد
کد سفارشی، قابلیت‌های SQL/Path/Cross-site injection، ضعیف است
رمزگذاری و غیره یکی دیگر از گزینه های جالب ساخت درخت اعدام است
برنامه ای که به شما امکان می دهد به سرعت اصل کلی برنامه و
به طور جداگانه، به عنوان مثال، پردازش هر کاربر را نظارت کنید
ورودی و برای ساخت سریع قوانین برای بررسی کد، حتی پیشنهاد شده است
ابزار ویژه - Klocwork Checker Studio.

Coverity Prevent Analysis Static

وب سایت: www.coverity.com/products
مجوز: Shareware
پلتفرم: ویندوز
زبان ها: C++، Java، C#

یکی از معروف ترین تحلیلگرهای کد استاتیک در C/C++، جاوا و سی شارپ.
به گفته سازندگان آن، این راه حل توسط بیش از 100000 نفر استفاده می شود
توسعه دهندگان در سراسر جهان مکانیسم های اندیشیده شده به شما امکان می دهند خودکار را انجام دهید
جستجو برای نشت حافظه، استثناهای کشف نشده، مشکلات عملکرد و
البته آسیب پذیری های امنیتی این محصول از پلتفرم های مختلف پشتیبانی می کند،
کامپایلرها (gcc، Microsoft Visual C++ و بسیاری دیگر)، و همچنین با
محیط های توسعه مختلف، در درجه اول Eclipse و Visual Studio. در هسته
پیمایش کد از ابتدا تا انتها از الگوریتم‌های پیمایش احمقانه استفاده نمی‌کند، بلکه از چیزی استفاده می‌کند
مانند یک دیباگر که نحوه رفتار یک برنامه را در موارد مختلف تجزیه و تحلیل می کند
شرایط پس از یک جلسه شعبه به این ترتیب، پوشش کد 100٪ به دست می آید.
چنین رویکرد پیچیده ای از جمله برای تحلیل کامل مورد نیاز بود
برنامه های چند رشته ای که مخصوصا برای اجرا روی چند هسته بهینه شده اند
پردازنده ها مرکز صداقت پوششبه شما امکان می دهد چنین خطاهایی را پیدا کنید
به عنوان یک شرط مسابقه (یک خطای طراحی در یک سیستم چند وظیفه ای که در آن
عملکرد سیستم به ترتیبی که بخش هایی از کد اجرا می شوند، بن بست ها بستگی دارد
و خیلی بیشتر. چرا معکوس کننده ها به این نیاز دارند؟ از توسعه دهندگان 0day در مورد آن بپرسید
اکسپلویت برای فایرفاکس و اینترنت اکسپلورر :).

خزنده کد OWASP

وب سایت: www.owasp.org
مجوز: GNU GPL
پلتفرم: ویندوز
زبان ها: جاوا، سی شارپ، VB

خالق این ابزار، آلسیو مارزیالی، نویسنده دو کتاب در ASP.NET است.
یک کدگذار معتبر برنامه های کاربردی با بار بالا برای بخش مالی و همچنین
پنتستر او در سال 2007 اطلاعاتی در مورد آسیب پذیری های حیاتی در 27 منتشر کرد
وب سایت های دولتی ایتالیا فرزند فکر او - خزنده کد OWASP
طراحی شده برای تجزیه و تحلیل استاتیک کد دات نت و J2EE/JAVA، به صورت آزاد در دسترس است
در اینترنت، و در پایان سال نویسنده قول می دهد نسخه جدیدی از برنامه را با
عملکرد بسیار بیشتر اما مهمترین چیز قبلاً اجرا شده است -
تجزیه و تحلیل کدهای منبع در سی شارپ، ویژوال بیسیک و جاوا. فایل هایی که باید اسکن شوند انتخاب می شوند
از طریق رابط رابط کاربری گرافیکی، و اسکن به طور خودکار شروع می شود. برای هر
بخش مشکل کد، شرحی از آسیب پذیری در بخش Threat نمایش داده می شود
شرح. درست است، میدانی دستورالعمل های OWASPاحتمالاً مسیر را نشان می دهد
متاسفانه هنوز راه حلی برای این مشکل در دسترس نیست. اما می توانید استفاده کنید
ویژگی آزمایشی اسکن کد روی یک ماشین راه دور، قابل دسترسی است
در تب Remote Scan. نویسنده قول می دهد که به طور جدی این ویژگی را ارتقا دهد و در
از جمله، تجمیع منابع برنامه برای تجزیه و تحلیل به طور مستقیم از سیستم
کنترل نسخه

هشدار

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