Polygon get test tokens как правильно взять
Перейти к содержимому

Polygon get test tokens как правильно взять

  • автор:

Polygon get test tokens как правильно взять

Copyright (c) 2023, Intercom, Inc. ([email protected]) with Reserved Font Name «Open Sans». This Font Software is licensed under the SIL Open Font License, Version 1.1. Copyright 2023. Intercom Inc. Licensed under the Apache License, Version 2.0 (the «License»); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an «AS IS» BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Оглавление
Отправка и получение Polygon (MATIC)
Отправка и получение Polygon (MATIC)

Отправка и получение Polygon (MATIC)

Автор: Hrisi
Обновлено больше недели назад
Оглавление

Polygon — это протокол и фреймворк для создания и подключения блокчейн-сетей, совместимых с Ethereum, агрегирования масштабируемых решений на Ethereum и поддержки экосистемы Ethereum с несколькими цепочками.

Polygon объединяет лучшие характеристики Ethereum и суверенных блокчейнов в полноценную многоцепочную систему. Она решает такие наболевшие проблемы блокчейнов, как высокие комиссии за газ и медленные скорости, без ущерба для безопасности. Она способна максимально эффективно использовать сетевые функции Ethereum, по сути более безопасного, более открытого и мощного блокчейна.

Подробнее о Polygon можно узнать здесь.

Руководство по тестовой сети: подключение к тестовой сети

В этом посте вы узнаете, как подключиться к Polygon Testnet и получить свои тестовые токены (MATIC, LITH и REPUTATION).

Перейдите к руководству по Testnet: Exploring Lithium , если вы ранее настроили подключение к Polygon Testnet . Обязательно проверьте, активен ли здесь сетевой статус вашего RPC-сервера .

Подключение кошелька MetaMask к тестовой сети Polygon

Следуйте инструкциям на снимках экрана ниже, чтобы добавить Polygon Testnet через A. Chainlist или B. Ручное подключение .

  1. Перейдите в список цепочек здесь . Или найдите «MATIC» в списке цепочек и включите Testnet на переключателе.
  2. Подключите свой кошелек и добавьте токены MATIC в MetaMask. Затем вы автоматически переключитесь на тестовую сеть Polygon Mumbai.
  3. Теперь вы подключены к тестовой сети Polygon Mumbai.

Если вы предпочитаете подключаться вручную, вот как это можно сделать.

  1. Нажмите на раскрывающееся меню в верхней части расширения кошелька MetaMask.
  2. Нажмите «Добавить сеть» и заполните пустое место параметрами ниже.
Сетевое имя : Мумбаи Тестнет
Новый URL RPC : https://matic-mumbai.chainstacklabs.com
Идентификатор цепи : 80001
Символ валюты : MATIC
URL обозревателя блоков : https://mumbai.polygonscan.com

Получение тестовых токенов MATIC, LITH и REPUTATION

Теперь, когда вы уже подключили свой кошелек MetaMask к Polygon Mumbai Testnet. Вы можете начать взаимодействовать с приложением Lithium, используя тестовые токены.

В литиевой тестовой сети

  • test MATIC необходим для оплаты комиссии за газ для всех транзакций, поскольку тестовая сеть Lithium построена на Polygon;
  • test LITH — основной экономический токен Lithium;
  • test RP — это жетон репутации Lithium, который не подлежит передаче.
  • Чтобы узнать больше о LITH и RP, читайте здесь .

Вы можете запросить бесплатные тестовые токены, выполнив следующие действия:

  1. Убедитесь, что вы подключены к правильной сети — Polygon Mumbai Testnet
  2. Претендовать на тест MATIC через кран
  • Скопируйте адрес кошелька из MetaMask
  • Перейти на сайт тестовых токенов Polygon Faucet
  • Вставьте адрес кошелька в поле ниже и отправьте

3. Претензионный тест LITH

  • Перейдите https://testnet.lith.finance/test-tokens , нажмите «заявить LITH»
  • Подпишитесь своей MetaMask
  • Тестовый LITH будет передан на ваш MetaMask через несколько секунд. Пожалуйста, обновите браузер. Баланс LITH должен обновляться на панели навигации.

4. Заявка на проверку RP

  • Перейдите https://testnet.lith.finance/test-tokens , нажмите «Получить RP».
  • Подпишитесь своей MetaMask
  • Тестовые RP будут переданы в вашу MetaMask через несколько секунд. Пожалуйста, обновите браузер. Баланс RP должен обновляться на панели навигации.

