Файл: Принципы разработки безопасных программных продуктов.pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 24.04.2023

Просмотров: 518

Скачиваний: 4

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

ВВЕДЕНИЕ

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

Delphi-это среда программирования, которая использует язык программирования Object Pascal. Начиная со среды разработки Delphi 7.0, в официальных документах Borland стал использовать имя Delphi для обозначения языкового объекта Pascal.

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

Целью курсовой работы является: изучение теоретического материала и написание программного обеспечения на Delphi, которое позволит корректно работать с базой данных.

В соответствии с поставленной целью при выполнении работ ставятся следующие задачи:

- изучение теоретических основ защитного программирования;

- изучение и анализ методов структурирования программ и программных модулей;

- изучение среды программирования Borland Delphi 7;

- создание приложения в среде программирования Borland Delphi 7 для работы с базами данных;

- отладка разработанного приложения.

При написании работы автор опирался на труды отечественных и зарубежных ученых Братчикова И. Л., Гулидова А. И., Наберухина Ю. И., Дейкстры Е. А., Ершова А. П., и др.

1.ТЕОРЕТИЧЕСКАЯ ЧАСТЬ

1.1 Защитное программирование

1.1.1 Правила написания программ с блоками защиты от несанкционированного ввода данных


Парольная система как неотъемлемая составляющая подсистемы управления доступом системы защиты информации (СЗИ) является частью "переднего края обороны" всей системы безопасности. Поэтому парольная система становится одним из первых объектов атаки при вторжении злоумышленника в защищенную систему.

Подсистема управления доступом СЗИ затрагивает следующие понятия:

- идентификатор доступа - уникальный признак субъекта или объекта доступа;

- идентификация - присвоение субъектам и объектам доступа идентификатора и (или) сравнение предъявляемого идентификатора с перечнем присвоенных идентификаторов;

- пароль - идентификатор субъекта доступа, который является его (субъекта) секретом;

- аутентификация - проверка принадлежности субъекту доступа предъявленного им идентификатора;

- подтверждение подлинности.

Можно встретить и такие толкования терминов идентификатор и пароль пользователя [1]:

1. Идентификатор - некоторое уникальное количество информации, позволяющее различать индивидуальных пользователей парольной системы (проводить их идентификацию). Часто идентификатор также называют именем пользователя или именем учетной записи пользователя;

2. Пароль - некоторое секретное количество информации, известное только пользователю и парольной системе, предъявляемое для прохождения процедуры аутентификации.

Учетная запись - совокупность идентификатора и пароля пользователя.

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

- в открытом виде;

- в виде хэш-значений (hash (англ.) - смесь, мешанина);

- зашифрованными на некотором ключе.

Наибольший интерес представляют второй и третий способы, которые имеют ряд особенностей.

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

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


- ключ генерируется программно и хранится в системе, что позволяет ему автоматически перезапускаться;

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

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

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

Как пароль может попасть в руки злоумышленника? Наиболее реально выглядят следующие случаи:

- пароль, который вы записали, был найден злоумышленником;

- пароль был подсмотрен злоумышленником при вводе легального пользователя;

- злоумышленник получил доступ к базе данных системы безопасности.

Меры по противодействию первым двум опасностям очевидны.

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

Из базы данных учетных записей пароль может быть восстановлен различными способами: словарная атака, последовательная (полная) грубая сила и гибрид словарной атаки и последовательной грубой силы.

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

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


При восстановлении паролей гибридом атаки по словарю и последовательного перебора к каждому слову или модификации слова словаря добавляются символы справа и/или слева (123parol). Помимо этого, может осуществляться проверка использования: имен пользователей в качестве паролей; повторения слов (dogdog); обратного порядка символов слова (elpoep); транслитерации букв (parol); замену букв кириллицы латинской раскладкой (gfhjkm).

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

Какой пароль можно однозначно назвать слабым во всех отношениях (за исключением запоминаемости)? Типичный пример: пароль из небольшого количества (до 5) символов/цифр. По некоторым данным, из 967 паролей одного из взломанных почтовых серверов сети Интернет 335 (почти треть) состояла исключительно из цифр. Количество паролей, включающих буквы и цифры оказалось равным 20. Остальные пароли состояли из букв в основном в нижнем регистре за редким исключением (в количестве 2 паролей) включающих спецсимволы ("*", "_"). Символ "_", однако, часто встречался в именах пользователей. В 33 случаях имя и пароль пользователя совпадали. Самым популярным оказался пароль 123 (встречался 35 раз, почти каждый 27 пароль). На втором месте пароль qwerty (20 паролей). Как удобно он набирается, не правда ли? Далее следуют: 666 (18 раз), 12 (17 раз), xakep (14 раз) и 1, 11111111, 9128 (по 10 раз). 16 паролей состояли из одного символа/цифры.

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


1.1.2 Приемы надежного программирования

Альтернативой правильного ПС является надежное ПС. Надежность ПС — это его способность безотказно выполнять определенные функции при заданных условиях в течение заданного периода времени с достаточно большой вероятностью [5]. При этом под отказом в ПС понимают проявление в нем ошибки [2]. Таким образом, надежная ПС не исключает наличия в ней ошибок - важно лишь, чтобы эти ошибки при практическом применении этого ПС в заданных условиях проявлялись достаточно редко. Убедиться, что ПС обладает таким свойством можно при его испытании путем тестирования, а также при практическом применении. Таким образом, фактически мы можем разрабатывать лишь надежные, а не правильные ПС.

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

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

Рассмотрим теперь общие принципы обеспечения надёжности ПС, что, как мы уже подчёркивали, является основным мотивом разработки ПС, задающим специфическую окраску всем технологическим процессам разработки ПС. В технике известны четыре подхода обеспечению надёжности [11]:

- предупреждение ошибок;

- самообнаружение ошибок;

- самоисправление ошибок;

- обеспечение устойчивости к ошибкам.

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

-борьбе со сложностью;

-обеспечении точности перевода;

-преодоления барьера между пользователем и разработчиком;

- обеспечения контроля принимаемых решений.