Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


ПРОЕКТИРОВАНИЕ АРХИТЕКТУРЫ СИСТЕМЫ



БЕЗОПАСНОСТИ ПРИЛОЖЕНИЯ БАЗЫ ДАННЫХ

 

Проектирование архитектуры системы безопасности будем осуществлять с учетом:

1. обеспечение целостности данных;

2. разграничение прав доступа;

3. хэширование паролей;

4. шифрование содержимого БД;

5. защита от SQL-инъекций;

6. защищенное соединение SSL;

7. резервное копирование;

8. защита от дизассемблирования.

 

Архитектура безопасности

 

Каждый элемент системы безопасности, за исключением защиты от дизассемблирования и резервного копирования, взаимодействует между собой. Данные взаимодействия происходят в соответствии с представленной на рисунке 3 архитектурой системы безопасности.

 

Рисунок 3 – Модель системы безопасности

 

Как видно из модели, при запуске приложения у нас происходит установка защищенного соединения по протоколу SSL. Далее, при вводе логина и пароля в окне приложения и нажатию кнопки «Вход», происходит аутентификация пользователя. Сначала введенные данные (логин и пароль) проходят обработку защиты от SQL-инъекций. Далее происходит проверка логина, вычисление хэша пароля и его проверка. При создании новых пользователей вместо пароля пользователя в базу данных заноситься только их хэш. Затем для пользователя происходит определение его роли. Каждый пользователь, в соответствии с его ролью, получает доступ к интерфейсу. При внесении информации в базу данных она проходит проверку
на целостность, после чего зашифровывается и через защищенное соединение по протоколу SSL помещается в БД на сервер. Таким образом, мы достигаем цели реализации необходимой степени защиты информации.

Поскольку база данных создана СУБД MySql, мы используем
клиент-серверное взаимодействие для работы с данными (рисунок 4).

БД
Клиент (приложение)
Запрос
Ответ
Сервер СУБД (обработка запроса)

 


Рисунок 4 – Схема клиент-серверного взаимодействия

 

Как видно из рисунка, запрос пользователя отправляется на сервер СУБД, где происходит его обработка, выбираются запрашиваемые данные, которые после отправляются пользователю для его дальнейшей работы.

 

Система контроля доступа с использованием ролевой политики

Безопасности

 

Контроль доступа гарантирует нам, что каждый пользователь будет иметь доступ только к тем функциям, которые определены его профессией: продавец оформляет продажи, директор просматривает отчетность
и так далее.

Для обеспечения подобного контроля доступа в приложении была реализована система контроля доступа с использованием ролевой политики безопасности.

Ролевое разграничение доступа является составляющей многих современных компьютерных систем. Задание ролей позволяет определить четкие и понятные для пользователей компьютерной системы правила разграничения доступа. При этом РРД наиболее эффективно используется в компьютерных системах, для пользователей которых четко определен круг их должностных полномочий и обязанностей.

Роль является совокупностью прав доступа на объекты компьютерной системы. РРД определяет порядок предоставления прав доступа пользова-телям в зависимости от сессии его работы и от имеющихся
или отсутствующих у него ролей в каждый момент времени.

Для анализа и изучения свойств систем РРД используются математические модели РРД. В основе всех математических моделей РРД лежит базовая модель РРД.

Данная модель определяет самые общие принципы построения моделей РРД.

Основными элементами базовой модели являются:

– множество пользователей ( );

– множество ролей ( );

– множество прав доступа на объекты компьютерной системы ( );

– множество сессий пользователей ( );

– функция, определяющая для каждой роли множество прав доступа ; при этом для каждого существует , такая что, ;

– функция , определяющая для каждого пользователя множество ролей на которые он может быть авторизирован;

– функция , определяющая для каждой сессии пользо-вателя, от имени которого она активизирована;

– функция , определяющая для пользователей множес-тво ролей, на которые он авторизирован в данной сессии, при этом в каждый момент времени для каждого выполняется условие:

 

. (1)

 

Отметим, что могут существовать роли, на которые не авторизирован ни один пользователь.

В базовой модели РРД предполагается, что множества , , и функ-ции , не изменяются с течением времени. Однако в нашем случае администратор может создавать произвольное число пользователей, а также различное число ролей.

 

Защищенное соединение

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

Cоздание подобного соединения будет проходить по протоколу SSL.

Криптографический протокол SSL был разработан в 1996 году компанией Netscape и вскоре стал наиболее популярным методом обеспечения защищенного обмена данными через Интернет. Этот протокол интегрирован в большинство браузеров и веб-серверов и использует ассиметричную криптосистему с открытым ключом, разработанную компанией RSA.

Для осуществления SSL соединения необходимо, чтобы сервер имел инсталлированный цифровой сертификат. Цифровой сертификат – это файл, который уникальным образом идентифицирует пользователей и серверы.

Протокол SSL обеспечивает защищенный обмен данных за счет двух следующих элементов [21–23]:

а) аутентификация;

б) шифрование.

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

Протокол SSL предоставляет «безопасный канал», который имеет три основных свойства [24]:

1) канал является частным. Шифрование используется для всех сообщений после простого диалога, который служит для определения секретного ключа;

2) канал аутентифицирован. Серверная сторона диалога всегда аутентифицируется, а клиентская делает это опционально;

3) канал надежен. Транспортировка сообщений включает в себя проверку целостности.

Работу протокол SSL можно разделить на два уровня.

Первый уровень представляет слой протокола подтверждения подключения (Handshake Protocol Layer). Он состоит из трех подпротоколов: протокол подтверждения подключения (Handshake Protocol), протокол изменения параметров шифра (Change Cipher Spec Protocol)
и предупредительный протокол (Alert protocol).

Второй уровень представляет слой протокола записи. На рисунке 5 схематично изображены уровни слоев SSL.

 

Рисунок 5 – уровни слоев SSL

 

Уровень подтверждения подключения состоит из трех подпротоколов:

а) подтверждение подключения. Этот подпротокол используется для согласования данных сессии между клиентом и сервером. В данные сессии входят:

1) идентификационный номер сессии;
2) сертификаты обеих сторон;
3) параметры алгоритма шифрования, который будет использован;
4) алгоритм сжатия информации, который будет использоваться;
5) «общий секрет», применён для создания ключей;

6) открытый ключ;

б) изменения параметров шифрования. Этот подпротокол используется для изменения данных ключа (keyingmaterial), который используется для шифрования данных между клиентом и сервером. Данные ключа – это информация, которая используется для создания ключей шифрования. Подпротокол изменения параметров шифрования состоит из одного единственного сообщения. В этом сообщении сервер говорит,
что отправитель хочет изменить набор ключей. Дальше, ключ вычисляется
из информации, которой обменялись стороны на уровне подпротокола подтверждения подключения;

в) предупреждение. Предупредительное сообщение показывает сторо-нам изменение статуса или о возможной ошибке. Существует множество предупредительных сообщений, которые извещают стороны, как при нор-мальном функционировании, так и при возникновении ошибок.
Как правило, предупреждение отсылаются тогда, когда подключение закрыто и получено неправильное сообщение, сообщение невозможно расшифровать или пользователь отменяет операцию.

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

Установление подлинности участников. Для определения подлинности участников обмена данных, протокол подтверждения подключения использует сертификат стандарта Х.509. Это помогает подтвердить подлинность второй стороны, которая владеет сертификатом и секретным ключом. Сертификат – это цифровой способ идентификации, который выпускает центр сертификации. В сертификате содержится иденти-фикационная информация, период действия, публичный ключ, серийный номер, и цифровые подписи эмитента.

Сертификационный центр – это третья сторона, которой по умолчанию доверяют обе стороны. При попытке установить подключение в режиме SSL сессии, сертификационный центр проверяет инициатора (обычно в этой роли выступает пользователь, компьютер клиента), а затем выдает ему сертификат. Если необходимо, сертификационный центр обновляет или конфискует сертификаты. Проверка подлинности проходит по схеме:

1) клиенту предоставлен сертификат сервера; компьютер клиента пытается сопоставить эмитента сертификата сервера со списком доверительных сертификационных центров;

2) если эмитент сертификата – доверительный сертификационный центр, то клиент связывается и этим центром и проверяет, является
ли сертификат настоящим, а не подделанным;

3) после проверки сертификата у сертификационного центра, клиент принимает сертификат как свидетельство подлинности сервера.

Шифрование данных. Существует два основных способа шифрования данных: симметричный ключ (еще называется «общий секретный ключ»)
и ассиметричный ключ (второе название «открытый ключ» или «схема открытый-секретный ключ»). Протокол SSL использует как симметричные, так и ассиметричные ключи для шифрования данных [21].

SSL-ключ – это зашифрованные данные, которые используются
для определения схемы шифрования данных во время сессии. Чем длиннее ключ, тем труднее его взломать. Как правило, алгоритмы ассиметричных ключей более стойкие, их практически невозможно взломать.

Симметричный ключ. При шифровании симметричным ключом используется один и тот же ключ для шифрования данных. Если две стороны хотят обмениваться зашифрованными сообщениями в безопасном режиме, то обе стороны должны иметь одинаковые симметричные ключи.

