Protecting public clients using an authorization algorithm

The paper focuses on authorization in public clients and provides a secure authorization model as an alternative to costly Microsoft Duende BFF solution. After providing a brief overview of confidential and public clients in terms of authorization, we have analyzed problems and potential attack vect...

Повний опис

Збережено в:
Бібліографічні деталі
Дата:2023
Автори: Bodak, B.V., Doroshenko, A.Yu.
Формат: Стаття
Мова:Ukrainian
Опубліковано: PROBLEMS IN PROGRAMMING 2023
Теми:
Онлайн доступ:https://pp.isofts.kiev.ua/index.php/ojs1/article/view/542
Теги: Додати тег
Немає тегів, Будьте першим, хто поставить тег для цього запису!
Назва журналу:Problems in programming
Завантажити файл: Pdf

Репозитарії

Problems in programming
id pp_isofts_kiev_ua-article-542
record_format ojs
resource_txt_mv ppisoftskievua/00/e27b49c310afcbc58bfd7779c0d3de00.pdf
spelling pp_isofts_kiev_ua-article-5422023-06-25T08:04:11Z Protecting public clients using an authorization algorithm Захист відкритих клієнтів за допомогою одного алгоритму авторизації Bodak, B.V. Doroshenko, A.Yu. authorization; authentication; PKCE; Proof Key for Code Exchange; Identity Server; public application; OAUTH; XSS; information security UDC 681.3 авторизація, аутентифікація відкритий клієнт, захист інформації УДК 681.3 The paper focuses on authorization in public clients and provides a secure authorization model as an alternative to costly Microsoft Duende BFF solution. After providing a brief overview of confidential and public clients in terms of authorization, we have analyzed problems and potential attack vectors associated with the authorization process in public clients due to their inability to hold credentials securely. Confidential clients are implemented on secure servers or able to facilitate secure authentication by other means, while public clients lack this security. Our research discovered algorithms, models, and methods for secure authorization in public clients. As a part of our model, we have implemented high entropy Proof Key for Code Exchange generator in C# .NET 6.0. In addition, we have provided a solution to a problem of storing sensitive information in public clients using the Backend for Frontend concept. This concept leverages a reverse proxy pattern where a backend application acts as a proxy and handles all client requests. Having a proxy backend application significantly tightens security model for public clients, while restricting possible attack vectors. The authorization model being researched was based on Proof Key for Code Exchange and Backend for Frontend approach. During the testing phase of our research, we have confirmed that the model was not vulnerable to Cross-Site-Scripting and Auth Code Interception attacks. A sequence diagram outlining main actors and interactions among them in context of authorization has been designed. The diagram stands as the visual representation of the model that uses proposed methods and algorithms. As a result, we have managed to build an alternative to secure authorization solutions for public clients that do not rely on the client secret. We have summarized our key findings in a Blazor Web Assembly application, which is classified as public and uses the described authentication model.Prombles in programming 2022; 3-4: 409-416  Pозглянуто конфіденційні та відкриті клієнти у контексті авторизації. Проведено аналіз проблем, пов’язаних з авторизацією відкритих клієнтів, котрі не можуть забезпечити конфіденційність секретних налаштувань. Досліджено існуючі вектори атак, недоліки стандарту OAUTH, потенційно небезпечні практики. Виявлено алгоритми, моделі та методи для захищеної авторизації відритих додатків. Створено модель алгоритму авторизації на основі Proof Key for Code Exchange та методу Backend For Frontend, яка не вразлива до атак Cross-Site-Scripting та Auth Code Interception. У результаті розроблено додаток, що являє собою відкритий клієнт на технології Blazor Web Assembly, використовуючи створену модель авторизації.Prombles in programming 2022; 3-4: 409-416 PROBLEMS IN PROGRAMMING ПРОБЛЕМЫ ПРОГРАММИРОВАНИЯ ПРОБЛЕМИ ПРОГРАМУВАННЯ 2023-01-23 Article Article application/pdf https://pp.isofts.kiev.ua/index.php/ojs1/article/view/542 10.15407/pp2022.03-04.409 PROBLEMS IN PROGRAMMING; No 3-4 (2022); 409-416 ПРОБЛЕМЫ ПРОГРАММИРОВАНИЯ; No 3-4 (2022); 409-416 ПРОБЛЕМИ ПРОГРАМУВАННЯ; No 3-4 (2022); 409-416 1727-4907 10.15407/pp2022.03-04 uk https://pp.isofts.kiev.ua/index.php/ojs1/article/view/542/595 Copyright (c) 2023 PROBLEMS IN PROGRAMMING
institution Problems in programming
baseUrl_str https://pp.isofts.kiev.ua/index.php/ojs1/oai
datestamp_date 2023-06-25T08:04:11Z
collection OJS
language Ukrainian
topic authorization
authentication
PKCE
Proof Key for Code Exchange
Identity Server
public application
OAUTH
XSS
information security
UDC 681.3
spellingShingle authorization
authentication
PKCE
Proof Key for Code Exchange
Identity Server
public application
OAUTH
XSS
information security
UDC 681.3
Bodak, B.V.
Doroshenko, A.Yu.
Protecting public clients using an authorization algorithm
topic_facet authorization
authentication
PKCE
Proof Key for Code Exchange
Identity Server
public application
OAUTH
XSS
information security
UDC 681.3
авторизація
аутентифікація відкритий клієнт
захист інформації
УДК 681.3
format Article
author Bodak, B.V.
Doroshenko, A.Yu.
author_facet Bodak, B.V.
Doroshenko, A.Yu.
author_sort Bodak, B.V.
title Protecting public clients using an authorization algorithm
title_short Protecting public clients using an authorization algorithm
title_full Protecting public clients using an authorization algorithm
title_fullStr Protecting public clients using an authorization algorithm
title_full_unstemmed Protecting public clients using an authorization algorithm
title_sort protecting public clients using an authorization algorithm
title_alt Захист відкритих клієнтів за допомогою одного алгоритму авторизації
description The paper focuses on authorization in public clients and provides a secure authorization model as an alternative to costly Microsoft Duende BFF solution. After providing a brief overview of confidential and public clients in terms of authorization, we have analyzed problems and potential attack vectors associated with the authorization process in public clients due to their inability to hold credentials securely. Confidential clients are implemented on secure servers or able to facilitate secure authentication by other means, while public clients lack this security. Our research discovered algorithms, models, and methods for secure authorization in public clients. As a part of our model, we have implemented high entropy Proof Key for Code Exchange generator in C# .NET 6.0. In addition, we have provided a solution to a problem of storing sensitive information in public clients using the Backend for Frontend concept. This concept leverages a reverse proxy pattern where a backend application acts as a proxy and handles all client requests. Having a proxy backend application significantly tightens security model for public clients, while restricting possible attack vectors. The authorization model being researched was based on Proof Key for Code Exchange and Backend for Frontend approach. During the testing phase of our research, we have confirmed that the model was not vulnerable to Cross-Site-Scripting and Auth Code Interception attacks. A sequence diagram outlining main actors and interactions among them in context of authorization has been designed. The diagram stands as the visual representation of the model that uses proposed methods and algorithms. As a result, we have managed to build an alternative to secure authorization solutions for public clients that do not rely on the client secret. We have summarized our key findings in a Blazor Web Assembly application, which is classified as public and uses the described authentication model.Prombles in programming 2022; 3-4: 409-416 
publisher PROBLEMS IN PROGRAMMING
publishDate 2023
url https://pp.isofts.kiev.ua/index.php/ojs1/article/view/542
work_keys_str_mv AT bodakbv protectingpublicclientsusinganauthorizationalgorithm
AT doroshenkoayu protectingpublicclientsusinganauthorizationalgorithm
AT bodakbv zahistvídkritihklíêntívzadopomogoûodnogoalgoritmuavtorizacíí
AT doroshenkoayu zahistvídkritihklíêntívzadopomogoûodnogoalgoritmuavtorizacíí
first_indexed 2025-07-17T09:51:54Z
last_indexed 2025-07-17T09:51:54Z
_version_ 1850410066777210880
fulltext 409 Захист інформації УДК 681.3 https://doi.org/10.15407/pp2022.03-04.409 ЗАХИСТ ВІДКРИТИХ КЛІЄНТІВ ЗА ДОПОМОГОЮ ОДНОГО АЛГОРИТМУ АВТОРИЗАЦІЇ Богдан Бодак, Анатолій Дорошенко Pозглянуто конфіденційні та відкриті клієнти у контексті авторизації. Проведено аналіз проблем, пов’язаних з авторизацією відкритих клієнтів, котрі не можуть забезпечити конфіденційність секретних налаштувань. Досліджено існуючі вектори атак, недоліки стандарту OAUTH, потенційно небезпечні практики. Виявлено алгоритми, моделі та методи для захищеної авторизації відритих додатків. Ство- рено модель алгоритму авторизації на основі Proof Key for Code Exchange та методу Backend For Frontend, яка не вразлива до атак Cross-Site-Scripting та Auth Code Interception. У результаті розроблено додаток, що являє собою відкритий клієнт на технології Blazor Web Assembly, використовуючи створену модель авторизації. Ключові слова: авторизація, аутентифікація, PKCE, Proof Key for Code Exchange, Identity Server, відкритий клієнт, OAUTH, XSS, захист інформації. The paper focuses on authorization in public clients and provides a secure authorization model as an alternative to costly Microsoft Duende BFF solution. After providing a brief overview of confidential and public clients in terms of authorization, we have analyzed problems and potential attack vectors associated with the authorization process in public clients due to their inability to hold credentials securely. Confidential clients are implemented on secure servers or able to facilitate secure authentication by other means, while public clients lack this security. Our research discovered algorithms, models, and methods for secure authorization in public clients. As a part of our model, we have implemented high entropy Proof Key for Code Exchange generator in C# .NET 6.0. In addition, we have provided a solution to a problem of storing sensitive information in public clients using the Backend for Frontend concept. This concept leverages a reverse proxy pattern where a backend application acts as a proxy and handles all client requests. Having a proxy backend application significantly tightens security model for public clients, while restricting possible attack vectors. The authorization model being researched was based on Proof Key for Code Exchange and Backend for Frontend approach. During the testing phase of our research, we have confirmed that the model was not vulnerable to Cross-Site-Scripting and Auth Code Interception attacks. A sequence diagram outlining main actors and interactions among them in context of authorization has been designed. The diagram stands as the visual representation of the model that uses proposed methods and algorithms. As a result, we have managed to build an alternative to secure authorization solutions for public clients that do not rely on the client secret. We have summarized our key findings in a Blazor Web Assembly application, which is classified as public and uses the described authentication model. Keywords: authorization, authentication, PKCE, Proof Key for Code Exchange, Identity Server, public application, OAUTH, XSS, information security. Конфіденційні та відкриті клієнти Згідно зі специфікацією OAUTH 2.0 [1], додаток може бути конфіденційним або відкритим. Конфіденційні додатки зазвичай обумовлюють безпеку облікових даних тим, що такі додатки реалізовані на захищеному сервері або можуть виконувати безпечну аутентифікацію іншими способами. З іншого боку, відкриті клієнти не можуть забезпечувати конфіденційність облікових даних, оскільки такі додатки завантажуються та виконуються безпосе- редньо у небезпечному середовищі: наприклад, односторінкові (Single Page) або рідні (Native) додатки. У контексті авторизації OAUTH 2.0 прийнято використовувати секрет клієнта для моніторингу та верифікації запитів на авто- ризацію. Секрет клієнта – це унікальний ідентифікатор, що генерується для додатка при його реєстрації. У конфіденційних клієнтах секрет зберігається у коді або у файлах конфігурації, проте у відритих додатках неможливо безпечно зберігати секрет клієнта. Для прикладу, у мобільних додатках ми не можемо забезпечити кон- фіденційність секрету тому що при декомпіляції зловмисником його значення стане доступним. Мобільні додатки, які використовують секрет, вразливі і до атаки Auth Code Interception Attack [2], приклад якої наведено на Рис. 1. Захист інформації Рис. 1. Атака Auth Code Interception Зловмисник реєструє додаткову адресу через додаток Malicious App для захоплення запитів під час переадресації та отримує можливість перехопити код авторизації від серверу. Для односторінкових додатків також неможливо використовувати секрет клієнта, оскільки код та файли конфігурації цілком доступні у браузері. Проблема авторизації відкритих клієнтів Із моменту публікації OAUTH 2.0 2013 року, специфікація набула значної популярності серед розробників, у тому числі і таких гігантів індустрії як Facebook, Twitter та Google, ставши по суті стандартом авторизації [3]. Беручи до уваги те, що стандарт був запропонований майже десятиліття тому, а технології постійно еволюціонують, виникає потреба у нових моделях та методах захисту від потенційних атак. Формальний аналіз популярних веб-сайтів та соціальних мереж, котрі використовують OAUTH 2.0 для авторизації, виявив декілька десятків невідомих до цього атак [3]. Серед потенційних проблем, авторами були виявлені Cross-Site Request Forgery (CSRF) та Open Redirectors, але вони не заглиблюються у методи їх вирішення. Емпіричний аналіз [4], використовуючи вектори атак [3] на прикладі 95 веб-сервісів та мобільних додатків, демонструє успішне перехоплення SSO сесії та пов’язану з цим величезну небезпеку. В статті [4] наводиться приклад перехоплення cookie аккаунту Facebook, який надалі використовується для авторизації у SSO-провайдерів за протоколом OAUTH. Запропонований авторами стандарт Single Sign-Off для єдиної «деавторизації» захопленої сесії вирішує наслідки проблеми, але не саму проблему перехоплення токену. У статті про кращі практики безпеки OAUTH 2.0 приведено 9 основних атак та актуальні методи боротьби з ними [5]. Стандарт рекомендує використовувати PKCE [6] для відкритих та конфіденційних додатків [5], як додатковий рівень захищеності від потенційних атак, проте не надає практичних рекомендацій стосовно імплементації алгоритму, делегуючи відповідальність розробникам. Виходячи з наведених досліджень [3, 4] та практик [5, 7], перед розробниками постає суттєва проблема впровадження безпечної авторизації на базі PKCE, яка була би не вразливою до описаних атак: CSRF, Open Redirection, Auth Code Interception та інших. Алгоритм Proof Key For Code Exchange (PKCE) Враховуючи проблеми описані вище, для відкритих додатків специфікація OAUTH 2.0 пропонує використовувати алгоритм PKCE [6], який по суті являє собою варіант доказу володіння (proof of possession), замість секрету клієнта. Незважаючи на те, що запропонована модель побудована навколо відкритого клієнта, алгоритм доцільно застосовувати і для конфіденційних додатків. Базова реалізація алгоритму передбачає, що клієнт надає серверу авторизації доказ того, що код авторизації належить клієнтові, для того, аби сервер видав клієнтові код доступу. Алгоритм PKCE вносить додаткові параметри до звичайного процесу авторизації, зображеного на Рисунку 1: код-підтвердження (code_verifier), код-виклик (code_challenge) та тип коду-виклика (code_challenge_method). Код підтвердження - це довільний рядок, який згенеровано клієнтом відповідно до специфікації OAUTH 2.0 та використовується ним як своєрідний тип секрету. Код-виклик – це перетворений клієнтом код підтвердження за правилами специфікації, а тип коду-виклика – не обов’язковий параметр, що приймає значення “S256” (алгоритм SHA256) або “plain” (без перетворення) та вказує на тип алгоритму перетворення коду-виклику. Специфікація не рекомендує використовувати тип коду-виклика “plain”, оскільки Рис. 1. Атака Auth Code Interception © Б.В. Бодак, А.Ю. Дорошенко, 2022 ISSN 1727-4907. Проблеми програмування. 2022. № 3-4. Спеціальний випуск 410 Захист інформації Зловмисник реєструє додаткову адресу через додаток Malicious App для захоплення запитів під час переадресації та отримує можливість перехопити код авторизації від серверу. Для односторінкових додатків та- кож неможливо використовувати секрет клієнта, оскільки код та файли конфігурації цілком доступні у браузері. Проблема авторизації відкритих клієнтів Із моменту публікації OAUTH 2.0 2013 року, специфікація набула значної популярності серед роз- робників, у тому числі і таких гігантів індустрії як Facebook, Twitter та Google, ставши по суті стандартом авторизації [3]. Беручи до уваги те, що стандарт був запропонований майже десятиліття тому, а технології постійно еволюціонують, виникає потреба у нових моделях та методах захисту від потенційних атак. Фор- мальний аналіз популярних веб-сайтів та соціальних мереж, котрі використовують OAUTH 2.0 для авто- ризації, виявив декілька десятків невідомих до цього атак [3]. Серед потенційних проблем, авторами були виявлені Cross-Site Request Forgery (CSRF) та Open Redirectors, але вони не заглиблюються у методи їх ви- рішення. Емпіричний аналіз [4], використовуючи вектори атак [3] на прикладі 95 веб-сервісів та мобільних додатків, демонструє успішне перехоплення SSO сесії та пов’язану з цим величезну небезпеку. В статті [4] наводиться приклад перехоплення cookie аккаунту Facebook, який надалі використовується для авторизації у SSO-провайдерів за протоколом OAUTH. Запропонований авторами стандарт Single Sign-Off для єдиної «деавторизації» захопленої сесії вирішує наслідки проблеми, але не саму проблему перехоплення токену. У статті про кращі практики безпеки OAUTH 2.0 приведено 9 основних атак та актуальні методи бо- ротьби з ними [5]. Стандарт рекомендує використовувати PKCE [6] для відкритих та конфіденційних додатків [5], як додатковий рівень захищеності від потенційних атак, проте не надає практичних рекомендацій стосовно імплементації алгоритму, делегуючи відповідальність розробникам. Виходячи з наведених досліджень [3, 4] та практик [5, 7], перед розробниками постає суттєва проблема впровадження безпечної авторизації на базі PKCE, яка була би не вразливою до описаних атак: CSRF, Open Redirection, Auth Code Interception та інших. Алгоритм Proof Key For Code Exchange (PKCE) Враховуючи проблеми описані вище, для відкритих додатків специфікація OAUTH 2.0 пропонує вико- ристовувати алгоритм PKCE [6], який по суті являє собою варіант доказу володіння (proof of possession), замість секрету клієнта. Незважаючи на те, що запропонована модель побудована навколо відкритого клієнта, алгоритм доцільно застосовувати і для конфіденційних додатків. Базова реалізація алгоритму передбачає, що клієнт надає серверу авторизації доказ того, що код авторизації належить клієнтові, для того, аби сервер видав клієнтові код до- ступу. Алгоритм PKCE вносить додаткові параметри до звичайного процесу авторизації, зображеного на Рисунку 1: код-підтвердження (code_verifier), код-виклик (code_challenge) та тип коду-виклика (code_challenge_method). Код підтвердження - це довільний рядок, який згенеровано клієнтом відповідно до специфікації OAUTH 2.0 та використовується ним як своєрідний тип секрету. Код-виклик – це перетворений клієнтом код підтвердження за правилами специфікації, а тип коду-виклика – не обов’язковий параметр, що приймає значення “S256” (алгоритм SHA256) або “plain” (без перетворення) та вказує на тип алгоритму перетворення коду-виклику. Специфікація не рекомендує використовувати тип коду-виклика “plain”, оскільки потенційно це може призвести до перехоплення коду-підтвердження та використання його як коду-виклика у чистому вигляді, що призводить до повної втрати переваг алгоритму PKCE та потенційної проблеми з безпекою. У розділі «Генерація кодів для алгоритму PKCE» надано деталі та приклад генерації кодів виклику і підтвердження за специфікацією OAUTH 2.0 з використанням C# .NET 6.0. На Рис. 2 зображено загальну модель авторизації через алгоритм PKCE. Захист інформації [Введите текст] потенційно це може призвести до перехоплення коду-підтвердження та використання його як коду-виклика у чистому вигляді, що призводить до повної втрати переваг алгоритму PKCE та потенційної проблеми з безпекою. У розділі «Генерація кодів для алгоритму PKCE» надано деталі та приклад генерації кодів виклику і підтвердження за специфікацією OAUTH 2.0 з використанням C# .NET 6.0. На Рис. 2 зображено загальну модель авторизації через алгоритм PKCE. Рис. 2. Модель авторизації з використанням PKCE Базову модель авторизації можна описати наступними кроками: a) Клієнт генерує код-виклик та код підтвердження, відправляє запит на авторизацію, котрий включає код-виклик та тип коду-виклика. b) Сервер авторизації зберігає код-виклика з типом та перенаправляє клієнту код авторизації. c) Клієнт відправляє запит на токен доступу, включаючи код підтвердження. d) Сервер перевіряє код підтвердження на основі коду-виклику та повертає токен доступу у випадку успішної верифікації. Алгоритм успішно працює тому, що навіть у разі перехоплення коду авторизації, неможливо буде обміняти цей код на токен доступу без коду-виклику, нівелюючи атаку Auth Code Interception Attack, зображену на Рисунку 1. Пара кодів має бути унікальною для кожного нового запиту на авторизацію, а також клієнт повинен використовувати захищений протокол передачі даних (TLS). Генерація кодів для алгоритму PKCE Для генерації коду підтвердження (code_verifier) та коду-виклика (code_challenge) було створено окремий клас PkceGenerator із відповідними методами GenerateCodeVerifier та GenerateCodeChallenge. При створенні об’єкта класу у конструктор передається параметр, що визначає розмір згенерованого коду підтвердження, водночас мінімальний розмір за специфікацією 43 символи, а максимальний – 128. За замовчуванням аргументу присвоюється максимальне значення – 128 символів. При написанні класу використовувався C# .NET 6.0 та бібліотеки System і System.Security.Cryptography. namespace DemoApp.Authentication { /// <summary> /// Provides a randomly generating PKCE code verifier and it's corresponding code challenge. /// </summary> internal class PkceGenerator { /// <summary> /// The randomly generated PKCE code verifier. /// </summary> public string CodeVerifier; Рис. 2. Модель авторизації з використанням PKCE 411 Захист інформації Базову модель авторизації можна описати наступними кроками: Клієнт генерує код-виклик та код підтвердження, відправляє запит на авторизацію, котрий включає код- виклик та тип коду-виклика. Сервер авторизації зберігає код-виклика з типом та перенаправляє клієнту код авторизації. Клієнт відправляє запит на токен доступу, включаючи код підтвердження. Сервер перевіряє код підтвердження на основі коду-виклику та повертає токен доступу у випадку успішної верифікації. Алгоритм успішно працює тому, що навіть у разі перехоплення коду авторизації, неможливо буде об- міняти цей код на токен доступу без коду-виклику, нівелюючи атаку Auth Code Interception Attack, зображену на Рисунку 1. Пара кодів має бути унікальною для кожного нового запиту на авторизацію, а також клієнт повинен використовувати захищений протокол передачі даних (TLS). Генерація кодів для алгоритму PKCE Для генерації коду підтвердження (code_verifier) та коду-виклика (code_challenge) було створено окре- мий клас PkceGenerator із відповідними методами GenerateCodeVerifier та GenerateCodeChallenge. При створен- ні об’єкта класу у конструктор передається параметр, що визначає розмір згенерованого коду підтвердження, водночас мінімальний розмір за специфікацією 43 символи, а максимальний – 128. За замовчуванням аргумен- ту присвоюється максимальне значення – 128 символів. При написанні класу використовувався C# .NET 6.0 та бібліотеки System і System.Security.Cryptography. namespace DemoApp.Authentication { /// <summary> /// Provides a randomly generating PKCE code verifier and it’s corresponding code challenge. /// </summary> internal class PkceGenerator { /// <summary> /// The randomly generated PKCE code verifier. /// </summary> public string CodeVerifier; /// <summary> /// Corresponding PKCE code challenge. /// </summary> public string CodeChallenge; /// <summary> /// Initializes a new instance of the Pkce class. /// </summary> /// <param name=»size»>The size of the code verifier (43 - 128 charters).</param> public PkceGenerator(uint size = 128) { CodeVerifier = GenerateCodeVerifier(size); CodeChallenge = GenerateCodeChallenge(CodeVerifier); } … } } Відповідно до специфікації OAUTH 2.0 RFC-7636, код підтвердження має бути криптографічним ряд- ком, згенерованим із високою ентропією, розміром від 43 до 128 символів. Допустимими символами є A-Z, a-z, 0-9, -, ., _, ~. Запропонована реалізація методу для генерації коду підтвердження представлена нижче. /// <summary> /// Generates a code_verifier according to RFC-7636. /// </summary> /// <param name=»size»>The size of the code verifier (43 - 128 charters).</param> /// <returns>A code verifier.</returns> public static string GenerateCodeVerifier(uint size = 128) { if (size < 43 || size > 128) size = 128; const string unreservedCharacters = «ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvw xyz0123456789-._~»; Random random = new Random(); char[] highEntropyCryptograph = new char[size]; 412 Захист інформації for (int i = 0; i < highEntropyCryptograph.Length; i++) { highEntropyCryptograph[i] = unreservedCharacters[random.Next(unreservedCharacters.Length)]; } return new string(highEntropyCryptograph); } Код-виклик створюється за допомогою хешування значення коду підтвердження алгоритмом SHA256. Метод, наведений нижче, створює код-виклик використовуючи SHA256 та заміняє небажані символи після хе- шування, роблячи значення доступним для передачі через URL (так званий URL Encoding). /// <summary> /// Generates a code_challenge according to RFC-7636. /// </summary> /// <param name=»codeVerifier»>The code verifier.</param> /// <returns>A code challenge.</returns> public static string GenerateCodeChallenge(string codeVerifier) { using var sha256 = SHA256.Create(); var challengeBytes = sha256.ComputeHash(Encoding.UTF8.GetBytes(codeVerifier)); return Convert.ToBase64String(challengeBytes) .Replace(‘+’, ‘-’) .Replace(‘/’, ‘_’) .Replace(«=», «»); } Використання класу у програмі нетривіальне: користувачу необхідно створити об’єкт класу та зверну- тися до відповідного поля щоб отримати код підтвердження та код-виклик. PkceGenerator pkceGenerator = new (); string codeVerifier = pkceGenerator.CodeVerifier; string codeChallenge = pkceGenerator.CodeChallenge; Водночас слід мати на увазі, що пара code_challenge та code_verifier повинна використовуватися лише один раз для авторизації. Не варто повторно використовувати згенеровану пару кодів, оскільки це може призвести до потенційного перехоплення та використання зловмисником кодів для створення токену авторизації. Специфікація OAUTH 2.0 та RFC-7636 не надає інформації щодо практик зберігання code_verifier на клієнтах. У наступних розділах ми розглянемо розповсюджені методи збереження коду підтвердження, оскіль- ки це є фундаментальним для безпеки у використанні алгоритму PKCE. Методи збереження code_verifier у відкритих клієнтах Як було зазначено, специфікація алгоритму PKCE не передбачає аналіз методів за якими буде збережено код підтвердження між запитами. Оскільки клієнт отримує код авторизації через зворотній виклик (callback), не є можливим зберігання коду підтвердження у форматі змінної чи будь-яким іншим способом у коді. Ми будемо розглядати методи для збереження значення code_verifier лише у контексті WEB-додатків (React, Angular, Web Assembly). Додаткові методи безпечного зберігання інформації для мобільних додатків Android [8] та iOS [9] відрізняються і виходять за межі цієї статті. Збереження у сховищі браузера. Очевидним рішенням для збереження будь-якої інформації у роботі з WEB-клієнтами є сховище браузера. Існує два види такого сховища: Local Storage та Session Storage [10]. Так, за допомогою дуже простого JavaScript коду, розробники можуть зберігати певні дані та налаштування користувача. Різниця між Local Storage та Session Storage полягає у тривалості зберігання даних. Session Storage не зберігає значення між вкладками та вікнами браузера, надаючи хибне відчуття безпеки розробникам, які збираються записати значення у такому сховищі. На жаль, якщо сайт виявиться вразливим до XSS [11] атак, зловмисник зможе зчитати дані зі сховища браузера не дивлячись на те, що вони в Local Storage або Session Storage. Переваги зберігання значення у сховищі браузера: - Швидкість роботи. - Простота реалізації. Недоліки такого підходу: - Вразливість до XSS атак. - Потенційний витік інформації. 413 Захист інформації Варто зазначити, що сучасні фреймворки по типу Angular та React пропонують набір методів для запо- бігання XSS атак, але все ж існує вірогідність небезпеки пов’язаної зі зберіганням чутливої інформації у серед- овищі браузера. Також не є доцільним використання будь-яких алгоритмів шифрування на клієнті, оскільки код додатку цілком завантажується браузером, і будь-хто, в тому числі і зловмисник може переглянути алгоритм для того, щоб розшифрувати значення. Збереження через JavaScript cookies. Іншим підходом до збереження інформації в браузері є cookies [12]. Як і у попередньому методі, використовується простий JavaScript код для збереження та доступу до даних через document.cookie. Переваги та недоліки такі ж, як і в попереднього підходу. Якщо додаток встановлює cookies через JavaScript, то зловмисник має змогу зчитати їх та відправити собі на сервер. Збереження за допомогою Server cookies. Сервер може встановлювати cookies у відповіді до клі- єнта, які неможливо зчитати через JavaScript. Такі cookies додаються до відповіді на запит клієнта та позначаються як HttpOnly [13]. Однак обов’язково рекомендується встановлювати атрибут SameSite зі зна- ченням Lax або Strict [13] для того, щоб cookies не передавались на сторонні ресурси при запитах із браузе- ра. Якщо не встановити атрибут SameSite та якщо браузер не підтримує автоматичну установку SameSite. Lax для SameSite.None cookies, то це уможливлює так звану атаку з прихованої iframe (Hidden iframe attack). Враховуючи, що додаток вразливий до XSS атаки та має HttpOnly cookies без атрибуту SameSite, зловмисник може вбудувати прихований iframe, який надсилає запит на сторонній сервіс. Усі cookies із не- встановленим SameSite або SameSite.None будуть передані зловмиснику. Переваги підходу з Server cookies: - Робить XSS атаку неможливою за правильної конфігурації. - Найбільш безпечний метод зберігання чутливої інформації. Недоліки такого підходу: - Обов’язкова наявність сервера в одному домені з клієнтом для того щоб записати cookie та встано- вити атрибут SameSite.Strict. - Потенційне ускладнення процесу публікації додатку, оскільки потрібно публікувати і клієнт, і сервер. Використання методу Backend For Frontend (BFF) при авторизації через PKCE Застосувавши підхід до збереження даних через Server cookies у контексті авторизації PKCE, ми отримаємо метод, який має назву Backend For Frontend (BFF) та набуває популярності серед розробників додатків, що класифікуються як відриті. Деякі розробники пропонують готові рішення BFF для додатків. Наприклад, розробники Identity Service – компанія Duende, котра не є частиною Microsoft, пропонує вико- ристовувати Duende BFF [14] як їх модуль від Identity Service, доступний компаніям з підпискою Enterprise. Перевагою такого рішення є функціонал та здатність працювати з існуючими системами Identity Service. Серед недоліків можна назвати високу ціну на Enterprise підписку та тісну інтеграцію лише з провайдерами Identity Service 5. Враховуючи відсутність інших рішень на ринку та високу ціну корпоративної підписки Microsoft Enterprise, було ухвалено рішення розробити власну версію BFF на C# .NET 6.0, яка працює з клієнтами стан- дарту OAUTH 2.0. Розглянемо приклад послідовності авторизації у системі, яка складається з клієнту Blazor Web Assembly [15] та сервера BFF написаному на C# .NET 6.0. Приклад сервера авторизації стандарту OAUTH 2.0 розглядатися не буде, оскільки такий матеріал виходить за межі цієї статті. Послідовність процесу авторизації з алгоритмом PKCE та використанням методу BFF наступна: 1. Користувач розпочинає авторизацію, натиснувши на кнопку «Увійти» у додатку. 2. Додаток генерує код-виклик та код підтвердження (детальніше у розділі «Генерація кодів для алгорит- му PKCE»). 3. Додаток надсилає код-виклик, код-підтвердження та адресу зворотного виклику на BFF через POST за- пит. 4. BFF додає код-підтвердження до Response.Cookies, встановивши атрибути HttpOnly, Secure, та SameSite. Strict. 5. BFF перенаправляє запит до сервера авторизації, методу /authorize разом із параметрами коду-виклику та адресу зворотного виклику. 6. Сервер авторизації направляє користувача на сторінку авторизації, де той вводить свій логін та пароль. 7. Результат обробляється на сервері авторизації, який зберігає код-виклик та генерує код авторизації. 8. Сервер авторизації перенаправляє запит на адресу зворотного виклику клієнта, додаючи разом з тим код авторизації. 9. Клієнт надсилає POST запит до BFF на отримання токену, додаючи код авторизації до параметрів. 10. BFF зчитує код-підтвердження через cookies, додає до запиту код підтвердження, код авторизації та ви- кликає сервіс авторизації для отримання токену. BFF на даному етапі може видалити код-підтвердження із cookies. 11. Сервер авторизації перевіряє отриманий код підтвердження з кодом виклику, а також код авторизації та IP-адресу запиту. 12. Після успішної перевірки, сервер генерує токен авторизації та відправляє його як результат запиту. 414 Захист інформації 13. BFF отримує токен авторизації, записує його у cookies з параметрами HttpOnly, Secure, SameSite.Strict. 14. BFF повертає успішний результат клієнтові. 15. Клієнт посилає запит на інформацію по користувачу через BFF, відновлює стан. Процес авторизації ілюструє діаграма послідовності, зображена на Рис. 3. Захист інформації [Введите текст] Рис. 3. Діаграма послідовності для авторизації з використанням PKCE та BFF Таким чином, після успішної авторизації, клієнт авторизований та має змогу викликати методи BFF призначені для авторизованих користувачів. При цьому на клієнті не має жодної інформації вразливої до XSS- атак. Всі чутливі дані як-то code_verifier чи токен зберігаються через HttpOnly cookies з атрибутом SameSite.Strict, як описано у розділі вище. У даній моделі BFF сервіс по суті являє собою реалізацію шаблону зворотного проксі (Reverse Proxy) [16], пропускаючи запити крізь себе та оброблюючи авторизацію клієнта. Висновки У даній статті було розглянуто різницю між конфіденційними та відкритими клієнтами, здійснено аналіз проблем, пов’язаних із авторизацією відкритих клієнтів за протоколом OAUTH 2.0. У результаті аналізу було виявлено алгоритми, моделі та методи для реалізації процесу авторизації у відкритих додатках. Проведено роботу над моделюванням та практичною реалізацією алгоритму Proof Key for Code Exchange з методом Backend For Frontend. Результатом роботи є відкритий додаток, що використовує розроблену модель та алгоритми для авторизації, та не є вразливим до атак, виділених при теоретичному аналізі: Cross-Site-Scripting (XSS), Auth Code Interception, CSRF та інших. Література 1. The OAuth 2.0 Authorization Framework. Microsoft Internet Engineering Task Force (IETF). URL: https://datatracker.ietf.org/doc/html/rfc6749#section-2.1 (дата звернення 01.08.2022). 2. Testing for OAuth Client Weaknesses. OWASP Project. URL: https://owasp.org/www-project-web-security-testing-guide/latest/4- Web_Application_Security_Testing/05-Authorization_Testing/05.2-Testing_for_OAuth_Client_Weaknesses (дата звернення 01.08.2022). Рис. 3. Діаграма послідовності для авторизації з використанням PKCE та BFF Таким чином, після успішної авторизації, клієнт авторизований та має змогу викликати методи BFF призначені для авторизованих користувачів. При цьому на клієнті не має жодної інформації вразливої до XSS- атак. Всі чутливі дані як-то code_verifier чи токен зберігаються через HttpOnly cookies з атрибутом SameSite. Strict, як описано у розділі вище. У даній моделі BFF сервіс по суті являє собою реалізацію шаблону зворотного проксі (Reverse Proxy) [16], пропускаючи запити крізь себе та оброблюючи авторизацію клієнта. Висновки У даній статті було розглянуто різницю між конфіденційними та відкритими клієнтами, здійснено ана- ліз проблем, пов’язаних із авторизацією відкритих клієнтів за протоколом OAUTH 2.0. У результаті аналізу було виявлено алгоритми, моделі та методи для реалізації процесу авторизації у відкритих додатках. Прове- дено роботу над моделюванням та практичною реалізацією алгоритму Proof Key for Code Exchange з методом Backend For Frontend. Результатом роботи є відкритий додаток, що використовує розроблену модель та алгорит- ми для авторизації, та не є вразливим до атак, виділених при теоретичному аналізі: Cross-Site-Scripting (XSS), Auth Code Interception, CSRF та інших. Література 1. The OAuth 2.0 Authorization Framework. Microsoft Internet Engineering Task Force (IETF). URL: https://datatracker.ietf.org/doc/html/ rfc6749#section-2.1 (дата звернення 01.08.2022). 2. Testing for OAuth Client Weaknesses. OWASP Project. URL: https://owasp.org/www-project-web-security-testing-guide/latest/4-Web_Application_ Security_Testing/05-Authorization_Testing/05.2-Testing_for_OAuth_Client_Weaknesses (дата звернення 01.08.2022). 415 Захист інформації 3. Bansal, C., Bhargavan, K., Delignat-Lavaud, A. and Maffeis, S., 2014. Discovering concrete attacks on website authorization by formal analysis. Journal of Computer Security, 22(4), pp.601-657. 4. Ghasemisharif, M., Ramesh, A., Checkoway, S., Kanich, C. and Polakis, J., 2018. O Single {Sign-Off}, Where Art Thou? An Empirical Analysis of Single {Sign-On} Account Hijacking and Session Management on the Web. In 27th USENIX Security Symposium (USENIX Security 18) (pp. 1475-1492). 5. Lodderstedt, T., Bradley, J., Labunets, A. and Fett, D., OAuth 2.0 Security Best Current Practice (draft-ietf-oauth-security-topics-16). Inter- net Engineering Task Force (IETF). Available from: http://www.watersprings.org/pub/id/draft-ietf-oauth-security-topics-06.html [Accessed 1/08/2022]. 6. Proof Key for Code Exchange by OAuth Public Clients. Google Internet Engineering Task Force (IETF) URL: https://datatracker.ietf.org/ doc/html/rfc7636 (дата звернення 01.08.2022). 7. Lodderstedt, T., McGloin, M. and Hunt, P., 2013. RFC 6819: OAuth 2.0 threat model and security considerations. Internet Engineering Tast Force (IETF), pp.1-71. 8. App security best practices. Android Developers Documentation. URL: https://developer.android.com/topic/security/best-practices#safe- data (дата звернення 01.08.2022). 9. Encrypting Your App’s Files. Protect the user’s data in iOS by encrypting it on disk. Apple Developers Documentation. URL: https://devel- oper.apple.com/documentation/uikit/protecting_the_user_s_privacy/encrypting_your_app_s_files (дата звернення 01.08.2022). 10. Window.localStorage. Mozilla Development Documentation. URL: https://developer.mozilla.org/en-US/docs/Web/API/Window/localStor- age (дата звернення 01.08.2022). 11. Cross Site Scripting (XSS). OWASP Community. URL: https://owasp.org/www-community/attacks/xss/ (дата звернення 01.08.2022). 12. Using HTTP cookies. Mozilla Development Documentation. URL: https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies#security (дата звернення 01.08.2022). 13. Same Site cookies. Mozilla Development Documentation. URL: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie/ SameSite (дата звернення 01.08.2022). 14. BFF Security Framework. Duende Software. URL: https://docs.duendesoftware.com/identityserver/v5/bff/ (дата звернення 01.08.2022). 15. ASP.NET Core Blazor. Microsoft Documentation. URL: https://docs.microsoft.com/en-us/aspnet/core/blazor/?view=aspnetcore-6.0 (дата звернення 01.08.2022). 16. A. Chiarelli. Building a Reverse Proxy in .NET Core. Auth0 Blog. URL: https://auth0.com/blog/building-a-reverse-proxy-in-dot-net-core/ (дата звернення 01.08.2022). References 1. The OAuth 2.0 Authorization Framework. Microsoft Internet Engineering Task Force (IETF). Available from: https://datatracker.ietf.org/doc/ html/rfc6749#section-2.1 [Accessed 1/08/2022]. 2. Testing for OAuth Client Weaknesses. OWASP Project. Available from: https://owasp.org/www-project-web-security-testing-guide/latest/4- Web_Application_Security_Testing/05-Authorization_Testing/05.2-Testing_for_OAuth_Client_Weaknesses [Accessed 1/08/2022]. 3. Bansal, C., Bhargavan, K., Delignat-Lavaud, A. and Maffeis, S., 2014. Discovering concrete attacks on website authorization by formal analy- sis. Journal of Computer Security, 22(4), pp.601-657. 4. Ghasemisharif, M., Ramesh, A., Checkoway, S., Kanich, C. and Polakis, J., 2018. O Single {Sign-Off}, Where Art Thou? An Empirical Analy- sis of Single {Sign-On} Account Hijacking and Session Management on the Web. In 27th USENIX Security Symposium (USENIX Security 18) (pp. 1475-1492). 5. Lodderstedt, T., Bradley, J., Labunets, A. and Fett, D., OAuth 2.0 Security Best Current Practice (draft-ietf-oauth-security-topics-16). Inter- net Engineering Task Force (IETF). Available from: http://www.watersprings.org/pub/id/draft-ietf-oauth-security-topics-06.html [Accessed 1/08/2022]. 6. Proof Key for Code Exchange by OAuth Public Clients. Google Internet Engineering Task Force (IETF) Available from: https://datatracker. ietf.org/doc/html/rfc7636 [Accessed 1/08/2022]. 7. Lodderstedt, T., McGloin, M. and Hunt, P., 2013. RFC 6819: OAuth 2.0 threat model and security considerations. Internet Engineering Tast Force (IETF), pp.1-71. 8. App security best practices. Android Developers Documentation. Available from: https://developer.android.com/topic/security/best- practices#safe-data [Accessed 1/08/2022]. 9. Encrypting Your App’s Files. Protect the user’s data in iOS by encrypting it on disk. Apple Developers Documentation. Available from: https:// developer.apple.com/documentation/uikit/protecting_the_user_s_privacy/encrypting_your_app_s_files [Accessed 1/08/2022]. 10. Window.localStorage. Mozilla Development Documentation. Available from: https://developer.mozilla.org/en-US/docs/Web/API/Window/lo- calStorage [Accessed 1/08/2022]. 11. Cross Site Scripting (XSS). OWASP Community. Available from: https://owasp.org/www-community/attacks/xss/ [Accessed 1/08/2022]. 12. Using HTTP cookies. Mozilla Development Documentation. Available from: https://developer.mozilla.org/en-US/docs/Web/HTTP/ Cookies#security [Accessed 1/08/2022]. 13. Same Site cookies. Mozilla Development Documentation. Available from: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set- Cookie/SameSite [Accessed 1/08/2022]. 14. BFF Security Framework. Duende Software. Available from: https://docs.duendesoftware.com/identityserver/v5/bff/ [Accessed 1/08/2022]. 15. ASP.NET Core Blazor. Microsoft Documentation. Available from: https://docs.microsoft.com/en-us/aspnet/core/blazor/?view=aspnetcore-6.0 [Accessed 1/08/2022]. 16. A. Chiarelli. Building a Reverse Proxy in .NET Core. Auth0 Blog. Available from: https://auth0.com/blog/building-a-reverse-proxy-in-dot-net- core/ [Accessed 1/08/2022]. Одержано 03.08.2022 Про авторів: Бодак Богдан Вікторович, аспірант кафедри автоматики і управління в технічних системах НТУУ «КПІ імені Ігоря Сікорського», Кількість публікацій в українських виданнях – 3, 416 Захист інформації Дорошенко Анатолій Юхимович, доктор фізико-математичних наук, професор, завідувач відділу теорії комп’ютерних обчислень Інституту програмних систем НАН України, професор кафедри автоматики і управління в технічних системах НТУУ «КПІ імені Ігоря Сікорського». Кількість публікацій в українських виданнях – понад 180. Кількість публікацій в зарубіжних виданнях – понад 70. Індекс Гірша – 6. Кількість публікацій в українських виданнях – 28. Кількість зарубіжних публікацій – 12. http://orcid.org/0000-0002-8435-1451. Місце роботи авторів: Інститут програмних систем НАН України, 03187, м. Київ-187, проспект Академіка Глушкова, 40. Тел.: (38)(044) 526-21-48 E-mail: bohdan.bodak@outlook.com, doroshenkoanatoliy2@gmail.com Прізвища та ініціали авторів і назва доповіді англійською мовою: Bodak B. V., Doroshenko A.Yu.. Protecting public clients using an authorization algorithm Прізвища та ініціали авторів і назва доповіді українською мовою: Бодак Б. В., Дорошенко А. Ю. Захист відкритих клієнтів за допомогою одного алгоритму авторизації Контакти для редактора: Бодак Богдан Вікторович, аспірант кафедри автоматики та управління в технічних системах НТУУ «КПІ», e-mail: bohdan.bodak@outlook.com, тел.: (38)(067) 291-50-45 (Telegram, Viber), (1)(519) 465-97-37 (WhatsApp, iMessage)