• XSS.stack #1 – первый литературный журнал от юзеров форума

Изучаем TLS и обходим невидимую Yandex SmartCaptch'y

Unitoshka

CD-диск
Пользователь
Регистрация
01.01.2024
Сообщения
12
Реакции
16
Для начала рассмотрим теорию и после перейдём к варианту обхода с использованием библиотеки curl_cffi на Python. Данная библиотека позволяет работать с HTTP2 и технологиями связанными с TLS

Сейчас поподробнее остановимся на этой части т.к я считаю здесь требуется теоретическое пояснение насчёт технологий связанных с TLS



# 1. TLS Fingerprint [https://fingerprint.com]


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

Юзер-Агент, Часовой пояс, Разрешение экрана и глубину цвета, Supercookies, Настройки куки, Системные шрифты, Плагины к браузеру и их версии, Журнал посещений

существует специальные сайты позволяющие посмотреть информацию которую знает о вас браузер (и фингерпринт в том числе): https://abrahamjuliot.github.io/creepjs/



# 2. TLS Handshake [ClientHello]​

Не считаю эту часть обязательной но для особо любопытных и тех кто не ознакомлен — наверно всё же следует прочитать.

TLS — это комплексный протокол безопасности, который объединяет различные процессы шифрования, проверки целостности и аутентификации, обеспечивая защиту и безопасность в интернете.


Один из таких процессов это TLS Handshake (aka TLS рукопожатие), оно необходимо для установки безопасного соединения, состоит он из этих частей:

c2e696f2-8997-4be1-8607-2260c9a10b1c.png

наглядно про этот процесс :)
  1. Client Hello: Клиент отправляет серверу сообщение, содержащее:
    Версию TLS (1.3, 1.2 и т.д)
    Список поддерживаемых «шифронаборов» (Cipher Suites, [tls.DEFAULT_CIPHERS])
    Список методов сжатия
    Расширения TLS​
  2. Server Hello: Сервер отвечает аналогичным сообщением, выбирая из предложенных клиентом опций
  3. Обмен ключами: Происходит обмен сертификатами и ключами
  4. Завершение: Стороны подтверждают параметры соединения и начинают шифрованную коммуникацию

Именно эти параметры, передаваемые на моменте Client Hello и Server Hello используются для создания фингерпринтов.



# 3. JA3 [метод создания хеш-отпечатка TLS соединения клиента]​

разбираемся в одной из технологий формирования фингерпринта


JA3 это специальная технология используемая для создания хеш-отпечатка TLS соединения клиента, разработана в 2017 году компанией "Salesforce".

Алгоритм JA3 создаёт хеш MD5 на основе следующих параметров из сообщения Client Hello:
* Версия TLS
* Поддерживаемые шифронаборы (cipher suites)
* Расширения TLS
* Эллиптические кривые
* Форматы точек эллиптических кривых

Вот как выглядит строка и её порядок: TLSVersion,Ciphers,Extensions,EllipticCurves,EllipticCurvePointFormats

Пример: 771,49196-49162-49195-52393-49161-49200-49172-49199-52392-49171-159-57-56-107-158-52394-51-50-103-22-19-157-53-61-156-47-60-10,0-23-65281-10-11-13-28,29-23-24-25,0

Результат: 32 символьная строка, например: e7d705a3286e19ea42f587b344ee6865



# 4. JA3S, JA4​

улучшение JA3 и следующее поколение идентификации

JA3S [JA3 Server] - это дополнение к JA3, которое создаёт хеш-отпечаток на основе ответа сервера (Server Hello) в процессе TLS Handshake.

JA4[+, семейство] - это новое поколение JA3/JA3S, которое представили в 2023 году. JA4 представляет из себя более комплексный подход к идентификации соединений.

Основные улучшения JA4 включают в себя:
* Учет ALPN (Application-Layer Protocol Negotiation)
* Анализ QUIC-параметров для HTTP/3 соединений

JA4 имеет несколько форматов / вариантов в семействе:
* JA4: Отпечаток клиента (улучшенная версия JA3)
* JA4S: Отпечаток сервера (улучшенная версия JA3S)
* JA4H: Опечаток по HTTP-Заголовкам

