coder of the year
-
Автор темы
- #1
Я ушел из геймхакинга уже довольно давно, но до сих пор появляются темы по типу - как скрыть HTTP реквесты от хттпдебаггера.
Я надеюсь, что эта тема будет полезна новичкам, но и довольно опытные ребята в этом деле может выделят для себя что-то, а может и подправят меня.
Для начала вникнемся в теорию, что такое HTTP запрос вообще?
HTTP запрос в общем понимании - это сообщение, отправляемое программой на сервер, чтобы вызвать выполнение некоторых действий, узнать нужную информацию или вовсе получить некие данные благодаря API.
Всего существует 9 методов - GET, POST, PUT, OPTIONS, HEAD, PATCH, delete, TRACE, CONNECT.
Однако самые распространенные это GET и POST.
В чём же их различие? Всё довольно просто.
GET - запрашивает данные с определенного ресурса
POST - отправляет данные на сервер для последующей их обработки
Сразу же на примере рассмотрим пример GET запроса для проверки текущей версии программы
Сюда можно добавить более сложные проверки, по типу сверки 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:
-
- своя голова
- wikipedia
Я надеюсь, что эта тема будет полезна новичкам, но и довольно опытные ребята в этом деле может выделят для себя что-то, а может и подправят меня.
Для начала вникнемся в теорию, что такое 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");
}
?>
Условно программа делает 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
Последнее редактирование: