<
  • Главная
Статьи

Атаки зі зміною параметрів рядка з'єднання

  1. 1. Введення
  2. 1.1 Рядки з'єднання
  3. 1.2 Використання можливостей СУБД для авторизації веб-додатків
  4. 2 Впровадження в рядок з'єднання
  5. 2.1 Формування рядків з'єднання в .NET
  6. 2.2 Зміна параметрів рядка з'єднання
  7. 2.3 Атаки за допомогою зміни параметрів рядка з'єднання (або атаки CSPP, Connection String Parameter Pollution)
  8. 2.3.1 Атака CSPP, варіант 1: крадіжка хеш-даних
  9. 2.3.2 Атака CSPP, варіант 2: Сканування портів
  10. 2.3.3 Атака CSPP, варіант 3: Крадіжка веб-облікових даних
  11. 3 Висновки
  12. посилання

SQL ін'єкція, ймовірно, найбільш відомий тип атаки веб-додатків, що порушує структуру їх баз даних. На даний момент вивчено безліч різних підходів і способів злому, і отримані результати говорять про те, що для успішного відбиття таких атак розробники повинні продумувати систему фільтрації вхідної інформації.

1. Введення

SQL ін'єкція, ймовірно, найбільш відомий тип атаки веб-додатків, що порушує структуру їх баз даних. На даний момент вивчено безліч різних підходів і способів злому, і отримані результати говорять про те, що для успішного відбиття таких атак розробники повинні продумувати систему фільтрації вхідної інформації.
Що стосується атаки, описаної в даному документі, відповідальність лежить не тільки на розробників, але також і на системних адміністраторів і постачальників баз даних. Ця атака спрямована на веб-додатки, але замість використання вразливостей в реалізації шляхом складання певних запитів до БД, що найбільш часто зустрічається в інших подібних атаках, вона змінює спосіб підключення додатки до БД.
Згідно OWASP [1], в 2007 році атаки за допомогою впровадження коду перебували на 2-му місці в рейтингу 10-ти найнебезпечніших атак на системи безпеки, поступаючись лише XSS-атак. Перша версія цього рейтингу за 2010 рік підняла атаки з використанням впровадження коду на перше місце. Насправді, найбільш успішними є атаки, поєднують XSS для доступу до системи і впровадження коду для доступу до інформації. Така суміщена атака носить назву «Зміна параметрів рядка з'єднання». Потенційна небезпека даного типу атаки і повна відсутність інформації про нього стали причиною глибокого аналізу, спрямованого на виявлення напрямків використання таких атак.

Даний документ складається з трьох основних розділів. Перший розділ - короткий вступ, в якому розповідається про те, що таке рядки з'єднання і про існуючі способи реалізації авторизації в веб-додатках. У другому розділі представлено всебічний аналіз нового способу атаки, з великою кількістю тестових прикладів. А в останньому розділі коротко підбиваються підсумки.

1.1 Рядки з'єднання

Рядки з'єднання [2] використовуються додатками для зв'язку з БД. Синтаксис таких рядків залежить від СУБД, до якої відбувається підключення, і від провайдера або драйвера, використовуваного програмістом для встановлення з'єднання.
Так чи інакше, програміст повинен вказати сервер і порт для з'єднання, ім'я бази даних, відомості для авторизації, а також деякі додаткові параметри з'єднання, такі як час очікування, альтернативні БД, протокол зв'язку або параметри шифрування.
Даний приклад являє собою рядок з'єднання для зв'язку з БД
Microsoft SQL Server:

"Data Source = Server, Port; Network Library = DBMSSOCN; Initial Catalog = DataBase; User ID = Username; Password = pwd; "

Як видно з прикладу, рядок з'єднання - це набір параметрів, між якими ставиться крапка з комою (;), кожен з яких є парою «ключ-значення». Атрибути, використані в прикладі, відповідають атрибутам з ".NET Framework Data Provider для SQL-сервера", який програмісти вибирають при роботі з класом "SqlConnection" в додатках .NET. Очевидно, що з'єднатися з SQL-сервером можна і за допомогою інших провайдерів, наприклад:
- ".NET Framework Data Provider для OLE DB" (клас OleDbConnection)
- ".NET Framework Data Provider для ODBC" (клас OdbcConnection)
- "SQL Native Client 9.0 OLE DB provider"
Найбільш простий і рекомендований спосіб з'єднання додатки .NET і SQL-сервера - використання провайдера за замовчуванням, синтаксис рядків в якому однаковий для всіх версій SQL-сервера (7, 2000., 2005 і 2008). У прикладах, що містяться в цій статті, використовується провайдер за замовчуванням.

