Тип работы:
Предмет:
Язык работы:


Статический анализ распространения выходных значений хранимых процедур и функций в прикладном программном обеспечении

Работа №113699

Тип работы

Дипломные работы, ВКР

Предмет

программирование

Объем работы109
Год сдачи2023
Стоимость1500 руб.
ПУБЛИКУЕТСЯ ВПЕРВЫЕ
Просмотрено
59
Не подходит работа?

Узнай цену на написание


Введение 4
1. Анализ контроля распространения выходных значений хранимых процедур и функций в программном обеспечении 9
1.1. Роль контроля распространения выходных значений хранимых процедур и функций поддержании конфиденциальности и целостности данных 9
1.2 Системы безопасности типов и анализ программного графа зависимостей 17
1.3 Деклассификация - контролируемое раскрытие конфиденциальной информации 24
1.4 Этапы статического анализа распространения выходных значений хранимых процедур и функций 27
2. Принципы обеспечения безопасности программного обеспечения 48
2.1 Классификация средств атаки на средства защиты программного обеспечения 48
2.2 Основные принципы обеспечения безопасности ПО 53
3. Оценка качества программного обеспечения 58
3.1 Показатели сопровождения программного обеспечения 58
3.2 Показатели надежности 66
3.3 Показатели удобства применения программного обеспечения 72
3.4 Показатели эффективности программного обеспечения 73
3.5 Показатели универсальности программного обеспечения 74
3.6 Показатели корректности программного обеспечения 74
3.7 Постановка задачи оценки защищенности ПО 82
4. Реализация статического анализа распространения выходных значений хранимых процедур и функций в прикладном программном обеспечении 85
4.1. Описание тестового приложения и используемые инструменты 85
4.2. Построение базы данных 87
4.3. Создание основы приложения и настройка локального окружения 92
4.4. Итеративное построение CodeQL запросов 96
Заключение 110
Список литературы 112