Поздравляем с завершением настройки кошелька и токена! Готовы погрузиться в литий? Узнайте, как присоединиться к квестам ценообразования, прочитав Руководство по тестовой сети: изучение лития .

Примечание. Пожалуйста, используйте рабочий стол для полного опыта.

Lithium TESTNET — ГАЙД

Lithium Finance — первое децентрализованное решение оракула данных, которое использует коллективный интеллект для регулярной оценки неликвидных активов.

В этой статье вы узнаете, как подключиться к Polygon Testnet и получить тестовые токены (MATIC, LITH и REPUTATION), затем мы с вами протестируем сайт децентрализованное ценообразование активов.

Здесь обязательно проверьте, активен ли сетевой статус вашего RPC-сервера.

Подключение кошелька MetaMask к Polygon Testnet

Чтобы подключить Polygon Testnet через A. Chainlist или B. Manual Connection, выполните шаги, показанные на скриншотах ниже.

Chainlist:

  1. Зайдите в Chainlist здесь . Или найдите «MATIC» в Chainlist и включите Testnet на тумблере.
  2. Подключите свой кошелек и добавьте токены MATIC в MetaMask. После этого вы будете автоматически переключены на тестнет Polygon Mumbai.
  3. Теперь вы подключены к тестнету Polygon Mumbai.

Ручное подключение:

Если вы предпочитаете подключаться вручную, вот как это можно сделать.

  1. Нажмите на выпадающее меню в верхней части расширения кошелька MetaMask.
  2. Нажмите на «Добавить сеть» и заполните пустое место параметрами, указанными ниже.

Название сети: Mumbai Testnet
Новый URL RPC: https://matic-mumbai.chainstacklabs.com
Идентификатор сети: 80001
Символ валюты: MATIC
URL блочного обозревателя: https://mumbai.polygonscan.com

Получение тестовых токенов MATIC, LITH и REPUTATION

Теперь, когда вы уже подключили свой кошелек MetaMask к Polygon Mumbai Testnet. Вы можете начать взаимодействовать с приложением Lithium, используя тестовые токены.

В Lithium testnet,

  • test MATIC необходим для оплаты комиссии за газ для всех транзакций, поскольку сеть Lithium testnet построена на Polygon;
  • test LITH — основной экономический токен Lithium;
  • test RP — репутационный токен Lithium, который не подлежит передаче.
  • Чтобы узнать больше о LITH и RP, читайте здесь .

Вы можете получить бесплатные тестовые жетоны, выполнив следующие действия:

  1. Убедитесь, что вы подключены к правильной сети — Polygon Mumbai Testnet.
  2. Запросите тестовый MATIC через кран .
  • Скопируйте адрес кошелька из MetaMask.
  • Перейдите на сайт тестового токена Polygon Faucet .
  • Вставьте адрес кошелька в поле ниже и отправьте заявку.

3. Заклеймите тестовые LITH.

  • Перейдите на сайт https://testnet.lith.finance/test-tokens , нажмите «Claim LITH».
  • Подпишитесь с помощью вашей MetaMask.
  • Тестовый LITH будет передан на ваш MetaMask через несколько секунд. Пожалуйста, обновите браузер. Баланс LITH должен быть обновлен на панели навигации.

4. Заклеймите тестовые RP

  • Перейдите на сайт https://testnet.lith.finance/test-tokens , нажмите «Claim RP».
  • Подпишитесь с помощью вашего MetaMask.
  • Тестовый RP будет переведен на ваш MetaMask через несколько секунд. Пожалуйста, обновите браузер. Баланс RP должен быть обновлен на панели навигации.

(Обратите внимание, что заявка на RP доступна только пользователям без баланса RP).

Поздравляем вас с завершением настройки кошелька и токенов! Готовы погрузиться в Lithium?

Примечание: Для полноценной работы используйте настольный компьютер.

Изучение сети TESTNET

Теперь, когда вы подключились к Polygon Testnet и получили тестовые жетоны, вы готовы в полной мере насладиться ценообразованием Lithium в качестве эксперта по ценам.

Краткая информация о том, как работает Lithium, доступна здесь .

Вот что вы можете сделать, чтобы извлечь максимальную пользу из опыта тестирования Lithium:

✅ Выиграйте LITH на сумму до 500 долларов США

  • Помогите нам определить цену BAYC, CryptoPunks и многих других редких NFT.
  • Поделитесь тем, чего, по вашему мнению, стоят эти НФТ, чтобы получить шанс выиграть в июле.
  • Следите за нами в Twitter, чтобы узнать подробности этих кампаний.
  • Ищите ценовые квесты в нашем тестнете для получения призов.

✅ Нужна оценка редких NFT?

  • Свяжитесь с нами, мы готовы помочь!
  • Узнайте больше здесь .

Представление ценовой сметы для NFT

1. Перейдите на сайт и войдите в систему, подключив свой кошелек. Вы одобрите взаимодействие вашего кошелька с протоколом. Убедитесь, что вы подключены к Polygon Testnet ( см. данное руководство по настройке ).

2. Ознакомьтесь с ценовыми квестами и найдите тот, на который вы уверены в ответе.

3. Проанализируйте минимальную цену, дату оценки и другую справочную информацию о целевом NFT. Ваши ценовые оценки представляют собой относительную стоимость целевого NFT по отношению к минимальной цене коллекции.

4. Предоставьте свои ценовые оценки в виде предложения и спроса на NFT. (Цена предложения должна быть меньше цены спроса).

5. Проставьте тестовые жетоны LITH и RP в соответствии с тем, насколько вы уверены в своих оценках цен, и отправьте жетоны вместе с ответом. (Убедитесь, что у вас есть тестовый MATIC, чтобы оплатить стоимость газа, см. руководство пользователя ).

6. Отправьте свой ответ. Вы одобрите через свой кошелек следующие три действия:

  • Одобрить передачу LITH для ставки (только для тех, кто впервые обращается).
  • Подписать и зашифровать свой ответ.
  • Произведите оплату газа и отправьте его в блокчейн.

7. Квест по ценообразованию будет оставаться открытым для участия других пользователей до его завершения. О дате завершения вы будете уведомлены по электронной почте. Пожалуйста, вернитесь после этого, чтобы проверить окончательный результат ценообразования.

8. Получите свое вознаграждение! Ваша первоначальная ставка в LITH будет полностью погашена.

Поздравляем — вы выполнили тестнет!

Если вам нужна дополнительная помощь в подключении Polygon Testnet, вернитесь в самое начало статьи и проверьте все ли вы правильно настроили.

Примечание: Для полноценной работы используйте рабочий стол.

Подписывайтесь на наш Telegram канал, где мы пишем о новых интересных проектах, которые только начинают свой путь, и помогаем им развиваться вместе с Вами.

Polygon get test tokens как правильно взять

В последнее время все чаще можно встретить приложения, использующие для аутентификации пользователей механизмы JSON Web Tokens. Особую популярность JWT завоевал с ростом популярности микросервисной архитектуры: он возлагает задачу по обработке аутентификационных данных на сами микросервисы, а следовательно позволяет избежать различных ошибок авторизации, увеличить производительность и улучшить масштабируемость приложения.

Вместе с тем неправильное использование JWT может негативно сказаться на безопасности приложения. Мы приведем примеры использования JWT, разберем распространенные ошибки в реализации схем аутентификации с применением JWT, рассмотрим основные виды атак на эти схемы и дадим рекомендации по их предотвращению.

Формат JWT: описание

В этом разделе статьи мы расскажем, что такое JSON Web Tokens, из каких частей он состоит, как используется для аутентификации пользователей и в чем заключается преимущество JWT в сравнении с классической схемой аутентификации с использованием сессий.

Структура JWT

Согласно RFC-7519, JSON Web Tokens — один из способов представления данных для передачи между двумя или более сторонами в виде JSON-объекта.

Как правило, структурно JWT состоит из трех частей:

  • header — заголовок,
  • payload — полезная нагрузка,
  • signature — подпись.

Бывают и исключения, когда в JWT отсутствует подпись. Подобный случай будет рассмотрен далее.

Заголовок и полезная нагрузка — обычные JSON-объекты, которые необходимо дополнительно закодировать при помощи алгоритма base64url. Закодированные части соединяются друг с другом, и на их основе вычисляется подпись, которая также становится частью токена.

В общем случае токен выглядит следующим образом:

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6IjEzMzciLCJ1c2VybmFtZSI6ImJpem9uZSIsImlhdCI6MTU5NDIwOTYwMCwicm9sZSI6InVzZXIifQ.ZvkYYnyM929FM4NW9_hSis7_x3_9rymsDAx9yuOcc1I

На рис. 1 можно увидеть, что токен состоит из трех частей, разделенных точками.

JSON Web Token (пример с сайта jwt.io)

Рис. 1. JSON Web Token (пример с сайта jwt.io)

Красная часть — заголовок:

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9

В исходном виде:

Фиолетовая часть — полезная нагрузка:

eyJpZCI6IjEzMzciLCJ1c2VybmFtZSI6ImJpem9uZSIsImlhdCI6MTU5NDIwOTYwMCwicm9sZSI6InVzZXIifQ

В исходном виде:

Голубая часть — подпись:

ZvkYYnyM929FM4NW9_hSis7_x3_9rymsDAx9yuOcc1I

Рассмотрим структуру полей более подробно.

Заголовок

Заголовок — служебная часть токена. Он помогает приложению определить, каким образом следует обрабатывать полученный токен.

Эта часть, как было ранее упомянуто, является JSON-объектом и имеет следующий формат:

Здесь присутствуют следующие поля:

  • typ — тип токена, например JWT;
  • alg — алгоритм, использованный для генерации подписи.

Значение поля typ зачастую игнорируется приложениями, однако стандарт не рекомендует отказываться от него для обеспечения обратной совместимости.

Поле alg обязательно для заполнения. В приведенном случае был применен алгоритм HS256 (HMAC-SHA256), в котором для генерации и проверки подписи используется единый секретный ключ.

Для подписи JWT могут применяться и алгоритмы асимметричного шифрования, например RS256 (RSA-SHA256). Стандарт допускает использование и других алгоритмов, включая HS512, RS512, ES256, ES512, none и др.

Использование алгоритма none указывает на то, что токен не был подписан. В подобном токене отсутствует часть с подписью, и установить его подлинность невозможно.

Полезная нагрузка

В полезной нагрузке передается любая информация, которая помогает приложению тем или иным образом идентифицировать пользователя. Дополнительно могут передаваться определенные служебные поля, однако они не обязательны для заполнения, поэтому на них останавливаться мы не будем.

В нашем случае полезная нагрузка содержит следующий JSON-объект:

Здесь присутствуют следующие поля:

  • id — уникальный идентификатор пользователя;
  • username — имя пользователя;
  • iat — служебное поле, время генерации токена в формате Unix time;
  • role — роль пользователя, например admin, user, guest.

Поскольку набор полей в части полезной нагрузки произвольный, приложение может хранить в этой части практически любые данные. Например, для ускорения работы приложения в полезной нагрузке могут храниться Ф. И. О. пользователя, чтобы не запрашивать эти сведения каждый раз из базы данных.

Подпись

Подпись генерируется следующим образом.

Заголовок и полезная нагрузка кодируются при помощи алгоритма base64url, после чего объединяются в единую строку с использованием точки ( «.» ) в качестве разделителя.

Генерируется подпись (в нашем примере — с применением алгоритма HMAC-SHA256), которая добавляется к исходной строке так же через точку.

На псевдокоде алгоритм выглядит примерно так:

signature = HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), SECRET_KEY ) JWT = base64UrlEncode(header) + "." + base64UrlEncode(payload) + "." + base64UrlEncode(signature)

Получив JWT от пользователя, приложение самостоятельно вычислит значение подписи и сравнит его с тем значением, которое было передано в токене. Если эти значения не совпадут, значит, токен был модифицирован или сгенерирован недоверенной стороной, и принимать такой токен и доверять ему приложение не будет.

Подпись приведенного в пример токена можно проверить с использованием секретного ключа test (например, на сайте jwt.io).

Аутентификация с использованием JWT

Схема аутентификации с использованием JWT предельно проста.

Пользователь вводит свои учетные данные в приложении или доверенном сервисе аутентификации. При успешной аутентификации сервис предоставляет пользователю токен, содержащий сведения об этом пользователе (уникальный идентификатор, Ф. И. О., роль и т. д.).

При последующих обращениях токен передается приложению в запросах от пользователя (в cookie, заголовках запроса, POST- или GET-параметрах и т. д.).

Получив токен, приложение сперва проверяет его подпись. Убедившись, что подпись действительна, приложение извлекает из части полезной нагрузки сведения о пользователе и на их основе авторизует его.

Преимущества JWT

Перечислим преимущества использования JWT в сравнении с классической схемой аутентификации, использующей сессии.

Во-первых, подход с использованием токенов позволяет не хранить информацию обо всех выданных токенах, как при классической схеме. Когда пользователь обращается к приложению, он передает ему свой токен. Приложению остается только проверить подпись и извлечь необходимые поля из полезной нагрузки.

Во-вторых, приложению вообще не обязательно заниматься выдачей и валидацией токенов самостоятельно, зачастую для этих целей используется отдельный сервис аутентификации.

