Прикріплення до сайту бази даних

Автор: Пользователь скрыл имя, 21 Ноября 2011 в 18:13, контрольная работа

Краткое описание

Якщо Ви плануєте створювати свій динамічний сайт на платформі Windows, то у Вас швидше за все виникне завдання вибору СУБД для зберігання інформації (з мовою, на якому Ви будете його програмувати, судячи з усього, питань не виникає). Одним з варіантів її вирішення, може виявитися використання MS Access в якості SQL-сервера. Далі буде описано, як у скрипті, написаному на PHP, звернутися до бази даних MS Access. .

Файлы: 1 файл

Чернетка курсової роботи.docx

— 188.56 Кб (Скачать)
 

Ось приклад відкриття БД захищеної на рівні користувачів за допомогою DAO або ADO 

Public Sub TestDAO() 
    Dim mWS As DAO.Workspace 
    Dim mDB As DAO.Database 
    DBEngine.SystemDB = "C:\test\gr.mdw" 
    Set mWS = DBEngine.CreateWorkspace _ 
        ("", "test_Пользователь", "test_Пароль", dbUseJet) 
    Set mDB = mWS.OpenDatabase _ 
        ("C:\test\a97.mdb", True) 
End Sub 
 
Public Sub TestADO() 
    Dim CnDB As New ADODB.Connection 
    CnDB.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ 
              "Data Source=C:\test\a97.mdb;" & _ 
              "Jet OLEDB:System database=C:\test\gr.mdw;" & _ 
              "User ID=test_Пользователь;" & _ 
              "Password=test_Пароль;" 
End Sub
 

Зняття  такого захисту.

 
Створити нову БД. В ярлику прописати  шлях до цієї БД, MDW файл захищеної БД ім'я та пароль власника. Відкрити за допомогою цього ярлика нову БД. Імпортувати до неї таблиці із захищеної, після чого змінити для  всіх об'єктів БД власника на Admin. Для того, щоб дізнатися ім'я і пароль власника БД можна скористатися спеціалізованими програмами, описаними в огляді Паролі Access. За відсутності файлу робочих груп його можна відновити. Для цього буде потрібно дізнатися імена і ідентифікатори власників об'єктів БД. Ця інформація міститься у файлі бази даних і може бути залучена за допомогою таких програм як AOPR. Використовуючи ці дані створюється новий файл. (Послідовність описана вище) 
Зовсім не обов'язково використовувати програми, що дозволяють визначити пароль БД або користувача. Часто програмісти зовсім не піклуються про приховування пароля в тексті програми. Запустивши програму, що працює на захищених БД необхідно відкрити в шістнадцятковому редакторі WinHex віртуальну пам'ять цього додатка. Провівши пошук Unicode рядків 'User ID ='; 'Password ='; 'Database Password ='
​​або 'pwd =' можна знайти ім'я користувача, його пароль і пароль бази даних. 
 
Можна зовсім проігнорувати наявність захисту. Для цього треба скористатися AccessRecovery, яка створює новий файл без захисту і переносить в нього таблиці, запити, форми, макроси, звіти і код модулів.
 
 

Нестандартні способи захисту

 
Зміна розширення файлу

Досить простий спосіб ввести в оману - зміна розширення файлу БД. Побачивши незнайому розширення, не кожен спробує з'ясувати природу цього файлу. Крім цього з'являється можливість зв'язати це розширення з вашою програмою, так щоб при кліці по файлу запускалося ваш додаток, а не Access. Бажано відкривати такий файл з монопольним доступом, так як в цьому випадку не буде створюватися ldb файл.

Захист  за допомогою пароля БД, що містить нецензурні символи

В першу  чергу цей спосіб націлений на протидію визначення паролів за допомогою  спеціальних програм. Одна база з  таким захистом добре попсувала  мені негаразди. Тепер я попсую настрій  її авторам розповівши про цю захисту. Спосіб заснований на тому, що пароль БД формату Access 2000 і 2002-2003 - текстовий рядок  у форматі Unicode. При цьому, немає ні яких обмежень на її вміст. Стандартний спосіб встановлення і використання пароля БД передбачає його введення з клавіатури в діалоговому вікні. Якщо стоку пароля містить нецензурні символи, то вони не будуть коректно відображені програмою відкриває паролі БД. З іншого боку цей пароль можна ввести в діалоговому вікні при відкритті БД в MS Access. 
Але й про Access 97 я не забув. Справа в тому, що в специфікації баз даних і в довідці по DAO 3.60 зазначено, що максимальна кількість символів в паролі - 14. Але насправді їх може бути 20. При цьому і сам Access 97 не допускає введення рядків пароля більше 14 символів. У специфікації Access 2003 також сказано про 14 символів, але програма допускає введення всіх 20. Також можливе використання недрукованих символів, що приводить більшість програм зламували паролі в ступор. 
Для установки такого пароля потрібно використовувати програму, яка використовує метод CompactDatabase бібліотек ADOX або DAO.

Злом захисту.

  • По-перше, можна скористатися AccessRecovery.
  • По-друге, можна спробувати визначити пароль БД за допомогою спеціальних програм. В огляді Паролі Access наводиться зведена таблиця за їх можливостям.
  • По-третє, можна дізнатися пароль, проаналізувавши код програми в відладчик. Який би не був пароль, він все одно передається як текстовий рядок у методі відкриття БД. При наявності певного досвіду - це не дуже складне завдання. Коли мені вперше зустрілася подібний захист - пароль вдалося знайти, використовуючи відладчик OllyDbg, знайшовши місце створення ADODB.Connection
  • Дізнатися або змінити пароль БД можна, не вдаючись до допомоги спеціальних програм. В Access 97 пароль виходить складанням за XOR пароля з 20 байтной послідовністю. Значення цих байт можна отримати з будь-якого не захищеного паролем mdb файлу. Починаючи з Access 2k, у зв'язку з використанням Unicode, для зберігання 20 символів пароля відведені 40 байт. При шифруванні також використовується додавання за XOR, але для отримання послідовності байт відповідної порожньому паролю необхідно створити файл з датою досліджуваної БД. Отримані байти можна вписати в досліджуваний файл і обнулити пароль, або скласти їх з аналогічними байтами досліджуваного файлу і отримати значення пароля.

