تغییر کد توسط همگردان ها، نگرانی جدید برنامه نویسان
یافتن باگها درکد برنامه کم بود، اکنون برنامهنویسان باید نگران کدهایی باشند که همگردان ( مترجم یا Compiler) سر از کارشان در نمیآورد و بدون هشدار به برنامهنویس آنها را حذف میکند. کدهایی که ممکن است وظیفه حفاظت از برنامه را برعهده داشته باشند و حذف شدن آنها، تهدید امنیتی بالقوه ای برای برنامه و کاربران آن باشد.
در کنفرانس سالانه USENIX، محققان مؤسسه فناوری ماساچوست نتایج تحقیقی را ارائه کردند که بر طبق آن، همگردانها میتوانند سبب حذف شدن قابلیتها و یا حتی کنترلهای حفاظتی حساس برنامه، بدون اطلاع برنامهنویس شوند. این محققان کد دستکاری شده توسط همگردان را “کد ناپایدار” (Unstable Code) نامیدهاند. به گفته این محققان، این موضوعی است که اکنون بسیار مورد توجه واقع شده و بسیاری از نرمافزارها، بخصوص آنها که به زبان C و دیگر زبانهای سطح پایین نوشته شدهاند و تا پیش از این امن در نظر گرفته میشدند، ممکن است ضعفهایی کشف نشده داشته باشند.
در این تحقیق، 16 همگردان متنباز و تجاری ++C/C، ساخته شده توسط شرکتهایی همچون اینتل، آیبیام و مایکروسافت، بررسی و مشخص شده همه آنها ممکن است سبب بروز “کد ناپایدار” شوند.
این محققان، ابزاری برای کشف کدهای ناپایدار در برنامههای نوشته شده به زبانهای C و ++C با نام Stack ارائه کردهاند و امیدوارند سازندگان همگردان، هنگام ارتقای محصولاتشان از آن استفاده کنند.
این گروه از محققان، با استفاده از Stack، بیش از 160 باگ را در برنامههای مختلف بدلیل “کد ناپایدار” شناسایی کردند. 11 باگ کشف شده مربوط به بخش اصالتسنجی در پودمان Kerberos بوده که همه آنها نهایتاً توسط توزیع کنندگان Kerberos بطرف شده است. همچنین توسط این ابزار، 68 باگ نیز در نرمافزار مدیریتی PostgreSQL کشف شده که باعث عرضه شدن 29 اصلاحیه جدید برای این نرمافزار شد.
همگردانها، کد برنامه را با استفاده از مشخصات زبان برنامهنویسی به زبان ماشین ترجمه میکنند. همچنین همگردانها قادر به بهینه ساختن کد با بررسی منطق آن برای اجرای مؤثرتر با کارایی بیشتر میباشند. برای مثال، همگردان میتواند، در حین ترجمه، فرامینی را اضافه کند که هیچ وقت توسط برنامهنویس فراخوانی نشده است.
همچنین همگردان ممکن است فرامینی را حذف کند که می توانند نقشی با اهمیت در امن نگه داشتن نرمافزار داشته باشند. برای نمونه، تابعی که برنامه را از گزند حملات سرریز حافظه (Buffer Over-flow) محافظت میکند ممکن است توسط همگردان بعنوان یک اشتباه در نظر گرفته شده و در طول فرآیند ترجمه، بدون آگاه ساختن برنامهنویس حذف شود. این در حالی است که سازندگان میتوانند، همگردان را بنحوی طراحی کنند که این گونه موارد را به اطلاع برنامهنویس برساند.
البته در بسیاری موارد، زبان برنامه نویسی که همگردان بر اساس آن ساخته شده است، خود، هیچ راهکاری برای برخورد با اینگونه شرایط ارائه نمیکند و بنابراین همگردان هر شرکت، رفتاری متفاوت بروز میدهد که نتیجه آن “کد ناپایدار” خواهد بود.
در دهههای گذشته ،کارایی بیشتر برنامه، به معنای تبحر و دانش بالای برنامهنویس بود. اما در سالهای اخیر، بدلیل گسترش حملات سایبری و سوءاستفاده از ضعفهای امنیتی نرمافزارها، امن بودن برنامه نقشی بااهمیتتر یافته است. اکنون با مطرح شدن کد ناپایدار، دغدغهای جدید دامنگیر برنامهنویسان حرفهای شده است.