Веб-додатки стикаються з проблемою вразливості, адже вони доступні для мільярдів користувачів інтернету, серед яких є чимало охочих обійти систему безпеки з різних мотивів.
На зорі інтернету одним з найпоширеніших видів атак була атака методом “грубої сили”. Такі атаки зазвичай проводили боти, або ж наполегливі користувачі, які перебирали безліч комбінацій логінів та паролів, доки не знаходили ту, яка відкривала доступ до цільової програми.
Завдяки політиці надійних паролів, обмеженій кількості спроб входу та використанню капчі, атаки “грубою силою” втратили свою актуальність. Проте, кіберзлочинці постійно шукають нові способи зламу та використовують їх для здійснення сучасних видів атак. Зокрема, вони виявили, що текстові поля у веб-сторінках або програмах можна використовувати, вводячи або вставляючи у них нестандартний текст, який змушує програму виконувати небажані дії. Так з’явилися так звані ін’єкційні атаки.
Ін’єкційні атаки можна використовувати не лише для несанкціонованого доступу до програми, а й для розкриття конфіденційної інформації, або навіть для повного захоплення сервера. Саме тому ці атаки становлять загрозу не лише для веб-додатків, а й для користувачів, чиї дані зберігаються в цих програмах, а в гіршому випадку – для інших підключених додатків і сервісів.
Впровадження коду
Впровадження коду є одним з найпоширеніших видів ін’єкційних атак. Якщо зловмисник знайомий з мовою програмування, структурою бази даних або операційною системою, що використовується веб-додатком, він може вставити шкідливий код через текстові поля введення, щоб змусити веб-сервер виконувати потрібні йому дії.
Цей вид ін’єкційних атак можливий у програмах, які не перевіряють вхідні дані. Якщо поле введення тексту дозволяє користувачам вводити будь-яку інформацію, це створює потенційну вразливість. Для захисту від таких атак, програма повинна максимально обмежувати вхідні дані користувача.
Наприклад, слід обмежити обсяг очікуваних даних, перевіряти їх формат перед прийняттям та обмежувати набір дозволених символів.
Вразливості, пов’язані з впровадженням коду, можна виявити, перевіряючи текстові поля веб-програми різними типами вмісту. Хоча виявлення таких вразливостей є відносно простим, їх експлуатація може мати значні наслідки. Успішна атака може призвести до втрати конфіденційності, цілісності, доступності або функціональності програми.
SQL-ін’єкція
Цей тип атаки, як і впровадження коду, полягає у вставленні SQL-скрипту (мови запитів до баз даних) у поле введення тексту. Скрипт надходить до програми, яка виконує його безпосередньо у своїй базі даних. В результаті, зловмисник може обійти екран входу, або виконати більш шкідливі дії, наприклад, читати конфіденційні дані з бази, змінювати чи видаляти їх, а також виконувати адміністративні операції.
PHP та ASP програми більш вразливі до SQL-ін’єкцій через використання застарілих функціональних інтерфейсів. J2EE та ASP.Net програми, зазвичай, краще захищені від таких атак. Якщо виявлено вразливість SQL-ін’єкції, потенційний масштаб атак обмежений лише навичками та креативністю зловмисника. Наслідки SQL-ін’єкції можуть бути вкрай серйозними.
Впровадження команди
Ці атаки, зазвичай, стають можливими через недостатню перевірку вхідних даних. Від атак із впровадженням коду вони відрізняються тим, що зловмисник вставляє не фрагменти коду, а системні команди. Таким чином, хакеру не потрібно знати мову програмування чи базу даних, достатньо знати операційну систему серверу.
Впроваджені системні команди виконуються головною операційною системою з правами програми, що може призвести до відкриття вмісту файлів на сервері, перегляду структури каталогів, зміни паролів користувачів та іншого.
Системний адміністратор може запобігти таким атакам, обмежуючи рівень доступу веб-додатків до системи сервера.
Міжсайтовий скриптинг (XSS)
Коли програма вставляє вхідні дані від користувача у вихід, не перевіряючи та не кодуючи їх, це дає зловмиснику змогу надіслати шкідливий код іншому кінцевому користувачеві. Атаки міжсайтового скриптингу (XSS) використовують цю можливість для впровадження шкідливих скриптів на довірені веб-сайти. Ці скрипти потім відправляються іншим користувачам програми, що стають жертвами.
Браузер жертви виконає шкідливий скрипт, не знаючи про його небезпеку. Таким чином, він надасть доступ до маркерів сеансу, файлів cookie або конфіденційної інформації, що зберігається в браузері. Правильно написані скрипти можуть навіть змінювати HTML-вміст сторінки.
XSS-атаки поділяють на два основних типи: збережені та відображені.
У збережених атаках, шкідливий скрипт постійно зберігається на цільовому сервері, наприклад, на форумі, у базі даних чи журналі відвідувань. Жертва отримує його, коли її браузер запитує збережену інформацію. У відображених XSS-атаках шкідливий скрипт відображається у відповіді, яка містить вхідні дані, відправлені на сервер. Це може бути, наприклад, повідомлення про помилку або результат пошуку.
XPath-ін’єкція
Цей вид атаки можливий, коли веб-програма використовує введені користувачем дані для створення XPath-запиту до XML-даних. Принцип роботи цих атак схожий на SQL-ін’єкції: зловмисник надсилає до програми некоректну інформацію, щоб зрозуміти структуру XML-даних, а потім атакує знову для отримання доступу до цих даних.
XPath – це стандартна мова, за допомогою якої можна вказати, які атрибути потрібно знайти. Для виконання запиту до XML-даних веб-програми використовують введені користувачем дані для встановлення шаблону пошуку. Надсилаючи некоректні дані, шаблон можна перетворити на операцію, яку зловмисник хоче застосувати до цих даних.
На відміну від SQL, XPath не має різних версій. Це означає, що XPath-ін’єкцію можна здійснити у будь-якій веб-програмі, що використовує XML-дані. Це також означає, що атака може бути автоматизована, і її можна використовувати проти необмеженої кількості цілей.
Ін’єкція поштової команди
Цей метод атаки використовують для експлуатації поштових серверів та програм, що створюють IMAP або SMTP оператори з некоректно перевірених вхідних даних користувача. Іноді IMAP та SMTP сервери не мають такого ж рівня захисту від атак, як більшість веб-серверів, тому можуть бути більш вразливими. Зловмисники, проникаючи через поштовий сервер, можуть обійти обмеження, як капча чи обмежену кількість запитів.
Для експлуатації SMTP-сервера зловмисникам потрібен дійсний обліковий запис електронної пошти для відправки повідомлень зі впровадженими командами. Якщо сервер вразливий, він реагуватиме на запити, дозволяючи, наприклад, обходити обмеження та використовувати сервіс для розсилки спаму.
IMAP-ін’єкція найчастіше використовується у веб-клієнтах пошти, використовуючи функцію читання повідомлень. Атаку можна здійснити, ввівши у браузері URL-адресу зі впровадженими командами.
CRLF-ін’єкція
Вставлення символів повернення каретки та переводу рядка (CRLF) у поля веб-форми є методом атаки під назвою CRLF-ін’єкція. Ці невидимі символи вказують на кінець рядка або команди в багатьох Інтернет-протоколах, таких як HTTP, MIME чи NNTP.
Наприклад, вставка CRLF в HTTP-запит з наступним HTML-кодом може призвести до надсилання спеціальних веб-сторінок відвідувачам сайту.
Цю атаку можна здійснити на веб-програмах, які не фільтрують введені користувачем дані належним чином. Така вразливість може відкрити двері до інших видів ін’єкційних атак, таких як XSS та впровадження коду, а також може призвести до захоплення сайту.
Ін’єкція заголовка хосту
На серверах, де розміщено багато веб-сайтів чи додатків, заголовок хосту допомагає визначити, який із них (так званий віртуальний хост) повинен обробляти вхідний запит. Значення заголовка вказує серверу, до якого віртуального хосту потрібно направити запит. Якщо сервер отримує недійсний заголовок хосту, він, зазвичай, передає запит першому віртуальному хосту в списку. Цю вразливість зловмисники можуть використовувати для надсилання довільних заголовків хосту на перший віртуальний хост на сервері.
Маніпуляція заголовком хосту найчастіше стосується додатків PHP, хоча можлива і з іншими веб-технологіями. Атаки на заголовок хосту є активаторами для інших видів атак, таких як отруєння веб-кешу. Наслідки можуть бути дуже серйозними, наприклад, виконання зловмисниками конфіденційних операцій, таких як скидання пароля.
LDAP-ін’єкція
LDAP – це протокол для спрощення пошуку ресурсів (пристроїв, файлів, користувачів) в мережі. Він корисний для інтрамереж, та може використовуватись для зберігання імен користувачів та паролів у системах єдиного входу. LDAP-запити використовують спеціальні керуючі символи. Зловмисники можуть змінити очікувану поведінку LDAP-запиту, вставивши в нього такі символи.
Як і в інших випадках, основна проблема, що створює можливість для LDAP-ін’єкцій – неправильна перевірка введених користувачем даних. Якщо текст, надісланий користувачем, без перевірки використовується в LDAP-запиті, запит може надати зловмиснику список всіх користувачів, якщо він вставить у потрібне місце символ зірочки.
Запобігання ін’єкційним атакам
Як ми побачили в цій статті, всі ін’єкційні атаки спрямовані на сервери та програми, доступні для будь-якого користувача інтернету. Відповідальність за запобігання таким атакам несуть розробники програм та адміністратори серверів.
Розробники додатків повинні пам’ятати про ризики, пов’язані з недостатньою перевіркою введених даних, та використовувати кращі практики для їх очищення. Адміністратори серверів повинні регулярно перевіряти свої системи для виявлення вразливостей та їхнього швидкого усунення. Існує багато способів виконання таких перевірок, як за запитом, так і в автоматичному режимі.