В-третьих, при использовании отдельного сервиса аутентификации становится возможным организовать единую точку входа в различные сервисы с одними и теми же учетными данными. Единожды пройдя процедуру аутентификации, пользователь сможет получить доступ со своим токеном к тем ресурсам, которые доверяют этому сервису аутентификации.

В-четвертых, как было указано ранее, приложение может хранить в части полезной нагрузки практически любые данные, что при грамотной архитектуре приложения может существенно увеличить производительность.

Благодаря перечисленным факторам схема аутентификации с использованием JWT широко используется в различных корпоративных приложениях. Особенно популярна эта схема в тех приложениях, которые реализуют парадигмы микросервисной архитектуры: при таком подходе каждый сервис получает необходимые ему сведения о пользователе непосредственно из токена, а не тратит время на получение этой информации из базы данных.

Формат JWT: атаки

В этом разделе будут рассмотрены основные атаки на JWT и даны рекомендации по их предотвращению.

Перехват токена

Перехват пользовательского токена может привести к ряду неприятных последствий.

Во-первых, так как JWT передается в открытом виде, для получения хранящихся в части полезной нагрузки исходных данных достаточно применить к этой части функцию base64UrlDecode. То есть злоумышленник, перехвативший токен, сможет извлечь хранящиеся в токене данные о пользователе.

В соответствии с лучшими практиками для предотвращения подобной угрозы рекомендуется:

  • использовать при передаче токенов защищенное соединение;
  • не передавать в токенах чувствительные пользовательские данные, ограничившись обезличенными идентификаторами.

Во-вторых, злоумышленник, перехвативший токен, сможет его переиспользовать и получить доступ к приложению от лица пользователя, чей JWT был перехвачен.

Здесь рекомендации будут следующие:

  • как и в первом случае, использовать защищенное соединение при передаче токенов;
  • ограничить время жизни JWT и использовать механизм refresh tokens.
Refresh tokens

В современных схемах аутентификации, основанных на JWT, после прохождения аутентификации пользователь получает два токена:

  • access token — JWT, на основе которого приложение идентифицирует и авторизует пользователя;
  • refresh token — токен произвольного формата, служащий для обновления access token.

Access token при таком подходе имеет сильно ограниченное время жизни (например, одну минуту). Refresh token же имеет длительное время жизни (день, неделя, месяц), но он одноразовый и служит исключительно для обновления access token пользователя.

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

  • пользователь проходит процедуру аутентификации и получает от сервера access token и refresh token;
  • при обращении к ресурсу пользователь передает в запросе свой access token, на основе которого сервер идентифицирует и авторизует клиента;
  • при истечении access token клиент передает в запросе свой refresh token и получает от сервера новые access token и refresh token;
  • при истечении refresh token пользователь заново проходит процедуру аутентификации.

Подбор ключа симметричного алгоритма подписи

При использовании симметричных алгоритмов для подписи JWT (HS256, HS512 и др.) злоумышленник может попытаться подобрать ключевую фразу.

Подобрав ее, злоумышленник получит возможность манипулировать JWT-токенами так, как это делает само приложение, а следовательно сможет получить доступ к системе от лица любого зарегистрированного в ней пользователя.

В нашем примере из первой части статьи для подписи JWT в качестве ключевой фразы была использована строка test. Она простая, короткая и содержится во всех основных словарях для перебора паролей. Злоумышленнику не составит труда подобрать эту ключевую фразу с использованием программ John the Ripper или hashcat .

Рекомендации для защиты от атаки в этом случае такие:

  • использовать ключевые фразы большой длины, состоящие из больших и малых букв латинского алфавита, цифр и спецсимволов, и хранить их в строгой конфиденциальности;
  • обеспечить периодическую смену ключевой фразы. Это снизит удобство использования для пользователей (поскольку время от времени им придется проходить процедуру аутентификации заново), но поможет избежать компрометации ключевой информации.

Использование алгоритма none

Как было упомянуто в первой части статьи, использование в заголовке JWT алгоритма none указывает на то, что токен не был подписан. В подобном токене отсутствует часть с подписью, и установить его подлинность становится невозможно.

Рассмотрим подобную атаку на нашем примере. Наш токен в незакодированном виде выглядит следующим образом:

header: < "typ": "JWT", "alg": "HS256" >payload: < "id": "1337", "username": "bizone", "iat": 1594209600, "role": "user" >signature: ZvkYYnyM929FM4NW9_hSis7_x3_9rymsDAx9yuOcc1I

