SAST (تست اتستاتیک امنیت اپلیکیشن) چیست؟
قبل شروع این مقاله، بهتر است با مفهوم Static Application Security Testing آشنا شویم. همانطور که در مقاله تست اتستاتیک امنیت اپلیکیشن گفتیم، یکی از مهمترین بخشهای چرخه توسعه امن محصول، تست استاتیک امنیت اپلیکیشن (SAST) است که با توجه به الگوهای آسیبپذیری در سطح سورس کد پویش و آسیبپذیریها را پیدا مینماید. لازم به ذکر است کلیه گزارشات تست استاتیک امنیت اپلیکیشن (SAST) به دلیل نوع بررسی و الگوهای آسیبپذیری باید مجدد بررسی و صحت سنجی گردند. در ادامه به نحوه عملکرد SAST (پویشگر امنیتی کد) خواهیم پرداخت.
عملکرد SAST چگونه است؟
در ادامه این مقاله، به 5 ویژگی مهم از تست استاتیک امنیت اپلیکیشن (SAST) اشاره میکنیم:
- اپلیکیشن را از درون به بیرون تجزیه و تحلیل میکند
- در تمام مراحل SDLC امکان اجرای آن وجود دارد
- معمولا به مدل ساختی نیاز دارد که ابزار بتواند آن را درک کند
- تجزیه و تحلیل بر مبنای مجموعهای از قواعد پایه انجام میشود
- انواع مختلفی از تجزیه و تحلیل وجود دارند که هر کدام بر روی انواع خاصی از یافتهها تمرکز دارند. (جدول زیر)
1 | تحلیل پیکربندی | بررسی فایلهای پیکربندی اپلیکیشن، به عنوان مثال بررسی تعریف صفحه error، برای وب اپلیکیشن |
2 | تجزیه معنایی | ابزارهای SAST (اسکنر آسیبپذیری) قادر به تجزیه و تحلیل یک کد خاص در زمینه پایه آن هستند: مانند تشخیص تزریق SQL از طریق .(ExecuteQuery) |
3 | تحلیل جریان اطلاعات | ردیابی جریان اطلاعات در سراسر اپلیکیشن جهت اطمینان از اعتبار ورودیها قبل از استفاده |
4 | بررسی جریان کنترل | بررسی ترتیب عملیات برنامه برای تشخیص توالیهایی که پتانسیل مخربی دارند |
5 | آنالیز ساختاری | بررسی ساختارهایی از کد که وابسته به زبان برنامهنویسی هستند تا نازسازگاری با شیوهها و تکنیکهای امن برنامهنویسی نمایان شوند |
تفاوتهای اصلی و عملکرد SAST (پویشگر امنیتی کد) با تستهای امنیتی دیگر در چیست؟
برای اینکه تشخیص دهید که آیا یک روش تست امنیتی خاص برای محیط اپلیکیشن شما مناسب است یا نه، باید حتما ویژگیها، محدودیتها و خدماتی که آن تست ارائه میکند را بررسی کنید. در ادامه، تفاوتهای اصلی بین هرکدام از این روشها را بررسی میکنیم.
- پوشش
- تعداد مثبتهای کاذب کم
- قابلیت بهرهبرداری
- شفافیت کد
- ارائه توصیههای اصلاحی
- ادغام SDLC
- پشتیبانی گسترده پلتفرم
- اولویت توسعهدهنده
- قابلیت بهکارگیری آسان
تست استاتیک امنیت اپلیکیشن (SAST) بر روی کد تمرکز دارد. در ابتدای کانال CI عمل میکند و وظیفه آن اسکن کد منبع، کد باینری، یا بایت کد است تا الگوهای کدنویسی مشکلآفرین که با اصول بهینه مغایرت دارند را تشخیص دهد. در واقع عملکرد SAST (پویشگر آسیبپذیری سیستم) به نوع زبان برنامهنویسی وابسته است. تست داینامیک امنیت شبکه (DAST) یک روش تست با رویکرد جعبه-سیاه است که برنامه را در زمان اجرای آن بررسی میکند. در ادامه، تست بر کانال CI نیز اعمال میشود. DAST رویکرد خوبی برای جلوگیری از رگرسیون است و وابستگی خاصی به زبان برنامهنویسی ندارد.
در آینده یک مقاله برای تفاوت SAST با DAST و چگونگی ترکیب آنها باهم مناسب دوستانی که به این موضوع علاقمند هستند منتشر خواهیم کرد.
تست تعاملی امنیت اپلیکیشن شبیه DAST است، زیرا IAST نیز بر روی رفتار اپلیکیشن در زمان اجرای آن تمرکز دارد. تجزیه و تحلیل IAST ترکیبی از تست جعبه-سیاه، اسکن کردن، و تحلیل جریانهای داخلی اپلیکیشن است. مزیت اصلی IAST توانایی آن در اتصال یافتههای مشابه با DAST با انواع تحلیلهای موجود در کد منبع حاصل از تست استاتیک امنیت اپلیکیشن (SAST) است. به همین دلیل، IAST وابستگی زیادی به زبان برنامهنویسی خواهد داشت و فقط میتواند در مراحل بعدی و در کانال CI آن را اجرا کرد.
تجزیه و تحلیل ترکیب نرمافزار (SCA) بر روی وابستگیهای به کار گرفته شده در کد اپلیکیشن تمرکز دارد. در اپلیکیشنهایی که از تعداد زیادی کتابخانههای منبع باز استفاده میکنند، استفاده از SCA بسیار کاربردی است. این روش نیز وابستگی زیادی به زبان برنامهنویسی دارد.
چگونه SAST با سایر روشهای تست امنیت اپلیکیشن سازگار میشود؟
SAST (تست استاتیک امنیت اپلیکیشن) بر روی کد منبع عمل میکند و خطوط کد شما را برای یافتن نقاط آسیبپذیری اسکن میکند. این رویکرد، برخلاف عملکرد DAST است که کاری با کد منبع ندارد و تمرکز آن بر روی ورودی و خروجیهای زمان اجرا است. در عمل، این دو روش مکمل یکدیگرند. ابزار SAST (اسکنر آسیبپذیری) میتواند آسیبپذیریهایی را پیدا کند که ابزار DAST هرگز به آنها نمیپردازد، و برعکس.
اما بزرگترین تفاوت در عملکرد SAST و DAST، سرعت اجرای آنهاست. یک ابزار DAST بر روی عملکرد اپلیکیشن در زمان اجرا تمرکز دارد، بنابراین در زمانهایی که فرایندهای اجرایی پیچیده میشوند، این تست بسیار زمانبر خواهد بود. از سوی دیگر، یک ابزار تست استاتیک امنیت اپلیکیشن (SAST)، میتواند کد منبع را اسکن کرده و آن را با بهترین قوانین و عملکردهای بهینه موجود مقایسه کند تا نکاتی را به توسعهدهندگان و برای بهبود اپلیکیشن پیشنهاد دهد (نتیجه: سرعت بیشتر SAST).
شما تست SAST را در مراحل بسیار اولیه از توسعه کد اپلیکیشن اجرا میکنید. در مراحل بعد، شما از تست DAST استفاده میکنید تا عملکرد اپلیکیشن را در زمان اجرا بسنجید. برای آن دسته از نقاط آسیبپذیری که توسط هر دو ابزار یافت میشوند، ابزار SAST میتواند با سرعت بیشتری آنها را بیابد. در ادامه، هرآنچه که از دید SAST (پویشگر امنیتی کد) پنهان مانده است را ابزار DAST پیدا میکند.
شاید مطالعه این مقاله برای شما جذاب باشد!
امنیت اپلیکیشن چیست و چه اهمیتی دارد؟
مزایا و معایب موجود در عملکرد SAST
چنانکه قبلا هم عنوان کردیم، روشهای تست استاتیک امنیت اپلیکیشن (SAST) کامل و بینقص نیستند. بخصوص، استفاده از آنها باید همراه با بهرهگیری از ابزارهایی چون DAST باشد. در ادامه، به مزایا و معایب ابزارهای SAST (پویشگر آسیبپذیری شبکه) و نقش عملکرد آن میپردازیم.
مزایا عملکرد SAST
در مراحل اولیه توسعه: تست استاتیک امنیت اپلیکیشن (SAST) تنها بر روی کد منبع کار میکند و آن را با بهترین شیوههای کدنویسی مقایسه میکند. بنابراین، عملکرد SAST زمانی نیاز است که شما کدنویسی را شروع کردهاید. استفاده از افزونههای IDE برای ابزارهای SAST (اسکنر آسیبپذیری) بسیار معمول است، و میتوان از توانایی آنها در بررسی مشکلات قبل از ارائه هر ویرایش از اپلیکیشن بهره گرفت. نقاطی از کد که ممکن است مشکلساز شوند را تشخیص میدهد؛ از آنجا که عملکرد SAST بر روی کد منبع است، این ابزار میتواند مکان دقیق آسیبپذیری را به شما نشان دهد تا جستجو برای آنها و رفعشان سادهتر باشد.
هیچ مورد آزمایشی نیاز نیست: در ابزارهای DAST از شما خواسته میشود که مواردی که قرار است بررسی شوند را مشخص کنید. در حالی که در عملکرد SAST، قوانینی تعبیه شدهاند که تست در مقایسه با آنها کد شما را میسنجد. اغلب این قوانین پایه، بر اساس بسیاری از کدهای موفق و سالها تجربه توسعهدهندگان انتخاب شدهاند. این رویکرد همهجانبه، به شما این امکان را میدهد که مشکلاتی را که حتی به ذهن خودتان هم نمیرسد شناسایی و رفع کنید. شما حتی میتوانید قوانین اضافی و مدنظر خود را به صورت دستی وارد فرایند SAST (پویشگر امنیتی کد) کنید.
هیچ اجرایی نیاز نیست: تست استاتیک امنیت اپلیکیشن یک رویکرد استاتیک است و نیازی به اجرای اپلیکیشن بهمنظور بررسی کد آن ندارد. بنابراین، عملکرد SAST بسیار سریعتر از DAST است که به اجرای اپلیکیشن و پیچیدگیهای متناظر با آن وابسته است.
خودکارسازی آسان: اسکن فایلها متنی به هیچ وجه به تعامل GUI نیازی ندارد. در نتیجه، خودکارسازی روند عملکردی SAST (اسکنر آسیبپذیری شبکه) بسیار آسانتر از DAST است زیرا در DAST شما به تنظیمات و ایجاد تعاملات زیادی نیاز دارید.
معایب عملکرد SAST
مثبت کاذب: از آنجا که تست استاتیک امنیت اپلیکیشن (SAST) بر روی کد منبع کار میکند، اغلب تمام آنچه وجود دارد را مدنظر قرار نمیدهد. درنتیجه، ابزارهای SAST در زمان اجرا، بسیاری از ملاحظات توسعه کد را مدنظر قرار نمیدهند و بههمین دلیل، تعداد زیادی مشکل را شناسایی میکنند که درصد قابلتوجهی از آنها کاذباند. پویشگر آسیبپذیری سیستم (SAST) همچنین، مشکلاتی را گزارش میدهد که ممکن است در خط خاصی بروز کنند و در ادامه برطرف شوند.
مطلب پیشنهادی برای مطالعه
بهترین ابزارهای تست استاتیک امنیت اپلیکیشن (SAST) کدامند؟
زمینه گمشده: ورودیهای تصفیه نشده از جانب کاربر از جمله عوامل در ایجاد مثبت کاذب هستند. این وضعیت یک خطر امنیتی بزرگ است، اما آنچه تصفیه یا اصلاح نشده و وارد میشود، در Backend اصلاح میشود و دیگر یک خطر امنیتی نیست. بهویژه، در بسیاری موارد Frontend و Backend در مخازن مختلفی قرار دارند و عدم آگاهی SAST از این تفاوت، باعث میشود که خطاهایی غیرضروری شناسایی و گزارش شوند.
وابستگی به زبان: SAST شدیدا به نوع کد وابسته است. برای زبانهای برنامهنویسی رایج (مانند جاوا و سیشارپ)، ابزارهای تست استاتیک امنیت اپلیکیشن زیادی در دسترس هستند، اما برای زبانها خاصی چون ReScript و Nim تعداد ابزارهای SAST (پویشگر امنیتی کد) بسیار محدودند.
سه مرحله اساسی برای عملکرد موفقیتآمیز SAST
وقتی در مراحل ابتدایی پروژه و کدنویسی آن هستید، اجرای تست SAST بسیار آسان است. با این حال، وقتی هزاران خط از کد پروژه نوشته شدهاند، چنین اجرایی چالشبرانگیز خواهد بود. در مورد دوم، ممکن است نیاز به یک برنامهریزی چند روزه در استقرار و اجرای تست داشته باشید. همچنین عملکرد SAST (پویشگر امنیتی کد)، ممکن است عملکرد برخی از اعضای تیم برنامهنویسی شما را مختل کند، بخصوص زمانی که مثبتهای کاذب زیادی تولید شده باشند.
استفاده از ابزار مناسب برای عملکرد SAST
در گام اول باید ابزار تجزیه و تحلیلی را بیابید که متناسب با فرایند توسعه شما، بودجه موردنظرتان و زبان برنامهنویسی پایه باشد. بهویژه، شما باید بتوانید تفاوت بین ابزارهای SAST معمولی و انواع توسعهدهنده-اول را تشخیص دهید و نوع متناسب با هدف خود را انتخاب کنید.
SAST مفهوم جدیدی نیست؛ ابزارهای قدیمی و معمولی تست استاتیک امنیت اپلیکیشن سرعت مناسبی ندارند و ساعتها و روزها طول میکشد تا اجرا شوند. علاوه بر این، ابزارهای SAST معمولی مقدار زیادی از موارد مثبت کاذب را ایجاد میکنند که باعث دردسرساز شدن آنها و عدم استفاده از SAST میشود.
ابزارهای SAST (تست استاتیک امنیت اپلیکیشن) معمولی از کانال CI/CD خارج و به یک فرایند مجزا تبدیل میشوند؛ همین امر باعث به وجود آمدن یک چرخه انتشار پیچیدهتر و کندتر میشود. در اغلب مواقع، تستهای امنیتی حجمی از نقاط آسیبپذیری را بر توسعهدهنده اعمال میکنند و هیچ توصیهای برای رفع آنها ارائه نمیدهند.
ابزارهای SAST توسعهدهنده – اول (Developer-first) نسل بعدی مانند Snyk Code، مشکلات بالا را ندارند و سرعت اجرای بالایی هم دارند. این ابزارها به خوبی با IDE موردنظر شما ادغام میشوند و همزمان با تایپ کد، مشکلات آن را به شما توضیح میدهند. بسته به گردش کار شما، ابزار SAST (پویشگر امنیتی کد) میتواند با سرعتی برابر با فرایند توسعه شما پیش برود. ابزارهای SAST توسعهدهنده – اول، همزمان با اعلان مشکل، توصیههایی نیز برای رفع آنها ارائه میدهند.
از شر موارد مثبت کاذب خلاص شوید
در مرحله دوم، شما باید موارد مثبت کاذب را از جریان تحلیل خارج کنید. اگر ابزاری که استفاده میکنید تعداد زیادی مثبت کاذب تولید کند، هیچکدام از توسعهدهندگان شما اعلانهای آن را جدی نخواهند گرفت. بسته به اندازه کد پایه، پاک کردن این حجم از موارد کاذب میتواند بسیار وقتگیر باشد. بخصوص، شما باید تمام آنها را بررسی کنید تا از واقعی یا کاذب بودن این خطرها اطمینان حاصل نمایید.
اگر هنوز با مفهوم کدنویسی امن آشنایی ندارید، حتما مقاله زیر را مطالعه بفرمایید
کدنویسی امن چیست؟
هماهنگی با کانال CI
گام بعدی، ترکیب عملکرد SAST با عملکرد کانال یکپارچهسازی پیوسته (CI) است. چنانکه قبلا ذکر شد، ابزارهای SAST (اسکنر آسیبپذیری) از قبل به این سطح از ادغام رسیدهاند. با وجود این، توسعهدهندگان بسیار در مورد IDEهای خود حساساند. از طرفی، همه IDEها از جانب ابزارهای SAST پشتیبانی نمیشوند.
در برخی موارد، توسعهدهندگان فراموش میکنند که قبل از ورود کدهای جدید، کدهای قدیمی را با ابزار SAST (پویشگر امنیتی کد) بررسی کنند. به همین دلیل است که ادغام CI با عملکرد SAST بسیار حائز اهمیت است. از این طریق، مطمئن میشوید که هیچ کدی با مشکلات امنیتی مخرب به مرحله تولید و انتشار راه پیدا نخواهد کرد.