--- title: OWASP TOP 10 Day 2 tags: OWASP TOP 10 slideOptions: transition: fade center: true parallaxBackgroundImage: 'https://hackmd.io/_uploads/SJhktzri2.png' --- # OWASP TOP 10 Day 2 ## Содержание: - Идентификация, аутентификация и авторизация - Идентификация - Аутентификация и ее факторы - Авторизация - Виды аутентификации - По паролю http auth - По паролю form auth - По сертификатам - По одноразовым паролям - По токенам - Форматы токенов - OAuth и OpenID Connect - A01:2021 - Broken Access Control - Типы контроля доступа - Список распространенных проблем - Снижение риска - Дополнительные материалы - A7:2021 - Identification and Authentication Failures - Результат аутентификации - Список распространенных проблем - Уязвимости в механизмах аутентификации - Снижение риска - Упражнения - A2: Cryptographic failures - Personal Identifiable Information - Чувствительные PII - Нечувствительные PII - Пароли и система учетных записей пользователей - Атаки - Соль - Угрозы - Примеры криптографически стойких медленных хеш-функций - Рекомендации по хеш функциям - Рекомендации по A02 - Дополнительные материалы - A6: 2021 - Vulnerable and Outdate Components - Типовые уязвимости и Известные уязвимости (CVE && CWE) - CVSS - Сканеры известных уязвимостей - Сканеры уязвимых компонентов - Инструменты анализа сторонних компонентов ПО (Software Composition Analysis) - Эксплоиты к известным уязвимостям - Рекомендации - Дополнительные материалы ## OWASP 2021 ![owasp](https://debricked.com/blog/wp-content/uploads/2021/09/owasp-top10-list-2021-debricked-100-1024x341.jpg) ## Идентификация, аутентификация и авторизация - Идентификация — процедура, в результате выполнения которой для субъекта идентификации выявляется его идентификатор, однозначно определяющий этого субъекта в информационной системе. - Аутентификация — процедура проверки подлинности, например проверка подлинности пользователя путем сравнения введенного им пароля с паролем, сохраненным в базе данных. - Авторизация — предоставление определенному лицу или группе лиц прав на выполнение определенных действий. ![image alt](https://vdoke.ru/wp-content/uploads/2022/07/scheme-3.jpg) ### Идентификация Процедура, в результате выполнения которой для субъекта идентификации выявляется его идентификатор, однозначно идентифицирующий этого субъекта в информационной системе. Для выполнения процедуры идентификации в информационной системе субъекту предварительно должен быть назначен соответствующий идентификатор (то есть проведена регистрация субъекта в информационной системе). ### Аутентификация и ее факторы Процедура проверки подлинности 1) **Знание**: информация, известная конкретному пользователю. 2) **Владение**: что-то, что мы имеем — устройство аутентификации 3) **Свойство**: обладание пользователем каким-то уникальным признаком ### Авторизация Предоставление определённому лицу или группе лиц прав на выполнение определённых действий; а также процесс проверки (подтверждения) данных прав при попытке выполнения этих действий ### Виды аутентификации #### Basic auth ![](https://assets-global.website-files.com/5ff66329429d880392f6cba2/61e7b83a8ab0c7a2e1545081_basic%20authentication%20work.jpg) #### Digest auth ![](https://www.researchgate.net/publication/236880553/figure/fig2/AS:393177447059457@1470752216333/HTTP-Digest-Access-Authentication.png) #### NTLM ![](https://csandker.io/public/img/2017-09-10-WindowsNTLMAuthenticationScheme/NTLM_process.png) #### Negotiate ![](https://learn.microsoft.com/ru-ru/troubleshoot/windows-server/windows-security/media/kerberos-authentication-troubleshooting-guidance/authentication-flow.png) #### Certificate ![](https://hackmd.io/_uploads/SJqat3Ahn.png) #### По одноразовым паролям Одноразовый пароль (англ. one time password, OTP) — это пароль, действительный только для одного сеанса аутентификации. Действие одноразового пароля также может быть ограничено определенным промежутком времени. Преимущество одноразового пароля по сравнению со статическим в том, что пароль невозможно использовать повторно. Таким образом, злоумышленник, перехвативший данные из успешной сессии аутентификации, не может использовать скопированный пароль для получения доступа к защищаемой информационной системе. * Аппаратные * Случайно генерируемые * Распечатка Одноразовый пароль генерируется обычно с использованием одного из трех алгоритмов: * HOTP — по событию * TOTP — по времени * OCRA — запрос/ответ #### По токенам ##### Форматы токенов 1. Simple Web Token (SWT) 2. JSON Web Token (JWT) 3. Security Assertion Markup Language (SAML) ## A01:2021 - Broken Access Control ### Типы контроля доступа * Вертикальный контроль доступа. (на функциональном уровне) ![](https://www.prplbx.com/wp-content/uploads/Figure4-Vertical-Access-Control-Illustration.png) system-admin: - /admin/create-user - /admin/delete-user manager: - /manager/create-company - /manager/assign-user-to-company user: - /user/create-comment - /user/send-message-to-manager * Горизонтальный контроль доступа. (на уровне объектов) ![](https://www.prplbx.com/wp-content/uploads/Figure5-Horizontal-Access-Control-Illustration.png) ДБО - /make_payment/card_id * Контекстно-зависимый контроль доступа. ![](https://www.prplbx.com/wp-content/uploads/Figure7-Illustration-of-Bypassing-Authorisation-Mechanism-and-Accessing-Internal-Resources.png) ### Broken Access Control Собирательная уязвимость, основными двумя частями которой являются: - Missing Functional Level Access Control (MFLAC) - Insecure Direct Ob ect Reference (IDOR) (Небезопасная прямая ссылка на объект) (Один пользователь получает доступ к файлам другого) #### IDOR Базовый пример: http://example.com/profile?userId=543 А почему бы не попробовать http://example.com/profile?userId=544 ? **Примеры** * bWAPP * IDOR: Change Secret * IDOR: Order Tickets #### MFLAC А доступны ли пользователю с определенной ролью функции, которые ему не должны быть доступны. **Примеры** * bWAPP * IDOR: Session Mgmt. - Administrative Portals * https://portswigger.net/web-security/access-control/lab-insecure-direct-object-references * https://portswigger.net/web-security/access-control/lab-user-id-controlled-by-request-parameter-with-unpredictable-user-ids * MFLAC https://portswigger.net/web-security/access-control/lab-user-role-controlled-by-request-parameter ### Список распространенных проблем - Нарушение принципа наименьших привилегий или запрета по умолчанию - Обход проверок контроля доступа путем модификации - Небезопасные прямые ссылки на объект - Доступ к API с отсутствующим контролем доступа для POST, PUT и DELETE - Повышение привилегий - Манипуляции с метаданными - Неправильная конфигурация CORS - Принудительный переход на аутентифицированные страницы в качестве неаутентифицированного пользователя или на привилегированные страницы в качестве обычного пользователя ### Снижение риска Есть вещи, которые вы можете сделать, чтобы снизить риск нарушения контроля доступа: - Используйте концепции с наименьшими привилегиями - применяйте роль, соответствующую задаче, и только в течение времени, необходимого для выполнения указанной задачи. (zerotrust) - Проведите аудит своих серверов и веб-сайтов — кто, что, когда и почему делает. - Отключайте точки доступа до тех пор, пока они не понадобятся, чтобы уменьшить окна доступа - Удалите ненужные службы с вашего сервера. - Проверьте приложения, доступные извне, и приложения, привязанные к вашей сети. - Ограничьте или значительно увеличьте **интервал между неудачными попытками входа**. Регистрируйте все неудачные попытки и уведомляйте администраторов при обнаружении атак на учетные данные, методом подбора или любых других атак. - Логгируйте неудачные попытки входа - Не доверяйте данным от пользователей - Используйте непредсказуемые идентификаторы объектов (uuid рекомендуется ver4(случайные идентификаторы)) - Реализуйте контроль доступа единообразно во всем веб-приложении ### Дополнительные материалы - Серия регулярного подкаста с обсуждением основных атак на аутентификацию и угон аккаунтов: [https://t.me/cybersec_in_russian/5](https://t.me/cybersec_in_russian/5) - [OWASP памятка по реализации механизмов аутентификации](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Authentication_Cheat_Sheet.md) - [Device Cookie](https://owasp.org/www-community/Slow_Down_Online_Guessing_Attacks_with_Device_Cookies) - [Snyk learn](https://learn.snyk.io/lesson/broken-access-control/) ### Упражнения (дополнительные) Любые из https://portswigger.net/web-security/access-control ## A07:2021 - Identification and Authentication Failures ### Результат аутентификации В результате аутентификации веб-приложение может выдавать пользователю: - Случайные сессионные идентификаторы; При самостоятельной реализации: - нужна достаточная энтропия (желательно > 256 бит); - использовать надежный генератор псевдослучайных чисел - Подписанные сессионные данные (например, JWT). **использовать надежный секрет**. ### JWT problems [https://portswigger.net/web-security/jwt](https://portswigger.net/web-security/jwt). ### Список распространенных проблем - Допускает грубую силу или другие автоматические атаки. - Разрешает использование стандартных, слабых или хорошо известных паролей - Используются слабые или неэффективные процессы восстановления учетных данных и забытых паролей - Используются хранилища данных с открытым текстом, зашифрованными или слабо хешированными паролями - Отсутствует или неэффективна многофакторная аутентификация - Раскрывает идентификатор сеанса в URL - Повторное использование идентификатора сеанса после успешного входа в систему - Некорректное аннулирование идентификаторов сеансов ### Уязвимости в механизмах аутентификации - Уязвимости при входе в на основе пароля - Возможные brute-force атаки - Уязвимая защита от brute-force атак - Уязвимости при многофакторной аутентификации - Неправильная реализация - Отсутствует проверка пользователя на разных этапах - Отсуствует проверка перебора 2FA - Уязвимости в других механизмах аутентификации - Уязвимый компонент "сброс пароля" - Уязвимый механизм поддержания сессии "запомни меня" - Уязвимая смена пароля ### Снижение риска - Если возможно, примените многофакторную аутентификацию (MFA) ко всем точкам доступа. - Избавьтесь от учетных записей, которые вам не нужны или пользователю которых больше не требуется доступ (в том числе от стандартных учетных записей, особенно для администраторов). - Установите **длину, сложность и периодичность смены паролей**. - Реализуйте **проверку надежности паролей**, например, проверяя вновь создаваемые или изменяемые пароли по списку “10000 наихудших паролей”. - Обеспечьте защиту регистрации, восстановления учетных данных и API от **атак методом энумерации**, используя во всех ответах одинаковые сообщения. - Ограничьте или все чаще задерживайте неудачные попытки входа в систему - Используйте серверные, надежные, встроенные менеджеры сессий, генерирующие после входа в систему новые, **случайные идентификаторы с высокой степенью энтропии**. Идентификаторы сессий не должны присутствовать в URL, а должны безопасно храниться и аннулироваться после выхода из системы, простоя или наступления абсолютного тайм-аута. - Используйте соль и перец при работе с паролями (Описание далее) - Добавляйте временную задержку, чтобы не было разницы в сравнении логина вместе с паролем и отдельно логина ### Упражнения #### Упражнение 1 Некорректная реализация блокировки по IP от перебора грубой силой - [https://portswigger.net/web-security/authentication/password-based/lab-broken-bruteforce-protection-ip-block](https://portswigger.net/web-security/authentication/password-based/lab-broken-bruteforce-protection-ip-block) (Сложность: низкая) #### Упражнение 2 Простой обход 2FA - [https://portswigger.net/web-security/authentication/multi-factor/lab-2fa-simple-bypass](https://portswigger.net/web-security/authentication/multi-factor/lab-2fa-simple-bypass) (Сложность: низкая) #### Упражнение 3 Атака грубой силы на механизм “запомнить меня” - [https://portswigger.net/web-security/authentication/other-mechanisms/lab-brute-forcing-a-stay-logged-in-cookie](https://portswigger.net/web-security/authentication/other-mechanisms/lab-brute-forcing-a-stay-logged-in-cookie) (Сложность: средняя) ### Additional links https://owasp.org/Top10/A07_2021-Identification_and_Authentication_Failures/ ## A02:2021 : Cryptographic failures ### Personal Identifiable Information Информация, которая, будучи использована отдельно или вместе с другими соответствующими данными, может идентифицировать человека #### Чувствительные PII - Полное ФИО - СНИЛС - Водительские права - Почтовый адрес (не электронный) - Банковские данные - Паспортная информация - Финансовая информация - Медицинские данные #### Нечувствительные PII - Почтовый индекс - Раса - Пол - Дата и место рождения - Регион ### Пароли и система учетных записей пользователей Общая схема регистрации пользователя: 1. Создание учетной записи 2. Вычисление хеш-суммы 3. При попытке входа пользователя хеш сумма от введеннго пароля сравнивается с сохраненной хеш суммой 4. Если хеши совпадают - пользователю предоставляется доступ ### Атаки - Метод полного перебора (брутфорс) - Атаки по маске - Словарные атаки - Гибридные атаки - Радужные таблицы ### Соль Соль (также модификатор входа хэш-функции) — строка данных, которая передаётся хеш-функции вместе с входным массивом данных (прообразом) для вычисления хэша (образа). ``` hash("hello") = 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 hash("hello" + "QxLUF1bgIAdeQX") = 9e209040c863f84a31e719795b2577523954739fe5ed3b58a75cff2127075ed1 hash("hello" + "bv5PehSMfV11Cd") = d1d3ec2e6f20fd420d50e2642992841d8338a314b8ea157c9e18477aaef226ab hash("hello" + "YYLmfY6IehjZMQ") = a49670c3c18b9e079b9cfaf51634f563dc8ae3070db2c4a8544305df1b60f007 ``` ### Перец Набор случайных символов, который добавляется к паролю и соли перед его хешированием. Перец может **храниться** в конфигурационных файлах приложения или может быть зашит в код. ```php $pepper = "fOifew8Hufehwifhea78feg29HUIFEhfewjfe*FHehaoefahwojfw"; function registerUser($username,$password) { $salt = openssl_random_pseudo_bytes(40); $hash = hash_pbkdf2 ( 'sha256' , $password.$pepper , $salt , 10000 ); $sql = "INSERT INTO users VALUES ('".$username,."','".$salt."','".$hash."')"; $conn->execute($sql); } ``` #### Угрозы - Повторное использование соли - Короткая соль - Использование данных пользователя в качестве соли |Language|Unsafe Functions|Cryptographically Secure Functions| |---|---|---| |C|`random()`, `rand()`|[getrandom(2)](http://man7.org/linux/man-pages/man2/getrandom.2.html)| |Java|`java.util.Random()`|[java.security.SecureRandom](https://docs.oracle.com/javase/8/docs/api/java/security/SecureRandom.html)| |PHP|`rand()`, `mt_rand()`, `array_rand()`, `uniqid()`|[random_bytes()](https://www.php.net/manual/en/function.random-bytes.php), [random_int()](https://www.php.net/manual/en/function.random-int.php) in PHP 7 or [openssl_random_pseudo_bytes()](https://www.php.net/manual/en/function.openssl-random-pseudo-bytes.php) in PHP 5| |.NET/C#|`Random()`|[RandomNumberGenerator](https://learn.microsoft.com/en-us/dotnet/api/system.security.cryptography.randomnumbergenerator?view=net-6.0)| |Objective-C|`arc4random()` (Uses RC4 Cipher)|[SecRandomCopyBytes](https://developer.apple.com/documentation/security/1399291-secrandomcopybytes?language=objc)| |Python|`random()`|[secrets()](https://docs.python.org/3/library/secrets.html#module-secrets)| |Ruby|`Random`|[SecureRandom](https://ruby-doc.org/stdlib-2.5.1/libdoc/securerandom/rdoc/SecureRandom.html)| |Go|`rand` using `math/rand` package|[crypto.rand](https://golang.org/pkg/crypto/rand/) package| |Rust|`rand::prng::XorShiftRng`|[rand::prng::chacha::ChaChaRng](https://docs.rs/rand/0.5.0/rand/prng/chacha/struct.ChaChaRng.html) and the rest of the Rust library [CSPRNGs.](https://docs.rs/rand/0.5.0/rand/prng/index.html#cryptographically-secure-pseudo-random-number-generators-csprngs)| |Node.js|`Math.random()`|[crypto.randomBytes](https://nodejs.org/api/crypto.html#cryptorandombytessize-callback), [crypto.randomInt](https://nodejs.org/api/crypto.html#cryptorandomintmin-max-callback), [crypto.randomUUID](https://nodejs.org/api/crypto.html#cryptorandomuuidoptions)| ### Примеры криптографически стойких медленных хеш-функций - Argon2 - bcrypt - scrypt - yescrypt - PBKDF2 ### Рекомендации по хеш функциям - стараться НЕ использовать быстрые алгоритмы хэширования (MD5, SHA1, SHA256, SHA512, RipeMD, WHIRLPOOL, SHA3, etc.) - если по каким-то причинам все же вынуждены, то используем не ниже SHA-256 и солим - задействовать медленные криптостойкие алгоритмы (с использованием стречинга (stretching) - замедления) - генерировать случайную соль ### Рекомендации по A02 - Классифицировать данные, обрабатываемые, хранимые или передаваемые приложением. - Не храните конфиденциальные данные без необходимости. - Обязательно шифруйте все конфиденциальные данные в состоянии покоя. - Убедитесь в наличии современных и надежных стандартных алгоритмов, протоколов и ключей; используйте надлежащее управление ключами. - Шифруйте все передаваемые данные с помощью безопасных протоколов, таких как TLSv1.3 - Отключите кэширование для ответов, содержащих конфиденциальные данные. - Применяйте необходимые средства контроля безопасности в соответствии с классификацией данных. - Не используйте для передачи конфиденциальных данных устаревшие протоколы, такие как FTP и SMTP. - Храните пароли с использованием медленных криптографически стойких функций. - Векторы инициализации должны быть выбраны с помощью криптографически стойкого генератор псевдослучайных чисел - Ключи должны генерироваться криптографически случайным образом и храниться в памяти в виде массивов байтов. - Убедитесь, что криптографическая случайность используется там, где это необходимо, и что она не была заложена предсказуемым образом или с низкой энтропией. - Избегайте устаревших криптографических функций и старых стандартов PKCS, таких как MD5, SHA1, PKCS v1.5. - Самостоятельно проверять эффективность конфигурации и настроек. ![](https://hackmd.io/_uploads/HylZWze6n.png) ### Дополнительные материалы https://cheatsheetseries.owasp.org/cheatsheets/Cryptographic_Storage_Cheat_Sheet.html ## A06:2021 - Vulnerable and Outdate Components ### Типовые уязвимости и Известные уязвимости (CVE && CWE) Типовые уязвимости - [https://cwe.mitre.org/](https://cwe.mitre.org/) Известные уязвимости - [https://cve.mitre.org/](https://cve.mitre.org/) ### CVSS CVSS(Common Vulnerability Scoring System) — открытый стандарт для оценки степени опасности уязвимостей. - Базовые метрики. - Метрики эксплуатации - Метрики воздействия - Временные метрики - Метрики окружения ### Сканеры известных уязвимостей Выявить наличие известных уязвимостей ПО проще всего при помощи инструментов анализа компонентов, что позволяет получать информацию о версиях компонентов и их наличии в проекте. Инструменты анализа компонентов могут использовать как полный доступ к коду проекта так и пытаться получать информации из банеров информационных систем, таких как веб-сайты, прокси серверы, содержимое отдельных страниц и пр. - Nmap vulners - Nessus - Acunetix - Burp Pro ### Сканеры уязвимых компонентов #### Инструменты анализа сторонних компонентов ПО (Software Composition Analysis) Программные решения типа Software Composition Analysis (SCA), предназначены для автоматизированного обнаружения рисков и устранения уязвимостей в коде, контроля использования внешних (готовых) библиотек. Анализ состава программного обеспечения (SCA) является инструментом управления компонентами с открытым исходным кодом. Он генерирует отчет, в котором перечислены все компоненты с открытым исходным кодом в данном продукте - включая прямые и косвенные зависимости. Используя SCA, команда разработчиков может быстро отслеживать и анализировать любой компонент с открытым исходным кодом, включенный в проект. Задачи: - Инвентаризация всех открытых исходных кодов (OSS) и запатентованных компонентов, используемых на предприятии. - Определение компонентов с уязвимостями безопасности, известными как Common Vulnerabilities and Exposures (CVE) (Общие уязвимости и воздействия) - Идентифицировать компоненты с лицензиями, не соответствующими предполагаемому использованию компанией программного обеспечения. - Обнаружение устаревших компонентов, которые больше не поддерживаются, чтобы их можно было заменить текущими версиями. - Эффективное и быстрое распространение информации о выявленных рисках среди членов команды, которые могут принять меры по их устранению. - Отслеживать смягчение выявленных рисков, связанных с безопасностью и лицензированием. - Обеспечить механизм для непрерывного выполнения SCA Плюсы: - Находит уязвимости в опенсорсе без False-positive - Доступ к исходникам ему не нужен - Достаточно легко исправимые уязвимости - Удобно интегрируется в SDLc - Не важно какого объема ваш проект Известные инструменты: [https://owasp.org/www-community/Component_Analysis](https://owasp.org/www-community/Component_Analysis) ### Эксплоиты к известным уязвимостям - [SecurityFocus](https://www.securityfocus.com) - [ExploitDB](https://www.exploit-db.com/) - [VulDB](https://vuldb.com) - [MITRE CVE](https://cve.mitre.org) Скорее всего, вы уязвимы: - Если вы не знаете версии всех используемых вами компонентов (как на стороне клиента, так и на стороне сервера). Сюда входят компоненты, которые вы используете напрямую, а также вложенные зависимости. - Если программное обеспечение уязвимо, не поддерживается или устарело. Сюда входят ОС, сервер веб-приложений, система управления базами данных (СУБД), приложения, API и все компоненты, среды выполнения и библиотеки. - Если вы не проводите регулярное сканирование на наличие уязвимостей и не подписываетесь на бюллетени безопасности, касающиеся используемых вами компонентов. - Если вы не исправляете и не обновляете базовую платформу, фреймворки и зависимости своевременно и с учетом рисков. Обычно это происходит в средах, где исправление является ежемесячной или ежеквартальной задачей в рамках контроля изменений, в результате чего организации могут несколько дней или месяцев не подвергаться ненужному воздействию исправленных уязвимостей. - Если разработчики программного обеспечения не проверяют совместимость обновленных, модернизированных или исправленных библиотек. - Если вы не обеспечиваете безопасность конфигураций компонентов ### Рекомендации - Удаление неиспользуемых зависимостей, ненужных функций, компонентов, файлов и документации. - Постоянная инвентаризация версий компонентов как клиентской, так и серверной части (например, фреймворков, библиотек) и их зависимостей (OWASP Dependency Check) - Постоянный мониторинг CVE и NVD, на предмет наличия уязвимостей в компонентах. - Получайте компоненты только из официальных источников по защищенным ссылкам. - Отслеживайте наличие библиотек и компонентов, которые не поддерживаются или не создают исправлений безопасности для старых версий. ## Дополнительные материалы - [Сравнение SCA Nexus-IQ, Dependensy-Track, Dependency-Check](https://habr.com/ru/company/swordfish_security/blog/516660/) - [Awesome DevSecOps RU](https://github.com/devops-ru/awesome-devsecops_ru)