1.2 Використання можливостей СУБД для авторизації веб-додатків

Існує два способи створення системи авторизації для веб-додатки: написати свою, або скористатися наявними можливостями СУБД. У більшості випадків розробник програми дозволяє лише одному користувачеві з'єднуватися з БД. База даних приймає такого користувача за повноцінне веб-додаток. Використовуючи це з'єднання, додаток буде посилати запити до таблиці, в якій зберігаються права доступу даного користувача.

Мал. 1. Загальна з Хема авторизації веб-додатків

Веб-додаток визначається окремим користувачем БД, яка має доступ до всієї інформації додатки, що зберігається в БД. Тобто, в БД неможливо створити зернисту систему прав доступу до різних об'єктів або відстежити дії всіх користувачів додатку, тому дані завдання покладаються на сам додаток. Якщо зловмисникові вдасться використовувати уразливість в додатку і отримати доступ до БД, то йому стане доступна вся інформація, що зберігається в ній. Це найбільш загальна (і проста) схема, яка використовується в безлічі CMS, таких як Joomla, Mambo і багатьох інших. Найчастіше метою зловмисників є облікові дані з таблиці користувачів в БД.

Альтернатива полягає в передачі процедури авторизації СУБД, щоб рядки з'єднання не містили постійний набір даних, а отримували б параметри, введені користувачем, і СУБД потім перевіряла б їх.
Додатки для управління БД завжди використовують можливості СУБД для авторизації, щоб користувач, що з'єднується з додатком, мав можливість виконувати лише ті дії, на які у нього є дозволи. Використовуючи таку схему, стає можливим застосувати зернисту систему прав доступу і відстежувати дії користувача.

Мал. 2. Веб-додаток використовує можливості СУБД для авторизації.

У кожного методу свої переваги і недоліки, крім уже зазначених, розгляд яких не входить в план даної статті. Описані тут способи будуть ставитися до другого методу: використання можливостей СУБД для авторизації.

2 Впровадження в рядок з'єднання

При використанні можливостей СУБД для авторизації, впровадження в рядок з'єднання дозволяє зловмисникові вносити в неї нові параметри, додаючи їх після крапки з комою (;).
У прикладі, де користувач повинен був ввести ім'я та пароль для генерації рядка з'єднання, зловмисник може відключити систему шифрування, ввівши пароль типу "pwd; Encryption = off", в результаті чого рядок з'єднання буде виглядати так:

"Data Source = Server, Port; Network Library = DBMSSOCN; Initial Catalog = DataBase; User ID = Username; Password = pwd; Encryption = off "

Після формування рядка з'єднання, значення параметра Encryption додається до вже існуючого набору параметрів.

2.1 Формування рядків з'єднання в .NET

Побоюючись подібного використання [3] рядків з'єднання, Microsoft в другій версії .NET Framework додала класи "ConnectionStringBuilder" [4]. Вони були націлені на формування безпечних рядків з'єднання за допомогою базового класу (DbConnectionStringBuilder), або за допомогою спеціальних класів різних провайдерів (SqlConnectionStringBuilder, OleDbConnectionStringBuilder, і т.п ...). І поставлена ​​мета була досягнута, по-перше, поданням атрибутів у вигляді пари «ключ-значення», а по-друге, униканням спроб впровадження коду.
Використання даних класів для формування рядків з'єднання може запобігти впровадження коду. Проте, лише деякі розробники використовують цю можливість у своїх додатках.

2.2 Зміна параметрів рядка з'єднання

Способи зміни параметрів використовуються для заміщення їх значень. Такі способи добре відомі в середовищі HTTP [5], але їх також можна використовувати і в інших ситуаціях. В даному прикладі ми будемо підміняти параметри рядка з'єднання, що дозволить провести кілька атак.

2.3 Атаки за допомогою зміни параметрів рядка з'єднання (або атаки CSPP, Connection String Parameter Pollution)