(полный список: https://github.com/FoxIO-LLC/ja4?tab=readme-ov-file#current-methods-and-implementation-details)



# 5. Вывод​

Все выше перечисленные технологии используются для вычисления реальных пользователей (ну и для шпионажа конечно же) и при правильной эксплуатации недостатков можно спокойно обойти плохо написанную защиту



# 6. Практикуемся [обходим начальный челлендж Яндекс.Капчи]​

Теории написано конечно много, но кода совсем мало, надеюсь это не скажется на качестве статьи

1. Способ через биндинг curl-impersonate: curl-cffi​

Python:
import asyncio

import curl_cffi

async def main():
    url = 'https://market.yandex.ru/yourProduct'
    async with curl_cffi.AsyncSession() as session:
        response = await session.get(url)
        print(response.text)


if __name__ == "__main__":
    asyncio.run(main())

Этот небольшой кусок кода позволяет легко обойти челлендж-капчу от Яндекса (и CF'а тоже).

Для запуска необходимо установить библиотеку curl_cffi (pip install curl_cffi, uv install curl_cffi)

работает это всё на биндингах (ffi, погуглите, кому неизвестна эта прекрасная технология) форка curl'a который называется curl-impersonate, данный софт имеет в себе поддержку ECH [Encrypted Client Hello] и подделку отпечатков Akamai.

Ссылочка на это чудо: https://github.com/lexiforest/curl-impersonate

2. Способ через костыли (прокси-сервер)​


если вы не хотите делать биндинги самостоятельно (если вы вдруг собрались использовать способ обхода капчи в других языках) то можете попробовать различные прокси-сервера для генерации JA3 и тлс фингерпринта, например эти проекты:

https://github.com/LyleMi/ja3proxy [Go]
https://github.com/Danny-Dasilva/CycleTLS [JS/Go]


запускаем сервер и отправляем запросы через прокси находящиеся на локалке на определённом порту



# 7. Конец [доп. источники]

Сильно вас благодарю, если вы дочитали до этого места.
Это моя первая статья на данном форуме, надеюсь на хороший фидбек, если что-то не устроило или показалось не полным - дополните в комментариях к треду!

Источники и интересный материал для прочтения:
https://habr.com/ru/articles/596411/ [Как мы TLS Fingerprint обходили…]
https://habr.com/ru/companies/acribia/articles/560168/ [Использование TLS fingerprinting для выявления угроз]
https://browserleaks.com/ [Какую информацию хранит твой фингерпринт]
https://habr.com/ru/companies/selectel/articles/521550/ [Отпечаток браузера: что это, как работает, нарушает ли закон и как защититься. Часть 1]
https://lwthiker.com/networks/2022/06/17/tls-fingerprinting.html [TLS fingerprinting: How it works, where it is used and how to control your signature]
https://trickster.dev/post/understanding-tls-fingerprinting/ [Understanding TLS fingerprinting]
 
Молодец что раскурил тему, давно подобным пользуюсь. Во многих антифрод системах это есть, а подобный софт с подменой я3-я4 некоторые люди по 200 бачей продают на форумах)
(лимит по лайкам, потом влеплю_)
 
Молодец что раскурил тему, давно подобным пользуюсь. Во многих-антифрод системах это есть, а подобный софт с подменой некоторые люди по 200 бачей продают на форумах)
От себя добавлю либу для питона, сам пользуюсь: https://pypi.org/project/curl-cffi/
(лимит по лайкам, потом влеплю_)
в конце про неё написано, если что
 
Полгода назад tls фингерпринты очень хорошо обходились настройками tls шифров как в этом плагине для бурпа https://github.com/PortSwigger/bypass-bot-detection
Ддос через cf вообще был на ура
Как сейчас хз, проверьте может работает
 
Curl-impersonate классный проект, успешно использую его в своих реверсах для обхода tls-fingerprint, но он давно не развивается, нет активности в репозитории.
Может есть какие-то альтернативы?
 
Curl-impersonate классный проект, успешно использую его в своих реверсах для обхода tls-fingerprint, но он давно не развивается, нет активности в репозитории.
Может есть какие-то альтернативы?
1745940771420.png

да вроде обновляется
 
Какой репозиторий смотришь? https://github.com/lwthiker/curl-impersonate
Последний релиз - год назад.
этот в curl-cffi используется
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх