ایجاد آسیبپذیریهای نامرئی در کدهای منبع برنامهها؛ روش جدید حمله هکرها
به تازگی محققان امنیتی یک روش حمله جدید را معروف به “Trojan Source” کشف کردهاند. در این روش، مجرمان سایبری آسیبپذیریها را به نحوی در کدهای پروژههای نرمافزاری که به زبانهای C، C++، Java Script، Paython و غیره نوشته شدهاند تزریق میکنند که امکان شناسایی آنها توسط کاربران وجود ندارد. مهاجمان از روش Trojan Source جهت اجرای حملات زنجیره تأمین استفاده نموده و نرمافزارها را مورد هدف حملات خود قرار میدهند.
سوءاستفاده از استانداردهای کدگذاری متن
بنا بر گفته محققان امنیتی: «مهاجمان در این روش تلاش میکنند با تولید فایلهای باینری به نحوی که برای منطق چشم انسان قابل رؤیت نباشد، کامپایلرها را فریب دهند. آنها از کاراکترهای کنترلی یونیکد[1] جهت تغییر ترتیب توکنهای کد منبع در سطح کدگذاری استفاده میکنند». کارشناسان امنیتی همچنین متوجه روشهایی برای دستکاری کدگذاری فایلهای کد منبع شدهاند. در یکی از این روشهای مهلک و مخرب از کاراکترهای تغییر جهت یونیکد استفاده میشود. به این ترتیب کد ایجاد شده کاملاً با منطق اصلی متفاوت است.
مهاجمان میتوانند با استفاده از کاراکترهای کنترلی در توضیحات و رشتهها ترتیب کد اصلی را تغییر دهند تا منطق آن تغییر یافته و یک آسیبپذیری قابل بهرهبرداری ایجاد کنند.
حمله دوجهته و هموگلایف
محققان اثبات کردند یکی از روشهای دستیابی به این هدف، استفاده از کاراکترهای کنترلی یونیکد برای متنهای دوجهته (یعنی چپ به راست و راست به چپ) است تا جهت نمایش محتوا را کنترل نمایند. در حال حاضر این آسیبپذیری با شناسه CVE-2021-42574 قابل ردیابی است. بر اساس تحقیقات انجام شده، هکرها با استفاده از کاراکترهای کنترلی یونیکد در متنهای دوجهته، جهت نمایش محتوا را کنترل میکنند.
کاراکترهای کنترلی دوجهته LRI و RLI یکسری کاراکتر نامرئی هستند. تزریق چنین دستورالعملهایی منجر به تحلیل یک کد توسط کامپایلر میشود که با آنچه چشم انسان مشاهده میکند کاملاً متفاوت است. در عکس زیر، کامپایلر تشخیص داده که از کاراکترهای کنترلی LRI و RLI استفاده شده و آنها را تحلیل کرده است؛ در حالی که چشم انسان آن را به صورت توضیحاتی مشاهده میکند که کامپایلرها آنها را نادیده میگیرند.
مهاجمان میتوانند با تزریق کاراکترهای کنترلی دوجهته یونیکد در توضیحات و رشتهها کدهایی به زبانهای برنامهنویسی مدرن تولید کنند که از نظر نحوی درست به نظر میرسند ولی ترتیب کاراکترها در آنها نشاندهنده منطقی است که با منطق واقعی تفاوت دارد.
حمله هموگلایف (با شناسه CVE-2021-42694) نیز روش دیگری برای اجرای حمله Trojan Source است. در این روش دو کاراکتر متفاوت، ظاهراً مشابه یکدیگر هستند (مثل عدد صفر و حرف O انگلیسی یا کاراکتر L کوچک و i بزرگ انگلیسی) در حالی که چشم انسان این دو تابع متفاوت را مشابه هم میبیند.
در عکس زیر نمونهای از این حملات را میتوانید مشاهده کنید. در این قطعه کد، کامپایلر بین حروف H که با رنگهای آبی و قرمز مشخص هستند تفاوت قائل است و با این کد به صورت متفاوت رفتار میکند. در نتیجه خروجی متفاوت از تصور کاربر است.
همچنین محققان پی بردهاند که مرورگرها، ویرایشگرها و سیستمعاملها معمولاً از کاراکترهای بازنویسی دوجهته برای انجام عملیات کپی/پیست استفاده میکنند. آنها با امتحان کردن حمله Trojan Source بر ضد چندین ویرایشگر متن و مخزن تحت وب که در جامعه برنامهنویسی کاربردهای زیادی دارند، به این نتیجه رسیدند که این روش بر روی تعداد زیادی از ویرایشگرها قابل انجام است.
محققان اظهار داشتهاند که امکان استفاده از بازنویسیهای دوجهته از طریق روشهای زیر وجود دارد:
- مخفی کردن کاراکتر سرخط: میتوان دستور رفتن به خط جدید را در یک توضیح مخفی کرد تا یک تابع زودتر از آنچه به نظر میرسد، فراخوانی شود.
- تبدیل کردن به توضیح: میتوان کدهای مهم مثل شرطها را در یک توضیح مخفی کرد به نحوی که مفسر یا کامپایلر آنها را نادیده بگیرد.
- رشتههای کشیده: تغییر ترتیب کد به صورتی که به نظر برسد خارج از یک رشته قرار دارد.
یکی از روشهای مقابله با Trojan Source، رد کردن استفاده از کاراکترهای کنترلی برای جهتداری متن در زبانهای کدنویسی و کامپایلرهایی است که این زبانها را اجرا میکنند. همین راهحل ساده معمولاً کفایت میکند. اگر یک برنامه کاربردی به دنبال متنی باشد که نیاز به بازنویسیهای دوجهته دارد، توسعهدهنده میتواند این کاراکترها را با استفاده از دنبالههای گریز (Escape Sequence) و خودداری از درج کاراکترهای بالقوه خطرناک در کد منبع تولید کند.
افشای هماهنگسازی شده
مدتی پیش محققان در یک اعلان همگانی به مدیران توسعه چندین محصول نرمافزاری هشدار دادند که محصولات آنها در برابر حمله Trojan Source آسیبپذیر بوده و یک مهلت 99 روزه را نیز جهت رفع این آسیبپذیری در اختیار آنها قرار دادند.
مرکز هماهنگی CERT هم پس از دریافت یک گزارش آسیبپذیری، پلتفرم ارتباطی مشترکی را برای پیادهسازی سازوکارهای دفاعی راهاندازی کرده است. البته باید به این نکته توجه داشت که در حال حاضر همچنان کامپایلرهایی وجود دارد که قادر به مقابله با روش حمله Trojan Source نیستند.
محققان امنیتی به دولتها و شرکتها توصیه کردهاند که از تأمینکنندگان محصولاتشان بخواهند سازوکارهای دفاعی لازم را اجرا و پیادهسازی کنند. کارشناسان معتقدند آسیبپذیری Trojan Source تقریباً بر همه زبانهای برنامهنویسی تأثیرگذار بوده و آن را به یک فرصت کمیاب برای مقایسه عملکرد و واکنش شرکتهای مختلف در برخورد با این آسیبپذیری تبدیل کرده است.
هماکنون سازمانهایی که منابع کد را نگهداری میکنند، در حال پیادهسازی راهکارهای دفاعی برای مقابله با این روش حمله هستند. آنها در یک مخزن گیتهاب اسکریپت تأییدی را ارایه کردهاند که دلالت بر جدی بودن خطر حمله Trojan Source دارد.
[1] رایانهها فقط با صفر و یکها کار میکنند. به همین خاطر تمام علائم، حروف برنامههای کاربردی و غیره بر اساس یک استاندارد واحد به یک عدد باینری تبدیل میشود. بنابراین امکان مدیریت آنها توسط رایانهها آسان خواهد شد. یونیکد، مجموعهای از کاراکترها و اعداد است که هر عدد بیانگر یک کاراکتر است.
منبع: bleepingcomputer