Гайд Защищаем свой трафик, держим его в тайне. HTTP/HTTPS и TLS протоколы. Теория и пример кода.

coder of the year
Участник
Статус
Оффлайн
Регистрация
13 Мар 2019
Сообщения
885
Реакции[?]
266
Поинты[?]
4K
Я ушел из геймхакинга уже довольно давно, но до сих пор появляются темы по типу - как скрыть HTTP реквесты от хттпдебаггера.
Я надеюсь, что эта тема будет полезна новичкам, но и довольно опытные ребята в этом деле может выделят для себя что-то, а может и подправят меня.

Для начала вникнемся в теорию, что такое HTTP запрос вообще?

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

Всего существует 9 методов - GET, POST, PUT, OPTIONS, HEAD, PATCH, delete, TRACE, CONNECT.
Однако самые распространенные это GET и POST.

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

Сразу же на примере рассмотрим пример GET запроса для проверки текущей версии программы

example request:
<?php
    $actual_version = "1.0"; // это условно текущая версия, она может быть записана в вашей БД, но как пример я записал ее в переменную
 
    if (isset($_GET["version"])) {
        // версию получили
        $sender_version = $_GET["version"];
        if ($sender_version == $actual_version)
            echo "updated";
        else
            echo "outdated";
    } else {
        die("bad request");
    }
?>
Сюда можно добавить более сложные проверки, по типу сверки User-Agent, шифрования ответа, декрипта данных в параметре запроса и т.д.

Условно программа делает GET HTTP запрос к скрипту на вашем сервере example.com/check.php?version=1.0
Где после знака вопроса идут параметры запроса.
В нашем случае программа вернет нам "updated"

Это надеюсь понятно.

Сразу придется развеить некоторые мифы, а именно:
нельзя полностью скрыть HTTP запросы от анализаторов сетевого трафика по типу хттпдебаггера, вайршарка или фиддлера, даже если вы используете дополнительные методы шифрования или кодирования данных в запросах, они все равно будут видны.

Поэтому вам придётся перейти на HTTPS протокол как минимум. Это способствует тому, чтобы предотвратить перехват / просмотр данных на сервере.
Тут же сразу придется выделить несколько плюсов HTTPS, а как минимум это будет шифрование данных и аутенфикация сервера ( как минимум предотвращение атак Man-in-the-middle, а.к.а посредник ).

Раз мы заговорили про HTTPS, то рассмотрим шифронаборы ( Cipher suite ).

Что такое шифронаборы?
- Это комбинация шифров, используемых для согласования настроек безопасности во время рукопожатия SSL / TLS.

А если более подробнее, то шифронабор - это строка, которая определяет алгоритмы и правила общения клиента и сервера. Она состоит из протокола (TLS/SSL), алгоритма обмена ключами (RSA/DH/DHE/ECDH/ECDHE), аутентификации сторон (RSA/DSA/ECDSA) и протоколов шифрования потока (RC4_128/AES_256_CBC/3DES_EDE_CBC) и подписи сообщений (MD5/SHA/).
К тому же разнообразие алгоритмов на каждом этапе дает большой спектр шифронаборов.

Еще существуют эфемерные шифронаборы - это шифронаборы, которые используют временные ключи, созданные для каждой сессии. Они повышают безопасность, так как даже если ваш ключ и узнают, то хацкер не сможет расшифровать ранее зашифрованные сообщения.
К эфемерным шифронаборам относятся DHE (a.k.a Diffie-Hellman Ephemeral) и ECDHE (a.k.a Elliptic Curve Diffie-Hellman Ephemeral).

Теперь плавно перейдем к TLS.
TLS (то есть Transport Layer Security) -
Это протокол для безопасной передачи данных.
TLS и SSL используют везде, практически везде.
Например, TLS востребован при использовании онлайн-банкинга ( те самые переводы в сбере ), электронной почты или интернет-магазинов (да-да, даже тут).
TLS в первую очередь обеспечивает конфиденциальность, сверяет подлинность данных, используя шифрование и аутентификацию.
А еще, к слову TLS является преемником протокола SSL (Secure Sockets Layer).

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



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

SSL Pinning.
Что же это за чудо? Как его использовать и с чем?
SSL Pinning ( a.k.a защита канала связи ) - это внедрение SSL сертификата, который используется на сервере, в код вашего приложения.

Есть две основных причины, почему ssl pinning так необходим:
1. защита клиента от анализирования трафика
2. скрытие логики программы/лоадера/любого приложения/бота от анализа и защита от ботов.
Однако, SSL Pinning в первую очередь призван решать задачу защиты клиента.
Хотя он может косвенно повлиять на другие аспекты безопасности, это не единственный способ защитить приложение.
Но стоит понимать, что это не серебряная пуля, а лишь один из способов чтобы обезопасить программу.

Кстати, стоит напомнить , что сертификат – это такой документ, который позволяет проверить аутентичность его предъявителя (пользователя, сервиса, системы).
Он обычно содержит публичный ключ владельца, сводную информацию (имя владельца, срок действия и т.д.) и данные о том, кто именно издал этот сертификат.

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