Предположим, мы хотим, чтобы приложение считало нас администратором. Для этого необходимо установить значение admin в поле role полезной нагрузки. Но при внесении в токен этого изменения подпись токена станет невалидной, и приложение не примет такой JWT.

Для обхода защитного механизма мы можем попытаться изменить значение поля alg в заголовке токена на none. Наш токен примет следующий вид:

header: < "typ": "JWT", "alg": "none" >payload:

Поскольку мы используем алгоритм none, подпись отсутствует. В закодированном виде наш JWT будет выглядеть так:

eyJ0eXAiOiJKV1QiLCJhbGciOiJub25lIn0.eyJpZCI6IjEzMzciLCJ1c2VybmFtZSI6ImJpem9uZSIsImlhdCI6MTU5NDIwOTYwMCwicm9sZSI6ImFkbWluIn0

Этот токен мы и передадим на сервер. Уязвимое приложение, проверив заголовок JWT и обнаружив в нем alg: none, примет этот токен без всяких проверок, как если бы он был легитимным, в результате чего мы получим привилегии администратора.

Чтобы защититься от такой атаки:

  • необходимо вести на стороне приложения белый список разрешенных алгоритмов подписи и отбрасывать все токены с алгоритмом подписи, отличным от разрешенного на сервере;
  • желательно работать строго с одним алгоритмом, например HS256 или RS256.

Изменение алгоритма подписи

При использовании асимметричных алгоритмов подпись токена осуществляется с использованием приватного ключа сервиса, а проверка подписи — с использованием публичного ключа сервиса.

Некоторые реализации библиотек для работы с JWT содержат логические ошибки, заключающиеся в том, что при получении токена, подписанного с использованием симметричного алгоритма (например, HS256), для проверки подписи в качестве ключевой фразы будет использован публичный ключ сервиса. Поскольку публичный ключ сервиса не засекречен, злоумышленник может легко получить его и использовать для подписи собственных токенов.

Для рассмотрения примера этого варианта атаки нам понадобится новый JWT:

header: < "alg": "RS256", "typ": "JWT" >payload: < "id": "1337", "username": "bizone", "iat": 1594209600, "role": "user" >signature: YLOVSKef-paSnnM8P2JLaU2FiS8TbhYqjewLmgRJfCj1Q6rVehAHQ-lABnKoRjlEmHZX-rufHEocDxGUYiGMjMexUQ3zt-WqZITvozJ4pkvbV-mJ1nKj64NmqaR9ZkBWtmF-PHJX50eYjgo9rzLKbVOKYOUa5rDkJPHP3U0aaBXFP39zsGdOTuELv436WXypIZBeRq2yA_mDH13TvzegWCK5sjD4Gh177bCq57tBYjhGIQrDypVe4cWBPlvwFlmG8tdpWGu0uFp0GcbTAfLUlbTSuGROj88BY0XeUs0iqmGlEICES3uqNx7vEmdT5k_AmL436SLedE0VHcyxve5ypQ

В кодированном виде он будет выглядеть следующим образом:

eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjEzMzciLCJ1c2VybmFtZSI6ImJpem9uZSIsImlhdCI6MTU5NDIwOTYwMCwicm9sZSI6InVzZXIifQ.YLOVSKef-paSnnM8P2JLaU2FiS8TbhYqjewLmgRJfCj1Q6rVehAHQ-lABnKoRjlEmHZX-rufHEocDxGUYiGMjMexUQ3zt-WqZITvozJ4pkvbV-mJ1nKj64NmqaR9ZkBWtmF-PHJX50eYjgo9rzLKbVOKYOUa5rDkJPHP3U0aaBXFP39zsGdOTuELv436WXypIZBeRq2yA_mDH13TvzegWCK5sjD4Gh177bCq57tBYjhGIQrDypVe4cWBPlvwFlmG8tdpWGu0uFp0GcbTAfLUlbTSuGROj88BY0XeUs0iqmGlEICES3uqNx7vEmdT5k_AmL436SLedE0VHcyxve5ypQ

Поскольку в этом случае мы используем для подписи алгоритм RS256, нам понадобятся публичный и приватный ключи.

