МИНОБРНАУКИ РОССИИ САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ ЭЛЕКТРОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ «ЛЭТИ» ИМ. В.И. УЛЬЯНОВА (ЛЕНИНА) Кафедра «Информационная безопасность» ОТЧЕТ по учебной практике Тема: Безопасное программирование на Java Студент гр. 1363 Жданов Е.М. Руководитель к.т.н., доц. Племянников А.К. Санкт-Петербург 2023 ЗАДАНИЕ НА УЧЕБНУЮ ПРАКТИКУ Студент Жданов Е.М, Группа 1363 Тема практики: безопасное программирование на Java Задание на практику: Для расширения компетенций в области информационной безопасности, рекомендуется выполнить следующие шаги. Во-первых, пройти курс по безопасному программированию на языке Java, что позволит овладеть навыками работы с наиболее распространенными уязвимостями и изучить способы их предотвращения. После успешного окончания курса, рекомендуется сдать сертификационный экзамен для подтверждения полученных знаний и умений. Дополнительно, необходимо пройти курс по информационной безопасности офиса. После завершения курса, написать отзыв о полученных знаниях и опыте и сдать соответствующий сертификационный экзамен. В результате этих шагов будет достигнуто расширение компетенций в области защиты информации, подтвержденное соответствующими сертификатами. Сроки прохождения практики: 30.06.2023 – 13.07.2023 Дата сдачи отчета: 12.07.2023 Дата защиты отчета: 13.07.2023 Студент Жданов Е.М. к.т.н., доц. Племянников А.К. Руководитель 2 АННОТАЦИЯ Основная задача данной учебной практики – научится безопасному программирования на языке Java. Для этого необходимо пройти курс, обучающий соответствующей дисциплине на портале Hacktory компании Digital Security. Данный курс даёт возможность ознакомится с актуальными уязвимостями в современных приложениях и даёт возможность изучить их устройство и на собственном опыте попытаться поставить себя на место злоумышленника и человека, который борется с ними, всё это происходит в условиях виртуальной машины, которые максимально приближены к реальным, в машине используется система нахождения флагов для контроля прохождения заданий. SUMMARY The main objective of this learning practice is to learn how to program safely in the Java language. To do this, you need to take a course that teaches the relevant discipline on the Hacktory portal of Digital Security. This course gives an opportunity to get acquainted with current vulnerabilities in modern applications and gives an opportunity to study their structure and to try to put yourself in the place of an intruder and a person who fights against them, all this happens in the conditions of a virtual machine, which are as close to the real one as possible, the system of finding flags for controlling the passage of tasks is used in the machine. 3 СОДЕРЖАНИЕ Введение 6 Наименование задачи 8 1.1. Содержательная постановка 8 1.2. Результаты обучения 8 1.3 Выводы 8 Инъекция кода и команд 9 2.1. Содержательная постановка 9 2.2. Результаты обучения 9 2.3 Выводы 9 Выход за пределы директории 10 3.1. Содержательная постановка 10 3.2. Результаты обучения 10 3.3 Выводы 10 SQL инъекции 11 4.1. Содержательная постановка 11 4.2. Результаты обучения 11 4.3 Выводы 11 Наименование задачи 12 5.1. Содержательная постановка 12 5.2. Результаты обучения 12 5.3 Выводы 12 Наименование задачи 13 6.1. Содержательная постановка 13 6.2. Результаты обучения 13 6.3 Выводы 13 Наименование задачи 14 Содержательная постановка 14 1. 2. 3. 4. 5. 6. 7. 7.1. 4 7.2. Результаты обучения 14 7.3 Выводы 14 Наименование задачи 15 8.1. Содержательная постановка 15 8.2. Результаты обучения 15 8.3 Выводы 15 Наименование задачи 16 9.1. Содержательная постановка 16 9.2. Результаты обучения 16 9.3 Выводы 16 Наименование задачи 17 10.1 Содержательная постановка 17 10.2 Результаты обучения 17 10.3 Выводы 17 8. 9. 10. Наименование задачи 18 11.1 Содержательная постановка 18 11.2 Результаты обучения 18 11.3 Выводы 18 11. Наименование задачи 19 12.1 Содержательная постановка 19 12.2 Результаты обучения 19 12.3 Выводы 19 12. Заключение 20 Список использованных источников 22 Приложение А. Сертификат прохождения основного курса 23 Приложение Б. Сертификат прохождения дополнительного 24 курса и отзыв о курсе 5 ВВЕДЕНИЕ Цель практики - повышения уровня образованности путем приобретения (и/или совершенствования) следующих компетенций: 1) Умение пользоваться виртуальной машиной 2) Поиск и понимание устройства уязвимости инъекций кода и команд, а также разработка безопасных Java-приложений, исключающих данную уязвимость. 3) Устранение уязвимости выхода за пределы директории и создание безопасных Java-приложений, не допускающих такой атаки. 4) Предотвращение SQL-инъекций и разработка безопасных Javaприложений, гарантирующих защиту от таких атак. 5) Защита от межсайтовой подделки запроса и разработка безопасных Javaприложений, неуязвимых к таким атакам. 6) Предотвращение межсайтового скриптинга и разработка безопасных Java-приложений, исключающих возможность такой уязвимости. 7) Обеспечение безопасности аутентификации и авторизации и разработка безопасных Java-приложений, исключающих данную уязвимость. 8) Защита от подделки серверных запросов и разработка безопасных Javaприложений, неуязвимых к такому виду атак. 9) Устранение уязвимости инъекций в шаблоны (SSTI) и разработка безопасных Java-приложений, предотвращающих данный тип атак. 10) Защита от внешних XML-сущностей и разработка безопасных Javaприложений, неуязвимых к данной уязвимости. 11) Усиление безопасности при сериализации и разработка безопасных Java-приложений, исключающих данную уязвимость. Достижение поставленной цели проходило при выполнении следующих задач: 1) Полезная информация и описание инструментов 2) Инъекция кода и команд 3) Выход за пределы директории 6 4) SQL инъекции 5) Межсайтовая подделка запроса 6) Межсайтовый скриптинг 7) Уязвимость аутентификации и авторизации 8) Подделка серверных запросов 9) Инъекции в шаблоны (SSTI) 10) XML External Entity 11) Уязвимость сериализации 7 1. ПОЛЕЗНАЯ ИНФОРМАЦИЯ И ОПИСАНИЕ ИНСТРУМЕНТОВ 1.1. Содержательная постановка В данном разделе учащийся должен ознакомится со средой, в которой будут выполнятся все последующие лабораторные работы и с её инструментами. Для подтверждения полученных знаний необходимо выполнить тест из пяти вопросов по изученному материалу и выполнить лабораторную работу, на практике показав свои новые знания. 1.2. Результаты обучения Правильно выполненные задания: Тест, 1ntr0. Все задания выполнены 1.3. Выводы В результате выполнения данной лабораторной работы были успешно получены навыки работы с виртуальной средой на основе системы Linux и её инструментами, с использованием которых будут в дальнейшем выполнены все последующие задания курса. 8 2. ИНЪЕКЦИИ КОДА И КОМАНД 2.1. Содержательная постановка Нужно изучить теоретические сведения и на основе полученных знаний выполнить две лабораторные работы, направленные на защиту приложения и две, направленные предоставление на атаку. Сама злоумышленнику предусмотренных изначально уязвимость возсожности функционалом представляет выполнения приложения собой команд, с не помощью использования того факта, что не производится валидация вводимых данных. 2.2. Результаты обучения Правильно выполненные задания: RouterV1 (атака), RouterV1 (защита), FFF (атака), FFF (защита). Все задания выполнены. 2.3. Выводы В ходе выполнения задачи были приобретены следующие знания и умения: теоретическое представление о уязвимости, позволяющем внедрять произвольные команды ОС на сервере с использованием небезопасных пользовательских данных, возможные способы осуществления этой уязвимости, навыки по её устранению. 9 3. ВЫХОД ЗА ПРЕДЕЛЫ ДИРЕКТОРИИ 3.1. Содержательная постановка Изучить теорию и на её основе выполнить 2 лабораторные работы, одна из которых - атака приложения, а вторая – защита. Данная уязвимость позволяет пользователю выйти за пределы директории, получив доступ к файлам и директориям, к которым у него не должно быть доступа. 3.2. Результаты обучения Правильно выполненные задания: YAOFR (атака), YAOFR (защита). Все задания выполнены. 3.3. Выводы В ходе выполнения задачи были получены сведения о возможной эксплуатации уязвимости, предоставляющей злоумышленнику возможность манипулировать путями к файлам на сервере, используя функциональность самого приложения и практические навыки в одном из возможных вариантов осуществления и устранении уязвимости. 10 4. SQL ИНЪЕКЦИИ 4.1. Содержательная постановка В данном разделе требуется изучить теоретические данные по представленной уязвимости и на основании полученных сведений выполнить 7 практических заданий, 4 из которых представляют из себя осуществление атаки на базы данных, используя присутствующие в них уязвимости по отношению к SQL запросам, которые позволяю проводить не предусмотренные приложением изначально функции, а другие 3 – исправление данных уязвимостей, чтобы их эксплуатация была невозможна. 4.2. Результаты обучения Правильно выполненные задания: Bully (атака), Bully (защита), 4F1ng3r Discount (атака), 4F1ng3r Discount (защита), Sqill (атака), Sqill (защита) Невыполненные задания: Reciep 4.3. Выводы В ходе выполнения задачи были получены информация о применении, виде и технике эксплуатации различных вариантов такого типа уязвимости, как SQL инъекции и умение применять полученные знания для предопределения возможных типов атак и их устранения. Задача Reciep не была выполнена, так как указанных в теории данных недостаточно для понимания принципа выполнения данного задания. 11 5. МЕЖСАЙТОВАЯ ПОДДЕЛКА ЗАПРОСА 5.1. Содержательная постановка Межсайтовая подделка запросов – это тип атаки на аутентифицированного пользователя, в ходе которой злоумышленник обманным путем заставляет пользователя отправить подделанный запрос веб-приложению. Если жертва заходит на сайт, созданный злоумышленником, от ее лица тайно отправляется запрос на другой сервер, осуществляющий некую вредоносную операцию. После изучения теоретических сведений, необходимо выполнить три практических задания, два из которых отвечают за атаку, то есть эксплуатацию уязвимости, а одно - за защиту, то есть корректировку файлов кода приложения так, чтобы подобная эксплуатация была недопустима. 5.2. Результаты обучения Перечень правильно выполненных заданий: Likes! (атака), Likes! (защита). Невыполненные задания: Post me some like! 5.3. Выводы В ходе выполнения задачи было достигнуто онимание принципа осуществления такого типа уязвимости как CSRF и получен навык предотвращения подобного типа уязвимостей. 12 6. МЕЖСАЙТОВЫЙ СКРИПТИНГ 6.1. Содержательная постановка Межсайтовый скриптинг представляет собой вид атаки, при которой злоумышленник внедряет JavaScript код через небезопасную обработку пользовательского ввода. В результате такой атаки злоумышленник может выполнить вредоносный JavaScript код в браузере жертвы. После изучения теоретических сведений, необходимо выполнить четыре практических задания, два из которых отвечают за атаку, то есть эксплуатацию уязвимости, а два - за защиту, то есть корректировку файлов кода приложения так, чтобы подобная эксплуатация была недопустима. 6.2. Результаты обучения Выполненные задания: CookieStealer (атака), CookieStealer (защита), Firewall (атака), Firewall (защита). Все задания выполнены 6.3. Выводы В ходе выполнения задачи были приобретены сведения о атаке, представляющей из себя внедрение JavaScript кода - XSS и различных её разновидностях, возможные варианты осуществления этой уязвимости и способность к поиску и предотвращению данной уязвимости путём редактирования исходного кода, подкреплённая практическим осуществлениями методов полученных после изучения теоретических данных. 13 7. УЯЗВИМОСТИ АУТЕНТИФИКАЦИИ И АВТОРИЗАЦИИ 7.1. Содержательная постановка В этом разделе необходимо изучить теоретические данные и после их изучения, необходимо выполнить пять практических задания, три из которых отвечают за атаку, то есть эксплуатацию уязвимости, а два - за защиту, то есть корректировку файлов кода приложения так, чтобы подобная эксплуатация была недопустима. 7.2. Результаты обучения Правильно выполненные задания: Emailer (атака), Emailer (защита), ByteCoin (атака), ByteCoin (защита) Невыполненные задания: SecRed 1.3. Выводы В ходе выполнения задачи были получены сведения по нахождению, использованию уязвимости аутентификации и авторизации и нахождению методов защиты для недопущения эксплуатации подобного типа недостатков. 14 8. ПОДДЕЛКА СЕРВЕРНЫХ ЗАПРОСОВ 8.1. Содержательная постановка Подделка серверных запросов – это уязвимость, позволяющая злоумышленнику инициировать запросы с сервера во внутреннюю сеть благодаря использованию уязвимости, существующей в веб-приложении. После изучения теоретических сведений, необходимо выполнить два практических задания, одно из которых отвечают за атаку, то есть эксплуатацию уязвимости, а другое - за защиту, то есть корректировку файлов кода приложения так, чтобы подобная эксплуатация была недопустима. 8.2. Результаты обучения Правильно выполненные задания: Bubbles (атака) Невыполненных задания: Bubbles (защита) 8.3. Выводы В ходе выполнения задачи были приобретены знания, позволяющие находить уязвимости подделки серверных запросов, понимать принцип их устройства и умение по устранению этой уязвимости для обеспечения полной безопасности приложения. 15 9. ИНЪЕКЦИИ В ШАБЛОНЫ (SSTI) 9.1. Содержательная постановка Инъекция в шаблоны – уязвимость, возникающая в связи с тем, что внедрение данных пользователя в шаблоны на сервере реализовано небезопасно. После изучения теоретических сведений, необходимо выполнить пять практических заданий, три из которых отвечают за атаку, то есть эксплуатацию уязвимости, а два - за защиту, то есть корректировку файлов кода приложения так, чтобы подобная эксплуатация была недопустима. 9.2. Результаты обучения Правильно выполненные задания: FreeMortage! (атака), FreeMortage! (защита). Неправильно выполненные задания: Spel (атака). Невыполненные задания Spel (защита), Floopy 9.3. Выводы В ходе выполнения задания были приобретены навыки выявления и использования уязвимостей, связанных с инъекцией в шаблоны, а также с пониманием соответствующих методов устранения таких уязвимостей. Выполнению задания "Floppy" мешали повторяющиеся ошибки сервера, что приводило к необходимости частых перезагрузок лабораторной среды. Задачи Spel (атака) и Spel (защита) не была выполнена, так как указанных в теории данных недостаточно для понимания принципа выполнения данных заданий. 16 10. XML EXTERNAL ENTITY 10.1. Содержательная постановка XML External Entity – атака встречающаяся при обработке XMLдокументов и использует одну из уязвимых к атаке функциональных способностей XML- парсеров. После изучения теоретических сведений, необходимо выполнить три практических задания, два из которых отвечают за атаку, то есть эксплуатацию уязвимости, а одно за защиту, то есть корректировку файлов кода приложения так, чтобы подобная эксплуатация была недопустима. 10.2. Результаты обучения Правильно выполненные задания: JGround (атака), JGround (защита). Неправильно выполненные задания: JGround2 (атака). 10.3. Выводы В ходе выполнения задания были приобретены навыки выявления и использования уязвимостей, связанных с XML External Entity, а также с пониманием соответствующих методов устранения таких уязвимостей. Задание JGround2 не было выполнено, так как указанных в теории данных недостаточно для понимания принципа выполнения данного задания. 17 11. УЯЗВИМОСТИ СЕРИАЛИЗАЦИИ 11.1. Содержательная постановка Встроенные в приложение механизмы десереализации могут быть неправомерно использованы злоумышленником, если они используют недоверенные данные, что в результате может привести к следующим проблемам: изменение прав доступа, отказ в обслуживании или удалённое выполнение кода. После изучения теоретической информации, необходимо выполнить одно практическое задание. 11.2. Результаты обучения Неправильно выполненные задания: sixtyfourbase (атака). 11.3. Выводы В ходе выполнения задачи были получены базовые знания по устройству и обнаружению уязвимости десериализации, однако при этом задание не ьыло выполнено в связи с недостаточно подробными теоретическими сведениями по данной теме. 18 12. ЭКЗАМЕН 12.1. Содержательная постановка После выполнения 75% курса был получен доступ к экзамену, представляющему из себя три задания, в которых надо устранить уязвимости предоставленных приложений и получить соответствующий флаг за каждое задание. 12.2. Результаты обучения Все задания были успешно выполнены, в результате был получен золотой сертификат. 12.3. Выводы Были выполнены 3 задания необходимые для получения золотого сертификата и закреплены полученные знания пройденного курса безопасного программирования Java. 19 ЗАКЛЮЧЕНИЕ В процессе летней учебной практики и прохождения курса по безопасному программированию на языке Java, был получен ценный практический опыт работы с наиболее распространенными уязвимостями. Кроме того, были освоены знания о методах защиты от этих уязвимостей с использованием языка программирования Java. После прохождения данного курса были получены следующие результаты, полученные в результате решения поставленных задач: 1) Способность осваивать работу в новой среде и быстро ориентироваться в работе с использованием ранее незнакомых инструментов 2) Обнаружение и понимание уязвимости инъекций кода и команд, а также поиск способов предотвращения данной уязвимости. 3) Устранение уязвимости выхода за пределы директории и разработка мер для ограничения возможности применения таких атак. 4) Предотвращение SQL-инъекций и разработка мер безопасности для защиты от данного типа атак. 5) Защита от межсайтовой подделки запроса и разработка мер безопасности для предотвращения таких атак. 6) Предотвращение межсайтового скриптинга и поиск способов обеспечения защиты от данной уязвимости. 7) Устранение уязвимости аутентификации и авторизации и обеспечения надежного уровня безопасности в этой области. 8) Защита от подделки серверных запросов и разработка мер для предотвращения такого рода атак. 9) Устранение уязвимости инъекций в шаблоны (SSTI) и создание способов обеспечения безопасности для того, чтобы не допустить данного типа атак. 10) Защита от внешних XML-сущностей и создание мер защиты от данной уязвимости. 20 11) Усиление понимания условий для обеспечения безопасности при сериализации и разработка мер предотвращения применения его злоумышленником 12) Совокупное понимание основных уязвимостей и принципов их работы, подтверждённое прохождением экзамена Данный курс, по моему мнению составлен довольно грамотно и позволил мне всеобъемлюще изучить самые основные аспекты обеспечения безопасной работы приложения на таком языке программирования, как Java, а в качетве планов на дальнейшее продолжение обучения я планирую продолжить учиться программировать безопасно но уже на других языках, таких как JavaScript для чего я могу использовать ту же платформу, на которой я прошёл описываемый в данной работе курс, для других языков я буду использовать другие многочисленные ресурсы представленные в сети Интернет. 21 СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ 1. SQLmap usage. URL: https://github.com/sqlmapproject/sqlmap/wiki/Usage (Дата обращения 02.07.2023). 2. Server-Side Template Injection Introduction & Example URL: https://www.netsparker.com/blog/web-security/server-side-templateinjection/ (Дата обращения 03.07.2023). 3. Server-side request forgery URL: https://portswigger.net/web-security/ssrf (Дата обращения 03.07.2023). 4. Out-of-band XML External Entity (OOB-XXE) URL: https://www.acunetix.com/blog/articles/band-xml-external-entity-oob-xxe/ (Дата обращения 01.07.2023). 5. Excess XSS: A comprehensive tutorial on cross-site scripting URL: https://excess-xss.com/ (Дата обращения 02.07.2023). 6. Insecure direct object references (IDOR) URL: https://portswigger.net/websecurity/access-control/idor (Дата обращения 03.07.2023). 22 7. ПРИЛОЖЕНИЕ А СЕРТИФИКАТ ПРОХОЖДЕНИЯ ОСНОВНОГО КУРСА 23 ПРИЛОЖЕНИЕ Б СЕРТИФИКАТ ПРОХОЖДЕНИЯ ДОПОЛНИТЕЛЬНОГО КУРСА И ОТЗЫВ О КУРСЕ 1. Результат и общее впечатление от курса В результате прохождения данного курса были изучены основные методы возможных атак на офисное предприятие и получена информация о методах противодействия им, тем самым был повышен уровень общей грамотности в области информационной безопасности. Данный курс был составлен корректно, он позволяет любому офисному работнику, даже абсолютно несведущему в данной области получить необходимые знания для противостояния базовым приёмам социальной инженерии, что уже позволит поднять уровень безопасности предприятия на новый уровень. 2. Достоинства и недостатки 24 Достоинства: - Простое изложение информации - Покрытие всех базовых навыков о вех возможных методах атак на данные - Обеспечение знаниями по методам недопущения или отражения атак Недостатки: - Недостаточное количество внимания уделено социальной инженерии и методов противодействия ей 3. Рекомендации по улучшению курса Возможно следует сделать курс чуть более подробным, добавить больше деталей о том, как действуют мошенники в настоящее время и расширить у читающего ассортимент навыков противодействия угрозам, новые методы осуществления которых появляются каждый день. 25