Шифрование симметричным ключом обычно используется для шифро-вания большого объема данных, так как это процесс проходит быстрее,
чем при ассиметричном шифровании. Обычно используются алгоритмы
DES, 3DES, RC2, и AES.

Ассиметричный ключ. Шифрование с применением ассиметричного (открытого) ключа использует пару ключей, которые оба были получены, пройдя целый комплекс математических вычислений. Один из ключей используется в качестве открытого, как правило, сертификационный центр публикует открытый ключ в самом сертификате владельца. Секретный ключ держится в тайне и никогда никому не открывается.

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

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

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

Именно это является основой для цифровых подписей. Самый распространенный алгоритм, который используется при шифровании
с ассиметричными ключами – RSA (назван в честь разработчиков Rivest, Shamir, Adleman).

Протокол SSL использует шифрование с открытым ключом для того, чтоб подтвердить клиенту подлинность сервера, и наоборот. Шифрование открытым ключом также используется для определения ключа сессии. Ключ сессии используется симметричными алгоритмами для шифровки большого объема данных.

Это объединяет ассиметричное шифрование (для проверки подлин-ности) и быстрое симметричное шифрование объемных данных (что не тре-бует больших вычислительных ресурсов и больших затрат времени).

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

Хэш-значение играет роль идентификационной отметки, «отпечаток сообщения». Как и отпечатки пальцев уникальны для каждого человека, хэш-значения тоже уникальны. Кроме того, как отпечатки пальцев значительно меньше, чем сам человек, так и хэш-значение намного меньше оригинального сообщения.

Хэширование используется для обеспечения целостности передачи данных. Самыми популярными хэш-алгоритмами являются MD5 и SHA-1. MD5 создает 128 битное хэш–значение, а SHA-1 создает 160 битное
хэш-значение. Есть также новые, более устойчивые алгоритмы хэширования: Whirlpool, Haval, Tiger [25].

Результатом работы хэш-алгоритма выступает значение, которое используется для проверки целостности переданных данных. Это значение создается с использованием либо MAC либо HMAC.

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

HMAC похож на MAC, но при этом используется хэш–алгоритм вместе с общим секретным ключом. Общий секретный ключ прикрепляется
к данным, которые хэшируются.

Это позволяет сделать хэширование более безопасным, так как обе стороны должны иметь одинаковые секретные ключи для подтверждения подлинности данных. HMAC используется только протоколом TLC.

Уровень записи. Протокол на уровне слоя записи получает зашифрованные данные от программы-клиента и передает его на транспор-тный слой. Протокол записи берет данные, разбивает на блоки размером, который подходит криптографическому алгоритму, использует MAC
(или HMAC) и потом шифрует (расшифровывает) данные. При этом используется информация, которая была согласованна во время протокола подтверждения данных. В некоторых случая на этом уровне проходит сжатие (распаковка) данных.

Использование протокола SSL встроено в Mysql и необходимо только выполнить ряд действий для его активации. В частности, необходимо скачать библиотеку OpenSSL и сгенерировать файлы ключей и сертификатов, а далее прописать в терминале Mysql.

 

Защита от Sql-инъекций

 

Внедрение SQL-кода – один из распространённых способов взло-ма сайтов и программ, работающих с базами данных, основанный
на внедрении в запрос произвольного SQL-кода.

Внедрение SQL, в зависимости от типа используемой СУБД и условий внедрения, может дать возможность атакующему выполнить произвольный запрос к базе данных (например, прочитать содержимое любых таблиц, удалить, изменить или добавить данные), получить возможность чтения и (или) записи локальных файлов и выполнения произвольных команд на атакуемом сервере [18, 19].

Атака типа внедрения SQL может быть возможна из-за некорректной обработки входных данных, используемых в SQL-запросах.

С целью предотвращения данных атак в приложении создан класс, обеспечивающий обработку вводимых данных при авторизации (рисунок 6).

 

 

Защита от SQL-инъекций
mydb: QSqlDatabase qry: QSqlQuery
make_qry(Qstring, Qstring, Qstring)

Рисунок 6 – Диаграмма класса защиты от SQL-инъекций

 

В частности, вместо подстановки переменных в SQL-запрос используются плэйсхолдеры, то есть данные попадают в запрос не напрямую, а через некоего представителя, подстановочное выражение [20]. Данная подстановка осуществляется в функции «make_qry(Qstring, Qstring, Qstring)», которая возвращает роль пользователя. Переменные «mydb» и «qry» используются для установки соединения с базой данных и осуществления запроса к базе данных.

Хэширование паролей

 