-----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnzyis1ZjfNB0bBgKFMSv vkTtwlvBsaJq7S5wA+kzeVOVpVWwkWdVha4s38XM/pa/yr47av7+z3VTmvDRyAHc aT92whREFpLv9cj5lTeJSibyr/Mrm/YtjCZVWgaOYIhwrXwKLqPr/11inWsAkfIy tvHWTxZYEcXLgAXFuUuaS3uF9gEiNQwzGTU1v0FqkqTBr4B8nW3HCN47XUu0t8Y0 e+lf4s4OxQawWD79J9/5d3Ry0vbV3Am1FtGJiJvOwRsIfVChDpYStTcHTCMqtvWb V6L11BWkpzGXSW4Hv43qa+GSYOD2QU68Mb59oSk2OB+BtOLpJofmbGEGgvmwyCI9 MwIDAQAB -----END PUBLIC KEY-----
-----BEGIN RSA PRIVATE KEY----- MIIEogIBAAKCAQEAnzyis1ZjfNB0bBgKFMSvvkTtwlvBsaJq7S5wA+kzeVOVpVWw kWdVha4s38XM/pa/yr47av7+z3VTmvDRyAHcaT92whREFpLv9cj5lTeJSibyr/Mr m/YtjCZVWgaOYIhwrXwKLqPr/11inWsAkfIytvHWTxZYEcXLgAXFuUuaS3uF9gEi NQwzGTU1v0FqkqTBr4B8nW3HCN47XUu0t8Y0e+lf4s4OxQawWD79J9/5d3Ry0vbV 3Am1FtGJiJvOwRsIfVChDpYStTcHTCMqtvWbV6L11BWkpzGXSW4Hv43qa+GSYOD2 QU68Mb59oSk2OB+BtOLpJofmbGEGgvmwyCI9MwIDAQABAoIBACiARq2wkltjtcjs kFvZ7w1JAORHbEufEO1Eu27zOIlqbgyAcAl7q+/1bip4Z/x1IVES84/yTaM8p0go amMhvgry/mS8vNi1BN2SAZEnb/7xSxbflb70bX9RHLJqKnp5GZe2jexw+wyXlwaM +bclUCrh9e1ltH7IvUrRrQnFJfh+is1fRon9Co9Li0GwoN0x0byrrngU8Ak3Y6D9 D8GjQA4Elm94ST3izJv8iCOLSDBmzsPsXfcCUZfmTfZ5DbUDMbMxRnSo3nQeoKGC 0Lj9FkWcfmLcpGlSXTO+Ww1L7EGq+PT3NtRae1FZPwjddQ1/4V905kyQFLamAA5Y lSpE2wkCgYEAy1OPLQcZt4NQnQzPz2SBJqQN2P5u3vXl+zNVKP8w4eBv0vWuJJF+ hkGNnSxXQrTkvDOIUddSKOzHHgSg4nY6K02ecyT0PPm/UZvtRpWrnBjcEVtHEJNp bU9pLD5iZ0J9sbzPU/LxPmuAP2Bs8JmTn6aFRspFrP7W0s1Nmk2jsm0CgYEAyH0X +jpoqxj4efZfkUrg5GbSEhf+dZglf0tTOA5bVg8IYwtmNk/pniLG/zI7c+GlTc9B BwfMr59EzBq/eFMI7+LgXaVUsM/sS4Ry+yeK6SJx/otIMWtDfqxsLD8CPMCRvecC 2Pip4uSgrl0MOebl9XKp57GoaUWRWRHqwV4Y6h8CgYAZhI4mh4qZtnhKjY4TKDjx QYufXSdLAi9v3FxmvchDwOgn4L+PRVdMwDNms2bsL0m5uPn104EzM6w1vzz1zwKz 5pTpPI0OjgWN13Tq8+PKvm/4Ga2MjgOgPWQkslulO/oMcXbPwWC3hcRdr9tcQtn9 Imf9n2spL/6EDFId+Hp/7QKBgAqlWdiXsWckdE1Fn91/NGHsc8syKvjjk1onDcw0 NvVi5vcba9oGdElJX3e9mxqUKMrw7msJJv1MX8LWyMQC5L6YNYHDfbPF1q5L4i8j 8mRex97UVokJQRRA452V2vCO6S5ETgpnad36de3MUxHgCOX3qL382Qx9/THVmbma 3YfRAoGAUxL/Eu5yvMK8SAt/dJK6FedngcM3JEFNplmtLYVLWhkIlNRGDwkg3I5K y18Ae9n7dHVueyslrb6weq7dTkYDi3iOYRW8HRkIQh06wEdbxt0shTzAJvvCQfrB jg/3747WSsf/zBTcHihTRBdAv6OmdhV4/dD5YBfLAkLrd+mX7iE= -----END RSA PRIVATE KEY-----

Для тестов мы будем использовать сайт jwt.io (рис. 2).

Исходный JWT

Рис. 2. Исходный JWT

Как и в предыдущем примере, модифицируем токен:

