--- title: OWASP TOP 10 Day 1 tags: OWASP TOP 10 slideOptions: transition: fade center: true parallaxBackgroundImage: 'https://hackmd.io/_uploads/SJhktzri2.png' --- # OWASP TOP 10 Day 1 --- ## Безопасность web-приложений для разработчиков и угрозы из списка OWASP Top10 (Основы) --- ## Содержание: - Знакомство - Введение в информационную безопасность и безопасность веб-приложений - Три столпа ИБ - Информационная безопасность - Классификации видов угроз - Угрозы доступности: внутренний отказ информационной системы - Угрозы целостности: характер нарушения целостности информации - Угрозы конфиденциальности - Веб-приложения и уязвимости веб-приложений - Безопасная разработка - Криптография - Типы алгоритмов - Для чего нужно хеширование - TLS- или SSL-рукопожатие - Стандарты в области безопасности разработки веб-приложений - ASVS - WSTG - OWASP TOP 10 --- ## Certificates - Offensive security certified professional (OSCP) - x86 Assembly Language and Shellcoding on Linux (SLAE) - Offensive security certified expert (OSCE) - Offensive security web expert (OSWE) - Certified Red Team Professional (CRTP) --- ## Work experience - Penetration testing specialist at Informzashita - Senior penetration tester at Kaspersky - lecturer at Hackeru/CyberEd - just a little bit of a bug bounty. --- # Let\`s go ## Три столпа ИБ 1. Конфиденциальность (Confidentiality) - обеспечение доступа к информации только авторизованным пользователям. 2. Целостность (Integrity) - обеспечение достоверности и полноты информации. 3. Доступность (Availability) - гарантия возможности получить доступ к информации ![](https://websitesecuritystore.com/wp-content/uploads/2021/08/cia-triad.svg) --- ## Информационная безопасность - Защита конфиденциальности, целостности и доступности информации, а также сюда могут быть включены другие свойства, такие как подлинность, подотчетность, неотказуемость (англ. non-repudiation) и достоверность. - Защита информации и информационных систем от неавторизованного доступа, использования, раскрытия, искажения, изменения или уничтожения в целях обеспечения конфиденциальности, целостности и доступности. - Обеспечение защиты информации на предприятии от раскрытия неавторизованным пользователям (конфиденциальность), противоправного изменения (целостность) и недоступности, когда она необходима (доступность). - Процесс защиты интеллектуальной собственности организации. - Одна из дисциплин управления рисками, чьей задачей является управление стоимостью информационных рисков для бизнеса. - Обоснованная уверенность в том, что информационные риски уравновешены соответствующими мерами контроля и управления. - Защита информации, минимизирующая риск разглашения информации неавторизованным лицам. --- - Процесс баланса между возникающими, воздействующими угрозами и успешностью противодействия этим угрозам со стороны органов государственной власти, отвечающих за безопасность государства. - Мультидисциплинарная область исследований и профессиональной деятельности, которая сосредоточена на развитии и внедрении всевозможных механизмов безопасности (технических, организационных, человекоориентированных, юридических) с целью предохранения информации от угроз повсюду, где бы она ни находилась (как внутри периметра организации, так и за его пределами) и, соответственно, информационных систем, в которых информация создаётся, обрабатывается, хранится, передаётся и уничтожается. Перечень целей безопасности может включать конфиденциальность, целостность, доступность, неприкосновенность частной жизни, подлинность и достоверность, неотказуемость, подотчетность и проверяемость. --- ### Терминология Краткая памятка: - То, что может сделать с информацией атакующий, называется **угрозой (threat)**; - То, благодаря чему он может это сделать, называется **уязвимостью (vulnerability)**, обусловленной **недостатком (weakness)** - То, как он может это сделать, называется **атакой (attack)** - То, с какой вероятностью злоумышленник это сделает и какие последствия это может повлечь, называется **риском (risk)** - То, что будет являться целью атаки и имеющее ценность для организации является **активом** - То, что не позволяет атакующему провести атаку, обеспечивает **защищенность (security)** - То, что минимизирует риск, обеспечивает **безопасность (safety)** --- ## Классификации видов угроз 1. Угроза непосредственно информационной безопасности: - Доступность - Целостность - Конфиденциальность 2. Компоненты, на которые угрозы нацелены: - Данные - Программы/приложения - Аппаратура - Поддерживающая инфраструктура 3. По способу осуществления: - Случайные или преднамеренные - Природного или техногенного характера 4. По расположению источника угрозы бывают: - Внутренние - Внешние --- ![](https://media.tenor.com/xvrKzsMl-EMAAAAC/bored-boredom.gif) ___ ## Угрозы доступности: внутренний отказ информационной системы - Нарушение (случайное или умышленное) установленных правил эксплуатации - Выход системы из штатного режима эксплуатации в силу случайных или преднамеренных действий пользователей (превышение расчетного числа запросов, чрезмерный объем обрабатываемой информации и т.п.) - Ошибки при (пере)конфигурировании системы - Вредоносное программное обеспечение - Отказы программного и аппаратного обеспечения - Разрушение данных - Разрушение или повреждение аппаратуры - Человеческий фактор - Нарушение работы (случайное или умышленное) систем связи, электропитания, водои/или теплоснабжения, кондиционирования - Невозможность или нежелание обслуживающего персонала и/или пользователей выполнять свои обязанности --- ## Угрозы целостности: характер нарушения целостности информации - Саботаж — повреждение, наступившее в результате целенаправленных злонамеренных действий (атаки киберпреступников и деятельность сотрудников, решивших по разным причинам расстроить функционирование собственной компании, корыстные мотивы, месть и т.п.) - Программные сбои — изменения, вызванные некорректной настройкой приложения или операциями вредоносного кода. --- ## Угрозы конфиденциальности: Конфиденциальную информацию можно разделить на: - предметную - служебную (пароли пользователей); играет техническую роль Также среди угроз: - злоупотребление полномочиями - нанесение ущерба при сервисном обслуживании --- ## Веб-приложения и уязвимости веб-приложений Веб-сервер - сервер, принимающий HTTP-запросы от клиентов, обычно веб-браузеров, и выдающий им HTTP-ответы, как правило, вместе с HTML-страницей, изображением, файлом, медиа-потоком или другими данными. Веб-сервер отвечает за предварительную обработку поступающих запросов. Он управляет сетевыми соединениями, может реализовывать кеширование и передачу запросов другим хостам. Также он передает по определенному интерфейсу запросы программному коду на различных языках программирования. Веб-приложение - клиент-серверное приложение, в котором клиент взаимодействует с веб-сервером при помощи браузера. Логика веб-приложения распределена между сервером и клиентом, хранение данных осуществляется, преимущественно, на сервере, обмен информацией происходит по сети. Использование паттернов: - Model-View-Controller - Model-View-Presenter - Model-View-ViewModel - … ![](https://media.geeksforgeeks.org/wp-content/uploads/20220224160807/Model1.png) --- Использование фреймворков: - Java - Spring, JSF, Struts, … - PHP - Laravel, Symfony, ZEND, Yii, … - Ruby - Ruby on rails, … - Python - Flask, Django, … - JS (Node.js) - Express.JS, Meteor.JS, … - C# ([ASP.NET](http://ASP.NET)) - ([ASP.NET](http://ASP.NET) Web Forms, [ASP.NET](http://ASP.NET) MVC , [ASP.NET](http://ASP.NET) Web Pages, [ASP.NET](http://ASP.NET) Web API , [ASP.NET](http://ASP.NET) WebHooks, SignalR), … --- Компоненты современных веб-приложений: |Клиентская часть|Серверная часть|Хранение данных|Другие компоненты| |---|---|---|---| |Electron|Nginx|Files System|Reverse-Proxy| |JavaScript|Apache|MySQL|Load Balancer| |TypeScript|Apache Tomcat|PostgreSQL|Proxy Server| |ReactJS|Microsoft IIS|mongoDB|Cache Server| |Redux|Gunicorn|Oracle|WebSocket| |AngularJS|uWSGI|IBM DB 2|Web Application Firewall| |Vue.js|Java|Microsoft SQL Server|| |jQuery|Python|SQLite|| ||PHP|Redis|| ||NodeJs|Memcached|| ||C#|Neo4j|| ||Go|Tarantool|| ||RubyOnRails|XML|| |||YAML|| # Криптография ### Базовые термины **Шифр** – совокупность заранее оговоренных способов преобразования исходного секретного сообщения с целью его защиты. **Открытый текст (plaintext)** - исходные данные. **Символ** - это любой знак, в том числе буква, цифра или знак препинания. **Алфавит** - конечное множество используемых для кодирования информации символов. **Шифрованное сообщение (ciphertext)** - сообщение, полученное после преобразования с использованием любого шифра. **Ключ** – информация, необходимая для шифрования и расшифрования сообщений. **Система шифрования, или шифрсистема**, – это любая система, которую можно использовать для обратимого изменения текста сообщения с целью сделать его непонятным для всех, кроме тех, кому оно предназначено. **Криптостойкостью** называется характеристика шифра, определяющая его стойкость к дешифрованию без знания ключа (т.е. способность противостоять криптоанализу). --- ## Типы алгоритмов ![](https://habrastorage.org/files/38b/4d7/710/38b4d7710ddf45c89f78e9df4273db8d.gif) <br><br> - **Бесключевые КА** — не используют в вычислениях никаких ключей; - **Одноключевые КА** — работают с одним ключевым параметром (секретным ключом); - **Двухключевые КА** — на различных стадиях работы в них применяются два ключевых параметра: секретный и открытый ключи. --- **Хеш-функция** — функция, осуществляющая преобразование массива входных данных произвольной длины в выходную битовую строку установленной длины, выполняемое определённым алгоритмом. **Свойства хеш-функции**: - Необратимость. - Детерминированность. - Уникальность. - Разнообразие. - Высокая скорость генерации. - Стойкость к коллизиям первого и второго рода --- ## Безопасная разработка **Application Security** — это раздел безопасности, который отвечает за безопасность приложений. **Security Development Lifecycle** (SDL, жизненный цикл безопасной разработки) — концепция разработки, заключающаяся в формировании требований к приложению, безопасном программировании, тестировании, сертификации, эксплуатации и обновлении. SDL — это процесс, который позволяет поддерживать необходимый уровень безопасности системы на этапе разработки, а затем на протяжении всего срока эксплуатации. Эта концепция фокусируется на обеспечении безопасности разрабатываемого приложения, идентификации рисков и управлении ими. --- ### Этапы SDLC 1. Планирование (Planning) - отвечает на вопрос «Что мы хотим сделать?» 2. Анализ (Analysis) - отвечает на вопрос «Какие проблемы требуют решений?» 3. Дизайн (Design) - отвечает на вопрос «Как мы добьемся наших целей?» 4. Реализация (Implementation) - регулирует процесс создания продукта. 5. Тестирование и Интеграция (Testing & Integration) - регулирует обеспечение качественной работы продукта. 6. Поддержка (Maintenance) - регулирует использование финального продукта. ![SSDLC](https://i.imgur.com/e0DCtky.png) --- ## SSDLC SSDLC – жизненный цикл безопасной разработки – набор подходов, применяемых на всех этапах жизни приложений от проектирования до поддержки в процессе эксплуатации для повышения безопасности конечного продукта и снижению ущерба при наличии уязвимостей. ![SSDLC](https://static.tildacdn.com/tild6232-6636-4561-b631-613930303030/SSDLC.jpg) Examples https://mvsp.dev/ --- ## Инструменты и методологии поиска уязвимостей веб-приложений (DAST, SAST, SCA) ### Dynamic Application Security Testing (DAST) Dynamic Application Security Testing - это процесс тестирования приложения или программного продукта в рабочем состоянии. Такой вид тестирования полезен для обеспечения защищенности актуальной версии продукта и для постоянной проверки состояния защищенности системы. Задачи: - Поиск незадекларированных возможностей - Поиск неконтролируемых утечек ресурсов - Поиск уязвимостей конфигурации развернутого приложения - Поиск аномалий поведения при взаимодействии с входными точками приложения --- ### Static Application Security Testing (SAST) Инструменты анализа исходного кода, также известные как Static Application Security Testing (SAST) Tools, предназначены для анализа исходного кода или скомпилированных версий кода, чтобы помочь найти дефекты безопасности. Задачи: - Поиск скрытых уязвимостей - Поиск логических ошибок - Поиск ошибки архитектуры - Поиск дефетов реализации - Поиск “Мертвого” кода - Поиск “Закладок” - Поддержка уровня качества кода и отклонений от стандартов --- ### Software Composition Analysis (SCA) Программные решения типа Software Composition Analysis (SCA), предназначены для автоматизированного обнаружения рисков и устранения уязвимостей в коде, контроля использования внешних (готовых) библиотек. Задачи: - Инвентаризация всех открытых исходных кодов (OSS) и запатентованных компонентов, используемых на предприятии. - Определение компонентов с уязвимостями безопасности, известными как Common Vulnerabilities and Exposures (CVE) (Общие уязвимости и воздействия) - Идентифицировать компоненты с лицензиями, не соответствующими предполагаемому использованию компанией программного обеспечения. - Обнаружение устаревших компонентов, которые больше не поддерживаются, чтобы их можно было заменить текущими версиями. - Эффективное и быстрое распространение информации о выявленных рисках среди членов команды, которые могут принять меры по их устранению. - Отслеживать смягчение выявленных рисков, связанных с безопасностью и лицензированием. - Обеспечить механизм для непрерывного выполнения SCA --- ### HTTPS ![](https://cheapsslsecurity.com/blog/wp-content/uploads/2017/10/ssl-tls-handshake-process-1024x670.png) **SSL** является изначальным, и устаревшим на текущий момент, протоколом, созданным Netscape в середине 90х **TLS** - актуальный протокол для защищенного шифрования в вебе, поддерживаемый IETF. **TLS-рукопожатие** — это процесс, который запускает сеанс связи, использующий TLS. Во время TLS-рукопожатия две взаимодействующие стороны обмениваются сообщениями, чтобы подтвердить друг друга, проверить друг друга, установить алгоритмы шифрования, которые они будут использовать, и согласовать ключи сеанса. TLS-рукопожатия являются важной составляющей процесса работы HTTPS ### Почему стоит использовать TLS 1.3 ![](https://www.a10networks.com/wp-content/uploads/differences-between-tls-1.2-and-tls-1.3-full-handshake.png) --- ## Стандарты в области безопасности разработки веб-приложений - [OWASP Cheat Sheet](https://cheatsheetseries.owasp.org) - Памятки OWASP - [Стандарт подтверждения безопасности приложений OWASP (ASVS)](https://www.owasp.org/index.php/Category:OWASP_Application_Security_Verification_Standard_Project) - [Приложение по безопасности к Контракту на разработку ПО от OWASP.](https://owasp.org/www-community/OWASP_Secure_Software_Contract_Annex) - Как правильно писать часть договора, относящегося к безопасности - [OWASP RRM](https://owasp.org/www-community/OWASP_Risk_Rating_Methodology) - Методология оценки рисков от OWASP - [OWASP Web Security Testing Guide](https://github.com/OWASP/wstg) - [OWASP Developers Guide](https://owasp.org/www-project-developer-guide/) - очень старый гайд, не обновлялся давно - [Microsoft SDL](https://docs.microsoft.com/en-us/previous-versions/windows/desktop/cc307891(v=msdn.10)) - [BSIMM — Building Security In Maturity Model](https://www.bsimm.com/) --- --- ## ASVS ![](https://pensivesecurity.io/blog/images/thc/owasp-asvs.png) - Уровень 1 предназначен для низкого уровня доверия и может быть полностью протестирован только с помощью тестов на проникновение. - Уровень 2 предназначен для приложений, содержащих конфиденциальные данные, которые требуют защиты и является рекомендуемым уровнем для большинства приложений. - Уровень 3 предназначен для наиболее важных приложений – приложений, которые выполняют транзакции с высокой стоимостью, содержат конфиденциальные медицинские данные или требуют высочайшего уровня доверия. --- ![](https://hackmd.io/_uploads/Bkc_Ns02n.png) ### CWE CWE (Common Weakness Enumeration) - это разработанный сообществом список типов слабых или уязвимых мест программного и аппаратного обеспечения https://cwe.mitre.org/data/definitions/320.html https://cwe.mitre.org/data/definitions/323.html --- ![](https://hackmd.io/_uploads/ryo6rsCnh.png) ### CVE База данных общеизвестных уязвимостей информационной безопасности. Каждой уязвимости присваивается идентификационный номер вида CVE-год-номер, описание и ряд общедоступных ссылок с описанием. ![](https://habrastorage.org/r/w1560/getpro/habr/upload_files/c71/d95/872/c71d9587270345e49281130ea68539d9.png) --- ### Руководства по тестированию от OWASP Что касается проведения технического тестирования безопасности, настоятельно рекомендуется использовать руководства по тестированию от OWASP. В зависимости от типов приложений ниже перечислены руководства по тестированию для web-приложений/облачных сервисов, мобильных приложений (Android/iOS) или встроенного программного обеспечения/Интернета вещей (IoT) соответственно. - [Руководство по тестированию безопасности web-приложений](https://owasp.org/www-project-web-security-testing-guide/) - [Руководство по тестированию безопасности мобильных приложений](https://owasp.org/www-project-mobile-security-testing-guide/) - [Методология тестирования безопасности встроенного программного обеспечения](https://github.com/scriptingxss/owasp-fstm) - Не OWASP - PTES (Стандарт проведения тестирования на проникновение) [Технические рекомендации PTES](http://www.pentest-standard.org/index.php/PTES_Technical_Guidelines) - PCI DSS (Стандарт безопасности данных индустрии платёжных карт) [Руководство PCI DSS по тестированию на проникновение](https://www.pcisecuritystandards.org/documents/Penetration-Testing-Guidance-v1_1.pdf) - PTF (Фреймворк для тестирования на проникновение) [Фреймворк для тестирования на проникновение](http://www.vulnerabilityassessment.co.uk/Penetration%20Test.html) - NIST 800-115 (Техническое руководство по тестированию и оценке информационной безопасности) [NIST 800-115](https://csrc.nist.gov/publications/detail/sp/800-115/final) - OSSTMM (Руководство по методологии тестирования безопасности с открытым исходным кодом) [Open Source Security Testing Methodology Manual](https://www.isecom.org/OSSTMM.3.pdf) #### WSTG - Сбор информации - Тестирование управления конфигурациями и развёртыванием - Тестирование управления идентификацией - Тестирование аутентификации - Тестирование авторизации - Тестирование управления сессиями - Тестирование контроля входных данных - Тестирование обработки ошибок. - Тестирование криптографии - Тестирование бизнес-логики - Тестирование на стороне клиента - Тестирование API ![](https://static.packt-cdn.com/products/9781801816298/graphics/image/Figure_1.04_B17828.jpg) --- ## OWASP TOP 10 **OWASP top 10** - стандарт, созданный для разработчиков и специалистов по анализу веб приложений. там перечислены риски, которые наиболее часто встречались в веб приложениях. Он ранжирует риски на основе их частоты, серьезности уязвимостей и их потенциального воздействия. Это дает разработчикам и специалистам по безопасности понимание наиболее серьезных рисков и позволяет им минимизировать возможные последствия эксплуатации уязвимостей злоумышленниками. ![](https://owasp.org/www-project-top-ten/assets/images/mapping.png) --- **А01:2021** Нарушение контроля доступа (англ. Broken Access Control). **А02:2021** Сбои криптографии (англ. Cryptographic Failures). **А03:2021** Внедрение кода (англ. Injection). **А04:2021** Небезопасный дизайн (англ. Insecure Design). **А05:2021** Неправильная конфигурация (англ. Security Misconfiguration). **А06:2021** Уязвимые и устаревшие компоненты  (англ. Vulnerable and Outdated Components). **А07:2021** Ошибки идентификации и аутентификации (англ. Identification and Authentication Failures). **А08:2021** Нарушения целостности программного обеспечения и данных (англ. Software and Data Integrity Failures). **А09:2021** Сбои регистрации и мониторинга безопасности (англ. Security Logging and Monitoring Failures). **А10:2021** Подделка запросов на стороне сервера (англ. Server-Side Request Forgery). --- ### Упражнения 1. Скачать и установить Burp Suite Community Edition 2. Зарегистрироваться на https://www.root-me.org/ 3. Зарегистрироваться на https://portswigger.net/web-security