Кіріспе

Кодты енгізу – жарамсыз деректерді өңдеуден туындаған компьютерлік қателікті пайдалану. Кодты енгізу – шабуылшының осал компьютерлік бағдарламаға кодты енгізуі (немесе "инъекциялауы") және орындалу бағытын өзгертуі үшін пайдаланатын әдіс. Кодты сәтті енгізудің салдары ауыр болуы мүмкін, мысалы, компьютерлік вирустар мен құрттардың таралуына жағдай жасау. Кодты енгізу оқшаулығы қолданба интерпретаторға сенімсіз деректерді жібергенде пайда болады. Инъекциялық қателер көбінесе SQL, LDAP, XPath, NoSQL сұраныстары, операциялық жүйе командалары, XML талдағыштары, SMTP тақырыптары, бағдарлама аргументтері және т.б. жерлерде кездеседі. Инъекциялық қателерді кодты тексеруге қарағанда бастапқы кодты зерделеу арқылы анықтау оңайырақ. Сканерлер мен фаззерлер инъекциялық қателерді табуға көмектеседі. Кодты енгізу деректерді жоғалтуға немесе зақымдануға, жауапкершіліктің болмауына немесе қол жеткізуден бас тартуға әкелуі мүмкін. Кейде кодты енгізу хостты толық бақылауға алуға дейін соқтыруы мүмкін. Кодты енгізудің кейбір түрлері интерпретациядағы қателер болып табылады, олар пайдаланушы енгізген деректерге ерекше мағына береді. Компьютерлік ғылымнан тыс жерлерде де осыған ұқсас түсіндіру қателіктері кездеседі, мысалы, "Who's on First?" комедиялық қойылымында. Онда жеке есімдерді қарапайым сөздерден ажырату қиын. Сол сияқты, кейбір кодты енгізу түрлерінде пайдаланушы енгізген деректерді жүйелік командалардан ажырату мүмкін болмайды. Кодты енгізу әдістері жүйеге ақпарат алу, құқықтарды арттыру немесе жүйеге рұқсатсыз кіру үшін хакерлік шабуылдар мен жарылу кезінде жиі қолданылады. Кодты енгізуді зиянды мақсаттар үшін көптеген жағдайларда пайдалануға болады, мысалы:
SQL инъекциясы арқылы деректер базасындағы мәндерді өзгерту. Бұл веб-сайтты бұзудан бастап, құпия деректерді компрометтеуге дейін әкелуі мүмкін. PHP немесе ASP сияқты серверлік скрипт кодтарын енгізу арқылы серверде зиянды бағдарламаны орнату немесе зиянды кодты орындау. UNIX жүйесінде setuid root бинарлық файлындағы shell инъекциясы оқшаулығын пайдалану арқылы root құқықтарын алу немесе Microsoft Windows жүйесінде қызметті пайдалану арқылы жергілікті жүйеге қол жеткізу. HTML/скрипт инъекциясы (сайттар аралық скрипттер) арқылы веб-пайдаланушыларға шабуыл жасау. Интернет заттарына (IoT) кодты енгізу шабуылдары деректерді бұзу және қызмет көрсетуді тоқтату сияқты ауыр салдарларға әкелуі мүмкін. 2008 жылы тіркелген барлық осалдықтардың 5,66% кодты енгізу ретінде жіктелді, бұл рекордтық көрсеткіш. 2015 жылы бұл көрсеткіш 0,77%-ға дейін төмендеді.

Қауіпсіз және қасақана қолданылмаған

Кодты инъекциялау жақсы ниетпен қолданылуы мүмкін; мысалы, кодты инъекциялау арқылы бағдарламаның немесе жүйенің мінез-құлқын өзгерту немесе түзету жүйенің ешқандай зұлым ниетсіз белгілі бір жолмен әрекет етуіне әкелуі мүмкін. Кодты инъекциялау мысалы:
Іздеу нәтижелері бетінің бастапқы дизайнында болмаған пайдалы жаңа бағанды қосу. Бастапқы жобаның стандартты функцияларында ашылмаған өріс арқылы деректерді сүзгілеудің, реттеудің немесе топтастырудың жаңа тәсілін ұсыну. Dropbox сияқты бағдарламалар үшін, оффлайн бағдарламада онлайн ресурстарға қосылуға мүмкіндік беретін арнайы бөлімдерді қосу. Linux Dynamic Linker-ді белгілі бір libc функцияларымен бірдей атаудағы функцияны анықтау, оны кітапхана ретінде байланыстыру және libc функциясын алмастыру үшін пайдалану. Кейбір пайдаланушылар еш ойланбастан кодты инъекциялауды орындай алады, себебі олар бағдарламаға берген деректерді жүйені жасаған адамдар ескермеген болуы мүмкін. Мысалы:
Пайдаланушы дұрыс деп санайтын деректерде әзірлеуші арнайы мағынасы бар деп белгілеген символдар немесе символдар тізбегі болуы мүмкін (мысалы, "Шеннон & Джейсон" сөзіндегі "&" немесе "Баб 'Слаггер' МакКракен" сөзіндегі дәйексөздер). Пайдаланушы бір қолданбада қалыпты түрде өңделетін, бірақ қабылдау жүйесіне зиян келтіретін бұрыс форматталған файлды жіберуі мүмкін. Кодты инъекциялаудың тағы бір пайдалы жағдайы – инъекциялық қателерді анықтау және оларды жою. Бұл "ақ хат" тестілеуі деп аталады.

Сервер жағындағы үлгілерді енгізу

Үлгілер қозғалтқыштары қазіргі заманғы веб-қосымшаларда динамикалық деректерді көрсету үшін жиі қолданылады. Дегенмен, тексерілмеген пайдаланушы деректеріне сену жиі серверлік үлгілерді енгізу сияқты қауіпті осалдықтарға алып келуі мүмкін. Бұл осалдық сайттар арасындағы скрипттерге ұқсас болғанымен, үлгіні енгізу веб-серверде, емес келушінің браузерінде кодты орындауға мүмкіндік береді. Ол веб-бетті көрсету үшін пайдаланушының енгізген мәліметтері мен үлгілерді жиі пайдаланатын веб-қосымшалардың әдеттегі жұмыс процесін бұрмалайды. Төмендегі мысал осы ұғымды көрсетеді. Мұнда үлгідегі келушінің аты рендеринг процесінде деректермен алмастырылады. Сәлем, келуші аты. Шабуылшы осы процесті пайдаланып, зиянды келуші атын беру арқылы рендерингтік құбырға кодты енгізе алады. Веб-қосымшаның іске асылуына байланысты, ол 7*'7' енгізуді таңдауы мүмкін, сонда рендер оны Сәлем 7777777 деп түсіндіруі мүмкін. Нақты веб-сервер зиянды кодты өңдеп, сондықтан қашықтан кодты орындауға осал болуы мүмкін екенін ескеріңіз.

Нысанды инъекциялау

PHP нысандардың толықтай серияландырылуына және сериясыздандырылуына мүмкіндік береді. Егер сенімсіз деректерді сериясыздандыру функциясына жіберуге рұқсат берілсе, бағдарламадағы қолданыстағы кластарды жаңартуға және қауіпті шабуылдар жасауға болады. Мұндай шабуыл 2013 жылы Joomla жүйесінде анықталған.