Як приклад для ілюстрації таких атак, візьмемо веб-додаток, в якому необхідні ім'я користувача [User_Value] і пароль [Password_Value] зберігаються на сервері служби Microsoft Internet Information Services, що працює під управлінням ОС Microsoft Windows Server. Облікові дані користувача додатки будуть використовуватися для формування рядка з'єднання з базою даних Microsoft SQL Server:

Data source = SQL2005; initial catalog = db1; integrated security = no; user id = + 'User_Value' +; Password = + 'Password_Value' +;
Цей рядок з'єднання показує, як додаток зв'язується з СУБД Microsoft SQL Server. Знаючи це, зловмисник може почати атаку CSPP. Ідея подібної атаки полягає в додаванні параметра з бажаним значенням до рядка, при цьому неважливо, яке саме значення записується і знаходиться вже даний параметр в рядку. Компонент, за допомогою якого додатки .NET формують рядок з'єднання, буде використовувати значення останнього входження параметра в рядок. Якщо в рядку зустрічається два параметра з ключем "Data Source", робоче значення буде отримано з останньої пари, що дає нам такі напрямки атак CSPP.

2.3.1 Атака CSPP, варіант 1: крадіжка хеш-даних

Зловмисник може підняти підключений до інтернету фальшивий Microsoft SQL Server, також використовуючи програму для стеження за обліковими даними, т.зв. сниффер (В даному прикладі була використана утиліта CAIN [6]). Атака CSPP буде виглядати наступним чином:

User_Value:; Data Source = Rogue_Server

Password_Value:; Integrated Security = true
Що дає нам ось такий рядок з'єднання:

Data source = SQL2005; initial catalog = db1; integrated security = no; user id =; Data Source = Rogue Server; Password =; Integrated Security = true;
Значення параметрів "Data Source" і "Integrated Security" були підмінені, таким чином, «рідні» драйвери Microsoft SQL Server будуть використовувати останні значення, ігноруючи попередні, і додаток буде намагатися з'єднатися з фальшивим сервером, що має права доступу користувача Windows, який може бути користувачем системи або користувачем пулу додатків.

2.3.1.1 Приклад 1: ASP. NET Enterprise Manager
Це застаріла і не підтримується програма з відкритим вихідним кодом, хоча її до сих пір використовують деякі хостингові і інші компанії для управління базами даних Microsoft SQL Server через веб-інтерфейс. Офіційний сайт даної програми aspnetenterprisemanager. com вже не працює, але її можна завантажити з інших порталів, наприклад SourceForge [7] або MyOpenSource [8]. Цю утиліту рекомендують в якості відмінною ASP.NET- альтернативи PHPMyAdmin [9], незважаючи на те, що остання версія датована 3-им січня 2003 року.

Мал. 3. Зміна параметрів рядка з'єднання в ASP.NET Enterprise Manager для крадіжки облікового запису

Дані зберігаються на фальшивому сервері з встановленим сніффером, який надає доступ до LM-хешу облікового запису.

Дані зберігаються на фальшивому сервері з встановленим сніффером, який надає доступ до LM-хешу облікового запису

Мал. 4. збережених на фальшивому сервері хеш, отриманий за допомогою утиліти Cain

2.3.2 Атака CSPP, варіант 2: Сканування портів

Одним з необхідних параметрів рядка з'єднання є номер порту. Зловмисник може змусити вразливе додаток виконувати сканування серверів, намагаючись з'єднатися з різними портами, і буде бачити повідомлення про помилки:

User_Value:; Data Source = Target_Server, Target_Port

Password_Value:; Integrated Security = true
В результаті даної атаки отримаємо такий рядок з'єднання:

Data source = SQL2005; initial catalog = db1; integrated security = no; user id =; Data Source = Target Server, Target Port; Password =; Integrated Security = true;
У цьому рядку значення першого параметра з ключем "Data Source" буде проігноровано, а замість нього буде використано значення останнього параметра з таким ключем, тобто додаток буде намагатися з'єднатися з портом "Target Port" на сервері "Target Server". Спостерігаючи за відмінностями в отриманих повідомленнях про помилки, стає можливим виконати сканування портів.

2.3.2.1 Приклад 2: myLittleAdmin і myLittleBackup
Утиліти myLittleAdmin [10] і myLittleBackup [11] є комерційними, а розробила їх компанія myLittleTools [12]. Вони були уразливі до атак CSPP аж до версій myLittleAdmin 3.5 і myLittleBackup 1.6.