Актуальность работы. В настоящее время значительное внимание уделяется проблеме возможного наличия в программном обеспечении (ПО) функциональных возможностей, способных привести к последствиям и тем самым нанести ущерб правообладателю или потребителю. Особую актуальность данная проблема приобретает для ПО, используемого для обработки информации, к которой предъявляются требования по безопасности. Одним из наиболее значимых факторов угрозы нарушения безопасности информации, является наличие уязвимостей в ПО, реализующем процессы обработки информации. Под уязвимостью понимается программный код, выполнение которого может нарушить безопасность обрабатываемой информации при появлении определенных условий. При этом наличие уязвимости может быть обусловлено как ошибками разработчика, так и его умышленными действиями. В связи с этим серьезные усилия специалистов сосредоточены на разработке и совершенствовании подходов к исследованиям ПО на предмет отсутствия в нем уязвимостей. Оценка влияния информационных воздействий на ПО является важнейшей частью общего процесса выявления уязвимостей и выделена в отдельное направление.
Оценка защищенности информационных технологий определяется, в первую очередь, наличием законодательных актов и нормативно-технических документов по обеспечению безопасности информационных технологий. Критерии оценки безопасности информационных технологий занимают среди них особое место. Только стандартизованные критерии позволяют проводить сравнительный анализ и сопоставимую оценку изделий информационных технологий.
Проблемы защиты программного обеспечение в области контроля над его использованием и дальнейшим распространением в настоящее время принято решать при помощи программно-технических средств - систем защиты ПО. В то же время для обхода и отключения подобных систем защиты существует множество инструментальных средств. Возникает задача сопоставить возможности средств защиты ПО с возможностями средств их преодоления. Результаты такого анализа будут полезны для оценки рисков при производстве программных продуктов, а так же планировании и оценке уровня стойкости систем защиты ПО.
У системы защиты ПО существуют ряд основных проблем, с которыми она должна справляться:
- кража интеллектуальной собственности или конфиденциальных данных содержащихся в программе (в том числе восстановление логики работы программы);
- несанкционированное использование либо распространение ПО (кража, копирование, пиратство);
- несанкционированная модификация ПО;
Рассмотрим подробнее эти методы атаки на программное обеспечение.
Пиратство - вид деятельности, связанный с неправомерным распространением или использованием ПО. Существует множество способов проведения таких атак, среди которых (но не ограничиваясь ими) можно выделить следующие:
- неправомерное копирование - перенос программы на другой компьютер и ее выполнение на нем в случае, если это не разрешено лицензией. Следует отметить, что для противодействия этой атаке важно сделать невозможным не столько копирование программы, сколько ее выполнение на другом компьютере. Этот вид атаки мало распространен в связи с несовместимостью с современной бизнес-моделью распространения ПО;
- неправомерное использование - выполнение программы (либо использование ее результатов) пользователем, которому автор или владелец не предоставил разрешения на выполнение;
- нарушение требований лицензии на ПО;
- перепродажа программного продукта от своего имени.
Незаконное копирование и перепродажа ПО, а также несанкционированное его использование лицами, которые не имеют на это права, ежегодно обходится производителям, по разным оценкам, потерями от 10 до 12 млрд. долларов. По данным Business Software Alliance, 36% всего используемого в мире ПО является пиратским. Можно утверждать, что пиратство - основная проблема для разработчиков и распространителей коммерческого ПО. Это подтверждается и обилием решений для противостояния пиратству. За всю историю коммерческого ПО были придуманы тысячи способов (как программных, так и аппаратных) защиты ПО от нелегального использования и распространения.
Кража интеллектуальной собственности или конфиденциальных данных - это целенаправленный процесс анализа кода ПО с целью извлечения из него определенных функциональных возможностей, а также раскрытия алгоритмов или данных, используемых в программе, которые могут представлять интерес для атакующего. Анализируя извлеченные из программы данные, атакующий (называемый также обратным проектировщиком, или реверс - инженером) может получить доступ к алгоритмам программы. Возможно, некоторые из этих алгоритмов защищены патентами или просто должны сохраняться в секрете (например, по причине манипулирования секретными ключами).
Основными инструментами реверс-инженера являются дизассемблер и отладчик (большинство современных реализаций объединяют эти инструменты в одном продукте). Дизассемблер позволяет по выполняемому коду восстановить исходный код программы в виде инструкций на языке ассемблера, а в некоторых случаях - и в виде программы на языке более высокого уровня (например, С). Отладчик позволяет загрузить программу «внутрь себя» и контролировать ход ее выполнения (выполнять инструкции программы «по шагам», предоставлять доступ к ее адресному пространству, отслеживать обращения к разным участкам памяти). Следует отметить, что реверс-инженер может обойтись и без этих средств, просто рассматривая программу как «черный ящик», подавая ей на вход специальным образом сформированные данные и анализируя выходные данные. Однако анализ по методу «черного ящика» крайне неэффективен ввиду его малой производительности. Поскольку этот метод практически не используется при взломе программ, вопрос противодействия ему не будем рассматривать.
Модификация кода программы - преднамеренное или непреднамеренное изменение выполняемого кода программы, приводящее к отклонениям программы от нормального хода выполнения. Например, атакующий может изменить процедуру проверки лицензионного ключа так, чтобы для любого переданного значения она возвращала TRUE, и, таким образом, программа бы считала любое значение лицензионного ключа корректным. Кроме того, атакующий может добавить в программу - жертву код, отсылающий конфиденциальную информацию об окружении, в котором она выполняется, на его компьютер. Способность программы определять, что она была изменена, очень важна, так как изменения, внесенные в программу, могут привести к самым печальным последствиям (например, в случае, если программа обслуживает больницу, электростанцию или другую критическую службу). Отдельно стоит отметить, что подобные атаки могут быть выполнены компьютерными вирусами, заражающими исполняемый код. Если программа сумеет противостоять заражению (или определить, что она была заражена), это сможет существенно снизить темпы распространения вирусной эпидемии.
Следует отметить, что вышеперечисленные виды атак не являются независимыми друг от друга. Скорее, даже наоборот - они очень тесно переплетены между собой. Так, проблема создания генератора ключей (пиратство) опирается на исследование, каким образом в программе выполняется проверка лицензионного ключа (реверс-инженерию); еще один подход софтверных пиратов - удаление из программы кода проверки лицензионного ключа - связан с модификацией кода. Поэтому рассматривать атаки независимо друг от друга не имеет смысла, нужно сконцентрироваться на методах, обеспечивающих максимальное противодействие всем видам атак одновременно.
Цель работы исследовать статический анализ распространения выходных значений хранимых процедур и функций в прикладном программном обеспечении
Задачи:
 Проанализировать контроль распространения выходных значений хранимых процедур и функций в программном обеспечении;
 Рассмотреть принципы обеспечения безопасности программного обеспечения;
 Провести оценку качества программного обеспечения;
 Исследовать реализацию статического анализа распространения выходных значений хранимых процедур и функций в прикладном программном обеспечении.