С точки зрения безопасности хранение паролей в явном виде в базе данных не допустимо. Один из способов защиты паролей – это их хэширование.

При аутентификации пользователя вычисляется хэш введенного пароля и полученное значение сравнивается с тем, что хранится в базе данных [12].

При написании программного кода мы будем использовать хэш-функцию MD5. Представим алгоритм данной функции [13]:

1) на вход алгоритма поступает входной поток данных, хеш которого необходимо найти. Длина сообщения может быть любой (в том числе нулевой). В конец потока дописывают единичный байт 0х80, а затем дописывают нулевые биты, до тех пор, пока длина сообщения не будет сравнима с 448 по модулю 512;

2) в конец сообщения дописывают 64-битное представление длины данных (количество бит в сообщении) до выравнивания. Сначала записывают младшие 4 байта, затем старшие. Если длина превосходит
{\displaystyle 2^{64}-1}, то дописывают только младшие биты (эквивалентно взятию
по модулю {\displaystyle 2^{64}} ). После этого длина сообщения станет кратной 512. Вычисления будут основываться на представлении этого потока данных в виде массива слов по 512 бит;

3) для вычислений инициализируются 4 переменных размером
по 32 бита и задаются начальные значения шестнадцатеричными числами (рисунок 6).

Рисунок 7 – Инициализация переменных

 

В этих переменных будут храниться результаты промежуточных вычислений.

Происходит определение 4 вспомогательных логических функций, которые преобразуют входные 32-битные слова, в 32-битные выходные (рисунок 7).

Рисунок 8 – Вспомогательные логические функции

 

Также на этом шаге реализуется так называемый «белый шум» – усиление алгоритма, состоящее из 64 элементного массива, содержащего псевдослучайные числа, зависимые от синуса числа i:

 

(2)

Каждый 512-битный блок проходит 4 этапа вычислений по 16 раундов (рисунок 8). Для этого блок представляется в виде массива из 16 слов
по 32 бита. Все раунды однотипны и имеют вид: [abcd k s i], определяемый как {\displaystyle a=b+((a+\operatorname {Fun} (b, c, d)+X[k]+T[i])\lll s)}

 

, (3)

 

где

, , , – регистры;

F(B, C, D) – одна из логических функций;

X [k] – k-й элемент 16-битного блока;

T [i] – i-й элемент таблицы «белого шума»;

s – операция циклического сдвига на s позиций влево.

Число s задается отдельно для каждого раунда.

Этапы вычисления представлены на рисунке 8.


 

 

 

 

Рисунок 9 – Четыре основных этапов вычисления алгоритма

Далее суммируем с результатом предыдущего цикла:

 

, , , . (4)

После окончания цикла необходимо проверить, есть ли ещё блоки для вычислений. Если да, то переходим к следующему элементу массива и повторяем цикл.

Результат вычислений находится в буфере , это и есть хэш. Если выводить побайтово, начиная с младшего байта и закончив старшим байтом , то мы получим MD5-хэш.

Для большей безопасности мы будем находить и сравнивать хэши
не только паролей, но также и 1 и 3 символов из пароля. Таким образом,
на основании одного пароля, будет происходить двойная проверка.

 


Поделиться:



Популярное:

  1. I) Получение передаточных функций разомкнутой и замкнутой системы, по возмущению относительно выходной величины, по задающему воздействию относительно рассогласования .
  2. I. РАЗВИТИИ ЛЕКСИЧЕСКОЙ СИСТЕМЫ ЯЗЫКА У ДЕТЕЙ С ОБЩИМ НЕДОРАЗВИТИЕМ РЕЧИ
  3. II. О ФИЛОСОФСКОМ АНАЛИЗЕ СИСТЕМЫ МАКАРЕНКО
  4. V) Построение переходного процесса исходной замкнутой системы и определение ее прямых показателей качества
  5. А. Разомкнутые системы скалярного частотного управления асинхронными двигателями .
  6. АВИАЦИОННЫЕ ПРИБОРЫ И СИСТЕМЫ
  7. Автоматизированные информационно управляющие системы сортировочных станций
  8. Автоматизированные системы диспетчерского управления
  9. Автоматическая телефонная станция квазиэлектронной системы «КВАНТ»
  10. Агрегатные комплексы и системы технических средств автоматизации ГСП
  11. Алгебраическая сумма всех электрических зарядов любой замкнутой системы остается неизменной (какие бы процессы ни происходили внутри этой системы).
  12. Алгоритм упорядочивания системы.


Последнее изменение этой страницы: 2017-03-08; Просмотров: 571; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.071 с.)
Главная | Случайная страница | Обратная связь