Мал. 5. Спроба з'єднання з www.gooogle.com через 80-й порт.

Як видно з рис. 5, при прослуховуванні відкритого порту ми отримуємо повідомлення про те, що Microsoft SQL Server його не прослухає, але з'єднання по протоколу TCP було встановлено.

5, при прослуховуванні відкритого порту ми отримуємо повідомлення про те, що Microsoft SQL Server його не прослухає, але з'єднання по протоколу TCP було встановлено

Мал. 6. Не вдається підключитися з www.google.com через XX порт.

TCP-з'єднання не вдасться встановити, якщо порт закритий, отже і повідомлення про помилку буде іншим. Використовуючи ці повідомлення, можна провести сканування TCP-портів сервера. Даний спосіб, природно, можна використовувати для пошуку серверів всередині демілітаризованої зони, в якій розміщено додаток.

2.3.3 Атака CSPP, варіант 3: Крадіжка веб-облікових даних

В даному випадку зловмисник намагається з'єднатися з базою даних, використовуючи системну обліковий запис веб-додатки замість облікових даних, введених користувачем:

User_Value:; Data Source = Target_Server

Password_Value:; Integrated Security = true
Впровадження цих значень дасть нам такий рядок з'єднання:

Data source = SQL2005; initial catalog = db1; integrated security = no; user id =; Data Source = Target Server, Target Port; Password =; Integrated Security = true;

Як ми бачимо, значення параметра "Integrated security" було змінено на "True". Це означає, що система буде намагатися з'єднатися з базою даних, використовуючи системну обліковий запис програми. В даному випадку системна обліковий запис використовувалася веб-додатком на сервері.

2.3.3.1 Приклад 3: SQL Server Web Data Administrator
Цей проект спочатку розроблявся Microsoft, а потім він став безкоштовним, причому з відкритим вихідним кодом. На сьогоднішній день ви все ще можете скачати останню випущену Microsoft версію 2004 року зі серверів корпорації [13], але сама остання версія, що побачила світ у 2007 році, розміщена на сайті Codeplex [14]. Codeplex-версія програми стійка до атак такого типу, оскільки в ній використовуються класи ConnectionStringBuilder для динамічного формування рядків з'єднання.
Однак, версія, розміщена на сайті Microsoft, вразлива до атак CSPP. Нижче показаний спосіб отримання доступу до системи з використанням атак даного типу.

Нижче показаний спосіб отримання доступу до системи з використанням атак даного типу

Мал. 7. Використання облікових даних в WEB Data Administrator

Значення поля «Пароль» на рис. 7 одно: "; integrated Security = true ", про що говорилося вище.

Мал. 8. Консольний доступ до серверної облікового запису

Зловмисник може авторизуватися в додатку і управляти всією системою. Це відбувається тому, що всі користувачі і мережеві служби мають доступ до сервера, що можна бачити на рис. 9.

9

Мал. 9. Доступ до системної облікового запису.

2.3.3.2 Приклад 4: myLittleAdmin і myLittleBackup
У програмах mylittleAdmin і myLittlebackup є можливість перевірити рядок з'єднання, що використовується для отримання доступу. У ній чітко видно впроваджені параметри, за допомогою яких можливо отримати доступ до системи.

Мал. 10. Атака CSPP в програмі myLittleAdmin.

З малюнка 10 видно, що параметр "Data Source" зі значенням localhost був вставлений після параметра "User ID". Цей параметр, "Data Source", також стоїть на першому місці в рядку з'єднання. У них різні значення, але використовується останнім, тобто те, яке ми додали.
Та ж ситуація спостерігається і з параметром "Integrated Security", початкове значення якого дорівнює no, але його заміщає значення yes, запроваджене за допомогою поля «Пароль», що дає повний доступ до сервера, при цьому веб-додаток працює з системної обліковим записом.

Та ж ситуація спостерігається і з параметром Integrated Security, початкове значення якого дорівнює no, але його заміщає значення yes, запроваджене за допомогою поля «Пароль», що дає повний доступ до сервера, при цьому веб-додаток працює з системної обліковим записом

Мал. 11. Запити до головної таблиці системних користувачів.

2.3.3.3 Приклад 5: ASP.NET Enterprise Manager

