امین باقری
امین باقری
خواندن ۹ دقیقه·۳ سال پیش

تحلیل ایستای کد (Static Code Analysis)

تحلیل کد استاتیک، که به عنوان تست جعبه سفید نیز شناخته می شود، یک روش تست برنامه است که کد را در یک محیط غیر زمان اجرا (non-runtime environment) بررسی می کند. تجزیه و تحلیل کد استاتیک می تواند هم در طول چرخه حیات توسعه و هم پس از راه اندازی برنامه در فروشگاه های برنامه، انجام شود.

این تجزیه و تحلیل (بسته به ابزار)، آسیب پذیری های متداول خارج از محیط اجرای برنامه را در یک حالت ایستا با استفاده از روش های تست مختلف، مانند جریان داده (Data Flow)، نمودار جریان کنترل (Control Flow Graph)، Taint و تجزیه و تحلیل واژگانی (Lexical Analysis) برجسته می کند.

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

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

چرا تحلیل ایستای کد، مهم است؟

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

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

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

۵ دلیل برا اینکه چرا کسب و کارها به تحلیل ایستای کد، احتیاج دارند:

1. به طور مداوم تغییر می کند.

وقتی اکوسیستم امنیت سایبری، چیزی جز تغییر مداوم نیست، به کسب‌وکارها کمک می‌کند تا یک استراتژی امنیتی چابک برای مقابله با این تغییر اتخاذ کنند. اکثر ابزارهای تجزیه و تحلیل کد ایستا به طور مداوم با تهدیدهای جدید به روز می شوند و به بررسی سالم بودن تست پیکربندی اولیه کمک می کنند.

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

2. به تحلیلگران امنیتی کمک می کند.

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

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

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

3. سرعت توسعه و عرضه محصول به بازار را افزایش می دهد.

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

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

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

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

4. باگ ها را در مراحل اولیه توسعه پیدا می کند.

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

بسیاری از ابزارهای تحلیلگر استاتیک از فناوری یکپارچه سازی مداوم (Continuous Integration) استفاده کرده اند؛ فرآیندی که هر بار که یکی از اعضای تیم تغییراتی را در کنترل نسخه انجام می دهد، build و آزمایش کد را به صورت خودکار انجام می دهد.

5. قوانینی را برای کمک به توسعه دهندگان، تعریف می کند.

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

برخی از ابزارها در حال حرکت به سمت محیط های توسعه یکپارچه (IDE) هستند؛ برای حل مشکلاتی که می‌توانند در طول مرحله توسعه نرم‌افزار شناسایی شوند، می‌توان این ابزار را معرفی کرد، زیرا به توسعه‌دهنده در مورد مشکلاتی که ممکن است در طول توسعه کد به آنها برخورد کند، بازخورد فوری می دهد.

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

ابزار های تحلیل ایستای کد

ابزار SonarQube

ابزار متن‌باز و رایگان SonarQube که به اختصار به آن Sonar می گویند ابزاری است برای پایش مداوم و با کیفیت برنامه‌هایی که در حال توسعه دارید. Sonar مجموعه‌ای از ابزارهای تحلیل کد مانند PMD ، CPD ، CheckStyle و FindBugs را در در دل خود یکپارچه ساخته و ابزارهای دیگری مانند Squid را نیز به آنها افزوده است. علاوه بر این، Sonar دارای یک سرور، واسط وب، دیتابیس و قابلیت اتصال به ابزارهای دیگر (مانند Jenkins) است که مجموعاً آن را نسبت به سایر ابزارهای این حوزه متمایز میکند. این نرم‌افزار با بررسی خودکار کدها، کشف باگ‌ها و خطاهای برنامه‌نویسی و مشکلات آسیب‌پذیری کدها در بیش از ۲۰ زبان برنامه‌نویسی مانند Java، C#، JavaScript، C/C++ و PHP، ابزاری قدرتمند در دستان شماست. این برنامه همچنین قادر است آمار را رهگیری و نمودارهایی تهیه کند تا توسعه‌دهندگان بتوانند به‌سرعت مشکلات کدشان را بیابند.


ابزار Codacy

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

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

ادغام با وُرک‌فلو دولوپر
Codacy بسیار انعطاف‌پذیر بوده و سازگار با فرایند بازبینی کد دولوپر است و نتایج بازبینی سورس‌کد را به صورت کامنت‌هایی در هر Pull Request در سورس‌کد می‌آورد یا به عنوان نوتیفیکیشن در کانال‌هایی همچون Slack یا Hipchat ارسال می‌کند.

همچنین Codacy به خوبی می‌تواند با سایر ابزارهای CI در پروژه شما کار کند و به عنوان یک مکمل ایده‌آل برای مرحله Unit Test نرم‌افزار عمل کند.

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

- کیفیت سورس‌کد پروژه شما در چه سطحی است؟
- پیشرفت کیفیت آن در طول زمان چگونه بوده است؟
- نقاط مهم یا نقاطی از سورس‌کد که زمان بیشتری را برای اجرا احتیاج دارند، کدام هستند؟

شرکت های ایرانی ارائه دهنده خدمات تحلیل ایستای کد

شرکت داده کاوان تصمیم یار

شرکت داده کاوان تصمیم یار (کوالاتک) در زمینه ارائه، مشاوره و آموزش خدمات نرم افزاری به سازمان‌های دولتی و خصوصی فعالیت می‌نماید. این مجموعه، ارائه دهنده خدمات تخصصی تست نرم افزار و تضمین کیفیت می باشد که از جمله خدماتی که ارائه می دهند می توان به راه اندازی آنالیز سورس کد، تست اتوماتیک عملکردی، تست اتوماتیک کارایی و تست اتوماتیک امنیت اشاره کرد.

مجموعه کوالاتک با استفاده از تکنولوژی‌های روز و به کارگیری استاندارد‌های بالا در کیفیت کد زبان‌های مختلف (Java, Html, JS, Php) ، می‌تواند CI و ابزارهای آنالیز ایستا را به نحوی کانفیگ نماید تا پس از هر تغییر در منبع کد اشکالات مربوط به Code Style، توسط ابزار‌های CI گزارش شود یا در صورتی که اشکال جدی در منبع کد مشاهده شود فرآیند CI به خطا ختم شود. یکی از نکات حائز اهمیت در این سرویس، آن است که با استفاده مناسب از آنالیز استاتیک کد در فرآیند CI به همراه جلسات دوره کد(Code Review) نه تنها سبب می‌شود که فرآیند توسعه تسریع گردد بلکه می‌تواند تاثیر به سزایی در رشد فنی تیم توسعه‌دهنده داشته باشد؛ چرا که به اعضای تیم فنی، خصوصا کارآموز‌های تیم روش صحیح برنامه‌نویسی (یا کد تمیز) را به طور ضمنی آموزش می‌دهد.

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

https://qualatech.ir/source-code-analysis/

شرکت مهندس پیشگان

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

این شرکت، ابزارهایی برای تحلیل ایستای کد از جمله JTest ،dotTest و SonarQube را ارائه می‌کند.

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

https://www.mohandespishegan.com/tools/code-analysis/jtest


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

«این مطلب، بخشی از تمرینهای درس معماری نرم‌افزار در دانشگاه شهیدبهشتی است»

مراجع

https://www.sonarqube.org/

https://www.codacy.com/

https://www.appknox.com/blog/static-code-analysis

https://qualatech.ir/source-code-analysis/

https://www.mohandespishegan.com/tools/code-analysis/jtest




معماری نرم افزار بهشتیتست نرم افزار
شاید از این پست‌ها خوشتان بیاید