Пример кода на C++ с использованием OpenSSL библиотеки и самым простым SSL Pinning -
Пожалуйста, авторизуйтесь для просмотра ссылки.

( самый простая и не совсем безопасная реализация, но думаю всё придельно понятно )

Ну а вообще на гите много подобных библиотек , которые поддерживают SSL Pinning и работу с сертификатом. Одной из них является всеми известная LibCurl a.k.a curl
Пример реализации SSL Pinning с библиотекой curl -
Пожалуйста, авторизуйтесь для просмотра ссылки.


Можно писать и запросы на boost asio, вместе со связкой OpenSSL для создания и отправки запросов на создание сертификатов ( благодаря openssl ), это в общем то не имеет разницы.

Но ведь еще есть и более подробные анализаторы трафика, от подробного анализа и дешифрования довольно сложно уберечься. То есть если хацкер имеет доступ к устройству, на котором выполняется приложение, и может получить доступ к сертификатам, используемым в SSL pinning, то он может расшифровать трафик. Что в таком случае делать?
Вообще, лучше использовать дополнительные способы защиты, шифрования данных. Например AES, RSA. Вам поможет и двустороннее шифрование на клиенте и сервере, ассиметричное шифрование. Однако стоит учитывать, что это может очень сильно повлиять на производительность. Кроме того необходимо реализовать шифрование и использовать надежные ключи. Как идея - использование токенов.

Использование токенов и сессий - это хороший способ обеспечения безопасности вашей приложухи.
Токен - это уникальный идентификатор, который генерируется при входе пользователя в приложение и используется для аутентификации пользователя на сервере.
Сессия - это период времени, в течение которого пользователь остается авторизованным в приложении.
Но для обеспечения безопасности с токенами и сессиями необходимо использовать надежные методы как генерации, так и их хранения. Они должны быть длинными и рандомными, то есть содержать рандомные символы при генерации ( чтобы исключить возможность брутфорса ). А еще они должны храниться в зашифрованном виде на сервере и передаваться по безопасному каналу связи.

Это поможет для защиты от атак от атак типа XSRF/CSRF (Cross-Site Request Forgery, в основном в веб приложениях). В таком случае рекомендуется использовать токены, которые генерируются на стороне сервера и передаются клиенту защищенным способом. При отправке запроса клиент должен передать этот токен, чтобы сервер мог проверить действителен ли он на самом деле. Ну и еще как пример использование дополнительных хттп хеадеров и юзер агента. Это в общем способствует предотвращению подмены запроса.

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

Я не затрагивал многие штуки, такие как тот же curl dumper ( https://yougame.biz/threads/287761/ ) , хук send/recv в приложениях и подобной темы, иначе тема вышла бы на несколько страниц. Это базовая информация с кодом, который поможет укрепить теорию.

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

credits:
-
Пожалуйста, авторизуйтесь для просмотра ссылки.
( noad )
- своя голова
- wikipedia
 
Последнее редактирование:
09-29-2022 Thu 18:48:59
Эксперт
Статус
Оффлайн
Регистрация
28 Ноя 2019
Сообщения
1,212
Реакции[?]
408
Поинты[?]
105K
MITM-атаки - тема далеко не новая, и достаточно интересная. Золотое было время, год так 2012, к примеру, когда ты условно приходил в публичные места с бесплатным Wi-Fi, подключался и сниффил трафик с помощью
Пожалуйста, авторизуйтесь для просмотра ссылки.
, арп спуфинг делает своё дело.
Как итог - куча акков вк, гугл, яндекс и всевозможных других сервисов.
Поистине легендарная утилита для MITM-атак, я бы даже сказал первая, для атак такого рода.
Ни один, думаю, дерьмовый лоадер, в котором все запросы видно в голом виде, не устоял бы против него)

P.S: эта утилита -- настоящий швейцарский нож: сканер портов, эксплойт HeartBleed (уже не особо актуально), GroupPolicy Hijacking. И конечно же, огромное количество типов MITM-атак, ведь MITM не заканчивается на простом "прослушивании" незащищенного трафика:
  • WPAD MITM
  • RDP MITM
  • SSH MITM
  • etc.
Егор - молодец, хорошо постарался, статья хорошая и удобочитаемая.
 
Забаненный
Статус
Оффлайн
Регистрация
24 Апр 2023
Сообщения
3
Реакции[?]
2
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Тема полезная для новичков, а так спасибо, актуально.
 
coder of the year
Участник
Статус
Оффлайн
Регистрация
13 Мар 2019
Сообщения
885
Реакции[?]
266
Поинты[?]
4K
>Открыл тему

> Закрыл тему как страшный сон
АХАХАХАХАХАХ, вырываешь из контекста. Хоть и звучит конечно это странно, я согласен. Я имел в виду, что буст асио можно юзать чтобы создавать и отправлять запросы на создание сертов с помощью опенссла для этого. В теме немного исправил формулировку предложения этого. Такой солюшн используют пару моих знакомых, поэтому упомянул об этом. Если не понятно, то могу привести код , чтобы ты понял , что я имел в виду.
 
Последнее редактирование:
Сверху Снизу