تروجان سورس: وقتی کد مخرب، در کاراکترهای نامرئی مخفی می‌شود

دو پژوهشگر از دانشگاه کمبریج بریتانیا، تکنیک حمله جالبی به نام Trojan source کشف کرده‌اند. مهاجم می‌تواند با این روش، در نرم‌افزارهای متن‌باز، کدهایی قرار دهد که از چشم انسان پنهان بماند.

 تروجان سورس: وقتی کد مخرب، در کاراکترهای نامرئی مخفی می‌شود

دو پژوهشگر از دانشگاه کمبریج بریتانیا، تکنیک حمله جالبی به نام Trojan source کشف کرده‌اند. مهاجم می‌تواند با این روش، در نرم‌افزارهای متن‌باز، کدهایی قرار دهد که از چشم انسان پنهان بماند.

استاندارد یونیکد، کاراکترهای زبان‌های مختلف طبیعی را بازنمایی می‌کند. این استاندارد، دارای کاراکترهایی برای کنترل جهت متن (راست به چپ یا چپ به راست) نیز است. این کاراکترها نامرئی هستند، اما بر نحوه نمایش متن تأثیر می‌گذارند. با سوء استفاده از این کاراکترها می‌توان کدی نوشت که از دید انسان و کامپایلر/مفسر متفاوت به نظر برسد.

 

طرز کار آسیب‌پذیری

دو دانشمند به نام Nicholas Boucher و Ross Anderson، با انتشار مقاله ای طرز کار این نوع حمله (CVE-2021-42574) را نشان داده‌اند. برای مثال، به دو شکل زیر که از مقاله مذکور گرفته شده‌اند توجه کنید:

شکل 1-بایت‌های کدگذاری شده حمله تروجان سورس از نوع تبدیل به کامنت در زبان C.

شکل 2-متن رندر گرفته شده از حمله تبدیل به کامنت به زبان C.

کد اول (شکل 1)، کدی است که کاراکترها را به همان ترتیب نوشته شده نشان می‌دهد. در واقع این کدی است که ماشین می‌بیند. کاراکترهایی که به طور رنگی نشان داده شده‌اند (RLO، LRI و PDI)، در اصل نامرئی هستند و تنها برای توضیح بهتر نشان داده شده‌اند. این کاراکترها برای کنترل جهت متن به کار می‌روند. بر هم زدن ترتیب کاراکترها در نهایت باعث می‌شود کد در ویرایشگرهای متنی به صورت شکل 2 به نظر برسد.

در شکل 2 به نظر می‌رسد عبارت شرطی (if) جزئی از کد است و در نهایت اجرا می‌شود. اما در شکل 1، دو خط قبل و بعد printf، کامنت هستند و اجرا نمی‌شوند، یعنی دستور print فارغ از برقرار بودن شرط، اجرا می‌شود.

مهاجمان می‌توانند با استفاده از این تکنیک، کدهای مخربی را در مخازن نرم‌افزارهای متن‌باز پیشنهاد دهند. هنگامی که افراد دیگر کد را بازبینی می‌کنند، مخرب بودن آن را تشخیص نمی‌دهند، در نتیجه ممکن است آن را تأیید و به نرم‌افزار اضافه کنند. به سه طریق می‌توان از این روش سوء استفاده کرد:

  • بازگشت زودهنگام: استفاده از دستور return (بازگشت) در میانه تابع، به طوری که به نظر می‌رسد این دستور بخشی از کامنت است، اما در اصل باعث خروج زودهنگام از تابع می‌شود.
  • تبدیل به کامنت: متنی که به نظر می‌رسد جزئی از کد است، اما در اصل جزء کامنت است و اجرا نمی‌شود (مانند مثال بالا).
  • رشته گسترش‌یافته: متنی درون یک لیترال string قرار می‌گیرد، اما به نظر می‌رسد خارج از string و جزئی از کد است. این امر می‌تواند در هنگام مقایسه دو رشته باعث شود آنها متفاوت ارزیابی شوند، در صورتی که ظاهراً یکسان هستند.

 

باز هم هموگلیف

این دانشمندان علاوه بر حمله مذکور، گونه دیگری از حمله را نیز ارائه داده‌اند که مبتنی بر کاراکترهای homoglyph است، یعنی کاراکترهایی که ظاهر بصری مشابهی دارند، اما کدگذاری یونیکد آنها متفاوت است. برای مثال H و Н کاراکترهای متفاوتی هستند. این نوع حمله با شناسه CVE-2021-42694 شناخته می‌شود. این ترفند، از قبل در حملات فیشینگ نیز به کار می‌رفت.

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

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

 

منبع: Trojan Source (+)، Bleeping Computer

 

کلمات کلیدی