Кіріспе
Кодты енгізу – жарамсыз деректерді өңдеуден туындаған компьютерлік қателікті пайдалану. Кодты енгізу – шабуылшының осал компьютерлік бағдарламаға кодты енгізуі (немесе "инъекциялауы") және орындалу бағытын өзгертуі үшін пайдаланатын әдіс. Кодты сәтті енгізудің салдары ауыр болуы мүмкін, мысалы, компьютерлік вирустар мен құрттардың таралуына жағдай жасау. Кодты енгізу оқшаулығы қолданба интерпретаторға сенімсіз деректерді жібергенде пайда болады. Инъекциялық қателер көбінесе 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%-ға дейін төмендеді.
Code injection is the exploitation of a computer bug that is caused by processing invalid data. The injection is used by an attacker to introduce (or "inject") code into a vulnerable computer program and change the course of execution. The result of successful code injection can be disastrous, for example, by allowing computer viruses or computer worms to propagate. Code injection vulnerabilities occur when an application sends untrusted data to an interpreter. Injection flaws are most often found in SQL, LDAP, XPath, NoSQL queries, OS commands, XML parsers, SMTP headers, program arguments, etc. Injection flaws tend to be easier to discover when examining source code than via testing. Scanners and fuzzers can help find injection flaws. Injection can result in data loss or corruption, lack of accountability, or denial of access. Injection can sometimes lead to complete host takeover. Certain types of code injection are errors in interpretation, giving special meaning to user input. Similar interpretation errors exist outside the world of computer science such as the comedy routine Who's on First?. In the routine, there is a failure to distinguish proper names from regular words. Likewise, in some types of code injection, there is a failure to distinguish user input from system commands. Code injection techniques are popular in system hacking or cracking to gain information, privilege escalation or unauthorized access to a system. Code injection can be used malevolently for many purposes, including:
Arbitrarily modifying values in a database through SQL injection. The impact of this can range from website defacement to serious compromise of sensitive data. Installing malware or executing malevolent code on a server by injecting server scripting code (such as PHP or ASP). Privilege escalation to root permissions by exploiting shell injection vulnerabilities in a setuid root binary on UNIX, or Local System by exploiting a service on Microsoft Windows. Attacking web users with HTML/script injection (Cross site scripting). Code injection attacks in Internet of Things could also lead to severe consequences like data breaches and service disruption. In 2008, 5.66% of all vulnerabilities reported that year were classified as code injection, the highest year on record. In 2015, this had decreased to 0.77%.
Қауіпсіз және қасақана қолданылмаған
Кодты инъекциялау жақсы ниетпен қолданылуы мүмкін; мысалы, кодты инъекциялау арқылы бағдарламаның немесе жүйенің мінез-құлқын өзгерту немесе түзету жүйенің ешқандай зұлым ниетсіз белгілі бір жолмен әрекет етуіне әкелуі мүмкін. Кодты инъекциялау мысалы:
Іздеу нәтижелері бетінің бастапқы дизайнында болмаған пайдалы жаңа бағанды қосу. Бастапқы жобаның стандартты функцияларында ашылмаған өріс арқылы деректерді сүзгілеудің, реттеудің немесе топтастырудың жаңа тәсілін ұсыну. Dropbox сияқты бағдарламалар үшін, оффлайн бағдарламада онлайн ресурстарға қосылуға мүмкіндік беретін арнайы бөлімдерді қосу. Linux Dynamic Linker-ді белгілі бір libc функцияларымен бірдей атаудағы функцияны анықтау, оны кітапхана ретінде байланыстыру және libc функциясын алмастыру үшін пайдалану. Кейбір пайдаланушылар еш ойланбастан кодты инъекциялауды орындай алады, себебі олар бағдарламаға берген деректерді жүйені жасаған адамдар ескермеген болуы мүмкін. Мысалы:
Пайдаланушы дұрыс деп санайтын деректерде әзірлеуші арнайы мағынасы бар деп белгілеген символдар немесе символдар тізбегі болуы мүмкін (мысалы, "Шеннон & Джейсон" сөзіндегі "&" немесе "Баб 'Слаггер' МакКракен" сөзіндегі дәйексөздер). Пайдаланушы бір қолданбада қалыпты түрде өңделетін, бірақ қабылдау жүйесіне зиян келтіретін бұрыс форматталған файлды жіберуі мүмкін. Кодты инъекциялаудың тағы бір пайдалы жағдайы – инъекциялық қателерді анықтау және оларды жою. Бұл "ақ хат" тестілеуі деп аталады.
Introduce a useful new column that did not appear in the original design of a search results page. Offer a new way to filter, order, or group data by using a field not exposed in the default functions of the original design. As regards programs like Dropbox, add special parts that could be used to connect to online resources in an offline program. Utilize the Linux Dynamic Linker to define a function with the same name as certain libc functions, link that function as a library, and override the use of the libc function. Some users may unsuspectingly perform code injection because input they provide to a program was not considered by those who originally developed the system. For example:
What the user may consider a valid input may contain token characters or character strings that have been reserved by the developer to have special meaning (perhaps the "&" in "Shannon & Jason," or quotation marks as in "Bub 'Slugger' McCracken"). The user may submit a malformed file as input that is handled gracefully in one application, but is toxic to the receiving system. Another benign use of code injection could be the discovery of injection flaws themselves, with the intention of fixing these flaws. This is known as a white hat penetration test.
Сервер жағындағы үлгілерді енгізу
Үлгілер қозғалтқыштары қазіргі заманғы веб-қосымшаларда динамикалық деректерді көрсету үшін жиі қолданылады. Дегенмен, тексерілмеген пайдаланушы деректеріне сену жиі серверлік үлгілерді енгізу сияқты қауіпті осалдықтарға алып келуі мүмкін. Бұл осалдық сайттар арасындағы скрипттерге ұқсас болғанымен, үлгіні енгізу веб-серверде, емес келушінің браузерінде кодты орындауға мүмкіндік береді. Ол веб-бетті көрсету үшін пайдаланушының енгізген мәліметтері мен үлгілерді жиі пайдаланатын веб-қосымшалардың әдеттегі жұмыс процесін бұрмалайды. Төмендегі мысал осы ұғымды көрсетеді. Мұнда үлгідегі келушінің аты рендеринг процесінде деректермен алмастырылады. Сәлем, келуші аты. Шабуылшы осы процесті пайдаланып, зиянды келуші атын беру арқылы рендерингтік құбырға кодты енгізе алады. Веб-қосымшаның іске асылуына байланысты, ол 7*'7' енгізуді таңдауы мүмкін, сонда рендер оны Сәлем 7777777 деп түсіндіруі мүмкін. Нақты веб-сервер зиянды кодты өңдеп, сондықтан қашықтан кодты орындауға осал болуы мүмкін екенін ескеріңіз.
Нысанды инъекциялау
PHP нысандардың толықтай серияландырылуына және сериясыздандырылуына мүмкіндік береді. Егер сенімсіз деректерді сериясыздандыру функциясына жіберуге рұқсат берілсе, бағдарламадағы қолданыстағы кластарды жаңартуға және қауіпті шабуылдар жасауға болады. Мұндай шабуыл 2013 жылы Joomla жүйесінде анықталған.