Розповім вам про атаку через пошкодження таблиць в базах даних в СУБД MySQL. Яку я представив в травні 2009 в записі Атака на Abuse of Functionality в WordPress. Тоді я детально описав цю атаку на прикладі WordPress, а потім ще на прикладі Invision Power Board (про можливість такої атаки на IPB я знаю ще з 2007 року), але вирішив зробити про це детальну статтю.
Пошкодження таблиць в MySQL.
MySQL підтримує різні типи таблиць, які ще називають движками (storage engines). І різна кількість движків таблиць підтримується в різних версіях СУБД, зокрема MySQL 5.0 підтримує 10 движків. В MySQL існує такий тип таблиць як MyISAM. Вони є більш швидкими в роботі ніж інши типи таблиць і на протязі багатьох версій MySQL по замовчуванню використовує саме MyISAM движок при створенні нових таблиць (до версії MySQL 5.5.5). І в цього движка є важлива проблема - таблиці можуть псуватися (за звичай це індекси таблиць, тобто самі таблиці з даними залишаються цілими). Це стосується MyISAM та ISAM движків.
І відповідно їх потрібно рементовувати, для чого існує функція REPAIR для MyISAM таблиць. Функціонал ремонту може бути доданий у веб додаток - наприклад, IPB 2 і вище мають таку функцію в адмінці, а також такий функціонал додали в WordPress 2.9, але, як я писав, в ньому є DoS уразливість. Якщо такого функціоналу немає, що типово для більшості веб додатків, то потрібно використовувати будь-яки додатки для роботи з MySQL, в тому числі веб додатки, такі як MySQL Perl/CGI Client та phpMyAdmin.
Приклади вразливих додатків.
В 2009 році я розповів про можливість проведення даної атаки на WordPress (для DoS та повного захоплення сайта), а в 2011 році я розповів про атаки на IPB 1, IPB 2 та IPB 3 (для DoS). Інші веб додатки, що використовують MySQL і MyISAM таблиці, також вразливі до даної атаки.
Враховуючи, що пошкодженні таблиці є недоступними для веб додатку, то він перестає нормально проацювати. Проблема може торкнутися як якогось одного функціоналу сайту, так і усього сайту - коли веб додаток повністю перестане працювати і буде лише виводити повідомлення про помилку. Доки пошкодженні таблиці не відремонтують. Наприклад, коли пошкодити важливу таблицю в WordPress, то сайт перестає працювати і на всіх сторінках сайта виводиться повідомлення - в старих версіях движка виводиться “It doesn’t look like you’ve installed WP yet”, а в нових версіях виводиться “Error establishing a database connection”.
А враховуючи, що у веб додатках не використовуються автоматичний ремонт таблиць - я не знаю жодного такого веб додатку - то проблеми на сайті будуть доти, доки адмін сам не відремонтує таблиці (використовуючи будь-які програми для роботи з MySQL, щоб виконати REPAIR для цих таблиціь). Як я вже писав про WordPress, де в WP 2.9 розробники як би зробили автоматичне виправлення (після мого оприлюднення вищезгаданої атаки на WP), але, як я виявив, насправді вони збрехали і в движку не було зроблено автоматичного виправлення таблиць, і потрібно вручну запускати скрипт для ремонту таблиць.
Напрямки атаки.
Основними напрямками атаки через пошкодження таблиць в MySQL є наступні:
1. Проведення DoS атак. Створивши умови для пошкодження таблиць БД (через навантаження сайта), можна провести DoS атаку на сайт. Прикладами веб додатків уразливих до таких атак є WordPress та IPB.
2. Повне захоплення сайту. При наявності на сайті інсталятора та провевши DoS атаку (описану в п.1) на таблиці до яких чутливий інсталятор, можна змусити його вирішити, що движок не інстальований на сайті й провести переінсталяцію движка. Прикладами веб додатків уразливих до таких атак є WordPress.
Проведення атаки.
Для атаки потрібно знайти таблицю до якої чутливий веб додаток. Раніше я вже розповів до яких таблиць чутливі WordPress та Invision Power Board. WP чутливий до тиблиць wp_options та wp_users, а IPB чутливий до таблиць ibf_topics та ibf_session.
Після цього потрібно знайти функціонал, який використовує знайдену чутливу таблицю. Та навантажити цей функціонал таким чином, щоб вібдулося пошкодження таблиці в БД. І таким чином буде проведена атака на веб сайт.
Висновки.
З вищенаведено випливає, що до даної атаки вразливі всі веб додатки, що використовують MySQL і MyISAM таблиці. А таких веб додатків дуже багато - це можуть бути тисячі, якщо не мільйони веб додатків. І навіть при тому, що пошкодити таблицю дуже непросто (для проведення даної атаки), але така вірогідність існує, тому всім веб розробникам та адміністраторам сайтів варто врахувати цю інформацію.