Захист з модифікацією файлу

Спосіб захисту заснований на модифікації перших байт файлу. Таким чином, перед відкриттям БД в її файл записується правильний заголовок, що зберігається в програмі, а після закриття повертається неправильний. При спробі відкрити файл БД за допомогою ms Access з'являється повідомлення про помилку. Не погано поєднати цей спосіб зі зміною розширення файлу. Наприклад, можна взяти заголовок dbf файлу і записати його в початок mdb файлу. Далі міняємо розширення файлу на dbf і насолоджуємося результатом. БД тепер можна відкрити в Excel, Access або іншою програмою, що дозволяє читати dbf файли. Ось приклад такого перетворення: 

'модификация заголовка файла БД 
'Ex: Call BaseProtect("C:\01.mdb", True) 
 
Public Sub BaseProtect(sPath As String, bLock As Boolean) 
    Dim iFn As Integer 
    iFn = FreeFile() 
    Open sPath For Binary Access Write As #iFn 
    Put #iFn, 5, CStr(IIf(bLock, _ 
        "ProtectDataBase", "Standard Jet DB")) 
    Close #iFn 
End Sub

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

Захист зміною версії БД

Цей спосіб - подальший розвиток ідеї модифікації заголовка файлу з метою протидії програмами, читає паролі. Метод заснований на тому, що для роботи з БД Access 97 та 2k програми використовують різні алгоритми читання пароля і при цьому намагаються самостійно визначити версію mdb файлу. 
Для визначення версії можна використовувати послідовність з 40 байт, починаючи з 122 від початку файлу. Якщо в БД Access 97 вписати цю послідовність від Access 2k, то отримаємо цікавий результат. Програма ms Access, ADO і DAO нормально працюють з цим файлом, а більшість зламували паролі програм попадаються на цей прийом. Аналогічний результат може бути отриманий при пересадці байтовой послідовності з Access 97 в Access 2k
 

заголовок файла Access 2k 
зелёным выделен фрагмент пароля БД 
синим - фрагмент характерный для версии БД 
Offset      0  1  2  3  4  5  6  7   8  9  A  B  C  D  E  F 
 
00000000   00 01 00 00 53 74 61 6E  64 61 72 64 20 4A 65 74 
00000010   20 44 42 00 01 00 00 00  B5 6E 03 62 60 09 C2 55 
00000020   E9 A9 67 72 40 3F 00 9C  7E 9F 90 FF 85 9A 31 C5 
00000030   79 BA ED 30 BC DF CC 9D  63 D9 E4 C3 9F 46 FB 8A 
00000040   BC 4E 9B 6D EC 37 40 D2  9C FA DB C8 28 E6 0E 20 
00000050   8A 60 49 02 7B 36 E8 E4  DF B1 6A 62 13 43 D2 39 
00000060   B1 33 29 F7 79 5B 8F 23  7C 2A 4F E9 7C 99 08 1F 
00000070   98 FD DC 75 0C FF D8 FD  82 66 5F 95 F8 D0 89 24 
00000080   85 67 C6 1F 27 44 D2 EE  CF 65 ED FF 07 C7 46 A1 
00000090   78 16 0C ED E9 2D 62 D4  54 06 00 00 34 2E 30 00

Захист з використанням електронного ключа

Це ще одне підтвердження, того, що стандартні способи захисту, навіть від сторонніх виробників уразливі. Мова йде про ключі HASP. За допомогою утиліти HASP Envelope можна зашифрувати файл (у даному випадку БД) і дозволити до нього доступ тільки з захищеного застосування. Використовується механізм "прозорого " шифрування. Зі стартом операційної системи запускається певний процес, який відстежує всі звернення до захищеного файлу БД. Якщо це запит надає звичайного застосування, наприклад від ms Access - файл читається і виводиться повідомлення про "нерозпізнаваною форматі бази даних ". Але якщо з файлом працює вказаний при шифруванні додаток, то дані передаються йому в дешифровано вигляді. У результаті, сама програма, не підозрює про наявність захисту. Так, складність злому такої бази зростає в рази. Але при цьому треба пам'ятати, що з додатком повинен поставлятися електронний ключ, ціною N у.о. і що швидкість доступу до даних падає в два - три рази.

Взлом захисту.

Було знайдено два способи отримати БД своє повне розпорядження.

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

Шифрування значень таблиць

Цей спосіб не поганий. У всякому випадку з'являється реальна надія що якось врятувати. Однак є ряд обмежень. Перед відображенням даних їх необхідно дешифрувати. Немає можливості пошуку по частині рядка в зашифрованому полі. Алгоритм шифрування і ключ містяться в програмі, а значить, є потенційна вразливість. У даному випадку надійність залежить від стійкості до злому програми, що працює з БД. Можна поєднувати приємне з корисним: не шифрувати, а стискати вміст memo полів. Розбиратися з алгоритмом стиснення в коді програми заняття нудне.

Висновок

Перед тим як ставити питання про спосіб захисту БД варто задуматися про її необхідність. Не варто покладатися на стандартні методи, але це не привід для відмови від використання Access. Спеціаліст зламає що завгодно, але можна зробити, щоб це було не так просто. 

Информация о работе Прикріплення до сайту бази даних