Таку ж атаку можна виконати і за допомогою останньої публічної версії програми ASP.NET Enterprise manager, і, як ми бачимо на малюнку нижче, зловмисник може підмінити параметри рядка з'єднання для отримання доступу до веб-додатку.

NET Enterprise manager, і, як ми бачимо на малюнку нижче, зловмисник може підмінити параметри рядка з'єднання для отримання доступу до веб-додатку

Мал. 12. Атака CSPP за допомогою форми введення облікових даних в ASP.NET Enterprise Manager.

В результаті цього можна отримати повний доступ до бази даних, що видно з малюнка нижче.

Мал. 13. Консоль управління в ASP.NET Enterprise Manager.

3 Висновки

Всі наведені приклади говорять про необхідність фільтрації вводяться користувачем даних. Більш того, з даних прикладів стає ясно, що необхідно завжди оновлювати використовується програмне забезпечення. Microsoft випустила ConnectionStringbuilder в спробі уникнути атак такого типу, але даний компонент безпеки використовується не у всіх додатках.

Такі атаки також застосовні і до інших СУБД, наприклад Oracle, які дозволяють адміністраторам встановити вбудовану безпеку (Integrated Security) в своїх БД. Крім того, за допомогою рядків з'єднання Oracle можливо змінити спосіб підключення користувачів, використовуючи сесію sysdba.
Бази даних MySQL не дозволяють адміністраторам керувати процесом авторизації вбудованої безпеки. Однак, все одно є можливість впровадження коду і зміни рядків з'єднання в спробі з'єднатися з внутрішніми серверами, невидимими з інтернету.
Щоб запобігти таким атаки, необхідно фільтрувати всі параметри, і налаштувати міжмережевий екран таким чином, щоб він відстежував не тільки вхідні, але і вихідні з'єднання з зовнішніх серверів, які відсилають в інтернет облікові дані NTLM. Також адміністратори баз даних повинні встановити режим доступу з мінімальними правами.

посилання

1. The Open Web Application Security Project, http://www.owasp.org
2. Connection Strings.com: http://www.connectionstrings.com
3. Ryan, W .: Using the SqlConnectionStringBuilder to guard against Connection String
Injection Attacks, http://msmvps.com/blogs/williamryan/archive/2006/01/15/81115.aspx
4. Connection String Builder (ADO.NET), http://msdn.microsoft.com/en-us/library/ms254947.aspx
5. Carettoni L., di Paola S .: HTTP Parameter Pollution,
http://www.owasp.org/images/b/ba/AppsecEU09_CarettoniDiPaola_v0.8.pdf
6. Cain: http://www.oxid.it/cain.html
7. ASP.NET Enterprise Manager in SourceForge, http://sourceforge.net/projects/asp-ent-man/
8. ASP.NET Enterprise Manager in MyOpenSource:
http://www.myopensource.org/internet/asp.net+enterprise+manager/download-review
9. PHPMyAdmin: http://www.phpmyadmin.net/
10. myLittleAdmin: http://www.mylittleadmin.com
11. myLittleBackup: http://www.mylittlebackup.com
12. myLittleTools: http://www.mylittletools.net
13. Microsoft SQL Server Web Data Administrator:
http://www.microsoft.com/downloads/details.aspx?FamilyID=c039a798-c57a-419e-acbc-
2a332cb7f959 & displaylang = en
14. Microsoft SQL Server Web Data Administrator in Codeplex project:
http://www.codeplex.com/SqlWebAdmin

Aspx?


Новости
  • Виртуальный хостинг

    Виртуальный хостинг. Возможности сервера распределяются в равной мере между всеми... 
    Читать полностью

  • Редизайн сайта

    Редизайн сайта – это полное либо частичное обновление дизайна существующего сайта.... 
    Читать полностью

  • Консалтинг, услуги контент-менеджера

    Сопровождение любых интернет ресурсов;- Знание HTML и CSS- Поиск и обновление контента;-... 
    Читать полностью

  • Трафик из соцсетей

    Сравнительно дешевый способ по сравнению с поисковым и контекстным видами раскрутки... 
    Читать полностью

  • Поисковая оптимизация

    Поисковая оптимизация (англ. search engine optimization, SEO) — поднятие позиций сайта в результатах... 
    Читать полностью