Привет, сегодня поговорим про защитное программирование, обещаю рассказать все что знаю. Для того чтобы лучше понимать что такое
защитное программирование , настоятельно рекомендую прочитать все из категории Разработка программного обеспечения и информационных систем.
Самообнаружение ошибки в программе означает, что программа содержит средства обнаружения отказа в процессе ее выполнения.
Самоисправление ошибки в программе означает не только обнаружение отказа в процессе ее выполнения, но и исправление последствий этого отказа, для чего в программе должны иметься соответствующие средства.
Обеспечение устойчивости программы к ошибкам означает, что в программе содержатся средства, позволяющие локализовать область влияния отказа программы, либо уменьшить его неприятные последствия, а иногда предотвратить катастрофические последствия отказа. Однако эти подходы используются весьма редко (может быть, относительно чаще используется обеспечение устойчивости к ошибкам). Связано это, во-первых, с тем, что многие простые методы, используемые в технике в рамках этих подходов, неприменимы в программировании, например, дублирование отдельных блоков и устройств (выполнение двух копий одной и той же программы всегда будет приводить к одинаковому эффекту — правильному или неправильному). А, во-вторых, добавление в программу дополнительных фрагментов приводит к ее усложнению (иногда — значительному), что в какой-то мере мешает методам предупреждения ошибок. В некоторых частных случаях возможны специальные методы, например — метод контрольных функций.
В данном методе наряду с вычисляемой функцией по иной программе определяется другая функция в соотношениях, называемых контрольными соотношениями. Эти соотношения позволяют не только обнаружить отказ одной из программ, но также и восстановить искаженный результат отказавшей программы на основании результата, полученного по безошибочно работающей программе (программам). Простейшим примером применения метода контрольных соотношений является вычисление функции sinx и cosx по отдельным программам. Контрольное соотношение в данном случае будет соотношение sin2x+cos2x=1.
Более сложный вариант исправления ошибок с использованием матрицы Хэмминга.
Чаще всего в качестве методов обеспечения устойчивости используются методы отступления. Когда ПО в случае возникновения ошибки (благопристойно) заканчивает работу, без потери предыдущих результатов (обеспечить безаварийное завершение всех управляемых системой процессов).
Методы изоляции ошибок, используются при проектировании ПО и их суть — не дать последствиям ошибки выйти за пределы как можно меньшей части системы программного обеспечения (то есть отключились бы только определенные функции программы).
Следует отметить, что все эти методы требуют включения дополнительных модулей в само программное обеспечение, что приводит к увеличению сложности системы, а следовательно вероятности возникновения новых ошибок и затрат на их исправление и локализацию.
Вопросы для самоконтроля.
1. Какими способами обеспечивается надежность ПО на этапе создания?
2. Опишите известные статистические модели надежности программ.
3. Какими методы защиты от сбоев применяются в ПО?
4. Какие методы тестирования программ вам известны?
5. Какие методы повышения надежности программ вам известны?
6. Какими способами обеспечивается надежность ПО на этапе проектирования?
7. Поясните понятие устойчивость к отказам, применительно к ПО.
Поиск по сайту:
Главная
О нас
Популярное
ТОП
Новые страницы
Случайная страница
Изречения для студентов
Пожаловаться на материал
Обратная связь
FAQ
Защитное программирование
Парольная система как неотъемлемая составляющая подсистемы управления доступом системы защиты информации (СЗИ) является частью «переднего края обороны» всей системы безопасности. Поэтому парольная система становится одним из первых объектов атаки при вторжении злоумышленника в защищенную систему.
Подсистема управления доступом СЗИ затрагивает следующие понятия:
— Идентификатор доступа — уникальный признак субъекта или объекта доступа.
— Идентификация — присвоение субъектам и объектам доступа идентификатора и (или) сравнение предъявляемого идентификатора с перечнем присвоенных идентификаторов.
— Пароль — идентификатор субъекта доступа, который является его (субъекта) секретом.
— Аутентификация — проверка принадлежности субъекту доступа предъявленного им идентификатора; подтверждение подлинности.
Идентификатор — некоторое уникальное количество информации, позволяющее различать индивидуальных пользователей парольной системы (проводить их идентификацию). Часто идентификатор также называют именем пользователя или именем учетной записи пользователя.
Пароль — некоторое секретное количество информации, известное только пользователю и парольной системе, предъявляемое для прохождения процедуры аутентификации.
Учетная запись — совокупность идентификатора и пароля пользователя.
Одним из наиболее важных компонентов парольной системы является база данных учетных записей (база данных системы защиты). Возможны следующие варианты хранения паролей в системе:
— в открытом виде;
— в виде хэш-значений (hash (англ.) — смесь, мешанина);
— зашифрованными на некотором ключе.
Наибольший интерес представляют второй и третий способы, которые имеют ряд особенностей.
Хэширование не обеспечивает защиту от подбора паролей по словарю в случае получения базы данных злоумышленником. При выборе алгоритма хэширования, который будет использован для вычисления хэш-значений паролей, необходимо гарантировать несовпадение хэш-значений, полученных на основе различных паролей пользователей. Кроме того, следует предусмотреть механизм, обеспечивающий уникальность хэш-значений в том случае, если два пользователя выбирают одинаковые пароли. Для этого при вычислении каждого хэш-значения обычно используют некоторое количество «случайной» информации, например, выдаваемой генератором псевдослучайных чисел.
При шифровании паролей особое значение имеет способ генерации и хранения ключа шифрования базы данных учетных записей. Возможны следующие варианты:
— ключ генерируется программно и хранится в системе, обеспечивая возможность ее автоматической перезагрузки;
— ключ генерируется программно и хранится на внешнем носителе, с которого считывается при каждом запуске;
— ключ генерируется на основе выбранного администратором пароля, который вводится в систему при каждом запуске.
Наиболее безопасное хранение паролей обеспечивается при их хэшировании и последующем шифровании полученных хэш-значений, т.е. при комбинации второго и третьего способов хранения паролей в системе.
Как пароль может попасть в руки злоумышленника? Наиболее реальными выглядят следующие случаи:
— записанный вами пароль найден злоумышленником;
— пароль был подсмотрен злоумышленником при вводе легальным пользователем;
— злоумышленник получил доступ к базе данных системы защиты.
Меры противодействие первым двум опасностям очевидны.
В последнем случае злоумышленнику потребуется специализированное программное обеспечение, поскольку, записи в таком файле крайне редко хранятся в открытом виде . Об этом говорит сайт https://intellect.icu . Стойкость парольной системы определяется ее способностью противостоять атаке злоумышленника завладевшего базой данных учетных записей и пытающегося восстановить пароли, и зависит от скорости «максимально быстрой» реализации используемого алгоритма хэширования. Восстановление паролей заключается в вычислении хэш-значений по возможным паролям и сравнении их с имеющимися хэш-значениями паролей с последующим их представлением в явном виде с учетом регистра.
Из базы данных учетных записей пароль может быть восстановлен различными способами: атакой по словарю, последовательным (полным) перебором и гибридом атаки по словарю и последовательного перебора.
При атаке по словарю последовательно вычисляются хэш-значения для каждого из слов словаря или модификаций слов словаря и сравниваются с хэш-значениями паролей каждого из пользователей. При совпадении хэш-значений пароль найден. Преимущество метода — его высокая скорость. Недостатком является то, что таким образом могут быть найдены только очень простые пароли, которые имеются в словаре или являются модификациями слов словаря. Успех реализации данной атаки напрямую зависит от качества и объема используемого словаря (несложно отыскать подобные готовые словари в Интернете).
Последовательный перебор всех возможных комбинаций (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 паролей состояли из одного символа/цифры.
В повседневной жизни современному человеку приходится держать в памяти немалое количество информации: пин-коды к банковской карте и мобильному телефону, комбинации кодовых замков, пароль для доступа в Интернет, к ресурсам разного рода, электронным почтовым ящикам. Все ли пароли необходимо держать в памяти? Все зависит от оценки уровня потерь в результате попадания вашего пароля в чужие руки. Пароли для доступа в Интернет и к ресурсам сети никто не мешает записать в блокнот, если вы не опасаетесь, что кто-нибудь войдет в сеть без вашего ведома и ознакомится с содержанием почтового ящика. Данное умозаключение, однако, не распространяется на пароли используемые на рабочем месте. Получение доступа к локальной сети от вашего имени может, по определенным причинам, стать заманчивым вариантом. Пин-код банковской карты тоже не запрещается фиксировать на бумаге, главным условием в этом случае является раздельное хранение карты и записанной без пояснений кодовой комбинации.
2Приемы надежного программирования
При оценке степени надежности ПС следует также учитывать последствия каждого отказа. Некоторые ошибки в ПС могут вызывать лишь некоторые неудобства при его применении, тогда как другие ошибки могут иметь катастрофические последствия, например, угрожать человеческой жизни. Поэтому для оценки надежности ПС иногда используют дополнительные показатели, учитывающие стоимость (вред) для пользователя каждого отказа.
- предупреждение ошибок;
- самообнаружение ошибок;
- самоисправление ошибок;
- обеспечение устойчивости к ошибкам.
Целью подхода предупреждения ошибок — не допустить ошибок в готовых продуктах, в нашем случае — в ПС. Проведенное рассмотрение природы ошибок при разработке ПС позволяет для достижения этой цели сконцентрировать внимание на следующих вопросах:
- борьбе со сложностью;
- обеспечении точности перевода;
- преодоления барьера между пользователем и разработчиком;
- обеспечения контроля принимаемых решений.
Этот подход связан с организацией процессов разработки ПС, т.е. с технологией программирования. И хотя, как мы уже отмечали, гарантировать отсутствие ошибок в ПС невозможно, но в рамках этого подхода можно достигнуть приемлемого уровня надежности ПС.
Остальные три подхода связаны с организацией самих продуктов технологии, в нашем случае — программ. Они учитывают возможность ошибки в программах. Самообнаружение ошибки в программе означает, что программа содержит средства обнаружения отказа в процессе ее выполнения. Самоисправление ошибки в программе означает не только обнаружение отказа в процессе ее выполнения, но и исправление последствий этого отказа, для чего в программе должны иметься соответствующие средства. Обеспечение устойчивости программы к ошибкам означает, что в программе содержатся средства, позволяющие локализовать область влияния отказа программы, либо уменьшить его неприятные последствия, а иногда предотвратить катастрофические последствия отказа. Однако, эти подходы используются весьма редко (может быть, относительно чаще используется обеспечение устойчивости к ошибкам).
Я хотел бы услышать твое мнение про защитное программирование Надеюсь, что теперь ты понял что такое защитное программирование
и для чего все это нужно, а если не понял, или есть замечания,
то нестесняся пиши или спрашивай в комментариях, с удовольствием отвечу. Для того чтобы глубже понять настоятельно рекомендую изучить всю информацию из категории
Разработка программного обеспечения и информационных систем