header: < "typ": "JWT", "alg": "HS256" >payload:

В кодированном виде заголовок и полезная нагрузка будут выглядеть следующим образом:

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6IjEzMzciLCJ1c2VybmFtZSI6ImJpem9uZSIsImlhdCI6MTU5NDIwOTYwMCwicm9sZSI6ImFkbWluIn0

Остается только подсчитать подпись с использованием публичного ключа сервиса.

Для начала переводим ключ в hex-представление (рис. 3).

hex-представление ключа

Рис. 3. Hex-представление ключа

Затем генерируем подпись с использованием openSSL (рис. 4).

Генерация подписи для JWT

Рис. 4. Генерация подписи для JWT

Полученное значение E1R1nWNsO-H7h5WoYCBnm6c1zZy-0hu2VwpWGMVPK2g добавляем к уже имеющейся строке, и наш токен принимает следующий вид:

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6IjEzMzciLCJ1c2VybmFtZSI6ImJpem9uZSIsImlhdCI6MTU5NDIwOTYwMCwicm9sZSI6ImFkbWluIn0.E1R1nWNsO-H7h5WoYCBnm6c1zZy-0hu2VwpWGMVPK2g

Подставляем в поле secret на jwt.io наш публичный ключ, и JWT успешно проходит проверку (не забудьте поставить галочку secret base64 encoded!) (рис. 5).

Успешная проверка подписи JWT

Рис. 5. Успешная проверка подписи JWT

Для предотвращения такой атаки рекомендуется:

  • работать только с одним алгоритмом, например HS256 или RS256;
  • выбирать хорошо известные и проверенные библиотеки для работы с JWT, которые с меньшей вероятностью содержат логические ошибки в процедурах проверки токенов.

Манипуляция ключевыми идентификаторами

Стандарт RFC-7515 описывает параметр заголовка kid (Key ID, идентификатор ключа). Вместе с тем стандарт говорит о том, что формат этого поля строго не определен. Поэтому разработчики вольны интерпретировать его так, как удобно им, что зачастую приводит к различным ошибкам.

Для примера возьмем следующий заголовок JWT:

Предполагается, что для проверки токена будет использован хранящийся в БД ключ с идентификатором 1337. В случае ошибок кодирования это поле может быть уязвимо к SQL-инъекции:

В таком случае для проверки подписи ключа в качестве ключевой фразы вместо предполагаемого ключа из базы данных будет использована строка SECRET_KEY.

В следующем примере предположим, что для проверки токена будет использован ключ из файла keys/service3.key.

Если параметр не валидируется, злоумышленник сможет провести атаку Path Traversal (Directory Traversal) и вместо предполагаемого пути до файла с ключом передаст в поле kid путь до какого-либо публичного файла:

Злоумышленник может получить доступ к файлу cat.png и подписать JWT с использованием содержимого этого файла, поскольку этот файл общедоступный (например, он опубликован на одной из страниц сервиса). Сервис же, получив в поле kid путь до файла cat.png, использует его содержимое в качестве ключевого файла для проверки подписи токена (которая окажется успешной, ведь злоумышленник заранее об этом позаботился).

Рекомендация по предотвращению подобных атак простая: необходимо всегда валидировать и санитизировать полученные от пользователя данные, даже если они были получены в виде JWT.

Заключение

JSON Web Tokens — популярная и удобная технология. При правильном использовании JWT избавляет от распространенных ошибок недостаточной авторизации, позволяет просто и удобно распределить информационные потоки между сервисами, организовать единую точку входа в различные сервисы с одними и теми же учетными данными и даже повысить производительность сервиса.

Вместе с тем при неправильном использовании JWT можно подвергнуть свою систему существенным рискам, вплоть до компрометации учетных записей абсолютно всех пользователей системы.

Итак, для безопасного использования JWT следует:

  • использовать защищенное соединение при передаче токенов;
  • не передавать в токенах чувствительные пользовательские данные;
  • ограничить время жизни JWT и использовать механизм refresh tokens;
  • использовать ключевые фразы большой длины;
  • обеспечить периодическую смену ключевой фразы;
  • вести на стороне приложения белый список разрешенных алгоритмов подписи;
  • в идеальном случае работать строго с одним алгоритмом подписи;
  • выбирать хорошо известные и проверенные библиотеки для работы с JWT;
  • всегда валидировать и санитизировать полученные от пользователя данные.

BI.ZONE Cyber Polygon Platform

Тренируйте навыки киберзащиты с помощью сценариев, основанных на реальных инцидентах кибербезопасности

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *