Захист і злом баз даних Access, MS Office, Програмні керівництва, статті

Під “захистом БД” тут розуміється спосіб запобігти несанкціонований доступ до інформації, збереженої в таблицях. Захист вихідного коду форм і модулів не розглядається.


Актуальність даної теми надзвичайно висока. Про це можна судити за першим місцем у рейтингу (18000 звернень) статті “Захист баз mdb” яку написав Юрій Шерман. Мені зустрілася навіть книга в 500 сторінок повністю присвячена захисту Access: Garry Robinson “Real World Microsoft Access Database Protection and Security.


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


Захист за допомогою пароля БД


Даний спосіб захисту дозволяє встановити пароль на відкриття БД, для всіх користувачів. Для його створення необхідно відкрити файл БД в “монопольному” режимі і вибрати пункт меню Сервіс / Захист / Поставити пароль бази даних. Для роботи з такою базою даних в MS Access потрібно вводити пароль. Ось приклад роботи з файлом БД, використовуючи DAO або ADO.


Public Sub TestDAO()
    Dim mWS As DAO.Workspace
    Dim mDB As DAO.Database
    Set mWS = DBEngine.Workspaces(0)
    Set mDB = mWS.OpenDatabase _
        (“C:a97.mdb”, True, True, “;pwd=123”)
End Sub

Public Sub TestADO()
    Dim CnDB As New ADODB.Connection
    CnDB.Open “Provider=Microsoft.Jet.OLEDB.4.0” & _
              “;Data Source=C:a97.mdb” & _
              “;Jet OLEDB:Database Password=123”
End Sub
 


Це самий не надійний спосіб захисту баз даних. Існує достатня кількість безкоштовних і платних утиліт, що відображають пароль. У тому числі доступні исходники коду на VB дозволяють прочитати такий пароль. В іншому не все так погано. Одного разу мені зустрілося оригінальна модифікація цього способу захисту, про який мова піде нижче.


Захист за допомогою пароля користувача


Даний спосіб дозволяє ввести додатковий рівень обмежень, пов’язаних з роботою БД Access. Заснований на створенні файлу робочих груп, в якому визначаються імена користувачів, їхні паролі та права на роботу з різними об’єктами БД.


Послідовність дій для створення захищеного файлу:



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


Public Sub TestDAO()
    Dim mWS As DAO.Workspace
    Dim mDB As DAO.Database
    DBEngine.SystemDB = “C:testgr.mdw”
    Set mWS = DBEngine.CreateWorkspace _
(“”, “Test_Пользователь”, “test_Пароль”, dbUseJet)
    Set mDB = mWS.OpenDatabase _
        (“C:testa97.mdb”, True)
End Sub

Public Sub TestADO()
    Dim CnDB As New ADODB.Connection
    CnDB.Open “Provider=Microsoft.Jet.OLEDB.4.0;” & _
              “Data Source=C:testa97.mdb;” & _
              “Jet OLEDB:System database=C:testgr.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, який захист взагалі не помічає.


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


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


“Модифікація заголовка файлу БД
“Ex: Call BaseProtect(“C:1.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 у.о. і що швидкість доступу до даних падає в два – три рази.


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


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



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


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


Висновок


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


У наступній статті описано прозоре шифрування баз даних Access, яке має ряд переваг над існуючими методами.

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*