Возникли сложности?

Нужна помощь преподавателя?

Помощь в написании работ!


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



1. Девянин П.Н. Модели безопасности компьютерных систем. Учебное пособие для вузов. - М.: Горячая линия - Телеком, 2013. - 337 с.
2. Буренин П.В. Подходы к построению ДП-модели файловых систем. // Прикладная дискретная математика. 2009. №1 (3) С. 93-112
3. D. E. Denning and P. J. Denning. Certification of Programs for Secure Information Flow. // Comm. of the ACM, 20(7). 1977. P. 504-513. 4. A. C. Myers and B. Liskov. A decentralized model for information flow control. // Proc. ACM Symp. on Operating System Principles. 1977. P. 129-142.
5. D. Hedin and A. Sabelfeld. A perspective on Information-Flow Control. // NATO Science for Peace and Security Series. Volume 33: Software Safety and Security. 2012. P. 319-347.
6. D. Clark, S. Hunt, and P. Malacaria. Quantitative information flow, relations and polymorphic types. // Journal of Logic and Computation, Special Issue on Lambda calculus, type theory and natural language, 18(2), 2005. P. 181-199.
7. D. Clark, S. Hunt, and P. Malacaria. A static analysis for quantifying information flow in a simple imperative language. // Journal of Computer Security, 15(3) 2007. P. 321-371.
8. G. Lowe. Quantifying information flow. // Proc. IEEE Computer Security Foundations Workshop. 2002. P. 18-31.
9. A. Sabelfeld and A. C. Myers. A model for delimited information release. // Proc. International Symp. on Software Security (ISSS'03), volume 3233 of LNCS. 2004. P. 174-191.
10. A. Lux and H. Mantel. Who can declassify? In Workshop on Formal Aspects in Security and Trust (FAST'08), volume 5491 of LNCS. 2009. P. 35-49.
11. H. Mantel and D. Sands. Controlled downgrading based on intransitive (non)interference. Proc. Asian Symp. on Programming Languages and Systems, volume 3302 of LNCS 2004. P. 129-145.
12. A. W. Roscoe and M. H. Goldsmith. What is intransitive noninterference? // Proc. IEEE Computer Security Foundations Workshop. 199. P. 228-238, June 1999.
13. J. M. Rushby. Noninterference, transitivity, and channel-control security policies. // Technical Report CSL-92-02, SRI International. 1992.
14. D. Volpano and G. Smith. Verifying secrets and relative secrecy. // on Principles of Programming Languages. 2000. P. 268-276. Proc. ACM Symp.
15. A. Di Pierro, C. Hankin, and H. Wiklicky. Approximate non-interference. // Proc. IEEE Computer Security Foundations Workshop. 2002. P. 1-17.
16. S. Chong and A. C. Myers. Security policies for downgrading. // ACM Conference on Computer and Communications Security. 2004. P. 198-209.
17. D. Volpano, G. Smith, and C. Irvine. A sound type system for secure flow analysis. // J. Computer Security. 4(3), 1996. P. 167-187. 18. N. Broberg and D. Sands. Flow locks: Towards a core calculus for dynamic flow policies.// Programming Languages and Systems. 15th European Symposium on Programming, ESOP 2006, volume 3924 of LNCS, 2006.
19. N. Broberg and D. Sands. Flow-sensitive semantics for dynamic information flow policies. // Fourth Workshop on Programming Languages and Analysis for Security (PLAS 2009). 2009.
20. N. Broberg and D. Sands. Paralocks-role-based information flow control and beyond. // POPL'10, Proceedings of the 37th Annual ACM SIGACT-SIGPLAN Symposium on Principles of Programming Languages. 2010.
21. Adam Barth, Collin Jackson, and John C. Mitchell. Securing frame communication in browsers. // SS'08: Proceedings of the 17th conference on Security symposium. 2008, P. 17-30.

Работу высылаем на протяжении 30 минут после оплаты.




©2025 Cервис помощи студентам в выполнении работ