[ главная ]   [ рейтинг статей ]   [ справочник радиолюбителя ]   [ новости мира ИТ ]



Ответов: 0
25-02-12 07:01







   Web - программирование
PHP


ASP






XML



CSS

SSI





   Программирование под ОС











   Web - технологии








   Базы Данных









   Графика






Данные




Базы Данных / Разное /

Защита и взлом баз данных Access

Под "защитой БД" здесь понимается способ предотвратить несанкционированный доступ к информации, хранимой в таблицах. Защита исходного кода форм и модулей не рассматривается.

Актуальность данной темы чрезвычайно высока. Об этом можно судить по первому месту в рейтинге (18 тысяч обращений) статьи "Защита баз 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. Основан на создании файла рабочих групп, в котором определяются имена пользователей, их пароли и права на работу с различными объектами БД.

Последовательность действий для создания защищённого файла:

  • Создание нового файла рабочих групп.
    Для этого в 97-2000 Access запускается программа WRKGADM.EXE, а в 2003 Access необходимо выбрать пункт меню "Сервис / Защита / Администратор рабочих групп". В администраторе жмём кнопку "Создать", указываем имя, организацию и код группы. Указываем имя и расположение создаваемого файла. Например:
    Имя: test_Имя
    Opгaнизaция: ~
    Кoд paбoчeй гpyппы: cтpoчкa 20 cимвoлoв.
    Фaйл paбoчeй гpyппы: C: estgr.mdw
  • Создание ярлыка, для запуска ms Access с использованием созданного mdw файла. Ярлык должен содержать строку: [путь к MSACCESS.EXE] /WrkGrp [путь к файлу mdw]. Например: "C:Program FilesMSOffice2003OFFICE11MSACCESS.EXE" /WrkGrp C: estgr.mdw
  • Запустив Access c помощью этого ярлыка необходимо открыть пункт меню "Сервис / Защита / Пользователи и группы". В открывшемся диалоговом окне необходимо создать нового пользователя и добавить его в группу "Admins". Например, был создан "test_Пользователь" с кодом "987654321"
  • Теперь необходимо открыть Access от имени созданного пользователя. Для этого необходимо добавить в созданный ярлык строку: /user [имя пользователя]. Например: "C:Program FilesMSOffice2003OFFICE11MSACCESS.EXE" /WrkGrp C: estgr.mdw /User test_Пользователь
  • Запускаем Access c помощью этого ярлыка. Теперь созданному пользователю необходимо присвоить пароль. Это делается в том же диалоге "Пользователи и группы". Допустим пользователю "test_Пользователь" присвоен пароль "test_Пароль". Далее, необходимо создать новую БД. При этом владельцем этой базы, а также всех создаваемых или импортируемых объектов (таблиц, запросов и.т.п.) будет пользователь имя которого было указано в ярлыке.
  • После того, как БД будет создана желательно удалить "Admin" из группы "Admins" и отобрать у группы "Users" права на объекты БД и на открытие базы.
  • Добавляем в ярлык название защищённой БД. Например: "C:Program FilesMSOffice2003OFFICE11MSACCESS.EXE" C: estdb2k_test.mdb /WrkGrp C: estgr.mdw /User test_Пользователь /pwd test_Пароль

Вот пример открытия БД защищённой на уровне пользователей с помощью DAO или ADO

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

Public Sub TestADO()
    Dim CnDB As New ADODB.Connection
    CnDB.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
              "Data Source=C: esta97.mdb;" & _
              "Jet OLEDB:System database=C: estgr.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, но для получения последовательности байт соответствующей пустому паролю необходимо создать файл с датой исследуемой БД. Полученные байты можно вписать в исследуемый файл и обнулить пароль, либо сложить их с аналогичными байтами исследуемого файла и получить значение пароля.

В данной работе не рассматриваются возможные манипуляции с файлами рабочих групп. Наверняка существуют способы защитить хранимые в них пароли от слишком любопытных программ, но все это теряет смысл при использовании AccessRecovery, который защиту вообще не замечает.

Защита с модификацией файла

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

'модификация заголовка файла БД
'Ex: Call BaseProtect("C:


Комментарии

 Ваш комментарий к данному материалу будет интересен нам и нашим читателям!



Последние статьи: Базы Данных / Разное /

Разработка запросов
08-03-2010   

Подзапросом называют запрос SELECT, который включается в другой запрос в качестве параметра или выражения. Они обычно используются, чтобы генерировать значение или набор результатов, которые используются в условиях главного запроса... подробнее

Кол. просмотров: общее - 3298 сегодня - 2

Параметрическое определение порядка сортировки данных
08-03-2010   

В различных сетевых форумах часто обсуждается вопрос: как получить отсортированные результаты выполнения запроса, передавая хранимой процедуре некоторый параметр? Я собрал несколько решений этой задачи, предложенных талантливыми программистами. Основная часть идей, изложенных в этой статье... подробнее

Кол. просмотров: общее - 3393 сегодня - 1

Delete from mytable; Commit:.. или Восстановление данных в СУБД Interbase
08-03-2010   

Данная статья написана на основе статей: The Interbase On - Disk Structure by Ann Harrison ; Structure of a Data Page by Paul Beach, а так же включает в себя мой горький опыт в удалении важных данных, а потом в их успешном восстановлении. Я никоим образом не собираюсь нарушать права ни выше перечисленных авторов, ни компаний, чьи зарегистрированные торговые знаки перечисленные в данной статье... подробнее

Кол. просмотров: общее - 3406 сегодня - 2

Часто задаваемые вопросы по базам данных
08-03-2010   

СУБД — Система Управления Базами Данных (dbms — database management system). Программа, либо комплекс программ, предназначенных для полнофункциональной работы с данными. Как правило, включает в себя инструменты для создания и изменения структуры хранения наборов данных... подробнее

Кол. просмотров: общее - 3810 сегодня - 1

Временные таблицы в sql server. Так ли необходимы временные таблицы?
07-03-2010   

Временные таблицы всегда прекрасно помогали разработчикам. Раньше, когда я использовал access, я обычно создавал временные таблицы, которые удалял после решения задачи. При использовании sql server решить задачу можно гораздо проще. Не так ли?... подробнее

Кол. просмотров: общее - 3350 сегодня - 2



  WWW.COMPROG.RU - 2009-2012 | Designed and Powered by Zaipov Renat | Projects